#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=Icone\youngchicken.ico #AutoIt3Wrapper_Res_Comment=Freeware, If you paid for this software you should get your money back! #AutoIt3Wrapper_Res_Description=Computer Plucker #AutoIt3Wrapper_Res_Fileversion=3.7.6.0 #AutoIt3Wrapper_Res_LegalCopyright=GNU FreeSoftware #AutoIt3Wrapper_Res_Language=1033 #AutoIt3Wrapper_Res_requestedExecutionLevel=None #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;#NoTrayIcon #cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.14.5 ComputerPlucker Original script : Computer stats utility Original Author : Rogue5099 https://www.autoitscript.com/forum/topic/154510-computer-stats/ restoration 2021 by: t0nZ a.k.a. NSC Credits: JSThePatriot, Melba23, Beege, ApudAngelorum, AZJIO, EXIT JFX, bcording And thanks to anyone else and the AutoIt Team that has helped and I have forgotten. Original Script Function: Gather System Information and display it easily. New primary function: create a .ini text file with basic info about the the #ce ---------------------------------------------------------------------------- ;V.2.0.1.9 year 2013 last Rogue5099 version named : Computer stats utility ;V.3.0 beta march 2021 first t0nZ "restoration", added support for win 10 and relative builds, added optional creation of .ini text file about the machine, moved some data ; retrieve functions BEFORE the gui to have data to write in the file, deleted some menu items, varied/renowed other functions according to my personal taste. ;V.3.0.1 beta march 2021 launch with "dataini" param to only generate .ini data file; small fixes: no more absolute c: and processes list fixed. ;V.3.0.2 beta march 2021 gui launch with splash management (thanks Argumentum) ;V.3.1.0 Wi3 menù system by wuuyi123 (NDH) - include needed - ;V.3.2.0 can setup tasks in windows task scheduler, can upload to a mysql DB a record of data, manually or via scheduled task. ;V.3.5.0 added log system (GOLLOG) ; added autodeploy adnd uninstall; added embedded icons and xml for tasks, refinements to upload system. ;V.3.6.0 "ini" (values for mysql db connection) embedded in script and extracted in ram ;V.3.7.1 added crypt of data sent to online DB (optionally sending NOT crypted data via manual command in tools menù) ;V.3.7.2 added wmic query for PC model (some vendors declare here the market name of the machine) ;V.3.7.3 adjustements in tools and system menù, also added eventviewer and taskscheduler ;V.3.7.4 ini data file (machine data) is deleted if DB insert is OK (func send2mysql), else it remains (to be uploaded in other way) ;V.3.7.5 credits About windows by Professor_Bernd - CP_about.rtf is stored in base64 string and extracted ;V.3.7.6 bugfixes and very small optimizations (autodeploy mostly) ;V.3.7.7 internal ini data file date was year mon mday now added hour min sec - bugfixes (sfc /scannow) - regain disk space point now to cleanmgr.exe ;V.3.7.8 substituted original cpu usage system (based on a csv file written to disk continuously) with a wmi query active only when visible th cpu bars tab - added first Tools menu voice for first time remote data send and scheduling ;check the companion script ComputerPluckerDBbrowser.exe #Region - Includes - ;- original includes #include #include #include #include #include #include #include #include ; >= V.3.0.0+ includes #include #include #include #include <_GOLLOG.au3> ; NSC first UDF #include #include #include #include #include #include #include #include Opt("MustDeclareVars", 0) #EndRegion - Includes - #Region - loading phase Globals ;NSC GlobalS Global $OSs, $PublicIP, $IPDetail, $adaptorData, $folderdataINI = StringLeft(@WindowsDir, 2) & "\autoit\ComputerPlucker\", $dirtemp = StringLeft(@WindowsDir, 2) & "\temp\" Global $gollogcount = 0, $lastlog = "sicrlf", $cachelog = "", $guititle = "", $Gollogedit, $logfile = @ScriptDir & "\logs\CP_", $months2NOTzip = 1 Global $geleft = 60, $getop = 13, $gewidth = 325, $geheight = 400 Global $startop = "", $cryptstring = "", $groupstring = "CPgroup", $PCmodel = "" Global Const $appname = "Computer Plucker", $Ver = "V.3.7.8" Global $cryptop = "crypt" ; "bypass" is no crypt, or can be "crypt" or can be "decrypt" (not in this script.. for now) ;end NSC Globals If WinExists("[TITLE:" & $appname & "(" & $Ver & ");CLASS:AutoIt v3;]") Then WinActivate("[TITLE:" & $appname & ";CLASS:AutoIt v3 GUI;]") Exit 3 ; as 1 and 2, I leave for internal AutoIt EndIf AutoItWinSetTitle($appname & "(" & $Ver & ") on PID: " & @AutoItPID) ;check 4 autodeploy If @AutoItExe <> $folderdataINI & "ComputerPlucker.exe" Then autodeploy() ;S T A R T Gollog("|>>>>>>>>> ComputerPlucker " & $Ver & " STARTED") startmode() ; check start mode If $startop = "" Then ;preparing for GUI start SplashTextOn($appname & " has started pluckering your machine...", "", 320, 0) If FileGetSize(StringTrimRight(@ScriptFullPath, 4) & ".ico") Then TraySetIcon(StringTrimRight(@ScriptFullPath, 4) & ".ico") TraySetState(1) ; $TRAY_ICONSTATE_SHOW (1) = Shows the tray icon (default) EndIf #EndRegion - loading phase Globals #Region - Globals - Opt('GUICloseOnESC', 0) Global Const $MIB_IF_TYPE_OTHER = 1 Global Const $MIB_IF_TYPE_ETHERNET_CSMACD = 6 Global Const $MIB_IF_TYPE_ISO88025_TOKENRING = 9 Global Const $MIB_IF_TYPE_PPP = 23 Global Const $MIB_IF_TYPE_SOFTWARE_LOOPBACK = 24 Global Const $MIB_IF_TYPE_ATM = 37 Global Const $MIB_IF_TYPE_IEEE80211 = 71 Global Const $MIB_IF_TYPE_TUNNEL = 131 Global Const $MIB_IF_TYPE_IEEE1394 = 144 Global Const $wbemFlagReturnImmediately = 0x10 Global Const $wbemFlagForwardOnly = 0x20 Global Const $tagMIB_IFROW = 'wchar Name[256];dword Index;dword Type;dword Mtu;dword Speed;dword PhysAddrLen;byte PhysAddr[8];dword AdminStatus;dword OperStatus;' & _ 'dword LastChange;dword InOctets;dword InUcastPkts;dword InNUcastPkts;dword InDiscards;dword InErrors;dword InUnknownProtos;dword OutOctets;dword OutUcastPkts;' & _ 'dword OutNUcastPkts;dword OutDiscards;dword OutErrors;dword OutQLen;dword DescrLen;char Descr[256]' Global $iMarquee_Loop = 0 Global $sMarquee_Move = "scroll" Global $sMarquee_Direction = "left" Global $iMarquee_Scroll = 6 Global $iMarquee_Delay = 85 Global $iMarquee_Border = 0 Global $vMarquee_TxtCol = Default Global $sMarquee_BkCol = Default Global $sMarquee_FontFamily = "Tahoma" Global $iMarquee_FontSize = 12 Global $Date, $Time, $AvgCPU, $Collected, $CPUTotal, $RAMCollected, $RAMTotal Global $oDict, $ProcessList2, $l = 0 Global $colItems, $strReserved, $strVendorSpecific, $strVendorSpecific4, $Output Global $DriveInfo, $DriveInfoLoad, $DriveLabel, $DriveInfoType, $DriveFileSystem, $DriveSize, $DriveSerial, $DriveTemp, $DriveProgress, $DriveLetter, $DriveStatus, $Memory Global $ip = "localhost" Global $RAMUsage = MemGetStats() Global $RefreshTimerA = TimerInit() Global $RefreshTimerB = TimerInit() Global $aDrive = DriveGetDrive("ALL") Global $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394084(v=vs.85).aspx" Global $BIOS, $aSystemInfo, $DriveTypeLabel[100], $DriveFreePos[100], $DriveFree[100], $DriveType[100] Global $hUpdate, $aStart_Values Global $sBmpFilePath = @TempDir & '\bg.bmp' ;cpu usage globals --------------------- ;Global $o_Autoit_Object_Error_Handler = ObjEvent("AutoIt.Error", "_Autoit_Object_Error_Function") ; Initialize a COM error handler Global $__g_hGDIPDll Global $graph[21], $bars[21] Global $timer, $timeout = 1000 Global $hFlag = 0 Global $hBrush, $hGraphic, $hImage, $hTexture, $width = 5, $height = 100 #EndRegion - Globals - #Region - gather data - If @OSServicePack = "" Then $OSServicePack = "Original Version" If Not @OSServicePack = "" Then $OSServicePack = @OSServicePack Switch @OSVersion Case "WIN_10" $OSVersion = "Windows 10" Case "WIN_8" $OSVersion = "Windows 8" Case "WIN_7" $OSVersion = "Windows 7" Case "WIN_VISTA" $OSVersion = "Windows Vista" Case "WIN_2008R2" $OSVersion = "Windows 2008 R2" Case "WIN_2008" $OSVersion = "Windows 2008" Case "WIN_XP" $OSVersion = "Windows XP" Case "WIN_2003" $OSVersion = "Windows 2003" Case "WIN_2000" $OSVersion = "Windows 2000" Case Else $OSVersion = "Unknown" EndSwitch _ComputerGetOSs($OSs) $Language = _GLI() $CPUInfo = _CPURegistryInfo() $IPDetail = _IPDetails() _ComputerGetSystem($aSystemInfo) _ComputerGetBIOS($BIOS) DateTime() DriveInfo() _ComputerGetMemory($Memory) ;_ArrayDisplay($Memory) Switch $Memory[1][12] Case 11 $MemoryType = "Flash" Case 16 $MemoryType = "3DRAM" Case 17 $MemoryType = "SDRAM" Case 20 $MemoryType = "DDR" Case 21 $MemoryType = "DDR2" Case 26 $MemoryType = "DDR4" Case Else $MemoryType = "DDR3+ / unknown" EndSwitch ;-- ;get public ip $PublicIP = _GetPublicIP() If $PublicIP = -1 Then $PublicIP = "Not Online" $PublicIP = StringStripWS($PublicIP, 3) ; perla pearl to remove all WS, LF , CR before and after ;get adaptor data $objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & $ip & "\root\cimv2") $adaptorData = GetWMI($ip) $adaptorData = StringStripWS($adaptorData, 3) ;get PC model (for some Vendors..) WMICpcModel() #EndRegion - gather data - #Region - data ini write choice ;--------------------------------><-------------------- Select ; NO GUI START MODES Case $startop = "dataini" writeCSV() funcExit() Case $startop = "datainiupload" writeCSV() send2mysql() funcExit() EndSelect ;------------------<>---------------------------------- #EndRegion - data ini write choice #Region - Loading GUI with Infomation $MainGUI = GUICreate($appname, 400, 455, -1, -1, 0x00CA0080, $WS_EX_ACCEPTFILES) DllCall('shell32.dll', 'long', 'SetCurrentProcessExplicitAppUserModelID', 'wstr', $appname & $Ver) ; look at _WinAPI_SetCurrentProcessExplicitAppUserModelID() If FileGetSize(StringTrimRight(@ScriptFullPath, 4) & ".ico") Then GUISetIcon(StringTrimRight(@ScriptFullPath, 4) & ".ico") ; http://www.rw-designer.com/icon-detail/4560 GUISetFont(8, 400, 0, "Lucida Console") $ToolsMenu = GUICtrlCreateMenu("Tools") $inifirst = GUICtrlCreateMenuItem("Remote data collect initialization ", $ToolsMenu) GUICtrlSetTip(-1, "acts like write .ini + send crypted data to online dB + schedule task") GUICtrlCreateMenuItem("", $ToolsMenu) $iniWR = GUICtrlCreateMenuItem("Write .INI data file", $ToolsMenu) $data2mysql = GUICtrlCreateMenuItem("Send crypted data to online DB", $ToolsMenu) $plaindata2mysql = GUICtrlCreateMenuItem("Send clear text data to online DB <-warning", $ToolsMenu) $initaskcreate = GUICtrlCreateMenuItem("schedule task for .INI data file creation", $ToolsMenu) $initaskcreateupload = GUICtrlCreateMenuItem("schedule task for .INI data file creation & CRYPTED data upload", $ToolsMenu) GUICtrlCreateMenuItem("", $ToolsMenu) $PixalFinder = GUICtrlCreateMenuItem("Pixel Finder", $ToolsMenu) $RecycleItem = GUICtrlCreateMenuItem("Regain Disk Space", $ToolsMenu) $DriveInfoItem = GUICtrlCreateMenuItem("Details on Drive...", $ToolsMenu) GUICtrlCreateMenuItem("", $ToolsMenu) $RefreshNet = GUICtrlCreateMenuItem("Refresh Connection", $ToolsMenu) $SFC = GUICtrlCreateMenuItem("System SFC /scannow", $ToolsMenu) GUICtrlCreateMenuItem("", $ToolsMenu) GUICtrlCreateMenuItem("", $ToolsMenu) $uninstall = GUICtrlCreateMenuItem("Uninstall Computer Plucker", $ToolsMenu) $HardwareMenu = GUICtrlCreateMenu("Information") $AboutCPU = GUICtrlCreateMenuItem("Processor", $HardwareMenu) $AboutRAM = GUICtrlCreateMenuItem("RAM (Memory)", $HardwareMenu) $AboutHDD = GUICtrlCreateMenuItem("Hard Drive", $HardwareMenu) $AboutMotherboard = GUICtrlCreateMenuItem("Motherboard", $HardwareMenu) $AboutGraphics = GUICtrlCreateMenuItem("Graphics Card", $HardwareMenu) $AboutSoundCard = GUICtrlCreateMenuItem("Sound Card", $HardwareMenu) $AboutNetwork = GUICtrlCreateMenuItem("Network", $HardwareMenu) GUICtrlCreateMenuItem("", $HardwareMenu) $AboutOS = GUICtrlCreateMenuItem("Operating System", $HardwareMenu) $AboutBios = GUICtrlCreateMenuItem("BIOS", $HardwareMenu) $AboutSystem = GUICtrlCreateMenuItem("System", $HardwareMenu) GUICtrlCreateMenuItem("", $HardwareMenu) $AboutBattery = GUICtrlCreateMenuItem("Battery", $HardwareMenu) $AboutMonitor = GUICtrlCreateMenuItem("Monitor", $HardwareMenu) $AboutKeyboard = GUICtrlCreateMenuItem("Keyboard", $HardwareMenu) $AboutMouse = GUICtrlCreateMenuItem("Mouse", $HardwareMenu) $AccessMenu = GUICtrlCreateMenu("System") $TaskMGR = GUICtrlCreateMenuItem("Task Manager", $AccessMenu) $DeviceManager = GUICtrlCreateMenuItem("Device Manager", $AccessMenu) $Services = GUICtrlCreateMenuItem("Services", $AccessMenu) GUICtrlCreateMenuItem("", $AccessMenu) $SystemProperties = GUICtrlCreateMenuItem("System Properties", $AccessMenu) $FolderProperties = GUICtrlCreateMenuItem("Folder Properties", $AccessMenu) ;GUICtrlCreateMenuItem("", $AccessMenu) GUICtrlCreateMenuItem("", $AccessMenu) $Registry = GUICtrlCreateMenuItem("Open Registry", $AccessMenu) $CPSystem = GUICtrlCreateMenuItem("CP - System", $AccessMenu) $taskschd = GUICtrlCreateMenuItem("Task Scheduler", $AccessMenu) $eventviewer = GUICtrlCreateMenuItem("Event Viewer", $AccessMenu) GUICtrlCreateMenuItem("", $AccessMenu) $FindProductKeys = GUICtrlCreateMenuItem("Product Keys", $AccessMenu) $GetMenu = GUICtrlCreateMenu("Downloads") $RemoteRepair = GUICtrlCreateMenuItem("Remote Repair (Anydesk)", $GetMenu) GUICtrlCreateMenuItem("", $GetMenu) $ninite = GUICtrlCreateMenuItem("NINITE", $GetMenu) $malwarebytes = GUICtrlCreateMenuItem("malwarebytes", $GetMenu) GUICtrlCreateMenuItem("", $GetMenu) $nirsoft = GUICtrlCreateMenuItem("NIRSOFT site", $GetMenu) $HelpMenu = GUICtrlCreateMenu("About") $CreditsItem = GUICtrlCreateMenuItem("Credits", $HelpMenu) $Website = GUICtrlCreateMenuItem("Website", $HelpMenu) GUICtrlCreateLabel($Ver & " - (N.S.C.)", 51, 420, 299, 15, 0x1000) $TimeLabel = GUICtrlCreateLabel($Date & " " & $Time, 250, 420, 150, 15, 0x1001) GUISetState(@SW_SHOW) ;GUICtrlCreateTab(0, 0, 400, 419, 0x0148) ; Create Wi3 menu. Global $hMenu = Wi3SMenu_Create($MainGUI, 200, 50, 'Menu', 0x000000, 0xFFFFFF, 200, 1, 1) Global $iconSposition = @ScriptDir & "\Icons\ComputerPlucker\" ; Add menu item. Global $hMain = Wi3SMenu_AddItem($hMenu, 'Main', $iconSposition & 'search_laptop_1.ico', 24, -1, -1, 'Wi3MenuItem') Global $hDrives = Wi3SMenu_AddItem($hMenu, 'Drives', $iconSposition & 'hard_disk_drive_pie.ico', 24, -1, -1, 'Wi3MenuItem') Global $hCPURAM = Wi3SMenu_AddItem($hMenu, 'CPU & RAM', $iconSposition & 'ram_drive.ico', 24, -1, -1, 'Wi3MenuItem') Global $hNetwork = Wi3SMenu_AddItem($hMenu, 'Network', $iconSposition & 'rj_jack.ico', 24, -1, -1, 'Wi3MenuItem') Global $hEtc = Wi3SMenu_AddItem($hMenu, 'Etc', $iconSposition & 'tools_gear.ico', 24, -1, -1, 'Wi3MenuItem') Global $hLog = Wi3SMenu_AddItem($hMenu, 'LOG', $iconSposition & 'notepad_file_gear.ico', 24, -1, -1, 'Wi3MenuItem') GUICtrlCreateTab(-10, -10, 1, 1) ;$MainTab = GUICtrlCreateTabItem("Main") Global $MainTab = GUICtrlCreateTabItem('1') GUICtrlCreateLabel('Main', 500, 20, 120, 100) GUICtrlSetFont(-1, 20, 800, 0, 'Segoe UI', 5) GUICtrlSetResizing(-1, 802) GUICtrlCreateLabel("User Name:", 55, 25, 250, 25) GUICtrlCreateInput(@UserName, 175, 25, 215, 20, 0x0801) GUICtrlCreateLabel("Computer Name:", 55, 50, -1, -1) GUICtrlCreateInput(@ComputerName, 175, 50, 215, 20, 0x0801) GUICtrlCreateLabel("OS Language:", 55, 75, -1, -1) GUICtrlCreateInput($Language, 175, 75, 215, 20, 0x0801) GUICtrlCreateLabel("Current OS:", 55, 100, -1, -1) GUICtrlCreateInput($OSVersion & " " & @OSArch & " " & $OSs[1][2], 175, 100, 215, 20, 0x0801) GUICtrlCreateLabel("Service Pack:", 55, 125, -1, -1) GUICtrlCreateInput($OSServicePack, 175, 125, 215, 20, 0x0801) GUICtrlCreateLabel("Manufacturer:", 55, 150, -1, -1) GUICtrlCreateInput(StringStripWS($aSystemInfo[1][21], 3), 175, 150, 215, 20, 0x0801) GUICtrlCreateLabel("Model:", 55, 175, -1, -1) GUICtrlCreateInput($PCmodel & " - " & StringStripWS($aSystemInfo[1][22], 3), 175, 175, 215, 20, 0x0801) GUICtrlCreateLabel("Serial Number:", 55, 200, -1, -1) GUICtrlCreateInput(StringStripWS($BIOS[1][16], 3), 175, 200, 215, 20, 0x0801) GUICtrlCreateLabel("Memory Type:", 55, 225, -1, -1) GUICtrlCreateInput($MemoryType, 175, 225, 215, 20, 0x0801) GUICtrlCreateLabel("Total RAM:", 55, 250, -1, -1) GUICtrlCreateInput(Round($aSystemInfo[1][48] / 1073741824, 2) & " GB", 175, 250, 215, 20, 0x0801) GUICtrlCreateLabel("CPU Speed:", 55, 275, -1, -1) GUICtrlCreateInput(StringFormat('%.2f', ($CPUInfo[1] / 1000)) & " GHz", 175, 275, 215, 20, 0x0801) GUICtrlCreateLabel("Display WxH @ Hz:", 55, 300, -1, -1) $DisplaysLabel = GUICtrlCreateInput(@DesktopWidth & " x " & @DesktopHeight & " @ " & @DesktopRefresh & " Hz", 175, 300, 215, 20, 0x0801) GUICtrlCreateLabel("Display Depth:", 55, 325, -1, -1) $DisplayDLabel = GUICtrlCreateInput(@DesktopDepth & " Bits", 175, 325, 215, 20, 0x0801) GUICtrlCreateLabel("OS Install Path:", 55, 350, -1, -1) $DisplayDLabel = GUICtrlCreateInput(@WindowsDir & "\", 175, 350, 215, 20, 0x0801) ;GUICtrlCreateTab(-1, -1, 400, 419) ;GUICtrlCreateTabItem("Drives") Global $DrivesTab = GUICtrlCreateTabItem('1') GUICtrlCreateLabel('Drives', 500, 20, 120, 100) GUICtrlSetFont(-1, 20, 800, 0, 'Segoe UI', 5) GUICtrlSetResizing(-1, 802) For $i = 1 To $aDrive[0] If Not $DriveType[$i] = "" Then GUICtrlCreateLabel(StringUpper($aDrive[$i]) & "\", 55, 25 + ($l * 15)) $DriveTypeLabel[$i] = GUICtrlCreateLabel($DriveType[$i], 100, 25 + ($l * 15), 80, 15, 0x1201) $DriveFreePos[$i] = GUICtrlCreateProgress(185, 25 + ($l * 15), 180, 15, 0x01) If Not $DriveType[$i] = "" Then GUICtrlSetData($DriveFreePos[$i], $DriveFree[$i]) If ($DriveType[$i] = "Fixed" Or $DriveType[$i] = "Removable") And ($DriveFree[$i] > 0) Then GUICtrlCreateLabel($DriveFree[$i] & "%", 370, 30 + ($l * 15)) $l += 1 EndIf Next ;GUICtrlCreateTab(-1, -1, 400, 419) ;GUICtrlCreateTabItem("CPU and RAM") Global $CPURAMTab = GUICtrlCreateTabItem('1') GUICtrlCreateLabel('CPU & RAM', 500, 20, 120, 100) GUICtrlSetFont(-1, 20, 800, 0, 'Segoe UI', 5) GUICtrlSetResizing(-1, 802) ; -->= V.3.7.8 new cpu usage view GUICtrlCreateLabel("CPU", 55, 55, 270, 15) GUICtrlCreateLabel("Usage:", 55, 65, 270, 15) ;--< GUICtrlCreateLabel("RAM Usage", 265, 105, 270, 15) $RAM = GUICtrlCreateProgress(265, 15, 50, 90, 0x14) GUICtrlCreateLabel("Avg.RAM", 346, 105, 270, 15) $AvgRAMBar = GUICtrlCreateProgress(345, 15, 50, 90, 0x14) GUICtrlCreateLabel("CPU Arc:", 55, 200, 270, 15) GUICtrlCreateInput(@CPUArch, 105, 200, 290, 20, 0x0801) GUICtrlCreateLabel("RAM:", 55, 125, 270, 15) GUICtrlCreateInput(Round($RAMUsage[1] / 1048576, 2) & " GB", 105, 125, 290, 20, 0x0801) GUICtrlCreateLabel("RAM Type:", 55, 150, 270, 15) GUICtrlCreateInput($MemoryType, 105, 150, 290, 20, 0x0801) GUICtrlCreateLabel("Virt.RAM:", 55, 175, 270, 15) GUICtrlCreateInput(Round($RAMUsage[3] / 1048576, 2) & " GB", 105, 175, 290, 20, 0x0801) ;$CPULabel = GUICtrlCreateLabel("", 380, 30, 30, 15) $RAMLabel = GUICtrlCreateLabel("", 278, 5, 30, 15) GUICtrlCreateLabel("CPU Name:", 55, 225, -1, -1) GUICtrlCreateInput(StringStripWS($CPUInfo[2], 7), 105, 225, 290, 20, 0x0801) GUICtrlCreateLabel("Vendor:", 55, 250, -1, -1) GUICtrlCreateInput($CPUInfo[4], 105, 250, 290, 20, 0x0801) GUICtrlCreateLabel("Cores:", 55, 275, -1, -1) GUICtrlCreateInput($CPUInfo[0], 105, 275, 290, 20, 0x0801) GUICtrlCreateLabel("Speed:", 55, 300, -1, -1) GUICtrlCreateInput(StringFormat('%.2f', ($CPUInfo[1] / 1000)) & " GHz", 105, 300, 290, 20, 0x0801) GUICtrlCreateLabel("CPU id:", 55, 325, -1, -1) GUICtrlCreateInput($CPUInfo[3], 105, 325, 290, 20, 0x0801) ;GUICtrlCreateTab(-1, -1, 400, 419) ;GUICtrlCreateTabItem("Network") Global $NetworkTab = GUICtrlCreateTabItem('1') GUICtrlCreateLabel('Network', 500, 20, 120, 100) GUICtrlSetFont(-1, 20, 800, 0, 'Segoe UI', 5) GUICtrlSetResizing(-1, 802) ;If $CmdLine[0] > 0 Then $ip = $CmdLine[1] ; not useful to me... ;$objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & $ip & "\root\cimv2") GUICtrlCreateLabel("Public IP:", 55, 25, -1, -1) GUICtrlCreateLabel("Local IP 1:", 55, 50, -1, -1) GUICtrlCreateLabel("Local IP 2:", 55, 75, -1, -1) GUICtrlCreateLabel("Local IP 3:", 55, 100, -1, -1) GUICtrlCreateLabel("Local IP 4:", 55, 125, -1, -1) GUICtrlCreateLabel("MAC Address:", 55, 150, -1, -1) GUICtrlCreateLabel("Default GW:", 55, 175, -1, -1) GUICtrlCreateLabel("DNS Domain:", 55, 200, -1, -1) GUICtrlCreateLabel("Domain:", 55, 225, -1, -1) GUICtrlCreateLabel("Server:", 55, 250, -1, -1) GUICtrlCreateLabel("Net Adapter:", 55, 275, -1, -1) GUICtrlCreateLabel("Net Activity:", 55, 300, -1, -1) GUICtrlCreateLabel("Net Speed:", 55, 325, -1, -1) GUICtrlCreateInput($PublicIP, 145, 25, 250, 20, 0x0801) $IP1 = GUICtrlCreateInput(@IPAddress1, 145, 50, 250, 20, 0x0801) $IP2 = GUICtrlCreateInput(@IPAddress2, 145, 75, 250, 20, 0x0801) $IP3 = GUICtrlCreateInput(@IPAddress3, 145, 100, 250, 20, 0x0801) $IP4 = GUICtrlCreateInput(@IPAddress4, 145, 125, 250, 20, 0x0801) GUICtrlCreateInput($IPDetail[1], 145, 150, 250, 20, 0x0801) GUICtrlCreateInput($IPDetail[2], 145, 175, 250, 20, 0x0801) $DNSDomain = GUICtrlCreateInput(@LogonDNSDomain, 145, 200, 250, 20, 0x0801) $Domain = GUICtrlCreateInput(@LogonDomain, 145, 225, 250, 20, 0x0801) $Server = GUICtrlCreateInput(@LogonServer, 145, 250, 250, 20, 0x0801) $Adaptor = GUICtrlCreateInput($adaptorData, 145, 275, 250, 20, 0x0801) $NetSpeed = GUICtrlCreateInput("DL: 0 kB/sec UL: 0 kB/sec", 145, 300, 250, 20, 0x0801) $NetTest = GUICtrlCreateInput("DL: 0 Mbps UL: 0 Mbps", 145, 325, 200, 20, 0x0801) $TestNetSpeed = GUICtrlCreateButton("Test", 345, 325, 50, 20) ;GUICtrlCreateTab(-1, -1, 400, 419) ;GUICtrlCreateTabItem("Etc") Global $EtcTab = GUICtrlCreateTabItem('1') GUICtrlCreateLabel('Etc', 500, 20, 120, 100) GUICtrlSetFont(-1, 20, 800, 0, 'Segoe UI', 5) GUICtrlSetResizing(-1, 802) GUICtrlCreateLabel("Run:", 55, 25) $RUN = GUICtrlCreateInput("", 135, 25, 155, 20, 0x1080) GUICtrlSetState(-1, $GUI_DROPACCEPTED) $Browse = GUICtrlCreateButton("...", 295, 25, 50, 20) $Submit = GUICtrlCreateButton("Run", 345, 25, 50, 20) GUICtrlCreateLabel("Edit:", 55, 50) $Edit = GUICtrlCreateInput("", 135, 50, 155, 20, 0x1080) GUICtrlSetState(-1, $GUI_DROPACCEPTED) $EditBrowse = GUICtrlCreateButton("...", 295, 50, 50, 20) $EditSubmit = GUICtrlCreateButton("Edit", 345, 50, 50, 20) GUICtrlCreateLabel("Kill PID:", 55, 75) $KillPID = GUICtrlCreateInput("", 135, 75, 155, 20, 0x3000) GUICtrlSetLimit($KillPID, 4) $ExecKillPID = GUICtrlCreateButton("Kill", 345, 75, 50, 20) GUICtrlCreateLabel("Kill Task:", 55, 100) $Kill = GUICtrlCreateInput("", 135, 100, 205, 20, 0x1080) $ExecKill = GUICtrlCreateButton("Kill", 345, 100, 50, 20) GUICtrlCreateLabel("Delete File:", 55, 125) $Delete = GUICtrlCreateInput("", 135, 125, 155, 20, 0x1080) GUICtrlSetState(-1, $GUI_DROPACCEPTED) $DeleteBrowse = GUICtrlCreateButton("...", 295, 125, 50, 20) $DeleteSubmit = GUICtrlCreateButton("Delete", 345, 125, 50, 20) $ProcessList = GUICtrlCreateButton("List Processes", 155, 385, 100, 20) Global $LOGTab = GUICtrlCreateTabItem('1') GUICtrlCreateLabel('LOG', 500, 20, 120, 100) GUICtrlSetFont(-1, 20, 800, 0, 'Segoe UI', 5) GUICtrlSetResizing(-1, 802) $Gollogedit = GUICtrlCreateEdit("", $geleft, $getop, $gewidth, $geheight) ;, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN, $WS_BORDER, $WS_VSCROLL)) GUICtrlSetBkColor(-1, 0x3333ff) GUICtrlSetData(-1, "" & @CRLF) GUICtrlSetFont(-1, 9, 800, 0, "consolas") GUICtrlSetColor(-1, 0xffff4d) Gollog("Gui started!") GUICtrlSetState($MainTab, $GUI_FOCUS) GUICtrlSetState($MainTab, $GUI_DEFBUTTON) GUICtrlSetState($MainTab, $GUI_ENABLE) GUICtrlSetState($MainTab, $GUI_SHOW) $RAMUsage = MemGetStats() $RAMCollected = $RAMCollected + 1 $RAMTotal = Round($RAMUsage[0] + $RAMTotal) $AvgRAM = Round($RAMTotal / $RAMCollected) GUICtrlSetData($AvgRAMBar, $AvgRAM) GUICtrlSetData($RAM, Round($RAMUsage[0], 0)) GUICtrlSetData($RAMLabel, Round($RAMUsage[0], 0) & "%") GUICtrlCreateTab(-1, -1, 400, 419) Global $IPHlpApi_Dll = DllOpen('IPHlpApi.dll') Global $sLast_Label Global $Global_IF_Count = _GetNumberofInterfaces() Global $Table_Data = _WinAPI_GetIfTable() If IsArray($Table_Data) Then $hUpdate = DllCallbackRegister('_UpdateStats', 'none', '') DllCall('user32.dll', 'int', 'SetTimer', 'hwnd', 0, 'int', 0, 'int', 1000, 'ptr', DllCallbackGetPtr($hUpdate)) $aStart_Values = _GetAllTraffic() Else GUICtrlSetData($NetSpeed, "Error reading Adapters") EndIf GUICtrlCreateTabItem('') ;----------------------------------------------------------- ; Register auto size for menu only support AutoIt v3 GUI. Wi3SMenu_RegisterAutoSize() ; Click menu item Home. Wi3SMenu_ClickItem($hMain) ;----------------------------------------------------------- If $startop = "" Then SplashOff() ;TraySetState(2) ; $TRAY_ICONSTATE_HIDE (2) = Destroys/Hides the tray icon WinActivate($appname) EndIf #EndRegion - Loading GUI with Infomation #Region - Main Loop - While 1 $iMsg = GUIGetMsg() Switch $iMsg Case $GUI_EVENT_CLOSE GUISetState(@SW_HIDE) funcExit() Case $inifirst writeCSV() send2mysql() initaskupload() MsgBox(64, "Computer Plucker", "Sent first data to online DB and scheduled weekly task", 5) Case $iniWR writeCSV() MsgBox(64, "Computer Plucker", ".ini data file written in " & $folderdataINI, 5) Case $initaskcreate initask() MsgBox(64, "Computer Plucker", "scheduled task for .ini data file creation", 5) Case $initaskcreateupload initaskupload() MsgBox(64, "Computer Plucker", "scheduled task for .ini data file creation and upload", 5) Case $data2mysql send2mysql() MsgBox(64, "Computer Plucker", "Machine data sent to online DB", 5) Case $plaindata2mysql $cryptop = "bypass" Gollog("sending clear text unencrypted data to online DB") send2mysql() MsgBox(64, "Computer Plucker", "CLEAR TEXT Machine data sent to online DB", 5) $cryptop = "crypt" Case $uninstall Local $sAnswer = InputBox("Requested Uninstall", "Please insert code: ", "", "", 600, -1, Default, Default) If $sAnswer = @MON & @HOUR Then autouninstall() Else MsgBox(16, "Wrong code !", "Uninstall not possible", 10) GOLLOG("Wrong code - uninstall aborted") EndIf Case $PixalFinder PixelColor() Case $CreditsItem If Not FileExists(@ScriptDir & "\NSC_fs_red.jpg") Then _NSC_fs_red(True) EndIf If Not FileExists(@ScriptDir & "\CP_About.rtf") Then _CP_About(True) EndIf About_Dialog() Case $Website ShellExecute("http://enneesseci.blogspot.com/") Case $RemoteRepair $FileSize = InetGetSize("http://download.anydesk.com/AnyDesk.exe") If $FileSize > 0 Then ProgressOn($appname, "Downloading: Anydesk", "0%") If Not FileExists($dirtemp) Then DirCreate($dirtemp) If FileExists($dirtemp & "anydesk.exe") Then FileDelete($dirtemp & "anydesk.exe") $hInet = InetGet("http://download.anydesk.com/AnyDesk.exe", $dirtemp & "Anydesk.exe", 1, 1) While Not InetGetInfo($hInet, 2) Sleep(500) $BytesReceived = InetGetInfo($hInet, 0) $Pct = Int($BytesReceived / $FileSize * 100) ProgressSet($Pct, $Pct & "%") WEnd ProgressOff() Run($dirtemp & "anydesk.exe") Else MsgBox(16, "Error", "Failed to download!") EndIf Case $DriveInfoItem DriveInfoGUI() Case $RefreshNet ShellExecuteWait("ipconfig", "/release") ShellExecuteWait("ipconfig", "/flushdns") ShellExecute("ipconfig", "/renew") Case $SFC If MsgBox(65, "Computer Plucker", "Are you sure to launch SFC /scannow ? It can be a long process...") = 1 Then Gollog("running SFC /scannow") ;Run(@ComSpec & " /c " & "sfc /scannow", "", @SW_MAXIMIZE, 0x10000) Local $cmdpid = ShellExecute("cmd") Local $waitpid = 0 While Not ProcessExists($cmdpid) $waitpid = $waitpid + 1 Sleep(100) If $waitpid = 100 Then gollog("exiting with no CMD process ") ExitLoop EndIf WEnd WinActivate("[CLASS:ConsoleWindowClass]", "") Send("sfc /scannow") MsgBox(64, "Computer Plucker", "press enter on the CMD when you feel it's the right time...") Else Gollog("abort running SFC /scannow") EndIf Case $RecycleItem Recycle() Case $AboutCPU To $AboutMouse HardwareGUI(GUICtrlRead($iMsg, 1)) Case $SystemProperties ShellExecute("sysdm.cpl") Case $Registry ShellExecute("regedit.exe") Case $taskschd ShellExecute("taskschd.msc") Case $eventviewer ShellExecute("eventvwr") Case $TaskMGR ShellExecute("taskmgr.exe") Case $DeviceManager ShellExecute("devmgmt.msc") Case $Services ShellExecute("services.msc") Case $FolderProperties Run('control folders') Case $FindProductKeys MsgBox(0, "Product Keys", "- - - - - - - - - - - - - W I N D O W S - - - - - - - - - - - - -" & @CRLF & _ "Windows Key : " & @TAB & _DecodeProductKey("Windows") & @CRLF & _ "Windows Key 4 : " & @TAB & _DecodeProductKey("Windows_DPid4") & @CRLF & _ "Windows Default : " & @TAB & _DecodeProductKey("Windows_Def") & @CRLF & _ "Windows Default 4 : " & @TAB & _DecodeProductKey("Windows_Def_DPid4") & @CRLF & @CRLF & _ "- - - - - - - - - - - - - - - O F F I C E - - - - - - - - - - - - - - -" & @CRLF & _ "Office XP Key : " & @TAB & _DecodeProductKey("Office XP") & @CRLF & _ "Office 2003 Key : " & @TAB & _DecodeProductKey("Office 2003") & @CRLF & _ "Office 2007 Key : " & @TAB & _DecodeProductKey("Office 2007") & @CRLF & _ "Office 2010 x86 Key: " & @TAB & _DecodeProductKey("Office 2010 x86") & @CRLF & _ "Office 2010 x64 Key: " & @TAB & _DecodeProductKey("Office 2010 x64") & @CRLF & _ "Office 2013 x86 Key: " & @TAB & _DecodeProductKey("Office 2013 x86") & @CRLF & _ "Office 2013 x64 Key: " & @TAB & _DecodeProductKey("Office 2013 x64")) Case $CPSystem Run("explorer.exe shell:::{BB06C0E4-D293-4f75-8A90-CB05B6477EEE}") Case $ninite ShellExecute("https://ninite.com/") Case $malwarebytes ShellExecute("https://www.malwarebytes.com/") Case $nirsoft ShellExecute("https://www.nirsoft.net/") Case $TestNetSpeed $oIE = _IECreate("http://www.scanmyspeed.com/", 0, 0, 1) $oBegin = _IEGetObjById($oIE, "scanstart") _IEAction($oBegin, "click") $CountDown = 30 Do SplashTextOn("Splash", "Testing Please wait..." & @CRLF & $CountDown, 400, 115, -1, -1, 35, -1, 14, 600) $CountDown -= 1 $oDown = _IEGetObjById($oIE, "scandmbit") $sDown = _IEPropertyGet($oDown, "innerText") $oUp = _IEGetObjById($oIE, "scanumbit") $sUp = _IEPropertyGet($oUp, "innerText") GUICtrlSetData($NetTest, "DL: " & $sDown & " Mbps UL: " & $sUp & " Mbps") Sleep(1000) SplashOff() Until $CountDown = 0 $oDown = _IEGetObjById($oIE, "scandmbit") $sDown = _IEPropertyGet($oDown, "innerText") $oUp = _IEGetObjById($oIE, "scanumbit") $sUp = _IEPropertyGet($oUp, "innerText") GUICtrlSetData($NetTest, "DL: " & $sDown & " Mbps UL: " & $sUp & " Mbps") _IEQuit($oIE) Case $ExecKill ProcessClose(GUICtrlRead($Kill)) GUICtrlSetData($Kill, "Atempting to Kill " & GUICtrlRead($Kill) & "...") Sleep(250) GUICtrlSetData($Kill, "") Case $ExecKillPID ProcessClose(GUICtrlRead($KillPID)) GUICtrlSetData($KillPID, "Atempting to Kill " & GUICtrlRead($KillPID) & "...") Sleep(250) GUICtrlSetData($KillPID, "") Case $ProcessList $PList = ProcessList() AdlibRegister("_ArrayDisplay_AddIcon", 100) GUICtrlSetState($ProcessList, $GUI_DISABLE) ;_ArrayDisplay($PList, "Running Processes", -1, 0, "", "|", "#|Process|ID") ; <<<<< this crashes -thaks @argumentum _ArrayDisplay($PList, "Running Processes", "", 0, "|", "Process|ID") GUICtrlSetState($ProcessList, $GUI_ENABLE) AdlibUnRegister("_ArrayDisplay_AddIcon") ; just in case "_ArrayDisplay_AddIcon()" failed Case $Submit ShellExecute(_WinAPI_ExpandEnvironmentStrings(GUICtrlRead($RUN)), "", "", "open") GUICtrlSetData($RUN, "Starting " & GUICtrlRead($RUN) & "...") Sleep(250) GUICtrlSetData($RUN, "") Case $EditSubmit ShellExecute(_WinAPI_ExpandEnvironmentStrings(GUICtrlRead($Edit)), "", "", "edit") GUICtrlSetData($Edit, "") Case $Browse $BrowseFile = FileOpenDialog("Choose Program to Run", @ScriptDir, "Program (*.exe;*.bat;*.com;*.pif)", 1) If Not @error Then Run($BrowseFile) Case $EditBrowse $EditFile = FileOpenDialog("Choose File to Edit", @ScriptDir, "All Files (*.*)|Autoit Script (*.au3)|Batch File (*.bat)|Settings File (*.ini;*inf;*reg)|Text File (*.txt;*rtf;*.log)|Web Page (*.html;*.htm;*.php)|Word File (*.doc)", 1) If Not @error Then ShellExecute($EditFile, "", "", "edit") Case $DeleteBrowse $DeleteFile = FileOpenDialog("Choose File to Edit", @ScriptDir, "All Files (*.*)|Autoit Script (*.au3)|Batch File (*.bat)|Settings File (*.ini;*inf;*reg)|Text File (*.txt;*rtf;*.log)|Web Page (*.html;*.htm;*.php)|Word File (*.doc)", 1) If Not @error Then GUICtrlSetData($Delete, $DeleteFile) Case $DeleteSubmit $File = GUICtrlRead($Delete) If FileExists($File) Then If StringRight($File, 4) = ".exe" Then $nCount = StringInStr($File, "\", 0, -1) $sFile = StringTrimLeft($File, $nCount) Do ProcessClose($sFile) Until Not ProcessExists($sFile) EndIf If Not AdjustPrivilege(8) Then MsgBox(0, "", "Error!") If Not AdjustPrivilege(9) Then MsgBox(0, "", "Error!") If Not AdjustPrivilege(20) Then MsgBox(0, "", "Error!") $hADVAPI32 = DllOpen("advapi32.dll") $hKERNEL32 = DllOpen("kernel32.dll") TakeOwn($File, 1) FileDelete($File) DllClose($hADVAPI32) DllClose($hKERNEL32) If FileExists($File) Then MsgBox(48, "Error", "Could not delete file!") Else MsgBox(48, "Error", "Could not find file/folder!") EndIf GUICtrlSetData($Delete, "") EndSwitch ;ram timer If TimerDiff($RefreshTimerA) >= 1000 Then $RefreshTimerA = TimerInit() DateTime() $RAMUsage = MemGetStats() $RAMCollected = $RAMCollected + 1 $RAMTotal = Round($RAMUsage[0] + $RAMTotal) $AvgRAM = Round($RAMTotal / $RAMCollected) GUICtrlSetData($AvgRAMBar, $AvgRAM) GUICtrlSetData($RAM, Round($RAMUsage[0], 0)) GUICtrlSetData($RAMLabel, Round($RAMUsage[0], 0) & "%") GUICtrlSetData($TimeLabel, $Date & " " & $Time) EndIf ;cpu timer If $hFlag = 1 Then ;<== If host is connected If TimerDiff($timer) > $timeout Then UpdateGraph() EndIf WEnd Func Wi3MenuItem($hMenuitem) ; Click item to tab... Switch $hMenuitem Case $hMain If $hFlag = 1 Then CpuExit() $hFlag = 0 EndIf GUICtrlSetState($MainTab, 16) Case $hDrives If $hFlag = 1 Then CpuExit() $hFlag = 0 EndIf GUICtrlSetState($DrivesTab, 16) Case $hCPURAM GUICtrlSetState($CPURAMTab, 16) _GDIPlus_Startup() $hImage = _GDIPlus_BitmapCreateFromScan0($width, $height) $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage) _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2) ;create gradient from green over yellow to red using HSL values Global $aColors[Ceiling($height)] Local $iSteps = 120 / UBound($aColors), $i, $h For $h = 120 To 0 Step -$iSteps $aColors[$i] = 0xFF000000 + HSLToRGB((120 + $h) / 360, 1, 0.5) $i += 1 Next ;create one texture which will used to draw the CPU usage accordingly Global $hBmp = _GDIPlus_BitmapCreateFromScan0($width, $height), $hGfx = _GDIPlus_ImageGetGraphicsContext($hBmp) $hBrush = _GDIPlus_BrushCreateSolid() For $i = 0 To UBound($aColors) - 1 _GDIPlus_BrushSetSolidColor($hBrush, $aColors[$i]) _GDIPlus_GraphicsFillRect($hGfx, 0, $i, $width, $height, $hBrush) Next $hTexture = _GDIPlus_TextureCreate($hBmp) _GDIPlus_ImageDispose($hBmp) _GDIPlus_GraphicsDispose($hGfx) _GDIPlus_BrushDispose($hBrush) For $i = 1 To 20 $bars[$i] = GUICtrlCreatePic("", 105 + ($i - 1) * 5, 10, 5, $height) Next ConnectWMI() Case $hNetwork If $hFlag = 1 Then CpuExit() $hFlag = 0 EndIf GUICtrlSetState($NetworkTab, 16) Case $hEtc If $hFlag = 1 Then CpuExit() $hFlag = 0 EndIf GUICtrlSetState($EtcTab, 16) Case $hLog If $hFlag = 1 Then CpuExit() $hFlag = 0 EndIf GUICtrlSetState($LOGTab, 16) EndSwitch Return 1 EndFunc ;==>Wi3MenuItem #EndRegion - Main Loop - #Region -data export management- Func startmode() If $CmdLine[0] > 0 Then Select Case $CmdLine[1] = "dataini" $startop = "dataini" ;only write a dataini Case $CmdLine[1] = "datainiupload" $startop = "datainiupload" Case $CmdLine[1] = "deploy" $startop = "deploy" EndSelect EndIf ;If FileExists(@ScriptDir & "\" & "CPINI.TXT") Then ; $onlywritedataini = $onlywritedataini & "|filepresent" ;EndIf EndFunc ;==>startmode Func writeCSV() Local $machineSN = StringStripWS($BIOS[1][16], 3) If Not FileExists($folderdataINI) Then DirCreate($folderdataINI) $cpini = $folderdataINI & "cp_" & @YEAR & @MON & @MDAY & "_" & $machineSN & "_.ini" FileDelete($folderdataINI & "cp_" & "*" & "_.ini") ; deleted previous files ! ;Section Unique :serial, computer name Local $aSectionUnique[2][2] = [["serial", $machineSN], ["computername", @ComputerName]] IniWriteSection($cpini, "UNIQUE", $aSectionUnique, 0) ;Section Machine :manufacturer,model,cpuname,cpuid,cpuarc,cpuvendor,cpucores,cpuspeed,RAM,disk1capacity,disk1used Local $aSectionMachine[9][2] = [["manufacturer", StringStripWS($aSystemInfo[1][21], 3)], ["model", $PCmodel & " - " & StringStripWS($aSystemInfo[1][22], 3)], ["cpuname", StringStripWS($CPUInfo[2], 7)], ["cpuid", $CPUInfo[3]], ["cpuarc", @CPUArch], ["cpuvendor", $CPUInfo[4]], ["cpucores", $CPUInfo[0]], ["cpuspeed", StringFormat('%.2f', ($CPUInfo[1] / 1000)) & " GHz"], ["ram", Round($RAMUsage[1] / 1048576, 2) & " GB"]] IniWriteSection($cpini, "MACHINE", $aSectionMachine, 0) ;Section User : username,domain,DNSdomain,logonServer Local $aSectionUser[4][2] = [["username", @UserName], ["domain", @LogonDomain], ["DNSdomain", @LogonDNSDomain], ["logonServer", @LogonServer]] IniWriteSection($cpini, "USER", $aSectionUser, 0) ;Section OS : OSver, OSarch, OSbuild, OSlang Local $aSectionOS[4][2] = [["OSver", $OSVersion], ["OSarch", @OSArch], ["OSbuild", $OSs[1][2]], ["OSlang", $Language]] IniWriteSection($cpini, "OS", $aSectionOS, 0) ;Section Disks: username,domain,DNSdomain,logonServer Local $aSectionDrives[0][2] Local $alldrives = "" For $i = 1 To $aDrive[0] If Not $DriveType[$i] = "" Then If $i > 1 Then $alldrives = $alldrives & "-" $alldrives = $alldrives & StringUpper($aDrive[$i]) & ";" & $DriveType[$i] & ";" & DriveSpaceTotal($aDrive[$i] & "\") & ";" & DriveSpaceFree($aDrive[$i] & "\") EndIf Next _ArrayAdd($aSectionDrives, "Drives" & "|" & $alldrives) IniWriteSection($cpini, "DRIVES", $aSectionDrives, 0) ;Section network:localIP1,localIP2,localIP3,localIP4,publicIP,GW,adapter,mac Local $aSectionNetwork[8][2] = [["localIP1", @IPAddress1], ["localIP2", @IPAddress2], ["localIP3", @IPAddress3], ["localIP4", @IPAddress4], ["publicIP", $PublicIP], ["GW", $IPDetail[2]], ["adapter", $adaptorData], ["mac", $IPDetail[1]]] IniWriteSection($cpini, "NETWORK", $aSectionNetwork, 0) Gollog("new .ini data written") EndFunc ;==>writeCSV Func CPiniread() ; search for ini data file Local $datainisearch = FileFindFirstFile($folderdataINI & "cp_" & "*" & "_.ini") If $datainisearch = -1 Then ;Gollog("Error: No data ini file found") Return False EndIf ; Assign a Local variable the empty string which will contain the files names found. Local $sFileName = "", $iResult = 0 While 1 $tempdatainifile = FileFindNextFile($datainisearch) ; If there is no more file matching the search. If @error Then ExitLoop $datainifile = $tempdatainifile ; Display the file name. ; $iResult = MsgBox(BitOR($MB_SYSTEMMODAL, $MB_OKCANCEL), "", "File: " & $datainifile) ; If $iResult <> $IDOK Then ExitLoop ; If the user clicks on the cancel/close button. WEnd FileClose($datainisearch) Local $ainiSections = IniReadSectionNames($folderdataINI & $datainifile) ;_ArrayDisplay($ainiSections) Local $adatarecord[0] Local $towrite2record = "" For $i = 1 To $ainiSections[0] $athisSection = IniReadSection($folderdataINI & $datainifile, $ainiSections[$i]) For $y = 1 To $athisSection[0][0] $towrite2record = Ncrypt($cryptop, StringToBinary($athisSection[$y][1]), $cryptstring) _ArrayAdd($adatarecord, $towrite2record) Next Next ;_ArrayDisplay($adatarecord) Return $adatarecord EndFunc ;==>CPiniread Func initask() ; Connect to the Task Scheduler Service $oService = _TS_Open() If $oService = 0 Then Gollog("error task " & @error & " " & @extended) $sFolder = "autoit" _TS_FolderCreate($oService, $sFolder) ;XML pre-exported File $aSourceTaskXML = $folderdataINI & "ComputerPlucker_dataini_task.xml" $oTask = _TS_TaskImportXML($oService, 1, $aSourceTaskXML) _TS_Wrapper_TaskRegister($oService, "autoit", "ComputerPlucker_dataini", $oTask, Default, Default, $TASK_LOGON_INTERACTIVE_TOKEN) $oService = _TS_Close Gollog("task ini creation performed") EndFunc ;==>initask Func initaskupload() ; Connect to the Task Scheduler Service $oService = _TS_Open() If $oService = 0 Then Gollog("error task " & @error) $sFolder = "autoit" _TS_FolderCreate($oService, $sFolder) ;XML pre-exported File $aSourceTaskXML = $folderdataINI & "ComputerPlucker_datainiupload_task.xml" $oTask = _TS_TaskImportXML($oService, 1, $aSourceTaskXML) _TS_Wrapper_TaskRegister($oService, "autoit", "ComputerPlucker_dataini_upload", $oTask, Default, Default, $TASK_LOGON_INTERACTIVE_TOKEN) $oService = _TS_Close Gollog("task ini upload creation performed") EndFunc ;==>initaskupload Func send2mysql() ; #cs NOTES -<<<<<<<<<<<<<<- send to a mysql DB, you can use an online DB, free or not table structure: ALTER TABLE `Plucker` add column `serial` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `computername` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `manufacturer` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `model` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `cpuname` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `cpuid` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `cpuarc` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `cpuvendor` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `cpucores` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `cpuspeed` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `ram` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `username` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `domain` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `dnsdomain` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `logonserver` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `osver` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `osarch` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `osbuild` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `oslang` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `drives` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `localip1` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `localip2` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `localip3` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `localip4` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `publicip` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `gw` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `adapter` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `mac` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `date` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, add column `groupid` TINYTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL; ;drives is type TEXT because crypted can be long with a lot of drives... #ce Gollog("Start send data to DB") Local $ainisql = extractINI() $mysqlhost = $ainisql[0][1] $mysqlport = $ainisql[1][1] $mysqldb = $ainisql[2][1] $mysqluser = $ainisql[3][1] $mysqlpsw = $ainisql[4][1] Local $adatarecord = CPiniread() If $adatarecord = False Then Gollog("Error no .ini data file found ?") Return False EndIf Local $string2write = "" For $i = 0 To UBound($adatarecord) - 1 If $i > 0 Then $string2write = $string2write & "," $string2write = $string2write & "'" & $adatarecord[$i] & "'" Next $string2write = $string2write & ",'" & Ncrypt($cryptop, @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC, $cryptstring) & "','" & Ncrypt($cryptop, $groupstring, $cryptstring) & "'" If Not _EzMySql_Startup() Then Gollog("Error Starting MySql: " & @error & @CR & "Error string: " & _EzMySql_ErrMsg()) funcExit() Else EndIf If Not _EzMySql_Open($mysqlhost, $mysqluser, $mysqlpsw, $mysqldb, $mysqlport) Then GOLLOG("Error opening Database: " & @error & @CR & "Error string: " & _EzMySql_ErrMsg()) funcExit() Else GOLLog("DB connected") EndIf Local $sMySqlStatement $sMySqlStatement &= "INSERT INTO Plucker (serial,computername,manufacturer,model,cpuname,cpuid,cpuarc,cpuvendor,cpucores,cpuspeed,ram,username,domain,dnsdomain,logonserver,osver,osarch,osbuild,oslang,drives,localip1,localip2,localip3,localip4,publicip,gw,adapter,mac,date,groupid) VALUES (" & $string2write & ");" If Not _EzMySql_Exec($sMySqlStatement) Then Gollog("Error in insert in DB Table: " & @error & @CR & "Error string: " & _EzMySql_ErrMsg()) Else Gollog("DB insert OK") FileDelete($folderdataINI & "cp_" & "*" & "_.ini") EndIf _EzMySql_Close() _EzMySql_ShutDown() EndFunc ;==>send2mysql #EndRegion -data export management- #Region - auto deploy - uninstall Func autodeploy() ; first deploy Local $cpexe = "ComputerPlucker.exe" If Not FileExists($folderdataINI) Then If DirCreate($folderdataINI) Then ; GOLLOG("-> autodeploy in " & $folderdataINI) EndIf ;GOLLOG("copy exe in " & $folderdataINI) FileCopy(@AutoItExe, $folderdataINI & $cpexe, 1) If Not FileExists(@DesktopDir & "\Computer Plucker.lnk") Then ; GOLLOG("desktop link creation...") FileCreateShortcut($folderdataINI & $cpexe, @DesktopDir & "\Computer Plucker.lnk") EndIf DirCreate($folderdataINI & "icons\ComputerPlucker\") ;complementary files extraction ;icons _youngchicken_ico(True, $folderdataINI & "icons\ComputerPlucker\") _hard_disk_drive_pie_ico(True, $folderdataINI & "icons\ComputerPlucker\") _notepad_file_gear_ico(True, $folderdataINI & "icons\ComputerPlucker\") _ram_drive_ico(True, $folderdataINI & "icons\ComputerPlucker\") _rj_jack_ico(True, $folderdataINI & "icons\ComputerPlucker\") _search_laptop_1_ico(True, $folderdataINI & "icons\ComputerPlucker\") _tools_gear(True, $folderdataINI & "icons\ComputerPlucker\") ;taskS definition _ComputerPlucker_dataini_task_xml(True, $folderdataINI) _ComputerPlucker_datainiupload_task_xml(True, $folderdataINI) ; bye bye old, start up the "new" Local $sCmdFile ; phoenix modificata NON è quella standard di autoupdate FileDelete(@TempDir & "\phoenix.bat") $sCmdFile = 'ping 127.0.0.1 -n 2 > NUL' & @CRLF _ & ':loop' & @CRLF _ & 'del "' & @ScriptFullPath & '"' & @CRLF _ & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _ & 'start ' & $folderdataINI & $cpexe & @CRLF _ & 'del %0' FileWrite(@TempDir & "\phoenix.bat", $sCmdFile) ; GOLLOG("program is closing, see ya in deployed version...") Sleep(1000) Run(@TempDir & "\phoenix.bat", @TempDir, @SW_HIDE) Exit ; exit and real update EndIf EndFunc ;==>autodeploy Func autouninstall() ; uninstall Local $cpexe = "ComputerPlucker.exe" If Not FileExists($folderdataINI) Then Gollog("? Uninstall requested but program not installed ?") Else Gollog(" Performing Uninstall..") Local $sCmdFile ; phoenix modificata NON è quella standard di autoupdate FileDelete(@DesktopDir & "\Computer Plucker.lnk") FileDelete(@TempDir & "\phoenix.bat") $sCmdFile = 'ping 127.0.0.1 -n 2 > NUL' & @CRLF _ & ':loop' & @CRLF _ & 'rd /S /Q "' & $folderdataINI & '"' & @CRLF _ & 'if exist "' & $folderdataINI & '" goto loop' & @CRLF _ & 'del %0' FileWrite(@TempDir & "\phoenix.bat", $sCmdFile) ; GOLLOG("program is closing, see ya in deployed version...") Sleep(1000) Run(@TempDir & "\phoenix.bat", @TempDir, @SW_HIDE) funcExit() ; exit and real update EndIf EndFunc ;==>autouninstall #EndRegion - auto deploy - uninstall #Region - Language - Func _GLI() Local $LCID = 0 $sText = __GLI_Get($LCID, 92) If $sText = "" Then $sText = __GLI_Get($LCID, 89) & "-" & __GLI_Get($LCID, 90) $sText &= ' ' & __GLI_Get($LCID, 2) Return $sText EndFunc ;==>_GLI Func __GLI_Get($iLCID_Dec, $iIndex) Local $aTemp = DllCall('kernel32.dll', 'int', 'GetLocaleInfoW', 'ulong', $iLCID_Dec, 'dword', $iIndex, 'wstr', '', 'int', 2048) Return $aTemp[3] EndFunc ;==>__GLI_Get #EndRegion - Language - #Region - Drive Info - Func DriveInfo() For $i = 1 To $aDrive[0] $DriveType[$i] = DriveGetType(StringUpper($aDrive[$i]) & "\") $DriveFree[$i] = Round((DriveSpaceTotal(StringUpper($aDrive[$i]) & "\") - DriveSpaceFree(StringUpper($aDrive[$i]) & "\")) / DriveSpaceTotal(StringUpper($aDrive[$i]) & "\") * 100, 0) GUICtrlSetData($DriveFreePos[$i], $DriveFree[$i]) GUICtrlSetData($DriveTypeLabel[$i], $DriveType[$i]) Next EndFunc ;==>DriveInfo Func DriveInfoGUI() Opt("GUIOnEventMode", 1) GUISetState(@SW_HIDE, $MainGUI) $DriveInfoGUI = GUICreate("Drive Info", 300, 275, -1, -1) GUISetOnEvent($GUI_EVENT_CLOSE, "CloseDriveGUI") GUICtrlCreateLabel("Select a Drive's Drive Letter for Its Info:", 10, 10, 200, 20) $DriveLetter = GUICtrlCreateCombo("", 220, 10, 70, 20, 0x0003) GUICtrlSetOnEvent(-1, "DriveInfoLoad") For $i = 1 To $aDrive[0] GUICtrlSetData($DriveLetter, StringUpper($aDrive[$i]) & "\") Next GUICtrlCreateLabel("Label:", 10, 40, 80, 20) $DriveLabel = GUICtrlCreateLabel("", 100, 40, 100, 20, 0x1C01) GUICtrlCreateLabel("Status:", 10, 70, 80, 20) $DriveStatus = GUICtrlCreateLabel("", 100, 70, 100, 20, 0x1C01) GUICtrlCreateLabel("File System:", 10, 100, 80, 20) $DriveFileSystem = GUICtrlCreateLabel("", 100, 100, 100, 20, 0x1C01) GUICtrlCreateLabel("Type:", 10, 130, 80, 20) $DriveInfoType = GUICtrlCreateLabel("", 100, 130, 100, 20, 0x1C01) GUICtrlCreateLabel("Size:", 10, 160, 80, 20) $DriveSize = GUICtrlCreateLabel("", 100, 160, 100, 20, 0x1C01) GUICtrlCreateLabel("Serial Number:", 10, 190, 80, 20) $DriveSerial = GUICtrlCreateInput("", 100, 190, 100, 20, 0x0801) GUICtrlCreateLabel("Temperature:", 10, 220, 80, 20) $DriveTemp = GUICtrlCreateLabel("", 100, 220, 100, 20, 0x1C01) $DriveProgress = GUICtrlCreateProgress(10, 250, 280, 20) GUISetState(@SW_SHOW) While WinExists($DriveInfoGUI) Sleep(10) WEnd EndFunc ;==>DriveInfoGUI Func DriveInfoLoad() $DriveInfoLoad = GUICtrlRead($DriveLetter) GUICtrlSetData($DriveProgress, Round((DriveSpaceTotal($DriveInfoLoad) - DriveSpaceFree($DriveInfoLoad)) / DriveSpaceTotal($DriveInfoLoad) * 100, 0)) GUICtrlSetData($DriveLabel, DriveGetLabel($DriveInfoLoad)) If DriveGetLabel($DriveInfoLoad) = "" Then GUICtrlSetData($DriveLabel, "No Label Set") GUICtrlSetData($DriveInfoType, DriveGetType($DriveInfoLoad) & " Device") GUICtrlSetData($DriveFileSystem, DriveGetFileSystem($DriveInfoLoad)) GUICtrlSetData($DriveStatus, DriveStatus($DriveInfoLoad)) $HDDSize = Round(DriveSpaceTotal($DriveInfoLoad), 0) If $HDDSize < 1024 Then GUICtrlSetData($DriveSize, "< 1 GB") Else GUICtrlSetData($DriveSize, Round($HDDSize / 1024) & " GB") EndIf GUICtrlSetData($DriveSerial, DriveGetSerial($DriveInfoLoad)) If GUICtrlRead($DriveInfoType) = "Fixed Device" Then $tmp = _WMI_DriveTemperature() GUICtrlSetData($DriveTemp, $tmp & ' °C') If $tmp >= 40 Then GUICtrlSetBkColor($DriveTemp, 0xff0000) If $tmp < 40 Then GUICtrlSetBkColor($DriveTemp, 0x00ff00) Else GUICtrlSetData($DriveTemp, 'N/A') GUICtrlSetBkColor($DriveTemp, 0xf0f0f0) EndIf If DriveStatus($DriveInfoLoad) = "INVALID" Or $DriveInfoLoad = "" Then GUICtrlSetData($DriveLabel, "N/A") GUICtrlSetData($DriveInfoType, "N/A") GUICtrlSetData($DriveFileSystem, "N/A") GUICtrlSetData($DriveSize, "N/A") GUICtrlSetData($DriveSerial, "N/A") GUICtrlSetData($DriveProgress, 0) EndIf EndFunc ;==>DriveInfoLoad Func CloseDriveGUI() GUIDelete($DriveInfo) GUISetState(@SW_SHOW, $MainGUI) Opt("GUIOnEventMode", 0) EndFunc ;==>CloseDriveGUI #EndRegion - Drive Info - #Region - IP - Func _IPDetails() Local $oWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & "." & "\root\cimv2") Local $oColItems = $oWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True", "WQL", 0x30), $aReturn[5] = [4] If IsObj($oColItems) Then For $oObjectItem In $oColItems If $oObjectItem.IPAddress(0) == @IPAddress1 Then $aReturn[1] = $oObjectItem.MACAddress $aReturn[2] = $oObjectItem.DefaultIPGateway(0) EndIf Next Return $aReturn EndIf Return SetError(1, 0, $aReturn) EndFunc ;==>_IPDetails Func _GetPublicIP() Local $aReturn, $bRead, $sRead $bRead = InetRead("http://checkip.amazonaws.com/") $sRead = BinaryToString($bRead) If StringInStr($sRead, ".", 0, 3) Then Return $sRead EndIf $bRead = InetRead("http://checkip.dyndns.org/") $sRead = BinaryToString($bRead) $aReturn = StringRegExp($sRead, '(?s)(?i)Current IP Address: (.*?)', 3) If @error = 0 Then Return $aReturn[0] Else Return SetError(1, 0, -1) EndIf EndFunc ;==>_GetPublicIP #EndRegion - IP - #Region - Computer Get - Func HardwareGUI($Equip) Dim $Battery, $BIOS, $Keyboard, $HDDInfo, $Memory, $Monitor, $Motherboard, $Mouse, $NetworkCards, $SoundCards, $Processors, $System, $VideoCards ; , $OSs GUISetState(@SW_HIDE, $MainGUI) $HardwareGUI = GUICreate($Equip & " Info", 300, 295, -1, -1, BitOR($WS_BORDER, $WS_POPUP), $WS_EX_TOPMOST) $Close = GUICtrlCreateButton("X", 280, 0, 20, 20) GUICtrlSetFont(-1, 12, 800) $HardwareLabel = GUICtrlCreateLabel($Equip & " Info", 0, 0, 280, 20, 0x01) GUICtrlSetFont(-1, 12, 600) $AboutEditbox = GUICtrlCreateEdit("", 0, 20, 300, 255, BitOR($ES_WANTRETURN, $WS_VSCROLL, $ES_AUTOVSCROLL, $ES_READONLY)) GUISetState(@SW_SHOW) GUICtrlSetState($AboutEditbox, @SW_DISABLE) Switch $Equip Case "Battery" _ComputerGetBattery($Battery) For $i = 1 To $Battery[0][0] Step 1 GUICtrlSetData($AboutEditbox, "Name: " & $Battery[$i][0] & @CRLF & _ "Availability: " & $Battery[$i][1] & @CRLF & _ "BatteryRechargeTime: " & $Battery[$i][2] & @CRLF & _ "BatteryStatus: " & $Battery[$i][3] & @CRLF & _ "Description: " & $Battery[$i][4] & @CRLF & _ "Chemistry: " & $Battery[$i][5] & @CRLF & _ "ConfigManagerErrorCode: " & $Battery[$i][6] & @CRLF & _ "ConfigManagerUserConfig: " & $Battery[$i][7] & @CRLF & _ "CreationClassName: " & $Battery[$i][8] & @CRLF & _ "DesignCapacity: " & $Battery[$i][9] & @CRLF & _ "DesignVoltage: " & $Battery[$i][10] & @CRLF & _ "DeviceID: " & $Battery[$i][11] & @CRLF & _ "ErrorCleared: " & $Battery[$i][12] & @CRLF & _ "ErrorDescription: " & $Battery[$i][13] & @CRLF & _ "EstimatedChargeRemaining: " & $Battery[$i][14] & @CRLF & _ "EstimatedRunTime: " & $Battery[$i][15] & @CRLF & _ "ExpectedBatteryLife: " & $Battery[$i][16] & @CRLF & _ "ExpectedLife: " & $Battery[$i][17] & @CRLF & _ "FullChargeCapacity: " & $Battery[$i][18] & @CRLF & _ "LastErrorCode: " & $Battery[$i][19] & @CRLF & _ "MaxRechargeTime: " & $Battery[$i][20] & @CRLF & _ "PNPDeviceID: " & $Battery[$i][21] & @CRLF & _ "PowerManagementCapabilities: " & $Battery[$i][22] & @CRLF & _ "PowerManagementSupported: " & $Battery[$i][23] & @CRLF & _ "SmartBatteryVersion: " & $Battery[$i][24] & @CRLF & _ "Status: " & $Battery[$i][25] & @CRLF & _ "StatusInfo: " & $Battery[$i][26] & @CRLF & _ "SystemCreationClassName: " & $Battery[$i][27] & @CRLF & _ "SystemName: " & $Battery[$i][28] & @CRLF & _ "TimeOnBattery: " & $Battery[$i][29] & @CRLF & _ "TimeToFullCharge: " & $Battery[$i][30] & @CRLF & @CRLF, 1) Next Case "BIOS" _ComputerGetBIOS($BIOS) For $i = 1 To $BIOS[0][0] Step 1 GUICtrlSetData($AboutEditbox, "Name: " & $BIOS[$i][0] & @CRLF & _ "Status: " & $BIOS[$i][1] & @CRLF & _ "BIOS Characteristics: " & $BIOS[$i][2] & @CRLF & _ "BIOS Version: " & $BIOS[$i][3] & @CRLF & _ "Description: " & $BIOS[$i][4] & @CRLF & _ "Build Number: " & $BIOS[$i][5] & @CRLF & _ "Code Set: " & $BIOS[$i][6] & @CRLF & _ "Current Language: " & $BIOS[$i][7] & @CRLF & _ "Identification Code: " & $BIOS[$i][8] & @CRLF & _ "Installable Languages: " & $BIOS[$i][9] & @CRLF & _ "Language Edition: " & $BIOS[$i][10] & @CRLF & _ "List of Languages: " & $BIOS[$i][11] & @CRLF & _ "Manufacturer: " & $BIOS[$i][12] & @CRLF & _ "Other Target OS: " & $BIOS[$i][13] & @CRLF & _ "Primary BIOS: " & $BIOS[$i][14] & @CRLF & _ "Release Date: " & $BIOS[$i][15] & @CRLF & _ "Serial Number: " & $BIOS[$i][16] & @CRLF & _ "SM BIOS BIOS Version: " & $BIOS[$i][17] & @CRLF & _ "SM BIOS Major Version: " & $BIOS[$i][18] & @CRLF & _ "SM BIOS Minor Version: " & $BIOS[$i][19] & @CRLF & _ "SM BIOS Present: " & $BIOS[$i][20] & @CRLF & _ "Software Element ID: " & $BIOS[$i][21] & @CRLF & _ "Software Element State: " & $BIOS[$i][22] & @CRLF & _ "Target Operating System: " & $BIOS[$i][23] & @CRLF & _ "Version: " & $BIOS[$i][24] & @CRLF & @CRLF, 1) Next Case "Hard Drive" _ComputerGetHDD($HDDInfo) For $i = 1 To $HDDInfo[0][0] Step 1 GUICtrlSetData($AboutEditbox, "Name: " & $HDDInfo[$i][0] & @CRLF & _ "Availability: " & $HDDInfo[$i][1] & @CRLF & _ "BytesPerSector: " & $HDDInfo[$i][2] & @CRLF & _ "Capabilities: " & $HDDInfo[$i][3] & @CRLF & _ "CapabilityDescriptions: " & $HDDInfo[$i][4] & @CRLF & _ "Caption: " & $HDDInfo[$i][5] & @CRLF & _ "CompressionMethod: " & $HDDInfo[$i][6] & @CRLF & _ "ConfigManagerErrorCode: " & $HDDInfo[$i][7] & @CRLF & _ "ConfigManagerUserConfig: " & $HDDInfo[$i][8] & @CRLF & _ "CreationClassName: " & $HDDInfo[$i][9] & @CRLF & _ "DefaultBlockSize: " & $HDDInfo[$i][10] & @CRLF & _ "Description: " & $HDDInfo[$i][11] & @CRLF & _ "DeviceID: " & $HDDInfo[$i][12] & @CRLF & _ "ErrorCleared: " & $HDDInfo[$i][13] & @CRLF & _ "ErrorDescription: " & $HDDInfo[$i][14] & @CRLF & _ "ErrorMethodology: " & $HDDInfo[$i][15] & @CRLF & _ "FirmwareRevision: " & $HDDInfo[$i][16] & @CRLF & _ "Index: " & $HDDInfo[$i][17] & @CRLF & _ "InstallDate: " & $HDDInfo[$i][18] & @CRLF & _ "InterfaceType: " & $HDDInfo[$i][19] & @CRLF & _ "LastErrorCode: " & $HDDInfo[$i][20] & @CRLF & _ "Manufacturer: " & $HDDInfo[$i][21] & @CRLF & _ "MaxBlockSize: " & $HDDInfo[$i][22] & @CRLF & _ "MaxMediaSize: " & $HDDInfo[$i][23] & @CRLF & _ "MediaLoaded: " & $HDDInfo[$i][24] & @CRLF & _ "MediaType: " & $HDDInfo[$i][25] & @CRLF & _ "MinBlockSize: " & $HDDInfo[$i][26] & @CRLF & _ "Model: " & $HDDInfo[$i][27] & @CRLF & _ "NeedsCleaning: " & $HDDInfo[$i][28] & @CRLF & _ "NumberOfMediaSupported: " & $HDDInfo[$i][29] & @CRLF & _ "Partitions: " & $HDDInfo[$i][30] & @CRLF & _ "PNPDeviceID: " & $HDDInfo[$i][31] & @CRLF & _ "PowerManagementCapabilities: " & $HDDInfo[$i][32] & @CRLF & _ "PowerManagementSupported: " & $HDDInfo[$i][33] & @CRLF & _ "SCSIBus: " & $HDDInfo[$i][34] & @CRLF & _ "SCSILogicalUnit: " & $HDDInfo[$i][35] & @CRLF & _ "SCSIPort: " & $HDDInfo[$i][36] & @CRLF & _ "SCSITargetId: " & $HDDInfo[$i][37] & @CRLF & _ "SectorsPerTrack: " & $HDDInfo[$i][38] & @CRLF & _ "SerialNumber: " & $HDDInfo[$i][39] & @CRLF & _ "Signature: " & $HDDInfo[$i][40] & @CRLF & _ "Size: " & $HDDInfo[$i][41] & @CRLF & _ "Status: " & $HDDInfo[$i][42] & @CRLF & _ "StatusInfo: " & $HDDInfo[$i][43] & @CRLF & _ "SystemCreationClassName: " & $HDDInfo[$i][44] & @CRLF & _ "SystemName: " & $HDDInfo[$i][45] & @CRLF & _ "TotalCylinders: " & $HDDInfo[$i][46] & @CRLF & _ "TotalHeads: " & $HDDInfo[$i][47] & @CRLF & _ "TotalSectors: " & $HDDInfo[$i][48] & @CRLF & _ "TotalTracks: " & $HDDInfo[$i][49] & @CRLF & _ "TracksPerCylinder: " & $HDDInfo[$i][50] & @CRLF & @CRLF, 1) Next Case "Keyboard" _ComputerGetKeyboard($Keyboard) For $i = 1 To $Keyboard[0][0] Step 1 GUICtrlSetData($AboutEditbox, "Name: " & $Keyboard[$i][0] & @CRLF & _ "Availability: " & $Keyboard[$i][1] & @CRLF & _ "Config Manager Error Code: " & $Keyboard[$i][2] & @CRLF & _ "Config Manager User Config: " & $Keyboard[$i][3] & @CRLF & _ "Description: " & $Keyboard[$i][4] & @CRLF & _ "Creation Class Name: " & $Keyboard[$i][5] & @CRLF & _ "Device ID: " & $Keyboard[$i][6] & @CRLF & _ "Error Cleared: " & $Keyboard[$i][7] & @CRLF & _ "Error Description: " & $Keyboard[$i][8] & @CRLF & _ "Is Locked: " & $Keyboard[$i][9] & @CRLF & _ "Last Error Code: " & $Keyboard[$i][10] & @CRLF & _ "Layout: " & $Keyboard[$i][11] & @CRLF & _ "Number of Function Keys: " & $Keyboard[$i][12] & @CRLF & _ "Password: " & $Keyboard[$i][13] & @CRLF & _ "PNP Device ID: " & $Keyboard[$i][14] & @CRLF & _ "Power Management Capabilities: " & $Keyboard[$i][15] & @CRLF & _ "Power Management Supported: " & $Keyboard[$i][16] & @CRLF & _ "Status: " & $Keyboard[$i][17] & @CRLF & _ "Status Info: " & $Keyboard[$i][18] & @CRLF & _ "System Creation Class Name: " & $Keyboard[$i][19] & @CRLF & _ "System Name: " & $Keyboard[$i][20] & @CRLF & @CRLF, 1) Next Case "RAM (Memory)" _ComputerGetMemory($Memory) For $i = 1 To $Memory[0][0] Step 1 GUICtrlSetData($AboutEditbox, "Name: " & $Memory[$i][0] & @CRLF & _ "BankLabel: " & $Memory[$i][1] & @CRLF & _ "Capacity: " & $Memory[$i][2] & @CRLF & _ "CreationClassName: " & $Memory[$i][3] & @CRLF & _ "Description: " & $Memory[$i][4] & @CRLF & _ "DataWidth: " & $Memory[$i][5] & @CRLF & _ "DeviceLocator: " & $Memory[$i][6] & @CRLF & _ "FormFactor: " & $Memory[$i][7] & @CRLF & _ "HotSwappable: " & $Memory[$i][8] & @CRLF & _ "InterleaveDataDepth: " & $Memory[$i][9] & @CRLF & _ "InterleavePosition: " & $Memory[$i][10] & @CRLF & _ "Manufacturer: " & $Memory[$i][11] & @CRLF & _ "MemoryType: " & $Memory[$i][12] & @CRLF & _ "Model: " & $Memory[$i][13] & @CRLF & _ "OtherIdentifyingInfo: " & $Memory[$i][14] & @CRLF & _ "PartNumber: " & $Memory[$i][15] & @CRLF & _ "PositionInRow: " & $Memory[$i][16] & @CRLF & _ "PoweredOn: " & $Memory[$i][17] & @CRLF & _ "Removable: " & $Memory[$i][18] & @CRLF & _ "Replaceable: " & $Memory[$i][19] & @CRLF & _ "SerialNumber: " & $Memory[$i][20] & @CRLF & _ "SKU: " & $Memory[$i][21] & @CRLF & _ "Speed: " & $Memory[$i][22] & @CRLF & _ "Status: " & $Memory[$i][23] & @CRLF & _ "Tag: " & $Memory[$i][24] & @CRLF & _ "TotalWidth: " & $Memory[$i][25] & @CRLF & _ "TypeDetail: " & $Memory[$i][26] & @CRLF & _ "Version: " & $Memory[$i][27] & @CRLF & @CRLF, 1) Next Case "Monitor" _ComputerGetMonitors($Monitor) For $i = 1 To $Monitor[0][0] Step 1 GUICtrlSetData($AboutEditbox, "Name: " & $Monitor[$i][0] & @CRLF & _ "Availability: " & $Monitor[$i][1] & @CRLF & _ "Bandwidth: " & $Monitor[$i][2] & @CRLF & _ "ConfigManagerErrorCode: " & $Monitor[$i][3] & @CRLF & _ "Description: " & $Monitor[$i][4] & @CRLF & _ "ConfigManagerUserConfig: " & $Monitor[$i][5] & @CRLF & _ "CreationClassName: " & $Monitor[$i][6] & @CRLF & _ "DeviceID: " & $Monitor[$i][7] & @CRLF & _ "DisplayType: " & $Monitor[$i][8] & @CRLF & _ "ErrorCleared: " & $Monitor[$i][9] & @CRLF & _ "ErrorDescription: " & $Monitor[$i][10] & @CRLF & _ "IsLocked: " & $Monitor[$i][11] & @CRLF & _ "LastErrorCode: " & $Monitor[$i][12] & @CRLF & _ "MonitorManufacturer: " & $Monitor[$i][13] & @CRLF & _ "MonitorType: " & $Monitor[$i][14] & @CRLF & _ "PixelsPerXLogicalInch: " & $Monitor[$i][15] & @CRLF & _ "PixelsPerYLogicalInch: " & $Monitor[$i][16] & @CRLF & _ "PNPDeviceID: " & $Monitor[$i][17] & @CRLF & _ "PowerManagementCapabilities: " & $Monitor[$i][18] & @CRLF & _ "PowerManagementSupported: " & $Monitor[$i][19] & @CRLF & _ "ScreenHeight: " & $Monitor[$i][20] & @CRLF & _ "ScreenWidth: " & $Monitor[$i][21] & @CRLF & _ "Status: " & $Monitor[$i][22] & @CRLF & _ "StatusInfo: " & $Monitor[$i][23] & @CRLF & _ "SystemCreationClassName: " & $Monitor[$i][24] & @CRLF & _ "SystemName: " & $Monitor[$i][25] & @CRLF & @CRLF, 1) Next Case "Motherboard" _ComputerGetMotherboard($Motherboard) For $i = 1 To $Motherboard[0][0] Step 1 GUICtrlSetData($AboutEditbox, "Name: " & $Motherboard[$i][0] & @CRLF & _ "Availability: " & $Motherboard[$i][1] & @CRLF & _ "ConfigManagerErrorCode: " & $Motherboard[$i][2] & @CRLF & _ "ConfigManagerUserConfig: " & $Motherboard[$i][3] & @CRLF & _ "Description: " & $Motherboard[$i][4] & @CRLF & _ "CreationClassName: " & $Motherboard[$i][5] & @CRLF & _ "DeviceID: " & $Motherboard[$i][6] & @CRLF & _ "ErrorCleared: " & $Motherboard[$i][7] & @CRLF & _ "ErrorDescription: " & $Motherboard[$i][8] & @CRLF & _ "LastErrorCode: " & $Motherboard[$i][9] & @CRLF & _ "PNPDeviceID: " & $Motherboard[$i][10] & @CRLF & _ "PowerManagementCapabilities: " & $Motherboard[$i][11] & @CRLF & _ "PowerManagementSupported: " & $Motherboard[$i][12] & @CRLF & _ "PrimaryBusType: " & $Motherboard[$i][13] & @CRLF & _ "RevisionNumber: " & $Motherboard[$i][14] & @CRLF & _ "SecondaryBusType: " & $Motherboard[$i][15] & @CRLF & _ "Status: " & $Motherboard[$i][16] & @CRLF & _ "StatusInfo: " & $Motherboard[$i][17] & @CRLF & _ "SystemCreationClassName: " & $Motherboard[$i][18] & @CRLF & _ "SystemName: " & $Motherboard[$i][19] & @CRLF & @CRLF, 1) Next Case "Mouse" _ComputerGetMouse($Mouse) For $i = 1 To $Mouse[0][0] Step 1 GUICtrlSetData($AboutEditbox, "Name: " & $Mouse[$i][0] & @CRLF & _ "Availability: " & $Mouse[$i][1] & @CRLF & _ "Config Manager Error Code: " & $Mouse[$i][2] & @CRLF & _ "Config Manager User Config: " & $Mouse[$i][3] & @CRLF & _ "Description: " & $Mouse[$i][4] & @CRLF & _ "Creation Class Name: " & $Mouse[$i][5] & @CRLF & _ "Device ID: " & $Mouse[$i][6] & @CRLF & _ "Device Interface: " & $Mouse[$i][7] & @CRLF & _ "Double Speed Threshold: " & $Mouse[$i][8] & @CRLF & _ "Error Cleared: " & $Mouse[$i][9] & @CRLF & _ "Error Description: " & $Mouse[$i][10] & @CRLF & _ "Handedness: " & $Mouse[$i][11] & @CRLF & _ "Hardware Type: " & $Mouse[$i][12] & @CRLF & _ "Inf File Name: " & $Mouse[$i][13] & @CRLF & _ "Inf Section: " & $Mouse[$i][14] & @CRLF & _ "Is Locked: " & $Mouse[$i][15] & @CRLF & _ "Last Error Code: " & $Mouse[$i][16] & @CRLF & _ "Manufacturer: " & $Mouse[$i][17] & @CRLF & _ "Number Of Buttons: " & $Mouse[$i][18] & @CRLF & _ "PNP Device ID: " & $Mouse[$i][19] & @CRLF & _ "Pointing Type: " & $Mouse[$i][20] & @CRLF & _ "Power Management Capabilities: " & $Mouse[$i][21] & @CRLF & _ "Power Management Supported: " & $Mouse[$i][22] & @CRLF & _ "Quad Speed Threshold: " & $Mouse[$i][23] & @CRLF & _ "Resolution: " & $Mouse[$i][24] & @CRLF & _ "Sample Rate: " & $Mouse[$i][25] & @CRLF & _ "Status: " & $Mouse[$i][26] & @CRLF & _ "Status Info: " & $Mouse[$i][27] & @CRLF & _ "Synch: " & $Mouse[$i][28] & @CRLF & _ "System Creation Class Name: " & $Mouse[$i][29] & @CRLF & _ "System Name: " & $Mouse[$i][30] & @CRLF & @CRLF, 1) Next Case "Network" _ComputerGetNetworkCards($NetworkCards) For $i = 1 To $NetworkCards[0][0] Step 1 GUICtrlSetData($AboutEditbox, "Name: " & $NetworkCards[$i][0] & @CRLF & _ "Adapter Type: " & $NetworkCards[$i][1] & @CRLF & _ "Adapter Type ID: " & $NetworkCards[$i][2] & @CRLF & _ "Auto Sense: " & $NetworkCards[$i][3] & @CRLF & _ "Description: " & $NetworkCards[$i][4] & @CRLF & _ "Availability: " & $NetworkCards[$i][5] & @CRLF & _ "Config Manager Error Code: " & $NetworkCards[$i][6] & @CRLF & _ "Config Manager User Config: " & $NetworkCards[$i][7] & @CRLF & _ "Creation Class Name: " & $NetworkCards[$i][8] & @CRLF & _ "Device ID: " & $NetworkCards[$i][9] & @CRLF & _ "Error Cleared: " & $NetworkCards[$i][10] & @CRLF & _ "Error Description: " & $NetworkCards[$i][11] & @CRLF & _ "Index: " & $NetworkCards[$i][12] & @CRLF & _ "Installed: " & $NetworkCards[$i][13] & @CRLF & _ "Last Error Code: " & $NetworkCards[$i][14] & @CRLF & _ "MAC Address: " & $NetworkCards[$i][15] & @CRLF & _ "Manufacturer: " & $NetworkCards[$i][16] & @CRLF & _ "Max Number Controlled: " & $NetworkCards[$i][17] & @CRLF & _ "Max Speed: " & $NetworkCards[$i][18] & @CRLF & _ "Net Connection ID: " & $NetworkCards[$i][19] & @CRLF & _ "Net Connection Status: " & $NetworkCards[$i][20] & @CRLF & _ "Network Addresses: " & $NetworkCards[$i][21] & @CRLF & _ "Permanent Address: " & $NetworkCards[$i][22] & @CRLF & _ "PNP Device ID: " & $NetworkCards[$i][23] & @CRLF & _ "Power Management Capabilities: " & $NetworkCards[$i][24] & @CRLF & _ "Power Management Supported: " & $NetworkCards[$i][25] & @CRLF & _ "Product Name: " & $NetworkCards[$i][26] & @CRLF & _ "Service Name: " & $NetworkCards[$i][27] & @CRLF & _ "Speed: " & $NetworkCards[$i][28] & @CRLF & _ "Status: " & $NetworkCards[$i][29] & @CRLF & _ "Status Info: " & $NetworkCards[$i][30] & @CRLF & _ "System Creation Class Name: " & $NetworkCards[$i][31] & @CRLF & _ "System Name: " & $NetworkCards[$i][32] & @CRLF & _ "Time Of Last Reset: " & $NetworkCards[$i][33] & @CRLF & @CRLF, 1) Next Case "System" _ComputerGetSystem($System) For $i = 1 To $System[0][0] Step 1 GUICtrlSetData($AboutEditbox, "Name: " & $System[$i][0] & @CRLF & _ "Admin Password Status: " & $System[$i][1] & @CRLF & _ "Automatic Reset Boot Option: " & $System[$i][2] & @CRLF & _ "Automatic Reset Capability: " & $System[$i][3] & @CRLF & _ "Description: " & $System[$i][4] & @CRLF & _ "Boot Option On Limit: " & $System[$i][5] & @CRLF & _ "Boot Option On WatchDog: " & $System[$i][6] & @CRLF & _ "Boot ROM Supported: " & $System[$i][7] & @CRLF & _ "Bootup State: " & $System[$i][8] & @CRLF & _ "Last Load Info: " & $System[$i][20] & @CRLF & _ "Manufacturer: " & $System[$i][21] & @CRLF & _ "Model: " & $System[$i][22] & @CRLF & _ "Name Format: " & $System[$i][23] & @CRLF & _ "Network Server Mode Enabled: " & $System[$i][24] & @CRLF & _ "Number Of Processors: " & $System[$i][25] & @CRLF & _ "OEM Logo Bitmap: " & $System[$i][26] & @CRLF & _ "OEM String Array: " & $System[$i][27] & @CRLF & _ "Part Of Domain: " & $System[$i][28] & @CRLF & _ "Pause After Reset: " & $System[$i][29] & @CRLF & _ "Power Management Capabilities: " & $System[$i][30] & @CRLF & _ "Power Management Supported: " & $System[$i][31] & @CRLF & _ "Power On Password Status: " & $System[$i][32] & @CRLF & _ "Power State: " & $System[$i][33] & @CRLF & _ "Power Supply State: " & $System[$i][34] & @CRLF & _ "Primary Owner Contact: " & $System[$i][35] & @CRLF & _ "Primary Owner Name: " & $System[$i][36] & @CRLF & _ "Reset Capability: " & $System[$i][37] & @CRLF & _ "Reset Count: " & $System[$i][38] & @CRLF & _ "Reset Limit: " & $System[$i][39] & @CRLF & _ "Roles: " & $System[$i][40] & @CRLF & _ "Status: " & $System[$i][41] & @CRLF & _ "Support Contact Description: " & $System[$i][42] & @CRLF & _ "System Startup Delay: " & $System[$i][43] & @CRLF & _ "System Startup Options: " & $System[$i][44] & @CRLF & _ "System Startup Setting: " & $System[$i][45] & @CRLF & _ "System Type: " & $System[$i][46] & @CRLF & _ "Thermal State: " & $System[$i][47] & @CRLF & _ "Total Physical Memory: " & Round($System[$i][48] / 1024 / 1024 / 1024, 3) & @CRLF & _ "User Name: " & $System[$i][49] & @CRLF & _ "Wake Up Type: " & $System[$i][50] & @CRLF & _ "Workgroup: " & $System[$i][51] & @CRLF & @CRLF, 1) Next Case "Processor" _ComputerGetProcessors($Processors) For $i = 1 To $Processors[0][0] Step 1 GUICtrlSetData($AboutEditbox, "Name: " & $Processors[$i][0] & @CRLF & _ "Address Width: " & $Processors[$i][1] & @CRLF & _ "Architecture: " & $Processors[$i][2] & @CRLF & _ "Availability: " & $Processors[$i][3] & @CRLF & _ "Description: " & $Processors[$i][4] & @CRLF & _ "Config Manager Error Code: " & $Processors[$i][5] & @CRLF & _ "Config Manager User Config: " & $Processors[$i][6] & @CRLF & _ "CPU Status: " & $Processors[$i][7] & @CRLF & _ "Creation Class Name: " & $Processors[$i][8] & @CRLF & _ "Current Clock Speed: " & $Processors[$i][9] & @CRLF & _ "Current Voltage: " & $Processors[$i][10] & @CRLF & _ "Data Width: " & $Processors[$i][11] & @CRLF & _ "Device ID: " & $Processors[$i][12] & @CRLF & _ "Error Cleared: " & $Processors[$i][13] & @CRLF & _ "Error Description: " & $Processors[$i][14] & @CRLF & _ "Ext Clock: " & $Processors[$i][15] & @CRLF & _ "Family: " & $Processors[$i][16] & @CRLF & _ "L2 Cache Size: " & $Processors[$i][17] & @CRLF & _ "L2 Cache Speed: " & $Processors[$i][18] & @CRLF & _ "Last Error Code: " & $Processors[$i][19] & @CRLF & _ "Level: " & $Processors[$i][20] & @CRLF & _ "Load Percentage: " & $Processors[$i][21] & @CRLF & _ "Manufacturer: " & $Processors[$i][22] & @CRLF & _ "Max Clock Speed: " & $Processors[$i][23] & @CRLF & _ "Other Family Description: " & $Processors[$i][24] & @CRLF & _ "PNP Device ID: " & $Processors[$i][25] & @CRLF & _ "Power Management Capabilities: " & $Processors[$i][26] & @CRLF & _ "Power Management Supported: " & $Processors[$i][27] & @CRLF & _ "Processor ID: " & $Processors[$i][28] & @CRLF & _ "Processor Type: " & $Processors[$i][29] & @CRLF & _ "Revision: " & $Processors[$i][30] & @CRLF & _ "Role: " & $Processors[$i][31] & @CRLF & _ "Socket Designation: " & $Processors[$i][32] & @CRLF & _ "Status: " & $Processors[$i][33] & @CRLF & _ "Status Info: " & $Processors[$i][34] & @CRLF & _ "Stepping: " & $Processors[$i][35] & @CRLF & _ "System Creation Class Name: " & $Processors[$i][36] & @CRLF & _ "System Name: " & $Processors[$i][37] & @CRLF & _ "Unique ID: " & $Processors[$i][38] & @CRLF & _ "Upgrade Method: " & $Processors[$i][39] & @CRLF & _ "Version: " & $Processors[$i][40] & @CRLF & _ "Voltage Caps: " & $Processors[$i][41] & @CRLF & @CRLF, 1) Next Case "Sound Card" _ComputerGetSoundCards($SoundCards) For $i = 1 To $SoundCards[0][0] Step 1 GUICtrlSetData($AboutEditbox, "Name: " & $SoundCards[$i][0] & @CRLF & _ "Availability: " & $SoundCards[$i][1] & @CRLF & _ "Config Manager Error Code: " & $SoundCards[$i][2] & @CRLF & _ "Config Manager User Config: " & $SoundCards[$i][3] & @CRLF & _ "Description: " & $SoundCards[$i][4] & @CRLF & _ "Creation Class Name: " & $SoundCards[$i][5] & @CRLF & _ "Device ID: " & $SoundCards[$i][6] & @CRLF & _ "DMA Buffer Size: " & $SoundCards[$i][7] & @CRLF & _ "Error Cleared: " & $SoundCards[$i][8] & @CRLF & _ "Error Description: " & $SoundCards[$i][9] & @CRLF & _ "Last Error Code: " & $SoundCards[$i][10] & @CRLF & _ "Manufacturer: " & $SoundCards[$i][11] & @CRLF & _ "MPU 401 Address: " & $SoundCards[$i][12] & @CRLF & _ "PNP Device ID: " & $SoundCards[$i][13] & @CRLF & _ "Power Management Capabilities: " & $SoundCards[$i][14] & @CRLF & _ "Power Management Supported: " & $SoundCards[$i][15] & @CRLF & _ "Product Name: " & $SoundCards[$i][16] & @CRLF & _ "Status: " & $SoundCards[$i][17] & @CRLF & _ "Status Info: " & $SoundCards[$i][18] & @CRLF & _ "System Creation Class Name: " & $SoundCards[$i][19] & @CRLF & _ "System Name: " & $SoundCards[$i][20] & @CRLF & @CRLF, 1) Next Case "Graphics Card" _ComputerGetVideoCards($VideoCards) For $i = 1 To $VideoCards[0][0] Step 1 GUICtrlSetData($AboutEditbox, "Name: " & $VideoCards[$i][0] & @CRLF & _ "Accelerator Capabilities: " & $VideoCards[$i][1] & @CRLF & _ "Adapter Compatibility: " & $VideoCards[$i][2] & @CRLF & _ "Adapter DAC Type: " & $VideoCards[$i][3] & @CRLF & _ "Description: " & $VideoCards[$i][4] & @CRLF & _ "Adapter RAM: " & $VideoCards[$i][5] & @CRLF & _ "Availability: " & $VideoCards[$i][6] & @CRLF & _ "Capability Descriptions: " & $VideoCards[$i][7] & @CRLF & _ "Color Table Entries: " & $VideoCards[$i][8] & @CRLF & _ "Config Manager Error Code: " & $VideoCards[$i][9] & @CRLF & _ "Config Manager User Config: " & $VideoCards[$i][10] & @CRLF & _ "Creation Class Name: " & $VideoCards[$i][11] & @CRLF & _ "Current Bits Per Pixel: " & $VideoCards[$i][12] & @CRLF & _ "Current Horizontal Resolution: " & $VideoCards[$i][13] & @CRLF & _ "Current Number Of Colors: " & $VideoCards[$i][14] & @CRLF & _ "Current Number Of Columns: " & $VideoCards[$i][15] & @CRLF & _ "Current Number Of Rows: " & $VideoCards[$i][16] & @CRLF & _ "Current Refresh Rate: " & $VideoCards[$i][17] & @CRLF & _ "Current Scan Mode: " & $VideoCards[$i][18] & @CRLF & _ "Current Vertical Resolution: " & $VideoCards[$i][19] & @CRLF & _ "Device ID: " & $VideoCards[$i][20] & @CRLF & _ "Device Specific Pens: " & $VideoCards[$i][21] & @CRLF & _ "Dither Type: " & $VideoCards[$i][22] & @CRLF & _ "Driver Date: " & $VideoCards[$i][23] & @CRLF & _ "Driver Version: " & $VideoCards[$i][24] & @CRLF & _ "Error Cleared: " & $VideoCards[$i][25] & @CRLF & _ "Error Description: " & $VideoCards[$i][26] & @CRLF & _ "ICM Intent: " & $VideoCards[$i][27] & @CRLF & _ "ICM Method: " & $VideoCards[$i][28] & @CRLF & _ "Inf Filename: " & $VideoCards[$i][29] & @CRLF & _ "Inf Section: " & $VideoCards[$i][30] & @CRLF & _ "Installed Display Drivers: " & $VideoCards[$i][31] & @CRLF & _ "Last Error Code: " & $VideoCards[$i][32] & @CRLF & _ "Max Memory Supported: " & $VideoCards[$i][33] & @CRLF & _ "Max Number Controlled: " & $VideoCards[$i][34] & @CRLF & _ "Max Refresh Rate: " & $VideoCards[$i][35] & @CRLF & _ "Min Refresh Rate: " & $VideoCards[$i][36] & @CRLF & _ "Monochrome: " & $VideoCards[$i][37] & @CRLF & _ "Number Of Color Planes: " & $VideoCards[$i][38] & @CRLF & _ "Number Of Video Pages: " & $VideoCards[$i][39] & @CRLF & _ "PNP Device ID: " & $VideoCards[$i][40] & @CRLF & _ "Power Management Capabilities: " & $VideoCards[$i][41] & @CRLF & _ "Power Management Supported: " & $VideoCards[$i][42] & @CRLF & _ "Protocol Supported: " & $VideoCards[$i][43] & @CRLF & _ "Reserved System Palette Entries: " & $VideoCards[$i][44] & @CRLF & _ "Specification Version: " & $VideoCards[$i][45] & @CRLF & _ "Status: " & $VideoCards[$i][46] & @CRLF & _ "Status Info: " & $VideoCards[$i][47] & @CRLF & _ "System Creation Class Name: " & $VideoCards[$i][48] & @CRLF & _ "System Name: " & $VideoCards[$i][49] & @CRLF & _ "System Palette Entries: " & $VideoCards[$i][50] & @CRLF & _ "Time Of Last Reset: " & $VideoCards[$i][51] & @CRLF & _ "Video Architecture: " & $VideoCards[$i][52] & @CRLF & _ "Video Memory Type: " & $VideoCards[$i][53] & @CRLF & _ "Video Mode: " & $VideoCards[$i][54] & @CRLF & _ "Video Mode Description: " & $VideoCards[$i][55] & @CRLF & _ "Video Processor: " & $VideoCards[$i][56] & @CRLF & @CRLF, 1) Next Case "Operating System" ;_ComputerGetOSs($OSs) ;V3.00 For $i = 1 To $OSs[0][0] Step 1 GUICtrlSetData($AboutEditbox, "Name: " & $OSs[$i][0] & @CRLF & _ "Boot Device: " & $OSs[$i][1] & @CRLF & _ "Build Number: " & $OSs[$i][2] & @CRLF & _ "Build Type: " & $OSs[$i][3] & @CRLF & _ "Description: " & $OSs[$i][4] & @CRLF & _ "Code Set: " & $OSs[$i][5] & @CRLF & _ "Country Code: " & $OSs[$i][6] & @CRLF & _ "Creation Class Name: " & $OSs[$i][7] & @CRLF & _ "CSCreation Class Name: " & $OSs[$i][8] & @CRLF & _ "CSD Version: " & $OSs[$i][9] & @CRLF & _ "CS Name: " & $OSs[$i][10] & @CRLF & _ "Current Time Zone: " & $OSs[$i][11] & @CRLF & _ "Data Execution Prevention_32BitApplications: " & $OSs[$i][12] & @CRLF & _ "Data Execution Prevention_Available: " & $OSs[$i][13] & @CRLF & _ "Data Execution Prevention_Drivers: " & $OSs[$i][14] & @CRLF & _ "Data Execution Prevention_SupportPolicy: " & $OSs[$i][15] & @CRLF & _ "Debug: " & $OSs[$i][16] & @CRLF & _ "Distributed: " & $OSs[$i][17] & @CRLF & _ "Encryption Level: " & $OSs[$i][18] & @CRLF & _ "Foreground Application Boost: " & $OSs[$i][19] & @CRLF & _ "Free Physical Memory: " & $OSs[$i][20] & @CRLF & _ "Free Space In Paging Files: " & $OSs[$i][21] & @CRLF & _ "Free Virtual Memory: " & $OSs[$i][22] & @CRLF & _ "Install Date: " & $OSs[$i][23] & @CRLF & _ "Large System Cache: " & $OSs[$i][24] & @CRLF & _ "Last Boot Up Time: " & $OSs[$i][25] & @CRLF & _ "Local Date Time: " & $OSs[$i][26] & @CRLF & _ "Locale: " & $OSs[$i][27] & @CRLF & _ "Manufacturer: " & $OSs[$i][28] & @CRLF & _ "Max Number Of Processes: " & $OSs[$i][29] & @CRLF & _ "Max Process Memory Size: " & $OSs[$i][30] & @CRLF & _ "Number Of Licensed Users: " & $OSs[$i][31] & @CRLF & _ "Number Of Processes: " & $OSs[$i][32] & @CRLF & _ "Number Of Users: " & $OSs[$i][33] & @CRLF & _ "Organization: " & $OSs[$i][34] & @CRLF & _ "OS Language: " & $OSs[$i][35] & @CRLF & _ "OS Product Suite: " & $OSs[$i][36] & @CRLF & _ "OS Type: " & $OSs[$i][37] & @CRLF & _ "Other Type Description: " & $OSs[$i][38] & @CRLF & _ "Plus Product ID: " & $OSs[$i][39] & @CRLF & _ "Plus Version Number: " & $OSs[$i][40] & @CRLF & _ "Primary: " & $OSs[$i][41] & @CRLF & _ "Product Type: " & $OSs[$i][42] & @CRLF & _ "Quantum Length: " & $OSs[$i][43] & @CRLF & _ "Quantum Type: " & $OSs[$i][44] & @CRLF & _ "Registered User: " & $OSs[$i][45] & @CRLF & _ "Serial Number: " & $OSs[$i][46] & @CRLF & _ "Service Pack Major Version: " & $OSs[$i][47] & @CRLF & _ "Service Pack Minor Version: " & $OSs[$i][48] & @CRLF & _ "Size Stored In Paging Files: " & $OSs[$i][49] & @CRLF & _ "Status: " & $OSs[$i][50] & @CRLF & _ "Suite Mask: " & $OSs[$i][51] & @CRLF & _ "System Device: " & $OSs[$i][52] & @CRLF & _ "System Directory: " & $OSs[$i][53] & @CRLF & _ "System Drive: " & $OSs[$i][54] & @CRLF & _ "Total Swap Space Size: " & $OSs[$i][55] & @CRLF & _ "Total Virtual Memory Size: " & $OSs[$i][56] & @CRLF & _ "Total Visible Memory Size: " & $OSs[$i][57] & @CRLF & _ "Version: " & $OSs[$i][58] & @CRLF & _ "Windows Directory: " & $OSs[$i][59] & @CRLF & @CRLF, 1) Next EndSwitch $oShell = ObjCreate("Shell.Explorer.2") $iCtrlID = GUICtrlCreateObj($oShell, 0, 275, 300, 20) $oShell.navigate("about:blank") While $oShell.busy Sleep(100) WEnd With $oShell.document .write('
What does this information mean?
') .body.scroll = "no" .body.topmargin = 0 .body.leftmargin = 0 .body.bgcolor = 0xfaf9f0 .body.style.color = 0x000000 .body.style.fontSize = 16 EndWith While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE GUIDelete($HardwareGUI) GUISetState(@SW_SHOW, $MainGUI) WinActivate($MainGUI) ExitLoop Case $Close GUIDelete($HardwareGUI) GUISetState(@SW_SHOW, $MainGUI) WinActivate($MainGUI) ExitLoop Case $GUI_EVENT_PRIMARYDOWN On_Drag($HardwareGUI, $HardwareLabel) EndSwitch WEnd EndFunc ;==>HardwareGUI Func _ComputerGetBattery(ByRef $aBatteryInfo) Local $colItems, $objWMIService, $objItem Dim $aBatteryInfo[1][31], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Battery", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394074(v=vs.85).aspx" If IsObj($colItems) Then For $objItem In $colItems ReDim $aBatteryInfo[UBound($aBatteryInfo) + 1][31] $aBatteryInfo[$i][0] = $objItem.Name $aBatteryInfo[$i][1] = $objItem.Availability $aBatteryInfo[$i][2] = $objItem.BatteryRechargeTime $aBatteryInfo[$i][3] = $objItem.BatteryStatus $aBatteryInfo[$i][4] = $objItem.Description $aBatteryInfo[$i][5] = $objItem.Chemistry $aBatteryInfo[$i][6] = $objItem.ConfigManagerErrorCode $aBatteryInfo[$i][7] = $objItem.ConfigManagerUserConfig $aBatteryInfo[$i][8] = $objItem.CreationClassName $aBatteryInfo[$i][9] = $objItem.DesignCapacity $aBatteryInfo[$i][10] = $objItem.DesignVoltage $aBatteryInfo[$i][11] = $objItem.DeviceID $aBatteryInfo[$i][12] = $objItem.ErrorCleared $aBatteryInfo[$i][13] = $objItem.ErrorDescription $aBatteryInfo[$i][14] = $objItem.EstimatedChargeRemaining $aBatteryInfo[$i][15] = $objItem.EstimatedRunTime $aBatteryInfo[$i][16] = $objItem.ExpectedBatteryLife $aBatteryInfo[$i][17] = $objItem.ExpectedLife $aBatteryInfo[$i][18] = $objItem.FullChargeCapacity $aBatteryInfo[$i][19] = $objItem.LastErrorCode $aBatteryInfo[$i][20] = $objItem.MaxRechargeTime $aBatteryInfo[$i][21] = $objItem.PNPDeviceID $aBatteryInfo[$i][22] = $objItem.PowerManagementCapabilities(0) $aBatteryInfo[$i][23] = $objItem.PowerManagementSupported $aBatteryInfo[$i][24] = $objItem.SmartBatteryVersion $aBatteryInfo[$i][25] = $objItem.Status $aBatteryInfo[$i][26] = $objItem.StatusInfo $aBatteryInfo[$i][27] = $objItem.SystemCreationClassName $aBatteryInfo[$i][28] = $objItem.SystemName $aBatteryInfo[$i][29] = $objItem.TimeOnBattery $aBatteryInfo[$i][30] = $objItem.TimeToFullCharge $i += 1 Next $aBatteryInfo[0][0] = UBound($aBatteryInfo) - 1 If $aBatteryInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Else SetError(1, 2, 0) EndIf EndFunc ;==>_ComputerGetBattery Func _ComputerGetHDD(ByRef $aHDDInfo) Local $colItems, $objWMIService, $objItem Dim $aHDDInfo[1][51], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394132(v=vs.85).aspx" If IsObj($colItems) Then For $objItem In $colItems ReDim $aHDDInfo[UBound($aHDDInfo) + 1][51] $aHDDInfo[$i][0] = $objItem.Name $aHDDInfo[$i][1] = $objItem.Availability $aHDDInfo[$i][2] = $objItem.BytesPerSector $aHDDInfo[$i][3] = $objItem.Capabilities(0) $aHDDInfo[$i][4] = $objItem.CapabilityDescriptions(0) $aHDDInfo[$i][5] = $objItem.Caption $aHDDInfo[$i][6] = $objItem.CompressionMethod $aHDDInfo[$i][7] = $objItem.ConfigManagerErrorCode $aHDDInfo[$i][8] = $objItem.ConfigManagerUserConfig $aHDDInfo[$i][9] = $objItem.CreationClassName $aHDDInfo[$i][10] = $objItem.DefaultBlockSize $aHDDInfo[$i][11] = $objItem.Description $aHDDInfo[$i][12] = $objItem.DeviceID $aHDDInfo[$i][13] = $objItem.ErrorCleared $aHDDInfo[$i][14] = $objItem.ErrorDescription $aHDDInfo[$i][15] = $objItem.ErrorMethodology $aHDDInfo[$i][16] = $objItem.FirmwareRevision $aHDDInfo[$i][17] = $objItem.Index $aHDDInfo[$i][18] = __StringToDate($objItem.InstallDate) $aHDDInfo[$i][19] = $objItem.InterfaceType $aHDDInfo[$i][20] = $objItem.LastErrorCode $aHDDInfo[$i][21] = $objItem.Manufacturer $aHDDInfo[$i][22] = $objItem.MaxBlockSize $aHDDInfo[$i][23] = $objItem.MaxMediaSize $aHDDInfo[$i][24] = $objItem.MediaLoaded $aHDDInfo[$i][25] = $objItem.MediaType $aHDDInfo[$i][26] = $objItem.MinBlockSize $aHDDInfo[$i][27] = $objItem.Model $aHDDInfo[$i][28] = $objItem.NeedsCleaning $aHDDInfo[$i][29] = $objItem.NumberOfMediaSupported $aHDDInfo[$i][30] = $objItem.Partitions $aHDDInfo[$i][31] = $objItem.PNPDeviceID $aHDDInfo[$i][32] = $objItem.PowerManagementCapabilities $aHDDInfo[$i][33] = $objItem.PowerManagementSupported $aHDDInfo[$i][34] = $objItem.SCSIBus $aHDDInfo[$i][35] = $objItem.SCSILogicalUnit $aHDDInfo[$i][36] = $objItem.SCSIPort $aHDDInfo[$i][37] = $objItem.SCSITargetId $aHDDInfo[$i][38] = $objItem.SectorsPerTrack $aHDDInfo[$i][39] = $objItem.SerialNumber $aHDDInfo[$i][40] = $objItem.Signature $aHDDInfo[$i][41] = $objItem.Size $aHDDInfo[$i][42] = $objItem.Status $aHDDInfo[$i][43] = $objItem.StatusInfo $aHDDInfo[$i][44] = $objItem.SystemCreationClassName $aHDDInfo[$i][45] = $objItem.SystemName $aHDDInfo[$i][46] = $objItem.TotalCylinders $aHDDInfo[$i][47] = $objItem.TotalHeads $aHDDInfo[$i][48] = $objItem.TotalSectors $aHDDInfo[$i][49] = $objItem.TotalTracks $aHDDInfo[$i][50] = $objItem.TracksPerCylinder $i += 1 Next $aHDDInfo[0][0] = UBound($aHDDInfo) - 1 If $aHDDInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Else SetError(1, 2, 0) EndIf EndFunc ;==>_ComputerGetHDD Func _ComputerGetKeyboard(ByRef $aKeyboardInfo) Local $colItems, $objWMIService, $objItem Dim $aKeyboardInfo[1][21], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Keyboard", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394166(v=vs.85).aspx" If IsObj($colItems) Then For $objItem In $colItems ReDim $aKeyboardInfo[UBound($aKeyboardInfo) + 1][21] $aKeyboardInfo[$i][0] = $objItem.Name $aKeyboardInfo[$i][1] = $objItem.Availability $aKeyboardInfo[$i][2] = $objItem.ConfigManagerErrorCode $aKeyboardInfo[$i][3] = $objItem.ConfigManagerUserConfig $aKeyboardInfo[$i][4] = $objItem.Description $aKeyboardInfo[$i][5] = $objItem.CreationClassName $aKeyboardInfo[$i][6] = $objItem.DeviceID $aKeyboardInfo[$i][7] = $objItem.ErrorCleared $aKeyboardInfo[$i][8] = $objItem.ErrorDescription $aKeyboardInfo[$i][9] = $objItem.IsLocked $aKeyboardInfo[$i][10] = $objItem.LastErrorCode $aKeyboardInfo[$i][11] = $objItem.Layout $aKeyboardInfo[$i][12] = $objItem.NumberOfFunctionKeys $aKeyboardInfo[$i][13] = $objItem.Password $aKeyboardInfo[$i][14] = $objItem.PNPDeviceID $aKeyboardInfo[$i][15] = $objItem.PowerManagementCapabilities(0) $aKeyboardInfo[$i][16] = $objItem.PowerManagementSupported $aKeyboardInfo[$i][17] = $objItem.Status $aKeyboardInfo[$i][18] = $objItem.StatusInfo $aKeyboardInfo[$i][19] = $objItem.SystemCreationClassName $aKeyboardInfo[$i][20] = $objItem.SystemName $i += 1 Next $aKeyboardInfo[0][0] = UBound($aKeyboardInfo) - 1 If $aKeyboardInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Else SetError(1, 2, 0) EndIf EndFunc ;==>_ComputerGetKeyboard Func _ComputerGetMemory(ByRef $aMemoryInfo) Local $colItems, $objWMIService, $objItem Dim $aMemoryInfo[1][28], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PhysicalMemory", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394347(v=vs.85).aspx" If IsObj($colItems) Then For $objItem In $colItems ReDim $aMemoryInfo[UBound($aMemoryInfo) + 1][28] $aMemoryInfo[$i][0] = $objItem.Name $aMemoryInfo[$i][1] = $objItem.BankLabel $aMemoryInfo[$i][2] = $objItem.Capacity $aMemoryInfo[$i][3] = $objItem.CreationClassName $aMemoryInfo[$i][4] = $objItem.Description $aMemoryInfo[$i][5] = $objItem.DataWidth $aMemoryInfo[$i][6] = $objItem.DeviceLocator $aMemoryInfo[$i][7] = $objItem.FormFactor $aMemoryInfo[$i][8] = $objItem.HotSwappable $aMemoryInfo[$i][9] = $objItem.InterleaveDataDepth $aMemoryInfo[$i][10] = $objItem.InterleavePosition $aMemoryInfo[$i][11] = $objItem.Manufacturer $aMemoryInfo[$i][12] = $objItem.MemoryType $aMemoryInfo[$i][13] = $objItem.Model $aMemoryInfo[$i][14] = $objItem.OtherIdentifyingInfo $aMemoryInfo[$i][15] = $objItem.PartNumber $aMemoryInfo[$i][16] = $objItem.PositionInRow $aMemoryInfo[$i][17] = $objItem.PoweredOn $aMemoryInfo[$i][18] = $objItem.Removable $aMemoryInfo[$i][19] = $objItem.Replaceable $aMemoryInfo[$i][20] = $objItem.SerialNumber $aMemoryInfo[$i][21] = $objItem.SKU $aMemoryInfo[$i][22] = $objItem.Speed $aMemoryInfo[$i][23] = $objItem.Status $aMemoryInfo[$i][24] = $objItem.Tag $aMemoryInfo[$i][25] = $objItem.TotalWidth $aMemoryInfo[$i][26] = $objItem.TypeDetail $aMemoryInfo[$i][27] = $objItem.Version $i += 1 Next $aMemoryInfo[0][0] = UBound($aMemoryInfo) - 1 If $aMemoryInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Else SetError(1, 2, 0) EndIf EndFunc ;==>_ComputerGetMemory Func _ComputerGetMonitors(ByRef $aMonitorInfo) Local $colItems, $objWMIService, $objItem Dim $aMonitorInfo[1][26], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DesktopMonitor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394122(v=vs.85).aspx" If IsObj($colItems) Then For $objItem In $colItems ReDim $aMonitorInfo[UBound($aMonitorInfo) + 1][26] $aMonitorInfo[$i][0] = $objItem.Name $aMonitorInfo[$i][1] = $objItem.Availability $aMonitorInfo[$i][2] = $objItem.Bandwidth $aMonitorInfo[$i][3] = $objItem.ConfigManagerErrorCode $aMonitorInfo[$i][4] = $objItem.Description $aMonitorInfo[$i][5] = $objItem.ConfigManagerUserConfig $aMonitorInfo[$i][6] = $objItem.CreationClassName $aMonitorInfo[$i][7] = $objItem.DeviceID $aMonitorInfo[$i][8] = $objItem.DisplayType $aMonitorInfo[$i][9] = $objItem.ErrorCleared $aMonitorInfo[$i][10] = $objItem.ErrorDescription $aMonitorInfo[$i][11] = $objItem.IsLocked $aMonitorInfo[$i][12] = $objItem.LastErrorCode $aMonitorInfo[$i][13] = $objItem.MonitorManufacturer $aMonitorInfo[$i][14] = $objItem.MonitorType $aMonitorInfo[$i][15] = $objItem.PixelsPerXLogicalInch $aMonitorInfo[$i][16] = $objItem.PixelsPerYLogicalInch $aMonitorInfo[$i][17] = $objItem.PNPDeviceID $aMonitorInfo[$i][18] = $objItem.PowerManagementCapabilities(0) $aMonitorInfo[$i][19] = $objItem.PowerManagementSupported $aMonitorInfo[$i][20] = $objItem.ScreenHeight $aMonitorInfo[$i][21] = $objItem.ScreenWidth $aMonitorInfo[$i][22] = $objItem.Status $aMonitorInfo[$i][23] = $objItem.StatusInfo $aMonitorInfo[$i][24] = $objItem.SystemCreationClassName $aMonitorInfo[$i][25] = $objItem.SystemName $i += 1 Next $aMonitorInfo[0][0] = UBound($aMonitorInfo) - 1 If $aMonitorInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Else SetError(1, 2, 0) EndIf EndFunc ;==>_ComputerGetMonitors Func _ComputerGetMotherboard(ByRef $aMotherboardInfo) Local $colItems, $objWMIService, $objItem Dim $aMotherboardInfo[1][20], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_MotherboardDevice", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394204(v=vs.85).aspx" If IsObj($colItems) Then For $objItem In $colItems ReDim $aMotherboardInfo[UBound($aMotherboardInfo) + 1][20] $aMotherboardInfo[$i][0] = $objItem.Name $aMotherboardInfo[$i][1] = $objItem.Availability $aMotherboardInfo[$i][2] = $objItem.ConfigManagerErrorCode $aMotherboardInfo[$i][3] = $objItem.ConfigManagerUserConfig $aMotherboardInfo[$i][4] = $objItem.Description $aMotherboardInfo[$i][5] = $objItem.CreationClassName $aMotherboardInfo[$i][6] = $objItem.DeviceID $aMotherboardInfo[$i][7] = $objItem.ErrorCleared $aMotherboardInfo[$i][8] = $objItem.ErrorDescription $aMotherboardInfo[$i][9] = $objItem.LastErrorCode $aMotherboardInfo[$i][10] = $objItem.PNPDeviceID $aMotherboardInfo[$i][11] = $objItem.PowerManagementCapabilities(0) $aMotherboardInfo[$i][12] = $objItem.PowerManagementSupported $aMotherboardInfo[$i][13] = $objItem.PrimaryBusType $aMotherboardInfo[$i][14] = $objItem.RevisionNumber $aMotherboardInfo[$i][15] = $objItem.SecondaryBusType $aMotherboardInfo[$i][16] = $objItem.Status $aMotherboardInfo[$i][17] = $objItem.StatusInfo $aMotherboardInfo[$i][18] = $objItem.SystemCreationClassName $aMotherboardInfo[$i][19] = $objItem.SystemName $i += 1 Next $aMotherboardInfo[0][0] = UBound($aMotherboardInfo) - 1 If $aMotherboardInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Else SetError(1, 2, 0) EndIf EndFunc ;==>_ComputerGetMotherboard Func _ComputerGetMouse(ByRef $aMouseInfo) Local $colItems, $objWMIService, $objItem Dim $aMouseInfo[1][31], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PointingDevice", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394356(v=vs.85).aspx" If IsObj($colItems) Then For $objItem In $colItems ReDim $aMouseInfo[UBound($aMouseInfo) + 1][31] $aMouseInfo[$i][0] = $objItem.Name $aMouseInfo[$i][1] = $objItem.Availability $aMouseInfo[$i][2] = $objItem.ConfigManagerErrorCode $aMouseInfo[$i][3] = $objItem.ConfigManagerUserConfig $aMouseInfo[$i][4] = $objItem.Description $aMouseInfo[$i][5] = $objItem.CreationClassName $aMouseInfo[$i][6] = $objItem.DeviceID $aMouseInfo[$i][7] = $objItem.DeviceInterface $aMouseInfo[$i][8] = $objItem.DoubleSpeedThreshold $aMouseInfo[$i][9] = $objItem.ErrorCleared $aMouseInfo[$i][10] = $objItem.ErrorDescription $aMouseInfo[$i][11] = $objItem.Handedness $aMouseInfo[$i][12] = $objItem.HardwareType $aMouseInfo[$i][13] = $objItem.InfFileName $aMouseInfo[$i][14] = $objItem.InfSection $aMouseInfo[$i][15] = $objItem.IsLocked $aMouseInfo[$i][16] = $objItem.LastErrorCode $aMouseInfo[$i][17] = $objItem.Manufacturer $aMouseInfo[$i][18] = $objItem.NumberOfButtons $aMouseInfo[$i][19] = $objItem.PNPDeviceID $aMouseInfo[$i][20] = $objItem.PointingType $aMouseInfo[$i][21] = $objItem.PowerManagementCapabilities(0) $aMouseInfo[$i][22] = $objItem.PowerManagementSupported $aMouseInfo[$i][23] = $objItem.QuadSpeedThreshold $aMouseInfo[$i][24] = $objItem.Resolution $aMouseInfo[$i][25] = $objItem.SampleRate $aMouseInfo[$i][26] = $objItem.Status $aMouseInfo[$i][27] = $objItem.StatusInfo $aMouseInfo[$i][28] = $objItem.Synch $aMouseInfo[$i][29] = $objItem.SystemCreationClassName $aMouseInfo[$i][30] = $objItem.SystemName $i += 1 Next $aMouseInfo[0][0] = UBound($aMouseInfo) - 1 If $aMouseInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Else SetError(1, 2, 0) EndIf EndFunc ;==>_ComputerGetMouse Func _ComputerGetNetworkCards(ByRef $aNetworkInfo) Local $colItems, $objWMIService, $objItem Dim $aNetworkInfo[1][34], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394216(v=vs.85).aspx" If IsObj($colItems) Then For $objItem In $colItems ReDim $aNetworkInfo[UBound($aNetworkInfo) + 1][34] $aNetworkInfo[$i][0] = $objItem.Name $aNetworkInfo[$i][1] = $objItem.AdapterType $aNetworkInfo[$i][2] = $objItem.AdapterTypeId $aNetworkInfo[$i][3] = $objItem.AutoSense $aNetworkInfo[$i][4] = $objItem.Description $aNetworkInfo[$i][5] = $objItem.Availability $aNetworkInfo[$i][6] = $objItem.ConfigManagerErrorCode $aNetworkInfo[$i][7] = $objItem.ConfigManagerUserConfig $aNetworkInfo[$i][8] = $objItem.CreationClassName $aNetworkInfo[$i][9] = $objItem.DeviceID $aNetworkInfo[$i][10] = $objItem.ErrorCleared $aNetworkInfo[$i][11] = $objItem.ErrorDescription $aNetworkInfo[$i][12] = $objItem.Index $aNetworkInfo[$i][13] = $objItem.Installed $aNetworkInfo[$i][14] = $objItem.LastErrorCode $aNetworkInfo[$i][15] = $objItem.MACAddress $aNetworkInfo[$i][16] = $objItem.Manufacturer $aNetworkInfo[$i][17] = $objItem.MaxNumberControlled $aNetworkInfo[$i][18] = $objItem.MaxSpeed $aNetworkInfo[$i][19] = $objItem.NetConnectionID $aNetworkInfo[$i][20] = $objItem.NetConnectionStatus $aNetworkInfo[$i][21] = $objItem.NetworkAddresses(0) $aNetworkInfo[$i][22] = $objItem.PermanentAddress $aNetworkInfo[$i][23] = $objItem.PNPDeviceID $aNetworkInfo[$i][24] = $objItem.PowerManagementCapabilities(0) $aNetworkInfo[$i][25] = $objItem.PowerManagementSupported $aNetworkInfo[$i][26] = $objItem.ProductName $aNetworkInfo[$i][27] = $objItem.ServiceName $aNetworkInfo[$i][28] = $objItem.Speed $aNetworkInfo[$i][29] = $objItem.Status $aNetworkInfo[$i][30] = $objItem.StatusInfo $aNetworkInfo[$i][31] = $objItem.SystemCreationClassName $aNetworkInfo[$i][32] = $objItem.SystemName $aNetworkInfo[$i][33] = __StringToDate($objItem.TimeOfLastReset) $i += 1 Next $aNetworkInfo[0][0] = UBound($aNetworkInfo) - 1 If $aNetworkInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Else SetError(1, 2, 0) EndIf EndFunc ;==>_ComputerGetNetworkCards Func _ComputerGetProcessors(ByRef $aProcessorInfo) Local $colItems, $objWMIService, $objItem Dim $aProcessorInfo[1][42], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394373(v=vs.85).aspx" If IsObj($colItems) Then For $objItem In $colItems ReDim $aProcessorInfo[UBound($aProcessorInfo) + 1][42] $aProcessorInfo[$i][0] = StringStripWS($objItem.Name, 1) $aProcessorInfo[$i][1] = $objItem.AddressWidth $aProcessorInfo[$i][2] = $objItem.Architecture $aProcessorInfo[$i][3] = $objItem.Availability $aProcessorInfo[$i][4] = $objItem.Description $aProcessorInfo[$i][5] = $objItem.ConfigManagerErrorCode $aProcessorInfo[$i][6] = $objItem.ConfigManagerUserConfig $aProcessorInfo[$i][7] = $objItem.CpuStatus $aProcessorInfo[$i][8] = $objItem.CreationClassName $aProcessorInfo[$i][9] = $objItem.CurrentClockSpeed $aProcessorInfo[$i][10] = $objItem.CurrentVoltage $aProcessorInfo[$i][11] = $objItem.DataWidth $aProcessorInfo[$i][12] = $objItem.DeviceID $aProcessorInfo[$i][13] = $objItem.ErrorCleared $aProcessorInfo[$i][14] = $objItem.ErrorDescription $aProcessorInfo[$i][15] = $objItem.ExtClock $aProcessorInfo[$i][16] = $objItem.Family $aProcessorInfo[$i][17] = $objItem.L2CacheSize $aProcessorInfo[$i][18] = $objItem.L2CacheSpeed $aProcessorInfo[$i][19] = $objItem.LastErrorCode $aProcessorInfo[$i][20] = $objItem.Level $aProcessorInfo[$i][21] = $objItem.LoadPercentage $aProcessorInfo[$i][22] = $objItem.Manufacturer $aProcessorInfo[$i][23] = $objItem.MaxClockSpeed $aProcessorInfo[$i][24] = $objItem.OtherFamilyDescription $aProcessorInfo[$i][25] = $objItem.PNPDeviceID $aProcessorInfo[$i][26] = $objItem.PowerManagementCapabilities(0) $aProcessorInfo[$i][27] = $objItem.PowerManagementSupported $aProcessorInfo[$i][28] = $objItem.ProcessorId $aProcessorInfo[$i][29] = $objItem.ProcessorType $aProcessorInfo[$i][30] = $objItem.Revision $aProcessorInfo[$i][31] = $objItem.Role $aProcessorInfo[$i][32] = $objItem.SocketDesignation $aProcessorInfo[$i][33] = $objItem.Status $aProcessorInfo[$i][34] = $objItem.StatusInfo $aProcessorInfo[$i][35] = $objItem.Stepping $aProcessorInfo[$i][36] = $objItem.SystemCreationClassName $aProcessorInfo[$i][37] = $objItem.SystemName $aProcessorInfo[$i][38] = $objItem.UniqueId $aProcessorInfo[$i][39] = $objItem.UpgradeMethod $aProcessorInfo[$i][40] = $objItem.Version $aProcessorInfo[$i][41] = $objItem.VoltageCaps $i += 1 Next $aProcessorInfo[0][0] = UBound($aProcessorInfo) - 1 If $aProcessorInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Else SetError(1, 2, 0) EndIf EndFunc ;==>_ComputerGetProcessors Func _ComputerGetSoundCards(ByRef $aSoundCardInfo) Local $colItems, $objWMIService, $objItem Dim $aSoundCardInfo[1][21], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_SoundDevice", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394463(v=vs.85).aspx" If IsObj($colItems) Then For $objItem In $colItems ReDim $aSoundCardInfo[UBound($aSoundCardInfo) + 1][21] $aSoundCardInfo[$i][0] = $objItem.Name $aSoundCardInfo[$i][1] = $objItem.Availability $aSoundCardInfo[$i][2] = $objItem.ConfigManagerErrorCode $aSoundCardInfo[$i][3] = $objItem.ConfigManagerUserConfig $aSoundCardInfo[$i][4] = $objItem.Description $aSoundCardInfo[$i][5] = $objItem.CreationClassName $aSoundCardInfo[$i][6] = $objItem.DeviceID $aSoundCardInfo[$i][7] = $objItem.DMABufferSize $aSoundCardInfo[$i][8] = $objItem.ErrorCleared $aSoundCardInfo[$i][9] = $objItem.ErrorDescription $aSoundCardInfo[$i][10] = $objItem.LastErrorCode $aSoundCardInfo[$i][11] = $objItem.Manufacturer $aSoundCardInfo[$i][12] = $objItem.MPU401Address $aSoundCardInfo[$i][13] = $objItem.PNPDeviceID $aSoundCardInfo[$i][14] = $objItem.PowerManagementCapabilities(0) $aSoundCardInfo[$i][15] = $objItem.PowerManagementSupported $aSoundCardInfo[$i][16] = $objItem.ProductName $aSoundCardInfo[$i][17] = $objItem.Status $aSoundCardInfo[$i][18] = $objItem.StatusInfo $aSoundCardInfo[$i][19] = $objItem.SystemCreationClassName $aSoundCardInfo[$i][20] = $objItem.SystemName $i += 1 Next $aSoundCardInfo[0][0] = UBound($aSoundCardInfo) - 1 If $aSoundCardInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Else SetError(1, 2, 0) EndIf EndFunc ;==>_ComputerGetSoundCards Func _ComputerGetVideoCards(ByRef $aVideoInfo) Local $colItems, $objWMIService, $objItem Dim $aVideoInfo[1][59], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_VideoController", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394512(v=vs.85).aspx" If IsObj($colItems) Then For $objItem In $colItems ReDim $aVideoInfo[UBound($aVideoInfo) + 1][59] $aVideoInfo[$i][0] = $objItem.Name $aVideoInfo[$i][1] = $objItem.AcceleratorCapabilities(0) $aVideoInfo[$i][2] = $objItem.AdapterCompatibility $aVideoInfo[$i][3] = $objItem.AdapterDACType $aVideoInfo[$i][4] = $objItem.Description $aVideoInfo[$i][5] = $objItem.AdapterRAM $aVideoInfo[$i][6] = $objItem.Availability $aVideoInfo[$i][7] = $objItem.CapabilityDescriptions(0) $aVideoInfo[$i][8] = $objItem.ColorTableEntries $aVideoInfo[$i][9] = $objItem.ConfigManagerErrorCode $aVideoInfo[$i][10] = $objItem.ConfigManagerUserConfig $aVideoInfo[$i][11] = $objItem.CreationClassName $aVideoInfo[$i][12] = $objItem.CurrentBitsPerPixel $aVideoInfo[$i][13] = $objItem.CurrentHorizontalResolution $aVideoInfo[$i][14] = $objItem.CurrentNumberOfColors $aVideoInfo[$i][15] = $objItem.CurrentNumberOfColumns $aVideoInfo[$i][16] = $objItem.CurrentNumberOfRows $aVideoInfo[$i][17] = $objItem.CurrentRefreshRate $aVideoInfo[$i][18] = $objItem.CurrentScanMode $aVideoInfo[$i][19] = $objItem.CurrentVerticalResolution $aVideoInfo[$i][20] = $objItem.DeviceID $aVideoInfo[$i][21] = $objItem.DeviceSpecificPens $aVideoInfo[$i][22] = $objItem.DitherType $aVideoInfo[$i][23] = __StringToDate($objItem.DriverDate) $aVideoInfo[$i][24] = $objItem.DriverVersion $aVideoInfo[$i][25] = $objItem.ErrorCleared $aVideoInfo[$i][26] = $objItem.ErrorDescription $aVideoInfo[$i][27] = $objItem.ICMIntent $aVideoInfo[$i][28] = $objItem.ICMMethod $aVideoInfo[$i][29] = $objItem.InfFilename $aVideoInfo[$i][30] = $objItem.InfSection $aVideoInfo[$i][31] = $objItem.InstalledDisplayDrivers $aVideoInfo[$i][32] = $objItem.LastErrorCode $aVideoInfo[$i][33] = $objItem.MaxMemorySupported $aVideoInfo[$i][34] = $objItem.MaxNumberControlled $aVideoInfo[$i][35] = $objItem.MaxRefreshRate $aVideoInfo[$i][36] = $objItem.MinRefreshRate $aVideoInfo[$i][37] = $objItem.Monochrome $aVideoInfo[$i][38] = $objItem.NumberOfColorPlanes $aVideoInfo[$i][39] = $objItem.NumberOfVideoPages $aVideoInfo[$i][40] = $objItem.PNPDeviceID $aVideoInfo[$i][41] = $objItem.PowerManagementCapabilities(0) $aVideoInfo[$i][42] = $objItem.PowerManagementSupported $aVideoInfo[$i][43] = $objItem.ProtocolSupported $aVideoInfo[$i][44] = $objItem.ReservedSystemPaletteEntries $aVideoInfo[$i][45] = $objItem.SpecificationVersion $aVideoInfo[$i][46] = $objItem.Status $aVideoInfo[$i][47] = $objItem.StatusInfo $aVideoInfo[$i][48] = $objItem.SystemCreationClassName $aVideoInfo[$i][49] = $objItem.SystemName $aVideoInfo[$i][50] = $objItem.SystemPaletteEntries $aVideoInfo[$i][51] = __StringToDate($objItem.TimeOfLastReset) $aVideoInfo[$i][52] = $objItem.VideoArchitecture $aVideoInfo[$i][53] = $objItem.VideoMemoryType $aVideoInfo[$i][54] = $objItem.VideoMode $aVideoInfo[$i][55] = $objItem.VideoModeDescription $aVideoInfo[$i][56] = $objItem.VideoProcessor $i += 1 Next $aVideoInfo[0][0] = UBound($aVideoInfo) - 1 If $aVideoInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Else SetError(1, 2, 0) EndIf EndFunc ;==>_ComputerGetVideoCards Func _ComputerGetBIOS(ByRef $aBIOSInfo) Local $colItems, $objWMIService, $objItem Dim $aBIOSInfo[1][25], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_BIOS", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394077(v=vs.85).aspx" If IsObj($colItems) Then For $objItem In $colItems ReDim $aBIOSInfo[UBound($aBIOSInfo) + 1][25] $aBIOSInfo[$i][0] = $objItem.Name $aBIOSInfo[$i][1] = $objItem.Status $aBIOSInfo[$i][2] = $objItem.BiosCharacteristics(0) $aBIOSInfo[$i][3] = $objItem.BIOSVersion(0) $aBIOSInfo[$i][4] = $objItem.Description $aBIOSInfo[$i][5] = $objItem.BuildNumber $aBIOSInfo[$i][6] = $objItem.CodeSet $aBIOSInfo[$i][7] = $objItem.CurrentLanguage $aBIOSInfo[$i][8] = $objItem.IdentificationCode $aBIOSInfo[$i][9] = $objItem.InstallableLanguages $aBIOSInfo[$i][10] = $objItem.LanguageEdition $aBIOSInfo[$i][11] = $objItem.ListOfLanguages(0) $aBIOSInfo[$i][12] = $objItem.Manufacturer $aBIOSInfo[$i][13] = $objItem.OtherTargetOS $aBIOSInfo[$i][14] = $objItem.PrimaryBIOS $aBIOSInfo[$i][16] = $objItem.SerialNumber $aBIOSInfo[$i][17] = $objItem.SMBIOSBIOSVersion $aBIOSInfo[$i][18] = $objItem.SMBIOSMajorVersion $aBIOSInfo[$i][19] = $objItem.SMBIOSMinorVersion $aBIOSInfo[$i][20] = $objItem.SMBIOSPresent $aBIOSInfo[$i][21] = $objItem.SoftwareElementID $aBIOSInfo[$i][22] = $objItem.SoftwareElementState $aBIOSInfo[$i][23] = $objItem.TargetOperatingSystem $aBIOSInfo[$i][24] = $objItem.Version $i += 1 Next $aBIOSInfo[0][0] = UBound($aBIOSInfo) - 1 If $aBIOSInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Else SetError(1, 2, 0) EndIf Return ($aBIOSInfo[1][16]) EndFunc ;==>_ComputerGetBIOS Func _ComputerGetSystem(ByRef $aSystemInfo) Local $colItems, $objWMIService, $objItem Dim $aSystemInfo[1][52], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394102(v=vs.85).aspx" If IsObj($colItems) Then For $objItem In $colItems ReDim $aSystemInfo[UBound($aSystemInfo) + 1][52] $aSystemInfo[$i][0] = $objItem.Name $aSystemInfo[$i][1] = $objItem.AdminPasswordStatus $aSystemInfo[$i][2] = $objItem.AutomaticResetBootOption $aSystemInfo[$i][3] = $objItem.AutomaticResetCapability $aSystemInfo[$i][4] = $objItem.Description $aSystemInfo[$i][5] = $objItem.BootOptionOnLimit $aSystemInfo[$i][6] = $objItem.BootOptionOnWatchDog $aSystemInfo[$i][7] = $objItem.BootROMSupported $aSystemInfo[$i][8] = $objItem.BootupState $aSystemInfo[$i][9] = $objItem.ChassisBootupState $aSystemInfo[$i][10] = $objItem.CreationClassName $aSystemInfo[$i][11] = $objItem.CurrentTimeZone $aSystemInfo[$i][12] = $objItem.DaylightInEffect $aSystemInfo[$i][13] = $objItem.Domain $aSystemInfo[$i][14] = $objItem.DomainRole $aSystemInfo[$i][15] = $objItem.EnableDaylightSavingsTime $aSystemInfo[$i][16] = $objItem.FrontPanelResetStatus $aSystemInfo[$i][17] = $objItem.InfraredSupported $aSystemInfo[$i][18] = $objItem.InitialLoadInfo(0) $aSystemInfo[$i][19] = $objItem.KeyboardPasswordStatus $aSystemInfo[$i][20] = $objItem.LastLoadInfo $aSystemInfo[$i][21] = $objItem.Manufacturer $aSystemInfo[$i][22] = $objItem.Model $aSystemInfo[$i][23] = $objItem.NameFormat $aSystemInfo[$i][24] = $objItem.NetworkServerModeEnabled $aSystemInfo[$i][25] = $objItem.NumberOfProcessors $aSystemInfo[$i][26] = $objItem.OEMLogoBitmap(0) $aSystemInfo[$i][27] = $objItem.OEMStringArray(0) $aSystemInfo[$i][28] = $objItem.PartOfDomain $aSystemInfo[$i][29] = $objItem.PauseAfterReset $aSystemInfo[$i][30] = $objItem.PowerManagementCapabilities(0) $aSystemInfo[$i][31] = $objItem.PowerManagementSupported $aSystemInfo[$i][32] = $objItem.PowerOnPasswordStatus $aSystemInfo[$i][33] = $objItem.PowerState $aSystemInfo[$i][34] = $objItem.PowerSupplyState $aSystemInfo[$i][35] = $objItem.PrimaryOwnerContact $aSystemInfo[$i][36] = $objItem.PrimaryOwnerName $aSystemInfo[$i][37] = $objItem.ResetCapability $aSystemInfo[$i][38] = $objItem.ResetCount $aSystemInfo[$i][39] = $objItem.ResetLimit $aSystemInfo[$i][40] = $objItem.Roles(0) $aSystemInfo[$i][41] = $objItem.Status $aSystemInfo[$i][42] = $objItem.SupportContactDescription(0) $aSystemInfo[$i][43] = $objItem.SystemStartupDelay $aSystemInfo[$i][44] = $objItem.SystemStartupOptions(0) $aSystemInfo[$i][45] = $objItem.SystemStartupSetting $aSystemInfo[$i][46] = $objItem.SystemType $aSystemInfo[$i][47] = $objItem.ThermalState $aSystemInfo[$i][48] = $objItem.TotalPhysicalMemory $aSystemInfo[$i][49] = $objItem.UserName $aSystemInfo[$i][50] = $objItem.WakeUpType $aSystemInfo[$i][51] = $objItem.Workgroup $i += 1 Next $aSystemInfo[0][0] = UBound($aSystemInfo) - 1 If $aSystemInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Else SetError(1, 2, 0) EndIf EndFunc ;==>_ComputerGetSystem Func _ComputerGetOSs(ByRef $aOSInfo) Local $colItems, $objWMIService, $objItem Dim $aOSInfo[1][60], $i = 1 $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $MSDNLink = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa394239(v=vs.85).aspx" If IsObj($colItems) Then For $objItem In $colItems ReDim $aOSInfo[UBound($aOSInfo) + 1][60] $aOSInfo[$i][0] = $objItem.Name $aOSInfo[$i][1] = $objItem.BootDevice $aOSInfo[$i][2] = $objItem.BuildNumber $aOSInfo[$i][3] = $objItem.BuildType $aOSInfo[$i][4] = $objItem.Description $aOSInfo[$i][5] = $objItem.CodeSet $aOSInfo[$i][6] = $objItem.CountryCode $aOSInfo[$i][7] = $objItem.CreationClassName $aOSInfo[$i][8] = $objItem.CSCreationClassName $aOSInfo[$i][9] = $objItem.CSDVersion $aOSInfo[$i][10] = $objItem.CSName $aOSInfo[$i][11] = $objItem.CurrentTimeZone $aOSInfo[$i][12] = $objItem.DataExecutionPrevention_32BitApplications $aOSInfo[$i][13] = $objItem.DataExecutionPrevention_Available $aOSInfo[$i][14] = $objItem.DataExecutionPrevention_Drivers $aOSInfo[$i][15] = $objItem.DataExecutionPrevention_SupportPolicy $aOSInfo[$i][16] = $objItem.Debug $aOSInfo[$i][17] = $objItem.Distributed $aOSInfo[$i][18] = $objItem.EncryptionLevel $aOSInfo[$i][19] = $objItem.ForegroundApplicationBoost $aOSInfo[$i][20] = $objItem.FreePhysicalMemory $aOSInfo[$i][21] = $objItem.FreeSpaceInPagingFiles $aOSInfo[$i][22] = $objItem.FreeVirtualMemory $aOSInfo[$i][23] = __StringToDate($objItem.InstallDate) $aOSInfo[$i][24] = $objItem.LargeSystemCache $aOSInfo[$i][25] = __StringToDate($objItem.LastBootUpTime) $aOSInfo[$i][26] = __StringToDate($objItem.LocalDateTime) $aOSInfo[$i][27] = $objItem.Locale $aOSInfo[$i][28] = $objItem.Manufacturer $aOSInfo[$i][29] = $objItem.MaxNumberOfProcesses $aOSInfo[$i][30] = $objItem.MaxProcessMemorySize $aOSInfo[$i][31] = $objItem.NumberOfLicensedUsers $aOSInfo[$i][32] = $objItem.NumberOfProcesses $aOSInfo[$i][33] = $objItem.NumberOfUsers $aOSInfo[$i][34] = $objItem.Organization $aOSInfo[$i][35] = $objItem.OSLanguage $aOSInfo[$i][36] = $objItem.OSProductSuite $aOSInfo[$i][37] = $objItem.OSType $aOSInfo[$i][38] = $objItem.OtherTypeDescription $aOSInfo[$i][39] = $objItem.PlusProductID $aOSInfo[$i][40] = $objItem.PlusVersionNumber $aOSInfo[$i][41] = $objItem.Primary $aOSInfo[$i][42] = $objItem.ProductType $aOSInfo[$i][43] = '' ;$objItem.QuantumLength $aOSInfo[$i][44] = '' ;$objItem.QuantumType $aOSInfo[$i][45] = $objItem.RegisteredUser $aOSInfo[$i][46] = $objItem.SerialNumber $aOSInfo[$i][47] = $objItem.ServicePackMajorVersion $aOSInfo[$i][48] = $objItem.ServicePackMinorVersion $aOSInfo[$i][49] = $objItem.SizeStoredInPagingFiles $aOSInfo[$i][50] = $objItem.Status $aOSInfo[$i][51] = $objItem.SuiteMask $aOSInfo[$i][52] = $objItem.SystemDevice $aOSInfo[$i][53] = $objItem.SystemDirectory $aOSInfo[$i][54] = $objItem.SystemDrive $aOSInfo[$i][55] = $objItem.TotalSwapSpaceSize $aOSInfo[$i][56] = $objItem.TotalVirtualMemorySize $aOSInfo[$i][57] = $objItem.TotalVisibleMemorySize $aOSInfo[$i][58] = $objItem.Version $aOSInfo[$i][59] = $objItem.WindowsDirectory $i += 1 Next $aOSInfo[0][0] = UBound($aOSInfo) - 1 If $aOSInfo[0][0] < 1 Then SetError(1, 1, 0) EndIf Else SetError(1, 2, 0) EndIf EndFunc ;==>_ComputerGetOSs #EndRegion - Computer Get - #Region - Network Traffic - Func _UpdateStats() Local $aEnd_Values, $iRecived, $iSent, $sNew_Label, $iLargest_Value $aEnd_Values = _GetAllTraffic() $iRecived = $aEnd_Values[0] - $aStart_Values[0] $iSent = $aEnd_Values[1] - $aStart_Values[1] If Not ($iRecived + $iSent) Then ; No Activity Local $sZero = 'DL: 0.0 kB/sec UL: 0.0 kB/sec' If $sLast_Label <> $sZero Then GUICtrlSetData($NetSpeed, $sZero) $aStart_Values = $aEnd_Values $sLast_Label = $sZero Return EndIf If $iRecived >= 1048576 Then $sDL_Label = 'DL: ' & StringFormat('%.2f', Round($iRecived / 1048576, 2)) & ' mB/sec ' Else $sDL_Label = 'DL: ' & StringFormat('%.1f', Round($iRecived / 1024, 1)) & ' kB/sec ' EndIf If $iSent >= 1048576 Then $sUL_Label = 'UL: ' & StringFormat('%.2f', Round($iSent / 1048576, 2)) & ' mB/sec ' Else $sUL_Label = 'UL: ' & StringFormat('%.1f', Round($iSent / 1024, 1)) & ' kB/sec ' EndIf $sNew_Label = $sDL_Label & $sUL_Label If $sNew_Label <> $sLast_Label Then GUICtrlSetData($NetSpeed, $sNew_Label) $sLast_Label = $sNew_Label $aStart_Values = $aEnd_Values EndFunc ;==>_UpdateStats Func _GetAllTraffic() Local $Total_Values[2], $Adapter_Values Local $ifcount = _GetNumberofInterfaces() If $Global_IF_Count <> $ifcount Then $Global_IF_Count = $ifcount $Table_Data = _WinAPI_GetIfTable() $aStart_Values = _GetAllTraffic() EndIf If IsArray($Table_Data) Then For $i = 1 To $Table_Data[0][0] $Adapter_Values = _WinAPI_GetIfEntry($Table_Data[$i][1]) If IsArray($Adapter_Values) Then $Total_Values[0] += $Adapter_Values[0] ;Recived $Total_Values[1] += $Adapter_Values[1] ;Sent Else $Table_Data = _WinAPI_GetIfTable() EndIf Next EndIf Return $Total_Values EndFunc ;==>_GetAllTraffic Func _WinAPI_GetIfEntry($iIndex) Local $Ret, $Stats[2] Static $tMIB_IFROW = DllStructCreate($tagMIB_IFROW) DllStructSetData($tMIB_IFROW, 2, $iIndex) $Ret = DllCall($IPHlpApi_Dll, 'dword', 'GetIfEntry', 'ptr', DllStructGetPtr($tMIB_IFROW)) If (@error) Or ($Ret[0]) Then Return SetError($Ret[0], 0, 0) $Stats[0] = DllStructGetData($tMIB_IFROW, 'InOctets') ;Recived $Stats[1] = DllStructGetData($tMIB_IFROW, 'OutOctets') ;Sent Return $Stats EndFunc ;==>_WinAPI_GetIfEntry Func _GetNumberofInterfaces() Local $Adaptor_Count = DllCall($IPHlpApi_Dll, 'int', 'GetNumberOfInterfaces', 'dword*', 0) Return $Adaptor_Count[1] EndFunc ;==>_GetNumberofInterfaces Func _WinAPI_GetIfTable($iType = 0) Local $Ret, $Row, $Type, $Tag, $Tab, $Addr, $Count, $Lenght, $tMIB_IFTABLE Local $tMIB_IFROW = DllStructCreate($tagMIB_IFROW) $Row = 'byte[' & DllStructGetSize($tMIB_IFROW) & ']' $Tag = 'dword;' For $i = 1 To 32 $Tag &= $Row & ';' Next $tMIB_IFTABLE = DllStructCreate($Tag) $Ret = DllCall($IPHlpApi_Dll, 'dword', 'GetIfTable', 'ptr', DllStructGetPtr($tMIB_IFTABLE), 'long*', DllStructGetSize($tMIB_IFTABLE), 'int', 1) If (@error) Or ($Ret[0]) Then Return SetError($Ret[0], 0, 0) $Count = DllStructGetData($tMIB_IFTABLE, 1) Dim $Tab[$Count + 1][20] $Tab[0][0] = 0 $Tab[0][1] = 'Index' $Tab[0][2] = 'Type' $Tab[0][3] = 'Mtu' $Tab[0][4] = 'Speed' $Tab[0][5] = 'Address' $Tab[0][6] = 'AdminStatus' $Tab[0][7] = 'OperStatus' $Tab[0][8] = 'InOctets' $Tab[0][9] = 'InUcastPkts' $Tab[0][10] = 'InNUcastPkts' $Tab[0][11] = 'InDiscards' $Tab[0][12] = 'InErrors' $Tab[0][13] = 'InUnknownProtos' $Tab[0][14] = 'OutOctets' $Tab[0][15] = 'OutUcastPkts' $Tab[0][16] = 'OutNUcastPkts' $Tab[0][17] = 'OutDiscards' $Tab[0][18] = 'OutErrors' For $i = 1 To $Count $tMIB_IFROW = DllStructCreate($tagMIB_IFROW, DllStructGetPtr($tMIB_IFTABLE, $i + 1)) $Type = DllStructGetData($tMIB_IFROW, 'Type') If $Type <> $MIB_IF_TYPE_SOFTWARE_LOOPBACK Then $Tab[0][0] += 1 $Lenght = DllStructGetData($tMIB_IFROW, 'PhysAddrLen') $Addr = '' For $j = 1 To $Lenght $Addr &= Hex(DllStructGetData($tMIB_IFROW, 'PhysAddr', $j), 2) & '-' Next $Addr = StringTrimRight($Addr, 1) _ArraySearch($Tab, $Addr, 1, $Tab[0][0] - 1, 1, 0, 1, 5) If @error <> 6 Or $Addr = '' Or StringLen($Addr) > 17 Then $Tab[0][0] -= 1 ContinueLoop EndIf $Tab[$Tab[0][0]][0] = DllStructGetData($tMIB_IFROW, 'Name') $Tab[$Tab[0][0]][1] = DllStructGetData($tMIB_IFROW, 'Index') $Tab[$Tab[0][0]][2] = $Type $Tab[$Tab[0][0]][3] = DllStructGetData($tMIB_IFROW, 'Mtu') $Tab[$Tab[0][0]][4] = DllStructGetData($tMIB_IFROW, 'Speed') $Tab[$Tab[0][0]][5] = $Addr $Tab[$Tab[0][0]][6] = DllStructGetData($tMIB_IFROW, 'AdminStatus') $Tab[$Tab[0][0]][7] = DllStructGetData($tMIB_IFROW, 'OperStatus') $Tab[$Tab[0][0]][8] = DllStructGetData($tMIB_IFROW, 'InOctets') $Tab[$Tab[0][0]][9] = DllStructGetData($tMIB_IFROW, 'InUcastPkts') $Tab[$Tab[0][0]][10] = DllStructGetData($tMIB_IFROW, 'InNUcastPkts') $Tab[$Tab[0][0]][11] = DllStructGetData($tMIB_IFROW, 'InDiscards') $Tab[$Tab[0][0]][12] = DllStructGetData($tMIB_IFROW, 'InErrors') $Tab[$Tab[0][0]][13] = DllStructGetData($tMIB_IFROW, 'InUnknownProtos') $Tab[$Tab[0][0]][14] = DllStructGetData($tMIB_IFROW, 'OutOctets') $Tab[$Tab[0][0]][15] = DllStructGetData($tMIB_IFROW, 'OutUcastPkts') $Tab[$Tab[0][0]][16] = DllStructGetData($tMIB_IFROW, 'OutNUcastPkts') $Tab[$Tab[0][0]][17] = DllStructGetData($tMIB_IFROW, 'OutDiscards') $Tab[$Tab[0][0]][18] = DllStructGetData($tMIB_IFROW, 'OutErrors') $Tab[$Tab[0][0]][19] = StringLeft(DllStructGetData($tMIB_IFROW, 'Descr'), DllStructGetData($tMIB_IFROW, 'DescrLen') - 1) EndIf Next If $Tab[0][0] < $Count Then ReDim $Tab[$Tab[0][0] + 1][20] Return $Tab EndFunc ;==>_WinAPI_GetIfTable #EndRegion - Network Traffic - #Region - Take Ownership - Func TakeOwn($oName, $T) Local $_TRUSTEE_TYPE = 1 Local $AccessMode Local $_EXPLICIT_ACCESS Local $GENERIC_ALL = 0x10000000 Local $SE_FILE_OBJECT = 1 Local $ACL_REVISION = 2 $_EXPLICIT_ACCESS = DllStructCreate('DWORD;DWORD;DWORD;ptr;DWORD;DWORD;DWORD;ptr') Local $tData = DllStructCreate("byte SID[256]") Local $pSID = DllStructGetPtr($tData, "SID") Local $aResult = DllCall($hADVAPI32, "bool", "LookupAccountNameW", "wstr", '', "wstr", @UserName, "ptr", $pSID, "dword*", 256, _ "wstr", "", "dword*", 256, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Local $aResult = DllCall($hADVAPI32, "bool", "IsValidSid", "ptr", $pSID) If @error Or Not $aResult[0] Then Return SetError(@error, @extended, False) Local $aResult = DllCall($hADVAPI32, "int", "ConvertSidToStringSidW", "ptr", $pSID, "ptr*", 0) If @error Then Return SetError(@error, @extended, "") If Not $aResult[0] Then Return "" Local $tBuffer = DllStructCreate("wchar Text[256]", $aResult[2]) Local $sSID = DllStructGetData($tBuffer, "Text") DllCall($hKERNEL32, "ptr", "LocalFree", "ptr", $aResult[2]) Local $aResult = DllCall($hADVAPI32, "bool", "ConvertStringSidToSidW", "wstr", $sSID, "ptr*", 0) If @error Then Return SetError(@error, @extended, 0) If Not $aResult[0] Then Return 0 Local $aResult2 = DllCall($hADVAPI32, "dword", "GetLengthSid", "ptr", $aResult[2]) If @error Then Return SetError(@error, @extended, 0) Local $iSize = $aResult2[0] Local $tBuffer = DllStructCreate("byte Data[" & $iSize & "]", $aResult[2]) Local $tSID = DllStructCreate("byte Data[" & $iSize & "]") DllStructSetData($tSID, "Data", DllStructGetData($tBuffer, "Data")) DllCall($hKERNEL32, "ptr", "LocalFree", "ptr", $aResult[2]) $UserName = $tSID $sUserName = DllStructGetPtr($UserName) DllStructSetData($_EXPLICIT_ACCESS, 1, $GENERIC_ALL) ;grfAccessPermissions If Not $T Then $AccessMode = 3 Else $AccessMode = 2 EndIf DllStructSetData($_EXPLICIT_ACCESS, 2, $AccessMode) ;grfAccessMode DllStructSetData($_EXPLICIT_ACCESS, 3, 3) ;grfInheritance DllStructSetData($_EXPLICIT_ACCESS, 6, 0) ;TrusteeForm = $TRUSTEE_IS_SID = 0 Local $aCall = DllCall($hADVAPI32, 'BOOL', 'LookupAccountSid', 'ptr', 0, 'ptr', $sUserName, 'ptr*', 0, 'dword*', 32, 'ptr*', 0, 'dword*', 32, 'dword*', 0) If Not @error Then $_TRUSTEE_TYPE = $aCall[7] DllStructSetData($_EXPLICIT_ACCESS, 7, $_TRUSTEE_TYPE) ;TrusteeType DllStructSetData($_EXPLICIT_ACCESS, 8, $sUserName) ;Pointer to the SID Local $p_EXPLICIT_ACCESS = DllStructGetPtr($_EXPLICIT_ACCESS) $aCall = DllCall($hADVAPI32, 'DWORD', 'SetEntriesInAcl', 'ULONG', 1, 'ptr', $p_EXPLICIT_ACCESS, 'ptr', 0, 'ptr*', 0) If @error Or $aCall[0] Then Return SetError(1, 0, 0) Local $DACL = $aCall[4] Local $SECURITY_INFORMATION = 4, $pOwner = 0 $SetOwner = $UserName $pOwner = DllStructGetPtr($SetOwner) Local $aResult = DllCall($hADVAPI32, "bool", "IsValidSid", "ptr", $pOwner) If @error Or Not $aResult[0] Then Return SetError(1, 0, 0) If $pOwner Then $SECURITY_INFORMATION = 5 Else $pOwner = 0 EndIf Local $Ret, $Name Local $Buffer = DllStructCreate('byte[32]'), $aRet DllCall($hADVAPI32, 'bool', 'InitializeAcl', 'Ptr', DllStructGetPtr($Buffer, 1), 'dword', DllStructGetSize($Buffer), 'dword', $ACL_REVISION) DllCall($hADVAPI32, 'DWORD', 'SetNamedSecurityInfo', 'str', $oName, 'dword', $SE_FILE_OBJECT, 'DWORD', 4, 'ptr', 0, 'ptr', 0, 'ptr', 0, 'ptr', 0) $aRet = DllCall($hADVAPI32, 'DWORD', 'SetNamedSecurityInfo', 'str', $oName, 'dword', $SE_FILE_OBJECT, 'DWORD', 4, 'ptr', 0, 'ptr', 0, 'ptr', DllStructGetPtr($Buffer, 1), 'ptr', 0) If @error Then Return SetError(@error, 0, 0) $aCall = DllCall($hADVAPI32, 'dword', 'SetNamedSecurityInfo', 'str', $oName, 'dword', $SE_FILE_OBJECT, _ 'dword', $SECURITY_INFORMATION, 'ptr', $pOwner, 'ptr', 0, 'ptr', $DACL, 'ptr', 0) If @error Then Return SetError(1, 0, 0) Return SetError(0, 0, 0) EndFunc ;==>TakeOwn Func AdjustPrivilege($Type) Local $aReturn = DllCall("ntdll.dll", "int", "RtlAdjustPrivilege", "int", $Type, "int", 1, "int", 0, "int*", 0) If @error Or $aReturn[0] Then Return SetError(1, 0, 0) Return SetError(0, 0, 1) EndFunc ;==>AdjustPrivilege #EndRegion - Take Ownership - #Region - Internal Functions - Func _ArrayDisplay_AddIcon() If FileGetSize(StringTrimRight(@ScriptFullPath, 4) & ".ico") Then If WinExists("[TITLE:Running Processes;CLASS:AutoIt v3 GUI;]") Then AdlibUnRegister("_ArrayDisplay_AddIcon") GUISetIcon(StringTrimRight(@ScriptFullPath, 4) & ".ico", -1, WinGetHandle("[TITLE:Running Processes;CLASS:AutoIt v3 GUI;]")) EndIf Else AdlibUnRegister("_ArrayDisplay_AddIcon") EndIf EndFunc ;==>_ArrayDisplay_AddIcon Func DateTime() $Time = _NowTime() $Date = _NowDate() EndFunc ;==>DateTime Func Recycle() ;MsgBox(64, "To regain space you have to search the net for ...", "BLEACHBIT !", 5) Gollog("launching cleanmgr.exe") ShellExecute("c:\windows\SYSTEM32\cleanmgr.exe") EndFunc ;==>Recycle Func GetWMI($srv) Local $Description, $colItems, $colItem, $ping, $x $ping = Ping($srv) If $ping Then $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True", "WQL", 0x30) If IsObj($colItems) Then For $objItem In $colItems $Description &= $objItem.Description & @CRLF Next SetError(0) Return $Description Else SetError(1) Return "Error!" EndIf Else SetError(1) Return "Host not reachable" EndIf EndFunc ;==>GetWMI Func _CPURegistryInfo() Local $aCPUInfo[6] $aCPUInfo[0] = EnvGet("NUMBER_OF_PROCESSORS") If @error Then Return SetError(@error, 0, $aCPUInfo) $aCPUInfo[1] = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "~MHz") $aCPUInfo[2] = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "ProcessorNameString") $aCPUInfo[3] = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "Identifier") $aCPUInfo[4] = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "VendorIdentifier") $aCPUInfo[5] = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "FeatureSet") Return $aCPUInfo EndFunc ;==>_CPURegistryInfo Func PixelColor() $GUI = GUICreate('Pixel Finder Tool v2.0', '150', '40', '-1', '-1', '-1', '128') $Input = GUICtrlCreateInput('', '0', '0', '150', '20', '1') GUICtrlSetFont($Input, '9', '600', '', 'Arial') GUICtrlSetState($Input, $GUI_DISABLE) $Input2 = GUICtrlCreateInput('', '0', '20', '150', '20', '1') GUICtrlSetFont($Input2, '9', '600', '', 'Arial') GUICtrlSetState($Input2, $GUI_DISABLE) GUISetState(@SW_SHOW, $GUI) WinSetOnTop($GUI, '', '1') While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE GUIDelete() ExitLoop EndSwitch $Pos = MouseGetPos() $Pixel = PixelGetColor($Pos['0'], $Pos['1']) $Pixel = '0x' & Hex($Pixel, '6') GUICtrlSetData($Input, $Pixel) GUICtrlSetData($Input2, "X: " & $Pos['0'] & " Y: " & $Pos['1']) Sleep(15) WEnd EndFunc ;==>PixelColor #Region Drive temperature ; NEW HDD TEMP Func _WMI_DriveTemperature() _WMI_GetATAPISmartData() EndFunc ;==>_WMI_DriveTemperature Func _HDDErrFunc() Local $oMyError Local $HexNumber = Hex($oMyError.number, 8) MsgBox(0, "COM Error Test", "We intercepted a COM Error !" & @CRLF & @CRLF & _ "err.description is: " & @TAB & $oMyError.description & @CRLF & _ "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _ "err.number is: " & @TAB & $HexNumber & @CRLF & _ "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _ "err.source is: " & @TAB & $oMyError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oMyError.helpcontext _ ) SetError(1) ; to check for after this function returns EndFunc ;==>_HDDErrFunc Func _WMI_GetATAPISmartData() #cs Data Structure 362 Bytes: Word Vendor Byte Vendordata[12] = ( byte ID; byte data[11]) data: 01 - Attribute ID 02 - Nom/Flag 03 - Status 04 - Value/% 05 - Worst/% 06 - Raw/Value 07 - Cycles 08 - VSD1 09 - VSD2 10 - VSD3 11 - VSD4 12 - VSD5 see: http://en.wikipedia.org/wiki/S.M.A.R.T. Attriubuts: 1 0x01 Read Error Rate 2 0x02 Throughput Performance 3 0x03 Spin-Up Time 4 0x04 Start/Stop Count 5 0x05 Reallocated Sectors Count 6 0x06 Read Channel Margin 7 0x07 Seek Error Rate 8 0x08 Seek Time Performance 9 0x09 Power-On Hours (POH) 10 0x0A Spin Retry Count 11 0x0B Recalibration Retries or Calibration Retry Count 12 0x0C Power Cycle Count 13 0x0D Soft Read Error Rate 180 0xB4 Unused Reserved Block Count Total 183 0xB7 SATA Downshift Error Count or Runtime Bad Block 184 0xB8 End-to-End error / IOEDC 185 0xB9 Head Stability 186 0xBA Induced Op-Vibration Detection 187 0xBB Reported Uncorrectable Errors 188 0xBC Command Timeout 189 0xBD High Fly Writes 190 0xBE Airflow Temperature (WDC) resp. Airflow Temperature Celsius (HP) 190 0xBE Temperature Difference from 100 191 0xBF G-sense Error Rate 192 0xC0 Power-off Retract Count or Emergency Retract Cycle Count (Fujitsu)[21] 193 0xC1 Load Cycle Count or Load/Unload Cycle Count (Fujitsu) 194 0xC2 Temperature resp. Temperature Celsius 195 0xC3 Hardware ECC Recovered 196 0xC4 Reallocation Event Count 197 0xC5 Current Pending Sector Count 198 0xC6 Uncorrectable Sector Count or Offline Uncorrectable or Off-Line Scan Uncorrectable Sector Count[21] 199 0xC7 UltraDMA CRC Error Count 200 0xC8 Multi-Zone Error Rate [28] 200 0xC8 Write Error Rate (Fujitsu) 201 0xC9 Soft Read Error Rate or TA Counter Detected 202 0xCA Data Address Mark errors or TA Counter Increased 203 0xCB Run Out Cancel 204 0xCC Soft ECC Correction 205 0xCD Thermal Asperity Rate (TAR) 206 0xCE Flying Height 207 0xCF Spin High Current 208 0xD0 Spin Buzz 209 0xD1 Offline Seek Performance 210 0xD2 Vibration During Write 211 0xD3 Vibration During Write 212 0xD4 Shock During Write 220 0xDC Disk Shift 221 0xDD G-Sense Error Rate 222 0xDE Loaded Hours 223 0xDF Load/Unload Retry Count 224 0xE0 Load Friction 225 0xE1 Load/Unload Cycle Count 226 0xE2 Load 'In'-time 227 0xE3 Torque Amplification Count 228 0xE4 Power-Off Retract Cycle 230 0xE6 GMR Head Amplitude 230 0xE6 Drive Life Protection Status 231 0xE7 Temperature 231 0xE7 SSD Life Left 232 0xE8 Endurance Remaining 232 0xE8 Available Reserved Space 233 0xE9 Power-On Hours 233 0xE9 Media Wearout Indicator 234 0xEA Average erase count AND Maximum Erase Count 235 0xEB Good Block Count AND System(Free) Block Count 240 0xF0 Head Flying Hours 240 0xF0 Transfer Error Rate (Fujitsu) 241 0xF1 Total LBAs Written 242 0xF2 Total LBAs Read 250 0xFA Read Error Retry Rate 254 0xFE Free Fall Protection #ce Local $strComputer = "." Local $oMyError = ObjEvent("AutoIt.Error", "_HDDErrFunc") Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\WMI") Local $s, $i, $strVendorSpecific, $colTemp $colTemp = $objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData") For $objItem In $colTemp $strVendorSpecific = $objItem.VendorSpecific For $i = 2 To UBound($strVendorSpecific) - 1 Step 12 If $strVendorSpecific[$i] = 0xC2 Then ; find Vendor Parameter #194 - Temperatur $s &= " " & $strVendorSpecific[$i + 5] ; Raw/Value celsuis ContinueLoop 2 EndIf Next For $i = 2 To UBound($strVendorSpecific) - 1 Step 12 If $strVendorSpecific[$i] = 0xBE Then ; find Vendor Parameter #190 - Airflow Temperatur (if no tempetature is found) $s &= " " & $strVendorSpecific[$i + 5] ; Raw/Value celsuis ContinueLoop 2 EndIf Next Next Return $s EndFunc ;==>_WMI_GetATAPISmartData #EndRegion Drive temperature Func __StringToDate($dtmDate) Return (StringMid($dtmDate, 5, 2) & "/" & _ StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _ & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2)) EndFunc ;==>__StringToDate Func On_Drag($sGUIInfo, $sButtonID) Local $aCurInfo = GUIGetCursorInfo($sGUIInfo) If $aCurInfo[4] = $sButtonID Then ; Mouse not over a control DllCall("user32.dll", "int", "ReleaseCapture") _SendMessage($sGUIInfo, $WM_NCLBUTTONDOWN, $HTCAPTION, 0) EndIf EndFunc ;==>On_Drag Func _DecodeProductKey($Product, $Offset = 0) Local $sKey[29], $Value = 0, $hi = 0, $n = 0, $i = 0, $dlen = 29, $slen = 15, $Result, $bKey, $iKeyOffset = 52, $RegKey Switch $Product Case "Windows" $bKey = RegRead("HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "DigitalProductId") Case "Windows_DPid4" $bKey = RegRead("HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "DigitalProductId4") $iKeyOffset = 0x328 Case "Windows_Def" $bKey = RegRead("HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DefaultProductKey", "DigitalProductId") Case "Windows_Def_DPid4" $bKey = RegRead("HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DefaultProductKey", "DigitalProductId4") $iKeyOffset = 0x328 Case "Office XP" $RegKey = 'HKLM\SOFTWARE\Microsoft\Office\10.0\Registration' If @OSArch = 'x64' Then $RegKey = 'HKLM64\SOFTWARE\Wow6432Node\Microsoft\Office\10.0\Registration' For $i = 1 To 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 Then ExitLoop $bKey = RegRead($RegKey & '\' & $var, 'DigitalProductId') If Not @error Then ExitLoop Next Case "Office 2003" $RegKey = 'HKLM\SOFTWARE\Microsoft\Office\11.0\Registration' If @OSArch = 'x64' Then $RegKey = 'HKLM64\SOFTWARE\Wow6432Node\Microsoft\Office\11.0\Registration' For $i = 1 To 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 Then ExitLoop $bKey = RegRead($RegKey & '\' & $var, 'DigitalProductId') If Not @error Then ExitLoop Next Case "Office 2007" $RegKey = 'HKLM\SOFTWARE\Microsoft\Office\12.0\Registration' If @OSArch = 'x64' Then $RegKey = 'HKLM64\SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Registration' For $i = 1 To 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 Then ExitLoop $bKey = RegRead($RegKey & '\' & $var, 'DigitalProductId') If Not @error Then ExitLoop Next Case "Office 2010 x86" $RegKey = 'HKLM\SOFTWARE\Microsoft\Office\14.0\Registration' If @OSArch = 'x64' Then $RegKey = 'HKLM64\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Registration' For $i = 1 To 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 Then ExitLoop $bKey = RegRead($RegKey & '\' & $var, 'DigitalProductId') If Not @error Then ExitLoop Next $iKeyOffset = 0x328 Case "Office 2010 x64" If @OSArch <> 'x64' Then SetError(1, 0, "Product not found") $RegKey = 'HKLM64\SOFTWARE\Microsoft\Office\14.0\Registration' For $i = 1 To 100 $var = RegEnumKey($RegKey, $i) If @error <> 0 Then ExitLoop $bKey = RegRead($RegKey & '\' & $var, 'DigitalProductId') If Not @error Then ExitLoop Next $iKeyOffset = 0x328 Case "Office 2013 x86" $RegKey = 'HKLM\SOFTWARE\Microsoft\Office\15.0\Registration' If @OSArch = 'x64' Then $RegKey = "HKLM64\SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Registration" For $i = 1 To 250 $var = RegEnumKey($RegKey, $i) If @error <> 0 Then ExitLoop $bKey = RegRead($RegKey & '\' & $var, 'DigitalProductID') If Not @error Then ExitLoop Next $iKeyOffset = 0x328 Case "Office 2013 x64" If @OSArch <> 'x64' Then SetError(1, 0, "Product not found") $RegKey = 'HKLM64\SOFTWARE\Microsoft\Office\15.0\Registration' For $i = 1 To 250 $var = RegEnumKey($RegKey, $i) If @error <> 0 Then ExitLoop $bKey = RegRead($RegKey & '\' & $var, 'DigitalProductID') If Not @error Then ExitLoop Next $iKeyOffset = 0x328 Case Else Return SetError(1, 0, "Product not supported") EndSwitch If Not BinaryLen($bKey) Then Return "" Local $aKeys[BinaryLen($bKey)] For $i = 0 To UBound($aKeys) - 1 $aKeys[$i] = Int(BinaryMid($bKey, $i + 1, 1)) Next Local Const $isWin8 = BitAND(Int($aKeys[66]) / 6, 1) $aKeys[66] = BitOR(BitAND($aKeys[66], 0xF7), BitAND($isWin8, 2) * 4) $i = 24 Local $sChars = "BCDFGHJKMPQRTVWXY2346789", $iCur, $iX, $sKeyOutput, $iLast While $i > -1 $iCur = 0 $iX = 14 While $iX > -1 $iCur *= 256 $iCur = $aKeys[$iX + $iKeyOffset] + $iCur $aKeys[$iX + $iKeyOffset] = Int($iCur / 24) $iCur = Mod($iCur, 24) $iX -= 1 WEnd $i -= 1 $sKeyOutput = StringMid($sChars, $iCur + 1, 1) & $sKeyOutput $iLast = $iCur WEnd If $isWin8 Then $sKeyOutput = StringMid($sKeyOutput, 2, $iLast) & "N" & StringTrimLeft($sKeyOutput, $iLast + 1) EndIf Return StringRegExpReplace($sKeyOutput, '(\w{5})(\w{5})(\w{5})(\w{5})(\w{5})', '\1-\2-\3-\4-\5') EndFunc ;==>_DecodeProductKey Func funcExit() CpuExit() Gollog("<<<<<<<< ComputerPlucker - exiting|") Exit EndFunc ;==>funcExit Func extractINI() $cryptstring = "" Local $astring = _StringExplode(BinaryToString(_sqlini()), @CRLF) Local $avalues[0][2] Local $asemivalue = "" ;_ArrayDisplay($astring) For $i = 0 To UBound($astring) - 1 $asemivalue = _StringExplode($astring[$i], "=") $cryptstring = $cryptstring & StringLeft($asemivalue[1], 1) _ArrayAdd($avalues, $asemivalue[0] & "|" & $asemivalue[1]) Next ;gollog($cryptstring) ;_ArrayDisplay($avalues) Return $avalues EndFunc ;==>extractINI Func Ncrypt($operation, $string, $Key) ; NSC standard string crypt/decrypt function, ; >>>>>>>>>>>>>>>>>> if changed, change the same function in Ncrypt.au3 (and recompile testbed Ncrypt.exe) <<<<<<<<<<<<<<<<<<<<<<<<<< ; operation = crypt/decrypt - bypass -> (no operation!) , string= string to operate, key = the password If $operation <> "bypass" Then Local $iAlgorithm = $CALG_AES_256 If StringStripWS($string, $STR_STRIPALL) <> "" Then ; Check there is text available to encrypt. If $operation = "crypt" Then $string = _Crypt_EncryptData($string, $Key, $iAlgorithm) ; ENcrypt the text with the new cryptographic key.) Else $string = BinaryToString(_Crypt_DecryptData($string, $Key, $iAlgorithm)) ; DEcrypt the text with the new cryptographic key. EndIf Else $string = "" EndIf EndIf Return $string EndFunc ;==>Ncrypt Func WMICpcModel() ; NSC wmic model PC get Local $proc = Run("wmic csproduct get version", @SystemDir, Default, $STDOUT_CHILD) ProcessWaitClose($proc) Local $pretext = StdoutRead($proc) Local $aPCmodel = _StringExplode($pretext, @CRLF) $PCmodel = StringStripWS($aPCmodel[1], 3) EndFunc ;==>WMICpcModel #EndRegion - Internal Functions - #Region -base64files 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 Func _WinAPI_LZNTDecompress(ByRef $tInput, ByRef $tOutput, $iBufferSize) $tOutput = DllStructCreate("byte[" & $iBufferSize & "]") If @error Then Return SetError(1, 0, 0) Local $aRet = DllCall("ntdll.dll", "uint", "RtlDecompressBuffer", "ushort", 0x0002, "struct*", $tOutput, "ulong", $iBufferSize, "struct*", $tInput, "ulong", DllStructGetSize($tInput), "ulong*", 0) If @error Then Return SetError(2, 0, 0) If $aRet[0] Then Return SetError(3, $aRet[0], 0) Return $aRet[6] EndFunc ;==>_WinAPI_LZNTDecompress Func _youngchicken_ico($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Base64String $Base64String &= '+L4AAAABAAUAEBABAXAIAGgFAABWIAAAACAgA3ioCEgAAL4ATDAwBDwOSAAAZgAMQEADPCgAFgAADh0AAIACgAEeIAAoCAEA4DYzAAAoAIYApAAiwwNOAgABAADDAHYBBgMBFgEGUlNZAFNTAFoAWVlfAGBeAGQAXl1jAGRiAGgAYmBmAGVkAGkAZmRqAGtoAG8AaGduAGlpAHEAaWt0AHNzAHsAcXN8AHF1AIAAQUVOAEhLAFMATlBXAFFSAFoAVVZeAF1eAGYAZm56AGx5AIUAaG55AGxrAHIAZ2dxAGprAHUAd3d+AHZ4AIEAdnmEAElMAFMAVFVcAFhYAGAAXWiAAGWDAK4AYZTVAHe7AOkAe7zeAHenAMMAcYWWAGpsAHcAZWhyAGRpAHQAcXR/AHZ7AIYAXFxiAF1dAYABXGEAZ2VrAABedKcATnrNAABLes4ATYLTAABen+cAdcTzAACG0ewAfaa7AABnb34AY2h0AKBrcn4Ac4AfWIB3AF5fYwBmZWYAAm+AY2WJzgA+XgKwgCG1AFuM0wAAR3TJAGCe4gAAgM7zAIzY9AACeIBFdHqIAHx+AIgAeoCLAE1QCFYAUYCdUVRbAABjgaUAa5vbAABlj9EAUHfDAABPfMsAU3/PAABIcscAaq7pAAB5yvAAfdDxACB7n7kAfIAdeH8AigBGS1EAUFMAWABWXmgAWn4AogBVZ4QAVGAAgwA/T4UANU8AigBLdsYATXoA1QBineQAc8EA8ACB1vUAjNUA7gCEp78AeIQAlQBCR08AUFIAWQBhYmYAYGQhwD9eZQBjwAFdXwBsAFlfdQBBXACTAEl2ywBRgwDXAGCb5wBztQDuAHy/8AB6tgDsAG+VywBARgBPAENHUABMTypXwEFlwBFowHdvAABubXUAW2J7AAA4Uo4AQGO3AABSe9cAXpDnAABjmusAaJ3tAABqnO0AYmJpAABoZmoAamhsAAB1cXQAenZ6AAB1doEAcHaP' $Base64String &= 'AABxd5EAYWaCAAA1Q3MAJzt2AIA8W6wAUHzZwHUA6wBhk+sAbaAA7wB1dXsAe3WAdwB/eXoAesCDAGVrhQA/UYYAADRMkAAuQ4EAACY2bAArPnYAgCpAfgBBZrnAYwDjAF+R6QBomwHAMIWRAHl5gAAAfXqBAFFbfwAAKDpzACAwZgAAHyxcAB0oVgAAIjJjAC1CeQAAKTtzACk9dQAANVGYAEJnvQAAVH/cAF6N6AAAhJSoAG98jgAATVd1AC9EfAACLMAKIC1bAB4oAFMAICpVACIwAl/ABHsALUR/AAAmOnIAL0iJAAA0UJYAR2zCAABMddUAf4+qAABEV38AKj9zAAA7V5AAJDRlAAAjMV4AIC5cAAAhK1gAIS5fAAAtRocALEaJAAAlN28AL0aEAAhDZrXAIMAAQ1MIdgAewBouRHUAADRNgAAnOWkAACo+bwAfLVwAACIvYQAoOHIAAC5FiQAxS5UAgCY5dAAmOGtgDwCUAD5gsgA5XACuAC4+ZAAeKwJT4AVWAEFVfQAAXXKYACo7ZwAAHy5eACQyZgAAIzJnACU1awAALD58ACs8dwAIJTZmYDBwADBLAI4AMEyTAP//Bv/jgAgA6+zt7u8A8PHy8/T19vcA+Pn629zd3t8A4OHi4+Tl5ucA6OnqzM3Oz9AA0dLT1NXW19gA2ajavL2+v8AAwcLDxMXGx8gAycrLrK2ur7AAsbKztLW2t7gAubq7nZ6foKEAoqOkpaalp6gAqaqrjY6PkJEAkpOUlZaXmJkAmpucfn+AgYIAgwqEhYaHiIkAiouMbm9wcXIAc3R1dnd4eXoAe3x9Xl9gYWIAY2RlZmdoaWoAa2xtTk9QUVIAU1RVVldYWVoAW1xdPj9AQUIAQ0RFRkdISUoAS0xNLi8wMTIAMzQ1Njc4OToAOzw9ER8gISIAIyQlJicoKSoAKywtEBESExQAFRYXGBkKGhsAHB0eAAECAwQABQYHCAkKCwz4DQ4PDiIf' $Base64String &= 'AAoA4axhrIvAseesBO+sUFFWYp2gYWFmAGRgql3grAFhrmlnbAByb3QRYG9tAGfgm2trcwAAdHR8AG5xfAQAc2BqZ2hrAH4EeXxgj4UAQ0hPQABFSlEAX2CzYwBmcAB7e4MAOQA+RwA9QksASgRNVWB5WABVWWUAAGx2gwB5h5kAAG17jQBsb3kAAHuBjABBRk0AAFxeagBSWXEAAFtjewBreJeAAFiIyABpp2BiAM3wAIfW9ACGALrXAHap3QB0EJKsAGVgEVxidYAAXXq0AGCRYGcAkOYAZKbsAGwAtvAAdsXyAHsEzPLgmvEAeKvKAABcYW0AcGxtAABtousAS3PMAAA+Z8QAToPYAABamugAhcnmAAB0m7cAZnSKAABVds4AQGbFQAA9Xq8ASeCrOABbtQBstO4AfQDR8wCZ5fgAkQDd9QBvgZoAdAB8igBtlskANwBXpgBEaLQASABmmgBlodQAOgBdsgA8YqoAcwC88ACK3PUAlhDg9wCE4AdYh9gAADVUowBBX6kAACtFhABVh74AAHm47gBVg+IAAD1iuwBMe9UAAHXF7wB+zO8AAH2AhwCBgYoAAFZYXgBpmuMIAHKeYACo6ABkAIvRAFyS2gBGQGzFAEVrvGAH3QAAWXOUAHK97gAATVFZAE5cewAAS1iBAEZalAQAMmBpLUaKAIUAoLYAboqwAEQATHQAKjxzACgEOWVghnMARm/MAABdkukAZZvrBACNYBSSz+sAhACrzQBRWn4APQBReQBNeNcAawCq7ACQ0e8ATABhhQA5VpUAcwSn8vAT8QA4R3IAADNLhAA9YbUDsFcwFIvmAGqd7owAYvBT8VozQ2swUQC9AFN80wBgjQLm8Fd2AIJ9gQAAen2JACQ4dwAALEODAEFhrQAASG/PAGue8ABAeXN1AIF8MFZ1AKMAWWWLACg3AG0AIS9iAH13gHcAMk+ZADAwUAgkNWwwDY0AZG0AgwAdLGMAHiwAWwA0U5wA' $Base64String &= 'g4sIlgAh8EodJ1MACCMzZHBRfABaioDlAFVfggAhsFIAKz57AFV/4QAohZWpcEhtsFJ/AAAiMV0AHSlUACAbJkwALrBTHzEAZQCPnrYAipwCujBNbgA3UYwAGDFFgHAU8FtupQAAP2SfAC1JkwAAO1WLADNKfQD4h57Bf0oPAA8ADwAPAH8PAA8ADwAPAA8ADwAMAJIAuru8vLySK8ogwIqrrqMAAK6qAKeitaZ4sLDBAHpavXR0ipK6ALy7ur6CxIawQKuro6OioiAAtQC1msGwecHBqAClWHNwvLqrugBPyJKwwcmwrgCrrqK1erWopQClmqO6uHi9WACbTVgrkrq6vgDIyLl4q8mmqwKrAAJ6mlhYpbUAorqxqIxqk1EAUb8kisG+scYAsbC7q5Kurq4AtKuwmcdamqcAp6KoRI06TmoAQr+/SsSwesUgT3qrr7rxAbSuEJqsqLEwCKVOWQClk2pFv8BKQABwusHCwr67tACuvLS0q6uwhwCotXqZw3SasQBZe5yctxwdGwAQIriZuYu6qwC7vK+usLiqvQC9er61vaiomwBqjV2DrRwNFSCXDbOap5ANrq8Ar7SreqaxpqIAp7WHTVlqnLYAsl2tFZafl5egFXGZqqrBEa9AZQB4eqJ4pnSskwB7g7KQkJgLBwKfAACWqXKap5kAmaKqq6KLeKIAeHqZrJNfXY4AnYmIBweepJ8EngcgBKFZm1FNAKV4o6Z4p6d6AKiTbImdkI6QIJAICgeeAACXnwCXng0koKAkoQB3kqKjo3NNOwCDkHxdlY+PIQIEAAAhBpYHlpaBMASXl5iYcHrxagBdXZCQkJ2IiAASkZEYGBgEBAADAwoHCgoHDQANI5JaWJOUjQCVkHyPj32POUAXFhcXIABQBBqAAhQhIQMKLbBtQDpqjY2OfQAAjwCQkBYgIBEFAgAODgICCQgDIQAHDYaHRHteewBsfH2IhFxnhACJaCAYAQ4OOAAOZBoDEwMG' $Base64String &= 'FAAigYJSX4M8hAAxMTMoM4WFXABMHAAYAQICN0B2cBohISKhclIAezx8fUYyYEcAVH5Vf4AcHxFBAMMSbyVQT+J0dABDL1c7OjwmbgHwAVQ+dRwQHxEAGBEYEhhtUGkAKipmaERra2UQaUVBaeABNUdhACsfHxAfAAEEIARkZDc/gXdOVwBpajxrTWxGYABgR0dHPxBjYgBiHQEEBQQTDgQOHHR4V11eXzEAYGFhKCg2HWIAY2MfHwQBBQaADjg4CkxBTSB7ACpRUjwxUydUAEhVNkALFQ0fAB8fBQQDAgIEJAIG0ns8RZB6RjMBIHw2SiwsHgwbBBtL0BcBAAEGOCQjLmF8PD1BfSg+AD8eDjctLSwLFBAQIHQBIAoCLS4CKRN/KDU0Nh0sAAoeNy03Hg0QAB8XIBYgGgAYAhrIfx0MDAoKHggsLAzgAxAWFxICEgAcABkaAQQUQYGACQoKCgkAAAqQCxUVFfAREhGBegkwBhMDAQACAwYHQA4DFA4DC/ALDGwNEJABoIMCYApwDAIBEQIKBggOCQoJcAwLDwwQBqEDooUCAfABAwMGBgMHCJAIAwkKIAALDJCG/x9BDwAPAA8ADwAPAA8Ac4ppIOQAYHmKCX+KcYRRAFFXAFdZXgBTpFVbc+FfZnCKbXCLSGsAanCKcW5zimOwZnIAYvGMsIJz8OAGdTCKcYtWWWIAcTXwgGsw4HQwjHGKXFwIYwB0sGp6eHsAYEZJTgBO8JAxiTwgQUoAbHVzjEpPA3B2sHZeYGUAXmGAawB9eX0AdbCAAkJwb2NrfABoeACOAHmNpgBsggKZcNiJAHh3gAAILjM8MJFSAFdcAGsAUldzAGRsAIYAZXalAHKbAuawzugAitj2AACL2vUAhsfsAACGu9wAh63SAABzqMwAVmqWAABTfdwAYpXsAABonPEAZ6jrAABxve0AgtPzAACL3fkAfNLzAIB4xuwAXWRxMJgAaQBJWYsAUXkAyQCZ1+sA' $Base64String &= 'VYQI4gBYcHlbmuoAAF+g6wBss/AAAHfG8gB30fQAAHmSqQBNVmUAAHeAjwBsk8kAAIW88gBMfNoAgD1nwwBZlOWwAgDtAFF70wBFbQDKADdcuAArSwm/AKcAb7vrAHvNAPMAjuD4AExuANIAN1eoADpeALQAWInOAD1iALoAU4HbAJfjAPgAbIi2AE53ALkAWoS7AEZoALQAKEebAGeaAOQAd6jXAGp6AJUAfIKNACc/AIMAHjJoABswAF0AitHuAEVrAMQATHrMAD1hALQAcr3xAIGCAIwAgJW3AHarAPQAMU6jADVTAJ0AL1CSADxaAJwAWo3kAH2zANcAhYGDAGiZANwAPmOrAGuiAOwASHPIAEx5ANUAWYbWAHeXALcAaoSoAGKKANcAhsb0AEZrALwAPWq/AFZpAIwAQma8AHiyAPQAdKfrADdHAG0AO1aLADdIAHcAQliZADVOAJsALkmSADNNAJQARGWZAEZTAHcAVV10ADA3AHIAJTdzACQ1AGsALESJAEd0ANMAg6K+AHmGAJgAIjJjAF2SAOkAdLXuAJbbAPMAhZWpAC1BAHUANEyEADtZAJUAbqTyAGOUAOYAZZvrAGqdAO0AXGZ9ACo6AGsASGalAEdrAMUAWoXkADtbAKwAY47lAIN+AIIAKUSFAIF+AIkAJTp0AEFfAKsAgnx9AFRiAIMAKjxzAB4sAFsAJTx6AGt3AJIAXHWlAFZ4ALUAKTlnACY4AG0AIS9jAB0tAGIAe3V2ADFGAIIAK0ODABgnAFwAHS5pACxCAHsAKz58AIOMAJkATF2EACErAFYAGydSADFFAHsATHLLACEtAFwAOE2IADtVCJIAS4BtICtPAACQoLYAHSlUAAAbJk0AMUuMAAAqOF4ANFGUAICMnLUANkl0wD0AXAAaJksALkoCjMBnowCIpcMAMP///wA/AB8AkuEIktjiAQDhMXnlAOXlz76+1NTFAtTAAMW+vqOexACwnJy9xKPh' $Base64String &= 'wwDEqLnMn+O3t2C34JLY4QAMgADPAImIeYmS2r7UQKPFxcWexQANxQCevajI1cicwwCjo8TEccmX4wDj3uPg4N3hcgDb2nKow8OSkgCalOG+cr6+xQCenJ6cxJ69xACdzXC/cL+jowDDw8TEvd58lkDk5OOO4trAC3IAqDqTqMZycagA4KO+4b7a1MMAvc2cnc3In9wA3OOfncZyw6gAuai3fGFitOQAfCiS23LhctoAqMGZk8yoo3IAk5NxvuHR2r4Ans3Nnc2Y5HsQunxwzYAQqLm3AHy0dnRh5LTfAG7dcuHExsaqBKqpwAvaw5m9vgK+ABjaxZ6/cJcAtHthl7+dnuEAxMzetHTT02IAYmKP39+8w3EAqHFxqZl9zHEgcdraqKhBSNDQBNS+AAyWcHDNcQCenp691oxZSQA7j3bTdHTf2RDfjuBxwAvCmcwAceHa4trD4b4IvuHawAvFzeOWBJ+YgBfDnslhdQBlZXRhanSPWwDZ2dlQKZrDcgCdOmmxzKPa0STQxYALxdAADNS9AN5+fdy/vZ3EAMypmGp8l7dhCLJgZOAFp28pKQCa3crGqZmTnWTa2gAF0dvBBSAM3AB+3Km5nZ7MyQLJ4Ay/mIxaWloAYNmnUFIdHSkAm8PFy57Wqp4h4AXQ0dvY4AWjygC+narcybmengDJt8ypub+V0wBZ1ztVVadQogBvHRUOEC/SzRC/y9aTIRHR0dgBoBGwqMae1qnMBJ7G4At+l5+xjIBb0zuzO2CiwAUADw8VGA6vqbdAncXSzcXF4AXRANHF0MWUqZ7IAeAFo3HM1rR8gwCPstc7s7M7OwCnom8QGBiBgYAVD8+5nsbKQEcDAB4hBtTF1dW50gLEgCmp1n60YY8AWtPXs7Oks6IAzhUOGLuBu7vggSTPnL0CBmBNIAYAxZ6dqZ69nsRAzdLScJ97wAWGALO1PD09b4EYCBIYuwAAGBUUjgBGqp/LxcvLnQCdxcrKypzIzABx' $Base64String &= 'vZ7NqMSdnwGgC1VJszyuq6sAeg8YEsfHx7sAx7sXCSu2FDqARpWWe3twcCEGAJ7IRp3Enb3EAJ6pYqCgSj2kADw9hK08PQ1FAcAFxxgYuxK7tgEAADBGsY+6VmQAurpwxcW/yLABQBOeyXtbYKSQMHo9PElADOAFCRISGAAAuwniBSsTFADAwcIxOjE6mgDDnrDExcbFnwBhe2FgVTytSoBJO6Q9rq5FAgAQEhISCWAYF7sXCitgBrgAACoUMLwAqJy9vr+WYVuAoFVVSqSks8AFAKsyESEREQICABERFgUJEgkJBBcJYQy2tri4bwAVuDCwublxlwC6RzuzSUk8PQCuPD2repB6LQAfJS0fGh8fAAARBQUHCgYKKwgXBgogH7YYDzAAknG3n3yyilkAZTy1PaStrauCruAjMiUcHCUBAAAfAxYRFhYRBQAGIgUiBS4iBwANRJqjnbR1dACyO0dgszykSgQ8rSAMtTyuHB4EHhwAAC0DBQYFA+IFAAYuBgoKr5pgsKmxhYbgBaBGPACEra08rTKurgA8PB4cGRweHAAaAiFFEEUHBQAMBgoHIi4FCwAXFI6UqmN1WgBbW1ZVSTxXqwA+PqWlbKytrgCuih4eGhoaIQFhJA1FFgUKBgcCC+AYEx0wm6mDAHWghmR1SkuEAFc+M4tYpYs2AKUzkFOJGRkaAgOhBQoKURwgFgIHQAYLJkQumpoAqH1WVWVVST4AWE0+TXc1pkMAQGZIc1RToioIAhoDYBFFRUSJACkfLgcuLkREAC8vlJyjnH1WAFagpH+EpVh3AHdeXjVfQV+mAHM2N6ckUhoZAhygFwIgUWmCmQCaUS6bL5KcnACdnp6fR1eghgBZV0tlTD9dTgBPQl9fX2ZIoQVgZVKBIxoaHBqSgIldbWmTlEYAJwCWl5h8aDKEhgBWW4WFY11dQwHyAjQ4UFIkJFICb+AFGRwaHBwfAI5tgIJsN20yADKKY4yPdoWCAJBHXIyK' $Base64String &= 'hpFdAENAQk9PQk+AAIkqb28kb28DCAIDAgEAH1GJYwBHilSLVDJHjABZinSNdVSMXABZO1dOP11CTgBDQk82UCR4eAAqDypSAQECBQgHBQQAACZtejIAMmyCaIN1goQAhVaGh2tcWlcAd3dDQ15CQkJAT4gPb4FvAAYkAAMFBBYEFhYFAAwHB3lUejt7AHxofX4+VD5JAFd/a1ZJWFhDAF5DQ0BfQYApAA9vb4F4b29SIAQFAQAEEy0qOAAyYHBhYXFyYwBzM3R1dXZXTQB3P0BANWZmQkg5JybwAm94AAMEBAQD5AISBmcyWgBbYUdoaUM3agBra1ZsTU0/XgRfZgAAbW4TEA8AGA8PbxVvbwIIBAIF8AIMBQUFAAYUR2BWYWJjAExjW1xkZUlLEExYXk/xAjgpEAANExAQEA4dD0QdD6ALBwQDAAAFAAYJCjpZO1pbAlxAJlpKS0tYXQJegRc1OSQQDQtAREQmDRAdAAMWQYAFBAMBAQMACQsARlNUPlVWVVcAS1dLPj5YTk4ATzRCN1AmDQ0AIkQiREQNJh0AUg5SFgIBAwEB0BQFDEUFBUZHAEg2SUpLTE1NBk7AAnAdQ1AQRA0AExNERERRRA0AEA8OUlIAGxlAGxwBEREDADYiADA6KDE7PD0+AD9AQUJBNEM3ADkpEwkTEwoKAA1EDQsLChQPAA8kDx4eGxssAgDwCy0fFi4uLwAuAzAxMjM0NQg2NzjAAgoTDgkBQAAKDQ0KDg4PABUVFQ8kHh4eCCUZGZF+HwAAIAFxDwcmJygoKR04CwoJAQDABRAAChAADxUPFSorFRUB8AUAAQEBABsfEAMfIAPQEgYHCgAKBgsMBgYGCAAJCQgFIQcLDUAiChAODyMAGA8AJBUZARobHANgARoBAwRiD2AYBQAHBwcMDBYWCAQIBpAABw0MCxOoDg4VIGIQkGIBIAgEAAOCAgUWBQQGDQBCBFECIAMICgYIAAoKCwoKChMJBBcY' $Base64String &= 'MGgKEBQPAwADAhECAwMEBRwHBkED8AKgFQcHBgEQAAkJEgoGBgcJ4A4KExAGEA4UECAUFQABAvAXAQQNcQUFUQAwBgcGCAYQCAcGCcEGCAgKiAgLDPERCg4PQCH/H5EPAA8ADwAPAA8ADwAPAP8PAA8ADwAPAA8ADwAPAA8Avw8ADwAPAA8ADwADACgwAIpAMACAMAABAAhDATlQGcMOMwBAATIARUoAUQBKTVQAWVcAXQBTVVsAXFwAYwBiYmYAaWYAbQBkZGsAYF8AZgBqaW0Aa2sAcwBybnMAZ2gAawBkZnIAWFwAaABdYmwAZWkAdABsbnkAb3AAdABzc3wAfXgAfAB0doIAbXEAfABtdIIAUVEAVwBZWV8AVVkAYwBybW4AdngAfwBWWV4AdHEAdgB7e4MAdHkAhAB1fYoATlEAVgBFSE8AX2EAZQBNUVkANjsARABBRU0AenYAewA3PEUAQ0cAUABLT1kAOj8ASAA9QksAgn0Cg3LaPEFGAGRpAHgAZW2EAGh6AJYAepS1AIebALkAeIunAG2FAKQAanaJAC4yADwAbJXOAGikANsAcb3tAJTaAvQw4voAg9P0AAB3xvMAi7DOAAB5psUAXWNxAAJ7cM1aY3wAWWcAhwBRXIMAVFwAdgBbjOUAZZoBsNGq8QButvEAAIja9wB4xuwAAFZslwCdyuIAAGOL2ABah9kAAE+J4wBblugAAF+i6wBzvPIAQHrU9gB7zPAF3AD1AJHP6wBPYQB+AFRqowCRy4D1AKbq+gByMOEATHrVAFWE4gAAa7PsAHqw2QAAeLXrAEh11QAATXzaAH7S7wAAd4CNAFN0tgAARHLMADxivAAANFu0ADdbuAAAPWjFAHmhuwAAU3nLAFN71ACAS3XTACxMo/LtAHqHmABSfNsAAEVsywBFasUACDFRpfDlxQBqpgDrAHer6wAjPgCTAEuA1wBrtwDpAG2BnQCHtQDnAFJ94QBCZQC7AFeIzABf' $Base64String &= 'pQDfAIbK6wBFZoiqADLw5itImHDeAKcARmm4AEJcAJgAJj6CAB4xAFsAOVaXAIbHAPMAPWS1AGSaAPAAhLrzAEpzQsxw82oAGCVw10ECanLygYmVAHm4APQAWorlAEp5AMoAHzyKAHCZAOQAYY7mAHvSAPQAhYCDAHGRgrSy5ztcrQBk8BOAZZfkAFVvlrDfAMUAdan0ADphAK4Ag53BADlUIIkAPlB48N2FAIA0UpsAOFin8CMAkQB1d/8/iABZgrAASGWaADVEbABGUG0AN0h3ADU+cAAnNnYAKjx0ACQ8ewBuo/MAR1V4ACEvYwArPnwAhZWpACo5ZgAkNWsAK0J2ACxCfABGWYgAMk2TAGqd8QBkfaYAMUN7ADNKhABjlesAIzNkACU6cwAxS4sAHjFlAFKB3QAsQ4MAHC9pAHp1dgApOmwAHS1jAIF7fQCJg4MAJTltACEtWwA1VKMAO16zACM2cgAdLFsAFyZaACxHiAAcJ1MAISpVABolTQAqRYoAhpCdAB0qVQCOnrYAIjJdAJCguAApNlwAZ4a5AFh2qwCQn7kA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJeX6ZfilpaWlpaWlo6nom+rq0FBp46O5d3M3czZ2b6+2dm+vuHCzMzUubnUubm6wczMzNjCusPDxN/O4+ONjdGtl5YtJueWlpaW4eKWlzdv7KvsNa3l5Y7V2dnMvtm+zL6+vuDevszU1Lq4ja6uybrBzOfBwtjYlcTOxt/f49/RtaeX5enn5ZaW5eWWlpfFgDPINk/p3eXZ2b7MzMzMwsLMvr6+wr6+wrm/v42uzr/BwcHMzNjCz5XExuPGxq+vxq2XteWOjuXl5Y6OtZfPwY7Btb23zN3d3d3d2czCuMLMubnCwri5ubm/jb+/0bmVzMzMwdiX2NjEj9qv' $Base64String &= 'r7Cwr+OA5Zbljufl5Y7PrKesw9iO58zdureVjo6+3d3g2cK5ub+Nucy/jY2NjcZ9ja6NvuGO59jDw5XDzq/a2qTbsIiINr2WlufnjuXewbTqp6zEzcLY3cy0rJeOvufg4OC+zLjJrr/cucXGiIzaiox9jbi+jo6Xw5XE36+wsIN6pHOIpDUz6eWOjsKO3o6s67SsrMPJut3dt7Ss0t3Z2eHg2d6+uL+5ub/O2tt5ioN9jY25zOfd1LvEzoiq24N6g3mwbKTmNb3hjo7Plc/ez4yPxKzD1NTd5eWstJXd3tnZ4Nnh4NnMwr+NjdqKeYh5jb+4uczMzLrEr7CRqJRxerCDg9t45ug2teeOlcPYz8+sqqzKzdjM3eXi6a3Dvt7Z2dnZ4eHZ3dXcjbvjiZ2747vczMLMzNS6j4t6cYJ2nG2DcHp4eubm6Da9l9iVz8+VxLO0ysPNzOXi4uWVw9nd5dnZ4eHh2dndvsSNxs6d48673L7C1MK637B6Up+b0IOIg3p6g23m5ujoNKesl9KOlcrq66rD2Mzd4ODljsLd2dnZweHh4NnZ2b7N44+v48bO3Lrcwrm5xMaPcHGoqKSIpHp6em1t5ujo5sB1M0eXjt7Dj+rqh8rY3eXg4eHnvtnl4czZ4eHh4dnZwt+Pj8as3826udi6v9/KiIfa49G7xouUcnqDbejo5sCAOIA4W5eW3tLEtGmsxM/l4OXn4enZ4uLh4eHh4dmO3d3EjLDG39HcutjYuq7f0cqP39zN0aSoenh3d3Lm5ubAgBZGOGhFl47d1dLDjI/Y3d7l4eHh4eLi4eHh4eXd3eWOz86MztHEzdzPzcrKu7vK0ZXDxotxlJR3cnJy5sDAdYBoOBcXFw6Xlc2V0sRcjJXl5dnh4ODg4uLh4eHnwsPd3s/EjM7Kv9zC0rrKv7vGxty7j4uonHJmgnZycnU25HVoMWggHBwxW7XE0cPSzbSPz+XZ4eXi4uHh4eHZ3Y63xM/Pw4zK' $Base64String &= 'xLrC1czNv42Pio3jpIuDbHhxYZuCgnI2dXV1FxUhHy4uHxVIrq7jub6+rq6+vr7d4ODi4eDh2eHdvsXKlc3OrtG6zL6+3MTOh8avioODlJRxgp+fgoKC5OR1LxYcHxRELh8fFUe/jbm+vr7Cub6+vuHh4ODh4OHg3b65xay6w66/uMLC2LrRj4qKh6TbqJRxcoKCgoKbm+SZmS8SExQULi4uLh+yxbm+0t7e3tW+vr6+vr7e4d7i4OHe1dzFycK/3MLC1LrJyqzGiHl5g3p4d3eCn5/Ln5+ZmC8UHh4U1i4u1i4uLrJHro3C1dXevtW+zMK+vr7h4OLg1NTcv8TMuMLCub/JysS/jeOwg3d3ZXaCn5/Ly8u8mC8vHh7T1tbW1tbW1igfF0bFjMa53NK+1dXCubm+1eDe4MyN0cTc2LrC1L/DutjYjYjba3hlgoJhm8fHx7y8mi8f0x4e09bT09bW1tYoKB8Vsk9Pio2NuY2Nudy5uczV1d3ewqyPxNjUubm4uszC36+Dd2pgm5+bm8u8qam8vKkcEhIeHtPT09bT09YeCx4uLi4fOMWP2oODg21ziY2NjbjMvsK6rKzCwtTCwsLSja/bcWXQx7zHy8fHo59JScvLDA0JHh7T09PT09YbG9MuLtbXLi6yRkdch4prenp6i4uNvr6+usnJ1MLCvr7Cu8avc3hgx5qavMeSgmFmYVRKoxISCRIeG9bT09PT0xvW1y4uLtcuLgsysjNcXHppXFzIXK7C1dXYusy+2b7CjYiKiHN6ZYJKqUqbgoKCn8fHx8cHBwwQCxsb09MeHijW1tYu1tYUFBUusi4uLrKxsS4uLrKxMr29t9TCub6+uYiKeXl6cndlYZubm4Kbn8ejo6OjJCQkDwcHBQYMBQwKGwYe0x4LCxMeCy4uLi4uLi4uLi6yLrGyOEfUur/V1dGIiW1ygmGCgmHLy8vLn8vHvKmpXyQkJBoCAwMDGgMDGggGCwkLCwsoCxUu' $Base64String &= 'Li4VLh4uLi4uLi5ELji4wru50r/GsKifgmFhgpvHx5JKy5K8vKmaqV8BIisAACUDASUlJSIaJAcIEAseBgYVLh4VCxULFS4uLhwfIBe2zJXRu9GKqJ5xcZ+jy5vHSsvHSry8o6OpqV9fLS0tLS0AACsBKiorAx0IAgQICBoICQYICAgGCA8KMjEWFkW9wc/NqouDenJxcHpym0nLklPQx8e8o0pJn6Oeo7UtJiYtLSoqLS0lIh0EAwIEBBoaDggIBg4PCA4CDggNMUO1uMzNzmtxcWt4dp9ycoLLy1RJSkpJSkpKSsufy6MtLSYtLC0sJi0AJR0HCgcICAQEAggGCgYNCAgOBxEeF0Vbl8nKh4uEYHh4d3JhgmFmm1+je6VKSkqlqbxKSsufMDAtLS0mJjAiIgMEDBIMDAcHJAUJCgoHBw4CDgYyFTJFW5ePhKZram5tbG5yZklKSbxiSlRLfHumpkpKo8efny0wLSUiLSIDJAwMDCQSEgwHJCQKCQkHDQ8OCA8GLgsyW72saZx+a2BsbGpmU1THVEqlYmRMTJqQkzule3ypOsgtMC0lAB0kDAwMDAwMDCQdHQMHCQckDA0IBg0NBjIyMsW3xmucYGBqbmBKpVRLVFRVPHSGYmJOXT2GhpqTOjexIi0tAwMPDBIMDBsSEg8iLSIDDwcEHQwQBgoySEi2trjDxKpudmZhZUmlZGJiYlU8Tj90Wj+GdF49WoZkOjYhIR0iAx0EJCQMDAwPQ4CzWw4dJA8kGg8HDUi9R7a4wcK4w6pubmVhpkmlfDxWQGJAWKBZWXQ+Plk9PVpdhjR1aGglIgAAIiIdJCQaGhqihbS9W0MPQ0MxSLa4uLi5vr6+v7BSam5lSUmfe0pUVTxWQFhnV1k+Pll0dD1QNMB1sXUvIgEtLTAwHR0iIisls3+FtJe1tra2tre4ubm5ubm6u7BSvFR+ZXhySaZrfjyGf39YV1dXZ1k+PT1QQbGxISFoLyMwLS0t' $Base64String &= 'AAAiMCMAK6eFTk46h6ytrK6MioqIiIivsIeEX19UZWtsa25ufns8f39OQFdXVz4+WU5vNyGxRLIhLy8wMDAnJycjIwEjAANbhGdOZKZ8gauenp5RUaiRqpGLnKZkX3psbItSZVJAYlY/P6BXV05nhmdjgEQfLy9oaC9oIwMdIiMYGCIjIiUdGqdjh6icqV1dk4GBnlFSUoSobKpyk4GRc3qeUn5MQH88WFdYTldXoD+BdSEvLy8vIGgvaCIDHRgDGQUZJB0dAyJIolFRUqOBk12BcaR5kVKlUmt4aqZ8eYmDZWV7VkBOf06gTk5noKBkojggLy8vLx8gICEYIhgZJAUFJB0dHR0EJDhkfF+en4JRcWmLaVJKe1JrZWB+nJ2JbmVKVjw8WKBAWD9nZ6BnbzMgL6GYoS8vL2gXGBkECAUIGRkdBAUFBQUMQV2TX3aKeYppj4+EmppkcX6bVJyda2ZJTGJ/TmdOTk5nTT4+Y4AhHx9EmJiYLy8vaBkIBAMYGBkMBQUMCRsbDHWBk4KUfX2KipWWlzuQXXtSVFRSiWBUTEw8WGdOTj50PldnY4AyFR+YRC6YmJkvLy8EBAIBIh0MDAwMGxsbGxIcQl+Cg32Ki4yNjo9/WZBweWxskW6SS1ZWQE4/WXReXnRXO4AxERUfRB9ELy8vLy9oAgQZAgQFDAwMDBsbGxsMCYCBgnqDc4NxhISFhoaHiH2JbFJMTFZiPD9ZdHReXnRaYzcWERYgHyAfFSBERB9oaBkZGQMkBRsMBQYFBwcIBwcGOnZ3eG15elJ7fFFrfXNrZX5TVFVVf1hOTV4+WXRaYzdoFhASFxYWFjgWFmgXIGgCGQQIBQUIAgIICBgCBgYKBkdwcXJubHNzbW5sbmxuVFRTVUtiV1dXZ2d0Pj50Y3UWEBBDQxAQEBYWOBcWFzggGQQIBQwkAhgDARgYCAsLCzFIaVFSUmprbG1uam5uU1RVVExiVUBAQFc+Pj5Zb2gQEhAQ' $Base64String &= 'Q0NDQzFDEBcXHCAgFxkEBQUZBAICGBgDAgYGBgYNSFxRZF1UZWVmU1VLVVRVS2JiQGJAQFc+V2dBN0MPQxAPQxBDDg5DEBAXICFoIGgEBAQDHQMYAgQEBAcHBgcICEhcUV1eX2BhVFRVS2JMTFZAQD9OTj9XTmM3MkMQEBAWEENDQw8aQzExFRUhICEvGgEjIyMjIhgDBAMDGgQIBAQyT09QQVFSU1RLVUxWV1dYWD9XQEBZWkI4ERERERASFhBDQ0NDWw8NFhUVFSAhISMpLQAqOTADHQQDAysAGAQIRUZHRkhGOklKS0xAPz4+TU0+Pk5CNjMWERMKEhIQEhAQEAwMFhISERUfFRUgHyApLS0nADk5IgIDAwMqKxoEDgQODg4DGjIzOjs8PT4/QEFCQTQ4MQcKEhMTChEREBISDBBDQxccFxUfRB9EICEhKTAtKScqKgAYIysrASsBAAEDAwMaAx0PCDEyMzQ1Njc4DQ0xCgYKCgsTEwsRBhAWDQoKEBEVHxQcHx8vHyEfISYpJi0rAysAGCcBJysrARgBKyUaAwQEBQcGEAoQCRAMCgYGCgoLHhEKBggIBxAQEAcNERYTFS4fHBUhHxUcLx8pJyoBIyoYAwQrACwBAgIYKwMEBAQODAwHCgoGCQYPJAcHCAgKCx4LEAcEBAcHEAwODRMTExwfFBwVExwhICAhIxglIgAmJwMDGPq1BBgCAAAYGggEAwAFBwQMBggZB4EAAAwICAQIBgAAAAcHBhAQEA0EAAcQHhETKB8fAB8TFhYTHBUVACIDGAMDASMCIAIDGQcIAgADBCAbCQIIBgAEBwwgByQHBQ4BfgcGAAYKBg0QCgoRAAoKEx4cHx8cABYREBYVIRUDAB0DAgQCAwMZUBgIBQgANQICQwYSCQB2CAUAfwkMDAAHCx4JCwsKCggHCAoABQoRERIAFR8cExYRFhaIFSAhAH0CAhkAA9MAPwBkAxoANwYAAQBHEQB/BgYM' $Base64String &= 'ALkLCxtAGwoGDAoGAD0KAAcQEQoTHBMKiBMVFQDBFQABALqIAQMEAAIFBgcBGyUAXAYDQgYJgVoHBgALBggHBgUMDUQMCgAhDg8QgEARiA0TFIAfFRcAfwBffwA/AD8APwAyACjAAIAVAQIBgQAgRAUBAMMMDgDCAAUAN0Rr/wAfMFz/Nktz/wBHWIb/PUJK/wHCBEBx/z5HUP+AGCVL/wkWOMIBMcEALTI7ygHNABolBk3OBMETWHWo/24Eiq3CAIeauP+FQJ3D/42pyt4Ai8Cht/9PW4ZiFGUACB0pVGIAHCZS/wAdLFv/KDZc/wAiMl3/IzNk//giLVviAGkAYQLhBOEAMWkAHC1jZgNhACEvDmPqBeEB5QApNnb/qDE9b2ABa2QAY+IB52kCYQTiADhn5gJlAmEA8WECKjx05gDtFOEGaQAB4SYjNGv/JTltAP8qOmz/Nkh4AP8sQnz/K0J3B2IAYQFhACQ8fP8zBEuEZACL/ypGiHHiADJNlGIBYQDhBBpwN4n/HeAR4QVhACz8RINiDGENYitgPmUrYT9xYUIvOEHmOOEC6TsRfB5JYgBpPeEF4QRpAiEEKlViOFVrkf9oAIi4/3iVt/9wxJXKZkCQoLhiAPE/j2EF4RDpP2VAFiVYZjf/4SfhAGU64TNpO2kC4QBpAP/tP2UJYgJgF+UE4QJrB+M7f2VDYQBmQOQCZQNlAeE+Kxw+e+4/YRrhAB4xZc/jAWAx5gNhQDpzYj5hQR9iAOQBZUBhP+U+K0WK/2I/4QBhPGE+4QDhP+EA4QTjZUBhK0lWd+INaTZlgv9ha+U5YSHte+k/ZUflBWlH/+UJ4X9hOmUAYUBpAGE+4QCIjp22YgFneZfyKf8xBXUfekC4HXkaNQDxIDki//8fMwB1I/k/8SUxAHFG+gU/8BgxCbU+MQBxA3EeMkTGfHofMTs1SIV2AbEf/zEBNSGxHPUDdQ25QLEA9R4/th8wADUhsR1yIHAdOVb+' $Base64String &= 'lzIAcR8yP7QeNQCxIfUhGCQ9hPY/MRZOYHsfsgC5HbEfMQFxFiAnUv/yAP8f9x+xAfIyMAA5QDEC47EB8WVqgpt2YPEfsWBjPwAzAHeKp7MpdBEO/CJP9iU2IHgdf183XDkg/7ETNRw1FrVBtQC1RTUgeSZ/cgMxHnUAuD1xHvEeNQAkwD6T/0NbljoBMQL/8h/0B7FdcQAxbPkftj/0X8e1HzJCcAEeMmuyH/Udj7EfcT95X3UfLlGdcgD/MQI1YjEA8RkxFnEZ8VkxHv9xFvU79R+xCbEBeUI5Hrk/f/1f8YMxAfE/cYCxBnUgZvx8pnYgtQAxALEf8SK2af/0PjJ/+B91O/8fMwB9PvYf/zgW+T91AvYEsAL1IDEA9T//8hjwN3EcMT05ALYfMDaxH+Oxb3EAOVOJcgExAjUE/zEIOUC6H7QAtT8yH7AfNgAf8B/yX3A8NT+5XypIlvH2IDRSnDYANQExAPWf/7EfNSDxADVb9R8xAPIftAH/PQDxAb9/twG1RHWm8UZxAPhmb5UyB3EA8R8xIbEf/zFJ8QI1B3mfsTj5P717PQD/dRZ6P/A6sx0zAfV8uSJxA4+ymnAANSI5ACM2cjp9//EeMQCxADVBNQExN7Ef8Rr/tRz5R3mfeYCxB3V/eQG1QH+zf3M9sR1xHzUgMT+2H1Tgo/83WKc6IPEidV//sRT1WfUAtlZ4ob0Y8R3xQv/6GTAAcjtwAzUAtUO1ADUAPzUatSGxMrEgcQCzECy2AGT/HjFl/x8wAFz/HSxb/yItBlsCOBUYIS9j/yMMM2QGDAE8Kjps/wAqPHT/KTZ2/4gjNGsCBik4ZwA2fwMWAQYBRgE+AQ4BZgluMXw9bwIHAg8CHwQzABMrBD57CgMkPYT/I/w2cgJLCRMBDwV/Aj8En8cBhwEHAd8oNlwGEwELcQVvJTltggGBDYUFKwRCd4IBM0uE/zkAVpf/QV2n/zcAWKf/Mk2U/y7AUZ3/NFKcggWB' $Base64String &= 'Az+BC4EBhQWBF4ENgUtuigCt/zZLc/8OIgBP/xEeSf83ROJrggEdKVSKAYFHgsHxgAUYJUuCAYUNgQuJAR+BH4EpiQGBH4UBIjJd/4YVgeeBB4WHhYGBbYEjgQX/wX/NecUPzQXFh8kBwVDBcP/BAMpgwYHBfMSGxXnFhMEIx8EEwXDBBzJEfMYCyXaANUiF/yxEg8IAuCQ8fMJ/wQXNAB3ADcAZLGj/HC3Dl8mpn82DwSzFeMEAxn86c8IDgCxCfP8qRojCcXhDW5bCdMF3xXjCAlTgo/87W6vCAMECwgAxwAUrRYrCI8EBeJUgt/9Va5HCcwkW/jjCAMECwWTBAMJQyALBXB/BismGwQTFLsECSGSaAcIAR1iG/zlTifHCfx9AccIAxQjF9M0B/8VxwRPBDsUN5QNtAOJHbYI/YBJpAuUpZQBlcWEANkj+eOI4YTthAGVEYT9hAOU8n2EC4RnhJmEE5jo+k+I//2EpYTFiAehCZQBlgOE+4T//YQDlYGVrYRzhI2E95T/iE/HgAB4ya2IAYSFhP+U/c2V/YnpOpGIA4j9gPTfAW7X/PGO44j9hAjHlQCpIlmIA4RV3ij6nYgBhbeF/YQBhQBol/k1mc+IsZEBhAeFDaUBhAgfhFmVV4UloiLj/WPx1qOJAZYBpWeVAZZ9pYP9lTuE/4QfpQOl+5RJhBuY98WQSHCZSZgFhA+VT5T//5TzlOOEs6zTnf+UC7TlhP/gzS4tiAGEpZQDhAmUD/2UB5UJhCmGA5WlpmeFAYRT/ZSllP+ElYT/pfuEAYT7mPkRMmWY/QV+y4gBE/Ge54j/lv+I/ZITiQ2ACY+F/4T9OYHtmu+VAIfwqVWptZTXlwGFA5UBhA/9hSGFk4T7pP+KT4YDgGWWBH+JZ4F1lXmUzZTsWJVjPYgVhSTUg8Q8YMzcC+T3/MiAxFbAIsQPxHzUAciC4gf81IHU/9T21HfUf9WG9HrEA/zENtR2xADE4MQAxGPEA' $Base64String &= '8hj/sCDxAj1AcQVxD3lwNQA1Sv+9H/0fcQWyHjAHsn60HzE/A/EfMQBLc8z/PWUCqbIeLVOo/ypLBqUyALUfR2an/4QilDMgZm+V8hsvOP5Bsj/xH3EAuQnxKXlYOSD/8QAyKXAa9R89IHkcMSC1jP+xADIZMCA6XPARcQM1BLVk/zEgtj74H7VD9T+yH7QkPSD/sQa1ff8fs2ExIHUicQE1Hf8xAHEXch64NzIgtBcxFnEB/7J2cSJ0Y7EEsQ71KjVM9RT/eVSxfrkfcR81ADUIMp+1H+P0H3E/R2vFMgDxP7If8fBeLFaZth8xALEBsR+Ih5q4MkBHUG02mvggJ1KyQP0fdRY1AbEVHzUAsRzxNHER9R9Ogrz/MkE1gTEIcRx1IDUAcQNxEf95PTEFMQc5IPJksDFxKHId/z1AcWA4YHkgPQBxOPUfMQX/MpH4IHUAMZ1xHHI2tB41df81d/IfcB+xFzEAth/0ZTKB/3AE8aVxHTUUdo80C/JJdMX/cQIxo7Uf9UexHHEc8Tt1CP91H7UfsT+xAHEBcj/xfnQLPC1W8ynxAbEfNQBnef6Xerr9vbEKdRb5mnEYcmD/sAA1yfEaMQA1O/ELcT61H/8xAHECMmE0ALED+T+2cXAD/3Fg8Q4xALEDMTFxdLk9NYr/MSCxazEAcSz9H/UqsQBynf9wL/EHtb/1P3EbMb2xGHEA//Ef8XY1tbYXdCA1N3EVcQL/cj8wH/IjOOL1H/UUshY4Kf8yafQ/tR/xPjW+8d31HnIA/GvEcwdwALYAsAHxKLE//7EJtSG1gTEg8T/5H7FgOUD/Nt84ijXo+lY4FbFZMQs5O/8xPzEAcQwybLAANWA5QPo/AfbFiLYAVP8dLFv/OVNgif9YdagCMAFYH0BAcf8eMWUC2BYMJVgCHAEMIi1b/8AfMFz/HSkA3AEMEQBMHCZSAi4hKlURAg4gJ1IKbik4ZwD/Kjps/yM0awj/IS8DBik2dv8AMkR8' $Base64String &= '/zVIhf8AJD2E/yQ8fP8AK0WK/zRSnP8AO1ur/0Ffsv8ARGe5/0Fdp/+AMk6k/zJMmQILYwETAR8yTZQGNwUDKkA8dP8rQncCZyP8M2QGAwGvAQMBzwGHAScBAS8sRIP/M0uLEP85VpeCOy5RnYj/N1iDMUdrxYYBAEtzzP9LdNP/GElt0oIFgQk3W7XHghWFF4EBPGO4gguBTwOBBYEJh5q4/42cBrWCA4EBaoKb/zfERGuCkyIyXYJPhaWPgU+BAYFfgVElOW2DYXGABxwtY4KngQGBzTMAS4T/R2an/0iMZJqCBYF7LEJ8gt2YNktzggeC4TJrgiMHhSWF44U5GiVN/w78Ik/CaMESwX/BD8EOwUr/wR3JC8KAwC3BL8USwXvFfsfFf8UAxQghL2PCAMEgccV/Kz57wnDCAcBjGnw3icKAwU/CfsCAwX4k/D6TxgDBgcEIwn7AAMERmCM2csIBwkw6c8QY/mPCNMEAwQPCVcABwQfCicfAHMV9xXE9ZanCdsEej8F7wXrCfMACVHrVwgB/wQTFoMINwHvBKcV+woJrHsTCAMESwX7JAJCguAD/Zm+V/yg2XH/CUcEnwQLBVsGoxazBKTY8SHjCccFuwS/BYhgzHmzCZsEFwWvBACxWmcfCfcGBwQEqRojCB8F+H8GOwQ/C38x/wX4YJUvHYgBheOE+VWuRYgh5Rv9hPeEr6T1lAe0BYgVgAOlAuBksaGITaUDhPx3gAfFhQCpIlmJx4QBhGeEDj+EC5UPmP2AGGC104j//Yn5kAOVM5YBiQOQg4SphDo/hCuE/YWjld0hzyON9AeA9U4Pd/1J82zFmAFmG2WZ/YT8tVjHjk1V4yWIA4UREbH7L45bhP2AB6T/hPmUAjsCdtv9ZZ4fiPuYT/+Qs4TxlL2IV6D9lAGVAZbb4TXGzYlfhAWEa4YBhI/9iYeQe5SJpOGZ6ZADhgGFO/+I/6GhygGA74QPpvWEKaX//6YLhBmGXYQHh' $Base64String &= 'CWWA4TjhsP/lP+Ey4j5kAOU+YQPhBOU//+EBYQDhGmFJ4QnmvuRA5Sr/ZQLlKeE/4b5hP+W75QBhPYhVhONqAFaJ5GJ/4+E6YT80VKPiAGEG5YL/YQBih2h/4QBlP21A4QFhbf9hwWFzZbXpP+EBYmVkAuID42QAacBoiLjiAGE/5YD/4QPhHWIA5D/hjeU44X3hf/9iN3kgtIBxIP4/eED1HzUg/3Ee9R11H3ZAdQf0P/EfMQD/9T8xgHEA8RxxGbF99R/xIf92QbAh8QExAPYtsD91Erkffz0AMlB4f/VesTNxPzE/YwCN5/9bi+T/W8CF5P9djOkyAPEA47U/MV4qS6WyA/EfcgMftCO2H3SAcUDxYISUp8f/H/QAMQBneZdyVzEA/7EgdR51AHV/sj8xUzAtcQD/cSxxGrEfMQD9P/EfNSC1l/85WfUfNQA1GzEacRTxH3ED/78f9z91gDEJMQr1Hv4/cQL/tAIxAXWhMTsxGfEYMkCwHv+xH7WYskA4ALWasQIxIfUt/70eMp40DzYBNH8ykjAEsaT/tZuxO7IfcB95APEftR81f8c1ovWdvR9AX8iyAPKhjzAAfR/9HzWhT1uGupt/NUCxXrUXNSBxDDECcT5w/JXKMgBxYLGAcUBxErUx/3Z89V84m/kfMQB5PfETcR3//h90XvmrcQJ9H7UfeaH2J/90CLEtMQpyGTQgsRmyLHAAz/E/sQz1H7EhQ1swQbRi/7WcOU71H3Kh9UA0BnVfclI/tJ+xGzEeMSBxH7EATYN+2vJ/MQGxAHEdMV+xHy38U6g3g3heeZ+1P/0ftUBj+R81IHeKp7JAMWFH/FiGdiCxFXGhfUD1vnEf8fEfV3i3skz1gDVVNjL/tFq9v3EAtrq0PbnT+V/1G//1A7Ui9R/1HjUAOSDyrjAC/zVi9cBxG/kfMR41IHF+eaD/cQHxH7EfdjCxnDkgsaAwAD/yP3Shtj/43nVGsZtjiv7YMj6xAHEH' $Base64String &= '9aCxAPUHtQj/tcmxX/WieX/xP7bhcAC/P//7HzEhMQDxHzEAsUAxIPFAf3XYdfh5QLWMcR41QDEgWPyP0XIAMSqxATEiueT9HwAaJVS2AE3/ICdS/yEqAlUKMCMzZP8iLWBb/yEvYwIcAQwdRiwAPAR8HSlUBpwp/DhnBkYFPgGmCa4FNgpOAQC2IzRr/yo8dAD/NUiF/zNLhAD/Mk2U/zlWl1D/PWWpAA+LAgsrAEWK/ypGiP9IBGSaAg8YM2z/HQA2dv8lOnP/K4w+ewI/AQslOW0GA8YpBB8BAyxCfAJfA2MCiwYDN1in/01xALP/QV+y/zRUYKP/O1urgjWBAS58UZ2COYEzgQGBBYEXRARnuYIBS3PM/1QAetX/Unzb/1kAhtn/S3TT/zwAY7j/N1u1/y1MVrKCAYEFjZyDAZAMoLiKAYULhJSn/wR3ioMBZ3mX/2pEgpuCAVVrkYIBScRWd4KxHjFlgr+BuzgWJViCB4FtgX05UwCJ/2iIuP9wlSDK/2Z8poIDV3hgt/9YdaiCl4KrRM58grWFI4XhGiWP/8Fn58V/yQDBDRwmw3XFAMEJ+DE9b8oOyYHJfskHyQAXwWrBKMMqi8J+R2anj8aCwV7BcMUHJDx8yn5/zn/EAsEFwQjFlsF1wRQkHD2EwgTBE8F0NFKcMP9BXafCB8F6LET+g8IbxZjBG8EgwQ7BJsF/iEdrxcIASW3SwoKPxQPBAMEHwX48aMbSfjiLobfCAMF+wXp5gB6Kxn3FAMGCwX9OYHsA/zZLc/8fQHEQ/x8wXMJsDiJPx8KAwWPBXxksaMI7wcd/wYHBfsGAwbbFTME/wTQe/DJrwhHFf8FzYQDleWEAOCg2XOoz5QFhRRgl/ktmRuUA4QNhAHV9aQDiAjwyXWNZYADhGOERK0L+d2IVZTJhGeUtYS9hAGVB/+U/ZT/lP+Fb5T9iP2AKYTn/6X5hAeEH4QLhC2E/YU1hAP9hC2EG5T5lCeFFYUPl' $Base64String &= 'f+U8AeE+RGvE/0Rsy5HiAEhzyGIBQF/gAD/gAWFDbT/pP2F+aT5lawJ65gBlbYX/aXXiiWYDRVBf4iRhAOE/ceWAHC1jYgBlAeF8Q/xblmJA5T/lZ2Ei4T9lL/9hCGVA5T/qNOVz4LvhTGEC/+E/aUDpvHK8bADtiWUA4ZL/YTLhFeEXYS1hAeEyYV/iP8fgnOJ4YHojNnLmPGI//+ABYRvhFGKDZD/hBWW/4QH/YT/leeXL4Q1lvWEI5Qdigf/gJmFE4VDhO2E+5X1lP+F8H2VA5T7hwvE/aX+Di5fw/3qFluJ/YT1lvuk//2UAbUDhPWUA6T9hAOGBYSb/YRvhaGEA4iZgGmFaacnlP+85HLUbOQE/QE0+IH+EN0b/9gZ8ADJNNCBxfTEeNRn1H/91GDUb9R41ILU/cQ31hDt//7BPuB81XrEEcQbxPTETMQA/8lGwE/ED8QFxYTE/VXh+yTZ/cj/wHnUA8h+5H37+4nIAMQCxHrUfMR+1H/UfH/VfdR6xH7YAMCBtdILJMwByfHICN0TzW7EO/7UTdR/xEzIMsAFxADEhsQ//sUBxFLEVOWA1GDVgfTp/Hf8zIbUffWA1AP1+MQY1hXUH//kr9T8xDHIrcArxPzI3sCv9+x+E8ztxPzR+cSCxpDEP/7EA8UFxArU/OWP5nPEltR8fskO0A3UmtX6xH2ON53+yH7EAMn/wnjEA8R+1Hk38e9u2H3UA9T55HzkA8R+P9R55IDEAtR91eoS2AP/xITEg8Th1WfKh9AtxADEA3/UsMSGxH3GB94CEPiA1AP99H7VBOR75H31Aub95XrEG/3K5MAt5X/UfNS1xCfEJcTn/NUAyvLRh8Rk2v3S+NZAyEP/wP3FONT+1b3UftV+5pDJf+7R+syOLMhO1H3EfMb61Pz8yAPQfcR45ADEgMQBHdX7V9h89HzFfdb81H3UAdTx9i7IAMQC2PzEAcXUxMgBlaXQywTEgKjqebDIAMhD0UPEP' $Base64String &= 'GC0zMf8xAHERcQ9xNHFAMQCxADES/3VgsmM1gHA0ORy1QXkf/SAfOcF/fjMAMRqxCkdYhv+zdbgfdawxGLUbsR8ySzE6zzAatVy1H3EOIS/zfjEO/7FDsjBwAbNbsz+5H3Uf9Z4/cR5xAXESsiF0nvI+itjH85z8njEgU4Pdth9xQf+1H3lA9R8xHvle9R8xAPVfH3Uf8R21IDYgMAF6eHrjM0A0IF1kcjYgMQA1Mf81APESdQDxP3EecQAxETHhBzEgcRAzQM+2AFz/HSxb/xYlAlgCMCItW/8hLwJjAzgqVf8gJ1IQ/xwmUgYsHSlU8P8aJU0CLA0MAUYBBgcBdgkGAb4iMl3/IwAzZP82SHj/RwBYhv8rQnf/GEAzbP8cLWMGAyNANGv/HjJrAiM5AFaX/0dmp/8yAE2U/yQ8fP8sAESD/zVIhf8rAD57/yo6bP8ZfCxoAk8GOwALAgMAQyzAQnz/M0uEAjMBCxEBPypGiAJTTXGzEP9XeLcAH4v/HQw2dgIDgQ8rRYr/gDdYp/9VeMmCAQBEZ7n/QV+y/yQtVoABU6iCA0RrgMT/THrV/1SAAQBNe9v/Y43n/4BdjOn/Un7iiwFAfNv/SW3SggF6RIWWigF3iqeCA4QClIMDeYCK/210AIL/dXqE/2l1YIn/dX2LggmBAXrEeHqGBYWBf4IRgQEIc3N8ghlZY3r/wEdQbf8yRIePgQMfgX2Bb4GvgZOFAR4xZeOCh4GrWHWogsOBEcV//8EBwmrIbcF7wX/BAMF9xQCPyX3BBsV/wQ0oNlzSgOPBacF9OVOJwmLBecEk/8EFxQfBKcUIwSnBMcE0wX3/xTfFecGKyY7COMAEwQ/BAB/FjcEAwZHBE8KUTJn/gBgtdP8aN4nChTHBAz1lqcZ9wQI8Y8a4woPBfjdbtcIFwXPHxX/BeMF6W4XkwoHBAv/Ggsh/wXnFfMEBxQLFfsV/iHN2gcJ2e3uDxgEBwgB+if+GgYP/iIJ/' $Base64String &= 'iMIDgnt9wgqIdHaIwgBVXXbCUfRJVsA7PcN9wUnBT8E/8cE5IS9rwkfB9cFKwQGDwQjBgEhkmv8pYGD/YQJhMGV/ZQBhOmFDZUBhAPgRHklmPnEAbT/ihmRMY2E04RVDW5ZiD2EBJfw5beJAYQThAGE95VTtP/gjNnLiFWUW5T9hCOWA+Co8dOZ+YQdhPGEJYTj4NFKc4iRhAGFCYTxhA/FhP0drxeIB4QRhAeF9P2EAYQFhPmUA5T3hAGud4PL/ZZnxboBhP2GED+E/ZX1tAGU/ZWl0/zhtcnzmQWEA5T+CfSCD/4GCjOY/e3Yee+I/YQDhAWFAT1uG/2J54SNhAGEm5UDhJWM/4z//aUBhKOEGYQDlQ+J4bEDmwj9kwOF/YUDlgOUGaQApOP5n5oBhRWE75UDlwOE/YQAfYVXhN2EQYQDhNyU6cx9iRGEDZT/hnGG/MT1v/+Y9Zj7gAumH4T9lomGNYb78QV1jf2G9YQHhu+VCYTyIO1urYgJLc8xiAP9pPmV+YT5lAGF/YX5hAGEBGek/R3VjxGE/g4uX+2YAZT98YDphAOE4YT9huh/qfmQ94QDhf2FAfHl8x+J/aUBlgVlnh+IiYmf/4B7hJuEn4QHhPGdA50DlAf33NGv2HDEVMRy/PDdffUD/cSK5YTkDtWE1Zj0gMWtxG/9xHXEAcUByYjAAcR/2H7Ah/zEA9SqyTbAE8SJyQHAA9V//ckOwHjUe9R/xAHGAMQHxPuNxH3EANFSjciC5HzEf+FmG2fNeNF89XrEedQF/9SC1YPU//R+xAPEfMR9t/HF1MiDxHfEecgCxHzAAf/E/9R+xAPEecQA1ADVAZfxthXOV8B4xX3EwMR1xTv95H7V2NSBxFHEesQLxIz8i/zMAdaE1AHkgvWD/oXM/tYX/tX6xB31AcSDxHbEksQD1H/8xALEdcT5xAPUftYCxC7J///APtR/1A3JEMEDxH7kf8iA8TqR2fjEBMR/xH0Rsfsuy' $Base64String &= 'X/EdMQFxADEBvX9V/ITjtgB1H7VBsQFxHvUfD/EedSD2P3A/bG55//hzcXayADEAtR/yH3BfeImDhHYguR/1HzUgVfxrkbJgsRI1nzV3+QA5AP81VLlA+R/xFX0gMQG6vTgd/zkfNWL1XzUANQexAPGncRrH9YDxGjFrDiJPcgEyv//wHDU/9WF1HzEAMj9wHzEB/7EP8QI1sDEAsR81ALEecR8/MT/xPrIfsL0yQHSePGj+xva+MQDxAHWAcSD1Hjkf8zGAuT9WifMBuV+9HzG9MfEea2tzMkCxAHp0/nW3H7BeMR7xHzUAch90AeP5H3Eic3yUcmAxIHE1/7Ec+R3xADEg8QA5ILEWtQD/ez83Nv8gswD5PXkA9R81AP85QHkgsmAwHHEf8R9xIPEd/zEJcRzyHDRsMQcxPvVscR//MkHwArWBcQ+xALVE8kNwnhnysD6T8mAxACpIlgD/LlGd/ypLpceyH3EfNR5LdNPzPzQAz/EfMQC1H/4+leu24LKB4JTl/2eZMwC/H7Mf4zEAcRtwb3nyH/E/OV//Mh4wAL8fcwE5IHYgsMLx43+xYDEg9fKyMXGgMAD/H4e2EFj/FiULMCEvaxECOBwtYwBYY/8jwDNk/yM0awIsAWzHATwDLAM8ICdSAlYBBokGFiZSAhYaJU0CBgMBFgFeJTlt/x4yRwCGAJ4FZhksaAITNgBIeP9DW5b/KwA+e/8OIk//KQQ2dgILMT1v/yMcNnIGcwELAUcqPHQRAgMyRHwCBytCdwD/OVOJ/zNLhOMCAwEXLESDAgMBRwFPACQ9hP8kPpP/ACpIlv8yTqT/gEFfsv9EZ7mDAQRsy4oBS3TT/1IEfNuGAVWE4/9jQI3n/1uF5IIBXUSM6YIHY5XrigVlAJvs/2qc7f9tQKLz/4OLl4IBgRCCjP98hAGJg4QA/3p4ev9tcXUQ/3Juc4IBc3F2AP97dnv/e3uDyP+CfYABe32GAYEXT4kHhgGBE4kB' $Base64String &= 'f4iCAXQAdoj/Zm+V/1XAXXb/R1iGgqmFq/uDo4Hla4K7iePBAMVkxQB/xwfAXcBswgDCf8eDzQ0dxCxbwnsRHknCfsFy8cGTIi1bwmjBecEAwQL4JTpzwn7BAcUGwQLBC//BAcF+wi3En8EBwXHCC8AFf8EAxX/FFcGAwQPBiME7JBw8fMMAwX7AADRSnBD/N1inwnxHa8XxwgBJbdLCe8EAxX/Gfgx+4sIAwXhlmfH/+Gud8sIBwXrBAMF6wn0DxATBf3Wo9v90qsb0xn7Ff3mAisJqzX/H0nfFeMwEenR114DAAAPBf8EBWWeH/0lWInfGgDVIhcICMk2KlMDHi8JCGC104i//5ThpAOlDY0HjP+Iq5DDhAP/hB+EDaYhhQOkB4UDhAGFHx+E1ZRFldSxCfOM5YEAf5QnlO+J/5IVhDio6bP/mPuEAZUZmSuQTYT9hAGEEA2Ed4R5BXaf/N1sitWIAPGO4YwBoxgD/RGvE/0x61RFiAE1722IAU4Pd/2J+YQBhP2J85DxlQGE/5QEH4X1hAGE/d7j1/4T8ufbmPuEA4TXhP2E/4X3j5T/hOXJtbmIA9kDkPidpP2kBYoh2gWZAZW0GhWoAYUFPW4b/SMBkmv9HZqfiIGEA+DJMmWJj4UDpPmM/5wH/YTLlRGU/4TBlsGEC4QRlgP9pQG1B4QPhBeEyYbPlP2V6/+EMYQnhCuIM6AthDmE64QUjZbzhQyk4Z2NRMWXF5okd5L0rRYriHGV+D+U/YT5iAGG9c8z/R5x11ea85T1pvVaJ4wD/ZT1hP2UBYT5pAOE/YQBhPxiGgYPiPmG7c3N8/+M/4ABhQOU+cT9mA/CDZT8/ZQPiAOA+agXgAWEOdXryhGfCa5FiAGFAZQBxIP9xErEWMQC5IDEA8QAxF3EA/zEA+SFyd3Q6sQMxAfU7tWAb/YW3ZWsyHPFaOVaX/zJBcR1yO7Ac8iUwAHVGNQH/cQBxH/E+8QLyIXBF9SfxAf/1' $Base64String &= 'XjE/9V61XjEfcgB4fnE/4/EdMXxclef2HzEBOUDPtR6xPbkeuR9pp/cgNl//MRt4HzEAdT/5Hn8A+yB/Qf8zALI/eUD4HzEA8R81AHEg//FAsUCxH7FhcRJxMvWRcjP/dFNyFPAzMQKxAHE1MQD1Ov91I3ZXsno3IHF/cSC1IPEA/zFlMQNxH/EHsQgxALEg9X7/NiD0P7l/8R91f/EA8R+1pMfxAHIlsAU7W6syAPEeD3UecQCxPjUATYPa/zhbi+R2fHUftR9QjT7muh/9HzEAtV8yAqfr83YBsR98eTAffD81APVf/7Ub/yD/H39CO0S1QPVgNSD/+YE1IPWAsR+1GLVhMQC2sY84APEUsiJwIho3iTMi//Q2NXc1ALFZt6KzIPkfsR7jcT/xiFh1qDIg9X55Zv+1ADUAMQIxALUBNYoxB7Uf9/ELsQoxvlRwHzEA8V01IP81fvF7cRtxO7EAsR45QDEB43kesSJjithynjEi8QDH8QJyAfAjZ5nlcgAxAflynnJ8sn4xAP0fMkA0oAd/Pz8ffx9u/2lmbP8yAPlguqF/ojOisMI1IHUg4zWScR5VeMk2APEzdXMIQF/IMhUtU6j/OC5RnbLU8SA1ACpG/ohyfXEddWU1erkg9sQ0AP/xAvEfMSF3HXSm8D01fvfH8/eIcT8YM3ShNF8xADHe/zGetbzxPjFfcR/xGvF7tbr/MQDxHXEdMR91IXUfNZ/yAY8wAPEDsqLwQ1mG2TYjEXUAY5TlMh9naGwA/1lZX/9kZGvxsgBra3MyALofdXy/H8M/QH8//2BfZT8icB4YhYF//yC64qq2AIj/ZW2F/09bAIb/R1iG/0NbApYCGEFfsv9XeCC3/01xswIsO1siqwIMN1u1AjxEbADL/0hzyP9HawLFBgZLc8z/RGciuQIGQV2nAo4kPaCE/yEvawAGYwQGIwEWAwYpNnYCBio8AHT/Kz57/ytCYHf/OVOJAg8CFzoAbP8pOGf/' $Base64String &= 'IzTHACsEBwFDIi1bCk8BFwAjNnL/JDx8/4ArRYr/MkyZAgMAKkiW/zJOpP8AN1in/zxoxv8ISW3SAgdNe9v/AGWZ8f9lm+z/gHe49f+EufaCAxGBAXWo9oINa53yMP9tovOCB4EDTYMA2v9Qjeb/VYQA4/9WieT/U4OO3YIjgQOBCVuL5IIBgFyV5/9jleuCHwGBI21xdf9qam0A/2Rka/9ra3MDggGBB3Juc/9wbyB5/3p0dYIBgnvgff9ybW6CA4kBhQlHgQOND4EHaWZsix19RoOHA4ABhYF/ggOJRIOEhgWCf4iKAXsgfon/dHbHgVVrIJH/SGSawgBHZs6nwnLBAMJ2a8TGAMF8McFUS3TTwgLFflV4DsnGAMENwXIcLWP/OBYlWMYAwQPBbjJEfnzOAMF/wX7BAMF4wnczfmTGfMMOwwDBBcEXwX4sHESDx3/AfcGpKkulj8KBwYDBLMErY43nw2ZjwHXBfIbI9sIAxYBpPKfzxgfBcsF3wXpHdR7VxnzBAcGEwQZdjOlxwn5nmeXCDMEAxX9lxGl0xn1zcXbCfcUD/8ECwX7JeMWCxYXFAMkGyQf4YF9lxgTBd8F5wQDFf2fCAsSDwQKGgcMBxQh7AnvDAHN2gf9sbsZ54gDhQGZvlWoAYUIYWHWoYiphAEBfyP9iKWV/4gLoRGGHYQBhQOEGx2E04T1hNx0sW2IAYQHjYQDhOyU5beM+ZQBkPx9nhuMGZwLjBmWFJD6TP+Z+ZRBhQOECYUDhllJ8HtviNWU24TPhe3Sq9D/mgOJ/4IJhfOI+YDxSfp7iYgBhPmUBYn6F5GaFx2EAZYXlAWqc7eZ9YQD/6X9lgGlAaYHtP+lDaQThAH9pQGk7Zn7oQ+ECZUDqP3PGfOI/4RFtdILiQOECA+GCYQBzfJT/Znx+pmI5ZTvlAeEA6kXsAVmMZ4fiR+HLMT1vYgDjZbllAB4xZeY55QPlfP/hPmGG6b3lP+LGZH7iT2HTf2A/' $Base64String &= 'YX5hP+U/4dVhAOFWPPxfwObA4TthPWE+4X7ht/9hAuW6YQBlP+F/YQHhBeFHD23EZT5lAOEBZ2dz//hnaGxqAOU/YcNlQGlBj+0+6QFhiOEAe3Z7bj//bUBmf3QAYj/gCHUAMSByAP+wH/VDNWI1IHEAMR2xADEA/7FjNQC1AnEBdQD1I3UDMQD4SVZ3diAxALU+NV/yH//0XrJf8h73InVDcj/whbUfj3VIcT8xH7EfLVayckr/9R/xG7EfMQDxALV78Rx1Hf/xALEANUA5P7VDtR+5PvFfj/FisQB1YHF/YWFmch/4XF1j8gC1QDlAtXw5Pv81fzkA8hkwIHIbNCA1ALUgk78fNCR4evYDfHmzHv/5HzYFcB86IDAA8Rt2AP+D8boig4uXeiM1A3EAsQJx8WVVXXZyQfGGtac2xEh4tl8ZLGjyHfGAeDVIhTYidYTxnvF+MvxNlLIfcaoxfnEf8R8xAP+xPnVqMQB1fHJrsDz1HDWd/3Ed8T81IHUhcV71AXVjfR8zMQAxRHWn8x91AV1hBmwyHzEAVlle/178YGb2ADEgMR81ADEB+UH/MQBxATEB+aNxQzEc8Tq5g/+5QjY+9B41I/WH9QA1RbGo//YkPKSyYLABNSDxInYAcR5/P6XzJ7QB+R99QbVEcQBHjFBtcr6xHiU6c/YgI/EftWAOIk+yISxCEfOeOVaXNj8ZNo3js35wIFR61XKptTu1G//5PHVdMQExHXGh8TtxAHUg/zVAsQDyATQAsp0wALUfcR/ncWAxAPUfcpwwBPAf8T//cR8xAPUg9QAxO/EBMQBxAfExQlhXXXYgcQA1ArEB/7VENSSxAbVBcQPxHTVi+oX/dAG1H7EjMQBxH3UCdR05o/+9IL9BOAC1IPkgvyG+Q/Ef/7FA8T71vHEfsT/xfXEgucOAHjJr/zNLi3J//zI/sH6xHzEgMeqxHzEAcT7/uR5xPPkf9Xy1HDEA9T31v/81PvYftN31XzEA' $Base64String &= '9aO1pHEfH/WgMRsxAPUeOQBWWWJxMhtZWV8yAPFBMQBTjFVbsgG1A1dbZ3ICgEtNVP9OUVoyAf+1AnEBMSCyY7yEciH4ADVnA/Vf8kNu7bYQc/9ybgMwe3uDyP+CfQAwe30LGABMiHt2ewIMc3aBAjzPBRwBTAJmAQZ/iAcGBR4DDS4MBnt+if9lbQCF/0lWd/8jMwBk/yk4Z/8pNiB2/ys+ewIDLEQCgwIPGSxo/w4iAE//Kjx0/yxCIHz/Mk2UAgMkPQCE/ypIlv9AXwDI/0drxf9LcwDM/1J+4v9LdODT/1J82wMDAA8BAxxNewMLAQcBA1CN5hD/ZZnxjgFjlesA/22i8/9npupxhgdbheSCBYELgQF1RKj2hgN0qvSCA4QCuYsBcpzn/1ZZAmKCAV5gZv9XWxZnggWDA16CAVFRVxD/U1VbhgNOUVoQ/0tNVIIBRUpScP9QT1eCGYELgRFYxFddggVNUVaCF4EHgGBfZf9pZmyG43xra4MBhQmBBYkNhuVx/naGFcIEyX/FdMR6yX7FD8/FAM5/yX7AAHR2wwXBAQPFAsEAc3yU/3V6AIT/WWeH/zE94m/CfyEva8IAwX7FgegeMmvCAB3AA8F7wQAAK0WK/y5Rnf+ANFKc/1V4ycIAAFR61f91p+v/iFmG2cZ8Y43nwgBHwQbBcMUFXYzpwm9rPJ3ywnXBAcV2wQJjlP7lwwDBD8B/wQDFCMUBwXzHyQDFfcECapztwgzBag/BAMF8xQLFeEVQX//4R0tUwgDFBcWAxQjBBv/BgMUEwYzBDcECwQHBA8GW+GRka8IBwXzBAsEAwQKIamptwgBtcXXCexnCAHN8wgHBBWFhZvFmAnx5fGdAYXNkAeEA8eE8cG956j7hSWFC5UIfcQBiB2gAbUFhfzZLc49iP2EA4XxhPSQ8fGIAMWE+IzZy4kDhPjVIAIX/MkyZ/ztbIKv/Y4rY4jOLtP7s5jxhNmE94X7hAWFz4QPjYXHh' $Base64String &= 'MVWE42Y/YQBifsyb7GIA5Tppp2M8YTj/5XzlPuUCZQPtPuFPZgDgAYBCRU3/PkdQZgDjYXphOj1CSmIDZQBhPf9lPnFB5YhmR+AIYYDhAeE+H2EA4QNhgWUAYUBnaGyP4kBhfOU8YQFcXWNiBv/hA2kD4nlhc+AB4TthPmWH8WEAbG554gXpAmEG4jo/8T/khuU/ZT/hPuF+R1ACbWK+HjFl/xwtnmPiAGFA4b7mu0aI4gDx4T5EZ7nmvOk/YT5iA8B11f9JbdJifWED4+Jw4ARbi+RiP2EAab2IXJXnYgBTg91iBPFhAmeZ5WIB4QJhQeU8/2E/YsLkRWEAbYDhDeICZECANTpD/zk+R2IA/+E/4T5hN+EA5QJlA2VDZQD/4T9lg2UCYQRlBeE/5chlAP/hPmE7YQFlPGUA5UFhxmEA8eEDY2ZyMkAxHbEBMj3HsB8xI7EEZ2dz9iSxAP8xAHVl9QAxADVA8VwxH/IEj3ABcSI1QnUfVV12MgARMX83RGvyHyEvYxHyHxgzbDIAR2anETIAPWWpsj43WKc/th8xAPEecR5xALFfN1v+tfIBcQBxATEAMYBxIPE+EzUAOX5foLNfVonk/3Ij8R51HXl+9X3yQrABcQL/cUYyJnAAMQE1QXZjMADxH/+5PzEA+R41APE/8Rz5H7Fd/zIA+EI1ADEDsR81APkftR3HsSM1AbEfWVlfNkL1Af/xHzEA8R+xYPUhMQD1Q3EAj7FrMQA2RXAdXWFscmn/MQCxAbkhcQLxAbEA8UIxAPGxAWVrenYfMQCxP3VfEbVfH0BxMl9Yj9Hxsh88Y7jyfDEA8R2xIOPxHvEdRGvE8h85ADEBfzEA8QExYDU/uR91H/U/PsBzy/9Ng9rzHzSe/7VcdWF1IbId8YBwADEFcUP/MQAyAbSC9mHwA/UcfyA3IP81YLkANUL1QrlDdV91ILEd/3EdMR11obWhtaczQTNkMQD/9wD3g3EfsSB1hLFBdQW5' $Base64String &= 'QP+xHTVBNSBxAnEAtQcxIfED/7EfcR+xAPEeMQCxnnUAcR/jMV8xACU6c7K9MQCxH/gtU6iyHrVccT/xPXE9ODJOpDYedWAxAERs4Mv/PGjGdp5xPbW7+/leNV9MMCOxwLUfNQKxHf8xHrFg9UC1APU9MWJ1AnYhx/kfMCS1Gy84QTIf8WD/sQAxALVh9VwxALEfNSM5P/81APEdtaQxArEffV51HbnH/zEbOSCxAPWkNUC1H3EAsR7/cQCxAjk/+UD9APUhtUAxYP9xHzEAOV/xXrEf8b21P7EfP3F+NQCxPrIZcDn1nEhz/siyPTEgdV51njUAMQHxHP8xH7EfsQD1XrEasV5xHHF8/3EeMeCxAHV+cR5xAXEHNUH/NZ+xH7UDcQIxATWk9UA1h/8xAzGnNb5xHnUf/R8xAPWg8bUAOT1G8gE5APEhtRv/NQC1vvG9MVy1PrUgeQL5PwG1YVxdYLcAY/9naGz/YWECZgIwampt/21xIHX/ZWl0AnhdYSBs/2dncwIMV1vgZ/9gX2UCDAEsBTwBBT5zdoH/cG95EQIGcm5zAg5la3oA/11kcv9ZY3oA/1lnh/9HUG0A/yk4Z/8xPW8A/zJEfP8lOnMBAgMqRoj/OVaXAP9HZqf/PWWpEP9ZhtkCA1J82wD/VHrV/0RsywD/RGvE/0drxXD/N1u1AhcBAwEXY0CN5/9qnO0CB00CewAXfuL/VonkIwILAQNHddUCB1uFAOT/XJXn/3SqAPT/d7j1/3WnAusCC2em6v9togLzggNnmeX/W4vjgxOBA2WZ8YIJgQGBEZ+BG4EZgQWBAYEPY5SDGYhlm+yCQWOV64IBAFOD3f8+R1D/CEdLVIIDOT5H/xg1OkOCBYkBLzhBR4ILgQ+BBS0yO4MHPSBG/z1CSoIBS00AVP9WWWL/TVEiVoIBU1VbggFcXXGD33NxdoLbgd+BB2QcZGuG34EFgRNYV13RggNeYGaAJV6CA4EN88FuwQpr' $Base64String &= 'a8BwxBHBBMEGz8FxxX7BD81+aWbHh8V/AcUBbXSC/21yfDHCfk5ge8J/wX4iLQBb/ytCd/8zSwCE/zlTif8yTQCU/06CvP9yrADX/1V4yf88YwK4xn9LdNP/S3MOzMJ+wX3Bgklt0v+IQF/IwoJEZ7nCgI/BBcF9wgDAhV2M6cJkgDxoxv8+c8vCBQPBBMFua7bp/2OK/tjCB8J8wADCbsBswX3FBPHBd3Wo9sIGwQDBAsEP48EBwQZrnfLGBsECwgMfwYPBgMEAwBjBcT1BRgfHc8ACwQBFSE7/RfxKUsYDwnnJAsAAwYbBCUfFfMEAyQNZWV/CcHJ8bW7CbMUBxQDF9cWDY/xmcsICwYDFjcGLZQRhP/9hAOVBZUPhPuF24T3hAOEBGFVddmo/YQCCfYMw/4J7fWJGYQBlbQKF5j9PW4b/SVYCd+I/HjJr/yxCAnzifViP0f9NcR6zYnHhP2E/YQBIc8jjYjphPjxfwOMAYDlhPXgqS6XiAWEB4QDhe1XAhOP/TYPaYgHhPB9hNOE54QJhOmV3hsj2x+IA4XnhNmeV2uID5T6AbbXy/3a46WZAz+EE5XthjOV+aadjAOE9/2VBYQDlkGE/YQDheWV64QD/6X5qPmAAYQRlf2WC7T/hdv9lAGE2YT7hAGUA4QFpAuU4P+W2YQDhiGWCYQTlfnNz/nxiAeVF5TphBmV/4QBlAR9lAOUE4T1lAGFBdHaIAWo/R1iG/zdEa+PivmF+aIi44j/he+EvY+F94TktU6hiAuF4LfxWsmIC4j1ggOEB4T9hA//hQWY/4LvhQWEB4TBhMuU6j2EAZXfmOmQAXqPmZsL8hLljQ2FR6QNhROJU4Ev/4kRgQuEA4kdkh+ENZT9hE//lP+E6Yj1kPGJ64H5hAOV5x+kDZgTgAk5RWuI85XP/cT1luWk/ZX9lvOEHYX/lfv9hAOE8cQC6QvgfdT81IPE///0fMR9xP3JAMABxILVfsR/xMSA2S3Ny' $Base64String &= 'PzF+MRUxAP+xPvF6MTbxHfEfsXMxIPEAH/E/dR+xATEfNQBQjeb/MgDxH3EAtTlxOfEAeRpyfP90HbkgMT8xALEfNQCxILFC/zUAMUH5JDEh8gNxADAA8kuOnHA/sELxAHCVyvItfzU/OT11PLF5sRhxHjIfUP5fdn0xOj0dsVoxAHUgvx//tx/1AXI8dED1GvU+sRqxAP+9YPUmMSB1HjEf8V71HrV//zVgMX8xAHVfsp9wALEf8T/H8R+yH/B+SGSa8h9xX/+xebE98R71H3E9MRbxHXF+/7YfcAAxIbad9Dg1ALkfsQE/cQLym3Aa9V2xf7EchLc+7HIAsR71H7VfNSB4xuD0/4fH6rIAsWn5Ix8xAPki8kMwBXUfZnym/zIAeT11YPMdM1xxnbE+cQD/8Xy1GnEV9Tg5GT1AMR45f/8xADEBMQC1PDEAMQcxHHWe/7IFdH41YjUAcQPxvzEEPT7/dZ/xPTVfNR/xAHUfNQAxn//xH3Ef8R91f/EftX5xHrEf/3EAsSBxunW78mAxITShsTzHsRyyHbAAX6DyMgD1eD9xGbEftT+xATFccQB7zADz/4jV7f+l6eD6/5rm+vIA9R91QB/xADEgMQCxHzEAdsfrAzMjMEGH2Pf/ltri+HZBlc3zcgCxATEiAG6Krf9qgpv/gGd5l/9zfJS2fsexn/EfPWBCRU0yAPEf/3U4tTi1vHEhtSH1H/k+9dr/9UAxADmD8UX5wnklNSI5of/1vzIktD55nrUduSE5HzUAR3V/sR/xvh9AcfIfLPxWmTJf8h+wPrEa8RyxAP9xujF0cUG1u7EBcX01unlbPzEe8R01HLEEMnu0e1uoBtlyAHE/i936/7H88f3yH3Eg8RpxATECcQD/MQNxHrEBMR5xAjEANQN5Hz81IjEAsV9xP7EfMT96hf6WMgDxH3kYdn5wn/0ZsRf/eT55Xn2dvR+1fnUfssU0AH+xJfEFsT8xZTUesWdzPxe3AGv/' $Base64String &= 'XF1j/1hXAl0CcGdobP9raxJzAhhnZxMYYF9lAQIMVV12/2VthY8CBgEuAR4BBklWdwYGADZLc/8rQnf/CBgzbAIOLFaZ/wA3WKf/TYPa/wA8aMb/R3XV/xhlmfECBwEPXYzpEP9Ne9sCC0RsyzD/VonkAgMBI1yVAOf/Z6bq/3a4IOn/h8fqAgteo+Dm/2218gIDAR8BDyMBAwEba7bpAgNyyADq/3vM8/+L3QD6/5ba+P+I1R7tAj8FA4ENgRF2x+sBghGl6fr/sfH9EYYBpNf0ghNyrNcRigFnldqCAXKc5wD/aIi4/3N8lBGGAXyCjIIDTVFWAYYBRUpS/0VITgD/S01U/05RWgGCAVZZXv9ZWV8w/2FhZoK9iQFqamJtggNybW6CA4kRbUBxdf96eHqCA23EdIKCCVdbZ4InhTeAPkdQ/0JFTYg14mKC8WRka4YBgQnBAB/BB8EGwhjAcsF/ZWl0x8Z8wXXBAU9bhsp6wQCIR1BtwgAxPW/CABg3RGvGAsF/HjJrAcJ/PWWp/0RnuQD/PGO4/z5zy+PCAMF6UI3mwn/BhMF5I8EEwQZVhOPCAGWbBuzCc8EAd7j1/4YMyPbCdcEDaafz/zh4xvTCf8V9xX6C02D0/3zT9cIAxX+TwOP7/5rm+sIAwYLjwQPBBYfY98IBxQbBgPHBAY7D3cIAwX/BC8EAA8EKwZB1p+v/cJUgyv9mfKbKfnt+AonCAXV9i/9FUI5fymTBAs0AXmBmynbPxeHBfcV+yQBdYcMAwn4BwABuiq3/aoKb8cIaTmB7wgDFHcV3wQAPwXvBD8EBw4pi/1NVxltiAWEOY2ZyZnthPD/lP2V9bT5hhmE9ZQApOBJnZwA2dmIAH0BxAeI/GjeJ/01xs3j/THrgfOA/4XthPFKMfuJiP2EAY5Xr4j8YU4PdYj7hAGOU5f/ifWU/4TjlfeE+4QHhAGED/+UCYQJhP+EA5T9lAOE2YQD8jeHnQGEA4QFhAOFB' $Base64String &= 'ZQQ/YQBhf+VB5T/lAWEDhZ0Aw/93iqf/eoXGluI94TB5gIpmAGU8/2U/4S3lAGEC4QDhf2WAYUEfYQDpf20AYTVhN11kchHiDVuo2WIAVWuR/2Y/YkTgA+EA4TthO2EA4Tlj5T1hCFBPV+IBZQRpjGZs4gBhP2VremZ+H+E94QBlAWV8YT0oNlwQ/yMzZOIAHjFlI2IA4QIrPntjvkJ8x2J/4XthPjxfwOI/5b8x4QBLdNPiP2EAZ5ny5eI9W4vgvmV/YALhPP9hQWE84T3lP2k/YQLlfvE//+U86T/lAelDZTxhAGF/YcMDYQ9lz4u07P+NqeDK/4eauOo/5T7hv/9hAum/ZbJhAGHBbYJhMm3Bf2VBYQBlBGEC4QbpP+HXTvyCvOKtYQDlgGE54QThAD9hPOFB4X/iAmhD8R5sbv5583xwH3EBNT61XfE8cQB4NUiF9l21HzEfcQAfAjAzICU5bf8yRH588h/1fjV/NQCxILU/WYyG2bIfMR9tovNyAP/yP/ggcQHxXjV+tX91frEf/7FhcQAxAPEccRExAPkf9T//OR89ITEAcQGxX7Ee8R/xHo8xADFfcT+xH3iVt3IePzEAMV9xAPkfsR45QD1C/kq2H3Ig8ICygXAAsXqxAP/xHblC9QA1APE9sQPxHfkf4zEAsQBIZJp2IDGYNVv4WWN6d0E0ALEeMQCxAf8xALVd9R11Hz8AsyD1PjIACXBeIzSzfiQ8fP8AM0uL/zlWl/+ASHPI/1iP0TIcjzVAckD0P/F+Y43nMgDP8X6xIPEfcR90qjM/cUD/sSAxnrEEMYP1H/U/MR91EP91Yf0/f0AzH7Ug9QCxH7Fe//Wf9V6xPjEAtX51HzlfsR9j+T/9Hz1BRncANAAt/DI7MgBxHTVgsUC5YjEA/zWjMSBxGjFfMR/xD3EPcTD/8RHxVrE3MSD1eXVeMSH1Hx/5m3Vdtl0/HzIAIS9rpzYA8R5xHyU6c74d8AH/MQCxH3E/' $Base64String &= '8Z5xHHE7sRxxGw91n7UfMQCxvklt0v8AN1u1/1J82//4daj2soA1nnEDeYP1Pv9xHjU/MQF1IL8fPwD1H/l+43lfPcCLobeyHv0f8bePOT85QHlecR4vOEG+H/91ujFAeT69Y7EE9WMxALEc//Ef8R6xDzVRPSDxGXmaMQDHcSF5H7UfNkh4sh+xW8G/H3b/JD2ENgDxH/FxPipGiDIAsZ6xH7EA/Edmsx+xPLEcsR/1HzE+jzW/MQBxHzEALVay8h+PdWCxonVgsQEkPpMyIP8xDjUesR9xu/FZdZDxATVA338f+x+1X3Gfv5/09r99XvExAIJ/iHIeMXP5PzUA//VfdRt1PzkcMR81ALVCeQDPfSIxAPYgMUBYhnK1cQ//NTAy7/DpMQExgTFYMRmxGQexWXEa9WFHWCm3AIb/R1iG/0lWAHf/NUiF/yQ9IoQCeENblgIYMkzgmf8kPpMKHAUMAbwAMk2U/zRSnP8AOVaX/zNLi/8AK0WK/01xs/8AWI/R/z5zy/8AY5Tl/3Wo9v+Adafr/2eZ5QIGAF2M6f9UetX/AEtzzP88X8D/AERsy/9JbdL/GBk2jQIXAQM3W7UjAhMBGy1WsgIPWYYg2f9npuoCA221IPL/d7j1AgtbqALZBgNrtun/csgA6v94xvT/e8zg8/980/UCDwEDAQtxAQON4fsGBwkDhRV2AriEIZW3/26KrQD/d4qn/2d5lxD/eoWWggF7fokQ/3N8lIIDfIKMAP9lbYX/eYCKH4IFgQOBEYEFgQE9QUaJiwFCSoYFPkdQggEYRUhOhgGFDU1RVseKG4EHgQFFSlKGG4EBgE5ge/9HZqeCtweBhYFdgX2a5vr/lkDa+P+Hx+qCvXIArNf/V3i3/z0AZan/Nktz/yvAQnf/Nkh4guHBAYgsRIPCcEFdp8IAgEdrxf9VeMnCeWPFBMEAMk6kwgDFAjccWKfCAMEVxQBIc8gHwmrCa8B7hLn2/3QEqvTCAG2i' $Base64String &= '8/9TPIPdwnXBf8F1wXcqS+Cl/y1TqMIdwgLABAg8aMbCAUd11f8YW4vkxn7BOIbI9v/CgMF8wTbBbsF7xXzFcsUCj8kAxXvBSMUCiNXtxgAAdsfr/3CVyv8YaoKbwnnBAHR2iAfCdsV8yQBla3r/dXx9i8aAwX/FgcFowW8v5DhBwgE5Pct+zofIAHHBg1NVW8IAxojEf05AUVr/RVBfwu1VAGuR/06CvP9njJXawkbBfaXp+sIAH8ECwV/BSsEGwQCEt+wxwgpoiLjChOJ1dagA/2OK2P9ynOcQ/4u07GIAY43nj2Jx4QJhAOFBRGe5YgDx4Tw0VKNiAGEB5QJhP+NhCmE/TYPa43/gT2YA42CB4QpEa8Tie+F/YTwPYX/hB+VA4QhNe9v/+FWE4+IIYUBhXGU/YVwDYX3hQYLT9P+H2P73agBtPnFBZUDhBWU/4SX8jaljP2F+YT9hOuU/ZT7/6X3hP2kD6YBpemEB5X1tP+PpgGV9S01UY35kCGIE8eg/V1tnYgBhgOU/YT1/YRhhYmEAZT1hKOID4AGVwM3z/6TX9GIAYQUf4QHhPeUAYUBtAGqc7cdieeFAYXQ8Y7hqAGFA/+GA4UHhAeVB4QVhB2E/YRPnYQDhCWEIQV/juuGI4T7vYQFlBmG74QZM4E/hCeE//+E94QJhP+FZ4QFhAWEAZTr/aYBpgenAbgDgJGEJ4X7hH4/hvuE/YQDlOnt7g2IB42l85TxtcnzuAmWAabvH5TplAOlCVlleZj3hPvFlBkJFTWIE4QDpQeEA+FZZYmZAYYBhluEXYTzx4TEsVpliw2FpYShiQP9gOGExYWjhP2E+NQCxGbo643FjsBprnfJ6IPEZ8T3/8UCxBXUAMQaxO3EgcgDxHP9wXrECcT8xBvVIsT/5HzEA/7FGMQcxDHEAcWIxYDEAcT7/dR61P/V+tRvxHrk/8QB/PyO7IPFxi936ckCOw47dMhQxP/FcdXqEshxGgfxeMQCD' $Base64String &= 'i5f3H3EedboB+X/1GvEdXmBmf3oAuSD1ALFetQB1ILEAUfxRV3IBMQC1X/EfMQCxAPhHUG3yKrETMQzxH3Fd/7EXcRlxFvFTMXjxIXIPdF7/dTm1I7U6MRsxH/FaMR7xGf9xAPJgcF2xIPEF9SAxIHJAx7AGMQB1QEt00zIkdUcx9T8qSJYypbE/QF/+yLZHcUoxA7EjMaT5nrEf/3EAuT+xADEddWB/Hvuf+V/HsR91knEThJSn8x+wH/8xILI/MH8xIH0g8QD1H/lg83kg9RtZWfEa8xv5HzUBA/EdMQJnaGz/YWH/8wH5AvUD9SF1gbEgcQRxAPhVXXYyDDE+MXixGrEU/zEVsRjxGbUdOT+5ADlAcR3/8RvxPLEaMQDxXfV5chnwnPExAFCN5vIlOWHxRnEC8TEAXJXnNkcxCfEB8QT/cX+xP7WAcSAxH/FecQBxA/+5XjEEcR7xGzVAdUC1f/1dfzXB/b81QjGFcROxvjF/bYx0gjIAcR+CfYN2Hz81IPUAsR5xIvUfNQBpdR6JtgB5OzVduT9YV13j9gFxH2pqbXIANQCxH//1IjkAsR91QbEAcQQxQPEL//GLMW1xFjIAcdewGvK48AD/cTsxG7VWdR+xFfV5sQK1H/8xHzK/8Fr1HLEB9b2xBHEa/zZgsbv4H/Fb8iK0Z3EiMST/sR8y5fh/cSBxn/EfMSWxH/+5PzEAsV55X/nedWC1X70//zkBdgKwEjF/sRNxnrEfcQDjeT+9H4WBf7IfcQB5YD+xgPUfsQD1HXEa/R9cXeJjcj1gX2UyHrE/MQD/cQGxH3EA9R/1P7UA9R/zBf5iNgMxQLEMcR2xXnL3cdMPtPfyVXAA9dljjeq2IOf/i7TsAjB1pwDr/3Kc5/9nlQDa/1d4t/83WCCn/zRSnAIMOVYAl/89Zan/RGcAuf9jitj/Z5kg5f9Yj9EDLKbqAQIGSHPI/zdbtTD/PGjGAhYBBkd1ANX/RGzL/zxjALj/' $Base64String &= 'TYPa/1mGANn/VXjJ/ypIAJb/GjeJ/xk2AI3/Mk6k/y1WALL/SW3S/1J+AuICM0172/93uAD1/3jG9P9ttY7yAgcBDwELcsjqAg+Ye8zzAgcNA4LTAwMRAR+N4fsCA4jV7XECN3zT9QIDARsBD3IArNf/aIi4/2cAeZf/dX2L/20EdIKCAXV6hP+CAH+I/3mAiv+BRIKMggGJg4SCA4bwgYP/fIADgQ2BA4EJB4EFiQGBIWVrev9RAFFX/01RVv9FREhOggNWWV6CAV4gYGb/YWGDAWdoxmyGAYUJXF1jghOFGceBA4EZgQFZWV+CCYEDGGRka4YLgR9VXXbjgmWF6YS37IKbge2BAQR0qoCnovP/Y40A5/9UetX/Unwi28IBR2vFwgBNcQKzwmdBX7L/R2Z+p8KBwW3BesWGwXDBEoR8ufbGFcF/wQjBecF/TH/AFMENwXHCAMECxH/BCCTAPpP/GC10wgHBfzhAX8jCf8EBwX9pp/7zyn/FAMEDyX/FcskFwQT4h9j3wgDFfcUAxYPBhwSHx8N/aoKb/3P8fJTCf8IAwH7BAMV9xXjHxQHFAsEAg4uXxoLNAIhpdYnCf1hXXcIAY8F0wQBgX2XGecEAcvxtbsJuwXPFAMWJxXnBAA/BCskCyYvJkW1xdf/4jsPdwj7CgMBpxQDBfz/BccV/wXxhPWF94TBBXcan4gHhfIWdw2I64X5HYQBhQ+EBdrjpYjOGHshjCmlAZX/hP1OD3QFiPlaJ5P9QjeYQ/1yV5+IBO1urH2J/YQBhAWEGZX4+c8vHYgVhPeV9a7bpYgDhC/hbqNniOGEb4TjleWEAB2U86QFlQZPj+/+aBOb6YgCW2vj/iwTd+mIIboqt/2ZEb5VmP3t7g2I/e/x+ieJ/YT1pAW0AaUPpQLh6hZbiAPE/53ti5jn/ZQTpO2EA5T/hBe0+4QBhR49hAGlH4QLhD6TX9GIA8+EdZjWo9mI/YQBhP2E+H2FwZQDlP2GA' $Base64String &= 'YQAdNnYA/xgzbP8rQncA/ypGiP8sVpnw/06CvGJAYQphAGEBP2FpYQHhe+E+5X9hAWOV4Ov/ZZnx4o5hQOFDB+G+4Q3hvkRrxP9VzITj4gXhA1+g531lPv/pPuEZ5TvhQuEA4gNgeWIAf+Q+ZURpAGECZRZhP2GldPx2iGM/4DxlAOE9ZQDhAf/lQHVA4S3xgOE/YTjlPuG08WU9U1Vb5sPhAGUF6T8/cQDpxeU/6YjhAGGAi6H+t+Z/4vtgP2F/4X7hP+E8Z+E9tTiyWEyZcgFxfTIETZS2HyMzZP8RwB5J/w4iT7JAcUBj9R+xH5XN8zIAcUBbjIXkth8xAGWb7PIf8XEAapztMiI1B7Fg+UEfcV+1H7EA8R+xGnbH6/8yO3E88TzxAHld+R4xPrUeH7EC9YAxAPEKMSJ4lbfjsh8xWmVthTZ/+R/5IP8/QHs/uQC1IHEAeT81IPU+fzUf8R81IPEfuRz5HrEAajxqbTYfPwA3APEfd4r+pzIZsR9xH3EgcR9ylnB/HzVfuh/wIDEBcX8kPYQR8h8zS4SyHwkWOP8yADFAMSCxhfUfMTmxBjFb//E+cR9xIDEdNQDxPzEAcUXxMQctU6gyX/UBP3/zfv81AHF+sQa1H3UAcR61XTUAf3EiMSDxH3EAcQrxAzEDcMyVyrIRth9yfDIA+R/xOSCCfYO/P38gtoA5AB+1WzEAsT+xf3E/S01UfzahNQC5H/Ufv14/ADkAehx0dbIfMQDxR42pyo/2H7Vf8T8xICpLpXZfH3U/cR+xf7EhtV82SHj/cj+xH3EAcYAxYLEXcRVxH/8xF7EA8T/xA3E9cV21gDED/zWgcR8xALEB+SHxH/m+NQB/MRt1XjEAcTwxHzUAsQelwOn6/7Hx/XIAMQCPNUB1wPIDtL5ZZ4czAARjejK6bG55/3D8b3nzH/B//j80AT0gf6H/9z/1X/EeOSC/P/cf8SHxPR81Pnle/x8/ADEAc3F24/Y/MS1m' $Base64String &= 'fKa63fUfMdn/sdr5fzHZMYHxOXGZsUAxQPgfQHE2ADWgMQC1dLUf//IFcGOxI/VduWUxfzEAsR/x8SFeo+b6XrU/sRp13v9xXTUgsRwxHbE98UY5nfUffzEANQHyXzG+dN7xfvE+XfxkcrIfcQD1H7Yf9Z9wAPv5fz8Aifp+P6AzALmd+Z3/+QBxP/FAsdy9PzEC+X0/AOO/AfUfa2tzcg5xvDVAA/V/tdZAX3m2AMj/QV+y/ypLIKX/JD6TArBUegDV/01xs/9VeCDJ/1iP0QIsNFIAnP89Zan/ToICvAJMdrjp/4jVAO3/mub6/6TXAPT/Z5Xa/zxjILj/RGe5ApYZNuCN/xo3iQYGAR4BLgBEbMv/Y5Tl/4B3uPX/eMb0Ag7jBQMBD2u26QoDAWcBF8SC0wMDk+P7AnMJA4Cl6fr/sfH9BgMPAQ8FGwGjAUNwlcr/AGd5l/90doj/AG10gv9tcnz/gGVrev9sbnmCB4B1eoT/e3uDhgOJggF+iYYJc3aBggMRhQ95gIqGAXyCjAOKB4kBWVlf/1hXIF3/XF1jggVhYQZmggeFAV5gZv9kBGRrggtnaGz/ajxqbYIDgQGBF4EBcm1+booBgRWNCYUBiSGBA2MAZnL/boqt/4sEtOyCAXKc5/9JwG3S/0BfyIIBgff4R2vFxoDBAMF9wQrBgTHBanWn68JQyQCGyGD2/5ba+MIAwQc0wFSj/ypIlsIAwZEjwQDBEi1TqMKFPnMAy/9Ng9r/ZZkg8f91qPbCe2mnYvPGAG218sIAwXxnBKbqwgJ80/X/h+TY98IAi93HesV3wR5vyYDBAMGixn3Hwy3BfmoAgpv/c3yU/3X8fYvCe8F9wQDBgMV2wQHxwXZzc3zHAsABxQPFAMfFgcEAyXp6eHrOf8F9OFZZYsaAwQDBAlFR/lfCBcFyxQDBbMVwxXnFejHFhGBfZcIAwXZpZv5swo7FAsEKxQfBBcEBwQV4WWeHxnTBf8ECxX83' $Base64String &= 'xFu1YnJEa8RiAeE3Z2E5YQRhBWONYABkQHQEqvRmP5XN8/+HAMfq/2OK2P8t/Fay4nvlPmI/4AjhAuE+QFCN5v9HdWCKe+bbYgFpAF6jawDlfmF+A+E/YQB7zPP/jeF/537hPOEBYTxlAGU+YQBywMjq/3Ks12IAYT+AZnym/2l1iWY8iWJ/aXRiAG1xdWMA/2SA4QBhBWEC5QHlA2UAZT9/ZQTlQGFJ5T5hCOEA5XxT/FVbZkDhPuE/4QFlgnE9f+kC5UPpO+k9ZQllPmEAawBrc/9wb3n/VQBddv9mb5X/hYydw2J6YQBSfNvmgMfqP2S34QA3WKfiAuEFOGeZ5eI/4UBhAFmG/tniO2E9ZT/ifWAC4QhhisfhPWEAdT9bqNlqQOE+/+F+ZT/hPmE54sBgeWVAYbyP4QDhAe1C5UCOw93iP/9hvmEx6r7gPuGiYQBmQOU8/+hBaQFiQmVA6EHlP+UDaUD/5X/pvWWAYQBhNeU65UDtPsdlOmUF6QJLTVTqA2FCI2U/YQBybnPiXWdnAHP/R1Bt/09bZobieuI/fuLiP2EAPPxoxjIgcRuxWnUdNYGyIPGwAUtzzHYCMQIxALUDB7EA9R+xHl+g8v9d/IzpPh8xALEBMQB1HzUf/zUAeT+yPDQAMQH5f/EAtT/j+R+xH3iVt/IXeTuxGQcyADAfsRJdZHL/XfxhbHIA9UC1ALUf8QK1AP86IDkA+CB1P3UAsRo1IHEA/z89uz71gvVBcQA5HnUicQD4QkVNMiCxDHFDvR/xP2OxH/kfV3i3NkCxH1P8g93zPzAAsRzxGzGc9RzHOQA1H7UBPF/A9iOxAI8yALAA8R+xH1yV57Ye/78fvx/1fvUfOQBxHv0+NWDHMSGxADU/d4qn8n6yG/+0fjlfdR7xP/UeeiA0InUf+FljejZhPx87AHlgMQMf+T91P/8f8x+xoFZZXv8yH3EdOV01AXkhtQDxf/EefzUAcR9xAHEB8V/xHzFg' $Base64String &= 'R8BYhv9BXacyQHF9/7FdsX2xXHEgsXp1YLke9QD/9R1xAPkBdUA9XrUeOR+xnf+xHnUf9X49QLE/MQCxH3Uf//kfuX8xAHECsR9xH3EXtT7/cRr1HzIA8ABxHjEX+T85QP85IvUCtQC+YDEFdADyRnAAf7U/sQD/H3dfOSC1APOBXuPygjkfRUhOMgB1HzUAP7EE8R41H30g9T8xAElWAHf/KTZ2/42pjsqyoDF6sR9tovMyff21IEywQfFAsT06HnAfMSLx9XxVhOO2HrG9NQA/nv8zADEgud11ATEh8QC5XjEA//kf9T+5QDne8V6xH7Gutd3/MRwxELEAdQAxAfEW9R0/AOM3APU/TmB7MgA2YHif/7WftT81APUA9R9xPPk/PV//tQCxH/k9vR+1AfEAtV+xDf+xPjUgdcGxAPk/8R8xADGxAbW9WI+wtgDR/4bI9v+EtwDs/4S59v9nmQDl/1OD3f8+cyDL/0172wIYPGgGxgIcBUxQjeb/XwCg8v9tovP/aRyn8wIWAQYBLk2D2okGPl6jBw5npuoCDhkBBm21AHYABnjG9BD/a7bpAgt3uPUjAg8FA3zT9QIDh9jg9/+N4fsGDwEDAQ8Amub6/6Xp+v8AjsPd/2qCm/8ITmB7AgNdZHL/gGVrev9laXQGCwBjZnL/Vlli/3hdYWwCAwEPBR8FA1ccW2eGAYUJgSdtcXUxggVnaGyCBYYBdIIRggF5gIqSAWl1iQGCA2BfZf9ZWV8RggNcXWOCAWFhZiOCAYUHVllehgNYV45dhgGBCYEDUVFXigMHhQGBKYFLaWZs/2Q8ZGuCKYUFgQGBBWdnAnOCX1Vddv9JVgB3/09bhv9BXSCn/2OK2IIBZ5UA2v+k1/T/ltoG+MIAwWlbheT/VUSE48J7R3XVwnxSHH7iwnXFdskAXJXn/8IAwQbFeMUGyXrBAcF7wQCBxXl2x+v/drjDAxh7zPPCd8mAiNXtB8KAwQDFA3LI6v94' $Base64String &= 'wJW3/3qFlsZ+wUGPwnfFdMACwXhra3PCAT/Ff8F3yn/EhMEQwQZFUD5fxhDBCMWAxQHBfHV6/oTGAMF4xQHBfMWEyX/FefnBAF5gw37Bb8F7xX7BiPhNUVbCeMEAxQXBC8UAH8V9wQ/BO8EAwTdqam0fzn3FfsJ/xD3Ff1d4tz/GfsH94T9lAGExYXhWicbk4oBhAV2M6WIA4Tv/4TxpP+F/YQBhPuEA5T1hNI9le2EKZT7lfIvd+mI6n+E/YQPhBWEAYUCC0+d/D+E94QBhAmI/rNf/ZgB8pv9lbYX/WfxjeuJa4TlpAGEeYTfhNYBsbnn/bXJ8YgH/Yj7kQuo/4ABhCWEk4URhLx9liWJF4YlkAOE7c3aB82YAZkF9i+ZAaQDpP2E4EeV8S01U4j1TVVv/4gHhAOU/ZUNhQmEG4QBhAP9xQuE8YUBlAGEfYQ5pAOEaiEdQbWI/WHWo4n8B4QBwlcr/lc3zT+KoYQDhP+FBVHpjfkjEc8jiAGWZ8WK96X3/aXvhNmkB4TvlP2V74QBlA//lfGE6YQHlBGU/YQDhQ+EBx+VC4T5hfmZvlWI6YQD/4THpeWEA4QLhAeW04j9kAf/lP+aE6YVkwOE+4SxpA2IL/2ANYQlpP+o/8IFhAGU/YToBZT5FSE7/OT1G/+IBZQJpAGFAaUPpwmE+ZQL944RiYjxhgmF/ZT7pDuEaB+FkYSdhZ0Nblv9IjGSa4j9hPrHx/TIA4zEgMUFYj9HyP7FfMQD/eT+1PvEAcQA1PnVdtV71O/8xHDE+NQHxAHE/MR5xh/JffzRAsQExPvF9MQBxAvEAW5yo2XJe9XxyGHN8cgDPMS/1ILUfMQFwb3cf8T//Nj/1H7wf9SDyfzkC9YKxPw9xRDAAfx83AHt7g/94e36J8kDxH/EZcRxFQEpS/zU6Q3IfQoxFTTIgsR89QUY2AH91AXUgtSGxHrVDsQQxAE6MUVoyADECUE9XNgBHvT8xIfUfgn+IMiBV' $Base64String &= 'QGuR/0dYhnIAjUSpyjKUkKC48jVOzIK8ciHxPluLM2AxAP81IPGBMR51nXVdsRt5H/E7/z0gtR/1H/EAtQHxP/EgcZ3zMQBxKYfHcz+xH/FeMRr/dR71HzEAsR4xAPUgNSH5mv9xUXEcdR+xczUhtkF4ILUA/3ETsQN1H70/uSCyP3FgtGADMQAxGUdLVP85Pn5H8x9wALEg9R8xH/UfLfwyOzIANR81APleMQMzav5itgV5ADUAs0OzQTEA8StxsR9zfJRyALGAcQBnwHmX/1lnh3JPcQD/MSExQnFAscAxIPWdNUA1IP+xH7EA8lswHDEdtTvxH3EA/JPjczw1AHEBMQH1f3Uix7Ih9B5xKHeKp7IJcR/ztXdyH3F2sh/5P/0f8Rr/NmI0Hj0Adb21YzUgfQC1BP81H/E9eQCyCDUgND/5QPEd/7kf8QAxALVf8VmxILUfMQD/sSB5gTUgcQCxHfUfsQG1H/8xAHEFcQBxAbl/cQAyjvAd//EUsR8xALEA8S01APXPcQLjsRdxYGOU5XIgcR4xAPx0qnO8dV4xOzl79R81AB+1HjUANQE1ADWdboqtfzIHNbQ13PY+cB+1PnUAcv5usxl9APmQ+hw0Bblg9oP/8V353bS+8R2xBrVdNl60AP89QLmgMQAxHz0ANSAxADUeEXEfCRY4NiA+R1D/PoC1X/Uf8V81HzEA8QCzoz9zP/WwdSB1oPVgMQ9HUL21IG3/V1tnBjBOUQJaAjhla3r/VWsAkf9oiLj/Z5UA2v9npur/dacg6/9ttfICLGu2AOn/eMb0/4vdIvoCBpPj+wIGmuYxAx6H2PcGNgEGltoC+AYGiNXt/47DAN3/cqzX/2qCAJv/ZW2F/1ljAHr/Y2Zy/2dnEHP/a2sDA21xdQECB2xuef9zc3zw/3NxdgYDARsBFwUD/HJuAycBAwVDAQsBJwEDCGVpdAIDZ2hs/xhdZHICCwHnXWFsAYYRbXJ8/3p4egGCBXN2' $Base64String &= 'gf9tdIIBgjt1eoT/e3uD+YcBfomHA4ABgQ+FAYELGHV9i4MBgAc1OkMQ/zk+R4IBPUJKEYIDPkdQhgVCRU0RggEtMjuCAS84QQD/PUFG/01RVgGCAVNVW/9WWV6LggGHB2KCAUtNVIYhCFBPV4LdR1Bt/4BYV13/YF9lggP/hReFA43zgQHBBsEPwQDFFkfBYsJPwERZZ4fGgnCMlcrCg8GCdrjpwnPnwXzBAMECdsfDBcF2wQGAjanK/26KrcJ5iGd5l8IBeoWWwgL4aXWJwpnGZsBtxQDFgP/BAMJ8xX/EAcEmwQbBfckM88EBxYFwb8N/xRfFfcaBx8B+wQTFfnmAisZxwX/HxQHBAMF1gn+IxnzGAv/Ig8qBwYXAgMF/wXrJAMF/x8WEzYbBAUdLVMJ2wQD/wXzFfsEAwWjBdcF5wQnBAA/Ff8EAxQPBDkVKUv84RUhOwgLNfcEKUVE+V8IC4T3hAuFA4QFcXf5j4gBhQGEA4mTgJGF0YUE/5TjhQeE8YXllAOEBeJXGt+JE4QBmfKbie+E8/+EtaTxlNe03aT/qP2iA6X35YQBpZmcLZX9lRGECZYt/YQBlQGEC4gvhCmQ8YQB85Hl8YwF2e2IA4UhpgPyCfWM+4UVpAGo/ZAFlPo9pPWWCZT1hAEVQX+Y3/2U45TjhPmGCYQBhA2V94QP/5QXhAeEC4T1pQOkFZURhAf9hAGV96YNhAOE/YQBhiOEq42EBYSVkZGtiOOVCYncjYDvhMXR2iOJ6c3z+lGICYXthauk74QhlQG08/2UA4TphAOkB4S/lPmEBYQL/4RLlPGUF7T9lAuEO4QHiPn9gFuXKZcjlP3JAYABtwHz8goxjgOFA4QNkB2UEYUH/5YRhPW2A5bxhNOVuZQBteP9hP+UB6T/hAGFIYQHleuWG/2ZK4H9lAeUG7bxhAXEHMUXHcUZ1H3EAYWFmMh9xAP/xUjIAODR1FDUAsRVyIbAB/78dMxt1OnVbvx6z' $Base64String &= 'HnUg9QH/dQDxAXEDMQpxAHk/NSG5RP/1SzULOYHxKfIG8B2yPjU//7h+Nn1xALAB9QA5QHEE9WP/tR91ALEfsR4xHzU/tQC5HP91WXUccTw1GTEg8QBxAHU8/7VEOUN1PTEgOX01ArUedYAXcQA1YLMGYroeXmBmBzIBMSD/HHP/ampt/38BtTj0dbk+vRr1Gr5eNAD/dZ21BjEFcR81arEAtUgxAP/1BfEC9V7xDHVHNgbwHjUb/7k/MQA1PfE/sQFyALiA+SD/uQBxo3EAch81QHAA9T8xH/8yXLRgeV71QbUZ8Rt1frVY/31f9R81Pzk9cQNxHflEdSD/9QQ9ADEVcR4yFHAWcRKxE/81YD8edx49ATEDcQi5A7UF/3UAvUA1Pvl9vUO1qjVTsQT/NQZyK7QluX4xALWP9UO2hP84AHVeeV89IDUCeWJ9nzIA/3CfdQE1H3V5sQs1Xfk/9V7/dRo1PPUZ+TzxAjEFdZ+1FvsxADM7XvYj9RL1RXUCNQD/dV41AHZePAC9PnUB/WGxGP81hPUAcQB1ODEHdRsxAH9e/zcAtQP1AzUE9Uu1JLUANcv/ch+0CfV/sQC1fjEgNQD5H/81ALU7NSB1PvYisUJ0AL4f3zwAdVu12/kfs71iNmExAP8xHXF78R8xPLEctR/1Ifk8f7EBtSJ1N31+fx9zH/MB8LQAYv9gX2X/ZGQAa/9cXWP/WFcAXf9hYWb/Z2cAc/9naGz/aWYAbP9ra3P/amrybQJcXmAHDAE8BdwBHn8BFgFmAQ4BNgEGATYBBlf8W2cCDgHWBSYBBgHOAV/4cm1uAgcBAwFzAQMBR8cJSwJfBJdjZnICCwEHDwEDAS8FSwFjVlli/4hOUVoCE11hbAJ/AGxuef9wb3n/mHNzfAIHAgtxdoMBAYAJfHl8/4J7fTD/eYCKggWBAXV6AIT/e3Z7/3N2xoGCEYUBbXJ8gieBAx+CDYQBgReFAYEHRUhOAP9LTVT/TVFW' $Base64String &= 'MYIBVllegkuFB0dLAFT/PUJK/zU64EP/LTI7ggOBCYFf44VhgQdQT1eKAYFxhQH/gQeBFYUFgTeRFYW5gQ+FEceC9cBTxV1RUVfGacED/8F9wQbBCcELwSzFiMEGwQD/xXzBAsJhxI3BAMUexYLBDv/BAMErwQPFCdEAxX/FFMWHP8EAwoHEe80CwYPFnGVpPnTKDcl/wX3GgMBqe3vgg/+CfYPGf8UBxXbjxXvBAGVresIDwQHFgMfFfMkCyX9TVVvCAMV+j8ECwXfBQ8FdQkVNwoAfwVnFasULwY3BAFlZX//Gw8EAyYHJW8l8yV/BAMEZ/8EYxVbpI2UR5QnlAuEBZRn/YQllQ2UzZQlpduEAZYthAOdlgGkAZT1ybmMMZRjlef/lC2EAZVHxQGkV4TJlA+kBj+EAZj5leeABbXF15n//cYBlf+U+YUplAGIK8H9lAf9hKWEA5TfhOeUBYTnlYOVi/+Ey4SzlAeGqZQdhAGEFZT//YSLxP+UuZQDtqGV8YQLhrv/lL+EAZRBiAmSy5UxhBuEV/+Ux5QzlQXa25IHpFuVS5r//5A9pEWm6bUBlA+XA6XvpQx9lP2UBZQBlPuUAenh6/2O9YIBqP2FEYDnhBOlK4Q5xYQJtdIJiBOm+ZQB7/H6J5j/hPvE/YypjO2Ev/+ED5bPhBGEEYQBlh2EBZS7/7T/tQOE4YQZpQm2G5QW1G/+1AvUfdX+5RDkI/x/zHzUA/3UbNgD0e3UGsR49ALUdsQD/tRu1ZvUfdQnxDfUCMQD1H/81IfVfcQAxAXUcshuxXLg//7EfcRv1HzEh9R+1IvYjdGD/8j//HzYA8Qk3b/MfNQA1Af9xAHUg9Vc1IvEA8RYxQfEcH7kXMQDxAX0ctVQ9QUb/ukS5ePUZ+SL/eHcBNQo5BP81HLUoeQW2Hnik+Vz/Hz8A//UffV+5JvFIcQc1RPEfeSP/NQC1ozU8sRs2YTUeMAB1H/8xIPlBdT51YDlfOWC5' $Base64String &= 'X/U///UXtR05IfUd9XA5ArU/MQH/dRzxYLmc/Tp1AHVcdRs1Bv95PzUcOXf9l3EBdQr5Bvld/3maOQD5HvmCOQN1HnF4sgD/+GgxALkftaa1JXVhcQSxAP+1vDkj8RuxWjECuaBxAfZ7//S/MQAxQLKgMb+0BLbCPJ7/fqEwIvkfMQB1XH0gdR05AP/1nrUCtZ7xAHEENTx1G3mX/3UfMQC1X7W/uSU9IH0bvWH/vUP/HjcI9R46IPQa/2EzJP8yC/U+tAA5gLkc+QT2IPRF/zUkcR25obVf8QZxIPIANJz/NSC1QzIkON5xHXUN9R/1oP91HjKhdCQ1YTkAcTt1szUc/7UdOSA1HjU7+V01JPUbNaAffRh/G3cb/x81Y/CxEGz/aWYHMGBfZREKGFhXXQIMZGRrHwYMAVwBHAG8BRxqam0A/2trc/9ybnP/Cp4JJgl2BRYBNgUDEX8BV4kBA2doAxthYWYCU38BAwEvARcBEwV/BQcBF2cGZwMnAQdXW2f/VkBZYv9jZnICA2WMaXQCAwELbG55igF4c3N8ggGBBYEZgSFwAm+AC3aB/3V6hAeCAYUFgQNtcnz/beRxdYMDdIKCCYEBgR+IS01UggFFSE6CA4hRUVeGqVlZX4Avfl6CCYUPgQGFDYEBhR1Q/k+DG4F1hYOFvZXbiROFC/hcXWOCAYWZgQHJa8US/8EIxSnBA80IzQDREs0EyY3zxQDGf21uyhnJAsV4xTL/wXPCAMF4xQDEBMmByX/BDfhOUVrCgcl/wQDBCMFqP8FwxX3FgcUGxXTBBHt7voPGCsUEwX7JhMUAAD8A/z8APwAfAB8AHwAfAB8AHwD/HwAfAB8AHwAfAB8AHwAfAP8fAB8AHwAfAB8AHwAfAB8A/x8AHwAfAB8AHwAfAB8AHwD/DwAPAA8ADwAPAA8ADwAPAP8PAA8ADwAPAA8ADwAPAA8A/w8ADwAPAA8ADwAPAA8ADwD/DwAPAA8ADwAPAA8A' $Base64String &= 'DwAPAP8PAA8ADwAPAA8ADwAPAA8APw8ADwAPAA8ADwAPAAA=' $Base64String = _WinAPI_Base64Decode($Base64String) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Base64String) & ']') DllStructSetData($tSource, 1, $Base64String) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 80734) If @error Then Return SetError(3, 0, 0) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\youngchicken.ico", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_youngchicken_ico Func _hard_disk_drive_pie_ico($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Base64String $Base64String &= 'HbGIAAABABAgIBAAUAAEAPACAAAWAKgAACgAGCAAGEAAGC8BXAIAAGwTAIACBACAjoADDAECABDAwMAADsUBIv8CBAD//wMMAQI3ASQBCF0AiAkAAIuPd7UIAIgAD38AQwQAdwAQfI94BxeCB50PiieJB3JOIoMHgUKBB3qqgQeAZABEAAAADwIogAcFIlWBD0RABwEReIAAAFAA3MzMzAAEBECCIYAFDd3dIYAHzMAECAJgUN2k3d0BEMzAA29dgAfdAhDMiAcCEIMHTIINlwemBAUHxBMARIMDxAZQ2kSBDETBgQQABMEvPwCHAwAHVwcA4AAAB4AjegPAAAGBJd0AQZiCqQAWBwCUywCAQFrAAB+A//AAf//+A88aAcUh' $Base64String = _WinAPI_Base64Decode($Base64String) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Base64String) & ']') DllStructSetData($tSource, 1, $Base64String) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 774) If @error Then Return SetError(3, 0, 0) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\hard_disk_drive_pie.ico", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_hard_disk_drive_pie_ico Func _notepad_file_gear_ico($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Base64String $Base64String &= 'mLIAAAABAAMAICACEABwBADoAgAAQDYAAAAQEAN4KAABAAAeAwAAMAIwAzxoBgAARgSoAAAoAIwgAAxAAAxbAS4BAIAAdhMAvwIEABy/vwMMAQIAEMDAwFAAgICAABH/AgIAfP//AwYBAQESAQQNAAjSdwYAcHAAD48AJQQABPcHEQ/wAAAP/wz/8AAECB/wMLAwwg8IH/O7u7OEB4IPIDOzA7AAiAc7sMiAuzCGFwAAjQ+IH42CDwOHL4NF8zM/h0f/AwCKD4pXmg+Tb5cPvR/EB0YP5SPNAw/w/4QA+OHRAwj4j4iFAIGCDAAJQB8f4EAgwAAAB4f/AOcAwRzySSS/wbl+EMS6xbnAB/+51LmDt3BMAAhCUMIB8DDCAQCIc7MPwgM7Cz/KA5z3N8MHABLJDQAPywNtxAHwAgBAN48AAEcuwD1gMYDgfH8AawDhBuqv9eOBMGAAYOmBwwAQAGAh/8EhYCLCACEAAAH/JPCBBwCWhyeDAgAIw0kIfydSfYMgeOICCFXFVQIG6QL4w8Em7wIA8LCIwYnkAoOCdWF8swuzAzDvBRmAg7u76ALlBfc7swgzuwjvBTALOAgIO7gI7gI7uzBwk2AA7gIzu/MF/wvrCxkFJQN76xHmFLMLu8PpFyYrOIOzgOgdBwD88zPpI8sxwIXuBess/wX//wX/Bf8F/wL3C0Sn/wX/Av//AucO/wXtIP8F/wIgRH8Tf/8CfwF/AX8BfwF/AXIB9woPGwD4QkMAj3D/jRwAD38BeAEIcIgcAF3kZgceAA8ABgD+QQB/CAAA/HEAPwAA+P1xAB9yaqASfwB/AH8AfwD/fwB/AH8AfwB/AH8AfwB/AP9/AH8AfwB/AH8AfwBzAHUVHP4iAABwFoRXAA==' $Base64String = _WinAPI_Base64Decode($Base64String) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Base64String) & ']') DllStructSetData($tSource, 1, $Base64String) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 2734) If @error Then Return SetError(3, 0, 0) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\notepad_file_gear.ico", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_notepad_file_gear_ico Func _ram_drive_ico($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Base64String $Base64String &= 'w7YAAAABAAYAICACEABwBADoAgAAQGYAAAAQEAN4KAABAABOAwAAMAIwAzxoBgAAdgQGAAC8AdwIAKgIABgA3goBPgQeDgAADIYTAX4DHmgFAABgLiIAACgApgBkAL5AAAYBjgIAANYTAIACAjgAgIADBgEBAAjAwBbAAAcBEf8CAgD//38DBgEBARIBBCIAAUMXDwcLhDsFAHeLBwh3gHAhiQgIf4gIiQd49wR4iIgQiHh3d3gdhxAHgQcACIQQCHeIDHeHAgiDEAh3+IgzAAeGEAh/ggaGEAj3/4UHghCAFwcAgBAANwoIgT/3CQgCSIcHcINQxgNEMAUEf4MHBwTHQAIEhgcEBApRiB+KBwEE5GY7AMCA///3BcAA48AAg3///wIgP//+ADfAACP/APwAA3/wAAI/AOAAADfAAAAjtcBjA8QAAcUAwAUBwAcUAfzABf5Aa//AAOAP/+AAHwAPARIAFPrAABbhghkRAMG5gL7Cur/FuU2b/7nJucB8AgBwAncQAAj4gAICj3eI7QECB8CLAQKPAWwAjMOLfogBmgEAABkCAuNaRDYICys5EgD9QBDxfwAA9OBf4BUXYBfgfAAe5h0p4CgA8OAB/GCH/wc9YADPwhhmAOEkQIYAYH/pJMSC/yT/JP+BHwARAAhvlDn0AmB20QIH4QJQA3ft8wIH4QJQCYflAkwD4AIEB3DvAgeHf4iAAghPCXeH/3eIiLFOCYh3j4FHTQkH4AL/Y0hLCQSZIQZJCWAX5AJKCf3ghYggAAQDRwniAiGkSwlx4AJ/+IjkCEgJ4AL/Y+ibRgkAiH8HpUgJAOaIywVFCQCIzAVECaqn+UgJAAhnEQkDAEESAyFE/xEDQkcPA+RwDgOFTQwDJq3/DAPIUwkDCbMJAwsthgF8XP+GAS4wgwHsAoYBXzCCAe8C/4MBTwEyKT8zDwAPAA8ADwB/DwAPAA8ADwD/aLRIdACflXQAD3MA/HQA+A6wZVFwAPAM' $Base64String &= 'P3IA4PBm/xTt7fBnOfIAwAAwb3IAABByALAF50AAcGoAqsNwAPhwAAPwAvBxAIifAOwwbAADD3NYjgBwAAIAfQAD7e1yAHgBAO90AAMAfwAzbAHE7ezyBAEA9/EFcQF3MHJwBPMIAHFegQLwBf8RAQkf7O1wcwAAP4QA77BzAAB/7LALo5AD8g/wAAFyAPhwC0HyEYAH/+3scADACA//ABF84B//95lxAfw/+hN5AHNz9AD/8QKBf34Ce6e0cn9mf2Z8ZgDA3MAA8MqmAAAEBAQACAgIAAAMDAwAERERAAAWFhYAHBwcAAAiIiIAKSkpAABVVVUATU1NAABCQkIAOTk5AACAfP8AUFD/AACTANYA/+zMAADG1u8A1ufnAGiQqa0QBjMwANG2mVUwAMzjADNAADMwATNdMAEzMQFADCECZnABZtWAAGZwAWZwAWZwAWEDqplwAZlwAZnAAJlwAaaZcAFgAADMcAHMcAFqzHABzAABzEER8AD/WfAA/8yjBhIAZjAAmVswADEB/+MHQAAzMAgzdTAIMzAIMzAIIgkwCDPVMAgzMAgzMAgzMAhiClUwCDMwCDMwCDMwCDNXMAiiCzAIMzAIMzAIM2UwCDMwCDP/MAFwCDN9cAgzcQhAGuINkggRAJm9MADMMABwASEPsAhmwAfqZoAGZkAFZrAIYhDAAepmgABmsAhmsAhiEXAIqmZwCGZwCGZwCGZwCKuiEnAIZjAIZjAIZjAIVaETZnAIZjAIZjAIzP0Sg8wjFHAGEwDwAOIV0RG7UAmwB5lQAqIWsAeZMAmqmUAHmQAGmTAJmbAHqpnAAZlABJmwB5mwB6/iGLIHcAHwB5nwB5nwB7UhGpnwB5lxATAImTAI/plwEGEbkxgREBEIsQWhHKswAfAGzLAJzHAIzPAG16IdcQgwEMxwCMxxCIANq+IeQAPMsAjMsAjMQAiuzAAHIiCwCMyAA8xAAtrMAAHMsAhhIcyxCDAZ+sywCMzx' $Base64String &= 'ELII0SBRGDEHqyAjMAj/MAj/MAj/MAiu/zAI4iQwCMwwCP8wCLr/MAjMMAgiJjAI/zAI6v8wCP8wCP8wCKAFMACrcAEwCP8wCP8wCP8ACKr/8AfMwAT/gAP/QALqZjAEZvAAZvGcsgUxAgBmACEApQBfXwRfAMFkhoaGAJYAlpYAy8vLALIAsrIA19fXAN0A3d0A4+PjAOoA6uoA8fHxAPgA+PgA8Pv/AKT8oKB/on+iDwAPAA8ADwA8AOwvAf8BDwDkle0A5us/AucBB+yyATECDwB0AOvxAZkQAjECPwQAMOwH9OzAAfkBtLYCAAgAB+z08fBzAOvs7ACZAOwACusAiOwI6OzrB+wA7/Hw8PBz7OseAACMAWwBjAV46+wHBOwHAD68vO9z6xzr6wCGAEwFhusHByDs6/Hx7AE8vAcNAkIAAAQGPuwHB/X47OzrAB4CIAAACkMAH7j18fEBfAEeAh/vCUMcAOwBHgJ8AV68B+/bAB8CIW0AQwEf8gMeAAECBwM+B+/37+/3enMAIG0CEINtgR6AAO+DgS8AEPf393Ntgg/AAABz7PHvBD4AHhOCLwIQknOGkOzw70eBHgIQhA73kpKIoXO+7IYOEQ+DQ4Q9Ag/3DA+/giEDHoI9Dw+DIYQu9xEP/4MhGQ/DEJkHwhCaBz8APwBVJgD/AQD3wADjwACDAH///wI///4AAjfAACP//AADfwDwAAI/4AAANwDAAAAjgAAAAy3EAAHFAMAFAcAHAfwFwAX+wML/wAAP/7jgAB8ADwESABTAABZW4YIZEQAowCAwwABg0cAAAQAIAyUJVStAHHGAAACAgIMBQQAAAsAAwMAAwNzAAPAAyqYABAQEAAgACAgADAwMABEAEREAFhYWABwAHBwAIiIiACkAKSkAVVVVAE0ATU0AQkJCADkAOTkAgHz/AFAAUP8AkwDWAP8A7MwAxtbvANZA5+cAkKmtIAwzrWAAZmAAIWnMwwEzgACqM2AC' $Base64String &= 'M2ACM2EC/0MEqmbgAmYAAWbgAmbgAlZm4ALBBpngApngApk1gAGZ4AKZ4ALAAADMVeACzOACzOACzAACzJXgAv/gAf/gAf/MQw21IgBmYACZYABhAv/DD1WAADNgEDNgEDNgEDNXYBBCEmAQM2AQM2AQM11gEDNgEMIUYBAzYBAzdWAQM2AQM2AQQhdgEDNVYBAzYBAzYBAzYBAzVv9gAuAQM+AQM+EQ/67/wxsiESEAmWAAzGAAV+ACQR5gEWaAD2YADWZdgApmYBHCIIADZgABZl1gEWZgEcIi4BBm4BBmdeAQZuAQZuAQQiXgEGa1YBBmYBBmYBBBJ2bgEKpmYBBmYBDMYA3/oAD/QijgDCMA4AHCK6EjoBJgD66ZoARCLWAPmWASmYAOqpkADJlgEplgD5mAA+qZgAiZYA+ZYA/CMWIPa+AC4A+Z4A+Z4A9BNJmt4A+Z4QJgEJlgEJngIP/BNiMxISAhEGELQTlgAuAN6sxgE8zgEMzgDUI74RD1YCDM4BDM4RAAG8I9gAaqzGARzGARzIAQzAAOq0JAYBHMAAfMgATMAAK2zGARwULMYRFgMsxgEf7M4SFiEaFBoTBhDkBGYBCq/2AQ/2AQ/2AQ/2AQq8JJYBDMYBD/YBD/YBCuzGAQQkxgEP9gEP9gEPr/YBD/YBBAC2AA4AJgEKr/YBD/YBD/ABD/4A+qzIAJ/wAH/4AEZmAIambgAWbgEP9iC2EEZgAAIQClAF9fXwAAd3d3AIaGhgAAlpaWAMvLywAAsrKyANfX1wAA3d3dAOPj4yAA6urqAIDSAPgA+PgA8Pv/AKT8oKDgeCF6YWCCksMAIQD/QQKBAB8AHwAfAA8ADwAPALkBAO3tPwEPAFiDBz8Bcw8AxwUH728BDwADAJI98ALv8gLQig8ADQD394/2AlMADwDrAvft7JECnfCB9/8C/nRAe+ztUAPdwQjvknVfCQgA6/AC8AV4mXMAUACTeP942Ajs0Afv9XMh' $Base64String &= 'eexgBZACB1EJ/wLHC+sH9fWZ+6CcAQAAYIRTAAAA5Y66gMDw9+v19JnhlxEDD1EJUACzHh8f8Ozs95D37PSZ8pTwvBAD/1MJkALABf4CUKHxBdIF0p8fEQPxAuASUwBaCfLy8rDs7Af345r0ngdWCSOSqbcVbW3zAADs7Pjz8+ugp/UFIZpWCSAAm8AF9gL0AADwCPD1sKjHwgLipAKp7OvsEaeQseNQBpOvbW31AQDhCugFfwIAQJ7gp1IJIQP1BeECmf+jrKOuBqNRnyGt4AVSDCEP/uzxAuECww4ECRWkJK7xAv8hBvQC1AXbCBUDYKGDtVAJ3fEC7NMF5gj0CO/nAmCg/1QJ8gLSAvQFtxEiq0etMgb/8QJitcsL0QX0BdIFZK6iup+kqZW65ALeBYKvknMlId9ACdUI6wIIA/AC7Xa6UQn/BQPJFNECBAPgAqq1UAnVC+f3u/sITjO879wLAADmBf+PuxMDxwu2EdEC7wJTCfkL/8kOvwKnwdUIFchfxB8D5wK/P8lfCdwLLwI/BgYDkl9L/w8A48nvAg8AL88PAA8ANAb/7wIPAAoDH10PAA8ADwAPAB8PAA8ADwAPAA0AUbSqAKoA/wIAmQQH/wAHqp8ABjMABw8DF/wBBwEAF/gOf///ZgAA//AMP///zAAY/+AAAAcAD8AAORUEBzACB4ABU18A/0GALef/hgD8gAPDEP/LAPiAAwP/14QA8IEDn+MA4IED0A/xAMABQg+BFoED1wAeggMETgOEAwGFAwBEf5QDghyAA4IngAOBL4ED/veCI4FgAAAHgAMBFAFpAUj+H4ADAVCAZAIUgHCCHAKFfvABHwIUAR+BHAEfAADAv4KIABQBH4EgAR81ACiAHeoQwAAggjkIyzsOAAAvOcEvgICDAUEAAALAwADAAMDcwADwygCmAAQEBAAICAAIAAwMDAAREQARABYWFgAcHAAcACIiIgApKQApAFVVVQBNTQBNAEJCQgA5' $Base64String &= 'OQA5AIB8/wBQUAD/AJMA1gD/7ADMAMbW7wDW56DnAJCprUAYM8AAqmbAAJnAAMyDAzMAAeozwAQzwAQzwQRAVoEIqmbABWYAAmbABWbABVZmwAWBDZnABZnABZk1AAOZwAWZwAWAAQDMVcAFzMAFzMAFzAAEzOvABcCPAMCcAMCXghpCANpmwACZwADBBP+DHwABqjPAIDPAIDPAIDPAIKuCJMAgM8AgM8AgM8AgrjPAIIIpwCAzwCAzwCC6M8AgM8Aggi7AIDPAIKozwCAzwCAzwCAzwL7qM8AhM8AhM8EhQI6CN+tCIkEAmcAAzMAAwAWBPFXAImYAH2YAGmYAFWZXwCLCIIADZgABZmARZldgEcIi4BBm4BBm4BBmXeAQZuAQQiXgEGZgEGatYBBmYBBBJ2bgEGZgEO5mYBCgbSAAzEMo4AwjAP/gAcIroSOgEmAPoHVDLWAPqplgEpmADpkADJlgEqqZYA+ZgAOZgAiZYA++mWAPwjFiD+AC4A+Z4A/WmeAPQTSZ4A+Z4QJgEPqZYBCZ4CDBNiMxISAhEK9hC0E5YALgDcxgE8zgEF7M4A1CO+EQYCDM4BDMr+EQABvCPYAGzGARzGARusyAEMwADkJAYBHMAAdqzIAEzAACzGARwULM62ERYDLMYBHM4SFiEaFBr6EwYQ5ARmAQ/2AQ/2AQuv9gEP9gEMJJYBDMYBDq/2AQ/2AQzGAQQkxgEKr/YBD/YBD/YBD/YBCvQAtgAOACYBD/YBD/YBD2/wAQ4aHMYZvipKAfYAg6ZuABZuGiYgthBGYAACEApQBfX18AAHd3dwCGhoYAAJaWlgDLy8sAALKysgDX19cAAN3d3QDj4+MAAOrq6gDx8fEAAPj4+ADw+/8A+KSgoOB4IXphYIKywwAvIQBBAsScDgDsywEHAELwKQLs9XPsKALsEPXw9+wnAgfs7HDwvLzvJQKgA8ABvFgHBwciAgACc+QB76tiBAEIc8AB7wEA94QK' $Base64String &= '1OxzAwL3Zw5zygEiAhfKAR8AEwD9QCDxfwCoAOBf4J0XYJ8F56QrISfhvvDgAfxgxv8HDWAAz8IoZADsAA==' $Base64String = _WinAPI_Base64Decode($Base64String) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Base64String) & ']') DllStructSetData($tSource, 1, $Base64String) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 10134) If @error Then Return SetError(3, 0, 0) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\ram_drive.ico", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_ram_drive_ico Func _rj_jack_ico($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Base64String $Base64String &= 'nLEAAAABAAIAEBACEABwBAAoAQAAQCYAAAAgIAN46FACAABOAEwoAEwQ7wFcAAwBXAEAgAIUEQAAMjkBOICAAwwBAgAQwMAWwAAOASL/AgQA///fAwwBAQESAQQKAIcEZQAHCAj3dwIHj3iPcJUBB4cAEQAEEndwAi3gCIiAAAgAHQILDQc0eIgDB3MBxQAHexiVBB/4A2OIgw//8YMBEvCAAeBxgFkxAACCxoB/xwMAAMOANXaBAFGVAcOAAYGTgZFA/4iTAK/ckwwAhHmXB4CbCQAzQFLSA3//BE/DA3/3BncDBMMDB/d3iHcDQgLCEwh/d4gAh2Z/AQjDA/d4AAEBCIgTBwUCCH/3xwMId//G/0F2BiWHd3fAEcgimohEZohAd4kF93fKA673wAMAHPYD+MADCMkDiP//8MoDcyEHygPU+6naA4jQBwfLL0phv8C3ywNNecVBAwBAB8PIAArBwADhQAHh/wB/AOH+AD/h/AAfAMH4DA/B+D4HEAPwfwDAAIAH8AB/wA/wP+A/8CA///+AB+8A4B8DYwDhBw==' $Base64String = _WinAPI_Base64Decode($Base64String) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Base64String) & ']') DllStructSetData($tSource, 1, $Base64String) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 1078) If @error Then Return SetError(3, 0, 0) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\rj_jack.ico", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_rj_jack_ico Func _search_laptop_1_ico($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Base64String $Base64String &= 'y7EIAAABABAgIBAAQQEA8AIAABYAOCgVABggABhAABgBAAQtAmwAAGwTAIACBACAjoADDAECABDAwMAADsUBIv8CBAD//wMMAQK3ASQBCEMAiAFlCA74ChAwiP93eAgQAA74BzMHEAEHD4gGCAMHD4AIAHiICQfM7Ad4hQAHhwQH/M7sBwIPwQMH/8zuzACBDwAIgQEHfM7swId3AiggiHeA/3cADwh/x4MHgSgBD4/+9wIYgRASjAAP7u6FBwCIf0DswI7u7u8EGACAh/eMCO7gDoMHAA/v7wB4gI7gBA8OAhiH/v7+h0AICOAP//CBBwgAf+/v7+hwjuco/5HwASAIAA//+EBwh+5///cBII8BAA/v74cI7n/3wH7u4HeAjoAPARCk7ueAAwd4xAfoQCNFggMAwwf4CA6DAwCiCMIH4IcOgwMAwRcg/v7wh3CDAwAAkQIQCHh3hAMACEAQGACACIUDAASIgIcPg4sBAMCABwD8f///QPAf///AB0CGAQD//AAAf/AAALwfwMAAgArGAMADD8AFCg/ABwdAkAf/wADAA/gAAAPggKrABrYBw6AGAAHAAMFqH8AEFH+AwBXAgAzgBh8Q//gPfwag' $Base64String = _WinAPI_Base64Decode($Base64String) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Base64String) & ']') DllStructSetData($tSource, 1, $Base64String) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 774) If @error Then Return SetError(3, 0, 0) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\search_laptop_1.ico", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_search_laptop_1_ico Func _tools_gear($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Base64String $Base64String &= 'PLIAAAABAAIAICAECAABAOgCAAAmCQA4EBADeCgBAACsDgMAHAAsIAAMQAAMaAEABAJsgACsEwCAcQIEAICAAwwBAgAQwCzAwAAOASL/AgQA/z7/AwwBAQESAQQMAAL6CwF1AQAzCA8DsAADdwAPAAIFDzAADwESBQ8zEDO/AzMHDzsDMxD7AzPzBA8DML8AsAO/MA+/AzCBAA8F/QMzA/sBACQwM4UHP7+AGr+wAYQHO/v78I94gK4LAAOCBwAuD4AH8AASAAL6oAX9UAA/o4IPgC8AIgCCB7+ABxS/s4AHh4EHA/vzKYAHO/uAB4+CB78AHYAHAAEyggeAZIiIgMwAiIYHgAP/cAJ4gh89gAMIgA8DAIMHBAAI9yWNB4COB//wigcAVRuJD4A5B8xc6gOIgAgGh8AQBScAh3iHdwh4iIiGHI9//3eId3d/xguPAA/AeQ9IJIAgwT4EAMf/4f8Ag/zhz4P4YYcAg/gAB4PgAAMpwAABg8AGgssAAYIQCAAHxskADMDPgMYPwP/GD+HAAEj//4LIAIMfwwD/AcQAxg+//8AAP43EAH/AAMAEAf//wbl2EMS6xbnAlbn/uQIAcBAwAAAqQbOzA7CAKgBdCzDzO8ADQFOwv7+wMMABCwjwAPvBATM48AMBQOpdO7jwOwAIBABdwgOHAF0ACL+AGsEBgmPEAYBVywGAxAEIiH93gQH/jwAA4LwJAAAYwTtgfGEerWUAsOABYQARYAQRQBVVYQD7YADRYADAZAA=' $Base64String = _WinAPI_Base64Decode($Base64String) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Base64String) & ']') DllStructSetData($tSource, 1, $Base64String) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 1078) If @error Then Return SetError(3, 0, 0) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\tools_gear.ico", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_tools_gear Func _NSC_fs_red($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Base64String $Base64String &= '/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCABAAGADAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+gb/hVl5HMkc+q6fZ25+cLcXEUMphLkqQrOGOY9uG4IIOV7N+6S4ToqtKVfFU6ak3JRnUjGTTva12na1tne7d+x/lzHx0x9bAqOW5BjcVKnFU51MPhK9enGrGK505UYcianduLk/d0i3fmWv/AMKw04qANd0ndjJzfxjPrj94' $Base64String &= 'R1Jxx3GelbvhjL2v98o+X7+np/X+XZHkx8ZeL4zb/wBXMztdtL+zcW27O6v7nom/XuXtO+HOm20m6bW9JI9Vv4j0yf8AnqC2c4wcDCgZ5zWlHhzL6UnJ4qg9Lfxqdt1rq+11uv1OPNPFri/HUnTp8PZpTdmlJZbi+qts6Vuieqerb6ngXjX9pL9kDwL4o1jwf4x+P/gHw/4n8P3jWGtaPe3V99s0+8RVka3m8q0kjLhJI3ykzqQwA4r4HOfEfweyPM8XlGccc5HgMzy+t9XxuDq16yq4etG03TnyUZR5lGUXpN727n9Z+G30Kf2jHihwPw94heHX0WvFLizgji/L45rw5xFleWZd9QzfLqlSpRji8M8RmNGr7J1aVWCVXDwkpQbtoHhD9or9j34j+KdE8DeDP2gvh5rvivxPe/2doOi2+o3FveavqDQzzpYWH2yC2hlvJo4pfstqsvnXMoW3to5p5Y4mvJfEDwj4mzTCZJkfG2SZjmeOnKlg8FQr1VVr1FCc3Cn7SnCDnKMXyQcrznanBSnOMJcviX9D39oZ4IcC8Q+Jvij9GLxQ4M4E4Xw9PGZ/xJmuVYKeX5ThK2Ko4VYrFrBY3E4mOGp1a8JYmvGi6WFw/tMViZUcJQrVqf1GPhHphJ33HXn5UPHbjJ54JAPBAC9SBj9K/wBWcDo2vlq9/mujfVtO3Y/iSXjXxQ/hqJaLpHp636pX111vu7/n7+0T+3v+w9+yr42n+GvxN+JF3d+O7Pyhq3h7wrpMerXGjPPFHLHBqV3d3em6Wt6Ipke40+0v7vULMSIL62tmliV/x3i7xb8LuB82xOQ4ypm+cZtgfZxzPCcPZPXzWOWSqwjVp0sfik6OBpV3Tam8NHE1MTTi7VqUHKKf+kH0ef2eX06vpR+H2SeLHDeE8O/Dnw+4rjiqnBGf+MPiNk/ANTjnD4LFVMFi8dwrkM6eZ8TZjlNPGU5YannlXJcLkuMqqSwGYYqNOtKn698Mf2nf' $Base64String &= '2P8A4u/CTxN8bvCPxb0hfAHga50u08c32t213pF/4MvNavLez0WLxDpVxbre28GrXl1DBpWo28d5pWqSC4Swv7lrO8Fv7+SeIPhbn/CuY8ZYbPMPhsiyipRoZzXzLD4jAYjKK+JrUsPh6eYYStSVel7evWp06NaEKmHrTco0q03Tqcn5J4n/AEO/p1+FHj3wh9G3PPCvNc88VPEPBZlmfhvlnBebZRxXlHiJlmTZZjc3zbHcI5/luNqZVj1leVZdjMbmWCr4jCZrluHhRq4/AYaOMwTxOKv7Yf7CCHI/aT+HeOM/6XqAJA45xp/oOeOvPrnyV4w+BSf/ACcLh3/wdiP/AJn8j9El+ze/apSVn9D/AMYP/DZlOl73t/wrLu7eWh9N+Brv4T/E3who/jjwF4z0PxL4T8QQ3M2ia9p10hsdRitL260y5ltzOYZWSK+s7u1YtEuXhcKSuGr9LyWtwpxHlWFznJMzwWY5XjlVlhcbQqpUq6oV6uGquKqRhP8Ad4ijVpSUoxtKDSVkmfxR4mZJ49+DfHmfeG/idwTxNwdx1wxVwFPPuGszwU3j8snmeV4DPMBHEPCPE4dvF5VmWAx9J0q806OKpybUpSS25vAvhxy23WNNGRwftkIIIBA/5an68Dgk9e/bPJcrb0r0N7v99T7v+8rafdd9W2fMUfEDjmCSnk+aSt3y7FW3u7Wo38rbWSWhzEnw0s2vFNrq+nOGcbUS9gdmOQQFUOCxOSFVVOBgAEcDzpcN4OdaLp4ynulZVacrtvRRtK+7t1fmfXUPF/iPC5fOniuH8xioU3z1Z5fjKcYRtZzlKVKUVGKScuaSTV9U7t+O/Gb9iP4U/tL+LF8f+KPFvxM0TVf7OtNNey8L+LJdN0sQ2iMIpEs2t544ZZAWMnlld5wzgnk/FcZeCvCviPm0c+zPNuJMHinh6WHdHLM0lh8Ko0U+VqjKnUjCdn7/ACtKT1au7n9QfRq/aa+O30NOAKvhLwTw' $Base64String &= 'D4K8RZLTznH5vHMONuAqGc539Yx0oyrUp5lTxeFq4ihBqPsVWUvZpuMGldHjEv8AwSq/Z3gcxz/FL4xwyL96OX4hwxuuemUe0DDPuK+Ol9Fzw+g3GfE3GEZLeMs/pxa9U6CaP6Woft1fpdYmnGthvBH6O2Ioyvy1aHhHiKtOVtHyzp5jKLs9HZsj/wCHV/7OX/RVvi//AOHGt/8A5Fqf+JXvDz/oqOLv/Ehpf/KDX/iud9MH/oxf0e//ABT+L/8AngfzH/tn+DdG+EH7Q/xw8GeHrzUta0TwN4hvrPTLzV9QF9qeoWun6Va3CNeaiIyJppTlTOIiFBGEIULX+cHilw5g8i8UuJ+GMvxOJrYLBZ7DLsNi8XV+t4mdKUMPBVa1W8PbTXO22nFSSSTS2/7P/oI+MvEfip9BHwP8ceLskyfLeJeJ/C3FcZ5zkHD+BeQ5Lh8bSxWc4ipgMuwTjiHluHksNGEVKNeVOU5VJRqSbT+B7b4g65qlt4T8X6NdXOg6lpV3b6tZX+kXdxa3uleIdLvFltdQsbuJo7qzubG8tUn0+5imE0UscdxG6P5ZrTL8tfDWb4mOGxNaGMwuIo18FioSdLEUlT5MRh61KrTcXCvTlyVOenySpziuR3i2uPivjWHjb4dZLWzvJMtxPDefZTmeWcS5DiKUcflWOq4tYnKc3y7H4HGQqwr5ZiqCxWE+r4r29PE4WrNVlyV4xl/cR/wS7/b20z9tX4KR23im8srX48fDO20/R/ido6eTbNr8DIYNJ+Iuk2kYSP8As3xIIHXV7e1jji0XxJFfWQt7bTbrQ5L3/U7wT8U6PiRw2oY6pSp8U5NClh86w65YPFRa5cPm+Hpqy9jjOVrEQpxjHDYyNWnyQoTwrq/8FX7UH6BeZ/Qr8aqmI4XweNxXgR4l4nH5x4Y5xUdbErIa0Zqvm3h5m2LqOdT+0uG3XhLKcRiqlSrnXDlXA414jE5lhs7p4L88PHnwj/bT/YB/bI/a' $Base64String &= 'R/aV+D/7N9l+1d8K/wBonWX8QandaVo7eMPH3he2udc8QeI7nw5p2l2F7/wnPht7a68R6hZ6hLoWjeJfC/iiwtNH1DUbL+27aKDTvx/G8OeLfhNxnxlxFwfwvlHHWQcWZ1mOeVlXoVqmb4eOY4vEZjVwNOWB58wpV6NfF1sP7Z4TH4TFYOlhHVcalGnSw3+jPC/jR+z2/aEfRp+jf4OfSL8dPEb6K3i99H7ww4L8LMrnlWa4DB+Hma1uC+Hcn4OwHFGKo8Uew4Qx+V5jlWQZbnCy6nxDwpn2R8RY7iGOChVwmYYrMM58Pufip+x98Sv2ZP8AgoBrfwp+DXjP9nn9pbxVpHw88SfGD4aeJvEvinUNGudIj+Png5rm+8J6DqZ0rR9FtPD/AIp1uSw1HTYvBvhm80KXW7OxtYJdPu2Ef5zxPxPwJxB4P+Ncsm4PxPAnGk45DX4nyOpinXwtT/jMckc6+DjTjhqMFQxVe1elPLsFWoTxUVGE4VZtf2n4GeBv0qvCH9ov+zHo+I/0jMo+lX9GrDy8Wcp8DfFPC5HTyrPcHFfRx8UKeGyziOri6+d5liamaZHlTq5ZjsJxlxRlmbYfI69WriMNXwOGhU/n7+NvjLVfDOk6bpukN9mm8Qf2jHNqCMVuLW2slsxLHa4H7ua5+2hftAbfAkb+UBLIk0P8icA5Hg81xmKxWNj7WGW/VpU8NJJ0qtXEOu4Sq3+KFL2DfsrctSUo87cIyhP/AKHPpbeKfEfh/wAN5DkXDVT6hi+Nf7coYrOqVSUcbl+AymGVRxFHL+VL2OJx/wDa0YfXlNVcJSo1fq8Y4itSxOG/p0/4Jj/sDfBf42/sIfs8fErxd8QPiRoev+INE8are6boXjaPStKgGl/FPx1pNubWwkgkNv5ttYwyzANtkuHlmABkav8AQfgrwI4N404UyXiPNs94jwWOx9DEKthsBnMcLhaawuPxeEp+yw86c/Z89KhCc0naU5Snb3j/AJCP' $Base64String &= 'pKftVvpH/Rq8efE3wc4B8KvBzifhbhXN8oqZdnXFXhrVz7PsXLPOFOH8/wAYsfm9HFUVjZUMbmeIoUJTg50cLToYZycaMbfeA/4JXfs5kgD4rfGAknAA+I1uSSegA+y8k19P/wASveHn/RUcXf8AiQ0v/lB+Hv8AbnfTASbfgX9HpJJtt+D+LSSWrbbzCySW7Oh0L/gmT8CfA2u6L4qg+IHxmnudE1G01O1huvHMjWs81nNHPHHMI7WJniZlXzEWRS8ZYAkE134H6NfA2S47B5pTz7jGdTBYijiqcaueN0pyozjUjGfLRhJxbiuZKSvFvU+N4t/bYfSh8SeFuJOBcX4T/Rzw+E4nyfMMkxuIwHhfSWOw+HzDDVMNWqYZ18wr06eIhCcnSqSoz9nVUZWTSZ9r/D3V2uJPspIPsARwAQq/Nk8Mc5ABYck4XaP2nh7F+3Th/I1p2S+966O+npsj/MbxXyGGX1KWIiryqXlKVkk5N7vljFXsuWzbs42u27v5b+LH/BOX4P8Axd8ea/8AELxB42+LWmar4hujeXtnovjKW00qCTYqFbS2ltpvs0ICAiJX8tDnaADX5fxV9HjhHizPMfn+PznivDYrMKvtq1LB5w6WFhLlUWqVOdKfs4WjdRUuWOtkkf3x4Dftg/pC/R/8LOE/CThTw28A85yLhHBf2fluYcR+HNHH55iqLqzqRlmGNoY3DfXMRzTadedP2s1bmk2keVn/AIJXfs5gkH4rfGAEHBB+I1uCCOoI+y8EV8s/ov8Ah6v+an4u/wDEhpaPzTor+ux+5r9ud9MBpNeBf0emmk014P4tpp6pprMLNNbM/mC/bg8B6N8L/jx8fvh94ev9S1TRPCeq6xpGmajq96NR1O7tYNEgZJry+CqLmZi5zIFUEAAAACv85/EfI8Hw14tZ9kOX18RicFlfEeGwmGxGLrfWMTVpweFanWr2XtJtyd5WStZJaH/ZX9C7xT4j8bf2e/hP4s8XZVk+' $Base64String &= 'ScS8eeDGdcQZzlPD+WvJ8lwGNxUc+jUw+XZY5TeDw8FTjy0ZTlJScpSk5SbPy9+E+opcWuraDOQwRlv4EJJZopglvdbR/AkMiWrKVxiS4ZuG5Pv8Y4aVKtg8xp3TaeHqSSVlODdWjf8AmlOLqp3+zTS1Wi/JPo2Z3SxuW8S8G4xxnGnOGdYSlKUpTlh8TGngcx5E9KdPDV6WXVIODVq+MnUXLP3pfW37NH7RHxE/ZD+OHhL4zfDu6P8Aafh26MOq6PPPLDpXjLwlfSRLr3hPW1jDb9P1a1jVRIY5JdM1O30/WrFV1DTbGdPU4B43zTgriDLuJsmqWxODn7PF4SUnGhj8FUcVi8vxKV70MTCKcJWlKjWjRxNO1ehTlH4z6W30XeA/pO+EHGXgd4k4XnyfiLC/WuH+IKNCnVzThTiXBwqy4f4uyWVTk9nmeTYqpKNegqlKlmOAq5jk2MdTLMzxVOt/Q78FtP8A26fDPiPxj+1J/wAE77n4fftKfs6/tNvF4pPw2+K3jGDTfEfwu8S295qc+peEtZsdY8S+Elstb8Fapq2q+G2v9G8aXkOvaNaaZPqOl3Mdnod2P6z4PyXxNyqtm/GfgxmXD/EvCvHOLnm8sq4sqYmvi8mxk6lWVfLcTbNMuq0a2T1q1fBUvquPqUcTh4wq1qM5OjWf/Pb9IvxN+g/x5l3h/wDRp/aX8F+Lvgl4+fRY4ew3h9Q48+j9gslyzIPEfh7D4LBUct43ySUuBOMcBmWWeIuX5dlfE2OWecJ4TMcmzWvicBl2Z4ejTx+XU/PvjB+xx+0l4a+Dv7cv7cP7YF/4J0v4yfFX4f8Aw7+Huh/Dj4eX39raP4X8My/Gj4O6hql7rmqQ28OnS6rIvgnwpo+jafpVzrUNhpOnXV1qOv6rquq3LwfL+JHhrxRkXhh4zeIXHePy/F8W8WYbh6liKGVUvY4LCYWnxLwrShQjTU6sIqhRy3B4ehy18TUnCnUrYnE1q1blp/un' $Base64String &= '0LPpt+Bfit9On9mp9ED6KXCfF/D/ANHz6P8Am3jFj8ozTj3MHmXEvEGeYrwQ8e8fis0r4qphsBia9bNsy404jzfNZ1cryTBYfE4rCZbkmR4DLsvVXGfzNftG/wDMm/8Acw/+4Ov5G8L/APmef90z/wB6B/0OfTs/5tZ/3e//AL6B/Vb/AMEwf+Ce3wm+On7Bv7O/xO8T+MvinpOteIdE8apeWHhzxY2naNCNK+KfjvSIPsdkbWUQeZb2MUs6q5V7h5psAyEV/eXBHgDwpxvwnknEuZ5vxRhcbmFDEqtQy7NXh8HD6rj8Xg4eyoOlUVPmp0ISmou0qjlO15M/5RfpN/ta/Hv6L/j74m+CnBXh34GZ9w3wlm2TVcvzTjDgGGb8RYl59wlw9xBilmGZRx2HeLdHF5pXo4aU6fPSwdPD4fmcKMT77tv+CUHwJtriC4T4hfG5mgljlVW8dOATGwYAlbJWAOMZVgw6gg19ZT+ixwNTqQqLP+NG4SUknnejcXfW2HT+5p9mfgOM/bxfSjxmExOEn4S/RnjDFUKuHnKPhdCUoxrQlTclGpmc4NpSulOMot6Si1dH2h41tx4b0TRdB06W5kttK0y106CS6uGuLuWG0iS3jkup3/ezSukamSViWZyXb3/Zs5pxy3LcJgsPKpKnhaFLDwnWnKrVlTowVOMqlRvmnNqCc5PVttu/T/Mrw9xlXjLjbP8AijNsPgqWLzvNMwzjF0MDhaeFwNHFZhiZYupDB4WmnRw2HpzrSjRoRioU6fLFP3Uc98L5mGrOrZCjHXOFy5GM8AZAz90k4wDkZrg4WnJVpp6XS09L91u01qvW+qv9L434el9Qw048sp3tJqzv7qa6uSad47pK9rS3X0FrWlW+u6Pqmi3clxFa6tYXenXEtpM9tdRw3kDwSPb3CfPDMqSExyr8yOAw5Ffa42hDHYTE4Oq6kKWKoVcPUlSnKnVjCtCUJOnUjaUJpSbjJaxkk0z+beG89xfC' $Base64String &= '/EGScR4ClhK+OyHNcBm+EoZhhqeMwNXE5fiaeKo08ZhKqdPEYadSlGNajNctSm5Qloz8zrn/AIJQfAm5uJ7h/iF8blaeWSVlXx05AMjFiAWsmYgZxlmLHqSTX83VPot8D1Kk6jz/AI0TnKUmlnd0nJt2u6Db+bbP9osH+3i+lHg8JhsJDwl+jPKGFoUsPCUvC6EZSjRhGmpONPM4QTajdqEYxT0jFKyP5b/24/h/pPwq+Pf7QHw60K81TUNI8IatrGjafe63dm+1a5t7fRIGWW+uyqefOxc7n2KMAAAACv8AOLxJyHC8L+Lmf8P4Gtiq+EyniTDYShWxtV18VUpweFalXrNL2k25O8rLSytof9ov0KfFjPvHT9nn4SeL3E+X5HlPEHiB4L51xFm2W8NZesryHB4vFxz6M6OV5fGdRYXCxVOPLT9pN8zlKUm5Nnnv/BGT9n3wH+1B+038Svgv8Q7Uvo/ir9m34ijTtXt4431Pwp4jsvFHw+udC8VaM0mAuo6PeIsgiLpDf2cl5pV75mn393BL/UfhjwTlHiDnWa8MZ1D/AGbGcOZlOhiIRTr4DHU62D+qY/DNtctfC1Zc6jdQrU/aYarzUK1WMv8ACL6b/wBJzxF+iF4b8BeOPhliIrPOG/GXgzD5nk+Jr1KWU8WcL4zLuJHxDwlnkKcZurleeYGhLDOooSr5bjVgs6wDp5llmCrU/P8A9o/9n7x5+zv8VfGPwZ+JOnix8T+ENReKC9iST+zNe0qcedo3iTRLiREa60TXrBoby1kKrNAXezvYbfUbK6tYP5v4r4Xzrw+4nzLhrPKDp4zL6zpylBS+r47CT9/C4/CTkl7TD4qk41qMtJQblQqqnWhWpw/2q8AvHXw1+l74GcFeNfhdmUcZw9xflqxdLD4iVL+1uGM/w3+z57wnxDQoyqfVM4yTMIVcvzGlGU6FdU6GZ4Cpi8uxOAxdf7S/4JP/ALf93+xv8YG8DfELU7hf2fvipqln' $Base64String &= 'ZeNIZ3klg8B+JmEdjpfxHsoBvMcFtGIdN8YRWoEl/wCHlhvjHfXvh3SLOT9y8BvFh8AZ9HL80xEnwjn9alDME23DLMZJRpYfOKUbNxjBctHMYwSlUwijUcatXB0Kb/y0/azfs+6X0vPCafGPAuUUofSH8Jcvx2J4RdOFOlieOeHKUquNzbw4xtf3VVxGIqOtmXB1XESlRwXEEq2BjVwWB4izXGU/6d/+CpFzbXv/AAT/APjxeWdxBd2d3pXw6ubW6tpY57a5tp/ip4ClguLeeJnimgmidJIpY2aOSNldGZWBP9afSdlCfgPxzUpzhUp1cLkE6dSnJShOEuJ8ilGcJxbjOEotSjJNqSaabTP+e79hrhsTgv2r/wBFbB4zD18Ji8JnXi9hsVhcTSqUMThsTQ8CfFSlXw+IoVYwq0a9GrCVOrSqRjUp1IyhOKkml/BB+0b/AMyb/wBzD/7g6/zK8L/+Z5/3TP8A3oH/AHBfTs/5tZ/3e/8A76B/VD/wTG/ZD+NHxT/YQ/Z48b+Ef2tviR8MdA1fRPGq2XgnQYJH0rRzYfFLx1p9wbVo9UtARf3NrNqM2YQwuLuUFmAU1/dvBfhNxlxPwrkudZT4r8R8M4DF0MQqOS4GnJ4XCewx+Lw9T2ThiqN/b1aU8RO8L+0qy1Z/yqfSU/aAfRw8DfHnxM8NOP8A6Ang342cVZBm2UVMy8SuKcVSp57xDHNeE+H83wax8K2R49xeV4LHYfJ8OoYhweFwFBqEZOV/3h+B3w88T/CXwBY+D/GPxL174ra1bXV1cS+LPEkax6hNFcPuitSBLM3k2wBWMyTSOcnJwOP6X4KyDMuE8go5Tm/EmO4pxtKrVqSzXMYqOInGpK8aTXPN8lNaRcqkpXbTeyP8RPpN+LvBXj54sZpx/wCHXgvwp4E8OY3A4HC0OAuDatStlGGr4Sm4VscpSo4aCxGLk1KqqOHo0k4q0L3Zn/E69ja5jjBBwqEjPfO4EDBAIxnn' $Base64String &= 'eCMAYOajievBRpwb+J37Wvv59n2exHgpltd1sVVWnIpdO97Xdm+j+Fxaer0tbgPB2pix1dgPlzGGJOQSBMx6gKW6FdxZz82AASQfDyjFKhiEk7J+S1u7emlv7y3sfp/iFkn9pZTVnUfPKLfKt2rwSVk27bq7tFcsbydmmfTlhrEdxHGGGGKDPXOQOfxyM/TnnpX6FSxMKlknq1t5pa+uunbfU/kXH5FicK6k+V8ik7XVtL6WXp1vv2NpZFboewIz3z/np1roTUtten9XPEqUZ01eSt6/8Bs/hp/4KZf8ndftWf8AY2+IP/TFa1/jR43aePXGa7cXUf8A3TP/AEq/2X3/ACqc+jT/ANo74/8A9+Iq/wDBul/ykA1b/s3z4jf+pJ8P6/rj6Ov/ACcCr/2T+Zf+pGAP+eb9sZ/yiRl//Z3eDf8A1TcWn9Kf/BUz9gy1/a++En/CWeB9OgX49/C7T7298FTxrFDN400FS95qnw7v7htqu16/m3/hSa5bytP8QlrbzrGw17WLofsn0g/CCn4lcN/2llNCC4w4foVauVTSjCWa4NXq4jJK03ZN1XzVsulUfLRxt6fNSo4zE1D/ADm/ZDftFMX9Cfxo/wBTvEDNMTL6Ofi7meAwHHuHqTq16HAnEUlDA5R4nZdhY87hHAQdLLuMaOEiq2Z8MqGK9jmGY8O5JhH/ABGeIdHurW4uo7m1ns9R0+ea01GyuoJLe7gntZGhuILm3lVJYbq1lR4p4ZUSWMo0bhWj2V/l9hqlTDVZ4TEQnSlCpOnKnVjKFSjWhJxnSqQmlKElJOMoSScJpppNs/7o86weEznAYbiDJsRhsfh8ThKGMpYvBVqWJwuY5dXoxrYXHYTE0JTo4mlPDzp1aNelOdOvhZRnTqSjGmpfr38Ef+Cg0vi//gnp8cf2MPi5rDz+JvDvh/wVP8CNfv5Wkm1vwvpPxM8FX+p/Di6nkLSPf+FdOt7rVPCzOXSTwta32jg2kfhzS4b/' $Base64String &= 'APoHEeLEsx8A+N/DnP8AESnjcHgcmlwviqsnKWJwOH4lyatXyicneTq4CjCdfBNtqWAhVw96ccHQjV/yGyj9n5R4O/a1fRd+md4S5RTw/DHEfE3ibh/HXIcDSjRoZJxTnHgl4mZflfiJhaMFGnHA8WZnicLlXE8IRhOHFWKwGb8uLq8R5nWwP4t/tG/8yb/3MP8A7g6/C/C//mef90z/AN6B/qZ9Oz/m1n/d7/8AvoH90P8AwRXOP+CYn7LR9NG+JR/L40fEg1/rN4LO3hhws+1DM3/5msyP/P2/aX6/Tg8dl/1MeCv/AF2vBh+imq6qYJDv4ABYrnqMfKccHOc4ODkjI56fb4nExjUcXa0U9X3u09dkrrrd3ufynkuTTq4WM6avOp1SvbZu9uqTtq97dbHiHjWY6jeROpIPyMSMEAHIxkDggAZ4XHGc5wfj87k8RKEou6i+jdrO+y67Lsk3az2f9C+GtCOTUsRCtFRnUjJu9teVJKXvPZtu1nJ2vtqcr4fhxfyTkgABS3GW2iV+MjoMKCQxBHXnhj5uXxfOqyu0t7Jv7V7q3ldO7ttazTa+x4sr03hfqE5KNWSfInZLWGllLRvmas4pdb3dkfQ/h2WCaNAHUSIoAxgFgOmABgggYPPQE5GQK+8wKozhzxd3ZaaXtby7XtZNWbtbc/lrib69QxDoVYNUeZ2k9nrbdrd2utHpa11dnd2qHqeB1Aznv9Ppj2zivYoRXxapvWzW23fvp367PU/P8fVcpKF00uyS29NL/Lufw6f8FMv+Tuv2rP8AsbfEH/pita/xp8b/APk/fGn/AGV9L/3TP/Sg/Zff8qnPo0/9o74//wB+I5H/AIIB+LNC8Bftp+PvHHii9XTfDXg79lz4v+KPEGoOpdbLRtB1TwPqmp3OxfmkMNnazSLGgLyMoRAWYA/1L4G5rgsi4qzjO8zrLDZdlHB+e5nj8Q05Kjg8C8JisTV5VrJwo0pyUVrJpRWrP8F/2pHA' $Base64String &= 'XFHip4D+HPhjwRls844z8RPpFeFfBHCmVQnGnLMeI+Ko8RZHkuC9rP3KMcTmOOw9Kdao1TowlKrUahCTX7o+Af2q/wDgqd+2xY+JPjJ+yT4C+Cfww/Z/0zxBr2ieBJPijq23xV8TT4Z1G60vVxpjt4e8VWd55GqWlxpM+rvJ4L8PjVLe+0yxv9QOl3eqSfoGWcV/SD8TsBV4t4LfC/B/DlWpWlkWVZtgVj8zzTC0pNQeMxtedWisTUkpU60KFHL8Lh6l8PHFValGtVX8jcdeAn7H76D3F+B+j19Jun46/SM8ZsFg8tpeKfiB4f8AFVbhTgfgbPcfSU8TS4b4aynDYLMamR4OlOlisvxOZ5lxdnub4NwzeeQ4DB5ll2Al+O37UXw0+Jv7QHhf4l/tb3/wG174SfEH4eeN4PBf7U/hiz8KeIdF8F3/AIkv5LqzsPi94Jk1eB7eaK/1jT9Q8M/FbSNM1PWU0DxZBpPiea+mh8aXv9lfzL4lcI8TcSZVmXiVjuEq3DudZfmUsu4+y/DYOvh8trYyVarh6PE+WxqSrRVLF4ihVwmd0aWJxMaWMWFzWNarRzapKh/uJ9Cb6Q/gh4L8ecE/Ql4X+kFlvjH4Z8X8Fw4x+iVxfnPEeVZtxnl3DlPLsDnWY+BnGuIweHyyrWx+QZNmmBz7wzzPHZJktfMOHpZ9wJXy7BZlwDg6Wa/lbKj6RqFpqNuuY4rmKdUBKgPG4doSR0jlUMox/CWQjAGfw+nKOOwtfCVX786U6fM1e8ZR5Yz13lBtN9bpSvdu3+pmKo1eF88y7PsDC9DDY/D4uNOLcIwq0aqq1MLJx2oYinGcFbT2cqlJxtFOeB+0TLHNF4JmiYPFLHr8sbjo8ci6E6MPZlII9jXd4ZQlTnn0JpxnCWXQlF7qUXmCkn5ppo+O+nHiKOLw/hLisPUjVw+Jo8Z4ihVj8NSjWhwdUpVI/wB2cJRkvJn90v8AwRW/5RifstZ6f2N8Ss/+Ho+J' $Base64String &= 'Ff6weC8v+NY8Lq3/AC5zLX1znMj/AM/39pd/ynD46/8AYy4K/wDXa8GH6AeIkWV3VTg4QYzjI9j1GDngEY9TkgfZ4+KqTcVHW+99L6aPX1u3s7JH81cLzqYajTrzlzQjqo2bW+i3slpHo1srI8k1ZFjuNp4A8sLk8qBknoeBwOA3I3EKMV8xjYxpwUFu2t97v1TT2W726uyP2vh2pPF1Z4ifwRpzejdnZ6NpOLbu5NXimm1d3uzi9H1GIXEsRKq+0omQMsBLj5cgt0bd91Mk+pJrycHiFFKnFqN/dd/W3XX52un9593xFlE6zeLmpSlC01ZysrQb1VlFpNKLvKS0Vre6j0zQtRkt5opN7bQ/zBi4YDOc85XjggA4wBivoMFiHQrRfM3Tk0+rW7fVq/VN30tbsfknEeV0s1wFWHs0sRSi9UldtKyb5babyberu79T37TbqO7to5EI3FQHHOQecZz3I59e56191QqQqQUo21X3rpby9Om5/NOPwtXC4mrSqppxk0m+qXyVl8rep/Br/wAFZvHuneF/2v8A9pvSUcXGu6x421a1tbWNlLWkF1pVnbtqN1uV1SOLcxt4nUtdTJsVfKSeWL/IvxS4cxWb+O/H2NlF0svwPFLq1a0k7V6lGlhaqwtGzi5SlZKrNNKjTlzN88qcJ/8Aob/QV8Z8j8PP2U30TeGqNWOO4w4o8B45fgMuozpuWV4PMcbnuCnnmY80KsaVGh7SpLA4epTlPMcVT9lGCw1LF4ih47/wSf8AB/iHx98Uv2mfCPhS2uL/AMR6z+xP8dY9I02zR5LzVby11DwLfppFnEgLS3eri1bTbaED97PdRxkgMSP0rhXJ8fn+XeIOT5XCpWzDG+HHE1PCUKScquJrQ+pVo4SlFayqYpU3h6cftTqqLsmfxF47+I3CXhJxp9EDxF47xWFy/g/hj6Z3ghiuIM1x0oU8DkuXYr/WbLaufY2rP3aODyKWNhnGKr6ujh8FUqxUpQSf' $Base64String &= '9WX/AAR4+Pfwcj/4J+/CjwdqPxA8GeGvEvwWsfGHhr4jaLr3iHSdDvNAntvGvibWLfXr6HU7q0caNrukahaa1b61tNhNLcXtq1yb3T7+GD+rvBHj7hHG+GeUc+e5Rl1bJMNiaWb4XHY/CYKrl6jisTiI18RCvVpezw9ShUjV+sO1Hn9rSc/a0asIf4B/tP8A6I30iOHfpueIrwvhX4h8Y5d4nZ3keN8Ps94W4S4h4lwPF86uRZPlFXK8nxOU4HHLF5tgc2weIy+WUxlLMXQWAxscO8FmWAr4j6f/AGYP2yfg1+3pb/tAeDfCngnxJf8Ag/4b67N8OvFep+KtJsLjwF4/0nxRBrcNtb6Ncm5eXUW1Hw3Zx6j4k0C+0u3k0Oy8QaRaXk1xNelU+k4A8Rsh8Xcu4jjg8jzBZHhcXi8oeKzSlhJ5XxDl9epi8NGthIKvLEyo4vC0XWr4XG4PDypUMVQXNWjVUj8T+lz9DHxX/Z2cY+C+I4j8U+EZeKmd5DkHiFDI+BcfxBheOvB7jDK8Jw9ntbLc+xVTK6GSwzDh7Pcyjl2VZ7w1xFm1LHZnkWay9jl1XATon8mn/BTz9izUP2HfipqyWdve3/wS8brqOu/CrX7gyTtHbpKj3vgbVLtzl/EHhWe5tYBMztJqujT6VrIK3NzfWdj/AJ9+L/hBmHhxxtSwWAhWqcN55WqYrh7HS5p+yoRkpYrLMVUad8VlqmoOcm/rWFnh8Q2p1a1Kl/1/fs6P2jHCf0z/AKMGYcTcXYjLsD41+F2W4LI/GHhWh7HDfX80q0Z08h44yLBRlDkyLjWphamIhQowiskz3DZvk8YzwuCy/G4/8afGPjibxdp3hmymtBbtoFpewvL5pk+0S3k0IxGCB5cENtZ2qRK26QOZVZ3VUc/P5JkFPJsVm2IhWdRZlWoVIw5FH2cKMKjbk7vmqVK1etKbVouKg0k3JL9Y8UfF3FeJmR+H+UYrLY4KpwXlubYWtiViHW+u' $Base64String &= '4jNMVhElRi4x9jg8Jl+V5bSw9OfPWjUliYVKlWEKVSf9/f8AwRekMX/BL/8AZccDkaL8S8fX/hdHxHA7Hue4Ir/Srwa93ww4Wlv+4zPRK70zrMf60tof8Tn7Sen7X6cvjnC9ubMuCtf+8a8GeaPuTX9V8qWYuRwSANwyCOcAcAY5GPlUfN3wa+nxeLcak5WSSTu30V/Tb1WmvTRfhPD+Rp4WhTU+aVRRslru1ZaJt3fKtV12tdx8a1PWnuL+SNSfmWNw3J28YIIXLZ4QjPPIHQ18lisZ7SrLq4tarT+nZfftofvuRcPRwuCpPbmjOL7u2qaUml1adrpct7KzRzMenXclzD5cMiyq4BOM4IOCB3PfjPqc45PlYehiFUtyS9177K1+l9+79NUtj7XNswyuWEjVdek/aU7tc6bkrJ69LbJWu7vRbt9ikOrWzBvLkZRzldwwVJw20bQMZGflIycMSa9q2KhG3JNxe2j9VtbXa9r99Nn+duWRYqo08TShUs4yTmveT1t7yk2tHbWN1a1lt3+g+Lb7T4QJUOFH3SGJ4HAbnHGxlyVwR1GRmvcwOb1aFPlqJuyuk77a6dtEkk0uqb3ufmXFHAGDzTEc+EnTj7SfxXXo2r3dnKabSlpa0dN/GPGHw5/Z88aeIb3xL41/Z5+CHjLxDqLiTUPEHin4S+APEGt375I8y91TVtAu9QunJLMHnuGIyScEkHwsRDhati8TicRwrkFfE4us6+LxVbJcuqYjE15RhCVfE1qmGlUrVpQhCMqlWcpuMYpyagkv1TJ8f475fkOT5LlXjx4uZXkuQZdTyrIMky7xJ4zweUZHlVKrXxVLK8oy/DZ5TweWZdSr4nE1qeDwWHpYeFbEV6kKftK05PqPh74N+Avw21c+Jfhx8Cvg98PPEslhcac+v+Bvhj4L8Ja0dOu2imuNPOqaBpFhfNZXMttbPc2rTG3me3gd0ZkjZPTy2rw3l1R4rLchynL8TyOk8RgcswWE' $Base64String &= 'rOnOScqftcPRp1OSUow5oSlaTUXb3Vb4fjPC+M3GODjkXGXiv4gcYZLHFU8bDKuKONuJs/yxYvDxqU6OMWAzbMsVhliaNOtWjRxEKSq041a0YzUZyU/mD4qf8Ey/2Efjl4z1P4k+Jvhv4g8K+J9evZNU8TS/DP4geL/h7pPibUZ5fMur7VdB8P6tb6LDe3sshkvr3SbHTbvULiaa81C4nvZGnPxeceDnhBxVjqudZpwrgljsRUnWxMqEp0KVerOTlUq1MMpSoU6lSTc6tTD06M6s5zq1ZTqycj+ovDj9pL+0Q8COE8D4acDePHE0+GsnwmHy7JaWaU6OaZhlOAw9FYfB4HD5zUhSzbF4PBYelHD4LCZtjMyw+BwuHoYPA0qGDowoR+z/AIMeC/gf+zf8PtL+FnwS8CaP8P8AwNo0lzdW2i6Q1xM91qF2U+3avrOq6hcXus+INbvjHD9u1zXNR1HVrxYoFuL2WOGEJ+j5NS4b4Zy6jlGR4LD5dl+GuqeHw6ajzPlUqlSpOU6tarJKMZVa06lWUYxi5NRjb+KPErMPGfxv4yzPxB8UuJM54y4wzlw+vZznEoOp7OEqlSlhcHhsPSoYHLcBRnUr1KOAy7C4XBUalWtOFCNStUlPY8cx/Cn4p6VD4f8Aid8PvA/xE0G1vo9TttE8d+F9D8X6PBqcMM9vDqEGm+ILDULOK/it7q5hiuo4VuEiuZ4kkCTSK22OxWQZtTp4fNMBgcyo0qvtqdHMMJh8bRpVlCpTVWFPE06kKdTknUh7SKUuSpOKfLNp8nCuTeK3h9isVmvAvFvFfBWZY/BSy3G4/hPiDNuG8bjMuliMNjJYDFYvJsXg6+IwUsXhMJinha1WdCWIwuHxDp+0o0px8en+Av7GUR+X9lD9m5xzz/wpH4ZDoAc/8itjoVPXv3GSPHngeA4X/wCMW4adv+pHlnl2wr7pX2u97Wb/AETDcZfSqxMeaPjl4zpefifxtq9bpf8AC6nf' $Base64String &= 'SS26PrZP2Hw3rngrwZ4ZsvCHgHwj4c8F+FtJS4j0nwz4V0bTvD2gaVHdXlxfXSaboukW1lptkLi+urq8uFt7aNZru4nuJA800jt6mHzjKsHhY4PL8NhsHhaKmqGFwlClh8NSU5SqSVKjRjTpw55zlOSjFJznKUtXJnwGc8A8ecR55iOIuMM7zjiLO8wqUamYZ3n+Z43N83x0sPQpYShLGZnmFXFY3FSo4WjQw9KVatOVLD0KVKDjSp04nE6zqMuoSEkBdzZC8gtnjBIGDzvxndyMkgZrwcVipYpzS93XRJWu7pXduvXdvTQ/VMjyTD5LSoKpF1nCKfM/etaN7pate6orZXb22vxbabcteNJgpztX5clhxwQd2ACACQVYEkZIHzePOhOMk3f3tXe13dvrbutHZa3Wiun+iYXNcNXpPklHlpxatflUWo67OLs1d2u7qzV7O3//2Q==' Local $bString = _WinAPI_Base64Decode($Base64String) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\NSC_fs_red.jpg", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_NSC_fs_red Func _CP_About($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Base64String $Base64String &= 'ObUAe1xydGYxXGEAbnNpXGRlZmYIM1xhADBsYW5nADEwMjUNCntcgGZvbnR0YmwAIAAwXGZyb21hbgBcZnBycTJcZgBjaGFyc2V0MAAgVGltZXMgTpBldyBSAT47fQBYAjETWDIgU3ltYgxvbAJGACxzd2lzQnMOUEFyaWEDIjMBFXNMaWJlcmF0AGlvbiBTZXJpAGZ7XCpcZmFsKnQNjH0CRjQVRkNvQG5zb2xhc4ISNR8hNgCVhjWCU4MwNlxmKG5pbDxTNxMiTWkAY3Jvc29mdCCgWWFIZWkCFTgTFQowAg45FEZ1Y2lkImECYTt9fQHuY28IbG9yQHc7XHJlAGQwXGdyZWVugDBcYmx1ZTCPBPgyNTUJBYADmQUDEEEDP5AQjAXMCpQQFByDEDEy/jgJBYADmQVDFkEDkBCMBcfMCpQQDRwxOTIEBgACKQIGOTICBjXFBTAxOcMFNjSDOcADAgYzMw3CBTOAcoFoc3R5bEBlc2hlZXTAAjCAXHNuZXh0MEDtIGxjaFxhgJ1hZiBzMjRcYYPsODFgIFxsdHKABsMDMxIxAgJmZYEGXGhpIcIMM1xsbwACcWwAXHdpZGN0bHCAYXJcaHlwaOAA9jChB+EBY6F9gG9hC0YJIGtlcm5pYAFcZAZihA+HCyBOb3JtA4F2YRYqXGNzMTUHYxXgAMINYiBTdGHAcmsgYmV0IIroBO425ASgCeEEY6BXwQqhPeR1bEAAYzDjDWMNwAIQIEludCARZXR2gGVya25cdTJAKgAnZmNwZnVuZ9XoCjfkCjflCjEAHxsLAEJlc3VjaHRl6z8MIgw4JAw4xTHEC2kwD6ENBgw/HAQRQ29sbABlZ2FtZW50bwOGEeRBMTlcc2JhsHNlZG8AVAIQMudBejniQTj/QehBxBLzQXNIYjI0oABhMYAMa/BlZXBuKkQgpqENNkTjYC8nRFRpdMCNpBjACYe3GL9atlpzbDI3IErAbG11bHQxdhoiGgfg' $Base64String &= 'Gr9dtF1Db3JwbwAgZGVsIHRlc7p0hhoxhhrhG6IaMWwzH78avxq/Gr8asRpFbGXUbmPGDDIeGjK/DLUM+Fxhae8M7wyvJgkMQSa3oyYvDGcFaU8MSQxEMG5Ac2NhbGlhhQwz/Y4MM48MTxlfDF8MXwyfCwfPF38LcAdJbmRpY2plNQs0lAo0nwonF2I3ywqhHyNEMABL3j1ub9vvCvE9MP89+T0zUwriBW5iLgzDPyMHIJBSYAQnRGRjQI9zY2jwjnT8IDIVDfRgcAAfDR8NHw3/Hw0fDWQkH0sfSx8NHw0fDd0RDTMVDRA5fCU2L0x/Jf9/JY9Ybw2PWG8NnyafJpEI708NJQ1AcywNNy8NLw0vDf//S/9L/0v/Sy80jw0XZgALEmvQDTQ24Ho2cnD8ZXJ1DaB6hVl0gSABjw3/jw2PDY8Njw2PDY8Njw2PDSGFDUF1ZnpRGzhcICdlNGhsZohzMv3PgDl/DU9arw3vTc8MT1q/7wzvDO8McJZjJ4cMM/6A/xABjwwPGl8MXwxPWp8LnwsBnwsxIFZlcnplSQAGbmkg1A0KwNYqkFxnZW4x3m9y0d4gcmVPZmZwXC83BC4xEAAyJFdpbgBkb3dzX1g4NghfNjQpAl9wcm8AamVjdC9mZTAAYjA4ZjRhZjEAYmFjYWZlNGMAN2VjYzg3Y2WANTViYjQyNkDCCDY3NtAGaW5mbwlg23JlMOVtXHlyBDIwAIZtbzRcZBR5MaAPctEAaW4zojWgAnJldjoCNTACSjchAjAhAjUzIAJwAHJ1tABpbnRpbVx5cgAwXG1vMFxkeQgwXGgBWGluMH0AfXtcKlx1c2UAcnByb3BzfVwAZGVmdGFiNzACOREkDQpcaHlwAGhhdXRvMVx2AGlld3NjYWxlIDEyMA0KAYxwZ8Bkc2N0YmwBGgIWRjADDAC8NDUxAAt3AHN4bjExOTA2BQALaAELNjgzOFwgbWFyZ2wCGTM01QIMcgkMdAkMYgUM' $Base64String &= 'AlcAbnh0MCBTdGkAbGUgZGkgcGEAZ2luYSBwcmUBAK9pbml0bzt9An0AsWZvcm1zaABhZGVccGFwZexyaAM6ggV3A0YCQIc+Bwc9hzuCBHNlY3RkgFxzYmtub26AJgBnbmRlY1xzZgB0bm5hclxzYRkBBHJsgAgAE3VubGBvY2tlZMt6gDBiAmqBAnN0YXJ0MQGBBHJzdGNvbnQDAQWBQmFlbmRkb/xjXAFGBQ2BBQQMxSjDa0HBBWVwXGNoAwJ9AYU0cGFyZFxwbABhaW4gXHMwXKBydGxjaIAONsAAAHMyNFxhbGFuAGcxMDgxIFxsTHRygAbDAzMxAgJmImWBBlxoacIMM1wBwEFoXHFsXHdpcGRjdGyAFoKQwAEww0EPwQNjZjBcAArCFkGGEmtlcm5pwAJcXGRiBB8IF8MUY0YmczwxNMYigQYBBEICDQq7AIDAGCD/NP804jR7BzUgMjVcYWLKNWNmRDE3wRQ1XGKEN0MAb21wdXRlciDoUGx1wJtyAbz/O/8dp/8d/x1sODIwbDgyoAt/fzh/Gn8afxp/GnQ4YG5ioQsbY3MxNSMBYmELCDFcYuUcQSByZQBzdG9yYXRpb0BuIGFuZCBgl2v4IG9mvzo/ID8gPyA/IAc/IDEgbFlTdGF0c8QgVQC7aXR5fx9/H89/H38ffx9vHzE4fB8ABBGmP29yaQHYbGx5ACBjcmVhdGVkACBieSByb2d14GU1MDk5/yD/IH8Q338QfxB/EH8QfxBjzztvC/9vC28LbwtvC28LbwtvC28LP60rxQiEB0NlMyvEAA0Kak2ghSChGiCwlLYDMz4wyFvtA8AB0B8FBE5T/EMgAQAfHq8SrxKvEq8S/68SrxKvEq8Sv1ufEp8Shg7//w3/Df8N/w3/Df8N/w3/Df//Da8gnzyfPJ08cA2pILIDz68DqQP0X3C1SVSuA28HB28H4QOgr29ncmFtEXC9ZyAg4Qx1YWf+ZV8lXxdfF18XXxdf' $Base64String &= 'F18X/18XXxdfJV+dX50/DT8NPw1/Pw0/DT8NPw0/DT8NmSR7QFxmaWVsZFK3bARkafC4IEhZUEUAUkxJTksgImgAdHRwczovL3cId3cuwdVpdHNjAHJpcHQuY29tgC9zaXRlLyIRJcGQA3JzbHQg3HXhBvgyNTU5DuAAVAiSALOj5jnEdvQBdWwgACDaYgvjywKnKH19fV8+F5qle/wgLdFPTw5PDk8OQg6Ajvx1bV8OjwfPDc8Nzw3LDQBFbmdsaXNoIPFCDnQgRrEHgA6fMl8l/18lXyVfJV8lXyVfJV8lnzIDnzKfMnBhkrMAciBccGFyZFwAcGxhaW4gXHMAMFxydGxjaFwIYWY2ABhzMjRcAGFsYW5nMTA4wDEgXGx0cgBoAzwkMzECIGZlATRcaEJpAmYzXGxvABBxAGxcd2lkY3RsQQC0XGh5cGgADjDDAXoBHmNmMFwAUAK2QQaUa2VybmkAC1xcZGIEfAhcA1NjAgcNWAoNCgGxp7Z7Bk1zHjIHRoENAQgEakNvbQBwdXRlciBQbAR1Y4AqICBjYW4AIHJldHJpZXYAZSBhIGxvdCAAb2YgIGluZm8AIGFib3V0IHnEb3WAF0Mgff+If0QlTkRiQDhpdIJBYWyCc8A8Y3QgYXNAQkByZW1vdGUAQnYAZW50b3J5IHR4b29s/0D/QP9AzUB0gG8gY29sbGWAPtBkYXRhAYB9Ig6ChgBtYWNoaW5lcx//Rn8jfyN/I2cje1xmAGllbGR7XCpcAGZsZGluc3QgAEhZUEVSTElOAEsgImh0dHBzADovL25zY3dhAHkuYmxvZ3NwAG90LmNvbS8ygDAyMS8wNC9gAQniaS1w42kuaHRtDGwioScACnJzbHQGIOooYx8yNTVcYT5pqR8hAuMTIgHBE2NmJjkkLeQDdWxAAGMwAwMaiwUNCk1vcmUBYlhiZSBmb3VuEGQgaGUgAihsafBuayl9AAB/M38zfzNPfzN/M4SwpiYx' $Base64String &= 'NKxPMf9ACT+0fxp/Gn8afxp/Gn8aX38afxp/Gn8a+YtiKhpjIGYxN1xihVNhbuGgp2hhbmtwVTFW8EYRlmZmb2xgAWZybwJtIAJlIEF1dG8ASVQgRm9ydW3/TyvPEM8QzxDPEM8QzxDPENfPEA8eBR44DR44Dx4/Df8/DT8NPw0/DT8NPw0/DT8NtQxkMmAeMH8ekgFioAYBAg5Sb2d1ZTUw/Dk57xuvDq8Orw6vDq8Of68Orw6vDq8Orw6vDqcOUAByb2Zlc3NvcvRfQuAFZA8PDw8PDw8P/w8PDw8PDw8PDw8PDw8PDw/BBw9hcmd1beCQvzn/vw6/Dr8Ovw6/Dr8Ovw6/Dg+/Dr8Ovw65DkpTVGjIZVBhkLFvdN8O3w7/3w7fDt8O3w7fDt8O3w7fDgffDt8O1w53dXV5afgxMjOfDp8Onw6fDp8O/58Onw6fDp8Onw6fDp8Olw7gTWVsYmGPDo8Ojw7/jw6PDo8Ojw6PDo8Ojw6PDuOPDokOVUVaTw5PDk8OH08OTw5PDk8OSQ7OsAAzMVxrZXJuaQBuZzFcZGJjaABcYWY2XGxhbgBnZmUxMDgxXCRsbwBMcWMCHA0KgA0KXHBhciABEABkXHBsYWluIIBcczBccnRsBHKAYWZzMjRcYQGAwQF8IFxsdHIANAMeUwDWCLJoaQJmMwRibIBcd2lkY3RsAFqgXGh5cGgABzABPeEBD2NmMFwAKAJbBkoFIbZ7BppzMjJcYYZiBo8BHmNmMTgBUwgyXGIEb2FuZCAAbWFueSBvdGgAZXJzIDstKX0Pf3kref/Uvy0gfQ==' $Base64String = _WinAPI_Base64Decode($Base64String) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Base64String) & ']') DllStructSetData($tSource, 1, $Base64String) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 12951) If @error Then Return SetError(3, 0, 0) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\CP_About.rtf", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_CP_About Func _ComputerPlucker_dataini_task_xml($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Base64String $Base64String &= '7rMA//48AD8AeAAAbQBsACAAdgAAZQByAHMAaQAAbwBuAD0AIgCgMQAuADAAHCAAZChuAGMAXGQAdG4AAmcCdFUAVABGAAotAEo2ABo/AD4AoA0ACgA8ACphAIraaxaiMgKiA+puAB0BFwhoAHQAAXAAOgCqLwABcwBraAA7bQJJqi4AB2kAEXIARXMAA6pmACkuAo1tACt3ApGqZAANdwAdLwBdMAABqjQACTAACy8CO3QAB2p0BJUiBKcgAAEBq3K9gA9ngACDVIcNgw9DgBrqbIJ+ZIAEcowXixaDGKpTgjRygAJCgEl1hhzWeYAWgU0ygIEtglCBAiIygCgxADeAezEAdjWAAoELPIBWmSKPOUVRgA9hAGKCVGSAEHS9gBR1gAWBJI0Njx5SwAfRQ1BtAERACWzAA8EZelDCJkhCEdUI0T/DbmSrQCDBHELACVfAAWXAXovPC8MMREITcwBPwHZb2wrDC03Ck0FEecADLxXWFS9oFjzGB3MASdVAF3RCeHbCfz7AQUET/1kIT0JBceVCQQvlmsEK163uPMBtwQbB62lA1MEUz7VVzwggIAFkYnFBoBV0XeAWb2AEqWWnB0xgA2dVYjBUIBpwYBA+KCJhraAKdKAJoX9UoARrYhrvoRbxBvFR4V1MoAMhCGEr62EBoXd05BZ2YAAhJaEff6NTLQZtK+8d6yl7JqFaZbcilKOf7ylNIjzhA3AiE1ehIeEVoWZj4AFzIAxvVyAD4ZjhZkmgCG4iLGX0AE5gAHeiEL8IqwhrEGpE4AJzYhdsoqFniEl1oF9PYAhC4AGhGKE0af3iCT4gA6MdIyl/CHEI6xDtYQZvIBghBkcgAWMmdQdXaZU/B7cOQWYWSCIWZP9gTKEF4b8hoGEHqw0/Bu1T9am7VyJ7bqAIIYDhUaWs328aPwarDONZ4R5s4DyhIe1hRHQgFSFGa34O/wc9EP5J0BBxAX8v/zpVG/EGdQPfUWedaH8CdwJfBVJS' $Base64String &= 'HrUT/zkDPSufApcCfUB/DX8N2yT/9xuRBbFvUYnfDR8DHwNdBq9/e397f3uRA0jSWmTyJP/9ELsBnyWbIV8VPySdAjsF/ldwAzFesV5TA70EHwKfEFp48AFjkmfTolRwAG3dMAFMcgAxnBOJNzCTM4l/PwM/A39v8UNRMNEBMVQ33/hfeQHZYd8i1wFB1G7xB9pzEAFDkgCxQ3hQAP90v58PUww/MNGn8ZbXI0MQom5c0ADxBNFRdNAAMwJwazIB0UtQcBd18ATxFnJ7/wH8AS5yClMa3Qb/CEH9EANn0AMxFjEOkRCxivEu/bERaZQwXwJ9OF8PkwO5FAf1xNGOs7s+AA==' $Base64String = _WinAPI_Base64Decode($Base64String) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Base64String) & ']') DllStructSetData($tSource, 1, $Base64String) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 3250) If @error Then Return SetError(3, 0, 0) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\ComputerPlucker_dataini_task.xml", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_ComputerPlucker_dataini_task_xml Func _ComputerPlucker_datainiupload_task_xml($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Base64String $Base64String &= '9rMA//48AD8AeAAAbQBsACAAdgAAZQByAHMAaQAAbwBuAD0AIgCgMQAuADAAHCAAZChuAGMAXGQAdG4AAmcCdFUAVABGAAotAEo2ABo/AD4AoA0ACgA8ACphAIraaxaiMgKiA+puAB0BFwhoAHQAAXAAOgCqLwABcwBraAA7bQJJqi4AB2kAEXIARXMAA6pmACkuAo1tACt3ApGqZAANdwAdLwBdMAABqjQACTAACy8CO3QAB2p0BJUiBKcgAAEBq3K9gA9ngACDVIcNgw9DgBrqbIJ+ZIAEcowXixaDGKpTgjRygAJCgEl1hhzWeYAWgU0ygIEtglCBAqIygCgxADeAezOABro6ggs8gFaZIo85RYAPqGEAYoJUZIAQdIAU3nWABYEkjQ2PHlLAB0NQaG0AREAJbMADwRlQvcImSEIR1QjRP8NuZEAg1cEcQsAJV8ABZcBezwvFwwxEQhNzAE/AdtsKrcMLTcKTQUR5wAMv1hWKL2gWPMYHcwBJQBfqdEJ4dsJ/PsBBQRNZCH9PQkFx5UJBC+WawQrXrTz3wG3BBsHraUDUwRTPtc8IqiAgAWRicUGgFXTgFq5vYASpZacHTGADZ2IwqlQgGnBgED4oImGgCtZ0oAmhf1SgBGtiGqEW9/EG8VHhXUygAyEIYSthAfWhd3TkFnZgACEloR+jU78tBm0r7x3rKXsmoVplIpTbo5/vKU0iPOEDcCIToSGr4RWhZmPgAXMgDG8gAyvhmOFmSaAIbiIsZQB6TmAAd6IQvwirCGsQRLXgAnNiF2yioWeISaBfuk9gCELgAaEYoTRp4gn+PiADox0jKX8IcQjrEGEG9m8gGCEGRyABYyZ1B2mVqz8Htw5BZhZIIhZkYEz/oQXhvyGgYQerDT8G7VOpu/pXIntuoAghgOFRpaxvGu8/BqsM41nhHmzgPKEhYUR2dCAVIUZrfg7/Bz0QSf/QEHEBfy//OlUb8QZ1A1Fn751ofwJ3Al8FUlIe' $Base64String &= 'tRM5A/89K58ClwJ9QH8Nfw3bJPcb/5EFsW9Rid8NHwMfA10Gf3vXf3t/e5EDSNJaZPIk/RB/uwGfJZshXxU/JJ0COwVXf3ADMV6xXlMDvQQfAp8QeK3wAWOSZ9OiVHAAbTAB7kxyADGcE4k3MJMziT8Dvz8Df2/xQ1Ew0QExVDf4X295Adlh3yLXAUHUbvEHc+0QAUOSALFDeFAA/3SfD19TDD8w0afxltcjQxCiXLfQAPEE0VF00AAzAnAyAbXRS1BwF3XwBPEWcv8BvfwBLnIKUxrdBv8IQRAD/mfQAzEWMQ6RELGK8S6xEdZpsAGRa2/wAGRUMR8Dfz05HxCTA3kVtcWRj3O8PgAA' $Base64String = _WinAPI_Base64Decode($Base64String) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Base64String) & ']') DllStructSetData($tSource, 1, $Base64String) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 3262) If @error Then Return SetError(3, 0, 0) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\ComputerPlucker_datainiupload_task.xml", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_ComputerPlucker_datainiupload_task_xml Func _sqlini($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Base64String $Base64String &= 'U7AAbXlzcWxob3MEdD0AcDExLmZyBGVlBphpbmcubhBldA0KAkRwb3JAdD0zMzA2BDxkAmIDzDQwMzcwMSEEKHVzZXIQLHBzAHc9UXRMN1Q5AFU1R1Y=' ; TEST DB STRING $Base64String = _WinAPI_Base64Decode($Base64String) If @error Then Return SetError(1, 0, 0) Local $tSource = DllStructCreate('byte[' & BinaryLen($Base64String) & ']') DllStructSetData($tSource, 1, $Base64String) Local $tDecompress _WinAPI_LZNTDecompress($tSource, $tDecompress, 117) If @error Then Return SetError(3, 0, 0) $tSource = 0 Local Const $bString = Binary(DllStructGetData($tDecompress, 1)) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\CP_test.ini", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_sqlini #EndRegion -base64files #Region AboutDialog Func About_Dialog() ; Constants for captions and texts Global $sGuiTitle = "About " & $appname Global $sPathRTF = _PathFull(".\CP_About.rtf", @ScriptDir) ; Relative paths must NOT start with "\"! Global $sVersionNum = $Ver ; Three of the dimensions of the additional controls. Only "Top" is set individually for each control. Global $iCtrls_Left = 455 Global $iCtrls_Width = 180 Global $iCtrls_Height = 20 ; BackColor for GUI and controls. Global $iBackColor = 0xC0C0C0 ; medium light gray 0xC0C0C0 ; Visited Color for LinkLabels. Global $iLinkVisitedColor = 0xAC00A9 ; RichEdit with or without borders. Global $bRichEditFrameless = True ; ------------------------------------------------------------------------------ ; ============================================================================== ; Wenn die RTF-Datei nicht existiert, eine Meldung zeigen und abbrechen. ; If the RTF file does not exist, show a message and abort. If Not FileExists($sPathRTF) Then MsgBox($MB_SYSTEMMODAL + $MB_ICONINFORMATION, $sGuiTitle, "About File does not exist: " & @CRLF & @CRLF & $sPathRTF) Exit EndIf ; Global variables. Global $g_hParent ; Used e.g. in OnAutoItExit(). Global $g_hGui Global $g_hRichEdit Global $g_hUser32DLL = DllOpen("user32.dll") Global $aLinkLabels[0][2] ; Caret verstecken, wenn das RichEdit mit dem Scrollbalken gescrollt wird. ; Hide caret when the RichEdit is scrolled with the scrollbar. GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") ; Klickbare Links im RichEdit ermöglichen. Wichtig: Die Links müssen beim Erstellen der RTF-Datei als Links eingerichtet werden! ; Enable clickable links in RichEdit. Important: The links must be set up as links when creating the RTF file! GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") OnAutoItExitRegister('OnAutoItExit') About_Main_Func() ; Clean up. DllClose($g_hUser32DLL) OnAutoItExit() EndFunc ;==>About_Dialog ; ============================================================================== ; Main_Func ; ; Main function. ;-) ; ------------------------------------------------------------------------------ Func About_Main_Func() Local $iMsg, $idx Local $bHotkeyForTabIsSet = False $g_hParent = WinGetHandle($appname) ; Get parent window. ; Code nur ausführen, wenn das Handle zu einem PSPad-Fenster gehört. ; Execute code only if the handle belongs to a PSPad window. ; If _WinAPI_IsClassName($g_hParent, "TfPSPad") Then ; <= Uncomment if needed and insert the desired window class. ; Parent-Fenster disablen. (Wird in "OnAutoItExit()" wieder enabled!) ; Achtung: Parent-Fenster bleibt unbenutzbar, wenn nicht wieder enabled wird! ; ; Disable parent window. (Will be enabled again in "OnAutoItExit()"!) ; => Attention: Parent window remains unusable, if not enabled again! <= WinSetState($g_hParent, "", @SW_DISABLE) ; Disable parent window. ; GUISetState(@SW_DISABLE, $g_hParent) ; Disable parent window for own AutoIt GUIs. ; GUI - Die GUI ist modal zum Parent-Fenster, hat kein TrayIcon und keinen ; Taskbar-Eintrag. (Wenn hParent verwendet wird, ist die GUI NICHT topmost!) ; ; GUI - The GUI is modal to the parent window, has no tray icon and no ; taskbar entry. (If hParent is used, the GUI is NOT topmost!) $g_hGui = GUICreate($sGuiTitle, 640, 360, -1, -1, BitOR($WS_CAPTION, $WS_POPUPWINDOW), -1, $g_hParent) GUISetBkColor($iBackColor, $g_hGui) ; $g_hRichEdit = _GUICtrlRichEdit_Create($g_hGui, "", 10, 10, 440, 340, _ ; BitOR($ES_MULTILINE, $WS_HSCROLL, $WS_VSCROLL, $ES_AUTOVSCROLL, $ES_READONLY), $WS_EX_TRANSPARENT) If $bRichEditFrameless = False Then ; Create the RichEdit with borders. $g_hRichEdit = _GUICtrlRichEdit_Create($g_hGui, "", 10, 10, 440, 340, BitOR($ES_MULTILINE, $WS_HSCROLL, $WS_VSCROLL, $ES_READONLY)) Else ; Create the RichEdit without borders. $g_hRichEdit = _GUICtrlRichEdit_Create($g_hGui, "", 10, 10, 440, 340, BitOR($ES_MULTILINE, $WS_HSCROLL, $WS_VSCROLL, $ES_READONLY), 0) EndIf ; Den Wert für die Hintergrundfarbe für das RichEdit von RGB zu BGR konvertieren. ; Convert the background color value for the RichEdit from RGB to BGR. _GUICtrlRichEdit_SetBkColor($g_hRichEdit, _WinAPI_SwitchColor($iBackColor)) ; Set settings that allow RichEdit to recognize links and make them clickable. _GUICtrlRichEdit_AutoDetectURL($g_hRichEdit, True) _GUICtrlRichEdit_SetEventMask($g_hRichEdit, $ENM_LINK) ; Read RTF file and display it in RichEdit. _GUICtrlRichEdit_SetText($g_hRichEdit, FileRead($sPathRTF)) ; Creating the additional controls (labels and buttons). ; ========================================================================== ; -------------------------------------------------------------------------- ; Die zusätzlichen Conrols (labels und buttons) werden alle auf der rechten Seite ; des Dialog angezeigt und haben alle die gleichen Maße für "left", "width und ; "hight" - nur der Wert für "Top" wird für jedes Control individuell eingestellt. ; The additional conrols (labels and buttons) are all displayed on the right side ; of the dialog and all have the same dimensions for "left", "width" and "height" ; - only the value for "top" is set individually for each control. Local $lblVersionNum = GUICtrlCreateLabel($sVersionNum, $iCtrls_Left, 20, $iCtrls_Width, $iCtrls_Height, $SS_CENTER) GUICtrlSetFont($lblVersionNum, 10, $FW_BOLD, $GUI_FONTNORMAL, "Segoe UI") ; GUICtrlSetBkColor($lblVersionNum, 0xFFFF00) ; Show background in color for debugging. Local $btnVersInfo = GUICtrlCreateButton("show versions info", $iCtrls_Left, 40, $iCtrls_Width) ; Label for the headline of LinkLabel-1. ;GUICtrlCreateLabel("Support", $iCtrls_Left, 80, $iCtrls_Width, $iCtrls_Height, $SS_CENTER) ; Syntax: CreateLinkLabel ( $_iTop, $_sCaption, $_sUrlOrMailTo ) ;CreateLinkLabel(100, "support@info.com", "mailto:support@info.com?subject=Something") ;CreateLinkLabel(125, "even much better support", "mailto:example@info.com?subject=Something") GUICtrlCreatePic(@ScriptDir & "\NSC_fs_red.jpg", $iCtrls_Left + 10, 145, $iCtrls_Width - 20, 130) ; NSC added ; CreateLinkLabel(280, "German AutoIt Forum", "https://autoit.de/board-list/") CreateLinkLabel(300, "NSC BLOG", "https://enneesseci.blogspot.com") ; "Ok" button to close the about dialog. Local $btnOK = GUICtrlCreateButton("OK", $iCtrls_Left, 325, $iCtrls_Width) ; -------------------------------------------------------------------------- ; ========================================================================== GUISetState(@SW_SHOW) DllCall($g_hUser32DLL, "int", "HideCaret", "hwnd", $g_hRichEdit) ; <--- this hides caret initially While True $iMsg = GUIGetMsg() ; Insert click events for buttons and labels - but NOT for LinkLabels! ; ======================================================================== ; ------------------------------------------------------------------------ Switch $iMsg Case $GUI_EVENT_CLOSE, $btnOK _GUICtrlRichEdit_Destroy($g_hRichEdit) ; needed unless script crashes GUIDelete($g_hGui) ; is OK too ExitLoop ; So that the script can execute commands, e.g. to clean up. ("DllClose()", ...) Case $btnVersInfo MsgBox($MB_SYSTEMMODAL + $MB_ICONINFORMATION, "Version info", _ $sVersionNum & @CRLF & @CRLF & _ "V.3.7.8 substituted original cpu usage system (based on a csv file written to disk continuously) with a wmi query active only when visible th cpu bars tab - added first Tools menu voice for first time remote data send and scheduling" & @CRLF & _ "V.3.7.7 internal ini data file date was year mon mday now added hour min sec - bugfixes (sfc /scannow) - regain disk space point now to cleanmgr.exe" & @CRLF & _ "V.3.7.6 bugfixes and very small optimizations (autodeploy mostly)" & @CRLF & _ "V.3.7.5 credits About windows by Professor_Bernd - CP_about.rft is stored in base64 string and extracted" & @CRLF & _ "V.3.7.4 ini data file (machine data) is deleted if DB insert is OK (func send2mysql), else it remains (to be uploaded in other way)" & @CRLF & _ "V.3.7.3 adjustements in tools and system menù, also added eventviewer and taskscheduler" & @CRLF & _ "V.3.7.3 adjustements in tools and system menù, also added eventviewer and taskscheduler" & @CRLF & _ "V.3.7.2 added wmic query for PC model (some vendors declare here the market name of the machine)" & @CRLF & _ "V.3.7.1 added crypt of data sent to online DB (optionally sending NOT crypted data via manual command in tools menù)" & @CRLF & _ "V.3.6.0 'ini' (values for mysql db connection) embedded in script and extracted in ram" & @CRLF & _ "V.3.5.0 added log system (GOLLOG) ; added autodeploy adnd uninstall; added embedded icons and xml for tasks, refinements to upload system." & @CRLF & _ "V.3.2.0 can setup tasks in windows task scheduler, can upload to a mysql DB a record of data, manually or via scheduled task." & @CRLF & _ "V.3.1.0 Wi3 menù system by wuuyi123 (NDH) - include needed -" & @CRLF & _ "V.3.0.2 beta march 2021 gui launch with splash management (thanks Argumentum)" & @CRLF & _ "V.3.0.1 beta march 2021 launch with 'dataini' param to only generate .ini data file; small fixes: no more absolute c: and processes list fixed." & @CRLF & _ "V.3.0 beta march 2021 first t0nZ 'restoration', added support for win 10 and relative builds, added optional creation of .ini text file about the machine, moved some data" & @CRLF & _ " retrieve functions BEFORE the gui to have data to write in the file, deleted some menu items, varied/renowed other functions according to my personal taste." & @CRLF & _ "V.2.0.1.9 year 2013 last Rogue5099 version named : Computer stats utility") EndSwitch ; ------------------------------------------------------------------------ ; ======================================================================== ; LinkLabel: detect click events. $idx = -1 For $i = 0 To UBound($aLinkLabels) - 1 If $aLinkLabels[$i][0] = $iMsg Then $idx = $i ExitLoop EndIf Next ; Execute commands for LinkLabel clicks. If $idx > -1 Then ShellExecute($aLinkLabels[$idx][1]) GUICtrlSetColor($iMsg, $iLinkVisitedColor) EndIf ; RichEdit: Hide caret and catch tab key. If IsFocused($g_hGui, $g_hRichEdit) Then ; Hiding the caret of the RichEdit. ; If _IsPressed("01", $g_hUser32DLL) Or _IsPressed("02", $g_hUser32DLL) Then ; <= "02": Does NOT work for the right mouse button! DllCall($g_hUser32DLL, "int", "HideCaret", "hwnd", $g_hRichEdit) ; <--- this hides caret ; EndIf ; Wenn man den Tab-Key drückt, wird der gesamte Text markiert und ans Ende ; gescrollt. Um das zu verhindern, wird der Tab-Key per "HotKeySet()" abgefangen. ; Im Moment ist die Funktion für HotKeySet() eine Dummy-Funktion. 2021-04-08. ; ; If you press the tab key, the whole text will be selected and scrolled ; to the end. To prevent this, the tab key is intercepted by "HotKeySet()". ; At the moment the function "TabPress()" is a dummy function. 2021-04-08. If $bHotkeyForTabIsSet = False Then $bHotkeyForTabIsSet = True HotKeySet("{TAB}", "TabPress") EndIf Else If $bHotkeyForTabIsSet = True Then $bHotkeyForTabIsSet = False HotKeySet("{TAB}") EndIf EndIf ; If IsFocused($g_hGui, $g_hRichEdit) WEnd ; EndIf ; If _WinAPI_IsClassName($g_hParent, "TfPSPad") ; <= Uncomment if needed. EndFunc ;==>About_Main_Func ; ============================================================================== ; ùkLabel ; ; Routine zum Erstellen der LinkLabels. ; ; Routine to create the LinkLabels. ; ------------------------------------------------------------------------------ Func CreateLinkLabel($_iTop, $_sCaption, $_sUrlOrMailTo) ReDim $aLinkLabels[UBound($aLinkLabels) + 1][2] $aLinkLabels[UBound($aLinkLabels) - 1][0] = GUICtrlCreateLabel($_sCaption, $iCtrls_Left, $_iTop, $iCtrls_Width, $iCtrls_Height, $SS_CENTER) $aLinkLabels[UBound($aLinkLabels) - 1][1] = $_sUrlOrMailTo GUICtrlSetFont(-1, -1, -1, $GUI_FONTUNDER) ; underlined GUICtrlSetColor(-1, 0x0000ff) ; blue GUICtrlSetCursor(-1, 0) ; hand cursor EndFunc ;==>CreateLinkLabel ; ============================================================================== ; IsFocused ; ; Routine zum Ermitelln, ob ein bestimmtes Control den Fokus besitzt. ; ; Routine to determine if a certain control has the focus. ; ; Autor: MrCreatoR, 2007-10-01. ; https://www.autoitscript.com/forum/topic/54322-edit-control-tab-key/?do=findComment&comment=411666 ; ------------------------------------------------------------------------------ Func IsFocused($hWnd, $nCID) Return ControlGetHandle($hWnd, '', $nCID) = ControlGetHandle($hWnd, '', ControlGetFocus($hWnd)) EndFunc ;==>IsFocused ; ============================================================================== ; OnAutoItExit ; ; Routine die aufgerufen werden soll, wenn das Script beendet wird. ; Sie wurde mit "OnAutoItExitRegister('OnAutoItExit')" registriert. ; ; Routine that should be called when the script is finished. ; It was registered with "OnAutoItExitRegister('OnAutoItExit')". ; ------------------------------------------------------------------------------ Func OnAutoItExit() WinSetState($g_hParent, "", @SW_ENABLE) ; Important! Otherwise Parent window is unusable! WinActivate($g_hParent) EndFunc ;==>OnAutoItExit ; ============================================================================== ; TabPress ; ; Wenn man den Tab-Key drückt, wird der gesamte Text markiert und ans Ende ; gescrollt. Um das zu verhindern, wird der Tab-Key per "HotKeySet()" abgefangen. ; Im Moment ist die Funktion "TabPress()" eine Dummy-Funktion. 2021-04-08. ; ; If you press the tab key, the whole text will be selected and scrolled to the ; end. To prevent this, the tab key is intercepted by "HotKeySet()". At the ; moment the function "TabPress()" is a dummy function. 2021-04-08. ; ; Autor: MrCreatoR, 2007-10-01. ; https://www.autoitscript.com/forum/topic/54322-edit-control-tab-key/?do=findComment&comment=411666 ; ------------------------------------------------------------------------------ Func TabPress() ; Send("^{TAB}") ;This is the tip from Siao - Thanks! EndFunc ;==>TabPress ; ============================================================================== ; WM_COMMAND ; ; Wenn das RichEdit mit dem Scrollbalken gescrollt wird, wird das Caret sichtbar, solange ; der Scrollbalken festgehalten wird. Diese Funktion versteckt das Caret beim Scrollen ; mit dem Scrollbalken. Trotzdem blitzt das Caret beim Scrollen manchmal ein wenig auf. ; ; When the RichEdit is scrolled with the scrollbar, the caret becomes visible as long as ; the scrollbar is held. This function hides the caret when scrolling with the scrollbar. ; Nevertheless, the caret sometimes flashes a little when scrolling. ; ; Tip from pixelsearch, 2021-04-12. ; https://www.autoitscript.com/forum/topic/205604-about-dialog-with-credits-area/?do=findComment&comment=1479582 ; ------------------------------------------------------------------------------ Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam If $lParam = $g_hRichEdit Then DllCall($g_hUser32DLL, 'int', 'HideCaret', 'hwnd', $g_hRichEdit) Return $GUI_RUNDEFMSG EndFunc ;==>WM_COMMAND ; ============================================================================== ; WM_NOTIFY ; ; Zum Ermöglichen von klickbare Links im RichEdit. ; Wichtig: Die Links müssen beim Erstellen der RTF-Datei als Links eingerichtet werden! ; ; To enable clickable links in RichEdit. ; Important: The links must be set up as links when creating the RTF file! ; ; From a demo by InunoTaishou, 2016-02-26. ; https://www.autoitscript.com/forum/topic/180900-richedit-hyperlinks-friendly/ ; ------------------------------------------------------------------------------ Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam Local $tEnLink = DllStructCreate($tagENLINK, $lParam) Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam) Local $tMsgFilter = DllStructCreate($tagMSGFILTER, $lParam) Switch (DllStructGetData($tNMHDR, "hWndFrom")) Case $g_hRichEdit Switch (DllStructGetData($tNMHDR, "Code")) Case $EN_LINK If DllStructGetData($tMsgFilter, "msg") = $WM_LBUTTONUP Then ShellExecute(_GUICtrlRichEdit_GetTextInRange($g_hRichEdit, DllStructGetData($tEnLink, "cpMin"), DllStructGetData($tEnLink, "cpMax"))) EndIf EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY #EndRegion AboutDialog #Region Funcs 4 Cpu Usage Func ConnectWMI() ; Connect WMI ==> (Establishes a connection to the WMI data on the remote system) Global $hostname = @ComputerName If Ping($hostname, 2000) = 0 Then MsgBox(0, "Error", "Unable to reach specified host") Return 0 EndIf Local $usr = "" Local $pwd = "" Global $objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator") Global $objWMIService = $objSWbemLocator.ConnectServer($hostname, "\root\cimv2", $usr, $pwd, "", "", 128) ;next line for testing purposes on local machine ;~ Global $objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy, (Debug)}!\\" & $hostname & "\root\cimv2") If @error Then MsgBox(0, "Error", "Unable to connect to the Host with the supplied credentials") Return 0 EndIf $hFlag = 1 UpdateGraph() EndFunc ;==>ConnectWMI Func UpdateGraph() ; Update Graph (sets data points, calls create bar to draw the graph) $usage = _Processor_Usage() For $i = 1 To 19 $graph[$i] = $graph[$i + 1] Next $graph[20] = $usage For $i = 1 To 20 CreateBar($bars[$i], $graph[$i]) Next $timer = TimerInit() EndFunc ;==>UpdateGraph Func _Processor_Usage() ; Processor Usage ==> WMI Script to pull CPU usage each cycle Dim $Col_Items = $objWMIService.ExecQuery('SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor', 'WQL') Local $Obj_Item For $Obj_Item In $Col_Items Return $Obj_Item.PercentProcessorTime Next EndFunc ;==>_Processor_Usage Func HSLToRGB($h, $s, $l) If Not $s Then Return BitShift(0xFF * $l, -16) + BitShift(0xFF * $l, -8) + BitShift(0xFF * $l, 0) Local Const $q = $l < 0.5 ? $l * (1 + $s) : $l + $s - $l * $s Local Const $p = 2 * $l - $q Return BitShift(0xFF * HUEtoRGB($p, $q, $h - 0.33333333), -16) + BitShift(0xFF * HUEtoRGB($p, $q, $h), -8) + BitShift(0xFF * HUEtoRGB($p, $q, $h + 0.33333333), 0) EndFunc ;==>HSLToRGB Func HUEtoRGB($p, $q, $T) If ($T < 0) Then $T += 1 If ($T > 1) Then $T -= 1 If ($T < 0.16666666) Then Return $p + ($q - $p) * 6 * $T If ($T < 0.5) Then Return $q If ($T < 0.66666666) Then Return $p + ($q - $p) * (0.66666666 - $T) * 6 Return $p EndFunc ;==>HUEtoRGB ;==== GDI+ Functions ================================================= Func CreateBar($target, $Value) _GDIPlus_GraphicsClear($hGraphic, 0xFF000000) _GDIPlus_GraphicsFillRect($hGraphic, 0, $height - $Value, $width, $Value, $hTexture) Local Const $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) _WinAPI_DeleteObject(GUICtrlSendMsg($target, 0x172, 0, $hBitmap)) _WinAPI_DeleteObject($hBitmap) EndFunc ;==>CreateBar #cs Func _Autoit_Object_Error_Function() ConsoleWrite("! We intercepted a COM Error !" & @CRLF & "=======================" & @CRLF & _ "err.description is: " & @TAB & $o_Autoit_Object_Error_Handler.description & @CRLF & _ "err.windescription:" & @TAB & $o_Autoit_Object_Error_Handler.windescription & @CRLF & _ "err.number is: " & @TAB & Hex($o_Autoit_Object_Error_Handler.number, 8) & @CRLF & _ "err.lastdllerror is: " & @TAB & $o_Autoit_Object_Error_Handler.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $o_Autoit_Object_Error_Handler.scriptline & @CRLF & _ "err.source is: " & @TAB & $o_Autoit_Object_Error_Handler.source & @CRLF & _ "err.helpfile is: " & @TAB & $o_Autoit_Object_Error_Handler.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $o_Autoit_Object_Error_Handler.helpcontext & @CRLF & @CRLF) EndFunc ;==>_Autoit_Object_Error_Function #ce Func CpuExit() ;called when not in tab cpu ;== Pre Exit Cleanup ====================================== _GDIPlus_BrushDispose($hTexture) _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_ImageDispose($hImage) _GDIPlus_Shutdown() ;========================================================== For $i = 1 To 20 GUICtrlDelete($bars[$i]) ;sleep(10) ; only because I like the effect... Next EndFunc ;==>CpuExit #EndRegion Funcs 4 Cpu Usage