GDI+ Perfect Illusion

  • Den Code hatte ich schon seit Monaten in der Schublade und nun ist es Zeit ihn zu veröffentlichen (hatte ich glatt vergessen). Vielleicht entwickelt sich daraus ja noch weitere Ideen...

    Danke an Ximorro für die ursprüngliche Idee ;)

    Variante1 / 2 / 3
    autoit.de/wcf/attachment/13421/ autoit.de/wcf/attachment/13422/ autoit.de/wcf/attachment/13427/

    GDI+ Perfect Illusion Variante 1:

    Spoiler anzeigen
    [autoit]


    ;coded by UEZ 2011 Build 2011-06-02
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_UseUpx=y
    #AutoIt3Wrapper_UPX_Parameters=--ultra-brute --crp-ms=999999 --all-methods --all-filters
    #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"
    #include <GUIConstantsEx.au3>
    #include <GDIplus.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $width = 800
    Global Const $width2 = $width / 2 - 50
    Global Const $height = 600
    Global Const $height2 = $height / 2 - 50
    Global Const $bs = 20
    Global Const $bs2 = $bs / 2
    Global Const $max_r = $height * 0.8

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI = GUICreate("GDI+ Perfect Illusion by UEZ 2011", $width, $height);, -1, -1, Default, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $screens = 8
    Global $screen_bitmap[$screens]
    Global $screen_context[$screens]
    Global Const $hBrush = _GDIPlus_BrushCreateSolid(0xFF404040)
    Global Const $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

    [/autoit] [autoit][/autoit] [autoit]

    Global $i, $j, $m, $r, $dir

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $screens - 1
    $screen_bitmap[$i] = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic)
    $screen_context[$i] = _GDIPlus_ImageGetGraphicsContext($screen_bitmap[$i])
    _GDIPlus_GraphicsFillRect($screen_context[$i], 0, 0, $width, $height, $hBrush)
    _GDIPlus_GraphicsSetSmoothingMode($screen_context[$i], 2)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    $dir = 1
    $i = 0
    $j = 0.05
    $m = 0
    $r = 1

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_BrushSetSolidColor($hBrush, 0xC00000FF)
    Do
    _GDIPlus_GraphicsFillEllipse($screen_context[$m], ($width2 - $bs2) - Cos(-$i) * $r, ($height2 - $bs2) - Sin(-$i) * $r, $r / 2, $r / 2, $hBrush)
    _GDIPlus_GraphicsDrawEllipse($screen_context[$m], ($width2 - $bs2) - Cos(-$i) * $r, ($height2 - $bs2) - Sin(-$i) * $r, $r / 2, $r / 2)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $screen_bitmap[$m], 0, 0, $width, $height)
    $m = Mod($m + 1, $screens)
    $i += $j
    If $r > $max_r Or $r < 1 Then $dir *= -1
    $r += (0.075 + Sin($i / 3.5) ) * $dir
    Until Not Sleep(30)

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GDIPlus_BrushDispose($hBrush)
    For $i = 0 To $screens - 1
    _GDIPlus_BitmapDispose($screen_bitmap[$i])
    _GDIPlus_GraphicsDispose($screen_context[$i])
    Next
    _GDIPlus_GraphicsDispose($hGraphic)
    GUIDelete($hGUI)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    GDI+ Perfect Illusion Variante 2:

    Spoiler anzeigen
    [autoit]


    ;coded by UEZ 2011 Build 2011-06-02
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_UseUpx=y
    #AutoIt3Wrapper_UPX_Parameters=--ultra-brute --crp-ms=999999 --all-methods --all-filters
    #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"

    [/autoit] [autoit][/autoit] [autoit]

    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>
    #include <Memory.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $width = 800
    Global Const $width2 = $width / 2 - 50
    Global Const $height = 600
    Global Const $height2 = $height / 2 - 50
    Global Const $bs = 20
    Global Const $bs2 = $bs / 2
    Global Const $max_r = $height * 0.8

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI = GUICreate("GDI+ Perfect Illusion by UEZ 2011", $width, $height)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $screens = 6
    Global $screen_bitmap[$screens]
    Global $screen_context[$screens]
    Global Const $hBrush = _GDIPlus_BrushCreateSolid(0xFF202050)
    Global Const $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    Global Const $iInterpolationMode = 7
    Global $i, $j, $m, $r, $dir

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $screens - 1
    $screen_bitmap[$i] = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic)
    $screen_context[$i] = _GDIPlus_ImageGetGraphicsContext($screen_bitmap[$i])
    _GDIPlus_GraphicsFillRect($screen_context[$i], 0, 0, $width, $height, $hBrush)
    DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $screen_context[$i], "int", $iInterpolationMode)
    Next
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    $dir = 1
    $i = 0
    $j = 0.05
    $m = 0
    $r = 1

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $hImage = Load_BMP_From_Mem(BinaryStringImage())
    Global Const $iW = _GDIPlus_ImageGetWidth($hImage)
    Global Const $iH = _GDIPlus_ImageGetHeight($hImage)
    Global Const $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW, $iH)
    Global Const $hCtx = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    Global Const $hTextureBrush = _GDIPlus_TextureCreate2($hImage, 0, 0, $iW, $iH, 0)
    _GDIPlus_GraphicsFillEllipse($hCtx, 0, 0, $iW, $iH, $hTextureBrush)
    _GDIPlus_BrushDispose($hTextureBrush)
    _GDIPlus_GraphicsDispose($hCtx)
    _GDIPlus_ImageDispose($hImage)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    Do
    _GDIPlus_GraphicsDrawImageRect($screen_context[$m], $hBitmap, ($width2 - $bs2) - Cos($i) * $r, ($height2 - $bs2) - Sin($i) * $r, $r / 2, $r / 2)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $screen_bitmap[$m], 0, 0, $width, $height)
    $m = Mod($m + 1, $screens)
    $i += $j
    If $r > $max_r Or $r < 1 Then $dir *= -1
    $r += (0.2 + Sin($i / 3.5)) * $dir

    [/autoit] [autoit][/autoit] [autoit]

    Until Not Sleep(20)

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_BitmapDispose($hBitmap)
    For $i = 0 To $screens - 1
    _GDIPlus_BitmapDispose($screen_bitmap[$i])
    _GDIPlus_GraphicsDispose($screen_context[$i])
    Next
    _GDIPlus_GraphicsDispose($hGraphic)
    GUIDelete($hGUI)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func Load_BMP_From_Mem($mem_image) ;coded by UEZ - thanks to progandy for the MemGlobalAlloc and tVARIANT lines
    Local $memBitmap, $len, $tMem, $hData, $pData, $aBitmap, $aStream, $tVARIANT, $aCall
    $memBitmap = Binary($mem_image) ;load image saved in variable (memory) and convert it to binary
    $len = BinaryLen($memBitmap) ;get length of image
    $hData = _MemGlobalAlloc($len, $GMEM_MOVEABLE) ;allocates movable memory ($GMEM_MOVEABLE = 0x0002)
    $pData = _MemGlobalLock($hData) ;translate the handle into a pointer
    $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct
    DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data
    _MemGlobalUnlock($hData) ;decrements the lock count associated with a memory object that was allocated with GMEM_MOVEABLE
    $aStream = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $pData, "int", True, "ptr*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    $aBitmap = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $aStream[3], "int*", 0) ;Creates a Bitmap object based on an IStream COM interface
    If @error Then Return SetError(@error, @extended, 0)
    $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr")
    $aCall = DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $aStream[3], "dword", 8 + 8 * @AutoItX64, _
    "dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT)) ;release memory from $hStream to avoid memory leak
    If @error Then Return SetError(@error, @extended, 0)
    $tMem = 0
    $tVARIANT = 0
    Return $aBitmap[2]
    EndFunc ;==>Load_BMP_From_Mem

    [/autoit] [autoit][/autoit] [autoit]

    Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[6]
    EndFunc ;==>_GDIPlus_BitmapCreateFromScan0

    [/autoit] [autoit][/autoit] [autoit]

    Func _GDIPlus_TextureCreate2($hImage, $nX, $nY, $nWidth, $nHeight, $iWrapMode = 0)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateTexture2", "hwnd", $hImage, "int", $iWrapMode, "float", $nX, "float", $nY, "float", $nWidth, "float", $nHeight, "int*", 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return SetError($aResult[0], 0, $aResult[7])
    EndFunc ;==>_GDIPlus_TextureCreate2

    [/autoit] [autoit][/autoit] [autoit]

    Func BinaryStringImage()
    Local _
    $BinaryString = '0x89504E470D0A1A0A0000000D49484452000001000000010008060000005C72A866000000097048597300000B1200000B1201D2DD7EFC000020004944415478DAED7D69902CD955DE5D32B3B2B6EEAEEED7EF753FADF366D768341A2D335A91D03212884080060511206C1988B009F02E23908C65106014326083ED70B0D93206041204186459129602A175642121248D469A190981E62DF3967EBDD49299F7FAC754BEB873E79C7BCFCDCAEAAEEE9737A2A2ABAAB3F63CDFF9CE77CE3D87B16635AB59CD6A56B39AD5AC6635AB59CD6A56B39AD5AC6635AB59CD6A56B39AD5AC6635AB59CD6A56B39AD5AC6635AB59CD6A56B39AD5AC6635AB59CD6A56B39AD5AC6635AB59CD6A56B39AD5AC6635AB59CD6A56B39AD5AC6635AB590BB378F3155C75BF3747EED7D3EBDAB8DEAC06009AB5F03F22E711E7BC25848885102D21C48A94724908D11542F4A5945D21442A84E870CE53C698E0FCD13FBDD69A33C60AADF54829B5A7941A1545B1AB94DA514A6D1745B1AD94BAA4941A2BA572ADF5486B9D37DF7E0300CDDA3F434F84101D2965378AA29349926CC6717C328EE313711C1F4F92E47814456B711C2F4B293B52CA4408914A2913CEB91442449C73A1B5E6FC1104D0060030CEB9D65A2BA554A1B5CE8BA2984C81605C14C55E966597F33C3F3F994CCE66597636CBB23359967D6332993C94E7F937A680B1A7B59E34'
    $BinaryString &= 'BF560300CD9A6D4552CA5E14454B49929C6AB55AA75AADD6A9344DAF69B55A4F68B55AC7E2385E8EE3B81745515B4A190921B81082092118E7FC519729809860623380C75CD75A3FEAA2942A2FBA288A22CFF3BD2CCB76B22CDB1A8FC7E7C7E3F1DF8C46A307C7E3F103E3F1F8C1C964F2409EE75B4551EC30C61AB6D00040B31C4B4829FB711C6FB45AAD1BDBEDF6CD9D4EE7E6344D6F48D3743D4DD3B5A9B1C7524A26A5BC62E8B6C19BB74D63AF0200261028A51E0308E5DFA2285851142CCFF33CCBB29DD168F4F068343A371A8DEEDBDBDBFBE27038FCE2783CFE529665678AA2B8CC1853CD4FDE00C0D54EE95B51142DA7697A4BBBDDBEBDD7EB3DADD3E9DCD26EB74FB65AAD419224ED288A9869F0A687370DDDE7F52110801664FC181B8080A0BC1880C02693C9683C1E9F1F0E870FEDEDED7D7E6767E7AF86C3E1A747A3D1E7F33CDFD65A8F9AB3A10180ABC3CD0BD18EE3F858BBDDBEBDDBEDDED1EBF59EDDED764FB5DBED8D24497A711C5F31F8D2E8216FEF33FE7903800B044C5660824151142CCB3236994C7686C3E1E9DDDDDD07767676EED9DDDDFDE47038FC4C9665E79452C3E62C6900E0C88977711CAFB4DBED3BFBFDFEF3FAFDFEF37ABDDE35ED76FB44922489E9E5216F0F797D1700D806EFA2FE180098468F01810F00EC8B0904063B980C87C3333B3B3B5FDDDEDEFEC8F6F6F64787C3E127B22CBB'
    $BinaryString &= 'D488890D001C6E152F8A56D234BDB5D7EBBD707979F9C5BD5EEFC66EB7BB9924496C7B7ADBDBFB00C015EF0B211E63F0141070E9008CB12BC64DD505301080C060CA0CF2DDDDDD87767676EEDDDADAFAD0CECECE8747A3D1E7F23CBFD49C4D0D001C9615B75AADE3DD6EF7C54B4B4B772D2F2FDFD9EBF59E94A6695A1ABDEDF14DC377C5FA14DA6F830195FABB4201571810CA064C00B08120CFF32B60301A8D863B3B3B7FB3B5B5F589CB972FBF6F7777F743E3F1F81C63AC61050D002C646CDF49D3F4C67EBF7FD7CACACA2B9797976FE9743AEB4992B0288AAE5C4C43F779FED2D029DE9F1AF7878600A1822064F810238000A0BC9DE7F995CB6432617B7B7B67B7B6B6BE70E9D2A5F76E6F6FBF7F341ADDAB94DA6BCEBA06000E7C4929FBED76FB19CBCBCBDFB2BABAFA8A7EBF7F7D9AA65DD3F04B438700C03478F3B66DFC14AF1F9AFAAB0A02BE8BCD066C10288DDDD6064C003059410904A3D168777B7BFBCB172E5C78DFD6D6D67B86C3E1A78BA2D86ECEC206000EC2F097BBDDEEB3575656BE7D3018BCACDFEF5FDB6AB512DBF03181CF17F3BB28BFCBF3FB4080AA01F88CDFC7047C69424A486082810904E3F178B2BDBDFDC0C58B17DF77E9D2A53FDEDDDDFD5451145BCD59D900C07E50FD5EB7DBBD633018BC663018BCBCDFEF9F4AD35462866F7B7DCCFBDB5E3FC4F84B832EC5BF7902402906626CC00502BE'
    $BinaryString &= '9000020313000046506C6F6FDF7FF1E2C50F5CBC78F1DDBBBBBBF728A51A46D000C05C0CBFDD6EB79F3E180C5EB3BABAFAAAA5A5A5EBD33495711CB3388E1F13E7BBE27D4CECE39C33296525E1CFC50066110143180045102C8A020405332CC074015B1FC8B2AC140C8BCB972F7FE5C2850B7F7AF1E2C5770F87C3CF341A410300B5B1FD344D6F1C0C0677AFADADBD667979F9E6344DE324499C868F193D25CD370BF5DF6F0D203414A0A40931307001C19411E45B5B5B5F387FFEFCBB2F5EBCF8AED168F425C658D19CC20D00545A711C1F5B5A5A7ACDFAFAFAEB5656566EEF743A1DD3F0CBBFA6C81745D1638CDDE5F97D8A3F64F426D5A7A6FEEA64001810D8D900574AD0A70940BA8052EA8AD19B809065D9A380606F6F6F78E9D2A5FF77EEDCB9DFBA7CF9F2BBB22C3BDF9CCD0D0084D0FD6EAFD77BC1B163C75EBFBABAFAD25EAF77ACD56A3DC6F0A1781F337EAAE197210035EDE7327C5F0D4079BF1DFBFB34005F1880A505CD10800A041808406CC00482F178CC767676CE5DB870E1830F3FFCF06FECECEC7CB8090B1A00F07E1F699A5E3B180CBE7F7D7DFDB5CBCBCB37A669CACA38DFF4F82510082198BD61A7AADAEFCA0094221F56F5775000805507DA8C0063005500C0F4FE4AA92B866F3202431FD05B5B5BF79D3B77EEF72E5EBCF88ED168743F6B3A1E3500F098405FCAE57EBFFF8AF5F5F51F5A5D5D7D6E'
    $BinaryString &= 'B7DBED9674DF8EF5EDFCBEAFA4D7A5FA43C25F48EC4F01803A43000A0050D3829820886901902660D70B4022E1643261BBBBBBBB172E5CF8D8B973E77E757B7BFBBDD32DC957FD8A9AAF80B156AB75DDDADADA0F4EBDFE35AD568BB98CDF3476C8FBCF1AF75755FF0F42039052066503CCEB4208940594DF8B79BBFC2BA57C94E1DB408B5CBAAD56EB659D4EE7D4B973E79E71FEFCF95F1D8FC7F7370CE0EA8EF5DBBD5EEFA5C78F1FFFD1B5B5B51774BBDD8E6DF890D2EFAAE7A7187E2800CC52FC43AD01800C9F1206849607870882AE1421B68F00CA10006C60EFFCF9F37F71F6ECD95FDED9D9F9B3AB790BF255CB00E2385E1B0C063F70E2C489D72F2F2FDF94A6E915AF6FD7EF63C53D55627E570830CB869F8308015C0020847894C197B7CDEB45513CEA7EEC2284B862F4E5F75214C5630AA74A3660DF0F84609D388EEF6AB7DB4F3C73E6CC6F5EBC78F1D7AFD64CC1D50800A2DD6EDFB6BEBEFE23C78F1FFFCE5EAF3748928495174CE5B7BDBF6B430FC5F86D4377D17F4C00B40DBF3C8E62FCAE96602E1028053E1F1098422064FCA531631A000602E65F1B08CCEF32CF73B0B2D2FC6DA228BAA9D56ABD314DD31BCF9D3BF72BC3E1F0B3EC2A6B55765501801022EDF57AAFD8D8D8F8176B6B6BCF69B7DB7169F8A6D26F1A3DA5A63FA4D82744F90FD9F88379FD3A4200F3BE12607CA9C0D2D031E337E3FB6947E2'
    $BinaryString &= '47DD075D38E7570CBEBC8D3182F27A0904D0FFA697411CC7AF4BD3F4FAD3A74FFFC2CECECE7B9552A306008E9ECABF32180CBE7F6363E31FADACAC3C8AF25368BF4BEDA70A7F90E1BB8CDFF6FC949D7FAE0E40B3540262713F0600361330053F53D0338DDB0504A6819BE1800D06906E02B1020B146229E50B9324593F7DFAF4132F5EBCF88EA2282E350070445692241B6B6B6BFF746363E3EFF7FBFD13AD568B95853D2EB18F1AF387C6FD2EC3C72AFF28E21F25F6AF2A02FAB20158CB30530BA0187C791D3268F3B118004021966BF394F55BDC14C7F14FC4717CF2FCF9F3BF34994C4E370070C8579AA6B71E3F7EFC0D274E9CF88E6EB7DB4F92A4B2F153453FEA4EBF2AEABF4DC57D3B0029F13F4507F0ED0C84B401D3EB9797F233D9A1800D0E2E166086022E30A87211429C88A2E887E3383E79F6ECD9B78F46A3BF6A00E09086FCDD6EF7F9274E9C78D3FAFAFA4B3A9D4E6CE7F7B11C3F96EE7379FF2A39FF5962FF901E00A11980904C80E94DA110C014FAECDB260BB00DB7BCDFBE40868F01032698BA00767ABB2F84F89E288A8E9F3973E6ADBBBBBB1F3DAAE2E0510580646969E9651B1B1B6F5E5B5BBBB3DD6E8BD2EBDB4ABF5DDE0B15FA608A7F99BEAB52F4334BFAAFEA1E802A1A808F0584760A2A8DDBBC5EBE37D3E83100803E330402983682754B068E8F8510774551B474FAF4E9B75EBE7CF903EC08F6'
    $BinaryString &= '233C7200C0394F9797975FBDB9B9F9E3ABABABB795F1BECFF3D729FA99A5BD58CACFB7EBAFEADEFFFD0E01427A0440DEDF8CE9CB3002020053E937C301F331A6E143B75DADD2110D85AFAFAF3F574AF9B34288FED6D6D61F1DB52126470A008410EDE5E5E5BB3737377F7C3018DC5C2AFDAE021F4A892FA5D26F9EA93F332B50750B701D854054EF5FDE67C6FF76CEDF3472D3D84DDDC0160031EF6F7F2F761810C284A0635757576FE39CFF1BCE79B2B5B5F5FB47294D181D21E3EFACACAC7CCFC993277F6C7979F986344D1F25F641453E3EC10F327E2CE60F69F431ABF78784BF83C802F85A85D9F1BF69D8B6F7B7A9BF4FCC833EA7EFB36160800185F91A83C1E06621C49B39E7C9A54B977EE7A86C2D8E8E88F177575656BEF7E4C9936F585959B9CE4EF361C68F193EA5D4D72EFCB1B500DBB8B1565FA1190008086C5030BDA77D229BC21D64FC66A10FA4EA431581367587D281B6E1DB866EFF35DF0366FC3E8A0F098250BC1F105EDEC0187B23632CBA74E9D26F29A5760FBBEDC8A310F30F0683EF9D7AFEEB30DAEF337ECA365F0824B05D68AE90C1174AD85A019446844A5BED634A60A01616853E062A5376B1126CEB32A5A80933643B3CF28541215D93A1FBA3285A4D92E4E62CCBB646A3D117D9211F7B1E1D72E36FADACAC7CF7E6E6E61B969696AEB58D1F13FBA8D4DF57E38F797E5FEA0F32349741D5B909'
    $BinaryString &= 'A8AE10C064133E11D0F4FC52CAC73080F27E3BD687AE438C061330EB488122C2E8B55AEB3768ADC7972E5DFA3DADF5B80180FD5FF1D2D2D2AB373737DF58C6FCF6861ED75E7EAC8D57D5525F7B822FD4E60BA2FF101050B6FF866402E69D06A40883B6F0671BBE4DF7CDDBA6F1DB2C00FB1F05E8A22822099FC8FF6ED05ABF512935DEDADAFA43C658D68400FB18F6F7FBFD576C6E6EBE653018DC9AA629335B77B9683F45F1F755FCB936FF40CF61824248ED008549B8748510717186CA3952C602622D76E18FA969B8C201572A2F840999464D11104D50628CB1288AD6A594374E2693AF4E269343D96AEC5032806EB7FBFC8D8D8D370F0683DB4ACFEFF2FA2EC377F5EDA794FBFA36FDF8C43FC880EC30008A75ABD400CC8301B8B202362B283DB6191AD82DC52016808981A1421EF4B9CCC786F4464C92A4CC0E3C4D29F526A5D4D6EEEEEE5F340C60CE2B4DD35B3736367EFAD8B163DF94A62937F7F2FB0A7D5CAA3F1406F8867A98B41F0202291FF97A43FB05605EDE953908A92DA07417F6796E97C05655E0B39FD36605F6FFA829C19062A84AB1681C3F8E31F6F8D168F4D93CCFCF360030AFA03F8E4F9C3871E22DEBEBEBDFD66EB7A392F643C65F25DF4FA5FC3EE3A7EE0FC08CDFD54034A4B6C054DF43B6179BC7DB29461F95B7D5F910800965332E10985510A4344C318EE3711C3F516BBD341C0E3F7698D283'
    $BinaryString &= '870600A4942BC78E1DFB57274E9C785DB7DBED40E5BDA165BEAE293E762D802BE6870C3974EC77C84C408C01F88E8340014AD5B9527794BA7A4A1A8ED2D094DAD6DCE7E5A1F89D62DC8119291945D1B54551C8E170F8A9C352327C2800609AEB7FFDC6C6C68FF47ABD3588F2538DDF97F233F3FB51145DF1C8BE4A40CCC86D95DFF6F214BA0F0D0D99A5B8080B0B2063F77968FB31AE5CBF4BBC33E371A8688942E3B1C7DB9B8CAAA6FF7C8F13422451145D9F65D9E5E936E2BC01807A14FF6FDDD8D8F8F1E5E5E527DB557ED0C00E8AF197713FA5F087DAEACB47EB4B03716D16820A7B2063B7C1C0070214FA8F951BFBD4753B44F0952ABBF481AAF49EC23E5C5A82ABDEC1C716AC6DD13D21C435E3F1F8C1C964F29545CF0C2C3C00A4697ADBE6E6E64FAFAEAE3E13A3FDBE4A3F3BE71F52F843A1FC90E142D41E336EAC8B8D6B131125B310220086161955E94B80814148EA0E53F06D03F5D5F6635E9C1AFBBB6A06A2283AC6397FDC7038FC749EE7A71B00A89AA38CA2B5F5F5F5371D3B76EC55699A4A4CE9A71A3F0402AEBDFE90920F19B24DE7B1FB7CA21DA609B8683CC5F8ABE6FF43043ADF269BD0FE05F6F176CEDE0E1B6C4334F7145076FFD94CC065E0588AD3BC2EA53CA9944A87C3E1471679EEC0C2028010A23D180CFEE1C6C6C60F763A9D1E16F7BB5A77633DFD42DB7CD91B7E2030C0E839A5A69FBA2538'
    $BinaryString &= '9401D49D06A418AD6B579EAB702744F57779F8102FEE3BCE55CFE0EB9D3015059F9C65D9DE6834FAB4D63A6F002040F79BB6EFFEB17EBFFF04DFA82EC8F07D937BA925BF25605449E755E9FFE79B2150350B50B5D310D548290CC0B7377F9666262EE53F44C8B31FEB6B93EEBA8F73DE16423C61341A7D79512B051712005AADD675C78F1F7FCB6030B8A3D56A71733437D6C6CB37BEAB34608AF7F7D5FCBB547C5F23108A118794DC528EDF8F102034DFEE13E8AA4C38A694F752BC38C5C0A92C414AB9A6B53E361C0E3F5614C5850600FCD47F796D6DED1FAFAFAFBFB6DD6E27D0061FAC7F1F96DF2FD379AE419EBE725FD7AEBF593C3FC5F87D1384AAC4FFBE2DBCB3840054E30F05012AB8B8E2799F119BFA0165FE810B58A67FB994F2649EE7D97038BC67D1760E2E1A00887EBFFFED274E9CF867FD7E7FDD35A813A3FB21D57EAEA21DD716E0BABAFE52438050259F12FF03C01B9C05A0D0F52A21400848F88CD925EA850043C84E411B2038E731E7FCF1E3F1F8ABE3F1F88B8B140A2C14004CA9FF4F0E06836798A21FB57B2FA591876DD8657CEFEAF31732EB8FDAFA2B84D253065D54092366D500AA32012A08841EE312E5209AEE6309D401A9BEE3A745422B5AEBC17038FC785114E71B0078AC07EA0E06831F5E5F5F7F6D9AA60934AC13EBE0E3EBE403E5E35D25BE2EC37775E0996708601B65685C1F7A3C45A9'
    $BinaryString &= 'AF9A6FAFAA035084419757A7C6FF980E40A90BF080C089C964B23B1A8D3EA9B5CE1A003056A7D379C9891327FE65BFDFDF7429FE546FEFF2D4D45E7FD40D3D21537FA8A5B9A1947E5683AFABF5F82C1B73EC2E3F21CC81120A508C17BBF88EA568059CF38473BE311C0EBF9065D9FD0D004C571CC76BC78E1DFB89D5D5D56F6AB55ADCA4FED0855AC28BF5EFF351FD90661DD4C19FB316E8CCE2C1EBCA00D42904FA8000DB1E5C350C70193CF6DC94C7DA43505DE0306501AB4551C4C3E1F0838B502074E000C0398FFBFDFEF7ADAFAFFF50A7D3E942713F65438FAB8087B2936F56E3B7EBFB43E8FFAC4659D5A36382DDAC750075EEB5C79E3F24C74F9D6BE04AE7517400ECB6D904E591B7CF3746A3D199F178FC5976C023C70E1C005AADD64DC78F1F7FF3F2F2F28D58992F65171F56C3EFDBC1E7DBCEBB1FF1BFA9C2BBF6E7530DDDE7BDABE4FE7DDEB94A0BF23A81C2A703848E37736903BE26A8E6F3DBC351A783503B5AEBC1DEDEDE478BA23877A0DADB010B7FED7EBF7F77BFDFBFCDF4F4BEF8DCB7D186126B87087175F4D27379516CCF3D949EF3D16C08584273F4D063B1F4E1BC3E57DDBD0A5DBF3555A70999FE8C9DC7E579DEEFF79FDEEFF7EF1642B4AF5A0068B55AB7AFACACDC9DA66917ABD0F379E72AC53455043457DA0E3230D7090F3DD66E8889E5E621A3B4FF42865CC58020A374BD669D9F0B0B59A0'
    $BinaryString &= 'EF9C9252A5FCD621E78F6DF494C630A62695A669776565E5EE56ABF5F4AB120084104B4B4B4BDFD5ED766FAABAF79EF2C384D6D257F1E818AD7715C460C665CF0E088DC7A9A0346B1841F1DCA6C1DBBF05C5E363CCC605C021EC20A428CBD7C8D597758280A0DBEDDEB4B4B4F41A21C4D2550700ED76FB99CBCBCBDF9624490C797F8AE1FB7AE6D545E37D22992B4F4FF5CA2E6A3DCBF65C974151FE37EB6B523E1B956D847CFFB38411AE8E499473CF0704250B4892245E5E5EFEB676BBFDCCAB0A00A494CBFD7EFFEE76BB7D1DD47B0F8AF97DFBE10F62838C6FDEBCCF93524F525FACEDBA9F62F0AEFFD7F99A55D806E5BB9CD5E8673D877CE729243C9720D06EB7AFEBF7FB774B2997AF1A0048D3F4594B4B4B2F4F9244520A6E284533750FBDF0C5A03E2AEFF2FE54CF8BE5D667ADD4A3D6E8CFEB3543D846C877E96B3936AF612814968015972549229796965E96A6E9B3AF0A0090522EF57ABDEF68B7DBA728CD354276C1B9E859882782D4F3598A65AA78E5AA31395594F4D1F279BEE62C9A4368C6C0FE2D43F59010CD8972BE424CA0DD6E5FDBEBF55E7D102C60DF01204992DBFBFDFE4BE33896BEF25D4ACBEC599B5EB84E4A576E9EEAF5428E0DF5C6D4A29C10CA3FAFD79CF5F3518FF565337CCCA6CA183497D7C798807989E358F6FBFD97264972DB9106002144A7D7EB7D6BA7D3B9164AF75194F950AF4E1D'
    $BinaryString &= '5BEDA3C4540A4D6508A19579BE029D10E3A1BE1EB5C26F5E9F2F54DC0BF9BDA8330C43D90235E36067053A9DCE75BD5EEF554288CE91058024496EEAF7FB77C5719CF836D754A1F2AEDC3C74B241C52875097355BC32A538C7A7C4CFF3F5425E7B3F5E6F96DF0C2B70F29D3F21E722354B30650171BFDFBF2B49921B8F240070CEE34EA7F3F276BB7D3D44FB7DAA2A852150D24C212041F58CA1C6486113D42DB655EBF2A9A93A6A08E07B8F753607A1FC16BE50C365DCBE346DD59A02AC80C8D002AEEF743A7771CEE323070051146DF67ABD572649D2C54A7BEB6A6851257F1EA28CFB4662F9D473AA97A4F6CF5FA410C0F7FE29DEBF4AE311AAE0489D7750474A915A45686404BABD5EEF5BA228DA386A00C0D3347D61A7D3B9C5EEC083E5F44385BC79F4B6F7DD3F8B6104B227D2F353876A84BE5E68E7DE3A3E631D7301A95B8DAB8040A88088D50ED8DDA73B9DCE2D699A7E13638C1F190090522EF77ABDBB5AADD63AA552CFD7138F82BA550A5942F2CA751AC62C747C1600A9F33175841DB3021DB56E83722EF89E27A4892B65F643794CABD55AEBF57A77ED574A705F002049925B3A9DCE9DA6F7B767DD857CB19493D4E55166DDC71EF2989094565511AD0E839FE773867CCEBABEDBD0C7F8B640539FAF4A1AD19A4ACD3B9DCE1D4992DC72240080731EB7DBED17A569FAC4D0821EEAC690D0F9763E5008F55655'
    $BinaryString &= '065AD4E595ABB4DEAACBE8ABF602ACF2DD54E9134815035DE704251CA06E00A31610A569FAA476BBFDA2FD1003E70E0052CA41B7DB7D711CC76D6AAB2C57AE1E4BDB503BD6508757867AAB7978E2595B6BCD11D4F7ED7D857EC7557EBFD0F30663A3AEB265970E60870B711CB7BBDDEE8BA59483430F00AD56EBCE344D6FA2F4BB0FC9DF8654B0CD63A805D66136B41B2EB442475A1D86E5FB4CA1DF1BF4FD87363C091185435AA9514302577D409AA637B55AAD3B0F350070CEDBED76FB7949926C62D57E14953FA4602744BDAFD323863EEF5134F2798143DD1A4968481372CE61E76CC80EC3694A70A3DD6E3F9773DE3EB4001045D1B176BBFDFC288AA2D0261C90F70EDD2EEAA3FAFBA992CFFBB929B3EB0EF23917EDFBA2A44CA90C31E49CA5960A475114B7DBED17445174ECD002409224B7A769FA647B5C36B5EA2D640E7D884015222051C3808332F283641275BD9F59C0C147FFAB0AB9A1CC20E49CF569036566204DD36B9224B9FD500200E73C4DD3F4D9711C6FBA3CBE0B1D7D681C82D0B31A6A9D86467DAEAAAFE99A5DB79FCFB11F9FB50A28CC024A21F52121456A102388E3F8449AA67770CED34307005114F5D334BD238AA2C865FCBE06901434AD4AED2151893A7D76DEB4963AE26AD6C72CDA6BCF13A0A163EB3E9F421C17B655B9B495288AE2344D9F1D4551FF3002C053D3343D65D27F4CD0F3EDC8AA'
    $BinaryString &= 'C3D8A8F3E366F56021C7871813A5D77D1DF47CBF5FDBF53DD4F11D57F99DEB3AD77C3B5131E1D00A034E4551F4D4C30600A2D56ADD1EC7F106B603CFBE0F42485FAEBECA0696AAB1B7FDB85063F21900369482FA3CD4635DF3EF0EE2B5AB7E6FAEDF22747210E55CA97A0E52DACB616DD239E72C8EE38D56AB75FBBC6C753E4F2A44BFD56A3D2D8AA2AEAB628A6AC4FBA126BBF2FB9888134A87678DC529E3AAAA18D022BD7695EF943A6874DEA11BF59CA514139597288ABAAD56EB694288FEA10180288A365BADD62D524AEECBEB5394558AF1D7599DE6F34E21A3A3AB8A6994D9F321064BA5DAD4B9F7A1AF5D97F0887DD7A1BFD9BCCE9FAA7B3FB0BA0129256FB55AB74451B4796800208EE31B9224D9A4EED4A3EEABAF434CC2064286AACBB3D061CA0CBA2A9E783F4380D0D7AEEB33FB584095DF34545B080917ABEE38356D274992CD388E6F3C2C0020E338BE398AA255576C5F653B685DC65FE76367A5C355E3E190D7AD4AC5E71502CCE333CFFB779E573860DB03040C5114AD4E01402E3C004829FBAD56EB6629651B9BE852E50BAC3A4D163B59CAE732E7BA8752D37951712A0DF71922F6DA1466E003825000AAEB33878404BE55FEF698C05B5548C4CE35EA396FB3002965BBD56A3D454AD95B780010420C9224B921B405F3ACDE9E72B26079E02AD4141B2F4DF5C2141AEE320ACAB86B1703A002828B2A5300'
    $BinaryString &= 'C80542BEB0C0077E3E46E07BFE903A903A8455CA9E02EC9824496E10420C161E00A2287A521445C75D935CE649F3670109AA41F8C4A95063A4B20E9FD1873080D0FF61DF910F8066153E7D404BD576EA4A75EE47780089E65114AD4751F4E4C30000A7A2285A73CD81AFF34BAB420F437E6C9707AE1A0BFB8438CCB0B1FF553158CA670B0D2928EF3D840550C31FCA67DBCF73A78EF3DC2E168AA2682D8AA2538B0E00491CC7D74829FBBE74DEBC3C7E9558914ABDA921012516F695CE5651C55DEC033370DFFBF23D6708E051749AAAE2E33C7ECB7909842E11100290693AB01FC7F129C65852ABC3AE39FEEFC4717C4A08213143AF23DEAFE229282724141B42026479DBF51712844C0DC2954A74691590E084BD661541AA6A2A30242CF1018F8F5950C120F477A7388DBAC3056ADD8010228AE3F81A2144472935595400684751F4446A49EF2C5EBDAA4A4EA589E649681B2EF6DC2E43840CDAF739EDC741068F29D02EF0A9AA41CC2A4452BF6F8A06E00A81A819882A422735D49855288404F3288A9E2884682BA52E2D240048291F1F45D1EA3C3AF15489174329AA6DF43E610F4B1F5535446CC312F47C54E631EB76E659409652FC43D12C42043E9748B99FE750DD2261A90348291F9FE7F9438B0A009B52CA151BB9EA8CE567090128229A1D0AD87F212640A1E02186A8B5664208345D89B187F2FB365F5329452ABA'
    $BinaryString &= 'C20CCB06308A280A19729973A70A811410A822145245CC3A438059D880694352CA1529E5C945D500441445278510BDFDA8DC0B0D01A8E000C5FBA621D8D729CA0380E200002000494441549EDF45D95D1EDF6621E6C98001930F9CCA65174061EFC53C8E229A85A62B5DDE393404A088A021E7C22C2140DDC2E1342BD09B8E0DE38C31BD5000C0398FA4942784106915FA4FDDE441A56F941FCE3464EC82197E0805C762FFD23B9B291FFB3D964C003372173840E084852F76559CEF3BA6FE26B6E7375F8F62A4216220152C7C0264E8B914FA9D84342FB134B696947283731E6BAD278B0600B194F204E73C9907FDF7558C55C9415335078C09D8277A59F3E032FEF2B1F68EC8120C4CEA5F52F8F23E9FA1436100163E609FDF0C1928E93CD7490F197F69F8F673D84CC3F5DB9AE051F76F5DA5162324A3304B18C0394FA494C71719008E87187DD51D6014E5375470823CBFCBC8300A6E0241791D327E97E25F454780B213944C03858D615A402845F6650620103041C4060F6AA8E7FBAD43CE9559C380597A2D4EEB0136EA9C18542700B48410AB5400A0082BB3FC60555463FBA2946252CAC718BEE9956DEFEF020ACCF82101B08EEDCFBE7A8390DF29644F82CB73FB7E574873805EDB66012638408C23B412912A1E869EAFB388895386B8CA396F2D2200AC082196AA7AFAD0FDDF54959FE279B01FD8A6E090A1DB460F'
    $BinaryString &= '51FF903E0275F53DA86BD59106F4A5E32834DE27E241C000010E35BD4CDDDB41610055CE79ECF984104B9CF315C6D899450380252144971A5353BEA42AE20D764C19DBDAAF5FDE6F0A722EF51F3BB1A178DDF4E4E5EDAAC67E50C050754B72486C0E312F481FF0B1089F23B041C2CE8440C0E13AA742818D1ADABA8E1142B439E7B5B507AB0D0084105DCE7952E5E4A2C48C94B80FFB9F49E56DC5DBA4E9D0FD50B6C0172743622126CC2D9AC7DF4F00A01E1FAAECBB4210C8B8A1FBED2C45C8795725840A0CB57B0B07009CF3A590010621B97A2ACA5390B70403E871988777A9FFB374C5A912CF57D501EAC8C6CC1A0284A8F6B35C426375286B41150FA9BB245D0E2E50084C39E74B8BC8003A3603A0EEABAFDAC0826290765A8B92FB37C3018AE7AF0200E66BECE768EF450280FDB8F85287AEDF17620BBECF1AD26085A22300D9A24408D15944069072CE651591858AA436AD375579D358CDDBD8FDAED783BC7DDD0050D573FBD27B58DAD04E5986640E28625528AD3F2820F09D6710F577651DA0C78430D750919A732EEB1C15562700B4A9CF17F20554A9DC3211DCE5FD43696A15003085415B0474A5016D83C4F62398F7B98A9042F406A84F621D1900EA7E80F2B890145E9DC0003187104D242424AD100644758E0CAF0B004A541255E93F3555632BEDB3E46643D34FB64143A1869D050831BEF231267051F61440'
    $BinaryString &= 'ECC035CD88D2F7AEEE5460080840BF3985CA57050C6A0E9F726E50CFE319C20061D89A5A1400D0D3E7E25401CFF5C1A1DCBB0F65ED745E1D2781EB7D40C8ED2B14A2A4FAECDD7B3EAF3F4BB8308B0E40A1B5B3840236AD860A7D288FAD934598E9430A3B856A12AA8601C6FF39ABB13D789DBB013535CF19221AD906041926E4E9427F58D373DBA183EB3D4300057D0F264370796F9FF1FB0C9C0A0E072D02BA803CD420AB1C5B0518ECEFC204251BA0A07D10D42229EAEFB16800E035429F70E42B11B5A9778876E02A36318D1FAA0084DE0364F8E67D98D7B7D57F2C13E0F3EAD47E0514EA4F39D1426B00EA14017D1E9DF27F8CE19597AA60800986A129C48012775E32ED4502006EFE0D694649514CF75345B6BD7FF963BAE83F66F854EAEFA3EE542F4ED5002030A8B299A58A065097F1FB8C1632ECFD101543320E940229E07BD7ACA65E00756B00D3F7E957567DE2DFBC8CDEA70F944542A6A787E2FAF23A85FEFBA87F6818501A2FB55B11E6F9ABB4CCAE92C60D39F1AB182B1497437A0135B3503748F8D86A28835AD81020A4C0078ABDA90CC175F260066ED26E170840D4DF27FE416000193DD4FCC3367A5718400D090E2204081502B1DF13333ECC93871AB38F9A53B20DAED7AC9259C2EA0E420B86162104509402119B16DBFF338D846AE450519059D76FFEB8E6F65E288300193FF41EEDB000A2FC580D80AF'
    $BinaryString &= '0AD0D5F8832A00FA4200BB50880A08FB1502601E1B8BF1EB008FF2F56C36E162195470B0F506AC6E853809A958340028B4D623AD75411DC28079D65051CF06842A21846DAC3ECA6F8705AEB81FDB854809017C7D00670901420DBF8A1058A716801920A4BEFB8C35B44780AB3EA16A0601CA18B86CC6B8AFD05A8FEAA801A83B04D8D35A17D08784D277BE021FEC3E57ADB74DF131B6602FD7EB622CC09701A0840036FDF7A5007D2DC131C3F7CD2308A1FF21C61F1A06847AF190FB5CCCC1950DA0804EA8A600150C41FA05624725002C9C0630D25AE7AE3C3B040494BCB02BAEAFFA7817ED848CDFA6FE54EFEF4B0586D0FF9089441803A8A308A82A0854F1FE941A7CF3AFEFF83AEA0CA84C20A47721C664804BA1B5DE5B4400D8D35A4FAA0C790C29CEC1BC3C757310C5F07D5580B6F19B1EDFF6FE98F887197D55FA5F4504F4DD3FEF3A809062205F3A90BA59870A0421C0E302215FE6816223161B186BAD870B07004AA9ED290B7814A58244376A5C6FC7CF21DE1E02016C514200D71E00AC06C01506F8A8BF69D4F698281F03B08DDA27F6559D845385FECF830184A4067D21008545846805D48C854B9BB2DED34829B5BD880C601B1A5A1812CF63693797D20F29FEB6D1CF1A02F86A0028222094FA73EDFAF3B10588F6635E7F160DA0EADE76A864DA6724BE9460080BC0EE0B0D017C59070AD898E742957D1096A3'
    $BinaryString &= '1D6BAD77161200B4D6BB98B8E7437E7B375DD54D3DBE346195102094FADB9FC5BCCF34545B0B308B8FEC9E0690B153637E6C3A900B00A0CC45C8709059770462A9C0D050A0AE10609622217BCF80EF79301D607AFF506B7D791143804B45516C57E9CB8EEDE3AFEAFD5DF7F94200130CECEBF6565D1F03288AE2316CC1E5D5A1FE05A6C163FFC3947E6CE72025EEC786A4FA8ABF7C956E21455DAEE21C976787E2718CDA534300D77D21A9C72AF6605E2F8A626B51A7038F9552E74368964BE8A3C4F53EEF6F02810F546C30300DDE362A9BA5D8866A7B69DB7343F1BF9D1AB4EFB34784B96AFCB1B982BE981F3AC6D7B8C2D58ACDA4BE50D117B52A2F745390CF3031C0F0097AA1D58754200909479452171863E3450C01B2A228CE4C3703F0903CA9690C1451CFB5F71FBB0F4A3B62D4DFF6FABEDD80AEFA7FFBBD6271BFDD9198737E8541946C0203188AC28F4D09C68CD9372390DA861BEBCD1F520E3CABD151BC78D510C0E7FD7DE263689FC2A98D658B1802644AA9B35AEB4C6B9DCCBAA9826AFC581AD0F46A76B8607B7A3B1CC0C200480BF0C5FDE66D7B7E1F5414647A7C338CC00C1B6A6D6EFE0F9AF547A90CC442005756C67E1E8C05F8F2DDE6F176284035348CFE6354DFBE0F3A3E9469D4B5C1C878FC4429751612DB172104C88AA2383D4D05262139FE50E377A50DA1D81F7A2D48F137F70350B500ECBAF95A'
    $BinaryString &= 'B67660170541E181EDFDAB8400B69068BF262504B053B150D96A48081052148455DC518440EC7A48668012F7D7B97D99508E3C2A8AE20C632C5F4400D045519C2E8A62278AA2A52AC66F6B00212100C4005C2220A4F843D57E902E501AA40B084C03766D09C64A7E6D10B0D98BFD9EEDE7C03A23BB180036221CDACF60EFA0B419964BF1F7D50560BBF87C2220740C1602F8044157A8404D4186800D254D5814C54E5114DF600BD80FA0FC00DF288A624B6B7D9292E283C4B4AA2180AFF8C7B527C08CC36D20304F609BCEFB8CDF0E01CC38BE3C164AF5419584762524E465ED4A49C85829E5C0D0E3EDEFD697A2B541C7B5D30D4A77858600544A4E291F76C5E994E70C15037DB70D00D8524A3D54A7CDD60D007FAB943A1F52FF5C55FCB30DD78C7921A3B7190066F4E5896F7A79AC5DB4CBF86D8F6BC7F2B6B007D508981EDFF6ACE6FBC2147E2876A70A81188860BBD55CA3BD7D541FA2F850B6800202BE621ECA5E02173B70690A55C5C08012E98795527FB7C800B05714C5DFCC1AFB8728FF3EB0B08DDEA4F545515C295536E97D393ACC3CF9A49457FE878500A6F197F797F7D95EDCD500C405062670D9E3C6A1F2616A0A100202A839AA1D0AF886AD5489FD7DA9408CEA97A05AFEB50DCF771F26148678F6AA210005D08AA2F8BA526A6F6101406B3DCAF3FCC1E9AEC0C8F692D4D89F3AF9078A3DEDAA3A28F6B745'
    $BinaryString &= 'ADD2C0CBFB6C03B7697DF978F338DBF8CDD7721502D9797FFB3636B9D804071B08A825BD1410C0D27D98E14361003478D3B721CC35E6DB040157BD808BE697864FDD1E8CFDAFEECD4876D8631C974F6D6BA101609CE7F9FDD38D410328C78B15C350EBFE299D7FA03E7ED08F63F6FF330D092A002A9FA764013E011213086DEF6EDEB6853B6C460054EC038120040C15581DA81D546901167ABF0B04100FF928F6E20382F23A04062182DE2C1D845CA063D9CE4E9EE7F76BAD270B0B0053EFF960511417A2281A54D908641B0396E387627F9B0D601B816CBA0F55FE419B80ECD72D81C0BC0EBD7FAC0A102AF32D9982C9066CDA6DB719333FA36DF058CA0F6B0FE66301102060DF3D26EAF90A838874D82C8E418B895CE9402C2C808CB4280A27A0542D47A6860245519C2F8AE2C1BAED751E00F0D53CCFCF2649722D75534F48FACF67FC50559FFD7A25B5B6293496F7B735004C99B7A9BBADE49BA5C4D0965FFBB3D8EFD5D6046C960231016C379F6DF0AE4A41AAE77789A5214D415D949ECA024CAFEE12EDAA6E0D0E0181AABB12CD63F23C3F5B14C5D7161E00945217F33CBF4F6BFD5CD71E7B2C0470D17FC8F86DB1CA8CCFB15E0498360115FF4025BD3EEF6F7B46DBBB9BC2A09DFAB337FAD8190FBB0AD00600EC7A68BCEF0200CA7E01D7986D57DB6EAAA1FB5800450BA07A66084C7CF506D40D4294BD095300F8D2'
    $BinaryString &= '741FC0C203C06E9EE75F504A8D84102925ED87D17F5BF5C68CDF34D0F244C0AAF24CFAEF2AFD855478A8C4D67EBF3618D8854576918F0D1A361BB1A9BFAB051875EFBF8B1950C20557F92F24BC9A8CC5FC0D296ABFCBE8439B81605EDB1506B88EF3C5FE9868E80B3780FB47799EDFAB94DA597800608CE5799EDF5B14C57929E5E342E27E97E28FD17ECCEBBB3401C8D821E32BF3F4767860D3792CF6B705444C60C3AAF8ECF767BFB6FD99A0B4A7AFE4771E00E00A11309A8FD58950CB85293BFE5CEA3DD58BBBD80065FB7195E62445519CCFF3FC8BACC676E0F3040096E7F97D799E3F14C7F1E3A83B0021AF8FFD0F336E282F6F9F64A6E1DB1ED40C05CC8C80E9796CA337DF2FA6F6BBC21E3BFE2F01CCD50A6CD10100CB0898C54F75350AC5547D281B00191FE4D54BC1CF65DCE63194CD43D44D48D025CFF36FE4797EDF3C6C752E00A0947A28CFF3CF2BA59EE5320A6A58E0DAF86383827902D89987F2C7B673FE663C5F2E934960ACC32ECEA1AAFDD8FD501310DBC0EB0000E87F215369AB32006AFD4048B75DDBD87DC741C66F1E838501B6E7F73105CA67A068024A29360DA94F1F2600D8CEB2ECAFB4D63B4AA99E2FE6A7A400A13CB79D0273C5FF98D887D5D1FBBA0151D37D1800626940BB3CD8FC8C5046A02E1190521E4C1504B166AED452E0AAADB9A8025FC8661F4C07A0E4F2A99902CFE7D9C9B2ECB375'
    $BinaryString &= '36029D3B0030C65496659FCEF3FCB410E23AAAE1DB1ED78EFD5D053F66610FD6E9C7160AED92E0D2F820EF0F1917B48780EAFD21AF6E4F1F8284C7902C000602D45163BE8A42571600EB02048980B3020046FD5DF1BBCD08CCDBBE3E001008F87481AA1B80F23C3F9D65D967E611FFCF13005851149FCFB2EC81388EAF0B29F7F5D5F243621F26EA61B4D73CD6A6F7F6F3D805375896023376D373FBBC3F9493877400A810C816317D2C002B98F20180AF10081AD64251F8311170964941D4F90194C6213E351F12076D9D20645B72793BCBB2078AA2F8EB79D9E9DC004029B59DE7F9279552DFCC398F5DCA3E160F6371BF69FC76FE1A12076D16609FE0A6D16045383E0130B4E2CF4CEB61FD00CCF7600A96D076603B84B09F2F84E6DBB501B6C1BBE63FDA3B00B14220280D88650CAA0EEDC05880AD05F8BC36F43F482F80AA05297B0D1C7A409EE7F93DF348FFCD1D00B4D6A32CCBEE298AE2B494F20994949F2FED07097E76B10FD693DDA6FCB6F7B373D52EBDC1344ADB8821E38726FFF880C4D70B901AFB878E06A7507DAA00E86B025AB51620B4DACE0E0DECE2213B04302F90178784654A3722CAAC03334D5A14C5E92CCB3E59E724A07D0300C618CBB2EC33799E7F358AA22740F13BD6E8028B63ED63A00A3D1B146C6377010A741D0B2D30A3B43DBB5DF4E3327ED3F0ED98DCA6FB904008797D2C7548317EDBFB'
    $BinaryString &= 'DBBB10A196E1D0E6A49001212EC0F0F503F06900D4B4A269FC3E63A730084A5A117A0F799E3F9865D95FCED346259BEF9A4829AF4992E4394208E96A9F6D1B962FDD05D15B48C8824E7A17C08428E8D85E7B0A9DB6BDB36D74D89659979161EF832ABAF976DF41C60955F561860D95046331B0AFACD7B5AD77D6EE40AEF000AB1B703DBE4AE190522A1B0E87EF9C4C26EF658C6587150072CE79278EE3174929977DF96D080CAA183F5670E3CB89BB8EA36CA9855A6161C7D9C6EF8AAFEDD7C77AEF61B5F6D07D218D38ED9E7B904153FAFCBB26E5B83CB5458B672A03C6F2F990F7C740C80702D4C6A4AEFBB22CFBC67038FCAF799E7FFE303300C618BB1445D1374551742DB5C88552E082ED93AF92FBA6F6CAF3E5C24380C2367E8C4EFB0674602C0002019B3E4305343648411ED9367A889ABB0C1103AC10C30ED1026CF12EA42518769FAF82902AFA61F78DC7E34F8E46A35F2EC7ED1D66009848294F2649F2BC321B1052D5E60A0FA84AB7EB7F90CA8D192325A71E0222589B2D97B8061910E4E53163B7537AD8B82F6C341764F41810B8420DECFD85000064CCAE58DD56EE31AF4DCD06F834010C80081D8B86C3E1F01D93C9E4CF1863EAB00380E29CB3388E5F248438364BFC8F095C7555BC615E194A83B98C9EB2D9C50E19A825B5180B7081804BA177A5DE5CC68FB5F9C23401ECB929C6E7D21A28FDFEA0949D8B'
    $BinaryString &= '2584D402D8F13FD66390A20318C53FF70F87C35F298AE2ABF336CEFD0000A6B5BE2C84B8358EE3DB7CF13EA6B463B729829D8FA653C5C390345968AA0CD210A0D6DA3E4FEB6202BEF81FD301A0BEFB2EEFEF02A52A2DB67CEDBA295D827D5A401510F06D140A0D03A6173D1C0EFFF7783C7E87D67A745400602C84E8C471FC422144D797D7F6E5D5AB14B9F8E83B65330CE578C8BBDB9E1F1BBDED1ABEE19BB88B8100347999A201D8DE19335E4C038080C7A5154039788825F82AFE202640A9E0C3B4825016406D40E260320F0F87C3FF9C65D9A7F6C33623B63F4B6759F6E759967D5E4AF9625703504A818B99EBC7E2582CEF8F550862A2A05D2568B7F9368FB72B07212661572D62397BDF3C401723B2EB1BB0F783F5288080C99572A44C12F6A522A1635CE102045E58C51F24D6D905405085A00B105C350214D680015A96655FC8B2ECCF598DD37F0E9C014CD74808B11EC7F11531907242FBE27EACD2CD35DDD697EAF3C5FF2E03A24CCD750DD87065045CA9BFD02A3C6A4F7E0A6DC73E13A5973F75E79C6F5FBFAF81075697EF9A241C3A5CD40E2B203DC0D3977077381CFE5A96651F98B7F87710005030C686D3306003ABA8A318BF4DA3A93BDB5C94DB574A4BD502A03A004C70F3A9FE55FAEF612100B5F126043094102074534E685C8F89862E26E0EB0F600E13F101806B80884B5BF0150999973CCFBF301C0E'
    $BinaryString &= '7FB1288ABFDB2FA3DC4F00605AEB2D21C4E3E238BE83732EA9F17F15E3774DC6B11F4FF1EE21B97F57FC4F4DFB519B66F840C00528D888AF2A83397D75EDBE5C3F961170650B6C91D2370D182AF4318DD4A7E8538B7C3081D153A23C190E87BF351E8FFF609E957F070A008CB18C739E4551F43C21C43A64F83E437719BF1DB7BB8C1F1B9E611F03010526E2F9EA0630A00949F961C6EB8BAD67C90250FBDA41DE38A4E0C6B507805A9B605FB7C300F3F1BEA220DF18311F08841421E579FEE5D168F44B45517C653F0D72BF018069AD2F0921AE89E3F8998C31E12A047229FD2E55DFE7FD5DC542B6F1438003C5E9AEE9392EEF4B29FEF1D5F987787F57AAAC4A0CEFCBF953CA7C7D3DF47C9B765CEF2DA409681516E0D3067C25C2D3E38AD168F4CEF178FCDB5AEBF151078031636C1245D1F385106BD442A0901C3D54FFEF2BBA71C5F7D8861FA8ED1556EDE72BFEA1EA062E63C55271A1022075269F4B900B31785F08E0120E438C3C447C0CE91C4CC9F9BB749169E1CFBFCFF3FCDEFDB6C7881DC0CAF3FC5393C9E4FD52CA534A29890DF274B5037319BFD91403D20F6C2031270099066A371029EF330781423DFFCC411F8F52418D8EB894166258EA0FCA98F80AA37CA1930D783E7602015DA858E9AB92A48C0883C000D30DA8F5019890073514A1029583D11493C9E4FD799E7FEA206C511EC48B6AADC75AEB511CC7'
    $BinaryString &= 'CF15421CC30C02AB00A414FC60EDC45C2733A433F834006A89AD4BE1F7C5FABE2C01D590B0F733CBC86A42534B52479FD03E7A1813C08A8A308611CA02A8054294412353A7F0E5BDBDBDB7174571EF41D8E2813080290BB8673299FC8910E25A2144644FE985043D9FF19BC33CEAF2FEE67C01FBBAD98FD0F4FA5063539311601EDF0498905160BEE2A3AA7B2528D98E905425F536643858BA8F2206D6CD027C65C2500310FBF1D3F7964D26933F3928EF7F600C60BA265AEBED288AEE14429CC03CB14DAD29EABF2B9B80C5D9907151BCBFAF5F1EA548C8976EAC4AAF5D0CA00ACDA67AB6908E3C14AF49DD5CE3CA0450BBF8F8BCBE8B05B8E60A40EF759AF77F5B5114F71F9411460708002CCFF3CF4C2693774B29AF154274A106A0768F7E4C03C06607D86081B5F8B2BD3FE4F1EDEBF6086FF3B5ED5E8190F7A7340EA5EA0107C500A8C0140A4EAE4E43BEBD041416E0327A7BC230D45BB06AA8627C86DDC964F2AE3CCF3F73903678900C8031C672ADF5B9288AEE10423C01A2EBD4BEF65806C0366AAAF8159AFFF765135C6DC2A8B5F5AEFF1F1403A054DD8594C3521986CBB352B4001723C08CDF950970A50BA1D83FCFF37B46A3D1CF2BA51EBA9A018029A52E72CEA3288A9EC339EF506A015C2A3694C7871E871919567054A572D027E2F904405F1C5D35CEAE32838F5AE013DA8F2F64EFBCAFF577280BA0A4FBEC'
    $BinaryString &= '2222EA70506C67E2F4BD3C3C1A8DFEC36432793FDBA79AFF85058047BE0FF5A094F22629E55318631C33584AFE1F6303584EBF8AF2EF031117CB08F5E621C65F97E1CFC2005C157E55B6CB86680DA12CC0351F1062011411D03739486BADB22CFB5FA3D1E8EDF36EF77558008069AD875AEB9D288AEEE09C1F73517B1F2084787F7BE34E1DDEDF45B95D6940DFF3F8984168AE3DD4E8A97DF74243839089BA146009610194A21E33F6A7F60E70A5478BA2B86F381CFEBBA2283EB708B6B71000303D394F73CE0751143D8B319640864B6DDB8D95ECFAC205E87F54EF8F796C574F3E4A4E7F5E59807932008A8AEF8BFF43076E5258809D2EF4D17AF3989072624715E0EE6834FAD5C964F23B6C1F37FC1C0A00608C655AEBBF8DA2E83621C429DF400BDB785D7BF8A13A7D4C2BC03AF7F8BC3FB5ACD89543AF0A02140650653350550630EB745C6A5BAF2A4541A11B94EC2A407BA30F366A0C11FE3E3C1A8D7E6E5EA3BE0F3B0030ADF525ADF5288AA26773CE5720AF0EED1AA434F970ED0B803A08558DFD7D990097C7AF5207306F1610DA8A9B220052EBF4A9E3BFABB20057DC6EE7F4A91D89A1CF3D7DED0787C3E1CFE779FE11B64FDD7E0E1D0030C6B452EAEB42888194F2198CB1D827F4D94540A68163DB71A154A1CBFB538C9DE27D5DD9802A0C20241340DDF5170A04214659B5F9A78F41F800A50A0B7031012C2DE8'
    $BinaryString &= 'F80EF72693C9AF8FC7E3FFC6181B2D92C12D1A0030C6D85829F53529E5538510D732C6B88FD6636942CC80B1D87F16EF4F9D0614524E5B97F1EF571A90BA232F440CA45404FAA8B72F1D08F50B08193E8ADD9E7EEF3ACFF30F8E46A39F39E89CFF6101803214B81045D133EDAC40D58D42AEFDFE3EEFEF2BFA09C90284160055B9EF2045C02AA93FD7F6626A6F00DF7387B0004A7A93F2DD4C5FF3BEE170F8D63CCF3FB188B6B690003005CEBF638C2551143D8B73DEA66602206DC0D71B802AFA51BAF550E27FDF7D3EC33D4C22A0AF4496B20B305410A4B000DFD04F8815B8660920DFF5C5F178FCCB5996FDEEA2A8FE870500CAACC0BD4288C70B216EC5DE2B65F8A70B1C28B49FE2FD7D06EB028C1031EF308980D4DEFCBE0A414AA38D5016608703D469C3585F00E037CFB22C7BE76432799B52EAF2A21AD92203405920F47529E5AD4288278518B52BEFEFCBF5D7E9FDA9625FDD1980BAE87FD5419CD4C7FA4A83E7CD025CB304A9D38521C02F8AE2A3A3D1E8A78AA27860916D6CA10160FA439DD55A9F8FA2E8E9BE2AC11020A080401DDE3FB4F1C7BC3200A1801012EFCE9209F001471D2C80D22FC0270242FBF91D3B19EF1D8D466FCDF37CDF067C1C590098EA015FE39C6B21C4ED8CB11E66C8AE70C035E46316EFEF0B177C543EA48C773F3300756502425382BE0D4055320221FD027C39FEF2FBC4AE6BADCF4C'
    $BinaryString &= '26935FCCB2EC9D8B1AF71F3600608CB15C29751FE7BC2FA5BC8D19A5C22E2D803AD29B1A2A500A7E28064C65153E316F96D8DFFE7F685BB0AA4A7AD5A21EEAD8702CC6B7BD3D35F687C203EC37668C6D6759F66B93C9E43F69AD770E83611D1600605AEB91D6FA739CF3C74B296F76BD77AA2048A915F08976A11E9BDAD7AFAA08781021C02CBB02A9ADBA421A7060F13FA53E21A497A1751E645996FDFE6432F929A5D4F9C36257870600A627F0AE52EA7E21C4F59CF353659110A4DE5799095887E7F7A9FD2102DE2C22E0BC42805944C0AA1581BECD465598003656CC373A1C19C1AE8AA2F8B3F178FC6F175DF43BD40030FDC1CE6AADBF2684B85908F1045FF18FB951880A0898A18778FE59E37F4A38503504C0FE576757A059CA81A98D40A84CC0E7E121FA0F0D3EC1C4DDA2283E3E1E8FFF7551149F3A6CF674E800608ABE7FCB187B288AA25B38E71B94541C35248042009B2560C64DB91F33F2909A82791601CD734760087084540AFA5A8FD92C609636E8E6657A8E7C763C1EBF25CFF30F2DBAE27F6400609A19F8AAD6FA6121C45339E7EB148AEE12FB7C62DC2C461FDAD4A36AFC5F7706601EC540BE987D16A3A7CE24B4A9BFA7838FEBB7F8C26432796B9EE7EF618CE587D1900E2B004C415D7D853176514AF914BB46C0D5B21B9BE507DD86A6FC52A6E6503A01CD33FE3F881060161DC0D71988A203B85A7F'
    $BinaryString &= '61A3CE5CAF0DA5F98CDFEEBEC964F2B35996FD81D67A72588DE8300300638C154AA9FB18633B51143D8531B6EADB9507A008BA6D18A3FE545A4FA1EE94E7A8A21DCC633760D58AC0D0E11C4EB9076300000A384944415494EEBAA1138BA078DE2CE7A57C1FC67970FF6432795B9665BFBBDFC33C1B00806B04BEA4B5DE9152DEC4185B7529FC5431D027F8F90C3E44440C0181C31002840EEAA40E05A1A4063106017D17D828725BE5B77ECBAF4C2693B76759F6DB5AEBE161379EA300008C319629A5BEC818DB1242DCC4395F836A027C068A7978AA77A0CE0598C57357AD03A082425D9980506A1FBA17C057264C51F129138BADDFED4B5996BD2DCBB2FFA9B5DE3B0A86735400C00481F35326B04E69D281EDFE731D0BED2508290CC2420DAAD1871AFFBC428059A93F9535604CA1F4D476AC4E317CD7B1F6F73BFDBDBF9865D9CF6659F6CEA3E0F9AF384876C416E73C8DE3F8DBE338FE09CEF96D949983E6FDE6482FFBF8B2ED986FC8A76FE457D571E036A3F1F546A83A12CC952275E92454013304C0A8694DD39821210F020F0A932B537D5996FD5C96657FA4B51E1D257B91ECE8ADBC288A2F33C61E10429C12423C1E02BA90EEBD5028E14A15529EAF4EC3A96A34B3D400D45113109273A76C05C6147EEA2E3E2003A494521FCFB2EC27B32CFB53C6D8E4C8394C7674978CA2E8794992BC8973FE12C6580C0D0081'
    $BinaryString &= '3CB7C9066C66607A066CE027E4E5ED63A1D79FD5F3CF8305CCD21A2D04C8ECFB7CD41C1A276EBE3656B64B09AFA6DF59A6B5FEBF93C9E467A69D7CD5513492A30C008FA08094B7C671FC0629E57732C67A9047F701C1F4791E35689442EFA1E731BB17579D06EC33FC901E893E4654379BF1D546D839772AFD37274BDB937C7D860F18FF7651147F9465D9DB1665824F0300332C21C4669224FF444AF9F718631BD0FE009711631E5F6BCDA494A841632C605EC6EF9A985C97F7AF8301848080CBE8197B64728F2DC4523C3E54FA3DFD9ECE1445F1DF2793C92F2ED2008F060066170757E2387E5D14453FCC18BB09AAF8838CD136608801D814DF068CBA8C3FC4EBD7250052BCFF2CF4DF07029041634CA164009E3DFB601A78FA7DDD9BE7F97FC9B2EC1D5AEB4B57855DB0AB6871CE5329E52BE338FEE79CF3E798BA00160E60C65982800908E66DCCD06D20A862FC94FBE7C500282DCEAA6A00B6E143B1BEE9EDCDDB58E8E07A2D2BDEFF789665BF5014C57B8F9AD2DF0080151148296F8BE3F8478410DFC9181BB82604FBC20017F5871EEF621A3EC33E4C0C8002083E2660CF7CA4345381E83FD6027EFA1D5D544AFD619665BF5214C5678FAAD8D700C0637581B5288A7E208AA27FC018BBD1410BD1BF36C5771D1F42F7A92040D501E6C50028E5CE3EAFEF0B0BB063ED1081C23A80EFF1DE3CCF7F33CFF35F3F4C5D7C'
    $BinaryString &= '1A00A82F24684B295F1AC7F18F32C65EC018EB406CC0E581A1D8DF0E0DECB0007A8EF2187B5E81CBB3436CC5FC1F755E820F047CE3D37D9D98EC2E4B50AC6E3FDEA6F7100B808C1F0313EBFB1C32C63E9C65D97F2C8AE28347A5ACB70180EA6CE0BA388E7F5008F1DD8CB1531436406106182850D80536C0D417264040601B01C5EB63F31529F312EDFB423A2D87183B655C3B00E00F2AA57E2FCBB25F9B6E27BFAA976CCC9F31ADF505A5D42719635FE39C0F38E72738E7094504C34EC8D2C3416062D7A1437FB1931F32044C11B7E3E5AAFB0220451EEBB7070972F6FE7CD75F684390CBF85D466F8567BB5AEB0F1745F1F35996FDA6D6FAA1E6CC6F180070AE8853711C7FBF10E2B58CB11BB4D6BC8A3EE062002E26607A723324B0454568B4D92C9E7F1626600B75F675D3AB63466B86051803A812E773CE3563ECBEA9D77F8752EA7E76085B773500B0BFDA405708F182288A5E2F847889D6DAB9B3905AAC630B7C101098F7D9C64D0101ECB543FB26BA46AC8718BF9DE2B39FD706079FE1533CBE61FCE794521FCCF3FC3794527FA1B5DE6DCEEE060042E8C03129E56BA494DFC7187B862D12BA0C0E13112191CF347A080020A3348FB701C8F7BE4218808B0D98AF0D19B77DDD3C06F3F4BE56ECAEF76500EC1E63EC2F8BA2F81F4551BC5B29F5707336370050754552CAEB8510DF2DA5BC9B3176B3D63AA2308210F1'
    $BinaryString &= '0EAA1B703103FB7FD07363F4DFD7DECCF578C8F8218D030303CCC87DF13DD1E3678CB17B8BA2789752EA5D45517C89315634A770030075AC8E94F2E952CAEF1242BC8A3176BDD65A52BA0B510B78B0222408186C40808EF1010135FEB7FF67EB0D765F455F38E04B1BFA0C1E30FC8231F665A5D49F1645F1074551FC257B24D5D7AC06006AD707FA52CA674B295FC3397F99D6FA5AADB5B4E3571708B86E87C4F9D01CC4D0612794F7EA0300BB76C2A70FF80C9FE2EDA7D70BCEF9FD5AEB0F1445F1EEA2283E795866F2350070F88160594AF92C21C4AB39E72F678C9D628C25F6DE74EC24868A745C853C585D00D6E30033266A1D80EFB97CBA00761B33764A6B36A3147BC218BB5F6BFD01A5D41F1745718FD67AAB392B1B003808205812423C5D4AF9AD9CF3574C43836E498D291E2DF43E97E20FBD0EE535A8350FAE89499432612A2B81365071CE7719635FD65AFF9FA228DEA394FA8CD6FA7273163600B00840D0E19CDF24A57CB910E2958CB1A7B0471A93F2904EC4AE125ED77E7F4A9C0F897994FF61FA00B5AD5A8897B762FBF27D9D658C7D5129F59EA2283EA0B5BEF76A2EDF6D0060B1572C84382E8478B110E22ECEF99D8CB1276AADDB94C94221465F358EAFB27C861B02062E56625C868CB1AF69AD3FA9947A9F52EA434AA9B38CB1AC39C51A00382CAC60450871AB10E2859CF36F668CDDC0183BA9B58E4A'
    $BinaryString &= 'E3A03416F5D1F0BA8DBD0A2850BDBBFD9E2D512F638C9D668CDDABB5FE9052EAC34AA9CF5D2DCD391A0038BA2B1142AC70CEEF14423C8F73FE7CC6D8358CB1E35AEBA43426533308F5C2FB0D02B3BC176BEB74C6183BC3187B406BFD11A5D4C7B4D69F504A5D6247B00B6F03000D2B6873CE8F71CE6FE79CDF218478367B2483B0598A87BEF1E287E033A2D47E7A7B67EAE91F504ADDA3B5BE476BFD69ADF5C34769E8460300CDF2AD9473DE1742DCC2397F06E7FC699CF35B18639B8CB135AD75EA1B28BA88460F74411A31C6CE33C61ED25A7F5E6BFD59ADF56794527F3D55F1C7CDA9D000C0D5BE04E7BCCF39DFE09CDF2884B89931763363EC06CEF9FA1410FA8CB188BA236EDEC68EFCCDA6E9BAF35AEBB38CB1FB18635F980E70BD576B7D5A6BBDCDAEB2D65B0D00342B7449CE798F73BEC218BB4608718A737E8A31F664C6D8131963C71863CB8CB11E63AC3D05068E3184AABB01110FAFD92335F67B8CB11DC6D81663EC61C6D8D719630F6AAD1F504A3D388DEBB7A6D57979F3933600D0ACD95632AD37E832C64E72CE3739E79B8CB10DCEF971C6D8F129302C4D41A1C5184B196309632C628F348011C6EFCED9A3F7C6EBA967CEA77FC78CB1D1F4EF1E63ECF294CA9F9D7AF7335AEB6F4C9B6B7C436BBD3BCDCF37E25D0300CDDAC71571CE53C6583C058915C6589F73DE9F32840EE7BCCD18EB4C41415AE7809E'
    $BinaryString &= 'FECD4B639FB6C6DE658CED4C29FBF6341D37618C4DB4D613D6E4E41B0068D6A1FBBD7DBFB9664DC79C6635AB59CD6A56B39AD5AC6635AB59CD6A56B39AD5AC6635AB59CD6A56B39AD5AC6635AB59CD6A56B39AD5AC6635AB59CD6A56B39AD5AC6635AB59CD6A56B39AD5AC6635AB59CD6A56B39AD5AC6635AB59CD6A56B39AD5AC6635AB59CDDAFFF5FF0171D7EFA1DC5E7B9F0000000049454E44AE426082'
    Return Binary($BinaryString)
    EndFunc ;==>BinaryStringImage

    [/autoit]

    GDI+ Perfect Illusion Variante 3 (GDIp.au3 wird dazu benötigt!):

    Spoiler anzeigen
    [autoit]


    ;coded by UEZ 2011 Build 2011-06-04
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_UseUpx=y
    #AutoIt3Wrapper_UPX_Parameters=--ultra-brute --crp-ms=999999 --all-methods --all-filters
    #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"
    #include <GUIConstantsEx.au3>
    #include <GDIp.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global Const $width = 800
    Global Const $width2 = $width / 2 - 100
    Global Const $height = 600
    Global Const $height2 = $height / 2 - 100
    Global Const $bs = 20
    Global Const $bs2 = $bs / 2
    Global Const $max_r = $height * 0.7

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI = GUICreate("GDI+ Perfect Illusion by UEZ 2011", $width, $height);, -1, -1, Default, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $screens = 8
    Global $screen_bitmap[$screens]
    Global $screen_context[$screens]
    Global Const $hBrush_bg = _GDIPlus_BrushCreateSolid(0xFF101020)
    Global Const $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $iInterpolationMode = 7
    Global $i, $j, $m, $r, $dir, $red, $green, $blue, $z = 0

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $screens - 1
    $screen_bitmap[$i] = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic)
    $screen_context[$i] = _GDIPlus_ImageGetGraphicsContext($screen_bitmap[$i])
    _GDIPlus_GraphicsFillRect($screen_context[$i], 0, 0, $width, $height, $hBrush_bg)
    DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "handle", $screen_context[$i], "int", $iInterpolationMode)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $iColor1 = 0xFFFFFFFF
    Global $hPath, $hBrush, $aColor[2], $iColor2, $hBmp
    $aColor[0] = 1

    [/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

    [/autoit] [autoit][/autoit] [autoit]

    $dir = 1
    $i = 0
    $j = 0.05
    $m = 0
    $r = 1

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $red = Hex(((Sin(1 * $z / 1) + 1) / 2) * 0xFF, 2)
    $green = Hex(((Sin(2 * $z / 1) + 1) / 2) * 0xFF, 2)
    $blue = Hex(((Sin(3 * $z / 1) + 1) / 2) * 0xFF, 2)
    $z += 0.01
    $hBmp = CreateGlowingBall($hGraphic, Min($r, 128), $iColor1, "0xB0" & $red & $green & $blue)
    _GDIPlus_GraphicsDrawImageRect($screen_context[$m], $hBmp, ($width2 - $bs2) - Cos(-$i) * $r, ($height2 - $bs2) - Sin(-$i) * $r, $r, $r)
    _GDIPlus_BitmapDispose($hBmp)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $screen_bitmap[$m], 0, 0, $width, $height)
    $m = Mod($m + 1, $screens)
    $i += $j
    If $r > $max_r Or $r < 1 Then $dir *= -1
    $r += (0.075 + Sin($i / 3.5) ) * $dir
    Until Not Sleep(20)

    [/autoit] [autoit][/autoit] [autoit]

    Func CreateGlowingBall($hGraphics, $iLS, $iColor1 = 0xFFFFFFFF, $iColor2 = 0xFF00FF00) ; thanks to Eukalyptus for this function ;)
    Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iLS * 2, $iLS * 2, $hGraphics)
    Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hContext, 2)

    [/autoit] [autoit][/autoit] [autoit]

    $hPath = _GDIPlus_PathCreate()
    _GDIPlus_PathAddEllipse($hPath, 0, 0, $iLS * 2, $iLS * 2)
    $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)
    _GDIPlus_PathBrushSetSigmaBlend($hBrush, 0.4, 0.45)
    _GDIPlus_PathBrushSetCenterColor($hBrush, $iColor2)
    Local $aColor[2] = [1, BitAND($iColor1, 0x00FFFFFF)]
    _GDIPlus_PathBrushSetSurroundColorsWithCount($hBrush, $aColor)
    _GDIPlus_PathDispose($hPath)
    _GDIPlus_GraphicsFillEllipse($hContext, 0, 0, $iLS * 2, $iLS * 2, $hBrush)
    _GDIPlus_BrushDispose($hBrush)

    [/autoit] [autoit][/autoit] [autoit]

    $hPath = _GDIPlus_PathCreate()
    _GDIPlus_PathAddEllipse($hPath, $iLS / 2, $iLS / 2, $iLS, $iLS)
    $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)
    _GDIPlus_PathBrushSetSigmaBlend($hBrush, 1, 0.95)
    _GDIPlus_PathBrushSetGammaCorrection($hBrush, True)
    _GDIPlus_PathBrushSetCenterPoint($hBrush, $iLS, $iLS)
    _GDIPlus_PathBrushSetCenterColor($hBrush, $iColor1)
    Local $aColor[2] = [1, $iColor2]
    _GDIPlus_PathBrushSetSurroundColorsWithCount($hBrush, $aColor)
    _GDIPlus_PathDispose($hPath)
    _GDIPlus_GraphicsFillEllipse($hContext, $iLS / 2, $iLS / 2, $iLS, $iLS, $hBrush)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hContext)

    [/autoit] [autoit][/autoit] [autoit]

    Return $hBitmap
    EndFunc ;==>CreateGlowingBall

    [/autoit] [autoit][/autoit] [autoit]

    Func Min($a, $b)
    If $a > $b Then Return $b
    Return $a
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_BrushDispose($hBrush_bg)
    For $i = 0 To $screens - 1
    _GDIPlus_BitmapDispose($screen_bitmap[$i])
    _GDIPlus_GraphicsDispose($screen_context[$i])
    Next
    _GDIPlus_GraphicsDispose($hGraphic)
    GUIDelete($hGUI)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]


    Viel Spaß und Gruß,
    UEZ

  • Das dritte ist das bisher beste. Wenn du die Kugeln gleich in der richtigen Größe erstellst läuft die Animation besser ;)

    [autoit]

    $hBmp = CreateGlowingBall($hGraphic, $r, $iColor1, _Col(0xB0, $red, $green, $blue))

    [/autoit]
  • Danke für euer Feedback!

    eukalyptus: schön vom GDI+ Meister das zu hören :D

    @progandy: "good catch" - ansonsten muss die CPU mehr unnötig rechnen bei kleinem r :thumbup:
    Bei großem r ist das leider kontra produktiv, also Min(r, 128 ).

    Die Varianten sind so eine Art Historie, wie sich das Ganze entwickelt hat...

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    2 Mal editiert, zuletzt von UEZ (4. Juni 2011 um 17:57)