Jump to content

Looking for a nice About window with credits area


Recommended Posts

9 hours ago, Werty said:

Maybe something like this instead of text, still both the au3 and pspad logos.

You are really good! B) I probably would have wasted a lot of time to realize in the end that text in an icon is no good.

I love your icons! :guitar: The only "problem" that remains is choosing between the two. :think: With the first icon, I thought, "This is it!" With the second icon, I thought, "That's it, too!" ... Hmm, ... the second one would express the order in the name: PSPad=>4=>AutoIt3. But the first icon is probably better to recognize, if it is displayed very small in Explorer, for example.

Wow, now I have not only 1 icon, but even 2! Thanks a lot for your good work! :thumbsup:

Link to comment
Share on other sites

1 hour ago, Zedna said:

Here is my old example with simple hyperlinks in About window

  Your code was one of the two I found, as described above. 👍 Here is your code and here is MrCreatoR's code. Both I found on last Sunday and gave both a "Like", because after long unsuccessful search in the German and in the English forum were these the only hits!

Your and MrCreatoR's code example has brought me in the right direction as far as LinkLabels are concerned. Without your codes I would have searched for a long time to find an approach!

Thanks a lot for your code! :)

Link to comment
Share on other sites

Och, no problem, I could have done that too! 😁 Just kidding! I would never have been able to do that.

I'm on my knees to your graphical skills. This is a brilliant code with absolutely cool effect. At the end it says: "Press ESC to exit" - But I don't want to exit at all.  I'm sitting in front of it like in front of an aquarium, waiting to see if anything else comes. 😳 :)

Really well done! Thanks for posting!

Link to comment
Share on other sites

6 hours ago, Professor_Bernd said:

Wow, now I have not only 1 icon, but even 2!

3 !

It was just a quick mock-up, with a little more effort...

pspad4au3-5-resized.png.821361371f8bcbb58411d3f61abc7544.png

...there the pen is dominating, it's got a 4, the au3 logo, woven/braided together as one, and is "read" from left to right.

Though again, now it has so much detail that it doesnt look good as Icon, at least not the smallest, as seen here (128x128, 64x64, 32x32, 16x16)

pspad4au3-5-all.png.9e946d88b2c8ad7cb5f57bbe405caa12.png

But it's awesome as a logo, if I may say so myself :)

Some guy's script + some other guy's script = my script!

Link to comment
Share on other sites

Wow, I am very impressed with your work! The third logo is also really good and it is good to interpret as you described:

1 hour ago, Werty said:

...there the pen is dominating, it's got a 4, the au3 logo, woven/braided together as one, and is "read" from left to right.

As a small icon it is maybe not so suitable, but for example on the PSPad4AutoIt3 forum page you can use it well. So you could use a mixture of the logos in different places, which I'm sure would look really good.

But the second one is also very clever. There you see a fountain pen with AutoIt in it, sort of symbolizing the writing with PSPad, where AutoIt comes out.

And my favorite is the first logo! 💘 Everything in it that is needed, but not cluttered.

Can you create the originals as icons and send them to me (PN) or upload them here? As you prefer. As I said, artistic isn't really my thing, so I don't know how much work it will be. If it is a lot of work, I would be happy with the first logo already.

Prof Bernd. :graduated:

Link to comment
Share on other sites

I dont have any software that can save as .ico file, I use an ancient version of PaintShopPro from the "JASC" times, which doesnt support it, but just take the png and upload it to an online converter, google "png to icon online converter" and tons pops up,

Some guy's script + some other guy's script = my script!

Link to comment
Share on other sites

The following results can be obtained with Irfanview (but there are probably more suitable programs).

pspad4au3-32x32.ico pspad4au3-128x128.ico pspad4au3-64x64.ico

Musashi-C64.png

"In the beginning the Universe was created. This has made a lot of people very angry and been widely regarded as a bad move."

Link to comment
Share on other sites

On 4/9/2021 at 10:11 AM, UEZ said:

Here a fast hack:

:)

I like this Aboutbox by @UEZ. I added DPI, singleton and drag support to meet my needs.
I'm sharing my modified project in the hopes of helping others use what UEZ shared here.

#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Description=About Box
#AutoIt3Wrapper_UseX64=y
#AutoIt3Wrapper_Res_HiDpi=Y
#AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3"
#AutoIt3Wrapper_Run_Au3Stripper=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <GDIPlus.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPIDiag.au3>

Func _SingletonHwID($sUniqueName) ;multi app detection
    Local $iReturn, $sOccurenceName = _WinAPI_UniqueHardwareID(0)
    $sOccurenceName &= '_' & $sUniqueName
    Local $hAutoItWnd = WinGetHandle($sOccurenceName)
    If @error Then
        AutoItWinSetTitle($sOccurenceName & @AutoItPID)
        $hAutoItWnd = WinGetHandle($sOccurenceName & @AutoItPID)
        AutoItWinSetTitle($sOccurenceName)
        Local Const $hControl = ControlGetHandle($hAutoItWnd, '', 'Edit1')
        ControlSetText($hAutoItWnd, '', $hControl, ControlGetText($hAutoItWnd, '', $hControl) & @CRLF & '|SINGLETON_HWID:' & @AutoItPID & @CRLF)
    Else
        $iReturn = Int(StringRegExp(ControlGetText($hAutoItWnd, '', ControlGetHandle($hAutoItWnd, '', 'Edit1')) & @CRLF & _
                '|SINGLETON_HWID:0' & @CRLF, '\|SINGLETON_HWID:(\d+)\R', 3)[0])
    EndIf
    Return $iReturn
EndFunc   ;==>_SingletonHwID

SingleApp()
Func SingleApp() ; multi app handling
    Local $iSingleton = _SingletonHwID(@ScriptName)
    If $iSingleton <> "" Then
        Local $script, $wins, $w, $handle
        $script = @AutoItPID
        $wins = WinList('About')
        For $w = 1 To $wins[0][0]
            $handle = $wins[$w][1]
            WinActivate($handle)
        Next
        ProcessClose($script)
    EndIf
EndFunc   ;==>SingleApp

_GDIPlus_Startup()

Func DPIRatio()
    Local $hGfx = _GDIPlus_GraphicsCreateFromHWND(0)
    If @error Then Return SetError(1, @extended, 1)
    Local $aResult = DllCall($__g_hGDIPDll, "int", "GdipGetDpiX", "handle", $hGfx, "float*", 0)
    If @error Then Return SetError(2, @extended, 1)
    Local $iDPI = $aResult[2]
    _GDIPlus_GraphicsDispose($hGfx)
    Return $iDPI / 96
EndFunc   ;==>DPIRatio

Global $hGUI, $bExit
Global Const $iScale = DPIRatio()
AutoItSetOption("GUIOnEventMode", 1)
GUIRegisterMsg(132, 'drag')

GDIPlus_About()

Func GDIPlus_About()
    Local Const $iW = 420 * $iScale, $iH = 320 * $iScale
    $hGUI = GUICreate('', $iW, $iH, -1, -1, $WS_POPUP)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About")
    GUISetState(@SW_SHOW, $hGUI)

    ;create canvas elements
    Local Const $hDC = _WinAPI_GetDC($hGUI)
    Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH)
    Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC)
    Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap)
    Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer)
    Local Const $hBrush_Clr = _GDIPlus_BrushCreateSolid(0xE0F0F0F0)
    Local $sText = _
            "  This Shark007 software " & _
            "  is freely distributed  " & _
            "  for your personal use  " & _
            "                         " & _
            "   This software uses    " & _
            "   libraries from the    " & _
            "     FFmpeg project      " & _
            "                         " & _
            "                         " & _
            "    Press ESC to exit    "
    Local $aChars = StringSplit($sText, "", 2)
    Local $iLen = StringLen($sText), $iColums = 25, $i, $iHh, $s, $r, $iChar_Space, $t = 0, $f, $iSpeed = 33
    Local $hFormat_char = _GDIPlus_StringFormatCreate(), $hFamily_char = _GDIPlus_FontFamilyCreate("Arial"), $hFont_char = _GDIPlus_FontCreate($hFamily_char, 10), _
            $tLayout_char = _GDIPlus_RectFCreate(), $hBrush_char = _GDIPlus_BrushCreateSolid(0xFF000080), _
            $hImage_logo = _GDIPlus_BitmapCreateFromMemory(_Logo())
    Do
        DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 0, "float", $iW, "float", $iH) ;erase canvas background
        _GDIPlus_GraphicsDrawImageRect($hCanvas, $hImage_logo, $iW / 2 - (70 * $iScale), 0, 140 * $iScale, 140 * $iScale)
        For $i = 0 To $iLen - 1
            $f = $t - $i / $iSpeed
            $s = $f > 2 ? 2 : $f
            $r = (2 - $s) * $iColums * $iColums
            $iChar_Space = $s / 3 * $iColums
            $tLayout_char.x = $r / 2 * Sin($t + $i) + Mod($i, $iColums) * $iChar_Space * $iScale
            $tLayout_char.y = (130 * $iScale) + $r / 3 * Cos($t + $i) + Int($i / $iColums) * $iChar_Space * $iScale
            _GDIPlus_GraphicsDrawStringEx($hCanvas, $aChars[$i], $hFont_char, $tLayout_char, $hFormat_char, $hBrush_char)
        Next
        $t += 0.02
        _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY)
    Until $bExit

    _GDIPlus_FontDispose($hFont_char)
    _GDIPlus_FontFamilyDispose($hFamily_char)
    _GDIPlus_StringFormatDispose($hFormat_char)
    _GDIPlus_BrushDispose($hBrush_char)
    _GDIPlus_ImageDispose($hImage_logo)
    _GDIPlus_BrushDispose($hBrush_Clr)
    _GDIPlus_GraphicsDispose($hCanvas)
    _WinAPI_SelectObject($hDC_backbuffer, $DC_obj)
    _WinAPI_DeleteDC($hDC_backbuffer)
    _WinAPI_DeleteObject($hHBitmap)
    _WinAPI_ReleaseDC($hGUI, $hDC)
    _GDIPlus_Shutdown()
    GUIDelete($hGUI)
EndFunc   ;==>GDIPlus_About

Func drag($hGUI)
    Return 2
EndFunc   ;==>drag

Func _Exit_About()
    $bExit = True
EndFunc   ;==>_Exit_About

Func _Logo()
    Local $Logo
    $Logo &= 'iVBORw0KGgoAAAANSUhEUgAAAIwAAACMCAYAAACuwEE+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRB'
    $Logo &= 'yAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFos'
    $Logo &= 'tqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/'
    $Logo &= 'PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAEZ0FNQQAAsY58+1GTAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAC+7SURBVHja7L13eFxXnfD/Oee2GY26ZEmWJcsl7iW2YydOnMRx7IQ0diEEyBtgl7IsCzzAwo+ysPDuvpR3KctSFtjQQugkBBJCCgHSSXOKU2zHjntTr9PundvO7487Go+KbcmWE+Cd7/PMI2mK7p17PvfbzzlCKUVJSjJRkaVLUJISMCUpAVOSEjAlKQFTkhIwJSlJCZiSlIApSQmYkpSAKUkJmJKUgClJSUrAlKQETElKwJSkBExJSsCUpARMSUpSAqYkJWBKUgKmJCVgSlICpiQlKQFTkhIwJSkBU5ISMCUpAVOSEjAl'
    $Logo &= 'KclI0Sfz5q99+4Yxz2lSghCsWraEiopywjBE0zSGhoZ4y3XX0t/fj65P7DBCiOghJSiFUgohBPkVJjSlVKhGLTdR/KdSqkop1QzUCSFqgSqgUghRBViAio6DUIqUUqpbSrkfeFaoMOnFasg0rkCo4KQupkJg4LNA60InQCGOfjcU+8JpDKo4EgVCEnbvQmUHkA3zEGU1oMJXFAZ3y21TC8zpFqXUwiAI1gkhZuQHvUrTNF3TNCWFrEHgh2GY8jzvNuBXw5DlP1sWi8XuaGhomJ9IJMpjsVhZPB4nUVaGkBIpJEJAGIb4nk86kyaZTDLQ3+/0Dw4+H3i5TynN/H1Jh7xCwCilCIJJ3akXlMXjd8yaNauyvr6eqqoqKioqicdjmKaJAnzPo7evj/vuu+/soaGh30opXSllBIHvX71y5crzL730UqqrqykvLycejxOzLHTDKGhCz/WwbZtsNkMqmaK7pzv2wvPPn/3Qg/f/OhOrfidC9KGoBkzABlJAmP+ZBgaAQSBbAmaKJAxDqqqqaJ3ZRt+WZzAM40RwCSnl585es6Zy48ZNVFVXkShLYJgmUgqCIMDzPNKZDD09PRw4cGD+008/vVHTtLullARBQE1NzXvWrFlDY2Mj5eXlWJaFrutomoYmJUJKBCClQNc1TNOkvLwcqUnK4nEG+noTD7145Ge5WA5BiBBF7p0KI2MmcEFkESINdCDkQSXkfuAFBTuVEjslYkApRahCQhVpQCmn0lVUoDDy/md0VhHQXmQBxV8eMEopyhIJLrn0UrY88/SETFF1VdW5y5Yvp6KiHNM0EUIQhgFhGAGoFOiaTkVFBUuXLGXHjh0fsm3bFUJUhWG4YunSpefOnTuXWCxW8HuKH+R9ndHPCyEwLYt58+bz/J7DJJZeiIxXgNBQCkIV4nsuYeATuo4Z5jJm4KSqAzvZgj20RrppdAI0obA00RXX1HOWrh8xdas6Fo83Oo7jp1KpDxi69uxJXsw5oFYC'
    $Logo &= 'KxFyIUJrRNNqEVJHiAgYpXxU2I8KugnVIVS4HdRLwIsguqYSpNNmknKOw8ZNl/CD73+PZDJ5Isf3nMaGRr2+rh6paSMGtshHARSalLS0trB27dpNQ0NDmxKJBHV1dSxduhTLsk7qXAWCmtpaKi0NxwA9ZhBmhxBuBi2w0YMcemBjKJeYqYjFA2K1ITG9nLhRSTxmEbNMLNNqNE3zUt2yMAwTwzBwHIfHH3/8953tR/6XgnsnCEkbKrwGqb0GI7YKM16GEQfdBM0AIRkJgYp0jQoh9CHwIXDBc/rxc9vx3ccIg3uBJ0H0I8SfHzC+79PY2MjFGzdx802/OK5ZEkIsra+vx7LMwvcfL4JS+e9pmiYrVqwgCAISiQSVlZXEYjFOar2+vFI3TAvL1CnfdRv1tTXUVlXQUF+HbuiYpolp1mEYBlLT0DQdqelRNIdgvAEIw5Ag8DF1ydJF86dlBnt/a6Sc7yFiP0Lw1DFOZi5h+GF0642UVdYQqwTdigAZaZJGXaT8OQgJmg5G4XxqUeH5BN75eM5HyGXacbMP4bu3gfojiL7JwnNaoySlFBdv3MQvb/o5vuehjaNllFJIKadXV1fnB2BUiJ1/KBVC3pWILIxCSomUEqUUYXjyIakAwjDA9zxmzWqjtraOhoYGGpuaCIKgAGKxxguUgiAkDMNhpxvPzeHYWdLJJINDQ/QOpuhJ5xj0TTLG7Hi20nyfzGbei5+7Gyn+ExU+EAGgNFT4AYT2SVHdVEOiFqXrEASgggmG26rox6gbRzcj8OJVzYTBtXjOteTS7TjpO/FzPwP1EEKGrzgwtm2zYuUqNl39Zh689/ck0ylCpUbY00ApauKmXlYWH6EhwjAkVCHpVIqhwX4cO0sQhCggCBU5J4em64UBK4Zs0rQgsB0Hz/cxrRh+EBCER2EYjviGnW/f83A9Dzfn4NhZsuk0yVSagbTNgBMy6BukZAWO1YpfUY+KVSFMCwlINy3VUOeVqu/gJaHr'
    $Logo &= 'PIZmgqZXE6s4U9S0gBGH0EeEAQo1VXfuUYikBCsBZryZRM07yWXfiTP0JK79DeBHLxcwRt5THxFH65rEDwOWnHMRKb2aWsOn78g+YppChYpAKaSm0X5gfywMQmzbRtM0fN9ncKCfHdu3sXnL8/SmclQ0tKJLgQxd9MDBUDkqK8ppbGhgRutMmqbPQNf0gumbFDgCUqkUCFHwgxzHobu7m1wuF0Hi+/ieW4Akk7VJ2h5DniQ5DIg5A7eqBhWvQphlCM1Ag8ivGNYURhymzSHMZc3a1jPW2z541W2Impb8nRIUHPQpFyHAd1H2UOTnDJsxPb5G+N7/mXJgfN8fC6+UJkIopUbqTV2TDKZsbr73CRASzYix7KyldLXNJ3SStFVbVMU0NE3j9t/eoTu5HAP9/Rw5eICdL73Eczv30J7ViM09h5aLrqC2bTEIQeg5eMkeUh276Dq8nRf37Md68RHq4pI5rU0sXryE2XPnUV1Tg6ZpJ9Q6AlChor+vH9MwMU2TMAxJp9MkhwYJPBfHccjaDinHJ+lrJEOLjFZPzqjAL6tCWZXRXWvEMIRGqMJo4MMAFaqRAKgQEMiaZjJ2P6q2CVnbisq//+hZFT+mTtOo7CD4uQiUMO8kh+FhAu8zU26S5s2dPd4FVyA8yzILJsXQNQZSNjfdu5mXDnSwZO5MlArx3BzprM2uQ730ZGo4f+kcQnsIwlAd2r+XHTtfZHfHAANUUD5vAwvOvoL6toVoukHguVHyXU9gJSopnzGfcPkmnIEOMp176e7ax+HOvTyx6wFaKh/irOWLWbFqNU3NMxCmiXYcaILAp6u7i+qqCpTvkkklSWcdkrmAVKCTpgxba8I1ygkSCTDLEVYCPVaOppsoJEEYEAYhYRBEAzEMSWG8iwAIQ4RVTljThqioP+p3DEc+p0PDCImyk3lYNETgBnjOT0F9D3gBxOCUAzN3Vtt4T3vD2kcAsZjJYy/s4cX9HQV4Rt/RuhSYuoYnjNi9'
    $Logo &= 'L7S/dfu+ztW9Q0nseANVCy9nyaqNTJu1BKnpBL5L4DqFi6mixEyUpxKCsvoWYtUNlE+fizPQgTPUy4G+I+x5Yhv3PfYM561YxHkXrGdGSyu6ro/RNgrIZLL09fYiYuU8dyRNWlTiGDNwE3ECzQTNQphxjFg5plUOmklIPk8UBARhgMjneoSIwnRVTIvIQyBGHlhUN+dNUDhSm4iilJyaAg0jRBRm51J5zeINkMtcidQem2x+5pRN0lETpJHzPJ5+4SA7D3Ri59woHT+6WKlJLNOQ+9q7X7d5665P7N57YAWqlqol5zFn5cU0zj3zKCheLhrg4kEezssMq9jAR0iNWN0MrKppWP0dmIkq/MZZpIZ6uW3r0zyy5X9Yf/aZXHjRRqprakY4yCpU9HR3MJADteBSlFkGUkfqJrFYAhmrBDOGUoLQ96LzCjwIAvJpM0T+okdciFEDPd6Ai5EQqdHvKtJGQh0z1TApa2QnIcwHDcmBT5DLPoYRA9Mac1OfdqdX1yS26/Kz3z2GH0JleRwpxYgvKaXANAz6BlOXbd918GNHunouwnOpmN5G66qNNM47C92KE3i58UEZN7gRBXDIgxOfNhOruhGn/whSN7Eq60kn+7jlqcd58tmvc9nG9SxedmZUnXVdbNtm7+5d5MpnUFY9HSNRhVZWhTAToBlRij+vRdAtlO9Fat11CDw/0iViONyOBvjYOkEwrH/UGEdqrL8yJd6LEODa4NpRNV157hUXn3NHzNTRpMZTO/ax91AnmqZNPTCJeGzc2L+zL8l3br2PwVSWhXNaRrxDCoFlGuRcf/ktf3jkU9t27b/Gd2zKahtoWbGB6YvPxSwrJ/C8yPRMMsKJrrUYTs6gVIDQdOKNczCrm7B7DyGkxFxxBe09B/nebx7krC1buODC9VjxMnq6u3lp70H02ZdQNq0Vo3p6pElCP/JHVOSPiLxlEfmEndRMlOGhvBzCdSD0EMMNDcPnn1cQ6rjOq5hCOsYt'
    $Logo &= '7EVRkRAEmQzrVs2/8SNvf8MRPwjQNY0DHd28+zPfImvnph6Yf/7PG/PnoCiLm6xbPp+yeIykEzCUsUeoNiEEpqGT87ymR5998WNPPL/jnU4ymTAqq2g753JazlxPvKqe0Hfx3VzBko4LixDFSfAxTmExNGK4rBD4SN0k0Twfq2Y6dvcBhJD4NU1s3rOZPT/9BeetXkF/Xy+9VFPRuhSjoh7lu1GSUBWZGIpNh4r8FUBIDWnGUZqJ8nKEORvyznn04YlScKL3nSRNQoCdhMAnDBVVFbHejecs/8wLu/YrP4iC2phlsHReG48/tXXqgbnz/s0jvsSv7nmENcsWcNmFZ2MZOkH+JAxdRynH2HWw/R8e2fLix9ODg63SNGladh4zz7qEioaZhME4GmUcWEYDNMYUHeOSFoOjm2WUty7Gqhkg23MQufACkt0t3P3I78EewFr9JmL1rQhNj0zO6P83TqRTQHgYHs1EWhpobgRO6IznnIzyUdQE4DgFWHwXlUtH6YhMktdfs+kLl5y36nA6Y4/wKT/+jtfz//UNTj0wxiiTpAlFzDIifyVvfkxDp3cwueHWPzz66SNdPecTBlS3zmPm6suonbUEgcJ3ncjpHAWJOAEsxzRFxRdJqTE/lcpXuxNVVJQtxU32oscrycYq8IY6iTcvwCivjXIhI7yMaLCOIqJG+q0jzltFxWOpIawyhNRRuQyE7sTHXIzWnqdmp5STBKWiut60qhcXzGr51tZdByJ/rCgJbJkGr7547ctbS9I1DSdwG+99/LlPPrNt97tdO63FqqfRsnIjTYvPRTdjhL5bCDuPZconAstkLmdxwKLyaX6joh4tUYNZ00RuoBOzZnoUMY0CojgiHv/AYtSJF/0udUSsHOVmIa9JTxoCMVKbTczRjY6r8k7v325Y93/rqiuzGdsZc62zdo5Fs1tfHmCEEBi6Tu9g8pqntu76wkBf/xxpGjQtXUfr6kspq24iLA6Rj8nJSZbci67/'
    $Logo &= 'sQPZUc+oAIHCrKzHKK8dUY8a7/+NZ0yOXf8b4W0hjHik5Vx70t+nMPhOJl+mj08AGpF3dJORo+vYLJ83c/N1V1z0c5XPap+SYjglWBBIIepu/v2fvr599/7r/JxDeWMLrWsup272skgduvao9PxUd4RN7o4tfrcak7o/gV8xoUy9Gvu3EYsSdL4z+e81rC0yAzBtTr7VQR3/Y3YKAg+ERPgum9ae+b/9IAyyTu7ULcmpfDhQimd27vtucij5Ws0waF6xgRkrN2HGKwg8LzI/Y7SKmmJo1BS+W53aMY7T2SYMC+XnJnG+6mjtqbwO7CFIdUNVc1TIPKGjq+HnbNqm19+btp17fnbXgyc89qsvOvu0AZMA3q8U65LJ5JWJ+um0nH0VNTMXo8KgyPyMA4sSI54u4DPspE4WKzX2V3WCAVejepDUCf7fiNNXJwmdkCC1qMdlkgoKIaGqCfoOQCxf6DxGj4yyI0dXAZry1QVnLflcTWU5nh9Mye15MsCUA7cpFW5Ugc+0BWtoPutyrEQVgedEzdNCjD/YeV7yVaHjIzEOQKiR0Yka9+qO84w6CaWhRvqZY6BSI34Z+R51jH92sq2RKgQzAWU1MNQemSZGmSYhIJcFzwEhCewsy+Y037V8wez7Pc+fspzgyQDznyi1USBoPvvV1C86F6EUgZfLh9dqfByUQhWDpIrCyKL60PDroQLXjzrvAQxNoEuB5yv8MCryWZpAinEgUGpsVHEMZ7F4uI/CMVJXqcKz4wOiir/jsWgcbnk4Hq1qjJc18sVEDWQHIdULlY0jv1MYRGE0AlSIVL5auWjul7O2g+v5U+YATBaYs4B/DAOfprMuo27ROkI/hxQghDxakBVq7B03jtZRoyMbpXAD8ENFdVxjcWOMBQ0xzqi3qC3TiBuSVC5kf3+ObZ0Omw9mCJRCOzo7clwFoo5lmorUhSo+WXVsM8UIeIoZVcUfH/vZMBxlRtQkbBKF0geJWkj3QawCzLLo'
    $Logo &= 'fwqBstP5piiJn7OZUV91nxTygV0HO6a0XWKywFynAl/E61uombcmMkEoFPLojIejvBwzx1LQNnntopTC8RW6FCxpirNxXgVr2xK0VpvjnsS6WQkAbt82xBfu78TSRpYOVL58EShV+BkEinB4eglFU03C8Ojz+d7gMMzPKwqjpN9wm6YYdmIKXfocbTIepY+OtkWqQkR27IGbwICGAYQexBKQy8BQB9TPjvwbPxc9J/K3n+dy7eWXf3P5/Nkq57pTGpNOFph1SgVUzFiA0AwythOF1lKhaZKYESXw1DicqOG7UI3MlHqhwtAE62aX8/oza1jTmpiwqf+bJVU8fSjDb7cNYemCkKhIqGuCMkMQNzQqY5LqmEZFTKPclFTFNcoMScKUaBIsTRI3ZEFjZN0Axwvw/DCqkdke/RmXvoxLTzJHd8phMOMymHVxXI8gDBEoNKGOGrPR2kYRdbad0Fk6DjihV+RF1sBAB6Qj0xRldMOCdmltrH1+8ZyZd0X1POMVBWYGQqJX1OP6AZcvrmPlzErcQLG1PcMzh9IM2j5CRrP9pBDIfA5G1ySmLrF0gaFJDC16bXadxZvPqmd1a9kJD+75wZjejQ+ub0TXBDk/pK3GpLXapKHcoC6hU1umEdOjY02FBEphuwE9KZfDAzZ7utNsa0+y7cgQuzqTtA9myToeEGJqoItR/osY9nPUOA70eGbvaKIx8n/yaWfNhLKqyDQJDbzcUe2Sc7h03QU3xGNmLmvnpjztNUlgVBlCwxcGn3jVLP5uTcOIVw/0OzyyN0lv2qO6TKfc0im3NBKWJK5rxE1JzJDEdElMF8SM6O4+kTz27A5+fvdDHOzs5W/Wr+HtV19SeK06rvGpS6bzcogmRP476cyuL+OCeXWF13pSOba3D/HIrh4e3tnNlv29dA1kQIUYMkQb9l+KzZg6vndVeD3wRoYEKoR4ZdTnku4GqwIQBL5LZUW8f/WSeTfFTHPCPS6nERgxFORyta9Z'
    $Logo &= 'WjUClt6BJJomaastp602NmUn5/sBX/3J7fzwN/dRWWYwraqMb//ybi46exlzWpr4c5JpFRbrFzSwfkEDXLWEQ/0ZHt7ZxR1bDnH/c3vp7HRBKkxdMrZJVI3v0oi8sxwEjFNsg0Q1DHVHPowRR9k2q89Z8rvmhrrOyF3glQaGTsJw9vK6o1/wgSdf4KNfvgFd07j2ivX84zWXEbNO3W46OZdPfP3H3PXgZi46cw6XnDUfTZN85ZaHSGUc/tyltTbBdefO4bpz5/DSgfnc8fQebn1yH0/s6sB1PHRTY6SlVGO0TtRPGZm4McAoFU1ZiVUgnBRK6ggRcsGqJb8qj8fQ5OmZlD9ZYHYA5z7xwkv80xuvBOAPj23BEj4t9ZX85w2/5Pmd+/jKv7yTirL4ySf7leLfv/VzHnxiC/9wxdmcOXcGvu/juB7LzmiltamevxRRYUhDhcE/bVrM31+4gM27u/jhQzu46+l9pFLZccAp0jpK5YERx05ullWCZxM6GSrKy/oMQ3/khd37CYPJh9JXXjj1wDyIYbzt0ed24ORcYpbJojkzkU6SDSvPYMUZM/jpH5/iA//xbb79b++bVHNxsXzzF3ex5YWtfOC159NQU07GdojH4yydv4B1F15EbVX5XwwwrufhuD45L3Lyz184nQsXNfPCwV6++8et3PTITjKpLLqljVo/TkSwHDeHokDqUFaFGuhiWk3lgYMdPV05z+N0LfsxWWAe0g3d2bPvSOzJrbu44KwlvP7SdSTXLqez/TDn6AatDTX8+J7H+dqPbuVDb3sdcpLp8MNdfbhOlk++7W+wDB3NMKmrq2P69OknvTrDKym53NEKcagU2VwUXi+aUct/v2MDb9uwmP/67dP85vGd+H6AaQ6vXhHmtcsEygZWAhFLMJTK1GmaVlFlmSl1mmZPisn8Y3PlawD+4KWzm97z1tfyzX9995iLk0mnsG2HvR39rF25ZNJaJgjDcaen/CWKUoq+vr5oztYx'
    $Logo &= 'bpy4qSOF4Hdb9vHZmx/huZ1H0GI6UnlRW8OERlGgAo+g5wgfeMvfvPGcZQtutk8iYfe212w64XtOZmRuFJbJrfc+Rt9gcsQLlmVRW1fPjJYWLliz/KRM0l8LLFGU5x8XFgDb9cm6HpevmsNd//sNfOSN6zAkeNnsZMhEaCZKN3nsuRffYLsuTm7yj4nIyYzO7bqhH+g41MlP7niAkhzHf5ngXa4UpB0Xy9D49Jsu5Bcf/lvmTa/Gs91JVJkVsqyCl/YfuWgolWmMmQaGrk3qcbqASQH/g6HzPzfdNeH5LP8vSrH/MiGNFIQMZXKcNbueH3/4aq48bzG+4xJOpK1SgWbGGEhm6nYfbN8QhCE515vU43Q4vcPyXcMy/3nnjr1NP7z9Xt79xitKdIz2xYLghOYIohmhUkj8IEAIgeM4DCUz1JTH+co7L2NuUw3/ffvjhCoqrxw/YtIQUvLw09su0TTtFxOF4HRGScPSD3xWmMaXvnjDLfFrL7+QmsryEiWjtEsYhscFRtMk3X1D9A0MsPiM2fhBgG1HzeKuHyCl4EOvPZcZ9ZX824/vxRmnljb2n+p09w9uaKitSkgpM1MdLZ1KT+83dUPP7N9z6Adf/clv+D/vedP/GyC4Hj39g7Q0TTvu+xznxNloXdM41NnDoYMHWDhnJq7r4rpuAbIwVKRtl2svXEplmcVHv38PKdvFMI4BjQCp6/T0Dc2WUp615Iy2h9wp1jKTAsZLDoxMRsJPMOLXfe1Hv7nkzVduYF5b8189MKmMzbM79hwXGN/38TzvhOZICEFn3yC6FORybkG7jDI0JLM5rlg9j5ip8/7r7ySVPTY0Qgj8MOC+zc9d4nr+QxONfgCuuXTd1ALzzjdfPTIvY+j+lp3773z0wc2XfOyrP+TXX/n4Xz0wBzq62bJ9N1ddtPa45qh4AcVj+zkhR7p6mddYjm3bx4Usmc1x8fLZfOntr+Kfv30XbhCijfZphqvgQnKkq+/iJWfM'
    $Logo &= '/FTUBPYKddz90xuvGvG3oevsOdTxi3cdOPL+W2+/d84vL7+A1196/l8tLNt2H+Tz3/kFb7l83SmbIyEEadthYChFrLUG23FO2I6QzOa4fPU8hrIb+fgNvycUqjBNebiXFyKzdKSr78y9hzrbaqvKDwxPvH/ZgUllsmOAbmms63rXG698/2e+8oPffvhL3xcb1iynvqbyrw6Wh57Zzue//TPe/Kq1XLVx3XFzLxMxR7om6egZIJ2x0VCFXWCK3JFC++qIMcjmeOMFSznSl+Trv3oEETePTofKL7woNY1kOpt47qV95y+c3XrA9abOj5lUHiYRj414lMdjCCm45pJ1d776ivX/c3DbLj76lRv/6mD59R8f49Pf+BHvuGodb7jqEqRuHvO94/kh44fTkrSdw3VdwjBE1/WRy84qxZad+8f1aTI5l/dddQ6Xn7sI3y7yUYb7hvMN97v2t18kXsmOu3A8WxgoDB2uu3z9vzz9wkvn/eCnt6+4/PxVfzWm6fqbf8evfnc/77/mYl614QJ089gF0DAMyeVyE1pIwNA1Nr+wi4QBMr/a5zAwuqZxuLuPjt4hzl6ij5kmEoaKUCr+/bqL2Hm4h73t/RiWgQqOvk9JSffA4IVzW5osBLlTnVN9UsB09PQfK2VEfXVl6u2ve9U7PveNn97/gc9dX3nu8oW0/AX1rYyJdIKAz3z7JjZv2cqHrt3EOatWYMWP33ds2/YJcy8Accvkhd2HePip53jNOWdgGCbDu7IAGIbGc7sOUVuVGFHtL54Z4foB06oS/PubNvCOr9xGGCpEUXVb03Xau/vPeHr77iUzGuqemaqZj5MySUqN/0BBxnZYu3zBM393zas+2LH7IP/46W+Mr5H+AmQoneXdn/4Wz2/bwYevu5TlixdQWz/tBNdGTcgcGbpGKuvwXz+6nTPb6qitTFBdU1PQLkIIMlmH7fuOsGBm04gprgrwi5bIzzguFy5p4+8uWUlg2/kJ+PkFGqXA'
    $Logo &= '83y560D7+f1DKXoHkyd8TLmGaairOmEi6h1XX3rDYCqz4je//v37vrRmGR972+v+siKhPQf52H/9gNoynQ9dewktM5ppnnHitVNs2z5hKUCTEiEEn7/hVrTA5sw5bSQqqkgkEoXlRmKmwf1P7cI0dJrqqnHyiTfL0Hl6x34qEjHOaGksgOS4Pu++4mwefPpFdu/qRTeNoqhJ0dk7cNF1V170ddfzpmQ+26Q0TEVZ/LiPmGXSPK2G665Y/5G6mdPv+vgXv8cDE1w77ZWWrr5BvvSDX/PWT3yZRS21vPfqDcyY0UzbrNknNDFKKbInaEeQUmIaOl/56Z28tGcPV569AKnrNDU1FbSLFALH9bjz0ee4YMWCo73gAhzXY9vewzTUVBaWhgPwgpDa8hj/67wzivKp+c/pOgc6etamMna1GJ6GctzHFAMTKnXch1KKrJ1jZtO03Fc//q63tjRN2/Z3H/kC7cfwfV5pcT2fZ17cy6ev/wXXfPD/cv9jT/Le167n2k3nML15BnPmzJ3QbmrZbPa42kVKiWXofPVnd3Lfo0/xxguXIQU0NU0fsW1PPGby24efQUrBygVtBWc3Zpo8vnUPMdOgtrJ8hKmXUtLbP8iSGVUsndtM4B51fDVNo7t/aPquA0dWZO0cybR93MeUm6SJQlWeiLP2zIU9b7vmsjd8+r9uuOfNH/tSy++/+1n00zBP5njnIYqWNHVdj1TGpqN3gJcOtPPsi3t57qW99PT20zKtijdtWs2KeS3ELIvpM1pobGyc2HHCkEwmMyFY7rjvUd7+qtXELYPKqmrq6+sLjm7cMtl5oINbH3iKj77lqmih7MCLwu+sw/1Pb+ftr75wzLIdQgjaOzsRCF6zdiHb93cdncEkJfg+W3cfWN/cUPeAnctxqr2+kwJmouvnhmFI1s6xctGc7R9575uu+/L3b7nzfZ+7vuKtr9lEGCpynoftRLP1hBDYTg7H9QqLEWayzogLk8rY+PkLq5Qi'
    $Logo &= 'mclGUYGIioHprFN4Tamo8bpQ2s9rYieXYzCVIQxCYqbGjGnVnLuwhWVz19JYUwFCkCivoK2tjUQiMfFkZip1zMhIkxLT1PnqT+/kN398hLdduoqa8hhSN2hpaSlolphp0DuY4os/voOLVi1ixfw27HwNKG4Z/PyeR2moqWR2c0PheYgWM9yx9xBbXtzL4rZGlrY1sKitgW37OtGNaGiVprHnUOf6gWR6StaImRQwk61JzG9r5qzFcx9uqK16y0c+/52bHnhqq1Uej+MXbVoFR9PbSoGhSbT8plm6LgthpaFr0QKFoSJmGui6JAwVlqFjGlHSK2YZSCEoNzSmlZcBirhlIoUgHjNpqK6gobaSuqpy4nnnMAgVVizO9OZmpk2bNqnvl8vlsG17XFh0TUNIwX/ccCu/f/hJ3nbpKhpqKvD8gHmzZkXb9ChFWdziQEcvn/3Bb2isreLvr7yAXD4zG7dMntmxn0ee38Vn3vW6EQMupcB1Pe588EkWt9YRKIWl62xaMWeElpGaRlff4IruvsEmXdc6T7WuNClgrr/57kkfQAiBJsVdNfU1HRtXzZ913vJ55FyPeH65VqUiGDQZJa4MXS/6XUPm1+Q1dT2/HL0qWjNPjVg/b3gpVyEo8j3ECOCHN/jS87vK1tXVUV1dPemNucIwJJkcPxQ1jSjZ9unrb+Gp57bzjstWM60qgeN6tLW1UVNViSYlWSfHnY88y413PMTCtmY+/KYr0KTEDQLipkF77wBfu+ke3rDpHKbXV5N1jmqXmGlw8+/+RC7n0FxfRc7zcf2ARa3TKC+LkXZcNCmQmiSZTNcYhr5yxYLZd+dOca2YyW1/c5LtC6apq6ryRLKizGLlvBYydi6/ZIwYY++Hl3XQpBZt06fJyBcp2s5P1zQQ0S6z5Lf5LX4IIQp7JY33U9M0LMua/O5txbmaoSGCfJdcscQsg4Fkhk9+8+fs3XeQd7xqNTUVceycy/Tp02lsaOBwVz8PPbuD'
    $Logo &= 'Pz37En1DKa7esIarN6xBCoEXBCRiFu09A/zbd37NivltXLZ2+QhTFLNMnt2+m989+izXbVyJVxQ1+UE4avlYSRgEtHf3bdywZvndWcd5GYGZ2Tyu6rUM/bhBmWXqvqXrvUq3aJ01B88PxgzuMDDDUAxriOGfQpze/ZgnI6lUatwSQCJmsa+jh4999cfY6SHeeeXZJGIm2ZxLXW0tM2Y0o1TI5m17eH73Ic5ddgYbVi9mZmMdru8jpSBhWDy5fS9fvekeFs1q5l1XX4znB4UcimUaHGnv5Os33cOaha3UVpQxrDU0KRjMOOQ8f+TKXJrG1t0Hz7dzOeEHp1YjmBQwB4+0jwTB0Hlq+14e2rIDy9CPm4M41N7Vj9Qpr/jLrmRnMplxo6LyshhPv7iXj3/9J9RYkrdftgZT13ByLpUVkTOtVJSp/dv1q3jthtWF+c/R4tGKPYe7uONPz/LQlh1csW4Fb73ygmhhzLwGsUyD7p5ePn/j7dRVlnH2gtYRdSYpBclMDs8L0ItaOaWuc6izZ9n+I10z66orD/hB8PIAs3HNkpFpbk0yt6WRwYyDHwRFvRmj0+E6advu7eodmPCxPM8jnU6Tzdpkcx5eECKkhm7oVCbKaKyrfkVgSaVSI2CJHGqLu/+0hc9+95csaanl1ectBhXleeLxOLNnz0bTtEI21w9CCEJ0TXKgs5e7H32enQc66B5IMrOpjn99+9+yZuFscr5PEER+Wsw02HvwEF/84Z2EKuRN568kyO9/VFxr6ktlYZQSkZrEtp2yfUe6zq4oLztwKm2bkwJmdBd6DmioqeC6y86nN5nB0LVx089lcYtczuvpmAQwjm1z571/4g+PP0dfKksyYxOoqFIrNcmqhXN47xtexcL5814WWNLpNOl0egQsuqah6xrfv+1err/5bi5ePosNK+biBSG+H2AYBrNnzy7sIzlOSIAfKCzT4Lzl81h+RivzZ07H0DWcfE9NzDJQYcj9TzzLt265'
    $Logo &= 'l9rKMv7+0tUYmmRsY5SgYyA9NmsrJGEQsutg+4Yz2pp/mcu9TMCMX9UNmdNcT3VVJTl3/MahRFmMqopE5/72romXISoree0Vm1g8bxa9Pd3Rlw4VWSdHKmujlCIei512UMIwJJVKjQmfLdPAzrn8xw2/5s4HN/O685ew8oxmcl601YymacyePZtEIlFIzo3RokHA3BkNLGybng/xw0JOx9B1so7Ltj2HufW+J9i8dQ9rl7Rx+ZoFaHI8WKLPdw2kx03OCU1jf3v3Ws8PdIXyTza6npJMr2VoPPHsVr59yx+xYmObi6QQ9A+lBuuqKyfU63oUtDirzlzG4UOHOHToEJomqa+Oth6eNq2BWFnZaYXF8zySySSu644oEZTFLI509/Nv19/ES3v28w+XraatqQbH9Qv5pba2NiorK48Jy7AJ8YOgkJTUNUlH3xB3/OlZDnf109HbT2//IC31VbzzynOY21yH50d7ao93jbOuR9dgGsaZvyR1na7egUWHO3tnV5bHdwWBeuWAcVyXDauXcLB7kIFUZsz8aE1KegeH+rfvOUQqa1OZmNxAt7S2knNd2tvbMU2T5pbW07Ic12h/JZ1OR6F9UaSWiFs8tX0Pn/zmz9ECl/e8ei3V5XFyRbDMnDmT2tra48Iyfs5KErdMynSwcFk9p4E56xbRUJ0AITheDkWTgoFBm76UPe6KGUIK3JwX6+wdOKe6IrHLV/4rB0wYKuKWwWvWr6Z7KIs5agqEoevsO9LV+/S23aQykwcGYPbs2QXTEATBaQPGdV3S6XRhftCwNtQ0iWUY/OqPj/PFG29j0YwaXrNuBYYmcf2jZYuWlhamTZs2YViGUwhhGNLX309fby9nzqzlzJk1gCAIwxF5lmMCo0kO9Q5h2y76eFNQhCQIQzp7By6Y19b8k5ONlKas+OgHIU11FYRCMpTKIoq1TLRJRV/GdpxM1jkpx0NKyaxZs9ixY8dpASUIAtLpNI7jjDGbpqHj+T5f'
    $Logo &= 'uPE2br7nYS5dOZf1y+fgFw1mEAQ0NzfT1NQ0IViGc06e59Hf309fX98YjTap6yMEu9v78zMHjjFnSdM43NV77vT6WktKkVMnsaD8lFarDSk5cPgIn/nOr/J9qsV1KOyc59sp2zlpT7W6upqZM2dOqXYJgoBsNjuivbIYlrhl0tE7yL9/+ya27tjDWy4+k8VtjeQ8/+gil0FAY2Mjzc3Nx4RFFGWqh+EcHBxkaGio4FAPQ3Qy5RfH89lxuDeqUB8LKk2jdyC5SEoxf/q02heOt630lACjHWsyuIo8dMf1OHfZPN501UXs7+jF0GXxHZW9/f4nkn0DyZpTGeDm5qmZXel5Ho7jHBOUYVh27D/Cx772E1Quy3tevZZp1eU4RT0nQRDQ0NAwovo8GhClFEF+3nQymSSZTBZMq5TylG8AQ5Ps7x5kf9fgsccIEFIShIH+met/IaUmxyyHdt2VF00tMAODQ+NyBATliURBlV523nJ2HurFKDp5TdOy9z/xfKpvMFWw98W5ieHBkqdhQaHhAQuCoDB/2ff9gukZ7642DZ1dBzv516//lNm1cTatWoauyxGOZxAE1NXVMXPmzAIYMl9pD4KgUM1Op9NkMhkcxynAORWgHPURNTbvPIzruOjHW8E0+p7t/YMDB3k5wuqnnn1hHO9c6gjB6jOXBRUV5fhBSE15nFUL2vDDo5ts6obuxywzdaSzm5ydJZnOjLkjR9+Zo2tLxa+NV18a/n/DW/KFYUgQBCP+Hq0BjqXiQ6X47q//wNln1HPu4lk4rk+Yr6APH6uhvo62WbMIwxDXdcjlXBzbxrZtbMfBzeUIggCV9zFMXQNx6l5AGEariYt8BNozlOHBrfsRJ14UKA3iXbpuDJzssSd19uPd/VJKDyGGsQ4gail88pkX+dR//xSjKC/TfqT78WQ6c24Y+GMqvcObQ5wuOR4goyVmGjy85UUe2PzcjVevW7zjka0H9CAMjy7ErZQKwzCsqUlpj23b'
    $Logo &= 'Ty6Xw89/J5Xv9BtxvCmum9ZVllmGpmkKlGVo4o7NLw329KVs3dLlCVbd/CNCbAd50tvVToXTG+arBCMG56WDR2g/eAiGty5WCrzwxq7+oQ/C+IP351KRDsOQ+uoK2vuSP/rVw1vvn986DVPXCitBKaVwPRejvb/Aw8t57kFzLXHTLPQMtfcl8xXM4xrmYp9Fz9/c4SsBzBjHuLt/iB/e8TCisqaoairwcu78p7bvJmM7hdzDn5sowDQNnJyH63ofeulA18NeEPrnLJpZ6NaPtKF23Ar96RRNykLzmSZPtDLV+D7/yR57yj1M0zDYvu8wnd0DI0rsoNBNfduWbXvsW+59nNrKckxDR9c0tHxbppRiUqZjKkXKaJP2mooE7d39fPKbPyOXcw8aMTPY3zXAoe7BkxmYvzqZeg0jBU9t25PfUMEYbXJeFFJ++qNf+dF/DKWzXHn+qmjxZk1D1yS6rkUA5efwHHXsx5qsEfu7icm5CcVb9UWzNxUZ2+FARy9/fOJ5vnPLH9h3sP3nRsz6cN5loS+Vpa2xpgTMlDuXQHf/saddarr2+bTtpP/lyzd+8PM33Do7EbeEZRqYho5l6Fimga5pxGPRMhZV5WVIKTF0jcpEWcFuV5aXFcyDZRpUlMVP7DSLKMIYSmUIQkUqY5PMZukZSNLRM8Dew11DqcHUZgz9O0bMumV0JrUkpwGY4yb4hg+qad9A0344lM6eMZjKVKKUQKkalJJAOUqVoZQAaoajcqCmaN/gqvxzw1P24ihVfgLPXwAZIBttfcsQAhtEP4IupHZQGtoOoyx2qITFcS6i+gudMF+SV0ZKXlxJSsCUpARMSUrAlKQETElKwJSkJCVgSlICpiQlYEpSAqYkJWBKUgKmJCUpAVOSEjAlKQFTkhIwJSkBU5ISMCUpSQmYkpSAKUkJmJKUgClJCZiSlKQETElKwJSkBExJSsCUpARMSUrAlKQkJWBKciry/w8AsDw916bgUD8AAAAA'
    $Logo &= 'SUVORK5CYII='
    Local $bString = _WinAPI_Base64Decode($Logo)
    If @error Then Return SetError(1, 0, 0)
    $bString = Binary($bString)
    Return $bString
EndFunc   ;==>_Logo

Func _WinAPI_Base64Decode($sB64String)
    Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
    If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
    Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
    $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
    If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
    Return DllStructGetData($bBuffer, 1)
EndFunc   ;==>_WinAPI_Base64Decode

For whatever reason that I am not aware of, Virus detection is through the roof with any AutoIt App when compiled as 32bit.
The same code, when compiled as 64bit, is always damn near detection free.

Edited by Shark007
update scaling
Link to comment
Share on other sites

@Shark007 you can use

Local Const $hBrush_Clr = _GDIPlus_HatchBrushCreate(2, 0xF0E0E0E0, 0xF0F0F0FF)

to give the background a little note. 😉

 

2 hours ago, Shark007 said:

For whatever reason that I am not aware of, Virus detection is through the roof with any AutoIt App when compiled as 32bit.
The same code, when compiled as 64bit, is always damn near detection fre

I've similar problem with Freebasic. As soon as I use Screenres to init the screen the x86 compiled exe will be flagged as Trojan.

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

56 minutes ago, UEZ said:

@Shark007 you can use

Local Const $hBrush_Clr = _GDIPlus_HatchBrushCreate(2, 0xF0E0E0E0, 0xF0F0F0FF)

 

I've tried to use this; even added #include <GDIPlusConstants.au3> but I am not seeing any effect from it at all.

A n d ... its very interesting!

 

... EDIT ...

OK. I didn't fully understand the 8 digit color code. Now that I get the transparency offered by the alpha channel it is making more sense.

Edited by Shark007
Link to comment
Share on other sites

The $hBrush_Clr brush handle is used the clear the background of the screen. By adding a hatch brush it draws some pattern to avoid plain simple flat background.

The two hex values are the ARGB color values for foreground / background.

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

11 minutes ago, UEZ said:

The $hBrush_Clr brush handle is used the clear the background of the screen. By adding a hatch brush it draws some pattern to avoid plain simple flat background.

The two hex values are the ARGB color values for foreground / background.

Its like you handed me a new toy to play with.  Thank you.

Link to comment
Share on other sites

Last but not least here the version with chip sound:

;Coded by UEZ build 2021-04-14
;Thanks to wakillon for the SID Dll, Soren Lund (Jeff) for the SID tune and Ward for the MemoryDllCall functions

#AutoIt3Wrapper_Run_Au3Stripper=y
#Au3Stripper_Parameters=/so /pe ;/rm
#AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3"
#AutoIt3Wrapper_Res_HiDpi=y

#include <GDIPlus.au3>
#include <GuiConstantsEx.au3>
#include <Memory.au3>
#include <WindowsConstants.au3>

#Region TichySID
Global Const $tagIMAGE_DOS_HEADER = 'WORD e_magic;WORD e_cblp;WORD e_cp;WORD e_crlc;WORD e_cparhdr;WORD e_minalloc;WORD e_maxalloc;WORD e_ss;WORD e_sp;WORD e_csum;WORD e_ip;WORD e_cs;WORD e_lfarlc;WORD e_ovno;WORD e_res[4];WORD e_oemid;WORD e_oeminfo;WORD e_res2[10];LONG e_lfanew;'
Global Const $tagIMAGE_FILE_HEADER = 'WORD Machine;WORD NumberOfSections;DWORD TimeDateStamp;DWORD PointerToSymbolTable;DWORD NumberOfSymbols;WORD SizeOfOptionalHeader;WORD Characteristics;'
Global $tagIMAGE_OPTIONAL_HEADER = 'WORD Magic;BYTE MajorLinkerVersion;BYTE MinorLinkerVersion;DWORD SizeOfCode;DWORD SizeOfInitializedData;DWORD SizeOfUninitializedData;DWORD AddressOfEntryPoint;DWORD BaseOfCode;DWORD BaseOfData;PTR ImageBase;DWORD SectionAlignment;DWORD FileAlignment;WORD MajorOperatingSystemVersion;WORD MinorOperatingSystemVersion;WORD MajorImageVersion;WORD MinorImageVersion;WORD MajorSubsystemVersion;WORD MinorSubsystemVersion;DWORD Win32VersionValue;DWORD SizeOfImage;DWORD SizeOfHeaders;DWORD CheckSum;WORD Subsystem;WORD DllCharacteristics;PTR SizeOfStackReserve;PTR SizeOfStackCommit;PTR SizeOfHeapReserve;PTR SizeOfHeapCommit;DWORD LoaderFlags;DWORD NumberOfRvaAndSizes;'
If @AutoItX64 Then $tagIMAGE_OPTIONAL_HEADER = 'WORD Magic;BYTE MajorLinkerVersion;BYTE MinorLinkerVersion;DWORD SizeOfCode;DWORD SizeOfInitializedData;DWORD SizeOfUninitializedData;DWORD AddressOfEntryPoint;DWORD BaseOfCode;PTR ImageBase;DWORD SectionAlignment;DWORD FileAlignment;WORD MajorOperatingSystemVersion;WORD MinorOperatingSystemVersion;WORD MajorImageVersion;WORD MinorImageVersion;WORD MajorSubsystemVersion;WORD MinorSubsystemVersion;DWORD Win32VersionValue;DWORD SizeOfImage;DWORD SizeOfHeaders;DWORD CheckSum;WORD Subsystem;WORD DllCharacteristics;PTR SizeOfStackReserve;PTR SizeOfStackCommit;PTR SizeOfHeapReserve;PTR SizeOfHeapCommit;DWORD LoaderFlags;DWORD NumberOfRvaAndSizes;'
Global Const $tagIMAGE_NT_HEADER = 'DWORD Signature;' & $tagIMAGE_FILE_HEADER & $tagIMAGE_OPTIONAL_HEADER
Global Const $tagIMAGE_SECTION_HEADER = 'CHAR Name[8];DWORD VirtualSize;DWORD VirtualAddress;DWORD SizeOfRawData;DWORD PointerToRawData;DWORD PointerToRelocations;DWORD PointerToLinenumbers;WORD NumberOfRelocations;WORD NumberOfLinenumbers;DWORD Characteristics;'
Global Const $tagIMAGE_DATA_DIRECTORY = 'DWORD VirtualAddress;DWORD Size;'
Global Const $tagIMAGE_BASE_RELOCATION = 'DWORD VirtualAddress;DWORD SizeOfBlock;'
Global Const $tagIMAGE_IMPORT_DESCRIPTOR = 'DWORD OriginalFirstThunk;DWORD TimeDateStamp;DWORD ForwarderChain;DWORD Name;DWORD FirstThunk;'
Global Const $tagIMAGE_IMPORT_BY_NAME = 'WORD Hint;char Name[1];'
Global Const $tagIMAGE_EXPORT_DIRECTORY = 'DWORD Characteristics;DWORD TimeDateStamp;WORD MajorVersion;WORD MinorVersion;DWORD Name;DWORD Base;DWORD NumberOfFunctions;DWORD NumberOfNames;DWORD AddressOfFunctions;DWORD AddressOfNames;DWORD AddressOfNameOrdinals;'
Global $_KERNEL32DLL = DllOpen('kernel32.dll')
Global $_MFHookPtr, $_MFHookBak, $_MFHookApi = 'LocalCompact'
Global Const $tagModule = 'PTR ExportList;PTR CodeBase;PTR ImportList;PTR DllEntry;DWORD Initialized;'
Global Const $SID_MEMORY = 1
Global Const $SID_NON_DEFAULT = 2
Global $hTitchysidDll, $iSubsongCount = 0
#EndRegion

_GDIPlus_Startup()
Global $aDPI = _GDIPlus_GraphicsGetDPIRatio()
Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit
AutoItSetOption("GUIOnEventMode", 1)
Global $sText = _
                        "This is an About Window     ²" & _ ;² is the marker for the column width which all lines below must follow
                        "coded with Autoit using      " & _
                        "GDI+ library to produce      " & _
                        "this flying chars effect.    " & _
                        "------------------------     " & _
                        "Greetings fly out to:        " & _
                        "All Autoit users around      " & _
                        "the world!                   " & _
                        "                             " & _
                        "                             " & _
                        "Coded by UEZ 2021  ;-)       " & _
                        "                             " & _
                        "                             " & _
                        "                             " & _
                        "Press ESC to exit.           "

Global Const $binSIDSound = _Chip_Sound()
_SIDStartup()
_SIDOpen($binSIDSound)
GDIPlus_About($sText, 16 * $aDPI[0])
_SIDStop()
_SIDClose()
_SIDShutdown()
AutoItSetOption("GUIOnEventMode", 0)
_GDIPlus_Shutdown()


Func GDIPlus_About($sText, $iFontsize = 16, $dx = 30, $dy = 150, $iSpeed = 33, $sFont = "Courier New")
    Local Const $iW = 540, $iH = 500, $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ About Window"
    Local Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi
    $bExit = False
    $hGUI = GUICreate($sTitle, $iW, $iH)
    GUISetState(@SW_SHOW, $hGUI)

    ;create canvas elements
    Local Const $hDC = _WinAPI_GetDC($hGUI)
    Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH)
    Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC)
    Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap)
    Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer)
    _GDIPlus_GraphicsSetSmoothingMode($hCanvas, $GDIP_SMOOTHINGMODE_HIGHQUALITY)
    _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas, $GDIP_PIXELOFFSETMODE_HIGHQUALITY)

    Local Const $hBrush_Clr = _GDIPlus_HatchBrushCreate(18, 0xF0B0B0E0, 0xF0F0F0FF), _
                     $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xF0808080), _
                     $hFormat_FPS = _GDIPlus_StringFormatCreate(), _
                     $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _
                     $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _
                     $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 100, 24)

    $iFPS = 0
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About")

    Local $iLen = StringLen($sText), $iColums = StringInStr($sText, "²"), $i, $u, $s, $r, $iChar_Space, $x, $y, $t = 0,$f, $b = 0, $a = 384, $iCharCol = 0x101030
    $sText = StringReplace($sText, "²", " ")
    Local $aChars = StringSplit($sText, "", 2)
    Local $hFormat_char = _GDIPlus_StringFormatCreate(), $hFamily_char = _GDIPlus_FontFamilyCreate($sFont), $hFont_char = _GDIPlus_FontCreate($hFamily_char, $iFontsize, 1),  _
             $tLayout_char = _GDIPlus_RectFCreate(),  $hBrush_char  = _GDIPlus_BrushCreateSolid(0xFF000000 + $iCharCol), _
             $hImage_logo = _GDIPlus_BitmapCreateFromMemory(_Logo())

    Local Const $hDll_k32 = DllOpen("ntdll.dll"), $iMilliSeconds = 5
    AdlibRegister("CalcFPS", 1000)

    Do
        DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 112, "float", $iW, "float", $iH - 112) ;erase canvas background
        _GDIPlus_GraphicsDrawImageRect($hCanvas, $hImage_logo, 0, 0, 540, 112)
        $rr = 0
        For $i = 0 To UBound($aChars) - 1
            If $aChars[$i] <> " " Then
                $f = $t - $i / $iSpeed
                $s = $f > 2 ? 2 : $f
                $s = $s > 0 ? $s : 0
                $r = (2 - $s) * $iColums * $iColums
                $iChar_Space = $s / 3 * $iColums
                $rr +=$r
                $tLayout_char.x = $dx + $r / 2 * Sin($t + $i) + Mod($i, $iColums) * $iChar_Space
                $tLayout_char.y = $dy + $r / 3 * Cos($t + $i) + Int($i / $iColums) * $iChar_Space ;* 1.2
                _GDIPlus_GraphicsDrawStringEx($hCanvas, $aChars[$i], $hFont_char, $tLayout_char, $hFormat_char, $hBrush_char)
            EndIf
        Next
        $t += 0.025

        _GDIPlus_GraphicsDrawStringEx($hCanvas, "FPS: " & $iShowFPS, $hFont_FPS, $tLayout_FPS, $hFormat_FPS, $hBrush_FPS) ;draw background message text
        _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY) ;blit drawn bitmap to GUI
        $iFPS += 1

        If $bExit Then ExitLoop
        If $r = 0 Then $b = 1
        If $b Then
            $a -= 5
            If $a < 256 Then _GDIPlus_BrushSetSolidColor($hBrush_char, BitShift($a, -24) + $iCharCol)
            If $a <= 0 Then
                $b = 0
                $a = 384
                _GDIPlus_BrushSetSolidColor($hBrush_char, 0xFF000000 + $iCharCol)
                $t = 0
            EndIf
        EndIf
        DllCall($hDll_k32, "dword", "SleepEx", "dword", $iMilliSeconds, "bool", True)
    Until False

    AdlibUnRegister("CalcFPS")
    ;release resources
    DllClose($hDll_k32)
    _GDIPlus_FontDispose($hFont_char)
    _GDIPlus_FontFamilyDispose($hFamily_char)
    _GDIPlus_StringFormatDispose($hFormat_char)
    _GDIPlus_BrushDispose($hBrush_char)
    _GDIPlus_ImageDispose($hImage_logo)
    _GDIPlus_FontDispose($hFont_FPS)
    _GDIPlus_FontFamilyDispose($hFamily_FPS)
    _GDIPlus_StringFormatDispose($hFormat_FPS)
    _GDIPlus_BrushDispose($hBrush_Clr)
    _GDIPlus_BrushDispose($hBrush_FPS)
    _GDIPlus_GraphicsDispose($hCanvas)
    _WinAPI_SelectObject($hDC_backbuffer, $DC_obj)
    _WinAPI_DeleteDC($hDC_backbuffer)
    _WinAPI_DeleteObject($hHBitmap)
    _WinAPI_ReleaseDC($hGUI, $hDC)
    GUIDelete($hGUI)
EndFunc   ;==>GDIPlus_About

Func _Exit_About()
    $bExit = True
EndFunc   ;==>_Exit_About

Func CalcFPS() ;display FPS
    $iShowFPS = $iFPS
    $iFPS = 0
EndFunc   ;==>CalcFPS

Func _GDIPlus_GraphicsGetDPIRatio($iDPIDef = 96)
    Local $hGfx = _GDIPlus_GraphicsCreateFromHWND(0)
    If @error Then Return SetError(1, @extended, 0)
    Local $aResult = DllCall($__g_hGDIPDll, "int", "GdipGetDpiX", "handle", $hGfx, "float*", 0)
    If @error Then Return SetError(2, @extended, 0)
    Local $iDPI = $aResult[2]
    _GDIPlus_GraphicsDispose($hGfx)
    Local $aResults[2] = [$iDPIDef / $iDPI, $iDPI / $iDPIDef]
    Return $aResults
EndFunc   ;==>_GDIPlus_GraphicsGetDPIRatio

;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2020-06-05

Func _Logo($bSaveBinary = False, $sSavePath = @ScriptDir)
    Local $Logo
    $Logo &= 'iVBORw0KGgoAAAANSUhEUgAAAhwAAABwCAIAAADaNT4jAACVR0lEQVR4XuzVPwqCcBjH4Y7aFDRFW+BQU3ODQ0SrkycQIxAPUeIh/Dcq/uoM0hI8z/x93/WzCj8CAH8TFQBEBQBRAQBRAUBUABAVABAVAEQFAFEBQFQAQFQAEBUARAUARAUAUQFAVAAQFQAQFQBEBQBRAQBRgXkMYVpwB4gKzH3XVO9XlhfxLd1H8Xp72uzOh+Plek8ez7Kuq6Fvv7MFr4EP+2b2W0eW1/Gz1XrXxfa1b2zHSxzbSZylt4H00CiA2KZpGiSEQEItgQQSmn+Al3nmBcQD4hWEYCTEMmLUTT/RTZOehsl0nMWO7Xi53nKv1+TuS92qcw6/qkpfNUmmY9PpRD2cj6/tU6eqzr0PdfS53/qdYugnG4VC8kqlXCzu5jfuLa8VVjb2t/eaD2rIERFJbEINTHJIIrHhiut7BG2ZpJGJoZNDfWMnohNjudGRwdxAfzKZQJihp6FQKLCfVn6iUCiJuA9KJbDI6vr2Sr64tnV/e7deqiOHW4hGqGYzTSOEYAyHSvjtzgWEwxmBuBDcc7nbRLxpkFYqIgezkbHhzMTYwKmxoRO5gXQ6RaiOniNHnKcYY/RlUCiUVBQKt9O+f//+veL+6trGSn4nf69U3G+Wm6QjbMzAIhZjoUUChRz9gsc4cAwWgWM8tyW9ho5byag80WuOB44ZG8kNDeYymQzTzK9OJBjj45541NMUCiUVhaLZqO3t729tF1fz91Y39jcKpf2SV+9YLmeY2WARShklBB3NIsdyDLyEEJ7ncbcNjmGoGbNEf1obGUycHh2YODV8cniwpydjGNb/WSRAaATgs07UarcbjUa73W614NWCDxAeTAhhjJmmaVlWJGJblm2aOv7fo8E43TG7lkIKhZKKQpHPr/35X/zV8rZTaUc6KBrczrIo0yllBCPUvaP1PMChZoSQnHue6wivRWTbJM2UVTs7nvj2'
    $Logo &= 'H//h0NDQsXTS9QQ0hJSNev3g8GB///7h4f1SqQRCcRyH+wiMUVcVlFJoM8YMw7BtO56IQnLq68v29vREbDv0hxDi+UhFoWDo64NCMTQ0/M7v/e6nN5duLxXW7jVKzTb3CCEM0cAo6LkZBZAICN9VCiQ5w+2U3R4fSp6fOjNzZjSVSh03oASVHlyv17cK9/L5fHGn2Gq2PJdLIRljsEvXdWiEVoCDu/kjbDgB9x8crK+vE0qikehAth/ElsvlYrFYqJYn6kShUElFoRCHBwfLK+uzt5dvLWyvFZrVtiVojOkRvw7/lUWWMKAIgSCbeE4N81rSdk8NRS+cGb40Mz4xPtzT24cQOV5Awf4PNA4OD5cWF0Enh+USbFJKDd2AXVgiQin0YJ/utIVNEmxDGwOccwJQBIgA7nrQBr0NDw+Pjo7192c/ryL0OAqFkopCIYW3u7e7dDc/e3vl1mJxc7dd70QQizPdYozhLy2YUCQwhgcmcRrYq8ZMZ2TAPD+Zfen8xMy56Q8++PepqemZ8xePW4GHfyTIGVAimpu7s7m5CYWTIJFoYWoRQoahhHOOAeKf2C2o4AC/LXAoE9gKjwnPokSDtuu6cLplWaCWycnJbLaX+COLUDA/1i4KhZKKQiG8TqFYuLO4Nre0NXd3d3PHqXtRRG1NtyhlGMtQMMcRCfc6TQkiMToj/drMZHZmeuTs9EQuN9BdVfzOH3z7N9765bd//c1jSSX0Qalcnr8zDzesatWGpmmMMc551xndg4UI6yiIUPLI7S8JCNxtYyLxZ1DyUE7BCNJ1O5qmj4+PnT0zlUwmu/fc0BejUCipKBTf//678bgdj0V39so372zcvru7ve+2RYxoMU03P3tORTxRJJxzt+MvII6ZfDDDIZFcPDcyPNjHudB16/Tk1COOeOeP/uTNX/qZ3/rNbx2rfAKBY2VtdW5+rlwqg04IZtAPnbDrkdI69Oi6Dv0SccCXSADsogGM6tAIB/d4BwYJ'
    $Logo &= 'D0OShPohwX/GGOyC4BKL2tNTU5NTU9DzPMKKQhXqhRDoOUIIaXecWqMWtaOM0nKt8njDMkxo+x/s/yWKY32hFtz9+3+5uryjj56InB2LvTxz8q1ffEUIvra5Nzu3Mb+yuVfRHG4QPcqYjoORBecQSYRbtzRnKMVnTvddmjk/MjwgubuxvXftxtrf/NO11c3SG5fif/an33n0s2Hc6XTQ0QiNAgFl9vr17cI92LRtGzoF9xMG2AUBXVswBvGiXm/s7BRhDVi58gDK+K1WC8QQSoUFmIadSCTi8Xg2m01nkvEYiFPvAI4HIACTcMGYYRggMOi8cfPm/sHBxYsXoeLy4r2iUKu/MCYISbhm7y4vLt1dhM1YLCaECDN7iODc9dxuivcA7iEUxHYhYFY8jN4SurDreW3HYZRRSjquqzFNStFqNSGtu51OpVoaGxn95uWf7e0b0HX9i9WiUBDK+vt712rJnQbbut5677/mY8aNkQH28rncr1y58Pu/01Nvdu4srd9a2Frf3q82BUIymaSnTvZcOndm8tSwxtDmtq+f7/7rp9t7nYZrET2u6TnPTCVTT5oNwcMrR3yMkRBSKBZnb8yWy2XTNKEnTB6MYc6FFJgxTdcIl2L/8CC/vl7c3Do8PHQcx/eBGQcDpdIpTWOEMUKJ53qwq9VswrOf9ZVVIbilaz2Z9NjoyMSpsXRvFhPadFyYUyBaLlyEKZxF4B0Mvbi7U/249tLFS7BC7IVX7xVKKkhKxD13fX31o6sfSikz6QwXnATr68N19AJ2ex4cRqhvjmarBRJilD6UjZACXuGSzGA02IRkLgSnlEp/EC4Fh9EqlUq1Un7t1ddGR8dTmV4d6egpKBQ4EdWl16Z6lJoWsmxPoqV9b+798t+++2FPjJ8ZS3zj0vg7v/3zPekEIZQGhYpCYffTWyt/+dfv391sVFoGYnHNyFGbRR5WYpCLZTSWQo9DMIxwxGXIyyvLt2/fFkJEo1EZAO2wFK9r'
    $Logo &= 'umHYIInV1aX5uTuFnV2OcLJ3cPLi5RODJyCFxJM9lmWFKgJgOC4497jjdOqNWq1e3dvd2dte3ykWPv7v65/88PrJoYHz52fGx8fjVqTZbkN0CeWHAyKRCPRcu3at0WicPn36RS4MUyipdPOKbUcy6R6QRBjhCfYzhxNcu4wxzfCPAhCAqa4Zhq5B/qAuzB6Tc5CIG+4N10V2ALcDw4Y9AAiIu2AgZFoRQghGR0KhyKQTUpaDpq8EjJDGiKYlEEpVhfjPpfZ/3F4x6a2+hBzo0XWNFA/a2wfCkSCSFNOyVqK7ZozDHx+MJXdty0SPQSkzrejTJguGrL6wuLC8skIp1TSNc46D2on0Qb5jBFpYWLh+fXbvYD+eyFx45Q1YU9Z3YjiVTsPxhBKEP/fIvQRg0z/dipJEpk8Ib3xi2nVa5dKDw73d1dXl1aU7//y99070937z9Z86NTUNFqlWq11zCCEg/XDXm5+fB5OdO3cu/D734tWiUA8/UkoNTUOCNxATCMeR20JGi5oESdwo41YdMWYh19V1z4hiZjMpCWOoekhaFcI0jFBoFkFwh5kESwwdhEjodQkcCS9d1w3dCKqRLx4p5VM+iUR+DHtxKNIJG/G9h5m6i9/mBCPTMJFpwdauIwqbrpSSMY1Gw1AiEBJIPnFVi2dQFz2GYactK/LFRuGcz83N5dfzoIfwlhclVAaDQo9hGMVC4erVH+TzG9n+3JVffXticqYvO2yZMYodKXyxCZcH84F8Vh9BhMLZRIBMOApyv29BYUSTvWYykx0em7z46uX88uL8jR/94/feGx25eeXKlcGhoUaz6XY6cL4f0AhmhiGlhOVn8PfMmTMw0Z55iUWhpNItJ9Kn5WAZ/EpGKdONtkANLSmZqYsWJ5pLfKkQ+wFuVAQiRHKPWk0WlVQjGDkwvpGSdqmNqZQIY3+oNtI8pHEkuPD7CEJmrWjWqw4EHE0TQkA9H+TyTBZBht/yjlVcfWSmOU7bT1au'
    $Logo &= 'C/vDRMaoRhk1DNOfrpgcfeGDlIhS363PwncA+voQGpr40fSZ0pNJIOmiH0M3vjCCmK6hgDCUfAEEyd6+PvQYTrtVr5WeWEfptpeWlra3t0Fm4fVACfEEF5jatoWE98NPfvDxJ7OYmZd/7tfOXngp2dsPR2K/bFllgUUokYQiii1oE+KPHJrFfxchDCqFpFwyKiTyXCQJF4gwM53Jxl9JDY9PLy0sLP7ow+/+3T9cfv2nX3/9MrKsRqPujyM5JhRgjBUKBWiAV76S51cUSirdJ3XRESBSdCSqIL1t9nh2b4s70CnD9BEZkJ7HHZd33A6XLsHdQWm6p53gNdfjQhKMP//GDY9zj1tCppsVzDtIyo7r1puNaqMWjcYIDPAMkMepIeFHplmzWd/a2iiVSrVqRUgviGtaxI7Ztt2T7YPaT8SwukI6Yo3qy81iCT+hn75mYHyEC00e1zqnJ0Zt9pGQmKBngxDYotVz0yOP9K+srNxZfWCay2+/+QuabjxyzYSN1dVViAKQSLqyCZ9qTFl6pVZ/99/eX1nLD0+99tKr38gNjZh2FCHudhxKsaFpQWkfhy8WLg2mMhAKCUcT0CeEJyTnEhOs6/4pnAiMPddDRMhEInXh0sv9udz87LUPPrpa2N741ltvJ1PpWq3M/VjGw9QCHw+evoS/U1NTz/6LiUJJ5X/Yew8oOa7zTLQrV+fpnpwwGAwGg5gDCWaCYI4mKZESJVHJsq20Ppbzyu+tfdZrH0u29lmWbAX7SAySGMUgJokBIAiQABFzDoPJsXOu7n7f/9+aOs0ZABwAFA/fPl0Mm9XVFW7duvcP35/Y63H81KnjkGgm8kDA5kEcIFTbNLtjTsBtu8ZjelsWCexF1QCqVVL0sjCjlMBDihaZ20E1VIj6JSwlF9FOESMAp5ukS7EU/OQSp+QsC6vE1FRyAsAakcsWDPfZdD5HypDbMHGJeCp3/MTR44f35XNZL5s6He6ALU7aqolU5eiZSh4y'
    $Logo &= 'JMWZpokcrhAP/T5/wB/E/samVtzS0SSmo6CMDA8cPHwQbqAwbMbjsTRnjYX3gdB4sOg1TddUzXCb4HzIFzujpXVe19zW1nZHtXKiECqbIBDdo7Hd3cPpbN6SJM3QxJALblPCIFo0iE46QMi44NQgTF6PEfSZ0CiDbr0+4Knyuv0ew7kyjvjoS5t4KX2jsfX7u4czOYyfT1ezkEBKRCotWEXSWWBRV3Q2r5s/47wu29HReefa9kdeGfBVNcJr5CIj6sEC0vGBf/mL29ra2if99svnX88orW/vjx05enzBgvlTxRFoAMePH3dQLycBl8/rHR3oe/yXvxqO55ZdecvsBSvC4WpZ1yBQaYqLsSm+AjcZTZGw3rBTMBhxEVZUaBBdRWKg+MCyI1VDxhWY+WBnGdpYuap+5pJLPdW1tXu3v/3ww4/ee+89rTNaEokYxsaZ6kDhwFewWGbOnOn6wNvv2u9sKuPjY5vfeWtosN/FOVAx59LpVL5QbO+YHwwE/a0tmLVM+DgiC+SSuENJKhakQhZ8A6QQJntEYhGWJdsJJRSgwqCQhDxIGdj3iyWVfwLdR7AWeFMZfSqrsEioQEXKZBqFn76Vp1mvoilqNpPe+u6WF59/Mh6P1Nc3gLC+hwcoMsg6uoPTCNzQNHQSC80N8c/nVRUJHAVuoQCOOzvntrd3Yo03NDSB05wRORJcM18sxaIoQLvvyJED+w/u6+3vTyaSWPkAKHA7NFuIxrX4X4HwB5wrNzY2Hpm/YEbrrLld85qbm/2+gIiXngQsSHz68aHoL945GM/kC5JkmAYXmyIWi6EvYdCzuSIbmSb8F8A28VH2ufWglxCVoNtoDvnqgt6ZdVXNVd56vwfbTJbAnD+iaQQde8eunpEfbNh7PJoERwmoSrJYhqqKd58pFEeiKTDqv7vr0vNlKmh//OVPqepjj/36dFGrA7m8oGQtEv6y2bTbNfw3X1p17VWrz4izlYp99YFSQ30lMmaHxEOX'
    $Logo &= 'PXz4sCyYAK2UstgPszx0l6ee+GXJCFy67sbq5naP10dyQ8nirP2q3VE+S+KG3QphVcRR+FMWGg8akDQFs6KMGSEOdjETok6QrKMb2A+UregN1rXNXeoJHd32+kMPPXTffR+fPbsDuZAFn3MmPFgguldTU/OhgWD/f0HbfsdUQP6QJDWZSgNxNUxCcgsWEU4rG7cycRFRZVMFiZpYgySJ5Ymgc2kj9hlWJMtOc0RHIHl3ulCU+VRV7KL1UM4WrBLPLdrAEgKCLdQaaqQkZaETQFgDS8qlYc7IZgv4xCmTIJKsK+eADLm87V2WSqZRx8l+Zmj6qrx9x/bqmjq/33f9DTdfuvKySryisoElDo1FXnn5+U0bXimxuhYKhmqqa9GviVSAaJKDp2Ef80hiqflc7t1t2za/805X55ybb7x5yeIVUF/ONtp46niuYGFACLYokBEqk4FqI3k8FL+Ai6maBSbGT8nOTApulLCs6FgsX8IAuvS+UdMgitQWDqyb2/J7y2Z73YYgix9V3EsSHrUD8UwCcjYeDnMjm8srWgECN1K9Zy2wdJ9Hq/FcCIiFaVQbMr/1p1c+/My7O47kJb1aN0wRSD/NrJG5bEotRa5e7FvW1bZsybwzEr55XTOLmV3LVjZU19RMopJQZAGOYR0J6zc2ePoZXp9x6uSpJx9/tuhrXLT6Sk8g7NY0FSo+gGQXBDWFJpaAuLAhtBNXWcGrV8uKqpCgxDAYfoUUI7zIJFtjxziW7U+JroVJSxdQdLVUcJvudMZrems7V91ycO+rv3j85w/e/7mZXTOhdmONCealc9QkklrCVQzuy1PJ/aRsx7QxtQzMeTbnXGfopqaQmVQYZurpk7qK7bPda/rHOLj3pB5OvZdz1tkuPp0Dph5c2YGpZ03dWbl/GmMy3fGZ+tIvkKkIGRoyjmInp5OFMz5t0KYsskWAAmK52IRLTHWChEmQxjQnhxV0iM6SIEdlLCtr4QecSpZGhQ300Fey'
    $Logo &= 'FnEUPlciPqGocj7jSo65sglJVmXS4Olm1BvIZQWQ65zE2jooD64luRy/ZDpAVjVF1SfmmhMKIGmqTgX8wIsKUiaXH49G8UB9fT2nT5288fqbg8EwHpNFv5Lj3LV//563try9ceMbieh4oCrk9XjBYvEn5EC0M9NKjs7Br4V0GvjYnj07rQKqE46svfZG4SYk9JWKSVOKpNPjuaKuSioGio5gfiwr2MAYlVRNwhVZbJXtMxmWYTamyUSNABVG07lkzhocT3b3DJ/sG71+2ezVsxrxqnC7j6yLKN4jJIZkPCVh2E0tbYFlsm+6rGQKOcxln9sM+f0XcOX1b7z+la9+pbml/S//9Mt339j08vp9Ow71Jwo+RferqiEI83t0lzLNPZ7SmWI+FnZn166oufOmdb09Pd/4s7/euuXMqb0KBQv0G9N3Kvk7ffo0IhxBpitFFrdHHRwZ+PnTv1QD4QXL1+jugKySZ+OEw7xUnlxiixkI/ckqHwQ1BbKDxmoyVNZCHhZNvGJMWhXhjY5wY09Oh+zQqi17fP5YKu1SPfMWXHN071sPP/Xw5x78XHNTUzIeB7MSN8WySiQSwMEQvHJGyuhQOvG1Eiu+MLWD113pjAS98r6VOTSnQ1gvskizw9imXhxfp/IYQYHOeHGn5+dbGdqhYZUjP7WHH2xRamfwJzGSSfzmQpgKVp1hmGiAg92mCVKKeyAGxTA8kPWhN2BS23YCx/YAFB/wFnQUbDDqJTgKlgK+QkFJWxYBXAI0g9KDTrPuUoABpQJxKGB3LqMnh2UrDUirYOWFEiPcrGRFVcnuUsZyxZqqfHIx9hBINciGJYY72LLpshOJ6xaH0Qi3GUB2WJG7d+0cHBgYHxu78457Gxub8ByOJWLHjq1PPf340WNHEDjW2NRiGgbwtBKvV5iR8H96am5l595ouDHje6bpxgBWBYMjI8P79+8/3XMaj3zHbfcIj2QnDA10ARVxsdTBLA3FwDjb+h8QG4kG'
    $Logo &= 'Dp+qrtOc5VlRrITpZM3UNYl9gbAfRilTLyZT2b29o4f7Ro8NR7PXLr1mfhtJAHzuR6yxaS0PzpsFY/Ebqs9jFmQZ40fdNUD3c5Ip14YC4WDw/Mt5nfiDP/iDeHQsHh3/3Oe/5PP7b7h+7V998dOJjGv73m4kahmNWdmCUnLZCRoUWpo5j1GuDWlz26tXLVkyt3PG6Hj0u//x8ycee3jN6iWQ3M98o1N9shE+1h1LJWMeb8BZb9CMh4aGQKDxleFhS2RkgSnu8aefz8jeRYsvd+lBKFBu1ZAlFQvEpsk018XbkiolVjTs9piGpkpluiL0OJHZBTixhlli5QrvQXHLvC12sBSHpaQZmJXeZKZYkgMz56/Zv/f1J5584guf+7zf5wMsIepIiuwv6Hx1NUwwtZOYxNnUEbEWLh7+wnXOTWQ/tLL8lZpTJVE+21fBaM5xKbRznD61nbte59k1p3Lla7qYx5/63i8W/qqYjyWxQbYKDmxERGIinfSYpphJjnBFoE8xD/s8tis5Cv6lLAscRZYcuEgCI8lZFDQgTPdQbnA/8XvOysNS7yFpTC0VwcnI4k96jCLRMaxDQUeJJxJEESpZt/2ZK+F8bjK5tRgAoS1uE+uNGpgl1pIvEIjHE08981QwWP2J+x8Q05qfNPvOlk27du+ora2vrWuAQA0FCQyAPXwk9KfE2zjYcRSwmYQFK3rB4e1ouAI42anuk+9u3Tp/7sLm5tZKHKyMZymqhVxRyWclA29Ewz7nBTgb4uoCJwQjlc9An+k0TZaqfGbAXTs6Ejt4evjXu080Vwc660NUseMjGTozGE0hUwqGF9JCqUzKaN4qU0YREkzAfaFfsvp7Pm1gYODWW2+FCy9/IzAyHos8+eTTz//qpSVLlt579+2rbpmDZFmqpmdzlsIGCtPQfV63z2viZu9s3f7a+s3f+tdHDxzYGx0+WixkYLiGdHXGVbJz/2nDXTUYSZw6dXr+goUT7uY5qCkit0pR'
    $Logo &= 'GFLYKIiu/PrXbwyPpueuWlc2aouyrqlAlsFRhNov44PXAK0ZZ/1NzC1AnnI+l4mMxbOwbuazkN0gXWEuaWaViA62ZS9bia7UVMqs59Mn5C3dY6RL6WLJM3vBNcfeff5Xv/rVJz5+H3ajw2Jd4FKwSp46dQr5xAwOZKmksAcPHgTLBL/BMWTh4f3YgNCGnGYoNzlv3jznlPPy2oedaXBwEOYczqXm0GgaOiQ9w0iuXr16UmcAMKZSaV3XnLGqZE5ix3Soa6UeIMJC4Y+D/txyyy3YFlkPxAEYpSxXdxZ52JzimxN3tOUBu+sTTcSDQ6rwcsNoY5zf16SE/bjR9u3bMSZC+nESHwjej6m+YsUKZMmqvFQiEYfDIdBLC2TTFlBsMiuGVBjqzphYj5Ea+z96JPYMdB4N9HL37t0o+7Z48eIPIvhxgkTa+SHAOXRR3aFYxrLL5rJFo6wXJdWV48MIlcYNGPUCR8ngMKEA2TI1UUaC13CxIns3sXwG1Ae6DEMguI4rlc2hKHeJr8ZYsY0GMJJs0Qrkjk3yEy7iyhZ9IapE+kRBLhUZAFCJeJUdmEECSMcgnCuTTr348nNVoaprrr4Oahk83zZt3rhtx3YC7lQaVTymDYvnc0KeZBTLQvRyPB7FpaCUBIJBvz+AdY4Fj7tNyvik68beA3vf2PD6x+79BAgBBbJIorflSDqXyuahvDgonoRmn0vwYJ4z3wgGBi7qiERlx4eYPyUxbxh/193GWK745DuHuhpCYCrOpPqoRbIMx1Ij8TQ28IScU9EeAPxBBPCqasg0Srnc9C8IenfbbbchLmQq3chl01u3vP3uu1uE/UBRQQeN2Z1zV116eaCqMRpPnOzu379n22g/DCEFfslFMbIgAWdc9mOjw4dOxnS9PpPz7j1wbMHCRWJsh4eHAXxhzWOK0pwhA7pimMaOd9/eefhA69yrFHcdwFFgASoQYrxel46pzZ4pAHOJsQj9G1xWKKvkpqG6UnEQ'
    $Logo &= 'bfyNw4kGGjeOQcc4laTH9Ic8VY2ASUvZrCBh6H6R/ghJxQYkPhftIwVeI6W9BKS0KPnq5l6xd++m2VveueyyywVTQYcFoQEIhgdxiiKLy2IxnO7pQe6yxobGdDpDUDA3RSXvAzw1KA6YygVY17ABjrJp8zt1dXXpdLpc0fCYmXQSpBNMRfTEYULbtu/EwaDy+DoVnxEfmiY6qfAndjjhyXwpBh9EigGbxGGINO2FF1644YYbiKNMZJWOxKJoSByFF4B8a5AUcV8SVVmydXo7Yd4l9yOx9vGpcgS3AH7wysLhcBU3r9tT2fOpdiPwrbc2bwILpxuhVXh0GjoplEiFIFIvStywsX3Hrt7eXrw+UQqhAgi1kRWhkgpuoXATQ8Gzlau7FSw0nIuDoNxiEHAMco8i48PmzZv/8X/9w8VE1E9Ve11846LoHafahlRZoIyoJXSjVMAqYQKhgAgyxUxbxVRhAvVimzzwLvzhCZjIsX8SjuML4lwcKhOzUeOSz5WTXLCaOPgWTYVigW0qBJKA1ucLgoFV9jhbEHW8aS2rWLh5BTspLN+gqk2OFxD4DLgC22bMGa0zDh7c94vHH8XGgvmLsFo2vvVm30B/fV09Dsd75UfHqXR73I5Gni1JkHC9dfXYgKEGh8G32qCar6RtOFISguNwfFNDw7ETx97atHHl8tXLlq1Alj8cA6KGw8YT6Wi2UNI0sjCweifgQ8Ek4EAHjMgiYxJFTiu8QgTxVcgpiMdwwqmamDS/Fb/PrWjWviM9mw/13H/FQk0hnK1MA6JOgUfxd057vlh359+4l9K5rzaSzo2lc4x5lrMUEOgq2RVCimDaXt3TEvAqIIjTaxAev/CFL+zYseMcIimmBIQ4JCxhCSG3c8e7u3btBFFkEdUCKjrVSWzVqlVnvNax492RFOi6oujB/Uf6hciFaQA3YsdIYANfbnNoaOT1t3YEa+d4g415S3ZrOo85WCme3QISJ/E8ByfBn8IjB4XU'
    $Logo &= 'oolQdJv6+HB/cnQ4mUyAqeAFagqLuiyWwlLpK0qJlBWqbZBlTSR/4eR5LtrAN/blxwanxccmKfAgcrlU2udrrm7uem3j5tb2prralkwaPIlGWyC0oE0gf5CsK60CWHfsrM9uzhMNB+PaQqK/YPhLhGE6YrXDP2g/t0q1BpR9z569FBOdy00N2ORj7CZsUnZTJgyZZcnurUIHOxAFNgI+/yuvvALvzU9/+tMig/UIwMzhIZTmhDsfeFiRmyA3kA6nmlhYVSnLvAIcQzfyH+JcbCNDKBRZsBboH7XVNZTVLRCwT5zqMcS5qx1kEhCQuBXplLo6VdxB4gaIAuB2QpWh+eSMTNkeJbbQCYZCl3VgfPw68RIVNMBOOFmAt5AYMOC//vWvv/zlL6Pa24UxFZ7vAsh39vB3kPSClWPzPf0mcRPvLk8md7KOkEM96wKEehWKDuqFf9BRQCVtN+KiJcYHnwWiiHyMiMSQNEsOlhS3KtFKJwrO0V9FYigZSo3H+r3FOcAnQZaYZCDxuCmO0TA0uoZtDB6Wk6FroMICapawsHTDXiea7nb7IP2dPHEUTEUUAydQjpuhU8NZdCg/LG6BPkCFnTtv/pyOTlyuu+f0nn37oI1Cw21qbMRZDiDGoZxFwAKmbgJSP3rkUFNLM4QWvKpalWCfTN5Kllx5VTM5EL9IACApYoIoC00uB/YcTyMKVPUChNeFG5ipSIbynuLsjtIN04QhlxuC3pFE9vUD3fMbAzVeDfGnqCCgqdp7mMr7eohJwrno/Jt05p2V1wIKkymVhV6ZJ0QUwBdPDMsCUwE8FPIaHve0sohiPP/2b//22WefPfdh3/zmN1999dWNGzdWcDnO4Hv2tmzZsjPu7+ntB4n3lHQIMemsTXlHRkbAsQSdLXKTVLwu650t70ZyxqyO+XlJk1W5LKlF9s7CtITvvUrL2IW9+CuBubKzZEmiLJZujx4fHx0d6oWffToZh1Mfi5g6oy4khmPxY1Vq'
    $Logo &= 'ZXm492R1U6dlEerMsJuQoCSsLNwFw5vF2gXb5vtg9stqAVwk2NBxOjr01qYtv3dHM7pc5iaeBVI5tIdZs2ZVWmsElceKsAo2KCSYoUOeLswPUGwL6okVJy7laCoSKxMOtwDR3LVrF+dKz3vcbsezpjL4zJlqLJLbTdXksxnPsY2rgdbv2LYdYj7mEqg5uAhEBKi/2MhkMyWGB9EfR7PhqeswlcqgN3ZUmmhi0MRZ4hhMEkBbsUgUDYoIog5w5SkGEjuaAnzdLhctqU7/TUOLjI87z4vD4A4O7U2gGiJjKYsqdmMhw+YxGjccRp/cnKFg+YBLQRSy+B+6DZoGZeWxxx67+eabb7rhRsGML8iluFQi2g2Tnkb3K7A6UgnQ2jGRFTidIPQYuQyoA04EC8H5hMZIAvXC1ywbSAi0heRMeAcdD3UD3EioHPxkxCkISgPcjEvlSBnjicvCOA+MhX2cP1+qEGewBYaCrjqKAm6fL4DcsKJadNXWwPoYLhRozPAOcEXhpivxqCZTyQOHDqxefSlruVHcARybB7dAj8b9I0JRIA44Z87cK9Zc2TmnS5aIHa5YsWb5stW7dm17++3NCE0wTaBouizAK6hTLEQDhUWfd+za1tnVtWjJslgijtCfaNrqG49HUuAjpRx0EeaFRRGMwk5rCIgExemq9TfObKClo6mxbGEwlkpkC0PxFKxPQY/p0xVMGZb3iSfhxiyZutyaMjge33qkt9ZoqXdXwVMoUU7Ch83Q3kOmAUCNJtJiJNN5C5CUW1ebQn5ICUBWZlT7SRqbRioY7BcShjPRTwyNI/hmLJXVVaW5CmYLrbHKX5kadCSRGUjnMkBRVJpAedanJBHUVyx5da0lDKVLn460+6Mf/ejb3/72uQ/7y7/8yz//8z9/8cUXXefTAMiccf+ll6z6mz/MEsqqKldfeZlwI+7v7xezsciNDF2G3tfTfeDgkXDj4qLqwbPpMvRdjVg/6+6Yj/iDROGYDBXM'
    $Logo &= 'MwwkrT4yJ0QGev0eLZ1MBQN+zD+aurKOZhNK1YPZAoNQIpke6O+vqW3EiJLIRY2C7cklhQNmyfWS618KdUXVtJySzJXUcEPn0WOHAMTPnj0btytxw5UFj2xoaHCUFUE9OZrYi7UrjhEElJLzQ0e/uIaHwpXBVPD0E1SbmAq6XFm4DBwFFBnDi6BmXpci6YAyyUWqzI16aSM9JOtiS8CDDqTvKNDAoyAXbtu27a//+q/x1LAq4aswn+AwdExA0A5zdTL+lCtaJVNxDmOnbfrnjKHw4Ehn0hhhSMrgMZ2dndCh0bepKhcALpBfAlSLzi8kIjuOc/gJnO/I4cN4CxAdhOqD6ziVQFlepYMnhhGnaCo3jIvDUXgY8BNzE5XIPn6Ftvr8889jFfz+F39fQIUXbKgng7MwHlisAUF3Zmck/lcU7rusQ7hKrMXbloocFD2E6zFEhj+VY1LYjlIEvcfqsb3VylK+THQEJ+ELq/kT1gLaT6fxqa6CHUBpR0YLtQg3BoEW4hgnR5JzjLzDXLF06TwkzsM7cABOULTI2NjJ7u7RcVQ6Sug64Qa4LDor3jJOx9DiMQF5HT9xDBwL5B7PjLuIKuK4mtBSgPMl4tGWluZLVq2+4fqbsXM8EYUJJxyqQrg1qlNAw33m+Wc5YpQev0DAlajjlIOEA4ByaGQIs1SVFF3RpFIhl7d6xhKj8ZRMgT1gQYTx0RRgwxHOHkvlZ9QEb1s86+o5TYlsDkMxmsj0RmAlzB0ZiR8Zjg9GwZ1yflPHCxH4oUK8t4zhLSpqLG+NxDOQSEzDHc8m4YAA+d+S1dFkdiyVScG1OpE5MjAOLkXMQHIls/n+8YTH0GfWBjHCNV6zoz5U43eHELdg6GGf2+9mjZvfqTQ5gxlxPcgAI7HUUCx5dChyaDAaz+ZhjYeG2Fod8ChSR13V7Kbq9toqXAp3HBmN9o/GwILBU4i4Yo4JsxkjreB+M8BUdO19OcpPfvITKObnPuwzn/nM'
    $Logo &= '//gf/wPIA9nwp91ASs6WPxTT4NOfun+SRQfSPfojKsPbIIxV2rbrYFat8oSb0gjFBdMv4YlIJ6FwWUnBf1hfDPxLRWY1iNRhtLeoWMb4wMkaP47JA9xmS56uUCMAijYEseRA17racPL08Hjcrej+UiFjEZJVwieuJjDnEoHNFqkqNE+YeckGcFvTVz2q+nbu3t46c6asGGXkVAJBVGltgNhBSMcgOMRakWRNUd2GCTovgvtF0XtyjOZ0DxcTBQkoAaIHAC1HTRGmo6JlCuwI+4HsA4oB9SS0QFMlbg6A5iA8gkg69m2hAwkXBowdjSQj2I6a6zYMLPxfPff8Pffcs3LlSvgjwGKBY0BYQOsrNSGHlONXgROIEahgKwINsTmuw6SdntgcVLW5Ah4NR+7cuXPRokXgH5NUATHaEAQr/arFsIjnFaYXMFqghBBrPG6j0meMZ28lxE1jwjMTh+OP5hLGaWLA6ZOz+oICKWW5VFNdA9VtoK//n771LRwrdJcLZCqOhVkMq3hpeQ7k5k2h01GcisycocBzCUBuOk8ossaD4mgxuSJxFDvdCDUwTdLvC6xui8OcAAwR+OVgM071COJkE7Z5MeikwzBIohoGCq8AKG5sbr5u7Q2XX34lEoVRiDGxo3J9bX10fGzru28/+fSTBw8fbmxo0NiIytb3Ei9LdmNhABGvB5/i6QoUdKhLrAM5PQSC4A+gvl4A2KU/GIQGhwWIkkpuj9sfCC1evGzfwX2UVtIR4uyXKWWyWUxruJzhZiKaB0K4r6wnC0WQciFOSezrTK+UCWvaKiVyBbemLmqr62gM9w0MgUvXBbSuBh+8qqPZ0qYTQz9fv+fQWMqoN4QMJaOHYGM8SlmAHFSDQPP5fS7dXZYS5AlXlvpjqTcO9716sHsskSrAYEOgiIRD0QOBwsNG1JtIYZEZ5dKmA8RuQwHfovbmy+e0rO5o5KcRAsHk7GNofZHU45v3bj/aMwY5QtOIWxeItx4a'
    $Logo &= 'jiGDG3hlU0P4c1ctunfVXIK/4EcIxcg0chbZqySsUpWImfBE0VU54NH194PpgYC/L0e55pprvvOd74ASQTAEqO2adrv00kshwE7nSEwbqClY1cJEj4cW4m1f/+CRU4O+6vYizXme78RPyOBBf1gzcplAsAnNm3OskCylmfroUHfIDTprxJNFXbczMrDUbZueFW5OYeC2GY37jvaG6mYWyHuOVgCYG2n6AAisEqu/aBL2409gwFjW2YLLF64/2X8MPmxtrS2YEzLeQ1EVBmpI6xDbxS0csqBxc9BvoWRgj3xxPr7CoE1drCDTuHA2a0vTeHfCHQAIFeRxGpApLcvNoe5oTr4A6FhgfpI8JQ6D23/9138B6nzggQegtMGehNkCaiBkecdLSoyJqPGMA7DhsC58imtWRqE5D5Jnw75wdqjkoyJbLn4C6wJjgDcX4KZJ7tpCmahEAgQqKO4uctAJvAvnStyccwVfcSib4Fj4dMQRPJ/XG0A3HC7OSgSWI+nEUNeAFf/VX/2VQPXF3S/YpmJXbHSV7XwnDv9lGzEJlNTRXBa2eQ+DwArjGhZrUCpv58lJq8zWZhgjWUchBcWF6S0YBF3NxtEEtyeDLWXGK+SVVDKfTgJ15gp3+WwuTZYvVcGpmVQ2ncnm2abEpYqASpPDAnEvRkVRNKwqHCKmweiboWh+L/75Dh1Bwtb9GfbZECoIxlVgccJfC3ruwGA/RECMvUpSAJV9AciNn3gcyAiPzLKnTp7c8OZ6qBOXX36N2yBshAP8c4S/L11VFQrhClO9u/FCWYNRGuuboFNjmVNWJinXHU0NJLNhr5G3hIOOTaPBhmNpzMJiyOeuD/pwLQ8Efp1IieoiE31zgx+A8qbDvbtGYrFMXlWwU7gzQAgSyQcVrK0EPR5xmdpQ1VA0/astR9883Hcinu5NZqAdYVkYisAOLIl1Qzw43iDGN1sG+YG1zkLHBlLjkWTm6OmBE4PtqzpbZ1QHNMWW13Aw'
    $Logo &= 'pjzOAsL44r5T7xzp3XqkJwUsj9YT/hVl9sYQ0Bb62X96OP3SuzAcLWxvGMFDyjLJ1CWaNzK/0Ak7QMmtyS1Bw6efax6j5tVnP/tZrMlzpgLr+OlPfwotHts4kvTOaTfQL9CO6Zia8U4hQTs15MUKxAQ6euxkqqQHPWF4bGkmdBHm+hDOoA7IJcgzlOaOZj+VkMTME4vCNNRoJKYV4w01ddl0Wjfc4LqiZJH83iZxU9hvPhDwtzdWHT59ItDQgUWRt0hgAOTMnjHCkUO2WJyiP1rKWFQanDcVb3V0bOD4iVOtjTWUJMciGVxwRzwU9BWMXiWZc2ATpwMYJex0XVxzis04QJawG2tMgvDuHn30USiazht0aFwlpgR5Hx5owpkNBzixBOgh9FT4cQhWVGn/wPWhl4Ai//Ef/zGYFpgKOBaogQHkTRAKboJz4DAwJ6ik0JlgccGGECAqzTPi01F2IZe0tbXB+C9cOSYFoxDRZ4YvkL3LLrtsUlQ8BlYgUZVGGodN4pRHHnkE3RPS/9R0UzgXHVizZg0eCtvCnFGpvb3++ut4EGw73FGwHwwLNDasL6huYtAurp4KDws4FrgLcBtHO7F/YmyrXGI1HwI9pF2plMOWTJKyHV1YJog8T1dwYY4yryCOkhHYLqss4hVMAJAlNieS7qDBLpKO5TNJmEQgSmMy5fI5ShmpUPBwFiazTNYi3ZN7QYQPH7hmAWmDoa3jstF4FJcjCqUgCIZSdYWramACqaoKpJIpdD/g99oCkQD3CoSkAT0dj4yTEZJmLQl0lpVzpovOYoXP40aUNQK24YiMfiGNGKWG5Y6lovHm5haQoXOPO949gDhZlYVBdSSaAKLlBX5lFcRkFMGMYDtR2m9Uew0wb2B7mLkcGkrGVqAYjZ5gY3WgKhwoaSqIuFuXwUtYunMpjFOWi+QyBu87DJjLVTUYt1490Pcfr+080Dvqq/LVVQcAX5uaCi3adsUWirxAgdEfxjO9HPcO'
    $Logo &= 'v97xROJg/+jh4VjPePLjl3S11dlUxgnYfH7n8f/chNyQ47hmbXUVtFVyisNI4oEA/OPIgNdfsCLx1Kaj/YlU7rIFbUciKdPn5sw0DDuzzZPM1YqGrvhNrQl5DLSzqtuQW++//36Qg3NzBbiHOi4rUCbOF+WfpkcTNFeQIc7wZjdsI6iwp3dAcVdlSzrlRiAezE5ZIAqY8XK5yLYDixNBEshVxEqSi4qUBtyeiC+fXW3lUyx4qQyQT9irK5rDwHC7bCreUhsYiWX7Rod9/mCBoQW+PqGr+OTvriJzcVaVaLQLJYWIjDuMribjUcnjR6iYLT6yORDjDKYyySPG9pzlwxwN5qKzbTsb9jNWejPTOs3nQf6c6JmpPAlQEmg9+IrFCfIc4l5kvAgSPU4HlcelKtUU5seBr3/96/jptddewzJnSIrXApNvB3oCPAWu89xzzyF8BL3CWQ5AOjVsXpwFVU8EtcArd926dQjyKLDTbqW1H5QNLxwCMVg4uCY8uR1FqlwReFQJDDhIEo5Mcptk6he8ULAfTHukSIBHAAZQ8GwnfAoSA5A3HCn6U5kZAZTq9ttvBx5YaVG7yCJdFXkRpniHCnYgGCPmblYqJnMFfApXV0hDIiMLttmZAPCuDFksz2OgMH5lgSexk7etFXEdbSZSKheRUDk1ci6dyuECkP1JxuNFxdKRk6SPZr+i6/lcXig9+K0ydzFPNRrZTCELnMDj8cViQ0L1IyMQJ7ogUAv/K6sM3dFZFr6T9mMr4HaIM+WpJEgNaADY6Nbt2+Em39Y2Y07XnMWLlra1zoTZ0L4tcjBnkhanahZ1+AV7I684i3L/AZIq4SceKxW+BDmSJiv97oRchEhAb0nSJRcmnKvo5gRZjG1hbPLUUYxxhtS0ktfNuolw5GXKJfKPYdLQYYgjymU2H+19fstBmEw6ZtSqusaJCVzwVy5rAJpIz0A3TVXFBi7hBqcUD84oLMbL8PtDpjuSzuw4evrqzhow'
    $Logo &= 'lcr4XShML+46Fkukav1eADXgJRlJov4x5mmxhiqzdolHrqsLDeWsF3Ydy5QlN76TH6DKj86vRNFgDYK25TE0t+kD53WdqUFCvPHGGyFJndvGDrN8V1eXs+c3v/mN63wanXv25hi0STgYG83RZCqzPpTGp+YyBodH4figBpszOZdslIyigmfFFKCH1rAEJMwHYUe1JEtxqXKZ2ExBNWJjPUtnBzFRYUlnDxHyQCkV6Z9DwVld4FZSMNnIMalcSmULne3NYzv2JhNq2dDgqCjnZYt4Cs4lvkKLDhObTfdArbMYX7CzPN5E9fj4yNDgaFObF0+B2YNPEQgJGWhWsehEobKDEHMo3mZXSZnhB3bguYgm4EAAG7wkC2J4lbIqssQC4fmTP/kTbFcWP67cQE9AlJ/+5S8hhAnvWKfhVzhtYuXC6byVba5T6aPI/w8PGsj1iVgcC6QSgIKCCY6C6D/4QWFeQX4HVgaRRSBOU53ZHOOHsMPDNWv9+vVPPPEEFAuQaVwQmqRYYXhqcXwc70zXDh89gh5WwKpWrsCEUyk7qqGrQiFevnz5v/7rv2L/1KQDjvUFEBa0NMJByc+IiAM6gKFWaUfhzjvvRJcwJpOgOaGtfmAR9WIoxcvDfQVGzIoLq8yMXgn6TjOeMCiaqELUtUTgN+dFwj78R0qMMLaXS7aTEnukQHtxXHUZ/yAPL6gkGGMP18WjqU/HlQRAZtMdRxmyaLEA5WGCTxCCaRiYGbjQJE+2Kr9PIyqqDwwO4R1DtwApJkmNC1LoKog060DpJEclhXFHeJUjiT3egsygNXGaYtEZaPQWjucJaEbxSP9A755du6uqQphz7e2zGhqb8MLngBp1zrftt9FIvpAr5ylBk8OqFVWBUal3PDGWhv29KF5ZkXQ1GkldA5mQgBoGTR2JhzWZ7FeqROxEWP6rfBTbPxRNnuwby8RS1T6TfB+KE1PBlm9KsP97JbmjofrEcOwHr2w7NBTB07oNlYP/'
    $Logo &= '6Y0puBF5oeSGklkE2oA3QVn0aCrgOIwlRlMRPWOfCyCvw9n8iUjypX09teFwe11YSKsnhqMv7D7+9vF+rxsdl8mjKVcgls8BE3hvFvbwi8YeMBhF1eL5TCqZNUzDLYMwod+qU1gG7BZzjVKfqQqogxePrU221UOQxDI4Z0gK1ej9wQ9+sGTJEvH1wjQVuFGe41cnQgL9GRsdE8Qrl2MxiPNBDA+PQkfRZRXL2HC5aUDYdxKfhAzjT8InCL1LLATKluD2xsf72kJatVsdj8aEa7CgqmXewCcNm6RkMzlyMtVs1kICFvhLMWsq2tzZMzbtPuUON0DexSJhHwggkNhAgzDHGyzMU5fKtB5VRc6W5N7BsQaIyewHD7ou4BE4IMB5EenJnUKWwh1U9MeOI8mpNtB0EQ1XIFgilxN8y/HEFQzGoe/nACHpVzZgOEylyA2/ChBJ13TBP86YLgyUFweDB9CAcWIOB2P0ebzAWp988kkYXT7+8Y9DQZk+oIepCPZz5ZVX3nvvvd/61rcefvhhXARDbLFRWUwbgV9B9cFow5Mb/M/hCrYxhuMcHLLsYOzO45xN7nFMQbi+mEWQQ0lu54ad+PVsF6kE9C6WqYhAGI4iZNQPRCGfFzCUHUzFNJ8SorCuIPxELdaos5gZkH/BSCCpM6mA/wn7cNEXi1Nx5DmAUGBl4n7SRLicxXzICcwTmO2kEAfaw3fnKEj6VdUUjee2bgDOoWBpEFRe9yBJpUwWefsVaBY9Pb11tbWcoiNf4oYVKSxX4IPJUqG+rgGIVl193YmTx8EySPrjxMMuQgwgrFh09zwhkiEy3oQxSulUurdnD5QJTVUDiGmqrUVUysrlKwdW9IM/+auCbq87gAVZLONIjloglqhq8kg8dbB/bDwH+IGtCQwYZgsYK45SY9rjNbWw1w1mWXKpJKWqkkL3L8YLhePdJ36zt+fgQISUwAmzhO3DrlPIPi7V6PV0VAcMw72t+/QbB05V1QSb'
    $Logo &= 'Q4Cg6PUK9laSyR0APqwdNcE6v0cH8iSVR5LZ4WQumcVSdnl11dFIwFcA0+Xz8pvHRuY0D7fXVWNn91j8mZ3Htp4cwFXhIoZ+5zIEtUjES1wsZ8tQp1JZDtgm8EeCKmOCFEqmPemZ19olMEEWkfUelVSw+k0NhnwNwLbmfm8ax8Jf/MVfAKZwnb3hxf3P//k/77rrLmxPOtd1Ps1/znSWDtqApEEgu8Iey2g+i0fZwsjoeEHyQeLHW9UspSDDvEUiP2WlEYpZ2VmylHlONpREPBJQ4q219aNDkZxkJw5x/GVE9pf9xw5CNV+wYAH2y2pOqCxk4tZNVXPFY+OhQHBOS3DfqUGjqiVbpFiggtBUGGor8AaWJ1xv8FlkgYlcz3Rv/3gc4DJWDhPiktD+Aa3AMF7FTMUJMBCEXmD96JIgWK6La4Lwgc4IW7EwJwjEeFKqq7MxFdElXGEqUxHKgRNLX3mi+FUkp4HxFeYx3m9n7RBm+cF4AhFOf/KNb9xy882OcR5tmsmJRfdg7Pm3f/s3uCzDuwRQGIYaP4vuCfomonCEJzddkJc2wddYHBapF04ED4gkTjzHsFTuwZHkKcANFwStE2OLZYKndrScqaeLe31Aqe85fST+dLJOkxFe8DdYufPFAseeyBhXYJwlSkNk0VQjZ2JLY72aOEpZLJMSATuMcRWInZCOLAafgXwLBAXfaIOIC4RTqnePi0yJmCu7GP6q3Fs5KQzKeilj0sgqXdjn9jJHFM115Mj+19e/9uqrrwCCA/BjGDquB6bEFkk8l0LWe9g1NbAbd319Y0tLq6xsjURjdbU1OL2Qy1WOtcapZ0E8ZCqlrLu93ka3m2Q+ss1Y4+PRyNh4b0/vCy++hBG48orLP3H/J5pqydCSSCUVKFToIKXxl6LpAnK0cJisjHjyAouNaFCaONUzo+8iul7Wi4qRcVmw7kKNiBdL2/tij2zYu/lQb1bT/DVAz8ns6sxivAs8KSqcVbd62+pD'
    $Logo &= 'hwfG9vaNGB48ukx2GQmXAapGTtvxbAHRLh3V/ruWz75zWSc4ii4VXtx/+sldvadHY4lMDtIRI4I23olO4hjIgRRVw60/ln7r+GA0kwu6dTrKIs2ShImyhHctvCkiySySVmFW0bvW1GAIvEmh2reCo6gabaNnkCI5/SVnOtCqPLpCX6VJktf3v/99rEzXOdvXuWFjkpoCgPu8Euie26DiLFqk8BB+X/YKLOFcFRJYNBaX1CbKwy0peKEUemKBj3NUil2djgQySaiVsgaZQsmMzl1YFY8BTPNJco6JJI2ixeAF9BJYOF544UVcGWWCkGMY8SsiXBdUGC4VeMe6KsdiozObgr3DmcFoVPGA4lsFFlQskuc4mSrNN5EAVqRyIXYrK2Y0FYfW5fZ6SiXbSC4kaICNLc0t4mltTSVHvheO4VewhItMMUr8gJuDfeFeAkEC+Tu3yFz5kzBaiHOdDVxNYB5nOxGME+wEBIQfRBJJ/ETiQQwvDA/XX389OIrw/nKU1Gmm1hdfcS7gsj/90z/9u7/7u4HBQWgwoLIOQOfwqp7eHpiF+IJ0CmJUiWByY6ZiO+TgJ+fi75vI0tFUSEAp5DmBDbEV4TM9netcNPwlFG30nHOxEDokeH6JoVTKXY/VTnZ0cEBQ5JSUsXSYJgn3cDGAkyfVHpsgQERZhOJv8bBRpJ7gJSVS2MGOibjIMm1QnK4CcW5qPVkH/sKJRRwGWJDrPNJrKOTdJhlUE/HEk08+sWPHzlw643BaTIujRw/v3b9nbGy8vrEBukfJYmsJgbPsN4lyxfEEHi4UroJnGYJdPvbxT+7as+eZXz6LcWikU4A94hQ79ltIFiX+dDwxwGAsfCWGSkMVicUgu+LwyNhob3dPV9fce+/7RMfMjkQqgTJfFHSpSwjS7RtPJDMFdCdHmjCQbAtsmMQTScWF3VXesUz+Fxv3b9h5wgMjZIHmEJ4TmSK6U7ldPUPZRMoTDpqGWSxwficXTT2BwxaB'
    $Logo &= 'hSVzs2r9i1uDL+zr/uGb+9MD0XQig9z4OMANu6yqgqdGBvoWz5/1iUtWr53b1BzycNSReteStrqg7ydvHth4rB9wFhuDGPfEKS4ZwgEcnVMTYum+k4P7jvYphlob8rF8WcqCWpVoTPByUJKnfyTu93luXj67qcoXSWX3940dHYnGSsVav+FS2aWAk7O5xAYJzGxg97ub/R5sTEoS8/TTT8NFx3XOBg/jf/qnf5q6GCCHIuT4vPyJYVydjqYC9xDoJTAQCdQEnAK/pVBgIQ/rvAy9jQsLERopW/SswiqoyDSHLIlcsBjeNHKZ4Utn6vlUPp3GmCS5HJsYVDCAvIpxzcsvvvib9sWXw539uVfeuP+O6zXDyOcsLmKXM/S8ZRrgPABXc8XE0lnB9du7I6UWFlTymD5WXmPJx/YwBhRJs6YogbcXC+gPQucsiM8wPZZYSyEsQKIA3sh4zA5PptwZVoYETouRmbwwq2DmAT/F58WY6WE7SCaAK9t6BgFWctHSiKlgezp1UIQQAMycH7IoGvMYepJKKjy1NgleYh4thwHKozMOoaefCjHMZ4GFytym9mQ6e5j3Wy0tLVddeeWx48fndM3DtMF+R6nCCODioyOjzukgdelUxnHWckAqqXwe5WGYkktc8I+GQkCXlobFTUxFQHnTT0t84fVUeOCIczKhy0/wZ3YYZ97ATlPE/iirDby6fBaYCqL5BCvKMyJJMe1krmZ3fO6mMP9iFHltcR+wLVMNVZaE7eyPU/sjCneJZqda4WgO7ktZZ8+HTCr1q+efRUA8FpXjrABvMdwerKK5tRlsA511QvQ5EpfC0eH3hYU0b+4809Bxk67Zc++88244IGOC9/T2ATHDBW1HdYDXHBeqMGiGFYj9ItJSodKT1NAvw+0BNIaV3tfT/9gTT2DhDgwP/sk3/tzjhaXGjynv9ejRXOzYcCyeLrD5v0hx8AJwoCplxHcCbiOWyr2+56QrngEDxw3s4YI2hprF'
    $Logo &= 'YV9dXbBMVDwnYckVmTSrbC8hsDKHt9cQ8s5trHrzxHBHfXVb0GfolPsPN/IrCoASPMewx7p7efu9y9tNuRSPj5cpXkXxmXp70PQbcs5CT4sGiB5HGMkyYcDgGRlIfDw9jg9Fth3rA4WBNQXMgKZsmYKWhHAYSwIUzNUE3PesmnPf6rldTaGhWPp1qEFbj2w7OQgxGauErgJvbJ1zYWEDCIbNVLxNAWIqxYqVg8hewNmuc7aPfexj//t//+8zahhYS+cF0cBhBrLk+2ozuCY8gmgesvUbTeaCdZwNDs4qLGZIJYZY7bShklMyQUzUcrpshJGfdF5T2e81EUsDQMli86zDVEq4rK5v3rIjYWm3Xnu7x9SOHdy3Yf2GtUBRyEyoK5YC0YfLgkGXNnO5YnXYNbezbsPOIdVXj7MLBeyjRJIFoakQ5Ubf2AeJzaKstVuQA6pCdgULYRnGBswMGD2sDgGMW0W7CduvcHXDARdvU8HVHCTNsalM31pT4o6DiYihED1lnlIQ/mPnyA0MTYXuy+9RXMpRHaDBwCiCZCoXX6dSzMyuuXOPHjtW4FdcJkySwTrQSQVfAYdLDhojFDWBVlVaOEAfzme0y9Z7m5CMxYrAxodR+VHwQiaeZQBLJPmCEDv1TVUZVvtcNkevC86+UBpkktEzeeqrMJwAHclbpEeI69lFt2muMMoh8C5No42yvUF6DX5SVNqeCn9ZImafthWVEuOjUr2d/kzThHUHlJjzdZuVdQs0lTBfGafAoJpMYp+iYVsmh1srT/C7boDtIX/J8qUr2mfMwgSCoHn9desSkciP/vOHu3YeQGRMfWO9h3JClAxNo5gyCsHVafoWsWHYG4qB54W1xvFOwcyua6iDV9jo8OiTjz+OWfPlr/63uR1zSya6qiQL5e5oEiCCYIEwW2HG2VgQPEPAvTjyK9gQKtdV0QjYQ2EPKIaUfctKlbkhBTaftco5yMuGSmtd837xisW3Leooi8BVgd87'
    $Logo &= '+SjJqoQIb4h2Rb/bA2aIXwfGYz/bcnz/QFSUGWSxmj17ijRmImsNI2nlg71jxyNJxecG+Ulm8llORy3KqGO+jozFAel8/aYVX1m7GDCp6rLaQsadi1vdupot4twRRSr6TKVoG22EJGz7bsCYBN4m3qCTLA9R8edeAJdccsn3vvc9SHNni08831i86USoCLTaUVwogxY73WQQCVwAnghzlwW4k0O4VXBcCSCYzLndZJwuPB61dCJa70l2NdWPjZNTu+P36ZrQjyHVnDzVs+vQqZs/9vmyZEAWWXvzvU8/9H0My/wFC9ABnMVkoiBRK+DrWGS8qb5pXnNq24k+01cFECFPoqAMdm4bV2gJKAyxkqEUXcP+ZDqL7wRUM1Nh0ZjMKrkcMZVJ3k1MqdGKF1/dBFcV0rqDVl2cZ7JTvKMsNt/37QvzvrDiOo/jOP6CsHCezQ+mPjfcgSCv4EGdwGGxYXHTC9o5Srk47PO8mEGJm7isw33L3D4cpsKu9OAonIcb7FRmYSFDBjSOCMV74kwpIKAEWMESKxmZEnnGEnpMp7MNEKcz/YIqYEMc/F4F0IErTN4QaWBKxpkrxkzKrcsZt8FqhNJEX1UNnSKTpcetKISMifBGlekvDiBxjNYnVxJjJUyUcYR0FE/EkHvniiuunjVr9sjYCI6sqam74/furm1oeOaZX27d+nZvX08ykYKeGA6HwCRwIhs9SKuyija+R769rKUBEnTc/HXD9Af8OOzg/v0v/uqFltYZtZ//UnUVmbgRYDgWp4r3inDwZ8cVHih85ZBrhWAURRZuxBrDg+SbTYpdoSAyulSuIplL2QNZjw9GYDu6/eold6/oBOShqwrCFV1nab2RxK6ewQyonazi9aWSmQ1H+rb2jqURM+Ux0LEMextrFBMqWXnIw0VFVf1EX+Td/eMHhmOQminugUekyFoX2lgkpav6JZ0t1y9sbaoOJqOwvJUNTZkR8n3yko7eSOxw33A6mdYkj0qS'
    $Logo &= 'hDwxNyiGAzwfaV2Qdozrudl50e+++24oBK5zNkQPAFs4x7pynU9DiDXKuU/aCb8d7J9EjGCHqJTcbQWMtHZZWGIVgn9pYDhPOq0njJ6w1GMjltE95d6V82pyFETFKvtEI7ZDUhRlf3zzrXeWrLqmtqUjm4ghtMcTbl5y9Z071v8CHqjwEKHDFLsmqUiNJKvuRCS6bG742Eh8NJ6wFA+bVSyRbSzPzIBQV6Y12FYlbBNbYj/y8gQZYpc2bjBWordO2mDHaAzmVFmI0Aasp9ccCFGggopKF8cXcRcR8m0ptGeaegCfqDjvmpZ+kc5VuZ0j3kIE8zshgZVB7BrbHyadeJE6GSwZ6KcIQxSVDkTVPqlIgzLpoUSblFxcnDj9wFKBnjkuGPYIM/7x4TCVouDbXNODAtzALrh0QYZs2+xMgakHYFVlC0o6l0sbAGzZ+E3Bwky+8cxCkHZidxS+KVfcxZdJGyKim6NbZCaX4v3TmiS5yRbEKyJXSTOXBUkXbAMbDC6rVOCLJzrbXWxzIrYJvOLlItmLQwOnHB8dmzmz7aabbgJHEU4KIOrj45Fwdc3H7r5v4aKFDz/0k5MnT508cTKTSpckOHGlyEmDxGGZn9LOIF0Q8hqHozkZ6yDEqrpeFQp0dM4GDX3kkYdmtMy4/+NUEAzoSBJ+D1xMgzP1Q2EgJu3STZyLDb4Y5ElsTJQ8E28Ex2NDlokWy/TniFT5bD4RS+GFXbGw7U+vX3ZZR+Pg4JCsyTqhduVowRqD8T1nabo8nMyfHIFbb2EgmkLOR5gCEbOCuPme/lE4pAXCgbDHdKsK+iciVwyVZjH6i3VQ43EHDBWx6f2R+Fgi7TUC1EGWqkG2sgx4ZpO5VXOa/+i6RTNDZjYVAWdC/1l0R2bP2jWdDT/d5M4MxgDE+wJuXFok4BM10BSrBEdq8BULbiAuirFFeAHinKezVl0fXMN4Tg2/h8Q6CXd2MnDY9uESGx1L5GyR51xEJCyxb69U'
    $Logo &= 'IqASinlewu+AldktAXvTA1evrKs2tdF0UjVYdSBuwgHwfBNTlda/+o4U6pi59GqEUHBy1RLKq8zsWtB3bOmbmzbdfedN2YKOi3EePvwpNJ9klSVr+bpVzY/86lTB1FBFz+LUyOipqGIBiQx95Hh7qDFF1UV6DDMS+p2JnUyVJnOYHVmRCh46LqZTySDKK9Mk1aUcacyGqYmXKKwv00eKcKTQIw1Tp5Wk0NImMk6WV+AaKtjZ9BsjRbSi5CKtjAK7sMB+yIxJOgf8BU8/vD5Nx+1VoeJgSjOkaQmrA0IIUDPpIpUV8bAUrm+aeDQyRIPiCXiUUl5q49m0aZrOLdBtvEixoaDxp6NGT1/JENdRyUaKpSqrZUEyKfPhh8RUmDoQkoOH00yNIUqLfPIAOWVStJDKchaUk1UoAGFSKWKZ9RZEYgnqt5wtk6TheGiR7WTaCUypoB3FdBjMb4iVAGIFISzLE+UUXfYGm+uLrLFojFjn+VYaaQ+Aj9jUWOIgQWHkonnCmCmOUSnnM6lf8NQ6fWrgc5974MFPfYZTUidkif7hsEwyXTAKAX/VA594EMJlf2/35k0b9x3YjyJF8WgcVdwsTrHk93sDQZ9pmLiFcNHhV4jrE8JG3czn0B+k0MA8OHn8FKwsLm4ZUPkcCeIA74iFqJqdL02AHpViiaYLRxCJs7/hYDHF6HBNowPYHTebKSCbl2soumDVnK/esBw5TtKxGEYDK7Uq6EEv3j48/MT24z0jEasE+wfE4kwyYzHoyAFJXHTWCHhaSBnCnmIqX3JkTqC/2JVm3LLFoDOS6STKREBJEXITJUTgGAiu76PhCu213itm14VMLZ0jS7WryM+l0iQ2DS+ChwYjGUwhYqWSIegQjTyEmXTOkGSPYcC/tawQvvTOO++4PhoNYclTYJMp3rQ8ZBaaQHfZ3iJx4SCi06y+SOViFnGnmpaJjFw7272koz4y1u+mmsRFAvWF7mu53PmMz+1BRM6x/tja'
    $Logo &= 'e+6m0MVcQQbR5AZ9Y9GVN7z8xA+37dh/7RVrElmIOrqT7B0jahh6OlOYWRO+annsuY0RORCCT1rRYtuPEH6IqdAdiY8oAiQhhIIxKJu10FPkbW9s4X9BLvsixQg3keEDRBnQcaWMf150NpVOwzNKqAXOZUUCGORlmn4NfILsdI28XciZp0gbnPBb4zIw53DNQoETYRxyQtPLTOuF0y0G6sSJkwh7uhiwyEndj/wL9ShHls2YblOgUsJuhLtDKRdzzLEqQacRMYxOXmE6ks3b55kCB40qxzpZXjBQlkWQ5ofBVETlxBIrxTkR5QRqSZY6Ax60sCkbhopFMzw07HHrNcWsO92rK+GYVmfJhlTIepB82/Gn5pfm6MTn2MA/Tm4vmYkh3/BBIzuaVc1cPsmWT1nUn3ebImEqn8RgAkuUdm1HLAGh0GFDwgYzEvZ4lqEucCEhXEoBp0JcAVzFBgf6EFbyex//2Gc//4dtbR3j0XGkEBYgknADhydIqCrc3NDMKaRmwXl8+YrVa6+7cWRkaGiw//ix4wMDg8gkgNS3hZwFI3x9Qy3AMXBeFjZdNirOupHH7wP9TiaycEECc5NkKvUPxQI0BJOFeIJTcMtJWYAhJF7KegpjwxZYJp6xCL2ChE3y6iTKUiJOlsnhTqH68PLFs75y3eJr5jTASGNoKhxP+2LJV94++ubB3n2D8e2nhlPJNOVtVPGc5OBtaorpUunmYFm6bBqaqbArJ7gYHoIBBOEMQ1orB9Qgb3GN14AFFEB7inJMkVIKCTfHyd5LIkdlIe83tZagG8+RyluyYy9hWIJSRWnQSPlVygqb1ki2LiqaC6hZuRT2qQYEtBI/OWegcn00GuKop4QC2Ll6K3OxKkSbVC5DZ2GYOQoUGh+eFI9kYTYTxKlIVmKsxZ9ft3pRPhPB7C67TBjsygIq4xLDAY8fBaJeemNH56W36Z4wQp0UiGgMUKGB4mke35Irbt/8+lOL5nXOmDUrk8mZ'
    $Logo &= 'piFIs/0pKYlY+pplbcdOxDefHjY9AXBtijsmEKBA3YOmYhUm4C7Ct3WuGoLlwiSMVHqH7oDAYRufZc77UGEML+Cd4hM+VMjpgutMHywSRn44y4CsC+9h7BFAlijuCywBn9Ok2jgLkr6g0Y6FBl91TY+MR7DzbDVdglS81Q8dAggqUBkmW3a+SHKR8viQ4gUpvGAOuTBzvXPW/v37RVwRxtDJQiY6iZ6D5eAulY8jVCjxQoXEgP0aV6WdPofDAIps02JIhYUJe0DoPjSmIlFj51QAAFgf2AblwpQFrXF7AAcqTXXVM9vb4fg/NjgAZuN3HUsiakXVPVbam0/ZbsGSJFgFW2HfZ8OuEa269WS/d3S/BV9lq4wV0oXW2aXLeiEvjMQuOz2eQpKVsMGBC7uIFBJGx8lfLfKfYg1RGIfYmM8JIl0EwhCCLCuz2metu+nmz33xK/PndI2NjwG2MNzQwDUSqwWYjABnrk+OGhUgwAsWLlu8cDmL7fnDh/YfOLjvdE8vYhSOHDoKcIYK7yTTosaqi8tEOqAzOBx7Glt+vzsaGd2zd8fCrq5sngzyOB7/QFjL7/W9I4JRKBJ5pj4XeH6pJamASSHnLDwDBgOQkqYqXl2l6lvhQENt8OqFMz596bwFjcHYWJRiTmW1L5p9YfvJf3zundMnBlymLrl1Q9fcXqoTio6aOvWVg+sFkQJeR6ZejYiJHZ9E4SV2uicJtNGQJERQ1gS8CO1J4DdgRGxLES6cJEQXLIpeJE9ZBfZk08R9SE3h2m52ZGs0hapjGQBEqqmTsoVn5HLkiATFI1VVmX4f3l2B8UVyy8EpH0GmUlkqomLl8PzkeCYe0yIj2BZ2smEPz08+9DkL2/mANfLx21aZHi2eMgxIRQXJEsnbMJLstqIW80/96g13y7LG2csSmZSMV2BHHuOa9L9sMlbf0lnfseS536z/yu+3+3yU1M6hy6zHKwXZQNLTu2/oPPjQztFUXpZxeXrlQkdh'
    $Logo &= 'yJl8PoQZUtSUrDRnOpH8QpwXMdgiuKE00UTtCdBl1BNCrcyz+ThM1WPEBtLtmFhotlYhV1JPEF8QesqXM73mMFQnMZrQA4Skj+0z4pyCfOMuW7e9C/MqjudVbGdN1TRyxcYjI7EYYk7xmNPnIpV+DSKjMB4Hl0I2MDwyv8uSMLxBUQNLxn2RAtW5CHg6SFCBGbzMoL1MobMljenM+WsqmnhSwVR03vMhwV9iBMBQymT/1pWJ9Mune3vg73jJShrTGbPab7/ttocfenjfwWMLFy/Q00PBsV6Izm4NbEElQVekAYZqzFIDnukcG2Wm+DS4oCpSSTW9A2NxhFxV1wRWrVw1s202vNcHh04nUlF2Z2Q7ikqnk2yl0XCLMN+x0QhSRgqvJfvV8j+RVhlsCccDrWhra166fPFdd92z5vKrZ7XOxGHIbdw/0F9VHaSiQFOax3BXfo2MRsJVtSuWX7pipeQzvdlM+u13Nr2x4bWXXnolEom2zZwBkk3exqpGdJpDaiRmb1ybMouK6HAkzhZVUlPcso5JUsgL+Mt2b9O1PIhpPFOKp9mCbYfbutwZnAICwWUcyi7wBp+nq6F6ZWvt9z57fWUPQTOA2fbHky/v7nno5e2nuwd9zSG8C4mHRgfPYKdWOOmBO6GrlFuFEoBiiEDozeqgz2+SLpG3aD+fwmUKLQrXD/sMVdGGYpkCsQrinJbQCC2L0AZmiorfG/R7yF4mMu+qxFeoTBI2XKXhaAovFC8bi0roKCKo3kqlUdLACHns2srscPvy8y+7PjKNaN97m51HXVYnJDEIBGrelVM0t1zmvNvguQUKWbeDHFXQb4y/OxId+9j1MxbMqBmOp926h37UyTmD9BSZhPSg3/3Yk8+cGE1fdsuVyJFKC4SpDE8H8a+sFqSxZLq565LNLxz65TPPfvrTnxIE0S75KzNOr0vJgqs+XPPg1c3/+PgJKRhWSphIEtvgLU55UZSsvCLR+tNUW/+wM4iUFOE+'
    $Logo &= 'IqKVUP4W6gjkJ5Gd0MX9ZBsQ+yNwtu8jR47A+9bgdkagydkpYiYgmEJuwMACPTN1w6nrLqwXuCboAAnv024iR7dAvWSuqYtPt2GCiJ07cBLsEEVzUZARyhaIvjCFC3fuAswz3JDFC/mGwVfQ4enExvInnYsLAvWCswkeDbIvF8Dn+c/BPZaL6vy/9ebGrk5yZMdg2jCXogBsZOdzW0pgRiVPP9UpmhhGiMsFhdiqwnkd+OKqYDAfiqGea6XAiZCZgpbh6oe6YRw/fuLFF1+oq6ldsmT5skUrgAtFIrGHHn4I9Zs9hhxSXcixEBmMDacYA5VoAUgEwrLZXlErN9i24exRwRIgXcFRyu/zyroJvCRXyK1ateK+++6/9ZY7OVVD5uWXX37l5V/rulJtVovyXjbwJSsiAyTGDkqN3+fPcTJORxYSy6MqUNVQ32iYRri6ekbbjIamhpWrLgn7w85TNzU2HT5yeP+BPbgYSC+4qWVx94ghQYzG6Fvjkejy5auQhSWVzQQBark9IocjMt53zpsbrq7d8MZ6RM6TvuzzsAiLJ+VPWcNKpzFhj6aRVH4McYjJnBL0KpoCokOEFVdi6SaRzpmStLAxfOkVCzsawsRCOZhU59xfoOwMv8omx53UeY1PrFk86Q1WEyybe+3Q0X95aduxnjGXF7ClWeaRx8PwPC7jBQ8lcjDCugwFZvkFDTUzq/0dNZ5kobSzN3ZqODpeKATgLkwSMRk882A8VGJSrQ96ESeTyEVTMKxRThZqXLVJIc4nhF6J8GzbB9p2LKcvODqVQc7jTDKVxzs0dBn7iaixgoa4GMiHuCmYGgi4q5SGAYIiFj8aDTJspWRnRwxwE6WmsfRBh7GpKjKy9Shy2aIJALoGs7zFHFj49ymjieQVs923r5mPoVAJpHL4E7HwPKZrVfDA7u0vrN8558p7YlZphjcbqg3QxZlnOx4rklzIwntcDjTddVtyaB8MPIZhir45Ir+on4iA8ZXL'
    $Logo &= 'F647MfbslgFfoF4uREgbp+5xDj1OMoFuIFIVvRRKpVOTii0cmuCpSPl86NAhUHkQShbhLdFnXE04wgk3a1BGpzylkzAfn04eM7EBsR2niNQvldVt8SmALIj2oL+46XQs5HwAh2bL9viI/peYS537LPQHLBP5GZEBCM7rokCGwAzApcV1wBhEETZAUqLObmUt3qk6k3hMwTvBiUEWBFooTsSGOAy/AlVDcC4MKl/72tcq+Zzw6mYGabfK1PfTb87plQqoeCMfElPBOLLnIamFsBDQFufAh2izceP6bDb5h1/66upVa+pqGz71qU+hgvYzTz+fBRbf0lgsa0bQUHwlQk64vb8thTcYlSYA3dI80ENi0UhDfc09997z2Qe/hJ8PH0a508NPPP7k9u27lyxbiAhCyhJhFZzBTaXI5IuCwbfeevOKlatGR8cszq9gqyoceQ+OMnvWbHCtcLjubA9+8NC+7/w/34b1Hmi/PxhANB+xVVnGEBiaCokeNSf+6Ctf65o/FyYNONqMplK0yjnH38qlq0NVVTjxmaefi8RjwVAQXkEC9MC0ElH36IyJCaUbw/HUWCxJIJuskFmbPTs5mTFZGhD6Dh5w2Zzmb961pjkcOKeODcec7Nm8l7afGDp2tN/VVFNT5YFLOKEcHNBToixS5APkU6SmtvqO5nCd11zeWrdiZt0lnc17uvv+/PG3sdhjOQs8WGLqAjpQIGUStmMNxhKvqXp1qcjRrWR6YVwRMIEtJ2oqEENEPHD9M9uUAnER2CIMwygKubdvFDqQbmqGrpB3FPuGgeRimpm6goqTYUq6RRXg0KgExUejLVy4cCq4L0qJgOvzigXxLSv80MGAT4NMStlolDIGSbY42odMU3AgrPeUPnfrSiuTsjBqlRIllzXzeLxAQn7ws2cDHZcZwcaQMvapaxZjBnJ6C7qMU/WIw4sV6BO6uiptLYHxaaL2hk07KuXlRDz+wM3LD514+chYNKBLZQvMy8Ks'
    $Logo &= 'AFZLXneS5VGkqmCAE5NATLbxCQc8oeXKFc/+/u//HjAgHOFAJfkY8YpLAl8SBdjRf2EvEUBWZQbfSVm5BPo0NdevCHvcunUrErAL2jd9dzI0xyVyOtEYTv0rJCrdvHnzG2+8sXbtWmhIYhzx7I6/coEZoChz4LgaT2UqDuEW4JvDR53RcB5ZeJdhJJ955hnE9oKxTWKfTsJjZwDLFW36royC/TtRdE5auQ8L/iK4SBa3RwyjXeqRS6iimsimTW+vve4mMBVAPbNnzb1szZXPP/si4uoxjZB5bsmSpYsXLypi5KHr5AvvPw/YFSYcCg0ODmzfvgP2OtgSYtH4patXLli4IJqMVfmCIyPDTzz9+KEjB+vqKB0kQ2V5iVewounYgLMvJi900o7OuUuXro6MjpcEeCLqgHO8zOz22e87KOBVmF0cC50nCIIL6YuMyYCJMmmwLmn/vr2bN725ctklwVBobHxUKokQRFroAX8Qkbe6sIOVBQDInuCcVwZ9FvOBfB/SOQtzy2cS55MmYh4lCRv0SbEosqFpCWT3K6iy5jn7qzINr3lmBtkXPR3JuNyA80rgIYSwMXkgJ02pNBZPq5K8dsHML61btnRGbZ4Kw+XDQVxK6o1kd57qz1r5gNegNGITjhu5TA7ImxRwazIpcCGPrIsRdnwxeAER5uLzgqloZcvn0aiYLfAgTcVsqEMNSr97+8H+jUf7SKPXDfIdz+fJ11xTMYQ40lC0oK4ZvPCEzxjEN9dHo8GEO1XgFfK1NZGSXRayLYRZX8jnMccj/FoJBeXweoZhkU7u89cv8ZuFgbjsc9PhFdVeRcCH6+FHHh0sVc2fc2kpOXjPutpULtM/mpaFtsf0yOYaRU2CFQtXJ3bOiR64QSstc6usZQvKBdTms3dc8n//12/SVlgjs0yRQ4NKIjsF4HsUJwWC73A4wSfwSXWDWJyfNWsWOAry5SD9Ow4TfMXGALk5sfEiA6boj0MfXRUxZ5VszyGa'
    $Logo &= 'gviKCEFULgDPvvbaa7Fz+mhPZWy/4x8Nm985CK6jrEAF+epXv/rNb34TShLy9ICvOKYRggRZZqKsOTlqTq/o7U3Jm2K/oopAejEOlYkgHY7yox/9aP78+UiBOtULQKh0AkASVT8uwMWOWCGR5IJQuZy7CxHEYXK/RaZCuWapDzmhQ7N6S21kaASJaJDvROPK4aFQ1eHDB7ZsedvtNcd6xmB96pwz5+7fu+faa9YmUnHy2s9b7+nohJIv8teLDRZdYOLzR2ORyy87+J//+Z+bNm9pbKw/evT425u3tDS3g6mgkuPqVat379x94MBBxKgrXje7eNnOjxIFYTARlyWQ9Sp/lWl6TFg5z7/BObiuprr7+GnEcWIdWaUcR3DahFM33eBqu3fs/I9///f774vcccfv1VXXOZxxaLjvN79++c2NbyHRfTAYEJISrzX2aeMoGehPcDEJ19QdiFvD0DAMTWKKQ392njjGwbIFRSu0VwdR2Z04ygW1rSdGDvRFXJqi2/OaeBtF80hyPJnx6dqK9sZPXdp5z/I2l6y7LLOQy5TZ53LX6bHhkYSC8BNdhT+0cF8mSUekSSiXgX1RKUlI4rIMLE/kqLaft0jxp5JGkMueU6Mv7O69aWF7Y30gn47poTA6sbN7+InNB7tPj/jDfhUovsgpaWfuIdXEZ8BnzCdRism8iwzTEhCJ2bNnX1y0dhlhjIAXpn8K8lEi8dfUiP2pCw9UzyRTapoXJ5MMVcN09LrNOr+GKFI8YKGYI/psWVnDnYkP3H/l/AVzGnoHh023l5Bau7yVbeH3eX2v/+bV9XsG2q9+MBfvvXU51LbgaDRJUVa2jiKLOk0skBGKSCoj+2rmmSk51VYcudipNNU/NtpW57v7ijk/feVw0BfkQBpkB7VgSdGsXLXXZwa8udGo0D80jQq6Q0U13YhaMhyNB+jQN77xDRQcRJE0UCW4xgpPLZETT3gbT5Kp7XPLZyoyK1wbBJXk41SFCm/D'
    $Logo &= 'vIHqI8gVj2eZfow9hWnnsjbhrmQbOflsfMW5stCHUEcL+eX+4R/+ASrXVVddJdA5l2xXlnRC2QmSZp3RUQbBmiuuiT125nWHadEDWrbmJwrQiKpfGElYoXBTB7JzRgwHwU0U1BjbMH4J/ItrRVOb/vzPU6x6Dm/K4eL8VmzlSdzrtx38WBJJvHVNZ3WbeAzGE76zCxYu/OIXv7B61SWkTScTP/7PHz70yE9bWmZg/s1sm/nAJz914w23NDU2J7NpiQX4sgN0CcGTaw6fcaOjU1+94tLDB4/u3rM3EPRv27Ebg1ZXU3fDzbcsnL9o/rx5I8OjsJIhBAncmjx3s1mC7jlRC/4EToJ0jRjxC+Mo8XRi9pw58As4euTE6Pg4bmFpqvPmQBPoRqHAyePd27a+C+oBrrls8coMgpU8ntHx4YP7dz/++GP79h+srq4OcT1jgZGX7Xmn0HiUS/W1tXVNrb/uP9kbidvvskiolEs3MO60UVJgrJa9pdaQp9Z/gRzl+ED/yfFYXzSpyHawsojYpw0aKKsx7F8yq/7SjgbE6Y1ERpSSZOgqkt7v2jfw6p4TZAdkNYIyDkpgQ7w6GKFiYqWJWBONsCCiZbwomTsyh1HyOdXUd/dFv/PK7pKsr+tq7B1JNtRqW06N/mTDnm1H+qCXGKYGzoHhsbU0y+IMPSWvoTdUebCAsshAXqKbojST6+IadGhU65v+8eATuOl0jMOcx8gEaYgnKFvwROUPSpeHYUJl7x3HxxSVlpOimgATs9Howtbqu9YugbchsjFy6lwNn052cLfhOXFgzyNPvVS1+M6crFzSoC1vD/eORCU06JqVblmCJLPF1QGRBNUTkqnDVCrwfaounOw5ve6SeUeP9m46HoddAJFBSjGvGoqVTTc2tmHJ47ITYe2qiBkU9gNc2amT+Dd/8zd/9md/hnTRqBECmQ+0AhSjMhdOZX74qfUQJxF0pxQj7ot74SJPPfUUXG+RzRfyxPQ5irhp'
    $Logo &= 'gdsUfzNG+M55upPrDNgXPsFXIIjceuuteLOg7KKTovPOgFdaZSqZCqaA2O8c7FzfqZ0FRo0aLc8++yzq9UI3ghUK+6eqKU6hgcqqjpZmnVcYJoDrHLdJBhtcHD35MOAvbiLnIjWQkWQiD5wUIDgcJNatvam+vuFU98nNWzbu2r2raJHYZHq0+QvmXr/2RlSpQlkqQoOYDAlqQ1+LlUyFLv/eDRBcRJfKy1YsW7lqxbEjx4N+byaXfuhnD3XMnlNXXQ8VfcHihfjp8MEjmO1QBaB8kkAm2B6HmNG1cIsLZbkY8Rkt7YsWLvcHXurp64F7EklqzGIVVcMtgIABWm5obgDadmD/oZ5T30GhFGJsVAOngPFJJuPgKEgZCVIOsEs4I8icRwDwCAJH8YyG24AEOBRPRRJpuSLGl/5YZICwRN63gK3UIs5zXVDmV8y4aC6fKFg04oJvWQWufKXyq5Hi2dxIJhcIBsAdgu4cV2BR9wwlHt10aP3B7iAMJppckgkrY4oPbsSlvzRVM/R0Lm2bEEl6lXKpnE6x0FKZozLLnN7W76OchrtODv7Li+/s7Z5R4zEHd55cf7Dn4OlR6L/BKg8sOgAHyeG8gLNkkUQA/dRVxW8CQWQYEF2VL1qA4qT3qNI6/eNByMAnpn88cNeenj4nPTuWv9DDwZbkt/YgMEUpg3mgjmkxJGc/f+eNhXSEcRV4S1s4S6gFQnBJZGM//PlzmfC8cFVznTJ63bJ5Q0MDhbIJpjCJhDmfDoETlgoR18gOJjZbEcu4xEylQLbIlOkefuC2NQf+/blYOmuosgofMDJB5ttnNuA49q+xi0uqmgKBHVwEO0QqEeEvBMv5P//zP8O4gvSday6/DNokYBwnKMSxZDj9nMRgpiJFwmyDc5Fr58033wz6A9BRgLPZovS0G5VO5ubw2kpmI02POeGmqHeCuLR//Md//Jd/+Rfgb4DiMSlBgsV1nAesRPMw5BWgfqky/YczFMKzGZ8o'
    $Logo &= 'mrJp41snTpwAV/6DP/gDETsyKfOK0I2gKon7Vg6aqLw2faaCdzcpfSQ2hCCOF/fh2FTsNNcCHQacCqUEgX633n7bF37/D+rqqIDMyRPHfvyjHx05fAQDcbq75847bv/DL32lqakVjw5jilJWBAvhsXVGQmxJZ9woZ7D4lNvvuAvP+a1//icEFWI039r41i+feQrqEVbcXXfcg9ja7373X6GvuN1QDwCCUdQ65+2xHfPLNlp1IZRIB4NS9Tlz5sIneP+BvdHxaF1DvaIpsM9LnDGMlXSXCcZO4XixE6dOFixSS9llC32Rq2uqkYUJGyLWhBYxJgpVMTJHhkfAimZ3zlq0YD5klO5IciyatIsAq0yvKUhThUiWASymKtW1geoqP72mC2puw43athkwFX4JNsLGChzYnc9UcgVr+7GBH725b21XUyKVzlrFw4Oxt48OvrjjWDmT02sDUFMEcucSig6hICVgIDPCAZ1ZLazN8xpDv2kMZ+Hsh0EhawFjdwwN6IYOMjUeT63fewp5JxuD3v5IYjiShAkiAFuD6sqnMyCirN/AndoQCwirGSQ2CKaiyJyWymapF6+poKDeeXl5TYepOOZT+NcKgisEfHLiUBTErjc3N1VXBcbiWVXW8yDneeuzD66b1eTt7knohhvzKpvlMpETQYawjj/3zC8PjKutV1zjK8YeWNNsZRMRy+1WOITWEZeEsDYh9E0gYYwqUyYEAmbYsbgElEV4FouuFi3KJQkYdzSRaW9r/MO7L/+Xn75QKldBM4HeXR10z2ithxUa3eF3LgwqRRGeUvngAuyChek73/nOY2hPPL5p06aOWbPmzOmqb6gHkQJ7cPgc2hk9oxzUSHhVgciiMgESwuMrlIMHP/0ZYbLGkecXsi6Rmu0obQ7Tnb5c73BB+GV897vfBTb1zLPPbHjzTfAVBLLAGYdMuQy5i4hRh21U1pyV5Ape4nIUFMr3DBdqxOWc7j49d+5cME5gqqKHZwxm'
    $Logo &= 'xH6hBVaqF7bGc14uxdw4sbskZBDHcfzDCn7kJoAvTDJR7XxWe/s9d9/X1dEFD5N0OrFp01sH9x9CEF51dVhTtLvvum/RomVYukVywqcIDMFR7OQcsvClFVMSO5nyq5UbJMuDGIWCVWvXXr//0P7XXnt1sH8QOVBe+fXLKMV42813zp0774brb+nt6/3Zo48ODgzNaG/jWGxLVOfVDE04xlwoT3EhhJDNKoFrrrkWzPLE8ZM+vw+syzZtsVQCJpHlOIAGJIBtaXIEkDKtWJaDJBl2CIkohEYPx6nHsmXQtSim4x233XbtVdfErdLIKPyJs1q131ancaJVZBFXpqQmulpf7Q/4/BdMUwMe34xQoNZrDI2zbCKcfTE60DnIE1pD1f4TfWPffn7ziztqYD8fyuR2dw9lxhK4dbAuBE7CnJ5RKU1nhIoko+aq4BL4kqEafxF0IHXDnIYD3c3Pbj8GNzlT1W2EzUW3gwHG0DQ95E8nM0PjiaFIiiJ4/R7EXeIhs+SmwAejYYNbiavseAy12uc2FAoXra2rdX0QjWr5nU8DEAGyOP0Y6eqaGlVTMbiargFIBGRkWfiz6urMrln1G7cc1DzuSGx87bLOxe0Nhw8cyFKVErAUBBMTAGgoHNWmGaiR/uudpxtW3imlRi7rUAqJ8YPDoxBrMUl4JuC1lLkKgSpuLbgImycxd0hfdxQF4boqArYYirEb+YRoJD0djI/Pbmm4clH7+u0nXUGfKxObPaMjFKwdGurnjN6SCE4rWcS1aqtrKnUjB0+DfP3ggw/ecMMNKGUIj6lXXn4Zt8bohdGgsnu9sLM6qlil0Vig6wluKDsGvQ0XBBe58/Y7br7l5jmdcwQzwM7zdZzFBaGZioi0Iv+zDV2yhIh6dOIcRump+h/savDxRSUVuGZt2LABuDdCv+vr6sFloZ5CdwF7OWPGUqeYIzvQ5jAD8YyIUwHxBC0FO/nMf//v8KMDA66sBDOpkiMaUr2hjIXw'
    $Logo &= 'enB6LkDX6QcFo2PDg0PoCnLhuITShknCns24COSnD8NQ7/hlyPyJgnkzWmfcdOONHW0zhVfGLx575GeP/Qxkr6+vv66j895775kzt1PgAAg+R+OYI+bhRYFgAOWwab29IZ1hAwejgqwv4P/Cg1+KReJPnHwsHKpGFcW3N7+9dNGSWR3tcPO9795P9nT3/PwXj8LfjEAi0yQzFATvAgsmDKRMtd1xcm87F+m5JZRQKHznXfdufvvtbVt3y8oAhM1gOGjh8vkcR+br7EpicSH1guBfdv48oQ1MlDrmPKCq7tFRI2B8dHxwYHjmzBk33HCrXtVoRZLp4QjSFLt9JoDecjZLZ5FvsQrWwhH4ilvXLuYNg4PPrg60Bn0DownqJKNexCE4RR/EP8MEwgF3cWt/9+hxLQqBGSvPF3KrBpG4MudRmBhJ5hOMLIS9ZldDyK9pebgS6MoVXQ2v7u9+Zn3GQrEmt65AQiQ/b9a9IARhE2gZ8D+vTvnFFFmXSU9KxLPQUVBn2cXkDwdT4lFZKZqaS0+GPFpdFYiR5kf92g+ooWzf+Xp5ndfxNdBQA36BJAiEAWRUWH2XL134zrYDVtkyVNfBfVu+8uZziOXAuwZxL3Gor53JW1ZKZaqlHVxyixmsTvYdfvbpzQ9FBiRyaCffMVmkwsPhrJmUK8rpcTpO0tGhGjvQUllmKY3nJ9QVESqJJmJcWPqyVFPRgzMl2aORKaywfMlC4S4hsxwsUonE0lEE3ADUPbPQyQ3BgPAEg9EeYY8HufWgnT4NSgrOcUZlBRcXiUNATJYuXYrSNYhUh4KIr1Pr406/4YKg2o8//rgJNIm1HOdSgD2QuQvRCKLn09dXcDrgUJRrBPvcvXs30Lmj3PC6xdOdW+ZAE/m7wJ/AS6D9wIKACwp1SkSqnq26F86Kx+JvrH8DLGQSYIi7X3bZZbA/va/cI4YFHBGvA/xMuDDwfrt6MUZeHPnbTigJsZtECQ1ikqLgPS1buvym'
    $Logo &= 'G29ubmkVXQHNPbjv2MKlXRDN6uprr77mKkyIkiDfgC24h0EPDFFepyLK2ZE21MjKFF0slZTAHvLhUBgeXLM7OyHNeH3uY4cTB/YdGB0ZGhwemNHc3t4+a9HiJQ//7Kfon0bznsOIGEklGEqRLqAwhtOg0kKMqwvXfuWPvpqKxze99dZhxHm1t3vgyiMiNkgAkWUR0WmrtHbaYzt+nkP9cYBYw9FIDMDXQN/I6kuX/+VffPOSleTgMBBJAG5yGZpuUOJYkAL2Klb5suTDG3QbDT63qamuC21uTf295bM3HT69deeRpFQ2dU3G1STmD7IiSuDIbqOkIGuklYDFGHeX4DScL8VzkteoDbg5WFoS2JfQmml2mnoD7C0aBe6AQYDFXrug9fVlszfvOj5+ajjQWqOTCYmMMexZYrksqkOoe8jmj1CN8UgCaUqrwwGvx4xm84pEYjMIsOwiZlpgxlYdcHc2AGJzfYANhOC8jr/88svPK5kxoCtI2SCp+MSihWwuKAWWcVdHW1tL/dG+iGkoPeNSTmlW/IbOuYop+ami2jRcUTHgAX+gqrq2mEmagZp041Jf22qN1p/CqgUJ+7bdXbJXFLtagTMJS4mF/zvJuPBNYnyGUBrO7IXDOG9JHoY9kUtSQehSQqmrDSFj9oyG6nlzZqWS45JKua/ViZSOkG1ntrWBAk5FoiZJ1iB8i7kJ82SSGwRhkL9JVbYwPiCXoHSQkd3cnCs7PODCkmvhyqj7edttt4maNE6wiAgwBPMDFT4vduWY7kUu0XXcQIjj3PB02K48eCpTESltgtzwvPjqTBun9NbZHge9/drXv3b3PXcLOFHcwtH24DCGMT/H4ziqHtjGt7/9bXRVfHUu5VTO/zC8v7j+PCRs5AqhHNQYC4zg9u07ddMb8JMosXTJUkRBQseEq2E6m9741lv1dc2trTMxzBDXFS5Lls6XE8UcVAiSlSbiEKk5wcPslufV1SpE0Qt3Q/uo8tDoUPfp'
    $Logo &= 'U2Bp2UyuKuybM6czFKqG1pLOZ2OxyJGjh1WFkt5JhNDkFbbVE11mqn/uWhrvk1lBtgd65fLV3/zv/9cPf/wfL730EooNYzC8fpB5E2tXwAdWOcdeZ6qVJ59O3lbIfoSFzAZmcMc0zA7JtNt0z5nX/uUvf/WO2+7MpBJDo2P7+8fzGCJdRVwp+zOwT20Bse7ktlvOFQAThU1dQp8vtHFJDwmJ53++5eDweBo57WEbtwsxgKCAwGO4NM0wFTA2qgwNNlAo+lXVpytFWUrmKV27HVWAY8miRKE4g+OJ3T3DnQ2+No9vLJZBUs7OhtB/u2mZkS+8seNYKpEp+kyDLyWLFJnQ5xSVtC+rANEB3g61deHlXc3RRGbzvm6oY16fWspTaEshncunsq5UVte1kNck5O2Da0Aezut4hGKcV651YYbZt3efSMIoXGM5H2sBosFVl19y9OfPgpBWB2ssPSSpXgP2J+LqquArzO8VgrlkBem11XJRMz31XSsM8B0FqiOlaDKxRZNeVTUymzgpuawS6Xu5LFlhs5Yrz8iSRfkPGAcT4evFLKGzwsKXz2Ab37DEVexwJRUpI+WSV152MzBHlEVGR8DfnFhrQHTvOxpOdJ5DyAxu0G+mz5grgTXXRbQ2blP3T7WZn1ciyEp3L5NbXV3dBXTPYXXvO6NEa+f2vhE2aOdQJcHV4EnxviVtfvsJJUl+shEweEEcP3EC7oP19U0d7bMjiSjiTlH99Ec//jEMf0je+fBDj3bO6gJTKXNdDF0mO/3m4/3P7e0dTGTcmlTj1TkbGD8DV7KG71bKKgFjXDen+Wu3XgYRWCBUXKJ55Ic/+N62d7eAHEfGoi2tTWsuv7S5pc3nCYyMjvz4R//+yssvqoqOCsFUf3BiKoMT8jDTl6kImBA33ndaV865jtldX/v6nzS2tPzskUdOnexOn+itb4Afv0cA6BDDbVdmhdJqC91FFg4H6Uw0GkdYPnIS19QHb7jphnXrblx7'
    $Logo &= '9XVk8JfKA8nMzpPw6Im4RuMRHeykovgbzi8UsT/npmqSSbIEVLkuqIlZcuWc1r+8bc3fPb05crgvUqoBnfCCi+CmmipRjhx0NYc/wp0Taa2x5oZls+9b1blp1/F/e3Kjy9QRm8lMmjuGY6Kp4/HUY4Z84+KZsu4ryxmkNQhq6tLWqruvnHcslurpHkqlsjk/vRfTCwRCAyCfz+Qh7ZKDdSQ+f1nHF69eAlvqExv2WqMxy9ByWQ9dGSyWOEqOij8Xi/YdP6AGeYiiu6fbJmOk01z8LU3NkL0gf0BZAVmXVYkCzSQlGk+uWbnw9Q3rTw4BATeL6ahLh2neJIVAsaQSc19wGFWDAiETE9EIypKLhRxyo8kuQ1XxM0JvKTYR2qQKXi+YvdA+qOIAl6YAMyG+AVtCngqRAs+k2hAFfFBmUTB1PrqAecVfs5jA6ULeo+Gk9IzG0KUrF8cTSWCjpmQnDQMng7UD9AgS8XSoMM46owPx2YhdpQHjIhlJZffK3M5hLDkvNWXq9tSnq7z11Md0th3cz9lTufG+FH/Sxac5bpWq5NRncUCwDyf3V5mUadalcwWoI55s/8DJEycefuQn7bPaZ8xsD/mrbrrllvUb18MRq79vEHP6pw//V31T/dKlKzHpo9ExxVA7G0O5HSefXb8T4pO3NpjnVLiSLUcrGVCQaLK2JXzP8tnYX/lsL7/ywi9+/vPRsRGvzx+JDD9w/QO///t/BMqNn1577ZWfP/royVPds2d3qnaZZvowTF1wQCgKZzPUT3/4hKaPAsMoVg+XNqQ4O3r4yP79+/oH+5OpBMBiuGPItquPTHmTFHJ0K1CJdRIKIPtXh4Pz586tqa4FhHrlNVevvmSNJqnDQ0Nen16iCA+tc2Z9X9BbG/ah844Cx5VgrBGve2lH49ymsFouXWRx1qDH/NK1Sz2q9JM39x4fTg7HUrF4kuwtBLbI4iDD7+moCzcHPVfMbbp8fst1XTN9ZdfPN+6Hvac6'
    $Logo &= '5GMPBdto5Gq0hhJJfBlPM1ivSIBSAM63hDyfuGoBjArPvXv48EDkQN9IJpLMoFaYgO/yFjKPzW2rnb2q4/NXzLu8sxWFCHcdqx1JZMFdfEDG2G8Y+opUKEYsqw22/VTaUMuKQad/IP7EMIBP/3h4+BCyfz5NGFHmdnUhpwhSKijcGNAnmALm6ltvXPfdHz+qezyUoa5scRpHieOjebXjn50n2iYAFXkKZDu7BQkwHCnF34TnmYvYTlkulrlcA3F+0Z+Ky/Cl2Lzpoj/aJHyAE7rpistQMPKFG9ddi9fX358ANxWYjNA24HcDMwCk8um7Tk2PYvL+3067MOgM7eKfDl8/8MesTLTzgY+Js/NDYyqcG4AtCEBlockixvU3r7/S2Nz4V3/+N3pVVXVd3Sc++clf/OwX+/bubZs1Y8PGDQ0NjW0zZtXV1luUlrXU2Vj3tXXL9p8eePdwfypN2LrkshPhQZxy4U/V/vCaZV+8fqVUwYNfe+OVp375RCYLq7gER4slyxbfcvPt1aFa0PGXXvnVY0/8AjlUmltaQtWhbDrFudZVgdKyowtzLekDmDQOb0fp389+5guIRd29d9eGjeu7u0/v3b0XJS6wuO0VK4rcMU/QDb2mNlxTHYJv5YoVqxYuWNTaMhMIIITlYoFBHqtU7davmttcFfImM7lqXWUjuGNdlxBiOhzPzKoLrmirDZoX5U4rGIHHUL+0bsWlHfU/2nh4Z//YicGIapVEnB2lzfcbXa21a2Y1r5vbuqjBh1wA+Kmuxv+FW1f4TB3lhCHXVrJk6CFgpG5VGo7G8PwY8nTegvmoJhT4zOXzL+toeP3A6Se3HeoZjacyBcrCiSMMbU5r3bVdTR9bNmN2fTAylqwy1euWz+qYWae7yj4VJNHpMBVlWVgfSKaSBUMJGh+M+zzIIrxuXL/9BuQaTAUGSJhkCQdTFIvTPYyPDF9xycq3t2zfuv+kx/Sm8hl6MQzWkh8yrzHOOVmSFKqh'
    $Logo &= 'whRfGLdlVuyFYUux/8m2P25JYE0i55iEJnjJRKhdkasX8ydporgatqkqJTCxAj7x59bLhUx0SVf7VZevHB2hIRK8UESoINIb5pBFixZVUKXftd+1i0p9L8PdHpTE5PILGuG5vt6evp07dq7f+Oolqy+fO3seDNqHDhzctXu7QtEVeeRQWb/h1SuuutbvC2YIuinNa6r+23uu+uYv3tyx56R3Vr0i0aXApSLjCa/PXL2k/crFszT5PaQTgSlvbtgIb/fu7t7W1hlf+sKXVq9axUHO+oF9Bzes39Dc1OjxecnDSDdgUJE4QoQiRTl6XVLZ++uDbgATAP3dccvdWHSWRZVcx0aH4/GYSF4N3qabBhLEVIdr/FBGdC5aoKrwVYODCNgJiARncaCS+qYidVV7WsMmFrtaYlRUoUcoc7UcXA5GV1NRAqbaWH9hDrWVUF5JcLvOpro/vtGXyhdhYMde/k2UlNQg3qouK2xKiI8hCdYVb/Krn1w5S9EUst0Xy3YKNR5bHCBZsB/qIElCwxAxRlCwVE1vrfZf01W3sDlgGl7hw8/e3rhMSZOsgKGkk1ncIeTVLmsLLW8I4M0rCg0Lg2yS8DV3qzLuSFVg/7/ThEUB+g20HJjrgbZjStBenpMFYFLZ5AMfv/vgP/1btlDUFRhOYDoxCCkGD6HkzDwEONp2meRPbpUypfjn4i2xy9lm1y4heDL0j8Y2ML4O60FFscfmORh0Dfy+mPG71Qfuv8fKpigSgptTxQRxeSjsAd9Z8R4vCnb/XfsdUxFRF5xxwYIlAF9JQlJUeKAjd8L3v/89UzMbb7oNNPQzn3oQZRA3btyMOXfy1Knvfe974XDNurU3pmGhTmfhvXDzko5t3SM7uocL8YzkNQyPSeUOk9n2hW1/cc8Va+c1w5ibyuaRmh0uws89//TLr7wUiyXh+dfQUL127bV33XE3XAMw4199/TdPPf0k5NzWVnKDgQkcn+glF1UtgSCC7ZH31zQw'
    $Logo &= '3/NFNlioJ93MXW+CYTg/ISkM1q+oV0qR5u+tuZJMpwB0c14EEQDFWXeLhItX+/RmTRGlnQyqSF+m3D7sey1xZUrZ7b+YyuqVXwVVcRtGR71xljOsfAbVTQpUNEzGwKb9utbUEqa4x8qgH3Z9lUmGRpQqIHsQRN6Lxsn8VTyLps1prptjl4iobEVQ1WQWUyCPedSIoIf/45oguKtXr4bXKVAj0GI42+iaRnZySRuLxtpmzPjsPTf9+389ZXrCMHmQUqbIGGSJFyJFk0qiQC+5RZBRsuTi2CL8YzmJNygiVegk9J/4k/AnEuKz1iyLAEhiJ0V8UmFHDnC3YJeRStikkyDDADBGMvD7Pn13R1tjb/dpx2NNqCl4BKjXeJzfqSm/ax8Q/FUsIeKGJRQKcnNMOlXh4PDg8Nub3nl79eZLLrnUssqrVq35xH2f2rvnANDaXC67fduOt958c8XyFVT9RbNvcf2yji1H+t5451C8YHnBD2Jprdp307L2tV3NMIv0IbxLVcBUtr679bvf/153T/fMma3wzr7p5hvv/+QnvT5K/L7xrQ1//7/+btfuHa1tjbkcGSZt0inyWlEBdUvXVBLDivTxwSkrDJdjmRkm5HGkvIQQDSaDRUwZetnNS5TizWUKk5iKz+NFkDBRC5nz0MiIIKt1fsVP6KhOxmwTXw3V/Vukd5x90CpZ4HPZfFYiJsAjpBC8T05zCtgdayRkuVJg/RrL5ESyA9pZuVFi+icUFIm/8nUc0RpDBWKaSIwjvK++pt4B9jQzGDJd/wc3oayAl8CnFmEx119/vaDRTqZFmHauu27Nse7+53+zxR+oSeXypJtSXXilxO8DG9BdFHyFwkIxjQQM0jY+KU+2UDN4g14AIWR8WLlksxaZ/jibuKi6IvzsixZWM4UWk7mRDSqaVPRprmR08Nar19x8w9qBvlPoJi7hRHWAwezbtw/mQPjgCgXl/2XvWqCbKvP8Te5NbpImafqkpZTWAgXK'
    $Logo &= 'UwqCQqkgQ2GWijCWx05FLNTHiKCz7OB4juPuzDg+OLM4Hkb2eHY4ux4FV0flNaAMVFcRKSCgSKEtfUgLSdO0Tdo8mvf+vu9jY5YcmZYpFOr3O+Fye7n39tLTL7/8X7+f8HeCg5MKFCagNn/xYrMM42xq+OwlrSxExrELhtfO4JZ/3xyfYHx49eM4GWJfBTOnf/zxJ+ZLFpQ69ny4Jysn56EVq6jiZKdBb5yWmbJw8vBDNU1uh6sLk9Vd7tIFk56aPQYyLN4wJt5kSVbV1J/b/9e9LWYLlgj9DQ9MmTIV8vLE0vns6df/tOXL41/C0tdrcHd22aO6L0jNH5mxFkuHKAk6g9bj8+A5ry1fdPUBIlkjY0W6vG78NIg0EtX5YcXPZFOSEAPW2I7t9/0TvPxMhmud7+t9QCaJEv128de7gKmhEH6owJg0VAIxAIj2fwzcSZLExA3R64uJpbKVJW3t9mNf1mDqz+0DBPRzCZjsoX0PiDiw0IjssyQFqUNfCK+wkvQN4y8SboTBG6KgwJk4QComVDsI7BLENkzC3QBetIMYeVra84VXkA3ck3hHGdSrFf7O1jsnjHiotMRqacZnQVHU4J9wniAQ7Uhk8PDM+I8IfQUOTioZGUOWLPvpzBYLJEtRfA4QEMkHGfv+IDJbVqsFWSn0R+HknGHD1zy+rrPTuaP5A4wtnjr59fZtb40eOWr02LEhmgXCZ/aSqaMuOj3/9t7nXRds2WOzfjp15ODE5FabFW2QRoMeWYLdu3a+te1NZNPRiZuSPPInZRjSXypQYMJo+LDc8vJHIDwF9WLMsSIuIdE+tXjBU+FytPBi9WYOycgdPtLV7Y7T6K6ZSK4yRoQmZiznoCTjSx9KJX7iTDXINEi4JsCJUhgo4EAswoIVzPTNmzdv27ZtbNSOjUzT31ilsxOCpB1PPrHyxZdeO17TGGccFERqmcwMERE4nEMdy0XsQdEghLQqvqYm8xIljOiIRGDe5pRaCJfQ'
    $Logo &= 'MryXKNHi5cMr7KOZLpwQJCfR4IXplKo8nZZxw4asfWRlt8vR7e5CZhvnUcE64kaFgc3Tp08vWrQIw3q9EnPk4JCuUlBBw+6TT66nZoyKSFqdVf0UFOh/J87JFMjq4LWg+N66hvPwh4fgDzo4N2/5A/qAp08vbGuzoSRo0mo3zM0//XXjZ4HQunn5Q5NM7k6kkpTGeB3ildras0c+/6Lpghl6i1hCELpf+8R6mPuyPpbxYyeOHTNBDXFfBWMCJsROUi6XS5R0I1PfEGTtkFMSrgMYCUEkgEmHQk4G6SAirHTDEZlt5rjZaioM0NZFZQUGgkVFRUy1CdSAMUTQQ4etIzlZ/OX6Rzf+ceuJry4Y9KkevxskAstUpA5JPEniDvAELFgkWKVACsgTUsoBRZxalHzwVVWIgDLA5HjBR/6QCK0dZF99XmqijUvwDRFTM8uVoKAKoQmNmE5qVKSH2GOzTRyT9fM1/4hf4dZ2u5quYkXUADYeG/V5+FP1XcspByeVcJi1xcesm6gj6isvL16wEJJcmzb9nghB+L2HPj28qPgnErGLJklhAGJWP8ofkZeTtjB/RKqByB5jLaUkJINU3njrjZq6msQkk81qGzUq9545hVA0iIhr/j99G/GK57kSPWeUSAZZ6C1omw1hFw35HCrcWIDZhZsVHJEuqcWLF7/88svHjh3DuzOTswQXMAtFTBRCg/WZteVbtr770aHTKmOSFFB6ibAw9UBFJgyMoGCjx7SyEgxRZTtBCQ9JL/JhNK657AUbwuqieS7sMul1QmAhBa2PEcVexCnkEjgMiZimtdtmzRixauUSv6fLYbPjYZg4bkQU5MSJE0jZ4eFjp7WvHRycVK6tym2IM8yf/+MjRw6dPHUSZXaky9CslZE5JG/seNRlMPIrSarFd+WBs1INugB0z0V1QrwBi+X9ne/t2LGzvd1mijd53C6sxtLSlbJad6PeAkK9GmyJTKYhMRhRFbthYDNsPHy5+Sv2'
    $Logo &= 'MCCBPSK8RtBnDPVAdLuw46iigF2s1lZ/XNfjDy9LH5L+7s4KhP1GrckDboAmMIlUJDpHoiJUpCTD9sTOR6kmvkZqFRiC9kdgC7YIYvSedeCFGP/QvmwFrguL1PsWNpQhrTIUcLWJAUfpfbPvKy5obzM7Oro0KgO1ArpcMgSjwJAKvZ3Qzoq0EfcdqXDwlmKK3nbijh83oWzVQ6/9sfvQ54eHZGbsP/CRrNNt2PDLoVnZyEqhvyvVoGU3d7p9GjWgeve9t//zv/5EHCB8REZ7wsSxc+4puiGMwqo1ToOBDo33HtG2232e3fq+qvtVGCVG36xHZaTrwUMcTBMIyrvLly+HjTHaFlBfQbyiBESRRQAYD3X6zy+eN31MdvZ/vLOr9ttLGsNgQaXtpnlmNqII0aawIOKFkgeZ3lGyrmEmZEo6ENmET1iJfTb7SAdKSLkRVKQGNUmYYvb4fI6LwzISHipZPC43s77R7A+4QFOwAoKSGFOjwhNCbAna9UuWLMG0Y+815xk4OKlcB8AUsqLik48//QRCkM5O99kzZ/Z9uOcfFiy8bWiOy9Glj9NJVFVJVEnI89rt7UePVJ75pgquqxgShKbWipWrMVYp3CiAURhrRtcq2E60/Mb3OdZdp7V3lXtGHg+g+9HH6VxJFHngYE8kNZk9eL8k0Knv1Hf6BXiwAcYrBQUFGObfvXs3SvfQBHN5iI89sSAgShAi5oKqz9cPycr49YbyPfs/3/vJSbvLozIm0+b4kDJMGvtDfkEUqTpxEH/Q+S1SMfzLTQFgGKrUgnBDEkAyAqzmJcgf08q9J4jJoPbmRFmYU3RH0dy7g6HuqroaUBT1siMS+CAupi5stbX+df/+OffMQSf0NfcQc3CQlXw9PsyeOHX8xZd+V3GgAqlkqOKbEhKe3vD08qUPQDgr3oiGMV2YhO3K89/WffDnd/57+/YzVVXwYjIY41aVlT++5ilZUgscfyuIjGY7ZxfmfwLxCQkYOIll'
    $Logo &= 'PsYiN7LyzxHRGWQ7sA48ePAgnKwGpaexeIWZEuI0ZvmuN5jS04dYWzsOHvzs6DeNDtjNGNIkfaKaCEiqw5Ia7jchmdg8CNinFteR4Xk/HWYR/AGi8uKTYJ4m+NF1bw13mA2yf3Le0KJZd6QkpmA8wOly4GoqlSRENOExzow5R0hxFxbMLCsriwm++xscPFLBTN+kiZPLyx6rra61tFzCurnQeKHy8OFpU6fpDDBKI4TBOqa+/vqrN958o8ViThuc7na6l9xfsnzJsp4wCmtG+8EiNtOtNxivOKG3qcs+ZBTe8BYb85WWlmKLeKVw1t2QMQevKCiY9wkSYp0Ou9PRkZKUUFoyZ+5sd+Wps0fPNFo66t1SnFqfoFInCqIiTqGRFHIYeyEVk6sk2S7krsIAJhs9AUgiuM3dnVbRZx9qkvMnjM6/fXRygqaj3XL2nBl5NyTFAmQG5jLhReooyHohQFlR+sDfaf/HwaHs+XrulQ8rtrm5wxctXpiUlNze1h6fEP/Rwf17/vKXQUmpyOR6Az5QQnVt1Yd7d9vb7NAqxtJKSIqfcPuk9MFZPSyVo7wvcFyVJAZSvQSMcitGKpE8ErbglZKSErjvQToP6SbGKEwPmLi9BbwgiGar9ZvzdaGws2j27f/82KJ1D8y6d0p6bnyn1lUdbv3K1XrO2XrO017rtZ/32eu7O+o8bbVuW63PfMrddNRrPqbsPDNUZy26PXXt0tm/WHHvnIJxIZ+z+lxdi9UN5R+aciMF/MiKxmNUVVVVVFQU31v84IoH8SR9GKNw8PRX36PFevHZXz27bdtbMGOoOddQUHjnr//1t5On3KHTxQV8/o0bf/fq5j/A+a2hril31LBV5WW/+PkzQg9AfREFJZPSG9DgiC0F3erZMLyDb926FUV71FpUshp6NiGKYIBaONIKfJD6NsKaxWQiuWLE+ohsOuwOc5fH4XS5PUSkyBtkls2SrFab1EqjXpeYCAUlo1FLvEfd1A7d'
    $Logo &= '091Ny1QiiVxD5M5MwBh/y7KM2x6trLRYLGhRQ14Ox/uBUTg4qfQ8jmHrf/s7b77yyu9bzDDWsmVkDh47fsyax9bdOXX68S8rN23atPfDvbflZDfU1c//cfH7f97Rq293q6R0ODipXGGOhODg9ddfx6jKtDunDc3KIi6NxAZbyUosQQqcFtEhAnMgSRUHyIIoSUS+FC8qSgwIZHCFuMP5vB6X04lGANwQR1WSJIrSd9PKgsgeA3eDlw+45NChQ+gbfri8fNz48TdXyouD11RiHRUjXLWg+L7z9XWvbd6skAQM+1YervzR7HMmk3HHzvcumpu0Wo35oiU/f9KyJff3kE4UN18thYMnvnpovce2eXl5zz333Pbt2ys+rhiSmQmTV/AFzA6AaMfZSOgAkkBAQ+RHcR8qBSai+0vwM1ohpSayRdMXHV8RpctWKwQ+dhM20oKDskaDIKbyyFeXLjXPmjV72bJlMEli/c03XcmKg6e/YnmFJKlEEcItmzZtrKg42NLSKsuamTNnYFT+iy++6OzswimSKK5fv/6xR9f29lsM4GCFw93tUZDP2io2gj4wQk8WDUQ6DrA9crTy7bffbmpqgu7kyNzRhFoocCY7jdEM+5KEJwLNkMHGi8qvhCMtKxhJwR7GGHFcDLPzo6lCBUgymAkmrbW1telpqUuXLr3rrruYfHKE8zip9Cc4qfR8sA4WKdXVVS+88MK+j/bljcnz+uDW6JIkFZwTEX0XFBb87NE1E8dP6vn9BzyvcLS0WZHgMUBxWtbEzIEOqIZjVD4OHDiwd99eh92Rk5MzYsQI1FFQXkF0QoIVIESI4f945Tt3H7rLNgAoKkjpgUQpjL1wOTVAEyVJguzKtw2NDQ0NaKKZP38+KigwprwFBoM4OKlEeCV2Uu+ljc+/+uorer0RcbhGo8bA2zenq++Ylv+b3z4/d1ZRr+48YHiFgw8bKShQ4cAUC/p622HtlZKSnXNb6qBUnVaHE5AWYwgz'
    $Logo &= 'RWJ6IYNASitXjiWxdjJswS6ebjcqN4iEMIaSlJBYWFiIvmH0CLD0GsuSCf0LDj78GMsZV788MqBX11j74ovP7961RxQVKSnJbW12gyFu1eryRx5do9fE/TBJhYPzSnTeCW/9lZWVqJ+fr6uDaBFClsGDM0zxCUiLofc3whwhigiFRI8xAqj5wycCJvktLS2Ozg7cGQHQjBkzpuRPBp3EakT2D69wcFKJRc8FpiK/97v27Xr+N//S1NwkKSW3y7NyxYM/W/OEzqBPS07rIaMMVFLh4BYskYFWVD7gyX3i5Ak0iTU2NMKjCJEHeAWZK2xlWQbBoETCrmYqxciVQa0S1r9Ic2EHh3B2VlbWmDGjJ0ycMHzYcI0sR8dGAkU/eM5zcFLpK15hp10yX/zgg3e3bNlyrrpmypRJT637p/tLllF9PIGTCgfHFZMioAqz2dzc3FxfX3/hwgVEHghBcNDrJSbfEUpgdXhwjdFoSE1NzczMzM7OxhZxCegn5s43PTg4qTDC6GFxxensfOaZp4+fPLZq9ep77p6bnXVbzxmlz0nF0mJJG5Qm3Ezg4IiujkQvAcw/IgpBLOJ0OhmvAGT4UZa1Wi2LYzDOAo6JXTi3joI9ByeV3vPK+zvesdqsxcWL4vUmrIO/qfHFvB37nFScXRgTcylVIizChOuDVrsNz89IEd2xifEJkRM4WttaBeKGTirGcRQu0hXoEonRekin0+q1epaf+WFGnGGKa6CEWMeKfpDz4uCkciNh77CZ8D7e3/B53U6XU0FdKcFdwUDQoDeoI7b24aDT7YQBjFIgRkdIaKtVWhz2eF1IQagUdPgM1wXC1FtPCHoD8YZ4SSM7uux+r1elVAkSLZwGw1TcPQRBDqOek4rgaLeRH7iogJ4ufi7YQUVar9PLmjjSau52iqIEiUWtRqfR6YUo8KglUhGJTmfFRjb9XIHn4Pjf9uqgCAAABgHQ+pd2JTxfUIKUAMBlBgCpAIBUAJAKAFIB'
    $Logo &= 'gAcIIS5QiH1PVwAAAABJRU5ErkJggg=='
    Local $bString = _WinAPI_Base64Decode($Logo)
    If @error Then Return SetError(1, 0, 0)
    $bString = Binary($bString)
    If $bSaveBinary Then
        Local Const $hFile = FileOpen($sSavePath & "\pspad4autoit.png", 18)
        If @error Then Return SetError(2, 0, $bString)
        FileWrite($hFile, $bString)
        FileClose($hFile)
    EndIf
    Return $bString
EndFunc   ;==>_Logo

Func _Chip_Sound($bSaveBinary = False, $sSavePath = @ScriptDir)
    Local $Chip_Sound
    $Chip_Sound &= 'UFNJRAACAHwAABAAEAMAAQABAAAAAENvbW1vZG9yZSA2NAAAAAAAAAAAAAAAAAAAAAAAAAAAU/hyZW4gTHVuZCAoSmVmZikAAAAAAAAAAAAAAAAAAAAyMDA0IFZpcnV6L0NhbWVsb3QAAAAAAAAAAAAAAAAAAAAUAAAAAAAQTH0RTOoRTA0SrZaJkpWarS0oAykgCgUGBi8WCRIVGi0BAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFic4S19ziqG61PAOLU5xlr3nE0J0qeAbWpviLHvOJ4XoUcE3tDfEV/WcTgnQo4JuaG6Ir+s5nBOhRgTc0NwQXtZyOCZCjAi4oLggvKzkcEyEGBBwQHBAeFjI4JgIMCAuAQEBAQEBAQEBAQECAgICAgICAwMDAwMEBAQEBQUFBgYGBwcICAkJCgoLDA0NDg8QERITFBUXGBobHR8gIiQnKSsuMTQ3Oj5BRUlOUldcYmhudXyDi5Ocpa+5xNDd6vj9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzRkAAAAAACAaAAAAAABlGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqKkPjfMRuSUQCqq9BheNexG9BxeNfBG5KRCNIxCtJBCNMhaNZxK5LRCNTxG5MRCNVhG5NRCNXRGiACDBEaIHIMERog6pAZ0+EZ05EZ1lEakCnQ8RqQSdEhGpAJ04EZ0TEZ1NEZ08ESAtEkxcFKX7SKX8SKkACQCNGNSiDiCpE6IHIKkTogAgqRNohfxohftgpftIpfxIog4gJRKiByAlEqIAICUSTAYSvTsR8OJMyhSp/506EZ0lEbwTEbmWGJ1jEbm2GJ0QEakAnSMRnRQRnTsRnSgRnSkRuTYZnScRuVYZnSYRqQOdEhHgANAZuRYZjRfU'
    $Chip_Sound &= 'ufYYKfCN8RG51hiNaBGpAI1vEb04EcnA8CO5dhidBtSdPxC5VhidBdSdPhCpCZ0E1L1NEZ1OEakAnTgRYLxiEbmwGZ0G1J0/ELmTGUyWEqn/nToRTEMTKR+dDhH+PBHITC4T8OrJ/fAhsGipA50SEamAnSURjHoRvBMRuTYZnScRuVYZnSYRrHoR/jwRyEwuEyl/nRMR/jwRyEwuE71mEZ0PEb0+EdAJIMoUvU0RnU4RvTkQhfu9OhCF/Lw8EbH7yfuwn8mwsE/JgLDFyWCwh50kEf48Eb0OEZ05Ecix+8n/0Aj+TxGpAJ08Eb0+EdAQvTgRyRDwJ8kg8C/JUPBKYEwtEr0PEfCVyQLwCJADTMoUTJYUTCEU/jwRyEwuE71iEZ0lEakAnTgRYLxiEbmTGZ1jEakAnTgRYN4PEb05EfDCvQ8R8BhMyhS8YhG5sBmdPxC5kxmdPhCpAJ04EWC9ZRFJAZ1lEai5exGdDxHeORFMyhTwEsn+8AmpAJ0+EchMOxSp/p06EakAnT4RTEUUyMmwkDeMehE46bCdYhGouXYZnTgRMAWpAJ0+Eax6EUw7FLw8EfA2qf+dOhGdPhG9ORCF+706EIX8vDwRsfvJ+7CiyWCwur0+EfAPqf6dOhGpAJ0/EKn/nT4QTMoUvVARhfu9URGF/LxPEbH7MBmoua0anTkQuccanToQTCYUsfudTxGoTGkUyMn/8PIpf51NEf5PEUxpFL1lEUkBnWURqLl7EZ1mESDKFL04EclA0BSpAJ0SEZ0oEZ0pEZ04Eb1iEZ09EWDeFBFMCBWpAZ07Eb0UEdDwvBMRufYYKQ+dFBG8YxG5DhfJ/vAfkAyYOPl2F51jEahM4hSdZxEp9509ELl2F51kEf5jEbwlETATvSYRGHmwGZ0mEb0nEXmTGZ0nEb1nESkI0Dq9JBEYfU4RfWQRhfuouU4QGH0mEY14EbmuEH0nEY15Eb0SEfAryQLwJJBirXgRnQDUrXkRnQHU'
    $Chip_Sound &= 'TDEWvSYRnQDUvWQRGH0nEZ0B1EwxFkz0FaT7uU8QOPlOEIX7ua8Q+a4Qhfy8PRG5kxlKaQCdIxG5sBnwCaiIRvxm+4gQ+f4SEaX7nVIRpfydUxFMMRa9KBEYfVIRnSgRvSkRfVMRnSkRrXgRGH0oEZ0A1K15EX0pEZ0B1L0jEd4jEdBPvD0RuZMZGGkBnSMR/hIRTDEWvSgROP1SEZ0oEb0pEf1TEZ0pEa14ERh9KBGdANSteRF9KRGdAdS9IxHeIxHQD7w9EbmTGRhpAZ0jEd4SEeAA0FisaBHwU7kOGNAbuSAYjXYRjRbUuUQY8ECNaBGouQ4YjXcRTI0WrGgR8C65IBgYbW8RjW8RuTIYbXYRjXYRjRbUuQ4YzXcRzncR0A25RBiNaBGouQ4YjXcRvBAR8F653hfQI7nqF508EJ0D1CnwnTsQnQLUuQIY8EOdEBGoud4XnRERTPAWvBAR8DG56hcYfTsQnTsQnQLUufYXfTwQnTwQnQPUud4X3RER3hER0A25AhidEBGoud4XnRERvT8QnQbUvT4QnQXUvT0QPToRnQTUYAQE////////Cf5B/okZGRkYGP6JSYiIiP+JGfn4/kFBQUERERER/0FBQUERERER/0FBQUERERER/0FBQUERERER/0FBQUERERER/4n+Ef4RQf4T/hkZGRkZGRn+if4T/hP+iRkZGBgYGBgY/xH+Ff4AAAAAzwkHBgQDAM8NVFBUApgeHh4AAAAAAAAAAAAIAAMHDAADBwwIAAUIDAAFCAwIAAUJDAAFCQwIAAUKDAAFCgwIzwAAAAAAABgAEAcGBQQEAwDPAAwADAAyDQkHBgUEBAQIAAAAAAAAEBAAADAwABAgIAAEQMAIBiDgBhAQ8AAAAP8AAAD/AAAA/wACAwIABgcGCQoLCgAABwAAAAcAMACAgACAgIAAAACwANzAqAAQgFCgYIjAgIB4aAAA6AAAAOwABAAA/wD//wAAAAACAAICBgAI'
    $Chip_Sound &= 'AAoLCg0ODw4KCgAHBwcNBgkAAQcBAQEBtwECxwYHAcYGDQDhwQSnBgMFd4eHh/W3tSMldzs7OztzRTZze41FfWv1JUVDaXWZNVUAAgICBAsFERYCHygxOkMWC0VHRxZKR0wWFlRWWFpkZgABAQEABAAABAQFBQUFAAQEAAgIBAQIAAQEBAAAAAAAAAEDBAAAAAAJBQAAAAAHCQAHEQwRDBAAERERAAAAAAAQEBAQAAAAADAQAgICAhAwABAwMDAwMAAwMDAAAAAAAPHx8fEAAAAA8/EAAAAA8fMA8fPz8/PzAPPz8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMDAwEDAQBBAQFAQEFBQEBAQEBAQEBAQwBAQEBAQzNzsBQAIAAgI1P8A5AEA/5AwqKCQgPuw+gD++hzKysoCXwUIAwRN+BBLRTD4AAAAAACAABiAgCAAAAkNBAQEBAQEBAQEBAQEBAQEBgYGDwYGBg8GBgYPBgYGDwEBBwgBAQcIAQEHCAEBBwgGBgYPBgYGDwYGBg8GBgYPBgYGDwYGBg8QExUTEBMVE/8BCowDBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBIAFBQUFGBmMAwQEBAQEBAQEBAQEBAQEBIARFBYUERQWFP8BCwIMAgwCDAIMAgwCDAIMAgwCDAIMAgwCDAIMAgwCDAIMAgwCDIwXFxcXEgQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBP8B4eQBGz1fkK3K5+vy+RQ2WHWeyuz8Ez1qi74aGhsbGxsbGxsbGxsbHBwcHBwcHBwdHR0dHW/+/4JgD7Ni+4FgG7Ni+7BgD7P7iWEbsWAPs/u0G/v/hGEA/gD+hQD+hwD+AIYAhAD+hQD+hwCGAP+IYCf8LPwi/Cf8Lvwi/Cn8Lvwl/Cn8Kvwl/Cf8Kvws'
    $Chip_Sound &= '/Cf//GAn/Cz8Ivwn/C78Ivwp/C78Jfwp/Cr8Jfwn/Cr8LPwn/4pgM7X7Y/5gM7X7Y/6LYDW1Yvtv/oxgMbX7Y/5gMbX7Y/6NYDW1+2P+i2A1tftr/v+CYA2zYvuBYA+zYvuwYA+z+4lhG7FgD7P7tBv7/4JgErNi+4FgHrNi+7BgErP7iWEesWASs/u0Hvv/gmAWs2L7gWAis2L7sGAWs/uJYSKxYBaz+7Qi+/+OZwD/kWAMtmb7/2H+hgD+AP+EYQD+AP6FAP6HAP4AhgCEAP6FAIYAhwCGAP+PYCf8LPwi/Cf8Lvwi/Cn8Lvwl/Cn8Kvwl/Cf8Kvws/Cf/iGAn/Cz8Ivwn/C78Ivwp/C78Jfwp/Cr8Jfwn/Cr8LPwn/4JgErNi+4FgFLNi+7BgFLP7iWEgsWAUs/u0IPv/kmAnt2L7Y/5gI7di+2P+YCK3Yvtj/mAet2L7Y/6TYBu3avty/rlg/v+bYDG+YvuSYCe3Yvtj/mAjt2L7Y/5gIrdi+2P+YB63Yvtj/pNgG7dy+2f+/5lgJ/ws/CL8J/wu/CL8Kfwu/CX8Kfwq/CX8J/wq/Cy9J//8YA+4aPt1/mv7vGP7b/7/l2MAZ/6VYAq6bvtr/rtn/rxj/pprAP+SYCe3Yvtj/mAjt2L7Y/6WYC63Yvtj/mAqt2L7Y/6TYCe3avty/rlg/v+bYCe+YvuSYCe3Yvtj/mAjt2L7Y/6WYC63Yvtj/mAqt2L7Y/6TYCe3cvtn/v+XYQCYYCL8J/wu/CL8KfwulwD8+5gq/CX8J/wq/Cz8J/+eYBjAYvvBY/vC+8Nn+8Rj+8X7xvtgSshi+8dgSsj+Sshi+8dgSsj+nxvJavvKYD9m+/+eYBjAYvvBY/vC+8Nn+8Rj+8X7y2H7zPtgSshi+8dgSsj+Sshi+8dgSsj+nz/KYvuXYwCHYQCQYwAAhWEA/w=='
    Local $bString = _WinAPI_Base64Decode($Chip_Sound)
    If @error Then Return SetError(1, 0, 0)
    $bString = Binary($bString)
    If $bSaveBinary Then
        Local Const $hFile = FileOpen($sSavePath & "\Commodore_64.sid", 18)
        If @error Then Return SetError(2, 0, $bString)
        FileWrite($hFile, $bString)
        FileClose($hFile)
    EndIf
    Return $bString
EndFunc   ;==>_Chip_Sound

Func _WinAPI_Base64Decode($sB64String)
    Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
    If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
    Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
    $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
    If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
    Return DllStructGetData($bBuffer, 1)
EndFunc   ;==>_WinAPI_Base64Decode

#Region TichySID
Func _SIDClose()
    Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDClose')
    If @error Then Return SetError(@error, 0, 0)
    Return $aRet[0]
EndFunc   ;==>_SIDClose

Func _SIDOpen($Sid, $iSubsong = 1)
    If Not IsBinary($Sid) Then
        If Not FileExists($Sid) Then Return SetError(2, 0, 0)
        Local $hFileOpen = FileOpen($Sid, 0)
        If $hFileOpen = -1 Then Return SetError(-1, 0, 0)
        Local $bSid = FileRead($hFileOpen)
        FileClose($hFileOpen)
    Else
        $bSid = $Sid
    EndIf
    Local $tSid = DllStructCreate('byte[' & BinaryLen($bSid) & ']')
    DllStructSetData($tSid, 1, $bSid)
    Local $sType = BinaryToString(BinaryMid($bSid, 1, 4), 1)
    ConsoleWrite('-->-- Sid File Type : ' & $sType & @CRLF)
    Local $iVersion = Execute(BinaryMid($bSid, 5, 2))
    ConsoleWrite('-->-- Sid File Version : ' & $iVersion & @CRLF)
    $iSubsongCount = Int(StringTrimLeft(BinaryMid($bSid, 15, 2), 2))
    ConsoleWrite('-->-- SubsongCount : ' & $iSubsongCount & @CRLF)
    $iSubsong = $iSubsong - 1
    If $iSubsong < 0 Then $iSubsong = 0
    If $iSubsong > $iSubsongCount Then $iSubsong = 0
    ConsoleWrite('-->-- Subsong : ' & $iSubsong & @CRLF)
    Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDOpen', 'ptr', DllStructGetPtr($tSid), 'int', DllStructGetSize($tSid), 'int', $SID_MEMORY, 'int', $SID_NON_DEFAULT, 'int', $iSubsong)
    If @error Then Return SetError(@error, 0, 0)
    $tSid = 0
    $bSid = 0
    Return $aRet[0]
EndFunc   ;==>_SIDOpen

Func _SIDShutdown()
    MemoryDllClose($hTitchysidDll)
    $hTitchysidDll = 0
EndFunc   ;==>_SIDShutdown

Func _SIDStartup()
    $hTitchysidDll = MemoryDllOpen(TitchySIDdll())
    If $hTitchysidDll = -1 Then Return SetError(1, 0, 0)
    Return SetError(0, 0, $hTitchysidDll)
EndFunc   ;==>_SIDStartup

Func _SIDStop()
    Local $aRet = MemoryDllCall($hTitchysidDll, 'int', 'SIDStop')
    If @error Then Return SetError(@error, 0, 0)
    Return $aRet[0]
EndFunc   ;==>_SIDStop

Func TitchySIDdll()
    Local $sFileBin = 'cbsATVqQAAMAAACCBAAw//8AALgAOC0BAEAEOBkAsAAMDh8Aug4AtAnNIbgAAUzNIVRoaXMAIHByb2dyYW0AIGNhbm5vdCAAYmUgcnVuIGkAbiBET1MgbW+AZGUuDQ0KJASGADvpjpN/iODAQQUDg6jywHwAB/EQl/PAZQAHUmljBmgBFwVzUEUAAEyAAQQA9O0oVQUTAOAADiELAQUMpAASAAzMAgegEAADfjAECQELABoB5wEABQcA/iCAfgQGgxwAFIEVhgMDA2BgMgAAvoEDgCc84RmKEAMAnKCdDgCAK4JYGA8udGV4dIADftYBRoEBgXUGYgRlAE8uAHJkYXRhAAAeNwHqgX2BERaLE4DtQC5xAxMAW8NAPQF7AT8aAc4JwC5yZWxvY7gAAGjBB8A2whMczgn+QrE8PwA/AD8APwA/ADcAAFWL7IPE6FZXADPJvoRCABC/ASA5EOtzUQ+3RgACJf8PAADB4AAQiUcED7YVmwEAA9Pqg+IBiFcACQ+2TgXB6QRAiwSNCEAA4AMKDLpI4AChAoDhDw9AtwRKiUcOoAEGAaYBFg+2RgYk8ACJRxKKRgSIR0AID7cG9yXgRhAAiQdZQYPGB4MAxyyD+QNyiL+BYRAPtkcWweBgDgBPFYPhBwPB90QlBCAFuQCAoIXBAHYBkYlHGTPJCLEE64AKRxjT6ACD4AGA+Qd1AwCD8AGIRDkZQQCD+Qhy5WaD5gAPiXchuD0KAAIAAAkXwOkE9+EAuTMzAQAryMEA6QiJTyUzwImARfyLRQzpYSBbADPJiU3wiU3sCIhN6yIg6c0BAAAAUYsHAUcagQBnGv///w8zwAD2RwgIdA2JR4AaiUcjx0cngAIAAIpF6/7IPACAcwKwAohF+wAEIAJ0ILksoCr34QK+wQgD8ItGGosADjvBcwn3JzMI0vfxoAeLRxozAMk7RwR3Av7JAIhN+MHoE4hFAPrR6IhF+cHoQAM5RyN0WOAL0QBnJ4tHJ8HoFimAG4vwQgERQAEzxhAJRyczwAbqM9IAsAOxB7IZ6x8EKtBAEAF1ArAEJFBRAAWKyiIiWdMA4AhF6lj+yYAA+f913IpF6ogERysgD8HoGwvAQHQEgHX6/6AVBAh0GLihFfZl+4FMuBrgFWABCHOiA8YARff/ik8I9sEAEHQGikX6IEVQ9/bBIEEB+UIBQJVBAfhCAYBAAUcrQAEAikciCsB1GYtARwoBRx64wSM5AEcefFOJRx7GYEciAetKgBSAHw7AKUcei0cSwEqgAwR/NaMDAussPAIkdRHmAnQdQgYXPMADdROLRxZABsDSEgThCX0DIAaAfetAAnIJgD2kQRZ0QB0PtkX3LYBDAAD3Zx7B+BaAfwAJAHQFAUXs64ADAUXw/kXrIEwBwksPgir+//++Ap2gBotN7MHhEACLRhTB+Aj3ZgAMK8grThiJToAQM//rE4sGYAIAi0y+EMH5CPcA4QFEvhRHg/8AAnLoi/6DxwQB4UTssQLrEoA/AAB0CotEjhDBFPgQQA1HAy3pi0UA8ANF7PdmCIsATfyLVQhmiQQESv+iTDlF/A+CAJb9//9fXsnCAgihbg+3RQgPtgSAw6ARgH0MAHRgB2b/BcGAAcgDiwDIZiUA/GY9AADUdRGA4R+KRUAMUIrBUOigcgDk6wmgAYiBoQcEBkB4AP+KVQiA+gdyAAyA+g13B0eAAG0IB+sRgPoOqQECFHeAbAJAAg7ifAS4B+El5wPwD7YQTQwPtnEDBnYFAaIBgPoDdgOIDBIycAB3MHFAgPoBBHcDEDv2wgF0CgIlMIIAweEI6wWEJQCgAAPBM8nwAQh2AUGwDk7rKIAQ+gR1I0Il9+e6ASIw0PbBAXUGxgBCIgPrCoB6IigDdQSwAABmEIPEAvyQC8CD/gJ0BQCD/gV1DIB9EAgAdQbxAQwAi3UoCL+5QAS50QoCTQOAEvAeFTvxcxFqAAGD7AJm/3cIROixMB1mi8gABHcgYw+3VwjyAxRmIIPqAmoAMQJS6IKPEwJCikUQUBMBAn0QAcHgCGYLyMAzwAv2dA2ARMAHhAF1MEdHBDPSoAAEdAdyBAFCC9IPBIW50AdmA8jpsbNwADAKdzozBtEGSkUGw6ElYggDD4SJcAIjBQYEIwXAA2aB4f8AgOtyg/4Hd1ZiDEBQg/4GdQ/UAQ+Mt8GCFdMEUOjckCLAZolF/mZBcgNjAZhR6MVhAYILRf6QBIR1B6BNBWYDwYAHgOsXg/4JdRKgBUgCdQZQBQPrEDoMqIhHAxEHM2IBDmUE8n5gBOsf8AeAIdgW8SXVAwJ8hCoMgiW+IRgBXAKDcSoFC0UI6wYA91UII0UIiEYGBnUcVQJOB4HBAFHAU4pFCMQEL8AEgAB+BwB0A/5OBxHgAgQAuKECgHgHIP9zA/5AMAxABwYFIQPFD9/8///DA0Eholi5w0IBECvQz/Oqv4EAg3A3IEEECAWRL/93BFD/MDfomQahmfAA/o6BYaIzyesLx0byWQiDxizgYANy8F9cXsO1JgIl5yNywAYPCLawaBBmi9DR6gAPtpJoQQAQqQPgCAALwOoEgOIPAIlV/IP+JHYiQIP+N3MdamAl/xB1/OhBUA2D/jVAcwyD/itykB4uEHYCiAexFmkPtoRXBhAkdwWA4iBMYwAhkQAC6w2RI5AAgKDrA4DiQFAnDzEvBgowIoEvBnUJC9IAdQNC6wIz0lIhMQZqCOjeoAlmmIhmA0dwREcBWpAojISC0JfAAAjpeYAAgIP+Dnc7M8CgYAJAsB93BLAB6xBIg/4LgAAI66AIDa53MGGAATEGCzEGDeAskFJQ6CmQKuk58gMQEXclimEqD3UFAooQIwiD/hB1A0CKRwRqAVAxDl0JAAjpD5ICE3cWigpHYA0S8QEDUOgKBUEE9OCgg/4UdQsAZsdHCAAA6eQh8gAWD4ebgjIWdUAfM9LrFmbgGmYAQArSdQRmwegQCFDoz5AT/sKAUPoCcuWgGhinGOdg+v//CslgAtAO/kDBgPkCcuOxLglARwFmi1cB8AR0ARAo/AB1CWaJVwgI6XfBBn38DA9chW2QAJIEpDifcARmikKUBAiaBAjpQDIKIBd1Deh2cAiIRwgG6S4SARl3JejCZFI3RwHoW3U2sgcVMABAQhcEkgIadQtBIBKIRwfp9JCDgyD+Lw+Ht+Aig/4AG3UI/k8E6QWFwgAcwABHBOn4khBSHSEDA4jwAOjyAB5V8QAH8QDY8gAfkQMFlOnLwgAgkQMF6cHGiIP+IZQDBemu8gBaIoALvWAZgD3pYcaDRP4j5AgD6YzyACQMdQgwHfAA63+D/hAldQUgkAB1g/4QJnUFMJAAa4P+ECd1BQiQAGGD/gApdxqD/ih1BAD+D+sC/gdqABSKB2IfZvAT60KDoP4qdQUigAI4EC5CdQIFLoP+LJEABCDrJIP+LZEABesBEAQudQTR4OsCpNHosRNqADIEIjAEGYFUHnbgJUADilcEHOs04AzhAJADilcFHOsloAjhAMAFilcDROsW8QgEiheBMirAdQSK0OsEYR8AWgDSdQFAUGoC6EBw+///geKBflIyaFEA6F8AAcACdAkRMAgPgmZwFzPSD2i2B7KwIi5AKYAbJQVxReuQNip1B4PgIECyQOsDwJFQUiToJKAD6TSSGjJ3YlXgCIP+MHMIQDAxBUAuV4Bb0lJmK9BbwCZJCOuADUoI2pEOwBBaOhdyAQIB6MqJ8ADp2qIYNHdYwUCBcECD/jN1CSXxAgTQJxAG4AHQL8GU4gfhApvgAggXthdE6vjhSAcz0qCUAWpCEgNQcwZygAKQQegCatEZfYP+Nnd4QUAAdQQ0/4ggVFcAAwPC9kcGAXQuAaEqcw/hBTzQAg+33EcB4Bs0BTEEJlABwEsAdQsPto+4AEcDJYAAAADrAAkzwIB/A392EAFAUGgBgOgC+gD//w+2RwYkAQAPtk8GgOGAMwDBUGpA6Ov5/wD/X17Jw1WL7ABW'
    $sFileBin &= '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'
    $sFileBin = Binary(_WinAPI_Base64Decode($sFileBin))
    $sFileBin = Binary(_LzntDecompress($sFileBin))
    Return SetError(0, 0, $sFileBin)
EndFunc   ;==>TitchySIDdll

Func _LzntDecompress($bBinary)
    $bBinary = Binary($bBinary)
    Local $tInput = DllStructCreate('byte[' & BinaryLen($bBinary) & ']')
    DllStructSetData($tInput, 1, $bBinary)
    Local $tBuffer = DllStructCreate('byte[' & 16 * DllStructGetSize($tInput) & ']')
    Local $a_Call = DllCall('ntdll.dll', 'int', 'RtlDecompressBuffer', 'ushort', 2, 'ptr', DllStructGetPtr($tBuffer), 'dword', DllStructGetSize($tBuffer), 'ptr', DllStructGetPtr($tInput), 'dword', DllStructGetSize($tInput), 'dword*', 0)
    If @error Or $a_Call[0] Then Return SetError(1, 0, '')
    Local $tOutput = DllStructCreate('byte[' & $a_Call[6] & ']', DllStructGetPtr($tBuffer))
    Return SetError(0, 0, DllStructGetData($tOutput, 1))
EndFunc   ;==>_LzntDecompress

Func API_FreeLibrary($Module)
    Local $Ret = DllCall($_KERNEL32DLL, 'bool', 'FreeLibrary', 'handle', $Module)
    If @error Then Return SetError(@error, @extended, 0)
    Return $Ret[0]
EndFunc   ;==>API_FreeLibrary

Func API_GetProcAddress($Module, $Procname)
    If IsNumber($Procname) Then
        Local $Ret = DllCall($_KERNEL32DLL, 'ptr', 'GetProcAddress', 'handle', $Module, 'int', $Procname)
    Else
        Local $Ret = DllCall($_KERNEL32DLL, 'ptr', 'GetProcAddress', 'handle', $Module, 'str', $Procname)
    EndIf
    If @error Then Return SetError(@error, @extended, 0)
    Return $Ret[0]
EndFunc   ;==>API_GetProcAddress

Func API_IsBadReadPtr($Ptr, $Len)
    Local $Ret = DllCall($_KERNEL32DLL, 'int', 'IsBadReadPtr', 'ptr', $Ptr, 'UINT_PTR', $Len)
    If @error Then Return SetError(@error, @extended, 0)
    Return $Ret[0]
EndFunc   ;==>API_IsBadReadPtr

Func API_LoadLibrary($Filename)
    Local $Ret = DllCall($_KERNEL32DLL, 'handle', 'LoadLibraryW', 'wstr', $Filename)
    If @error Then Return SetError(@error, @extended, 0)
    Return $Ret[0]
EndFunc   ;==>API_LoadLibrary

Func API_lstrlenA($Address)
    Local $Ret = DllCall($_KERNEL32DLL, 'int', 'lstrlenA', 'ptr', $Address)
    If @error Then Return SetError(@error, @extended, 0)
    Return $Ret[0]
EndFunc   ;==>API_lstrlenA

Func API_lstrlenW($Address)
    Local $Ret = DllCall($_KERNEL32DLL, 'int', 'lstrlenW', 'ptr', $Address)
    If @error Then Return SetError(@error, @extended, 0)
    Return $Ret[0]
EndFunc   ;==>API_lstrlenW

Func API_VirtualProtect($Address, $Size, $Protection)
    Local $Ret = DllCall($_KERNEL32DLL, 'bool', 'VirtualProtect', 'ptr', $Address, 'dword_ptr', $Size, 'dword', $Protection, 'dword*', 0)
    If @error Then Return SetError(@error, @extended, 0)
    Return $Ret[0]
EndFunc   ;==>API_VirtualProtect

Func API_ZeroMemory($Address, $Size)
    Local $Ret = DllCall($_KERNEL32DLL, 'none', 'RtlZeroMemory', 'ptr', $Address, 'dword_ptr', $Size)
    If @error Then Return SetError(@error, @extended, 0)
    Return $Ret[0]
EndFunc   ;==>API_ZeroMemory

Func MemLib_BuildImportTable($CodeBase, $PEHeader)
    Local Const $IMAGE_DIRECTORY_ENTRY_IMPORT = 1
    Local Const $SizeOfPtr = DllStructGetSize(DllStructCreate('ptr', 1))
    Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader)
    Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY))
    Local $ImportDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_IMPORT * $SizeOfDataDirectory
    Local $ImportDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $ImportDirectoryPtr)
    Local $ImportSize = DllStructGetData($ImportDirectory, 'Size')
    Local $ImportVirtualAddress = DllStructGetData($ImportDirectory, 'VirtualAddress')
    Local $SizeOfImportDir = DllStructGetSize(DllStructCreate($tagIMAGE_IMPORT_DESCRIPTOR))
    Local $ImportList = ''
    If $ImportSize > 0 Then
        Local $ImportDescPtr = $CodeBase + $ImportVirtualAddress
        While 1
            If API_IsBadReadPtr($ImportDescPtr, $SizeOfImportDir) Then ExitLoop
            Local $ImportDesc = DllStructCreate($tagIMAGE_IMPORT_DESCRIPTOR, $ImportDescPtr)
            Local $NameOffset = DllStructGetData($ImportDesc, 'Name')
            If $NameOffset = 0 Then ExitLoop
            Local $Name = Peek('str', $CodeBase + $NameOffset)
            Local $OriginalFirstThunk = DllStructGetData($ImportDesc, 'OriginalFirstThunk')
            Local $FirstThunk = DllStructGetData($ImportDesc, 'FirstThunk')
            Local $Handle = API_LoadLibrary($Name)
            If $Handle Then
                $ImportList &= $Handle & ','
                Local $FuncRef = $CodeBase + $FirstThunk
                Local $ThunkRef = $CodeBase + $OriginalFirstThunk
                If $OriginalFirstThunk = 0 Then $ThunkRef = $FuncRef
                While 1
                    Local $Ref = Peek('ptr', $ThunkRef)
                    If $Ref = 0 Then ExitLoop
                    If BitAND(Peek('byte', $ThunkRef + $SizeOfPtr - 1), 0x80) Then
                        Local $Ptr = API_GetProcAddress($Handle, BitAND($Ref, 0xffff))
                    Else
                        Local $IMAGE_IMPORT_BY_NAME = DllStructCreate($tagIMAGE_IMPORT_BY_NAME, $CodeBase + $Ref)
                        Local $NamePtr = DllStructGetPtr($IMAGE_IMPORT_BY_NAME, 2)
                        Local $FuncName = Peek('str', $NamePtr)
                        Local $Ptr = API_GetProcAddress($Handle, $FuncName)
                    EndIf
                    If $Ptr = 0 Then Return SetError(1, 0, False)
                    Poke('ptr', $FuncRef, $Ptr)
                    $ThunkRef += $SizeOfPtr
                    $FuncRef += $SizeOfPtr
                WEnd
            Else
                Return SetError(1, 0, False)
            EndIf
            $ImportDescPtr += $SizeOfImportDir
        WEnd
    EndIf
    Return $ImportList
EndFunc   ;==>MemLib_BuildImportTable

Func MemLib_CopySections($CodeBase, $PEHeader, $DllDataPtr)
    Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader)
    Local $SizeOfFileHeader = DllStructGetPtr($IMAGE_NT_HEADER, 'Magic') - $PEHeader
    Local $SizeOfOptionalHeader = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfOptionalHeader')
    Local $NumberOfSections = DllStructGetData($IMAGE_NT_HEADER, 'NumberOfSections')
    Local $SectionAlignment = DllStructGetData($IMAGE_NT_HEADER, 'SectionAlignment')
    Local $SectionPtr = $PEHeader + $SizeOfFileHeader + $SizeOfOptionalHeader
    For $i = 1 To $NumberOfSections
        Local $Section = DllStructCreate($tagIMAGE_SECTION_HEADER, $SectionPtr)
        Local $VirtualAddress = DllStructGetData($Section, 'VirtualAddress')
        Local $SizeOfRawData = DllStructGetData($Section, 'SizeOfRawData')
        Local $PointerToRawData = DllStructGetData($Section, 'PointerToRawData')
        If $SizeOfRawData = 0 Then
            Local $Dest = _MemVirtualAlloc($CodeBase + $VirtualAddress, $SectionAlignment, $MEM_COMMIT, $PAGE_READWRITE)
            API_ZeroMemory($Dest, $SectionAlignment)
        Else
            Local $Dest = _MemVirtualAlloc($CodeBase + $VirtualAddress, $SizeOfRawData, $MEM_COMMIT, $PAGE_READWRITE)
            _MemMoveMemory($DllDataPtr + $PointerToRawData, $Dest, $SizeOfRawData)
        EndIf
        DllStructSetData($Section, 'VirtualSize', $Dest - $CodeBase)
        $SectionPtr += DllStructGetSize($Section)
    Next
EndFunc   ;==>MemLib_CopySections

Func MemLib_FinalizeSections($CodeBase, $PEHeader)
    Local Const $IMAGE_SCN_MEM_EXECUTE = 0x20000000
    Local Const $IMAGE_SCN_MEM_READ = 0x40000000
    Local Const $IMAGE_SCN_MEM_WRITE = 0x80000000
    Local Const $IMAGE_SCN_MEM_NOT_CACHED = 0x4000000
    Local Const $IMAGE_SCN_CNT_INITIALIZED_DATA = 64
    Local Const $IMAGE_SCN_CNT_UNINITIALIZED_DATA = 128
    Local Const $PAGE_WRITECOPY = 0x0008
    Local Const $PAGE_EXECUTE_WRITECOPY = 0x0080
    Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader)
    Local $SizeOfFileHeader = DllStructGetPtr($IMAGE_NT_HEADER, 'Magic') - $PEHeader
    Local $SizeOfOptionalHeader = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfOptionalHeader')
    Local $NumberOfSections = DllStructGetData($IMAGE_NT_HEADER, 'NumberOfSections')
    Local $SectionAlignment = DllStructGetData($IMAGE_NT_HEADER, 'SectionAlignment')
    Local $SectionPtr = $PEHeader + $SizeOfFileHeader + $SizeOfOptionalHeader
    For $i = 1 To $NumberOfSections
        Local $Section = DllStructCreate($tagIMAGE_SECTION_HEADER, $SectionPtr)
        Local $Characteristics = DllStructGetData($Section, 'Characteristics')
        Local $SizeOfRawData = DllStructGetData($Section, 'SizeOfRawData')
        Local $Executable = (BitAND($Characteristics, $IMAGE_SCN_MEM_EXECUTE) <> 0)
        Local $Readable = (BitAND($Characteristics, $IMAGE_SCN_MEM_READ) <> 0)
        Local $Writeable = (BitAND($Characteristics, $IMAGE_SCN_MEM_WRITE) <> 0)
        Local $ProtectList[8] = [$PAGE_NOACCESS, $PAGE_EXECUTE, $PAGE_READONLY, $PAGE_EXECUTE_READ, $PAGE_WRITECOPY, $PAGE_EXECUTE_WRITECOPY, $PAGE_READWRITE, $PAGE_EXECUTE_READWRITE]
        Local $Protect = $ProtectList[$Executable + $Readable * 2 + $Writeable * 4]
        If BitAND($Characteristics, $IMAGE_SCN_MEM_NOT_CACHED) Then $Protect = BitOR($Protect, $PAGE_NOCACHE)
        Local $Size = $SizeOfRawData
        If $Size = 0 Then
            If BitAND($Characteristics, $IMAGE_SCN_CNT_INITIALIZED_DATA) Then
                $Size = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfInitializedData')
            ElseIf BitAND($Characteristics, $IMAGE_SCN_CNT_UNINITIALIZED_DATA) Then
                $Size = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfUninitializedData')
            EndIf
        EndIf
        If $Size > 0 Then
            Local $PhysicalAddress = $CodeBase + DllStructGetData($Section, 'VirtualSize')
            API_VirtualProtect($PhysicalAddress, $Size, $Protect)
        EndIf
        $SectionPtr += DllStructGetSize($Section)
    Next
EndFunc   ;==>MemLib_FinalizeSections

Func MemLib_FreeLibrary($ModulePtr)
    If Not MemLib_Vaild($ModulePtr) Then Return 0
    Local $Module = DllStructCreate($tagModule, $ModulePtr)
    Local $CodeBase = DllStructGetData($Module, 'CodeBase')
    Local $DllEntry = DllStructGetData($Module, 'DllEntry')
    Local $Initialized = DllStructGetData($Module, 'Initialized')
    Local $ImportListPtr = DllStructGetData($Module, 'ImportList')
    Local $ExportListPtr = DllStructGetData($Module, 'ExportList')
    If $Initialized And $DllEntry Then
        Local $Success = MemoryFuncCall('bool', $DllEntry, 'ptr', $CodeBase, 'dword', 0, 'ptr', 0)
        DllStructSetData($Module, 'Initialized', 0)
    EndIf
    If $ExportListPtr Then _MemGlobalFree($ExportListPtr)
    If $ImportListPtr Then
        Local $ImportList = StringSplit(Peek('str', $ImportListPtr), ',')
        For $i = 1 To $ImportList[0]
            If $ImportList[$i] Then API_FreeLibrary($ImportList[$i])
        Next
        _MemGlobalFree($ImportListPtr)
    EndIf
    If $CodeBase Then _MemVirtualFree($CodeBase, 0, $MEM_RELEASE)
    DllStructSetData($Module, 'CodeBase', 0)
    DllStructSetData($Module, 'ExportList', 0)
    _MemGlobalFree($ModulePtr)
    Return 1
EndFunc   ;==>MemLib_FreeLibrary

Func MemLib_GetExportList($CodeBase, $PEHeader)
    Local Const $IMAGE_DIRECTORY_ENTRY_EXPORT = 0
    Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader)
    Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY))
    Local $ExportDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_EXPORT * $SizeOfDataDirectory
    Local $ExportDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $ExportDirectoryPtr)
    Local $ExportSize = DllStructGetData($ExportDirectory, 'Size')
    Local $ExportVirtualAddress = DllStructGetData($ExportDirectory, 'VirtualAddress')
    Local $ExportList = ''
    If $ExportSize > 0 Then
        Local $IMAGE_EXPORT_DIRECTORY = DllStructCreate($tagIMAGE_EXPORT_DIRECTORY, $CodeBase + $ExportVirtualAddress)
        Local $NumberOfNames = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'NumberOfNames')
        Local $NumberOfFunctions = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'NumberOfFunctions')
        Local $AddressOfFunctions = DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfFunctions')
        If $NumberOfNames = 0 Or $NumberOfFunctions = 0 Then Return ''
        Local $NameRef = $CodeBase + DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfNames')
        Local $Ordinal = $CodeBase + DllStructGetData($IMAGE_EXPORT_DIRECTORY, 'AddressOfNameOrdinals')
        For $i = 1 To $NumberOfNames
            Local $Ref = Peek('dword', $NameRef)
            Local $Idx = Peek('word', $Ordinal)
            Local $FuncName = Peek('str', $CodeBase + $Ref)
            If $Idx <= $NumberOfFunctions Then
                Local $Addr = $CodeBase + Peek('dword', $CodeBase + $AddressOfFunctions + $Idx * 4)
                $ExportList &= $FuncName & Chr(1) & $Addr & Chr(1)
            EndIf
            $NameRef += 4
            $Ordinal += 2
        Next
    EndIf
    Return $ExportList
EndFunc   ;==>MemLib_GetExportList

Func MemLib_GetProcAddress($ModulePtr, $FuncName)
    Local $ExportPtr = Peek('ptr', $ModulePtr)
    If Not $ExportPtr Then Return 0
    Local $ExportList = Peek('str', $ExportPtr)
    Local $Match = StringRegExp($ExportList, '(?i)' & $FuncName & '\001([^\001]*)\001', 3)
    If Not @error Then Return Ptr($Match[0])
    Return 0
EndFunc   ;==>MemLib_GetProcAddress

Func MemLib_LoadLibrary($DllBinary)
    $DllBinary = Binary($DllBinary)
    Local $DllData = DllStructCreate('byte[' & BinaryLen($DllBinary) & ']')
    Local $DllDataPtr = DllStructGetPtr($DllData)
    DllStructSetData($DllData, 1, $DllBinary)
    Local $IMAGE_DOS_HEADER = DllStructCreate($tagIMAGE_DOS_HEADER, $DllDataPtr)
    If DllStructGetData($IMAGE_DOS_HEADER, 'e_magic') <> 0x5A4D Then
        Return SetError(1, 0, 0)
    EndIf
    Local $PEHeader = $DllDataPtr + DllStructGetData($IMAGE_DOS_HEADER, 'e_lfanew')
    Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader)
    If DllStructGetData($IMAGE_NT_HEADER, 'Signature') <> 0x4550 Then
        Return SetError(1, 0, 0)
    EndIf
    Switch DllStructGetData($IMAGE_NT_HEADER, 'Magic')
        Case 0x10B
            If @AutoItX64 Then Return SetError(2, 0, 0)
        Case 0x20B
            If Not @AutoItX64 Then Return SetError(2, 0, 0)
    EndSwitch
    Local $ImageBase = DllStructGetData($IMAGE_NT_HEADER, 'ImageBase')
    Local $SizeOfImage = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfImage')
    Local $SizeOfHeaders = DllStructGetData($IMAGE_NT_HEADER, 'SizeOfHeaders')
    Local $AddressOfEntryPoint = DllStructGetData($IMAGE_NT_HEADER, 'AddressOfEntryPoint')
    Local $ModulePtr = _MemGlobalAlloc(DllStructGetSize(DllStructCreate($tagModule)), $GPTR)
    If $ModulePtr = 0 Then Return SetError(3, 0, 0)
    Local $Module = DllStructCreate($tagModule, $ModulePtr)
    Local $CodeBase = _MemVirtualAlloc($ImageBase, $SizeOfImage, $MEM_RESERVE, $PAGE_READWRITE)
    If $CodeBase = 0 Then $CodeBase = _MemVirtualAlloc(0, $SizeOfImage, $MEM_RESERVE, $PAGE_READWRITE)
    If $CodeBase = 0 Then Return SetError(3, 0, 0)
    DllStructSetData($Module, 'CodeBase', $CodeBase)
    _MemVirtualAlloc($CodeBase, $SizeOfImage, $MEM_COMMIT, $PAGE_READWRITE)
    Local $Base = _MemVirtualAlloc($CodeBase, $SizeOfHeaders, $MEM_COMMIT, $PAGE_READWRITE)
    _MemMoveMemory($DllDataPtr, $Base, $SizeOfHeaders)
    MemLib_CopySections($CodeBase, $PEHeader, $DllDataPtr)
    Local $LocationDelta = $CodeBase - $ImageBase
    If $LocationDelta <> 0 Then MemLib_PerformBaseRelocation($CodeBase, $PEHeader, $LocationDelta)
    Local $ImportList = MemLib_BuildImportTable($CodeBase, $PEHeader)
    If @error Then
        MemLib_FreeLibrary($ModulePtr)
        Return SetError(2, 0, 0)
    EndIf
    Local $ExportList = MemLib_GetExportList($CodeBase, $PEHeader)
    Local $ImportListPtr = _MemGlobalAlloc(StringLen($ImportList) + 2, $GPTR)
    Local $ExportListPtr = _MemGlobalAlloc(StringLen($ExportList) + 2, $GPTR)
    DllStructSetData($Module, 'ImportList', $ImportListPtr)
    DllStructSetData($Module, 'ExportList', $ExportListPtr)
    If $ImportListPtr = 0 Or $ExportListPtr = 0 Then
        MemLib_FreeLibrary($ModulePtr)
        Return SetError(3, 0, 0)
    EndIf
    Poke('str', $ImportListPtr, $ImportList)
    Poke('str', $ExportListPtr, $ExportList)
    MemLib_FinalizeSections($CodeBase, $PEHeader)
    Local $DllEntry = $CodeBase + $AddressOfEntryPoint
    DllStructSetData($Module, 'DllEntry', $DllEntry)
    DllStructSetData($Module, 'Initialized', 0)
    If $AddressOfEntryPoint Then
        Local $Success = MemoryFuncCall('bool', $DllEntry, 'ptr', $CodeBase, 'dword', 1, 'ptr', 0)
        If Not $Success[0] Then
            MemLib_FreeLibrary($ModulePtr)
            Return SetError(4, 0, 0)
        EndIf
        DllStructSetData($Module, 'Initialized', 1)
    EndIf
    Return $ModulePtr
EndFunc   ;==>MemLib_LoadLibrary

Func MemLib_PerformBaseRelocation($CodeBase, $PEHeader, $LocationDelta)
    Local Const $IMAGE_DIRECTORY_ENTRY_BASERELOC = 5
    Local Const $IMAGE_REL_BASED_HIGHLOW = 3
    Local Const $IMAGE_REL_BASED_DIR64 = 10
    Local $IMAGE_NT_HEADER = DllStructCreate($tagIMAGE_NT_HEADER, $PEHeader)
    Local $SizeOfDataDirectory = DllStructGetSize(DllStructCreate($tagIMAGE_DATA_DIRECTORY))
    Local $RelocDirectoryPtr = $PEHeader + DllStructGetSize($IMAGE_NT_HEADER) + $IMAGE_DIRECTORY_ENTRY_BASERELOC * $SizeOfDataDirectory
    Local $RelocDirectory = DllStructCreate($tagIMAGE_DATA_DIRECTORY, $RelocDirectoryPtr)
    Local $RelocSize = DllStructGetData($RelocDirectory, 'Size')
    Local $RelocVirtualAddress = DllStructGetData($RelocDirectory, 'VirtualAddress')
    If $RelocSize > 0 Then
        Local $Relocation = $CodeBase + $RelocVirtualAddress
        While 1
            Local $IMAGE_BASE_RELOCATION = DllStructCreate($tagIMAGE_BASE_RELOCATION, $Relocation)
            Local $VirtualAddress = DllStructGetData($IMAGE_BASE_RELOCATION, 'VirtualAddress')
            Local $SizeOfBlock = DllStructGetData($IMAGE_BASE_RELOCATION, 'SizeOfBlock')
            If $VirtualAddress = 0 Then ExitLoop
            Local $Dest = $CodeBase + $VirtualAddress
            Local $Entries = ($SizeOfBlock - 8) / 2
            Local $RelInfo = DllStructCreate('word[' & $Entries & ']', $Relocation + 8)
            For $i = 1 To $Entries
                Local $Info = DllStructGetData($RelInfo, 1, $i)
                Local $Type = BitShift($Info, 12)
                If $Type = $IMAGE_REL_BASED_HIGHLOW Or $Type = $IMAGE_REL_BASED_DIR64 Then
                    Local $Addr = DllStructCreate('ptr', $Dest + BitAND($Info, 0xFFF))
                    DllStructSetData($Addr, 1, DllStructGetData($Addr, 1) + $LocationDelta)
                EndIf
            Next
            $Relocation += $SizeOfBlock
        WEnd
    EndIf
EndFunc   ;==>MemLib_PerformBaseRelocation

Func MemLib_Vaild($ModulePtr)
    Local $ModuleSize = DllStructGetSize(DllStructCreate($tagModule))
    If API_IsBadReadPtr($ModulePtr, $ModuleSize) Then Return False
    Local $Module = DllStructCreate($tagModule, $ModulePtr)
    Local $CodeBase = DllStructGetData($Module, 'CodeBase')
    If Not $CodeBase Then Return False
    Return True
EndFunc   ;==>MemLib_Vaild

Func MemoryDllCall($Module, $RetType, $FuncName, $Type1 = '', $Param1 = 0, $Type2 = '', $Param2 = 0, $Type3 = '', $Param3 = 0, $Type4 = '', $Param4 = 0, $Type5 = '', $Param5 = 0, $Type6 = '', $Param6 = 0, $Type7 = '', $Param7 = 0, $Type8 = '', $Param8 = 0, $Type9 = '', $Param9 = 0, $Type10 = '', $Param10 = 0, $Type11 = '', $Param11 = 0, $Type12 = '', $Param12 = 0, $Type13 = '', $Param13 = 0, $Type14 = '', $Param14 = 0, $Type15 = '', $Param15 = 0, $Type16 = '', $Param16 = 0, $Type17 = '', $Param17 = 0, $Type18 = '', $Param18 = 0, $Type19 = '', $Param19 = 0, $Type20 = '', $Param20 = 0)
    Local $Ret, $OpenFlag = False
    Local Const $MaxParams = 20
    If (@NumParams < 3) Or (@NumParams > $MaxParams * 2 + 3) Or (Mod(@NumParams, 2) = 0) Then Return SetError(4, 0, 0)
    If Not IsPtr($Module) Then
        $OpenFlag = True
        $Module = MemoryDllOpen($Module)
        If @error Then Return SetError(1, 0, 0)
    EndIf
    Local $Addr = MemLib_GetProcAddress($Module, $FuncName)
    If Not $Addr Then Return SetError(3, 0, 0)
    Poke('ptr', $_MFHookPtr + 1 + @AutoItX64, $Addr)
    Switch @NumParams
        Case 3
            $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi)
        Case 5
            $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1)
        Case 7
            $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2)
        Case 9
            $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3)
        Case 11
            $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4)
        Case 13
            $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4, $Type5, $Param5)
        Case Else
            Local $DllCallStr = 'DllCall ( $_KERNEL32DLL, $RetType, $_MFHookApi', $n = 1
            For $i = 5 To @NumParams Step 2
                $DllCallStr &= ', $Type' & $n & ', $Param' & $n
                $n += 1
            Next
            $DllCallStr &= ' )'
            $Ret = Execute($DllCallStr)
    EndSwitch
    Local $Err = @error
    If $OpenFlag Then MemoryDllClose($Module)
    Return SetError($Err, 0, $Ret)
EndFunc   ;==>MemoryDllCall

Func MemoryDllClose($Module)
    MemLib_FreeLibrary($Module)
EndFunc   ;==>MemoryDllClose

Func MemoryDllOpen($DllBinary)
    If Not IsDllStruct($_MFHookBak) Then MemoryFuncInit()
    Local $Module = MemLib_LoadLibrary($DllBinary)
    If @error Then Return SetError(@error, 0, -1)
    Return $Module
EndFunc   ;==>MemoryDllOpen

Func MemoryFuncCall($RetType, $Address, $Type1 = '', $Param1 = 0, $Type2 = '', $Param2 = 0, $Type3 = '', $Param3 = 0, $Type4 = '', $Param4 = 0, $Type5 = '', $Param5 = 0, $Type6 = '', $Param6 = 0, $Type7 = '', $Param7 = 0, $Type8 = '', $Param8 = 0, $Type9 = '', $Param9 = 0, $Type10 = '', $Param10 = 0, $Type11 = '', $Param11 = 0, $Type12 = '', $Param12 = 0, $Type13 = '', $Param13 = 0, $Type14 = '', $Param14 = 0, $Type15 = '', $Param15 = 0, $Type16 = '', $Param16 = 0, $Type17 = '', $Param17 = 0, $Type18 = '', $Param18 = 0, $Type19 = '', $Param19 = 0, $Type20 = '', $Param20 = 0)
    If Not IsDllStruct($_MFHookBak) Then MemoryFuncInit()
    Poke('ptr', $_MFHookPtr + 1 + @AutoItX64, $Address)
    Local $Ret
    Switch @NumParams
        Case 2
            $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi)
        Case 4
            $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1)
        Case 6
            $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2)
        Case 8
            $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3)
        Case 10
            $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4)
        Case 12
            $Ret = DllCall($_KERNEL32DLL, $RetType, $_MFHookApi, $Type1, $Param1, $Type2, $Param2, $Type3, $Param3, $Type4, $Param4, $Type5, $Param5)
        Case Else
            Local $DllCallStr = 'DllCall($_KERNEL32DLL, $RetType, $_MFHookApi', $n = 1
            For $i = 4 To @NumParams Step 2
                $DllCallStr &= ', $Type' & $n & ', $Param' & $n
                $n += 1
            Next
            $DllCallStr &= ')'
            $Ret = Execute($DllCallStr)
    EndSwitch
    Return SetError(@error, 0, $Ret)
EndFunc   ;==>MemoryFuncCall

Func MemoryFuncInit()
    Local $KernelHandle = API_LoadLibrary('kernel32.dll')
    API_FreeLibrary($KernelHandle)
    Local $HookPtr = API_GetProcAddress($KernelHandle, $_MFHookApi)
    Local $HookSize = 7 + @AutoItX64 * 5
    $_MFHookPtr = $HookPtr
    $_MFHookBak = DllStructCreate('byte[' & $HookSize & ']')
    If Not API_VirtualProtect($_MFHookPtr, $HookSize, $PAGE_EXECUTE_READWRITE) Then Return False
    DllStructSetData($_MFHookBak, 1, Peek('byte[' & $HookSize & ']', $_MFHookPtr))
    If @AutoItX64 Then
        Poke('word', $_MFHookPtr, 0xB848)
        Poke('word', $_MFHookPtr + 10, 0xE0FF)
    Else
        Poke('byte', $_MFHookPtr, 0xB8)
        Poke('word', $_MFHookPtr + 5, 0xE0FF)
    EndIf
    Return True
EndFunc   ;==>MemoryFuncInit

Func Peek($Type, $Ptr)
    If $Type = 'str' Then
        $Type = 'char[' & API_lstrlenA($Ptr) & ']'
    ElseIf $Type = 'wstr' Then
        $Type = 'wchar[' & API_lstrlenW($Ptr) & ']'
    EndIf
    Return DllStructGetData(DllStructCreate($Type, $Ptr), 1)
EndFunc   ;==>Peek

Func Poke($Type, $Ptr, $Value)
    If $Type = 'str' Then
        $Type = 'char[' & (StringLen($Value) + 1) & ']'
    ElseIf $Type = 'wstr' Then
        $Type = 'wchar[' & (StringLen($Value) + 1) & ']'
    EndIf
    DllStructSetData(DllStructCreate($Type, $Ptr), 1, $Value)
EndFunc   ;==>Poke
#EndRegion

 

Edited by UEZ
Added DPI stuff

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

7 hours ago, Zedna said:

I wonder if number of lines of code implementing About box finally will not be much bigger than whole main project (without About box) ...

In the end the about dialog needs its own about dialog! :muttley:

@UEZ Please keep posting your ideas. Even if I think they are too much for an about dialog, I'm sure you can use them for other things. 👍

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...