#NoTrayIcon #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=C:\Users\admin\AppData\Local\Temp\BTAK\Win.ico #AutoIt3Wrapper_Outfile=BinaryToAu3Kompressor.exe #AutoIt3Wrapper_Compression=4 #AutoIt3Wrapper_UseUpx=y #AutoIt3Wrapper_UseX64=N ; lzma.dll is 32 bit #AutoIt3Wrapper_Res_Comment=Convert a file in binary code and "Kompress" it. #AutoIt3Wrapper_Res_Description=BinaryToAu3Kompressor #AutoIt3Wrapper_Res_Fileversion=1.0.5.4 #AutoIt3Wrapper_Res_LegalCopyright=wakillon 2014 #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer% #AutoIt3Wrapper_Res_Field=Compile date|%longdate% %time% #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so #AutoIt3Wrapper_Run_After=del "%scriptfile%_stripped.au3" #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include ; https://www.autoitscript.com/forum/topic/123329-binarytoau3kompressor-v1054-update-of-10-oct-2014/ Opt ( 'GuiOnEventMode', 1 ) Opt ( 'MustDeclareVars', 1 ) Opt ( 'TrayMenuMode', 1 ) Opt ( 'GUICloseOnESC', 0 ) AutoItWinSetTitle ( '-BinaryT0Au3K0mpress0r-' ) If _ScriptIsAlreadyRunning () Then Exit OnAutoItExitRegister ( '_OnAutoItExit' ) #Region ------ Global Variables ------------------------------ Global Const $BS_AUTOCHECKBOX = 0x0003 Global $sFilePath, $sFileRead, $idInput, $idProg, $hCombo, $idCheckBoxOverWrite, $idCheckBoxLZMA, $idCheckBoxLznt, $idCheckBoxBase64, $idCheckBoxAddFunc Global $idButtonCreate, $idLabelFilePath, $iCopy, $hGui, $sTempDir = @TempDir & '\BTAK', $sVersion = _ScriptGetVersion () Global $sSoftTitle = 'BinaryToAu3Kompressor v' & $sVersion, $iBestResult, $iFlash Global $aMacros[12] = ['@TempDir', '@HomeDrive', '@ProgramFilesDir', '@ProgramsDir', '@ScriptDir', '@SystemDir', '@WindowsDir', '@UserProfileDir', '@AppDataDir', '@DesktopDir', '@MyDocumentsDir', '@CommonFilesDir'] Global $idlabelFunc[7], $idEditLength[7], $iBinaryLen[7], $idEditRatio[7], $iBinaryLenLzntFunc = 817, $iBinaryLenLzmaFunc = 48195, $iBinaryLenBase64Func = 786 Global $_B64E_CodeBuffer, $_B64E_CodeBufferMemory, $_B64E_Init, $_B64E_EncodeData, $_B64E_EncodeEnd Global $sRegTitleKey = 'BinaryToAu3Kompressor' Global $sRegKeySettings = 'HKCU' & StringReplace ( StringReplace ( @OSArch, 'x64', '64' ), 'x86', '' ) & '\Software\' & $sRegTitleKey & '\Settings' #EndRegion --- Global Variables ------------------------------ _Gui () _TrayMenuSet () _BalloonTipsEnable () While 1 Sleep ( 100 ) WEnd Func _ArrayMinIndex ( Const ByRef $avArray, $iCompNumeric=0, $iStart=0, $iEnd=0 ) If Not IsArray ( $avArray ) Then Return SetError ( 1, 0, -1 ) If UBound ( $avArray, 0 ) <> 1 Then Return SetError ( 3, 0, -1 ) Local $iUBound = UBound ( $avArray )-1 If $iEnd < 1 Or $iEnd > $iUBound Then $iEnd = $iUBound If $iStart < 0 Then $iStart = 0 If $iStart > $iEnd Then Return SetError ( 2, 0, -1 ) Local $iMinIndex = $iStart If $iCompNumeric Then For $i = $iStart To $iEnd If Number ( $avArray[$iMinIndex] ) > Number ( $avArray[$i] ) Then $iMinIndex = $i Next Else For $i = $iStart To $iEnd If $avArray[$iMinIndex] > $avArray[$i] Then $iMinIndex=$i Next EndIf Return $iMinIndex EndFunc ;==> _ArrayMinIndex () Func _BalloonTipsEnable () ; Enable Balloon Tips. Local $iTips = RegRead ( 'HKCU\Software\Microsoft\WINDOWS\CurrentVersion\Explorer\Advanced', 'EnableBalloonTips' ) If @error Or Not $iTips Then Local $iWrite = RegWrite ( 'HKCU\Software\Microsoft\WINDOWS\CurrentVersion\Explorer\Advanced', 'EnableBalloonTips', 'REG_DWORD', 0x00000001 ) Return SetError ( @error, 0, $iWrite ) Else Return SetError ( 0, 0, $iTips ) EndIf EndFunc ;==> _BalloonTipsEnable () Func _Base64Decode ( $input_string ) ; by trancexx Local $struct = DllStructCreate ( 'int' ) Local $a_Call = DllCall ( 'Crypt32.dll', 'int', 'CryptStringToBinary', 'str', $input_string, 'int', 0, 'int', 1, 'ptr', 0, 'ptr', DllStructGetPtr ( $struct, 1 ), 'ptr', 0, 'ptr', 0 ) If @error Or Not $a_Call[0] Then Return SetError ( 1, 0, '' ) Local $a = DllStructCreate ( 'byte[' & DllStructGetData ( $struct, 1 ) & ']' ) $a_Call = DllCall ( 'Crypt32.dll', 'int', 'CryptStringToBinary', 'str', $input_string, 'int', 0, 'int', 1, 'ptr', DllStructGetPtr ( $a ), 'ptr', DllStructGetPtr ( $struct, 1 ), 'ptr', 0, 'ptr', 0 ) If @error Or Not $a_Call[0] Then Return SetError ( 2, 0, '' ) Return DllStructGetData ( $a, 1 ) EndFunc ;==> _Base64Decode () Func _Base64E_Exit () ; by Ward $_B64E_CodeBuffer = 0 _MemVirtualFree ( $_B64E_CodeBufferMemory, 0, $MEM_RELEASE ) EndFunc ;==> _Base64E_Exit () Func _Base64Encode ( $Data, $LineBreak=76 ) ; by Ward Local $State = _Base64EncodeInit ( $LineBreak ) Return _Base64EncodeData ( $State, $Data ) & _Base64EncodeEnd ( $State ) EndFunc ;==> _Base64Encode () Func _Base64EncodeData ( ByRef $State, $Data ) ; by Ward If Not IsDllStruct ( $_B64E_CodeBuffer ) Or Not IsDllStruct ( $State ) Then Return SetError ( 1, 0, '' ) $Data = Binary ( $Data ) Local $InputLen = BinaryLen ( $Data ) Local $Input = DllStructCreate ( 'byte[' & $InputLen & ']' ) DllStructSetData ( $Input, 1, $Data ) Local $OputputLen = Ceiling ( BinaryLen ( $Data )*1.4 )+3 Local $Output = DllStructCreate ( 'char[' & $OputputLen & ']' ) DllCall ( 'user32.dll', 'int', 'CallWindowProc', 'ptr', DllStructGetPtr ( $_B64E_CodeBuffer )+$_B64E_EncodeData, 'ptr', DllStructGetPtr ( $Input ), 'uint', $InputLen, 'ptr', DllStructGetPtr ( $Output ), 'ptr', DllStructGetPtr ( $State ) ) Return DllStructGetData ( $Output, 1 ) EndFunc ;==> _Base64EncodeData () Func _Base64EncodeEnd ( ByRef $State ) ; by Ward If Not IsDllStruct ( $_B64E_CodeBuffer ) Or Not IsDllStruct ( $State ) Then Return SetError ( 1, 0, '' ) Local $Output = DllStructCreate ( 'char[5]' ) DllCall ( 'user32.dll', 'int', 'CallWindowProc', 'ptr', DllStructGetPtr ( $_B64E_CodeBuffer ) + $_B64E_EncodeEnd, 'ptr', DllStructGetPtr ( $Output ), 'ptr', DllStructGetPtr ( $State ), 'int', 0, 'int', 0 ) Return DllStructGetData ( $Output, 1 ) EndFunc ;==> _Base64EncodeEnd () Func _Base64EncodeInit ( $LineBreak=76 ) ; by Ward If Not IsDllStruct ( $_B64E_CodeBuffer ) Then If @AutoItX64 Then Local $Opcode = '0x89C08D42034883EC0885D2C70100000000C64104000F49C2C7410800000000C1F80283E20389410C740683C00189410C4883C408C389C94883EC3848895C242848897424304889CB8B0A83F901742083F9024889D87444C6000A4883C001488B74243029D8488B5C24284883C438C30FB67204E803020000BA3D0000004080FE3F7F08480FBEF60FB614308813C643013D488D4303C643023DEBBC0FB67204E8D7010000BA3D0000004080FE3F7F08480FBEF60FB614308813C643013D488D4302EB9489DB4883EC68418B014863D248895C242848897424304C89C348897C24384C896424484C89CE83F80148896C24404C896C24504C897424584C897C24604C8D2411410FB6790474434D89C64989CD0F82F700000083F8024C89C5747B31C0488B5C2428488B742430488B7C2438488B6C24404C8B6424484C8B6C24504C8B7424584C8B7C24604883C468C34C89C54989CF4D39E70F840B010000450FBE374D8D6F014489F025F0000000C1F80409C7E8040100004080FF3FBA3D0000007F08480FBEFF0FB614384489F78855004883C50183E70FC1E7024D39E50F84B2000000450FB675004983C5014489F025C0000000C1F80609C7E8BD0000004080FF3FBA3D0000007F08480FBEFF0FB61438BF3F0000008855004421F74C8D7502E896000000480FBED70FB604108845018B460883C0013B460C89460875104C8D7503C645020AC7460800000000904D39E5742E410FBE7D004D8D7D01498D6E01E8560000004889FA83E70348C1EA02C1E70483E23F0FB60410418806E913FFFFFF4489F040887E04C7060000000029D8E9CCFEFFFF89E840887E04C7060200000029D8E9B9FEFFFF89E840887E04C7060100000029D8E9A6FEFFFFE8400000004142434445464748494A4B4C4D4E4F505152535455565758595A6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435363738392B2F58C3' Else Local $Opcode = '0x89C08B4C24088B44240489CAC1FA1FC1EA1E01CAC1FA0283E103C70000000000C6400400C740080000000089500C740683C20189500CC2100089C983EC0C8B4C2414895C24048B5C2410897424088B1183FA01741D83FA0289D87443C6000A83C0018B74240829D88B5C240483C40CC210000FB67104E80C020000BA3D00000089F180F93F7F0989F20FBEF20FB6143088138D4303C643013DC643023DEBBD0FB67104E8DF010000BA3D00000089F180F93F7F0989F20FBEF20FB6143088138D4302C643013DEB9489DB83EC3C895C242C8B5C244C896C24388B542440897424308B6C2444897C24348B030FB6730401D583F801742D8B4C24488954241C0F820101000083F80289CF747D31C08B5C242C8B7424308B7C24348B6C243883C43CC210008B4C244889D739EF0F84400100008D57010FBE3F89542418894C241489F825F0000000C1F80409C6897C241CE8330100008B542418C644240C3D8B4C241489C789F03C3F7F0B0FBEF00FB604378844240C0FB644240C8D790188018B74241C83E60FC1E60239EA0F84CB0000000FB60A83C2018954241C89C825C0000000C1F80609C6884C2414E8D8000000BA3D0000000FB64C24148944240C89F03C3F7F0B0FBEF08B44240C0FB6143083E13F881789CEE8AD00000089F10FBED18D4F020FB604108847018B430883C0013B430C894308750EC647020A8D4F03C7430800000000396C241C743A8B44241C8B7C241C0FBE30894C241483C701E8650000008B4C241489F283E60381E2FC000000C1EA02C1E6040FB60410880183C101E9E4FEFFFF89F088430489C8C703000000002B442448E9B2FEFFFF89F189F8884B04C703020000002B442448E99CFEFFFF89F088430489C8C703010000002B442448E986FEFFFFE8400000004142434445464748494A4B4C4D4E4F505152535455565758595A6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435363738392B2F58C3' EndIf $_B64E_Init = ( StringInStr ( $Opcode, '89C0' )-3 ) / 2 $_B64E_EncodeData = ( StringInStr ( $Opcode, '89DB' )-3 ) / 2 $_B64E_EncodeEnd = ( StringInStr ( $Opcode, '89C9' )-3 ) / 2 $Opcode = Binary ( $Opcode ) $_B64E_CodeBufferMemory = _MemVirtualAlloc ( 0, BinaryLen ( $Opcode ), $MEM_COMMIT, $PAGE_EXECUTE_READWRITE ) $_B64E_CodeBuffer = DllStructCreate ( 'byte[' & BinaryLen ( $Opcode ) & ']', $_B64E_CodeBufferMemory ) DllStructSetData ( $_B64E_CodeBuffer, 1, $Opcode ) OnAutoItExitRegister ( '_Base64E_Exit' ) EndIf Local $State = DllStructCreate ( 'byte[16]' ) DllCall ( 'user32.dll', 'none', 'CallWindowProc', 'ptr', DllStructGetPtr ( $_B64E_CodeBuffer )+$_B64E_Init, 'ptr', DllStructGetPtr ( $State ), 'uint', $LineBreak, 'int', 0, 'int', 0 ) Return $State EndFunc ;==> _Base64EncodeInit () Func _BinaryToAu3 ( $sFilePath, $sOutputDirPath='', $iOverWrite=1, $iOpenInScite=1 ) Local $sFileName = StringTrimLeft ( $sFilePath, StringInStr ( $sFilePath, '\', 1, -1 ) ) Local $hFile = FileOpen ( $sFilePath, 16 ) If $hFile=-1 Then MsgBox ( 262144+4096+16, 'Error', "Can not Access this file.", 5 ) Return SetError ( 1, 0, '' ) EndIf $sFileRead=FileRead ( $hFile ) FileClose ( $hFile ) If StringLeft ( $sOutputDirPath, 1 ) <> '@' Then $sOutputDirPath = "'" & $sOutputDirPath If StringRight ( $sOutputDirPath, 1 ) <> "'" Then $sOutputDirPath &= "'" Local $sString Local $iAddFunc = Int ( _IsChecked ( $idCheckBoxAddFunc ) ) ;~ The order of compression type must be like this for avoid CRC Error. ;~ 1-Lznt Local $iAddFuncLznt If $iOpenInScite = 1 Then $iAddFuncLznt = Int ( _IsChecked ( $idCheckBoxLznt ) ) If $iOpenInScite = 2 Or $iOpenInScite = 5 Or $iOpenInScite = 6 Then $iAddFuncLznt = 1 If $iAddFuncLznt And $iOpenInScite <> 0 Then $sFileRead = _LzntCompress ( Binary ( $sFileRead ) ) ;~ 2-Lzma Local $iAddFuncLzma If $iOpenInScite = 1 Then $iAddFuncLzma = Int ( _IsChecked ( $idCheckBoxLZMA ) ) If $iOpenInScite = 3 Or $iOpenInScite = 5 Or $iOpenInScite = 7 Then $iAddFuncLzma = 1 If $iAddFuncLzma And $iOpenInScite <> 0 Then $sFileRead = _LzmaEnc ( Binary ( $sFileRead ), 9 ) ; 1-9 ;~ 3-Base64 Local $iAddFuncB64 If $iOpenInScite = 1 Then $iAddFuncB64 = Int ( _IsChecked ( $idCheckBoxBase64 ) ) If $iOpenInScite = 4 Or $iOpenInScite = 6 Or $iOpenInScite = 7 Then $iAddFuncB64 = 1 If $iAddFuncB64 And $iOpenInScite <> 0 Then $sFileRead=_Base64Encode ( $sFileRead, 4000 ) ; MAX_LINESIZE 4095 Local $aRet = StringRegExp ( $sFileRead, '(.{1,4000})', 3 ) Local $iUbound = UBound ( $aRet ) Local $sFuncName = _FuncGetValidName ( $sFileName, '[\W]', '' ) $sString &= '_' & $sFuncName & " ( '" & $sFileName & "', " & $sOutputDirPath & ', ' & $iOverWrite & ' )' & @CRLF & @CRLF Local $sSign = 'Code Generated by BinaryToAu3Kompressor.' If $iUbound = 1 Then $sString &= 'Func _' & $sFuncName & ' ( $sFileName, $sOutputDirPath, $iOverWrite=0 ) ; ' & $sSign & @CRLF & " Local $sFileBin = '" & StringStripCR ( $aRet[0] ) & "'" & @CRLF ElseIf $iUbound > 1 Then $sString &= 'Func _' & $sFuncName & ' ( $sFileName, $sOutputDirPath, $iOverWrite=0 ) ; ' & $sSign & @CRLF & " Local $sFileBin = '" & StringStripCR ( $aRet[0] ) & "'" & @CRLF For $i=1 To $iUbound-2 $sString &= " $sFileBin &= '" & StringStripCR ( $aRet[$i] ) & "'" & @CRLF Next $sString &= " $sFileBin &= '" & $aRet[$iUbound-1] & "'" & @CRLF EndIf If $iOpenInScite <> 0 Then If ( $iOpenInScite = 1 Or $iOpenInScite = 4 Or $iOpenInScite = 6 Or $iOpenInScite = 7 ) And $iAddFuncB64 Then $sString &=' $sFileBin = Binary ( _Base64Decode ( $sFileBin ) )' & @CRLF If ( $iOpenInScite = 1 Or $iOpenInScite = 3 Or $iOpenInScite = 5 Or $iOpenInScite = 7 ) And $iAddFuncLzma Then $sString &=' $sFileBin = Binary ( _LZMADec ( $sFileBin ) )' & @CRLF If ( $iOpenInScite = 1 Or $iOpenInScite = 2 Or $iOpenInScite = 5 Or $iOpenInScite = 6 ) And $iAddFuncLznt Then $sString &=' $sFileBin = Binary ( _LzntDecompress ( $sFileBin ) )' & @CRLF EndIf If $iUbound > 0 Then $sString &=' If Not FileExists ( $sOutputDirPath ) Then DirCreate ( $sOutputDirPath )' & @CRLF $sString &=" If StringRight ( $sOutputDirPath, 1 ) <> '\' Then $sOutputDirPath &= '\'" & @CRLF $sString &=' Local $sFilePath = $sOutputDirPath & $sFileName' & @CRLF $sString &=' If FileExists ( $sFilePath ) Then' & @CRLF $sString &=' If $iOverWrite = 1 Then' & @CRLF $sString &=' If Not Filedelete ( $sFilePath ) Then Return SetError ( 2, 0, $sFileBin )' & @CRLF $sString &=' Else' & @CRLF $sString &=' Return SetError ( 0, 0, $sFileBin )' & @CRLF $sString &=' EndIf' & @CRLF $sString &=' EndIf' & @CRLF $sString &=' Local $hFile = FileOpen ( $sFilePath, 16+2 )' & @CRLF $sString &=' If $hFile = -1 Then Return SetError ( 3, 0, $sFileBin )' & @CRLF $sString &=' FileWrite ( $hFile, $sFileBin )' & @CRLF $sString &=' FileClose ( $hFile )' & @CRLF $sString &=' Return SetError ( 0, 0, $sFileBin )' & @CRLF $sString &= 'EndFunc ;==> _' & $sFuncName & '()' & @CRLF EndIf If $iOpenInScite<>0 Then If ( $iOpenInScite = 1 Or $iOpenInScite = 4 Or $iOpenInScite = 6 Or $iOpenInScite = 7 ) And $iAddFunc And $iAddFuncB64 Then $sString &= _StringAddBase64Decode () If ( $iOpenInScite = 1 Or $iOpenInScite = 3 Or $iOpenInScite = 5 Or $iOpenInScite = 7 ) And $iAddFunc And $iAddFuncLzma Then $sString &= _StringAddLzmaDec () If ( $iOpenInScite = 1 Or $iOpenInScite = 2 Or $iOpenInScite = 5 Or $iOpenInScite = 6 ) And $iAddFunc And $iAddFuncLznt Then $sString &= _StringAddLzntDecompress () EndIf If $iOpenInScite=1 Then Local $sScriptFilePath = @TempDir & '\' & $sFuncName & '.au3' $sScriptFilePath = _FilePathFindFree ( $sScriptFilePath ) FileWrite ( $sScriptFilePath, $sString ) Local $sScitePath = @ProgramFilesDir & '\AutoIt3\SciTE\scite.exe' If Not FileExists ( $sScitePath ) Then $sScitePath = RegRead ( 'HKLM\SOFTWARE\AutoIt v3\AutoIt', 'InstallDir' ) & '\SciTE\scite.exe' If Not FileExists ( $sScitePath ) Then $sScitePath = RegRead ( $sRegKeySettings, 'SciTEPath' ) If @error Or Not FileExists ( $sScitePath ) Then $sScitePath = FileOpenDialog ( 'SciTE Path', @ProgramFilesDir, '(*.exe)', 1+2, 'SciTE.exe', _OnTop () ) If StringRight ( $sScitePath, 9 ) <> 'SciTE.exe' Then $sScitePath = '' Else RegWrite ( $sRegKeySettings, 'SciTEPath', 'REG_SZ', $sScitePath ) EndIf EndIf EndIf If FileExists ( $sScitePath ) Then If $iCopy = 0 Then Run ( $sScitePath & ' "' & $sScriptFilePath & '"' ) Else ClipPut ( $sString ) _TrayTip ( $sSoftTitle, 'Script was Copied to the Clipboard!', 1, 3000 ) EndIf Else MsgBox ( 262144+4096+16, 'Error', "SciTE Editor was not found.", 5 ) ClipPut ( $sString ) _TrayTip ( $sSoftTitle, 'Script was Copied to the Clipboard!', 1, 3000 ) EndIf Else Return StringLen ( $sString ) EndIf EndFunc ;==> _BinaryToAu3 () Func _Exit () Exit EndFunc ;==> _Exit () Func _FilePathFindFree ( $sPath ) Local $i, $sNewPath Do $sNewPath = _FilePathInsertBetweenNameAndExt ( $sPath, $i ) $i += 1 Until Not FileExists ( $sNewPath ) Return $sNewPath EndFunc ;==> _FilePathFindFree () Func _FilePathInsertBetweenNameAndExt ( $sPath, $sStringToInsert ) Local $szDrive, $szDir, $szFName, $szExt, $TestPath $TestPath=_PathSplit ( $sPath, $szDrive, $szDir, $szFName, $szExt ) Return $szDrive & $szDir & $szFName & $sStringToInsert & $szExt EndFunc ;==> _FilePathInsertBetweenNameAndExt () Func _FuncGetValidName ( $sString, $sPatern='[*?\\/|):<>"]', $sReplace='_' ) If StringStripWS ( $sString, 8 ) = '' Then Return $sString $sString = StringRegExpReplace ( $sString, $sPatern, $sReplace ) Return _StringProper ( StringStripWS ( $sString, 7 ) ) EndFunc ;==> _FuncGetValidName () Func _GetDroppedItem () $sFilePath = @GUI_DRAGFILE If _IsDirectory ( $sFilePath ) Then $sFilePath = '' MsgBox ( 262144+4096+16, 'Error', "It's Not a File !", 4 ) Else _TrayTip ( $sSoftTitle, $sFilePath & ' has been drag & drop on the Gui !', 1, 3000 ) _ScriptEvaluateFuturSize ( $sFilePath ) EndIf EndFunc ;==> _GetDroppedItem () Func _GetInput () If _IsPressed ( '10' ) Then ; Left Shift key $iCopy = 1 Else $iCopy = 0 EndIf Local $sInputRead = StringReplace ( GUICtrlRead ( $idInput ), "'", '' ) If $sInputRead = 'FolderName' Then $sInputRead = '' Local $sComboSel = _GUICtrlComboBoxEx_GetCurSel ( $hCombo ) If $sComboSel <> -1 Then If $sComboSel = '' Then $sComboSel = '@TempDir' Else $sComboSel = $aMacros[$sComboSel] EndIf Else ;~ _GUICtrlComboBoxEx_GetEditControl ( $hCombo ) Return EndIf Local $sOutputDirPath = $sComboSel & " & '\" & $sInputRead & "'" Local $iOverWrite = GUICtrlRead ( $idCheckBoxOverWrite ) If $iOverWrite = 4 Then $iOverWrite = 0 If $sFilePath Then _BinaryToAu3 ( $sFilePath, $sOutputDirPath, $iOverWrite ) EndFunc ;==> _GetInput () Func _Gui () Local $sGuiHeight = 560 $hGui = GUICreate ( $sSoftTitle, 320, $sGuiHeight, 10, -1, -1, BitOR ( 0x00000010, 0x00000008 ) ) ; $WS_EX_ACCEPTFILES, $WS_EX_TOPMOST If Not FileExists ( $sTempDir & '\Win.ico' ) Then Winico ( 'Win.ico', $sTempDir ) GUISetIcon ( $sTempDir & '\Win.ico' ) GUISetFont ( 9, 800 ) GUISetOnEvent ( -3, '_Exit' ) ; $GUI_EVENT_CLOSE GUISetOnEvent ( -13, '_GetDroppedItem' ) ; $GUI_EVENT_DROPPED If Not FileExists ( $sTempDir ) Then DirCreate ( $sTempDir ) Local $sPicPath = $sTempDir & '\Convert.jpg' If Not FileExists ( $sPicPath ) Then JpgDrag ( 'Convert.jpg', $sTempDir ) $idLabelFilePath = GUICtrlCreateLabel ( "Drag'n drop a file on the pic for test all compressions", 10, $sGuiHeight -400, 300, 20, 0x01 ) ; $SS_CENTER GUICtrlSetColor ( -1, 0x0000FF ) GUICtrlCreateLabel ( 'Compression Type', 10, $sGuiHeight -370, 110, 20 ) GUICtrlCreateLabel ( 'Script Size', 160, $sGuiHeight -370, 80, 20 ) ; Script Binary Length. GUICtrlSetColor ( -1, 0xFF0000 ) GUICtrlCreateLabel ( 'Ratio %', 260, $sGuiHeight -370, 50, 20, 0x01 ) ; $SS_CENTER Local $aTextLabels[7] = [ 'None', 'Lznt', 'Lzma', 'Base64', 'Lznt+Lzma', 'Lznt+Base64', 'Lzma+Base64' ] For $i = 0 To UBound ( $aTextLabels ) -1 GUICtrlCreateLabel ( $aTextLabels[$i], 10, $sGuiHeight -345+$i*22, 100, 20 ) GUICtrlSetFont ( -1, 8, 600 ) If $i Then $idlabelFunc[$i] = GUICtrlCreateLabel ( '+ Func', 115, $sGuiHeight -345 +$i*22, 40, 20, 0x01 ) ; $SS_CENTER GUICtrlSetColor ( -1, 0xFF0000 ) GUICtrlSetFont ( -1, 8, 600 ) EndIf $idEditLength[$i] = GUICtrlCreateEdit ( '', 160, $sGuiHeight -346 +$i*22, 90, 18, BitOR ( 2048, 2 ) ) ; $ES_READONLY, $ES_RIGHT GUICtrlSetBkColor ( -1, 0xFFFFFF ) GUICtrlSetFont ( -1, 8, 600 ) If $i Then $idEditRatio[$i] = GUICtrlCreateEdit ( '', 260, $sGuiHeight -345+$i*22, 50, 18, 2048 ) ; $ES_READONLY GUICtrlSetBkColor ( -1, 0xFFFFFF ) GUICtrlSetColor ( -1, 0xFF0000 ) GUICtrlSetFont ( -1, 8, 600 ) EndIf Next GUICtrlCreateGroup ( 'Compression', 10, $sGuiHeight-190, 300, 50 ) $idCheckBoxLznt = GUICtrlCreateCheckbox ( ' Lznt', 30, $sGuiHeight-173, -1, -1, $BS_AUTOCHECKBOX ) $idCheckBoxLzma = GUICtrlCreateCheckbox ( ' Lzma', 120, $sGuiHeight-173, -1, -1, $BS_AUTOCHECKBOX ) $idCheckBoxBase64 = GUICtrlCreateCheckbox ( ' Base64', 215, $sGuiHeight-173, -1, -1, $BS_AUTOCHECKBOX ) GUICtrlCreateGroup ( 'Settings', 10, $sGuiHeight-140, 300, 50 ) $idCheckBoxAddFunc = GUICtrlCreateCheckbox ( ' Include Decompress Func', 30, $sGuiHeight-123, -1, -1, $BS_AUTOCHECKBOX ) GUICtrlSetOnEvent ( -1, '_GuiCtrlSetDatas' ) GUICtrlSetState ( $idCheckBoxAddFunc, 1 ) ; $GUI_CHECKED $idCheckBoxOverWrite = GUICtrlCreateCheckbox ( ' OverWrite', 215, $sGuiHeight-123, -1, -1, $BS_AUTOCHECKBOX ) GUICtrlCreateLabel ( 'Choose an Output Path', 10, $sGuiHeight-85, 300, 20, 0x01 ) ; $SS_CENTER GUICtrlSetFont ( -1, 11, 600 ) GUICtrlSetColor ( -1, 0xFF0000 ) GUICtrlSetTip ( -1, 'Choose Directory' & @Crlf & 'where embedded file' & @Crlf & 'will be extracted', ' ', 1, 1 ) $hCombo = _GUICtrlComboBoxEx_Create ( $hGui, '', 5, $sGuiHeight-64, 150, 200, $CBS_DROPDOWNLIST ) _GUICtrlComboBoxEx_BeginUpdate ( $hCombo ) For $i = 0 To UBound ( $aMacros ) -1 _GUICtrlComboBoxEx_AddString ( $hCombo, $aMacros[$i] & " & '\" ) Next _GUICtrlComboBoxEx_EndUpdate ( $hCombo ) _GUICtrlComboBoxEx_SetCurSel ( $hCombo, '@TempDir' ) $idInput = GUICtrlCreateInput ( "FolderName'", 171, $sGuiHeight-64, 142, 22 ) GUICtrlCreatePic ( $sPicPath, 0, 0, 320, 150 ) GUICtrlSetState ( -1, 8 ) ; $GUI_DROPACCEPTED GUICtrlSetTip ( -1, 'Drag a File here' & @Crlf & 'Check wanted Compression' & @Crlf & _ 'Select an output directory' & @Crlf & 'and Click on Create button', ' ', 1, 1 ) $idButtonCreate = GUICtrlCreateButton ( 'Create au3 Script ', 5, $sGuiHeight-35, 310, 30 ) GUICtrlSetOnEvent ( -1, '_GetInput' ) GUICtrlSetTip ( -1, 'Click here' & @Crlf & 'for create script and open it in SciTE Editor' & @CRLF & _ 'Or' & @Crlf & 'Hold Left Shift Key and Click for copy script to the Clipboard.', ' ', 1, 1 ) $idProg = GUICtrlCreateProgress ( 5, $sGuiHeight-35, 310, 30, 0x01 ) ; $PBS_SMOOTH GUICtrlSetState ( -1, 32 ) ; $GUI_HIDE GUICtrlSetState ( $idInput, 256 ) ; $GUI_FOCUS GUISetState () EndFunc ;==> _Gui () Func _GuiAutoCheckBestResult ( $iIndex ) GUICtrlSetState ( $idCheckBoxLznt, 1+3* ( StringInStr ( '0236', $iIndex )<>0 ) ) ; $GUI_CHECKED / $GUI_UNCHECKED GUICtrlSetState ( $idCheckBoxLzma, 1+3* ( StringInStr ( '0135', $iIndex )<>0 ) ) GUICtrlSetState ( $idCheckBoxBase64, 1+3* ( StringInStr ( '0124', $iIndex )<>0 ) ) EndFunc ;==> _GuiAutoCheckBestResult () Func _GuiBestResultEditFlash () $iFlash = Not $iFlash If $iFlash Then GUICtrlSetColor ( $idEditLength[$iBestResult], 0xFF0000 ) Else GUICtrlSetColor ( $idEditLength[$iBestResult], 0xFFFFFF ) EndIf EndFunc ;==> _GuiBestResultEditFlash () Func _GuiCtrlSetDatas () AdlibUnRegister ( '_GuiBestResultEditFlash' ) Local $iAddFunc = Int ( _IsChecked ( $idCheckBoxAddFunc ) ) Local $iState If $iAddFunc Then $iState = 16 ; $GUI_SHOW Else $iAddFunc = -1 $iState = 32 ; $GUI_HIDE EndIf Local $j, $iRatio For $i = 0 To UBound ( $idEditLength )-1 If $i Then GUICtrlSetState ( $idlabelFunc[$i], $iState ) $j = GUICtrlRead ( $idEditLength[$i] ) If $j Then Switch $i Case 1 $j += $iBinaryLenLzntFunc*$iAddFunc Case 2 $j += $iBinaryLenLzmaFunc*$iAddFunc Case 3 $j += $iBinaryLenBase64Func*$iAddFunc Case 4 $j += ( $iBinaryLenLzntFunc+ $iBinaryLenLzmaFunc )*$iAddFunc Case 5 $j += ( $iBinaryLenLzntFunc+ $iBinaryLenBase64Func )*$iAddFunc Case 6 $j += ( $iBinaryLenLzmaFunc+ $iBinaryLenBase64Func )*$iAddFunc EndSwitch $iBinaryLen[$i] = $j EndIf GUICtrlSetData ( $idEditLength[$i], $j ) GUICtrlSetColor ( $idEditLength[$i], 0x0000FF ) If $i And $j Then $iRatio = Round ( $iBinaryLen[$i]/$iBinaryLen[0], 4 )*100 If $iRatio > 100 Then $iRatio = '> 100' GUICtrlSetData ( $idEditRatio[$i], $iRatio ) EndIf Next If Not $j Then Return Local $iIndex = _ArrayMinIndex ( $iBinaryLen, 1, 0 ) $iBestResult = $iIndex _GuiAutoCheckBestResult ( $iBestResult ) ;~ Flash best compression. GUICtrlSetColor ( $idEditLength[$iIndex], 0xFF0000 ) $iFlash = True AdlibRegister ( '_GuiBestResultEditFlash', 1000 ) EndFunc ;==> _GuiCtrlSetDatas () Func _IsChecked ( $idCtrl ) Return BitAND ( GUICtrlRead ( $idCtrl ), 1 ) =1 ; $GUI_CHECKED EndFunc ;==> _IsChecked () Func _IsDirectory ( $sFilePath ) If StringInStr ( FileGetAttrib ( $sFilePath ), 'D' ) Then Return 1 EndFunc ;==> _IsDirectory () Func _IsPressed ( $sHexKey, $vDLL='user32.dll' ) Local $a_R = DllCall ( $vDLL, 'short', 'GetAsyncKeyState', 'int', '0x' & $sHexKey ) If @error Then Return SetError ( @error, @extended, False ) Return BitAND ( $a_R[0], 0x8000 ) <> 0 EndFunc ;==> _IsPressed () Func _LzmaDec ( $Source ) ; by Ward Local $__LZMADLL = $sTempDir & '\LZMA.DLL' If Not FileExists ( $__LZMADLL ) Then Lzmadll ( 'LZMA.DLL', $sTempDir ) If Not IsBinary ( $Source ) Or BinaryLen ( $Source ) < 9 Then Return SetError ( 1, 0, $Source ) ; 9 is the size of header Local $Src = DllStructCreate ( 'byte[' & BinaryLen ( $Source ) & ']' ), $Ret DllStructSetData ( $Src, 1, $Source ) $Ret = DllCall ( $__LZMADLL, 'uint:cdecl', 'LzmaDecGetSize', 'ptr', DllStructGetPtr ( $Src ) ) If @Error Then Return SetError ( 1, 0, $Source ) Local $DestSize = $Ret[0] If $DestSize = 0 Then Return SetError ( 2, 0, $Source ) Local $Dest = DllStructCreate ( 'byte[' & $DestSize & ']' ) $Ret = DllCall ( $__LZMADLL, 'int:cdecl', 'LzmaDec', 'ptr', DllStructGetPtr ( $Dest ), 'uint*', $DestSize, 'ptr', DllStructGetPtr ( $Src ), 'uint', BinaryLen ( $Source ) ) If Not @Error Then Return SetExtended ( $Ret[0], DllStructGetData ( $Dest, 1 ) ) Else Return SetError ( 3, 0, $Source ) EndIf EndFunc ;==> _LzmaDec () Func _LzmaEnc ( $Source, $Setting=5 ); by Ward / modified $Source = Binary ( $Source ) Local $__LZMADLL = $sTempDir & '\LZMA.DLL' If Not FileExists ( $__LZMADLL ) Then Lzmadll ( 'LZMA.DLL', $sTempDir ) Local Const $SZ_OK = 0, $SZ_ERROR_MEM = 2, $SZ_ERROR_PARAM = 5, $SZ_ERROR_OUTPUT_EOF = 7 If Not IsBinary ( $Source ) Then Return SetError ( 1, 0, $Source ) Local $Src = DllStructCreate ( 'byte[' & BinaryLen ( $Source ) & ']' ) Local $Dest = DllStructCreate ( 'byte[' & Int ( BinaryLen ( $Source ) * 1.1 + 4096 ) & ']' ) ; 1024 DllStructSetData ( $Src, 1, $Source ) If IsNumber ( $Setting ) Then $Setting = _LzmaEncSetting ( Int ( $Setting ) ) ElseIf Not IsDllStruct ( $Setting ) Then $Setting = _LzmaEncSetting () EndIf Local $Ret = DllCall ( $__LZMADLL , 'int:cdecl', 'LzmaEnc', 'ptr', DllStructGetPtr ( $Dest ), 'uint*', DllStructGetSize ( $Dest ), 'ptr', DllStructGetPtr ( $Src ), 'uint', DllStructGetSize ( $Src ), 'ptr', DllStructGetPtr ( $Setting ), 'ptr', 0 ) If Not @Error Then Switch $Ret[0] Case $SZ_OK Return BinaryMid ( DllStructGetData ( $Dest, 1 ), 1, $Ret[2] ) Case $SZ_ERROR_MEM Return SetError ( 2, $Ret[0], $Source ) Case $SZ_ERROR_PARAM Return SetError ( 3, $Ret[0], $Source ) Case $SZ_ERROR_OUTPUT_EOF Return SetError ( 4, $Ret[0], $Source ) EndSwitch Return SetError ( 5, $Ret[0], $Source ) EndIf Return SetError ( 6, -1, $Source ) EndFunc ;==> _LzmaEnc () Func _LzmaEncSetting ( $Level = 5, $DictSize = 0, $LC = -1, $LP = -1, $PB = -1, $ALGO = -1, $FB = -1, $BtMode = -1, $NumHashBytes = -1, $MC = 0, $NumThreads = -1 ); by Ward Local $LzmaEncSet = DllStructCreate ( 'int level;uint dictSize;int lc;int lp;int pb;int algo;int fb;int btMode;int numHashBytes;uint mc;uint writeEndMark;int numThreads' ) DllStructSetData ( $LzmaEncSet, 'level', $Level ) DllStructSetData ( $LzmaEncSet, 'dictSize', $DictSize ) DllStructSetData ( $LzmaEncSet, 'lc', $LC ) DllStructSetData ( $LzmaEncSet, 'lp', $LP ) DllStructSetData ( $LzmaEncSet, 'pb', $PB ) DllStructSetData ( $LzmaEncSet, 'algo', $ALGO ) DllStructSetData ( $LzmaEncSet, 'fb', $FB ) DllStructSetData ( $LzmaEncSet, 'btMode', $BtMode ) DllStructSetData ( $LzmaEncSet, 'numHashBytes', $NumHashBytes ) DllStructSetData ( $LzmaEncSet, 'mc', $MC ) DllStructSetData ( $LzmaEncSet, 'writeEndMark', 0 ) DllStructSetData ( $LzmaEncSet, 'numThreads', $NumThreads ) Return $LzmaEncSet EndFunc ;==> _LzmaEncSetting () Func _LzntCompress ( $vInput, $iCompressionFormatAndEngine=258 ); by trancexx If Not ( $iCompressionFormatAndEngine = 258 ) Then $iCompressionFormatAndEngine = 2 Local $bBinary = Binary ( $vInput ) Local $tInput = DllStructCreate ( 'byte[' & BinaryLen ( $bBinary ) & ']' ) DllStructSetData ( $tInput, 1, $bBinary ) Local $a_Call=DllCall ( 'ntdll.dll', 'int', 'RtlGetCompressionWorkSpaceSize', 'ushort', $iCompressionFormatAndEngine, 'dword*', 0, 'dword*', 0 ) If @error Or $a_Call[0] Then Return SetError ( 1, 0, '' ) ; error determining workspace buffer size Local $tWorkSpace = DllStructCreate ( 'byte[' & $a_Call[2] & ']' ) ; workspace is needed for compression Local $tBuffer = DllStructCreate ( 'byte[' & 16*DllStructGetSize ( $tInput ) & ']' ) ; initially oversizing buffer Local $a_Call = DllCall ( 'ntdll.dll', 'int', 'RtlCompressBuffer', 'ushort', $iCompressionFormatAndEngine, 'ptr', DllStructGetPtr ( $tInput ), 'dword', DllStructGetSize ( $tInput ), 'ptr', DllStructGetPtr ( $tBuffer ), 'dword', DllStructGetSize ( $tBuffer ), 'dword', 4096, 'dword*', 0, 'ptr', DllStructGetPtr ( $tWorkSpace ) ) If @error Or $a_Call[0] Then Return SetError ( 2, 0, '' ) ; error compressing Local $tOutput = DllStructCreate ( 'byte[' & $a_Call[7] & ']', DllStructGetPtr ( $tBuffer ) ) Return SetError ( 0, 0, DllStructGetData ( $tOutput, 1 ) ) EndFunc ;==> _LzntCompress () Func _LzntDecompress ( $bBinary ); by trancexx $bBinary = Binary ( $bBinary ) Local $tInput = DllStructCreate ( 'byte[' & BinaryLen ( $bBinary ) & ']' ) DllStructSetData ( $tInput, 1, $bBinary ) Local $tBuffer = DllStructCreate ( 'byte[' & 16*DllStructGetSize ( $tInput ) & ']' ) ; initially oversizing buffer Local $a_Call = DllCall ( 'ntdll.dll', 'int', 'RtlDecompressBuffer', 'ushort', 2, 'ptr', DllStructGetPtr ( $tBuffer ), 'dword', DllStructGetSize ( $tBuffer ), 'ptr', DllStructGetPtr ( $tInput ), 'dword', DllStructGetSize ( $tInput ), 'dword*', 0 ) If @error Or $a_Call[0] Then Return SetError ( 1, 0, '' ) ; error decompressing Local $tOutput = DllStructCreate ( 'byte[' & $a_Call[6] & ']', DllStructGetPtr ( $tBuffer ) ) Return SetError ( 0, 0, DllStructGetData ( $tOutput, 1 ) ) EndFunc ;==> _LzntDecompress () Func _OnAutoItExit () AdlibUnRegister ( '_GuiBestResultEditFlash' ) GUISetState ( @SW_HIDE, $hGui ) GUIDelete ( $hGui ) $aMacros = 0 $idlabelFunc = 0 $idEditLength = 0 $iBinaryLen = 0 $idEditRatio = 0 $iBinaryLenLzntFunc = 0 If @Compiled Then DirRemove ( $sTempDir, 1 ) EndFunc ;==> _OnAutoItExit () Func _OnTop () Local $hWnd = WinGetHandle ( AutoItWinGetTitle () ) WinSetOnTop ( $hWnd, '', 1 ) Return $hWnd EndFunc ;==> _OnTop () Func _PathSplit ( $szPath, ByRef $szDrive, ByRef $szDir, ByRef $szFName, ByRef $szExt ) Local $drive = '', $dir = '', $fname = '', $ext = '', $pos, $array[5] $array[0] = $szPath If StringMid ( $szPath, 2, 1 ) = ':' Then $drive = StringLeft ( $szPath, 2 ) $szPath = StringTrimLeft ( $szPath, 2 ) ElseIf StringLeft ( $szPath, 2 ) = '\\' Then $szPath = StringTrimLeft ( $szPath, 2 ) $pos = StringInStr ( $szPath, '\' ) If $pos = 0 Then $pos = StringInStr ( $szPath, '/' ) If $pos = 0 Then $drive = '\\' & $szPath $szPath = '' Else $drive = '\\' & StringLeft ( $szPath, $pos-1 ) $szPath = StringTrimLeft ( $szPath, $pos-1 ) EndIf EndIf Local $nPosForward = StringInStr ( $szPath, '/', 0, -1 ) Local $nPosBackward = StringInStr ( $szPath, '\', 0, -1 ) If $nPosForward >= $nPosBackward Then $pos = $nPosForward Else $pos = $nPosBackward EndIf $dir = StringLeft ( $szPath, $pos ) $fname = StringRight ( $szPath, StringLen ( $szPath )-$pos ) If StringLen ( $dir ) = 0 Then $fname = $szPath $pos = StringInStr ( $fname, '.', 0, -1 ) If $pos Then $ext = StringRight ( $fname, StringLen ( $fname ) - ( $pos-1 ) ) $fname = StringLeft ( $fname, $pos-1 ) EndIf $szDrive = $drive $szDir = $dir $szFName = $fname $szExt = $ext $array[1] = $drive $array[2] = $dir $array[3] = $fname $array[4] = $ext Return $array EndFunc ;==> _PathSplit () Func _ScriptEvaluateFuturSize ( $sFilePath ) AdlibUnRegister ( '_GuiBestResultEditFlash' ) GUICtrlSetState ( $idButtonCreate, 32 ) ; $GUI_HIDE ReDim $iBinaryLen[7] Local $iAddFunc = Int ( _IsChecked ( $idCheckBoxAddFunc ) ), $iRatio Local $aRet = DllCall ( 'shlwapi.dll', 'int', 'PathCompactPathExW', 'wstr', '', 'wstr', $sFilePath, 'uint', 50, 'dword', 0 ) If Not @error Then GUICtrlSetData ( $idLabelFilePath, $aRet[1] ) For $i = 0 To UBound ( $idEditLength ) -1 GUICtrlSetData ( $idEditLength[$i], '' ) GUICtrlSetColor ( $idEditLength[$i], 0x0000FF ) If $i Then GUICtrlSetData ( $idEditRatio[$i], '' ) Next GUICtrlSetState ( $idProg, 16 ) ; $GUI_SHOW For $i = 0 To UBound ( $iBinaryLen ) -1 $iBinaryLen[$i] = _BinaryToAu3 ( $sFilePath, @TempDir, 1, $i + ( 1*$i <> 0 ) ) If @error Then ExitLoop GUICtrlSetData ( $idEditLength[$i], $iBinaryLen[$i] ) GUICtrlSetData ( $idProg, ( $i+1 )*15 ) If $i Then $iRatio = Round ( $iBinaryLen[$i]/$iBinaryLen[0], 4 )*100 ; ratio If $iRatio > 100 Then $iRatio = '> 100' GUICtrlSetData ( $idEditRatio[$i], $iRatio ) EndIf Next If $iBinaryLen[0] Then Local $iIndex = _ArrayMinIndex ( $iBinaryLen, 1, 0 ) ;~ Flash best compression. GUICtrlSetColor ( $idEditLength[$iIndex], 0xFF0000 ) $iBestResult = $iIndex _GuiAutoCheckBestResult ( $iBestResult ) $iFlash = True AdlibRegister ( '_GuiBestResultEditFlash', 1000 ) EndIf GUICtrlSetState ( $idProg, 32 ) ; $GUI_HIDE GUICtrlSetData ( $idProg, 0 ) GUICtrlSetState ( $idButtonCreate, 16 ) ; $GUI_SHOW EndFunc ;==> _ScriptEvaluateFuturSize () Func _ScriptGetVersion () Local $sFileVersion If @Compiled Then $sFileVersion = FileGetVersion ( @ScriptFullPath, 'FileVersion' ) Else $sFileVersion = _StringBetween ( FileRead ( @ScriptFullPath ), '#AutoIt3Wrapper_Res_Fileversion=', @CR ) If Not @error Then $sFileVersion = $sFileVersion[0] Else $sFileVersion = '0.0.0.0' EndIf EndIf Return $sFileVersion EndFunc ;==> _ScriptGetVersion () Func _ScriptIsAlreadyRunning () Local $a = WinList ( AutoItWinGetTitle () ) If Not @error Then Return UBound ( $a ) -1 > 1 EndFunc ;==> _ScriptIsAlreadyRunning () Func _StringAddBase64Decode () Local $sString = @CRLF $sString &="Func _Base64Decode ( $input_string ) ; by trancexx" & @CRLF $sString &=" Local $struct = DllStructCreate ( 'int' )" & @CRLF $sString &=" Local $a_Call = DllCall ( 'Crypt32.dll', 'int', 'CryptStringToBinary', 'str', $input_string, 'int', 0, 'int', 1, 'ptr', 0, 'ptr', DllStructGetPtr ( $struct, 1 ), 'ptr', 0, 'ptr', 0 )" & @CRLF $sString &=" If @error Or Not $a_Call[0] Then Return SetError ( 1, 0, '' )" & @CRLF $sString &=" Local $a = DllStructCreate ( 'byte[' & DllStructGetData ( $struct, 1 ) & ']' )" & @CRLF $sString &=" $a_Call = DllCall ( 'Crypt32.dll', 'int', 'CryptStringToBinary', 'str', $input_string, 'int', 0, 'int', 1, 'ptr', DllStructGetPtr ( $a ), 'ptr', DllStructGetPtr ( $struct, 1 ), 'ptr', 0, 'ptr', 0 )" & @CRLF $sString &=" If @error Or Not $a_Call[0] Then Return SetError ( 2, 0, '' )" & @CRLF $sString &=" Return DllStructGetData ( $a, 1 )" & @CRLF $sString &="EndFunc ;==> _Base64Decode()" & @CRLF Return $sString EndFunc ;==> _StringAddBase64Decode () Func _StringAddLzmaDec () Local $sString = @CRLF $sString &= 'Func _LzmaDec ( $Source ) ; by Ward' & @CRLF $sString &= " Local $__LZMADLL = @TempDir & '\LZMA.DLL'" & @CRLF $sString &= " If Not FileExists ( $__LZMADLL ) Then Lzmadll ( 'LZMA.DLL', @TempDir )" & @CRLF $sString &= ' If @error Then Return SetError ( 1, 0, $Source )' & @CRLF $sString &= ' If BinaryLen ( $Source ) < 9 Then Return SetError ( 2, 0, $Source )' & @CRLF $sString &= " Local $Src = DllStructCreate ( 'byte[' & BinaryLen ( $Source ) & ']' ), $Ret" & @CRLF $sString &= ' DllStructSetData ( $Src, 1, $Source )' & @CRLF $sString &= " $Ret = DllCall ( $__LZMADLL, 'uint:cdecl', 'LzmaDecGetSize', 'ptr', DllStructGetPtr ( $Src ) )" & @CRLF $sString &= ' If @Error Then Return SetError ( 3, 0, $Source )' & @CRLF $sString &= ' Local $DestSize = $Ret[0]' & @CRLF $sString &= ' If $DestSize = 0 Then Return SetError ( 4, 0, $Source )' & @CRLF $sString &= " Local $Dest = DllStructCreate ( 'byte[' & $DestSize & ']' )" & @CRLF $sString &= " $Ret = DllCall ( $__LZMADLL, 'int:cdecl', 'LzmaDec', 'ptr', DllStructGetPtr ( $Dest ), 'uint*', $DestSize, 'ptr', DllStructGetPtr ( $Src ), 'uint', BinaryLen ( $Source ) )" & @CRLF $sString &= ' If Not @Error Then' & @CRLF $sString &= ' Return SetExtended ( $Ret[0], DllStructGetData ( $Dest, 1 ) )' & @CRLF $sString &= ' Else' & @CRLF $sString &= ' Return SetError ( 5, 0, $Source )' & @CRLF $sString &= ' EndIf' & @CRLF $sString &= 'EndFunc ;==> _LzmaDec()' & @CRLF $sString &= @CRLF $sString &= 'Func Lzmadll ( $sFileName, $sOutputDirPath, $iOverWrite=0 )' & @CRLF $sString &= " Local $sFileBin = '0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000D00000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000A343B8DAE722D689E722D689E722D689643ED889E622D689883DD289E522D689E722D789F422D689693DC289E622D689E722D689EF22D689693DC589E322D68952696368E722D6890000000000000000504500004C010300448DAF4B0000000000000000E0000E210B01050C00600000001000000080000090E100000090000000F000000000001000100000000200000400000000000000040000000000000000000100001000000000000002000000000010000010000000001000001000000000000010000000C8F000007000000000F00000C800000000000000000000000000000000000000000000000000000038F100000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000555058300000000000800000001000000000000000040000000000000000000000000000800000E0555058310000000000600000009000000054000000040000000000000000000000000000400000E055505832000000000010000000F000000002000000580000000000000000000000000000400000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000332E303300555058210D090208106E62B27EE4412138C300008351000000A4000026030030FFFF77FFC800010053B28CB9060088C82C01516A0859D0E8730230D0E2F85988FFFFFFFF840DFFFEFFFFE2E68B5D088B4D0C8A451085DB7413E3118A1330C20FB6D23284FFFFFFDB15001DFF43E2EF5BC9C20C005589E5FF750CE80300974283C4045DC3FDEDC8650F48C81062536A058F45F8DDFEFFBF4E0C833B0A73088323006A0758EB5A832B0AC745F01D004BDBDB6DB306F45B8D0D50503C1C6A0009F8EDCBB275080802181410538B4536DB7FFFEEC00A505647FC8945FC83030A9C45148943052D6A6BDB76F70953E82A92884309722C15FC9876FD9C6C65145DECF0836D14DD6EFFBF344D108B550C8B0239410573058B04890269EC509EEDB6BB03F45045055108145069105273FF67E77E6D670CC424837DF4027505B659F2CC7D5D5FC9E553817BAEFE777BDBCA381F8B8DEB0F686B016EFFFDFFC2CD3C31C05B02435243204572726F720D0A00CCAE61738F0055B80192435D4090008CBDBB734EE1C7000515C74024000604C9C9D69D2CD9FF06201CC9C9C9C91814100C0FDFDEC908283E7C908D7426A4567F2F2C6CAF55311ACA0F88EE7B1A8B423DF6EEFF0485C0752583FB050F8F8C118D4C1B0E96D3E089B2BD5FBB1A8DB43514BC27062B08E7F97CB73815010A0CFE0010963FCB9FE7721485F6CB4A1885C9A9ED32F67D5A1C6F8E2B207867746DFBB79B240ED1F9178D41107502D1F86B241B1582B59B2C2B5B5EAD7636E81EBABF96060F95C048250CFE150493E977EB885D54022CCF90096FB8021880B50905754B433FDE601FDAC76D3DEB900FBB426B7763EF3E01FE8DB65FDBAD95C3899F536BFF72F66E906F9F83E0E08D484089C217D76E98ED631404F3F089DE100AE57BDB585710730B4DBBC22097C10B420803376F1BDF7F23A4E583EC3C8975F8B9248B4B8985EEDFF87DFC8D7DC860C8F3A5890424E88AECF125CC2EB7CC18F88B89ECB86FB7FB6EEF55BA664357BFDB563F53BB110D0BFFEDC606024601019089D989F84349A9C1C2DBFF6FBAEB0690881C32404239C872F743B2157EE109F962C7DC5F51E98DBF4F8E18BDF1B799897310895DF48B460F1F39D87BBBD02EF589C30A5F5C241A44240495DBE51D6F0CA0BF60295E08015E1A1F6B7C97B98B2DAA764F575052351ECE7D1CBB4848A73A5CC1F76F6FBF210881C280C33C05102C0489142481C718BD0877AF8B39575125B9312A894C2492452E772BC80B04587425B9BBBF93B000528248191B870897C9EDEFB680CF8FF042C1E3058D343B0190A37DB7B74EB583AC25288D930589CCDBB22C4BB789410508080C0CCBB22CCB101014141818BFB6B92D1C2F8C27411C3E088D8E17027BDDE401CD8605413BDBE9B75AFFAD1D'" & @CRLF $sString &= " $sFileBin &= 'F00B0F8E67760C03427BF709F08D9F640981C60C2906AF77EBBBDB74DAB8801883EE80891C4DEB80EC7B6BFD4808FF4DF079E0972F97640538C8C8F7B7812C918784010B3088C8C8C8C8348C3890C8C8C8C83C944098C8C8C8C8449C48A0C8C8C8C84CA450A8C8C8C8C854AC58B0C8C8C8C85CB460B8C8C8C8C864BC68C0C8C8C8C86CC470C8C8C8C8C874CC78D0C8C8C8C87CD480D8C3C8C8C884DC88E09C384EC7F8C8050C2B2DB9E42144EF4663605CCF31F02B2C1919D9CA48060BF44CF81C19191950FC54002C323232F258045C0839323232600C643819C8C8C8F3F8963CFC40979F91E7009744048AA0BCB8009D8E3F743AD3E68B91A825ED1C913608B2BA54291CB373226958AF5F102CD353026480C35A05649E4E03A45F5665892A7D84745F0301FB179636687056DC14531486454A81F40B5F50BD91DA3B5F08476E86058C2C43255F5DB7C329765B80E4BEE4F25832B29DDAEF640B8830323232328C34903832323232943C9840323232329C44A04832323232A44CA85032323232AC54B05832323232B45CB86032323232BC64C06832323232C46CC87032323232CC74D07832323232D47CD88033323232DC84E0884C96CCD65587875874A719416A416E5E56C791CE7824D5896B8B9AD191EE34D28B6589710B5091919191F854FC58232323CF002C5C0460089F232323640CF8963819798E8C3CFC3C009740D3E91919044417675C891348A56A5E89F65FC2C4480C9F4C048D4874749F6EB81B83189038895DA8B8A54D8FC142B71BF90822C991C483FAFD347FB6040BBD75C883FEB145BC3D6BF9CCCD062587A30A40989FFE7DC9F483009EB5DC89BB040845D083F857B6F8DD33868F251101BC76060D2FE1B62630BE6B8993984ABA6FB85FBF04398B9427B39C05FECC000FDB75BFB7941D83A4BC43D4850AEC36740F50BAC4ED65D8017E4C04037FC6C289E776044E6FBB7145E056E0BC9CCD456B3F16C70EF80989435F2FB80FD43A16BF7811BF0B8B7AEBB472F421CC0E2F8B5020ADA391ED395B0D060C007D767DC606011314C6406A5018CEC9168C7D062C30E8B2782F384F8F5D856EB150FD93758E70308E521BD9B674795D8C759011FC3C8E75A3F18B53B329C68DF587FE7783FF1239F07407C7433009C2D2017328D1B2ADBE932011532C04183B05BAD896EF6110D970058E5AE1BBFEA6FE76308B48DFB97EFF568BB52942C05F6E4B1483C20183D176B56CED00C1E6610E8989A0C4106F15728F4B2FFAF48845F76DBBDBDCEB09182A0C21004DF7741817876D77FF55F788104039431C7B7441C622FF4CFF36EC1B2CFFA509D075CC6550236B93FD89F0C1E8186788536A1D1078C789D86B0C7CEBB6FF89D7365A0BF3C20C4C8086F051ABFF1723890B74458B034E89F1D1E8960DBFF0AD94F255F0D3E8E401F7D821D00F43FDAEC085080C0C812BEE0077CEC165F083EDAC2BA725035CDC3E755F61241B246F0C2DF091E9C60D89C613213835BCFD37FF0FB71A89F9C1E90B89660FAFCB382B2BB4DD2C5F08CA29D8CF05775D4B18FFB781F96C66891876328916508FFB7EF7AD4EF8D811560C2B89FA29C329CA8DD13103DBD025A1E119890E36D3E163BFE9A96690FFC75689D60194B765386081CBA93F5789DA36DDDA6D5607FAC1EAB11456AC01DBB7B6D0150FE70E00FB5FE376DC9B188C210F573B56BEC1634BB9A13C4A084231C9BA851768EF4B1FDE63C9EB0356B4B7F6DF413D3C77F64A79EC619C83C31060D82DD76D80C85307326A76C853B7B3C5B64FD15198C97FC6536887BD5652489FC89D5B68EF6D3E144608A65DA325438742DBFA31C2C1418B483D0812D2AC75A7D488A66F86D79EC55F5C31FFB6070AD6150AAF049F441FECC89FE90CDBEE21F26501D0FF30596D50EECE5400CE70033C90EF330A07FBC8F7D021C676BD5A2E02381763081F6DD26008F0C6035185C655EC746F9460578B064FEC4FC118F8666B106E06D3EB83E30169326E1722722809D82E75D9560EDC72584F1C0C45313CECBB12B82910753955E85F7D34ED7FB624CF5F1C89FE83E601D1EF60AD8DB91BB23424635BFF38BA8009ECDC09F0423B7CD6CA1D8EC3482F2F31B45684FF80C231F6E0C6E309C3EB2856F80BBBC22BADD1EA230457F7DB81E30B1B5B701AD931C6F8521C19AF6DFF8101DE89D383FB01BF5BC85B7FE4DA77807AC4081DB347032FD88585D2511D2ACADB4BC3F6F183E153EE777801FFF7A4CFAD50480873E4A62E69214BEE4B75D4D96F081D6D81025B6166176A0405ED0DB6BF000444500406425D7F76F31B986B4DDB90B90B00238C1484155C1630CAED5F1F025AB660D881FAD1D2EA5FA34BF34D3FBC2055800415F686AD90CF944DDFEC8D0413B6BD6DEEFF17C1E00689CE8D8438044B14E811C281F26F8E8DEDC008D24604F7C1818B0C6DCE6CB7910E57021EE4151286C2B6DD96242101C819E0139673FA49E2A588894DDC5F3B75EC0F8307228D706BC80867CAB1B1F0F18D443B0407CCCEE4B88BD1DB4BDC0C04B246460776CE040F773D03EC1CCE76A3163F736514B5B5D26C46F83BDFA83A01E6DCC122F1414DE03F80418F3DFC3D0F76CC33318D9F11903AF0BA08E49BB9262D3577DCF0E862973072D63F480C0964C3BDCE848F08095F2081522B021FA8E524C12E18F8D639F32360731B26B75FEF536FDA436A8311DC1F72EC1BD813020DEB0D90004FC9391E18286AC32C4B7734F8D8DE589A106B4548A3DD602A6438967756C756C3B70D4C3A8911F5897CCFC1E2F13BDD0B29541A041D031B100CFBDD5DC06BA77416'" & @CRLF $sString &= " $sFileBin &= '228B8493CF488907A44B5837157A915501156CA10D7080286ACFB6972DE7026B8D4797446E941A5DC2DE0F82EB8C903C27100803EFB03D472E938131CB21D8366913CE7F96E87928198703AED887EA28AF6EBAE930C111617504C97F0190342FB7A00141548E4018FF51140242C06816FF3F1568AF1D365726AA2A4D77F7F62B53628398068C839C10444443714325227439C67419B45B28B6FE85940D942039BBC64A6C3A7C15741ABB76F81896101E61322D41DB5DB864103D48FF5C13983A8B9367B5E950E9407FC423772A6EB1E1B6092B0639D7B773B224040733DCB6975C0F75A9CF471273A2041262C2EF0774EFEB94BA33EBCF1FAB52A9B94ECA53D051DBA506C74D6D016FE9041284BE4FEDCF538C948B9C0E06818483095B78181835C6CF0F0CCD420B060541892E7CD79CDB26039C0675465594485BAE0E4A6D3E0CAAF5EACEEFF47C574635CB559C860D5C17DB5C9606408B4CA4C8EED00CAC46003048447607DB0A93013374344C4E5C3D45E440949E292561761B9ED3814E74004DBE37ECEB96336A7F8C170B4BF274CBDF9FCB51814AFC9F37C73E931BE3C396E3A54307CB348DF40D469D487803F2F0EE15C16118BD54330C1A304E136D205F4B5210EA8D023BE4045B0EE08430A0CBE17EFCE078144F9E880B178F36B6E1991E01F0D7059015E4216A6078D31453568D0C7F58B2D310C8DD79829C18A00DF3BD1BA60E9082B4512F18BBBB2957267BE7840E741581C17005B3DD04EFC273034431140610BD91BA5B184F7F89E3EC74321FB58D56BC3B8B7A1897EBEC08DEDD8E1B395A142E85656A8B86B83E5782D73AB1020A6B5F05D096C5235856EF6FA8016E9480FCB2E5C6418B82D8ED4EA5730B0939AD980BB8BF5716E0B1A7BC051418B995B0309F018AF49F0FA193752F092EEBBAAF8DB09FDF17B8A80FB7014D98F488E08B574B3DC976BBD84F38FBA1D7ADE84B79F6097CB7AE5998D68F1517E1B0A417B4D714CD9F4DB79C362A1C2C7021D68678F83BEB29161370E8D8A397214CF0B0DA0CBC9457DE14E30BCE1A87D9975BAD579CFDF5A060891287A0604F0DF01604D283BF57003D8901B700B3DE446EC21CD4F06DBA9D46137C1406B83F5E977D8D3D5C717A7E10FA1A9A5DC3184FBA8D032F0D9C04DD811C790FF02B5CE118BF1F2B83720F8F8D802B538D193538BDBEAFD00A56030F68A7CB0B18FAC8F0C283632F849E4C04B95D1B14F1FCDFF9BE8C0D7F236C08815F585381EC5ADE0E8634F48DB585DCFD90EDAA6BDC97941EBEA6D05995D481AD16D8128D780CE2B0CAE0A946C77EF9D3E28B8D120456580B68F3FD5A0C32050AD54CD92973075B5A7B0C70FA949DE81D947B3BBC85B2AA8D862ACD4C1D0368DF16A9A6D8B870B71910E4DD4BB98FFDBD90B589898DE00D83D8B7458BF8C504955F8B10DCE183D88B3507BA8067674BEF24C5951CE6933E42B35FFDB1890F39D077C3BA0EDDF80E1195B664DBEB2440E04CDA83BDFB3DDB3AC66D416F398E3E77DA7F71F86F6D8B134E8F4183F90376F4B91802A76121FF1F0E1FAD366BDF8DDE03792DE49750E8A9BFADA28081C3A381CC26C75FC15929DA0F891F10EC70D261C786F05E81C47392761F1D31189F40C783E58DCFF712EAB39C01FA2000ED346C8EF858F0BC8D43208C8E8C89B3834FEAF1EC8D75C81B018CB4850AFC90EED96B49A22A039C0D0EC7CF35F70EEC8667EB0718BD275B9404CA400F6F2830BCE8CA54049314CB70D3D94F3CEE2FC37408441BA44541CA5514AC1F513055F34FFC5DD989B92D3159D70427040F18BDC61A1A03C7E49E238EC12349F019B0DF7B08C3600FF4108910F483C5E0D016D4FEECE00EB27B0BD701006D6C60750FD2A17940161C3C8B383C89D70A9D75571C0CDECACEC1902D6FF84DBC8223DC60C85C69365BEDDD88321C0F4B04A5942964B073AE3BFFE13F490DFC3E51008008EB55B0511BB07089D78B96F486743B02FC4163C48BF8227E861A6663F1F2464A1628158E580674F13DF9CFDF60EB0A1C15074FC045E876F5457B059669A4ACE845A89DEC06CF1309C1019E00505608C08E6DD02E1508AC3C184C787787527B8D55C41476271A14BC8984402BC49DA0135337C05960836B055732B659C09C3A86341CA1200CA1D51BA1189E12E85C4B876DD8740896D420C0BEBF57720E6D573E9CFF8E31FF3D7B2DD7B0280179A389BD305CB7EA2236845A0B7FCC7C07DA5F8215786DDB499CDF0D9806719C08949C4F6C23BC72986A45C0F44BE12E76A0BAE724A0010F8673B1F614ED84095B0721081463DB61AA0C0F986CBE763BD2F66DC90E94E258FFBD40FF98444BDDCDB08885AB0590E78EFE5803F8E6DA29F1128D7AFF3A42FF5418ABDC91820426DC69E0F67EB4639E613995397BEF08D076A399AC879F766F1CBCDCFE5FA221907C93FC763F8B4493F0403BBF75354BD02059CFEBA83B146FEB6F17F476218D42FEAF02D52BF18DADC530836D4D9C760BAF352845F7658339C874D45002FDE2D4FE3BA7FF7F0F97C285D07411B903D72EDB120F74945A8BD067D2EFCEF50F831A6A0C83C0020E93C2F5ECEDE6DA81A0313EC085D085FB011E66920119037FDCD9FE42063FD40F96C08AA0DE85087F96C209D0A801730ED3098686A5183BFBA48B1C63ACCB1AB66F972521C72CA401750A05C035F12D0A1286F8C25458688B1926E333AF3F8CDA25D9721A2B030F4689D9B0479A312ED6D865BB645645A8C0A603292CC9810C00441E3D723B5AE0DC01F26BF36CEFC2F8980F95AF0C1451058C192FE3F8A0E0F290573AECED8BE429D0'" & @CRLF $sString &= " $sFileBin &= '890A01688317E2F1C1425EBEBD001A83C4A1ED81BEEB7FC4D7827A42BA8D910F0CBE06A474638B2E015F6A165DC54DB029D82A84066E54821BAE052C1136C77346EBB2F9DDB2C8BC72C0BC4D0899033719D9DC5D0B1396D4050BB8BCFF0DA0BB05002065D2CD39DA770E0F82B6FC86335B07D2C807AE62313296A9858DA87F4011ADB5ED227B1DD67A980DC1EFDCD7AD94D6C04A0E8C0B18204C8B8EA312AE47394117FAB254B91D55849B28031C490B50EA739C501C1F6CC02CC46847D029CF6CFE7D81E0F88246550F9590914B68968696930119398686BEB42108957C8D7583EA11A1B3B02A14B7959AD04A75D50A838DF82F0845289FB8694402AB9C06E61B697BB1B39681171C10A4C532F06A6D07860A35EBB44C4610D50410FB2E165CB1D7445B38C02D0B152016FFED00295898DDB6D71A0D46B5048F101B66AD16AE748D1E3D14A143A5C30EDE455FD562DFE00D86919191CD950B3C4038BCB1709D3CBF1A891474F1483F3A212B3D8686EDFA38D20C261426B8AABA108E6F66435F1D67E347013843B0DBCE35D571FB1390DE4FA039097356686FB6201B42027517FF0D3113DF5003CA55B5E2043A38041AC77AD6DB74E9DB9039BDB1231B0839C7C746CB6D0A284879187D0A28E4C3E11F3A9B8E5874277C03523CA0D2250F9C9214427AE3D6AC1C21BD99FFD2843605FF5C4C0BB38021FA0255E55B92E91A74CD49039670259C107D9E83D8B11FF8A10E46968C2A0D22FDAFBEF5FFC0B92E29C1C1E91FF7D983E1C4C106D3E8F16D45365784B44828E002274E2C54BC694E450EBD5ABB111EBA071BF16052AB9D3E07111E0783D3DCC797048EC48D7C15E70D1C84CAB88B9EF2DC60A97C8C80BDDE00808386821C803BFFC12DD52D31B87837483B74E44212C2E90F5F84BE4BBC466F9517ED05A4BD70B7068DD89E5D08855433FFA235EC15FF385D7225734CBDC8476DEF8D064FEDC68BBD519530DEAEF1F63E5C1539C30FF7AD3B85A1C36F43380642955C4186264FD5BD0BB15CFAD88B83560960E2FDBBA083BD2B01888D5B264B0ABC25762338C14A5A0E6848EC76D011567416E47711B4193C1C285B454B2D360BAEAD92AC763F4821C30F7E3FDA13A0279D74999E944DBDDA041B70BE0588D98C66DB019F7841FFB9B229D922A83D186EADD3E8ED0C520259F81FB8E04FE7D0C1E109E86001DC9AEC82D9B4FF062A15043B528DF795B2E62A85A457BDEF76813BC8E8203C8D3C03BBAB1F5E8783519EE8BDE53FBECCE616720FC5D865BED40A6B609710B368048455E442BCD8684305275E2C85B37D068C01CA878D6711BA9FBB642B388D5A84FD166F959DFC6EFB182D8B5495C821700939CA7306898DC80D5EE17905B887B10C1C38BCA25A900F0C3546048DCF838260D25D21F6DD83E70F28C001633DA9CD9675070B09690D04F386BFC9EE18BB44235CE8198C0B216E74B155CFEC61F84AA8FC7C10735B4A046F194E9CD2E5308A57E30433A3908412F278AC2596274A14E1F9E5BF5DB88D5B0DE52991B60740BF2B60C0F5780C00F288185FE295F21452DB0901DA833B1B83E7C606AAB8FE05089D401DE0EF341A517FFFB8A418B985474C98B41C7FF536E277950C01FF798D095F6B850B5721FA975EAF4F8D6171B2505AD8DB37C50A75636931D8564C2021754679B23AB3C04947048B9D8343B5412E3D10657BFCCF3BF5732A5DE04907B0B93842B61B431A98BDF61415873116BA0BFCD14C5F1374E589A01812395C8D74919A4BE8833989C06526BB214348755C2324F2D9FA06069910E6C6B8ABF13B0DF249258512A5B2756AD81780A3F80AAE49FDC176563B4D872CF6DE187D8C3B39FB0F9237FD7533048D17FB4239D1BC6C0786517BB487E9A6F26747EA6B8CCB970E0D0239D82A0D586D22C6C20C5AAB9D54908E888B37ECFD5A52AF8C0991D34588833CA94997946613D9DB39783C478B99C9285226ED1656A6BF9C19295A63FBE52823B0F28D531EDFB991C38A159114BEACD70791BDF4B6CF1F2DDBE3B744272016C5F80F0D1C9A74D5BA49D944484D87C282FCBE511C4A1D076211082C69D7051A385B57E4AC89C3CCC608B8BC0A96EF307048C19285785B9F1E58FA0DC704404BD63055F19ECB05068B6A2807B370A1BEFAC8DC01F03A9031D8CD3DE326A37D115EED06ABC598A182339A46E12D0974BDC2C801D1F40B85CD966860760397C59D2CBC6A7BBA4703951A4CDF023F7EA1BD5C8E1FEBDF850F02BD7EEC6BF3108B0C391C8272E87FB79A9DEE25148DACED8F04E7DB5E73A8185D6348188DC8C06E7BBABFD8850C301BADF9606B7804694433037787F72CCDD67BFEF5487FAB950C6C36B0F0C1E7072C17504C1D8D44F08162273C8B38B98D88B658E1FB4339B80576B60789487536B381AB41180608E16E36FBC9411CBECAC4740643B08E950EB02C6C502E1C75EC88BDC72877859CFE290580C8021193A36C1864C9D0CB6F5EB4397223D19D632F3C4B881BA94B1616A084E76C9C60DF57173A4B5953181761DE4366FB36C10C4A09970F0B102940613BB1F4837B14031006114F38931522D41D3F101F3C762EFDF56CF6128B059E3CBD8A4839D06C7E939A1BD662BE027B0C80D9D95AA90AB334CE96ECBDCA344D7752B8C55A946270A470690EBCD162FCB68F20F4EDE0D8771B5FFE6F06DF18971C894495D84276F383FAEA225DAB039D11200D761E9A22D685B5F61C31435996AD35073E0520DC24BF5E9665E028E42C8B1B1A9D2C1F8B3378252CBE2F4D848D50ACD7360D691421F9B50735A0858BEF1B29D09F96A4F79A9FD58D34'" & @CRLF $sString &= " $sFileBin &= 'FF1AD6741DC13286C4ACEE40B6D89E6601D33984782860F0E2417776792E62C48373EB6C2E8C70175F01C1832006D2960132566C2C511B6A3644CEC313321A01852897BDA7C77E16F77F3C308B143987CCE78E19B1BF9F057628890D596AB5C6B3455B43891C09D99BACE18CFB1CD68BE8DC2C6561B60A2C8FE78B91B6D2D35138722491614BD93956241E2052ECC8581C8D1B911A940C8F1462F498FF8EBB677661160AC431409485409DE14E4640E6A38040295293363E2D466F5BAFB320356906B8641AED94D446790F6D0C48025A7290810FFD33DF96E954680EF2E244D893789B63E3E0A91C966C649CF07B934E0A04060C232E2D7428158295816E973376860E30E11B2F77D9C0344B484DB32D090A26D8D3D84A77E9884B86ACC560E07CC41BC4C6528BFE578039C7642C19784D3516801268847787AC4894C038954F950E2CC4864D85D0440B8636F1DFF63024142A7DD84129F8083B8D072956F850762A07697322A2FB676C3600F2384701751442120F94EA07EB221A13043A74EC4A9E2A94966D903DB12FADA4EDAE7738BA094121D9BD100D3219318E8BF80BBCB273C676FB57102A7E1EC7469B102B240254D0468D31F85C100139BA73D39BE0A17623DC7F890852E71CA3C2E9C83704BAC0301DC5B319C52F72E9B08B0F750362945231D231F0748D352E16AC295B0CFD5B1681C809CC90D2E68F8F7DEF2B0C53868911C7421C0079A0B2049D8D9901BDAA5493AC40957404DAA99B2D57AF853035E4E948A7850C47852786757B4213FCFEFC4EAC251B99843880EF7188153B8D3B8F86164C6D3D748D82DACA18007D1706017E07EA6305AB0C682DF02225050BC4E8318363D02F1476521CE707852041399C45B482137143650A73219951E258474F9D5CE78D526F5BD802DE6E7C93F8722BB4E6803CE17D0E3E890C82AB119DDC624E068F41748255F917952458BD1610D3131F91690C16185AE4D66CC9628988F0FA3B28418D42C248CE9549D2E1B516CF2F77E9E0597F036BF1636FE04DB4393BEB1D902B10CDB138EC02E93031E0FE0C6CAC592CE22D278B39600EF9D84F8B5C9F04DC5612182A8C7DA1F0D832BC33B2C2D876B688DD9CB888EB7A8B375F07186B67712AD177E3F871CA1859EAAC406176221E275E9B57293DB1566A34982C2D5A9F7083507A8D913D8F99852CF0CABF98CC3C9374750AA4346887AF85738D63791B3A55B0EA1B72FF040D9E4D17E447DCFE867EC1B63A7B74CB0689188633D0EAC09C9611911BC98FA6C26625D8010C9E071F082CAB54434D9C62D65481A648D4A378F15A8D28761F910BAD6F59ECC250ADDA685850DB8EC562370FC373594BD4F675AB271163443AC2443B7B0706B076420FFF4F3716597826D021BAD4198B2C5B6F05A4149DC6D16C6B7674CB14E8488DF408C3D86B775B18F63B5DB44AF0F9B831A1F6B35C7C9FC18271E1B94EDB17A3FE238C11C6AD4929F907040283C0C317670996068CD5AD487485CC64841B8B352C842105C8AF129D0B91CBB2852AE2DA945667C0C8A5EA1D9C96D9AE8D82859387C4188D14888E615DECC6B6C01521C833E01B8EDFB1E05C39AB2B8D1BD3FB7EF86D8F07886D34A85CE009BA8109AE913290B60C1F9E0517AFEB2F5AC8BD593B76F66BBC21A801C7D0AAA4664160D7D040DAC99444FF8CCF94819434F123F94ECE130287E7ACD7B6CE2B93F469A48B4305086690EF83422C046215C9A10EBC09BC92CF6BCA40040ACC50D0DBBC401688D5CF38F8FD92C06C08C98DCF904A6F9078016B7308F534D240D901108C425D9E6003A73695694790FA3CE4095C38697D14FF96D1389F473B7DBEDFE0F41285B0401F74E5E5B2CD6AF5D6F2F9FD80A77B011BFB130684C1C61366290877DBA408167BCC924CFE7CFE0A6CF508CC0C9EF1206AD6DC8A9F04FF09E2AC17635B133938FC5A1620D620946A54172DD19DD6F726431FB1710C9D2D95CE5A9A4F3358A525EACDA01EA1967BDF36830B077506F805F86A8E142830569CC2F9BB9E4B2F587307CC95F8468375C2D93E082ABD0A1976D8BB341F29FF422A1B244BC3B2B1509D2A551939E9F5668D74556B8490F14A469F9E7DCCE8F8C88725B495803508C604A7AFF37DA5F43985B0F00D48C3849186C22C269CF2D4C8D98B2ABDD9EED03B102906FF1A1E4DA7D8D2C3ECFDB9C307E9D4226D17F0BD11E1C1644A3A5B1FE8C7E8690C1E31883509D581F4260DC9FEC7D3398BB59069B98EC13699A4BFAA4221CABEF470CD5656BC0854BD9034E121BC01DFF5E37081188426CFBE9D948E21238D36F8CC03CE70408692843972DB13F1DA530BF0BC959524BD5284E3C8DCCBD27B4B4E10F78AAFD1844E115A02CAA5D0A78FB4CB5A10897AC833791A10A3876641FCFD6526956403481C7D01AE7E84FC394318730B0D904B7AD8D656F36A3472386F0718798C8B95D06BA0822CF36287D1330B2F439A4C200601614B020842BB07A76C30363F01ACBE271C607E2741F77E8657EE9B504389061188D7B1E032F7FA89FA11645B067182AA9864309B215A07B346501280C749538C9AD9EF8511FE5A241E0311396C7610334F96630731D2B4B8B80DDD19F166A44B83E90428C8C12B598D71E4F68B9514957295C4805FC06ADCD93D562996B5C6A547CCC17830CD31AA407B8AEC8CA3DCDB59818C0C0F83F71582C60C1B056345701A55D6B53D6DDCECDE88438C111009C59775D48C8FDC3B8238EC49386120442DDA235D76D4908CB0E1E886CC30BFA7E0EE64E8F0BED4DD3181A698A44A9F8D55C053948A5946AF75012BCC809161D4A1'" & @CRLF $sString &= " $sFileBin &= '6291ADB4AE3C34A2AAFF0B189E763C24EBBD894DC06710805640452D901DA080148FCF40ADE254A620F55126E285E46843D10CC15D54F18D86021CB9887607EC2C89D92E34EE584842BFE811CF0F66C7B59FDF93EE0004098C2776E3B8048A009D00F1BAF69BF96C2C45B80C8C5E440794EE4CE5CE5E5C1C0B750B7697DA946BB3C535478A86986EB1E0FF74C1D3E239D37311C36604581D8076DB46431072F5202C0B2C9DC3B866174240A03F09E1BEDB76F44AEA80C3E6DADF80477EB37B6B0C2B7176ED16AB9E1DBAE1117C380A5A39992C2AF00F625590EADD989C252C29541829222750C2792002DF5C04A689D1498928872814598C98CDA4401308D05B5E4F1802BA8227475DF4428F5FC4837F93C9745A8B87DA908DD5C61B81B71E8F7C574858C4630BE9BC6887147412F7DEA760FC132C2413C70A2EB88238DAD3E37AB38AD64335BC23E8B343357809068CEB968751BCACDF31C9612C896037417F9000BD83E50274835C26AC1A77091F5DD0B7D339C277F25510040953F0201C46D1AB2B7805871742D2AE2B5E812C08CF43790A36008DEC0137F85B406B41496F571CB00B2605466385D2DDCE3A585F7405C24E1EBE9883078FF6F8CA2616BA84100DA8C50D2FFE7E6F38932D0C39BEA051849B5D4D08BB61A870A25013CC832D22025E0EE3E07BED411C450821A145113D1B65194D0C599685BD2E80CFC9537464482D010F08D24444C86ABC820BAA89D09E22EE0D7B85901C541FC61488BD151174D9051C951CB663377141BB899D8B56CA8E50880DB011B8F9340F97FFD04498651981483B45F072772A042C10817FEBEAA0FB895F8D5E205E10B9149E0972B3F30D2AD591DB4DAA8A978F7C7249227E6DC763035E185A337EB8DC968CBC65DB3F4C2173E609DB40CC8BE8A39EECCDCBBBB90DD41329C8FC5C75817E55F620269EB281906D78E56D9CFB7FDEFE841A06B4E1824C01432C2FBA204323BF2E2F88ADB5E6203F0E2B11059B905D9714085D9F415CB934B56F837203F011102B5522446C36B3350C0F14C390689388937F451482BB15E90BDAEE1C8B105778FF280CA0C143EC8D833B2341AFAB72837AD0754DA04AA70C1E7EC7F80D24EA81EFAC501C162D6283E603766E8803C7DA205AA7912C06D00238B24F109C8058BC059A09C74611CA109D2DA1562DB905B0ACC9A189D8067659444DB66F24C2B5AD234820EDB834815A368F4E357E4D12D893755929925B729715BF2CFD9DD8301CA88560444A141C446FEB1AAFE90214E447DDA1EA68FD00876607F47C5AA222A787B6756E2A5A311C3D2A46797BF0F8C99F3001564D1C8DF1B59845D27C1B01B534D69BFF8C4F1D69C26D8677AFB9302B29D88901DAAEE00132F4AC270BE4B8F154C71B46A902437A6DA045E573EDEB88BF8DC181F881D1D0437595140F888428E82F7703ADD9E00F7EF3E37765C71E0ECA5E868F451C903B20C3893FCE2581C4A559157B506E671551BCB314AB5CB5F8EE50DA31755F9E0A9E5585FF74D66105012BD1CE2CA2695A200C10F13F8A500CCA7FFF17EC211577808ABB0A19446C8DCD4848D440EF0381E151CE02F0F1EB8DE2085647538B9A3283390F7C542F5168C701FF82E28BE00D8DD4B298C1806604C00282013D7C7A1ABE83BA0B2807101B069EAF88D1AB9032D16E62ECA50A27B11E7EE5FD47DFC0F9E60CD5D0E8884417019BD86042E17EEB8396ACDBA3F038A9EF3070524A703696F475104F61E870B271EB7C118B065BF4F0666DA7EA85C3082825BECA572A9D0610D10C416A5F93893D8D4315D104B05043C2BF06A24CC8D22906F43099463AA4BF38D72CEC20D8CE30F83C1C81C68AE70C4F57742A65AC5503F055BC5E0B260AB4E76401CD3008FCC57DB191545F3AA10892E6F3ECC24146DC75BE1CA49B6C6F20D9D618DD14839C6CE710420C084749AA76B56C403348361FAA2E44971040488F483D0675A3EE8777788B3A4B245F1B61F8873F43388B73145422C8B6D6C1F639D0726310308E17065B7B5503BAD0F83229F834D5BA9BA1343B18EB031329377794A35A47787E48EB20FDB6B51955DA42C82C3B4DEC73054BD4D8A00B69F82C848888DA97E804314169FF75E089719FAC0B41707CEB993F688B702406AA89788730EC94201CB80DDF523078216DFBA05E92855E0A7B29185191B5A5D8B6597DDA8E76E3161CD916DABB915DB4301C9FB836F00AED585788B08B4934F1BB6E893AD0A880044D1BF6DB76AF3C9724494017D83640441AA120D4F5D48B4AAFD0554F36B46CDD194917CC044C8B0ADB5608D81CC86E3D2813C4772B7000A0D07DAC4F49AAEDC25996791C80A8CFC476CBB575348FED21F30AE4B726477D5F818B374639A40FDB856FFFB7107714C165A8083CACC1E7081A014152AC54FB26E00945A8E40B0FAFC2390AED553DB1FEE904C7424C5BD52B144A4946D095BA7DF481C66C0E22035F900B8A6D6BADBDEFA474414292249E5574DEDAB6F675C021DABC59B80FBC518D44330C259A5B070D089183CD54DB098F19C4998C42BF4D82028992837DE0060FD7F68D858BBDFDBB75EBD38388B5C6C7AC7875BD00A5EA5B72044A01C910856AB675585C68A4D3D1B2ED64B04ECE7506E475CEEDD7DD1E72B4290429C734894F29C24C047AD66E358D4C7A4E76B11F7189AE0D6CBDC0721A426D6BBBEE6B0C555BE0FFEC49B85E015A087629A1604439BBE219D55A1508178586D30261E603925DE5C0B0BDB9059A897B1C51B0141C85F6044373181447FCAD5158004953E8120B354C868E34F3395C1A18BC6DDBB2202CD01A3C0E'" & @CRLF $sString &= " $sFileBin &= '400B44720348558372FED872D443F5E348BC407224C37F7AB606779A7A183BF90B7E4297A5705167D2A52E3D122DB17510A90A4BF0A74822046BE90B0468F51DA1150C111AE61D5A5C1668C030E690E02F56964A701765918031687784606CEEFE0458C90C3BBF029ADE1648813FA705D6D1863D3160DE8E115619503900CA05111786F1B259E3041CCB1304657A006C63022B7966636123BA1F8242B049367ED35101CBB0395DB0734F42B09241AE9271B1B073AF5DE0713D3601294E1E0471331B5BDE98CCB03386D38AC1B747C40CF80376058653CD5AE4E4CB711DB2A1746299600D5A5A6203037330015C1BD3D239C281BEF95B620311B003205D70E082064DC307C114E2A7047301F695C9CFA604195D4A0343895D9B90964CA7AF724A1900B9AC5D9573401420AF00D90561E329E4720583EE40F303EF04D0E263A899F27A56F9ADA2148CCE0283FA0DD468C73AC6DAB89401F8E4D31D03DCADB5813644055E17627F807DD30BEB1DD16594AA5A01DB497493B10F8451D9587713AD4591C03244B3EA06D4E182A43AA75833CCB7BEFB8D5C1B016509D64975AF69D48D5E01960C38D8F4DC73C913D4725B9BD8F6D8F25DDCC9119A8B3B5ED94FB408CD1319C0D7C9540962FD6740DAD5ADBE71B002A4B83975E8F5F204F0128D582BF81239C3766E57CB5599CED729C1070DBE09032B7D45BC01C1018B2DA8356DF2191E3B0D3075B7AD18AAFBCE7EC0019FB82CABAD2D0B1A2133C67FE212F0466F1688022975F5B675CDED3F52AC247258DC6689E2652A07B75F73065C5B54838EB0C9B95746140D42F817D1E59C2A55A0EB244C6D02FF61C9AB03F7D621759CEF85DBB6D0A219690DA0479C5C9CF82D362CA06E21DE2601C88D1C424C254C5865136E6A99B0DB83814E6613EB14DD22B295F7913E0B558332BD521EFCEF16EE2A299862F53E2C5B024DBCBECC0EF04E430517CBC1315511456E954DBA5858E0BB57168ADBAE013D29D654C1EEF1168632D2196054E0B86A74948706DFC05D25C0A1A1A34C0FE800DD88CB47DB6162410B1707890D1AC7B230CBFE0B7F1331094709320025129FE2252263F7C34BA68DE0615C724D11E05102212307C00CAB0008456CAE1C8CC8554286C140D8554D2690D70148071183D5B05264CAE07372CDB0407938DCCC750275D80E0BFD64577E30E8680AED4CCE608F4F37B210D0BBA7F9E83355B7F081C1D5A92B6402D9FD15582CB4499FB0A66402E4C83BC8D839DA46D48AD86F655397617D66C8ABE017A043E95D916E3B912555D0EBBFBAE2C6269703A611410D1646801C2DD5446ABCF8D8B841D03DDBC14BE7FA453A94B96E2475BADBB23B7165AC70541B4E6D6C23E3154F99411B71850C64874E370378272E794EB8BEB01DAD0A7C919A1C221001889421D782EF3635A432217D0CC648FB6690CA55FA87426BBE2990D1EF297DA8ABB7B619F7541FF6697001218DDE82055A0D83CB15C1E60421070B0E12FE44F30E0029F7398993460FA12F96031953E4B90E49383708EA83431530023900724BE300ECC0C0D47682484A2D01D8A9737D4691524B8C909372FF711AA306E635F98FCA6D820362357159CFE30E6109735D8704E64BE4C076079F2256C61E02D3E432A67F05B9CBC877163628015390413403EC921C081A570F90317BEA694148F643F0430A890F1819CF6F3430B14075506D70A2207540894D004B081079436D22684B74531B8259B050DC0057D53C4B2C3982C6AE418821CA088D3C74061C40658B9A4B0C388142B42BAB7BEC6118695939F028EAF05A41B0CFA06500F009C78678361EA14662C139C74410C6804BD002E76C81C22D157061DA04FEC2A7DE0C8A1FBF4B04637DC00560037F0BBF43249E60096E9C4DC49903BD14B441800D1848DA2B17B8E50702D8DC837DE46B4BD0D4E1533EEB109F82C60A168E4405775424DC9A87FD9DF1C553771EBEE5045D5FE61E491CBFB872BB8D6785168554F7348648767B0B4BA8B79F0AE06C5717CA213C770F19556D731244A31A048A22C10E2A607F95C43404D34B425F565160840FF07357FB8C58804663013D3758E12E32D85CC62FD860653A7902E3DCDCC84E080F0B7721A1738ADE70C8C836598FCCDCE1B0DD115B5C020412D0674C051E260CCF4F3B970F63B0C3734243F51D089B039003612548C2C68781DD4172BEEBF0CC88C2109586B9034F5E896A941EE8AD48BDDA443527958410BB6D6BEDCCE0870D7E82253F234A5E209C40D113033B84DF1BBA848CEBB4295D3AA695B9665D5C4E3A58369423C2598AAF996B90FDA201712C5D587589D63E4B374B39C205404B28D2C056D1688DA516AA66569A70D0182208C7BDA5DE363A189008D4C1F7D2210F6A0CCEE8817DD41FB9C0D8049B30517E2B3121DA09933D2AC8D5D9486195E022793902A0C3E5D8C4EBDB6177EB9725E198CD885966523CBC91FDE266957725FF8C160F4C642DC4F965729835D78E2A4DE826EC55DD908CECB950E05C070F3DA0216B462839EE3A3C3CD76A12A1625C3CEF61AFE9CF5BDCB2594B02A88B0C33613AB3D6A21CC8C8A901089C4C1E48CF765A07795B75D919B05FF37676ED8229B21793BDEBE943A293CE41C6991F7779E3D08C9AC40CB9B6DA420E19DFFBB588D3FB47D8901D5D0075A9295CEFC2F782440CED8601EB87372A4C5F588283EA407101A600D70F42E18A8ED1D248588E3A88D9745094DED683C80270A0E8499A010B68414B8D60980D9D0B83FDFAB141C6603D5077197A8BAD381B4DD2C186BBAFCCA8E12C45F734D0FEC39266DBC1AD5A0E96FB5DE5'" & @CRLF $sString &= " $sFileBin &= 'A164AFE02D135D057B57A0DD5ED1EED2621F4821F0418B37B750FAC9B940639000FB24824FC36D4D5E24EFEDFD48B52F85C9C7404CD4068C88CFC84800587415AA55AAB32524505D2C82605B46070D8F8782070425742605B8082259BB3002BE289154B289E251705EECB6CF562253255FFD609C81E0B9F15FE23C8A1B1A2976759D1C817E5588CE66492001A03A824F7C7690CB484CD99C2BE256C696F00A6702912D24E0725058773C0FF1835017F675E5108844165C1405F702F08946587D5AC0E7D94A103B9F5676D3FBF76E2F59807A5C6B855A14840883C65C3C5E60E97656010346024F18A01009C2B04164EB0B030808344191118E45E6414C4441BB5FB46A1A7A7531F6D739507A1325FA24722C89C19BD60B8B7920667BAC236241601885F60A26BBD3354155DDEBBE758B595A823680508C5BA6106B100F14A0DC49ED9D6854F786970536070E4AA7882DE0D08C4F9F516EEE02252E9072F5378644014E4ECE4640063C383477B02ACEA25052425877CAF048C08A467DF0132B091C408DAF11FD36E806501409DA5AECAA0FB1DA21599E478956FBFD286705D4E3495C3F2E01B209E0823B7D20CF4118677033DC62069D1029CE63817A869F638BC32544CC25412005957B17800950C7069440E2102A4E16F6316C5BA18DFD13BB87C0933BB00434A0DFB72A9C0158C04BE10346872F340537EF43473688D383FB13DC26EA7DB1C0297A75E0C9C1B9CAC5136B7F5D8C84EB00BE59588D715C886116073BDB462F71C534C3756EB98D6A1F5570B9F703C452DBEE36A37FA412013E01D4295A1AADC7F769976158C3512D34AD3AB4D7CEFD04C8A0EC8FA8A37E1E83909CF2E05BB72DD557CCA56ACD0283857B748B90B9B584702B0202F7F1C35C430DFDCA6C317C857A9042D8756CFC5424968CDD7889A1EB8A6C02AE7DB3114504990D14B009373828DC623B4D272A83C05CDE90280CAFFDBCB6B5179E761C01580130458E033D7BA6574A6F966D6046000329E2750F6D816233FF38180D12839B196A0255C90B2E0A9F11B163D85FD089D34772D4DD178539F87206688D1C3EFECE51A5ADCB8DAAD70A8E6010B80C83612267EA0815525F6C946060A3B58D36011E843EEC26E06F0FB7AD582429F301D6FEB8DFE9DC29DF36320CCF015D4B084A9B7676E80149753F32ED53406BEEFF04977525298DB7B17A430624492839D6867CA559A75DAB9F9CB64CC3260B2805B0E80A8B602001AF0A930057EF5D773D736350B4D2FF52F90C4014A65AD8815B0F2F8B432D39B0142B140F118C248AFFC40720217CD6641CF690001793D1EBA396776372816FB804990456925B9FE25753DD8692D942029A4ACBF7EA9E01C10C03AC080418BD89A5289D0FEC6F894E0CD0D8FEEE422E1A80FBE0775B6608D3F62CD48003B4063C01DE622B2AC088089688C8C0B6AD7DD70D1DD100C828C306E2062695E2063079012889C2FA25778374C0EA7663460888D0C05CB4759BA1D02873C10E04FE848623D8ECB986BA1FACD305B1AF18D9A91E4244F18B328C786D347101F1794B2BB0E548C37F2984053973547427897C111CA01D613B3C2478365617891C95023EA41F107402E5C89545D056D0DF28334270F28D5DE8443F1C49089ABE57AC790A3BD743221EA16D656C22E14C7454E3AE068AD934B76CCEA3EE05F40C33E8B1322414BF386F02BB8CA0D8681475B50612C5F4FF2AD064CEDF7976E27F637FC119B4270A5E28741989FA1B64BB66708F4C252B04201D29899191672BA1D8DCE011869D91E4F4614C201CA49334B8EB667E9F72EF7B7C81ECB862B914AF9F8886446772C23EAD0CC58B589989925BAC42F1D91306763501189CED04F0288DAC0F88219F8D01BF1CFD18891485A4A0E665DC104FB38876B23D08894DF621010FD645A0223C893E1D304940D720100C210896F58E059B8D853AF2BEE904B45569BB24833A03749625FBBAC49CCB02A38EBF33F73A5AD8898F8CBBD6EBCDC09DBBB090008B2DB70333C0B58DE24D7F683CFF152310117B6427107CC31F8B4CFD89C8D09A8CD4055AFD8BB57651520301341A1C508901ECC93AD87B682C0DC35F6AFF5021275D617614C30F765F06508C2DBB7C2E8C04C38F13CCD63DD09A13F9068212446DC25F77183B07203C5EC3A99A860E2C6B09CF8FA9D84D446B149629C050519FC9205B371C1A049F02045BBEBB2D5E4C186A015119FC0C4DDB7D832DBF0091693408C32F37394A2E005CEFB6646C6C08518120EC4C2FC20A996C1F2425C5DC48481F0FEF590239CC73E8284F64ECBF770C1F33508B0251507900BFF796AD2FEFD3EF6A1CD9F91C20016A4CAF4BC0C647558BEC0E6816808FF4877704977064A1C15064892587EC085349140BF1565789651BFC7C141EB9B39F2C1096D58D7FB652332C0D5F5E5B8BE5D6C55E2C18A633220F8041B29425AFCF8D9841C74C5406C2D088250706DC3061108D316F5DB27FA338B429A60C5DB4AF8A30112B844DC13650F4FE29C83FA42985152CDB500802040CCFBAADE3B28F38D96089680659B6BF6E0D343F53043F0329D1093053DB680B5043FCD050FF169B8B7845F874395D11348463130AD7F819AF391FE6DAD66D6DF8D71E330C2E4215077E89AD1EC1083B434476B4CF8423D566D5E242EBF10F278813312F14A2EED5DA53406439827AD07BDBC92F374330720A408C16B19DEC6C034766EF4A30F23C29476F0B370A3D3B4244EE04E16BB397FF1F1BDC0D15C119DC0E392173065F5D002D017E306BACCF9E6C119E6DC7468606202C2023B70344B01B48044C1C817827'" & @CRLF $sString &= " $sFileBin &= '5406CFDAB94049C04015FFFEFF02B076E2644AF7D281E22083B8ED31C24979EB96A58017339E6C43D300CE2F524227D51FEFE2203990202008B42F5C790374B8F6F084C06C915DED6D3C198B2C01E86780E61C908F1DBC8F1CC9D38186D0186337C452817F78F9D1E9128023C3036D0F2F98146F454194EDADF0C58D8C087A08DE5D68AD8838A38C01F21B53448D34C2AF231ABD4CD70D41733CC82DD68AF8488D7701B63FBDE04BC5915CF9026D74328D576C835CBD2B47B80206EEF7E5E40408D1EA81CA3781FA83E9EEFE96010B515328423D7607814904A149F3EC030B00010418A5D61C819E097C7BB12D50A97B8FFD603860B811B4A1B904735006020140ABD8BAD764AB02F5048E9A3A2755F1DCC1019AEA71F291C716F11EC1B73D8D0CB5B583E0BB01DDC8A639DA96008A205B28E696B8595B363B825314019A6B2493246F099BCA05D6C96DCDA6D90F3D8817773C741C5BE81D0C878622AF10016EAF237C89247FC6FE00B1EC97C5D06D6C31C95B82BBC2EF5FFA740723616E51BA37D929E6CF098E4CC212302E8C8AFF0C212816C045AD9904E8AD36E5BF4FF3F75BC239DA04DD78A9A7D38B790E414444B7412C4DF2CD0BE2094DB66123A102201D1C22DA96C00C8E10F91E78C29D61605E8B56E3667A48C5A31F014B60E132963A731AB120DFC730D4854854D14077F348D17698C62309681CF06B89CE38AD18394304DAB9229E30AC5A1ED76F8CC409D1C8EF1F100389762F855339F275731D2F4FB7CDFD049139D8770E9508421F72EF6E2979A870BFD80DEBF096FF18DA58DAD1D483786D7440466DBF5DCE2D465E042B394644742F0C183D723CB407145FF84F9F96D5599A8EFB14568F2650CC166172FE818EB5451BC2EBBCFF58588B5660F0B316167C647A4BE681E300FC5E562FD9F74620706CB46B8C25D483EC5070C02CEBB19F01682C22AF08E170D8000D5E3C8205A276D45F494E29F9828490DE535CEAAC4DE68387280C29DD5E60098FCB0F8D1487181476CC06BBD64118930C8B3A33248F5D468A4C2475B70E023803F70D76C675AD18135F452502221EB5B7FF06423B55F075EE393073898904536EB476A839073B0141FFA339FA8F26F083C204397310EE0B16D07361FF20C14F900986359F55450DE843D9724F808256FCE9B76DD18D58049EA08D98D07B0673247FE30D1AD375DFF3837DFD746E3B5D2073FB5670A66945CBBA0C1C8D3CC2D8EE9A6BB04D201B090757E429D91C758BD8A8E8E076034B77A65E2217B60C329BC73238C16DEBA8DB7465037349C775634F6CE5DCAEDC4DECE2077F04676DC8B9932DB80C6D759224D4B20D12CC07C728D114D6B5F7600F6131B27D02366CAAF6338B07B9FB726C2B0874C20BAD1D3A79883D0A74453785A5CAF62C73512E2C4B432CE0D6B9ED1683C67C06042889127449F175BB86405DA40C02351A44BFBFDD73CEBFB740474475BB5675EB9E6D10764A72B59F5D35751AC2042DF6233584C856DFD6D0A18F47620113FDAF513C2B064F4D101E4C90E35923AC7A506A51C150378A131B06638CBADC614F0629F1C78E8556C57E6A607365598E051CCB55C8546EC25741C3E1965DD809746E3BCE0E4B1B3B7BB619578845DADD9A80DB7A3806746C04733F0DB70005646B4FA64139C25D808D7D7604756A91A83DAC666975960F7BD03262C276377A02D7ED8043C05B75E8E416C7ED3D0E3BE473EE8FC66B787BA51CED751D4187AFDC49D837AC0BAA01AB02441B7691916D74E4A01C5D44743CB6A2A6846FC29640D6E2522BFDD304407AA33D8BD6E04204693E5770AC4B07F2153F387715FE61C027E80177168C74EC4E5775036A674F206427D78136031314C0D52A62D40CA9085B966E1BD9BF2420152C061C18C91F60691814CB4724895C49D107B83526F023BB7BD73D723CFF27C341FF0729C321C1FB02B74280966547470F704BE8E6DEA2C315EBE81F68854C60CF02A917BBB551025302CCD8CDA290DB6087D6CAE51000201376E7DF02141F1A63FF4C4B4610E6E0E34F40E80F86E5E83E0EC18BC834DB07C4578673103F0C71E1FF74CA4702D44D206A90C6EC310CF1776FFD56282104202B1C8A8B8C82B7B1B716B9B9A02DE4899C0F76BCDF05561C828B4E18BBF87176122E754B1CAB66C26638E7848E586A6A1EEF5C5D890C839A0F261A45F58AEFF21CC920CBC98B46467C4670885FB863135DE8E81176CBF3F5467D062229FBF5C846599646461DF44C72115AD4668BC5102D1F040B64BD70DA059468674F3B51D16F4DC3681C0F173BA9750743EBDC73BB421975F1FFCAC5AF4812DE26F7B4891A1008E30E774EBB6C72F2C5B0BE100CB7F740B8E846DF94E4B67158736673BC13B4AC0A5A16EC8B234BB29910CDD2B0045FBF7D4703B1B69A23F5011708E075282C978512C2415C97D813978D23947FC25DD8A551E208D8721B9731B7F2D7DC23A34FD32CDC584244AE89CED00557C2DB87CB57349AC675F0172BB49AC811B1ED21CF04448C06118ADBCB38A9225DE436500582DF8CB22531F63D0FA99ABA6239576BB581741BCF43ECA539C076168B9CFA015DE8A2184596D1BFA29DA0417725E72259784368A2037FCF820B4BFCE52EEE041E5CB0F862854E4EC67A212414100C0F001F742EE07447B55C1B0975251320432CB6601882EDE365786FE7607A84393629CA79AA07314696C835F0C4EC080DAF44480E09ADBE9A388C6F3C7929836E7705BB03CE4D8397C8EACBB1C1AABA1E3DAC57C8C475E4C067062CE7A4AAC775221903560990C71BD12717C66B95CFF8DC0907C50C7C'" & @CRLF $sString &= " $sFileBin &= '9087E45AA9C46D4863B2046DC3DD12E0C3FAB04CFAF0EBB56FC8858C115F3CCB32944C059333170F915C9D7567FF931C87860E2A57D1E4AEDEC864343836971F39E99531AB857F3CC33D989047C9577B891C13198F1109B22FDA4D8E17932C4C552B35A3E102C9716CA43835C983900B3C7BAC0A89B32B8F7C132F6A16FA9696178B5F20E64800AEB5152C7BAC5485AF12EDC483317034F32EA38473C88B1C0E25B420B807050D9E096104B20807FFD283EDCC1C3BEB0AC64E74750ECBC1363101CC76EBC342010A086CE62261B3A3D8032CC7118975978B0CAA133C4E75900FDF63C860239F0E89AD3CDF6181B6A302E79C2797D050E002645CD957654B70BC67B3839223EC248090AF2CA29D01B9B1EC96949066E97E0252872C0C75B0530FAE0254795BBCAAE75794B26A8121912D27F081C9F5D100B96C4CC9ECCC362C1617CD0D5E04B285A40FDF2C3AB31C72D103E8C21138DA062498C2EE2822671B904F9B55F0CAEEECC39148129D9B21D8B42B532436F28386ED3A6BEF32B68C93F8550C932A1512E40A84581F05E8C09B900B3F380D6D8EB0203FFF0CEB7FB26C9B0A5FDF7728E81040BD9535CD4CC80FE7DF7021C9B6EBDAE220D50421F8101BBBE8B481E29406D59499D3916847E614811F3934906C129FBEDD17B44042B017D123FF724BC4A58A287F1027798DD81D66BD851575EA6116064D58E3D41FA45E99CBBF4C9FD252276D8F438915743BF2D56F60A60E3491CF918F0B98A77B8E8C1F1205B04047326088EED80DB04093BF45B850E5701A311600BE6B59059BADD9080880060C50757E506D2868077AE02F811097823E292F8B52482E741839566805A60421788023C79C19805F1275107D44478E95E00F76C07F30411503827F5FC9C9D9907B1006141881CEC9C91C2024DFA8C8570B5E10FB150DEAD96E4B495E1809EA9C6C6F0422060C08F2CDE24FBF69AC8D461CF80A1459BECD0D8C1D383015CC24C5D99E3D6A7C3397545A2CE622552F8D8D65F89F2D1D62EED70E5AFF781946202669010CC0CE3D6C48501D80907F9616006E27E07EDC5E489D74E5B6AAA5F4041D6DCF7425800F13562CA35D20C161CB0C7E6BD5CCB0A27EBB5D433B9174298D7E24EF9E2D3B1B3C898B332875E52A21C5D957040FD9649BB0FF46EC04E32DB04DBCC19A841DBFB614DBCE353E46108214B854094DB667DD28067D8269DC4D18C9205CF20A1C20388C482B6B718CC48C557136778AC786BC08604F168E0375349510689C0764B9ECD8BC7C7483C24E2821E9C106CF968CEBC2AFE06A5950BF71A22BC0CB9058F94E11C23F96B9A7930F4330BE0CFC217BD65D9C24178284AC2CBAC318E1C743286F437D7CBAD3409601D90E18C41C0EB03968B56F1220DEA2C569CE16EC9EF5A10DD876391C24188563D367B3C01472B823109D119427685C730308D98FE02672859BFF8480D88932466F180474B07C1C7585F875A3F1EB2EB489CF6280569789433BC641C72B9A8037F72B3C905138B475CD1140C70A7F4E930D56BC799775D0A3664F0CCDD1B33C4D5D40CA319EF80F9420BF0133148789DF8E4161BB131786EC43905C142161B0618D0CECBEFB5FDE480EE404485D6CEE1FC45826418B04874D680514D09682202B52EBDA12DD570783C74089091E4367B294141CB6588FCF6CD902B94971D8316400E410B58F5F35240F3C95080552C4224CC481C257AF6EC63A13A2164010DC83C25C0931762B75055810E45F10CCEA80B71436AF5E41C0A00C36C283805BC17A08B4858D3CDB3DA8E50C85D66FB078459AA321D19AB2598C86E8F547E239ECA4C548F4DC0D0A7E4CDDB013353AC37B11A029B0DE7705DD291A299A18516399C3C65A1742140DF0106C089E8C84734C65F402AE8020C8A5622AEE3A1B8E8C093DFFDF44CD229A70994E746B512D8F5EA4058AF814A96FFFF6E707C1E70F7701CFC707F7DFB6686B0C3248DB4F138D5B0181C06B00E0FBFE1FF5BB06135F6D2D2514386C138D728D18790869285C904713C251B46BBB019B1BDC068A1DFF9074011F586DA95CF4EE1EA3CDF70CDA746C65887C4F5E58B1E801B144299A588D076FD6BDA05C40505D92766E16BD60C9653E894316800F39108A424811C085A4EFB0238C595BBF93F06C40BE04285B830187871B9B8370C48B0A2ED085124B0BE00D7983FC425D24000A1A0300177AE5EF8993088D5002173881045246C36C1B04F47F40538029DF1D4060300238CAB786B5F619F1A9C301C0291F11B45534E23FC20539CB5EAB6A773E61AF7D67407432FC3D867C39BEBD6FA108ECAAA9964AC6D88BBE14D1A2D771D6964A93ABF8ADC0BB48FB8B8E1C014F4AC018F1770397895EDEE66E85221A73031F4E203F2C59EBA8F3D4161585B6A02F1AE6F9E4F7FF4E76F3DC6ED90018EB2090150E0102DC6BC39C684AA25D19A219B8DB7C0986280D34454D485E24F3016FFB07201124264ED4AAB3353E7C4C481708DCB3456CE1F947721055F0BD08B61F8B2B0C90B7406C0A42BCE26CD29FA2B2D55699EDC1BD01E0BA919A92862A13C240C361667ACCBC100F824A1AA22148803B3C8B9E30AB4F106DED843EF84946F03D8A98DBEEDC399D28E987ADCB44A02755AA964E8133B709205465FEEBAC05235C9C0A8164B64EBAA54AEB9E808A90BEC2E157C418B901F8F2FB555C88303B2872FBFD028F5A3063618B10575D9D1D888B4C41914A18D9B316DB9575DE772081D08C3F2F407504606F16BEEE377DF402470F3E3083E33FC1E31098A2D70ED201C3648A9C6AB1A29ADDB641BF87775E2B86A243C2492F'" & @CRLF $sString &= " $sFileBin &= '580F59685991B747EBA89366C266861F5A00753D2161492989D36DC097553322D8029F292037A8083F2F8D63EA5B26487F7B408D5F2C17A66A3B3C474405288FE021874004B6ECEB2A81461385FAFC32881598C5522CEA46E1DD96ACD6AC17892908F7CF01EB8750E973488D8726E0B02D8BEC7E568F0F472B580F1F5116B19533FAAC5783C32C78822212AFAB1920E90ADF09C1BB8C9F833086205601227B80328A0987876F6F3BB4ACE7080CB74390A2DAA159674E1B08921D10F2EB943FAA428F3D8825881CC9172EA20D8C8F0E4143C133456B6F5F430E966478FE368DFC4BC01B087FC1188700EF5BAC7889A45720BA05CFA20D16782440026F3F0086D736846920D3566DD98A32366D20C603825CC48311460B442457E157FFF7050F0E7C6904C9E6706B3859577422ADBA078F30151C5E9D90BEBCC50061F86CFE857437B56C20279397441C8A3FD8007774D6A6E347398FB9F2DD7014A2A7BB40505C8DE0C5BE6450554F36008784046F2F1D8EC1E16190198BB3004E01C4C0172D3B24F192FA06088E6FFCECCE02B680792096402313502A0596E0138DC041D8B951EDD4458D89AC830E08195946961C0C481004D946B6671406101814081C0365641918202C67503029809E03DA63E12FC52C7EB3EF842209C40FE3F1501D5A7E28682039D3C1546BF081A74859C1E3A08A3FC42692F1ED793C43746696260A5A363F0EFBF44D14825C30817B10FEBF243ED110F70C345308316958C15BFC770A59661C839871A45B913CEF8F0E8260296F06125BA968587F405A6F31D8B35A4B917C159057865506BFBBB51B811CB9254932502F8DB65F7D308B5818C75024360E96DC101D9746048A8625388B0C83D0880D6E8E833BD872175DFD12B07BCA6E29DA380416EFF8132A352429EF3F17A92E531A904823232480993928254F6CCFB972148F89988948B354B76D11789140891E20561E550A5C9890234A80213EA9FC149925083D3B294C4388BC063C990EDCCDD5FB39FEBC720DAE50182AD3DB29F9AC0E7449AFF5F625CC5482B52455D1216A80CCFA37102102BA43105A2BF096EAAA6A6AC710022B0451E0005810F3FDCF41D797D01848C79B38440E0274199DDBDC8B3BFC693E086C4172A15850899003B899728D2CFA08EB84EF4A1A86165D518B57EF292A01B0F025F18B31FF4F6FC17B296A6F25320189173B178B010FCDED169A7F040309C3040C095E7829700771E5FF47C6F0FF07A126A400BF0C3F6D0168DB02574401132AB889566E4C44101147D6754F1B0FD58D398D42CD478E0F660DAB60414A84E46A84A17E8B1D1B45A22A1F94E2C6B7FD9873291D2A29C65BC1FE8FF031F2B987B9AE3453043734D0C24B081DC2CFB549FB172BB8064B0907EE0275E795102CEB74EBA29F5DA5B67DC9D733EB1BFF4B5C43498B5AA02EB4FFFB1B01CA114EA44B4B44649F3B5975E0027A81B537272F2A75D5C0215E412F175F58962D259F705D463791A569038856050F47579C0AC056105E08055D17C45B8D13FF4610D4062C8B7E03BAC53C82CB404BBC742F3B460C0AD4842E315658B4C85CF71658B6294C04342E7A76487175D18D34BEEBC427CD944DFF8F554657273D014D0B880AD1055641051C9310A502D98A469BAD21F2B68801B20C99AD0CC8612F25CF02982EAD0A12C95A9FCC95EE3855B3DCFE9080C71555D100B8069220FD5DA266FBD091F0060CE06B74342068D0AE0B98942097DB881DDCCE4954AB87B0C70508210CB0C07283250AA3B86C5D3FD0291495E0D00BB23BC49B2286901B591238F694E04C93D04F3965B625DF4028E0445064EC56F1FFFF88A050054C64646464480C0804766C2C7640CC000B3405380000005B5104031162A62007322403C80A00082403C8400B00ADB24032093FD334CD950B010203042FB0254D0506330203419EB3ED0405060207000A0040A0BB99FF056AF103F7540564290811A00A1905FEFF97675CA00152656C6561736553656D6170686F7265DBF67F5B4C0F7665437269746963616C1763076FEBA6E4B76E15456E746572443D742C00DAB62B47144C5474F66DBB3DF20D57611E460853696E672DDAB737F74F626A2514436C6F7548616E64126D6BDBE60C776146457664413D96EC8B95530A9C730B236E6E976CA727496E7675697AF634DBC880DE694866296BDBB6B95F336C6E630770274AB1FFE76C661E345F6578636570745F6888EEAEDDDC72332A606D6F711A6265672D673CD6BA6876642518637079B28F6FDBFFFF0757076DF09A17F03505F0F902F06901F0D402050B7204196DEDFFFF35F0B90261BBF00705D1F0D302ECF0B101C2181C193DFDFFFFB61F6228FE03F0B31C3522453982204733730528F08B170709FDF6DFDD011B070C05F0340D65F03F06070A0D0D090D070F4BFF63BF0210050D0D06000C06F00C0A040050453D4CCDFF43FE010300448DAF4BE0000E210B01050C0098081B699A27801110B0100B6E166C19020433070CC0CEDC92D01E341007CB66E9D906A0B3D66E8CB15040B21C24C0F01706B26EA7581E2EF9787436B0C176077C979098C40267DBF87220602E726424611B0E7317D27DFB06279C40022763939B636510B32A01FCA2CDED376527421B34B2103EC1B7000000700400240000FF00000000000000000000000000807C2408010F85B901000060BE009000108DBE0080FFFF57EB109090909090908A064688074701DB75078B1E83EEFC11DB72EDB80100000001DB75078B1E83EEFC11DB11C001DB73EF75098B1E83EEFC11DB73E431C983E803720DC1E0088A'" & @CRLF $sString &= " $sFileBin &= '064683F0FF747489C501DB75078B1E83EEFC11DB11C901DB75078B1E83EEFC11DB11C975204101DB75078B1E83EEFC11DB11C901DB73EF75098B1E83EEFC11DB73E483C10281FD00F3FFFF83D1018D142F83FDFC760F8A02428807474975F7E963FFFFFF908B0283C204890783C70483E90477F101CFE94CFFFFFF5E89F7B9D40100008A07472CE83C0177F7803F0375F28B078A5F0466C1E808C1C01086C429F880EBE801F0890783C70588D8E2D98DBE00C000008B0709C0743C8B5F048D843000E0000001F35083C708FF963CE00000958A074708C074DC89F95748F2AE55FF9640E0000009C07407890383C304EBE16131C0C20C0083C7048D5EFC31C08A074709C074223CEF771101C38B0386C4C1C01086C401F08903EBE2240FC1E010668B0783C702EBE28BAE44E000008DBE00F0FFFFBB0010000050546A045357FFD58D87EF01000080207F8060287F585054505357FFD558618D4424806A0039C475FA83EC80E9272EFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005CF000003CF0000000000000000000000000000069F0000054F00000000000000000000000000000000000000000000074F0000082F0000092F00000A2F00000B0F0000000000000BEF00000000000004B45524E454C33322E444C4C006D73766372742E646C6C0000004C6F61644C69627261727941000047657450726F634164647265737300005669727475616C50726F7465637400005669727475616C416C6C6F6300005669727475616C46726565000000667265650000000000000000448DAF4B000000000EF10000010000000300000003000000F0F00000FCF0000008F10000E2100000411100006B10000017F100001FF100002EF100000000010002006C7A6D612E646C6C004C7A6D61446563004C7A6D6144656347657453697A65004C7A6D61456E6300000000E000000C0000009D3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'" & @CRLF $sString &= ' If Not FileExists ( $sOutputDirPath ) Then DirCreate ( $sOutputDirPath )' & @CRLF $sString &= " If StringRight ( $sOutputDirPath, 1 ) <> '\' Then $sOutputDirPath &= '\'" & @CRLF $sString &= ' Local $sFilePath = $sOutputDirPath & $sFileName' & @CRLF $sString &= ' If FileExists ( $sFilePath ) Then' & @CRLF $sString &= ' If $iOverWrite = 1 Then' & @CRLF $sString &= ' If Not Filedelete ( $sFilePath ) Then Return SetError ( 1, 0, $sFileBin )' & @CRLF $sString &= ' Else' & @CRLF $sString &= ' Return SetError ( 0, 0, $sFileBin )' & @CRLF $sString &= ' EndIf' & @CRLF $sString &= ' EndIf' & @CRLF $sString &= ' Local $hFile = FileOpen ( $sFilePath, 16+2 )' & @CRLF $sString &= ' If $hFile = -1 Then Return SetError ( 2, 0, $sFileBin )' & @CRLF $sString &= ' FileWrite ( $hFile, $sFileBin )' & @CRLF $sString &= ' FileClose ( $hFile )' & @CRLF $sString &= ' Return SetError ( 0, 0, $sFileBin )' & @CRLF $sString &= 'EndFunc ;==> Lzmadll()' & @CRLF Return $sString EndFunc ;==> _StringAddLzmaDec () Func _StringAddLzntDecompress () Local $sString=@CRLF $sString &='Func _LzntDecompress ( $bBinary ); by trancexx' & @CRLF $sString &=' $bBinary = Binary ( $bBinary )' & @CRLF $sString &=" Local $tInput = DllStructCreate ( 'byte[' & BinaryLen ( $bBinary ) & ']' )" & @CRLF $sString &=' DllStructSetData ( $tInput, 1, $bBinary )' & @CRLF $sString &=" Local $tBuffer = DllStructCreate ( 'byte[' & 16*DllStructGetSize ( $tInput ) & ']' )" & @CRLF ; initially oversizing buffer $sString &=" Local $a_Call = DllCall ( 'ntdll.dll', 'int', 'RtlDecompressBuffer', 'ushort', 2, 'ptr', DllStructGetPtr ( $tBuffer ), 'dword', DllStructGetSize ( $tBuffer ), 'ptr', DllStructGetPtr ( $tInput ), 'dword', DllStructGetSize ( $tInput ), 'dword*', 0 )" & @CRLF $sString &=" If @error Or $a_Call[0] Then Return SetError ( 1, 0, '' )" & @CRLF ; error decompressing $sString &=" Local $tOutput = DllStructCreate ( 'byte[' & $a_Call[6] & ']', DllStructGetPtr ( $tBuffer ) )" & @CRLF $sString &=' Return SetError ( 0, 0, DllStructGetData ( $tOutput, 1 ) )' & @CRLF $sString &='EndFunc ;==> _LzntDecompress()' & @CRLF Return $sString EndFunc ;==> _StringAddLzntDecompress () Func _StringBetween ( $s_String, $s_Start, $s_End, $v_Case=-1 ) Local $s_case = '' If $v_Case = Default Or $v_Case = -1 Then $s_case = '(?i)' Local $s_pattern_escape = '(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)' $s_Start = StringRegExpReplace ( $s_Start, $s_pattern_escape,'\\$1' ) $s_End = StringRegExpReplace ( $s_End, $s_pattern_escape, '\\$1' ) If $s_Start = '' Then $s_Start = '\A' If $s_End = '' Then $s_End = '\z' Local $a_ret=StringRegExp ( $s_String,'(?s)'&$s_case&$s_Start & '(.*?)' & $s_End, 3 ) If @error Then Return SetError ( 1,0,0 ) Return $a_ret EndFunc ;==> _StringBetween() Func _StringProper ( $s_String ) Local $iX=0, $CapNext=1, $s_nStr='', $s_CurChar For $iX=1 To StringLen ( $s_String ) $s_CurChar=StringMid ( $s_String, $iX, 1 ) Select Case $CapNext=1 If StringRegExp ( $s_CurChar, '[a-zA-ZĀ-ĸšœžŸ]' ) Then $s_CurChar=StringUpper ( $s_CurChar ) $CapNext=0 EndIf Case Not StringRegExp ( $s_CurChar, '[a-zA-ZĀ-ĸšœžŸ]' ) $CapNext=1 Case Else $s_CurChar=StringLower ( $s_CurChar ) EndSelect $s_nStr &= $s_CurChar Next Return $s_nStr EndFunc ;==> _StringProper () Func _TrayMenuSet () TraySetIcon ( $sTempDir & '\Win.ico' ) TraySetClick ( 16 ) TraySetState ( 4 ) TraySetToolTip ( $sSoftTitle ) EndFunc ;==> _TrayMenuSet () Func _TrayTip ( $sTitle= ' ', $sTexte= '...', $iIcon=0, $iTimeout=3000 ) TrayTip ( $sTitle, $sTexte, $iTimeout, $iIcon ) AdlibRegister ( '_TrayTipTimer', $iTimeout ) EndFunc ;==> _TrayTip () Func _TrayTipTimer () TrayTip ( '', '', 1, 1 ) AdlibUnRegister ( '_TrayTipTimer' ) EndFunc ;==> _TrayTipTimer () Func JpgDrag ( $sFileName, $sOutputDirPath, $iOverWrite=0 ) Local $sFileBin = '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' $sFileBin &= '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' $sFileBin &= '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' $sFileBin = Binary ( _Base64Decode ( $sFileBin ) ) $sFileBin = Binary ( _LZMADec ( $sFileBin ) ) If Not FileExists ( $sOutputDirPath ) Then DirCreate ( $sOutputDirPath ) If StringRight ( $sOutputDirPath, 1 ) <> '\' Then $sOutputDirPath &= '\' Local $sFilePath = $sOutputDirPath & $sFileName If FileExists ( $sFilePath ) Then If $iOverWrite = 1 Then If Not Filedelete ( $sFilePath ) Then Return SetError ( 2, 0, $sFileBin ) Else Return SetError ( 0, 0, $sFileBin ) EndIf EndIf Local $hFile = FileOpen ( $sFilePath, 16+2 ) If $hFile = -1 Then Return SetError ( 3, 0, $sFileBin ) FileWrite ( $hFile, $sFileBin ) FileClose ( $hFile ) Return SetError ( 0, 0, $sFileBin ) EndFunc ;==> JpgDrag () Func Lzmadll ( $sFileName, $sOutputDirPath, $iOverWrite=0 ) Local $sFileBin = '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' $sFileBin &= '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' $sFileBin &= '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' $sFileBin &= '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' $sFileBin &= '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' $sFileBin &= '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' $sFileBin &= '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' $sFileBin &= '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' $sFileBin = Binary ( _Base64Decode ( $sFileBin ) ) If Not FileExists ( $sOutputDirPath ) Then DirCreate ( $sOutputDirPath ) If StringRight ( $sOutputDirPath, 1 ) <> '\' Then $sOutputDirPath &= '\' Local $sFilePath = $sOutputDirPath & $sFileName If FileExists ( $sFilePath ) Then If $iOverWrite = 1 Then If Not Filedelete ( $sFilePath ) Then Return SetError ( 2, 0, $sFileBin ) Else Return SetError ( 0, 0, $sFileBin ) EndIf EndIf Local $hFile = FileOpen ( $sFilePath, 16+2 ) If $hFile = -1 Then Return SetError ( 3, 0, $sFileBin ) FileWrite ( $hFile, $sFileBin ) FileClose ( $hFile ) Return SetError ( 0, 0, $sFileBin ) EndFunc ;==> Lzmadll () Func Winico ( $sFileName, $sOutputDirPath, $iOverWrite=0 ) Local $sFileBin = 'XQAAAARWDAAA2wAAYAJ/8+KKDuWpmsunD2T8RWFp3XzT9BO2Eoj0vipIhQEuBfrewt6bHmMXXBBHfn9pwXp+xD47hES7Eu6GAMKad06FgTzfHzTa1GWoBn1D6sDAAGsH6EAtg/QnoIX9LYvkjjMhAIRYHmNn3ZOJNjLZ6P3stU2aKxCQ6ET/QKIsAWQ2fOO0//JCBbby9KSLBn4SNMfLzet5wFAzfgxeAEZTO9QpC8xmSBafo5FwAnbUNOWjWq70XZSkFFbagvpxLbAZhg9sFzum5fk0cLEYgRUpEU66PjsUnpduVVYJOMPUbrDjYBzNZI7WbCuCI8JyDm/tNx8Zyzxm5dJCV6N+hu/qxLhyUPwPtX1LuERHT/51IOxGu6+MTU658HzSXSx6V9ZeeZROKDgO6+D2FNeK4mJcOTxHIBIOE/Q+ju3AaHD6wGuOkgUnUZ5ZCiEAbNlxyWCIFE8SMpbZBSklgSYVN+EyxedxAPqWHkjgIv5jsCpvYv7FYioZX1Xq+imezb8krobWV36nl4pTfd7WDSfbEITW4akzcz0tTswTlL8vz8b3fhhSRS9hRTAwY+X33vylcrqSLf0KgfdhkgkCCj8Ig2dyT5kJymP5IBjpLPxrpf407+qAknxwLNeHMcEdMP3B+am2AfImzhlPgKP3wY9lDEs+eiWCBwHOpYIJhCjrxP66plzO1oOxga1EHkUDGNb7j5Z9OJUBwY9FTjYFTqP38EUKNII/gnwHbON2nwt9E2/z6mMDjvLGNCDbYofi6rl/aRnLN28Nl0KOTwLeS08/dnGw3rsViaaTWEOjagfE27Fado3oAoP2jMxBq02o+qULUZY9rLJ3Yb3h5pdxHDR16PeoJiR5gzZ5znNd/qjsQSruQRZE33JOQ/BvUn1rpxCP45/9s3eAu/Hkq1aSUpDNrUL7gUg9mhxYOdlJrJedSjf3IvJHm2HwIfAV4qv7ASwwod81CZLGRum2Y24/ZxV2gdWmUz1ryOzHHa60apH1F0v5yHei2yLdeg+qGdi3qyE4Z//1hxAfBIK8Eu4yoBZKfkS6Z7anShRb6JLv7Tcpw18wpT0mzZXRX1wccMggukyLSpgOsgGCjCWnDS9GIafU1/2SzuYNu4P5gT4dltvwRAV4SNUteLiLRfz9jt32Y2HvKtHmExbGDjtDCZ/RNZEdOiwBMZnJBeZICXTiUAmt7dYuugH4QaF1ZuCrF0//Cs3LtCyDwVqYrKsJ0E3AWCORYluUKznckygOyA8aXNeFSj48WFrWlFciwppAYzOwRcvJf3rkOrUBUNgwmyOK9A9mL0SLr+MObilstTk6Ac+Y5GpJgafxUohjAoA8XDdzYxJLwYPP7i/wH33w2hbzFss+zc2fHkDuKpXbKV/jLS91SnoH814KXD4Y68iaeluzKPhd7OHCQMasioi3pen8jVEwk7R7Qp7+8htIg7ydhxeLACahDYWkoLMwee4uouewnfTn8QeZ8drnPatBPOhkuJANPPjOXyF1e3wxMW84/h5mNTLJLYNtnb3BHZFH+/I4Z3Gjxpy32uzxVajY4Ebmbixy9uB9phNd+UvR+oDmyaawfiJ2jzUQW5XtM7yYdaaNiDt7IxaKWlvEPh3H2tTdFhXWt4YKMSrP7Wlp+7lgiXiFl15Qwde3V7zm3wz70qtmqnRGVtLq8joYyK2B0YeCThhtLveXlYoxjnbBiiRupUuJ2srdXtHq5vJLnP3ZTADH76eDX/13o5xZ2DBgWVRPZJRoSah6CKI36SAt1p9gLkFjQ+Smiz491QNNkIcF4sYWYTpDGQPGKmvOyz40A6S7/AY0/kEZwF8MuIFN1PMIPWjfSvaUkZO4EcqYCTLHuxSlKgvqp7wT1wkm/nxlrgqubhvteHodIUc0hU21ttuYYLUtaA6VdUfedPHulVVzlbNS6hVi9PZtZzENXIvPdJNY1lZriBHyOgC6v882tzsDc3sHPVNKKZPwjSeAlcaAyKmRxbnjzNfItv4z5e+6HRa8AopJdsYsyS0GDLirqo7sZjaeZmF+0UZ4mCcTlgttXrTCORZ8cCN5/3K1QVMj0yDP0jjm4RXzZkRqy48rA8ymm9y1UkKKZPE4lNcYz6+UsKgsMdUNhVW/bVTHiUltHMMaCMlK9tZY4jFMISMSW9YcdipQ1bGIZixfR+QwBw6lTrUTAVZjQuGu4umWtkl9w6rIidgYpk7a5e+rFGy8qYEvUEyGqfcATpBXLhaoOsfXtxOZeA50bUkPVXFsK0Q1b5ZEnowCj5RsKeDJEGEmTnauKm1U7iAHwYq6D0qRUGL4yPYS7CREEzOQ7Vy2Ua6P63eO1jWqbDPh1+RoRn7R+UlpVyWLzXk3LtUiyIE4Ip6yD9hvFfHZlRzYHg+LPRVyR1p04BtsnrWqh6PJx4tF92fh8/ui48lGeHA=' $sFileBin = Binary ( _Base64Decode ( $sFileBin ) ) $sFileBin = Binary ( _LZMADec ( $sFileBin ) ) If Not FileExists ( $sOutputDirPath ) Then DirCreate ( $sOutputDirPath ) If StringRight ( $sOutputDirPath, 1 ) <> '\' Then $sOutputDirPath &= '\' Local $sFilePath = $sOutputDirPath & $sFileName If FileExists ( $sFilePath ) Then If $iOverWrite = 1 Then If Not Filedelete ( $sFilePath ) Then Return SetError ( 2, 0, $sFileBin ) Else Return SetError ( 0, 0, $sFileBin ) EndIf EndIf Local $hFile = FileOpen ( $sFilePath, 16+2 ) If $hFile = -1 Then Return SetError ( 3, 0, $sFileBin ) FileWrite ( $hFile, $sFileBin ) FileClose ( $hFile ) Return SetError ( 0, 0, $sFileBin ) EndFunc ;==> Winico()