tut sich wohl nix mehr.... weder registrieren geht, noch downloaden.
Beiträge von WhiteLion
-
-
hmmm, client wirft fehler:
Spoiler anzeigen
E:\test\test3\AutoOS\Client_alt.au3(262,9) : ERROR: $lx already declared as parameter
Dim $lx,
~~~~~~~^
E:\test\test3\AutoOS\Client_alt.au3(262,13) : ERROR: $ly already declared as parameter
Dim $lx,$ly,
~~~~~~~~~~~^
E:\test\test3\AutoOS\Client_alt.au3(262,17) : ERROR: $lz already declared as parameter
Dim $lx,$ly,$lz,
~~~~~~~~~~~~~~~^
E:\test\test3\AutoOS\Client_alt.au3(262,21) : ERROR: $nr already declared as parameter
Dim $lx,$ly,$lz,$nr
~~~~~~~~~~~~~~~~~~~^
E:\test\test3\AutoOS\Client_alt.au3(274,9) : ERROR: $lx already declared as parameter
Dim $lx,
~~~~~~~^
E:\test\test3\AutoOS\Client_alt.au3(274,13) : ERROR: $ly already declared as parameter
Dim $lx,$ly,
~~~~~~~~~~~^
E:\test\test3\AutoOS\Client_alt.au3(274,17) : ERROR: $lz already declared as parameter
Dim $lx,$ly,$lz,
~~~~~~~~~~~~~~~^
E:\test\test3\AutoOS\Client_alt.au3(274,21) : ERROR: $nr already declared as parameter
Dim $lx,$ly,$lz,$nr
~~~~~~~~~~~~~~~~~~~^
E:\test\test3\AutoOS\Client_alt.au3(398,48) : ERROR: $level already declared as parameter
Dim $level = 1; rausnehmen bei mehreren Dateien
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
E:\test\test3\AutoOS\Client_alt.au3 - 9 error(s), 0 warning(s) -
denke für den api-viewer ... in deutsch wäre eine übersicht der WinAPI funktionen wie wie sie die autoit hilfe bietet natürlich ein traum.
-
ja, das war eine gute idee, schade das firefox nicht geht.
-
danke, hmmm, also das klingt alles iwie komplizierter als ich es mir vorgestellt habe.
ich hatte jetzt eigentlich gehofft das ich das ohne hooking oder sniffing hinbekommen könnte.
damit wir nicht aneinander vorbeireden:
ich möchte eine aktion auslösen, wenn eine domain angesurft wird, also der nutzer sich z.B. auf:
"www.autoit.de/abc" befindet... -
ich bin begeistert das du dir die arbeit machen möchtest! bleib dran!
-
wie die überschrift schon sagt.... ich würde gerne wissen wie ich von chrome / IE / firefox die momentan gerade angesurften adressen auslesen kann? - hat jemand etwas nützliches gesehen (udf o.ä.) was ich evtl. verwenden könnte !?.
ziel ist es, bei bestimmten domains mein programm agieren zu lassen... -
moinsen,
ich probiere gerade mal drag and drop aus....
eigentlich hab ich gedacht, dass es recht einfach geht ... also beim input tut es das ja auch.
allerdings würde ich gerne drag and drop auf ein listview oder list item machen... hat jemand ein beispiel ?
ich bekomm´s jedenfalls nicht hin. -
[Update 1.1a]
die dll wurde per array in das script includiert.[Initial 1.0.a]
So, nach anfänglichen Schwierigkeiten hier meine c++ dll als udf für Autoit.
Mit Beispiel (Alles auch im rar - Archiv):Wozu das Ganze?:
Wenn man eine Datei hat in der man einen/mehrere Bytestring/s sucht, der im String
unbekannte oder sich ändernde Bytes enthält, dann kann dieser hiermit gesucht und ganz oder teilweise (auch mit einer Patternmaske) ersetzt werden. Das Ganze funktioniert auf Dateiebene mit jeglicher Art von Binärendateien;
sowohl die Dateien, als auch die Suchstrings können dabei so groß sein, wie es der Buffer hergibt.
Es funktioniert auch mit mehreren/verschiedenen Bytestrings beliebig oft hintereinander.Wir suchen z.B. "3BC3EB9529000000A1" wobei hier in hex umgewandelt wird.
Die Maske ist z.B. "xxx?????x" d.h. die ersten 3 bytes und das letzte Byte des Strings müssen gefunden werden!
... tun sie das, wird nach gleichem Prinzip ersetzt ... alles was "x" beim Ersetzen ist, wird vom "replacestring" an die Stelle geschrieben, wo "searchstring" gefunden wurde!Vorteile: Wahnsinnige Geschwindigkeit... selbst bei großen Dateien... ...dank Dll (= neuer Thread) arbeitet es parallel zum autoit script. wer möchte, darf gerne mal Speedtests machen (würde mich freuen / z.B. im vergleich zu Autoit)
Beispiel:
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <search_and_replace.au3>#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$Form1 = GUICreate("Suchen & ersetzen...", 250, 100, -1, -1)
$Button1 = GUICtrlCreateButton("Search and Replace", 25, 50, 200, 25, $WS_GROUP)
GUICtrlCreateLabel("Beispiel!", 100, 20)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###; Example how so search and replace bytes unknown bytes
[/autoit] [autoit][/autoit] [autoit]
; in searchbytes and in replacebytes
; Note: This does not increase the filesize! It will replace
; the bytes at where the searchmask was found!
; pls give credit if you use my dll!
; Greetings - WhiteLionWhile 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
_Patch()
EndSwitch
WEndFunc _Patch()
[/autoit] [autoit][/autoit] [autoit][/autoit]
MsgBox (0, "!!!", "Before continue, test -> PatchMe.exe")
MsgBox (0,"_Fileread", "Filesize in bytes: "&_FileRead("PatchMe.exe"))
MsgBox (0,"_FilePatch", "Count of replacements: "&_FilePatch("3BC30F8494000000a1", "xx??????x", "3BC3E99500000090a1", "??xxx??x?"))
MsgBox (0, "_FileWrite", "Writing file went well: "&_FileWrite("Done.exe"))
MsgBox (0, "Finished", "Now test -> Done.exe")
EndFuncudf:
Spoiler anzeigen
[autoit]#include-once
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#region Search_And_ReplaceGlobal $sPath = @TempDir & "\", $bData[3] = [1]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
; String mit den Binärdaten von: sar.dll
$bData[1] &= "0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000000100000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A240000000000000095C01DD1D1A17382D1A17382D1A1738242EFEB82D0A17382CA3CED82D2A17382CA3CD982DFA17382CA3CEF82D4A17382CA3CD882D7A17382D8D9E082D3A17382D1A172825BA17382CA3CDC82D2A17382CA3CE882D0A17382CA3CEE82D0A1738252696368D1A17382000000000000000000000000000000000000000000000000504500004C01030097C87A4F0000000000000000E00002210B010A00004000000010000000B00000D0EE000000C00000000001000000001000100000000200000500010000000000050001000000000000100100001000000000000002004001000010000010000000001000001000000000000010000000BC02010080000000B80101000401000000000100B8010000000000000000000000000000000000003C0301001800000000000000000000000000000000000000000000000000000000000000000000009CF000004800000000000000000000000000000000000000000000000000000000000000000000000000000000000000555058300000000000B00000001000000000000000040000000000000000000000000000800000E055505831000000000040000000C000000032000000040000000000000000000000000000400000E02E7273726300000000100000000001000004000000360000000000000000000000000000400000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000332E303800555058210D090209D23FA2B0251D2E4F56C30000CE2E0000007A00002604001AFB776FFFC701000053F4FF25055188CC00558BEC568BF1C70615FFB1FF1915F6450801740A560C0483C4048BC65E5DFFE56DF6C20400CC002CF057B9520083FE0472168BBBD6B6FFFF8B023B01751283EE29C102261573ECF9B7DFFE85F674440FB60202392BC77531120176350FB6420134CD4B77790110200276240202FF4BF3D20F0376130349032BC1C1F81F5F83FD0BDBFEC8015EC35F33C004CC008B0885C97414B36FDFFE9C50BC85C0A78B108BC8836A01FFD0296DFFBF75CF8BC08B481481E1FFF9FFFF81C900082A89F6ED6FB60E5D1E1F6AFF6812417B64A105FE77BBBB4581ECD40653560D801833C5508D45F464A3FBEEEDF61908085086FF33DBEE85A8C745FC14DDDD7EE1E80818EC8D8D3859FF510B0B4CC6EEB7DFBE1701837D1C854D0873038D046A218DB5501DFEDF6F771C1A4C6A38C0751A8B952E8B4A046A028D8C0D2C633FF60BBE9CEB188B85194800B7FBDB816473395DA40F858D708B0D1085DDDD6FB48B16F051B75204525A1FCC9815C68E6DE4C82D988B8E8BACAFDDDEBFB1A88945F0C784150F195444A88AC63EDB75A202330D8C0E885DFC377882FB1BDBADA808A0BF720D8BEFF47F179A4BF8D108890DF4595E5BB1D9EDC68BE5031C00C05353FC38DB809D85800820127CCC086BEFC3DF030836862C412132C6BB0C533C27FBAEA30728881C02A1D1F45034EC26193336DA385008221CEFC28EECEC5381A15BE181DD0E2359535088848D75B0D8EC17510D0C719477094732424A4890527285F04E8B35345803564269144D57830C19935B9F2C51DBF153C656579A8B018D7170368975947BCB187B443190914EA2910E6CF6EC100C928BCE917CE42135075F5EC30F4203B52E9899DC72F5537FEE840C2113C475D40718BED3F60AAC8BF8090814157C12BE7D773B41F9BF1028397DE8720981D451FFD6780F131E0915958F52589F8491FC025451F98D5508522C3C7EE68D85181A0C0CD6A718F1DE2C9CF69B24060F8494BDC821239361F05C9CCB42B20053F588D07221933418303083D9261788E61CF42CE376D2D649E92D05F97ECB0E5976AA5152288CD5B60C331AAACB211B18926EB74DF788468955890DCC100099043789B709A1404DFD5B0DF03393B18CA7CDA2E4857F3F18607C906083EC2C5382F8C2D61A645DADD6F223E0895DEC6FB71EEB0B01163C3BC6B9E7020B3BC374AE7D9BE50885DBDB8B1DD556246EDB1C2ED606801690593CDC0D3658DBB63CFE8B3C100C30C84533F0DFE32CBE30F74DCC3975405A123C67A55BC83C520E2E45506B765B9B3A19DC4E5152D41F8C754B06204E1049C8E624CBB32410207DECB6ADC1B05792DD2CE09656B2DBC59659D01E1B"
$bData[1] &= "833DBB2C006CA6DDDFE4F70F86BBE7F7DE7A78DC7360FE1BB4110FB6032BC2740CB3EDDB9A78737F01753C33D2042808CC5FFF17FE7FD48BCBF7D903F18BC303F98D49453C303F75058A08880C38139BDCED42403BD172EE2D138BD3500B1942E215904F47902339923827162D482F969ABF74CB77934BA652187FE0510B538C51090C3248090C9415A5132F1CFFBE817DE0FC6618180A87979E3B0FA5E10B85C27D643156EC2BFB2B1AFAFFD67855D88D6CE80778756E8A0E88080FBE16A123E98B45E4716AA474B183C1616AFCEE55F03147C9EFEC5103D63451A0A85046FB6D86FBFF4DD87583DD6FAFF003D840890E6099FE703B05C20F824AFE518F7361F274241E10E0240F522B9D05E7205B21C848DA26CF402C08E83FBF8544533540A0A752B872CC1A9252988FA77EF0FDCE9253CD0C56052888534061A96C4A50105BDB4CC420CF0063E08363837D5F11F00F54155707684832C2AD51492C52497C51D8E410060C0891072681333DE4BE5C202CCF752410D7547509B378EE891F6754C19690580FD515B77E6AF06D53758A85D8106EFC7356C9B5DE05BA13D289A66AD0EEDDED75160A391D12D40F95C00E076806BFFFFBB4EB0506C4895E10C7461487881EBD256250220DB38B25BE307A6E61837E14B27E6F496CD706B13AC2461025F14A452930AF13C82470022F087DBB81BFB50877B8F08D4F70C707C248C7474FE56E71AC54665060D37718D5183B0B2C5CCF47F0165C07EEE010540706C7040FF99118DB6ABA79EC1D540018DBFEA9CEBA5404885E5002491748616BDF462EA0F45489564C0531C761C9236B2BFDBF40ADD8730B6CBE9909C0B0688E16C0C10F99EC5558C532C0C746EE2C2464467754CBF889196C094479FA0383785463A366A8FF9322849B7A9B8A6C6A1050646703CFF2856C5262FBFA08CB2F0C4BFFAE8B750883C6DB66BBB5F0578BFE393675BCFFEB55DE9CD1B6E51B4C84020E8B841010080FE7CA76124575893F874C0D4E3BFB751323C3A46BEA10F75390C87F905742077DEF4049844357F25356F1E920FDFFDD4744FCA4741E8B4E108D5648391175148B563CFDED6DABA0E711112089010C302BC08902381216ECBB9A74382716C8C203A316CABC1C3C1F4823A3B0B1008B4154C21E8C0C0FE0A859C30F964C1665784FA87D17218C5CA88BD983FAFFC037542ABCCB3210B88B4324FB4BBC3DEE2008348B30423BCE7315FF0815C7B66F14FF01893088F1C228837B5178A2835492DA7A43704AFC1BBE8A4B483BC11643408B533C50505280DA8DE6C6C74C60294375221903671B140B95C2A49C548A15CE7683F8FF3F9AB251D38CAF3BCE8855D3251CD501FA06855BE81CD4900B5CF083FF10FD022DD780224052CC5203CE512BB4A3D6C4C803D98B4B9B37174EBA50DD434C18700C0F88925DA2B9395861818FDE47BD0BF735B3430332232BF17427CE5EA09B0E184BB5566A019A0C5DB2255E103BF0B9F8375CC65B0BB3FD4349013955C815CA1A07698625EE0CA79683F920F9CE477BBA44F983CAFF2BD17786B5AF71DD806BEF7EFEFE0F87A90B3BFE73475D6567D7DCFBC01E0C52CE0E45842605FEC2B3D08655D481890411894411007C6CC36D2310217FE49EC60430003DCCDD36200F353275D114B6C600B860789B16E603754D5E5D4DD395EB81D0CA5F740F432B75979E250B1C97EB320B83A60E830BC90E231A81EB16A41E0C1BE1BC40E017294B6A818CBE07CFD168C1469808D3F07DC1D4B137008B2D2881732683FBAA7D61A18313B6593BD375191CFD17BE5031527620FF0EAA01F7D81BC05E23C3C1D79922992633392C3464ECB6A30B2C135033C350C974C6B79BDA12688D4648547411881803E4CE5ABB831D3C5B3F5EA7D347B081E288C6129A05ADF15B8B04C103D03BC23E55BC00DFA0E1678B501C579CD28BF89E9C7D2B4A59055F0BC01510C75F41480B21014F2FB561A99C470233F69174268BA9B56DB54F0A1B57800A8A1C2DBF696B7315C2497F208B078D50173497FEA18CBE1434397754470E0247C9C8F2F34F118B4757CFCB48B7B72544751E3C54573F640454643323D648C0DB363A8EE9127921C61C0006FC44347D0F567E648BD830FB703C2EDFD88843C9AFC883F901350136FE8D6C7001291C55E83BD6D4BC5C9BBCF1E7B655D4521535A486A9A6142737E746F6DECAF8881C01AA5D2D1E4E2A44E0BB1046FAB7CEFA14E95DC85250ACC3F0567C066959BB4F47B774F300182D398E7E5DD566E5F1CD14B9FBE401727064395DE8A90561DA31A4D3AF5E7DD3B33B4F1196E60CA4519CBABDA417B13212EABCD339D23573B79A7547A5551345245C78F6C133C94619CC7D54523B0F73D422D4CA66EB5F6ED60A482F4F461C531B4AAD2B5A8D287E1D0FBEA9B58DBE8BE8E39A4416FF4E5120BD5BD7B1A9081C7FE9B49873DE0837153E0D4DD451474289A47B0F83A5D6D28DE4CBEC0C85D9CB26DBC2A5C643489228751A3914051483B635027E0E080CA58680734B7CC7FF83D668060A106C41C29DC2915F760C848185DF3FB2D70BD675063C741715141D260C67AD504F986C68F39D50EAAE616D8D5424C482700967B6EDD4154B7B10791D11799E6553434B53C5F6B63D994C338B371489480A4BC7E242AF5BD9E340046B500C7732486D1510E114F832B917B6B74349045F1A049A5E89103817B260AF022826FFAD76A9E10B580C064D9CD257E32BB5DCB6314472894C3999EA13760E649081C7608DED1B276BAA0BCF7415B654635C960FEC575652F8508B4B445051F585C2813AE4C4C389534C"
$bData[1] &= "CCB550F6950CE7BBEAE7CE5E2B15A0A42EEC317B5B73C7E9305EEC22E7502826F535B206CC8FE24E614387AB0CE16108CB85D2E3FA9628B5C70BECC9B868EBC65AB5162EC0977ABD5C42ADDB4F498B7E54DBC6467DEFD94A0B4C857218806C46DF6EAD547208787E2002248946306D2D582C34A033944E413B281908980C00BC4D02CF25076F8325007424E883A50F440C6A24D27B1601C79149C0687905D25970027B505FCF4D080CD6165D122432F8F4B874A2602FA6740D5F79108A9D3570C31FB95F10A4969C10CF41AC4E76C416AF8D59480B6243703BB21405B5C30278A86D502C2045C50DA2C8879887D74B700AA94946A253C3E29144B159CF4DD82065152C00ED4ADC1A17100873480F506A55B71F60047FBAE6561472410EEBBB810B57812B424104321A5E18AC0818097CC64008A0C3E003E616DC08055F3BF77462B76EAF1263837F227312AD1041EA6FC0D95157B17C6EEB0A8B178916A33962F07EA12921D83B396B754E148A3E47077978A153C2CF8B794BFB730BF616441E2ACCAC3BC773C063028EFFF83BF1751C8D0C1F126E174B04616CC9085F2199FED0B581C0760B62AD382761879BF01357125FBD65B8196EB75D1D4114970939247228E3EB260EDA6ADC1875E729EEF80AB96D988106F556065F0D30A2C0830A5703CB92726CB335C320322F0E0438308EB381050DDF57A1DCE442B646D8C1C19306070B858C8F5372ACFE6FCE9A1EDE0A16D62BC703D95003DF03D15362CDB9B3577C487C167E8DB72DDC0B5B726E0E7101A860B9C0E2B0CE09CC8F286AB5320653ED6D8E151BB888B2BB366A40ABE0DAB3B150D4A06E93FE8501B35E390CC40BD616AE0E8404113A58A7DB42EA30023450791AB0C566C07EE23216C8B4BB920A1AB50520EB0BDA10A480AD53B33BCBA2801C8C4A3BC30305E940A45F4E3EE42434B2148F401818082D99248E45B7BB3DFBEA5E011C7B4909547BB98AF5E003A4A0A61329AB1366348A77452173529905B8D5579BBA20D051B703CA6D506EFBD6936A5883E8F61B48741C070243879E786D4CEE46D432935B25CCD51CE0384D7D55943C2037D02BF2535452C1EA2CC997B89377805C5693686E9FE7AC16C8936B2E28AB93000155E46E424B49731BADCE162BC0C35A6FE11A0BB001480B8B840CAAC5D9E20C08BF502748DAB76E700A7522484029703C893212CAE0E52D280A8B40C989081FA996DB5C2F25323234D097966A6D892E315236847820E18DB9ED03375F0E40383DD03F1557D26B71C24927422F3E7825419008ED7508B4056341FBA8DC82081B0C19A388BBC8DC08BADAC0519D3838AD094B02C731B94208B8A91358A919A0C529E060328EA4C3BF80BF1886123DC0B1896519C21235DC8008FDCE0FE2762B376EBFC0EB035F14B8ABAA00F7E6C3D1E9F7DF72FFD1EA3BCA7613B8FEA1828D34193BD87605BE0DDAADC185DF8D4E23BB3BC81E3A23F1A5E9FF7713518C14DB76E376A159EB4D09EC5103DCFAECEDADEE215184985B0455DC5215E0363880DCA1C73D04873DAB36B77F019036E8DB1F7CC5C6F7D642B8211EE1C3A275685D6EBA1EBC64DB741A46EE07C75350B4BD25E0386219CF0FE01DB865E41D3989078977373AA2DD525F10E15DF8801F000C0E57125B0CA3C50B83931C16526A00C70BA9D8836AC9B21FE4A1A1C2EC100F2D3C090E5916B60F75298DCF5004F0FCC792E5234DF051F0CCC8240F04BF3EFA241004D746B3E35F2CF42DDA41EB038F8A104084AEF9783B6428AE4C32584C3224170E6FDF2D322033FFA27C1F7F9FC7CF7C37E0F6F6157F053B21760E2B041BCF59D889BAD11DF17DDCEB078DDC8BFB5F32380B8E428531F76034CAA10BD67245CFC253401BE46EAA707C3032E644303C4E59A33018C2883B8A1BF759D1FA0F94C188082884C975A5778723B5E5E4213CE33A1425C0BA1BFC1047407437D77C2D99DBDFA244030122798A4C3040766B05683EE9020938525CB5073E306C4F85AC774D4A80466E17A9752E8BCE9ED476FB3D0C283138E1576C50685CD4BAE0DA1C3BD799CCDB5A63C17B9D33035220034D3517AC249C701E1C6AD214296E3503CED3AC044246DA487ED0AFCFAE1A6EEE174B733838F60746FC53C648ABC658C383C3FF83D7FF5B74A9335AF82041642483DCEC6DAAEE0F8C71427F4C84674CF3F41EDE837509EF37264C157F4FBD3AFFEBBCD608B3016A04E68DC18288CEB8192215C3490E8C08694FBA86DB25921C8D581090038D607485238A205F0B688D37C37C1CA2EE16894D2B86738D2D966A7659CB380ADEB3835660E8AD2613228B63591D85DA3CD89D3C238C3764D0E93C09E4321E583CDC0E0D4DC9237B351427DB5B40063236B40DB9DF0C8A41747094518C433E4E253F53C33E2BE305E4849F3E68D0466B557B3B5115F90019C23ED8078B488686A3A4394F5AE956C345849BFE8DA42487553EE843D9DE8EF1546E8855FA2B63EBB10C84C83623654FEBCBE410C60CB8302446C8C922C35D3F3E7906DA007214F9F4E0C02E08634AE4DD24859CFFC70C7D6FD02AF0C48BF08B073B700C7323A2F0762B820CB1EF751D80777CF91BDBD7171ED81A128B5034B2EB065B17A52E5CEBE3DA19528EF0C9A7B875064B6DF057A950CC8DC0F6C41CEFE478E049940A4CA0D90D5B6851425280B1EED03E4085F936C04000573E074CAB7A60022161E86D7D62AC9DAC6F56504962800396540449A20F470D24073FEEBEAD0CC046014C51B85DA8D3AE89EC0511BC0F68E668F7EDD5B88805A89D2BBCE4256492B12F33C427D8D4C90C4164C4842877"
$bData[1] &= "91B1B1F01EE005E42343938564E421BFEC4086048600F024630F3902860C28203B0093DF1C91860C6D0565B4F71D2CC6263078AEA046005C610FFD7B3DCF58F4FE4E720FA1459804BE63037B6362351D682F046C49BC8D72950D9FB529A6F90D6C04BB2985D81506424BC8C4521726B14B8EFC8385BC85A85F29024207C2BC5E795B2FAA190EA4E1FCFCD2A57A1B174EC8572FF4BAE39770B7E8885DE09F8D9B0D5F1141848D1ACD3AD3CE62A0E02E15D8DE40518BCC8959A0C6445230566DB6419819575657BD2A97D3FC7B4BD214DBF421F088E00C141B1960FCFED05BEC3262807C7F7CA2CB0036E2C47378A251860AB5F4AFDE1C946A35C2F292039FD0FDDF0111545852897C2424895C242C302833801102E76C0A7BB28057365464512D918058406CFBC200C61AF66774438F9562B6A50231515152D85A21238400B8DF2E4B713B567470880360898C24AE6B9AB38012504C3C075C0F2EDE6C862C6E1128188D7801F65BA842CD3AD1C7E2C474136C233C42998BCE51858D246426680D22895F37860FDB656C9418488B4C0CF1C70BA61B73547F5C565CF38B90930D84FFEF56C6502EC125E4408BDB8DBA48B7DB14601D2C8C083C68100066E43E2CF46B58FB61DCDDC989646D1E8D515F194184DB6F0BD966A5CA6B333059A40B468C37443105F7034F942494A1B424B80674F7968B747E7C93A1BC24A015481F80338ED669061CC0D2E6B68D9B392850C4703CBF86090D03C01550957E0163AC731B2574EA60C64BFE300BA584CA5B33CC9A7A05495F040C6D260F3A249D6361B001DE213DD892FC2555E05287B194B4298532C087BF6BADC2922010F006B2606EC365457848605498A6CA5D4473B3AD5D4B25E0CCC0B12480B8394B5FD51D2D8DBCD8F74B8B4EDBDA7CB531F9DA06C63BEE390EBE37EA018B561063D3762513109A052C5D2BD8EEC7F318B1B0D6C81F0FDDAAA1251319314C936523C6ED20CF1EF2D073AF9D0950540806161932C212C50A268A80356C09AF5428405BC9DB0215E8F6DDBB0B9906DCF55598DC0D0590D9C0D9EE03569BF5FFDDEADFE0DDD9F6C4447A30240CCCA6AC8F755121E452DDD81AC0353CF10C70D9C1EA0C88DB356BD7BE02D8EADAE949477B15C86CFF0B97C65577EBB9D97DFE0FB745FE130CDD805F7066A2D96DF4DF7DF5F0500C3308B709FE414D9E4B8D9A033C98D864F1018583015DD9E8985AE8E1806D8B5783DA7C3937C460A54D8525FB7905486B40E31B89FE407507691D2AD517FE46430FBE0B83C1D0AB360F87D35D2DB43D42890430E1248B2F89770BC4C43CB8AD158A16DCC14F76F3FDBFC0E204881643EB95FE068A0E1A92C0E1041BCEBEA1EE880E1D43942D588006021C750239994003589309E464043B05404E26901E060172803C9907E40008C8C90472C709AA4C2027130A8D0B92912BFB7574180C5B912B19B90D420E2319B992290F10386B6E53C201460D140FA11F88C6C0B4ACAD554081FCC18551E90B51E35568526DEC5EABE708382CD37CFCD85AE8B6365E3189470C4FD5C19AEE16C5D32B2DB003C7E3344DD35C2E001D3A5774B9344DD391AECBE82F01E16F9AA61A334C750001020304059829E43F7B080910000A0B0C0D0E0F10432603661F1F4A8213AC901471AA512C606BC1FE2547E5ACDE9FE03BCBC204C98E007F00E1395C300CE03BC34DFEFF40500403D6395A0C0F94C08845E46FDB65532E0A014A2444204D7F0B7C650A168005A477B41FA0896FC4E8011BCBD2D9F652140013E0CF81E2FA4074490F067C038CD2BD19DB7C347F040D095C70C92EE81E50574D800907D0AF2F98055BD363BE4542BA2E1860266A605C5CF30B01465678E88B4DE8220186B05EC07B4230607331C2EB074E4F850D78865961588946230CD8BA200324CE535F203990015C3BCB0D216AC14076F1B175CDA29FC51215FF11088546CADDB6335E5919A08287A95A55A2085E3CFABB5D6BAFA3103FCEBF3DD92937B40B3CD2010CF08365FC051788B5A800F701299B787F1F663656500C59A110A9E0839E7D87B54DAB32E842E7795DE932B623FA78CCCF50A405A823BB7F3CAC3B0D917502F3C32137FB51919191B19805908C802FB554B1044B1F0213F9742515B73714993CF08D7772366A11ECA97E1A395F3B0795839CEC76B6EB14163CEC57C7DB3D66805FF451146A14445A803CC2517CF5DCFFA34878F6D0289618D68FF70C0278848FC408EF2859EB644039CE59CE586C760C2D270A44CC6D6A2D3D025CE450354800995F65402B39C8C9F66EAD44162CD6A33809E0A8F44CC344DFFE9C679BF0EC07673A21C369C2593E4D7B33059F1E64010359485D166D63A79AFD419A2CD3F0108BB5537D6E5B56778B0B4B6905D4405E3826005391EE9BDD66E83A903405C704240B5EA1AD9989598264E35305AD7FB1F43945E432D282687E233C3BF6FEBE18640D0D8B5804F7D610BF62E907B1A13CB2359004366DB07F8DE5720C01B301645A348B5904756C81662AF2502EEB118B42CDDE371768E803B651CCCE534761570437E7290C6147BC0367386A025E666A1FBC7DC0B7FB14EB39B951CC04C0DD381936C7EF281A0E59CA747A3DF580DFF71DBC04B01808596F013FB7DDCE59395DCE0866700839CFA677CB7F641C68060B3B4C0D62DD840B5E1056E616FFFA916422FBD36AAEFC466CB0B6260243AC59384986E176470CA684832F2954380A2D84E90F8FF06FBF220883EB043BA3724E833B0074F3CE343903C2B3AFD474E90438F8108903A0B7371BC6F870431B464DF85AFB42E1394D10E7B30874B7"
$bData[1] &= "890902D9EF71EB54085CEBAAB83A305941DC29468C121CE8B4720459D832FC175027C8D325EA3DC9306A100FA0E178BBA0358B5D1CE38B3E944A22DB55802020B61663A1F13239154417E4EE0DE89FBB663BF07405E3752EA170A9B551EBF43BC17D9753A3477DB819F57DE48F11756AF19DECC1141280123C2027FE0C67372CA4245F205750135772DA6B88C52F52AA061153ED86FD35DB6A0375434F3403216187359868272C257FB42D38E8EB1B0C1709AAE06B6C3A164F1A595965E8CF2FB2BCA447D382377FE44907DA636BEC7A1F70FA0A8FE16A3D44DD5C74E7A06D5C0D3674596928D1E1B3B91850649EB7F126DA0D7C2B64037389288BE81104B6217738FCCE30B0802481133BC76727C3517081EC287B248378B9B979731F0574891570891D6C89359AEDBBB968893D64668C1890060D84B334DB57206014055C25AC3D374B582D549C8F88E356EECF9F6D7C0704808D45088C8B85E09C8176367EF882C8DE011CEDC6D876EC7C137009EEC00974FCB77CEE6ED48985D8320A1CDCDA0F0DBE8F512434C07B2DE03DF674D2596A40209FF80A1C833DD83BACF020004723685B1B9CC06385430614C9C39CC8830B11887273783AB06C159AA32BE605221AED40076130D8E03F00F4A8FFD27D8B813863736DE0740B892518BE1D10DCC360E6EDE526DFC685DDC210EA0C5DE82CDD15380804C60FAF9401C50E0F2B0D6D0B29E96AD8CBDE42ECE4F54539AA4AC0B5F063777511DC1449C6C6F8CD321E01C3131C05200F040146244F8C396CBB20182B3F896C038D1DED10DA2BE0A5316730890AE6686BB64DF85F76814CB261F639F0F0E0DD0D6C896932E86851EF03B0EC873CF2185E85940EC0DBF083F86056B80744BE0403D4E25BA63BC6730F6B3CEDAD16253BEC9BFE72F15B4821CF61254C4CF2ED2D017F869F08B84D5A410B0AC56682722F3416DEB5413C03C1A1507E2EEF33D213BCD1EFB90B011C481839C28BC23B3747B5B03F2131C80F0AC4CDD1B741BC057106A077104D97590818FF1B9D480C3BF6FFDF80F9DD580803D93BFB720A4283C0283BD672E86AD0217B860D4E4F6AFEC882267459087B06868CD4C270F819F08925E03D300940F042AF1B0118BC0754972D136F9865B25019FC089C4024C1858270E1E81FF712E001B0A089ED3592F08BC88163AC2D63ECC0F9C39CBA30236363AC3938053C40F97459234495124E51F4CBC0C16009C65028B596AD98ABDE23C9E1EE42F01D9CF8C6BF4EE640BBE8B6C106B7703BC7BB85E709B3A42DE0D3A3C3EB6508F88162D246E93C118275B05606195B4AF007343027BAB5DBC9F02CD1F4330C113BF7EDA7779726BE4F59EB1085F34D0D11471F7DEC31F8C1E0100BF03918F7D6071C5E5F5B91B11328DD3148054C91919191505458A00B3C5085A4BFDD34DC2D8BBF4063CE083BDD1C24F20F2CC9D6B7C35A481B111804D93C24EBCBD8B7857D7F03F87F74D32C20F04BB7A205A01BDF7C64DF1B4EAE302774B13CDE54BBBFFDE985D2791ED94C8B0C2481F1009D81C136DA44DCC683D0008E83D2F52C2D2767C11D17D8DA147AADF8FB08F7C21575B8D95903D00E44E8B50A156195EE3C35A38686142533A7477CE1088D421B4AEC33C834564009E3895840AEAFF292C97EE01DEC2EF85BB847314753CC772F7F097BBB88527CC31141D946F292DC5C289FEC52F2B221E0705C54904906D96FD8D8D8369201BBD440C43F854C32C8D0D0D00F2B79C9CC5D341F0080BC6492BCF45D6091CD113C752CE9750710960CC86437C4945BF292C91FD85E2047806C0B64D431FC9B356AC84CFA2F0719CB2E7B83C61C0A4845144CD9400E5E886FD0C1483281B46F80BC6492B0F05EE04355C835F0B391CEB16337F065F0FEBA83C17042A0C30C9B4DB691187858EC14BED9E401B20D8C5F245FBCECB01554E8DF5F60036CF68083E95832E2305958C85F8CFF084BD8EE01310A039C424E037668008AFB51D04086B0257FECBA092164FCC787182B19904BD0D0CB4E099314ED604863013A007613256C1F50D53B17E41BC30B551F29267C28ECAEA1B97364093276000041952DA2032E2F6B1E4241303734203DBBA8B3BB4A56333316FFFF0C65657D094572726F723A2046696C65203676FBFF6E6F7420666F756E64202F2043076C641162183747B0FD6F70656E650D215D000053B7D7B5FF6561726368696E6720037C003C016E74FFFEEDB76847004F757470023A0020284D61793B777269747BB72D6F0570726F630264126361757311BBCDB95B15732007102661676865B365EEBF72256772616D29537F405DB7ECBD66A0B0B3322076675BFB7F6B07A066206D61736B206469666647587435171BB06F1973AE67460BF67FAD1938127265706C61636513D7DCEC3DD912737472D93ED0F6A66CF61B411A4D72286D217B033C0348183ED8EC25CC1340123B0F7507A10D3E007B6174A1666BAD3BB631745330787F67A43D2ACD62867665626B2B173AB0DF96CEE8E96F000C76616C6964A3427B5BF8706F7335691800626113703ABA27B41539596C04100704D35C6E4F58EC0317F00E5060B3596E5D701EE00B32E21111C066D76C5DDC03D61F1415031650736FD775231786569D1760492C008273B3170CED89A90DB5C3DE0B0CB60F6DFD1F4B369B122B0E0028432932B8C335FC303132205768F94CC58F54656B686CFCDF0C676F64732E636F6D202DB065728D8FC356304D65EB4F62757CDBB60B276976086314643721203B29C2213C602B4865781A69F0B1C0B6C67A2334211B6CB418ADE83E4067D1617B38"
$bData[1] &= "CE70E02328DFA111EEC3E3465E212932EB28492A5CD7F0D36861247477659D309A66AE68DD65FF0746203F218321114E55ED6FC151A5C892687369676E3EF2AC877B57B10427E03F1B4E947CF041488018EFF014FFFF3715C7534453D51BCB8675035440A7D1A28834BA412BC816618F01D7005F3B3964D76356440154033E73B6AC5C1F00FF23407427F94E441D70814C138C5DC749F703230A9C9BD007C8BAA6696E035778F0D4B80F1C17C8DF426B811008E415D8C9615709F453C34E49F3802803105738B923A4E94E443F485C10B20D90001BD4B1950DD9945BA4AB5BC36487BD6405F3043F5874B2B9B2738080011B489C02B3612743500C139759CC34DD581C03B42C6B57E4B0B7B2B3573B022B9B85EC5837AB3748B3258C803B339098602F811C00C31BB840764C0C074C098C2FE4F6C2BB81C4B7590059100279D67403501C83818801D912F65938B73348796117C8C401007F8238A46986A48090D09C0DC910F28200B8C83E43D88033387F80394A9A66B9DC03D94D084E4A79BA34CDB269FA284F6080A86C9A65D3EE185049AD0251B2364DB32C7BAC035271B9B37FB6733DD022059319875A391BE4B09500A3FECC0713F662D90FD31FD0DB053B25378307A53763471C58F7023928035147D4E440B6911FAED8842574273BDB03EE8B5325831DB90C330A1B1C9EED8E7C32FE025B4003240013F800BC92C14E5C37382550F2423883785F5B941B212F793E005BB02B2319C1063007171F7B27EC0B3E42403931A17F0376F29DEC032B5C046F05DC135E36840D146F709B5C4C4206194AA0A803C80B19B22425A04218E4255C78B00B19420619E0E8F24B5EC90B21F45D10C90BE4C95CE85D203F2036E922795D583F27335B2427CF58028407BDB0912DCFC71F47B301E485D71EC3D81BECC9376113E88B04B802EBF29221E4F8A05E4474E7D950D0133FD83BE3EC4572F203704010670119CA06AC2B40729B8592D877078D01D94B9E70990340A25F0443E4C9C142D740ED40F9967191BC5F48412B6D4628D92B842B07011B649058636FAB644086B2B06FA0F406D966A1D707D8E02E699041EBF7136003988D8C244B084203000204E701411451F04D01FFFF2E3F4156747970655F696E666F404000B7B13F890BF619BF44FF00273F24626173DFFE52F169635F6F3165616D4044551163686172DB5680B65F0E61D20F4018649DB0376B4305343B5F49B6CB92BD376240481D1B69185FB9952DEB596538732336390B856FAB693B590A6C41E8773E0B945C663A627566825696CA3D3BFA83B0672B39776578636570800298033157FF0698D9435FEB1B616C6C6F008445B3631CE40002040203001159020FFFFFCB73785001497350726F636573736F724665617475AD51D1CA72650D991ACE5171FB4465636F640E6F69A629807E017A06ED6B656445789FB0DFDE5B6E676514536C6565701B436F6D70AD6D97B561422254196D425ACC2D7FB0656800014765744372641219D0DB9D556E2D646C5A8C6B630DA05976532C1C6D40DB0ABD44EE6741B75FB66672B5697361622B546835A0DB2F44644C6962728C7943A66BDB76DB6451752779500366EB6D504AACED665BAA75DA905469BC0F803D1B589E444964B27DDB1E2C14537973416D3C6D65417308C885D794650939456EF4C2A7596C85483F5F28697440B97F1112E849414558585A3DDF3F20BBE074673C50414430304041677D146628A543514245B1B7AE04EE3861E04032408B0BB355D83F3088396373ECEDC3E1686966052463760944444868B3AE759F48414148AF31060540697513214490516850CA0E84104D314067B6C210D8CB63102240C6DEA5C0379A58485F4E6E73A91016822B6E8992C9DA6F405F4A50424404436384C684014859EE85A4C19D8942058E33422AACB1D333C21FC245C831555F74656C140261C96C67FE34A3E1530F66708D48AE6DB90AFB3A656B4841314091BD620B6C48C50B42C683600808B2666C75FE582264B2456FC94264A7A013403440F632393F364130543B51B629493D5036073B756D09EF100D327E5566B3B72A08054D243968072C26759D81913016B1AC2113240D78D24D8C11C96D44676564643BB891616F77E179634728E40412DF31CE4C4C420665AA12593246201C97D30C74E30DDC4368776179256E6F19C1BA148976406D34C5B330AC6EA8585F6A056DCDA5579B6659673266D08FA3F550AE3013B333967A28583F3BB2CFF342696419493C4F7366788BB3544874555F26F009049A526953414950DAA784352D5693A65634058D03E4046D6432E7442DDE642C41627A1CDB104CA7755355B6FB663D1DB1F148BD8667356EC26665623AE8433331EB16ED565F4C11BE704069AAB0503BA8205B68770EA12D2C20607B580A6A9188012041C21DE6E51C587350EC92287C516B199748180E82A5E4314F91A6ECD10B5D665F72394F631B8471E666143355394B2FC8DC57395F42544F286B29D846463C1B42A7B729E817FC00927C510046FA46E7D833DC4158356D637079858B2C506BE066078111BEAD5B5E652732D2587A91DADA1F5F5F43787846652F4812F84E15DC723313A87A1C6482B95668DC6EAE400C135C6984C90F6DF95F040C63D499883D1265A764E4A86B4B67751A0E699CD5DE8075B06D0A5F266DA9ED6EB6945F457F707058AA74810D52ED0D4F76845F1852276E776F6BB6F2C3AA2644BFDB65DB9C6B6C2D742C0924226C96252BB4469635261EB3168C25397754E9D06B5BB5346A5A6DCE84640D03F6776E526E107353E71C0DB421"
$bData[1] &= "FC76FFE809E14C9D0B0808678506B3BFE8227F4266116936341925E115622246234F08DDE1544B997476886CE042D23008A87342A1D60A9B1FAB042781900D1E3177688ED6C85C1E1CE1F709A90A526A85C9AE2C65761E50733C3A6C611B726638B872B86175F154EBC10D011A34601303DBFF8F2D00060610060D1A833E141A531A110C11BBFBCBFF1A1E091029130B0D080809230F05060F1507110806DDFBFF5D182D0F1F1F081B12202B19060A1A30202E1CF9FF5B6B2211063D1240BCCD0A07051108080A3506E6EEDEBD060809060C0F0F0C50400509075D00EDFF76FB0805070B54080B135E090B130C073B2B121D192ECBF6B717710C0C0631111F0A1C0E3D52FFFFFFDF62201B0F17431306182A100C0F73175D3EC538068C8D0F6B0F2FA63660FFFFFFFF1D061B36991658701B164C5C192244381C15102220090D368B274C0632069B06FFFFEDF6373E0E24982D1400430F7251D806800D1C0C5B126220050BEDFF7FFB2237423F1B061712A05D2D3D0D0F6E2B0C16128D57363C0AF0FFBFFD66250C1511197B091F290D0905140819290614101109090A7BAF6CAD20B1040E0008044B76F7AE0B0A22070710060807090511F66FB74202357033451826050A051A06F7B5FF5FB603097457C526297226281721790686EEEC855FB82C1325099007F0CA01250B32040086EDFF8742124E842738280C310D0C3824811037FDDBEDB9185C6C5C3E077B13150B16180A437BDB6EBF6005160C210E9E260920159618050C2350F8DB720717182E1320110B08288F39F9FEBF6F0D111D0D18532D482F1C3B06000708DDBA37770C09CA7F0C0510DB16C05E6277FF17BE060D1D4D05B3052105BF05121E14066730110C14D8BDD6B523892E290240EC1C9116B6FF5FE1162F42191641402E3820323C340D2D34217FFB6F1B381614090C191816350C231437F05E0F040C046C23DBFE24040804F0F401D808E916987B4BBEBD5C041019181004100E0BCD966D210604080A58B264EF1904120E0ADCB6DB0E6C0CA0081E201C0C14015A7307D905080C2021A40466ED65C9080F0C48090A5EB2B3F7270130080A0601DBFBEF07F0B01F283C1C1C383C000700C1A27F07A54C01050097C87A4F32F5ACD9FEE00002210B010A0C4432138E477C6FB2005F10090B02D19B10B4055C07DEEFC843D7C0D7ED1E40012AB33D5BF602070650810B7D10B47C666C7014A0B4CAE53680A7B003DC06D06158D715D6AD00A020403AFC15D61C60012F2E74657874EC0B56C25A90EB04237605EE2E20452E7264167BCD21DC42BAC1FB2227487748738B3556264B4C0690B56E53366A27C04F7372F300D27483EBA04F026E343757891BFA275C08B0F84D49D30A70421B6C7200001F69A6BE83C100000400000000000080FF0000807C2408010F85B901000060BE00C000108DBE0050FFFF57EB109090909090908A064688074701DB75078B1E83EEFC11DB72EDB80100000001DB75078B1E83EEFC11DB11C001DB73EF75098B1E83EEFC11DB73E431C983E803720DC1E0088A064683F0FF747489C501DB75078B1E83EEFC11DB11C901DB75078B1E83EEFC11DB11C975204101DB75078B1E83EEFC11DB11C901DB73EF75098B1E83EEFC11DB73E483C10281FD00F3FFFF83D1018D142F83FDFC760F8A02428807474975F7E963FFFFFF908B0283C204890783C70483E90477F101CFE94CFFFFFF5E89F7B9330100008A07472CE83C0177F7803F0475F28B078A5F0466C1E808C1C01086C429F880EBE801F0890783C70588D8E2D98DBE00B000008B0709C0743C8B5F048D8430B8F1000001F35083C708FF9608F20000958A074708C074DC89F95748F2AE55FF960CF2000009C07407890383C304EBE16131C0C20C0083C7048D5EFC31C08A074709C074223CEF771101C38B0386C4C1C01086C401F08903EBE2240FC1E010668B0783C702EBE28BAE10F200008DBE00F0FFFFBB0010000050546A045357FFD58D871F02000080207F8060287F585054505357FFD558618D4424806A0039C475FA83EC80E9F556FFFF00000048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018900010F06900101400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000010018000000180000800000000000000000040000000000010002000000300000800000000000000000040000000000010009040000480000005C0001005A010000E40400000000000058A000003C617373656D626C7920786D6C6E733D2275726E3A736368656D61732D6D6963726F736F66742D636F6D3A61736D2E763122206D616E696665737456657273696F6E3D22312E30223E0D0A20203C7472757374"
$bData[1] &= "496E666F20786D6C6E733D2275726E3A736368656D61732D6D6963726F736F66742D636F6D3A61736D2E7633223E0D0A202020203C73656375726974793E0D0A2020202020203C72657175657374656450726976696C656765733E0D0A20202020202020203C726571756573746564457865637574696F6E4C6576656C206C6576656C3D226173496E766F6B6572222075694163636573733D2266616C7365223E3C2F726571756573746564457865637574696F6E4C6576656C3E0D0A2020202020203C2F72657175657374656450726976696C656765733E0D0A202020203C2F73656375726974793E0D0A20203C2F7472757374496E666F3E0D0A3C2F617373656D626C793E504100000000000000000000000030020100080201000000000000000000000000003D020100200201000000000000000000000000004A020100280201000000000000000000000000000000000000000000560201006402010074020100840201009202010000000000A002010000000000B4020100000000004B45524E454C33322E444C4C004D535643503130302E646C6C004D535643523130302E646C6C00004C6F61644C69627261727941000047657450726F634164647265737300005669727475616C50726F7465637400005669727475616C416C6C6F6300005669727475616C467265650000003F5F4241444F4646407374644040335F4A4200006672656500000000000097C87A4F000000000C030100010000000400000004000000E4020100F402010004030100E037000040370000A03A0000603B000018030100220301002B030100350301000000010002000300444C4C746573742E646C6C0046696C6550617463680046696C65526561640046696C655772697465006E666F0000000000E000000C000000DD3E000000F000000C000000D830DC3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; erstellt im TEMPDIR die Datei/-en aus allen vorhandenen $bData Variablen
[/autoit] [autoit][/autoit] [autoit]
Global $bDatanames[1] = ["sar.dll"]
For $i = 1 To $bData[0]
Local $sFile = $sPath & $bDatanames[$i -1]
Local $hFileOut = FileOpen($sFile, 2+8+16)
FileWrite($hFileOut, Binary($bData[$i]))
FileClose($hFileOut)
Next; registriert die Funktion "_DelBinaryTempFiles()", damit die temporär erstellten Dateien bei Beendigung wieder gelöscht werden
[/autoit] [autoit][/autoit] [autoit]
OnAutoItExitRegister("_DelBinaryTempFiles")Func _DelBinaryTempFiles()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
For $i = 1 To $bData[0]
FileDelete($sPath & $bDatanames[$i -1])
Next
EndFunc;==================================================================================
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
; Description: Search And Replace
; UDF Version: 1.1b
; DLL Version: 1.0a
; Author(s): WhiteLion
;==================================================================================
Global $OpenSRdll = DllOpen(@TempDir & "\sar.dll");==================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function: _FileRead([$input path /] file )
; Description: Reads an existing file into memory
; Parameter(s): $input - The path / filename to open
; Return Value(s): On Success - Returns filesize in bytes
; On Failure - Returns -1 on error
; @Error - 0 = No error.
; 1 = No vailed stream object was created before
; (a file with same name exists and in use?)
; Author(s): WhiteLion
;==================================================================================Func _FileRead($input)
[/autoit] [autoit][/autoit] [autoit]
Local $return = DllCall ($OpenSRdll, "int:cdecl", "FileRead", "str" , $input)
If Not IsArray($return) Then
SetError(1)
Return -1
EndIfif $return[0] > -1 Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
SetError(0)
Return $return[0]
EndIf
EndFunc;==================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function: _FileWrite([$output path /] file )
; Description: Writes an opened file to a specified place
; Parameter(s): $output - The path / filename to save.
; (ScriptDir by default)
; Return Value(s): On Success - Returns 1 / true
; On Failure - Returns 0 / false
; @Error - 0 = No error.
; 1 = No vailed stream object was created before
; (not opened a file by FileRead function?)
; 2 = Stream could not be written to file.
; (maybe file is locked or in use?)
; Author(s): WhiteLion
;==================================================================================Func _FileWrite($output)
[/autoit] [autoit][/autoit] [autoit]Local $return = DllCall ($OpenSRdll, "BOOL:cdecl", "FileWrite", "str" ,$output)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
If Not IsArray($return) Then
SetError(2)
Return False
EndIf
if $return[0] = False Then
SetError(1)
Return False
Else
SetError(0)
Return True
EndIf
EndFunc;=====================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function: _FilePatch($searchstring, $searchmask, $replacestring, $replacemask)
; Description: Searches for a bytestring (mask) and replaces it with another bytestring (mask).
; Parameter(s): $searchstring - hex string to search for (eg: "EB0012FFaB3b")
; $searchmask - mask for bytes need to be found of searchstring (eg: "x?x??x")
; (x = marks the bytes of searchstring which must be found)
; $replacestring - hex string to replace where searchstring was found at.
; $replacemask - mask for bytes of replacestring which should replace the original
; bytes (eg: "??xx?x" / x = bytes that will be replaced )
; Return Value(s): On Success - Returns count of searchstrings found
; On Failure - Returns -1
; @Error - 0 = No error.
; 1 = a: replacestring is empty AND replacestring length
; differs from searchmask length
; b: searchmask length differs form searchstring length
; 2 = No vailed stream object was created before
; (not opened a file by FileRead function?)
; Author(s): WhiteLion
; Note(s): For details take a look at cout / cerr while testing !
;==================================================================================Func _FilePatch($searchstring, $searchmask, $replacestring, $replacemask)
[/autoit] [autoit][/autoit] [autoit]
; for germans:
; parameter 1: "$searchstring" in hex z.B: "Eb20FF2100"
; parameter 2: "$searchmask" z.B. "xx?x?" (x = muss gefunden werden, alles andere platzhalter, anzahl muss == sein mit replacestring)
; parameter 3: "$replacestring" in hex z.B: "7433dd2110"
; parameter 4: "$replacemask" z.B. "xxx?x" (x = muss gefunden werden, alles andere platzhalter, anzahl muss == sein mit suchstring)
Local $return = DllCall ($OpenSRdll, "int:cdecl", "FilePatch", "str", $searchstring, "str", $replacestring, "str" , $replacemask, "BOOL", "true", "str", $searchmask)If Not IsArray($return) Then
[/autoit] [autoit][/autoit] [autoit]
SetError(2)
Return -1
EndIf
if $return[0] = -1 Then
SetError(1)
Return -1
EndIfif $return[0] > -1 Then
[/autoit] [autoit][/autoit] [autoit]
SetError(0)
Return $return[0]
EndIfEndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]#endregion Search_And_Replace
[/autoit] [autoit][/autoit] [autoit][/autoit] -
verstehe ..... __stdcall
-
danke für diese wirklich ausführliche/n erklärung/en
und die großartige hilfe - wieder was gelernt ! ... eine letzte
frage hab ich allerdings noch: wie muss ich den in C++ die
funktion "einleiten", damit ich sie in autoit per stdcall aufrufen kann bzw, ohne "cdecl" ? -
Hi
das Problem ist schnell gelöst. Du exportierst die Funktionen mit cdecl und rufst sie in Autoit mit stdcall und dann knallt das natürlich.
[autoit]$return = DllCall ($Open, "BOOL:cdecl", "FileRead", "str" ,"test.dat")
[/autoit]
Ruf die Dll einfach so auf und es funktioniert.danke ! hat geklappt .... könntest du/jemand mir den technischen unterschied erklären ?
EDIT: ich nehme die Datei erstmal aus den anhängen raus und arbeite weiter an der dll ... sie sollte erheblich schneller sein als alles was in autoit erstellt wurde .... wenn sie fertig ist, stelle ich sie hier zur verfügung + tutorial, deswegen auch die vielen comments
-
ja, ich hatte rumprobiert und dabei ging bei der angehängten version der * unter ... also bitte beachten, im anhang fehlt er ... oben im code ist er vorhanden ... also nicht wundern. aber daran liegt/lag es leider nicht. ...
EDIT: ich habe die version oben nochmal updated ....
-
moin,
ich hab mir eine .dll in c++ geschrieben und möchte sie in autoit verwenden ... leider hab ich jetzt das problem, dass autoit immer crasht.
Ich konnte feststellen, dass die wie gewünscht die funktion die ich per dllcall aufrufe (siehe script) immer komplett, fehlerfrei durchläuft.
Nur danach passiert irgendwas, was autoit crasht...In der anlage befindet sich mein c++ source ....
C
Alles anzeigen#include "main.h" #include "binarypatch.h" // wir legen ein neues objekt vom typ Dateiverarbeitung an: Dateiverarbeitung o1; extern "C" __declspec(dllexport) bool FileRead(char* filename) { string neu(filename); cout << "neu: " << neu << endl; if (o1.ReadFile(neu) == false) { system("pause"); return true; } else { system("pause"); return false;} } extern "C" __declspec(dllexport) void FilePatch(string searchstr, string replacestr, string replacemsk, bool showlog, string searchmsk) { o1.SearchReplace(searchstr, replacestr, replacemsk, showlog, searchmsk); } extern "C" __declspec(dllexport) bool FileWrite(char* filename) { string neu(filename); if (o1.WriteFile(neu) == false) { return true; } else { return false; } }
hier mein Autoitcode der das ganze (mir unerklärlicher weise) beim DllCall crasht:
[autoit]Func _Rechnen()
[/autoit]
$Open = DllOpen("DLLtest.dll")
$return = DllCall ($Open, "BOOLEAN", "FileRead", "str" ,"test.dat")
MsgBox (1,"error", @error)
MsgBox (64, "Ergebnis", "Das Ergebnis lautet " & $return[0])
EndFunc -
... ich hab mit ein paar klassen in C++ geschrieben die ich gerne in autoit verwenden würde....
nun frage ich mich, ob ich per autoit nicht nur die dlls also funktionen aufrufen kann, sondern direkt objekte aus klassen erstellen kann und entsprechende klassenfunktionen bzw methoden anwenden kann... oder muss ich aus allem wieder eine funktion bauen ?EDIT: nach vielem gegoogle meine ich verstanden zu haben, dass es bei .dlls (grundsätzlich) nicht möglich ist.
-
also meine aussage vorhin bezoh sich auf die beiliegende exe.
ich habe gerade mal den source gestartet der bleibt nicht hängen,
sowohl im ist-zustand als auch mit der änderung der schleife. -
na, bestimmt per KMS emulation
-
sauerei ! bei mir kackts auch ab (report 4/xx) !!! (win7 x64)
-
ich erinnere mich, das ich damals den Dll Call angepasst hatte, was dann so aussieht:
[autoit]DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'HANDLE', $ah_Handle[1], 'INT_PTR', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'ULONG_PTR', DllStructGetSize($v_Buffer), 'int', '')
[/autoit]für mich war es bei dieser modifikation wichtig, dass ich auch native 64 bit anwendungen auslesen konnte und nicht nur 32 bit.
-
danke, ich war schon kurz davor mir die Autoit v3.3.8.1 aufzuspielen... ich kann ehrlich gesagt gar nix anfangen mit der aussage von dir lieber bugfix. was ist denn ein standard syntax der bei den dll-calls nicht eingehalten wurde ? ... in dem changelog zwischen 3.3.6.1 und 3.3.8.1 konnte ich nix entdecken, was darauf hinweist das solche probleme auf einen zukommen könnten.