diff --git a/trunk/.idea/compiler.xml b/trunk/.idea/compiler.xml
index 4c35963cb..c33f99162 100644
--- a/trunk/.idea/compiler.xml
+++ b/trunk/.idea/compiler.xml
@@ -5,6 +5,7 @@
+
diff --git a/trunk/libsrc/FlashPlayer/uMain.dcu b/trunk/libsrc/FlashPlayer/uMain.dcu
deleted file mode 100644
index 426ce1d08..000000000
Binary files a/trunk/libsrc/FlashPlayer/uMain.dcu and /dev/null differ
diff --git a/trunk/libsrc/Swf2Exe/Swf2Exe.cfg b/trunk/libsrc/Swf2Exe/Swf2Exe.cfg
new file mode 100644
index 000000000..f2b2beddf
--- /dev/null
+++ b/trunk/libsrc/Swf2Exe/Swf2Exe.cfg
@@ -0,0 +1,39 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-E"."
+-LE"c:\program files (x86)\borland\delphi7\Projects\Bpl"
+-LN"c:\program files (x86)\borland\delphi7\Projects\Bpl"
+-w-UNSAFE_TYPE
+-w-UNSAFE_CODE
+-w-UNSAFE_CAST
diff --git a/trunk/libsrc/Swf2Exe/Swf2Exe.dof b/trunk/libsrc/Swf2Exe/Swf2Exe.dof
new file mode 100644
index 000000000..0955e8a7e
--- /dev/null
+++ b/trunk/libsrc/Swf2Exe/Swf2Exe.dof
@@ -0,0 +1,138 @@
+[FileVersion]
+Version=7.0
+[Compiler]
+A=8
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=0
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=0
+R=0
+S=0
+T=0
+U=0
+V=1
+W=0
+X=1
+Y=1
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+NamespacePrefix=
+SymbolDeprecated=1
+SymbolLibrary=1
+SymbolPlatform=1
+UnitLibrary=1
+UnitPlatform=1
+UnitDeprecated=1
+HResultCompat=1
+HidingMember=1
+HiddenVirtual=1
+Garbage=1
+BoundsError=1
+ZeroNilCompat=1
+StringConstTruncated=1
+ForLoopVarVarPar=1
+TypedConstVarPar=1
+AsgToTypedConst=1
+CaseLabelRange=1
+ForVariable=1
+ConstructingAbstract=1
+ComparisonFalse=1
+ComparisonTrue=1
+ComparingSignedUnsigned=1
+CombiningSignedUnsigned=1
+UnsupportedConstruct=1
+FileOpen=1
+FileOpenUnitSrc=1
+BadGlobalSymbol=1
+DuplicateConstructorDestructor=1
+InvalidDirective=1
+PackageNoLink=1
+PackageThreadVar=1
+ImplicitImport=1
+HPPEMITIgnored=1
+NoRetVal=1
+UseBeforeDef=1
+ForLoopVarUndef=1
+UnitNameMismatch=1
+NoCFGFileFound=1
+MessageDirective=1
+ImplicitVariants=1
+UnicodeToLocale=1
+LocaleToUnicode=1
+ImagebaseMultiple=1
+SuspiciousTypecast=1
+PrivatePropAccessor=1
+UnsafeType=0
+UnsafeCode=0
+UnsafeCast=0
+[Linker]
+MapFile=0
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=
+[Directories]
+OutputDir=.
+UnitOutputDir=
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=
+Packages=vcl;rtl;vclx;VclSmp;vclshlctrls
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+Launcher=
+UseLauncher=0
+DebugCWD=
+[Version Info]
+IncludeVerInfo=0
+AutoIncBuild=0
+MajorVer=1
+MinorVer=0
+Release=0
+Build=0
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1029
+CodePage=1250
+[Version Info Keys]
+CompanyName=
+FileDescription=
+FileVersion=1.0.0.0
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=
+ProductVersion=1.0.0.0
+Comments=
+[HistoryLists\hlUnitAliases]
+Count=1
+Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+[HistoryLists\hlOutputDirectorry]
+Count=1
+Item0=.
diff --git a/trunk/libsrc/Swf2Exe/Swf2Exe.dpr b/trunk/libsrc/Swf2Exe/Swf2Exe.dpr
new file mode 100644
index 000000000..d5aeb1d5b
--- /dev/null
+++ b/trunk/libsrc/Swf2Exe/Swf2Exe.dpr
@@ -0,0 +1,16 @@
+program Swf2Exe;
+
+uses
+ Forms,
+ Windows,
+ Dialogs,
+ uMain in 'uMain.pas' {frmMain};
+
+{$R *.res}
+
+begin
+ Application.Initialize;
+ Application.Title := 'FFDec Flash Player';
+ Application.CreateForm(TfrmMain, frmMain);
+ Application.Run;
+end.
diff --git a/trunk/libsrc/Swf2Exe/Swf2Exe.res b/trunk/libsrc/Swf2Exe/Swf2Exe.res
new file mode 100644
index 000000000..ab5651a32
Binary files /dev/null and b/trunk/libsrc/Swf2Exe/Swf2Exe.res differ
diff --git a/trunk/libsrc/Swf2Exe/flashplayer.ico b/trunk/libsrc/Swf2Exe/flashplayer.ico
new file mode 100644
index 000000000..139de46be
Binary files /dev/null and b/trunk/libsrc/Swf2Exe/flashplayer.ico differ
diff --git a/trunk/libsrc/Swf2Exe/uMain.dfm b/trunk/libsrc/Swf2Exe/uMain.dfm
new file mode 100644
index 000000000..52a9a92ee
--- /dev/null
+++ b/trunk/libsrc/Swf2Exe/uMain.dfm
@@ -0,0 +1,650 @@
+object frmMain: TfrmMain
+ Left = 323
+ Top = 163
+ Width = 1007
+ Height = 661
+ Caption = 'FFDec Flash Player'
+ Color = clWhite
+ Font.Charset = DEFAULT_CHARSET
+ Font.Color = clWindowText
+ Font.Height = -11
+ Font.Name = 'MS Sans Serif'
+ Font.Style = []
+ Icon.Data = {
+ 0000010004000000000001000800EC310000460000003030000001000800A80E
+ 0000323200002020000001000800A8080000DA40000010100000010008006805
+ 00008249000089504E470D0A1A0A0000000D4948445200000100000001000806
+ 0000005C72A866000031B34944415478DAED9D0B7C14D5F5C70F8F3C8090F008
+ 041523521031451E159AF8A041FEB4F28F88429428A08912B51A54A80F94FEED
+ 940AA258F081CADFA841010D1A10458A1695482B49E15F40298280881435BC02
+ 84040328F33FBF95B50177E6DED99DDD99D9BDDFCF673EBBB0B39BBBB373CE3D
+ E7DC73CE6D448AA8E4FD8913F5FA8307E9686DADEF38C2CF8F1C3A4447F9F03D
+ E2FFF911C4B76C49F149499480473EF0989092E2FB3F1C89FC7CE0E4C98D9CFE
+ 4E0AFB513FAA078170EFFDEC33DAC7C7DE2D5BE8787DBD23E3689C9848A95DBB
+ 52DB6EDD28950FA524BC87FAC15CCC5B85853F0A7ADDAE5D4E0FC7122DD2D27E
+ 540C571417ABFBCCA5A81FC645BC326488BE7DF9729F791E8DC09DE83460005D
+ B778B1BAEF5C82FA211CA474D8307D7B7939D557573B3D1447486CD3863A6567
+ 53DEC285EA3E740875E123C8EB7979BE19DE6BE67CA480DB000BE1EAD252755F
+ 460875A1C3CCCB8306E9DB962D737A189EA4F3A04174FDB265EA1E0D23EAE286
+ 8137F2F3F58D656551EBCB471AC40EBAE7E6D255B367ABFBD566D405B5092CCD
+ 7D3C670ED5ECD8E1D8185A356942CD1B35A284C68D299E1F7124F21177E27933
+ FEFF383E2F911F134E3C07C7F83872FC38D5F381E7DFF2E3515DA7637CD4F371
+ F4C481730EF3E381EFBF77EC3B26A7A753CFD1A3D592A34DA88B1822C59999FA
+ 57959511FB7BCD5890539B36F51D6D59E053F9687BE27924D9C74A60DF77DFD1
+ 5E3CF2B117CFF9F8961544A4382333930A2B2BD53D1C02EAE20501D6E7D7CD9E
+ 4DC78F1D0BDBDFC0ACDD312E8E4E83B043D04F083D667437038BC1AF0CA01CBE
+ E1C79D7C9D8E85513134E6EBD42B3F5FE51B0481BA601658306A94BE61FEFCB0
+ 083E04BE030BF8D9F1F1D4858F347E1EE77261B7C2177CCDBE3C7A94BEE0A38A
+ 95423814021441C68811347CEEDCE8B97061465D2809E6E7E6FA827A767326DF
+ B0387E9690401DA34CE0CD80F0EF6425F0F99123B49D15C2D7FCDC6E10341C51
+ 56161B173404D40532615E4E8EBE65C912DB3E0FFEFBCF1313A90B0B7C2716FC
+ 581178115008DBD942D8CA0AE15FF5F5B6C611BAE6E4D0C8254BD48536405D98
+ 00CC1E30C097B0630710F27359E07B356B4667C7C585FE813100DC8575DF7E4B
+ 9B5821D8E52A20C1287FF97275BF9F82BA200D783E2B4BDF595161CB67C197EF
+ C1829FC133BE9AE98303C2BF812D82F5AC08103BB0838E595934A6A242FD2027
+ 501782595450A0AF2B2909F973DAB31FDF8305BE271F498D1B3BFDB5A28ADAE3
+ C7E96328033E76DB1033E8555040579694C4FCFD1FF317606A9B367A28C53898
+ DD7BB1C0F766131F517C45F8C12AC25A7611D6B13208C5454031D284EAEA9896
+ 8198FDF2CFF5EBA77FBD6A55D0EF87E0F765A1CF6CDE5CCDF60E01ABA0F2F061
+ 5ACDCA201445707ABF7E74F3AA5531290B31F7A5971415E9AB67CE0CFAFD88E4
+ F765A187E0BB3D29275640F2914F11F011CA0A42DFA222CA993933A67ED498FA
+ B2D3D2D2F4604B7121F817B568E19BF55550CF9DC00A8035F0515D5DD08AA045
+ 870E744F5555CCFCC031F1454BB2B3F52FCBCB837A2F0A6CFAF36CAFA2F9DE01
+ 8A00F1810AB608822D5C3A2B3B9B0ACACBA3FE078FFA2F382931510FA669A65F
+ F0B17EAFF02EC8275811A42240D3D307EBEBA35A46A2F6CB059BBE8B593E8B05
+ FF223ED48C1F1DC022F88895002C82608285D19C561C955FEA892E5DF4FD5BB7
+ 5A7E1F9277FEBB65CB8897D62A2203CA96FF72E850504945ADBB74A13BB76E8D
+ 3A7989BA2F34292E4EB75AAD87001F041F7EBE22FA4176211481D54021AA0D1F
+ 3C762CAA64266ABE0C3AEC6E5AB8D0F2FB10D51F80DD6F94B91F53C01578AFB6
+ D6B76A609573870D8B9A4EC651F1251EEFDC593FB06D9BA5F7A00C7730CFFA2A
+ 7B2FB64156E1DB3535964B925B75EE4C776DDBE679F9F1FC17B06AF223B03798
+ 677C15DD573404AB054BD922B012248C0697C0B3830F26CA7F3ACFF6D7A4A450
+ B20AF2290250F3FDF7F4DAC18396AD012FAF127872D0C1D4EBC3D787C9AF5088
+ 587AE890E5D88057FB0D786EC0B37AF7D6ABD6AE953E1F11FEA1C9C9744E4282
+ D343577888CD478ED09B353596560A3AF4EE4DB7AE5DEB2999F2D460ADAEEF2B
+ 935F110AC1B8045ECB17F0CC40A775E8A0D75555499F7F61F3E6F45F49494E0F
+ 5B110560B970E5E1C3D2E77BA9A0C813839C9294A4CB6EB3A54C7E4538B0EA12
+ 603BB3076A6B5D2F5FAE1FA095621EB4E41AD5AA956AD0A138097F1BF24DFCB8
+ 95CDFAADFCFCE77CAF145A5C0A864BF00ABB04B22DC9BC504CE4EAC15959E347
+ 1EFFD5ECEFAB8CBED8E4C0F1E3B48D8FCF5948716CE763CB89E7DFF071EA5D74
+ 330BFFAC205685A04C4A5909C8D613B83D57C0B503D388A4C3AFDDD9DC87F02B
+ 6283AF58D03F64015C81F6E13C1B6346AFB698D7FF5B56004F07B92C0C25B088
+ DD818DEC16C8A2B954D65C3928CD82F0ABF5FDE807FB047CC8B378F909A1DF6E
+ C3EEC4C15A000DB19A2FA0B950DE5C37202B667F768B16D49F0F4574B19167F4
+ 0F21F438B09720CFF876138A05D09015757554CE870C6E74075C35182B01BF2B
+ F8C753F9FCD10384FE25FEED4BD9ACDE61C30C2FC20E0BC00FEA08DE626B4006
+ B705065D3310D9A53E14F3E4B2BFDF353EDEE9212B42640FCFEC10F812F4F80F
+ C306A166D86501F8C132E1829A1AA96222372D11BA6210B2493E58E3BFB6552B
+ EAA8F6D8F32C68E1BD98CDFAB93CDBBF83BDFF1C1A879D16809F9DECB2BC7AE0
+ 8054AE805B92851C1F806C7A2F847F74EBD6AA7EDFA354B070C0C47F958F4336
+ EEFEDB90389E183A75EAE43BBA76ED4AEBD6ADA3952B57063CD76E0BC00FFA0B
+ CCD9BF5F4A09B8216DD8D13F2E5BD803B37FB49AF93DC7376CE2CF62F37E0E0B
+ BD1D91FB86B464E1CDCCCCA45FFDEA57949595455D5898CE3CF34C6AD4200F64
+ C28409F4C8238F047C7F382C003FB004E6B02520E30E385D40E4D81FB652D29B
+ C73EBF4AEDF50E58A79F525747B359F043D9A9A721EDDAB5F3097A7676365D7C
+ F1C5D4B3674F8A17C481CC1440B82C003F880920614806274B891DF9A3569A79
+ A868BF77B053F021F003070EA44B2EB9C427F4DDBB773F697697C1290BC08F95
+ D501A79A8A38A20034C9441FB5CEEF0DFC82FF3C36E90CE173E0C30F1932846E
+ B8E106BAECB2CB8433BC08272D003F56F2043407E431E27F5036D14765F8B91F
+ 44F435BEB96760C38D103EA75FBF7E3EA1CFCBCBA3366DDAD8363EA72D003FB2
+ 19834EE40844F48FC976EF55B9FDEE6711FBB877D5D6069DB4939E9E4E23478E
+ A4FCFC7C3AE79C73C232463758007E5E3F7850AA7620D2DD8623F68764FBF6A3
+ AA0F413FB52D973B415E7E11CFFA4B83D85D0791FB2BAFBCD227F403060CB0EC
+ D35BC52D16801FAC0CC854114672DF8188499926E1F7A39EFFA6D6AD95F0BB10
+ 98FBD3D9D49FCC87D5001F027877DF7DB7CFC46FDEBC79C4C6EC260B00E01ACE
+ DEBF5FAA9F801621D98CC81F91F1FB91E8730BFB7FAA7F9FFB409EFE556CC26E
+ B668EE43F0274E9C48D75D775DD867FB40B8CD0200682AF2BFD5D542251AA9C2
+ A1B0FF01D94C3FA4F8AAFC7EF7F14A7D3D155ADC47CF69C1F7E3360BC0CF1676
+ 0390322C2212998261FD70D9F57ED5C0D37D208B6D6C6D2D3D67A1DEFDB4D34E
+ A369D3A6392EF87EDC6801F8916D341AEEFC80B0FE4A9A84DF8F3DFA0AD8EF57
+ B80704FA86F3AC2F5BA187F5FB5B6FBD951E7AE8214A4E4E767AF83FE2560BC0
+ CFF3EC0AC8B41CD7C228A761FB6099DA7EE5F7BB0F2CEFDD5053235DB08335FC
+ 679F7D96FAF4E9E3F4D07F829B2D00201D0F08637E40583EB4243B5BFFB2BC5C
+ 789ECAF17717C8E6FBBD64D65A6BB6DA205C63C68C7185B91F08B75B0040B666
+ E0ACEC6C2A282FB7FD4287E597D3244C7FE5F7BB8B89EC933E2CB9F945FFFEFD
+ A9B4B4D4E7F3BB19B75B007E64E3015A18E4D5F60F9C9696A6D7EDDA657A0EB6
+ EC1A6363CAA722347EC737E00C49E1BFEFBEFBE8E1871F76EDACDF102F58007E
+ 64E2012DD2D2E89E5DBB6CBDF0B67ED892A2227DF5CC99A6E720C9E776E5F7BB
+ 863B0F1DA2A72422FD30F9E7CD9B4783070F767AC8D278C5020088073CCD4A40
+ D443A06F5111E5CC9C699BDCDAAA003409D35F95F7BA87DB59F89F95107E04FA
+ 5E7FFD755FFEBE97F092050064CB87351BE5D6B60F7AAE5F3FFDEB55AB4CCF51
+ A6BF7BB8956F349935FEC2C2429AC9565DA8A5B94EE0250BC04FC9FEFDF46F41
+ D6ECE9AC906F5EB5CA16D9B54D016812B3FFCD2CFCAAA79FF3C8CEFCE3C68DA3
+ E9D3A73B3DDCA0F19A0500D053F0397605446836C9AE2D1F32B54D1BBD5E3068
+ 55DFEF0ED09F0FEBFC22EEBFFF7E9A32658AD3C30D092F5A0040A67F40224FA6
+ 13AAAB4396DF903F60514181BEAEA4C4F41C24FCDC959AAAAAFC1C660DCF2E97
+ 4874AC45461F72F9BD8E172D008040E0E37BF70A7FA75E050574654949484215
+ B2446A12A6FFF0E464CA484CB4FB3A292C80DD73FBB0F08BBAF3C2E487E91F0D
+ 78D502009B8E1CA1D7241284B4106538A4373F9F95A5EFACA8303D070D3ED0D2
+ 5BE12C39070E089B783CF1C41374C71D77383D54DBF0AA05E047A68148C7AC2C
+ 1A535111B41C87A40034C1EC0F931F81BFB66ACDDF51FE5057477F12A4F8DE76
+ DB6DF4F4D34F3B3D545BF1B20500F6B3B5364B2237400B418E837EA34C5F7F74
+ F4CD565D7D1DE56D3625AF109892175E78212DE7DFD28B4B7D6678DD0200E828
+ BC42A0BC43D957206805A00966FF563CEBFF96677F15F8730EF8FDDD7806D963
+ B2BD36F2F9FFF9CF7FBA3EAF3F18BC6E0100CCFECFF26F784010BBD18294E5A0
+ DE342F2747DFB26489E9392AE3CF794439FEA8E3FFF0C30F7D3BEE4423D16001
+ 00990CC1AE39393472C912CBF21C9402D02466FF3BDAB68DE435529C02FAF85D
+ 2058F283CF0FDF3F1A387AF428FDFDEF7FA7F2F272DAB06103AD5FBF9EB66CD9
+ 6278BE572C003F4FEEDB17162BC0F21B64DA7C21E1A7AF9AFD1D4514F52F2828
+ A0175F7CD1E96186C461B66EDE7BEF3D5AB46891EFD8CF0A4F162F5900008941
+ 4B05564030EDC32C2B004D30FB23E9E79E76ED9CB8468A132C63C1FF8D49D349
+ F8FB5BB76E8D688B6EBBD0D9A259BC7831BDF4D24BB46CD9323A24B9F7DEA978
+ CD0200D3F6EC112607691665DAD2C90B468DD2D7CF9D6B7A0E9A7C5CE8C11B2B
+ 9AF87975357D6A525B3E977F43ECCAE32520F8A848449622CCFB50F19A0500D0
+ 3404CD43CCE8316A140D9F3B575AAE2D2900517F7F95F2EB3CA8EDBFD36456C4
+ 921F7C652F34F40010FC3973E6D0D4A95369E3C68DB67DAE172D00991461ABFB
+ 09489FF85661A1BEA6B8D8F41CB5EEEF2C58F6EBB26F1F551BDC20717C7CB46A
+ 15F5EDDBD7E9A14AF1C1071FF8BA0D9B05F382C58B160090C90BE85358485714
+ 174BC9B6B40210CDFE98F5C7F1EC9FE89199251A1165FC7925F0575353E3AB46
+ 7CE6996742FE2C28BDB39B34A1F39B36A55E7C9CC74737FE77778F96A5637BB1
+ 196C051CB3C90A9096564D10FC534D3E9DA713CFFE46BBF562634E04FEDAB76F
+ EFF4304DF9EB5FFF4AB7DC720B6DDFBE3DA8F7A7B3700F8D8FA70B58083220F0
+ FCEF689B94649A886A92B22D75527166A6FE5565A5E1EB98FDC7B66D4B498D1B
+ 3B7D6D62162CF9E59844FE911073EFBDF73A3D4C43E0EB1715150535EB63561F
+ 9E904043F9E8E3D199DD0A3256C019999954585929946F2905A009667FD5ECC3
+ 79AE397890CA0CF69FC7ECBF73E74E57EDDAD31098FCB9B9B9BE653D5960DA8F
+ 4A4CA4BBD9F2F4AA391F0A324D433409F9169EF0FEC489FADF264F363D47B5FA
+ 7216E4FA77C48C60F0BA9B7DFF6DDBB6D1E5975F2E1DE187E08FE109E76E16FE
+ B3E3E29C1EBE63C8B40EBB64E2441A3879B2A98C0B15C0F4F474BD66C70EC3D7
+ DBB3E0DFAA1A7D3ACA34F607EF33591F5EB972A52BF3FD57AF5E4D393939B467
+ CF1EA9F30B58E8272525D119CAD5F48152E1DD26F91EC9E9E9347EC78ED01480
+ 2630FF07F20F72914AFC719473F7EDA3CD06C1BF1E3D7AD0279F7CE2F4107F02
+ 847FE0C08152997C1D58E05F60F7657094952B878A4C6290269071D317DFC8CF
+ D73F9E3DDBF40F8C4F4D55C13F07A938768C2E32C9817763971F28A4ECEC6CA9
+ DC7DCCFA7FE649A695BAC77E422DBB7ED3D9F533A3677E3E5D357BB6A19C9B2A
+ 80294949FA51130DA3DA7D39CF4D35355462B00B7333F69511FC6BE322170D3E
+ FFC5175F4CDF7CF38DE979C82A9DCDB3FED56AF35853446DC3E259793E505B1B
+ 9C02D004E6BFAAF9779E54F69F8D32FFF2F2F2E8D5575F757A883F02A1472AB2
+ 688DBF1DCFF66FA7A450DF180EF2C922D32B40339173C3175E1E3448DF66B22C
+ 83B5FFBB55DEBFA3A0E63FC32412FCFEFBEFD3A5975EEAF4307D609D1F3EFF72
+ 411BB99F376D4A4BD9AA54813E39900BF0982027A0F3A04174FDB2650105D550
+ 7A35C1ECDF837DB3AB5CBAAE1C2B14B3F6BFC540FBB76BD78E76EFDEEDF4107F
+ 64C68C19347EFC78D37390D0F321CFFCAA89AC35DE603770BD811BE8473390F5
+ A015C0B5ACA5BBAAA8ACA398F9FF575C7105BDF9E69B4E0FD107827E175C7001
+ 1D33A925410A6F45EBD6749A9AF92DF3055FD7398280AA664501BC9E97A76F28
+ 2D35FC30D5F4C31D982DFFB925F517ADBA20FC6635FCF0F92B79E68FE5C49E50
+ 11350BC9C8CBA3AB4B4B7F22EF0115C0B4B434BD6ED72EC30F53A9BFCE83D2DF
+ 36264B4068F6D9BF7F7FA787E933FB61FE1B81C6A4157C2FC5420E7F38111508
+ B5E8D081EEA9AA9253009AC0FC1FCDA69AD2D6CE6256FC03A13AC0AF39DDF20B
+ F5FC08FC998135FE712A912C64B6F0FDF0AA493118D002C87B500AE07E36FF55
+ F4DF59CC6AFFFBF4E9E3EBF5EF24D5D5D5D4BB776FDA6192463E283E9EDE5579
+ 24B620B31AA0C92880D261C3F44D0B171A7EC8993CBB14B005A0709681ACED97
+ 1B24808C1D3B969E7CF24947C777EDB5D752A9491C097EFFBA366D54D0CF464A
+ F6EFA77F9B045ACF1D368CF2162E3C49E67FA200A6B669A3D79BAC2DABC61FEE
+ A08549D0C7E9A69F6BD6ACA15FFCE217A6E7CC4F4951597E36236A1796C80A77
+ 4275B5B902D094FFEF7A4409405F7EF925A5A7A73B36BEA14387D25B6FBD65F8
+ 3AF2FB5F503924B613CC72A02505A0B2FFDCC12BF5F534AAA626E06BE8F9FFF5
+ D75F3B3636ACF9F7ECD9D3F0F54E4D9AD0273C89A80232FB09260E70D23F5E19
+ 3244DFBC78B1E19B95FFEF0E26D4D6D2A3064B3EC3D8CF5BB0608163631B3E7C
+ 382D3489217DC8F7CF25CA820C1BA238C0394386D0758B17FF28F727290051F5
+ 9F6AFBED0ECC0280D83863E2C4898E8CEBD34F3FA58C8C0CC3D755D43FFC88E2
+ 00A756079EA4003481FF7F236BEF8E4A7B3B8E5905E05FFEF2171A3C78B023E3
+ 1245FED5EC1F7EACC601A41580F2FFDD017EE09F99FCC0F0FF1107883498FD7B
+ F5EA6598EF0FC1FF50B98F11E1619E2064E3003F3E11EDFCA39A7FB88345478E
+ D0B0830703BEE66405E0F5D75FEFDBC2CB88F7F9DE19A08AC72282A84948C39D
+ 837E54002FF6EFAFEF58B1C2F04D6AFDDF1D986500C2F4870B1069D0D63B95AD
+ 43A3D93F8B67FF8FD4EC1F31447180F4FEFDE9C6152B4E5600D33A74D0EBAAAA
+ 0CDFA4BAFFB803E4FF2F35D0EED84E6BCA9429111F135A8EDF74D34D86AF2FE1
+ D95F35F48C1CA22E412DD2D2E89E5DBB4E56009A0A007A82D3F7EEA5AAE3C703
+ BE367FFE7CBAE69A6B223E26741D32EAF483FDF8D6B8A827612C20B367807642
+ F6A515C0BDEC5F46DB1E6B5E031B80A49994007FFEF9E7D4B973E7888E09C53E
+ 679D7596E1EB4FB0E53856598E11055B873D2AD86B41B3A20054031077605602
+ 8CEDBF0E1E3C488D22ACA41F7DF451BAEFBEFB02BE067B717B6AAA2AF8710051
+ 8310ADA102106DFFA53200DDC1D4C38791C411F03534FF4013904873FEF9E71B
+ 76FB51893FCE21CA08F46F1BE65300F37373F58D65658627F766136E88EA00E4
+ 38B93CC32F34D80074DCB871347DFAF4888E4794F9F7627232E5272646744C8A
+ 1F587CE810AD35D93CB47B6E2E8D282BFB41013CD3A387BEDBA4671B96FF2E54
+ 5D5B1CA7F3BE7DB4DDA007E04B2FBDE45B8B8F24D8CAFBF6DB6F0FF81ADCC65D
+ 6ACB78C7106D1BD6BE470FBA6DFDFA1F14C0A4C444FDB8495B61D501D879443D
+ 003FFEF8639F391E49468C1841AFBDF65AC0D786252450594A4A44C7A3F80FA2
+ 16618DD9327BB0BEFE0705A00956006E674DAE7AB53BCBDFD89FFB95410A30B6
+ 00430FC0F8082BE9D34F3FDD708BAF67D865BCD562F41FD1EB437CF8B31C603B
+ A0552882895881C21DA852D1E5D8C796E2D36C319AA111C9298007DBB777FAFB
+ C43C33D8A4FB9D8149E7440FC0CD9B3753B76EDD0C5F47F61F76F769CEB7D861
+ 16EA3A3E0EF081C834FE5DC3079C995A7EFC8E8F63F27F9AFCD9284DF9B3FD2A
+ 269E9FE380D2883FF1EFF1ECB6C6720C6292202D5C935100AD78E6BF832D0085
+ B3E4D7D4D0CB066E5A6161213DF7DC73111D4F717131DD7CF3CD4E5F1653A624
+ 25D184188E5D3DC916C001839811D06414C0E94D9BD21895C9E5384800DA6390
+ 01F8F4D34FD36DB7DD16D1F1888A7FDC40AC2B80E7ABABE9EBEFBE337C5D9351
+ 00AA0AD0792AD8FFBFC8A40418E63FDC804872F6D9670B77F9759A585700A2AA
+ 400D0A409404D42D218146A868AEA34C64DFFF618316604EF40044E00F0140B7
+ 13EB0A60FEC183F49941DE08403250A3254545FAEA99330D4F524940CE733E9B
+ 72FF3230E59CF0FFE7CD9B47A3468D72FAB20889750520DA35B86F5111357A23
+ 3F5FFF78F66CE393D43E808E22EA00841D80B113702441F20F9280DC4EAC2B80
+ A5870ED16A936CC09EF9F9D4489406AC1A813ACB53FC03DE6950DB8D02A0AAAA
+ AA88EF01880620C83BA8E7D9A596DD131C757575F42D8F15C7617657F088D771
+ 24262652120B63C303FF87FC85047631F11CDFA5499326BED7F0FF286AC2CEC2
+ DFB1E5E33F8EB0398BA623FE7FE3B3274C98404B972E0D38CE585700A20D4391
+ 0EDCE8E54183F46DCB96199E04E1EFAF148063987500C6CC0F0B2096316B441A
+ EB0AE02316FEF74DD2813B0F1A448D9ECFCAD2775654189E04F3BFAFAAE77684
+ 0327EAFF8D92645E78E105BAF1C61B9D1EA6A398A523C7BA0280F9BFD4A433D0
+ 199999D4E8E98C0C7DCF860D8627A95660CE61B6031070AA03B09B501680311B
+ F8FE596072FFB4CBC8A046D3D3D3F51A932D9CAF4949A173D5268E8E702DFF78
+ F30DA2B8FDFAF5A37FFCE31F4E0FD17194023066D39123F49A410769909C9E4E
+ 8D44BB01ABCD409D017DDD53D9FC3F64D0D5C5C91D80DC845200C6883609C16E
+ C18D26C5C5E9C74D3A87DCCC277568DAD4E9EF127320F037D0A49CD389F25F37
+ A21480313B59AE5F3451008D7962172A00D50DD819B0F4F794C11A6EA74E9DE8
+ 8B2FBE707A88AE4029006344DD817D0A40B900EEC4ACFBCFD8B163E9C9279F74
+ 7A88AE40AD021823E502A820A0FB40DAEFF9264AF9DD77DFA55FFFFAD74E0FD3
+ 15280BC018A920A068197078723265C47053052740E38F1906195CC898DBBB77
+ 6FC4BBFFB815A5008C11ED10E45B062CCECCD4BFAAAC343C4925024516B4C54A
+ 3389FE63E71FEC00A4F801A5008C914A0412A5020FE48B78510C5FC44853CC3F
+ DA2D263F1A36FFC426A08A1F50310063A4528145C5406A57E0C8D2877DFF7506
+ A5BF88FE6FDBB62DE2BBFFB81965011823550CA4CA81DD83A8F3CF238F3C42F7
+ DE7BAFD3C374154A011823550EAC1A82B887913535F4AA41EA6F5C5C9CAFF4B7
+ 8DEACF78124A011823D51044B50473071BD9ECEFC5E6BF514AD6E8D1A3E9E597
+ 5F767A98AE43C5008C916A0986279A6A0AEA3866B33F58B97225656565393D4C
+ D7A12C0063A49A829E78A2DA823B8868F67762E30FAFA0148031B6B405571B83
+ 841FD1EC8F757FACFF2B7E8A5200C6D8B23108505B83850FCCFE192669BF3D7A
+ F4F055FEA9A5BFC0280560CCC37BF6F8CACA8DD0641580DA1C347CE4B09FB6D4
+ C44F5BB060010D1B36CCE961BA16A5000263697350D1F6E0792929748E2A08B2
+ 9D45478ED03093620DE5FB8B510A20309BF9DE2A35B9B74EDA1EFC991E3DF4DD
+ EBD71B9E8C4CC00B63F442860BE4FC9FCBA6FF0E131FCD899EFF5E432980C020
+ 03F03D9334E0F6EC5ADEB67EFD0F0A40940EAC9281EC6702FF388F9AA469AA9E
+ 7F7228051098C5870ED15A932C40A4018F282BFB4101889281CE8C8BA382D6AD
+ 9DFE4E518368D90F38B1E1A717510A203025FBF7D3BF4D3A7D210968E0E4C9FF
+ 092D6B2681C0667CDA3DEDDA39FD9DA20244652F3970805699FC38D8EA1B5B7E
+ 2BC4A84CC0C04CDBB387BE15AC00E0514A01807B590124AAA5A890316BF601D0
+ E77FD3A64D949C9CECF4503D81B2007E0AE24B8FB2023043B3AA005477E0D079
+ FBC811BAC224320BE6CE9D4B23478E74749C2B56ACF0EDBBF7FDF7DFFBF6EB6B
+ F8084EFDBF501EC1A99FDFF06F3424D0FB27B3EB8AF10622561580A81B30D04E
+ 5500D3D2D2F4BA5DBB0CDFA076080A8DAF8E1FA79EFBF651B589593660C000FA
+ E0830F1C1D2736FE4C4D4DF56DC2E975625501885A81B5484BA37B76ED3A5901
+ BCD8BFBFBEC3409302B54B70F0608FBF4BD9EF5F6792978D5E7FEBD6ADA3CE9D
+ 3B3B3A56F8D3F0ABA381585500E57575B4820F23D2FBF7A71B57AC385901BC55
+ 58A8AF292E367C93AA0A0C8E5A16FEFE02E1076EC9F7C766A32525254E0FC316
+ 62550188AA00FB1416D215C5C5272B00A099C401E21A35A2FBD54A802520FCFF
+ C53EFF2A81395DC83FC873CF3DE7F4707DB46FDF9EF60802485E211615005699
+ 1EC38ED2122B00405A0100B54B903C88C4FE8635F1DF04C28F629FCACA4A6AEE
+ 821B75F5EAD5BE04A468211615809500203849018876095271003920FC393CF3
+ 2F3731C300FC7E08FF79E79DE7F4907D4C9A3489FEF0873F383D0CDB88450520
+ F2FFB11BD084EAEAC00AE0952143F4CD8B171BBE5965048A81E975250BFF5281
+ F0376BD68CDE79E71DEADFBFBFD343FE915FFEF297B46AD5AA80AFB5611730B5
+ 7163A7876889DFB1F017C6D8CA952803F09C2143E8BAC58B032B00A009E20077
+ A7A6FA1E153F05C29F5B53438B4DFAB00108FFDB6FBF4D975E7AA9D343FE91DD
+ BB7753C78E1D0D97FFE6A7A4D0D5AA22D4D558F5FF81250500D466A181C152DF
+ 0D870E4909FFA2458B5CB7B71F1A8EDE70C30D015FC3AFBD8B157F2B8F5900B1
+ 86683350A08914808A035807FDFCAFE599DFACB417A0B5775959992B4B7CCD52
+ 6A07C4C7D3FB6A09D8F588360239D5FF073F5100A5C386E99B162E34FC101507
+ 3899297575F4473E447973107E08981BBBFB1CE69B06E6FF7E83D9E391A424BA
+ 27C682695E44E4FF9FCBF75EDEC285E60A0068023700F900B11E07406AEFF53C
+ EB8B22FD00C28F1C7F3724FA04E2C9279FA43BEFBCD3F0F50D3C7374577520AE
+ 067EFFC39205400D094A015CCBE660D718DE9E1A453D37B1BFBF87958008083F
+ 32EB9C2EF031E2282BB06EDDBAD1F6EDDB03BEDEA94913DAA6BA42BB9E60FC7F
+ 1050014CEBD041AFABAA32FCA058DD3014EBFBF7B19FF59449A7958640F867CD
+ 9AE54BAF752B66C13FF03F2D5AD01F55CCC7F588F6016C5800D490800AE0F5BC
+ 3C7D83414008C46283106CDBFD07F6F5AB24667D809D7C5F79E51557EFE6A3B3
+ 42CBC8C8A08D1B37067C1DBFF30E36FF554768F723DA0320232F8FAE2E2D9553
+ 004053CB813ED0B917FDFB360B22FC0D81AF5F5C5CECFAA61E6FBDF5160D1D3A
+ D4F0F5716CE9FD39062D3DAF11ACF90F0C15C0A4B838FDB84944B14762225DE5
+ F21B3C1490C30FC1AFB050178F35FE993367BADAE46F8859E61F54FBB6D4543A
+ 43ADFDBB1ED12EC040B3AA005E1E3448DFB66C99E107466B56E0BFBEFBCEE7E7
+ 8B52794F05453D58E6734B5EBF08341E193870A0E1EB05ACE05F8862051F2DC8
+ 64FF751E3488AE5FB6CC9A02009AC00D88A62E4130A3FEC87E3EF6E8B3DA0B67
+ ECD8B1F4D8638F51BC47564610F9EFD5AB97A1EF0FD4D29F371075FF019A899C
+ 9B2A80294949FA5193CD05A2A14908D6F11FE78B284AE10D44EBD6AD69F6ECD9
+ AECCEC33E381071EA0871F7ED8F0F5DC84047A2D25C5E9612A241035FF884F4A
+ A2076A6B8353006FE4E7EB1FF30D6EC6787603923CE62762396F0ECFF458CEFB
+ 97A0534F20B0BC57545444BFFFFDEFA98DC7B64E5FB3660D6566669AF6FCFB3F
+ FE4E7DD4ECEF7AD070663A9BFF66F42A28A02B4B4A8253004013B8015EDA360C
+ D97B4F1D3E4C252CFC32493CA702C1CFCBCB234DD31CEFDD170C30FD2FB8E002
+ 5A6FB20DDC109EFDDF54B3BF27106DFF0534818C0B15C0F4F474BD66C70EC3D7
+ DBF34C71ABCB674144F2D18BFF4D36F383ED753B78F0609A3A752A9D7FFEF94E
+ 7F9DA079F0C107E94F7FFA93E1EB2D1B35A24D6DDBD2691EB3E8629559D5D5B4
+ DBC4824D4E4FA7F13B7684A60044DB8601B7EE198035FC497575C2869C66A045
+ 16FC6537D5EE07838CE9FF627232E527263A3D548504557C4F3F6752B50BFCDB
+ 7F999D23B586A709DC80BECD9AD160176E1E3AF4E0C1A0827BA06BD7AEBE19DF
+ 8DD57B5641B51F84DFCCF41F141F4FEF7A3CA01B4B88527F812621DF520AA038
+ 3353FFAAB2D2F075E4028C4B4D75DDD661B9AC00165A540068D185CAB8ABAEBA
+ 8A1AB9ECFB0403D27D73727268E9D2A586E7C0F4FF944D7F95F4E30D10C49E21
+ 58FB3F83157E6165A53D0A0068022BC08D0542B2160032F810DCBBEBAEBB3CED
+ E307E28E3BEEA0A79E7ACAF49C67D87ABB354AF239620151E30FA049CAB6B402
+ 989498A81F37493774A315205200D888F3F6DB6FF7F5E5473FFC6863C68C1934
+ 7EFC78D37354B71F6F2133FB378E8BA3078F1DB3570188760E026815D6DF45A5
+ A3660A005B704340BC92BD671551A10F80E9BF8E853F168ABAA205B4FC2E3769
+ FB0D1AEEFC23C2D2742D2A1042F9E85D2EAA0F3053004F3CF184CF3C8E4610F1
+ CFCECEA6432629A210F97758F80744A9028C4630EB3FCEB3FFB736CDFEC092A4
+ 2E18354A5F3F77AEE9396E4A0C325300D3A74FA771E3C6393D44DBD9BC79B34F
+ F8BFF9E61BD3F3D4929FF79049FCE9316A140D9F3B373C0A00C858016E691662
+ B60A108D0A0033FF65975D26DCDB4F75F9F126D3F877359BFD816651A62D2B80
+ F9B9B9FAC6B232D373DC5225184B2EC08A152BE8F2CB2F3735FBC1F53CEBCF56
+ 65BE9E036BFE4B05BF6DF7DC5C1A5156165E050034C19260AB264DE80E173492
+ 8C150580801F9631BF1524865CC2FEE17BECF7BB2546A39047D4F20B6841C873
+ 5077C2BC9C1C7DCB9225A6E7B8C10A888518C0BC79F3A8A0A0C034C5179CC34A
+ B9B2756BB5BB8F0791A9F93F75CF3F59829E0A34092BE0B76DDA383ADB44BB02
+ 78F4D147E9BEFBEE139E87D6DEEFB3D9AF96FBBC0722FFCF56578765F607414B
+ E7EC0103F4EDCB979B9EE3F43662D1EA02D4D4D4F866FD85263B38F939AF6953
+ 5F8EBF4AF3F526A2EDBE41A70103287FF9F2C82A00A009AC00CCFEBF6DDBD631
+ B3D36C15C0AB0AE0934F3EA1DCDC5CDAB2658BF0DC7E3CE3BF9392A2CC7E8FB2
+ 8F677D54FC1DB339F2DF909014C0F35959FACE8A0AD3739C6C1B166D2EC08B2F
+ BEE8EB44240AF60124F8BCC966BFD7BA3529FE83A8DD17E8989545632A2A9C51
+ 00401358016038DF88190E249D448B0B80725E083EB61893015D7DCAF89AAB68
+ BF77D9505F4F0BD8D513A18528C321DF218B0A0AF475821B130141340D8974A1
+ 503458009F7EFAA96F89CFAC96BF21AA9DB7F79149F905A27E7F32D8229153DB
+ B4D1EB05DD499C2817F6B20580FE7D0F3DF490AF298968890F20BEFF47BEBE13
+ 5C9286AD081E9972DF449E50275457872CBFB64DC99A842B10E9D6615EB5002A
+ 2A2AE8A69B6E32EDDBDF900EECE7CF4F49F125FA28BC8D4CAB2FA0D924BBB629
+ 0051D7207026DFA005AD5BDBF5278578AD1600CB7B68352E6AE0D11004FB4AD9
+ E46FA7827D5141C9FEFDF46F81C527DBED47065B9D7251A110886486A0975C00
+ A4F36287A11D261D984F4515F5441732197F40B3516E6D55004B8A8AF4D53367
+ 9A9E83C8F4EDEC0A244760CB692FB800AB57AFF665F32D1724553504B33D0A7A
+ 06AB5AFEA8A1E6FBEFE9698935FFBE4545943373A63B1500989696A6D7EDDA65
+ 7A4EA45C01375B00DBB66DA3FBEFBF9F5E7BED354BEF43F75ED4F2ABCCBEE8E2
+ 7916FEAF05EDEB5BA4A5D13DBB76D92AB3615997D3240282915815709B024087
+ DEFDECE36167A159B3664945F7FD60D67F8CAFD768D5C423EA9089FA032D0CF2
+ 1A160550929DAD7F595E2E3CEFDA56ADA86B18CD5837B900E8D083E0DE4C7691
+ 4435FB3FB94E2CF48FB3F0AB405FF4B199EFCF52BE4F458492EF6F46D8327344
+ 5D8441B313B502E14A5775C32A0072F7B175786969A9A5191FA4376942CFB66C
+ A97CFD28057EFFFFB2E92F4AF869CC13C083F5F56191D5B0A6E66912AEC0E94D
+ 9BD29830ED2DE8940B0053FF9D77DEA169D3A6590AEEF9C16AFE9866CDE8CF3C
+ EBBBA9CDBAC25E64FC7EA085514EC37A77C9B40F03E18A07445A0120671F0D3A
+ D06E5C3689E75490C73FB5450BEAEEC2BD1615F621EBF767E4E5D1D5A5A5DE54
+ 00E0892E5DF4FD5BB70ACF0B473C20523180DDBB77FB7C7B04F6440D398DE8C5
+ 02FF049BFB2A9B2FFAD972F428BD7AE080F0BCD65DBAD09D5BB786554623625F
+ CAC6036EB1393F20DC0A00FEFDE38F3FEEF3EF654A7403816E3D0FF18C7F9D8A
+ EEC704D27EBFC5FEFEC112310753938807B4E759F0A6D6AD6D2B630D870B80F5
+ FB575F7D95E6CF9F2F5DA11708E4EF8F63D7E72EF6F555D96E6C80249F17F6EF
+ A7DD0EFBFD0D89D89D573A6C98BE49A285959D0D44ECEA088425BC3973E6D082
+ 050B68D5AA55218DE9E7ACE4C6B3E08F645F5F097EEC00E1C7729FA8C1073877
+ D830CA5BB830BA140078BC7367FD00CFA022BAB3705C9D9212F2DF0BC50580D0
+ BFF1C61BBEA0DECA952B431E0B32F8EE66C11FA496F46292D7F95EDC28B15375
+ ABCE9DE9AE6DDB222697119F8264E201A02F9BC6835BB60CE96F59550028C479
+ F7DD777D267E30CB77A782705E017F8F3BF95051FDD8051B7AAC9688118573BD
+ DF08476C504D221E0042DD6D58140340A79DF2F2727AEFBDF768D9B265B47DFB
+ 765BBE1F32F66E65A12FE24365EFC53632BBF9FAD11C90474714C0EB7979FA86
+ D252A97343291F365300AD5BB7F6E5E5DB095A7063B647BEBE4AE051C896F782
+ 70AFF71BE1D85D2AB3AF809FBC94143A2721C1F2DF3053007681E5CB1CF6EB61
+ EAAB945D851FD91C7F10AE3C7F191C9DA666F5EEAD57AD5D2B3C0FD172AC0C74
+ B49824132E0580515CC60A69041F57B0D0ABD6DB8A86EC3C76CCD7D25B54DB0F
+ 3AF4EE4DB7AE5DEB981C3A6EA7CA660A62A61DCD66BB959E82762A0008FDC52C
+ EC7958A1E0436DB6A108047AFACD61D75294E8032291E927C2710500A675E8A0
+ D7555509CF8312B8D68225609607200B76D719C93E3D045F05F4146660E6478A
+ AF8CF0B7E8D081EEA9AA725CFE1C1F809F294949FAD1DA5AE1797007B0D1884C
+ 4C20180BA0257F7E36CFF4D92CF8D7B0E0ABCE3B0A1990DF5FC6F79B8CD96F57
+ 4B6F3B70C520FCC8E6080099D5011905005B229385FD372CF4E8B09BA58A7114
+ 16B112ED7762ADDF0CD70CC48F4C67613FA23C01230580CABB5FB3B00FE403D5
+ 776AC94E112C56D6F92355E06305570DC68F26992804CC3206FD3100E4DF0FE0
+ 8B3FE08469AF02780A3B90CDF0F3A3B950DE5C37203F9A052560543BB0E6BBEF
+ E84C167615BC53D88D6C6EBF1FCDA5B2E6CA41F9B1E20EA08A100943AAC24E11
+ 4EEA75DD27FC32557DC08D667F435C3B303F560283E827701D2B81486C3AA288
+ 3D6A8F1FA7B9070E48D5F303B705FC02E1EAC1F991D97DD80F7205AE642510CE
+ 76E38AD803A9BD6FD6D448ADF103372DF599E1FA01FA914D16F2E3C476E48AE8
+ 44B681A71FB724F9C8E08941FA914D1BF6832DC89034A45C024530A07FDF029E
+ F545BBF536C40DE9BD56F0CC40FDC81610F9814B3054327350A1F083CCBE4507
+ 0F4A9BFCC0E9C29E60F0D460FD582925F663478721456C60D5E4074E96F48682
+ E706ECC74A53113F7009AE4A495189408A80C0E47F8D677D99DD7A1AE254330F
+ 3BF0E4A01B62255700204F60705252D05D8614D109F2F997F2CC2F53CCE3C7ED
+ 6BFC32787AF07E64BB0D3704D6005C022BFD0514D107EAF791D26B25D00722DD
+ BD375C78FE0BF891DD77E054101BC072A1CA208C2D30D3C3D7B792CBEF27927D
+ FBC34D547C898658750900560AFE9BAD810CB53D574CB0A1BE9EFEC2B3BE9508
+ 3FF042669F55A2EACBF8B19A2FE007F5044392935590304AD9F7FDF7BE59FFB3
+ 20BA44796D7D5F96A8FB427E64B7263F15B80259CD9BD3457C28B7203A80B9FF
+ D1E1C354C18795209F9FEEB9B934A2AC2C2A6F86A8FC520DB1524CD490564D9A
+ D0C0162D945BE07110DD5FC1827F80677FAB44A3C97F2A51FDE5FC946467EB5F
+ 969707F55E280258047DD5B2A1A74070AF2248C1075E4DECB14AD47FC1864C4B
+ 4BD3EB76ED0AEABD500417B012E8ABB6F3762D30EF21F8FFC747B082EFA5421E
+ 3B88992FEA67495191BE7AE6CCA0DF8F1583BE6C1164F2A17A09BA0334E958C5
+ B3FD3FF8B01AD96F48DFA222CA993933A67ED498FAB20D29CECCD4BFAAAC0CFA
+ FDB002600D5CDCA28552040E01C1FF7B5D9D6FD60F26B8E7E7F47EFDE8E655AB
+ 62F2478CC92FDD102BCD46020145D02B31917AB3325059859101D97B6B59E8D7
+ D5D78724F85E69DA114E62FACBFB595450A0AF2B2909F973D092EC7C560638D4
+ 7E81F682765C9FB0C0E3906DC96546AF8202BAB2A424E6EFFF98BF000D793E2B
+ 4BDF595161CB6721A9A84742826F1951050D8303B33B5A71AD61A1976DC229A2
+ 6356168DA9A8503FC809D485084030FD068C80F09FCB8A00D58767AB5D87A440
+ 338E7FB1D06F62E10FC5C46F48AC2CEB59455D10135E193244DFBC78B16D9F87
+ 1504C40ACE62EBA0132B036519FC00847CFBB163B495051EC21FEC125E20BAE6
+ E4D0C8254BD48536405D18099056FCD99B6F92D52223112849C6F133B6103A36
+ 6D1A330A0102BF93FDF8CF59E0B7B3C0EF6181B76BA607A8D3EF367468D4A6EF
+ DA89BA401658306A94BE61FE7CDB150180F0631501B1832E7CA4459942F882AF
+ D9972CECF0E511C5B753E0FD40F033468CA0E173E746CF850B33EA4205C15B85
+ 85FABA397328981A035920FC1DF9863E8D15018E56AC14DAF2FFB93DE7006BF3
+ 30E1AB58E0F7F2E3372CEC3BF9793804DE0F04BF577E3E5D515CECEE8BE342D4
+ 050B9150138AAC8238422A2B041C6D9B34A176FC8823D225CC28ADDDC7C20D21
+ C7F3BD78CE4728997856392333930A2B2BD53D1C02EAE2D9C4FB1327EA1FB355
+ 50B36387237F1F16430B5602CDF931811FE3F9B1393F363DF15AB313FF877588
+ 447E8E73A04CBE6381854373E4F871AAE703CF8FF2FF7D8BE7FC8815F7C3FC1C
+ FF87730E9F98E19D22393D9D7A8E1E4D03274F56F7AE0DA88B1806DEC8CFF7F5
+ 22385A5BEBF450A282F8A4243AEFEAAB55E24E18501734CCBC3C6890BEBDBC3C
+ 2C81C368067E7DA7EC6CBA7ED932758F861175712308F6328032B0B2C7612C81
+ 525C08BD577BEC7B1175A11D04F9055F7CF00185528CE465508C03818F960EBB
+ 5E445D781781CCC31D1F7D14B50A01029F7ED14574DDE2C5EABE7309EA877031
+ C837D8B7650BEDDDB4C9736E438BB4344AEDDE9DDA76EDAAD6E75D8CFA613C08
+ 961CF77EF619EDE3632F2B887026249981A699A92CE06DBB75A3543ED4D29CF7
+ 503F58940225517FF0201DABABA323870ED1117E8E65C9233535BE7FE3F9517E
+ 04F12D5BFA96DA12F8312139F987E72929BE7FC7A1E3113F57C21D9DFC3FB05B
+ 459D4B95757A0000000049454E44AE4260822800000030000000600000000100
+ 0800000000000000000000000000000000000000000000000000000000000202
+ 04000505070004040B0003030E0004040D0008080B000A0A0E000C0C0E000404
+ 1200050514000C0C100006061A0006061D001111160015151A00060621000707
+ 280007072C001B1B20001D1D22000808350008083B0022222800242429002828
+ 2E002E2E2F0036363A0039393D003C3C3C000808470008084B0008084D000707
+ 50000808530008085A0008085F003E3E42000909660009096A000A0A71000A0A
+ 76000B0B79000B0B7D004343470044444700464649004A4A4C00535354005757
+ 57005B5B5D00666667007171710077777700787878007D7D7D00000080000606
+ 83000B0B8100090984000C0C85000404890005058F000C0C890016168B001717
+ 8C00070790000D0D91000D0D96000606990006069D000D0D9900222291003434
+ 9A003E3E9E000707A3000E0EA0000E0EA6000707A9000909B1000F0FB2000909
+ B5001010B4001010BA005050A7005757AB007272B8000E0ECE001111C2001111
+ C9001212D1001212D6001010DA001010DE001313E1001414E3001212E6001414
+ E7001414E9001515EE001414F3001515F5001616FA001515FE00808080008A8A
+ 8A008D8D8D00929292009A9A9A009E9E9E00A1A1A100A7A7A700AAAAAA00B0B0
+ B000BDBDBD00C9C9C900D0D0D000D7D7D700D9D9D900DDDDDD00E2E2E200E5E5
+ E500EBEBEB00EDEDED00F1F1F100F5F5F500F9F9F900FEFEFE00000000002F26
+ 000050410000705B000090740000B08E0000CFA90000F0C30000FFD21100FFD8
+ 3100FFDD5100FFE47100FFEA9100FFF0B100FFF6D100FFFFFF00000000002F14
+ 00005022000070300000903E0000B04D0000CF5B0000F0690000FF791100FF8A
+ 3100FF9D5100FFAF7100FFC19100FFD2B100FFE5D100FFFFFF00000000002F03
+ 0000500400007006000090090000B00A0000CF0C0000F00E0000FF201200FF3E
+ 3100FF5C5100FF7A7100FF979100FFB6B100FFD4D100FFFFFF00000000002F00
+ 0E00500017007000210090002B00B0003600CF004000F0004900FF115A00FF31
+ 7000FF518600FF719C00FF91B200FFB1C800FFD1DF00FFFFFF00000000002F00
+ 20005000360070004C0090006200B0007800CF008E00F000A400FF11B300FF31
+ BE00FF51C700FF71D100FF91DC00FFB1E500FFD1F000FFFFFF00000000002C00
+ 2F004B0050006900700087009000A500B000C400CF00E100F000F011FF00F231
+ FF00F451FF00F671FF00F791FF00F9B1FF00FBD1FF00FFFFFF00000000001B00
+ 2F002D0050003F007000520090006300B0007600CF008800F0009911FF00A631
+ FF00B451FF00C271FF00CF91FF00DCB1FF00EBD1FF00FFFFFF00000000000800
+ 2F000E005000150070001B0090002100B0002600CF002C00F0003E11FF005831
+ FF007151FF008C71FF00A691FF00BFB1FF00DAD1FF00FFFFFF00000000000000
+ 0000000000000000000000000056554A483B3B484A5556000000000000000000
+ 0000000000000000000000000000000000000000000000000000543B383D4246
+ 4F52534E4B4339383B5400000000000000000000000000000000000000000000
+ 00000000000000003B393D505E676666666666666667665E513D383C00000000
+ 0000000000000000000000000000000000000000000040384B5E676766666666
+ 666666666666666666665F4D3841000000000000000000000000000000000000
+ 000000004938475F66666666666666666666666666666666666667675E453849
+ 0000000000000000000000000000000000000041395767676767666666666666
+ 66666666666666666666666666665A3941000000000000000000000000000000
+ 0000394261676767676767676666666666666666666666666666666666676761
+ 423B0000000000000000000000000000003846652923475F6767676767676766
+ 6666666666666666666666666666666666463800000000000000000000000000
+ 394C6667240807011F5266676767676666666666666666666666666666666667
+ 6766463900000000000000000000004142656767242E7E6F25000C2B63676767
+ 6766666666666666666666666666666666666642410000000000000000004939
+ 62666767242E8F8F8F77360E0A47666766666666666666666666666666666666
+ 6667676139490000000000000000385767676666262E8F8F8F8F8F7C34011662
+ 67676766666666666666666666666666666666665A3800000000000000414766
+ 66666767242E8F8F8F8F8F8F8F7414105B676666666666666666666666666666
+ 66666667674541000000000000385D6767666666262E8F8F8F8F8F8F8F8F7A1C
+ 055B676767666666666666666666666666666666665F3800000000003B4D6666
+ 66666667241A7B8F8F8F8F8F8F8F8F7E1B126567676767666666666666666666
+ 6666666767674B3C00000000385E6767666666664D0C08347A7F8F8F8F8F8F8F
+ 790B26676767676767676766666666666666666666665F380000005442666666
+ 666666666666430C026D8F8F8F8F8F8F8F70005E676767676767676766666666
+ 666666666767673D5400003B4F67676666666666666666663C02688F8F8F8F8F
+ 8F7F0F2A67676767676767676767676666666666666666503B0000385E666666
+ 6666666666666666674C01327F8F8F8F8F8F360C44444444444444475B666666
+ 666666666667675C38005638676767666666666666666666666658026D8F8F8F
+ 8F8F75080B0707080B0808004467676666666666666666673956554366666666
+ 6666666666666666666767270F7D8F8F8F8F8F8F8F8F8F8F8F8F8F0B47666666
+ 666666666666676742554A466767666666666666666666666666666306688F8F
+ 8F8F8F8F8F8F8F8F8F8F8F0B446767666666666666666667464A484E67666666
+ 6666666666666666666667673C06798F8F8F8F8F8F8F8F8F8F8F8F0B47666666
+ 66666666666767674E483B5167676766666666666666666666666666660B698F
+ 8F8F8F8F8F8F8F8F8F8F8F08446767666666666666666666533B3B5366666666
+ 66666666666666666666666767222F8F8F8F8F8F8F8F8F8F8F8F8F0847666666
+ 6666666666666767513B484E6767676666666666666666666666666666440B8F
+ 8F8F8F8F712D2C2D2D2E2E024467666666666666666666674E484A4667676666
+ 666666666666666666666667675A00748F8F8F8F730022262627272759666666
+ 6666666666676767464A5542676767666666666666666666666666666667076B
+ 8F8F8F8F7F0E2A67676766666666666666666666666666674355563966676666
+ 666666666666666666666667676720308F8F8F8F8F370A656766666666666666
+ 6666666666676767385600385C6767676766666666666666666666666666400E
+ 8F8F8F8F8F79023F6767676766666666666666666666675B3800003B4F676767
+ 66666666666666666666666666675A00738F8F8F8F8F69015267676666666666
+ 666666666767674F3B0000543D67676767666666666666666666666666666610
+ 687F8F8F8F8F8F330359676767676666666666666667663D54000000385E6767
+ 66666666666666666666666666676727198F8F8F8F8F8F7F2E01285F67666666
+ 6666666767675D38000000003C4B67676767666666666666666666666666665A
+ 026E8F8F8F8F8F8F7F6C0E000C3C66666666666667674B3C0000000000385E67
+ 67666666666666666666666666666767280B798F8F8F8F8F8F8F7E721D1F6666
+ 66676767675D3800000000000040456767676767666666666666666666666666
+ 66111D7C8F8F8F8F8F8F8F8F331E67666667676767454100000000000000385A
+ 67676766666666666666666666666666675B0D18778F8F8F8F8F8F8F331E6767
+ 6767676757380000000000000000493861676767676766666666666666666666
+ 666663150E6A7E8F8F8F8F8F331E676767676761384900000000000000000041
+ 3E656767676666666666666666666666666667662A021469768F8F8F331E6767
+ 6767643E41000000000000000000000039466767676767676666666666666666
+ 666666666661260C02183672311E676767674639000000000000000000000000
+ 00384665676767676766666666666666666666666666666658281100001E6767
+ 644638000000000000000000000000000000393E606767676767676767666666
+ 6666666666666666666667635958676142390000000000000000000000000000
+ 0000004138576767676767676767676767676767676767676767676767675738
+ 41000000000000000000000000000000000000004938455D6767676767676767
+ 6767676767676767676767675D45384900000000000000000000000000000000
+ 00000000000040384B5D676767676767676767676767676767675D4B38400000
+ 0000000000000000000000000000000000000000000000003B383D4F5C676767
+ 676767676767675C4F3D383B0000000000000000000000000000000000000000
+ 00000000000000000000543B38383E464E51514E464238383B54000000000000
+ 000000000000000000000000000000000000000000000000000000000056554A
+ 483B3B484A555600000000000000000000000000000000000000FFFFE007FFFF
+ 0000FFFF0000FFFF0000FFFC00003FFF0000FFF000000FFF0000FFC0000003FF
+ 0000FF80000001FF0000FF00000000FF0000FE000000007F0000FC000000003F
+ 0000F8000000001F0000F0000000000F0000F0000000000F0000E00000000007
+ 0000E000000000070000C000000000030000C000000000030000800000000001
+ 0000800000000001000080000000000100000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000800000000001000080000000000100008000000000010000C00000000003
+ 0000C000000000030000E000000000070000E000000000070000F0000000000F
+ 0000F0000000000F0000F8000000001F0000FC000000003F0000FE000000007F
+ 0000FF00000000FF0000FF80000001FF0000FFC0000003FF0000FFF000000FFF
+ 0000FFFC00003FFF0000FFFF0000FFFF0000FFFFE007FFFF0000280000002000
+ 0000400000000100080000000000000000000000000000000000000000000000
+ 000000000000030305000B0B14000C0C16000E0E1D0012121F000F0F22001313
+ 220017172300101024001919270012122D0014142F00191928001D1D29001E1E
+ 2F001313340014143A0012123C0015153F00222231002A2A3A002C2C39003131
+ 3D001212450010104B001616480012124E0013135200323243003A3A46001717
+ 660012126A001414690012126E000F0F7D001111700013137E00454554004B4B
+ 570050505E005E5E6A0063636F00676772006D6D77007373780078787F000606
+ 8400090987000A0A88000E0E8E0012128E0015158E000D0D95000E0E9D001010
+ 92001919910010109A0010109C002E2E9B0031319F000E0EA8001010A3001010
+ A6000F0FB7001010BA001010BF006262B4007A7ABE000D0DC2001212CE000F0F
+ D0001212D1001010DA001212E7001414E7001414E9001313EE001414EC001414
+ F1001414F5001616FB001616FE00808085008C8C8F00969699009E9E9F00A0A0
+ A100AEAEAE00B7B7B700BEBEBE00D6D6D600DADADA00E2E2E200E4E4E400E9E9
+ E900EEEEEE00F0F0F000F6F6F600F8F8F800FEFEFE004CB0000059CF000067F0
+ 000078FF11008AFF31009CFF5100AEFF7100C0FF9100D2FFB100E4FFD100FFFF
+ FF0000000000262F0000405000005A700000749000008EB00000A9CF0000C2F0
+ 0000D1FF1100D8FF3100DEFF5100E3FF7100E9FF9100EFFFB100F6FFD100FFFF
+ FF00000000002F26000050410000705B000090740000B08E0000CFA90000F0C3
+ 0000FFD21100FFD83100FFDD5100FFE47100FFEA9100FFF0B100FFF6D100FFFF
+ FF00000000002F1400005022000070300000903E0000B04D0000CF5B0000F069
+ 0000FF791100FF8A3100FF9D5100FFAF7100FFC19100FFD2B100FFE5D100FFFF
+ FF00000000002F030000500400007006000090090000B00A0000CF0C0000F00E
+ 0000FF201200FF3E3100FF5C5100FF7A7100FF979100FFB6B100FFD4D100FFFF
+ FF00000000002F000E00500017007000210090002B00B0003600CF004000F000
+ 4900FF115A00FF317000FF518600FF719C00FF91B200FFB1C800FFD1DF00FFFF
+ FF00000000002F0020005000360070004C0090006200B0007800CF008E00F000
+ A400FF11B300FF31BE00FF51C700FF71D100FF91DC00FFB1E500FFD1F000FFFF
+ FF00000000002C002F004B0050006900700087009000A500B000C400CF00E100
+ F000F011FF00F231FF00F451FF00F671FF00F791FF00F9B1FF00FBD1FF00FFFF
+ FF00000000001B002F002D0050003F007000520090006300B0007600CF008800
+ F0009911FF00A631FF00B451FF00C271FF00CF91FF00DCB1FF00EBD1FF00FFFF
+ FF000000000008002F000E005000150070001B0090002100B0002600CF002C00
+ F0003E11FF005831FF007151FF008C71FF00A691FF00BFB1FF00DAD1FF00FFFF
+ FF00000000000000000000000000433C382F2F383C4300000000000000000000
+ 000000000000000000000043313945494A50504A494539314300000000000000
+ 0000000000000000004431404F525252525252525252524F4031440000000000
+ 00000000000000003B3F4F52525252525252525252525252524D3F3B00000000
+ 0000000000000034414952525252525252525252525252525252524234000000
+ 00000000000034474B0110324B52525252525252525252525252525247340000
+ 00000000003B42524B0F5C2E0A1A485252525252525252525252525252423B00
+ 00000000443F52524B0F6F6F6F5A0A3352525252525252525252525252523F44
+ 00000000314D52524B0F6F6F6F6F6127184B5252525252525252525252524D31
+ 00000043405252524B08626F6F6F6F6F55125252525252525252525252525240
+ 430000314F52525250220553636F6F6F6F2B255252525252525252525252524F
+ 300000395252525252524E2017606F6F6F610451525252525252525252525252
+ 390043455252525252525252370E616F6F6F281B1F1F1F1F2452525252525252
+ 45433C49525252525252525252232C6F6F6F5E59595959590352525252525252
+ 493C384A52525252525252525250065D6F6F6F6F6F6F6F6F0352525252525252
+ 4A382F505252525252525252525236296F6F6F6F6F6F6F6F0352525252525252
+ 502F2F50525252525252525252524E0D6F6F6F615B5C5B5B0352525252525252
+ 502F384A52525252525252525252520B5F6F6F5B011313131952525252525252
+ 4A383C49525252525252525252525221586F6F6F144952525252525252525252
+ 493C434552525252525252525252523D2A6F6F6F542452525252525252525252
+ 4543003952525252525252525252524E0D6F6F6F63163E525252525252525252
+ 390000304F5252525252525252525252115C6F6F6F5F0E21465252525252524F
+ 300000434052525252525252525252523E266F6F6F6F6257151C525252525240
+ 43000000314D52525252525252525252521B53646F6F6F6F610C525252524D31
+ 00000000443F52525252525252525252524E1C1E5F6F6F6F610C525252523F44
+ 00000000003B425252525252525252525252523A0756616F610C525252423B00
+ 00000000000034475252525252525252525252524922091D2D0C525247340000
+ 0000000000000034425252525252525252525252525252483532524234000000
+ 00000000000000003B3F4D52525252525252525252525252524D3F3B00000000
+ 0000000000000000004431404F525252525252525252524F4031440000000000
+ 000000000000000000000043303945494A50504A494539304300000000000000
+ 0000000000000000000000000000433C382F2F383C4300000000000000000000
+ 0000FFF00FFFFF8001FFFE00007FFC00003FF800001FF000000FE0000007C000
+ 0003C00000038000000180000001800000010000000000000000000000000000
+ 000000000000000000000000000000000000800000018000000180000001C000
+ 0003C0000003E0000007F000000FF800001FFC00003FFE00007FFF8001FFFFF0
+ 0FFF280000001000000020000000010008000000000000000000000000000000
+ 00000000000000000000000000003F3F69002A2A720044447700272784002323
+ 8F002C2C8F003535870033338C0035358E002A2A91002D2D910023239A001F1F
+ A1001F1FB1001C1CBF002323A0002525A4003333BE0040408700515181005555
+ 86005F5F80006363870062628E0066668E00696989004747B4004A4ABC001515
+ C3001515D4001919D6002828C5001717E5001515F3001515FA001616FE006969
+ C1007E7EC8009797AA00AFAFBB00BABAC700C2C2C800CDCDD400D1D1D300D5D5
+ D800DDDDE000E4E4E500F1F1F100F9F9F900FFFFFF0000704C000090630000B0
+ 790000CF8F0000F0A60011FFB40031FFBE0051FFC80071FFD30091FFDC00B1FF
+ E500D1FFF000FFFFFF0000000000002F0E00005018000070220000902C0000B0
+ 360000CF400000F04A0011FF5B0031FF710051FF870071FF9D0091FFB200B1FF
+ C900D1FFDF00FFFFFF0000000000022F00000450000006700000089000000AB0
+ 00000BCF00000EF0000020FF12003DFF31005BFF510079FF710098FF9100B5FF
+ B100D4FFD100FFFFFF0000000000142F000022500000307000003D9000004CB0
+ 000059CF000067F0000078FF11008AFF31009CFF5100AEFF7100C0FF9100D2FF
+ B100E4FFD100FFFFFF0000000000262F0000405000005A700000749000008EB0
+ 0000A9CF0000C2F00000D1FF1100D8FF3100DEFF5100E3FF7100E9FF9100EFFF
+ B100F6FFD100FFFFFF00000000002F26000050410000705B000090740000B08E
+ 0000CFA90000F0C30000FFD21100FFD83100FFDD5100FFE47100FFEA9100FFF0
+ B100FFF6D100FFFFFF00000000002F1400005022000070300000903E0000B04D
+ 0000CF5B0000F0690000FF791100FF8A3100FF9D5100FFAF7100FFC19100FFD2
+ B100FFE5D100FFFFFF00000000002F030000500400007006000090090000B00A
+ 0000CF0C0000F00E0000FF201200FF3E3100FF5C5100FF7A7100FF979100FFB6
+ B100FFD4D100FFFFFF00000000002F000E00500017007000210090002B00B000
+ 3600CF004000F0004900FF115A00FF317000FF518600FF719C00FF91B200FFB1
+ C800FFD1DF00FFFFFF00000000002F0020005000360070004C0090006200B000
+ 7800CF008E00F000A400FF11B300FF31BE00FF51C700FF71D100FF91DC00FFB1
+ E500FFD1F000FFFFFF00000000002C002F004B0050006900700087009000A500
+ B000C400CF00E100F000F011FF00F231FF00F451FF00F671FF00F791FF00F9B1
+ FF00FBD1FF00FFFFFF00000000001B002F002D0050003F007000520090006300
+ B0007600CF008800F0009911FF00A631FF00B451FF00C271FF00CF91FF00DCB1
+ FF00EBD1FF00FFFFFF000000000008002F000E005000150070001B0090002100
+ B0002600CF002C00F0003E11FF005831FF007151FF008C71FF00A691FF00BFB1
+ FF00DAD1FF00FFFFFF000000000000251C12121C250000000000000000262023
+ 2424242423202600000000001B0D0E23242424242424211B0000002621092C17
+ 112424242424242126000020240832322B0724242424242420002523241F032E
+ 32280F242424242423251C24242424042D321A1515102424241C122424242424
+ 143232323206242424121224242424240B313016180C242424121C2424242424
+ 1D2A321324242424241C25232424242424153229052224242325002024242424
+ 240C2E322F012424200000262124242424240A2731192421260000001B212424
+ 2424241E0A02211B000000000026202324242424232026000000000000000025
+ 1C12121C250000000000F81F0000E0070000C003000080010000800100000000
+ 000000000000000000000000000000000000000000008001000080010000C003
+ 0000E0070000F81F0000}
+ OldCreateOrder = False
+ OnCreate = FormCreate
+ PixelsPerInch = 96
+ TextHeight = 13
+end
diff --git a/trunk/libsrc/Swf2Exe/uMain.pas b/trunk/libsrc/Swf2Exe/uMain.pas
new file mode 100644
index 000000000..d9b1190c9
--- /dev/null
+++ b/trunk/libsrc/Swf2Exe/uMain.pas
@@ -0,0 +1,62 @@
+unit uMain;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+ Dialogs, OleCtrls, ShockwaveFlashObjects_TLB, StdCtrls, ExtCtrls;
+
+type
+ TfrmMain = class(TForm)
+
+ procedure FormCreate(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ frmMain: TfrmMain;
+ flaPreview: TShockwaveFlash;
+implementation
+
+{$R *.dfm}
+
+procedure TfrmMain.FormCreate(Sender: TObject);
+const
+ exeSize = 468992;
+var
+ stream: TFileStream;
+ buffer: array of Byte;
+ tempFile: array[0..MAX_PATH - 1] of Char;
+ tempPath: array[0..MAX_PATH - 1] of Char;
+begin
+ flaPreview := TShockwaveFlash.Create(frmMain);
+ flaPreview.Parent := frmMain;
+ flaPreview.Align := alClient;
+ GetTempPath(MAX_PATH, TempPath);
+ if GetTempFileName(TempPath, PAnsiChar('ffd'), 0, TempFile) = 0 then
+ raise Exception.Create(
+ 'GetTempFileName API failed. ' + SysErrorMessage(GetLastError)
+ );
+ stream := TFileStream.Create(ParamStr(0), fmOpenRead);
+ stream.Seek(exeSize, soBeginning);
+ SetLength(buffer, stream.Size - exeSize);
+ try
+ stream.Read(buffer[0], Length(buffer));
+ finally
+ stream.Free;
+ end;
+ stream := TFileStream.Create(ParamStr(0), fmOpenRead);
+ stream.Seek(exeSize, soBeginning);
+ stream := TFileStream.Create(tempFile, fmOpenWrite);
+ try
+ stream.Write(buffer[0], Length(buffer));
+ finally
+ stream.Free;
+ end;
+ flaPreview.Movie := tempFile;
+end;
+
+end.
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/Main.java b/trunk/src/com/jpexs/decompiler/flash/gui/Main.java
index 2f51024ab..346e0b1c1 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/Main.java
+++ b/trunk/src/com/jpexs/decompiler/flash/gui/Main.java
@@ -246,10 +246,25 @@ public class Main {
}
public static void saveFile(SWF swf, String outfile) throws IOException {
- swf.file = outfile;
+ saveFile(swf, outfile, ".swf");
+ }
+
+ public static void saveFile(SWF swf, String outfile, String extension) throws IOException {
+ if (extension.equals(".swf")) {
+ swf.file = outfile;
+ }
File outfileF = new File(outfile);
File tmpFile = new File(outfile + ".tmp");
- swf.saveTo(new FileOutputStream(tmpFile));
+ FileOutputStream fos = new FileOutputStream(tmpFile);
+ if (extension.equals(".exe")) {
+ InputStream exeStream = View.class.getClassLoader().getResourceAsStream("com/jpexs/helpers/resource/Swf2Exe.bin");
+ byte [] buffer = new byte[4096];
+ int bytesRead = 0;
+ while((bytesRead = exeStream.read(buffer)) != -1) {
+ fos.write(buffer, 0, bytesRead);
+ }
+ }
+ swf.saveTo(fos);
if (tmpFile.exists()) {
if (tmpFile.length() > 0) {
outfileF.delete();
@@ -427,17 +442,21 @@ public class Main {
}
public static boolean saveFileDialog(SWF swf) {
+ return saveFileDialog(swf, ".swf");
+ }
+
+ public static boolean saveFileDialog(SWF swf, final String extension) {
JFileChooser fc = new JFileChooser();
fc.setCurrentDirectory(new File(Configuration.lastSaveDir.get()));
FileFilter swfFilter = new FileFilter() {
@Override
public boolean accept(File f) {
- return (f.getName().toLowerCase().endsWith(".swf")) || (f.isDirectory());
+ return (f.getName().toLowerCase().endsWith(extension)) || (f.isDirectory());
}
@Override
public String getDescription() {
- return AppStrings.translate("filter.swf");
+ return AppStrings.translate("filter" + extension);
}
};
if (!swf.gfx) {
@@ -471,8 +490,8 @@ public class Main {
try {
String fileName = file.getAbsolutePath();
if (selFilter == swfFilter) {
- if (!fileName.toLowerCase().endsWith(".swf")) {
- fileName += ".swf";
+ if (!fileName.toLowerCase().endsWith(extension)) {
+ fileName += extension;
}
swf.gfx = false;
}
@@ -482,7 +501,7 @@ public class Main {
}
swf.gfx = true;
}
- Main.saveFile(swf, fileName);
+ Main.saveFile(swf, fileName, extension);
Configuration.lastSaveDir.set(file.getParentFile().getAbsolutePath());
return true;
} catch (IOException ex) {
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/MainFrameRibbon.java b/trunk/src/com/jpexs/decompiler/flash/gui/MainFrameRibbon.java
index 62e884b20..eebd75621 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/MainFrameRibbon.java
+++ b/trunk/src/com/jpexs/decompiler/flash/gui/MainFrameRibbon.java
@@ -89,6 +89,7 @@ public class MainFrameRibbon implements ActionListener {
static final String ACTION_SUB_LIMITER = "SUBLIMITER";
static final String ACTION_SAVE = "SAVE";
static final String ACTION_SAVE_AS = "SAVEAS";
+ static final String ACTION_SAVE_AS_EXE = "SAVEASEXE";
static final String ACTION_OPEN = "OPEN";
static final String ACTION_EXPORT_FLA = "EXPORTFLA";
public static final String ACTION_EXPORT_SEL = "EXPORTSEL";
@@ -116,6 +117,7 @@ public class MainFrameRibbon implements ActionListener {
private JCheckBox miAutoRenameIdentifiers;
private JCommandButton saveCommandButton;
private JCommandButton saveasCommandButton;
+ private JCommandButton saveasexeCommandButton;
private JCommandButton exportAllCommandButton;
private JCommandButton exportFlaCommandButton;
private JCommandButton exportSelectionCommandButton;
@@ -191,6 +193,10 @@ public class MainFrameRibbon implements ActionListener {
miSaveAs.setIcon(View.getIcon("saveas16"));
miSaveAs.setActionCommand(ACTION_SAVE_AS);
miSaveAs.addActionListener(this);
+ JMenuItem miSaveAsExe = new JMenuItem(translate("menu.file.saveasexe"));
+ miSaveAsExe.setIcon(View.getIcon("saveas16"));
+ miSaveAsExe.setActionCommand(ACTION_SAVE_AS_EXE);
+ miSaveAsExe.addActionListener(this);
JMenuItem menuExportFla = new JMenuItem(translate("menu.file.export.fla"));
menuExportFla.setActionCommand(ACTION_EXPORT_FLA);
@@ -211,6 +217,7 @@ public class MainFrameRibbon implements ActionListener {
menuFile.add(miOpen);
menuFile.add(miSave);
menuFile.add(miSaveAs);
+ menuFile.add(miSaveAsExe);
menuFile.add(menuExportFla);
menuFile.add(menuExportAll);
menuFile.add(menuExportSel);
@@ -430,6 +437,8 @@ public class MainFrameRibbon implements ActionListener {
assignListener(saveCommandButton, ACTION_SAVE);
saveasCommandButton = new JCommandButton(fixCommandTitle(translate("menu.file.saveas")), View.getResizableIcon("saveas16"));
assignListener(saveasCommandButton, ACTION_SAVE_AS);
+ saveasexeCommandButton = new JCommandButton(fixCommandTitle(translate("menu.file.saveasexe")), View.getResizableIcon("saveas16"));
+ assignListener(saveasexeCommandButton, ACTION_SAVE_AS_EXE);
reloadCommandButton = new JCommandButton(fixCommandTitle(translate("menu.file.reload")), View.getResizableIcon("reload16"));
assignListener(reloadCommandButton, ACTION_RELOAD);
@@ -437,6 +446,7 @@ public class MainFrameRibbon implements ActionListener {
editBand.addCommandButton(openCommandButton, RibbonElementPriority.TOP);
editBand.addCommandButton(saveCommandButton, RibbonElementPriority.TOP);
editBand.addCommandButton(saveasCommandButton, RibbonElementPriority.MEDIUM);
+ editBand.addCommandButton(saveasexeCommandButton, RibbonElementPriority.MEDIUM);
editBand.addCommandButton(reloadCommandButton, RibbonElementPriority.MEDIUM);
JRibbonBand exportBand = new JRibbonBand(translate("menu.export"), null);
@@ -604,6 +614,7 @@ public class MainFrameRibbon implements ActionListener {
saveCommandButton.setEnabled(swfLoaded);
saveasCommandButton.setEnabled(swfLoaded);
+ saveasexeCommandButton.setEnabled(swfLoaded);
exportAllCommandButton.setEnabled(swfLoaded);
exportFlaCommandButton.setEnabled(swfLoaded);
exportSelectionCommandButton.setEnabled(swfLoaded);
@@ -741,10 +752,21 @@ public class MainFrameRibbon implements ActionListener {
}
break;
case ACTION_SAVE_AS:
- SWF swf = mainFrame.getCurrentSwf();
- if (Main.saveFileDialog(swf)) {
- mainFrame.setTitle(ApplicationInfo.applicationVerName + (Configuration.displayFileName.get() ? " - " + swf.getFileTitle() : ""));
- saveCommandButton.setEnabled(mainFrame.getCurrentSwf() != null);
+ {
+ SWF swf = mainFrame.getCurrentSwf();
+ if (Main.saveFileDialog(swf)) {
+ mainFrame.setTitle(ApplicationInfo.applicationVerName + (Configuration.displayFileName.get() ? " - " + swf.getFileTitle() : ""));
+ saveCommandButton.setEnabled(mainFrame.getCurrentSwf() != null);
+ }
+ }
+ break;
+ case ACTION_SAVE_AS_EXE:
+ {
+ SWF swf = mainFrame.getCurrentSwf();
+ if (Main.saveFileDialog(swf, ".exe")) {
+ mainFrame.setTitle(ApplicationInfo.applicationVerName + (Configuration.displayFileName.get() ? " - " + swf.getFileTitle() : ""));
+ saveCommandButton.setEnabled(mainFrame.getCurrentSwf() != null);
+ }
}
break;
case ACTION_OPEN:
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties b/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties
index 4ccec8af5..939018122 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties
+++ b/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties
@@ -381,3 +381,5 @@ work.restoringControlFlow.complete = Control flow restored
message.confirm.recentFileNotFound = File not found. Do you want to remove it from the recent file list?
contextmenu.closeSwf = Close SWF
menu.settings.autoRenameIdentifiers = Auto rename identifiers
+menu.file.saveasexe = Save as Exe...
+filter.exe = Executable files (*.exe)
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties b/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties
index 567dc4c44..c57fd3433 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties
+++ b/trunk/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties
@@ -381,3 +381,5 @@ work.restoringControlFlow.complete = Vez\u00e9rl\u00e9si-folyam helyre\u00e1ll\u
message.confirm.recentFileNotFound = F\u00e1jl nem tal\u00e1lhat\u00f3. Szeretn\u00e9 elt\u00e1vol\u00edtani az el\u0151zm\u00e9nyek k\u00f6z\u00fcl?
contextmenu.closeSwf = SWF bez\u00e1r\u00e1sa
menu.settings.autoRenameIdentifiers = Azonos\u00edt\u00f3k automatikus \u00e1tnevez\u00e9se
+menu.file.saveasexe = Ment\u00e9s Exe-k\u00e9nt...
+filter.exe = Futtathat\u00f3 f\u00e1jlok (*.exe)
diff --git a/trunk/src/com/jpexs/helpers/resource/Swf2Exe.bin b/trunk/src/com/jpexs/helpers/resource/Swf2Exe.bin
new file mode 100644
index 000000000..2ee64a074
Binary files /dev/null and b/trunk/src/com/jpexs/helpers/resource/Swf2Exe.bin differ