Jump to content

Search the Community

Showing results for tags 'obfuscation'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • General
    • Announcements and Site News
    • Administration
  • AutoIt v3
    • AutoIt Help and Support
    • AutoIt Technical Discussion
    • AutoIt Example Scripts
  • Scripting and Development
    • Developer General Discussion
    • Language Specific Discussion
  • IT Administration
    • Operating System Deployment
    • Windows Client
    • Windows Server
    • Office

Categories

  • AutoIt Team
    • Beta
    • MVP
  • AutoIt
    • Automation
    • Databases and web connections
    • Data compression
    • Encryption and hash
    • Games
    • GUI Additions
    • Hardware
    • Information gathering
    • Internet protocol suite
    • Maths
    • Media
    • PDF
    • Security
    • Social Media and other Website API
    • Windows
  • Scripting and Development
  • IT Administration
    • Operating System Deployment
    • Windows Client
    • Windows Server
    • Office

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Location


WWW


Interests

Found 4 results

  1. CodeCrypter enables you to encrypt scripts without placing the key inside the script. This is because this key is extracted from the user environment at runtime by, for example: password user query any macro (e.g., @username) any AutoIt function call any UDF call some permanent environment variable on a specific machine (and not created by your script) a server response a device response anything else you can think of, as long as it's not stored in the script any combination of the above You need several scripts to get this to work, and they are scattered over several threads, so here's a single bundle that contains them all (including a patched version of Ward's AES.au3; with many thanks to Ward for allowing me to include this script here): Latest version: 3.2, (10 July 2020): please follow this link. Note: if you experience issues under Win8/8.1 (as some users have reported), please upgrade to Win10 (or use Win7) if you can; as far as I can tell, the scripts in the bundle all work under Win7 & Win10 (and XP). Moreover, I have no access to a Win8 box, so these issues will not be fixed, at least not by yours truly. How the bits and pieces fit together: CodeCrypter is a front-end for the MCF UDF library (you need version 1.3 or later). Its thread is here: '?do=embed' frameborder='0' data-embedContent>> The MCF package (also contained in the CodeScannerCrypter bundle) contains MCF.au3 (the library itself) plus a little include file called MCFinclude.au3. The latter you have to include in any script you wish to encrypt. Any code preceding it will not be encrypted, any code following it will be encrypted. You define the dynamic key inside MCFinclude.au3, in the UDF: _MCFCC_Init(). From the same post you can download an MCF Tutorial which I heartily recommend, because encrypting a script requires a number of steps in the right order, namely: In MCFinclude.au3, define and/or choose your dynamic key(s) (skip this step = use default setting) include MCFinclude.au3 in your target script Run CodeScanner (version 2.3+) on your target script, with setting WriteMetaCode=True (see '?do=embed' frameborder='0' data-embedContent>>), then close CodeScanner. Start CodeCrypter press the Source button to load your target file enable Write MCF0 (tick the first option in Main Settings) Enable "Encrypt" (last option in the Main Settings) Go to the Tab Encrypt and set up the encryption the way you want (skip this = use default settings) Return to Main Tab and press "Run" if all goes well, a new script called MCF0test.au3 is created in the same directory as your target. It has no includes and no redundant parts. Please check that it works as normal. (see Remarks if not) It all sounds far more complicated than it is, really. Not convinced? Check out: a simple HowTo Guide: HowToCodeCrypt.pdf an updated and extended Q & A pdf (FAQ, also included in the bundle) to help you get started:CodeCrypterFAQ.pdf For additional explanations/examples in response to specific questions by forum members (how it works, what it can/cannot do), see elsewhere in this thread, notably: Simple analogy of how it works: post #53, second part General Explanation and HowTo: post #9, 51, 75, 185/187, 196, 207, 270, 280 (this gets a bit repetitive) BackTranslation: post #179 Obfuscation: post #36 (general), 49 (selective obfuscation) Specific features and fixes: post #3 (security), 84 (redefining the expected runtime response), 169 (Curl Enum fix), 185/187 (using license keys), 194 (replacing Ward's AES UDF with different encryption/decryption calls), 251 (AV detection issue), 262 (extract key contents to USB on different target machine prior to encryption) Limitations: post #26 (@error/@extended), 149 (FileInstall), 191 (AES.au3 on x64) Not recommended: post #46/249 (static encryption), 102 (programme logic error), 237 (parsing password via cmdline) Technical notes: BackTranslation is a test to check that the MetaCode translation worked. Skip it at your peril. It also turns your multi-include composite script into a single portable file without redundant parts (you can opt to leave the redundant parts in, if you want). CodeCrypter can also obfuscate (vars and UDF names) and replace strings, variable names and UDF names with anything else you provide, for example, for language translation). After CodeScanner separates your target's structure from its contents, CodeCrypter (actually MCF, under the hood) can change any part, and then generate a new script from whichever pieces you define. See the MCF Tutorial for more explanation and examples. Encryption currently relies on Ward's excellent AES UDF and TheXman's sophisticated CryptoNG bundle. You can replace these with any other algorithm you like (but this is not trivial to do: edit MCFinclude.au3 UDF _MCFCC(), and MCF.au3 UDF _EncryptEntry(), see post #194 in this thread). AES by Ward, and CryptoNG by TheXman are also included in the bundle (with many thanks to Ward and TheXman for graciously allowing me to republish their outstanding work). Going to lie down now... RT
  2. MetaCode offers a way to: separate a script's structure from its content remove all redundant definitions (globals and UDFs) change any content (and some structure) combine (new) structure and (new) content into a new script The most useful applications implemented so far are: Fast language translation (not just text strings, also variable names and UDF names) Obfuscation (vars and/or UDFs) Script Encryption (conditionals, calls, and macros) Encryption is powerful because the key is not stored anywhere; you can define it to be a user password, macro, environment spec/variable, server response, something you define yourself, or a combination thereof; anything goes, as long as it's not a fixed string or fixed value. More info in the CodeCrypter thread: ?do=embed' frameborder='0' data-embedContent>'?do=embed' frameborder='0' data-embedContent>> ?do=embed' frameborder='0' data-embedContent> But MetaCode has more potential than that; it allows you to tinker with any type of content separately, then rebuild a new version. So for example, you can have a single script structure and numerous different language modules you just plug in to create a new version in a different language. A brief Tutorial is here: MetaCode Tutorial.pdf The MCF library itself can be found in the CodeScannerCrypter bundle. And a little example how to use it for translating your GUI into a different language: UI_Translator.7z (new version that should work with the new version of Google Translate, see post #13 below) MCF.au3 is just the library plus the MCFinclude.au3 file you need to include in any script you wish to encrypt. There is no GUI here. However, I did write a separate front-end for it called CodeCrypter, which you can find here: ?do=embed' frameborder='0' data-embedContent>'?do=embed' frameborder='0' data-embedContent>> ?do=embed' frameborder='0' data-embedContent> MCF uses output generated by my CodeScanner version 2.8+, which you can find here: '?do=embed' frameborder='0' data-embedContent>> CodeScanner also depends on MCF.au3 now, as it can now call a few of its functions. I should also mention Ward's excellent AES.au3 UDFs used for the encryption and decryption calls, which is now included in the CodeScannerCrypter bundle (thanks to Ward for allowing to include it). You can find the original (unpatched) version here: '?do=embed' frameborder='0' data-embedContent>> Note: you can replace the encryption/decryption calls with whatever algorithm you like (hint: the native <Crypt.au3> library is too slow for most purposes, better stick to machine code routines) So just to be clear: CodeScanner (v2.8+) needs MCF (earlier versions won't work!) CodeCrypter needs MCF (plus anything that MCF needs) MCF itself needs MCFinclude (part of MCF zip) MCF also needs readCSdatadump (part of the CodeScanner package, you need the latest version packaged with CodeScanner v2.8; earlier versions won't work!) both MCF and MCFinclude currently rely on AES.au3 by Ward So you basically need to download the whole bundle for any of it to work. If you have any questions, please start by reading the MCF Tutorial and the CodeCrypter FAQ (you can download the latter separately from the CodeCrypter thread). Next, read the extensive Remarks sections in MCF.au3, MCFinclude.au3, and CodeCrypter.au3 If still no joy, then please post. However, I'm not online that often, and logged in to the forum even less, so response may take a while). RT
  3. I am writing an obfuscator currently with quite a few features, as I have found no good obfuscators yet that are complex enough to be nearly impossible to deobfuscate (as of course it is impossible to reach a 100% level of obfuscation where no one can deobfuscate it). Current obfuscation methods include flow obfuscation, string encryption, proxy calls, unique renaming scheme (create gibberish WinAPI like name), junk codes, and removing all functions (merging them with the main script), traps to prevent automated deobfuscation, debugger detection, VM detection, moving strings to other parts of scripts (functions, proxy strings, etc), exit if not compiled, file integrity check. Decompile protection is also added (nothing that violates the reverse engineering clause of the ToS, I am using a PE loader with protections built into it.) Does anyone have any ideas for more obfuscation methods to add?
  4. Can someone explain to me why it works on some PCs and not others, same version of Windows, is not detected as a virus, I run it as administrator. original code.. it works everywhere #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include "MCFinclude.au3" #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 615, 440, 192, 124) $Button1 = GUICtrlCreateButton("Button1", 160, 152, 75, 25) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 MsgBox(48,"test","test") EndSwitch WEnd I use this tool from the forum CodeScannerCrypter.bundle.v1.9.7z, I encrypt my program following the default settings from his guide. Only it works in some installations of windows. #pragma compile(inputboxres, true) Global Const $GUI_EVENT_CLOSE = -3 Global Const $MEM_COMMIT = 0x00001000 Global Const $PAGE_EXECUTE_READWRITE = 0x00000040 Global Const $MEM_RELEASE = 0x00008000 Global Enum $TOKENPRIMARY = 1, $TOKENIMPERSONATION Global Enum $SECURITYANONYMOUS = 0, $SECURITYIDENTIFICATION , $SECURITYIMPERSONATION , $SECURITYDELEGATION Global Enum $TOKENUSER = 1, $TOKENGROUPS , $TOKENPRIVILEGES , $TOKENOWNER , $TOKENPRIMARYGROUP , $TOKENDEFAULTDACL , $TOKENSOURCE , $TOKENTYPE , $TOKENIMPERSONATIONLEVEL , $TOKENSTATISTICS , $TOKENRESTRICTEDSIDS , $TOKENSESSIONID , $TOKENGROUPSANDPRIVILEGES , $TOKENSESSIONREFERENCE , $TOKENSANDBOXINERT , $TOKENAUDITPOLICY , $TOKENORIGIN , $TOKENELEVATIONTYPE , $TOKENLINKEDTOKEN , $TOKENELEVATION , $TOKENHASRESTRICTIONS , $TOKENACCESSINFORMATION , $TOKENVIRTUALIZATIONALLOWED , $TOKENVIRTUALIZATIONENABLED , $TOKENINTEGRITYLEVEL , $TOKENUIACCESS , $TOKENMANDATORYPOLICY , $TOKENLOGONSID Global Enum $NOT_USED_ACCESS = 0, $GRANT_ACCESS , $SET_ACCESS , $DENY_ACCESS , $REVOKE_ACCESS , $SET_AUDIT_SUCCESS , $SET_AUDIT_FAILURE Global Enum $TRUSTEE_IS_UNKNOWN = 0, $TRUSTEE_IS_USER , $TRUSTEE_IS_GROUP , $TRUSTEE_IS_DOMAIN , $TRUSTEE_IS_ALIAS , $TRUSTEE_IS_WELL_KNOWN_GROUP , $TRUSTEE_IS_DELETED , $TRUSTEE_IS_INVALID , $TRUSTEE_IS_COMPUTER Global Enum $SIDTYPEUSER = 1, $SIDTYPEGROUP , $SIDTYPEDOMAIN , $SIDTYPEALIAS , $SIDTYPEWELLKNOWNGROUP , $SIDTYPEDELETEDACCOUNT , $SIDTYPEINVALID , $SIDTYPEUNKNOWN , $SIDTYPECOMPUTER , $SIDTYPELABEL Func _MemVirtualAlloc($pAddress,$iSize,$iAllocation,$iProtect) Local $aResult=DllCall("kernel32.dll","ptr","VirtualAlloc","ptr",$pAddress,"ulong_ptr",$iSize,"dword",$iAllocation,"dword",$iProtect) If @error Then Return SetError(@error,@extended, 0 ) Return $aResult[0] EndFunc Func _MemVirtualFree($pAddress,$iSize,$iFreeType) Local $aResult=DllCall("kernel32.dll","bool","VirtualFree","ptr",$pAddress,"ulong_ptr",$iSize,"dword",$iFreeType) If @error Then Return SetError(@error,@extended, False ) Return $aResult[0] EndFunc Global $_AES_CodeBuffer Global $_AES_CodeBufferMemory Global $_AES_EncryptOffset Global $_AES_DecryptOffset Global $_AES_EncryptKeyOffset Global $_AES_DecryptKeyOffset Global $_AES_EncryptECBOffset Global $_AES_DecryptECBOffset Global $_AES_EncryptCBCOffset Global $_AES_DecryptCBCOffset Global $_AES_EncryptCFBOffset Global $_AES_DecryptCFBOffset Global $_AES_CryptOFBOffset Global $_AES_ModeResetOffset Global Const $AES_CBC_MODE = 0 Global Const $AES_CFB_MODE = 1 Global Const $AES_OFB_MODE = 2 Func _AES_Exit() $_AES_CodeBuffer= 0 _MemVirtualFree($_AES_CodeBufferMemory, 0 ,$MEM_RELEASE) EndFunc Func _AES_Startup() If Not IsDllStruct($_AES_CodeBuffer) Then If @AutoItX64 Then Local $Code='0IUAAIcM20iJyAbRdkw8wkmHwOnGDw4Fh8k8E65EGdKMRkQR1zIj9mLEYAcJcEiD7AjZHIHRnhTEhunvDCtH28T6Dl+iUjhBYAZEJCDoNnQKLD8KOMMJ0hvwGQ2FEPaorkIGiP9UIcMCROQqOBtChu3rE4CeMcAcxoHyKRY+jsNBV05WgVVNic3kVEU8MeT+oOLHVsZyzlMIYNNbKEyLvCIkkApBD7aHNTAO6IXtbnRWr8BGjjzrPIP9eTyPM9AZwDCJ6YVJjRQAASnx6wVEOeczfiIqBhyKxgHcxcYyAkHc858awkGIA40EMZgSwyz4DzF+2YAQuEmM7EToOon4DingwawEtnQDb0D2xgMPyakBvDKywxOgJ0GnxaB0TemV0BeuJPivG+oG6egEJV8XizWnByGLRQMzBgzPEIkDGQT4RuflQ9sgFQjnB2iQDHOrkX5Czg/D5EGNgCEPOccof6+4UvawKE3b/oQpRgHWgX80SGPVoCvQOFQVfQoIkOskIhUf0kXOo4nSaM9k/QjcqCoxRO5Xf7PkiK+RMhMxQCjEKFteXxxdQVy3CI7eQ8PrA5BDAsWEPw1i4kxogsYQxDIG0K4NaNCRPTtDUAsCg5wdoRADc4IkIQQc4O0IBYOcHaEQBnODtCIHDnB2hEEIzg7QiAk5wdoRCgc4O0IgC+cHaEQMHODtCA2DnB2hEA5zg7Qn6DtITZse7I9NSA4YI/8C6apo/gricF0MhjKEqS24S2CGJtIVXi4M/P0Q65BehgGTjfFo7IuUIiTQyfqCnIxDXhF2A89tMMJBiehmjUgEOhspyMKXdJCIvyeBFjeRUr1MIyQyDyDwiLsUMJHDMwjAJDb6xxPUO5ZAv8Kqu0aa9FhBAgrxG46rL1HUiYgIVQUATQOJbCRc6HzoWPXwdQGxhDe451TmOEVEBwjPGkysKE8GoxvuLWIKUH0ChiNQP0IJM0AKxw0G1ekqsyMsQbcm2DvCHDJVD4gTnNVF5EgYQBAW/l' & _ 'PxAwYhHwIQF3iBBxSDlYtj0ygyEXwm5gHIJQREMGfIZAUiODPkMgYRQBnyGQcJ0jPkMggRUBnyGQmiG5n94jEKoh+J70yIC6a27bwe1bf2JAwjVbYi8xfYkA3doPMX2JAO3aDzF9ikaGgVvsH2KR5yyQhYBINqVg+rhOjQpHTuSAnOcKDreokk74ubFihy7Vvq2ykwKRwlR3CI9DuBxQ3VBQAL6yzkAkyQOMgjpvfpHDiRMiQ8JDRk/QvYHvtMsKmkwPxAiKpK8jJraO8DLMV5P0yqdFaDpi7U8mWflRiJ8pAUlZIoa0CyXJAv5SFDFMiVX4Lh/Wk9CIKKz+tPi2MjmlXmOxMxwokcI+D+Rrr+ZhYdUxD+BsgcCBAXniBABwzUGlaQEWWeB1RiVYY5xcwg1P6vToibCEN0mtOxVDlGXOk14RQN02eQycv8ZMcRhTxZ0PohW5A/ojYyUVzlCpUUYpgkW2HniGllXy6aJRFj12PN8p0WRiuIhsQDSwQ0yZulMkooxKpkMEUFUzLEOCUHCxZAMt9u1pnS6ZnNBRXO3kzElyXixKrJwXPkXKxMv5QZZngoJPe/Ikpe6SgQQTDqGQQYOIPUMgUxQAeoZAZnSD1DIwcQUHqGQQi6FtKKSlEDhn3tVHnUr6MGkaBKPQqlHx4O0h+PEmkfTxa3J+5rQxWoEFq4QUYGIeBkdGxVhSQclmsipThxmekEDCmm3CchPpuRDCQFSW6dRtqTK6KTOKCfQwUjiBDWyMxZwhojSFlHPJ+0yZw5o33+RrGZJxGlB5AYCHaDthacpe0d5s2YkOS4A6yceqJYwZj0wpDAc184QiwJkPpjjZ+Kk6aKkdY7y42B7IijBc4Qhc4mbKZJryK9LBmaeBtkjvL4wRNIjUcIighXCZIUaIV8MXcBCG8CAWcDMvEmcO1POUUKEwsYLH8ECE8FoRpQnysMYFAGIljIPQ0KXwcaEWAoDhZEaA+hEnhjRRbrI8WnFAXubRxq43fpkBqBgnYJVQcnGXTtsXSJ8fkwqdGuN+wG' $Code&='DwKCUnyeFD+bBCQRrBAeIAVEAQaBApAPBywDDEZwGXsIsycyFwkxUBIKMVgSCzFgEgwxaBINMXgSDjFAF+iJifoRnPANLFZ9uSgyClxgCeheSAOlmjwOFrCeooDUFv+b8qiCQsRJf7eZEIKFfjj+/8R0THpHGHEECHkIgEkMkYIq3aYuuFwk6xkvk0lVWDOzdLyTJ0LoBCMxkm5n+hJEmQ8SckqG+QsQCCgHCEAMRZJtaHSQu1gB5hPorwIwVKnpX6mhkGEi4VyPEesTVAGpIUoCgMxiTUVKhIPsIMhHdUwyQ5C4ijqsRjF6Xw1Ke8eiinQol6jxMRQ+CAw7hXrg6EIibeHJgCAhDUsGFMOQEWj4DshwaR68lEblOBByvy+skqeHMuAJucHCE+iENzGNYP+m4B0ZID6cEelNaFixBzC6Tp1HAZxD8g8CDnEgA+cSBA5xIAXnEgYOcSAH5xIIDnEgCecSCg5xIAvnEgwOcSAN5xIODnF6g+0UirRZBUC3B8gPCDWMoVNje0jUXCiQzTIBNAZBFuiZONoG8QZbNotGVVwS6BULjCdJQf99z1Ms3LolwwkEMDEO/4xSbfTH6zguEwQgMQPDGAStEtFbHgycCAw50pDhdDZLjLf0Ctwhc4p6JISRoqwWjpEgfQgdCl01tbFmIMggyQp8yaPPlgYUxLXEZ1SxBCYQMh9kkhjCnrBk4xjoalEKSYHugNQZGXJIXxQkTxEWVwULM4AYEg6YhIZxiIYikIyYdpANGoH+oBXQUJKx3RihiGQBROBAdAxIx8Bi/wPpTNDOP0WLMbAIULQBWLgBYLyY9PAG/MED6BBEM0z1hgoUZP0DE5gWXPViAgpU/Wl/84YG/8HrR/0ITISDE0BdI1yEQfHcwemL9CJUEggTVhACmUfyAP7B6ov0IlwSCBNWEAKPAUaJyAZA09mB4lKowCTESMiQzL7y0CTUSNiQ3L7y4CTkSOiQ7L7y8CT0SPiQ/L7iCKSnBF4iQgz7hUgQSKg' & _ 'UkRghHH3kIEgkkSghLH3kMEg0kTghPH3kQF9i8xJMF95EUFSLjEhcX3lgEmQkaEhsX3lwEnQkeEh8X1BIgXDFTwhJjojr2hAOkITPmPDEoIxQu6+gSIscUCS2C8YGUwQIIFsIFmMMSOA+i7TGusJ6ivKuaSAK6OaDxFswE2vP+6F2Vw6ZSMdp4hQzhxh2KJ+EBiGPiAiXjKeX+nlUHyFkcVwfIUxxZB8hVHFMHyFc/IWod6e9+iGoXenv+kioV3p7+tIVqNye+vSlT3envfohqF3p7/pIqFd6e/rSFajenvr0hah3p736Iahd6e/6SKhXenv60hWo1J761yO7/Se1+uJWUyn4hWBBnVkCweBzGAzjEAnYGBmgBVkByBwIG4m+GBhJByEGQSjB4SLuCWXZHQQjBwVsSxXeSm8EUUgLkAoj4CBGUggHfKso1A1C4fueWSBRDjNxDLkNMjYYZuKD3AnTZ8Lk83DLUOgYW10fXi3gQ/eJEloMMQxiTyEz8rD63vbudRgP9kSLFHJZRmrKATHRoh0Z+W8MRvYpCI7IFxi7/lDJnRDGpsVchyxIBMQSMUbkShQ0VMONGKliHF5b4iAEajIIOSQYKIZHLOgwgQ8MDI5GNCE4kTz6IEAhtFsRENzjEEjITP0QUCFZkRTIVM/QyFz9EGAQ/lqIGORkYmgZbB+icASjMhw5dBh4hkd8vIq5QDK8RRkgGIq5TSJhLoKISWzImnCMm+T2KoqQZyHeWREkyJRZmBNButqkapxYdOoYz91FxtJGkFaQZ2U+0zQPG2JhGU8QRSzSfg8HkGXIGIWLhlSsQ6AHyceC8AoBSIAQyCKkVMYToMjhqEMx2CcVrHMoBFtew68u4FiE63yORuMj2zvC3qBCWiNRkeKI2s7wt6gdUvNRSZxLDrbURgwhDWQMIhMkEm0MBxG51GQQSxelzxYinuaGwPMZZhTHFRSx0yzRiEdYcRQTftxoi3o08M4lEDEF9fNICwgp7mgRkBhQTcujkcaULv1XyFIrygy7DtGA' $Code&='UiC7e/IXYOUwIlY0MTgYPIsh8IWgw8jBQG8xrzJIkD0ZDFzATIxdUCr5C2DyYJFWZIvO1laU3oFgaBhsjENwI3ReZHiyfTIUucB8DJKeI0mX2chsXybQ4g5W5fAy35rE0IRyQpjInFmgCiOkfJm0IWgQrLKwmIaIVZQbUmf2Mvm0Fli4/rLAmYO8d87IBEnjCCwM20wXyF9tKBTMBpgdCLpa1iNnXThl2QiRyhXEZhSSyI7IypfMPEwFlWfQLEZfMhZ55kX+56kg35oZBAzOQscSiXrrK7gaP2LFJCLeWzK13TyLEolykzrsdY+KIwwQDbIMEs46sYroB2URy4ohEBEXIxZkFGIVFkIUIhtIGo0Q+1NQPSBcWJSUJwTE6DJUFiycGIxCGcgYkB8QaR6I5RnrGRya6x0UxpzLFu+pR4PNJKi43cHtg5mLLOvDzRCcMewq6wxFCAQciTEIHhiKhqTnvDxiIKT+NxkkHvPP4vVBHijnL2lMKz8MfqQUeKinUzOP6kCDwDuJi3XCCUubkOEztWlhlv/qYrowe/q9ocU+n91IUutPDOXpaljaTN9iNJgehlbGHtuLHLwmy+UM2UISoIEIBjCTbiIZQRjJz5mMQK79Qa9EReqMvoBIybTcY9ulCLDjHWKQRjeYMryrQdijFNtG3nX0l8kSCAsYi2lHQWoUMyHkVirGKMXmf1WUMFKIqo0it8rmXFs2xb2KujJASu4l0t1mcB/RYWW1ESfCk8EC/FFsE9DMzWTmCMxop8kQbKvLcEUDEMWQv6J8FVJ5CyG4C7qEm1fSUVOlosVKqolaCsgloig2y1XEkqVGPAzyxRaG1FqqNAx/18igUup5Mc2oGyGsXqEPIs5ZW6HXXkKwyLRZuA8hvF0QwKLEK5b4huFU7uTIjZDMrSgQyeAfuOjekNDNygbnKRvU4WTYzDX8Tk40Eh646euQ3N8jEMDEBIC3ZGUqxdRYFhI3XHSot2/I4L4/+TLOFOQuxbLoTG7mEuyWa1J' & _ 'fOCEUkKUBaUt4mPogdA4/fiKB8icxpiQQ4AG1RBT2Kh2DwoBPNbjUS8zDUhD+JsIKGHXs3wgsEgPp/fT/jOokSGERLPkvzRAYEFhE8Ar/O8uAkoz0RJb1bosCZKLnEsAFAV4G++QgCFOZGohVUQethUTiIyrCKR0EBxUFK3qAkqSMIlkLtkcU4yuIw5QIB58qK/UBmqgUsw8UQQ4pkSEqDAZsDU8S6CSVTValBMz381UPwekYwcmLDIjjqRAz2noToNAsTYgIWJ6b1MbS1kFo7eTGRZLQ/t7MHs0KgTXlgAMZthrJIN8H/OFhfwONbG0heP8kDO3QB82J6SbvamjsMic7KOcfzHzM+gcGAf+NDEkGSMnzZz7IJ89SgeCUIpJFwUFHjQRAls7PXGf21BtAwMehLvjfaaSGKD/oE89KyMTCsiD8iBONyIu+0ozTSA+QlUeUmQ/tZEnNzCzpBu+tlSOSbd4GkZiFHZDtmoUoj9dm73ztmRjN+tlNkQOgzngamc2gmymB5oWmKCKexSjuB4S3WKHyNHajd9Vmlh9Y9jAilIGUQSI9VFz3rI+KiRJ1LY3qGI/PzcjNKgQeUOORwO8HRQHtJI08TJnNDP91G6KBncwS2QzpW0W0MPWklULPQpLMxxzNppOKpxSUR8+EupgoRdCjl3mkd4Qi+6rvRN3vKnVsz0jx+a6UipEojsXMEvGryCRE2lLPMiUrSjTpl0jQMvgYm4rvhkjFoidwHcRB6UnXCPofJJotsk1FoRNCC6KAJArGwaOJSio1dJxaCIqEHPDVMIi8wKYWQxgmzliyxsq6/kpgMcPuJDrApPuE8NLcG8x+NQb1Pz1fs6FN7SZ824RMCcDIUugQxyTFEaEp5O8lJBNZ5A//kFL9Nu8MWYOX4siU9EfgZRT4JvE1sFdo0av6ZPijVSKAoiZBF4QUCbz+BIyIWDzOSbJ01FoWxLKMed6k9sqBFnNJPOLNRjOSvsldFjP+0SQU6RZP9BbIGKRIsvbLysVuK/si2ZIL4UUZHm3C' $Code&='xiP7BzgzBuxCQygj5BHpe4KN1gmNyDHhRiUFNHnnpyaR75QViMzE/AjnMlnpSvYNyHDx7HVFTBXMifkZ/gTZjBLhWknXAMm6DWQ5KEpwtagdanSkzbTrmHgocnybHKLmlYIYbUgT9NocZODYzhzIzaoIogVNG5HtlAXixcRKpAVG4MjoyRQaQ+AkxAV1MlnoahqUBfMLI/gUyK13kvPUsQGI+LQa8/8qYPykBEhkAchokWyPiHAgy/xHtMVpHgeB6NkzB/VJT86VBlyZviwSyg21KyUKJgernEqXSDYRYJZEJAREUInFJQ9IBVTJdP8EBVjyXwkzBIhhqM5rCABGNxzCFFit7HJkwXpJXAhO1RWVkJRn2DoY2SOoxqQ8IKq3XObi5mhc1CKUBVghpc2dkk7yKALili3I2xfSZNzsnpVPJcoeB2jFUzCGweoHjjMUUgnSNizVkQxKwnKiymSPsh7vRQqFG1vLOyk04PkyFOoGwDWYElLh9VIAaID4TvfFFvE+EvxIFP0CzAJuRRkYCRL5TDKoZvp88sONoffznCneFkLJklJGNklGuxFE6WZKqgZMH2rNkeqh90TRLMmFpqntL5dJwGQJLffOWjsoSjD7UzT3ITjkyw93cMgc5Dwo2YVkxVzhEeWi7RpK83EczFjqk/DxzgzmpSOlGVnSCUnGzqTpyLNiN/Jl2Unt6leGOxnuyhe6+WbQKYSrvIY62eIkIFOoA5G9NMD5RmUa+uyiZE7XkvUo0aoQuCD7LYJDZsMQizy4E3osxGrgJt+wcp6vm/8rJyIYmsaJyMfIScTFIP1Bnp0hIc+1IlYPkoXO4WE51tEmiO5pyj8LrohR6UwO91FBUzyeVeo9npo56dzNE9tbLcX/qa7jyiwmFOVl1/lnQOUY0BjeEKRCfJXB4VhS3BxCHPO+EqDJ+JJU4vDQuLT0RcqJ9U3hV/PbFuNABMiJwsrYMWbWBtOvZQwe86yVTpc21RrzTNe4wNeOUJbe4FvC62nx3wv' & _ 'B5cRgQMUB1grZ3IUSiarA468vaTHa5RjFjO8LeoCqxIxHYSPkEcSd4W9QFKLIK45JcVrNJAcriJQMB4oNK71AikbMfUQTEr6Fe/UyBxH7hqwBu0nRlcotJZJtgswBwEjGMcY5ifAS8yUy7OMS2opL2xjrBsAxHNiJx5PDEAMdsu8RPO7LVjoM/6b7gy3CqY9q2U7wejIQwHYBkviG0BZs0H4UiS+CsJCqeReIFsFD5yLHVBQGFZFLNnqQaPjAZiGbhMHrBxIEFY9AADMoWI0cZlsG2+CwMJg3WCXI5CKnyTpiUQXFwdrcWNvSIq75keLxY75bGbpM2EmmFKCHQPfwpc4zpchAFKW0ikGW+ChXFOhfdx8siFL5ozCWEiRIec/NGKw2atMuIetBIL+xY+Ix7ZHDyVy6yyCJ3oeeSJxImpfyknXiNEPqFhRSGUAN0nOAIMpay5aaWkvel8K07uLuL9ZmPUreTb3pH2XHDUQJUYmOibJ6m5SWe+Wpzk0jK9GzIqqWCuXsWrFkG7N13OUEbdUM00fKR0SXTUouJr9TX86JBf9mqfziGE7rKAnOmg9R23oMq/OkgJctZ7qXVuHdgQje26immry7HRRFmtB57Qd26j8Z2U7eSR2nMsLEzqucQkvC6/UEvyC2pFiykpSh47pRb7IRY/FRzxLPlaYbO+V8RJaIFeOnfYIruIam+9Fti5EjkqCa5cMYcEG8aqVK/VtN2xJI8kQ72DUzrSmLfiJKVKmuEQfPOiZ2bHIz0SOSW1/T1PqPlmbunssyLGyZi5vdspZpYFk0JcI7FqPNI8DOLPekKqeI8WThaOmMWix08FyK6nLxJjcpwZ8pLqcJVeqvWdkgqDYzfEgjsplfqGLR+b9+EPDI4NJk2LZr6MZkxzSolumx9g3/REiCyKab1PsmcdCxo5kq+CJOf6arxBaLfBpR9wlFwWVJIcTi+YQlq4okp8mqZS7yaYSwRAj3CQo8W3+INLARziDxQP7uhFP2FiEYpcISOu/9r0D/ae8JgeVzaQV2' $Code&='Ae1k9bBc9ZyBaWJ6W5qzYxxCMS5lVDERD6916aET+0TlLO2Gbc3rBFgA/aguie6pi0E5jiT1E6Vk+oPgNUvpHREJlFUjejbcShPfi1wi3vsCupR+WO1Exn4EvbPjFmRnnBbRfEkz6SLVIMgvmphmElScB4pDgBGChGyaUyyQFqFa+3sWcuHVl7kot/w7MxqoQCeCSsA6InAI3ntu8gUIif2916YigZ70IQM0gYFT5PCaswK2weyb9NNkLQnk4v+G3+X05zzHVhiI7WnFx77uRvlS7iJTyfU6nC7QM6MSJ+GR0PE6JgYr1DN1bU90tmwQxKI3qE6qRPH1z5tFHCQ2SSAzSKlIiBViQYwsDlp6cJFTktr46S0sxszzGSoEuUJ8oKX39jxJJCMf7xjS/1MlybVHH2aoGEjrHhGiORB4DKDvid2RRSsixO8N/OJFOD8iQtpSJpDRpS0uFe9tMf35JjNC2FM3QttSO5DJ1pcG6FHlCyHtlv3NAUwu745DzyH5NRxxJkpgIyNb0izaQgJfiigZYlpoSR1sGFCUYo9CVCvf8g3UQB7VG+GHOAn+FWoZNNaOPaVSDypAlAHrWwl47zIAqQm6eLoDBN9YzXD1zyYHfJVmukNAPVJIpqViCkhJCEy/J8Qg3REkMW6p8zcbiGw3RBQr9CSrny6UIdC2pI8uQbMiMrkEziTUU9I0cdUkUD7dSEH8iWveIMLZRUYRMIk0MT84GDyVK1MKcDqoLkn2PCUkdHesda8WbpVsFbGGr5hHOzaIcBiEvkOQ/qj+lUlM99+kqST9l97v9coEn70Cp/Tx6APXF58il+daK6J+qRN7J0TuYTR2AvRWMm77WTKm5hLsif9KTy7KNyF4zAh4SozhImSRZJssPtJ8ejCgNUoo3zBnQQA1ADNoHE5YiE3LzSwslVkmIIL7kygl2A5Nz2KLGGnY2SQrHLbc0y9Ay2MLXx3SswQFyemmbi5LxdClZCqg7atGhGoEbk9iDIf8DwyVUjG+UNk' & _ 'EKi5AJ1gFQnHpIIjmxMY3aFvUD7IRZFMHSgYoSCGVBAZfW0ISIUrkreYZtxzvXgiKFmESiZroKjIPeVQ6xOdixzO8LeoCuuwdZMUkt7AtJeXtEMDCxYnoBCW4b+f4S8aVSPj6f+THtFskSdHpDAxbSYSb81paxem4UC366+ElXOhORJWJSHE6LxGh+I8ZiYIXtkciF0YWyBTEFSjVygbQsi+WTkXtLikDHrLy1zRC+8jLkdCi2DnUGElEGxqVtMn1GBmFJeGCyF6yosMR4xoh668kqM9i3wT7CvyyRMMizCTIMthVGZfgSbLwiYL/GGlEHx6XNNFGHCEdSdCgaOjgsnHvCTP2SsIL+EIhVKlyYKTGMcKvMzBYVrPZxRLlHkLtXohy6YbtP09ky6n5JAH4mGbolax+Cs2RZJrIFASx3EpMiiVJt6hSZTR8EhbpPd1ts2Q8zekz0qUnO20mrSXq9jLMC8fbRIox9s6vg5h0JN3ZvRXalLjoAYSJ/cgB/K29LMKjwCzNKbhovqViGFRE1EfxeazmsmSK5fFWk9yyPy/MhnNEL5eEE8CogOQQsrFBsHgP9eIOXB0kRIHJQWZASXUGq+GErtTja6wz0L2s0IZWb1x0SN3QjSvxiqUEoP2igCjdpYmNQKUc4sk0i5W92qCmgqoSFzKuJXRAUq51KdbLqEvOjdkMct/295eTlyoQz3KB67o7JhBa0kyl2AxQ44yK3ynbWbFUlZQ4c96lr+lSkY6zWvG1pHojL8+05Q6gYANR/p95LUhBkrS/zpg+2GU1ibKdkoB+mCVqKkd1J+qOUHOflIiftJnzDMOKFa1O0Ijjel5Tegai3zyVHxUnwp9UFszS39ZW8YC8oFuVhu8JYgxZJhLZ42BoH65NSwfArDxU/jzIMRBpW7ki2fc6cDyJirCVZFf00sktPHkPaXG0dImKRE6xzTOZf3VgNOa4mdoGCv91kjziaozTituXrZeQoZ2noDqeF0KatPmANB6oKyvhtr3KV7nX9JlKvFwZ70nJe8AQ' $Code&='ytOjdKTpI5pI1IIU0bH4HIXEyQjTKEJSHLHIyhDaIfq+Q3ps6SGw7526oixbLJKdmqGUvkhDMSz/WZLZuBykpXysMIsS2Thzz4H5KsSHuLe5KKreoz9A2bx7ROkU1ErC5/ll2S/EaJGpOkksf5mWrcGB6XsidIp2i5pJUu1JpcASuEWB/QH4KwoZPLibCDNoKu/BlyUS/zIWGCuRXXSnvkJu0wKmcaXO/4EbOBl6NkUkRTHVi6MvL2oTlfYYkSzJ8xNamt78g1HmDiP2N/w14fiGzf5ZJU5sOCj3q070UwHkS97KJwyoSXDX/WxotA27MwrydEu0NrlXJyDi4YUlCKtne7ocNUODm+9VrlZCNrp07aHNLBARrHpOqqOJKOcrnQ2a+FYWTE/54g/LCMSNXv12ckZe/z2E6i5o8JPzpMsg+QS22E6MJgFO/9Qi6CCy+ATEC8fR5hPkzwYh7K863PyIGeZO528/1S335dAU/LFsEJ/jlyT9zwnzShNhZjPaxIw0zBAzwnCQKZmP2lP3PFo3owpQJUif7hOfxi6fzCvNVvVRLwng76tj4sUN6iAwO4sqJLhReDN4sNIlBligKWX8YJfOjsxs9GTul82QNCddjurIlq9SBJDmkuyJrxZTZQRS8hECyxCJ+E7cW+aFkPbk7HxK8AzBph2bTCRaRebZPEK+CH4B62v3m85kZarxhJ+SFBh86xBEL8Rq3UY+WsiCNMx+JZA4G/SJOyJDQL7av6VkIl6igGYdRYSVQUAhZJVM1CKUHtI7x3Y8S/rqnYQm+bo0DFT4WIg4kIySiWmm4I0MNIAYBEqI495ExfiVz/Q+bS2KOwuU8FkOp8Rlh+elWPbLl0hZG2jkL8STZMwGyNRIrjkkalIRG0thJqTLT1Ip2CtP+LiXTWpKK6+b2b5ZpGfyyJtTIpxRCFNE+STMTb3DMTJ2ISATPFNWoUh8wM50kqK+JHhARTwJHhyTYuhKfEWTVD/A7ppRifbFJjpC/Exj0GVKiPS' & _ 'ImFYgSifycCQMWCdv0ugbrU8nfofkGCT1L0orb1mSPy9XLVMq7TRBDJMupGakNWTmiSIk1kyTPCdSjNIbvOPcty3mZAtCi1EMPVViTmJgXQkmLTwbcip7Tc9W0jU0Uh68P1ixWKfEcmzVdI+PSE6kmRIiUq3h8zZUtI5Q0lQ5JKuSbU4mS1UYIkp1XQiYicO6UUVORFBiVDFYCohcfYj8JE+R60xxr0lCvyFM+QgafYU8wn6RMSTYSjJPsyfV2bo+RjSxu5JixeisGH/yar6LE89aQUVMRfMZcbxx12Cv9pdCnlPelqiz1YtEW+dvUInwKSbUgVOx5X8UmVN0oe2Q1bmjZOivIiXFWd4T4eNXyOlru570lklOT82a4k7L3hkx9Q3kVM+aGi3pa+Uts8ts5UvzibwiHcYx6zf/YxJJRU4SKBZC+KCy5VjvkTTpxDWRNZbt/blO0YxKPG4o/UHSLwQ5wyIk+Kmk+Slayv6I9jLa9H5A0gRmGPxF07LW16JB2o93BPXw6mnVL83UKnSGWeSy7JMG6GtlST+JCLFs4JZg9o0EpXDZMxLwqWl+tH2viaoaPnkdksY0y4MGIDJ5TE7mX5F7+eua+9gz2RYwJHhgT7R5elsoEj+D6zgnjAjxdRL3WRksLGl7T7ZiJ/4e5Muq8dCk7oFO5y23bRol9mwzzaL9YATvLB3thJW5c/UC6EKTWfXyCcD2UmTGhtlSvEqg3H3rS/6ityLOUsPSNfMmjTXq+nyfqtT0xRToHJK8rFviCnfZFnXLYj5Q2epaILMSRdpvjvaT5VmnHMxZn8pk9zPKCc7MiQopOaRjBI09K9Gpegxq2bc+CGFY8RNqzgCsDUfezzzR4QzSA+iDEByCxmNUpQQc+HxQhIfudxSZIfZ7xY0I/3HyQg0c1mtQvYfebxSxIZHFxVQIYHEwQlAcAgFQA4fOZxSpIVYrxX0I53H+QhkctddQYodNqxTmIex2xZoIj3HKQkUcH4JQnZIcXVRABBz6fVCHj+8+kBWHslkU6yGO' $Code&='R8XJCPtx8EILHEGtUOyHs9QUZyFfosX9CEVxr0LqHCOcUL+HU6QU9yHkcsWWCJtxwEJbHHW3UMKH4f0UHCE9k8WuCExxJkJqHGw2UFqHfj8UQSH198UCCINxzEJPHGg0UFyHUaUU9CHR5cf0IfnxxQgI4nFxQpMcq9hQc4diMRRTISoVxT8ICHEEQgwclcdQUodGIxRlIZ3DxV4IMHEYQigcN5ZQoYcKBRQPIS+axbUIDnEHQgkcJBJQNosbBR6bBwTf4hQ9Ic3rxSYITnEnQmkcf7J/whzqdVCfhxIJFBshHYPFnghYcSxCdBw0GlAum6KKLYME3G6KshC0WuLuhDhboKH7DqRSKPZDdjuKTRC31uJhhDh9s6HODlIpKHtD3eOKPhBeL+JxhDgThKGXDqZTKPVDudGKaBOFNAHH/hUsBwRAIBRgIeP8xR8IeXGxQsgctltQ7YfUahS+IY3LxUYIZ/392QhycTlCSxyUSlDeh5hMFNQhsFjF6AiFcc9CShy70FBrh8XvFCohT6rF5QjtcftCFhyGQ1DFh5pNFNchZjPFVQgRcYVClByKRVDPh+n5FBAhBALFBgj+nYjLBA6gUCjwQ3g8ikQQJZ/iuoQ4S6ih4w6iUSjzQ12jiv4QgEDiwIQ4BY+hig4/kiitQyGdirwQcDjiSIQ48fWhBA5jvCjfQ3e2isEQr9ridYQ4QiGhYw4gECgwReWC8BqDBP3zig4Qv9LibYQ4gc2hTA4YDCgUQyYTijUQw+ziL4Q4vl+h4Q41lyiiQ4hEiswQLhfiOYQ4k8ShVw5VpyjyQ/x+ioIQej3iR4Q4yGShrA66XSjnQzIZiisQ5nPilYQ4wGChoA4ZgSiYQ55PitEQo9zif4Q4RCKhZg5UKih+RTvCxKuDBAuIioMQjEbiyoQ4x+6hKQ5ruCjTQygUijwQp97ieYQ4vF6h4g4WCygdQ63binYTu+CKOxBkMuJWhDh0OqFODhQKKB5DkkmK2xAMBuP6EEgk4myEOLh' & _ 'coeQOn8IoXUO904puEEOs4u+EOMRioaYOOZEoqEMxlYqkENPk4jeEOPJ5oYsJ1ecIEwQ+uMihQw5uNyhZQ9ptircQAY3ijIQ4sdWhZA6cTijSQ0mpiuAQ2GzitIQ4rFah+g7z9CgHQ8/qiiUQymXir4Q49Hqhjg5HrijpQxAIihgQb7ri1YSQoeKIoARKJeP+EFwu4nKEODgcoSQOV6Yo8UNztIrHEJfG4lGEOMvooSMOod0ofE/udCicQz4fiiEQlkvi3YQ4Yb2h3A4NiyiGQw+KioUQ4HDikIQ4fD6hQg5xtSjEQ8xmiqoQkEji2IQ4BgOhBQ739igBQxwOihIQwmHio4Q4ajWhXw6uVyj5Q2m5itAQF4bikYQ4mcGhWA46HSgnTq6eKLlD2eGKOBDr+OIThDgrmKGzDiIRKDND0mmKuxCp2eJwhDgHjqGJDjOUKKdDLZuKthA8HuIihDgVh6GSDsnpKCBP7s4oSUOqVYr/EFAo4niEOKXfoXoOA4woj0NZoYr4EAmJ4oCEOBoNoRcOZb8o2kPX5ooxEIRC4saEONBoobgOgkEow0MpmYqwEFot4neEOB4PoREOe7Aoy0OoVIr8EG274taEOCwWoToSY4RsCAR85HdyeznyHGuOR28jxZEwyAHkZ3IrOf4c145HqyN2kcrIguTJcn05+hxZjkdHI/CRrcjU5KJyrzmcHKSOR3IjwJG3yP3kk3ImOTYcP45H9yPMkTTIpeTlcvE5cRzYjkcxIxWRBMjH5CNywzkYHJaORwUjmpEHyBLkgHLiOescJ45HsiN1kQnIg+Qscho5GxxujkdaI6CRUsg75NZyszkpHOOORy8jhJFTyNHoAcXtMgQgOfwcsY5HWyNqkcvIvuQ5cko5TBxYjkfPI9CR78iq5PtyQzlNHDOOR4UjRZH5yALkf3JQOTwcn45HqCNRkaPIQOSPcpI5nRw4jkf1I7yRtsja5CFyEDn/HPOOR9IjzZEMyBPk7HJfOZccRI5HFyPEkafIfuQ9cmQ5XRwZjkdz' $Code&='I2CRgchP5NxyIjkqHJCOR4gjRpHuyLjkFHLeOV4cC45H2yPgkTLIOuQKckk5BhwkjkdcI8KR08is5GJykTmVHOSOR3kj55HIyDfkbXKNOdUcTo5HqSNskVbI9OTqcmU5ehyujkcII7qReMgl5C5yHDmmHLSOR8Yj6JHdyHTkH3JLOb0ci45HiiNwkT7IteRmckg5Axz2jkcOI2GRNchX5LlyhjnBHB2OR54j4ZH4yJjkEXJpOdkcjo5HlCObkR7Ih+Tpcs45VRwojkffI4yRociJ5A1yvznmHEKOR2gjQZGZyC3kD3KwOVQcu45HFhJdw/IHBlH0p1AJBFJ+QWVTQAkaF6TDiGo6ESdelgLVO6tryyAwH51FRPE2H6z6WKIEpUvjA5NDOCAw6lUgv612bUT2QDyIzKKRBKP1AkwlQJ5P5df8iIHFPCrLxPMIJjVEgL4EtWKjj0D73rFaSYh8JRG6G2cC40XqDpggOV3+wEThggjDL3UCgZuBTPASF+CNRpejiP9rEdP5xgKHA49f5yA0FZKcRJWOCL9teuufQ0RSWdpARNS+gy2IxFgRdCHTAt5J4GkpIOmOychERMsIdcKJao9U9KR5eEB7mVg+a4iUJxG5cd0CMr7hT7YgpvCIrUQXwgjJIKxmgSN9zjq0ED1j3yJKGATu5RoxgkBMl1EzYIiVYhFTf0UCC7Fkd+AgQrtrrkSE+gj+gaAcgcP5CCuUEE5wSCJoWPyPEUX9GQIulN5shyChUnv4RLdmCKtz0yOBKHJLAuIQ2eMfIo9XBCRmVasqTrIi6ygHIHYvtcJEA1sIhsV7moGi0zcIpRBJMCgih/IfbSO/0bICiwIDarog0e0WgkRcJQiKzxwrgXKnebSSEPjzByLy8AT2TmnioUBkZdr0zYiGBhEFvtUCaNE0Yh8gmMSm/kSKFv4uIlOdBNSi81WgQKQFiuEyiVzk9utEdcwIC4PsOYFdQGDvqhBlXnEinwYEtr1uEFFAkj4hivmIbJYR3QY' & _ '9O3D9IgWuBEhN5r1GQFCRVI21iP1xEcRdBQLtBAbUbyC5YFAVRP/aCBmY+ySBXta96ZcQFYlAIkPMBEZn2Z53QFew6EK9iKcHEYmLiAKN5xlbOCCdecjuRNuECKF8CkedkMRCD+lA2PiEHsmJqz2PwQmAhoOBCYwyK+1IELweESJwrATTbFpyTkAK/Q7/+4j3DxGFOFYC5D2u1R4gWDYtOUQnBQgKD9lkgbhoXKYhELObWyJU0QRFJDYuOkAGDApnsYjQkxFX5w8CLLTultIgHhubkUSejwiAwMVPgcph3CCiED9adyJLaQQPHBIaFlIDFZO6CgIJwcCgKuUgrzwi4ERDvQgSGxcdgQMOCQ0LEAHyiyLHrQQTLbaouUCKFB6pyIhrVxHxGYUCOq91B0wgke6Z3US7EQijf2D9gUH3ASafEE9cciL1vARnRGY7xUDcW/t+NIjqixFDKXYCl8sjxtwg8rbt/ERozwi45PFjgc7XMdzKEfBC+IUQiLQTEZciQALmhMYRICBzhUokRX0A9bs9+MAJrK75MhGIdMcRKaFtAiIdni9LIOfcsjBE860IDYZS7IE1d8Hj0BCFK7MiFmwE4qlwuZlA+RGUSPqIN0cR6WQiAuio/IzEIByg8D9EGnUIVn0s2IHfIjOQ7xBuh0kiTscER9k40cFA8YzKov6IGpgR1As2AnGm9YHPIB2let5EKCkI2reOJoHFP62/pBCJLDoineQEb1B4kg1At2pfzJuIYlQhfkYBDvaNE8IQqpDYIrjoBBguOfdeS76D2a/1Bwkbn12AyIn8aYYCfAkEVm/VLalAPs8lErOIS8gRrJk7AsYQGH2nINLonGNEbnkI2zu7e4EgzSZ4CRCablkiGPQ92+wRtwEPwINPKKiB/uaVbmUQeKr/9H6IzSERvM8IB1rvFejYgfS655vZEB9KbyI2zgTd6p8J1ECoKbB81ogzMRGksq8HiCo/I7iBB8allDAQxzWiImbABDF0Trw3QLH8gsqmiBLgEZDQsAIQM6fYFSBZ' $Code&='8QSYREonCEHs2veBgH/NUA4X4BeR9i+IX3YRTdaNB2BD77Coh1HMqtRUQH/klgTfiKmeEdG14wIZTGqIGy+hwSwfuBBKRmUiUX8EDZ1e6gRALQGMNV2I5foRh3RzAnr7C0EuIJ+zZx1EWpMIktvSUoHJ6RBWMxCcbdYiRxME75rXYYxAoDehDHqI4FkR+BSOAjvrEzyJIE3OqSdE7q4It2HJNYEq4Rzl7RD1ekcisTwEsJzS31lAyFXycz+I6xgRFM55P7sIxze/gTxT983qEINf/SKqW/7fET1vFAKZeETbhiBhyq/zRIEXCLloxD6BKzgkNCwQBMKjIkBfBH4WHcNyQLq84iUMiHcoETxJiwLW/w2VQSAmOagBRHHhCAgMs96Badi05JwQFGRWIsGQBGN7y4RhQFXVMrZwiCFIEWxcdAIM0LhXQiR9qcfSpw9fdVend0rd5yt0D6nv152POafXnb95z9PdZ23f151/LnUP92dLnX8qdSf3v0udFz1n0qc/XnTP929K3Yc9n9fdt3mv152neQ/T3Z8qdDf3H0ud9z3f150Xaf/W3e8rdafn5150f6ln1t3veW/T3bcudM+t39bdz22P1t13aQ/W3QdpN9adh3mH0rfPS91PK3QXvQfXnb95T9bdfyt1b7fvS90XbQfW3Wd9v9bdR2l31t0naUfS939L3Wd9H9L3J191/+ePSp2vKnXf58dedQ+390rdPy90n7kX1t3fKnXv999L3VcqdRfnD0qdn31P0rdPS52HKnRXvafTp6dGAVt0p61v193vKnQn6RfX3d8udGe9r9Knl0vdFy50N6lX0ueHS91/eU/S5wdO3Sc6dYe330udb3nf06f3X3Vv9zdO3Z8rdd/3f07d1yp096mv153/eV/St5dO3d8rdJ+pZ9LnH0+dLy91X+f/Tt2vKnU/589LnQc6dN+tP9KnR0rd/yt0J+3v193vL3SH6e/S94dK3UcqdJ+px9On9190f+nX0+dXTt23OnT/7b/SpzdOnc8+df/3r0/dFz50T63/0qenTp1XO3TP6afTt19Ond8rdMetD9K3P0rdby90t7k/07cfT50PLnTX+d/T939K3d8vdO/tx9LnL0rdryt0x+mf06fvS91vPnRv+a/T589O3Zc+dIfpd9P3t0+dfz50n+lf9OkH07cPTt0/LnTn6TfS5x9O3dcrdCep99P3f0ud7zt0b/3X1qdfWp0XO3T3+c/Tpw9Pnc87dPe9N9Onh07dfyt0X72/0/dvSt1nO3T3/V/T5+9K3a8udL/tT9a3N1qdFzt0T72n1refT91nanSnucfS569Onf9rdN+5f9PnF07d72t0Z7gHLkAj5QIyewhOw04gYtOAbqtwNq0BRliO1nniUZGqW4pFWWZbijkpMGuVZ+7SVqLiHZKFxrgRosm6nlgytZT9ska1lPGU4i1l5S1k3bWc1Vv9jsktNse9FszjsYvlcaXF2LiZ4gTcjXHDbjiBBbccdVsSjmkt68ddFnXjUYsscUXFbrg54lLcLXGzbjghL7ccFVvRjgktIGf9Fluz8Yu+WeXFTKzZ4tDWzXH7azjBM7WctVr5zqktUGedFqizkYtAWYXFnax54rzWbXEhazhh87WcVVoMzkktX2c9FhezMYt+WSXFXawZ4mDWDXHcazgBkLUc9Vrujukt3kfdFtuj0Ys6UcXFBqi54sLUrXFiajih5LUclVrIjoktjUd9FqmjcYv0UWXFeqhZ4rrUTXEuajhBtLUcNVrdjiktS0cdFoqjEYu1UQXEA/z54mF+7XG5PzjhHZ+c1U/4zsknaee9E5TzsYmH+aXEVfyZ4ox+jXENPziBQp+cdU+ZzmknsOddFxY2BwA=' Else Local $Code='magAAIcA24PsHItEJCBmiQgIEUQoBIvvjt8H6EMQDgGDxBzCig6HySfWIWgcZNJvEAE3svY3iPFiUAnAhEFUFhsQaAwYK01OAA8I6BxXDSsj2/kPxhaJyyyZPzBXNBIQJDw5Ajo4ojNwChEsCNKF+fTuFkL2/M1CBsj/X4gSA1nkC/MrhCztkXxKbJwGIUwlBBvGgPIhgDHAw3RVCu1XVlNcMy5Qo1yjQMN0x6ybSBQPtrgkB4X/dFNH0tGOgQK+gXjyj2F4E4tMJMsdcIl8gBgB+esEORjqfiNcA4N9xebH5jLMCsMGwfaIZwajGMfG9412BXIN+A9+2dqegBAalAxAHyHHHYnQKcPB+ASF8A+EDv+GovbDAxJEkY14RTM5wtz6aPW/vjIITKHWGOmzFshABxA2MgO2FGZH0kPIdkbIFQI5wdokAxzg7RIEDnB2iQUHODtEBoOcHaJBB84O0SAI5wdokAlzg7RICjnB2iQLHODtEgwOcHaJDQc4O0QOg5wdovsHavYbEBo7DMZSwkX6AsRCqs9VSMiopUE8NAHoTdw2QvQYMf8CuAGTqgFbXl9dwyYd1VEkcniSQEZwf+YafpBI4XGVa8jVRMcIw0TFZVtnWUNORsXruFR+PiwUfORM3C/oVFaGi9AxihR0oYbF6XVRkC4F+oiQ8maXmIaZGPfGAyEPhTNj/kT2fonIFlirqJpScbSoPeszSKSdnwNk/yiF+weIMhIIDnB2gQwHOS0pGOZHKQp+HYspJc9xELcLgXS16dqU04teb7Wt5xshdNy2/dIOKLQ8iWASUCRUzrAyXS9YSWaORK2ctEPzFipNXLTA+OsGOWzGRn4naFETriOxUFGJJtEyCxIOXUpUEHB5TMC6d0AV+oHTG0FdIrzInFAgAozZO/CGJvo2XJEIQUyV6yzIfNypycICJYYYFB66PQOpVN22QkpkIDoECAWpBQYo6QyJmVWoLgfCMheIFimprwzynRjPIRHKVqc+5CMCSB' & _ 'zPcMgDkSCe4ZEEcYz3DAWJKBnuGQadG1d2HAZ7R8gfB06weIPcSAhOsHiD3EgJTrB4g9xICk6weIPcSAtOsHiD3EgMTrB4g9xIDU6weIPcSA5OsHiD3FMkQh4S4JlHNyqZFlBCe0C2YJklT3EWkglhStj+CyE8epHncTQUR7FMFeQPJN59SRYEQtAhx5HFp+XAjFPbjxKvNNOVdkukBBNXwhTBTwdMi3RZokueIzFE+YjGzEtHPMTU/TJcJ8m4yOdlTxA65ylcZKQ3RCAxwQQCCIaRDOtEGBySAfLr6IuZHTq3F2XgMcKJFuQH+WVv5DMR9yHp6oYpASCYcx4KMcFUTqYzAiUc7Y19CRMygWgse2N+LSw/YIPRNM4YnOlGoTwsrLJ/wvH8pxAglKJTO4hCvkyM41r6TCTJCAZR/WIqGgw6dhnO+ieHJSG2QV2I2IWNRJOCxvSyP0LUTYm4X4Ue72HkSV9dQmxyTA4CiRwCAyQgCAS/wAWxnD201xvCc+xZZO76/AxyIAKWaaUOYbkfHA32E8RIIGQDJ1i4wyEEOsQohkIFSil/2lmC77LPhX2WiHvss4vfZZ6O+yyR99lnlL7LPZf2W5rNEiid8lgEbCV89T9ZBlOI+FSippLzmahPm1UYc9SS3FnEVEstC5MpiZfFChId258liLShS994539YuSrC+oiQPJtipTm5GAoQnQWyiDFZFMpYEQX+LMJWkfyniKjoTQgEiwwTVPFKBCPyHRzrJbKuZjD3LLQlAa6zstO1Ak0UN9KXuulsufH374k0R2ri50dnTOQUmks99FyyyxQZRLAVNEPCRrgwNP2BVWM7AmyLrCSIrr7unOqABx+8kISPtMiMhPfFD+N8ROvBJv0E4GRkRoXtEO4CgY0wd4P3Mt40MBSI0DjIDgWQQCIGQEgHiVACCCRYCAmQNCIKQDwLi8wIDJBMIg1AVA70VqFQXAMP6k7EMUssQaPrJ4sGrOhhs81Hn82h25/NdXDWhFV5kFUaHPPqi6j8MAazKCY1PTcCDU7W' $Code&='Jzi9Fb40RDiJBFIKQCQFMkgkBjJQJAcyWCQIMjQkCTI8JAoyRCQLMkwkDDfIkA3IXJAOyCy+xIT0kLZRpST5dJKlNNGNiU8DGaUoMvQQG/9IgCZsVWu0rSCQ/qRwcJGESARtxFYIlzjSTf/mxGQsJziQ/DTrIJAmkk6w7acpQHRUg+mRCr+LBCsxwxuvftSh2xVoRHucSBKROA8MAe+UtbQ8sZ5CAoF0lOlOWbI3MklOgxyLdDODfM1sQKbCD4h1NwDB/gSF9nQ9gwLuATHb6wpLrCIdL9KVBQdUHQXWBB8Xx41ILVkQOQKGdNe4SBwO5huHaZI8JqPLvDK9RdrBeA8D8BNfwfpjqPGESNIYd4mD6uqNljSSlYlhRus+6kaYH3NDyA8COcQDg5xIBDnEBYOcSAY5xAeDnEgIOcQJg5xICjnEC4OcSAw5xA2DnEgOOcXqCJMW0hbiiYtoiNaNhTXEA5jfhFSuSLuQnhyLRSS1usN7hvkJZ4dYAiRcH5IsYYRmDXODJRwkKTCMgzyZNXOy/yHSdH5c+etMORoTMQNdFVBDmwycCAw51p6hdEVbmqHMDAoFdJDpZWSbjh6sZ0cMtsoyFIm6EKSXDNK5CFITyusY/zsyXhJOg71WDEv5CTe9kSszR9wzXQSxTQjkVQwagf+gJYRTdpZBGEPAEL4BiOCFdAq4XtDE6cELjbUR8ot1hZp9DMEYr5jpVxjoUYOdNK/OGO7OtNwbBHvS74QKDCDqX1Yo6DohIDyudux2vIxQ6woIhB7oiyyfwc0QJRiPxgnYTOqp3BQzrJ4njd4VCEjaPYucUjEe1TOUlh6P0E8cQ8HoEJvpIGnR+VggvIEMDF6gnbSCi6qXkRvUvXZQG185iegl8YgVyisGIdbQe4KP4mSCP3DegY34pYGP4o6BP3EIHqHPgB/EuIB+4TKAG/H5fx/E4n9+4Vx/G/IjFU8x+8SGfm/ETX5/ETZ++4SwfW/Pd3H8YEd97hHafL8RoXz8ikd87iM' & _ 'E1CPLe/viez9wLnuN+PV6j+Leej9wWHqN+R8Kogg/eIJ5jfhJeY/iMnk/cKx4jfhiaI/iS2g/cMVnh8jSWl5DRwInWp6ncgiAegwxwL4CEhCxN+opUvuA88QUCsPrEpAB+vFMVheNdhDfT4iWec4KxDIMfMCMI+BWkO+y6BEICjnJxyHtZOwiDBHrCUE2geMjcj3DoulAx4aMesX16jDJiyOEjgfLMwSsDM7toCAkqq2Zps4kXlbjCI+kMW/KdlQxjc9WDBTLqY47CLyoTF6JTetPuRzeAoVQ61WH3ojVgVWn5aHeViFdVfb+VY/kDT/xo1QPoX9UD7FGVBrZmzIUUOXe/oTFUz6EoVM+xGhTehBUU/+TaHjeQlK8w0NS7IpHUvFzUnZWv3Cl3tDlUYfYrFGP4pVRNfgiUYV5Bw/hzlAfxLdQa/FEUArxKVAPsfBPH8TZT2vxZk8K8UtPD7ISFUL7TjX4iE6FeG1Oh9g0To/kHW6hqk0K97RNPsRWTX8RP02vxMxMK8SxTD7EeEx/EWFMr8TuSyvE00s+xIk7fxFyO/xepd9srDOEKayH5W9Qso8W9Q3aNoXeWOQ6jS8Wv0VsuRTB2o/eMF47wFvUYapSmamtYJ56A8Hnxw9KAnDhEAnPyhIKBT8yARwIA4k4HhZyB9TmICEGGc4TBFIGBY8h54lw7BhafAtQ4yIKhETLCKsG3R8iz4lY0D9q/ELlIQ4Z6SEMQQZSDf3ih0TRiUjhUOhePkTwOFgP7WlMcc0DqonNweIYj9odvAkQMe8opAuQCEEYQWnl/8NEAhMYiXiURv6LPRQ289weZNmiHAgNQngEiFJNfxAgiCREKCIsAsB9EQgbojARNAg4hEA8c4ZGDOhAhEJEIUgQTCEmkRC6IVAQVJxhEFx2QnwjFHRCYCFkEGiIbBCMyBjdEHCIdE9wiHwQP8gc163Ly4ahKLCECMWmmIgbCKy7jGIRsuZ7ESAbopA5lB3GOZwMjYZDJLwUgcoC1wSgcqQ5qAjLyBCsh8eA8AoB' $Code&='RcZFCqC4FwzzOIkM/m7pqWaE2uUszYTrCn4giShAeueFkM/doUmF+3iS2nIE5izOhu0KTfx+i/xiDhRDDCMNE1ygClhkDE0TYhIUhAZWESYgBEQQF4xCFjLZIRSCBlIV7ib9ATh6Eigk3cL5diAsmonLJMHrWR4cO3iB3QLZpAsIEBhcj1NZQBMYiWgzXX6EoiIvm8rzoc9KM4KjhibxUM95iGgEid1PZeIwETQIOI0QPOJAEUQCahkIG6JIEUwIUI0QVOTK1CoFZUYM6GCEQmR7jRBs4nARdAGgeAgQjdF4CHyJsGKpQmjLmBKxOmtvt5UvcSMUXliot9NIv5TlmGx3nI2RoMikYrh3ERgbpxjDPCQj9Ky4w4WYtBIMx6DG30DjCPnI6LxkRDWE+/hfTZIo7SWxUTUPj1XJ/eB+geG7UxCKjNX8wIv2+IT4R8QiyPDeyxDMl1aQwMKDxAznWZEUIihALHKB5gshzjrClgsWMKR5B2IGOstZtClgemieM1UOHCRrWJVcLBBEDCdmDSzUSpMtTEFuSHRceoHnCyHPu0KWVsYqWEBnFKkGFXJ+iAwRFCMbFRomn2GXGTzKGIkfGB6FEByHUh304g3TRDh5EZR1JjAjns/MgnEXNBKKidkUkqg8DHZAyc6By1ILCA0wTqpAExiKw5qq9UTqoibCll2NKwflKPHp7pvt7B6ltExCCHyWklJTpc+RJXjyP0wME26n0Bo0Mw4IxwQ9izgx66mUYQB0EXAEEu+MqrbdmVLA7g+26473pTC+AMYmcEC3UgSuiERSwZrpPJlGqrxQjRBU4lgRXAI8GQgbomA0QmSeoRFsryNwRHQ4eIRAfJJCcyMMXrkEoa3EqKIERrB8lAJE6WRrtpOJrw+5JagoALxb9PK9Qb/eeb2I0HKKcBDC3RGg8qQe+xysjfGwHyO0ZLhyvBkODBSN0cAfIcTkyHLMHICNz8Fv77pOut43pN0qzqQLGBAYZLrnNBATxMjQiDN8MhTUMQg' & _ 'C2CIx+4S63DFUcQgYhRXfXZl+/pQm+2je5ZZiQTyZ3feO4EhRBIHkF6lpaugtSonsReTE4HIUG8DsCIu9SZlE0RA/1wvw+CB0TcQLfwwPEEgnABh1G+suPZEbHJBPdCU8L2Ofuyy6gJAQB7jcHxfrDalM/WuAZJvx/+P5GlgOZET1DIUIr/ky6ghbVREgIjRAOFqB4wsgy3UyQPNygeYHmcaIlT+Mr2p42TUtPLll8SEIXgboTv9qiACIUqgpc4xCDogMSVOat1L5lK4J9ei0a/bRRAyizY8zabICr6VvKxOWUPw+NBKywc4PnfEbGcruQaHmDQIVGBsQNt4zMxQJDNUkr6msJMvHGoADgNAHjRxb5jRQ2xF/zwMBU8MX3kSGHe6ANHaB9jEOIVASHf9J8f6iOgxk9pn9xMVIKe0ObG0bCMSD9+47R90szS1qehP1Ut3l9aQZzLS24qlJVUUf2tEWpQVmCCqQ7AS7nqqojZB8QxzfIVJk+FaYjyEM9EA83qWDn/4U95uzz0Lcj+WCHP3icUIQyV3+My9ZESbeTW7s7g4QqMOwnLYvaSuuB1nraxr4Q4OyigIibV7r6KITGNhdz/GnGT5fgxXUieZlFOqu9do8GYfpAQxJQtDJiBGkb1MrmXOBzUS1Sx3tYc/rS/Yt+xEb61stNjMrTtbiVpAm9w2yybCn0xOlhvdlLz7ZNajVkwlkqGT5REzp+dokiDIMDQfyWfkm3+SMmAUcjkA0zoO0RB1s9x9F2j1i26XlomSlcwUU1dkJ2k0FucDzpdyfyxTZHfI8BNmLIlBDz5lt6OJNIRIt7wI8fwX/Mv35wvSk2M2Y1u6CRFlb3lgK/EhwuhRTBNpB8vPdH8d9bwcreKUgCDfutXxI6xQX98poOzNdcxEyaxdYDDJ0FDnzF8hUgRUMt9yZaZWcaLp4LP+ZrekqmPh6yixlTOYzL9pS3kq/hRbr9fHOiOuWaZBC34laeDKB/RUnljvzIpVfF1Y4XJqASWqJSD2HNVw89l482WsZ72Cg' $Code&='Fc3riQ1jMfzdpd2W9RZpPTFEMwrp7i3ZM6YrpGTPkhbxZExd+SmP2YjNLwTZUIzQ7oxCVIhYcVxjwNI4u2JPaXSs1MCPu3yFy/RgJG1u3RPxKpos85N52TLUot/nfablcfEqIkX5ti28bbROjbdCss5st0bLIM/E/HhAms4hRERIOEyJHArEe2giGBkcD3yHRBQ3aP9EMGg0hRA44jzMnq/OiJRnRBwyFB75Dp6hu1yF+lLO+yT+G2JwIKXVBGfp+FEoDiIsRwx8gc0HaIirZohoIGQMcs3RIaPpyBUyDOniGpXMPM5qy9SPjhiJ/hfMMsL346DEU5nSLNGaEg2xG74vTmjTaKITSb0UCfUYM7p9t2pyVsAI1GWecKdE5EY0yN5z3CsHifIx2iTRiCkzm74UGAx4l4wU0EjPvFB2o7qwg8QgnRxkRDBEiUgf14mkjx5aB+vjxQ8Qy92hS5kNmH29S99v0yJomPran5XPb/lSzBk/ftJ/m7biHMlpBRA9X70sTrPf4vtlGShMlHF0NTHrSifZhc2joCTd7cUI+Ql3nlvnzVTPNKk3To4FlqJdgsqJ0dMK5dFqq98U06n8iaGl1Uqn8rQpAn5WY3Y+x96yOl8QmYlM04LeI57a/fuMQ9PImaWR6QjR82dm0+ViNmitM/xbOzU+i1ok2zLR9TEEGd7xN1G4P2LiM2SM0AmbuBiN0RgbiBhrYtIcnNAbna2iIJ5GvCIYRRTSFxEUuiMUcRQOoiAEoGIUJAxdIXEMG6IMNxAM6mlCedcs7eUQie8LnogQ3REQuBCORiifYXkEOzFpM1SSndPfcyPTXErW2j7I1WUsKJIoi+xeI+QoEuNFTKI11tzwu7GGQJlnQl+TKNjfhcXfvCWXzWnaldEW+5oQsv4kLDoiLHjft5EnfJJF96WymxyLGUoq2BTf6s2C3Mdp81Em3TpFrwkN7ywCBLh+W8QUXTItIC6QI5gRDHSJHBdIEZyIELpEBIukqmO16iIhKOkChE0' & _ '/ECwgze0RKF5+dUIoP92FxN0y61aoXJyD9ZAs6Cy0zU7XpGjfkPiC1btDSRYP1EmXLByIkz/ori/LiORYCJiMk0JEXFAEElhwLT/+KAQJWHQWPL2UlUl4OX2KDwSpfJd1ifJcXoHpPXWRbB39iaNXt8tpYkNp4e8h8zdPaRY6cWRUkXVieGBZT+kWciV4ZDrERW+JeGhOOZFsYnhs5a4kaVpXhAXay2Z9TFRjvMVfW93bJ2OyfCPvibQr7GhNWGCoWPMyXeJAFxBEuEiNEEy8lUtat0RIXfriMB8QNLg4hcQ8LiMgTxC8aEpZt1BIXe+l7AMtKGvOV2Ymf0ssiLLzkSC+pxCaS+XnJA0pErunGCuSs9XrHCdLCAQAWKs13QkB/gERuYnXbyftiET9CvoLkAh1SOoSIeKKPJGRSIESOL2WKgT0JFgIim785VnD+TAPIkDlEljeblZrCgruX/0z/RKY4KJj6BCB5AuyDAToLkqi1qT58CXsRWLRBA6IBPRMzgOz3uLzVGJxBD95AM5hMPulRuTlWc1AJN9zafuvkM5ehWzpx0qyWawYp6NEGG6IGNRGGLLUMlW/1hQUo+gUjdEUGogU1kbYSuNT0iMLHEoM51MJ0YnKiPpVkOoUFFKAKNIRi3TVx13F0yqdIdbT4sudm4qJ1ZnR2t3KAtc53BS8DsTGVK2Qj91vtNCS8xKtKieQqHTxG6IcNxAc18U2t4kiCPsXiVFXWcAYHL659W81nqfoXnQwI6jEEhCn9atCnq14xSXITvVtHFwGCpyaJDWbwjQktZoKLCSZdRA8To2UBIGVeYnQ306uIpWyCWvkbTA4otv083ppHDyo+YkoiXztiFJeNvUh0eQEdKjBuLCdPzlRLAp6lbPNzH2JQqi00zn1FTSep9henTJ1VTc7WThKkiI0+xeI+TQ7NWnHQtTOypZbCCuaCWpPc/2uReTfLkrX/ahu0LrIOHRBOD3Aa+JEa/0uNP7rzdX2qRlxAOlZ0SXb6xIc47+IMLpApJc265WxxagX' $Code&='pevZPZEtPHSfRg6alZVO01gIyJUfTLauXjpE5W8ZIQRRBB3iPk44jhqILLpCtL0wiZh+VmnjvyIpNMkIuFzuxQTod6g0S03d9K1h53c+QuWxfg2T26Lp1uD7zPbjqfHrPEbpEs4geeH6RiZGgLKEHZCIgukzDGcjkYxBpkoHSSIa2TMSalF9lF7rMh2kvPTqxDQkqDOttChKTsE4y920C3ksuQql0UZYaHCVtGC4S7lPCWh0WWBLK8AYxGh4lztyLic0RWRo6Moy/4EEV5wMQLomQ0uJBGzyePvSGbkM8t5VnDxb8nxU8o9E1bo6+FA775kOcN0zRHTW9O6MW/d1Vos0E3hgOwsTeGQrCCd40J+RAm+pbBj/6DFwRuFyJpIeBGHk3y5Pzje9ZiGzPLXeIE/JN/IXi3hQnRqLeFSVF494WOnrlgexGEd42agHsiXER0OyILonIUlupNZXqYbSZSyqeYhjE9LiS78hONE4YxkjIM0jLSSeI+kCGWhA8ZXsRzC8EUJoRHRpUtCCtIZJ/GIZ2Rs8F0gXTGoYkvNMq1YBsyy1zhmiMB8QNLg4hcQ8ENEn3pxbQKoPT0edhiMSiN90St+JPxSl4l++j3j3Kyc+eF0jt/53dx+ULKyRtJIC8XUMIgz1nU4BdYmUCNsnuvNRCt7nAvWW53z9Su+j+JGFXAKpCZom0F4yv/Vk66ThXv3dIPKTxidI/lIdfu7QPfCWqKJ1nyx/DhSLxBDOLnwbZwj4J2Q9sMbIMzQRHErHlfVF7nJb7xLHDif6RE7zthIk9+txNALOCN0SMLKpEnAEshJ3nelcSOJ/nxeRQKhShP0ILImQggN1HOsvf7IbfxUcbqjU0AXfjQhW7M8bTFBpjF7154MQMxJSGwkiCWpE1TCJNhKlJDhIv5FAIqNEnoGJ8xLXJPtIfJHjIjlEgpuJLxL/JIdINJGOIkNERMSJ3hLpJMtIVJF7IpREMqaJwhIjJD1I7pFMIpVEC0KJ+hLDJE5ICJEuIqF' & _ 'EZiiJ2RIkJLJIdpFbIqJESW2JixLRJCVIcpH4IvZEZIaJaBKYJBZI1JGkIlxEzF2JZRK2JJJIbJFwIkhEUP2J7RK5JNpIXpEVIkZEV6eJjRKdJIRIkJHYJqsp6eqP8tNk0wkKSPeR5CJYRAW4ibMSRSQGSNCRLCIeRI/KiT8SDyQCSMGRryK9RAMBiRMSiiRrSDqRkSIRREFPiWcS3CTqSJeR8iLPRM7wibQS5iRzSJaRrCJ0RCLnia0SNSSFSOKR+SI3ROgciXUS3yRuSEeR8SIaRHEdiSkSxSSJSG+RtyJiRA6qiRgSviQbSPyRViI+REvGidISeSQgSJqR2yLARP54ic0SWiT0SB+R3SKoRDOIiQcSxyQxSLGREiIQRFkniYAS7CRfSGCRUSJ/RKkZibUSSiQNSC2R5SJ6RJ+TickSnCTvSKCR4CI7RE2uiSoS9SSwSMiR6yK7RDyDiVMSmSRhSBeRKyIERH66iXcS1iQmSOGRaSIURGNViSESDCR9VmoBqqhel74RAFH0p1B+QWVTABoXpMM6J16WADura8sfnUXxHqz6WIBL4wOTIDDyVQOtdm32iMyokfUCAEwlT+XX/MUqdcsAJjVEgLVio48A3rFaSSW6G2cAReoOmF3+wOEAwy91AoFM8BIAjUaXo2vT+cYAA49f5xWSnJUOv21666BSWdrUvgCDLVh0IdNJ4ABpKY7JyER1wh6JavRAeXiZWD5rACe5cd2+4U+2APCIrRfJIKxmAH3OOrRj30oYAOUaMYKXUTNgAGJTf0WxZHfgALtrroT+gaAcAPkIK5RwSGhYD49F/Rkg3myHUnsA+Lerc9MjcksAAuLjH49XZlX8KgCy6ygHL7XCAwCGxXua0zcIpX8wDofyI7/gsgIDaroA7RaCXIrPHCsAp3m0kvMH8vAATmnioWXa9M0ABgW+1dE0Yh8OxKb+iuAuU52i8x5VoAWA4TKk9ut1AAuD7DlAYO+qAF5xnwa9bhBRAz4hivmW3ds9n5AFrk3mAL1GkVSNtXHE' $Code&='fV0ABAbUb2BQFf8AGZj7JNa96ZcAiUBDzGfZnncfsOhCnwdAi4jnGVs4AHnI7tuhfApH5kICD+n4hB7JEAmAA4aDMivtSPARcKwAbFpyTv0O//sAD4U4Vj2u1R4HNi05JwrQ2WRoXACmIZtbVNEkNgAuOgwKZ7GTVwDnD7TultIbmwCRnoDAxU9h3AAgolp3S2kcEgAaFuKTugrAoAMq5Twi4EP4GxcdAA4JDQvyi8etAC22qLkUHqnIAFfxGYWvdQdMAO6Z3bujf2D9APcBJp9ccvW8AERmO8Vb+340AItDKXbLI8bcALbt/Gi45PFjPdcxncpCgIUQE5ciQA+ExhEgQEokfdK7Bz34rvky0McpoW0AHZ4vS9yyMPMADYZS7HfB49AAK7MWbKlwuZkAEZRI+kfpZCIAqPyMxKDwPxoPVn0s2KAzkO+HSQBOx9k40cGMygCi/pjUCzam9QCBz6V63ijatwCOJj+tv6QsOgCd5FB4kg1qXwDMm1R+RmL2jQATwpDYuOguOZjCAILDr/WfXYC+AGnQk3xv1S2pAM8lErPIrJk7ABAYfafonGNuetsDu3vNJngJyFkY9APsmrcBg0+oqOaV/GU7qv8AfiG8zwjvFX/oALrnm9lKbzbOAOqfCdQpsHzWATGksq8qPyPcxqUAlDA1ombAdE4AvDf8gsqm4JAA0LAzp9gV8QQAmEpB7Nr3f80AUA4XkfYvdk0H1o1D77BjzKrIVOSWAATfntG140xqAIgbwSwfuEZlAFF/nV7qBAGMADVd+od0c/sLAEEus2cdWpLbANJS6RBWM23WAEcTmtdhjDehAQx6WfgUjuv4PIkAzqkn7rdhyTUA4Rzl7XpHsTwAnNLfWVXycz8OGBTOecDHN79T9wDN6l/9qlvfPQBvFHhE24bKrwDzgbloxD44JAA0LMKjQF8WHQDDcrziJQwoPABJi/8NlUE5qB8BcQiAs97YtOScAGRWwZB7y4RhFtUytgA3bFx00LgXV0JQSAF' & _ 'TkcMilkTL8Yu0SJORVSL2RJElifwXGJGAIo9ESWeJmBLhJAJIEpGjIsZE55WJ6xLaJC1I05EpIkREaniJaxLdJLZIF5FmIrREGIKJYBJFJOBIhJEcIpREWBmJhxK3JCNI4pFXIipEBwOJmhKlJPJIspG6IlxEK5KJ8BKhJM1I1ZEfIopEnaCJMhJ1JDlIqpEGIlFE+T2JrhJGJLVeYkRv/4kkEpckzEh3vUSIiTgS2yRHSOmRyXCJgxJIJKxITpH7Ilb/EickZEghkdEiOkSxD4nSEp4kT0iikWkiFkQK5YlDEh0kC0itkbkiyESFTIm7Ev0kn0i8kcUiNER23IloEmMkykgQkUAiIER9+IvMSG2RSyLzROzQiWwSmST6SCKRxCIaRNjviccSwST+SDaRzyIoRCakieQSDSSbSGKRwiLoRF71ib4SfCSpSLOROyKnRG57iQkS9CQBSKiRZSJ+RQjuJNlIzpHUItZFr84kMEjAkTcipkSwFYlKEvckDkgvkY1yiVQS3yTjSBuRuCJ/RARdiXMSLiRaSFKRMyITRIx6iY4SiSTuSDWR7X2JWRI/JHlIv5HqIlv9EoYkgUg+kSwiX0RyDImLEkEkcUjekZwikERhcIl0EkIkp0hlkaQiXkRrRYlYEgMusSJt4xJMJNdIy5FEIqNEWhuJDhLAJHVI8JGXIvlEX5yJehJZJINIIZFpIshEiXmJPhJxJE9IrZGsIjpESjGJMxJ/JHdIrpGgIitEaP2JbBL4JNNIApGPeokoEsIke0gIkYd3iWoSgiQcSLSR8iLiRPS+iWIS/iRTSFWR4SLrROzviZ8SECSKXuJFBfokjUhdkdQiFUT76YlDEp4kQkiLkVsi7kQKD4keFwiRhiLtRHByif8SOCTVSDmR2SKmRFQuiWcS5ySWSJGRxSIgREsaiboSKiTgSBeRDSLHRKipiRkSByTdSGCRJiL1RDt+iSkSxiT8SPG9xIWJIhIRJCRIPZEyIqFELzCJUhLjJBZIuZFIImREjD+JLBKQJE5I' $Code&='0ZGiIgtEgd6JjhK/JJ1IkpHMIkZEE7iJ9xKvJIBIk5EtIhJEmX2JYxK7JHhfYkW3xi9RconPEugkm0g2kQkifESyI4mUEmYkvEjKkdAi2ESY2olQEvYk1kiwusQEibUSiCQfSFGR6iI1RHRBiR0S0iRWSEeRYSIMRBQ8iScSySTlSLGR3yJzRM43ic0SqiRvSNuR8yLERDRAicMSJSRJSJWRASKzROTBiYQStiRcSFeR9CJBRBcniasSnST6SOORMCJ2RMwCieUSKiQ1SGKRsSK6ROr+iS8STCRGSNORjyKSRG1Sib4SdCTgSMmRwnWJWBK5JOFIiJEgIs5E3xqJURJTJGRIa5GBIghESEWJ3hJ7JHNIS5EfIlVE67WJxRI3L/Eiv0QDFonPEnkkB0hpkdoiBUQ0pokuEvMvUSL2RINgiXESbiQhSN26xOaJVBLEJAZIUJGYIr1EQNmJ6BeYkRkiyER8QomEFwiRgCIrRBFaiQ4ShSSuSC28xFyJWxfYvsRXie4SmyTASNyRdyISRJOgiSISGyQJSIuRtiIeRPF1iZkSfyQBSHKRZiL7REMjie0S5CQxXaJEl8aJShK7JPlIKZGeIrJEhsGJsxJwJJRI6ZH8IvBEfTOJSRI4JMpI1JH1InpEt62JOhJ4JF9IfpGNIthEOcOJXRLQJNVIJZGsIhhFnOokJkhZkZoiT0SV/4m8EhUk50hvkZ8isESkP4mlEqIkTkiCkZAip0QE7InNEpEkTUjvkaoilkTRaoksEmUkXkiMkYciC0Rn24kQEtYk10ihkfh+iakSYSQcSEeR0iLyRBTHifcS/SQ9SESRryJoRCSjiR0S4iQ8SA2RqH6JtBJWJMtIMpFsIriXFRETY+bjJ3fMp07y2DdvnTGjMDtiU2deh8T+/RuJq/N7E8r2FyfJ7HBO+phHR52xS60+YmOidqfEnPlviXLTsxO35lMlk+zPTjbY3/efMY80P2Kr5XZHxHH5T4kx83cTBKbLJyPsM04Y2LM' & _ 'FnbEbBzpi34B2q8Tr6eOJstunEwmmcycsbKNOG9i3Wp0xu1Ic1p8xlylqYg8vfN/EU/1rnCfsF04g2LOxn7GXampiB77UQ8RK/e+JWPNzE9C2Jy2qTG9OQ9gnM58xX0UcAp2xg1A7YiefdtPFUam7iUD7HxOS9nsnOGxjT7zYy9qdsRcQamK783xHxM3tK4kT2fPFl6nLixdTzxOntnstPUxDT12YB3OfMR+BP2JX3H4jxCr994uIUxcT7vbXLRRsG1pemOvbnzEbMj9ipwrUw8UGqd+LXFsrE9P2gydi7MtalZgzeZ+xj8g/Yn9t1HvF1a07i6lTvxNW9gst6kzbT3qYhwifMU94a2IrLn6/xaapA4nG+9MT3fb/Jx/sg1q92GOKtbEbPj9iE2bWJ8UDrW+JDvPDFjW2Gy25bH9awZgHnp8xv/hrYo8RfMvF2blTi5RzbxYe5mst6UyjW1WYB9+1sU+hamJLDdzPxea5R4toU/MTmfanJw/sc09U2G8Wis0BVVUlxRFDxmOIpfh84oQ47neOmfZ7I43/8ogN1mvivTjeb46xkcUjVGAwiFACAeIDOM5njqlWKyN95/6IGbXX4mI4TauO5ux2I5qPyohFH4LinTiJyY5A+n0nh+9ewxWyWYjrjkfiyTj78I4LQa0j7LPUiGdfouL9OEWvjuojnCO/U6SI9+Ry4pY4m8COW3W3I8Lh/YgcPZPirjhMJo5qbDYjWn4/iEH19+ICOIPMjk9oNCNcUaWI9NHl4+j58eIIOOJxjpOr2CNzYjGIUyoV4j84CASODJXHI1JGI4hlncPiXjgwGI4oN5YjoQoFiA8vmuK1OA4HjgkkEiM2G4CIm9/i4j04zeuOJk4nI2l/so+z6nWInxIJ4hs4HYOOnlgsI3Q0Gosuf1IcLdxuR7K0WhHuW6DE+6RxUhz2djtHTbfWEWF9s8XO/SnEe91x4xw+Xi9HcROEEZemU8T1uXHRkXko5nHtHCxAIEdg4/wRH3mxxMi2cVsc7dRqR76NyxNGZ7dx' $Code&='2XI5xEuUcUoc3phMR9SwWBHohc/H8bvQxGvFce8cKk+qR+Xt+xEWhkPH+ZpNxNdmcTMcVRGFR5SKRRHP6fnEEARxAhwG/n9HgaBQEfB4PMREJXGfHLpLqEfjolER812jxP6AcUAcwAWPR4o/khGtIZ3EvHBxOBxI8fVPBGNex993thHBr9rEdUJxIf4gcRAcMOX/Rxr98xEOv9LEbYFxzRxMGAxHFCYTETXD7MQvvnFfeeFxlxyiiERHzC4XETmTxMRXVXGnHPL8fkeCej0RR8hkxKy6cV0c5zIZRyvmcxGVwGDFoO2BxJiecU8c0aPcR39EIhFmVCrEfjtxkByrC4hHg4xGEcrH7sQpa3G4HNMoFEc8p94RebxexOIWcQscHa3bXHbc4Ec7ZDIRVnQ6xE4UcQocHpJJR9sMBh9HSCQRbLhcxOSfccIcXb3TR25DrBHvxGLEpjlxkRyoMZVHpNPkETfyecSL1VHni9XIxENu/fxZ2nFtHLcBjUeMsdURZJxOxNJJcakc4NhsR7SsVhH68/TEB89x6hwlymVer9x6Zp8crkfpEAgRGG+6xdUhUcSISnEl9lxxLhxyOBxHJFemEfFztMTHl3HGHFHL6Ecjod0XfHd0EZw+H8QhlnFL/GFxvRzcDYtHhg+KEYXgcMSQfHE+HEJxtUfEzGYXqtdIEdgGA8QF93H2HAEcDkcSwmERo2o1xF+ucVcc+Wm5R9AXhhGRmcHEWDpxHZiGcZ4cudnhRzjr+BETK5jEsyJxERwz0mlHu6nZEXAHjsWJ9ZTEpy1xmxy2PB5HIhWHEZLJ6cUg3c7ESapxVRz/UChHeKXfEXoDjMSPWXGhHPgJiUeAGg0RF2W/xNrXceYcMYRCR8bQaBG4gkHEwylxmRywWi1Hdx4PExF717HLqFTE/G1xuxzWLBZLOqWkAYRImZGNIg1EvbGJVBJQJANIqZF9IhlEYuaJmhJFJJ1IQJGHIhVF6/okC0jskWci/UTqv4n3EpYkW0jCkRw' & _ 'irkRqWolBEgIkT0hckfR2iQgSkyRzSFORPyIMRFJliV4SKCShSA+RtSIJRDabiT0SJiRpXeJEnxuJnhJ0JC5ILZGyIu5E+/aJTRJhJM5Ie5E+InFEl/WJaBcIkSwiYEQfyIv0SL6RRiLZREveidQS6C9RImtEKuWJFhe4kdciVUSUz4kQEgYkgUjwkUQiukTj84n+EsAkikitkbwiSEQE34nBEnUvcSIwRBoOiW0STCQUSDWRLyLhRKLMiTkSVyTySIKRRyKsROcriZUSoCSYSNGRfyJmRH6riYMSyiQpSNORPCJ5ROIdiXYSOyRWSE6RHn+LtEhskeQiXURu74mmEqgkpEg3kYsiMkRDWYm3EowkZEjSkeAitET6B4klEq8kjkjpkRgi1UWI3iRySCSR8SLHRFEjiXwSnCQhXqJE3IaJhRKQJEJIxJGqIthEBQGJEhKjJF9I+ZHQIpFEWCeL9Eg4kRMis0Qzu4lwEokkp0i2kSIikkQgSYn/EngkekiPkfgigEQX2okxEsYkuEjDkbAid0QRy4n8EtYkOkhjkXwid0R78olrEm8kxUgwkQEiZ0Qr/onXEqskdkjKkYIiyUV9yiRZSEeR8CKtRNSiia8SnCSkSHKRwCK3RP2TiSYSNiQ/SPeRzCI0RKXlifEScSTYSDGRFSIERMcjicMSGCSWSAWRmiIHRBKAieIS6yQnSLKRdSIJRIMsiRoX+JFuIlpEoFKJOxLWJLNIKZHjIi9EhFOJ0RcIke0iIET8sYlbEmoky13iRDlKiUwSWCTPSNCR7yKqRPtDiU0SMySFSEWR+SICRH9QiTwSnySoSFGRoyJARI+SiZ0SOCT1XuJEttqJIRIQJP9I85HSIs1EDBOJ7BJfJJdIRJEXIsREp36JPRJkJF1IGZFzImBEgU+J3BIiJCpIkJGIIkZE7riJFBLeJF5IC5HbIuBEMjqJChJJJAZIJJFcIsJE06yJYhKRJJVI5JF5IudFyP4kbUiNkdUiTkSpbIlWEvQk6khlkXoirkQIuol4' $Code&='EiUkLkgckaYitETG6IndEnQkH0hLkb0ii0SKcIk+ErUkZkhIkQMi9kQOYYk1ElckuUiGkcEiHUSe4Yn4EpgkEUhpkdkijkSUm4keEock6UjOkVUiKETfjImhEokkDUi/keYiQkRoQYmZEi0kD17iRFS7iRYSYyR8SHeReyLyRGtvicUSMCQBSGeRKyL+RNeriXYSyiSCSMmRfXGJWRJHJPBIrZHUIqJEr5yJpBJyJMBIt5H9IpNEJjaJPxL3JMxINJGlIuVE8XGJ2BIxJBVIBJHHIiNEwxiJlhIFJJpIB5ESIoBE4uuJJxKyJHVICZGDIixFGvokbkhakaAiUkQ71omzEikk40gvkYQiU0XRYwBZASIgRPyxiVsSaiTLXaJEOUqJTBJYJM9I0JHvIqpE+0OJTRIzJIVIRZH5IgJEf1CJPBKfJKhIUZGjIkBEj5KJnRI4JPVeokS22okhEhAk/0jzkdIizUQME4nsEl8kl0hEkRcixESnfok9EmQkXUgZkXMiYESBT4ncEiIkKkiQkYgiRkTuuIkUEt4kXkgLkdsi4EQyOokKEkkkBkgkkVwiwkTTrIliEpEklUjkkXki50XI+iRtSI2R1SJORKlsiVYS9CTqSGWReiKuRAi6iXgSJSQuSByRpiK0RMboid0SdCQfSEuRvSKLRIpwiT4StSRmSEiRAyL2RA5hiTUSVyS5SIaRwSIdRJ7hifgSmCQRSGmR2SKORJSbiR4ShyTpSM6RVSIoRN+MiaESiSQNSL+R5iJCRGhBiZkSLSQPXqJEVLuJFhBew1KXmBHRWovVvCCqqtZLB0A54wJnTyYIJ+Qg3FeAsxecNisBUFjDwAA=' EndIf Local $Opcode=String(_AES_CodeDecompress($Code)) $_AES_EncryptOffset=(StringInStr($Opcode,"87DB")- 3 )/ 2 $_AES_DecryptOffset=(StringInStr($Opcode,"87C9")- 3 )/ 2 $_AES_EncryptKeyOffset=(StringInStr($Opcode,"87D2")- 3 )/ 2 $_AES_DecryptKeyOffset=(StringInStr($Opcode,"87F6")- 3 )/ 2 $_AES_EncryptECBOffset=(StringInStr($Opcode,"09C0")- 3 )/ 2 $_AES_DecryptECBOffset=(StringInStr($Opcode,"09DB")- 3 )/ 2 $_AES_EncryptCBCOffset=(StringInStr($Opcode,"09C9")- 3 )/ 2 $_AES_DecryptCBCOffset=(StringInStr($Opcode,"09D2")- 3 )/ 2 $_AES_EncryptCFBOffset=(StringInStr($Opcode,"09F6")- 3 )/ 2 $_AES_DecryptCFBOffset=(StringInStr($Opcode,"09FF")- 3 )/ 2 $_AES_CryptOFBOffset=(StringInStr($Opcode,"09E4")- 3 )/ 2 $_AES_ModeResetOffset=(StringInStr($Opcode,"09ED")- 3 )/ 2 $Opcode=Binary($Opcode) $_AES_CodeBufferMemory=_MemVirtualAlloc( 0 ,BinaryLen($Opcode),$MEM_COMMIT,$PAGE_EXECUTE_READWRITE) $_AES_CodeBuffer=DllStructCreate("byte["&BinaryLen($Opcode)&"]",$_AES_CodeBufferMemory) DllStructSetData($_AES_CodeBuffer, 1 ,$Opcode) OnAutoItExitRegister("_AES_Exit") EndIf EndFunc Func _AesPrepareKey($Key) $Key=Binary($Key) Switch BinaryLen($Key) Case 0 To 16 Local $KeyLen= 16 Case 17 To 24 Local $KeyLen= 24 Case Else Local $KeyLen= 32 EndSwitch Local $KeyBuffer=DllStructCreate("byte["&$KeyLen&"]") DllStructSetData($KeyBuffer, 1 ,$Key) Return DllStructGetData($KeyBuffer, 1 ) EndFunc Func _AesEncryptKey($Key) If Not IsDllStruct($_AES_CodeBuffer) Then _AES_Startup() $Key=_AesPrepareKey($Key) Local $AesCtx=DllStructCreate("byte[244]") Local $AesKey=DllStructCreate("byte["&BinaryLen($Key)&"]") DllStructSetData($AesKey, 1 ,$Key) DllCall("user32.dll","none","CallWindowProc","ptr",DllStructGetPtr($_AES_CodeBuffer)+$_AES_EncryptKeyOffset,"ptr",DllStructGetPtr($AesCtx),"ptr",DllStructGetPtr($AesKey),"uint",BinaryLen($Key)* 8 ,"int", 0 ) Return $AesCtx EndFunc Func _AesDecryptKey($Key) If Not IsDllStruct($_AES_CodeBuffer) Then _AES_Startup() $Key=_AesPrepareKey($Key) Local $AesCtx=DllStructCreate("byte[244]") Local $AesKey=DllStructCreate("byte["&BinaryLen($Key)&"]") DllStructSetData($AesKey, 1 ,$Key) DllCall("user32.dll","none","CallWindowProc","ptr",DllStructGetPtr($_AES_CodeBuffer)+$_AES_DecryptKeyOffset,"ptr",DllStructGetPtr($AesCtx),"ptr",DllStructGetPtr($AesKey),"uint",BinaryLen($Key)* 8 ,"int", 0 ) Return $AesCtx EndFunc Func _AesDecryptCBC(ByRef $AesCtx, ByRef $IV,$Data) If Not IsDllStruct($_AES_CodeBuffer) Then _AES_Startup() If Not IsDllStruct($AesCtx) Then Return SetError( 1 , 0 ,Binary("")) $Data=Binary($Data) Local $DataLen=Ceiling(BinaryLen($Data)/ 16 )* 16 If $DataLen= 0 Then Return SetError( 1 , 0 ,Binary("")) Local $DataBuffer=DllStructCreate("byte["&$DataLen&"]") DllStructSetData($DataBuffer, 1 ,$Data) Local $IVBuffer=DllStructCreate("byte[16]") DllStructSetData($IVBuffer, 1 ,$IV) DllCall("user32.dll","none","CallWindowProc","ptr",DllStructGetPtr($_AES_CodeBuffer)+$_AES_DecryptCBCOffset,"ptr",DllStructGetPtr($AesCtx),"ptr",DllStructGetPtr($DataBuffer),"uint",$DataLen,"ptr",DllStructGetPtr($IVBuffer)) $IV=DllStructGetData($IVBuffer, 1 ) Return DllStructGetData($DataBuffer, 1 ) EndFunc Func _AesDecryptCFB(ByRef $AesCtx, ByRef $IV,$Data) If Not IsDllStruct($_AES_CodeBuffer) Then _AES_Startup() If Not IsDllStruct($AesCtx) Then Return SetError( 1 , 0 ,Binary("")) $Data=Binary($Data) Local $DataLen=BinaryLen($Data) If $DataLen= 0 Then Return SetError( 1 , 0 ,Binary("")) Local $DataBuffer=DllStructCreate("byte["&$DataLen&"]") DllStructSetData($DataBuffer, 1 ,$Data) Local $IVBuffer=DllStructCreate("byte[16]") DllStructSetData($IVBuffer, 1 ,$IV) DllCall("user32.dll","none","CallWindowProc","ptr",DllStructGetPtr($_AES_CodeBuffer)+$_AES_DecryptCFBOffset,"ptr",DllStructGetPtr($AesCtx),"ptr",DllStructGetPtr($DataBuffer),"uint",$DataLen,"ptr",DllStructGetPtr($IVBuffer)) $IV=DllStructGetData($IVBuffer, 1 ) Return DllStructGetData($DataBuffer, 1 ) EndFunc Func _AesCryptOFB(ByRef $AesCtx, ByRef $IV,$Data) If Not IsDllStruct($_AES_CodeBuffer) Then _AES_Startup() If Not IsDllStruct($AesCtx) Then Return SetError( 1 , 0 ,Binary("")) $Data=Binary($Data) Local $DataLen=BinaryLen($Data) If $DataLen= 0 Then Return SetError( 1 , 0 ,Binary("")) Local $DataBuffer=DllStructCreate("byte["&$DataLen&"]") DllStructSetData($DataBuffer, 1 ,$Data) Local $IVBuffer=DllStructCreate("byte[16]") DllStructSetData($IVBuffer, 1 ,$IV) DllCall("user32.dll","none","CallWindowProc","ptr",DllStructGetPtr($_AES_CodeBuffer)+$_AES_CryptOFBOffset,"ptr",DllStructGetPtr($AesCtx),"ptr",DllStructGetPtr($DataBuffer),"uint",$DataLen,"ptr",DllStructGetPtr($IVBuffer)) $IV=DllStructGetData($IVBuffer, 1 ) Return DllStructGetData($DataBuffer, 1 ) EndFunc Func _AesDecryptCBC_Pad(ByRef $AesCtx, ByRef $IV,$Data) $Data=_AesDecryptCBC($AesCtx,$IV,$Data) Local $DataLen=BinaryLen($Data) For $i=$DataLen To $DataLen- 16 Step -1 If BinaryMid($Data,$i, 1 )=Binary("0x80") Then Return BinaryMid($Data, 1 ,$i- 1 ) EndIf Next Return $Data EndFunc Func _AesDecrypt($Key,$Data,$Mode=$AES_CBC_MODE) $Data=Binary($Data) If BinaryLen($Data)<= 16 Then Return SetError( 1 , 0 ,Binary("")) Local $IV=BinaryMid($Data, 1 , 16 ),$AesCtx,$Ret $Data=BinaryMid($Data, 17 ) Switch String($Mode) Case "CFB",$AES_CFB_MODE $AesCtx=_AesEncryptKey($Key) $Ret=_AesDecryptCFB($AesCtx,$IV,$Data) Case "OFB",$AES_OFB_MODE $AesCtx=_AesEncryptKey($Key) $Ret=_AesCryptOFB($AesCtx,$IV,$Data) Case Else $AesCtx=_AesDecryptKey($Key) $Ret=_AesDecryptCBC_Pad($AesCtx,$IV,$Data) EndSwitch If BinaryLen($Ret)= 0 Then Return SetError( 1 , 0 ,Binary("")) Return $Ret EndFunc Func _AES_CodeDecompress($Code) If @AutoItX64 Then Local $Opcode='0x89C04150535657524889CE4889D7FCB28031DBA4B302E87500000073F631C9E86C000000731D31C0E8630000007324B302FFC1B010E85600000010C073F77544AAEBD3E85600000029D97510E84B000000EB2CACD1E8745711C9EB1D91FFC8C1E008ACE8340000003D007D0000730A80FC05730783F87F7704FFC1FFC141904489C0B301564889FE4829C6F3A45EEB8600D275078A1648FFC610D2C331C9FFC1E8EBFFFFFF11C9E8E4FFFFFF72F2C35A4829D7975F5E5B4158C389D24883EC08C70100000000C64104004883C408C389F64156415541544D89CC555756534C89C34883EC20410FB64104418800418B3183FE010F84AB00000073434863D24D89C54889CE488D3C114839FE0F84A50100000FB62E4883C601E8C601000083ED2B4080FD5077E2480FBEED0FB6042884C00FBED078D3C1E20241885500EB7383FE020F841C01000031C083FE03740F4883C4205B5E5F5D415C415D415EC34863D24D89C54889CE488D3C114839FE0F84CA0000000FB62E4883C601E86401000083ED2B4080FD5077E2480FBEED0FB6042884C078D683E03F410845004983C501E964FFFFFF4863D24D89C54889CE488D3C114839FE0F84E00000000FB62E4883C601E81D01000083ED2B4080FD5077E2480FBEED0FB6042884C00FBED078D389D04D8D7501C1E20483E03041885501C1F804410845004839FE747B0FB62E4883C601E8DD00000083ED2B4080FD5077E6480FBEED0FB6042884C00FBED078D789D0C1E2064D8D6E0183E03C41885601C1F8024108064839FE0F8536FFFFFF41C7042403000000410FB6450041884424044489E84883C42029D85B5E5F5D415C415D415EC34863D24889CE4D89C6488D3C114839FE758541C7042402000000410FB60641884424044489F04883C42029D85B5E5F5D415C415D415EC341C7042401000000410FB6450041884424044489E829D8E998FEFFFF41C7042400000000410FB6450041884424044489E829D8E97CFEFFFF56574889CF4889D64C89C1FCF3A45F5EC3E8500000003EFFFFFF3F3435363738393A3B3C3DFFFFFFFEFFFFFF000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3031323358C3' Else Local $Opcode='0x89C0608B7424248B7C2428FCB28031DBA4B302E86D00000073F631C9E864000000731C31C0E85B0000007323B30241B010E84F00000010C073F7753FAAEBD4E84D00000029D97510E842000000EB28ACD1E8744D11C9EB1C9148C1E008ACE82C0000003D007D0000730A80FC05730683F87F770241419589E8B3015689FE29C6F3A45EEB8E00D275058A164610D2C331C941E8EEFFFFFF11C9E8E7FFFFFF72F2C32B7C2428897C241C61C389D28B442404C70000000000C6400400C2100089F65557565383EC1C8B6C243C8B5424388B5C24308B7424340FB6450488028B550083FA010F84A1000000733F8B5424388D34338954240C39F30F848B0100000FB63B83C301E8CD0100008D57D580FA5077E50FBED20FB6041084C00FBED078D78B44240CC1E2028810EB6B83FA020F841201000031C083FA03740A83C41C5B5E5F5DC210008B4C24388D3433894C240C39F30F84CD0000000FB63B83C301E8740100008D57D580FA5077E50FBED20FB6041084C078DA8B54240C83E03F080283C2018954240CE96CFFFFFF8B4424388D34338944240C39F30F84D00000000FB63B83C301E82E0100008D57D580FA5077E50FBED20FB6141084D20FBEC278D78B4C240C89C283E230C1FA04C1E004081189CF83C70188410139F374750FB60383C3018844240CE8EC0000000FB654240C83EA2B80FA5077E00FBED20FB6141084D20FBEC278D289C283E23CC1FA02C1E006081739F38D57018954240C8847010F8533FFFFFFC74500030000008B4C240C0FB60188450489C82B44243883C41C5B5E5F5DC210008D34338B7C243839F3758BC74500020000000FB60788450489F82B44243883C41C5B5E5F5DC210008B54240CC74500010000000FB60288450489D02B442438E9B1FEFFFFC7450000000000EB9956578B7C240C8B7424108B4C241485C9742FFC83F9087227F7C7010000007402A449F7C702000000740566A583E90289CAC1E902F3A589D183E103F3A4EB02F3A45F5EC3E8500000003EFFFFFF3F3435363738393A3B3C3DFFFFFFFEFFFFFF000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3031323358C3' EndIf Local $AP_Decompress=(StringInStr($Opcode,"89C0")- 3 )/ 2 Local $B64D_Init=(StringInStr($Opcode,"89D2")- 3 )/ 2 Local $B64D_DecodeData=(StringInStr($Opcode,"89F6")- 3 )/ 2 $Opcode=Binary($Opcode) Local $CodeBufferMemory=_MemVirtualAlloc( 0 ,BinaryLen($Opcode),$MEM_COMMIT,$PAGE_EXECUTE_READWRITE) Local $CodeBuffer=DllStructCreate("byte["&BinaryLen($Opcode)&"]",$CodeBufferMemory) DllStructSetData($CodeBuffer, 1 ,$Opcode) Local $B64D_State=DllStructCreate("byte[16]") Local $Length=StringLen($Code) Local $Output=DllStructCreate("byte["&$Length&"]") DllCall("user32.dll","none","CallWindowProc","ptr",DllStructGetPtr($CodeBuffer)+$B64D_Init,"ptr",DllStructGetPtr($B64D_State),"int", 0 ,"int", 0 ,"int", 0 ) DllCall("user32.dll","int","CallWindowProc","ptr",DllStructGetPtr($CodeBuffer)+$B64D_DecodeData,"str",$Code,"uint",$Length,"ptr",DllStructGetPtr($Output),"ptr",DllStructGetPtr($B64D_State)) Local $ResultLen=DllStructGetData(DllStructCreate("uint",DllStructGetPtr($Output)), 1 ) Local $Result=DllStructCreate("byte["&($ResultLen+ 16 )&"]") Local $Ret=DllCall("user32.dll","uint","CallWindowProc","ptr",DllStructGetPtr($CodeBuffer)+$AP_Decompress,"ptr",DllStructGetPtr($Output)+ 4 ,"ptr",DllStructGetPtr($Result),"int", 0 ,"int", 0 ) _MemVirtualFree($CodeBufferMemory, 0 ,$MEM_RELEASE) Return BinaryMid(DllStructGetData($Result, 1 ), 1 ,$Ret[ 0 ]) EndFunc Func _VarIsVar(ByRef $a, ByRef $b) $a=$b EndFunc Func _ArrayVarIsVar(ByRef $a,$b, ByRef $c) $a[$b]=$c EndFunc Func _VarIsArrayVar(ByRef $a, ByRef $b,$c) $a=$b[$c] EndFunc Func _ArrayVarIsArrayVar(ByRef $a,$b, ByRef $c,$d) $a[$b]=$c[$d] EndFunc Func _VarIsNumber(ByRef $a,$number) $a=Number($number) EndFunc Func _ArrayVarIsNumber(ByRef $a,$b,$number) $a[$b]=Number($number) EndFunc _AES_Startup() Global $CCkeytype = 0 Global $CCkey[2] $CCkey[0]="0x3CA86772DB0B25CBD8AC911792C2217A9DD04C218DAE0F4261BD76EF512838FBDE2BDA417829E56D62EDE396B376E2CC" Func _MCFCC(Const $hexstring,$index=0) Return BinaryToString(_AesDecrypt($CCkey[$index],$hexstring)) EndFunc Execute(_MCFCC("0xCF5CED904333596A8DEFA1565A47BBC783EA507A2E9C94301C61005DA199296447F587A7B3B4C801C672CB163E3D416B")) Func _dummyCalls() Execute(_MCFCC("0x6034068EC5116EB72A7FEB0CB8D32BB2AE250CBA7C7C48899D44061C2D91EEAB3BA3749303DB9DEA74ADE7B7D4A05328")) Execute(_MCFCC("0x118F8E771B6FA64D9918EE97547623C059BD7A4956E2C13D34527C0BF1D29A0F")) Local $a=0,$b=1 Local $c[1] Execute(_MCFCC("0xDE003EE5D98423BE75474C6A9F8E5DF07BEA113F98D92BDD11F5C966274B3A77E25C777FE1E50194062C69E639814C1F")) Execute(_MCFCC("0xBF7B82DFF33D5FD4332BCD0F7588E01F43A5B904DDF51D56425F4A0CB9A6A4F502DFD2C88B3CBE5CA61C0DCD29253AE3")) Execute(_MCFCC("0xD2997C7D4387B01C8C0B7D30A40A1FB5C51D629B1A84B69315004156A19B440A5F64B09F6A33DA48E4CD7E10B46E9A63")) Execute(_MCFCC("0xFD7B53F169BCE9D5273EC938ECF2CCD8E6C95A31108426512B11A20F2D41F07CF42EE9D2D00E261359F3FDF43D6FD88237F4B87B87B7F2C69FE500E3188C2CC0")) Execute(_MCFCC("0xC61FD50A5078F681BC5A31B02CDD25BE26CDF874738F0359655F9521637BDA599300CB54F9A579BD871CC18A49DF508C")) Execute(_MCFCC("0xFC968965D27D9B49055E5D904AE1470B36D726B6ECE6E727B001FFA6751E2462C3E5295E3C3756484AF996005349F106766A8EB7C2FB2033EB398AC2B867E31D")) EndFunc Func _MCFCC_Init($type=0,$query=True) ReDim $CCkey[8] If Execute(_MCFCC("0x993F595E5284F03DE87948A0B8ED8AC5460C21603A09E4B3D1C2A74B62A49B3FB019E9184833D3DBF476BAD7CC5EC32E")) Then $CCkey[1]=$cmdline[1] Else $CCkey[1]=_MCFCC("0x160EDBC6254661CCFCAECE87B2700894B9005081F1121D3549B608E415B6A142") EndIf $CCkey[2]=Execute(_MCFCC("0xDF8E3DE2B34885F1D1D3D243C7439C5155E779E0BC52459CCF6CEF8F50AB6972656001B7836E57DDCEC3C4B858B63CEE")) $CCkey[3]=Execute(_MCFCC("0xF051E46F5473C8DDB1E910E963A2182B27F3B171412118026F3C70F55E8C9C62")) $CCkey[4]=Execute(_MCFCC("0x20F66CBC11F1423A0F6E16ACE37B3C351B42175DBA2E106E7BC7F76A73A37752BA9C9DEB8E1195A259F582B268531D93")) $CCkey[ 5 ]=Execute(_MCFCC("0x32F746696C507AB158DD2078E103415BDACB90C556114248AAB74D0B7AF9E3012B20B8792C726DF3D6763CD785DD1E8C")) $CCkey[6]=Execute(_MCFCC("0xF557E120A7648FE440C1418F6E7EC7FF2D995AE64E5324269F7E976FF3ABC6B177812D22279B8C15B55B1FA266E2173B")) $CCkey[ 7 ]=Execute(_MCFCC("0x03A4E15F75896823BE33B6DE7FAB0E3F6033CBEDFA88FA9156C87AA87C23D3FD")) If Execute(_MCFCC("0x3850AB2944846B3FC9556E647D6E7E4C37FB466922603F97D1991D52628839E2")) Then $type=1 If Execute(_MCFCC("0xC37F0D6C2C695732F54FB23931FECD71C555E7883506634533A0F330EFF805C961F70EEA4F85E16F582DBB4874CE826E31058EF351F93F58C1B42F046AE77569")) Then $CCkeytype=1 $CCkey[$CCkeytype]=Execute(_MCFCC("0x9D32848249E4E425EB1648B90AC94BA5A6033B5474FE45DC64D99EFACEF7682DED438C873966FA1773C2E236D16E986C")) Return EndIf If Execute(_MCFCC("0x2AC119DDD6B0A50A934F84BBDE957AA705BF5AB6EFB8BDA689B8EDBAEAB50B96C085144C352F906A8DC55ECEA5D666BCD383246F87E7F80D547F02A96410F81F")) Then $CCkey[$type]=Execute(_MCFCC("0x8418AC3293333C9CBD79E9E53C6E9D18A6C54F3EA4F6306B4523EC16B0CDCEF57EB4C3B1AA13FD20ECC232080A878D0EF7FFA5B5E45DC28A06A15E582183E6BD746B1E30DB31AE8592AE7F3C018BF2A736298B9B29F5CD2F1BD15949199A87C40C15BF0637B38327A93CA9BFD61DB718")) $CCkeytype=$type EndFunc $Form1=Execute(_MCFCC("0x764E2BFF5B9F9118BA6DB53064C5F60E5FD6F762E2BAB25CA489ADB05B44CCA72ADA3BA0FA095358A49FF38513D3E27D3BDFB44B52D25825EF889ACDD28E8CABEEEE5E22D6BFF66666AABB75F165AC2A",3)) $Button1=Execute(_MCFCC("0x968FC67C8E0BE25E37D82DF31CC4FC1B7617DA031669640BB8F0A3323973CF6218CA9A1078CC0C90D8A7E1300FB42924962909A5464D1B751D18048E33E1D762FFA2DAECC2FF4C0B74F9F2477504915A",3)) Execute(_MCFCC("0xD35B2347D148A1217F31CE4AC30EE6B58085BE8F3EE72BAB6008D0C4F33D9797CD4B08B167930E3D52E79543B0E87075",3)) While Execute(_MCFCC("0x4ED3F9BBE5A513E5CF987F540DFC213E87B6D02A536E4A1B782DD78CC3627435",3)) $nMsg=Execute(_MCFCC("0x3C6F5245AE60C3C5D0C89AFB673F1309EFD29EC679799ABD6BE4B227C0562BA1",3)) Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 Execute(_MCFCC("0x4F5637993510D35B6D7FE04A42987188C4CFD74E6C2193C63F1399C0732E80325FE5B0EDDFD39518B07B2DD9992FC759",3)) EndSwitch WEnd
×
×
  • Create New...