Changeset 177 for trunk


Ignore:
Timestamp:
Aug 23, 2024, 9:59:54 PM (4 months ago)
Author:
chronos
Message:
  • Added: Keyboard shortcuts form accessible from Help menu.
Location:
trunk
Files:
8 added
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/Core.lfm

    r174 r177  
    1212    Top = 200
    1313    Bitmap = {
    14       4C7A190000001000000010000000B62000000000000078DAED9C075C54C7FAF7
    15       218937ED9FDCE49AC49262AF31B18BA86089951862D4D822C1868A0882A85445
    16       051595264511503A820A285DE9028A8A281D14102982F4B27496DF7FE66C7159
    17       76974593F7DEFBBEEFF0F97DE69C99E73BCFCC73E69439BBAC8CCCDF97B21DB6
    18       81A7345BD55E3AB57E26FAE29B9B9BC54A1ABEA3A303A829EA2D92FAE26B3363
    19       19BBA2AC5894E6252025E888485E9A71A2B511A82EE4AAA017DFD73879FEB3A2
    20       4EA120D1A617DFD738D1520754E4BC96009F69B785D90F725045A4ABBAC8714A
    21       F2FFC4E64F66FFF5F87A8F5392FF14CBCDBDFC0BFB1195787CFC89759C02C1F6
    22       85FC3C8E0A60726109F292FC4B9A27D2F8978A1793FAE2458D4BD438FF93D3E0
    23       C171A08A8B8BC39BD80E1F9E0C41896B4752FDD8B1A91094B08DB872E1346142
    24       1A78E2D90A6E4B93264DCA84B0FAC3D33479720E78EA2F3B6DDA53084BDA3666
    25       CE2C004F3C46785F5C9A3DBB083C09DB8A2BE7A539738AC193249BB7E1A569A3
    26       BFB17E93F47FCA8F94097D482A5E54929A373313D98628DEAC77198717D18630
    27       4F5989BC501B823C8F1594B4BC28B63FFCDBFA977AFC42C7B2DFF1EFC3BFD8B9
    28       27C4BFC17C14E6DFEC3C783B5EA61FE74C5F6DFC5B5292D962DC315D845C174D
    29       649FDF8D4CFBED4C1E64300F37F5E74232BB08F91E7A687A7A0F5DAD0D407737
    30       A32E560D1AB2E370CF4E053EFBA68B6C23D1EC2794DDBAC8D876A6C7A3C3F714
    31       D8A7D6836DB6166DDEC7D19A1A8D8E8672A45F3184E79E89E8C92E61FC52B623
    32       D60730FC0988BC4C9E599B18FFDD3565E8B8A88DA63017B4D5BF44E4D97570DC
    33       3196DF46A2E942D43F4D40475A1C60B00070D4E2F4FD7E10D8E776A0E36E20BA
    34       9B1BD0ACA7809AA420943E0C868DCA083E9F66BA92196F07E92774E70066CA40
    35       C01974EFFD01ADBBC6A1C17637D3DE2BD3B5C839B1056D0DD538F6FB303EFF88
    36       DAD3381D5B09684F05342681AD3E1E6D6AA3C0B255039BF8666526E1EEAAC1B8
    37       BD711C3165C354E99BD7FCB1650CDF66B814EDBB27A0456D0C1AB60C47C3C935
    38       4C797DAC2F92368D46D8CA2F11BE7E34C39B2C1FFA9A3759C2C4AEFAC27E546C
    39       1981A24DDFE2D98621A8B97A9AE19395FF855B2B3F47F0CA81B867B4062DF5D5
    40       24C443F87C88C11CD465C733B129D8341459EB06217DCD40E41EFE05253E2711
    41       4959A57F214CE93314DEF241FEFD08AC9BF7099F0FD39B81EC8B1A68AF2F4781
    42       9739EEAD1A8838E5CF91EF63CEF80F5DF139C3665D3E8EA6EA7238E9AEC68A19
    43       9FF4980341DADFE3D9B5A368AB2B4771A40F528EAC43FC8651885B3F12F74DD6
    44       A1F0F61534569523D8EE10964FFD40E41C74579F8438F30D28BA1F8256728CBA
    45       D95D8C9AC978699F2FEBAFC732312C2F9DDB31012748ACCD577D89E34ADFE2C8
    46       B22130583C081BE67DDAABCF7F656A4BF144EDF90562D596EA2B79AD4C6C909F
    47       0C1224A0ABE3F50DB4A315ED81BBD176EF226A122F43225FF51C287C4816DCA9
    48       40711A5092019465317C576D113AD2FDC5B6C1F0CD648DF9E2319FC3CB5CB206
    49       7BCAF0DD64FDD955578CF6876E649EB942244FFACA61C9BAADFC29F0AA80E953
    50       559031D3064FF59E1B505353835E3C39D628CBE6B09574FDFB02A82D4543DE3D
    51       34E62573549C85FAEB1AC8CBCBEBCDD3549E47D8022E5B063454909856824C5C
    52       8E888FA67023F17C453EE97311E3170D8423E7255A1A38EF1F5A9B1813568C79
    53       6FFEC2420E4FFBCDB0AF38F1A44C7B0B2736542435DFB1EECD3B926B26B92EA0
    54       A698D367EA97FAA46C573B2736EC4E2E7F4E74FFE9BCA97BC99943D4771B0BE8
    55       6CE37360B3397C9CA5689EF68FF69B55CBF5DD4CF8760E4FFB46FB40AE07AC48
    56       53D13C8D138DB1E0B829DFD5C9698319031B4DC10744F3F438D13ED37130BED8
    57       FC7B18679BD38706BFEDBDF8966447FEB956EFFA1B1A7CB7A031602F9A820EA0
    58       29E410C975C9BE061AAEA8E265945D2F9EA6AAAA2AA65C1A51DB7FD3FAE06D9F
    59       65F0173CE308F7A5DF6B951EFDE03DABBE7E5EEDD773278F95984B7A6EED8BED
    60       8317632BBD8459C16771711288DF5BB0FCF1BF212B7AFD203D2BD3CF58FDC725
    61       4FA3E5A0F2305C060F83A570D75F0237BDC5703BF4135C0F2EC2E5030B715977
    62       012EED9F0F171D45B8682BC079DF3C3869CD8593E61C868DF130418CFB1144BB
    63       1F46B49B31A25D8D11E56A441EA10D117989CA00B75DF471CB99C8490F114E87
    64       1071F1202EEE9567FCF252377DD62662936B2C9B5C27BBC875B7ABB3139D9D1D
    65       E8EC684707557B1BDADBC933455B2B1C35E4E04EFACCBC233D750A2A2A2A7073
    66       73239758092CE1DAA85A5B7061CF2C32DEC58C4F555555D8DBDB63CD9A350C6B
    67       6464040303031C3C7810FBF7EF87969616F6EC51C7CE9D3BB16DDB36B4B636E3
    68       BCFA4C264EDDA4BF16161658BD7A35BCBCBC383E895EF797E7B785F14BD9D616
    69       16CEEF9AC1C49833564E9F39FD95C0B670D89666161C764E678E0F6543434361
    70       46E6684C7474AF3871D86601B68991BDDA545C22C796C6E9D8B163484C4C84B5
    71       B535C31A191972C77F00FB7574A0A9A90975753A7E3532FEAD686635C26EC714
    72       322F14993EBBBA5E868989090202FC7BC4B895EBB785EBB799D5C4B0ACA606D8
    73       6E9BCCCC274E7FDB05C62AC436F766594DF5B0DDFA233317697F6362A2616B6B
    74       8BA8A8C81E317ECD36BE661BEBD144746ECB0FCC3CA67E8D8D8D99F1D379447D
    75       1A1A1A425F5F1F070E1C808E8E3619FF5E32FEDD505353C3D6AD5BD1D850071B
    76       D5EF71919C03B4CF0E0EF60CEBECE4D423C6AFFBDBC0F86C6AAC63D8C6865A58
    77       FF39919C03B399FEB609C749125B5F8B86FA1A58A94C60CE013A8FE95CA4F389
    78       CE097BB569CCB1A5C787C698C6898ED566CB24A6CFD62A1361B579022CFF188F
    79       BFE1FEFE26D743B1EFEF44BDCF13713FEC17FFB6FE45DE83FE6FE0A5797726EE
    80       1E2CCDFD53D23D5CFA77776FC4BFEDF8FF665EE62DCF9FBF3CB93B98C3C5C694
    81       11DD9686E1D9D3ED8B9647F963A6DBC2F5C2E9A2B529529262C812AC1636A67A
    82       8C6ACA8B18F1F6691DB5F1733BDFA38D5D2AABF0E86E2C53DFD6CA62445317B9
    83       2F7771D78CBC726A436DD5B7ACE1B741B76979E4F54B789E9B81DABA3A549517
    84       A3242F8D11DDA665B48EDA505B419ED7C6F3E7858CD2126FC38AF477B1FC8F8C
    85       E8362DE3D50BB256A6FA387D783FCC0CF622372B03F7EFDC829F8B0D36FEBA84
    86       FF58BC65DD2F4C19ADA336D49632943D65A4CD8F736C5404B21F2541FDCF357C
    87       96275A46EBA80DFF7365C29E3E72001545398C6E5CF745454981589ED631365C
    88       7BCA2E9D3B198AD3C763EBBA9508F4F5427C5418930BB641B705EBA82D6528CB
    89       8B032D7B41627DDDD319A52FF2F96DF0585A46EBA80DB5158CFDFC19E399727A
    90       9C681E70C50DC5054F117EF31A23BA4DCB046D2823C887DDF063CA936342F879
    91       4D590123C1329A535B419ED7C6A9C3BA4CFDFA5F16E1D0DEED7C9E6ED3325A47
    92       6D8459C13678757A9A3B51F62C9D11DD16AEEF2BF16CFBC3F092B69F36647690
    93       EBCB361968FB68F7FF3A43D86AF267D16D4126AF0C323333D15F9E612B481FFE
    94       9441505050FFF86D5CBE8CF09BDF80DFC2E58B08BF4932CF8F15375E94E5F305
    95       647B03D13AA2B5446B88569198BA08C454205682922924B6794499444F885288
    96       92891289940462CA1B6B25297F49542CC3619F8A61EF102D7F3D26E6F8FEC989
    97       131D2BBFBFD95C96F45746996825C72F95F221E51E31A17DA1FB3C31634D274A
    98       E5B082753C499C136BB8EC038EDF7E1FBF555CF62EA7BFFDE69505E2B5BCFFBC
    99       B6B3362756CB7BC74ADA2418D37E9F3FFF8664611149FA680E4E2EAEFEA0C87A
    100       1EBBD5993E1F9D24EBCE9E9F35F0584EBD56AF7A3EBB9E682DB539CEB7E9C1CE
    101       219A49EB77233F3F1F3DDB3FC961571329531B636E1BC2EC2EB2FE3DD7EB9872
    102       6C8F73D89F899641A45F1E2BE8BF671BC61C761191A2F46CCF360EBE112B3256
    103       5388BEA76D6C1511F73E58122B9949241F47348AEE6F14D9863896F699FA65D8
    104       61445FD3F2B522DAD82FF618716C3772D8C1445FD2FA55228EBF96D85871DA58
    105       CB67C51FFF5D62E3CCA95F25F138D03249C7A8AFFAFFE2F4B6EB1B49EBFC37E6
    106       FBF3FD23419FBCED3EBEB323D13F4D6622CAC57DFF46C4BB0DB13C2F97D6BFE0
    107       B8C47D7F485AFFC2EDF7C7BFF07ADAACE767416FE35F64EA877F89FCDBF8EF4B
    108       6F7DE209ADF3FE0A71E32376FFBF81E73182DB6FD287376105FDBE29FF36BEA9
    109       8E727D1F7DC33678DC516E1BD2B6236C2FC8F5D58628DB7F372F38A6FE8CFFEF
    110       382F45EA6FF8EB75ADECA73DFF335D71D75E61D6CC8CF9EC8BFF5E5590E3DD8B
    111       B9F566BCF7E402BC998872517D14F421D27F1FEF6BCD24F8171C435FB958FF82
    112       B9E47B469FFECD24DC93CDA4F42FE99ECE6BA32FFFA2EEB9C263E98F7F11F75F
    113       A9FD8BEA8BB8F92BAD7F71F34D9A7BBF9914E79614E71E2FC9120D253A40144F
    114       54405448144BA449F41DD13B621E23283B8B7E8D92E809911DD13E2EE748944A
    115       74936B232A8DE6D6C710C911BD2F50F701D122A2286EFD2742EC00220DFACA84
    116       48414CFBB4DFF3B8E35113AA1BC2EDF709A28FFA785C3A479440F40F81B25144
    117       F7E92B6C291EB75488B288BE7E0B3E9BE89BB7E87F9250FFFB13BFE744BBC51C
    118       BF00298E5F3B91BC98F9338D2850C2FCA921621385124D16D34FDEFCBD435446
    119       544114C71DDF62A207449DF42BC74413DEE0717920FDBA3751175132D18C3768
    120       E347A2DB441D44B7DE80A7C7623A913757326FD8C6575CF53C19568E7B77B8D9
    121       D2DF971D51F456DFFDC303E375C31F6CD934E6CAE43FC66E1A24FFD500498D8E
    122       3ABA6CD270BB55196BAD56C0D162216E9ACAC377FF6438AB8C80F2B689F87CF3
    123       C8DC2F7EF97ABA2876F82185C9632D7FAE73F75E879CE8ADC88C50C123FF7588
    124       BFB81C41C766C164C7F718A2391983D70D674D5B36484E90FD6EE5B8014B4C14
    125       73AC3CD622375D1FD5456751597012458F0E203D7833EEB9AFC0EF762BF1A981
    126       1CDED7F901FF58F165D13F677DC63F57F66C9BA8B2C27625521276E3DE733B74
    127       B426A1A5C10F2F73F49113B503899795B0D74E09FF3C32071F90F1C8AE1E8A8F
    128       170FD4E0F1D62AA3FC033D5661CD5D136C7AE1899B2DA928A90F4059962EE1B7
    129       21E1D20ADC30998EC5FBA662C2E6317877C37718B0F48B281E6FAF3A2AEBBAF3
    130       CF981C771873D32CB0BECC0F5B4B3D61F9C4047137FEC02DCBF9B8BA6F221C56
    131       7C09BD710330E6E7A118B07648199FDF382C37C842019303D52177EF3414D22F
    132       60FA23734CBCAD8B636797E0BAFE3438AEFB1627E43F85F68877307BF1207CB0
    133       6764058F3FAD3428CC476B024CCD1430DA5315936E196042E87E4C76DE045FDD
    134       297021C7CF6AC940187CFF3E74BE93C118A5AFF1F945B924FE3AF5A72FF65A2C
    135       FF0AEEDB476396890206D92A63ACFD2A1C569B888B64ACB6CBBFC0B1A91F41E3
    136       3B59ECFB4606DFEC9D88F9810B0D78FCAF133FF9E48CE2672F2D167C0EC5AD63
    137       F1A9DE2CACD9340AA7160D8485C23F61FCC3077C5667E47BF8E9ECB4EACDBF0C
    138       192870F17877E2C0019B4DA77CD8B97ACE3F31EEB76F60F0C387D01DF70F688F
    139       7C176A5FCB60E71019863F3CE543F6ECEF3ED8F9AEACCCBB42D7C069633F7FCF
    140       4973DCFB6D8BE77D064D62AB4698DD447B86CA4073D8BB3099F93FEDD387BEEF
    141       CABD560D103A9FE8B547F9A301B296F2A33E4E9BBF7468FD9FBF7CD3B565EBB8
    142       AE9FB78D6D501EFB51FAA7EFBF63CD7CBAC0B115BE97BE47F405F7FAB0827B3F
    143       D8C7D5566ED98F5C9BF724DC87DFE3DE073EE35EAF0672B73FE2D6C9FE27BDF8
    144       FB7DF3EFF0F4F524F28207C93DAE78C0DDC79D919BB73B5CBDDDE0EAE5CAE497
    145       497ED9F3322E11B9785CC206D58DD8B96F174E599A33DFE1EB4F3AEF7C016A9A
    146       3BA163B01F376F05E1A4C549A9DBA0ECB5E0EB0C4B9592F90837226E4AD5068F
    147       A58C202F4D1B82AC289E2A30FC86C8368459717C5C723C340F69E1C4D9D76D50
    148       56C7703F5327898FBF7F071ABA7B9198928480F0401C363D0C931326B81EE2CF
    149       94D13A6A238ABFF320017B7435183B411F82A275D486DA0AF2090F13A1BE7F0F
    150       BF5C92A80DB5A50C65350F6A415D473AB6471B84A1EC9C9FE642DB4007874CF4
    151       FA25CACC5BA280868686B7D2DB9E7FB2B22544A544D765B8CF6EAA34A7FBB2B2
    152       655C89AA2BE5B20C7F9C881839A464676783E6745F5022EA8E73D802AA205353
    153       4041210B376FDE64F22347D0438275D496321C368BEA969E1E1B9327C7E3F3CF
    154       CD995C4BABB38704EBA82D65282B23F390EA8EA66607B2B33BE1EE5E0D5FDF06
    155       24265660C78E66BE366FAE83B2722993535BCA7058BA1C48B8BF7D7B1B962E2D
    156       C4AA55E58CE8F6A64DF522456D29C361C753EDE77E035A4AD175E9F8FD1C761C
    157       D5C1EE6EFAFDE10E12232F383A9E82B7F77966FF75D949FE3EB5A50C871D4BA5
    158       DFD545BF2FDCCC9795D561B1FBD496325C96CAA8A38385E6E63AE4E63EC6F1E3
    159       3A888ABAC1ECF344CB78DBD496321C760C95495B5B1D99CF157C1D38B05DEC3E
    160       B5A50C87A54B8FD1C75B5AAA505353CCE8F9F30CECDCF93B7F9F6EF344F7A92D
    161       65382C5D7E8D3AD9DC5C8EFCFC54E8E86C61FA1A1676059595F922456D294359
    162       59D9A144232DDBDB2BD1D4542A95A82D65284B9F05646587395DBC7815FD1165
    163       B8CF11D36565BF329795FDD6BB7FFACA9CBB8E60526868E8379E9E9E79CECECE
    164       E0C9C9C989CC1B47F85CF1B12D44A1C8B53F3927BF767070F8D9DADAFA4C7070
    165       301E3E7CC8282B2B1325A5C5888D8D81DF55BF56728FD74BCC497C5798F7F5F5
    166       CD7CF2E449776E6E2EF37F49393939CCF71D6EDFBE8DA4BB89E43C4CC0B367CF
    167       101C1ADCE673CDE750456D558F3508E9331A1B1BC162B118D1EDEAEA6AA4A6A6
    168       E2FEFDFB08BA7903F7921291F2201957AFFAB615143C5D29C87B7878F0AFA5F5
    169       F5F58CE8FF46A5A4A420BFF039DCC313A0E71601F3C00458785E435442D20E61
    170       FF3C96D74E23D1D38242B8864543E7BC337E3D698AD524960BCFBA609D4BDCE3
    171       13A119FCF52BFD7F01FABF849595957C95575623EB592EFC83BD109714009B08
    172       7BB8E7936783EB67A075C90BABCE473E36F70B19CDF3FFEAD52BE633611AA70C
    173       728D758B8882B7BF131E6546E2E98BBBB08F73846769086CA3CF232236045A1E
    174       A158691B724290A76C614101021253A17BD115310957F18CB0D98531B08D7380
    175       53A13F4CC3AC101C7D0D97C343B0D6FE669197FFCDF194A77D7EF1E205CAC8F1
    176       B68BCCC0FEF38E48CD0E454E513432F26FC3FAD6395865F8C0F09A29AE877BC3
    177       3732186BEC43BA6D3DBC94285F51518102E2BBB0E029EC6EA740DDE1221EA6DF
    178       40564124B9DF46E0A8EF2998DD75818E97313C03C933604820363ADE64DB7BB8
    179       F179E6FFDAC81C0A4A4CC1461B0F84C67AE3514638A293AEC0C0D5083A374E40
    180       CD4A0B1E575DE11C128E63BEA1F557AFF9CDF3F6F6C6CB972F51565686929212
    181       141515C1D0E736F43DBD119F1C8080B0F3D0B3D0C2B10B4761E762835B311188
    182       78908E4BFE8171B79D2C060406061E2273B53632F236222222BA23C2C3BBDD7D
    183       AF766F3A7DA95BC5D211FB2C8EC2C2CD1E97C833D0F9A060B84526E1714131C2
    184       13EF95DF7FFC60333D06644ECE4B49B9F75B7272D2AF77EEDCF9352921E157C7
    185       CBEEBF2C35F5345D657DB568834370F716A71B6C7D8F9B5D0B74ADD986EE6148
    186       2D28C5ADFBA99D7DDDDFDDFCAF8FB7F6B8A2E4E0E1B122E846E0D215FBCEEE1B
    187       A97ABCCDFAC61DBCAA67FDA5DF23983E7DBA2EFD5F19491A3366CC5A71FCB469
    188       D3B4172C58602DAA6EC68C19071514144ED336BEFAEAAB69A26CA64E9DAAB970
    189       E142DB615F7DF2E37AC5314779921B3FE8371EFFCE3BEF0CA06D7CFCF1C74384
    190       F9C18307CF1C31628412E5D7298E36E1496E1C87DFB06143A2BCBCFCD1458B16
    191       D9D13684F9153386EDDDA5F4FD05C51F866EEEF5626AE8D0398435E14998DF30
    192       7FCC317FE31530539D9D20CC6EDCB8F1A8A0986FBC08F0648C0C2B4A5CDE4450
    193       BDF9D14725F1A29270FF699CA9FD09D5D98982E5A2BEFB278AE7C64F83C66FFE
    194       0F4355FA9A6BA27872FC66D1E3272A6692E2273C7F44C54C52FCA499BFD2F45F
    195       9AF347507FD579AB387FC1277A874DE6390745FD9951DFD51A5FD18EA017ADF0
    196       7ED60CA7EC26D8A735E21C916736AB55C331F4CF9DBAC6F366CF53E4BF873F68
    197       6C32ABA499DD9E58D1D19D50D981D4BA2EE434B2F1AC85A8998D8C862E449575
    198       C0EA5123F4E3EBBA439E3577F804476D9DA738FF93A973153FB60E8854897CD9
    199       DE955AD389D2F66E947474E3595B3772897288D25AD9C822CA27DB57F35AB03B
    200       A40AF1452D1DFBF40ECF533D70786E7445472BF55B4CD832C2967702356CA0A5
    201       9BA36AB29DD9DA8D98A62EA61DAB7BF5308EAC622BAA1C5458B15B5FC13597C5
    202       4E2775F9A4BF85C4EE55175049F48AAB97A4BD3C5217DED0099FFA4EC4BD6CC7
    203       669F12F630252D85F9DBF5146C9F34B273586C3C68EEC21D56171E92ED641283
    204       84AA4EC4577622BC823C83D776C2AEB20D472ADA9054D789F56E2FD84396EC55
    205       58B4434FE1DCE3467612B14D26AC6929B179DA8ABDB18DD0886AC0EEC806FC11
    206       5A8703D9CDD85AD082D395ED087BDE823F3C5EB087ADD052D8A06524E797D752
    207       E99AD98427C4EFA1A72D5878AD167BF39AA145EC779363B88BB0A35CAAA0FCB8
    208       0911A4FFA6B72A61185CCE56DCA4ABF0839CE23F0E38872A5925D7755E27B6A1
    209       AF3AB02280F084D52869C11EAAFC664C72ABC2C5E76DF022F3609D4B11C2B21B
    210       6BF61E349E4D8FFFDE4387A72715B7D698C6D5C2E97123B6873440F3590B34C9
    211       1CA2D220DB2BAFD6C03CBA16EB2F15C12DB9B6D6D12F4289CC21E673029A7B07
    212       45292516B5D4EA879441D9B30CABE21BF14B611B96937ED0ED71E605F8C5FE29
    213       AEA5D6D5DAFB842B4D9BAD20F81903D3866740D88AE8B417B5EA96BED8EBE48F
    214       C58E57A060E582F5866721BFE9100212B26B5DFC4256CC94EFC9F2929CFCDCF7
    215       8F985B2A199F39C7727273833D91A5C3799C3C7512BFABA8B1B40E1A29511B49
    216       E7D2C2654AE34EDB5D6C0C0B0F43566606E2626371C9C509DB35F6374E9A3A73
    217       5C5FE7E2D65D7BC686C6DFABD7D039C8DEAEA6C656515565ABAAED627BDF8CA8
    218       DFF0E7B6B17DF133E4E43FDCBA738FFCC41FA7280C1F31426118D1D889DF2B6C
    219       DEAA263F6DA6DC8722A1F153DF9559B56D30D1746E3E43423E88B1E7A6112347
    220       0E98A87374FCC75EF74E8E09482DFA1FEF647392177FEC954CF74B04F25363FC
    221       535F7CE475EF3869E34B1EBF68C9E2612AE79C9C475E7FD4712AAD1AC3AFA7B2
    222       4FA7D5E0BB6B8FD867D25FE7C3AFA5B2CD49FDB7571FB5CAA81EDB203B69D954
    223       A221849FAB637BA16392FF634C0B28C4E82B0F48FE1CA3AEDC67F2D13EAFF329
    224       FE85F8C8F10EBED1F76E1FBCC7B9F57D155B07C22B38B95E66C714966269500A
    225       5C63EE62D18D07B81C958085BC3CF0011C236231CC290AC38CAEC0EE6E2EF402
    226       533054C3A583F2AE9EEEEC96B636149557A0943C4B1696BD442951612927CF2D
    227       2A4650FC03C81FF38543721E0C82D3B1FAF435F617DBED2B39BC07BBB5B59579
    228       064E4F4FEFA194478FE011180E45136F3812563F280D6BCE5EC7203587AAF736
    229       D9ECE0F1EDEDEDCC737C7979395F2F8A8B119AF090B03EB84058BD9B8FB1C6DC
    230       0FC377DB777DB8D97A97EC4F1AFF12E73F35F5313C6F4430AC63522E0E053CC6
    231       DAD37E18B1CB163B8E9CE99CBB61F71C992F86BF23CA3F7D9E7E909E8BD9FA6E
    232       B890900D5DBF07587BE61A46EEB6C7462D23989C38D14938FA3E495694FFBBF7
    233       EEC1C8EC3416A819E3A8E72DFC4EFC8EDAE300ED13763871CA1C274E9B772E5A
    234       FC931C77FEF4F04F7D27A7E560D4969318FFF366286C3D84116A36303A771971
    235       7712E0EFEF0F0B1B2B9E7F1941FF8585858CFFA090507C396116BEFADD101B77
    236       6AC1E0A41522A363C89A360BE1E1E1B0B2B5A1FE670BFBA7EB90D2D252661C31
    237       717710FD30138F9FA4316B5ABAB6A06B0CBAAE65F8D7FEE7B9B8B9B269BFE9EF
    238       F9C5C4C4885474743493D33536E1E9BC9BC5E5279DB5B1BAE7EC7AA9DBC6DE0E
    239       36F6B612656D67CB3E6571269170E3FE8EF7F9B315143FD8AB6734436997B6DC
    240       92DDBA728B77E9CA2DDCA625376FA39A9C9CF246B9952A3B668E9F325DECE7D4
    241       3B0E198DBD53C1AABD90F1B2F3744655A7794A45E7F1D8E79D86D71E75AADB78
    242       B73B8425A5ACDAB24B64DFE5C83DE0A04F88D29ED42AD6D512729F2BECC289D8
    243       3A1CF17809BD130FA1AE73AC59658FF634E25FE467206A878C26DEAE6055EB67
    244       D4E25679174C525A71E44A05F44FA761CF9173ECE4D4B42CAD7DDA63445E77E7
    245       2AFC639F57F032CDC7552D3E2F3A702495DCC7AF5742DF320BEA969EECE4F4AC
    246       1C1FBFAB9366CBCB8B7C8FB2EDA0E18F41654D95FBD36B1159D105C338160EDB
    247       1741D52E0C2177D21A2FFB85AE7076F3FA4E4E7E8EC8CF60A76ED799BAEBC1CB
    248       36FDDC461CCF69C0D9C44A9C8DA8C5914B2530367FD2FDDB8E63D57753B352F6
    249       ED3F305A143F5979D30F7F5EBC51B2FEAC6BEDDA6336DD6A0EBED08FA9C1C133
    250       3950D6B0EE0E8E4F29BEECED379BF817F9D9D3E031DF0F586F603EECB04F98B2
    251       69F05DD6A1A80AE8DA3CC50A639FEEEB310F4B1CDDBCE566CE9617F7B995CCCC
    252       D973DE39E5E431D5313EE3A9F19DDA6EDD73CFB0FCB87F77487266F145771FB9
    253       E9B3E4DE9334EFD4750E4EBC9BFF2ACF2EE655F701DB7C2C3F1DD21D782FE385
    254       8B97EFEC5912FCF2D72F5B774CF58B7FDC661A5A8A95B6B1DDA18FF25E5C22E3
    255       9D2937FB3D69E6BD9AA6CE94DB69CF588657A23B6FA5E51779F85D979793C2AF
    256       C0F83FDAA2A13D73DEEA4D729A3ABA9367CBCF79F7BFED4BFCFFAFAFFF55178F
    257       B7A0EBD791833F9DDADFF53F2F791F5ADA44D7D12304DAE86BFD2A6EEDCE6BA3
    258       AFF5AB587ED0A753FAB37E65FAAFB794C5F53DA5BFEB7F5EFC468888DFFF5FFF
    259       FF3DEB7F4B5B1B78F8781179F7535EE0B1ED2D2C541566A2AA208351CD8B5CE6
    260       37553A98DFDFE964B66919AF9EDA5286E797EE5FD933173EBBE4E0BB570191D6
    261       9A785551869ABA3AD4D6D7A3F2D54B44DA683275D486DA5286D717DA262DF7DA
    262       39138106BFE279560AAA6B6A18BE8EF0B575B52822658106CA8C0DB5A58C204F
    263       DBA6ACBFDE4AC45C3040797101F33FFFF50DF5A828CEC76DABBDB8AEBB0C8186
    264       AB88AD620F9E8E2DF29C168AB21F21E6BC1EEE7A9E46666C00D3EFEACA97C888
    265       F245C2A56388B6D34549DE6344DBEAA0A6388FCFD3DFBEA9AE2C67FA59515288
    266       CC187FE4DD8F4471EE63943E4B477E0A79F68CF5476559111A9B1A515753C9FC
    267       A6118FA731AE6F6C4403517D4303D356714E2A6A6BAB514FDA2CCBCF244C159A
    268       58CD60B5B4103533BF19C4E3E976537333472C16EAAA5FA1EC591A1AC9D859C4
    269       5F55493E9A1A6AD1DAD68A56D2D73622FA1B4D7CFF1D1D68A8AB06AB9985EAB2
    270       E7480F7747FEFD5BA8789E83EAD24294663FC0D3C460D4BD2A256C1B9A1BEBD0
    271       D5D9F13A7EC5B92436DA78F9F4096E5BA893F868232DF4321A499BCD0D75C88B
    272       0FC01D2743445AAAA3A2201D31763A0CD3EBF8E92BE3EABE85B875460DB5E545
    273       68236B321ADBFA5765B8757A077C351589CD2F8CADF0F167E68FDA0CA6BE223F
    274       9DF90DA2F68E0E26B6B48D57C486D6519B5EF34768FED2FEB534D5336C57171B
    275       6DAC46C49232D1F357C4F943C6467F9389C698F93DACAE4EA64CD4F973D6DAF2
    276       8DCFDF335696F85FACD1DE12
     14      4C7A1A0000001000000010000000642300000000000078DAED9C075C15C7FAF7
     15      318937ED9FDC9B9BA231B9B1D798D84554881A2B5162D4D8222A2A2A52045169
     16      0A2AA8A8340195A67404A5281DE9028A8A281D9426BDD743E7F0FBCFEC291E0E
     17      E7503479EFBDEFFB0E9FDF6777679EEF3C33CFCE96D95D8E84C45F9732AFEC01
     18      4F2996BBFAE8FC967918886F696911ABC1F09D9D9D406D615F9134105F971ECD
     19      D8156644A324270E49FEFA22F9C1F4136D4D404D3E57797DF881FAC9F39F1171
     20      1E79F1167DF881FA89D67AA022EBB504F874ABDDCCB6FF955D08775412D9CFFE
     21      FC3FB7D8C96CBFEE5FDF7EF6E73FC974471FFFC27E44251E1F7B76332743B07E
     22      213FCF227C99A5B004F9FEFCF7374E06E37F50BC9834102FAA5FA2FAF99F9C46
     23      8E8C01554C4C0CDEC476CC9844084A5C3DFD954F9A940C4109DB88CB174E53A7
     24      A680279EADE0FA60D2F4E9E910D650789A66CCC8024F436567CF7E01610DB68E
     25      79F3F2C0138F11DE1697162C28044FC2B6E2F27969E1C222F0D49FCDDBF083A9
     26      63A8B17E93F47FCACF201306D0A0785169D0BC9191C83A44F1467DF338BC883A
     27      8479CAF6CB0BD521C8F358410D9617C50E857F5BFF83EEBFD0BE1C72FC07F02F
     28      76EC09F16F301E85F9373B0EDE8E9718C23133501DFF969460B41CF70D9721DB
     29      411599570F22DD7A2FB3F4D7598CBBDA8BD03FBB0CB92E5A687EF110DD6D8D40
     30      4F0FA36E562D1A3363F0D04A1E1E87E788AC23DEE8679486D932B65DA9B1E8F4
     31      3C0FF6F92D601B6D42BBFB19B42547A2B3B11CA93775E17A681A7AB32B18BF94
     32      ED8CF600747F06C26F907BD666C67F4F6D293A6DD5D11CEC80F68632845FDA0C
     33      9B7D93F875C41B2E45C38B3874A6C4003A4B001B354EDB1FF9837D791F3A1FF8
     34      A1A7A5112D5AD2A84DF047C9930058C88FE5F329866B99FE7692764273216024
     35      07F85E448FCA0F683B30198D960799FA2A0D3721EBEC6EB437D6E0F4EFA3F9FC
     36      536A4FE3747A2DA03E0B509E0EB6D214B42B8E07CB52116CE29B959E8007EB47
     37      E2DEB6C9C4940D43D96F5FF3A757317CBBEE4A741C9C8A56C58968DC3D068DE7
     38      3632F90DD19E48D83E01C16BBF44C896090C6FB07AD46BDE600513BB9A6B4750
     39      B17B2C0AB7FF0B2FB77E8DDA5B17183E51EE9F085BFB1902D67E8E877A1BD1DA
     40      504342FC359F0FD45988FACC58263679DB472163F308A46EFC1CD927D7A1D8E3
     41      1CC2292BFB4F04CBFE03F9611EC87D148ACD8B3FE1F3C15A739169AB8C8E8672
     42      E4B919E3E1FACF1123F719723D8C19FF416B3E63D88C1B67D05C530E3BCD0D58
     43      33F7935E63C05FFD7BBCBC7D0AEDF5E5280AF74092FE66C46E1D8F982DE3F0C8
     44      6033F2EFDD4453753902AC8E63F5AC0F448E4167A5E98831DE8AC247816823FB
     45      A887DDCDA885F497B6F986F616AC12C3F2D2E57D537196C4DA78FD973823FB2F
     46      E8AFFA1A3ACB4760EBE24FFBB4F9CF4CED49AEA8BBBA44ACDA933DFB9F2B131B
     47      E426820409E8EE7C7D01ED6C4387DF41B43FB4456DFC0DF4CB571700F94FC884
     48      3B19284A018AD380D20C86EFAE2B4467AA8FD83A18BE85CC315F3DE37328CB26
     49      73B0170CDF43E69FDDF545E878E244C6992344F2A4AD1C96CCDBCA5F0095794C
     50      9BAAFD4F3075F0D4E0BA15B5B5B5E8C3937D8DD24C0E5B45E7BFAF80BA1234E6
     51      3C44534E2247451968F056464E4E4E5F9EA6F21CC2E671D952A0B182C4B40A64
     52      E072447C3487E889E72B72499B0B19BF68241C392ED1DAC879FED0D6CC98B0A2
     53      8CFBF2D7967278DA6E86ADE4C493321DAD9CD85091D472DFBC2F6F43CE99E4BC
     54      80DA224E9BA95FEA93B2DD1D9CD8B0BBB8FC65D1EDA7E3A6BE8C3386A8EF7616
     55      D0D5CEE7C06673F81853D13C6D1F6D37AB8EEBBB85F01D1C9EB68DB6819C0F58
     56      E186A2791A271A63C17E53BEBB8B5307D307369A038E8AE6E97EA26DA6FD607C
     57      B1F9D730CE3AA70D8D5E7BFBF0AD8936FC63ADC1F137347AEE4693AF0A9AFD8F
     58      A239F038596A926D6534DEDC85B208AB3E3C4DD5D5D54CFE60446DFF4DF383B7
     59      BD97C19F708F23DC9621CF557AB58377AFFAFA7E7548F79D3CB6DF657FF7AD03
     60      B103F0626C072F6156F05E5C9C04E2F7162CBFFF6FC88A9E3F0C9E951862ACFE
     61      E392ABDE6A50B9E8AE828BCE4A386BAF8093D672381DFF198EC796E1C6D1A5B8
     62      A1B904D78FFC04070D1938A84BC3FEF062D8A92D829DEA42868D72314094B33E
     63      229D4F22D2E904221D4F20C2518FDC42EB22FC3A950EEE396823CC9EC84E0BA1
     64      76C7116A7B0CB62A528C5F5EEAA1F7DA446C728E6593F3643739EF767775A1AB
     65      AB135D9D1DE8A4EA68474707B9A7686F838DB2249C499B9967A4E7CF435E5E1E
     66      4E4E4EE414DB0F4BB876AAB6565C3B349FF47739E373D7AE5DB0B6B6C6C68D1B
     67      19564F4F0F3A3A3A3876EC188E1C39023535351C3AA484FDFBF763CF9E3D686B
     68      6BC155A5794C9C7A487B4D4C4CB061C306B8B9B9717C12BD6E2FCF6F2BE397B2
     69      6DAD2C5C3D30978931A7AF9C3673DADB0FDBCA615B5B58B8B27F0EB37F281B14
     70      1404233246A32223FBC489C3B608B0CD8CAC1567E13AD9B7344EA74F9F467C7C
     71      3CCCCDCD19564F4F97DBFFA338A2A1015555552829D1FE2B92FE2BA085D504AB
     72      7D33C9B89061DAECE87803060606F0F5F5E915E336AEDF56AEDF165633C3B29A
     73      1B61B96706339E38EDED10E8AB10DBD297653537C052E147662CD2F6464545C2
     74      D2D2121111E1BD62FC9A6D7ACD3635A099E8F2EE1F98714CFD9E387182E93F1D
     75      47D4A7AEAE2EB4B5B571F4E8516868A893FEAB90FE1F84A2A222141414D0D458
     76      0F8B5DDFC3961C03B4CD57AE5833ACBD9D5DAF18BF6E6F23E3B3B9A99E619B1A
     77      EB60BE731A39061630ED6D178E537F6C431D1A1B6A61263F953906E838A66391
     78      8E273A26AC156733FB96EE1F1A631A27DA578BDDD399369BCB4F83D98EA930FD
     79      630AFE82EBFB9B9C0FC53EBF13F53C4FC4F57048FCDBFA17790DFABF811FCCB3
     80      3371D7E0C15C3FFBBB860FFED9DD1BF16FDBFFBF989778CBE3E74F4FCE578CE1
     81      6061C888AE0F86E1D9D3755BD353FC3ED375E172E1646B6E88A484283205AB83
     82      85A116A3DAF24246BC6D5A466DBC9CAEF6AAE380FC7A3C7D10CD94B7B7B118D1
     83      D44DAECBDDDC39232F9FDA505BA5DD1BF975D0759A1FEE7D1D05D969A8ABAF47
     84      7579118A735218D1759A47CBA80DB515E479751414E4334A89BF0733D2DEE552
     85      3F32A2EB348F572EC89A196AE3C2C92330D2514176461A1EDD0F83978305B6FD
     86      BA827F5BBC7BF33A268F96511B6A4B19CA9ED753E7C7393A2214994F13A0B473
     87      239FE589E6D1326AC37FAF4CD80BFA47515198C5E88EB7272A8AF3C4F2B48CB1
     88      E1DA5376E5A219909933050A9BD7C2CFD30DB111C1CC52B00EBA2E58466D2943
     89      595E1C68DE2B126B6F577B94BCCAE5D7C163691E2DA336D45630F63FCD9DC2E4
     90      D3FD4497BE379D5094F70221776F33A2EB344FD08632827CF01D2F263F312A90
     91      BFAC2DCD6324984797D45690E7D571FEA42653BE65DD321C57D9CBE7E93ACDA3
     92      65D4469815AC8357A6A5BA1FA52F5319D175E1F28112CF76280C2FA97BA94362
     93      1F39BFEC9180BA87FAD0CF3384AD217F263D2664F04A203D3D1D43E519B682B4
     94      61A704FCFDFD87C6EFE1F2A584DFF106FC6E2E5F48F8EDFDF3FC5871E345593E
     95      9F47D6B7126D26DA44B491683D89A983404C05622528897C629B43944EF49C28
     96      892891289E485620A6BCBE5691FC32A222090EFB420C7B9F68F5EB3E31FB7727
     97      274EB4AFFCF6667259D25E0939A2B51CBF5472C7E57AC584B6856EF3C4F43595
     98      2899C30A96F1D4EF98D8C8651F73FC0E79FFADE7B20F38ED1D322F2710AFD543
     99      E7D5EDD539B15ADD3756834D82311DF2F1F36F482626E1A48DC6E02CC5951F13
     100      59CE6315ECE9FDD13932EFECFDAE81C772CAD5FA94F3D92D449BA8CD19BE4D2F
     101      7621D13C5A7E10B9B9B9E85DFF390EBB81488EDA9CE0D621CC1E20F3DFCB7DF6
     102      29C7F60C87FD85681544FAE5B182FE7BD77182C32E2392193CDBBB8E636FC48A
     103      8CD54CA2EF691D0A22E23E004B6225319D2C27138DA7DBDB44D6218EA56DA67E
     104      197634D137347F93883A8E88DD471CDB6D1C7624D197B47CBD88FDAF2636569C
     105      3A36F159F1FBFF80D83873CAD7F7BB1F685E7FFB68A0F2FFE2F4B6F39BFEE6F9
     106      6FCC0FE5FB23419FBCF501BED9E9D73F4D4622F2C57D7F23E2D986589EB71CAC
     107      7FC17E89FB7E68B0FE85EB1F8A7FE1F9B451EF77416FE35F641A82FF7EF9B7F1
     108      3F90DEFAC0139AE7FD19E2C647ECF67F03CF6304D7DFA40D6FC20AFA7D53FE6D
     109      7C539DE2FA3EF58675F0B853DC3A065B8FB0BD2037501DA26CFFDDBC609F86D2
     110      FFBFE2B814A9BFE0AFCFB97288F6FC77BAE2CEBDC2AC9111F3EE8BFF5C5590E3
     111      5D8BB9E546BCE7E402BC91887C516D14F421D2FF00CF6B8DFAF12FD887819662
     112      FD0B2EFBBF660CE8DFA89F6BB2D120FDF7774DE7D531907F51D75CE1BE0CC5BF
     113      88EBEFA0FD8B6A8BB8F13B58FFE2C6DB60AEFD468338B60671ECF1D230A25144
     114      47896289F288F289A2895489BE237A47CC6D0465E7D3CF28899E1359111DE672
     115      3644C94477B936A2D2046E79149124D1FB02651F102D238AE0967F22C40E2752
     116      A68F4C88A4C5D44FDBBD98DB1F45A1B2AFB9ED3E4BF4D100B74B9789E288FE26
     117      90379EE8117D843D88DB2D79A20CA26FDE82CF24FAF62DDA9F20D4FEA1C4AF80
     118      E8A098FDE73B88FDD741242566FCCC26F2EB67FCD412B1898288668869276FFC
     119      DE272A25AA208AE1F66F39D163A22EFAC931D1D437B85DFE9C7EEE4DD44D9448
     120      34F70DEAF891E81E512751D81BF0745FCC2172E74AE20DEBF88AABDE07C3DAC9
     121      EF8E315AF9FB2A7D1977A5833F3C3EB179CCE3DDDB27DE9CF1C7A4ED23A4BE1A
     122      DE5FA5E34FAD9A3EC66A7DDA26B335B031598ABB8652F03C3203F6F26321B767
     123      1A3EDB312EFB8B75DFCC11C58E392E3D6392E92FF5CEEE9B9115A980F450793C
     124      F5D98C58DBD5F03F3D1F06FBBEC7D7AA333072F318D6EC55232405D9EFD64E1E
     125      BEC24026CBCC6513B253B5515378095579E750F8F428520376E0A1F31AFC6EB5
     126      169FEA48E27D8D1FF0B7355F16FE7DFE3FF8C7CAA13DD3E4D758AE4552DC413C
     127      2CB042675B025A1BBD5096A58DAC887D88BF210B152B59FC5D7F213E20FD19B6
     128      61143E5EFEB9328F37971FEFE3E7B21E1B1F1860FB2B57DC6D4D4671832F4A33
     129      3409BF0771D7D7E08EC11C2C3F3C0B53774CC4BB5BBFC3F0955F44F078EB5DE3
     130      33BCED7FC18C9893589462822DA55E50287185E97303C4DCF90361A63FE1D6E1
     131      69B8B2E64B684D1E8E89BF8CC2F04D5F97F2F96DA3B3FD4DA431C34F09920F2F
     132      403AF51AE63C35C6B47B9A387D6905BCB567C366F3BF7056EA53A88F7D070B96
     133      8FC00787C655F0F80BB223823DD4A6C2D0481A135C77617A980EA6061DC10CFB
     134      EDF0D49C0907B2FFCC567C0E9DEFDF87C677129828FB0D3EB3954CE0CF537FFE
     135      42C564F55770DE3B01F30DA431C2520E93ACD7E3A4E234D892BE5AAEFE02A767
     136      7D04E5EF86E1F0B712F856651A7EF25BAAC3E37F9DF6C9271765FE5166B2E433
     137      C8284CC2A75AF3B171FB789C5FF6394CA4FF8E133F7CC06735C6BD879F2FCDAE
     138      D9B1EEEBCF054E1EEF4EFB7CF80EC3991F766D58F8774CFEED5BE8FCF0213427
     139      FF0DEAE3DE85E23712D8FFB504C39F9CF9217BC1771FEC7F7798C4BB42E7C0D9
     140      933E7BCF4E75F2FBEDCB17FF03AAC456913007890E8D9280EAE8776130EF7F3A
     141      E68C7ADF917BAE1A2E743CD1738FDC47C387994A8DFF38E5A795A31A76AEFBB6
     142      7BB7C2E4EE5FF64C6A949BF451EAA7EFBF63CEBC5DE0D80A5F4BDF23FA827B7E
     143      58C3BD1E1CE64A819BF723D7E6BD7EAEC3EF71AF03FFE09EAF3EE7AE7FC42D1B
     144      F69FF4E0EFF71DBFC3D5D395C80D2E64E972D305CE1ECE8C9CDC9DE1E8EE0447
     145      37476679832C6FB8DEC075220797EBD8BA6B1BF61F3E80F3A6C6CC377C434957
     146      EDAF4151753F34748EE06E983FCE999C1B741D94BD1DE0CDB05449E94F7127F4
     147      EEA0EAE0B19411E4075387202B8AA7F20BB923B20E61561C1F93180BD5E36A38
     148      7BE9751D94D5D03DC294F5C7C73EBA0F654D15C42725C037C40F270D4FC2E0AC
     149      01BC037D983C5A466D44F1F71FC7E190A6326327E84350B48CDA505B413EEE49
     150      3C948E1CE2E7F7276A436D294359D5636A50D2181CDBAB0EC25076E1CF8BA0AE
     151      A381E3065A43126516AF90466363E35BE96D8FBF61C38A894A88BC25B8F76EBB
     152      E8926E0F1B56CA95A8B2122ECBF0678888D195A4CCCC4CD025DD169488B2331C
     153      368FCADFD0109096CEC0DDBB7799A5BE3E7A49B08CDA5286C36650856969B131
     154      63462C3EFBCC9859AAA975F5926019B5A50C6525249E50DD5755ED446666179C
     155      9D6BE0E9D988F8F80AECDBD7C2D78E1DF590932B6196D496321C964E07E21EED
     156      DDDB8E952BF3B17E7D3923BABE7D7B8348515BCA70D8295447B85F400F52745E
     157      3AE508879D4C75ACA7877E3FDC4962E4061B9BF37077BFCA6CBFCE3BC7DFA6B6
     158      94E1B093A8B4BBBBE9F7C22D7C99999D14BB4D6D29C365A9F43A3B596869A947
     159      76F6339C39A38188883BCC364F348FB74E6D29C361275219B4B7D793F15CC1D7
     160      D1A37BC56E535BCA70583AF59870A6B5B51AB5B5458C0A0AD2B07FFFEFFC6DBA
     161      CE13DDA6B694E1B074FA35FE5C4B4B39727393A1A1B19B696B70F04D5455E58A
     162      14B5A50C65870D1B4534CEB4A3A30ACDCD258312B5A50C65E9BDC0B061A3ED6C
     163      6D6F6128A20CF73E62CEB0615F190F1BF62FF7A1E92B63EE3C8249414141DFBA
     164      BABAE6D8DBDB83273B3B3B326E6CE071D3C3321FF922E7FEE498FCE6CA952BBF
     165      989B9B5F0C0808C093274F186564A4A3B8A408D1D151F0BAE5D546AEF15AF159
     166      F1EF0AF39E9E9EE9CF9F3FEFC9CECE66FE2F292B2B8BF9DEE1DEBD7B4878104F
     167      8EC338BC7CF912014101ED1EB73D8E57D455F79A839036A3A9A9092C168B115D
     168      AFA9A9417272321E3D7A04FFBB77F030211E498F1371EB96677B5EDE8BB582BC
     169      8B8B0BFF5CDAD0D0C088FE6F5452521272F30BE01C12072DA75018FBC5C1C4F5
     170      3622E212F609FBE7B1BC7A9A885EE4E5C33138121A57EDF1EB39436C20B15C7A
     171      C9019B1D629E9D0D4AE3CF5FE9FF0BD0FF25ACAAAAE2ABBCAA06192FB3E113E0
     172      8698045F58845AC33997DC1B785F84DA7537ACBF1AFECCD82B7002CF7F656525
     173      F34E98C6298D9C639D4223E0EE6387A7E9E178F1EA01AC636CE05A1208CBC8AB
     174      088D0E849A4B10D65A069E15E4299B9F9707DFF86468DA3A222AEE165E123633
     175      3F0A9631576097EF03C360330444DEC68D90406CB2BE5BE8E673770AE5699B5F
     176      BD7A8552B2BFADC2D370E4AA0D92338390551889B4DC7B300FBB0CB3340FE8DE
     177      368477883B3CC303B0D13AB0C7D2C54D96F2151515C823BEF3F35EC0EA5E1294
     178      AED8E249EA1D64E48593EB6D284E799E87D1030768B89D80AB1FB9070CF4C336
     179      9BBB6C6B17273ECFFC5F1B1943FEF149D866E182A068773C4D0B4164C24DE838
     180      EA41E3CE59289AA9C1E59623EC034370DA33A8E1D66DAFC5EEEEEE282B2B4369
     181      69298A8B8B515858085D8F7BD07675476CA22F7C83AF42CB440DA7AF9D829583
     182      05C2A24211FA3815D77DFC62EED9990CF7F3F33B4EC66A5D78F83D848686F684
     183      8684F4387BDEEAD97EE17A8FBCA90D0E9B9C82899335AE937BA0ABFE01700A4F
     184      C0B3BC2284C43F2C7FF4ECF10EBA0FC8985C9C94F4F0B7C4C4845FEFDFBFFF6B
     185      425CDCAF36379CD7AD3474355C6F7EAB70EB95809EDD7677D8DA2E77BB97689A
     186      B3759D83919C5782B047C95D035DDF9D7CBCA798BBDC94BDE2E2B2C6FF8EDFCA
     187      35872F1D1EB7EB4CBBF99DFBA86C60FDA9DF11CC99334793FEAF4C7F9A3871E2
     188      2671FCECD9B3D5972C59622EAA6CEEDCB9C7A4A5A52FD03ABEFAEAABD9A26C66
     189      CD9AA5BA74E952CBD15F7DF2E3169989A778929C32E2371EFFCE3BEF0CA7757C
     190      FCF1C75F0BF323478E9C3776EC5859CA6F969960C093E4640EBF75EBD6782929
     191      A953CB962DB3A27508F36BE68E563920FBFD35991F46EDE8F3606AD4A8858435
     192      E04998DFFAD3C4D33E27D6C068D782386176DBB66DA704C57CF122C0933E32AC
     193      2871790341F5E5279CEA8F179584DB4FE34CEDCFEE5A102F982FEADB3F513C37
     194      7ECA347E3FFD304A7EA0B1268A27FB6F3EDD7FA262D65FFC84C78FA898F517BF
     195      C18CDFC1B47F30C78FA0FEACE356E6A7259F689D34586CEF1FB133ADA1BB2DB6
     196      A203FEAFDAE0FEB2057699CDB04E69C26522D74C569BB24DD0CEFD9A27162F58
     197      2CC37F0E7FEC84C1FCE21676477C45674F5C552792EBBB91D5C4C6CB56A21636
     198      D21ABB1151DA09B3A74DD08EADEF097CD9D2E91110A1B058E6A74F662D92F9D8
     199      DC375C3EBCACA33BB9B60B251D3D28EEECC1CBF61E64136511A5B4B19141944B
     200      D66FE5B4E2606035620B5B3B0F6B9D5CBCEBE8C94591159D6DD46F11614B095B
     201      DE05D4B281D61E8E6AC87A7A5B0FA29ABB997ACC1E36E04478355B46FE98F49A
     202      83DAD28ED92C762A29CB25EDCD277695DD401551255765A4BE1C5216D2D8058F
     203      862EC49475608747317BB4AC9AF44F7BB5A42D9F37B1B3586C3C6EE9C67D5637
     204      9E90F5441283B8EA2EC4567521A482DC83D775C1AAAA1DFA15ED48A8EFC216A7
     205      57ECAF57A8482FDBA7257DF959133B81D82612D6B084D8BC68834A741394231A
     206      7130BC117F04D5E368660B14F25A71A1AA03C105ADF8C3E5157BF41A35E9AD6A
     207      7A925E39AD558EE9CD784EFC1E7FD18AA5B7EBA092D30235627F90ECC303841D
     208      EF500DB967CD0825ED370CAB826E40395B66BBA6F40F92327F3B6A1F246B9658
     209      DFE54D6C832A3BB1C697F084552E6EC521AADC164C77AA866D413BDCC838D8EC
     210      5088E0CCA65A95632716D0FDAF72FCE49C84A2B65AC3983AD83D6BC2DEC046A8
     211      BE6C852A194354CA647DEDAD5A1847D661CBF5423825D6D5D97885CA9231C4BC
     212      27A04B77FF08D9F8C2D63AEDC052C8B996627D6C13D6E5B7633569075D9F6C9C
     213      8775D62F703BB9BECEDA234476F60269C1770C4C1DAEBEC16B22535ED529997A
     214      42C5CE07CB6D6E42DACC015B742F416AFB71F8C665D6397805AE9927D59BE525
     215      49A945EFEB1B9BCA9EB8789965E7E4046B22D32B5771EEFC39FC2EAFC8523BA6
     216      274B6DFA3B9696AE929D7CC1CAB62938241819E96988898EC675073BEC553ED2
     217      347DD6BCC9031D8B0A070E4D0A8A7DD8A0AC718CBD5751912DBF6B177B97E201
     218      B6FBDDD086AD3BF74C1A889F2B29F5A1C2FE4352D37E9C293D66EC58E9D14493
     219      A67D2FBD4341516AF63CC90F45425366BD2BB17ECF48A239DCE5DC7E9623187B
     220      6E1A3B6EDCF0691AA7A67CECF6F0DC44DFE4C2FF714F3426CBA28FDD12E976B1
     221      C0F2FC449FE4571FB93D3C43EAF892C72F5BB17CB4FC653BFB71DE4F3BCFA7D4
     222      608C7732FB424A2DBEBBFD947D31F5F572CCED64B63129FFD7ADA76D12BB4E6F
     223      1D367DD52CA2AF09BF48C3F25AE7749F6798ED9B8F09371F936501C6DF7CC42C
     224      2778BC5ECEF4C9C74736F7F1ADB67BC7C843F66DEFCB5B5E21BCB49DE30D7654
     225      7E0956FA27C131EA0196DD798C1B117158CA5BFA3D864D683446DB4560B4DE4D
     226      583DC886965F1246293B7452DED1D599DDDADE8EC2F20A94907BC9FCD2329410
     227      E5977096D98545F08F7D0CA9D39EB89298039D80546CB8709BFDC55EEB2A0EEF
     228      C26E6B6B63EE815353537B29E9E953B8F88540C6C01D3684D5F64FC1C64BDE18
     229      A178A5FABDED16FB787C474707731F5F5E5ECED7ABA22204C53D21AC07AE1156
     230      EBEE336C34F6C29883D6DD1FEE303F30EC67E57F8AF39F9CFC0CAE774219D626
     231      211BC77D9F61D3052F8C3D60897DFA17BB166D3DB850E28B31EF88F24FEFA71F
     232      A7666381B613AEC56542D3EB31365DBC8D7107ADB14D4D0F0667CF76118E3E4F
     233      1A26CAFF83870FA16774014B144FE0946B187E277EC71FBA02F5B356387BDE18
     234      672F18772D5BFEB32477FCF4F24F7D27A66461FCEE7398F2CB0E482B1CC75845
     235      0BE85DBE8198FB71F0F1F181898519CFBF84A0FFFCFC7CC6BF7F6010BE9C3A1F
     236      5FFDAE8B6DFBD5A073CE0CE19151644E9B8190901098595A50FF0B84FDD37948
     237      494909D38FA898FB887C928E67CF5398392D9D5BD039069DD732FC6BFF8B1D9C
     238      1CD9B4DDF4F7FCA2A2A2442A32329259D23936E1E9B89BCFE5A75FB2307B68EF
     239      78BDC7C2DA0A16D696FDCADCCA927DDEE4623CE126FF15CFF31748CB7CA0A2A5
     240      3757F680BAE48A839A92CB0F684A2EDDA326B9789BA2A4A4DC36C9B5F2FBE64D
     241      993947EC7BEA7DC7F526DDAF60D55D4B2BEBBA9056DD659C54D17526BAA04BF7
     242      F6D32E250BF78E2BC10949EB771F10D97649720D38E611287B28B99A75AB985C
     243      E7F2BB7136BA1EFA2E65D03AFB044A1AA75BE40FA9CF26FE45BE03513CAE37ED
     244      5E05AB463BAD0E61E5DD30486A83FECD0A685F48C121FDCBECC4E4940CB5C3EA
     245      13459E771749FFEDB05BC02AD567D5AD1EAF3AA19F4CAEE3DE55D036CD8092A9
     246      2B3B313523CBC3EBD6F4055252229FA3EC39A6FBA37F6973D591D43A84577443
     247      37868593D685D865158CC0FB294D37BC82D6D83BB97D2729B550E43BD8597B35
     248      661D785CD6AE9DDD8433598DB8145F854BA175D0BF5E8C13C6CF7B7EDB77BAE6
     249      417246D2E123472788E267C86DFF61A7ED9DE22D971CEB369DB6E851BCE209ED
     250      A85A1CBB98053965F39E80D8A4A21BEE5E0B887F91EF9E464EFC7EF8161DE3D1
     251      273D82E50C031EB08E475440D3E205D69CF0E8F18E7A526CE3E42E396F8194B8
     252      F75612F3162C7CE7BC9DCB2C9BD8B41727EED7F5685E7E89D5677C7A0213D38B
     253      6C9D3D24E7CC977CAFBF71A7A4716CDA83DCCA1CABA8CA9EA396B9587D21B0C7
     254      EF61DA2B0737CF05F3FBF1CB9FBF28EC9BE515FBACDD30A8046B2DA37B829EE6
     255      BCBA4EFA3B4F72C17B8319F78AAA1A33EFA5BC64E9DE8CEC0A4BC92D74F1F296
     256      921C845F81FE7FB45B597DDEE20DDB25553534672C905AF8EE7FDB47FCFFAFCF
     257      FF772D9F6242E7AFE3467E3A6BA8F37F5E723FBEB299CEA3C70AD431D0FC55DC
     258      DC9D57C740F357B1FC884F670E65FECAB45F6B258BEB7BE650E7FFBCF88D1511
     259      BFFF3FFFFF6BE6FFA6961670F17023721FA2DCC0633B5A59A8CE4F47755E1AA3
     260      DA57D9CC6FAA7432BFBFD3C5ACD33C5E39B5A50CCF2FDDBE7968113C0E48C253
     261      451AE1E6AAA8AC28456D7D3DEA1A1A50555986700B55A68CDA505BCAF0DA42EB
     262      A4F96EFBE7C14FE757146424A1A6B696E1EB095F575F874292E7A723C7D8505B
     263      CA08F2B46ECAFA68AD45D4351D9417E531FFF3DFD0D8808AA25CDC335381B7E6
     264      2AF8E9AE27B632BD78DAB7F0CB6A28CC7C8AA8AB5A78E07A01E9D1BE4CBB6BAA
     265      CA9016E189B8EBA71169A589E29C6788B4D4406D510E9FA7BF7D535355CEB4B3
     266      A2381FE9513EC879148EA2EC672879998ADC2472EF19ED83AAD242343537A1BE
     267      B68AF94D231E4F63DCD0D48446A286C646A6AEA2AC64D4D5D5A081D4599A9B4E
     268      986A34B35AC06A6D256A617E3388C7D3F5E696168E582CD4D754A2F4650A9A48
     269      DF59C45F75712E9A1BEBD0D6DE8636D2D67622FA1B4D7CFF9D9D68ACAF01AB85
     270      859AD202A4863823F751182A0AB25053928F92CCC778111F80FACA12C2B6A3A5
     271      A91EDD5D9DAFE357944D62A38EB217CF71CF4489C4471D294137D044EA6C69AC
     272      474EAC2FEEDBE922DC54091579A988B2D260983EFB4F5B0EB70E2F45D84545D4
     273      9517A29DCCC9686C1B2A4B1176611F3C556588CD3AC65678FF33E347712E535E
     274      919BCAFC0651476727135B5A4725B1A165D4A6CFF8111ABFB47DADCD0D0CDBDD
     275      CD463BAB09D1244FF4F81571FC90BED1DF64A231667E0FABBB8BC91375FC5C32
     276      377DE3E3F7A299E95FF27F84C7B5B496681D3BF6F2BCA1618FE129837C7D3D2D
     277      67D34B67154CCF1B4B999A997D278E3B75EAD42784B53133BDD455F0321B4D64
     278      9C3F89BE034BDD9DC8497F86C40771F0F5F1A6DF6727FEF1C71F82DFB04AD8DA
     279      DACA58595995060705A1B4B80859A949303EF2070C146460716036D8ED0DF417
     280      419877E7B191A1D05055DEF7FAFF3F4D46383B3BB764656621F9C903589D3D0A
     281      A96F247068D5B7781C720336CAF3C1EEA0BF9DC946415E2E2A0BB3A0ABAD19FE
     282      FA7F3B75D4E99CAFA4A418FACA5BA0A5B01A0D15AF1075DB1616AACB61B7FD43
     283      74359690B96909622342919410093747BBF675EBE4E80B7C8993274FC6D37780
     284      6964EE594F96ED2D4DE864D582DD5A8FA2D418049D9343734D313CBD3CE1EA68
     285      8FC4D87B789C108B83070E18927B12A9BB77EFF654565691F96B1EB232D2909B
     286      9D8E3272FE6A20C7713BAB919C036A1116120C331313B85CB7435A523C8A725F
     287      D0DF344B26D71163FAEEAFA0A0002F5FBC40516101F25F64A2382F1B95E4BCD7
     288      505180E6AA22F8FBDEC6F9F367E172C31EE9C90F91F2FC19B66FDFDE79FAF4E9
     289      6CFACE95BE7F4C4F4B47DECB1C1417E6A1383F87F02FD1585E80965A72FC05DD
     290      C139234378B9BB90F97026FCFCFC40EEA39A49ECD9745E4CDF9BD69373555969
     291      09C397BDCA4555711EEA09DF46F8A8B040181A9E21FBFF361E3F7902729D05B9
     292      DE9A696969859B999931BFD775FBB63799A367926397F35B62F43CC3AA273168
     293      28477C74182E5B5C66E6DF72727220D75AFAFDAEC4EAD5ABDF575252DABA72E5
     294      CABB1B376E64EDDDBB97A9CBD7D70F69A43F745E4F532999D7D377B59B376F06
     295      B9174C21F70A7DE6B08B172FFEF0B7DF7EDBB06EDD3ABF2D5BB634ABA8A8405F
     296      5F1F1E1E1EB8666303928FF9F3E717CF9C39F38B818E215959D9F7495DB29B36
     297      6DBA4A7C66FFF2CB2F5D844B9B3E7DFAB77FE6B1FABFE275F47C
    277298    }
    278299  end
     
    282303    Top = 200
    283304    object AExit: TAction
     305      Category = 'File'
    284306      Caption = 'Exit'
    285307      ImageIndex = 2
     
    326348    end
    327349    object AAbout: TAction
     350      Category = 'Help'
    328351      Caption = 'About...'
    329352      ImageIndex = 3
     
    331354    end
    332355    object AHomePage: TAction
     356      Category = 'Help'
    333357      Caption = 'Home page'
    334358      OnExecute = AHomePageExecute
     
    406430    end
    407431    object AFullScreen: TAction
     432      Category = 'View'
    408433      Caption = 'Full screen'
    409434      ImageIndex = 24
    410435      OnExecute = AFullScreenExecute
    411436      ShortCut = 122
     437    end
     438    object AKeyShortcuts: TAction
     439      Category = 'Help'
     440      Caption = 'Key shortcuts'
     441      ImageIndex = 25
     442      OnExecute = AKeyShortcutsExecute
    412443    end
    413444  end
  • trunk/Core.lrj

    r174 r177  
    2323{"hash":124338510,"name":"tcore.afileimport.caption","sourcebytes":[73,109,112,111,114,116,46,46,46],"value":"Import..."},
    2424{"hash":131549534,"name":"tcore.afullscreen.caption","sourcebytes":[70,117,108,108,32,115,99,114,101,101,110],"value":"Full screen"},
     25{"hash":122803571,"name":"tcore.akeyshortcuts.caption","sourcebytes":[75,101,121,32,115,104,111,114,116,99,117,116,115],"value":"Key shortcuts"},
    2526{"hash":190444780,"name":"tcore.applicationinfo1.description","sourcebytes":[118,67,97,114,100,32,102,105,108,101,115,32,109,97,110,97,103,101,109,101,110,116,32,116,111,111,108],"value":"vCard files management tool"},
    2627{"hash":51995065,"name":"tcore.selectdirectorydialog1.title","sourcebytes":[83,101,108,101,99,116,32,100,105,114,101,99,116,111,114,121],"value":"Select directory"}
  • trunk/Core.pas

    r176 r177  
    77  LastOpenedList, ApplicationInfo, PersistentForm, ScaleDPI, Common,
    88  Translator, DataFile, VCard, Menus, RegistryEx, Theme, FormMain,
    9   Registry, VCardFile;
     9  Registry, VCardFile, FormKeyShortcuts;
    1010
    1111type
     
    1515  TCore = class(TDataModule)
    1616    AAbout: TAction;
     17    AKeyShortcuts: TAction;
    1718    AFullScreen: TAction;
    1819    AFileImport: TAction;
     
    6667    procedure AGenerateExecute(Sender: TObject);
    6768    procedure AHomePageExecute(Sender: TObject);
     69    procedure AKeyShortcutsExecute(Sender: TObject);
    6870    procedure ANormalizeExecute(Sender: TObject);
    6971    procedure ARemoveExactDuplicatesExecute(Sender: TObject);
     
    8688    RecentFileRegistryContext: TRegistryContext;
    8789    FormMain: TFormMain;
     90    FormKeyShortcuts: TFormKeyShortcuts;
    8891    procedure FileModified(Sender: TObject);
    8992    function FindFirstNonOption: string;
     
    277280      {$ENDIF}
    278281      {$IFDEF UNIX}
    279       ExecuteProgram('/usr/bin/xdg-open', [SelectDirectoryDialog1.FileName]);
     282      ExecuteProgram('/usr/bin/xdg-open', [SelectDirectoryDialog1.FileName], []);
    280283      {$ENDIF}
    281284    end;
     
    329332begin
    330333  OpenWebPage(ApplicationInfo1.HomePage);
     334end;
     335
     336procedure TCore.AKeyShortcutsExecute(Sender: TObject);
     337begin
     338  if not Assigned(FormKeyShortcuts) then
     339    FormKeyShortcuts := TFormKeyShortcuts.Create(nil);
     340  FormKeyShortcuts.ImageList := ImageList1;
     341  FormKeyShortcuts.MainForm := FormMain;
     342  FormKeyShortcuts.SourceComponents.Clear;
     343  FormKeyShortcuts.SourceComponents.Add(Self);
     344  FormKeyShortcuts.Show;
    331345end;
    332346
     
    496510  if Assigned(ProfileImage) then
    497511    FreeAndNil(ProfileImage);
     512  if Assigned(FormKeyShortcuts) then
     513    FreeAndNil(FormKeyShortcuts);
    498514end;
    499515
  • trunk/Forms/FormCompare.pas

    r162 r177  
    151151  SaveStringToFile(TextRight, TempFileRight);
    152152  if FileExists(Core.Core.CompareTool) then
    153     ExecuteProgram(Core.Core.CompareTool, [TempFileLeft, TempFileRight])
     153    ExecuteProgram(Core.Core.CompareTool, [TempFileLeft, TempFileRight], [])
    154154    else ShowMessage(Format(SCompareToolNotFound, [Core.Core.CompareTool]));
    155155end;
  • trunk/Forms/FormMain.lfm

    r174 r177  
    229229        Action = Core.AHomePage
    230230      end
     231      object MenuItem18: TMenuItem
     232        Action = Core.AKeyShortcuts
     233      end
    231234      object MenuItemAbout: TMenuItem
    232235        Action = Core.AAbout
  • trunk/Forms/FormMain.pas

    r176 r177  
    2323    MenuItem16: TMenuItem;
    2424    MenuItem17: TMenuItem;
     25    MenuItem18: TMenuItem;
    2526    MenuItemColumns: TMenuItem;
    2627    MenuItem3: TMenuItem;
  • trunk/Languages/vCardStudio.cs.po

    r174 r177  
    243243msgstr "Domovská stránka"
    244244
     245#: tcore.akeyshortcuts.caption
     246msgid "Key shortcuts"
     247msgstr "Klávesové zkratky"
     248
    245249#: tcore.anormalize.caption
    246250msgctxt "tcore.anormalize.caption"
  • trunk/Languages/vCardStudio.pot

    r174 r177  
    233233msgstr ""
    234234
     235#: tcore.akeyshortcuts.caption
     236msgid "Key shortcuts"
     237msgstr ""
     238
    235239#: tcore.anormalize.caption
    236240msgctxt "tcore.anormalize.caption"
  • trunk/Languages/vCardStudio.sv.po

    r174 r177  
    244244msgstr "Hemsida"
    245245
     246#: tcore.akeyshortcuts.caption
     247msgid "Key shortcuts"
     248msgstr ""
     249
    246250#: tcore.anormalize.caption
    247251msgctxt "tcore.anormalize.caption"
  • trunk/Packages/Common/Common.lpk

    r162 r177  
    4343    <License Value="Copy left."/>
    4444    <Version Minor="12"/>
    45     <Files Count="36">
     45    <Files Count="37">
    4646      <Item1>
    4747        <Filename Value="StopWatch.pas"/>
     
    201201        <UnitName Value="FormAbout"/>
    202202      </Item36>
     203      <Item37>
     204        <Filename Value="Forms\FormKeyShortcuts.pas"/>
     205        <UnitName Value="FormKeyShortcuts"/>
     206      </Item37>
    203207    </Files>
    204208    <CompatibilityMode Value="True"/>
  • trunk/Packages/Common/Common.pas

    r173 r177  
    5555function EndsWith(Text, What: string): Boolean;
    5656function Explode(Separator: Char; Data: string): TStringArray;
    57 procedure ExecuteProgram(Executable: string; Parameters: array of string);
     57procedure ExecuteProgram(Executable: string; Parameters: array of string;
     58  Environment: array of string; CurrentDirectory: string = '');
     59procedure ExecuteProgramOutput(Executable: string; Parameters: array of string;
     60  Environment: array of string; out Output, Error: string;
     61  out ExitCode: Integer; CurrentDirectory: string = '');
    5862procedure FileDialogUpdateFilterFileType(FileDialog: TOpenDialog);
    5963procedure FreeThenNil(var Obj);
     
    6367function GetBit(Variable: QWord; Index: Byte): Boolean;
    6468function GetStringPart(var Text: string; Separator: string): string;
     69function GetEnvironmentVariables: TStringArray;
    6570function GenerateNewName(OldName: string): string;
    6671function GetFileFilterItemExt(Filter: string; Index: Integer): string;
    6772function IntToBin(Data: Int64; Count: Byte): string;
    68 function Implode(Separator: string; List: TList<string>): string;
    69 function Implode(Separator: string; List: TStringList; Around: string = ''): string;
     73function Implode(Separator: string; List: TList<string>): string; overload;
     74function Implode(Separator: string; List: array of string): string; overload;
     75function Implode(Separator: string; List: TStringList; Around: string = ''): string; overload;
    7076function LastPos(const SubStr: String; const S: String): Integer;
    7177function LoadFileToStr(const FileName: TFileName): AnsiString;
     
    98104implementation
    99105
     106resourcestring
     107  SExecutionError = 'Excution error: %s (exit code: %d)';
     108
    100109function StartsWith(Text, What: string): Boolean;
    101110begin
     
    108117end;
    109118
    110 function BinToInt(BinStr : string) : Int64;
    111 var
    112   i : byte;
    113   RetVar : Int64;
     119function BinToInt(BinStr: string): Int64;
     120var
     121  I: Byte;
     122  RetVar: Int64;
    114123begin
    115124  BinStr := UpperCase(BinStr);
    116   if BinStr[length(BinStr)] = 'B' then Delete(BinStr,length(BinStr),1);
     125  if BinStr[length(BinStr)] = 'B' then Delete(BinStr, Length(BinStr), 1);
    117126  RetVar := 0;
    118   for i := 1 to length(BinStr) do begin
    119     if not (BinStr[i] in ['0','1']) then begin
     127  for I := 1 to Length(BinStr) do begin
     128    if not (BinStr[I] in ['0','1']) then begin
    120129      RetVar := 0;
    121130      Break;
    122131    end;
    123     RetVar := (RetVar shl 1) + (byte(BinStr[i]) and 1) ;
     132    RetVar := (RetVar shl 1) + (Byte(BinStr[I]) and 1);
    124133  end;
    125134
     
    136145  end;
    137146end;
    138 
    139147
    140148procedure DeleteFiles(APath, AFileSpec: string);
     
    154162  FindClose(SearchRec);
    155163end;
    156 
    157164
    158165function GetFileFilterItemExt(Filter: string; Index: Integer): string;
     
    177184  if FileExt <> '.*' then
    178185    FileDialog.FileName := ChangeFileExt(FileDialog.FileName, FileExt)
     186end;
     187
     188function GetEnvironmentVariables: TStringArray;
     189var
     190  I: Integer;
     191begin
     192  SetLength(Result, GetEnvironmentVariableCount);
     193  for I := 0 to GetEnvironmentVariableCount - 1 do
     194    Result[I] := GetEnvironmentString(I);
    179195end;
    180196
     
    219235end;*)
    220236
     237function Implode(Separator: string; List: array of string): string;
     238var
     239  I: Integer;
     240begin
     241  Result := '';
     242  for I := 0 to Length(List) - 1 do begin
     243    Result := Result + List[I];
     244    if I < Length(List) - 1 then Result := Result + Separator;
     245  end;
     246end;
     247
    221248function Implode(Separator: string; List: TStringList; Around: string = ''): string;
    222249var
     
    494521end;
    495522
    496 procedure ExecuteProgram(Executable: string; Parameters: array of string);
     523procedure ExecuteProgram(Executable: string; Parameters: array of string;
     524  Environment: array of string; CurrentDirectory: string = '');
    497525var
    498526  Process: TProcess;
    499527  I: Integer;
    500528begin
     529  Process := TProcess.Create(nil);
    501530  try
    502     Process := TProcess.Create(nil);
    503531    Process.Executable := Executable;
    504532    for I := 0 to Length(Parameters) - 1 do
    505533      Process.Parameters.Add(Parameters[I]);
     534    for I := 0 to Length(Environment) - 1 do
     535      Process.Environment.Add(Environment[I]);
     536    Process.CurrentDirectory := CurrentDirectory;
     537    Process.ShowWindow := swoHIDE;
    506538    Process.Options := [poNoConsole];
    507539    Process.Execute;
     
    511543end;
    512544
     545procedure ExecuteProgramOutput(Executable: string; Parameters: array of string;
     546  Environment: array of string; out Output, Error: string; out ExitCode: Integer;
     547  CurrentDirectory: string);
     548var
     549  Process: TProcess;
     550  I: Integer;
     551  ReadCount: Integer;
     552  Buffer: string;
     553const
     554  BufferSize = 1000;
     555begin
     556  Process := TProcess.Create(nil);
     557  try
     558    Process.Executable := Executable;
     559    for I := 0 to Length(Parameters) - 1 do
     560      Process.Parameters.Add(Parameters[I]);
     561    for I := 0 to Length(Environment) - 1 do
     562      Process.Environment.Add(Environment[I]);
     563    Process.CurrentDirectory := CurrentDirectory;
     564    Process.ShowWindow := swoHIDE;
     565    Process.Options := [poNoConsole, poUsePipes];
     566    Process.Execute;
     567
     568    Output := '';
     569    Error := '';
     570    Buffer := '';
     571    SetLength(Buffer, BufferSize);
     572    while Process.Running do begin
     573      if Process.Output.NumBytesAvailable > 0 then begin
     574        ReadCount := Process.Output.Read(Buffer[1], Length(Buffer));
     575        Output := Output + Copy(Buffer, 1, ReadCount);
     576      end;
     577
     578      if Process.Stderr.NumBytesAvailable > 0 then begin
     579        ReadCount := Process.Stderr.Read(Buffer[1], Length(Buffer));
     580        Error := Error + Copy(Buffer, 1, ReadCount)
     581      end;
     582
     583      Sleep(10);
     584    end;
     585
     586    if Process.Output.NumBytesAvailable > 0 then begin
     587      ReadCount := Process.Output.Read(Buffer[1], Length(Buffer));
     588      Output := Output + Copy(Buffer, 1, ReadCount);
     589    end;
     590
     591    if Process.Stderr.NumBytesAvailable > 0 then begin
     592      ReadCount := Process.Stderr.Read(Buffer[1], Length(Buffer));
     593      Error := Error + Copy(Buffer, 1, ReadCount);
     594    end;
     595
     596    ExitCode := Process.ExitCode;
     597
     598    if (ExitCode <> 0) or (Error <> '') then
     599      raise Exception.Create(Format(SExecutionError, [Output + Error, ExitCode]));
     600  finally
     601    Process.Free;
     602  end;
     603end;
     604
    513605procedure FreeThenNil(var Obj);
    514606begin
     
    529621procedure OpenFileInShell(FileName: string);
    530622begin
    531   ExecuteProgram('cmd.exe', ['/c', 'start', FileName]);
     623  ExecuteProgram('cmd.exe', ['/c', 'start', FileName], []);
    532624end;
    533625
  • trunk/Packages/Common/CommonPackage.pas

    r162 r177  
    1414  ScaleDPI, Theme, StringTable, MetaCanvas, Geometric, Translator, Languages,
    1515  PixelPointer, DataFile, TestCase, Generics, Table, FormEx, FormTests,
    16   FormTest, FormAbout, LazarusPackageIntf;
     16  FormTest, FormAbout, FormKeyShortcuts, LazarusPackageIntf;
    1717
    1818implementation
  • trunk/Packages/Common/FormEx.pas

    r176 r177  
    8282procedure TFormEx.DoClose(var CloseAction: TCloseAction);
    8383begin
    84   if  (not (csDesigning in ComponentState)) then begin
     84  if (not (csDesigning in ComponentState)) then begin
    8585    PersistentForm.FormFullScreen := FullScreen;
    8686    PersistentForm.Save(Self);
  • trunk/Packages/Common/ListViewSort.pas

    r172 r177  
    358358    List.Clear;
    359359    List.AddRange(Source);
    360   end else List.Clear;
     360  end;
    361361  if ListView.Items.Count <> List.Count then
    362362    ListView.Items.Count := List.Count;
  • trunk/Packages/Common/PersistentForm.pas

    r176 r177  
    336336    end;
    337337    Form.OnWindowStateChange := OldHandler;
     338    FormFullScreen := True;
    338339    {$ENDIF}
    339340  end else begin
Note: See TracChangeset for help on using the changeset viewer.