;Water DLL Demo
;v0.9.6 build 2026-07-10 (DPI aware)

#AutoIt3Wrapper_UseX64=y
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>
#include "Water.au3"

AutoItSetOption("GUIResizeMode", $GUI_DOCKALL)

Global Enum $DPI_AWARENESS_INVALID = -1, $DPI_AWARENESS_UNAWARE = 0, $DPI_AWARENESS_SYSTEM_AWARE = 1, $DPI_AWARENESS_PER_MONITOR_AWARE = 2
Global Const $DPI_AWARENESS_CONTEXT_UNAWARE = $DPI_AWARENESS_UNAWARE - 1
Global Const $DPI_AWARENESS_CONTEXT_SYSTEM_AWARE = $DPI_AWARENESS_UNAWARE - 2
Global Const $DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE = $DPI_AWARENESS_UNAWARE - 3
Global Const $DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 = $DPI_AWARENESS_UNAWARE - 4
Global Const $DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED = $DPI_AWARENESS_UNAWARE - 5
Global Enum $MDT_EFFECTIVE_DPI = 0, $MDT_ANGULAR_DPI, $MDT_RAW_DPI
Global Const $MDT_DEFAULT = $MDT_EFFECTIVE_DPI
Global Const $WM_DPICHANGED = 0x02E0
Global $g_iDpiSys = _WinAPI_SetDPIAwareness(3)
If @error Or Not $g_iDpiSys Then $g_iDpiSys = 96
Global $g_iDpi = $g_iDpiSys, $g_fScale = $g_iDpi / 96

Global Const $PANEL_W = 250          ;width of the control panel on the right (logical units, scaled via _S)
Global Const $MARGIN = 10            ;logical units, scaled via _S
Global $g_hGUI, $g_idPic, $g_hPic
Global $g_iSimW = 0, $g_iSimH = 0
Global $g_iPanelBottom = 0

;Remember panel controls so they can be repositioned after each load: [id][xoff, y, w]
Global $g_aCtrl[0][5], $g_iCtrlN = 0

;Load DLL (writes it from the embedded blob if missing)
Global $g_sDll
If @AutoItX64 Then
	$g_sDll = @ScriptDir & "\Water_x64.dll"
	If Not FileExists($g_sDll) Then _Water_x64dll(True)
Else
	$g_sDll = @ScriptDir & "\Water.dll"
	If Not FileExists($g_sDll) Then _Waterdll(True)
EndIf
If Not _Water_Startup($g_sDll) Then Exit MsgBox(16, "Error", "Cannot load DLL: " & $g_sDll)

_GDIPlus_Startup()

;--- Build GUI (panel is repositioned inside _LoadGDIpImage) ---------------------------------------------------------------------
Global $iStartW = 512, $iStartH = 460
$g_hGUI = GUICreate("Water DLL Demo by UEZ", $iStartW + _S($PANEL_W) + _S($MARGIN) * 3, $iStartH + _S($MARGIN) * 2)
GUISetBkColor(0x282828)
$g_idPic = GUICtrlCreatePic("", _S($MARGIN), _S($MARGIN), $iStartW, $iStartH)
$g_hPic = GUICtrlGetHandle($g_idPic)

Global $px = $iStartW + _S($MARGIN) * 2   ;preliminary panel-x (physical); overwritten later
Global $y = $MARGIN                       ;logical y cursor; controls are created at _S($y)

Global $idLoad = GUICtrlCreateButton("Load Image...", $px, _S($y), _S($PANEL_W), _S(28))
_RegCtrls($idLoad, 0, $y, $PANEL_W, 28)
$y += 38

Global $idDamping   = _PosCtrls("Damping (>=2)",         "200")
Global $idRefr      = _PosCtrls("Refraction (>=64)",     "1024")
Global $idLGain     = _PosCtrls("Light gain",            "1.0")
Global $idLMin      = _PosCtrls("Light clamp min",       "-16")
Global $idLMax      = _PosCtrls("Light clamp max",       "64")
Global $idTurb      = _PosCtrls("Turbulence (0..1000)",  "5")
Global $idDelay     = _PosCtrls("Frame delay ms",        "5")
Global $idRad       = _PosCtrls("Ripple radius (1..64)", "4")
Global $idDropMin   = _PosCtrls("AutoDrop min ms",       "1500")
Global $idDropMax   = _PosCtrls("AutoDrop max ms",       "7500")
Global $idDropPMin  = _PosCtrls("AutoDrop min power",    "32")
Global $idDropPMax  = _PosCtrls("AutoDrop max power",    "256")

$y += 4
Global $idChkMouse = GUICtrlCreateCheckbox(" Mouse interaction", $px, _S($y), _S($PANEL_W), _S(20))
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($idChkMouse), "wstr", 0, "wstr", 0)
GUICtrlSetState($idChkMouse, $GUI_CHECKED)
GUICtrlSetColor(-1, 0xFFFFFF)
_RegCtrls($idChkMouse, 0, $y, $PANEL_W, 20)
$y += 24

Global $idChkDrops = GUICtrlCreateCheckbox(" Auto-drops", $px, _S($y), _S($PANEL_W), _S(20))
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($idChkDrops), "wstr", 0, "wstr", 0)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetState($idChkMouse, $GUI_CHECKED)
GUICtrlSetState($idChkDrops, $GUI_CHECKED)
_RegCtrls($idChkDrops, 0, $y, $PANEL_W, 20)
$y += 24

Global $idChkEdge = GUICtrlCreateCheckbox(" Edge reflection", $px, _S($y), _S($PANEL_W), _S(20))
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($idChkEdge), "wstr", 0, "wstr", 0)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetState($idChkEdge, $GUI_UNCHECKED)
_RegCtrls($idChkEdge, 0, $y, $PANEL_W, 20)
$y += 30

Global $g_idHelp = GUICtrlCreateLabel("Left-click on the image to create ripples." & @CRLF & "Inputs are sent on Enter or when you leave the field.", $px, _S($y), _S($PANEL_W), _S(44))
GUICtrlSetColor(-1, 0xFFFFFF)
_RegCtrls($g_idHelp, 0, $y, $PANEL_W, 44)
$g_iPanelBottom = $y + 44

GUIRegisterMsg($WM_COMMAND, "_WM_COMMAND")
GUIRegisterMsg($WM_DPICHANGED, "_WM_DPICHANGED")

Global $g_hImage = _GDIPlus_BitmapCreateFromMemory(_Logo())
_LoadGDIpImage($g_hImage)   ;load an image from attached bitmap
_GDIPlus_BitmapDispose($g_hImage)

_Water_SetAutoDrops(BitAND(GUICtrlRead($idChkDrops), $GUI_CHECKED) = $GUI_CHECKED)
_Water_SetEdgeReflection(BitAND(GUICtrlRead($idChkEdge), $GUI_CHECKED) = $GUI_CHECKED)
GUISetState(@SW_SHOW)

;--- Main loop (stays free, effect renders in the DLL thread) ------------------------------------------------------------------
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $idLoad
			_LoadGDIpImage()
		Case $idChkMouse
			_Water_SetMouse(BitAND(GUICtrlRead($idChkMouse), $GUI_CHECKED) = $GUI_CHECKED)
		Case $idChkDrops
			_Water_SetAutoDrops(BitAND(GUICtrlRead($idChkDrops), $GUI_CHECKED) = $GUI_CHECKED)
		Case $idChkEdge
			_Water_SetEdgeReflection(BitAND(GUICtrlRead($idChkEdge), $GUI_CHECKED) = $GUI_CHECKED)
	EndSwitch
	Sleep(10)
WEnd

_Water_Shutdown()
_GDIPlus_Shutdown()
GUIDelete()

;===============================================================================================================================
; Label (width 150) + Input (remaining width); both are registered for repositioning
;===============================================================================================================================
Func _PosCtrls($sLabel, $sDefault)
	Local Const $iLblW = 110
	Local $idL = GUICtrlCreateLabel($sLabel, $px, _S($y + 3), _S($iLblW), _S(18))
	GUICtrlSetColor(-1, 0xFFFFFF)
	Local $idI = GUICtrlCreateInput($sDefault, $px + _S(150), _S($y), _S($PANEL_W - 150), _S(22), $ES_AUTOHSCROLL)
	_RegCtrls($idL, 0, $y + 3, $iLblW, 18)
	_RegCtrls($idI, 150, $y, $PANEL_W - 150, 22)
	$y += 28
	Return $idI
EndFunc   ;==>_PosCtrls

;===============================================================================================================================
; Remember a control for later repositioning
;===============================================================================================================================
Func _RegCtrls($id, $iXOff, $iY, $iW, $iH)
	ReDim $g_aCtrl[$g_iCtrlN + 1][5]
	$g_aCtrl[$g_iCtrlN][0] = $id
	$g_aCtrl[$g_iCtrlN][1] = $iXOff
	$g_aCtrl[$g_iCtrlN][2] = $iY
	$g_aCtrl[$g_iCtrlN][3] = $iW
	$g_aCtrl[$g_iCtrlN][4] = $iH
	$g_iCtrlN += 1
EndFunc   ;==>_RegCtrls

;===============================================================================================================================
; Move the panel to sit right next to the image (base x = image width + margins)
;===============================================================================================================================
Func _LayoutPanel($iPanelX)
	;registry holds logical (96 dpi) values -> scale here; $iPanelX is physical (image width + scaled margins)
	Static $bFontTouched = False
	Local $bScaleFont = ($g_iDpi <> $g_iDpiSys) Or $bFontTouched
	For $i = 0 To $g_iCtrlN - 1
		GUICtrlSetPos($g_aCtrl[$i][0], $iPanelX + _S($g_aCtrl[$i][1]), _S($g_aCtrl[$i][2]), _S($g_aCtrl[$i][3]), _S($g_aCtrl[$i][4]))
		If $bScaleFont Then GUICtrlSetFont($g_aCtrl[$i][0], 8.5 * $g_iDpi / $g_iDpiSys)
	Next
	If $bScaleFont Then $bFontTouched = True
EndFunc   ;==>_LayoutPanel

;===============================================================================================================================
; Load an image, cap to max. 0.8 * desktop, resize GUI/Pic/panel, (re)start the effect
;===============================================================================================================================
Func _LoadGDIpImage($hImage = 0)
	If Not $hImage Then
		Local $sFile = FileOpenDialog("Load background image", @ScriptDir, "Images (*.bmp;*.png;*.jpg;*.jpeg;*.gif)", 3)
		If @error Then Return
		$hImage = _GDIPlus_ImageLoadFromFile($sFile)
		If @error Or Not $hImage Then Return MsgBox(16, "Error", "Cannot load image.")
	EndIf

	Local $iW = _GDIPlus_ImageGetWidth($hImage)
	Local $iH = _GDIPlus_ImageGetHeight($hImage)
	If $iW = 0 Or $iH = 0 Then Return MsgBox(16, "Error", "Cannot decode image.")
	
	;scale to max. 0.8 * desktop (keep aspect ratio)
	Local $iMaxW = Int(@DesktopWidth * 0.8)
	Local $iMaxH = Int(@DesktopHeight * 0.8)
	Local $fScale = 1.0
	If $iW > $iMaxW Then $fScale = $iMaxW / $iW
	If $iH * $fScale > $iMaxH Then $fScale = $iMaxH / $iH
	Local $iNewW = Int($iW * $fScale)
	Local $iNewH = Int($iH * $fScale)

	;create HBITMAP in target size
	Local $hHBmp
	If $fScale < 1.0 Then
		Local $hScaled = _GDIPlus_ImageResize($hImage, $iNewW, $iNewH)
		$hHBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hScaled)
		_GDIPlus_ImageDispose($hScaled)
	Else
		$hHBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
	EndIf
	_GDIPlus_ImageDispose($hImage)

	;stop the running effect and adjust the layout
	_Water_Stop()
	$g_iSimW = $iNewW
	$g_iSimH = $iNewH

	Local $iWinW = $iNewW + _S($PANEL_W) + _S($MARGIN) * 3
	Local $iWinH = (($iNewH > _S($g_iPanelBottom)) ? $iNewH : _S($g_iPanelBottom)) + _S($MARGIN) * 2
	;use the real window chrome size instead of a hardcoded title bar height
	Local $aP = WinGetPos($g_hGUI), $aC = WinGetClientSize($g_hGUI)
	Local $iChromeW = $aP[2] - $aC[0], $iChromeH = $aP[3] - $aC[1]
	WinMove($g_hGUI, "", (@DesktopWidth - ($iWinW + $iChromeW)) / 2, (@DesktopHeight - ($iWinH + $iChromeH)) / 2, $iWinW + $iChromeW, $iWinH + $iChromeH)
	GUICtrlSetPos($g_idPic, _S($MARGIN), _S($MARGIN), $iNewW, $iNewH)
	Local $iPanelX = $iNewW + _S($MARGIN) * 2
	_LayoutPanel($iPanelX)

	;start the effect with the HBITMAP, then free the handle
	Local $iRet = _Water_StartHBmp($g_hPic, $iNewW, $iNewH, $hHBmp)
	_WinAPI_DeleteObject($hHBmp)
	If $iRet <> 1 Then Return MsgBox(16, "Error", "Water_StartHBmp failed: " & $iRet)

	_ApplyAll()   ;apply current panel values once
EndFunc   ;==>_LoadGDIpImage

;===============================================================================================================================
; Send all input-field parameters to the DLL
;===============================================================================================================================
Func _ApplyAll()
	_Water_SetEdgeReflection(BitAND(GUICtrlRead($idChkEdge), $GUI_CHECKED) = $GUI_CHECKED)
	_Water_SetDamping(Number(GUICtrlRead($idDamping)))
	_Water_SetRefraction(Number(GUICtrlRead($idRefr)))
	_Water_SetLight(Number(GUICtrlRead($idLGain)), Int(GUICtrlRead($idLMin)), Int(GUICtrlRead($idLMax)))
	_Water_SetTurbulence(Int(GUICtrlRead($idTurb)))
	_Water_SetFrameDelay(Int(GUICtrlRead($idDelay)))
	_Water_SetRippleRadius(Int(GUICtrlRead($idRad)))
	_Water_SetAutoDropParams(Int(GUICtrlRead($idDropMin)), Int(GUICtrlRead($idDropMax)), Number(GUICtrlRead($idDropPMin)), Number(GUICtrlRead($idDropPMax)))
EndFunc   ;==>_ApplyAll

;===============================================================================================================================
; WM_COMMAND: on EN_KILLFOCUS of an input (input end), send the matching parameter
;===============================================================================================================================
Func _WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
	Local $iCode = BitShift(BitAND($wParam, 0xFFFF0000), 16)   ;HIWORD = notification
	If $iCode = $EN_KILLFOCUS Then
		Local $idCtrl = BitAND($wParam, 0xFFFF)                ;LOWORD = control ID
		Switch $idCtrl
			Case $idDamping
				_Water_SetDamping(Number(GUICtrlRead($idDamping)))
			Case $idRefr
				_Water_SetRefraction(Number(GUICtrlRead($idRefr)))
			Case $idLGain, $idLMin, $idLMax
				_Water_SetLight(Number(GUICtrlRead($idLGain)), Int(GUICtrlRead($idLMin)), Int(GUICtrlRead($idLMax)))
			Case $idTurb
				_Water_SetTurbulence(Int(GUICtrlRead($idTurb)))
			Case $idDelay
				_Water_SetFrameDelay(Int(GUICtrlRead($idDelay)))
			Case $idRad
				_Water_SetRippleRadius(Int(GUICtrlRead($idRad)))
			Case $idDropMin, $idDropMax, $idDropPMin, $idDropPMax
				_Water_SetAutoDropParams(Int(GUICtrlRead($idDropMin)), Int(GUICtrlRead($idDropMax)), Number(GUICtrlRead($idDropPMin)), Number(GUICtrlRead($idDropPMax)))
		EndSwitch
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_COMMAND

;===============================================================================================================================
; WM_DPICHANGED: window was moved to a monitor with a different DPI -> rescale panel + fonts, keep sim at native pixel size
;===============================================================================================================================
Func _WM_DPICHANGED($hWnd, $iMsg, $wParam, $lParam)
	If $hWnd <> $g_hGUI Then Return $GUI_RUNDEFMSG
	$g_iDpi = BitAND($wParam, 0xFFFF)
	$g_fScale = $g_iDpi / 96
	Local $tRect = DllStructCreate("long left;long top;long right;long bottom", $lParam)   ;suggested position
	Local $iWinW = $g_iSimW + _S($PANEL_W) + _S($MARGIN) * 3
	Local $iWinH = (($g_iSimH > _S($g_iPanelBottom)) ? $g_iSimH : _S($g_iPanelBottom)) + _S($MARGIN) * 2
	Local $aP = WinGetPos($g_hGUI), $aC = WinGetClientSize($g_hGUI)
	WinMove($g_hGUI, "", DllStructGetData($tRect, "left"), DllStructGetData($tRect, "top"), $iWinW + ($aP[2] - $aC[0]), $iWinH + ($aP[3] - $aC[1]))
	GUICtrlSetPos($g_idPic, _S($MARGIN), _S($MARGIN), $g_iSimW, $g_iSimH)
	_LayoutPanel($g_iSimW + _S($MARGIN) * 2)
	Return 0
EndFunc   ;==>_WM_DPICHANGED

Func _S($v)   ;scale a logical (96 dpi) value to physical pixels
	Return Int($v * $g_fScale + 0.5)
EndFunc   ;==>_S

;--- Inlined DPI helpers (extracted from _WinAPI_DPI.au3 by UEZ) ---------------------------------------------------------------
Func _WinAPI_SetDPIAwareness($iAwarenessLevel = $DPI_AWARENESS_PER_MONITOR_AWARE, $iMode = 1)
	If @OSBuild < 6000 Then Return SetError(100, 0, 0)
	$iAwarenessLevel = ($iAwarenessLevel < 0) ? (-$iAwarenessLevel - 1) : ($iAwarenessLevel > 4) ? 4 : $iAwarenessLevel
	Switch @OSBuild
		Case 6000 To 9199
			Local $aResult = DllCall("user32.dll", "bool", "SetProcessDPIAware")
			If Not IsArray($aResult) Or Not $aResult[0] Then Return SetError(1, 0, 0)
		Case 9200 To 13999
			Local $iLegacyLevel = ($iAwarenessLevel > 2) ? 2 : $iAwarenessLevel
			If __WinAPI_SetProcessDpiAwareness($iLegacyLevel) = 0 Then Return SetError(2, @error, 0)
		Case Else
			Local $aContextMap[5] = [$DPI_AWARENESS_CONTEXT_UNAWARE, $DPI_AWARENESS_CONTEXT_SYSTEM_AWARE, _
									 $DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE, $DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2, _
									 $DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED]
			If $iAwarenessLevel = 3 And @OSBuild < 15063 Then $iAwarenessLevel = 2
			If $iAwarenessLevel = 4 And @OSBuild < 17134 Then $iAwarenessLevel = 2
			Local $iDpiContext = $aContextMap[$iAwarenessLevel]
			$iMode = ($iMode < 1) ? 1 : ($iMode > 2) ? 2 : $iMode
			Local $iResult2
			Switch $iMode
				Case 1
					$iResult2 = __WinAPI_SetProcessDpiAwarenessContext($iDpiContext)
					If Not $iResult2 Or @error Then Return SetError(3, @error, 0)
				Case 2
					$iResult2 = __WinAPI_SetThreadDpiAwarenessContext($iDpiContext)
					If Not $iResult2 Or @error Then Return SetError(4, @error, 0)
			EndSwitch
	EndSwitch
	Local $iDPI
	If @OSBuild < 9200 Then
		$iDPI = __WinAPI_GetDPI()
		If @error Or Not $iDPI Then Return SetError(5, 0, 0)
	Else
		$iDPI = __WinAPI_GetDpiForMonitor()
		If @error Or Not $iDPI Then Return SetError(6, 0, 0)
	EndIf
	Return $iDPI
EndFunc   ;==>_WinAPI_SetDPIAwareness

Func __WinAPI_SetProcessDpiAwareness($PROCESS_DPI_AWARENESS = $DPI_AWARENESS_PER_MONITOR_AWARE)
	Local $aResult = DllCall("Shcore.dll", "long", "SetProcessDpiAwareness", "int", $PROCESS_DPI_AWARENESS)
	If Not IsArray($aResult) Or @error Then Return SetError(1, @extended, 0)
	If $aResult[0] Then Return SetError(2, $aResult[0], 0)
	Return 1
EndFunc   ;==>__WinAPI_SetProcessDpiAwareness

Func __WinAPI_SetProcessDpiAwarenessContext($DPI_AWARENESS_CONTEXT_value)
	Local $aResult = DllCall("user32.dll", "bool", "SetProcessDpiAwarenessContext", @AutoItX64 ? "int64" : "int", $DPI_AWARENESS_CONTEXT_value)
	If Not IsArray($aResult) Or @error Then Return SetError(1, @extended, 0)
	If Not $aResult[0] Then Return SetError(2, @extended, 0)
	Return $aResult[0]
EndFunc   ;==>__WinAPI_SetProcessDpiAwarenessContext

Func __WinAPI_SetThreadDpiAwarenessContext($DPI_AWARENESS_CONTEXT_value)
	Local $aResult = DllCall("user32.dll", (@AutoItX64 ? "int64" : "int"), "SetThreadDpiAwarenessContext", @AutoItX64 ? "int64" : "int", $DPI_AWARENESS_CONTEXT_value)
	If Not IsArray($aResult) Or @error Then Return SetError(1, @extended, 0)
	If Not $aResult[0] Then Return SetError(2, @extended, 0)
	Return $aResult[0]
EndFunc   ;==>__WinAPI_SetThreadDpiAwarenessContext

Func __WinAPI_GetDPI($hWnd = 0)
	$hWnd = (Not $hWnd ? _WinAPI_GetDesktopWindow() : $hWnd)
	Local Const $hDC = _WinAPI_GetDC($hWnd)
	If @error Then Return SetError(1, 0, 0)
	Local Const $LOGPIXELSX = 88
	Local Const $iDPI = DllCall("gdi32.dll", "int", "GetDeviceCaps", "handle", $hDC, "int", $LOGPIXELSX)
	_WinAPI_ReleaseDC($hWnd, $hDC)
	If Not IsArray($iDPI) Or Not $iDPI[0] Then Return SetError(2, 0, 0)
	Return $iDPI[0]
EndFunc   ;==>__WinAPI_GetDPI

Func __WinAPI_GetDpiForMonitor($hMonitor = 0, $dpiType = $MDT_DEFAULT)
	If $hMonitor = 0 Then
		Local $aMonitors = _WinAPI_EnumDisplayMonitors()
		If @error Or Not IsArray($aMonitors) Then Return SetError(1, 0, 0)
		For $i = 1 To $aMonitors[0][0]
			If _WinAPI_GetMonitorInfo($aMonitors[$i][0])[2] = 1 Then
				$hMonitor = $aMonitors[$i][0]
				ExitLoop
			EndIf
		Next
	EndIf
	Local $tx = DllStructCreate("uint dpiX"), $tY = DllStructCreate("uint dpiY")
	Local $aResult = DllCall("Shcore.dll", "long", "GetDpiForMonitor", "handle", $hMonitor, "long", $dpiType, "struct*", $tx, "struct*", $tY)
	If @error Or Not IsArray($aResult) Then Return SetError(2, 0, 0)
	If $aResult[0] <> 0 Then Return SetError(3, $aResult[0], 0)
	Return $tx.dpiX
EndFunc   ;==>__WinAPI_GetDpiForMonitor
;--- End inlined DPI helpers ---------------------------------------------------------------------------------------------------

;Code below was generated by: 'File to Base64 String' Code Generator v1.30 Build 2026-07-08

Func _Logo($bSaveBinary = False, $sSavePath = @ScriptDir)
	Local $Logo
	$Logo &= 'h1QAAApR5cAYAOwFh1QAAAAAAACHVAAAAAAAAABPAABeB0XkEpZylQTpqCGJhA2r6ARP5uWIdAwVQ8WYa0K3HiG2ICt2WuLlWXFqa5Tyyd4CkBr3pCn8tfeitNaWM6gjSvdRhjiymlGXmwe/ZDgGjU8tgk+VX8OGXpZqR6wpGU6KhIAWNVDNffhBY7pka7TkBXoSdNAPEZtSUOluuYfDPuzsCZ1JsEhcKzsZ3NMYJRtAh5R+2yHFbojRSsqA4SyjIGOiJsSJq22jObm6orvIkh/1avMGXLLdlJHb/WVuAQkgxI1mQSai6BrO+9RQG39mE9xiu+GbyX5H64ShMSNRfJCV05EjKoMXghRRCAPOx4lUClQk5UpzyF3qI6cLZ9/NjGGyN7IC/UfCT60pVsWPQ5dMzff5XCLchMvIJwwqHMwK8Lj0qagZo9Is9bNOmffyl8tHPD19NLPKt66dbhs8UYzwGpcRupAUxoXnQNp3xPkibvSj7dA7IRDlyXLeW8rBkuKPuGQFhv57lxYteJOZIsMGFAT+84k1d+ZDO9wENDuim0mDoZ7gBx3PWpTBsGFo4FmUT5dJUXmh43ebHGcGkd1vFs7j1FyvZYbIMReq1YdqYrUkaex5+cADB0LPLy9L1wAZaSzxSmUXVndRiGKEl+5UAAAAAACYyXWaY/8uMSFq1pi19zwnWef+mb3SDdpZJd6j5IUmFUYFvDEwPNI/Oj9zpZV/ubP7ONl3Hr5xBtZo+E7gSKN1Pp6pnUtzyxr1G8YgUYwwtQiPcxD+vQKgVlQiV2wycJeU2Iz+KCPu2RHewZDkB6BsxmrEqnPrPUtdxqWh9ZzwGnwaxjvacb7XdF/zAuxcTHvS8mvHB+jVjZ/8PWWtvELZkYa3TX9oNEYOhp4iBQQ1SwQ6CFrfhk5x9Ew8QMUufi3TJe0rXTqLjykp76ByHhXT5ACb6Dsr0TflFT4yNgEC4o5i22RKPvglsfFq4Ms17xqfOOlkoT/o'
	$Logo &= 'Qwg6q1Km03N+I3oSczLBb2myTvMRtvgJvetj6o52Iz89+1QPhudGRgUctmfrjbRvgXH9m3bZfba/5WZmFrK9UTKOU1guMBwiVcJaq9Qqd9Dccji/698mZFSeh+NL3HewmEYMfXRQY5SouXFDGO20SekU29gnU0k8I6B4LqlSXAUhk6rx0MbgU29aSx2oy5y+x+uX41bk0AmWcPEjr8j1NLUus+t5x/77+PA5lmhC3Aha5haVwqqtlSKOU+mUWkiSKLYsqqebvK5exWZCks4/VVVyzNFR6na7AMorySjRCvewSPvoYBNiz29pZ6roc2ZaracPzAwpdhdFtN6QddaNyPX9E8QyWFK5CKnBoZxb8HGckvYNRcQc5dr5DZgmtnG2z8I/2LVTHRHDBcbFJwZRSZ2IUu6Je/7FrhRde+1lVKJK7kXj86DeKU3YkRPzJuTQPgd7H0ppPCH4MNIJfaups2tgLjkYBUwMzxKy2POQelpCko7w9wLLhyDxfBIFYjMybtoU9esYagP1W/wGeGIeX55Sn3wwlGeQXBOpU1pdh+WSpPaw81jQNK1jKBpfvZMnGmpaRfjS8vuILCdvWB7CqBbtRkLMCPpEchkqOU6AYOkmknZG6eXC1vxYSeATU18j/EpicemRlzNysmM6woS5p+fUwFmv06G8e50WwR2WdHyLMcVMvbCS/qJDJTY/g8KX9L3pefDzDJGXtante/jd0nn02KHHKc9Kqlw34jwYezjpU7EIp3ijoXrcz06Wxx8j6838s/XeT7xze+Txkt6Tr7NI3THq0PPZkbvXM0/RHtSyZrz8WdP4vshR0vH2eWC5Ulj8K1eNzcmLSQs9b/jxee3tzjhVXT6ep6M9ZzHp8tIX0XmhD0T+9f0ib7y5xtB8oV355jx+z+aBymQ9quCCbzlrggBMqFvnsYuvcN6k1nm1PHhIYcIze2JugUM37fpOpLVNVXT43+TjmZf6556HqYXpofsJD6c8Q2AiJdL0'
	$Logo &= 'KlNq4eujr887vrV4xex1YlkBu6FnvfwUPnX52+VuzOdpjzRXEVJ6nN+rkF2Bgb1Uv2T9Jgs1YbkRdJKxeOyeUtu2zv2Xv/2rmJFvfl0icRB718/CKLPL9wvT90GhlJPPtz882Un6n5scN7ecu4v/6RGRb1b4ISmnhmT7zbL6PEdWHXP9/cLTV1C2/y5yi2xnD4oQLyTuQXFNxD/88qDGI3h76Ef1Dxmp3+4/NHRN+sOZ4q7dVSHRz4g/L3ZM5/Pbll2J6++6hyfyxS6q3FvyVRCWRf1Sxzh23ig00nZU+rAHzSwsRB9BoG9mqa0zjdcx8jvPCzS6JUwfPrOOlL84zNcg7eQnXwWQml174XJ2uoX1pO5rjxhRwbRzD/i8+gVRRj397C3iffahO1pn2jQXmEedMNfyTGJ5kOwkU3Osd4kMRLOrnYq+mQ2ya2+1/jhTkQ+jNkQ4lcl8dVh5qf0HvZo1diwcfk04O9xz+2f84ePRIeigtwVIHyZZ2GqawuHHf7k3B5b/YYaH9srsSw4wCExmomPrxGpru0RvnJS2SO0DO6Pybb8KSXnU7RPnbJB7nEl37iNRM+OEzgFcwn+LplmBlP4afMXdERN6xYqv2R1YjTuY9rP1aJLlgiuxYM5tJsg2fBT7lOtAcg0R3pfeT22YLS/eXrTqYe6+1c3vmCzRkfioR3gVnaMe4TklqWXafxqEO+Jt6B9xq8r83a+PFhJ/CL7+IjtgE60on0k42MJkmG/pmK5+hm3NNrveZfXs3uHgtFHqGV6+v1vukx1ZeIHEif9oLgTOrtRCF6KhJQ/K7wYPL5fS1T6vuYWd3n+2otskXurwvZLVV+3c3m0c/2rCs977TYPcqzmHd0na+OZQ5P8uXPGazEMlSMrJamG2GsfzuQithhbG2bngXub2iJU+l7il0khvpvCbfawkg+XnR5hGoUj3f2/10HV98m0R15PidRXrnkkTPVOPwCz52ookyFA/cAvxDySsuY/7'
	$Logo &= 'LQ8vu6EiMVlCsp1sUOfQ7ccWF/8QL/EYaX80x/DPgeG6eohNhsXTY7+xu9r2NjNvqVJwRYuIeKTiMduOoNbXV4Gtqaep+1/+uOwzBIWBfZ8cCIy+o+RronKGJqgyS7M2aVIkYtNKFPeatr1QWPFaLKDw+3GO9uRR1YOa9427Ly2IoJe8dl3PGxPyFFKwtwfHoTmLxqL2hgUiIYSTB7v13QgviLMpVGR/2+MU1jjye7BvTaOeUbTzU2RBcH6kQ75KpBRVY0POwCb8kqa7W5W65ivkw75S33BOxqVhfpvy6t3MSjpXbFUVPjOE/QP2Uy0ohIL1TNwxVL7/kuXhP9fMWyrbxvcf+369M7o6QTn1to2dWg79hUz1h7U/jA6kBg1maAPA0JhKXOarB2C3vcUxTusyf4B5KRokIo8WK7tR0+JSirPSJGycvLXkf5vfm/6nQu9pB0qEByPHsQFYN4sQ2W8Rmy95Yef9oUW6hpOq3YjFRpXf700TwiTX5FtUyzKP9tQ8jd7D9p1Yb8XaT2xua4POkV1DjSOGTYvXUtLaDkBllFutBIu8gcfs85tBsNO7b6/n6rMCJJuLdi/lFh0p11155y7Zc1MG72Wz8ltx8ZOiz7cuRRHjMnqv2TXyjG7m94l+rzQtEfHVjrdGnObe9rJwpF7kpFmo/0CGtv2m2Fu5BtDZWmLVqolLnfW4MXaJKyS3azRvog73usy4PEYpSJrsoP+EC70tJDbSiQRNydfMDfONcpVMA00Rs6EJ/c9FrkkidAOpCqWbau4FkXggQ/p9BCDm8vGyTdxP9kC8vA9nTY1YxIG1k4dplJETC8mt55sHtsrI2R+Zg05GlwYb4qcEhq9xj5jYsEwXXSa+LdCwpNUoM1G/zIQw8UdvzTneR/M02sc5zdhaQmGVBDklYCTf9eAj+vEj1p+4Ks70VYiKtP3h7Ia9zK44pvl3Z+W0w9h51786wuikfDbW8VX0nqr07EFcYh33phAigwg6'
	$Logo &= 'zpS7PYK+1fYxI0SoNyoFcf+SYg0Nqi7SMryBmCy5eb+O7yJdrwoumATUg5S9SHFWOnRVR5dnwqrqhl4Yu60ssV+53C0eedcWyZDRWte+PAvZO2WU0eibeHjhqh/6TXumN9NHm/kr0jHfQ33Edxrn0RrUdNXsDxu4/2ERa5zvtG3B1e6XWn9vAIKPL3ZlyHuonuarC49v2ZdoRCD26Huwe4NR/7IJYPt+E1CssF6CSrYhWukV6UMb/oujmeT4L57ZuN2k59NBEMwZoWZsdjYb/pt95ZLayBboGOJmhC8291hcuK0J0mflNvyl/7YqobFCscNHfzb8q3+hbUfHhe6iooHpmhGbiYVDLselOU1I8gI4U1832HA34npEyjNzlgv9TVYFJ/PYeDkY726kBkbd2SXQEeTL5Y235Eyc0Dd0Y4bBw8Mesyi3nuGP9XgsKYKdd00UGwDeYb933nc8yNg4zD949AGo76JxcUdPag5g/YQw+1Jed0Vber3spa0/vOMiP6e9wUK0e/tvZk19g9/Et7u6YtaXEL5e8eaHEQLu1yeJs6oitFhBcMD5stmbUwXP6mlV2qrST0eg9ltFrRj9N4uO2PyWu/XGTxYDicUqge5EDc9XIrdIvMybk9f/X3GZhrAj7+Q44QfrvDme2ng9Ya6crOv/Vwf+0jxfxFnFi2vfRpvH1Fqpfnt9WXP/cUqO6QoqN8fh5YYpHdttM8xbL5XdjTy/teYVPsfVhIaLlGIfeHWoicRAcJpcuOEM83eoaYylxuMt2UIvEFcR6uIdzFuSIQXKuM0t+vLrL+wc1/xXSIkcLSFzREOi7TZK+xcrDH9wetMvs6qsop2DO7Hyf2lQJdMIU6clx5Ymto87d4OTcnuFZisrKiEJy6KTaYW0xD7UwtaFbhtH8V8ZIekR2jOOKULkt3/XcOH1vE0Y9OLNr+etaCPO0VjSD081rN+fOFtv0xSTqtfO6XZNtJogcaxMwGUUw7gPtbfZjVS4'
	$Logo &= '3RwEc47/NO4F4Ljs3l9Zs1jZLm3z2Vm/soFzhOFf52eK73UDdtcWP+GzbpQhHhzYHJYesdWON3GUpIOON4n7aeZ2zx30CX4YCGoQv+4vWyydfOmw8Pqp9aB9S1gjAWRee+FiWvbEmFV30mntGOvHXUq54FSAzsTFn3/jH7CmxhulHRV08zSUSGLec8ZHfw3uuOL/8+xIEnHREPfDFcR0ORiH13pvv/x4UrlXrKc0REkgNWFjM8x3dqbP+xqP9KbJYijN4/JMyHHhhxal+RpVYFX+9/Vu/dkMxRALYM8WmaLV397Af9qC8p6Qim2uYzHVLyf/Ww+DOe1NV4MFz7l+zwXbVmJPtSV5mkfreQzDliody4GFQ7O/7EQFW6wy/y1Cagy76Xu5x1btXz5VuVIHqVep1lt+ZR83ZMjeXaS1nq8rRr3tZQwUoO4qsJuv5NVWHw0riQDu5M5cymWNev6X9JIzNcgDtaazZvsUO61FTl46H+mZmdOvuJydWz6MinPw/BhG3v58TJuSfbJ2uIJX38yOh0J1w04GNxOl23ceqdc47Sd+0/5ARXetbG6KmTul0IysbVapnvCxcFTcOcH1A13/7DWeVhzuzjpBwLSziZXI7C5zeS2h293b8N+kFEEty9CkGo+9G6hg5HA7sPzDu0FPeqEV7rWgra8QgYM8pc238R4549Y6bhA6DsnwOiyC5ys7+YtkqH6/9Dj5vh6flfBzue5pVi+xX2Nce6WXQf+m+hTz3EdyKqD67r9Waq7Oli/RD48GWEucc44iBdjTUsahSfAvFSUv+SPzWLI3w2lmzx0YdXiligXX4SB52eP1zDed0nhD1+36OZLISZvSps/YrxlCZi6jyxp0kb64uWdavqYXaIK7AkuHh42NxgKvTEMaLp/Tw1hTYj2T1sw6FC+5wsru3yxeRJjmuIMVgk0VrAaXqx4VRL95MkWhtnTtsz57oSL8M48j5VnMPnU+YCXt+yT6LsCNoFZctrkl'
	$Logo &= 'RzXMZHH150F+r/BvdO7+sxMc7820r5Es+iORo786Tch4NsjGtjV7aH3z+Ed84Viek4Q8ld3SHEXtLjZl7f6s/OYqlASmSaephsSHZzlV50sBYqUnz8OLTe8V3w+0X3tFnl7cELDWyk2OyCNez2CvekB9grxVVXPLfl7/kCji3GiDJLbvJomgoookCkLKo9eep1I3fu/1nLqL4JGO/nYrvnbsqe49jrEIRYdGTj1WbJfkOHBrzBbvYhyeJrVSL/cINg8tlnoXd0k2SlA/1u388xD3e27VjHUEjT1wAaJ+NEo37W5OyzlQ61nQPLdNSiIg79RZcc5u/weTxHwcKymvzG+5BtpJTsJXwF7n+79ke3YzfTIBQ0yhFuqrs4smXWgL7ps88MvPzAt1ObNuuvz3sXJ0cFWAtJzc/0O8ba7rl0fevrFe7M7uaKbRaIViJGKb7WqicYtmxq50DKIn3nUcVTXVyqmkvhHVSvvrsC1UYhSyl6yjM9D6cDU31iEM7BAXU/Kl+WLg/RWgN6roOPG+faXmH7F7kGOV3/vTS5FquHOAY4p0/LeeBCnW8f798Hr0aoXITYFQS/L8zQkFTbrTsMM2MP80Lf3PQsjQrSBl+R+5wLq+1nNeJf6uIfzBz7C2sTyTn7bWzRZYWNkI+NuiasmWG5krW8kKKMZnNr66CkMJYpE/u+e3ScTDVJeyp+oZercesI5EqtDU4j/DH19bnH2NGe+M8/sKoQt2779ytuPfOZOs14Cf21S2jWsNlr5AVC+HDdv9ZucFkQlvkM6lvePCnlOQLyUnjyXFQ0iaAe6pRZuGR/ahrbgGHg30vDdGODEdkN0xoxiTnH1rZX/aAjRDqIiItZiY0DuX5MW33Tr6e2pkHfRq8DhPhPnhflxFOHvbWsRzs1bwyYUI9KzV6ftDbz7HpVZUxOrtzr/Tjt+DP1wrd6l3RXppVBlmbz+EzzM00v9pkUJfPHakrFamXlUNr9OfCFMWHJ39tWsw'
	$Logo &= '6dzKMLAg+lSZGt3+aMYrXsY8qk2OBSNN/UPMt2NGfh6lMp3Fz8jZnUQe7a+yet9dfD+AkhpB51s1DS1IHrt/ANftGI0UKhbi+G8y+XxuiV7W1EDhvNN+8xYTprWwYGA5hMh5Sb6IGPxaYZZbgmk6yuJi1P7JL8zd8DMOYCOrQaxMdaizjb+t2vjd4x83rLb1iQnjI+MagWmpKkjIt5f5/t07pM2kFZDC/tZrVVsNW6tiBpp2JZppt+6jZun6hF76zdI2hNfX5oodTuKnXAoVJv81xI4/A6Mfcyo2b9jPNMYELGp/h4tYfwmhyeBFzjs7ngcUHI1nDU+UWRU0XDd9HPnLWTpJ/AD9eS6VrtmZDMpIzmUx9/h9jt+zuiLneHoVLoLLJi7UT7v9DlbIu+HMwoFrw5kzYCC3y7nn6nH/rMOJp/1Hv2S4jtUtBM9j1+adzL+rdiWmtgdNXpgNTnQsccJKeWfdpydSTgzyKUJMb/vno+YkO+RCph4EHhsTrbI8Y//K+UXzb8chdlFsugglfKXlEb4EjbK31UMSy5BEclmoHDC2y8fyP48HeR85jUXZ3VV6bX5fLRdULoSrOgUdxBzZijOq2NcS9g9e8tvDjo0/wZGevTGnVQW4RoqYVrEdEFXtpzUeGY0XQqAkn7+60x/arbaqP7kFk7PM4jLbYLHErEFKPtEjRdbhrGcFiX428uj3zFyt3abCSbzA3zF7Bf4nx24Y7J9+wH7rTfPonzzVHhMVb9sejvxtfr18sQNJVc5LUTePduPRb23/dzSeFaRD7XtU+LisSzv2pdyOnEqBUQ+eekX6iI3MvWmxqx1ciSs+FB17/Hhp1M20v+pvhkaT5tZlsRWcBqUXtsK30lO4P282OgVeioa/BMX8LIZiJUdyiukbw/4q6gpuehJnHR5zPb2qZylekFEkuM4C/wwovYe2ntEen8OJPs62OlrVsqfQjGo5KQ3Yt43xPtYByu/1CMytUbR241PqDecn'
	$Logo &= 'L5heE+fMxM4Fm3WFo200CLKKvwX7Jb74F2yWZ2s+lVMN/8iRZONJrIHOj73vUpZUCFo96ITxYIVdPY+FoGYL2kTl3IPZGWzC7EzzYzGXu3um1vKMwlnzf0LWn9PdMlectytXR46OZoOQ3zSksWqc1RRBn45xD/ExFY1xBaX/Dbcrux9zzgczXE2FznW2eBv3qQgAhKNeVc+eCmvTi/NG3t3Ukox3k0UZOGsqygL5+aO6G3/Uw6mu1iTeO9f4pyfeVx5C1PFqv3O7+1275ddL71AL+mF7nhyEZ30oPqZ4p3Apmk8iDN7pvgnmynFSfldNrmnVdZblWen8puy8gb+GNoZ9kI89Q+KNFCWn9jen8V1mVfWLXz0+b1n8c80VPxboz6NfGyI/jNP8yGO+65iYknrmUlYjGdDCkNNE0UNwhltfNTOZT/FyMsN5yN3TIhGcdRXZG1jpL8qL9xbLm2Nt6sbk4Rcjlwut/u5W/31d2N7ehPbenrw2uNFa/4fB+Mn8GIHRfJCpN4FMuT1l7gRoVXxgvHFvbMR0VHeKu6RfStOngrBA4rLWMO70jtbHzpuV17O1jk1GYwa1KfT4rMeAy9KvhcKA2t5EwTbxzakp6dH5fa5ZaBpQqaCE0XsJbZ0qLFMxnGIy+re1QmCwTEnk/ZVs9aYquWHcqcITYKCqVOJcjiMYHzliPN1GO3QUFbkRHnrETk5F6MO1EqMfGhO7Dj5gah2WK48U/0soEsYk7yARLby6TBjpQCr14SVdqdUc/3yUxq80myxl/ozSRygFubs3rJWDEK+4Cq9/6zNuT+7baFzFU1Cpf5vcm4jXgYtm4qZY2UJDO9LHHyUx2fBHUOslz8HRqkLmsapBy6EjIpjwn7mZj1tiuaV3zOYLY/FrbvAPvf3EJghfVWPmjK4pON2uIdmuqiCkquWV7sQYc62bB8sl7hgi/fzgvfeTup24S303OJwotXFe34Qncq457iiYHFxTp/tJn6sbTN3K'
	$Logo &= '/8wNeMJqrPk1hopF2+hEKKufqk1vfBW+d+N9sW8/pTk50UPENcLBI2L+2NExBndCm3XJ9x/I+FOFupNcF0taxTjxiYdxju1u/mC/bTauzHiRfImcqJK92NnXiL2m9w/p8If3QYoKu9+SS4QTWp4WBzM3b//lnfATpr6lmLL2mu+qECHH+Ul8UtFuewjwMTdhOcchyp6fsLiOwSNNnz/T2SJiTSz8Do4gDo1R4he8vO7CvzHZ9LSdNOMn1SO2OX7CwkCHl6JUFeLwFQvnjIjI2ahQEUUgQ6L0HKaEY07xFyUU3GsrCgb+d5g/6SHAd1odceg3GikyPU0VMrFamf+UfkWBLqt5kNKGB4OfeVud/wZXHhS11q/gQ8O03pFpYQNdmsV0BHNDLEKmPyI73PfvwsMHzdVSpn/59KGUZA66NHV40K2evV+zSWBmZZ/TR3Va6zeIo6638g0HHZkOSuhgOsXs4t0XX8nw8rfxSHZJy3OxoPAKNk1xZwMCsUt6ezJ1xBJxG+rO6k44NadCXffXeFqT9QlULuHW0Sb8Ui5ELZ0NgP6qKh3DiZ8UBc1LPl84zcykveP4XiV7HxKI9JQUaOk2pz4rzHAm990OS446erYsxBNRjLNiJp3pFv6dGXyVonfwDaQ6RwBG9OKP7lqrLgrfWGJIt8JSPe39RKh+Av2F5tT8bOBldUKl2sFJBx4g5k8Hg5qZysEwaFzm0Qvq/cbDybzLj53TK3JiUoU98XwEDv6UXzJEHfHUdaTJqbLMZ4W6Fkj+p+avhKUnUtrgl7aZio1X277qd+0VD6dN+W/fjkaiFN5PXRF+UAx2WLpjzKrWOkrwJpGTyUcufGvHvCy22lHikc36efdtKmKPZJgtt9Q3Or2YW6EY8g94BlPPBzKYlxfxy2x0gRU5SVEtBzykZUOm/wV191f06Tp8FPN3sXZNDFrHKWYwVp+JPlf8FMC8bDHkpqk3+nSyNGstV8YhUS9pa+MvEY1fJreT'
	$Logo &= 'hmUYPm1IebR9ra7YX/XlrPDxm9fYt86U3QF/hrrJ2oX3u7Q5KVKTTP3tbbjBV1q6FhVuhcV3K2XV7A7MbDc9Y8bFVULTJ2zv8j2fBRaKeGqgz6wJZS3E/QS3KELyki7Ofd5veX+1KIO8DFPurhEawCjXVD+DGhTu5OpXvHjc34Oedqf6Ev2s2AE1y9pUucvYJi/L0/zpuHH1VP71dQe9cJBV3cEPeVbqk14OqNzkqYMxfE4ca6Wug6NMy1sc27eqmwpv1byNN+POCeb0HEJjlbfX8t9lMTbNXb3MRYuM8mRfiybmw68UTGlxDx0NUxyFWClyV9bLGbO31m8cxcpbeiRqIl9PbIGuM8rLGvkpsThsvS8JjlgmYRc/aVHmjER8rsSJa0tN7v55bXngyqZLzCaaMEtndl9lbddDbX6t5GnZZKwrctkByqRT0F3fek/gK3LWjYIL1SfdGRkPC+09jx9L3dqb0skyxv9XvKucvZ/Bao0N5v+X7DYw98Xxb+DmpfuDu5AJuzKld8Z1yDBbuST7tqTfOs18nMX60PqtfcN/9sRIakhHMR7vYpumWbu4/wpjSmGgcKcj/vHVat9vNdC5smnET3d/Cj+8+wPFeZxuI92+vO2bVdlNsLT5nAcaQr5JyrJE+OS8pFeuVbjEFTL5vILr62dcTtUXjE6Hqh9sV+EOvqcNiQ2ZisxUex2uCP2ql/6G/40zpHDWsjbBb1DyY/v4wbyrM1uXqEL3HxPEJDTsTrUAM8+/NAaO7SWdNDP1/bINFoQbhqxX5vVNmo8p9ZI/Mug2hj49Ndwg11Ti27Jzx9osGLp/xnR7xhT+UsNKEpTOMQrYUvB1+uUSQfym9MXV2v66TQkpsDLceUHqb/KkRE9s/+sdEfY9QzvLY3Zt8g6/AL+lK78Q4aRJj2EediHsclV+9El5EU04QvQaV2fthlcTRkdyqebNV6z9pzN6MgzKtVHVSYp7I/DspcTZvl0GJP9smBae4MWx'
	$Logo &= 'L5hVvKpX4eWZHHAicyvTU0N3rXCCkQ6PXwMamXXamw4tlB8H504tFvu/rx75efwP8J78Nfee77ygF9MTJkHLEJ9Rml6QC0sq4SzvIKquoS5APCL6sfdr2WoDl/+I3HttYcbwQy+SgSNV+4ZJeZO2h/zZD44dX/tu9f+HiDi3ZD8n66EiC/+veJs1YVSlew78rMICxXcHlhmp63C0vYeiSa0r065OxdWqFa2XmgFM6Nj+646z++PQRZ8Krx0Nth/ZMWRLTg2vFVtzGdip4CG77hWbLxK7/Lfauyll3UCNGQ5/6EUC4y7peeisq9ososblp3dGwIv2C3Pi4MbI8LoOhLp/P58ZEO/waHP2OEBpdqmLjPISdyQ0QXN9/hffOUDTllKnzxjHQZFA6FMz0im2S0vQwxSTGXnwYeuswLcsvPA50kpbnyqL1ey2LPL7vawZyAwtXgGh0mxnvgTd6z9q6S4JHDwJ12zwEdiQq0d+nTMM0n0CbadBDHjXPEmR1RRE7movfZ+VMDD+5qqmYSW5FuPsi1GqWVbftxTQrFuK75K/JGw+XCiCCrC4z3Fp9aFKeh+vGZkwsa4J9uHJn3XKc7myUz3buPlq3+gol9W1xyrTru2nrr4oX3Kq3fH0/dy0t8yfCbXhwsn/eh2gs/4bP2vV8vNrfp7OOV+H3hMroR5Piu09LYiZgo2KAcbESiVt4nXPbi/UeJOFy7zZ5lRuFbosCI8HFJt0Chs83DImZqKHhThacx6L/g+sybxjKH45nHzlGE5sbyxw1uPCe+JI1L7QOIIpoKGExgOBDYLEGqKFM0Qt7FVInXNSuVhcRK8IIUlmNEqVuOo/L1Wmgo4ihImOhivd7SHEpS1p6s/mnyfWLVha4+NbWJY2JCfNTBrfLG3zWYpuXDuXOxDrj3UJnO/QLbuhd+to213pfuI1wdsrMslDZ+EfEuAcKMNIWvw9YnRiGt7eeGqtlvRTWsl///P4i1WH7vGV3unc6+Ca'
	$Logo &= 'OwC6WdeFBj7qdLe+x9hHgCVV3cP/hXe17nPlRV9m53WzQ4vFdT4NQMJ8zuIx5OjLmNosN9ukYnDVs9LF23Dgl+0IqCwjDW7aZnnWw9fohkDFPIkdA/uGVwfFs/Jjt6sPvHR/0VLwuMwJHB08vpTKGnkTaHww8n7zKtz9n54yAy4/Z6ajzXyzmyQT/6W4aInsdrwLLQoo4Ve6+tYCnA+7KItJM5pIyzHPPfU4CE9sOJ+YdktaF6oQGBnhc5fThKcceDnT4WcuKlycuWleaXb9z8GJbRzL0v/7BR0v6+VFuIXb4U07gHO4R+3y6qvChT9+jLSEZ1H1U2U8Qudjs4CfCZ6fjMGZ4/M++ixpJ3jrgIvSt8gTYN0Xey8ZVmdd3r4dYcPbTijH5FRHQimSShWUe03+imNeWmXoC4/cT1WWZi/iTtBLhZYp4dpbOIOJKbd+zCHqHcilbqLwcUTo3FLpBInzsKIRYwxTWin0gjOS3RnD6H/N+uE+aeL7GmsyHOrzH4SPRy8SxeIQoiGcqmsLjRa6LgspCh1BYxj0r1miU79Fi9Nxik7pBGTH68uaWVUe4epjmCdtQv5H3oDjUMUczcdYmz7h9jVpxugEZFxPiTX/AfgOfC1xLG3IfsB5aBTOYlgrPWZxDVmaf9S4PWqk+UoYx6mU/2BZVhciLI3/kgzIKM2+ph2lJLOubKBRozU5OoJ/yS13fnNniWqbZaVx4wc6m7bOj4x/My3ZLvogSEg7sJSqchr3tl6ohWYaUKIoGZy/QkKpTCx1nTTnv9z8UWexkRwdEmtx7l139OtUKm9DCvdomDo6vCz2cKm1l9xzJ38ecdXuqKruOPDR/gnSgaNL9QDn2psjRFOOnYaYORvASZlucAbnwXD/yF/h61x/kWcQ9MjJ9mhI9dDtp9Kc5ly+lx0x+f6rNlKeQh7kzvvLZibq27+/nfB2c+gqHGjYxY9uXX7tUayBCTJgwu3hbGRK+v6X2BN3thWKWYp9'
	$Logo &= '5xTgkYkcpfs9NhptanOwnVXmYWvirN+yZ0epOf42Px+ZdmDr6t/h2WjBLiAEIpff51QI+nz1AXQBTtm0nr/VVLeBidRYOS56PmsobJH5IJKSdCnM9jYN7mexwrphJvxQ7tBYXcPg/QSnd9s9xdLNggzsQl21gTRuBqwPNrFEnltGaOhkKgVnMyaqui2EdqWeLVeGwY8dsUqq62LHNsEyy5NZOOaNhXpmx8I1G1rXY+rYJbsgyzPZsOm/9Sl9RYKrE5ix1fKKtiqpdy6QaUeAOv+M3FuSVsVoFavT/1yyyduQbFPglPLE7kkeZGQMOJY9cV+wfrveCVQCURQp6HLlAKziXpBaFZ7K8wQeF4TxtAr0e7mL4uCKAQUFi+bLi275c2rF1FCg9wepI1SH/7s3wcdjp5DHQ6evzNRDMTsusbct2o2ne+kYv43h6C/yyvGJhKR047uPfQpmKDQFd/W+xIi4vNSpPAoMeOs5YZ24FpnrIPq26vV02hW9+60TCS/35XbrkIkagVzi3dG8Jc3XCddKvzdLn2c/ioeXBpqwW0RmhgjMf3Hp2hhQLOu8nAd28qfkWnShidSixZ/KRSg7JT5p43b/VmCm8/hVSEdbf9PWrDyNvLOcdyib9Sl7G3ItIB00ElDqGPmlx15S8qip7e43x6CLDXHz0r7K3bU44461/pCffG6xqoPZxpRrBoyzb0FatHjnhQdfpnRmpTb7Fx6+/qAiZbmCV7PffrAUd7Jyp3oe+RmdfaylYsV67OpX8wt4QMvE+OhHWyUCjJcnHo7nUbL3x1/PT31QtwKv2T7P7dAVES8l+bR7qlhv6vlrR4n9pP4n/CxDRxvVVnd+dd/Gp4lj5i9lgQdZbRHNAq1gzXhO0zzZmYjRje6hHNp+2qHUbq2TlL1aI9WFJosPwrXIQwoslgtpdSGPMzDFktteAZMrB19qIddGdOhuklsfrbikUqubid7+gpJ/m+9F9pytA9DXXLvJb4fFgUPC'
	$Logo &= '3elu/5V/62l1kyGt9Om+ohwDHfo02/bQScZ/3Pr+01OtK837V3Sp8I+SIOV2Fr7vDyxs3OtTLNl7L8q02+/Fbao/X52cQIsHMWZGJvWpY6d2d8bMz91rk6ObhcZxcqxUQwUhf2NweKy5d3zbh7X1tfikqgbDcxIIx7kh18RoVA5J81Fx+a/3igxMyCkbwuMjNy0VeP4EISshWzwmiPRVN11uvHbtFRqVmcoZQcA1brZps8KulmC8KMes09imqIOxgpaqsIVQ2Tc+0ReeSWj/OyZye8QsNPzAN8TZSs81l6ZpiMWbqWea5i2Mo2XLI4ApaC1j6DcM+DxjnZuBK8q0rMwrQIsts7fql0w0dkymfF169utsBLIAoDz2M2rsGWaecm00oW3djMO4/ncsUlXt+PFkaGo8hcISr+HLBqDz1Qr1StKCghN8HrFRz5HN116weLw7oe+hrfMgyfseyw//P2vgGUQiASdd9Oy8hsyT7Hs1tu6CUQJqgktVQzIrHGkPnYDRhOnaui91gvHBIU6nal08X0RNcKPHr1qy/Z/HjqDl4Lus/BNJj9xMgWFsloRbw2GeCB/8F2M2g4if5yRDaXcY5mlZMgz31noocRmeIuewZ5iy7/TacPicxbTvFnJiNmkdtjay76ZbITE83l6v4prP/69UAS3PWhfcN0zzA/x1cutg+wkwSbnVY/13cOjU1a2/FSLKgLO15OChq83k8qb3pvu/dm3KLd7OdJLvNK8qJ158KHp5fRUI4st8iwIRVvsEjG1V1+H9+ruif25S4Y4go5B5KTHcWip5oWOofHA9+pUsIL0SC72LMS6YPjFhFp1qExNo9ge3H7wz3rWrHnDzsJc3m7s1vBX4dLYkPCDd6BqQHqvdKWSeWik8NTNfL0a8aM1IXtMtnAZ/vtiTqYy/+fZsUJjpqaf8WQ0kJ/ctf+E1YEA6YQ68W8PuG5uUkJUwOHkwldd/RqUalinbifVb1hyVKJj2GYuqQO19'
	$Logo &= 'v2f9+0Wjo+f8XM7D6WxXYCDW2OMgxFKgSmhtQg2yYxXbmdz5O/u3DzvrjAwUgUI7p5Ybw+QeLB1NFF2lLUhenIC17M11wKbuwdHCKSxucsxj85p6ekxlhbLMmc/miDnJRWj0/WhsK47GRAXPK11duTYmlBzqm2Ai5o6MSL+oCYV7EoVtznawsP1PqU3/Bl+bVpk1glhSjGKBDHLGuIBw+5A9d2xaZbmrce7661c78RHFc1b3CNuXi65S98Fdr+lBJrYMsUvIakm41Og3L8MnCg5SwW8Pt4ozkmExKr/ve5ZOx2frqnVTMl7CK91vK528bL0TziOtrVjZ/z9iGujmivQN6TRQeX15wf7P7ysu1T7yoeuWX3OtuSVnNVJEoLcrqnaNyfrPv55TvLTiAdLhivUDHhsnOWpO6cfycbK1U0qQmeeEhrPHy7luXmEsbCduLFFeHl86TbEKbOEF8g0Pc4mHO0DgMvVWhpisX+z1Cg+wUsMZN7OqUcNMi8yKWaQxAECOIQC9dT2AjCK2j2J43usJrHwdIyJz5WB15fpVgDvMGsx9Roa7hrr4C9LL/XmLcKnWQBsm2fl8Bb/u+TwMkP6AYJZrcmtvnd6zP1QZV1zO3eJHFLRoG+a//wTnjTYuS/Wp85bJnYbYvNv+XnoGRzzqhxtcF14oJiyKX7qXJfZlJQTXo5vsXofSaByw/vPz/I5ANL+bG1P9z2uF/QqNdRTWvwme71chRZyrdIRCqLL93tt5F8FCDiIxju3bX6Y9RmsEP/tq3wmsrJaX3Na8YEZli59stgfEh6xqvR1u05EHmfRlY1s94hQFvqauv1SnLI/zf5m+LsERDq94q2lfyzyWtD56lO26pFjL0YlmkvCwdNhFFfcb2w5If+V9/GnShpVmmVeWw59Gq1hPEI6rz7nuTFlJmqfZ34IMf9gJK7CY8RnnuuPvaw61Qd5vGPfxhnBodTpVZvzlRNTe9ZBNiF4Xv5fTJpEHXZjlxq/j'
	$Logo &= 'Nhsf2kXd7bizPxW7YRmDT/39E4dPyIhGq61MWoa95L1qjJZfCOu5K261vjN85++3w3xo77D5xVLGX2V1ocTffNvlWbEQRdm0YsrTbKHJ4ioE3nX0xFXfs5c+13N/Wo33nZf9CY5c+n9tGKes9tcW65uQtlcky9TtQzjdJx0fi8DGPtZ1/WZYW0k/WtdpdjI3uveP2371SXHlTr5FFqQGK/61qGeVmg8pnf/FSHpEWXfTxI8nhDwHl8grhNjvalyCHUwOsyx2y8JPjD0/Guh13nF1UNrt/V/kqgbnH3HHRujKJcWClVp6g27QwhiEnHoV38C6S5iddsqSiQOx/e5Hsy7bDQRtJKHfwN84E20P//BIkDZgx1WLQqyjzZqj0WJy3qwsXd9gKPvPHIVxfgp0/dStz7ZJv+tRsG6Pb7zqgEkb+zZp637lHjyRrtcVoI8z+cSQt//CRq30n73DOgM/4zLul2NNPmAPYs/rssca3Y1bGcGhy8iBJivgNcj2mSOdt3Way910TH+dP1ZX5woSELJRAPNOYqaxcKbq9cfO7muJnaMivwPmg+9pHDXVx7/b9GLF2ID4V/YL/GHdb2J49YLpXwzi6/FrJXytR5Z1LhKAZeLFBMuL8wukKB2TCAPlAtieeJLhiRkBq55rOLmE3p/ShWN9Aqylr7UgBq5ANvGuB2c4yOk2uPu9yrn10TruPA6N+wMKd7CnJotcz72wLxYzG3bi3nYtmqt7UKZHrAGFsVtWyDfsKbZJhr9usuD4elT1QNy1r8sG206+91h6/+f5wbTnfkjcQVXZyna1C/tEk50CWEk7WjdIgv+ikB3MXiRde5vGT8g4uihjREPk9MDnuI6aIUFenSBj4hTkIPFs6dFBs93W1rBJ2h1g5fP+Ien+l2VqytX9XdSM9+VLLXOsniPHdP0XF7fMPGW72oYkW+1MXrLyv3/JeswPonHeMjGZ/aH7n/byZSgqW63p0g0oLdu68mLEYmcF6nbs'
	$Logo &= 'iyruYCDFXyX4Vt7xk8cDjdVeGr4o9v8EqEkkmD6nMP+ddkLKcvB5LuiV6XLBBt6oXDqxrmnt2qtTq8OpEewBwTccjrAJatCqIfA+Rz7JCTpgnhUdvvrb4WpXoIzGL4gN1H//a1/5lW/mYDURYh5qeIq2sa6ZFRE4L5IUqS7/oOO+Gq3pbs+vNtSn8H2h3YOk4hSISn4ecdi7xcX11dFLAlWyOooDtQ7056KKJzA5F4VeLnaWvr6DVWZv5dGG2lzA7pMUkt+2iFo9O+IinWuXH2OoLW2oaXBnA1PxYYz8DgoRSUND9xo59XmjDt4px061blvqPhpPbo3PedVpC7eb8PMhAeZghU9ZAx1yOM/w7aY879cf+9/Hr+MobiY+t4AP/JgYHk21zsUkP9GRjZM1UHr6z+3euyihTv+34b2OxpD8i7PDXi84uj0H4a095CIDYuiv2GZg/oLZd9dqhQ5rob63/kjopZM97j0eJ6J/fLXujz2Bn95X0uVe+Pa8L0n29VucelUPvyLxVjb/viwO1bVloto9fKy0uISr2M5X7bXRpi966B9Zy71M/XYNxOT359L/B2m/unhHvg/0mRVXLvQOjWfz5WwcrR3K9sXRO30XVjQZmH/UlxBQJ/NKZ2Z/Pm6Qjp7ODOUedoHi+Z2xireWf7fZYn2G2x335cUwP9FF9l1aA1pWW4JyZZoBlmYgwHEyE/iFaP0ChjixLC2CStCj4Zay11lubi61rJHbS6ZfWVYhFrgwzC0TyFobmh/y9y+Fyg5iUl83yfVEOl7MEK/JK5+u0Xgtcoj7lvhLHBwDcPnPMAX5ZDx/5LRCd4iBwlP67UO/conblf6APX6Jx+ZXdSpEyjWT1b7abX7H4vSGpaOvjZ/0CPaKePrN7ADf93J+mPhnq3WJ2yROBanTz7bzWDf8WbNSjASoX+ruDNbH8su+Lac+rsyhxA8EDUifMZi/jZMwZbiyJuCT345j8VQwuPblfmQebvK9ZQVO'
	$Logo &= 'Hen4Cf3pEUSZNUbcLU8doN+v9ivFujagUMNomFL3xYPTzT1NF9KiU44EA4lSs1G3eRUFpWPk7eDG/I/N61odHUnASPxfFzvCmtLNuXcWTSXz/9WBfy9y1XcfO/SQW2dTZWQSpg23dYt/gGT8xr/LK7WV6+WkfCZh/E28XaJ4TaiBD2qn0ZgnriYsSsiTF7Drb/q0XqfuCHdU+2fyYmKLu86B9vn6ieVnsNSdljvuuz/+6r9RI+H26X2RIfHv/7SboxRQf1/7aD3bfTN+QQJ89ktFtkIC1BlySWFW3ueu5XyaY36iU+O8s5tT15U56qn3Mwdji95eiZ/8VGYZi0cbWtQly1tUJglYnHMdeNl5dre3fcjbNPZSLGrsmXwU7aCoZMy99JBXKuyufN9XO5wBZ+gtV3bCbNoZQk3gq+ArFpKNVbj20lLy2K8HzZOuqxKBobOh641LI9ZdJfdTqYfuw+vmbB1+TVy+gu9PXlgYJC2+wz8SUdDI1IWN0GtBXiFeEn2/5BqiytXj3kghyyfaiC5hghv993f5+w958SKtjPbZqtiINVWZrknkk7jlZNiCQ0aGn25L2N5N9dqpVkS4M4E8ycKWluIFK5nZ9V2AjIIGVyCLZLmcsBbrQ8Tw2KHGq81CcD9b68fE8FJDIBeoicwhi4th8wWVxaZYsXbM1GrIcoWwYK40F0S2+crNXkMptqRtgVZWsBfr/+f0lBbEyM5e6ZC4m3seYdN4Wt1f259/6Ko8o1fWqdmrqPviRdGfQbvCb8fYteoJQR9C3fDcSi83N+O8qMyfAE3BvFdHPkt7+g9/uf02s7Sm+VTjPcpQPIH4st53pjaV9+uhGrT8u+K0uMdJTtQFdnA/NzrWhmT/9E3aG0v8cpDPOi4tsyTlZ2d3h6Cxi034+PwW7pgYqum6K03IpMfjO8sVlKkFbazjkt/hrKDpYJgJL0rtb8nlci+pv4R9Zt8eXK9ojfk4d5X1O94AsFWxd5eNKL9A'
	$Logo &= '+0w0GeT5279oYen+jA49fGMK4Kut2SZe9+aNvKM09lWVduK9H8dv+d2vjK4x1z52+ZjZmSS+q5qqRK46rm6r7n4gk7p6XLbzaa9KBb6o1Quugii+vXF7O8PcYjVKo1K0fnPS3YRp7fA9Y6VSmvj5bNuzsP3SPKWHdzfWP7oNzNu9qJew/1uX/SUQKZb84/Zjws+S29Qq/9cZzes6tqZKM1iTKh91oQ9z+pbNlslXbWOKD83H950dTB1s5KiixcoPHzKuQ1t3p7q9uXKy+Pr53HJ1o40gyLyqslTSZe9gBRNzqLHLbXsgeadtx0y4SGLJerNfxG3fu77Y7TfDKifd0oyvuueCZztiTIbMNGE3wJZvot/sdpICJRbfn0j7qs9Lurr431Eh6hk+0aI1Vka0TG4q5CTG/8tsi3oEl/UcNZHtljdF55zeazp6ZYIVM678DZzM70echwzaAznOjqwlvayZtkxjpZdZ2ucnvXPYPmUdkRu2GUB+iK1GOhnFwPUmfOOPFvUvbq4snU0VCFmEfCpBdt62iB2jjbKygiKMpkRaCzt7pF8YH0TCVT/aQD/ZbjhObFhLjWjQph0DM8JCMDW3fveofty2n111zzplxbNqr21WQdeywvWas0PiHls6zA/bxeSsWw4+iHD1pVhsegW/a8jEgK5ApotaHWizlV+A5Ws1D2TJ13zBFYHehJnnkSQCfiRt4iw6b9fKNbJ5vaKWWFrITqxY/gkIrpYR6AKqgBq8swknQ24hQ+dRws/fPHPR+VOi9jlkzapi/onykKdjqVjxT19+jP+kN0ZoaioHZv0tb1e+nm8B/OPh/nl7Fl+zuBP0MOjSw/CScwPrf29bEmE/m46DLt5mH9279CxysrLlGfLoDwtczDsOCZSqiVZwHvoEyDG3Rlve2X+sz2PIph3XwOWfXW5a0v3vakwoBFxrI61USmocNDISAsidILqQQU3e3P9TsyDnKzb/ro54Sdx2/v9r3MN/yP08'
	$Logo &= '7OCFwmp/plHsd2/xAeIuWhj34NXZJ2SiqPn9HJ928VUw9Ebh0ayOOjO0q7pWutTFQT5arvj3k7NTe+Hr6KYZY/qV2v4LZPCTPiX3zw6wlCwyCDVzrbrpcKvAf78E5OdbuuRRJSTNwSPSR0yn4/NOmsjUjujgzZIGp9padWgrSuRb0mrmYFFUKV0572bh47d4NeIp1sP1I+Qq3fAGiVG8WNtnYgy1S8e74R/MK+75MXWfrNDwsBqJDcaeeDemw8HSetikbQrIzA6pVTrxQS10KngIrHX7+edFdtgP2eLuJJtZXalc91ZmaN4wQDa8udQ1vkfbsslrNJL79p7TW/zJz2r7YWYqU9YQtZBBsQwBBfGc2NuPPbQOuAqQ+29juA4X/+nvi0inDxE6TuweDcJ7r4i3w9//e4a7+khquU17vBlTcQy7rz63MnffWkRrw1SUNl2lS5J7zYy74WQEvV9zc0c29e9sd4ZjrdDWGX2zwYxUyyrya+HbdX+E/X9IurFmH/Hw1CeKE8W0+3Dq9wwhh1hji7MKoYH3lJTmThl8htsv0IWDxrMK+oY/Xq5m8OWw/x8b2M++FXAyLmsz8zMTisCSWIIEQwAIIxuNAjDqMMpRA66fFDQKAKIIwGnRQUJpMMrgOByHGzDoCDEAwWJJ7rCAqG+WAFM8rawzsWFXZ3Es0ve5+y896nWT+JCpM+5v/uEn4v7EGcDdJ7j+ouK3y7KY2yJ534OVV5lV+85xz4Oy4X97qZ7MeROWpk4FfjnPneAs7DVdnXBcIj/852bkrsoUUM2xsEWO3eWp/KfW5j5VpVgl+ukLIaWM2/6GIk/S+fLEcM8x88Hkto2+Bl53qj/XhVm8WNh30eUj8xG4xHd31wxlVI7848KYEixLYZs4Ksy96FezlVPlfVmv88WJto0Z5ff9ywqix2NCVZuhfW5+an64xOpPexDRQFjuvZlb49WgJ7BKlr/51UtCTmvnTyqv8N9CR7yaMt/E2H/H'
	$Logo &= 'izeBetVneT2Vtj2bFa/4Zh3p/JuQZyk7zu1JF0eh++LZKYV1U+LHdCR67U6//Yh/jn5za/dkqu2XwFfkSxvUr5eb3BtnIrqLvvaAx2HEaoaDImJTvax23rLMA22Lou+Kk/SN5yuGqI24OUn7/XwUrvJPp9Yp3hDak24QFtF4Pt9K6Xpg2RVv/CJBOJKg7Hcd/dlx2XOHMQOdp7Tqnz7+rhcykLmNt61Ju4ltSA2w9Dsoo1eblGvzMM173fDr5W+lue2m53Rd839YLVf+Tx1V//Jszz3d7utnfzuIHEc59BJ3nhB309sI0Jfxs/2s3q5L54SM/RONjfojutdLrnQdKdT5/Z/m6Iv95yLNODuHfw63N2gaZPrVnJhF+SX1vVd8+OjjozPOGDbsFXMSl/Ql2xiZgG47exI/3TmuR+Kjg7Zuv/7iWvTT/OtiLex+UTpOJbrthaNktgnu+shFir0WaVcM6asuKZm7PAzVdyLIW8X6CpamdP4M/Nfb+03wpBhq0GevpvpxrqEsEI5b3MbF9woMSdssnBg2/6kRPLm87Tdf9p3/+me4cN3oI8yRi2I/RMxO4HDy4UOn1zzqXFN0lKQ/SPsFXplDBAVS269M/dlaqncsSHqEzujSnBa9chqjr7Gnr6VbDf/X1uGs9abJbCYQvn2lLQa2nIjXqN95pPt3IuiSPjJ/mygq3c4ccN+m5v0a61R5u9CDlNoeXS3zSBn6oaEp3W8sq6RjcKwTEzZRtuE/45kmjo7iXINCnOWSLxWv8HK6YLhoS8Rlfl5LI7hU0MxvbAzCfk0gFN5geaMiAWSxy5MJIUkYMhLwKfYCjZVDUWiwONJp9Ie/AAYMASY6/RIk+bHKIQrSvyIQQ6mvhr8n5+/EexBYUZkyLJdLsn5crG1P9YrEv+wfpT/6VtedsETzaiYTcomC4LvP380Xjdi07SI9U7x68rmFM6ZWi0WlhodM5F38v2wzUtPkzu+sl08K664O9EWfGcoG'
	$Logo &= 'SzyZf/FxyzOheL+Ppl1MSnlLPiW6Fl3z//Y/x78zNmcFF/eJhrycGP+mXnf5WNbRr7EX15jfj+6dG27N/e3cZ7Qyt1a57NPjstThIG/7xq+/MmsjqPX2rfT7494TUgx3G6pdR7NQO/d+fyfn/7t1BxKTN1UOOKnhc12ezXvMy4tzI5j2Sj+XeQPYnS4X+hv+n+2hYrtIFGIW/OLlhO7qdcVxL2bOS5/yPquhwwJTY95pCl/6FTHWev0+PocupTx1njrmXf/g2vjuprotY5njxw3+PXNcR1b1sf/LsjEfDyyIhn2X1f12/f2mmUGok7a9TKvM85ifnZdtStj+fGfNUvxtVH1LS/qrpzPbgtZPMXxzi1OMHoOufzvV+c6o98jER2Cqwma+yZtfZcG3ZcNOzduLCueUqbjGPAXXR99sLncpN1962qfDoleyaNtximt5XmuwtLXt1x9ruvb8SXYmqbDY6vM3bweDTIsyuPbNKBLGLMP2u5tRE48fd9c29cPk571j6QfXtyvtox4mb27SMmMt7y+b3OeJz59DX8QVaFzNe7NgZmkQXMcmhJyNqgxvf+5oT17/i1s6ccbi6JcnInqfzzgamXpndj+bSd/42Pq/lX/m20fKqYqdkcXLkmeS6rjL1jpPXfd3/NOcka3tH/bKc1Lrg6bxE/8P/sXTfzwmbbbxptpk/cdDVhMSm96+HE9LDK6IGoyq3f7u5N3ccYO/lBJm6w6ufzHrr+6whyZcjG4aBP9MBkhsivW7Ng94bg9pJfTevavPjkPN7l10PnXvGf/AMdHtxP1H2054Ea1qDvYkwhtXrKOc447/1QaP0Xk+bCLa8vi10pUP9g0rQwfmln8e7au89rYp5cZwGf2o5PD7OVc1DYs7b1+7EDu2dFTlv5DLncL/ed/niW/Z+75ZZtdc6VolfK3Yov3fohckl9uTBRiME+7lJpAAbPkhIKChAOTCCTAC4AIwThIBuaQCyC8C+ICOBCmVBGDD'
	$Logo &= 'RRQgNJ4CLpqrM8RkH4bCoIgkIwCECYboLSwCAg4NEPqG9JW/uY7ma4fLJd+93rQ+7Q2GefU5oent+QFBbZeE/dbm00l3uV2ntYuvndoQuWLpuZ/245H5HyfOKqz9f9vDvFMLHfHPDXfdwhmKvyVEOKrWFL7pI+QeWRq1HdQbXNtfP/b5tElj8AnD3rsPez5+vsXirrLKl7Cuy9/fDb8d7a2NfM3utYTEATX7zrcG95zNu75n0sI/v3r0n63F3o8vTU0/fnj7+QX02k4/9KLPG/rgxkbonf/woDf4+U/H15/58dcX4fesnWkcsPPcmFXjxpx662PmTf//rB74bNav1T1ZhauK7j509cejg2fP5R/c/e3xvN9fNN5+ZtDKqdc+ceP91ac+ceLQOW8nn5415KoBN395/C/y5Maov2fdON+l6PGpf+ab9wPnXz1w5NYDFyV9v3znJycWzD7+QsbeM334+3199FLlyEu7PxsverA+q/jV+C6vCNsY/WX1F8e+vuC9e8z313Zf+9JrXx962fcnvXpJl/zTqAN/GPbZb/2eRlI/mfzPoUvWv7aKnnRbcfQrt77PS4ReW9kTA89Xe/kTwz4f9/DR9yJSPev1IzY/fN+0m7sfbJoYnDbm5pvzX24P+uHrcwPP+u+AY29ib3u8Ys/glT/X/XTyIe9o77Kok86Fvu/u/5LZvHvT8jfeHf9hzDxfXlLeiTf9Oei+N7vP3/72+Yc/KZh9zrnr7jhH1wrmPGt6J+zCcw86F3J8y3ttv3xl/5ynLo35tbNpwY4DT7yPn885+nRa2qmtH9benLP/59O+eu1c/ptHnOwEf/X+Pesv+vPKw3vLb31i3szHlp/v67tLpO27Tn509bZo/YGXzfrR9PmJoIE/f15bvOmN43+d/+BNNxpPuhV/TdMfeeePq3/HTt3/1fmR45rO6mpc/t2o8dtXox/gR79+du89+Wf82b71x78ue2Nl5tzOl8u/e/uWzXcfeOjj'
	$Logo &= 'TnJOMOucoJFgQbB7uwqWLRDoHLiYxKAWJpo0pGZiCTDANyBst/1A+sGRYILMtxV4nAlX5NHhue7gGraYZfg7zSRRJiAIooDxCHIV1BIuCzC2worEoOjX/s1TVj7z6+kndux7/MBZd+8evmr5oc9f+dn1/NXHs5uXnUiUHqI/97RzN/GHo+dLO3LSo97Nn2/JSuZ+NGfxHTvf/R7+8bnb/7r0xJ8e/Tvn5b/536o3Dv/7vONmr3pu11D/L+sSf1T5qntL25m7br394M/mQ9GL/pz5ftFVl3LPfum0e/TLni46s/Kpk6KmnvvctN07BzZ/vidr1Z6ldwYfSp29Nf247Srfa4H7P/7onGFXHdeefLfrt/d+GjlfXt6l5929//la8ODfuo6ybpv87ZUN4cpjXh4997bKpMxXz31kwcixl5/3djTY++ffX397/rvDjxUed9Ol4e9uvOjF5PoM7/rftwfNujV+spb5z4CBtx/50Xc7N3120ZP/e3/q0AP3Pnv673f+eXjUzxfLNf87/3dMul/GmEmXwLsGXvr/g3uuBvJjht74s+LJ+ztBOz6+Mvy70s9lW/fv2bKuUBdXfU7Z7icPGnDw2CQd+XDw1eM+f/up5quPvvukMXJkW3gtU8WSrKD0s5QTu++SdNUQypphrnq62ElgmmBpNeRaZkHr2UWXu6sI2qsERguOrjFR1YmfxaDLypDF6S6OGhoWTpdmWWV0XZcoBtsM2v+p6equXbfO1k/qf4teMf+yqW8deNi5L7+c9OS1L2fdedavf+ZbO69OdPfm195+o1//zdQjpr1lNk78S7mWxJkLvrzv7GdckV97xcNRKxMHZKsmS/5dbgVyEcia5FqoK7hlvs1qaZC7WF8DgbFUVL4YXQ5FhmHBhxH7LIHr7AFYk1zIZFWGIMPiLQqB68FGMs7WcNHUsIVJA4BgBNgx2yC4EInbus+lyRitJWcxOxCrFAQEsEuIAciF0TBfgqwEV5yrQiBf'
	$Logo &= 'L27EonoDGYDYqQPSPmwAkAGDIwGMC6gAAS49srQKO0Rgs4Gs3CTIuBTMwArA8gm5ScHKzqXJKmkALMOCrBCw2hzmSJh/YQRAhl3AQYYbuFacxUgAYBhHXa0MgAApNwGMDJssKcyXpCwsN3AhMwBp1KQBYCDttAKsgtXiLEyk3K4BAWDSVHbdALoEBFdsgADIrsrGCGBggZI1mcCAC4suIpdhwRPjhVQAVnAsHRdygJEv/mYJCax4WIDFfc0wUkbIEgGyMrJYyQAEN+FiMDAAK5ohZQRAYpsBxFTIXFGEPbUwAsBAAEu2AC7xYBhd52T1pt1qZpZjIV9PFAABBhgBGWAAAYyUEQIACGzxAL5EGiOFDPD1m4wqN4DAGiUCIMANK6QGEKzsAGBRzMB6oyunBVvDuUCQgVRk10oRXCSA3C4CAwEMqCAyO8ow2FbLEjCawqpgmRZYRWZ96Hon6wa/B4AlHauirsykjFzJBXDBEgYCpGxFNSu3MKz5kLsAWUYMIACQwapoCNdqQUoaWKbMkoEU4g5wpTNLi1kSFQBmOWKRBuJ6r4arikCs2LKmE2DtFOSGVVnYZAAYwQAgK2kKEOAm4A6sUawruiC0Yf0zA6tC3wOVIPMFwQIicGNrNzcXLYIbAHKDVjRZgouZgWAA3FzO4b5WCQayVllFbsB9OTIMMAIQuAFyAwhAYOsWK5wwLFcCAwhgBDArZgRACnE16OZCIrCLjy6gwuBouMFCLKALOGRlBEAKGYAAl3sAkBW4CSz94CYA4PdcqhiGEcCAmwBAYEt03ZABzEBclxhYkRUCIANxAejGDQAB4bIouQkBi7GsNwoGAiOFAL7SCAHCIqYAILgBICBLjgABAAQjAAwjA5AtrBJCACCtBDDACJdegWFkoRmwbnO5ImR9Bgy4CWsjRnCDahB44ZPvAYDcgBGQuwABGaB1IKuoYAC5AQCtWASsmCKFELA8RABkhYwABnKduHrqBgEQ3ACQYQRA'
	$Logo &= '1kKnAQAyjAArNDAQ11HBTWDOMRDAsIbKCICspAFgIADggg1gBBiAAMNlcBMABrJKAIAAAF6AAZCxUmQgWNZUWZcEAARubO3GCoXvAVIIYAQgMAAERgoZgQEgcANkAHfCqg6ghRrAnYAA3AGMACkEMAKLOQBIIQMQ1i4BjKyQAQgIgKwQAMEIACBYTQRRCWAw4qQQ9hHAQAAYCFhACDACA8gNGECuQaKMAMgwAMgAsnwzcu0GMsy6TSWwGGQFpjLACMD2CDLcBAAzDeg9cNO1SwBkADIAMIIRwAAywE2AAUZXjC4EA4wAA9wE5DUcawZIIQOMDBiBAWQAUsgI4AYZACADAGQAcoMMAJABADLATUAlAEZgsMJzAQFygwBIIQDcGAFgIAAQ3LB8sXADQAYsyQBgqpFCCAAAtHQDRsAdAIAAVAGyQli1AdJ7gAw3AAQ3KZBmZbQEAMgwAsAwAiB3GSFACgGQMgIguEEAGAHcpIwARjCyAmkK1ya0j4AMQIABbgKMwAACGAFGYAC5AQPIViuMACNwAyAwgABGAMAIQIAUMgBxBwDkxtUwggUAcgMGkAFGAABRCWQYAKQQAAEGIACArBAAQAYYKQSAGyOqgcBNRUBwu0q5ghAAgC4D/ABUEZaQAQYA7f9AKaEomYqCsBERiqCJmBAJgghrMplVRAi4BKqIFGuGQUGAZUsHuMhowIKMhnVLvEUDlISDdWRVNibCkkY34XRjVlREJRfw0rKVk4JzYpYANCQWFQjRwXIzI7GhgUIyFJFxUiITYVFBMRIHIQYRVw0rYYAAAcLijoGAdQMCABBalo0EBIs5AwIHAZxFKKgs43QAEP9XAwERAgAiAQNNA6QCCBEAwP/WKBoWGiiVQGFCAUGhAhwEXKCgpKCUwKC0wLR8ZKSopJyYjICwgFhYcIxsaHyUdGhYWFQDDAyKCwiGBwcKhYQEBQUIBQSDg4OqYGBAUGBQQGAAMASw/Q9geQJUAQBGSUZK'
	$Logo &= 'EADg/9j/'
	$Logo = _WinAPI_Base64Decode($Logo)
	If @error Then Return SetError(1, 0, 0)
	Local Const $bString = _WinAPI_CabinetDecompress($Logo, 5)
	If @error Then Return SetError(3, 0, 0)
	If $bSaveBinary Then
		Local Const $hFile = FileOpen($sSavePath & "\autoit9_wall_grey_845x676.jpg", 18)
		If @error Then Return SetError(2, 0, $bString)
		FileWrite($hFile, $bString)
		FileClose($hFile)
	EndIf
	Return $bString
EndFunc   ;==>_Logo