From fe7b7937f59f46aa98b8f27543f906f38e701a12 Mon Sep 17 00:00:00 2001 From: wp_xyz Date: Wed, 10 Apr 2024 23:20:44 +0200 Subject: [PATCH] Tools/IconTable: Updated to show a preview of the html page. By Roland Hahn. --- tools/icons_to_html/IconTable.ico | Bin 30472 -> 34752 bytes tools/icons_to_html/IconTable.lpi | 69 ++-- tools/icons_to_html/main.lfm | 651 ++++++++++++++++-------------- tools/icons_to_html/main.pas | 224 +++++----- 4 files changed, 517 insertions(+), 427 deletions(-) diff --git a/tools/icons_to_html/IconTable.ico b/tools/icons_to_html/IconTable.ico index a8a401f7d5f4732d3ed4d6879718cc16668912af..4fbafbad525e97d67f5d76c6ad0b7e2ee04dd930 100644 GIT binary patch delta 3874 zcmchaOK%fr6ox-1CMH*Mu>qTfBXz?vi|&aKs!CDlO{Mt-DH2_@`2%08RswayV*WtY zRTXFn1QMWiVjxg%p)HrRP#_M(4hfLpOK<{lPS5#f&UnTi$1|wvNGG-<+wb$e=RIfS zLkqt6;hJ4S_=I23pLL9>Xb$05ne{2J*OC3x!-1Z}$-pR9c4{a94~OdD;fXqUKy`cr+{gN7(68#=F+bcp zRttB3u7$s;eyV}LsE*daW2WSphHUCgBakX9)A37{6QpeP zVQQ#OmL=f+ppgQV0KZCrN&$9XrNB7QytXu2S@XB&r5;^1C$Qc^ycHHqO+yz=R|c5fZ&s%3 z^U$P4cSnMirhf-bKY#h+xi(lN0rw(WbWfxYS4?TFY3Y^>x*9K*dU3uDUXa|mR#UR* zrQ^A@XiucC>TW6Kh@~N>6Fx5nUXU zK5V^=;gv4eh<;zeFHi%RyVwB)u^xzOFSeNdE-a@^{laq67+z_F$mKp`fTc@8$X%pj zkoJm>Fi7U+r%+g)Rh9m8pB`peWsUGS>#eD$6DS8>UJ3z0EGdX0NM^hoLGhaJ$>)+q~Z~!1CqIK&2oQ2)bc9 z;taBM>l3s;i8TYcn;)Yi((9sWG+VH8Wecoa(IM6Yu?BSw#rYzLMd^Msn2xXmudZ$Z zDm#eL76(TNWNpO`Al=Nae&4}+p0RovVD;Koc#Y)*lD}LILKBmp>_v!_0(p6RpMP(w0?9#nYG*>)v*tFgn#5d5* p;dqW^#)ErN>#&4`5P`T5wO`>6&HtlFD}kD5D{L1-KlJzc{{?`U*u($; delta 68 zcmX@m&(!gb(S(74k%5^31Q;0<7@Q0k7|eid2L}jW!-;{R0w^XR0O4n_Ffc4A+UQbH Kv^l0Zg#`dg%L@$v diff --git a/tools/icons_to_html/IconTable.lpi b/tools/icons_to_html/IconTable.lpi index d99e4b6f2d..bc2878959d 100644 --- a/tools/icons_to_html/IconTable.lpi +++ b/tools/icons_to_html/IconTable.lpi @@ -19,7 +19,8 @@ - + + @@ -79,7 +80,7 @@ - + @@ -88,8 +89,9 @@ - - + + + @@ -105,122 +107,123 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + diff --git a/tools/icons_to_html/main.lfm b/tools/icons_to_html/main.lfm index 73f342c1ba..68b0e48c96 100644 --- a/tools/icons_to_html/main.lfm +++ b/tools/icons_to_html/main.lfm @@ -2,13 +2,13 @@ object MainForm: TMainForm Left = 1029 Height = 515 Top = 221 - Width = 600 + Width = 700 AllowDropFiles = True Caption = 'IconTable' ClientHeight = 515 - ClientWidth = 600 + ClientWidth = 700 Constraints.MinHeight = 515 - Constraints.MinWidth = 600 + Constraints.MinWidth = 700 OnClose = FormClose OnCreate = FormCreate OnDropFiles = FormDropFiles @@ -25,7 +25,7 @@ object MainForm: TMainForm Height = 23 Hint = 'Folder with images for which the html preview should be created' Top = 10 - Width = 555 + Width = 655 ShowHidden = False ButtonWidth = 23 NumGlyphs = 1 @@ -50,7 +50,7 @@ object MainForm: TMainForm Left = 0 Height = 426 Top = 43 - Width = 600 + Width = 700 BorderSpacing.Top = 10 BorderSpacing.Bottom = 10 Anchors = [akTop, akLeft, akRight, akBottom] @@ -565,7 +565,7 @@ object MainForm: TMainForm object sbtnLastDirs: TSpeedButton AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom - Left = 567 + Left = 667 Height = 23 Hint = 'Last used' Top = 10 @@ -583,7 +583,7 @@ object MainForm: TMainForm AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom - Left = 514 + Left = 614 Height = 26 Hint = 'Closes the application' Top = 479 @@ -598,13 +598,13 @@ object MainForm: TMainForm ImageIndex = 2 OnClick = bbtnCloseClick Spacing = 5 - TabOrder = 6 + TabOrder = 7 end object bbtnShow: TBitBtn AnchorSideTop.Control = bbtnClose AnchorSideTop.Side = asrCenter AnchorSideRight.Control = bbtnClose - Left = 430 + Left = 530 Height = 26 Hint = 'Displays the generated html file in the browser.' Top = 479 @@ -618,13 +618,13 @@ object MainForm: TMainForm ImageIndex = 5 OnClick = bbtnShowClick Spacing = 5 - TabOrder = 5 + TabOrder = 6 end object bbtnSave: TBitBtn AnchorSideTop.Control = bbtnShow AnchorSideTop.Side = asrCenter AnchorSideRight.Control = bbtnShow - Left = 351 + Left = 451 Height = 26 Hint = 'Save the generated html text as file "IconTable.html" in the specified folder' Top = 479 @@ -638,13 +638,13 @@ object MainForm: TMainForm ImageIndex = 4 OnClick = bbtnSaveClick Spacing = 5 - TabOrder = 4 + TabOrder = 5 end object bbtnCreateHTML: TBitBtn - AnchorSideTop.Control = bbtnSave + AnchorSideTop.Control = bbtnPreview AnchorSideTop.Side = asrCenter - AnchorSideRight.Control = bbtnSave - Left = 227 + AnchorSideRight.Control = bbtnPreview + Left = 232 Height = 26 Hint = 'Create a html page for the images found in the selected directory' Top = 479 @@ -661,6 +661,23 @@ object MainForm: TMainForm Spacing = 5 TabOrder = 3 end + object bbtnPreview: TBitBtn + AnchorSideTop.Control = bbtnSave + AnchorSideRight.Control = bbtnSave + Left = 356 + Height = 26 + Top = 479 + Width = 87 + Anchors = [akTop, akRight] + AutoSize = True + BorderSpacing.Right = 8 + Caption = 'Preview' + Enabled = False + Images = ImageList + ImageIndex = 7 + OnClick = bbtnPreviewClick + TabOrder = 4 + end object TaskDialog: TTaskDialog Buttons = <> RadioButtons = <> @@ -678,291 +695,329 @@ object MainForm: TMainForm Left = 256 Top = 64 Bitmap = { - 4C7A070000001000000010000000AE0700000000000078DAED98796C944514C0 - 070A655B244454A4981035C60388844411080415A8272A87280A786B3051E385 - 17B5D5520F2C28464A4010DB0AB4BBDD055A28D0A6402DB5DB9636C276AF42D9 - D22E65DBEDDDDD5E7B3CDF9B3DFAEDEEB7DBA518A3863F5E66BE99F79B79F3E6 - BDF9BE6F0080C115484DFE8CAD0DE5AB6A2E963D6F20A1BAA160464AB87CC3A9 - 57CE81DD0C42693CFD76FDF982993F8794FC7BB79FCDBD6D5E43C56B067F3E2C - B13542FD1F8B75627C5FBB122E9D5A09A68A17834A63E5CB505BF860A751B9DC - 68567F0AE6AA8FBC5257140BCE8E0280AEDF434A8372A9ADAE68415F38BAA27C - E932DBC592276CA1746C1D45B03EBF166ED9D40F23BF74F232EE483D74B79E04 - 621B4A971842B1737FEE82D8343B1C3700D4B6011C3B0FF0E45E07CCDE6E813A - E57243289EE625F6622770D9AC046F7D61AA1DDEDB9DD5168A275B695E0FC3E2 - 07EA0568C7A4EF3AECA1F8485C2FD9FC7D898BF5083D1B5A01FBEDE8C3C5E742 - CD4FEB159DBFC635BF217F6A4A43E9D26A53F9B367FD654DDAE1D645BBFB9D62 - EB9FBFABCFB162DB3E65A8DC60EF42D4355F41E5DC9D60A1F5D25A68DE39F83C - 2609CA59028C182CBF4847920471388E29E20BB0637949B21ED60DC64AA52CE2 - 4C16BBF38C94CD3A2D6577D07338F9AC96B209BAEC1BD3F53931A6DADF17341A - 4B9F6BA6929E75D913D2547BD88D41599964BE3E67A2A9B30E83C3DEE497B34D - D051F78B5D9F3DD15425973C10C066B1E9D5B9B79A6D56AD0FD7DDD3ECF36CB3 - 68A0FAD0ADE6AA0C36CDCB27B0E1DAECF167FBDACB7D74B5A65618F3951302CF - 8752D0658FAF26CEBDE6878D652BDBFCF5CAEBDB78CC889D3FC6D2156D2A198B - 255E9733F1378BE9005C0E6FB9B40FD0A7A9C4EB0F4E2CA775F9AFD99F17FAC2 - 66A902FDC19B4A399F735399CDA2E6ED752D2D10B5DE0987F51D3E7C72910562 - 921D037C978A78A56BFE9874A1FD9B4E5A6054A29397C46F743FE7683B44EDAF - CA640F19CB9EF7F1DF77381FE52FF19244973D3EFE533ED3A692B2859EFDA3FD - A07D11EAAC3DD20D18E7016C6F5B09E80EDCA04774982706281E282E847E2469 - E96CF18B1F3554E7DED2A4CA6277FBC720C525C567C7859DE2F17B6107C66F8C - 49AB90CC0B9603941FFA9C09A928A6DAC2F9983F2B9AA9A4677DCEF85F2BA5EC - 8670F290F2559BC16ED764B09954869BBFBEF9C8E2492E87C1F3621EE6C338EE - 0F293B4EE2CE9171D417E2DC88C4B9D2511FAA64EC4D7F9EDAA80FF5D24E6D63 - 23037C2F65BB519CAA4CF6A967AD429EDA708C75A443F3F8F85CC696B8C7FED8 - 6F4C2FEFD5C5F1495793C99E12E82951D49EF32014CFED90322D4A31CF9D3DEC - 7A6E93DFDCC1786E83947D86ED8E33BBD9B578EEDDE7B6E7D1005EC69E250968 - CF648B88C118BEC7C3A34F1E09778FD15F8F7B78AD825D47F6E3981F851D57B8 - 56F79A3D71A2C435A9FCFD172CAEC9D7A85F22186F19B727937D10E6DC407B3E - D0CE86E17326F914C7FD50CC0E3E2FAE917428D6FCFB0DBB98C43D06D05A681C - F22909EEC15AB299C77626DB7B36978D0A91734FA35E19F729E9BB84EAA5C82E - 0DD7C7744ED0BB9B24DC33E30F298B52CB467CA091473768B2F02BC1DD4E756A - A33ED209C6630C2ED0EE1FD3D359F335A815122BFA7A1217AC531BF5914E30FE - 741A1BADCE1AD9EB68CF83A6CA17FA358A682309D5A98DFA4847C89CCA61D1F4 - 1EA092F64D238FBA60A9DD8CDFDFC7C052FB3D17577D33501FE908195CD3FB64 - 178D4DFDE7F3265B682EFAFE73761E4739C1EBD4467DA443BA9C2116EDA3B551 - 7F9761232F1DED47A0FEE442AB5A36B24F2D8FEC3516C75AA94DA8C3FD41EB93 - 4912C93FB446CF7F00E9E33C19E8BB6B7407D8188D429249E3719B5087748921 - D61DD393348AA88B960B3F729B694EE23C3EA23AB5511FE9902E31829C08E069 - EE40FE44001FCC7EAD3C4A469C8B8D92198B1F16B53F98FF8CC50F59B91D5EFF - 1D15F55FE8FD3B31E8FE5D69FC5C69FCFE9DF933D4FCD51D189BA2960DB7F3F7 - 805C82EFDF08109C3D2EC136DC475ED72A461FA6F7F5C09935DCEED97B5C2338 - 7ACE077CAF529B3A2B92EF7FEDB1FBAC3486E03DE7FDE7E275E15D80EA436F9B - 478FC6E0F521F25E3D113E98FDF69E1A6EFF60BCA962351FC3DF7FD4D658B97A - 503E5C11E34D15AB44E716DA40F605E383ADDD7F0F83F1FEBE17131FDDFF09EF - 89FFC1FCE78921AE8B8C37FFF68FDDA2960E77F0FC12CB3D410E6A303F4957B7 - 6FEC16B8C2BBBBBF5354B288C7F1AC6B0D6A3B7DA3CAA35B34D288C744CF3EEC - B336E586F4BDB5F110BE7B46378BF1E1EC9D77FFFE23BCADCF0C07FFEC848D79 - DDB057D9052D1D2D61F3ADF8DFBA24C506B3BF75C21BE97D10FB831DE66C7080 - E2D75961F19FC87B61D9561BB477B9EE0CECFD6688DBDF03F727D5C0FD227747 - 42DE6933C3AC6F9C905FE5FBDFDDD6D90C933F07E7943898168A77207F4F9213 - 0A75BEBCB5BB19A624209F003306B37FCD6F7DF06A6A3FF7A1A7EDEB43DD303D - D1D97BDB5B306A30BEDEDC0AF3921DB0E8273B2421F7D2AE7E989A003019FF86 - EF4A8075A2F18BF1291C837C9772CC0AEF64F4C28623DDB0FDA81AC7B0F331A6 - 7C0E713E3CE6058D11327F14D1CDAF6FCAD880EBB7BBED983A945CC53D78724A - 3C6CB939012470F5FEFFEAFDFF3F74FF9F776EE8F7FF5F16BAEEDFA9BCDCFBFF - 1D150031C900728DABA4E7CBB9FF8F3F3E603B95F43C94FB7FA1FC5BEEFFFF02 - E0501E69 + 4C7A080000001000000010000000C10800000000000078DAED597B7094D515BF + 12814D2032B51509CE30853A7D0053C7198BE268B105A2565179D44A45FBF0D1 + D25A3A6D7D544B2415A22D02964E89236A912092EC663790250193E1258F6C12 + 12029B7D241036649764F37EED26D9ECB77B7ACEDD47BEFDF6DB2F1F89D3691D + FF38735FE7775EF79CFBDDBD0B000CC6410DA50BDE6DAE7CAAE16AC5930E22EA + 3B8E2CC8568B6F3EFBCC2510DA414CADE7D7392F1FB9EB7D452AFDDECE8BC5B7 + 2E6AAE7ACE21C5AB227F2B38CF2CB7CBE17D3D266839BB06DC553F4F48ADD5BF + 84C6133FEC73991E77B55B5E83F6DA57A2D474321D82BD4700FA3F53A466D34A + 7FD3C9253E35BCB2F8F255FEAB658FF89578FCBD2761536923CCDE360C13DF08 + F236E3B01306BA4E01619BCB573894B0F7BEDF0FE939021C73003476031CBD0C + F0E8BE00DCBDD3034DA6C71D4A78D24BD8AB7DC069BB09A2FDA5BB05F8E3DEFC + 6E253CD94A7A2318B661A47F04ED98F576AFA0849F84FE92CDEF9485B011A2B1 + A30B705DC0182EBFA4A49FFC95D5DF10D2EF289D9FDD5CBEB2DE5DF9C44529AD + CD39D4B56CEF7050CEFFC5BB7C81D5EF1598946A83FD0192A7BE09D5F77E081E + F2977C21BDF7E038350B2A59265C3F5A7D118F260B32508E3BE9AF2060DBA2D9 + 04EB47C36AB52CE9423EFBF6052D5B785ECBBE456335F56CD1B219F6C29BF7D4 + 19D3DC8D9F2D697595FFB4835A1ADB0B67E4983F613727C4EA348BEB8C33DD7D + 4D981C429BA466DBA0B7E9DF425DE14C77AD5EF383386C3EBBBDBE784EBBDF6B + 8BC10D0C76C48CFD1E2BD417CD69AFCD65B745F1996C82AD70FA455F4F650CAF + CDDD05A96F0621FE7C28077BE1F47AC2857D7EC055B1A65BCA57E9ECE6392377 + FEB8CA57779B752C9DF076E3CC8F3DEE03702D784F4B01604C7713BEEEE0CC4A + F24BEAB3142F8E85DF530B75076F29E778E32D157E8F85CF37757642F2A6201C + AAEB8DC16F39E981B42D81117CBF99F0A690FEB43D62FBB79DF2C0E48D41DE12 + 7E6B786CB4F5CADA5F9BC7EE77553C1913BFB7511FD52FE1351B43F6C4C4CFF4 + 936EB3962D8DEC1FED07ED8B98E7E5C30380791E871DEA2E03FB819BEA107A5D + 2407281F282FC47124EAECEB94E48F05EA8B67B799F3D977A539487949F9D97B + E543F9FCBDF201E66F9ADB66D02C4A5403541F75C619BB91DC8D271663FDACEE + A096C675C6E91F556BD94D6AEA90EAD596CBBE69CD657751ABB67E63EB916D20 + BA160C9E178BB01E6EE4F1D0B26344E11AB991D614CE8D49A86B0FF243AD8EFD + 468AA7395A43BE9CB3EFB18971B1D7B2BD4841731E7B2DE2AB184F7328633DF1 + 909E9898EBD88AB0EC3F4B6446F1515E944FBCD63CF69888CF8464899C074A78 + 6E8796D9904EF3DAF9847D8DDB24D19D08CF6DD0B2BFE07CE0C25EF6153CF7EE + 0CDBF3A338BC8E3D4114379FC796110673F88E081E63F2A0DA3DC6783D1CC1DB + 0CECAB643FCA7C45755EA1AF619F237962429FCCD2F825CA6B8A35F29789E4AD + E2F6E4B11755EA06DAF39179761D8EF328A628F725393BB85EF4917828D7A4EB + 8E5D4C139601E40BC9A19812E11EBC4C36F3DCCE63FB2E16B3C90A35F763E4AB + E03125FE1051BF1CB12BD5C698CE09FA7613A93D33CE6859B24577FD8B567D4A + B3351F6F09E179EAD31CAD114F223CE6E012DBFED4C1BE86B7C062D07831D6B3 + 38619FE6688D7812E1CFE7B02996FC8943819E1268ABFED9B0D590E222A23ECD + D11AF18831678D2C85BE03D4D2BE59F5C9573C8DDBF1FE7D143C8DEF700AF5B7 + 03AD118F18833EFD89EC22D9B47EB964AE8774D1FD2FD8770CE938EFD31CAD11 + 0FF1720C61D13EF28DD6FB1D5B791BE8390CCE534BBD16DD449F453F69C8753A + DD4B73621E1E0FF24FA7D948F1211F23BF03881FF5E462ECA6DA0FB054AB4193 + 47F2B84DC843BC84216C38A767590DC9573D57FEC96D269D848BC488FA34476B + C443BC8411D5441C9E74C7E38FC7E113D96FD327EB0817C226EB5CA71F90B53F + 51FC5CA7EFF7723BA2F1FB54367ECAFB777CD4FD1B6FFE8C377F3FCFFA196BFD + DA0F4CCBB6E82608FC3BA0D7E0F7370944674F88700EF791F76D862987E87B3D + 72664D10227B8F3E4260F072DC7D95E62CF993F8FE371EBDD34B3244DFB9E86F + 2EDE17BF05985F8ACE45F84806EF8F111FE593C127B25F186CE0F68F8677573D + CD6548E34773ADD54F8F8A574B727877D553B2BAC536907D89F0897C97EE6122 + BC34F67214C3FB05C147F27FB4F8457288F322265A7FFBA7EDB0682704787DC9 + D59EA806AD589FC46B2F98B603C6F976F779925997F4309E755D096DA73BAA3E + A5D3AA4D7A48F6ECC3356F5BB162ECBDAD45F8ED99D2218757B377D1FDFB3FC1 + FB7DED70B0A60FB6960CC03E533F74F676AAC677E1EFD615D97EB8FBEF41F8D5 + 1E1FA4FF43807B3607C0F0D14255F857F543B0EA5D3FF4F487DE0C84E176C8D8 + 3F08F76535C07D326F47627CD0DF0E0BFF1684D2DAD8DFDDDD7D1D30F77508CE + CB80DB94F001C4DF91158413F658BC77A003E665223E13168C66FFDA8F7DF0EC + EE611EC3C8DC5B450370FBC6E0D0ADBF83C9A3E19DED5DB0684B0096FD4B802C + C4FD62D730CCCF04988BBF86BF9309EB65F317F3532C8362977DD40BBFCF1D82 + CD870760E7A71694217019F35E878C183CD605C950AC1F434AC7F3DB7237A3FF + 42D88EF963A955DC8347E76D801D5FCF040D7CF9FEFFE5FBFF7FE9FDBFE4D2D8 + DFFFDF38117A7FA7F65ADFFF3FA80248DB02A0B7865A1A5FCBFBFF866323B653 + 4BE3B1BCFF8BE97FF5FDDF9CCBBE8177FBE7F95B878E3D7B41CFE6A8A9637AC7 + B216DC508CE47596ADF4B86B5E08504B63A4225A57C4EA535C2D352FF8823E57 + EC9DD3E78496736B7DB44E6F4DB27707D44B58A57A6F39F76B9FADE006A39CBF + 64A3546FDCDD17EDB0195207CE6BD96CC95BDA73E4A79A33C759F698077F373E + 2379EF79D55DB34E5083779F5B27107FBCFE15EAF49F59DE2FD51FF19FFC53F6 + BF09FD9F1AE77F38FE452D35BF558CBFAB7CCDB0553FB524D1FE5B0C539CB447 + 523B482F612DF4B6AB654348B2F747CA0DDA5FDA238A33E69F402DD94C7A091B + FE8E2694C17FC3A37F1423CA7F6A23FED27F3C881D0CCBF0E1F8916BBE23A3DE + DA583B968E5386712CDF6C7A43202CB6DFFF0F7EC71BF7 } BitmapAdv = { - 4C69020000004C7A070000001800000018000000E70B00000000000078DAED5B - 7B7054D519BF09092420D28A4AA1338E43A70FA0762C7486B650681541B46AAB - 50A52A6AA715A933B533DADA325348086D7DD011C1CA4B8619444C76B3812440 - 78C95350681221641F098F24BCF2D824BB796D4276EF7EFD7E67F7DE5C36F7EE - EEDD840A9DFCF1CDDE3D8FDF39E7F7FDBEEF9C7B772F114974139B2B7FF8A3AE - 8251972BB7DFE58E3494A3BE4FF88C21779E270AB87B19CA5D85A32FF505BF72 - C7DD0D7AD88A5DFCEC57CD7A6B8B65CADA63E1276ACADA63E1379F5D4E67777F - 9BCEED1E6FCACEEE1A4F1585A35B6067778D336C77F1C84C0AB61E206A3B6CCA - 644F11B90AEE905DF9B7CBB836DB3F1E3B533846865D0F6C05BFB27074F07AE1 - 039BF96F4DA4EF61E7297AF263378D59DE4D839706C5E753FCFD88EBA4DA06D8 - 95DBC73498C1F5B71CA197F26A2995319FB20669432951818BE88312A2272D41 - 51FEFBAD57443B609BC507F6D7FF25D3BE7344975B4376AEA9E77AEF59E2B5C8 - 620CB3F887981370A1C5B637100DC90A7D2A657B780CAC63F396C73D66F0C137 - 38517060A55738C92C097D6ACBC1D5EC95455D66F047BFEDA7F525A1FE657544 - C72E1215BA42F8F8C47794A37E5D31D1A87F7A6433F8E026DF15E21B9C0037D2 - 508E7AB41B9CE92733F8D0E00766E6FF0F0FE7879197E3CD0FF3B2DD82D778F8 - 9F9B13A4FB56EC6B12FB178FC1B1E68E659BB73CE14DC994853EA2E967F71922 - B4FBC9F2DDBF30BB1FA566D29ADBDFA42EED185AFD031BF5A94BE9DF89EC7752 - 06A5608CE44C92E7E450007A822FC1F7E3D9144039D7BF8F767DD957A5BFD194 - C14BC99A9645EEE40CF2A72DA306FE9EC3B83FBE51CE2E768B3498ED41476EDA - 3AC7D611A5CEBC5B2EC1706DB70D595B9E23CD421BD3D8195232F77BDE614B6F - E07340476DE902BFB76A0D75D41508C3756DC98B7E57C19D1D765B7A7DB9559A - 8F3EF1609FD92CDD6ACF4BFFA4A2708CAFA56603EFF10D51CE090DE4AD5E4F15 - 055FF3396C43F7A26F2C6C9E7365F5E1FB3AE5AE2A536791EA833FED74E4A557 - 188E014EF2D2F7551FFA5927F9EB75718A2F7A84E9D505FD7518A3CB611BB657 - 8F2BF6D573E024DABCC7AE08088BB60E7075DA223D1BA913F832C4B7310FD897 - 60D1DAC01FF0B95657D0207412DD97F1E103C3C9BA3A6D95662AF80E5BDA7A68 - 30961FE3C377B3767FE7477CA8F8DB4694625DFD858FF870E68D2856F1F3865D - 41DCF4177E7BDD3672709CF7E0DF72A9BD2EBF971627BC17A042678B213EEAD0 - 2652B3EDB55BC969EBC1E7B59478ABD6F6C2E77C284C19438B8F32A53E125FF0 - B3F5D6FFA8F3E7FC857C12B9CEA28A164ACB0A0A8C6DF616157FA7ABA73CDFD1 - A2E3DFDFFAEDB943566B626B1672959E3EB563DCF6469046B245C30EE9F38E0E - 8EB107AEC9C31C13461A52B8485A12322D67BDB5B39638566B8BD74AA9D7E407 - CEB1886DA37B49E029F846D881CE739C1F46F978BEBFD6CB6F9C63F7541F9CDE - 895CA5D77F5369AB30A3FC5675607A97DD366C17C32519E667CEB1C8B546EB30 - 9A77D581699DCCB1D3952F0D8F7E3F2F0D77E40DDD03AE42FE88B1BF30DFAC0D - 9FDD3674572C6C2D57A773A467E073E80AF9C45BB59A1083305C4383C863BC67 - D4D9ADD2D3F1EE8F91791B799073D51A8E9762657F476E617DBF0F0D46EAE486 - B5D09962132C112EE2E0EAAE728B44305CF70D4F4AC27ECC3E5EA4CCD5F9B174 - B7828F6B8D0E16A1AD91E623ADEC23E9AB8C51A46039B2A58946F8A853CAD876 - 7EB155FA4A0C0E6E634D94A83C58A50D168B34C8081F7568A3E1AD18F333E4C4 - 221586DB76F39AE769EB75F951E6C5FA177D42F5F97A5CE1BCA99947AFFC140D - 1F867854B9C2795453871861CCF3614E3ED45B5F2CFC700EDE126E73EEC00149 - BDBF408C86E71D28B3496313C53F9D2D7D83EB65A18B1C69863AAE455A8532F6 - ED2123DFC7831FC63A22DAE548EF68CA0E84E7BFCC103F4F1AC96DFC305C1BE2 - 5BA537C273DDABC17786B95F104DBFBCE669B0686D187761789D760DBE3D3CE6 - C2BEE611E6E5E5307EB9067F5F989FB7FA8ACF3A5D1EC6DA1359C6F3FFACCFF8 - 8C21B01853CD3916697A784DC1B25CE93B0963674BE38011D6E7346D6EE7B2CA - F018DB12E6DE221584312A227304FBE50935BED94709F0FE07A53F73F4CB18F1 - 2DA3BD09CE5F51E296FB6D366A575C280DE5368735F3D8C13AB8D7309FE74ADF - D7EE15DCF6E0318B941E6D2EA8D7AC43B1529ED74A8EBF5761B84659449B8FAA - 364A6971EFB756E931EE732A0243CF4EB2BF1EE9C3BE3E953132C1157F9E603B - CE65DB51C6B8536EE4334FF8F9CC1CF6E3641DDF4E465D22E737F429B72667D9 - ADA9CD766B8A6CCF4DADD7EA02D7765B6A9DA8E336E0CACC38AE8FA531F09DFB - D4020A788AF89EE1CE2EBB257971CFBA9217A30C756883B6E863660D7CCF57DD - EC784D3CF76C399345F6DC415DC85330BB755067CBD965A20E6DD0D634F7D6E4 - 953587A75E559EAD567D32B14BD164D52793BA9472B441DB587E8C5C1FC7D06F - F83EAD3BD6335DB441DB487EB5CF4F8496915373D36ACA2DC9AB38B65EB0E7A6 - B4D51E9F1388858F36688B3EE80BAEC267A0A5EAD92737B5097E02973587A676 - 634E21EC433DBF677977517BCDBBD476EE2D0A346FD78C71488C813EE00A18EE - B29748680FFAB64A73A1B380D133EED683681F745853304F1FCFA585FD1BA82F - 9D2FA34EAF4FC0B39342DA95E6F219F887D032F4A668426BF525CF42FF1E9163 - C2677571CFC465EEB285BD7EDB82D6849E396680ADC60B6B1A1AACDAFF03551B - E00173D5DEEB6B34F128D604DE548DED9B741518C042AED739DFCC603CF5F7BC - D6F36F12F8D0BD77C0FD12C74147CD2A159F750A4EEE8F9293EF471BA57D7BCD - 4A02E7FAF75B521274D3767EB9067F90AC3D776AF72D951F5EA35633C2AFCC85 - CE396A16B80B34EFE8E187B955F851F295F02FFB42F8977D13E92FF810BE0C3D - 0F649E042FD2638EDC546F7DE9F3BD7E1B8546847F5933025BD5E74E437DD697 - 3E2763AEA1381AD48935359E7E3968ACCF22559FA118486D464C88F8E218D18B - 2FF0D076FE6DEAB8F01EF3B65B3FBE3836457C71AC2266959C8D580EE787EA7E - C80F35E13C98F9BFCA6FF1E5E7499AFC3CD1547E8EB9BFB026E057757F610D2A - 5A4B647FB9DEFBA3D8DFD93FEAFECE5AEEB5BF73CCA8FB3B9F05123D47C43A9F - 24F4FB517F9FA3AC435E63FFF9AE3D57262146A29E3D43F5493DDFAD296E5ECF - F8DE6B4DF1353B5F27DFA5F5AA39F38651A36B19F91AF7195AA3732939B70E57 - FB5C3E3A3BC0BE6AC67D52C47D0DD7AFBB26E6451963443E93AC3FFD2751874F - 5FE35E71ADCD55978E3EE8E7FCD4705DF0D98023CABE54FCC3CCFF70E6372B06 - FF99CCFF8884F03DAEBFE23788A8FA01B6C7B52821FC44EDCBC6F7B8FE129397 - DE3CDD4A1EE7A2B8F0855F63C4957E9C8D8803DF5897D14CABD301FC01FC01FC - 6BF1B5FBA3D81763E465FD3C1DDA279B9D7F0EDD9368F16D435E4559BCFB7AB4 - 7D5EDC63321EDDE4FF4BD67D069F2D7DCB611B5A62B724C9A6F8E1F68EBCF462 - F48F7A6666EC8B471F0DF8DCBB4CF917ED2F7CFAF300C688FE1C2549F6351425 - F47F61F443FF18CF8F859613C257626000FFA6C70F74BBA9B2B699BEA8F65053 - 4B53BFE1FBAFBA69F5FE0EFAD11B411ABF84844D607B6163379D747DDE277C60 - BFB8E92ADDC377E54BF23BE9D38A163A59E3A19CE36D347B65802666C9B465E3 - 8C84F1316F60EFD7F94F4B87AF919E59E7A5C9594DF2D8D76984597CF00D4E30 - 6F23EE2E3536D3848CA03C6E31BD6216BFE28A47707DB4D21BD5EFD397CBE7B9 - 9DD52C3E7806FEA91A4F54FC992BE4726E576416BFD1DB24746239D166FCDF3D - BF9B26FD3DE865FC5589F8F779D6E043AC131FFB52AF3E9B7524F49A415313C1 - 775EF6D0C465419ABFA15BF8523B6F607F3783E89E0CF28FCBA087128DAF6367 - BC34E54D59E874DE3ABF8887696FCB62DEF72E0DC75C0675B1861E4E747F696D - 6FA44D47DBE98FD95DB4E0C3AB94B5BD934AAABCB4BFAC9ABE972907A28D81FD - EDC2D14712DC1F1FF6AFDD30BF12D89A311EE8B5BFF31889ECEF765BFA0947AE - F44DCC5B1963DC122ABC1EE710F6F10C60F3E7B49BFD4C35F0FED7C0FB5F03EF - 7F0DBCFF753DDFFFD25A7FBFFF15F97E4D7FBFFFB5F238B0429FFDF9FE97829D - C2D84FDB429FDA31FAF2FE17FAAF3E119AF7BB9FEB7FEFCBFB5FE03B3DAB3727 - F83E7459A8BEAFEF7F45FA34D2D7FDF5FE979EF5F7FB5F91D8FF4FEF7FFD1736 - 59E1C04C7A0700000020000000200000005B0F00000000000078DAED5C7B7454 - C5199F6C38E1150ABE0AEDA952A4568B15154B6B4F11A9B6FEA3ADF86A15FB40 - C18AE7547CA17D9C2A814482A825D073147CA11CAB64370920E4A120068B4000 - 8124BB494890040809248484BCC86377BFCE6FEEBDC96473EFEEBDBB77131FFB - C777CECDCC37DF6FEECCF79CDC1D2262F40DA68A1C36B4342B714549E68826B7 - 93911EA1AF246B649AC7C912ECC60776E5F61BDABA5A8A88BCF5BAD4D5524895 - DBA6B595AC4F5C6E373EDE0DF28DB07BE6D07C903C59231BEDC6C7FA86C2D688 - EF41B7D11E5922577C77E986313B8ADF67175BC1B78BFC5D27A8AEF8196FE9FA - D13B07035F9B03D6C10A3E74E0D88E5BA974C37911AD7FD9C68BA876FFBC9EBF - CDE21FF9F8275477600E79CF6C266AF9346CEAAECFA2A3F9BFE0769D20F06BF7 - 3F2CE6146ADEA559A3889AF323C2D6A8AB3E933C99C3C893914047B74F1373B2 - 43AE15527CDBB041C1D6F0C5FE0F027634F03F2A2EA6B919B574F98A761A99E2 - 1374057F7E28B396B6B88BA2867FE8D85E9AFE7A13B18544F18B88A6AC22BAE3 - 7D85F08C36F4DDF8461395735E3BF1F34B0AE9BCD46E1A9642F4781E91FB14D1 - 89E6BE54CCDBE6E792E001EFF6D2425BF0F1DE9037EE453FE51DEE8BB9E78442 - 725B6E05D158CE8B31588748F1B1E6C393A91F36E8A7AF2914D89E53A1ACC30C - BE1791E043D7B0A78FE5F6C7004D7E4521BDBEF9398A3EBCF1D6CD61E343CF87 - 2C52F6D62A7ED1494527EF495B1D363E6CECBAD5FAF243E183AEE5763161C9A1 - B0F113B96DC3BE20ABA09A68EA6BBD98A0E1290AC96DE0012FC6DCCEC78E58D4 - 1611FECC08F11317B744B4FEF02D91ACFFA5A9653CFE0C6F422CB48A0F9F1A1F - A1FEDDB5624D27F2FACAAD53DABAEA322CE1C39FC386E687617F8FAAF697FCE6 - 3C17EA8F928CE1699EACE18D56F3A8A9CBB6D3B0649FF06B66FD4F7639D1D0C5 - 3E9A985A762CD27A86FD8B2E732CA2A60B97912F700E7AFE17BE0FBC8E246AE4 - 6327DA513FB0249A8E390C4D261FFC1AF6566FBFB1E6098B55EC67E9063B6B18 - AC435C127D823DE573F15FBB9AFCF00DB0CF6B56911F6DE8E33CDBEC7A6FDD79 - 3C4737739CD5710BA994BF671B08CF68E3EB74D3D7A25E7F977DAB249D4DF7B8 - D8FDEE74F60408CF68435FB4CE0838CE436E57DC876E675C97B14D3A785F5C9E - DBC5E6624CC4D849CC519CCEFEE0CE883F06F9153913BC270BE7536B6D267534 - EE245FC7514178461BFA2AB22778C1EB71C51FE5F63D0B32C2C1E66313F9FB6E - 80AC2F3E9CEC6BADCD325DA7B5D5E5F05A6DAA57A9B5E372F639D9688BD89778 - 5C0E377F077F43F90B5C665D18356E1D351C5ACAEBAB78BFC735C4039966B0CB - 36B251E02F5D3FCADB7A7243C475766BED7A822C77C69012C80EB5DF5C7F3EC0 - 7B9BC1AE3BDB20C8CC1CB00E5CF6460E1367B8EEB029BE670DE5CB42CAAC6F6E - A0D1A97E41780EC58FBD107A099DD4DFF304FEDE555F6CB9DA6B66BFF71D6F14 - 3114846733FA003D862DE9D9A6B06F3E3FAC95997DB58E5F2F6C54B10936B71F - 3EF72D15D9977ACDEA5538F820F810AE07B9813E95B7759F2C7C8CA28D7FF2E0 - A3C24FCABEBAC8C96E54D63E33EAF8AD3519620F8029E9DE2CB4753615441DBF - A37197A203E9EC3E0D9FFBF80568F3755499B6F360F8C1FC023094F8C09E92EC - FE2905BFD2D0CE472DF1D3A7479A42E28307BC467EC177EE88E6079E946CEF3E - B1FE8DBB75F1210F3889CFF7CE410F1F7DE0411BC6E8E12356AA36786F3FFDE3 - BAA1B7663B2A9B7AE63022C54FDB0E37F5C3D7E3D193D552E3D2D33F1E6B1D9D - 88DF467A13287F55414B0FFE9B7B5B4C612BF6F757617F81B108794B79F6F8A0 - FE479EC3B0647F0F3E30CD6083CA73BEEF454ED0DFFFB1B98A0F089E67C87B2C - 93AC1BA1FC6FB193CDD18D3F19F19587F326F9A8FB54C8398C90DF3F3934B612 - 7FAEF2212F33CA0D7BE22F8F95A1FCC8A6D2B3A82704E13974FC4DEDE77782E6 - 1F26E26069ED194176E51F5AFE855C49E45F2663B199FC4BCD0113CDE69FDC1E - 3D7C1D7C58B7F0F3CF54CBF9A75EFE5D917BB9AFB9FA3D0BEF9C29744DCBBFC3 - AF8B581C62237416B260BB88DFF0934AFD512508CFF06BE813F6ADD41F558AAE - 05DF6F936B91A0F8075E5B891A2B68FD950BFB8EC6FF6A35FD14F5277206ADFE - E4CF680B99DF7F8D08FAC9F3969520B376652771DCF9DABEE37910F09324FCA4 - 68E170BDFF13D7E76CAE5F33CDE283176330365CDC43EFB10BB98CF5927D9D31 - 8B0F5EAD8FEB46566916BBC0A26E8DE3633DB26DF3B96C318B0FDE00DFE0864C - 93D8E773FE43D258EEBFD98A9D4E36DC2C3E78310663A575282BFA2F3B2F94BF - E5BC1B24EC4EEE5FEE0A57FF38E6DDBCBF4BDE8BA03ACDFDA6FCDEC52E7667A4 - FAAFCE415E87D986676C4E764C92F9925DF6C7D770B9F45E557AB141CB3F55AA - 09DCEF48F0F76D6223385FADA4CB7374BE83D9DAFB7D0A7BDC6EFF236295812D - A93ADFADEE8FB7F83D36D66EFC924CF61DCEEB53C7741D58CFC648FE6ABAB4F6 - 05A6ECD4C516F6E8940B59B8099FED649F4B7A382DF0EC47A53526F16FC65A09 - E2CF2663C6BBD29A3D28E9DE33127EAA593F5994C1AE00998E25E9EC05097F41 - E0F983AA7B4BA318335FD2D371BE7E0F4BF37A2B6AB1349DBDD383CFF75CD2FF - 69926D7C1E357C273BA0E1F0FAFFE73DFEC1C9464BB6D16DC6FEC2C8D7C66936 - 0EACC09A80B77D6CC5FF58C657CF9854DAAAA31B0F4AFD270AD7B29176E6AAF0 - E9D2DEFFD9C0471F97FCC3B2A8E8BD931D358A2DC8D7E4F86B14FB2D62FF4E8E - BFF87F52F0FA9F6D92E6D081F161633BD9EF450ED32B2F64FDAFDA829C7FC12E - 5EC6FE98C585EEA831DF27C929355B071766B2EF21670CC8218FF1F7791A79B1 - D1B8FD4E7691EACB8FCB63B92E1595BDCFBE6B65ED902BF2B1393A75AE4FF811 - 177B9BDBD48B42B7F8B3EA5B7C81FC1C7BB31C6BC3D8C33FF6B11DF35483F32C - 9BEC3741AD83B607E853207572DE7CCC395AF53F740BF11E3E043E4DF8353E37 - 8E7793151DFDAA51E51A360CBEA3641DBBDE30C7E37DE001AF6DBE731D9B083D - 77BB1CCAF7312EC729BDF306F50CFD94CAD3286C838F8D285EAF63533DCE389C - D9FA8EFFEF263A53B240B3A9141DFC14F48107BC1883B19011FEB7F96C3C64D6 - 17CDEBF9EEA8FAB35BB86C4707FA643EB455EFB8A587AFBEE811F5FBDE5EBEF0 - E2B6A3BC2AFF7ABFFCDD724946025F13473A7C1488BFFB3AB4C9DF71610CE7A9 - B0216F58519231D4E73FFB718FEC53FB1FE867FB68D3FAC18B31389B8A58FF9C - EC56F17F89AAE5BDF29BB65283FB09AA2F7C58109ED1A6F5B756A529B1D6C56E - 33EDEF9DEC3ABDBDE232664056DDC1B9A6BF4D03AF8A3F434FA7801568635AEC - C09E89733DFEDE18CFFF6E2EDF34CE6BE51B3DF0620CC6420664611F215B8B61 - B26DC256612FD059E80DF64EDB57816DF1DB3C31073E06637B7EC3C3F513B281 - 216C93636A6735F017B059597FB0875847BDF76E3FFE2AD5ECBE9D8E6CF9B11F - 54B37B26B557AFD25D07C880EEC8FA0B2C60025B7CDFA3FA8D50EF04192776DE - A6E6E88E566E771F89B32EFE8CB613BB7ECB79B68594A3F93160A30ED1FC26FC - 47B07D56B1711EF6BC1CEBF08C36F4610EC1F402189A1FD76A20F86E8C177E8D - EF136C595E2F6DCD8D7CAF54C3A48227702F200B3255BFD521B0746288F0A3DC - 97E9ED07F618EB1C2CC68BBCD3E968AB29B84377BD859F0CE18FD5BC8F4E17CF - EF23037A16786E63902BE51FD93AD92F8F852C5173863C7F0C8EEF76C56D3551 - E37E122E7EA4EBAFD470D6D7DF94FE719D526D664990B3FAA556F5CF92FDEDFA - 0DA9B55CAABC0E6ABD83B31D3FFC9215FBB3EC7FB87DABFF6B6BC35E43DFB82C - 3C0B9F68D5FF18FBDFE5C6FE97AF6FCDEE3BB84E4EF6836A0AEEE46DAB83F8DF - 3443FFAB1F7F12A2107F86EAC61FBDF88B586977FC15FFA73388BF839D7F04CD - BF780EA5E45F6916F2AFE5DA59DEAD369C9FAC0C37FFC43E469EFF3A2AFAE5DF - 2EEE47B82FEB937FBBF4F2EF21E591FD3658AB3F1EE9AD3F7698AD3FE6455C7F - 0C76FD35D8F5E797A1FE1E08E2F39EC275D52D9F53F639C372C55B3A7BD2E3F7 - 64382A0B9D6C82BE8D0D71C35F9EDC773F0552D9C6F3A93C7BBCF8B6DE2C956F - BE848FBBA057CEDE59549A95E8E57A715C6F0EF0C7A7F6CFD6FF8DAACB41A78A - 17187FEB737203EF7F5A90F6CD38F8314E9673EEC49B867308F45F81BF51856C - 237CF4F5F840954F6B0B94A5CD81FB8A238381AFF8EED94ADFA0E13FF0D5C2B7 - 49FFC2C53F9CF7036E4FE3A9CEFD4FAAF73C1B92C007FB3B9C77992DF8E7AADF - 1073703BE34CDE2DE110D8D0753BF0EDA6AF027E7BF5EB7438D7C29A1B529C90 - 833DB4828F31E5D9DFB7E4F38D63C178A13F56F043D99C150AB44553F8217C8E - 35FCBEBE28861FC38FE1C7F063F85F2AFC3EF54774E38FC8BF7DFDEBAFB15E9C - 1BE13CA7EC838B440E6736E70B9E0B5E2CE4412EE40387D71F45FDEACF0C4771 - 9FEF542DD69C41EE1AA3BEDF123B8A3C19ECDA6FF29D7BA1CE393C4E96C6D7BF - C18EF5F764C49FC6B74066CF44146C87BFBAE05E5BF23FC8813CB78BFDDB143E - 9F6F75C17DB6DEF526E6C0E59ABD8FCF2EDFD3CF07C5F063F831FC18BECDF81D - 1DA7695BC9595A96D74E4FBB3A2879F3394A2F68A1BAC686A8E3E71436D32F5F - F6D1A485D48FAE49F6D30BB9ED547DF01F51C17F655B5B0FD6436B3BC9B5A785 - 3E2B6FA2BCA2664AFAE01C4D49F18BBE7B5656D1BE7589B6E2E3BD217BEA123F - E51BFCFEB8A6A181EE7EB55BF0CD7939DD367CECB7B6E6F9217EFB7CA6B98166 - 2C6B17BC573C4B37DA810F5D83BCB9EF7499DA27EC0BF8AF4CA2B576E043CF21 - 0F72CDE037B59CA649CF917F521255D981FFB78C0E810F5D336B279317FB5B39 - 7E871DF8C99BCE097CE8B919ECEECE7AACBD97539D1DF8F02DC05FC46DCC0CFE - AE8A26CD4EB7D8810FBF06DF02FBAE6D087EF78EBFBB9E66AFE9D2F4EF2F76D9 - BFA683B0EF3306F7FF003B255BE1BB6A31354F4EA26FDB85DFC97DC0ACD715DF - 025F005B38CBF51C7DDEAE7ADAC9D75C7B6F8D7EB490F65E934463ECF2BF6DED - A7E9C9F48E3E183F4BF5D3558B7AFFBE7EA9DFD21C94FCFF5E4BF16FCF174DF4 - F7CC0EFAD5721F5DBD98E886177D34E7ED2E72F23569387B9A662EAF343D07F1 - BB09579CA87F22A9BD35829C3DEBC6F867A41CA9ED131F93683FD7C7F3F5EA3F - CC41D46D76D47FAEF87AD45E8FA56D1C8BF70E9843DE40D6B658F38039B40C74 - 7D8D39E0BD817DE573F4C437FDBC2176FF7FECFEFFD8FDFFB1FBFF63F7FFC7EE - FF8FDDFFFFF5B9FF5F8F06F2FE7F231AA8FBFFD38B151A8CFBFF5FD9A3E81C08 - CF0379FFBF867DD94A858CE660E7FDFF1AADE6A6853599B882687F0D51217FCF - CBFFA3CC6165415F5E3BEFFFD7B0B5F73E50DBDB8E676D1DC023E3DB79FFFFAF - D712FD30005B9E03FAC013ADFBFF8F362A64647772FF40DCFF1F8C06E2FE7F23 - 1AA8FBFF8D7C5FECFEFF2FD7FDFFFF0772BC0160 + 4C69020000004C7A0800000018000000180000007C0D00000000000078DAED5B + 7B7054D5193F09092420D2FA2CD8711C3B7D80B563A11DDB4AA1557C576D5544 + ABA2765AF131AD566C6D1995845005A5AD82150119671031D9CD06F290F01248 + 10159A44F2B8BB9BF04822813C36BB9B04F220FBF8FAFDEEEEDD5C36F7EEEEBD + 091566F2C737BB7B1EBF73CEEFFB7DDF39F7EEBD4424E81C3667FEF83B9D0597 + 1EAB2BBADC156D2847FD90F01923D07B84C8EF1A642877164E6C1A0A7EDD4757 + B469612B76F4B3FB3C5A6B8B67CADAE3E19B3565EDF1F03D8796D1A1ADDFA5C3 + 5BA718B2435BA6506DE1C44ED8A12D9375DB1DDD731305BB76119D283564016F + 31390B2E0E38F32F0AE0BBD1FE89D8C1C24901D899C056F0EB0A2706CF143EB0 + 99FF2E337D4B1D9534E743174D5AD64FA31705E5CFFBF9F71EE781481B60D715 + 4D6A3382EBEBDC434FE435532A63DE6F0DD2DA0AA20227D1BBE544732C41B9FC + A98DC7E576C0368A0FECCBFE19A01D87898E7585ECB07BE0FBF643C46B09C863 + 18C52F614EC0851A5B6A231A9315FA54CAB6F11858C7FA0D777B8DE0836F70A2 + E0C02A8E73925918FA549783AB5B9717F719C19FF8BA8FD69487FA57B5107D7A + 94A8D019C2C7277EA31CF5ABCB882E7DD51B30820F6EF29D21BEC10970A30DE5 + A847BBD1993E32820F0DBE6B64FEAF78393F5C782CD1FCF040B64BE63511FE67 + E704E9FA3776B8E5FD8BC7E05873C5B3F51BEEE948C90CC8FA88A59FAD0789D0 + EEE7CBB6FEDAE87E949A49EF5CB494FAD463A8F50F6CD4A72EA2FF98D9EF4406 + A5608CE44C0ADC9B437EE809BE04DF7767931FE55CFF36DA0D655F152FD175A3 + 1791352D8B5CC919E44B5B4C6DFC3B87717F76B69C5D248B18CD768B3D376DB5 + 7DE3840A47DE794D307C976C6356D5E4889BD1C630768648E67E8FDA6DE96D7C + 0EE86EAE98E7EBA87F87BA5B0A64C3F7E6F2C77DCE824BBA255B7A6B8D55CC45 + 9F44B00FAE17E74B79E91FD7164EEAE96C5CCB7B7C5B8C73421B7534ACA1DA82 + 6FF4D86D63B7A36F3C6C9E735D43E9F5BD81BE7A43679186DDBFE8B5E7A5D7EA + 8E014EF2D2773494FCB2977CAD9A386547BDB269D5057D2D18A3CF6E1BB75D8B + 2BF6D523E024D6BCAF7CC32F5BAC7580AB6A8B78385A27F065886F7D1EB02FC1 + 62B5813FE073B5AEA041E824B62F13C307868375556D153729F8765BDA1A6830 + 9E1F13C377B176FFE0437C44F0374DA8C0BA860B1FF1E1C89B5016C1CF1B771C + 71335CF8275B36919DE37C00FFBCA6932DF983B478D55B7E2A7474EAE2A30E6D + A2357BB27923396C03F8BC96F28EFA5583F0391FCAA68CA1C64799521F8D2FF3 + B3F1FCFF46E6CFF90BF9247A9DC5B59D949615943136499D11FCCDCE81F27C7B + A7867F7FEF9372C7AC54C5D6CDC8555AFA548F71C192205DC8160B3BA4CF8BBB + 39C66E3C2D0F734CE86948E1226961C8D49C0DD6CE2AE2586D2E5B25524FCB0F + 9C6311DB7AD792C053F0F5B0FDBD87393F5CDAC3F3FDAD567EE31CBBAD61F7CC + 5EE42AADFEEB2ABA64D3CB6FF5BB66F649B6715B182E49373F738E45AED55B87 + DEBCEB77CDE8658E1DCE7C313EF6F5BC186FCF1BBB0D5C85FC11677F61BE591B + 3D926DEC9678D86AAEAA73C443F03974857CD251BF921083307C870691C778CF + 6891ACE2C144F7C7E8BC8D3CC8B9EA1D8E9732657F476E617DBF0D0D46EBE4AC + B5D099621DCC0C17097075798D45100CDF87862792B01FB38F172873757C28AE + 50F0F15DA5830568ABA7F968ABFA407C9D318A152C7BB698AA878F3AA58C6DF3 + 171BC5D7E27070016BA23CC28355ACB558C4283D7CD4A18D8AB732CC4F97138B + 280CB7EDE7353FA0AED7E4479917EB5FEE13AACFD7E20AE74DD53C06E5A758F8 + 30C463842B9C4755758811C63C12E6E47DADF5C5C30FE7E00DE1368777ED1291 + EB0BC46878DEFE2A9BB8D22C7E75B6F816D707645DE4885991712D6205CAD8B7 + 257ABE4F043F8CB5476E9723FEAD2ADB159EFF625DFC3C7121B7F1C1F05D17DF + 2A9684E7BA5D85EF08733F2F967E79CD3360B1DA30EE93E1754A2A7C293CE693 + 43CD23CCCBD361FC1A15FE8E303FAF0D159F75BA2C8CB52DBA8CE7FFD990F119 + 43C662CC48CEB18899E13505AB72C5F74C63678BC9C008EB73863AB773595D78 + 8C4DA6B9B7888230466D748E60BFDC13896FF69109DEFFA4F4678E7E1327BE03 + 686F80F36794B8E57EEBF5DA95158AB1DCA654358F8F5807D7E8E6F35CF143F5 + 5EC16D777F6A11E9B1E6827AD53A14ABE0792DE7F89B0FC3779445B5F9A0FE3D + 9196F07E6B1577719FCA280C2D3BC0FEBA6308FBFA74C6C80457FCB99F6D1F97 + 15A18C71AF3B9BCF3CE1FB33F7B21FAFD5F0EDB5A833737E439F1A6B7296644D + F548D69480949BDAAAD605BE4BB6D416B98EDB802B23E3383F1493E03B57E53C + F27B8BF99AE1923EC992FCF2C0BA925F4619EAD0066DD1C7C81AF89AAFC1637F + 5EBEEFD979308BA4DC517DC85330C93AAAB7F3D062B90E6DD0D630F7D6E4E58D + A5D34F29F756EB3F9EDAA768B2FEE3697D4A39DAA06D3C3F46AF8F63E8777C9D + D61FEF9E2EDAA06D34BFEAFB27B296915373D31A6B2CC92B38B61E9372534E34 + EFBBD71F0F1F6DD0167DD0175C85CF408B22679FDC5437FC042E1B4BA6F7634E + 21EC9281FFB33AB6D0C9C637E9C4E1D7C8EF29528D51228F813EE00A18AEAA27 + 48D61EF46D15B3A133BFDE3DEEAEDD681FB45B5330CF1E9E4B27FBD7DF5A3137 + 803AAD3E7EEF660A6957CCE633F04FA065E84DD184DA5ACB1F86FEBD728E099F + D5E56B262E73553D39E8BF2D684DD633C70CB023F1C29A8606EB77FE28A20DF0 + 80B9AAAFF5559AB8136B026F118DED98760A18C042AED738DFCC62BCC8FF795D + 479612F8D0BC76C0F512C74177E38A083EEB149CDC102327DF80364AFB938DCB + 099C6B5F6F8924E8E6C491652AFC5101F5B953BD6F45F8E135AA3523FB95B9D0 + 3847DD0CEEFC9E8F06F8616E157E947C25FB977D21FB977D13ED2FF810BE0CDD + 0F649E645EC45DF6DCD48ED68A4707FD370A8DC8FE65CDC8D8117D6ED6D5676B + C52301CC351447A37AB1A6F6EAA783FAFA2C8EE8331403A91EC4841C5F1C235A + F1051E4E1C799DBABF7C8B79DBAA1D5F1C9B727C71AC2266959C8D580EE78786 + 61C80F8DE13C98F9FFCA6F89E5E769AAFC3CD5507E8EBBBFB026E0D7C8FEC21A + 54B466667F39D3FBA3BCBFB37F22FB3B6B79D0FECE3113D9DFF92C60F61C11EF + 7C62EAFFA3E13E4759C73CCFFEEB39FD5C9984188979F60CD5270DFCB6A6B878 + 3D5306AF35A5C7E378817A9AD644CC91378EDA9D8BA9A77D87AEB53B169163E3 + F8489F637B6FF5B3AF3CB84E8ABAAEE1FAD5A7C5BC5CC618D1F7245BABFF22D7 + E1B3A77DBBFC5D9DAB9AF6DEE2E3FCD47646F0D98023977DA5F8A5CCFF78E637 + 2B0EFF99CCFF0453F85EE7DFF11F444CFD00DBEB5C600ADFAC7DD5F85EE7DFE2 + F23298A7F3C9EB589010BEECD73871A51D671312C0D7D7652C53EB74047F047F + 04FF747CF5FE28EF8B71F2B2769E0EED931EC75F43D7246A7CDB98F9284B745F + 8FB5CFCBD7988C47E7F873C99AF7E0B3C577ECB6B1E592252960881F6E6FCF4B + 2F43FF986766C63EBAF74E7F8F6B8B21FFA2FD979FFCCA8F3162DF47490AF4B4 + 159B7A5E18FDD03FCEFD6359CBA6F0951818C13FE7F1FDFD2EAA6BF6D0170D5E + 7277BA870DDF77CA452B7776D34F970469CA4292ED2AB6C7DEEBA703CECF8784 + 0FECC7D79DA2ABF9AA7C617E2F7D52DB49071ABD94B3EF04DDBADC4F53B302B4 + E1BD59A6F1316F60EFD478A6A5BBA79D1E5ADD41D766B90357BE40138CE2836F + 708279EB71D7D4EEA1AB328281C92FD33346F16B8F7B65AEF7D675C4F4FBCC65 + 8123DCCE6A141F3C03BFB2D11B13FFA6370235DCAED8287E7B875BD68965FF09 + FD67F77C2E9AF68F6007E3AF30E3DF475983B7B14E7AD8975AF5D9AC2359AF19 + 34DD0CBEE39897A62E0ED2DCB5FDB22FD5F306F6F73388AECE20DFE40CBACD6C + 7C7D7AB083AE5B1A9075FAC06A9F1C0F335E0FC8F3BE665138E632A88F3574BB + D9FDA5EB643BADDB7B929ECDEEA379EF9FA2ACA25E2AAFEFA09D550DF483CC80 + 3FD618D8DFBEDC7B87C9FDF176DFAAB573EB80AD1AE3C641FB3B8F61667F976C + E9FBEDB9E2DB98B732C6E485547826CE21ECE359C0E6CF19E7FA996AE4FDAF91 + F7BF46DEFF1A79FFEB4CBEFFA5B6E17EFF2BFAFD9AE17EFF6BF93E60853E87F3 + FD2F053B85B11FB4853ED5630CE5FD2FF45FB93F34EF373FD7FE3D94F7BFC077 + 7AD6604EF07BECE250FD50DFFF8AF669B4AF87EBFD2F2D1BEEF7BFA2B147DEFF + 1AEA99458CC7F369765BFA5EC99A86FFFF7C922DCD2DE5A5EF91ACE28F92459C + 67FA193CABB85FCA1DEDAD2DFA666F6BF57CEA3ABA9EBADB365357D307D45AF5 + 1CD5165DD62BD9467BAA2D628E71EC9497A4DC14BFBB7609057DCD3AEF113493 + BBF655FC57E7E7F62F1A9B778A3FFA3D18DD77689A37CA63E03FFC44F80627EE + BAA586CE38EDCE5788FBB9E3F9033E03DF7A9CE819DAD7164DEA8DF73C245F1B + 7CD25A35DFD439ADB5F2CFC4D724A5B1F1D33C5D4D1B4CE1771D7D9FA0DDD8BE + 4DF6418366F0D10FFD63CE3F37CD0D9D9B9DBFDD96D61E97FFCAE7CCF36F4B2F + 89AF9FCB8CEBA7FF38CE50F1F5C3FA45CC232E8DE97FB1ACFFCA75625C02CFD0 + CE413C222E13C1F61CFC17FB3529C8FD1C5516312DC1FCF322C6405CEAE61FE6 + 04F306B6EA1ADB5B932D7E9CE073B1B3B166C4257C17C99FFCD95AF9ACCC37EA + ABC3CFC49B1A83FD019F212E113B4AFE874E380F3E05BEC1898C69728C849EB1 + 09BD9FE23EFD5E84E8D07A9EE46C1E039C6870E536FA4CABD131780FBF6F38CF + 05E13114AEDA8773FE03FF11898998373EF1FB7F14E5CB484C7A080000002000 + 0000200000007B1100000000000078DAED5D7B745C55B9DF9974A50FC2E5A108 + D7A556442E88970A852A77C9A317D47F40051F57C0AB022D02AE6B1105EFBDAE + 0B4D9B48A0087DB816521EA22C85666692B6B47968436DB516D296429299499B + B4499A263369D234695E4D93CCF9EEF7DBE79CC9C9E49C997366CE2402F3C7B7 + D6E9397B7FBF7DBEFD3D77CE7C2522411F606AAA10B31BCAF2D7864AE7F505BC + 82CC08CF426567AC097A459EDBF8C06ED979DDD0E8401DD178B7298D0ED452CB + F66B87421BF357BB8D8F77037F2BECD81AFADFA560D919BD6EE343BEC9B075E2 + 3D18B3DA2347E4CB1D6BD874F6AEFAD7C4C79DE0BB45CA680775D5FF7CBC61E3 + 59BB67025F5F03E4E0041F3AD0B6EB666AD8744E5AF23FB0F93C8AECBF3FF66F + BBF8CD6F5C4D5DEF2CA1F1135B8906FE9A328D7597D1911D5F64BBCE93F891FD + F7C935255B7743D99944FD3BD2C2D669B4BB9482A57328E8CFA3233BAF956B72 + 83AF13527DDB9C19C1D6F1E5FECF007626F0FF5C5F4F4BFD11BA64ED309D5114 + 9574295FDF5B1AA16D81BA8CE11F6CDB4BD7BFD047623951EE0AA285CF11DDF6 + 9A4AB8C63D3CBBE1C53E6AE4B16EE2EF08D5D239C56334A788E8275544816344 + 1DFD93A99EEF2DAB243906637736D4BA828FF706BF0B9E52A8EAD064CC3D1D2A + 19EF5536119DCF6331077248171F329F5B4853B0419F7F5EA5F8FB154DAA1C16 + F35EA4830F5DC39E3E58391503B4E05995CC9E2DAB50F5E1C5DFDE94323EF47C + D60A756F9DE2D775AA3AF9ED35EB53C6878D5DB5DE9C7F327CD0956C17173E7E + 3065FC7CB66DD81778D5B4132D7A7E021334B74825E33D8CC158CCF93ACF9DB7 + 62282DFC5BD3C4CF5F399096FCE15BD291FFA78A0F70FC99DB8758E8141F3E35 + 374DFDFBE6DA974F23AF6FA95E3834DAE577840F7F0E1B5A9682FDFD58B3BFC2 + 97EEF7A1FE08F9E7AE0996CDED759A472D5AB593E61446A55FB3EB7FCA1B8966 + AF8CD245C507DAD2AD67C4FFD1C59E15D4F7E155148D5F8399FF85EFC3584F01 + F5F2DC8BDCA81F44015D8F35CC2EA428FC1AF6D66CBF21F3BC951AF6A3749D9B + 350CE49053407FC19EF25A942BD79302DF00FBBCE23952700FCF78CC76B7DEDB + 741D8FD14D8CB33E673935F07B0E81708D7B2CA71BDF17F5FA1FC43F854AC4F5 + 419FF86EA0443C04C235EEE159A6CE0818E7DE802FE74F016FCEA8B54D7AF859 + 4E55C02796624EDAD805C2535F22FE33E0CF6D03FFA68A0BC73B6B97D160A494 + 467A775374E488245CE31E9E35955F388EB1415FEE11B6EF3BC123156C9E9BCF + EFBB09BC0EFF694174305266BB4E1BEAAAE05A6DD1B85A6BE754ECF38AB31C62 + 7F22E8F304F81D949EC6279967570A356E17F51C7C82EBAB5C25E89B15044F3B + D807368B3331BE61E399E3839D9BD2AEB307231B09BC02FE5921F04EB6DFAC3F + AFE3BDED60779DEC9164670D9003F3DECC30399672874DF19EF534AE4ACAB3BB + BF87CE2A5624E13AD978EC85D44BE8A4F99EE7F17BB71EDEF6B9713BFBBDEF68 + AF8CA1205CDBD107E8316CC9CC36A57DF3FA202B3BFBEA1CBF5BDAA86A1362E9 + 147CF62D4DE59F1AB7AB57A9E083E043580F2AE37D2ADF1BEBAC7D90328DDFF9 + EE8FA59F34FAEA3AAFB841957D69C6F107C37EB907C034E8DE9DB877BAAF26E3 + F823BD6FAA3A5022EED0F1D9C73F8C7BD19156DB769E083F915F00861A1FC4CF + 0C76FF3315BFC5D2CECF7C5CA1BF36F725C5C7188CB5F20BD153CDBA1FF8A9C1 + F6EE90F2EF7DCB141FFC8093FFCB893598E1E319C6E01EE698E123566A3678FB + 14FD63DD3093D9AE96BED81AE61529B4FD50DF147CB33166BC06C23E33FDE358 + EB398DF86DA537F1FC9FAB1988E1BFB477C016B66A7FFF25ED2F3E16216F692C + 9F9FD0FF18D730A75089E103D30E36A8B1E293E3C809A6FA3FB154F50189F30C + E31E1BC9A81BC9FC6FBD572C318D3FFEDC964355974569EC58D235CC33BE7F61 + 726C35FE5C1E455E66951BC6E22FC7CA647E644BC349D41392709D3CFE164FF1 + 3B09F30F1B71B0217242925BF9879E7F215792F997CD586C27FFD272C07CBBF9 + 27DB6390E51085DC52CF3F8B1DE79F66F97753E525D1FEF6571DBC73A9D4353D + FF4EBD2E1239888DD059F082ED227EC34FAAF547AB245CC3AFE199B46FB5FE68 + 55752DF17EDB94459EEA1FB8B6923556C2FAAB12F69D89BFD5EAFA29EB4FE40C + 7AFDC9D7B89734BF7F1F11F493F3967520BB76E52631EE327DDF713D03F80506 + FC824CE1B0DE7F9FF5B99CF5EB56BBF8188B39989B2AEEC157C58799C746837D + 9DB08B8FB1FA33D68DB28632F12187BA7501CF0D1A6D9BD7B2CD2E3EC6C6F986 + 0078DAC43E97C71F34CC65FF2DD6EEF68AB976F131167330D7208703757F14E7 + 24F3B73C769301FB34FB976FA6AA7F8CF92D7E3E6ADC8B843ACD7ED3F8DEF53E + F18D74F55F5B83510E77599EB179459B81E7AFDCB23F96E16AC37BB59AC5063D + FFD4281CBFDFE9E0EFDB22E6F1B888419797987C07533DF17D8AF889DBFE47C6 + 2A0B5BD2747E4CDB9FF1FA57C5F96EE3874AC53FF3D8A83667F49D8DE26C83BF + BADE20FB1A5B76EA13CB633AE543166EC3677BC5DB063DBC36FEEC47A3976DE2 + DF045949E26B9B31E30F0699DD63D0BD9F1BF08BEDFAC93ABFB814643B969488 + 270DF80FC79F3F68BAF7440663E6AFCC749CE5779F615DBFCD582C2D11BF8FE1 + F39E1BF4FF5A836DBC9D317CAF7847C7E1FAFFDF62FEC12BCE32D8C6981DFB4B + 215FBB40B77160C5D7047CEF0D27FEC731BE76C6A451B5896EDC6378DE51FB8A + 38C3CD5C153EDDB0F73FB0F0D1470DFE615546F4DE2B8E58C516E46BC6F86B15 + FB1D62FF8731FEE2EF4989EB7FB1C5B08611CC4F19DB2BBE237398097E49EB7F + CD168CF917ECE269EC8F5D5CE88E16F3A3063E0D76EBE0DA52F131E48C713964 + 1BBFCF23C88BADE6EDF78AF3345F7ED4389775A9EEC06BE2A34E64875C91E756 + 98D4B951E9477CE2776C534F49DDE26BCDB744E3C733F65663AC4D610FBF37C9 + 76EC5318E7592ED96F9E5607ED8CD3A7783ACD637760CD99AAFFA15B88F7F021 + F069D2AFF1DA18EF46273AFA5EA39697C51CF88ED006718D658EC7CF3006635D + F39D1BC445D0F380CFA37E1FE3F31C333B6FD0CED08F69637AA56DF0DCB4E2F5 + 06B128E8CDC1996DF4E8DF6EA413A187759B2A32C12FC2338CC158CCC15CF048 + FDDB7C311F3CBBEBEE8F7D77D4FEF7AF306FCF089E19C7E15EFBAEAFC4C675D7 + 3DA07DDF3B312EB5B8ED696CDD718D62FC6E39E4CF6399784AE0A340FCEE1B70 + CFF81D17E6F0982617F286B521FFECA872F28D18EF63FBEF9E62FBB8A73FC758 + CCC1D954DAFAE71537CBBF4BB4AE9EE0DF574D3D8187A8BBF63E49B8C63DFDF9 + 60EB1A35D6FAC42DB6FDBD575C65B657CC63317875BDBBD4F6B76918ABE12F36 + D32960C5DB981E3BB067F25C8FDF1BF3F9DFFD8D5B2E1877F28D1EC6620EE682 + 0778611FC15B8F6146DB84ADC25EA0B3D01BEC9DBEAF12DBE1B779720D3C0773 + 63BFE161FD046F6048DB644CFDAC06FE02366BD41FEC21E468F6DEC3477F43E1 + B7BE4ECDDBFE550185DFBA9586DB9F3395037840778CFA0B2C60025B7EDFA3F9 + 8D64EF041E1DBB6FD17274CF20DBDD9FE559175FE35EC79B5FE331DB93F2D1FD + 18B05187E87E13FE23D13E6BD8380FFBA531D6E11AF7F00C6B48A417C0D0FDB8 + 5E03C17763BEF46BBC4FB065A3BC74995BF95E430D538C31F17B015EE0A9F9AD + 1189651243A41F655F66B61FD863C839518C9779A7D73314AEB9CD54DED24F26 + F1C75ADE47C7EB974DE2013D8B3FB7B1C8957634572F508C73C14BD69C49CF1F + 13E3077C39D5366ADCBFA48A9FAEFCD51ACEB9FC6DE91FEB9466338F2738AB7F + C2A9FE39B2BF37BF4A5A2D576C948356EFE06C47815F72627F8EFD0FDBB7F6B7 + B621EC35F48D79E15AFA44A7FEC7DAFFAEB6F6BF2CDFF05BB7B14E2E5040E19A + 6FF0BDF509FCEF1A4BFF6B1E7FF232107F669BC61FB3F88B58E976FC957FA7B3 + 88BF339D7F24CCBF388752F3AF350EF2AFD5FA59DECD2E9C9FAC4B35FFC43EA6 + 9FFF7A9AA6E4DF3EF623ECCB26E5DF3EB3FC7B56637ABF0DD6EB8F0726EA8F5D + 76EB8FFBD3AE3F66BAFE9AE9FAF31FA1FE9E0EE2752F645D0D18CF29279D61F9 + 721D9D3D998D0FFA3D2DB55E71A1B98DCD0AC05F76EEFB2EC5D381CDE75263F9 + 7CF96DBD5D6ADCFA099EF7A1093E7BEFA486B2FC71D68BA3666B803F3EB6FF2E + F3DFA8FA3C74ACFE61EB6F7D3A37F1F34724E9DF8C633CE619F99CEA78C9720D + F1FE2BFE37AAE06D858F67311FA88DD3EFC5F3D2D7C0BEA27926F055DF7D97FA + 6CC6F0EF7E6FE1BBA47FA9E21FAAFA34DBD37CEA0AFC82BA838F26258C83FD1D + AABAD815FC53ED2FCA3504BC39367B4B78243674DD0D7CB7E9BD803FDCFE021D + AA7420734BCA917CB0874EF031A7B1FC938E7CBE752C982FF5C7097E329B7342 + F1B6680B3F89CF71863FD91765F1B3F859FC2C7E16FF1F0A7F52FD91D9F823F3 + EFE8D4FAEBFC719C1BE13CE7C0EBE7C91CCE6ECE973817FCB8E407BEE00F1CAE + 3FEAA6D49F7E4FFDA4EF541DD69C097A8DD1E46F893D7541BFB8F283DC732FD9 + 3947D02BD6B0FC7BDC907FD09F7B1CDF02D93D1351B13D4A7BCDEDAEE47FE003 + 7E019F78C6163EAFB7BDE60E577BBDC935305FBBFDF8DCF23D537C50163F8B9F + C5CFE2BB8C3F32729CB6874ED2AAAA617AC43742855B4F5149CD0075F5F6641C + BFA2B69FFEFDE9285DB69CA6D015850A3D59394CEDEFFE6F46F09FDD3E14C3BA + F795D3E4DB33407F6FECA3AABA7E2A78FD142D2C52E4B36FAF6BA57D1BF25DC5 + C77B83F7A2C715DA61F1FBE3704F0F7DEB376372DC92A74B5CC3C77EEB32DF91 + E4B7CF27FA7B68F1AA6139F6D247E90637F0A16BE0B7F4F7A3B6F609FB82F19F + 2DA057DCC0879E831FF8DAC1EF1B384E973D46CA6505D4EA06FE7FFB47243E74 + CDAE9D2C58A90C32FE881BF8855B4E497CE8B91DECB1D3DD90FD3853971BF8F0 + 2DC05FC1366607FFCDA63EDD4EB7B9810FBF06DF02FB8EF424EEBDA38C75D35D + 2F8FEAFAF743B7EC5FD741D8F7098BFE3FC02E2A57C75DBE92FA1714D047DCC2 + 3FCD3EE0CE1754DF025F005B38C97A8E67E3A3DDB49B65AEBFB74E9F594E7BAF + 28A0B3DDF2BF43C3C7E9A725239330BE50ACD0E52B26FE7DCD138AA335A8F9FF + ED8EE2DF9EC37DF43FA523F4A5D551FADC4AA2EB9E8AD292DF8D929765D273F2 + 38DDBABAC5F61AE4EF267C39B2FE49A7F6D6097CF66C385B595CD41C99141F0B + 683FEBE3B966F51FD620EB3637EA3F5F6E376AAF07D76C3E1FEF1DB786AAE9AC + 6D21F3B8350C4C777D8D35E0BD81FDD9C7E8A10FFA7943B6FF7FB6FF7FB6FF7F + B6FF7FB6FF7FB6FF7FB6FFFFFBA7FFBF194D67FF7F2B9AAEFEFF25F52ACD44FF + FF67F7A83A07C2F574F6FFD7B12F5EA792D51ADCECFFAFD37A362DC8E4A2B544 + FBC344B5FC9E97FC5A5DC3BA9AC963DDECFFAF63EBEFFD4E64E23EAE7539608C + 11DFCDFEFF5F7E85E85FE2B08D6BC0338CC954FFFF23BD2A59D99DF1F974F4FF + 4F44D3D1FFDF8AA6ABFFBF95EFCBF6FFCFF6FF4FA50FA5FA1B81B89EFF7CCF8D + FE92897AE6E07B8080CF1349F0BD6F04E755EEF6EC1139E82312F47986F10D6B + F3F62F28DD21DECCCED765AF4DD9EFBF7333758796F3B3CF2BDA3A86D49E4EE9 + C943F6AED37E83D95CBD4819EEAAB4D5EFFFF0B6858AD65BE7B5D47F7F22DFFB + 55F95BE6BDDFE71A356CBF9E1D8BC8EF2DB47DF1A52207BD0F57F8EDA529D7D5 + E17D774FE9AF6DBB3F13EF21648E7749BDAE0FD3E16ADE0BE883039D947ACEBA + 6667BF93EAC3B172BD8FD433F6F7DD13819EBB75BED1FCC6227C6B15B6A307F5 + 7E71B5FC9D1BDB985BF8DDA1C7D4FA5AFAA8A43D2E64DF67D8B45BF8E87B9CB4 + DF735CFF3727FDEFEDF6B9B763077A6F30CC710F7FF7943EF309FAC2DDA1CA7F + 938BF28FF51AFF8E9DDE1FAAFE2D775DFFEC7D6BA8D91FDB8C7BF677B512F47A + 3AECFA61BD47276249FAFE67ABAD1EA2936C807D257CE6E1EAAB142771C7D4FF + 6EBB8263A167B0B64C7CC4490CD0ED30BCEF9EB4BEF5D36320FA7A3A8EBF5EF1 + C754E36FC7DEEFC5E7476D21BFB8D8E9F79FC821E4FF3BC439851D7DC07EAB32 + 37F9FB9F57B43B5D03E420F742EB6B801C0BF6049F1ACBBFF81A7FDF849E6BFD + 10D083C5EFDE1A749D14CFC08E2CFFBEA93E7B1ABAA6F5716D73730DB13EF0EC + 47A49FD4F26F5CABBE65B27D03035816EB8DD46F109FC9F8EF89B36BB0B38636 + E7FEC1E535F8C48FA6E5F7E5566B98267C7D0D71B6D93A1DF28FEFF3CCF9C803 + 201DFBFF01B4264FDD } end object popLastDirs: TPopupMenu diff --git a/tools/icons_to_html/main.pas b/tools/icons_to_html/main.pas index eab644ef73..df2af42b6a 100644 --- a/tools/icons_to_html/main.pas +++ b/tools/icons_to_html/main.pas @@ -18,6 +18,7 @@ type bbtnCreateHTML: TBitBtn; bbtnSave: TBitBtn; bbtnShow: TBitBtn; + bbtnPreview: TBitBtn; cbDarkMode: TCheckBox; DirectoryEdit: TDirectoryEdit; ImageList: TImageList; @@ -28,6 +29,7 @@ type TaskDialog: TTaskDialog; procedure bbtnCloseClick(Sender: TObject); procedure bbtnCreateHTMLClick(Sender: TObject); + procedure bbtnPreviewClick(Sender: TObject); procedure bbtnSaveClick(Sender: TObject); procedure bbtnShowClick(Sender: TObject); procedure cbDarkModeChange(Sender: TObject); @@ -41,8 +43,8 @@ type private ImgDirectory: String; function GetImgDirectory(P: String): String; - procedure ErrorMsg(const AMsg: String); - procedure InfoMsg(const AMsg: String); + procedure CreateHTML(HTMLLines: TStrings; Preview: Boolean); + procedure ShowMsg(const AMsgCaption: String; const AMsg: String); procedure UpdateLastDirs(ImgDir: String; Delete: Boolean); public @@ -61,6 +63,7 @@ const ConfigFileName = 'IconTableConfig.ini'; IconTableFileName = 'IconTable.html'; InfoTextFileName = 'lazarus_general_purpose_images.txt'; + TempFileName = 'IconTableTemp.html'; DefaultDirectory = '../../images/general_purpose/'; LastDirsMax = 9; @@ -163,20 +166,83 @@ begin Config.WriteBool('Options', 'DarkMode', cbDarkMode.Checked); except - ErrorMsg('The configuration could not be saved.'); + ShowMsg('Error', 'The configuration could not be saved.'); end; finally Config.Free; end; + + try + if FileExists(Application.Location + TempFileName) then + DeleteFile(Application.Location + TempFileName); + except + ShowMsg('Error', 'The temp file could not be deleted.'); + end; end; procedure TMainForm.cbDarkModeChange(Sender: TObject); begin + bbtnPreview.Enabled := False; bbtnSave.Enabled := False; bbtnShow.Enabled := False; end; procedure TMainForm.bbtnCreateHTMLClick(Sender: TObject); +begin + SynEdit.Lines.Clear; + CreateHTML(SynEdit.Lines, False); + + bbtnPreview.Enabled := True; + bbtnSave.Enabled := True; + bbtnShow.Enabled := False; + bbtnPreview.SetFocus; + UpdateLastDirs(ImgDirectory, False); +end; + +procedure TMainForm.bbtnPreviewClick(Sender: TObject); +var + HTMLLines: TStrings; +begin + HTMLLines := TStringList.Create; + CreateHTML(HTMLLines, True); + try + HTMLLines.SaveToFile(Application.Location + TempFileName); + except + ShowMsg('Error', 'The file could not be saved as: ' + Application.Location + TempFileName); + end; + HTMLLines.Free; + + if FileExists(Application.Location + TempFileName) then + OpenURL(Application.Location + TempFileName); + + bbtnSave.SetFocus; +end; + +procedure TMainForm.bbtnSaveClick(Sender: TObject); +begin + try + SynEdit.Lines.SaveToFile(ImgDirectory + IconTableFileName); + ShowMsg('Information', 'Saved as: ' + ImgDirectory + IconTableFileName); + bbtnShow.Enabled := True; + bbtnShow.SetFocus; + except + ShowMsg('Error', 'The file could not be saved as: ' + ImgDirectory + IconTableFileName); + end; +end; + +procedure TMainForm.bbtnShowClick(Sender: TObject); +begin + if FileExists(ImgDirectory + IconTableFileName) then + OpenURL(ImgDirectory + IconTableFileName); + bbtnCreateHTML.SetFocus; +end; + +procedure TMainForm.bbtnCloseClick(Sender: TObject); +begin + Close; +end; + +procedure TMainForm.CreateHTML(HTMLLines: TStrings; Preview: Boolean); var AllFileList: TStringList; IcoFileList: TStringList; @@ -201,19 +267,18 @@ var HoverColors: String = 'color: #ffffff; background-color: #303030;}'; begin try + Screen.BeginWaitCursor; AllFileList := TStringList.Create; IcoFileList := TStringList.Create; IcoNameList := TStringList.Create; IcoSizeList := TStringList.Create; PixSizeList := TStringList.Create; - Screen.BeginWaitCursor; - SynEdit.Lines.BeginUpdate; FindAllFiles(AllFileList, ImgDirectory, '*.png', False); if AllFileList.Count = 0 then begin - ErrorMsg('No png image files found in ' + ImgDirectory); + ShowMsg('Error', 'No png image files found in ' + ImgDirectory); Exit; end; @@ -232,7 +297,11 @@ begin else IcoName := Utf8Copy(IcoFile, 1, DPos - 1); - IcoFileList.Add(IcoFile); + if Preview then + IcoFileList.Add('file:///' + ImgDirectory + IcoFile) + else + IcoFileList.Add(IcoFile); + IcoNameList.Add(IcoName); IcoSizeList.Add(IcoSize); if PixSizeList.IndexOf(IcoSize) = -1 then @@ -242,7 +311,7 @@ begin if IcoFileList.Count = 0 then begin - ErrorMsg('No matching png image files found in ' + ImgDirectory); + ShowMsg('Error', 'No matching png image files found in ' + ImgDirectory); Exit; end; @@ -254,44 +323,44 @@ begin HoverColors := 'color: #000000; background-color: #ffffff;}'; end; - SynEdit.Lines.Clear; - SynEdit.Lines.Add(''); - SynEdit.Lines.Add(''); - SynEdit.Lines.Add(''); - SynEdit.Lines.Add('Icons'); - SynEdit.Lines.Add(''); - SynEdit.Lines.Add(''); - SynEdit.Lines.Add(''); - SynEdit.Lines.Add(''); - SynEdit.Lines.Add(''); - SynEdit.Lines.Add(' '); - SynEdit.Lines.Add(' '); - SynEdit.Lines.Add(' '); - SynEdit.Lines.Add(' '); - SynEdit.Lines.Add(' '); - SynEdit.Lines.Add(' '); + HTMLLines.Clear; + HTMLLines.Add(''); + HTMLLines.Add(''); + HTMLLines.Add(''); + HTMLLines.Add('Icons'); + HTMLLines.Add(''); + HTMLLines.Add(''); + HTMLLines.Add(''); + HTMLLines.Add(''); + HTMLLines.Add('
Appendix
Name
'); + HTMLLines.Add(' '); + HTMLLines.Add(' '); + HTMLLines.Add(' '); + HTMLLines.Add(' '); + HTMLLines.Add(' '); + HTMLLines.Add(' '); for i := 0 to PixSizeList.Count - 1 do - SynEdit.Lines.Add(' '); - SynEdit.Lines.Add(' '); + HTMLLines.Add(' '); + HTMLLines.Add(' '); for i := 0 to IcoFileList.Count - 1 do begin if (i = IcoFileList.Count - 1) or (IcoNameList[i + 1] <> IcoNameList[i]) then begin - SynEdit.Lines.Add(' '); - SynEdit.Lines.Add(' '); + HTMLLines.Add(' '); + HTMLLines.Add(' '); for ips := 0 to PixSizeList.Count - 1 do begin LineStr := ''; @@ -299,76 +368,46 @@ begin if IcoSizeList[isl] = PixSizeList[ips] then LineStr := ' '; if LineStr > '' then - SynEdit.Lines.Add(LineStr) + HTMLLines.Add(LineStr) else - SynEdit.Lines.Add(' '); + HTMLLines.Add(' '); end; - SynEdit.Lines.Add(' '); + HTMLLines.Add(' '); StartIdx := i + 1; IconGroups := IconGroups + 1; end; end; - SynEdit.Lines.Add('
Appendix
Name' + PixSizeList[i] + '
' + PixSizeList[i] + '
' + IcoNameList[i] + '
' + IcoNameList[i] + '
'); + HTMLLines.Add(''); - SynEdit.Lines.Add('
'); - SynEdit.Lines.Add('This folder contains ' + IcoFileList.Count.ToString + ' icons in ' + IconGroups.ToString + ' icon groups with ' + PixSizeList.Count.ToString + ' icon sizes.'); + HTMLLines.Add('
'); + HTMLLines.Add('This folder contains ' + IcoFileList.Count.ToString + ' icons in ' + IconGroups.ToString + ' icon groups with ' + PixSizeList.Count.ToString + ' icon sizes.'); if FileExists(ImgDirectory + InfoTextFileName) then begin try InfoTxtList := TStringList.Create; InfoTxtList.LoadFromFile(ImgDirectory + InfoTextFileName); - SynEdit.Lines.Add('
'); + HTMLLines.Add('
'); for i := 0 to InfoTxtList.Count - 1 do - SynEdit.Lines.Add(InfoTxtList[i] + '
'); + HTMLLines.Add(InfoTxtList[i] + '
'); finally InfoTxtList.Free; end; end; - SynEdit.Lines.Add('
'); + HTMLLines.Add('
'); - SynEdit.Lines.Add(''); - SynEdit.Lines.Add(''); - - bbtnSave.Enabled := True; - bbtnSave.SetFocus; - bbtnShow.Enabled := False; - UpdateLastDirs(ImgDirectory, False); + HTMLLines.Add(''); + HTMLLines.Add(''); finally AllFileList.Free; IcoFileList.Free; IcoNameList.Free; IcoSizeList.Free; PixSizeList.Free; - SynEdit.Lines.EndUpdate; Screen.EndWaitCursor; end; end; -procedure TMainForm.bbtnSaveClick(Sender: TObject); -begin - try - SynEdit.Lines.SaveToFile(ImgDirectory + IconTableFileName); - InfoMsg('Saved as: ' + ImgDirectory + IconTableFileName); - bbtnShow.Enabled := True; - bbtnShow.SetFocus; - except - ErrorMsg('The file could not be saved as: ' + ImgDirectory + IconTableFileName); - end; -end; - -procedure TMainForm.bbtnShowClick(Sender: TObject); -begin - if FileExists(ImgDirectory + IconTableFileName) then - OpenURL(ImgDirectory + IconTableFileName); - bbtnCreateHTML.SetFocus; -end; - -procedure TMainForm.bbtnCloseClick(Sender: TObject); -begin - Close; -end; - procedure TMainForm.DirectoryEditChange(Sender: TObject); begin if DirectoryExists(DirectoryEdit.Directory) then @@ -376,6 +415,7 @@ begin ImgDirectory := CleanAndExpandDirectory(DirectoryEdit.Directory); SynEdit.Clear; bbtnCreateHTML.Enabled := True; + bbtnPreview.Enabled := False; bbtnSave.Enabled := False; bbtnShow.Enabled := False; bbtnCreateHTML.SetFocus; @@ -438,22 +478,14 @@ begin sbtnLastDirs.Enabled := popLastDirs.Items[0].Caption > ''; end; -procedure TMainForm.InfoMsg(const AMsg: String); +procedure TMainForm.ShowMsg(const AMsgCaption: String; const AMsg: String); begin - TaskDialog.Caption := 'Information'; - TaskDialog.MainIcon := tdiInformation; - TaskDialog.Title := 'Information'; - TaskDialog.CommonButtons := [tcbOk]; - TaskDialog.DefaultButton := tcbOk; - TaskDialog.Text := AMsg; - TaskDialog.Execute; -end; - -procedure TMainForm.ErrorMsg(const AMsg: String); -begin - TaskDialog.Caption := 'Error'; - TaskDialog.MainIcon := tdiError; - TaskDialog.Title := 'Error'; + if AMsgCaption = 'Error' then + TaskDialog.MainIcon := tdiError + else + TaskDialog.MainIcon := tdiInformation; + TaskDialog.Caption := AMsgCaption; + TaskDialog.Title := AMsgCaption; TaskDialog.CommonButtons := [tcbOk]; TaskDialog.DefaultButton := tcbOk; TaskDialog.Text := AMsg;