diff -Nru vcard-studio-1.5.0/Core.lfm vcard-studio-1.5.0/Core.lfm --- vcard-studio-1.5.0/Core.lfm 2023-07-02 01:46:14.000000000 +0000 +++ vcard-studio-1.5.0/Core.lfm 2023-07-03 01:46:07.000000000 +0000 @@ -11,255 +11,252 @@ Left = 115 Top = 200 Bitmap = { - 4C7A170000001000000010000000ED1E00000000000078DADD9C07581547DBF7 - 216A8CC99BF698C4688AC6AE31B1451115138D9518E2A3C61651515111418A4A - 155450501190A234A523A88074902E20A888D24101A98228BD97C3FF9BD9533C - 1CCE818326EFF3BCDF78FDAF999DB97F73CFCCCEEEECEC1E9490F8E7428EED6E - 70956EB5B38F4C36CFC3407C4B4B8B4889C37776760235C57D45C2407C6D562C - 63579C1D8BF2FC04A4061A08E5C5E927DA1A8157451C15F6E107EA27D77F7694 - 090A132DFBF003F513AD754055EE6BF1F159D6BB98E340DB9D88745612DACFFE - FC3FB6DCC11CBFEE5FDF7EF6E73FF5C2F63EFE05FD080B5C3EFEF42676067FFD - 027E1E45F931B1A0F8F9FEFCF7374FC4F12F162F220CC40BEB97B07EFE37872F - BF8C03555C5C1CDEC476DCB814F04B543DFD954F9E9C067E09DA88CA170CD3A6 - A5832BAE2D7F5A9C306346160435189E86993373C1D560D939739E4050E2D631 - 6F5E21B8E23282C7A2C28205C5E04AD056543E372C5C580AAEFAB3791B5E9C3A - 063BD66F12FEB7FC88193080C4E28505B1796363A17508E38DFBE6B179217508 - F294ED9717A8839FE7B2FC129717C60E867F5BFF62F75FE05C0E7AFC07F02F72 - EE09F06F301F05F937BB0EDE8E9718C43533501DFF919064BC1C778C9621CF49 - 0539970E20CB660F1307EA2C4680F622F4CF2E43819B169A9E24A3BBAD01E8E9 - 61D4DD5C83869C38245BCBC3EBF05CA175241AFF8A8A087BC6B62B231E9DDE26 - 60996C06CB7823DA3D4FA12D2D1A9D0D95C8B8A60BF783D3D19B5DC1F8A56C67 - AC17A0FB2B1079953CB33631FE7B6A2AD069AF86A65027B4D73F47E4F94DB0DB - 3B995747A2D152D43F4940677A1CA0F30B60A7CA6EFBBD40B02EEE45E75D7FF4 - B434A0454B06354981287F10044BF9EF787CBAD15AA6BF9DA49DD05C0818CB01 - 7EE7D073E807B4ED9F8206AB034C7D2F8C3622F7F42EB437BCC2C93FC7F2F887 - D49E8ED3C9B580DA6C407906584A53D1AE3801CD568A6011DFCD5949B8BBEE4B - DCDE3A8598B26024FBF56BFEE42A866FD75D898E03D3D0AA38090DBBC6A1E1CC - 0626BF3ED61B49DB262274EDE708DB3C91E10D578F79CD1BAE60C6EED5650D54 - EDFA0EC5DBBEC1D32DA35173FD2CC3A7C8FD0B116B3F45D0DA9148D6DB80D6FA - 57648847F3F8609D85A8CB8967C6A670DB18646F1A858C0D239177FC7794799D - 41246565FF8550D94F5014E185827BE1D8B4F8431E1FAAF51372EC95D1515F89 - 420F5324AF1B8938B94F51E065CAF80F59F329C3665F3D85A6579570D05C8F35 - 3F7DD86B0E04AA7D8FA7374EA0BDAE12A5915E4835D884F82D1310B7793CEE19 - 6E42D1ED6B687C598920EB63583DFB3DA173D0556906E24CB7A0F85E30DAC839 - EA6175336A21FDA56DBEAABD19AB44B0DC7071EF349C26636DBAEE739C92FD06 - 06AB464367F9286C59FC519F36FF9DA13DD51DB5977E11A9F634EFFEF7CAC406 - 05292083047477BE5E403BDBD0E17F00EDC9F6A849BC8A7EF997CF80A20764C3 - 9D0694A6036599404536C377D716A333C357641D0CDF42F698258F781C9EE791 - 3DD81386EF21FBCFEEBA52743C7021F3CC194279D256364BF66D954F8017854C - 9B5E06EA33757055EFBE05353535E8C393738D8A1C365B4DF7BF25406D391AF2 - 93D1989FC2566936EA6F2A233F3FBF2F4F43653E610B396C05D05045C6B41A64 - E2B2457C3485E989E6AB0A489B8B19BF68201CB92ED1DAC07EFFD0D6C49834C7 - 98F6E52F2F65F3B4DD0CFB823D9E94E968658F0D15092D772CFAF276E49E49EE - 0BA82965B799FAA53E29DBDDC11E1B561787BF28BCFD74DED43D67CF21EABBBD - 19E86AE77160B1D87CDC05E13C6D1F6D77732DC7770BE13BD83C6D1B6D03B91F - 34471A09E7E938D131E6EF37E5BBBBD875307D60A129E888709E9E27DA66DA0F - C6178BB786B1D3EC3634F8ECE9C3B7A6D8F1AEB57AE77FA3C17B171AFD0EA129 - F0089A828F9158931C2BA3E1DA4E3C8FB2EEC3D3F0F2E54B265F1C51DBFFD0FE - E06D9F65F0373CE308B665D07B955EEDE03EABBE7E5E1DD4732797ED37EEEFB9 - 752076005E84ADF81264F99FC545896FFCDE82E5F5FF0D59E1FB07F15989418E - D57F5D70D75B0D2A37DD5570D3590957ED1570D15A0E9763BFC2F9E8325C3DB2 - 1457357FC1158D9FE1A4BE044E6A32703CBC180EAA8BE0A0B2906163DC0C11E3 - 6A8068D7E38876D147B4B33EA29CF5C823B42E22AF50E9E0B69336221C891CB4 - 10EE700CE1F647617F489AF1CB0D3DF4599B8845EEB12C729FEC26F7DDEEAE2E - 747575A2ABB3039D541DEDE8E820CF14ED6DB05396822B6933F38ED4C404F2F2 - F270717121B7D87E58C2B553B5B5E2F2C1F9A4BFCB199F3B77EE848D8D0D366C - D8C0B07A7A7AD0D1D1C1D1A347A1A1A1015555551C3CA8847DFBF661F7EEDD68 - 6B6BC125A579CC38F590F69A999961FDFAF5F0F0F060FB247ADD5EAEDF56C62F - 65DB5A9B7169FF4FCC18B3FBCA6E33BBBDFDB0AD6CB6B5A519B6FBE632E787B2 - 21212130267334263ABACF38B1D9163EB689918DE26C5C21E7968ED3C9932791 - 9898080B0B0B86D5D3D3E5F4FF0834D4D5A1A2A2022525DA7F45D27F05B43437 - C27AEF2C322F96306D7676BE0A434343F8F9F9F61AE3368EDF568EDF96E62686 - 6D6E6A80D5EE99CC7C62B7B783AFAF026C4B5FB6B9A91E560A3F327391B63726 - 261A565656888A8AEC35C6AFD9C6D76C633D9A882EEEFA8199C7D4AFBEBE3ED3 - 7F3A8FA84F5D5D5D686B6BE3C8912350575723FD3F44FA7F008A8A8A50505040 - 63431D2C777E0F7B720DD036DBDADA30ACA38343AF317EDDDE06C66753631DC3 - 3636D4C262C774720D2C60DADB2E384EFDB1F5B568A8AF81B9FC34E61AA0F398 - CE453A9FE89CB0519CC39C5B7A7EE818D371A27DB5DC358369B385FC74986F9F - 860B7F4DC53FB0BEBFC9FD50E4FB3B61EFF384AC8783E2DFD6BFD035E8FF075E - 9C7767A2D66071D6CFFED670F1DFDDBD11FFB6FDFF877989B7BC7EFEF6E06A6B - 0A274B2346342D0EC3B5A769FB0B27787DA669C172C1606F6184D4A418B205AB - 85A59116A39ACA6246DC635A466D7C5C2EF5AA63BFFC3A3CBC1BCB94B7B73533 - A2A19BACCBDD9C3D23379FDA505BA55D1B7875D034CD8FBC7905CFF232515B57 - 879795A528CB4F6744D3348F96511B6ACBCF73EB78F6AC88517AE26D9893F62E - 97FE91114DD33C6E393F6B6EA48DB3C73560AC730879D999B87727023E4E96D8 - FAC70ADE63F1AE4DBF3379B48CDA505BCA50D6444F8D37CEB151E1C8799804A5 - 1D1B782C57348F96511BDE7765C29E353882AAE25C46B76E7AA3AAAC50244FCB - 181B8E3D65572E9A892573A74261D35AF87B7B203E2A9489F9EBA069FE326A4B - 19CA72C781E69590B1BEE9EE88F292025E1D5C96E6D1326A436DF9C7FEE79FA6 - 32F9F43CD1D8EF9A0B4A0B9F202CE006239AA679FC3694E1E7436FF930F92931 - C1BCB8A6A290117F1E8DA92D3FCFADC3E4B82653BEF9F7653876680F8FA7699A - 47CBA88D20CB5F07B74C4B651F2A9E6630A269C1F28102D776300C37A8F9A841 - 622FB9BFEC96809A97DAE0EF33847D45FE99F59891C92B81ACAC2C0C9667D82A - D2861D12080C0C1C1CBF9BC357107EFB1BF0BB387C31E1B7F5CFF3C68A335E94 - E5F18524BD856813D146A20D44EBC8983AF18D29DF58F14BA288D8E61365113D - 264A254A214A2492E51B536E5FAB49FE73A2520936FB44047B8768F5EB3E31E7 - 77077B9C685F79EDCDE1B0A4BD1272446BD97EA9E48EC9F51A13DA167ACC15D3 - D70CA23436CB5FC655BF73620387BDCFF63BE8F3B78EC3DE65B777D0BC1CDF78 - AD1E3CAFE6A8C61EABD57DC74ADCC03FA683BE7EFE03C1CC2C92B4D114EC5854 - F951A1E55C56C1913E1F9D21FBCEDEDF1AB82CBB5CB54F398FDD4CB491DA9CE2 - D9F4621712CDA3E50750505080DEF59F61B3EB89E4A88D3EA70E41763FD9FF5E - EC734ED9B6A7D8EC6F44AB20D42F97E5F7DFBB0E7D36BB8C6889F86CEF3A8EBE - 112B74AC66117D4FEB501032EE03B064AC246690780AD1047ABC55681DA258DA - 66EA9761C7127D45F3370AA94343E43962DB6E65B35F127D4ECBD70939FFAA22 - C78A5DC7461E2BFAFCEF1739CEECF275FD9E079AD7DF391AA8FCFF7078DBFD4D - 7FFBFC37E607F3FB237E9FDCF400BFD9E9D73F0DC642F245FDFE46C8BB0D913C - 3716D73F7FBF44FD7E485CFF82F50FC6BFE07EDAB8F7B7A0B7F12F340CC27FBF - FCDBF81F486F7DE109ECF3FE0E71C647E4F1FF059ECBF0A7DFA40D6FC2F2FB7D - 53FE6D7C539DE0F83EF1867570B9139C3AC4AD47D09E9F1BA80E61B6FF699EBF - 4F83E9FF3F715D0AD53FF0AFCFBD7290F6BC6FBAA2EEBD82ACB131F3ED8BF75E - 959FE3AEC59C7263EE7B723EDE5848BEB036F2FB10EA7F80F7B5C6FDF8E7EFC3 - 40B148FFFC71FF6BC680FE8DFB59938DC5F4DFDF9ACEAD6320FFC2D65CC1BE0C - C6BF90F5576CFFC2DA226AFE8AEB5FD47C1367ED3716E3DA12E3DAE30649A231 - 444788E2890A898A8862895488BE257A47C4630465E7D39F51123D26B2263ACC - E1EC88D288023836C2C2444E790C9114D170BEB2F78896114571CA3F14608711 - 29D35726443222EAA7ED5ECCE98FA240D9684EBB4F13BD3FC0E3D245A204A277 - F9F22610DDA3AFB0C578DC9227CA26FAEA2DF81CA2AFDFA2FD4902ED1FCCF83D - 233A20E2FCF98971FE3A88A445CC9F3944FEFDCC9F1A22165108D14C11EDE4CE - DF3B4415445544719CFE2D27BA4FD4457F724C34ED0D1E9747D29F7B137513A5 - 10FDF40675FC48749BA89328E20D787A2EE612797224F186757CC151EF8B61ED - 9421E38C57FEB9CA6089A7D2811FEEEB6F1A777FD7B649D766FE3579DB28E92F - 86F557E98413AB668CB35E97B9D17C0DECCC9622C0481ADE1A33E128FF1DE476 - 4FC7A7DBC7E77DF6FB577385B1E38EC9CC9C7CE1B73A57CF4DC88D564056B83C - 1EFA6E42BCFD6A049E9C0FC3BDDF63B4CA4C7CB9695CF39C55A3A4F8D96FD74E - 19B6C27049AEB9DB46E46568E355F17954179E41F1C323C808DA8E64D735F8D3 - 7A2D3ED291C270F51FF0EE9ACF8B3F9EFF09EF5A39B87BBAFC1AABB5484D3880 - E467D6E86C4B426B830F9EE76A23376A2F12AFCAE290B52C3E365888F7487F24 - D78FC107CB472A73790BF909BEFE6EEBB0E1AE21B695B823A0350D65F57EA8C8 - D624FC6E245C59835B8673B1FCF06C4CDB3E0943B67C8B612B3F8BE2F2363B27 - 64DF74FC0D33E38E6351BA193657F840A1DC1D171E1B22EED65F88B8F033AE1F - 9E0EDB359F436BCA304CFA6D0C866D1C5DC1E3B78ECD0B3493C14C7F2548259F - 854CC665CC7D688AE9B73571F2FC0ADCD49E03BB4DDFE0B4F44750FBEE1D2C58 - 3E0AEF1D1C5FC5E5CFCA8E0AF5529D062363194C74DF8919113A9816A281998E - DBE0AD390B4EE4FC99AF18099DEF8743FD5B094C92FD0A9FDA4B25F1F6A9BF7E - 76C86CF51770DD3311F30D6530CA4A0E936DD6E1B8E274D893BE5AADFE0C2767 - BF0FE56F2571F86B097C7D683A7EF65FAAC3E5FF98FEE187E7967CF2DCEC974F - B14461323ED29A8F0DDB26C064D94898C97C0CFD1FDEE3B1EAE387E2D7F3735E - 6DFF7DF448BE9BC790E923876D379A35A26BFDC28F31E5DF5F43E78711D09CF2 - 2ED4C60F81E25712D8375A82E18FCF1AC15AF0ED7BFB86484A0C11B807CE99FC - E950079529C3DB972FFE042AC456913007880E8E9180CAD821309CF73F1D73C7 - 0C77E6DCAB86095C4FF4DE23F7FE30C90BD2133E48FF79E598FA1DBF7FDDBD4B - 614AF76FBB2737C84D7E3FE3A3E1EF58305F17D8B6826BE950A2CF38F787359C - F5E030470A9CBC1F393643FB59878772D6814F38F7AB919CF4FB9C32C9FFA617 - 7F7F6EFF13EEDEEE441E7023B1DB3537B87AB93272F17485B3A70B9C3D9C99F8 - 2A89AFBA5FC5152227B72BD8B2732BF61DDE0F930BA6CC6FF806132E395E86A2 - CA3EA8EB682020221067CCCE885D07656F04DD6458AAD4AC87B8151E20561D5C - 9632FCBC3875F0B3C2782AFFB05B42EB106445F17129F15039A68AD3E75FD741 - 59755D0DA6AC3F3EFEDE1D286B1E42626A12FCC2FC71DCE8380C4F1BE266B02F - 9347CBA88D30FECEFD041CD45466ECF87DF08B96511B6ACBCF273C488492C641 - 5E7E7FA236D49632945539AA0A2575F1D85E751086B20B7F5D04351D751C33D4 - 1A9428B378850C1A1A1ADE4A6F7BFD494A96119513DD94E03CBBEDA4313D9694 - ACE0485859398765F85344C4C8363527270734A6C7FC1252768ACD1652051A19 - 013232D908080860620303F4127F19B5A50C9BCDA68AD0D26261E6CC787CFAA9 - 2913ABAA76F5127F19B5A50C6525241E50DD5151E9444E4E175C5D5FC1DBBB01 - 898955D8BBB785A7EDDBEB202757CEC4D496326C966E0712EEEDD9D38E952B8B - B06E5D25239ADEB6AD5EA8A82D65D8EC542A0DCE2FA0C514DD974ED560B353A8 - 8EF6F4D0DF0F779231F2809D9D093C3D2F31C7AFF3CEF08EA92D65D8EC642AED - EE6EFA7BE1169ECCCD8F8B3CA6B694E1B0547A9D9DCD6869A9435EDE239C3AA5 - 8EA8A85BCC3157348F9BA6B69461B393A80CDBDBEBC87CAEE2E9C8913D228FA9 - 2D65D82CDD7A4C3CD5DAFA123535A58C9E3DCBC4BE7D7FF28E699A2B7A4C6D29 - C366E9F66BC29996964A1414A4415D7D17D3D6D0D06BA8AE2E102A6A4B19CA4A - 4A8E211A7FA1A3A31A4D4DE56289DA5286B2F459405272AC83BDFD750C4694E1 - 3C47CC9594FCC25452F21BCFC1E90B53CE3E82092121215FBBBBBBE73B3A3A82 - 2B070707326FECE075CDCBAA084542F7FEE49AFCCAD6D6F6370B0B8B73414141 - 78F0E001A3ECEC2C949597223636063ED77DDAC81AAF95989B384490F7F6F6CE - 7AFCF8714F5E5E1EF37749B9B9B9CCEF1D6EDFBE8DA4BB89E43A4CC0D3A74F11 - 1412D4EE75C3EB5855EDCB5E7B10D266343636A2B9B999114DBF7AF50A696969 - B877EF1E02036E21392911A9F75370FDBA777B61E193B5FCBC9B9B1BEF5E5A5F - 5FCF88FE6D546A6A2A0A8A9EC1352C015A2EE130F54F8099FB0D442524ED15F4 - CF65B9F534123D292C82736834D42F39E28F3346584FC672E979276C728A7B74 - 3A2493B77FA57F2F40FF96B0BABA9AA7CAEA57C87E9A07DF200FC425F9C132DC - 06AE05E4D9E0E639A85EF1C0BA4B918F4C7D822772FDBF78F182F9264CC72993 - DC635DC2A3E0E9EB8087599178527217367176702F0F8655F42584C70643D52D - 046BAD824FF3F3942D2A2C845F621A34ED9D1193701D4F099B531403AB385B38 - 14F9C228D41C41D13770352C181B6D028A3D7C03A6529EB6B9A4A40415E47C5B - 476642E3921DD27242905B1C8DCC82DBB088B808F34C2FE8DE30C2CD304F7847 - 0661834D708F959B872CE5ABAAAA50487C17153E81F5ED5428D9DAE341C62D64 - 174692F5361C27BC4D607CD709EA1EFA70F727CF80C1FED86A17C0B27173E1F1 - CCDFB591391498988AAD966E0889F5C4C3CC3044275D838EB31ED46F9D86A2B9 - 2ADCAE3BC331380C27BD43EAAFDFF059ECE9E989E7CF9FA3A2A202656565282E - 2E86AED76D68BB7B223EC50F7EA197A065A68A93974FC0DAC9121131E108BF9F - 812BBEFE71B71DCC86F9FBFB1F2373B53632F236C2C3C37BC2C3C27A5CBDAFF7 - 6C3B7BA547FE821D0E9B9D80998B0DAE9067A04B814170894CC2A3C252842526 - 57DE7B747F3B3D07644E2E4E4D4DFE774A4AD21F77EEDCF9232921E10FBBABAE - BFAF3472375A6771BD788B6D50CF2E875B2C6DB780EE5F342D58BAAEA1482B2C - 47C4BDB4AE81D67717DF9B532DDCAEC9DABAB9AD09BCE5BF72CDE1F387C7EF3C - D56E71EB0E5ED437BFF5778608E3D1B7420D3E42A8FE0884EA0D277A0F2144A1 - 1CF1D2B49CD851FB48936F25224DC632A2798309A1061FE3F699AF797C08A997 - 86E509C09A2460D55DA02CC4002B93C1884993BC157739FCF10F70FBF457AF79 - 3D365F18701CC5C186280E35425198099E851A332A0A374171D81914879F456E - C021A63FE1A7BE90B87DE61B860F26C7EC3F4ACD075A0B808E62E4869891B804 - E82C417E38FD3FA45E1135E09626FB9D7090CEBBBC3A787C3BB1EF2803BA2B91 - 4B99EE2A80F502F95197E0AB26013FA2347739A0ED19FBFFAAD21E8A70A3513C - 3E2BD81CD9A117911B6183BCC8CB24B665941769DF7B009B0B493B4B3863F911 - 78FEBB6B89BF3A9268426EA41D35A49D425EB413895BD9C7D4A69DB4ABF3555F - BE87FE6D30551772A3AED00AE91FECE249FC35F86B48307AE4BD8DD78C409DA1 - F4D9752E97CF8E74424E9413F2625C901FEF8EBC5857464F13BC5170D71F85F7 - 427B8D1F65D9E337A2CF1CC98DF5E04B7BF2D299FE4AA0F65CF68DE69FE12764 - FEBC9E7F61A74637B2C7610482758713BDC78C0913F3A7F546307397DAF3CF7F - 126671D6617135EBEFFC7E4FC3929F7FF950EBB8E162C7C0A81D99F5DD6DF155 - 1D082C6983E7D31638E434C126BD111789DC739ADB94ED4276ECD3D45FBC60F1 - 12DE7BF8A3FA86F3CB5A581D89559D3D09D59D48ABEB466E230B4F5B895A58C8 - 6CE846544527CC1F36423BBEAE27F8694BA7575094C2E2253F7F387BD1920F2C - FC22E5239F7774A7D574A1BCA307659D3D78DADE833CA25CA2F43616B2890A48 - FA7A7E2B0E04BF447C716BE761ADE38B771E39BE28BAAAB38DFA2D256C05612B - BB801A1699B53D6CBD22E9ACB61EC4347533F59827D7433FF2256B89FC519935 - 07B4659CF39A5919A4AC80B4B788D8BD2053B79AE80547CF497DF9A42CACA10B - 5EF55D887BDE81ED5E65ACB1B2AA323FEFD192B17ADCC8CA6D66E17E4B37EE34 - 77E30149A790314878D985F8EA2E84559167F0DA2E5857B7C3A0AA1D49755DD8 - EC52C21ABDE290CCB2BD5A32171F35B292886D0A618DCA89CD93361C8A6D8472 - 54030E4436E0AF903A1CC9698142612BCE567720F4592BFE722B618D5DA32AB3 - 45554FCA27BFB5DA39AB098F89DF634F5AB1F4462D0EE5B74095D81F20E7703F - 612738BD84DCA3268493F61B45544337A892B5649BA6CC0F524BDE3DE218226B - 9E52D77593D886BCE8C41A3FC21356B9AC1507A90A5A30C3E525EC9FB5C383CC - 834D4EC508CD69AC3974547F013DFF878E1D9F9B54DA566314570B87478DD813 - DC0095A7AD502173884A99A4D75EAF8169742D365F29864B4A6DAD9D4FB82C99 - 43CC77021A7B0646C92616B7D66A075740CEBD02EBE21BF17B513B569376D0F4 - 14D342FC6EF30437D2EA6A6DBCC264E72C90E1FFC6C0D4E1EE17BA263ABDA456 - E982370E39F862B9DD35C8983B61B3EE79486F3B06BF849C5A279FE035F3A47B - B3DC2025BD68B881E90559FD73179B1D5C5C604374C1F612CE989CC19FF28ACD - AA47F564A94D7FEBEDD255B253CE5ADB37868685223B2B1371B1B1B8E2E4803D - CA1A8D3366CF9B32D07AADB0FFE0E490F8E47A65F5A3AC3D8A8A2CF99D3B593B - 15F7B33C03C2EBB7ECD83D7920FE2729E9110AFB0E4A4FFF7196CCB8EFBE9319 - 4B3479FAF732DB1514A5E7CC931A21149A3A7B88C4BADD5F12CDE5C43FF5138F - 62EC39E1BBF1E3874D573F31F5038FE43393FCD28AFFC733C594C4A51F78A4D0 - E332BED864926F5AC9FB1EC9A7481D9F73F9652B968F95BFE8E038FEE6C34E93 - F4571877338D7536BD06DFDE78C83A97F13A1E77238D654ACABFB9FEB04D62E7 - C92D923356CD261A4DF845EA56973B67F83EC21CBF224CBC769FC4CF30E1DA3D - 269EE8F53A9EE55B84F7EDEEE06B6DCF8E2F0F3AB60D97B7B225BC8C83F35556 - 4C51395606A6C239E62E96DDBA8FAB510958CA8DFDEFC32E3C16631DA23056EF - 1AACEFE641CB3F1563949D3A29EFECEECA6A6D6F47716515CAC9B36451C57394 - 131595B3E3BCE25204C6DF87F4496FD8A6E443272803EBCFDE607DB6C7A69ACD - BBB1DADADA9867E08C8C8C5E4A7DF8106EFE615862E8093BC26A07A663C3F99B - 18A568FB72E836CBBD5CBEA3A383798EAFACACE4A9A4B41421090F08EB85CB84 - D50A78840DA63E1877C0A67BC4768BFD92BF2AFF4B94FFB4B44770BF15CEB076 - 497938E6F7081BCFFAE0BBFD56D86B70AE6BD196030B253E1BF78E30FFF479FA - 7E461E1668BBE072420E347DEE63E3B91B187FC0065B55F56078FA7417E1E8FB - 244961FEEF262743CFF82C7E51D4C709F708FC49FC4E38680BB5D3D6386D628A - D3674DBB962DFF558A337F7AF9A7BE53D2733161D7194CFD6D3B64148EE13B45 - 4BE85DBC8AB83B09F0F5F58599A539D7BF04BFFFA2A222C67F6070083E9F361F - 5FFCA98BADFB54A173C61C91D131644F9B8DB0B030985B5952FF0B04FDD37D48 - 797939D38F98B83B887E9085478FD3993D2DDD5BD03D06DDD732FC6BFF8B9D5C - 9C59B4DDF4FFF38B898911AAE8E86826A67B6CC2D379379FC3CF386F699EECE8 - 7CA5C7D2C61A963656FDCAC2DA8A6562762E917053FE89F7F90B6496BC77484B - EF27D9FD6A522B0E684A2DDFAF29B574B7AAD4E2AD8A5252725BA5D6CAEF9D37 - 75D65C91DFA9F71ED39B7CA7AAB9F672E6F3AEB3992FBB4C53ABBA4EC53EEBD2 - BDF1B04BC9D2B3C336342975DDAEFD42DB2E45D680A35EC1B207D35E365F2F23 - EB5C51374EC7D6C1C0ED39B44E3F8092FAC916F9836A73887FA1DF40148FE94D - BF5DD5FC4A3BB3161195DD304C6D83C1B52A689F4DC741838BAC94B4F46CD5C3 - 6A9384DE7717C9BC7BD8236895CAA397AD5E259D304823EBF8CD6A685FC886D2 - 0577564A4676AE97CFF5190BA4A585BE47D97D54F7C7C08AA66A8D8C5A445675 - 4337AE19C76D8AB1D33A14C177D21BAFFA84AC7174F1F8564A7AA1D06FB0B3F7 - A8CFDE7FFF79BB765E234EE536E07C6235CE87D7C2E04A19F44D1FF7FC7BEFC9 - 5777D3B2530F6B1C99288C9F29B7ED871DF6B7CA369F77AEDD78D2B247D1D61B - DA3135387A2E1772CA163D41F1A9A5573D7D1610FF42BF3D7D39E9FB619B754C - C71EF70A95330ABADB7C2CAA0A9A964FB046DFABE766CC83323B174FA9790BA4 - 457DB79298B760E13B260E6EB3EDE2339FE8DFA9EDD1BCF814AB4FF9F604A764 - 95DABB7A49CD9D2F35B4BF79A7A47E74FADD8217F9D6312F7A8E581560F5D9E0 - 1EFFE4CC12270FEF05F3FBF1CB0D9B15F6CEF6897FD46E14528EB556B13D210F - F34BAE90FECE935A30549C79AFA8A23EEB76FAD366DD6BD15D11E905C56E3E37 - A5A5C4F0CBD7FFF77729ABCD5BBC7E9B948ABAE6CC05D20B87FC6F7C7FFB7FC1 - FBC392 + 4C7A1800000010000000100000008F1E00000000000078DAED9C075C54C7FAF7 + 21C69BF64F6E724D6C29F61A8D5D40054B6C10438C1A5B4444C5862088D21515 + 545404A4284DE9084A51BA52A40A2AA2801415101104517A2FCBEF3F73B6B82C + BBCBA2C97BEF7DDF77FCFC3E73CECCF39D67E63973CA9C3D2825F5F7A55C87AD + E02AD356B5874EAE9B85DEF8A6A6269192846F6F6F07AA8A7B8AA4DEF8EA47B7 + 18BBE29C5B287D9C84F490C3427949C689967AE04D1147853DF8DEC6C9F59F13 + 731285C9363DF8DEC689E61AA022EFADF8F847765B98FD10075544BBED163A4E + 71FE1FDA6C66F6DF8EAFE738C5F94F3FBBA9877F413FC212974F38BE965DC0DF + BE809F0731414C2E287E5E9C7F71F34412FF12F122526FBCB071091BE77F721A + 3C381E54F1F1F17817DBE1C3D3C02F51ED88AB1F3B3603FC12B411552E98264C + C804575C5BFE6D49D2A4498F20A8BEF0344D999207AEFACA4E9FFE048292B48D + 59B30AC1159711DC179564658BC195A0ADA8726E9A33A7045C89B3791F5E9236 + FA1AEB7749FFA7FC4898D08B24E2852589797373A16D08E3CD7B96B179216D08 + F29415CB0BB4C1CF73597E49CA0B63FBC2BFAF7F89C72F702CFB1CFF5EFC8B9C + 7B02FC3BCC4741FEDDCE83F7E3A5FA70CEF4D6C6BF25A5982F46A2D922E4BB6A + 22F7FC2E3CB2DFC6E42186F370DD602EC4B38B50E0A98F8627A9E86CA903BABA + 18753656A12E371EA9762AF0DD3743681BC9E63FA3EC861363DB91958076BF93 + 609D5C0796F91AB4FA1C434B462CDAEBCA9175D9085E7B26A23BBB84F14BD9F6 + 5BBE80D1CF40F425F2CCDAC0F8EFAA2A43BB93361A225CD15AFB12D167D6C271 + FB585E1BC9660B51FB2409ED99F180E102C0518BDDF73B21609DDB8EF6DBC1E8 + 6AAA4393BE3CAA5242507A2F14362A23787CA6D90A66BCEDA49FD09D03982B03 + 41A7D1B577325A768E439DED2EA6BD57666B90777C0B5AEBDEE0E81FC378FC7D + 6A4FE3747405A03D0DD09804D6EEF168551F85465B75B088EFC64729B8BD7230 + 6E6E18474C593053FAEE2D7F7419C3B71A2D45DBAE0968561F83BA2DC3517762 + 35535E7BCB0F291B472362C537885C379AE14D970F7DCB9B2E6162F7E6C27E54 + 6C1981E28DDFE3E9FA21A8BA728AE1D394FF851B2BBE42E88A0148355E8DE6DA + 3724C443787C98E11CD4E42630B129DC3814396B07216BF500E41FFA152F7C4F + 209AB24AFF4284D29728BAE18B823B51583BEF731E1FA13F13B94E1A68AB2D47 + A1B70552570E40BCF25728F0B560FC872B7EC5B039978EA1E14D399C75574171 + E6E7DDE64088F68F787AF5085A6BCA5112ED8BF4C36B91B07E14E2D78DC41DD3 + B528BA7919F5AFCB116AA787E5D33E163A073D764F42BCC57A14DF09430B3946 + 5DAC4E464D64BCB4CF970CD6619908969BCE6D9F80E324D6162BBFC131A5EF71 + 78D910182E1E84F5F3BEE8D1E7BF32B5A67BA1FAFC02916ACDF013BF56263628 + 48030912D0D9FEF606DADE82B6E05D684D754255F22588E55F3F038AEE910577 + 06509209BCC806CA7218BEB3BA18ED598122DB60F826B2C67CFE80C7E1653E59 + 833D61F82EB2FEECAC2941DB3D7732CFDC2094277D65B364DD56FE047855C8F4 + E9758809D30657B55EEB515555851E3C39D628CB65B39574FDFB1CA82E45DDE3 + 54D43F4E63AB2407B5011A78FCF8714F9EA6F2C7842DE4B065405D05896925C8 + C4658BF868883416CD5714903E17337E514738725EA2B98EFDFEA1A58131698C + B3E8C95F58C8E669BF19F6153B9E94696B66C7868AA4A644EB9EBC23B96692EB + 02AA4AD87DA67EA94FCA76B6B163C3EAE0F0E784F79FCE9B9A97EC39447DB736 + 021DAD3C0E2C169B8F3F2B9CA7FDA3FD6EACE6F86E227C1B9BA77DA37D20D783 + C66833E13C8D138D31FFB829DFD9C16E8319030B0DA10784F3F438D13ED37130 + BE58BC7B187B9BDD873AFF6D3DF8E63447DEB956EBF63BEAFCB6A03E682F1A42 + 0EA0214C8FE4BA645F03759755F132C6AE074FD3EBD7AF997249446DFF4DEB83 + F77D96C15FF08C23D8973EAF55BAF583FBACFAF679B54FCF9D5C566C2EEEB9B5 + 37B6175E84ADE41264F99FC545892F7EEFC1F2C6FF8EACF0F583E4AC541F63F5 + 1F97BC8C9783CAD368193C0D97C2C36009DCF517C35DEF67B81D5C844B0716E2 + 92EE025CDC3F1FAE3A0A70D59687CBBE7970D69A0B67CD390C1BE7698A388FC3 + 88F53884587713C4BA9920C6CD983C421B21FA2295216EBA1AE0860B91B33EA2 + 9CF510E574104E7BE518BFDCD4459FB58958E41ACB22D7C94E72DDEDECE84047 + 473B3ADADBD04ED5D68AB636F24CD1DA02470D1978903E33EF484F9E848A8A0A + DCDDDDC925560C4BB856AA96665CD8339B8C7731E353555515F6F6F658BD7A35 + C31A1B1BC3D0D010070F1EC4FEFDFBA1A5A5853D7B7663C78E1DD8BA752B5A5A + 9A707EF72C264E5DA4BF96969658B56A15BCBDBDD93E89DEF697EBB799F14BD9 + 96E6469CDF399389317BACEC3EB3FB2B866D66B3CD4D8D70D83183393E940D0F + 0F873999A371B1B13DE2C4669BF8D80646F6EAD370911C5B1AA7A3478F223939 + 19D6D6D60C6B6C6CC419FF01ECD7D181A6A62676EFA6E35727E3574353633DEC + B64F25F34281E9B39BDB25989A9A222828B05B8C5B387E9B397E9B1A1B18B6B1 + A10EB65BA730F389DDDF36BEB10AB04D3DD9C6865AD8AAFDC4CC45DADFB8B858 + D8DADA222626BA5B8CDFB2F56FD9FA5A34109DDB329999C7D4AF898909337E3A + 8FA84F232323181818E0C08103D0D1D126E3DF4BC6BF0BEAEAEA505353437D5D + 0D6C547F84133907689F1D1CEC19D6C5D9B95B8CDFF6B78EF1D9505FC3B0F575 + D5B0DE3C919C03B24C7F5B05E3248EADAD465D6D15AC542630E7009DC7742ED2 + F944E784BDFA74E6D8D2E343634CE344C76AB36512D3676B9589B0DA340167FF + 1C8FBFE1FEFE2ED74391EFEF84BDCF13723FEC13FFBEFE85DE83FE6FE0257977 + 26EA1E2CC9FD53DC3D5CF27777EFC4BFEFF8FF665EEA3DCF9FBF3C793858C0D5 + C68C11DD9684E1DAD36DA7B3477863A6DB82F582C9C9DA0CE929716409560D1B + 337D4655E5C58CB8FBB48EDAF8BB9FEFD6C64E9595B87FFB1653DFDAD2C888A6 + 4E725FEEE4AC19B9E5D486DAEEDEB29AD706DDA6E5D10117F12C3F1BD5353578 + 5D5E82178F3319D16D5A46EBA80DB5E5E7B96D3C7B56C42833F926AC487F17CB + FDC4886ED3326E3D3F6B6566805387F6C3DC702FF273B27127F106FC5D6DB0E1 + B725BCC7E22D6B7F65CA681DB5A1B694A1EC49636D5E9C6FC54421F77E0A766F + 5ECD63B9A265B48EDAF07E5726ECA9C30750519CC7E85A801F2A5E148AE4691D + 63C3B1A7ECD2B953A030633CD4D6AE40B09F37126222989CBF0DBACD5F476D29 + 43596E1C68D97312EB002F17943E2FE0B5C1656919ADA336D4963FF6F3678E67 + CAE971A279D0657794143E41E4F5AB8CE8362DE3B7A10C3F1F71CD9F294F8B0B + E3E55565858CF8CB684E6DF9796E1B270FE932F5EB7E5D04BDBDDB783CDDA665 + B48EDA08B2FC6D70EBF43577A0EC691623BA2D58DF5BE2DAF685E1266D7F6D48 + 6D27D797AD52D0F6D5EEFB7586B06FC83FCB2E4B3279A5F0E8D123F49567D80A + D287CD52080909E91BBF95C397117ED33BF05B387C31E1378AE779B1E2C48BB2 + 3CBE906CAF275A4BB4866835D14A125357BE98F2C58A5F5245C4F631D123A287 + 44E9446944C9444A7C31E58EB59294BF242A9162B34F44B08944CBDF8E8939BE + 9BD971A263E5F53797C392FE4A2913AD60FBA552D653EE1613DA17BACF1533D6 + 2CA20C36CB5FC795D839B19AC3DE65FBEDF3F15BC9616FB3FBDB675E992F5ECB + FBCE6BBB68B363B5BC67AC244DFC31EDF3F9F36F489696D1A48F1660E7A2EA0F + 0AADE7B26A2EF4F9E804597776FFAD81CBB2EBB57AD4F3D875446BA8CD319E4D + 37760ED12C5ABF0B050505E8DEFE0936BB8A4899DA9870DA10647792F5EFB91E + C7946D7B8CCDFE42B40C42FD72597EFFDDDB3061B38B88142467BBB771F09D58 + A1B19A4AF4236D434D48DC7B6149ACA426917C1CD128BABF41681BA258DA67EA + 976187117D4BCBD7086963BFC863C4B6DDC06607137D43EB570A39FE5A2263C5 + 6E630D8F157DFC778A8C33BB7EA5D8E340CBC41DA3DEEAFF8BD3FBAE6FC4ADF3 + DF99EFCBF747FC3EB9DBBD7CB323D63F4DE642CA457D7F23E4DD86489E9B4BEA + 9F7F5CA2BE1F92D4BF60FB7DF12FB89E36EFFE5BD0FBF8179AFAE05F2CFF3EFE + 7BD37B9F7802EBBCBF429CF888DCFF6FE0B90CFFF6BBF4E15D587EBFEFCABF8F + 6FAA231CDF47DEB10D2E7784D386A4ED08DAF373BDB521CCF6DFCDF38FA92FE3 + FF3BCE4BA1FA1BFEF5B856F6D19EF79BAEA86BAF206B6ECEFCF6C57BAFCACF71 + EFC59C7A73EE7B723EDE5C48B9B03EF2FB10EABF97F7B5E662FCF38FA1B75CA4 + 7FFE5CFC3DA357FFE662EEC9E612FA17774FE7B6D19B7F61F75CC1B1F4C5BF90 + FBAFC4FE85F545D4FC95D4BFA8F926C9BDDF5C82734B82738F9BA48986121D20 + 4A202A242A22BA45A449F403D107221E23283B9B7E4649F490C88E681F877324 + CA20BACEB111964673EAE38864883EE2ABFB986811510CA7FE7301B63F91067D + 6542242FA27DDAEF799CF1A80BD40DE1F4FB38D1A7BD3C2E9D234A22FA075FD9 + 28A23BF415B6048F5B2A443944DFBE079F4BF4DD7BF43F45A0FF7D89DF33A25D + 228E5F9004C7AF8D484EC4FC994E142C66FE5411B188C289A688E82777FE2612 + 95115510C573C6B798E82E5107FDE49868C23B3C2E0FA09F7B137512A511CD7C + 87367E22BA49D44E74E31D787A2C6610F97024F58E6D0CE4A8FBC9B0625CBFE1 + E64BFF587658C167F7AEC9774DD60EBFBB65E398CB53FE1CBB7190DCC0FEE21A + 1D7564D9A4E1762BB3D75829C2D17221AE9BC9C16FFF14B8A88C80F2D689F86A + D3C8FCAF7FFD76863076B89EFC94B1677FA9F1F0598BBC58353C8A52C1FDC0B5 + 48705A8E90A3B361BAFD470CD19C82C16B87374E5F3648869FFD61C5B8FE4B4C + 15F2AC3CD7203FCB006F8ACFA0B2F0048AEF1F4056E826A47A28E20FBB15F8C2 + 50061FE94CC63F14BF29FEE7EC2F79E7CA9EAD1355146D57203D6917529FD9A1 + BD2505CD75FE78996780BC98ED48BEA484BD764AF8E7E139F8988C477AD5507C + B678800697B756191518ECB912AB6F9B62E3732F5C6FCEC08BDA2094E5E8127E + 2B922E2AE29AE90C2CDE370D13368D41BFF53FA0FFD2AF63B8BCBDEAA89C0097 + 5F3025FE10E6665A625D993FD44ABD70F6A129E2AFFD891B67E7E3CABE897050 + FC06FAE3FA63CC2F43D17FCD90321EBF61587E88A53CA604EF864CEA29C8675D + C08CFB169878531747CF2C4180C17438AEFD1EC7E5BE80F6880F20BB78103EDE + 33B282CB9F521A14E1AB350166E6F218EDA58A49370C31217C3FA6B86C849FEE + 54B892E367B564000C7FFC083A3F48618CD2B7F8CA492685B74EFDF9EBBD96CB + 07C263DB68CC3695C7205B658CB55F8943EA13E144C66ABBFC6B1C9DF629347E + 90C6BEEFA4F0DDDE89981FBCD090CBFF36F1F3CF4F2B7CF9D272C15750501B8B + 2FF46763F5C65138B968002CE5FF0993C91FF3589D911FE2E733D3DF6CFA75C8 + 00BE8B47BF8903FA6F329BFA49C7AA39FFC4B8DFBF83E1E44FA03BEE1FD01ED9 + 0FEADF4A61C71029863F34F51396EC0F1FEFE8272DD54FE01A387DEC571F3A6B + 8EFBA875F1BC2FA1496CD509B38B68CF5029680EEB07D359FFD33663E8476E9C + 6B557F81F3895E7B943FED2F7D566ED46799F3970EADDDFCEB779D5BD4C675FE + B2756C9DF2D84FB3BEF8E8036BE6D705B6ADE0BDF443A2AF39D70745CEFD601F + 476A9CB29F38361F8AB90F7FC8B90F7CC9B95E0DE06C7FCAA993FE4F7AF1F7C7 + A63FE0E5E745E40D4F927B5EF68487AF0723771F0FB8F9B8C3CDDB8DC92F91FC + 92D7255C2472F5BC88F5AA1BB063DF4E9C3C6BC17CC3D79774DEE502D4357740 + C7703FAEDF08C109CB1312B741D9ABA1010C4B95FEE83EAE455D97A80D2E4B19 + 7E5E9236F859613C5570E435A16D08B2A2F8F8B40468EA69E1F899B76D5056C7 + 683F53278E4FB893080DDDBD484E4F415064300E991D82E971530484053265B4 + 8EDA08E313EF26618FAE0663C7EF835FB48EDA505B7E3EE95E3276EFDFC32B17 + 276A436D294359CD835AD8AD2319DBAD0DC25076CECF73A16DA8033D53FD3E89 + 32F396C8A3AEAEEEBDF4BEE79FB4F40BA252A20029CEB39B2ACDE9BEB4741947 + C2EA4A392CC31F2322460EE9B9B9B9A039DDE79790BA636CB6902AC4CC0C9097 + CFC1F5EBD799FCF06174137F1DB5A50C9BCDA1BAA1AFCFC2942909F8EA2B0B26 + D7D2EAE826FE3A6A4B19CA4A49DDA34AD4D46C476E6E073C3CDEC0CFAF0EC9C9 + 15D8BEBD89A74D9B6AA0AC5CCAE4D496326C962E0792EE6CDBD68AA54B8BB072 + 653923BABD7163AD50515BCAB0D9F154FB395F404B28BA2E1DBF9FCD8EA33AD8 + D545BF1F6E2731F286A3E349F8F89C67F6DF969DE0ED535BCAB0D9B154069D9D + F47BE1269EACAC0E89DCA7B694E1B054C6EDED8D686AAA417EFE031C3BA68398 + 986BCC3E57B48CBB4D6D29C366C75099B6B6D690F95CC1D38103DB44EE535BCA + B059BAF4187DACB9F935AAAA4A183D7B968D1D3BFEE0EDD36DAEE83EB5A50C9B + A5CBAF51279A9ACA515090011D9D2D4C5F23222EA3B2B240A8A82D65282B2D3D + 9468E4D9B6B64A3434944A246A4B19CAD2670169E961CE4E4E57D0175186F31C + 31435A7AA085B4F4F73E7DD3400BCE3A8249E1E1E1DF7979793D7671710157CE + CECE64DE38C2F7B2AF6D118A84AEFDC939F9AD8383C32FD6D6D6A743434371EF + DE3D4639398FF0A2B404B76EC5C1FF8A7F0BB9C7EB27E725F713E4FDFCFC1E3D + 7CF8B02B3F3F9FF9BBA4BCBC3CE67B879B376F22E57632390F93F0F4E9538486 + 87B6FA5EF5D5ABA87EDD6D0D42FA8CFAFA7A34363632A2DB6FDEBC41464606EE + DCB98390EBD7909A928CF4BB69B872C5AFB5B0F0C90A7EDED3D393772DADADAD + 6544FF362A3D3D1D0545CFE01199047DF728580427C1D2EB2A629252B60BFAE7 + B2DC76EA899E1416C12D22163AE75DF0DB0933AC22B15C78C6156B5DE31F1C0F + CFE6AD5FE9DF0BD0BF25ACACACE4A9BCF20D729EE62330D41BF12941B089B287 + 4701793608380DAD8BDE58793EFA81857FD868AEFF57AF5E31BF09D33865936B + AC7B540C7C029D71FF51349E3CBF0DFB7847789586C136F63CA26E8541CB331C + 2B6CC38EF3F3942D2A2C44507206749DDC109774054F099B5B1407DB78073817 + 05C22CC20AA1B1577129320C6BECAF177B075E1F4F79DAE7E7CF9FA38C1C6FBB + E86CEC3FEF888CDC70E415C722BBE026AC6F9C8355B62F8CAE9A2120D2077ED1 + A1586D1FD665EBE9AD44F98A8A0A1412DF45854F6077331DBB1D9C702FEB1A72 + 0AA3C9FD360A47FC4EC2FCB62B74BC4DE0154C9E01C382B1C1F13ACBDED39DC7 + 337FD746E65048723A36D87822FC960FEE67472236E5320CDD8CA173ED38D4AD + B4E079C50D2E619138EA175E7BE5AAFF3C1F1F1FBC7CF91265656578F1E2058A + 8B8B61E47B13065E3E48480B4250C479E85B6AE1E88523B073B5C18DB82844DD + CDC2C5C0E0F89BCE96FD838383F5C85CAD8E8EBE89A8A8A8AEA8C8C82E0FBF2B + 5D1B4F5DEC5239EB887D964760E96E8F8BE419E87C4828DCA353F0A0B00491C9 + A9E5771EDCDD448F019993F3D2D3537F4F4B4BF92D3131F1B794A4A4DF1C2F79 + FCBAD4CCCB6CA5F595E2F50EA15D5B9CAFB10C3CAF772ED0B56619794420A3B0 + 1437EE6474F4767F770F0C186FED7959C9C1D35331E45AF052C57D67F68D543D + D66A7D2D11AF6A1BFFD2EF0866CC98A14BFF56469CC68C19B346143F7DFA74ED + 050B16580BAB9B3973E6417979F953B48D8103074E1766336DDA34CD850B17DA + 0E1BF8F94FEB14C61CE14A66FCA0DFB9FC071F7CD09FB6F1D9679F0D11E4070F + 1E3C6BC488114A945FAB30DA942B99716C7EFDFAF5C972727247162D5A6447DB + 10E415670EDBBB53E9C70B0A93876EEAF1626AE8D0398435E54A905F3F7FCCD1 + 40134598ABCA2609B21B366C38C22FE68B173E9E8C91618589C39BF2AB273FFA + 88385E5812EC3F8D33B53FAE2A9BCC5F2EECDB3F613C277E1A347EF3270F55E9 + 6DAE09E3C9F19B4D8F9FB098898B9FE0FC11163371F19364FE4AD27F49CE1F7E + FD55E7ADC2FC059FEB1F329DE71212B339BBB6B325A1A20D21CF5BE0F3B409CE + B90DB0CFACC73922AFDCC6160DC7F0CD3B744DE6C9CE53E0BD873F68623AFB45 + 13AB2DB9A2BD2BA9B21D19359DC8AB67E1693351130BD9759D88296B87D5FD7A + 1824D474853D6D6AF70D8D519BA730FFF36973153EB30E8A56897ED9D69951D5 + 81D2B62EBC68EFC2D3D62EE413E51165B6B090435440B6AF3C6EC6AEB0D74828 + 6E6EDFA77F689EEA814373632BDA5BA8DF12C29611B6BC03A86201CD5D6CBD21 + DB8F5ABA10D7D0C9B463955A0B93E8D72C059583F28ABB0CE4DDF21B5959A4AE + 80F4B788D8BDEA042A895E71F492B4F798D445D675C0B7B603F12FDBB0C9F705 + 6B989296FCFC6DFAF2B60FEB59798D2CDC6DEA44626327EE91ED341283A4D71D + 48A8EC4064057906AFEE805D652B0E57B422A5A603EBDC9FB3862CD92BBF68BB + BEFCB907F5AC14629B4658B35262F3A4057B6FD54323A60EBBA2EBF067780D0E + E43641ADB019A72ADB10F1AC197F7A3E670D53D4925FAF652CE3FFB8B9D2ED51 + 031E12BF7A4F9AB1F06A35F63E6E8216B1DF458EE14EC28E727D0DE5070D8822 + FD37BB5109A3D07296C2465DF9C9320AFF38E012AE649556D311406CC35FB543 + 3188F084D578D18C3D54054D98E4FE1A4ECF5AE14DE6C15AD76244E4D657ED3D + 68224B8FFF5EBD4333524A5AAACCE2ABE1FCA01EDBC2EAA0F9B4199A640E5169 + 90ED1557AA60115B8D75178BE19E565DEDE81FA544E610F33B01CD7D42629492 + 8B9BAB0DC2CAA0EC55869509F5F8B5A815CB493FE8F6388B42FC6AFF0457336A + AAED7D2395A6CBCAF3FFC6C0B4E11514A1189BF9BC7AF7593FEC750EC462C7CB + 90B772C53AA33390DBA887A0A4DC6A57FF30C55972DD596E92919BFBD1618BB3 + 4A26A7CF353ABBBBC39EE8ACC3799C3879027FA8A8376A1D3456A236E2CEA585 + CB94C69DB273AA8F888C40CEA36CC4DFBA858BAECED8A6B1BF7ED2B459E37A3B + 17D576EE191B9E905AABA17390B54D5D9DA5A2AACA5255DFC9F2B91E55BB7EF3 + D6B1BDF13365E43E51DBB1476EE24F53E5878F18213F8C68ECC41FE537A9A9CB + 4D9F25F3895068FCB47E522BB70E269AC1C9678AC90731F69C3462E4C8FE1375 + 8E8CFFCC3BF5C498A08CE2FFF149B32079C967DE6974FF055F7E724C60C6F34F + BD538F9136BEE1F28B962C1EA672CED96564C0FDF693996F303C2083752AB30A + 3F5CBDCF3A9DF5361F7E35836541EABFBF72BF454AF5E87AE949CBA6110D21FC + 5C1DDB0BED93021F607A5011465FBE4BF2671875F90E938FF67D9B4F0D2CC2A7 + 8E89F8CEC0A76DF01E97968F546C1D082FEFEC76891557548AA521E9708BBB8D + 45D7EEE2524C121672F3E0BB708CBA8561CE3118667C1976B7F3A11F9C8EA11A + AEED9477F3F26035B7B6A2B8BC02A5E459B2A8EC254A898A4AD9797E71094212 + EE42EEA81F1CD21EC330340BAB4E5D657DBDCDBE92CD7BB25A5A5A9867E0ACAC + AC6E4ABF7F1F9EC1915030F58123610D4232B1FA4C0006A93BBCFE70A3CD762E + DFD6D6C63CC7979797F3F4BCA404E149F708EB8B0B84D5BFFE00AB2DFC317C97 + 7DE7279BAC774AFFACF12F51FE33321EC0EB5A14C33AA6E4432FE801D69CF2C7 + 889DB6D87EF874C7DCF5BBE6487D3DFC0361FEE9F3F4DDAC7CC81AB8E342522E + 74FDEF62CDE9AB18B9CB1E1BB48C617AFC7807E1E8FB246961FE6FA7A6C2D8FC + 1416A89BE088D70DFC41FC8EDAE300EDE376387ED202C74F59742C5AFCB30C67 + FE74F34F7DA765E661D4961318FFCB26C8ABE96184BA0D8CCF5D427C62120203 + 03616963C5F52FC5EFBFA8A888F11F12168E6F26CCC6C03F8CB06187160C4F58 + 213A368EAC6973101919092B5B1BEA5F56D03F5D8794969632E3888B4F44ECBD + 4778F0309359D3D2B5055D63D0752DC3BFF53FCFD5DD8D45FB4DFF3FBFB8B838 + A18A8D8D6572BAC6263C9D77B339FCA4333656A92E6E17BB6CECED60636F2B56 + D676B6AC9396A7930937EEEF789F2F2BAFF0F15E7DE3994A3BB56596ECD29559 + BC535766E1562D99791BD465649437C8AC50D93E6BFCD419227FA7DEAE673C36 + B1A2B1FA42F6CB8E53D9AF3B2CD22B3A8EDD7AD66174F57EC76E1B9F36878894 + F4955B760AEDBB0CB9071CF40D53DA93F1BAF1CA0B729F2BEAC4F15B3538ECF9 + 12FAC7EF61B7CED126953DDAD3897FA1BF81A8EB194FBC59D1F8C620BB1A37CA + 3B619ADE82C3972B60702A137B0E9F63A56564E668EDD31E23F4BA3B57FE1FFB + BC4397693E78DDECFBBC1D8733C87D3CA012066773B0FBAC172B2D2B27CFD7FF + CA24593939A1EF51B61E34FA29A4ACA1727F5635A22B3A6114DF8843F6C550B5 + 8B40586266FD25FF70451777EF1F64E4E608FD0D76DA369D693BEFBE6C35C8AF + C7B1BC3A9C49AEC499A86A1CBEF80226160FBB7EDF7EF4CDED8C9CF47DFB0F8C + 16C64F51DE3879B3D3B517EBCEB855AF396AD3A5EEE00783B82A1C3C9D07650D + EBAED084F4924B3EFEB2C4BFD0DF9E068FF9B1FF3A438B61877C2394CD426F37 + EAC55440D7E609144D7CBB02E2EEBD7074F79199252B27EA772BA959B2733E38 + E9EC39CD3121FB8949627597EEB9A7587E2CB02B2CED51899387AFCC8CD9321F + 8A9B77BB750E4EBC5DF0EAB15DDCABAE03B605587E2AAC2B3835FBB9ABB79FEC + 6C317E79EB17B5EDD3FC131EB49A85976285EDADAEF0FB8F9F5F24E39D2523FB + A124F35E5D5367EACDCCA78D4697633B6E6416147BFA07C8C948E0976FFC9F6E + D1D09E356FD546194D1DDD29B27273FAFDB77DC4FFFFFAFA5F75F1784BBA7E1D + 39F88B697D5DFF73938FDED206BA8E1EC1D7466FEB57516B776E1BBDAD5F45F2 + 83BE98DA97F52BD37FFDA58D1CDF53FBBAFEE7C66F8490F8FDFFF5FFDFB3FEFF + 5F39AC9D65 } end object ActionList1: TActionList @@ -387,6 +384,7 @@ object AFileImport: TAction Category = 'File' Caption = 'Import...' + ImageIndex = 23 OnExecute = AFileImportExecute end end diff -Nru vcard-studio-1.5.0/debian/bzr-builder.manifest vcard-studio-1.5.0/debian/bzr-builder.manifest --- vcard-studio-1.5.0/debian/bzr-builder.manifest 2023-07-02 01:46:15.000000000 +0000 +++ vcard-studio-1.5.0/debian/bzr-builder.manifest 2023-07-03 01:46:08.000000000 +0000 @@ -1,3 +1,3 @@ -# bzr-builder format 0.3 deb-version {debupstream}-0~158 -lp:vcard-studio revid:svn-v4:b2f690cb-8b89-471c-b043-dbd4632e1e77:trunk:168 +# bzr-builder format 0.3 deb-version {debupstream}-0~160 +lp:vcard-studio revid:svn-v4:b2f690cb-8b89-471c-b043-dbd4632e1e77:trunk:170 nest packaging lp:~chronoscz/vcard-studio/debian-packaging debian revid:svn-v4:b2f690cb-8b89-471c-b043-dbd4632e1e77:trunk/Install/deb/debian:161 diff -Nru vcard-studio-1.5.0/debian/changelog vcard-studio-1.5.0/debian/changelog --- vcard-studio-1.5.0/debian/changelog 2023-07-02 01:46:15.000000000 +0000 +++ vcard-studio-1.5.0/debian/changelog 2023-07-03 01:46:08.000000000 +0000 @@ -1,8 +1,8 @@ -vcard-studio (1.5.0-0~158~ubuntu22.10.1) kinetic; urgency=low +vcard-studio (1.5.0-0~160~ubuntu22.10.1) kinetic; urgency=low * Auto build. - -- Jiří Hajda Sun, 02 Jul 2023 01:46:15 +0000 + -- Jiří Hajda Mon, 03 Jul 2023 01:46:08 +0000 vcard-studio (1.5.0-0) precise; urgency=low diff -Nru vcard-studio-1.5.0/Forms/FormImport.pas vcard-studio-1.5.0/Forms/FormImport.pas --- vcard-studio-1.5.0/Forms/FormImport.pas 2023-07-02 01:46:14.000000000 +0000 +++ vcard-studio-1.5.0/Forms/FormImport.pas 2023-07-03 01:46:07.000000000 +0000 @@ -67,12 +67,13 @@ procedure TFormImport.ComboBoxInputFormatChange(Sender: TObject); begin - UpdateTableFormat; + RedrawPending := True; end; procedure TFormImport.EditInputFileChange(Sender: TObject); begin RedrawPending := True; + UpdateTableFormat; end; procedure TFormImport.ButtonBrowseClick(Sender: TObject); @@ -88,11 +89,15 @@ procedure TFormImport.FormCreate(Sender: TObject); var TableFormat: TTableFormat; + TableFormats: TTableFormats; begin + Table := TTable.Create; + + TableFormats := Table.GetInputFormats; ComboBoxInputFormat.Items.BeginUpdate; try for TableFormat := Low(TTableFormat) to High(TTableFormat) do - if TableFormat <> tfListView then + if TableFormat in TableFormats then ComboBoxInputFormat.Items.AddObject(TableFormatText[TableFormat], TObject(TableFormat)); if (ComboBoxInputFormat.ItemIndex = -1) and (ComboBoxInputFormat.Items.Count > 0) then ComboBoxInputFormat.ItemIndex := 0; @@ -100,7 +105,6 @@ ComboBoxInputFormat.Items.EndUpdate; end; - Table := TTable.Create; LoadConfig; UpdateTableFormat; end; @@ -140,12 +144,12 @@ FileExt: string; begin FileExt := ExtractFileExt(EditInputFile.Text); - if FileExt = '.xml' then - ComboBoxInputFormat.ItemIndex := ComboBoxInputFormat.Items.IndexOfObject(TObject(tfXml)) + if FileExt = '.json' then + ComboBoxInputFormat.ItemIndex := ComboBoxInputFormat.Items.IndexOfObject(TObject(tfJson)) else if FileExt = '.csv' then ComboBoxInputFormat.ItemIndex := ComboBoxInputFormat.Items.IndexOfObject(TObject(tfCsv)) - else if (FileExt = '.htm') or (FileExt = '.html') then - ComboBoxInputFormat.ItemIndex := ComboBoxInputFormat.Items.IndexOfObject(TObject(tfHtml)); + else if FileExt = '.txt' then + ComboBoxInputFormat.ItemIndex := ComboBoxInputFormat.Items.IndexOfObject(TObject(tfMediaWiki)); end; procedure TFormImport.LoadConfig; Binary files /tmp/tmp1filncb7/FPs2lTk3VL/vcard-studio-1.5.0/Images/Icons/16x16/Export.png and /tmp/tmp1filncb7/oPTs3EjpDR/vcard-studio-1.5.0/Images/Icons/16x16/Export.png differ Binary files /tmp/tmp1filncb7/FPs2lTk3VL/vcard-studio-1.5.0/Images/Icons/16x16/Import.png and /tmp/tmp1filncb7/oPTs3EjpDR/vcard-studio-1.5.0/Images/Icons/16x16/Import.png differ Binary files /tmp/tmp1filncb7/FPs2lTk3VL/vcard-studio-1.5.0/Images/Icons/32x32/Export.png and /tmp/tmp1filncb7/oPTs3EjpDR/vcard-studio-1.5.0/Images/Icons/32x32/Export.png differ Binary files /tmp/tmp1filncb7/FPs2lTk3VL/vcard-studio-1.5.0/Images/Icons/32x32/Import.png and /tmp/tmp1filncb7/oPTs3EjpDR/vcard-studio-1.5.0/Images/Icons/32x32/Import.png differ diff -Nru vcard-studio-1.5.0/Images/Icons/Export.svg vcard-studio-1.5.0/Images/Icons/Export.svg --- vcard-studio-1.5.0/Images/Icons/Export.svg 1970-01-01 00:00:00.000000000 +0000 +++ vcard-studio-1.5.0/Images/Icons/Export.svg 2023-07-03 01:46:07.000000000 +0000 @@ -0,0 +1 @@ + \ No newline at end of file diff -Nru vcard-studio-1.5.0/Images/Icons/Import.svg vcard-studio-1.5.0/Images/Icons/Import.svg --- vcard-studio-1.5.0/Images/Icons/Import.svg 1970-01-01 00:00:00.000000000 +0000 +++ vcard-studio-1.5.0/Images/Icons/Import.svg 2023-07-03 01:46:07.000000000 +0000 @@ -0,0 +1 @@ + \ No newline at end of file diff -Nru vcard-studio-1.5.0/Packages/Common/Table.pas vcard-studio-1.5.0/Packages/Common/Table.pas --- vcard-studio-1.5.0/Packages/Common/Table.pas 2023-07-02 01:46:14.000000000 +0000 +++ vcard-studio-1.5.0/Packages/Common/Table.pas 2023-07-03 01:46:07.000000000 +0000 @@ -6,7 +6,9 @@ Classes, SysUtils, Generics.Collections, ComCtrls; type - TTableFormat = (tfExcel, tfPlain, tfCsv, tfHtml, tfListView, tfMediaWiki, tfXml); + TTableFormat = (tfExcel, tfPlain, tfCsv, tfHtml, tfListView, tfMediaWiki, + tfXml, tfJson); + TTableFormats = set of TTableFormat; { TRow } @@ -21,7 +23,8 @@ TTable = class private - function QuoteCsvString(Text: string): string; + function QuoteString(Text: string; Quote: string): string; + function UnquoteString(Text: string; Quote: string): string; function ReplaceXmlEntities(Text: string): string; public Title: string; @@ -36,24 +39,23 @@ function GetOutputXml: string; function GetOutputHtml: string; function GetOutputMediaWiki: string; + function GetOutputJson: string; procedure GetOutputListView(ListView: TListView); function GetOutput(OutputFormat: TTableFormat): string; - procedure SetInputTabs(Text: string); - procedure SetInputPlain(Text: string); procedure SetInputCsv(Text: string); - procedure SetInputXml(Text: string); - procedure SetInputHtml(Text: string); procedure SetInputMediaWiki(Text: string); + procedure SetInputJson(Text: string); procedure SetInput(OutputFormat: TTableFormat; Text: string); + function GetInputFormats: TTableFormats; constructor Create; destructor Destroy; override; end; const TableFormatText: array[TTableFormat] of string = ('Excel paste', 'Plain text', 'CSV', - 'HTML', 'ListView', 'MediaWiki', 'XML'); + 'HTML', 'ListView', 'MediaWiki', 'XML', 'JSON'); TableFormatExt: array[TTableFormat] of string = ('.txt', '.txt', '.csv', - '.htm', '', '.txt', '.xml'); + '.htm', '', '.txt', '.xml', '.json'); implementation @@ -66,12 +68,19 @@ { TTable } -function TTable.QuoteCsvString(Text: string): string; +function TTable.QuoteString(Text: string; Quote: string): string; begin - if Text <> '' then Result := '"' + Text + '"' + if Text <> '' then Result := Quote + Text + Quote else Result := Text; end; +function TTable.UnquoteString(Text: string; Quote: string): string; +begin + Text := Trim(Text); + if Text.StartsWith(Quote) and Text.EndsWith(Quote) then + Result := Copy(Text, Length(Quote) + 1, Length(Text) - 2 * Length(Quote)); +end; + function TTable.ReplaceXmlEntities(Text: string): string; begin Result := StringReplace(Text, '<', '<', [rfReplaceAll]); @@ -97,7 +106,7 @@ var I: Integer; begin - Result := ''; + Result := Implode(#9, Columns) + LineEnding; for I := 0 to Rows.Count - 1 do Result := Result + Implode(#9, Rows[I].Cells) + LineEnding; end; @@ -126,7 +135,7 @@ for J := 0 to Columns.Count - 1 do begin if J > 0 then Result := Result + ','; if Columns[J] <> '' then - Result := Result + QuoteCsvString(Columns[J]); + Result := Result + QuoteString(Columns[J], '"'); end; Result := Result + LineEnding; @@ -136,7 +145,7 @@ for J := 0 to Cells.Count - 1 do begin if J > 0 then Result := Result + ','; if Cells[J] <> '' then - Result := Result + QuoteCsvString(Cells[J]); + Result := Result + QuoteString(Cells[J], '"'); end; Result := Result + LineEnding; end; @@ -148,9 +157,10 @@ J: Integer; begin Result := '' + LineEnding + - '' + LineEnding + - ' ' + Title + '' + LineEnding + - ' ' + LineEnding; + '
' + LineEnding; + if Title <> '' then + Result := Result + ' ' + Title + '' + LineEnding; + Result := Result + ' ' + LineEnding; for I := 0 to Rows.Count - 1 do begin Result := Result + ' ' + LineEnding; for J := 0 to Rows[I].Cells.Count - 1 do @@ -217,6 +227,28 @@ Result := Result + LineEnding + '|}'; end; +function TTable.GetOutputJson: string; +var + I: Integer; + J: Integer; +begin + Result := '[' + LineEnding; + for I := 0 to Rows.Count - 1 do begin + Result := Result + ' {' + LineEnding; + for J := 0 to Rows[I].Cells.Count - 1 do begin + if Rows[I].Cells[J] <> '' then begin + Result := Result + ' "' + Columns[J] + '": "' + Rows[I].Cells[J] + '"'; + if J < Rows[I].Cells.Count - 1 then Result := Result + ','; + Result := Result + LineEnding; + end; + end; + Result := Result + ' }'; + if I < Rows.Count - 1 then Result := Result + ','; + Result := Result + LineEnding; + end; + Result := Result + ']' + LineEnding; +end; + procedure TTable.GetOutputListView(ListView: TListView); var I: Integer; @@ -265,20 +297,11 @@ tfHtml: Result := GetOutputHtml; tfMediaWiki: Result := GetOutputMediaWiki; tfXml: Result := GetOutputXml; + tfJson: Result := GetOutputJson; else raise Exception.Create(SUnsupportedFormat); end; end; -procedure TTable.SetInputTabs(Text: string); -begin - -end; - -procedure TTable.SetInputPlain(Text: string); -begin - -end; - procedure TTable.SetInputCsv(Text: string); var Lines: TStringList; @@ -305,16 +328,6 @@ end; end; -procedure TTable.SetInputXml(Text: string); -begin - -end; - -procedure TTable.SetInputHtml(Text: string); -begin - -end; - procedure TTable.SetInputMediaWiki(Text: string); var Lines: TStringList; @@ -383,19 +396,81 @@ end; end; +procedure TTable.SetInputJson(Text: string); +type + TState = (stOutside, stArray, stItem); +var + Lines: TStringList; + I: Integer; + Line: string; + State: TState; + Index: Integer; + Row: TRow; + ColumnIndex: Integer; + ColumnName: string; + Value: string; +begin + Clear; + Lines := TStringList.Create; + try + Lines.Text := Text; + Row := nil; + State := stOutside; + for I := 0 to Lines.Count - 1 do begin + Line := Trim(Lines[I]); + if State = stOutSide then begin + if Line.StartsWith('[') then begin + State := stArray; + end; + end else + if State = stArray then begin + if Line.StartsWith('{') then begin + State := stItem; + Row := TRow.Create; + Rows.Add(Row); + end; + end else + if State = stItem then begin + if Line.StartsWith('}') then begin + State := stArray; + end else begin + Index := Pos(':', Line); + if Index > 0 then begin + ColumnName := UnquoteString(Trim(Copy(Line, 1, Index - 1)), '"'); + ColumnIndex := Columns.IndexOf(ColumnName); + if ColumnIndex < 0 then begin + Columns.Add(ColumnName); + ColumnIndex := Columns.Count - 1; + end; + while Row.Cells.Count < Columns.Count do + Row.Cells.Add(''); + Value := Trim(Copy(Line, Index + 1, MaxInt)); + if Value.EndsWith(',') then Value := Copy(Value, 1, Length(Value) - 1); + Row.Cells[ColumnIndex] := UnquoteString(Value, '"'); + end; + end; + end; + end; + finally + FreeAndNil(Lines); + end; +end; + procedure TTable.SetInput(OutputFormat: TTableFormat; Text: string); begin case OutputFormat of - tfExcel: SetInputTabs(Text); - tfPlain: SetInputPlain(Text); tfCsv: SetInputCsv(Text); - tfHtml: SetInputHtml(Text); tfMediaWiki: SetInputMediaWiki(Text); - tfXml: SetInputXml(Text); + tfJson: SetInputJson(Text); else raise Exception.Create(SUnsupportedFormat); end; end; +function TTable.GetInputFormats: TTableFormats; +begin + Result := [tfCsv, tfJson, tfMediaWiki]; +end; + constructor TTable.Create; begin Columns := TStringList.Create; diff -Nru vcard-studio-1.5.0/Packages/VCard/VCard.pas vcard-studio-1.5.0/Packages/VCard/VCard.pas --- vcard-studio-1.5.0/Packages/VCard/VCard.pas 2023-07-02 01:46:14.000000000 +0000 +++ vcard-studio-1.5.0/Packages/VCard/VCard.pas 2023-07-03 01:46:07.000000000 +0000 @@ -697,14 +697,6 @@ begin Lines := TStringList.Create; Lines.LoadFromFile(FileName); - {$IF FPC_FULLVERSION>=30200} - if (Length(Lines.Text) > 0) and (Pos(VCardBegin, Lines.Text) = 0) then begin - Lines.LoadFromFile(FileName, TEncoding.Unicode); - if (Length(Lines.Text) > 0) and (Pos(VCardBegin, Lines.Text) = 0) then begin - Lines.LoadFromFile(FileName, TEncoding.BigEndianUnicode); - end; - end; - {$ENDIF} try ImportFromStrings(Lines, Format, HumanReadableHeader); finally diff -Nru vcard-studio-1.5.0/TestCases.pas vcard-studio-1.5.0/TestCases.pas --- vcard-studio-1.5.0/TestCases.pas 2023-07-02 01:46:14.000000000 +0000 +++ vcard-studio-1.5.0/TestCases.pas 2023-07-03 01:46:07.000000000 +0000 @@ -307,6 +307,28 @@ 'FN:Name2 Surname2' + VCardLineEnding); Output := Input; end; + with TTestCaseVCardExportImport(AddNew('Export/Import XML', TTestCaseVCardExportImport)) do begin + Format := tfXml; + HumanReadableHeader := False; + Input := BeginEnd( + 'N:Surname;Name' + VCardLineEnding + + 'FN:Name Surname' + VCardLineEnding) + + BeginEnd( + 'N:Surname2;Name2' + VCardLineEnding + + 'FN:Name2 Surname2' + VCardLineEnding); + Output := Input; + end; + with TTestCaseVCardExportImport(AddNew('Export/Import JSON', TTestCaseVCardExportImport)) do begin + Format := tfJSON; + HumanReadableHeader := False; + Input := BeginEnd( + 'N:Surname;Name' + VCardLineEnding + + 'FN:Name Surname' + VCardLineEnding) + + BeginEnd( + 'N:Surname2;Name2' + VCardLineEnding + + 'FN:Name2 Surname2' + VCardLineEnding); + Output := Input; + end; with TTestCaseLoadSave(AddNew('Merge same cell phone', TTestCaseLoadSave)) do begin Input := VCardBegin + MacLineEnding +