diff --git a/contracts/Battleship.sol b/contracts/Battleship.sol index f81213b..bad2909 100644 --- a/contracts/Battleship.sol +++ b/contracts/Battleship.sol @@ -20,7 +20,7 @@ contract Battleship { bool public player1Ready; bool public player2Ready; - uint8 public constant BOARD_SIZE = 10; + uint8 public constant BOARD_SIZE = 4; uint8 public player1ShipsHit; uint8 public player2ShipsHit; @@ -76,6 +76,40 @@ contract Battleship { return shipCount == 17; } + function verifyShipsPlacedFHE(bytes[4][4] calldata _ships) public view returns (bool) { + euint8 shipCount = TFHE.asEuint8(0); + for (uint8 i = 0; i < BOARD_SIZE; i++) { + for (uint8 j = 0; j < BOARD_SIZE; j++) { + shipCount = TFHE.add(shipCount, TFHE.asEuint8(TFHE.eq(TFHE.asEuint8(_ships[i][j]), TFHE.asEuint8(2)))); + } + } + return TFHE.decrypt(shipCount) == 6; + } + + // function verifyShipsPlacedFHE3(bytes[3][3] calldata _ships) public view returns (uint8) { + // euint8 shipCount = TFHE.asEuint8(0); + // for (uint8 i = 0; i < 3; i++) { + // for (uint8 j = 0; j < 3; j++) { + // ebool b = TFHE.eq(TFHE.asEuint8(_ships[i][j]), TFHE.asEuint8(2)); + // shipCount = TFHE.add(shipCount, TFHE.cmux(b, TFHE.asEuint8(1), TFHE.asEuint8(0))); + // } + // } + // return TFHE.decrypt(shipCount); + + // // TFHE.req(TFHE.eq(shipCount, TFHE.asEuint8(6))); + // // return true; + // // return shipCount == 17; + // } + + // function verifyShipsPlacedFHE4(bytes calldata encryptedValue) public view returns (uint8) { + // euint8 shipCount = TFHE.asEuint8(encryptedValue); + // return TFHE.decrypt(shipCount); + + // // TFHE.req(TFHE.eq(shipCount, TFHE.asEuint8(6))); + // // return true; + // // return shipCount == 17; + // } + function attack(uint8 _x, uint8 _y) public onlyPlayers { require(gameReady, "Game not ready"); require(!gameEnded, "Game has ended"); diff --git a/output.txt b/output.txt new file mode 100644 index 0000000..f244c5e --- /dev/null +++ b/output.txt @@ -0,0 +1 @@ +0x0404000000000000f4f3879b552c13b5a59f3f90aeca3f2aa1d5bb3ac719f321a6434e890dc19880473a477b8dda075811241fa77efe009c423484654d0dd9cafeec22e06d55d1ec41c0c38c4794951f63ccb3287ef84f019d9ccdf3ce6773f490903cecad6871929b29733d70ba4701575d2ff757f7c9ab16aa08d7de42d019bebd4280ea131bed53461e568bfdc27617430f2ba0cad78c1a889ce1a8f929832cb62471e3a1575c9b68cafdd733f24fd15f0586a04461e5b3aef033b75578898bc156507f6f7bc5c26c3928a97c6b5983b6dae9e9e790ceac93ac6d8b51b90d7af0ebe024d47529c0da782788d4df4779669d889c142d7cdd5798d111998f3b3525463d294845ec09e7f6ec64a94a013742c36f79c1a5ff72da655d0950eebf693be8c1b617a4cf0203406036b471754ea9c1707122891b8770cf944fcdb847458e8cc46bd43677ff3d0cfdf562f1a7695d8cf3bc53f05e31989b47d465ef56d876425ea1935a29bf33ed2708108cd3f4b800ee0b475390de682d0faf86e13ad7cd8e5bedce4f7c001f58f64ce353a1d9f48e4a1f09b426b96a0cbd2c4b106d48f513899dba28624346e647b083ef49419089287ba4e7587c93b7dfcc6eb514c40d7aa66141fd6283704dd70cba21647d33ee178839cd8ff245dad9191dd43f064064b8bca385dc4f91188e5cc2902c8ef339ec2755ba3f57d15a6e29b226fe805b8a2aeb066639d9a5b5dfeddacdb09e4aabee5fae39e2f8d7fb0d1a0b8f03ad1b002cce8f28dc407d7719d6a57c03aaac006db078a2c26e00620208638f16f041e4658caaf868edb86cc75012fe2b183316f396c33ab7e308b901ba03fbed88fc513670ee6af9dc894dc67936f5447c23404e3a5b5733217389a2027ed3cd651f7eb149c26e1a90939151ede238ee8a18aa4ebd7bad5450b7a6b36e898d70ab909db99f0bbed26f46c2ec29306326439d7a58a8dd75d97beb88eb6a9db64d9a5f7642ff0b4cc671f3ca1b71098cfc6df765d5a58969b00d33e0fb96ffd4eda08fe62b5c6467191e32bd3e672286f805ca852f7d8e698e889c32aa0e74b88e72a4bb5eeb1c4963e41d75d2a464a1aaed9d5bb53430620e42b141d43c27fe11864bff9490e7b464ecf8838f63c04b0b571a2880baf1e6338f4f483c134e9910af14735cd0e3c95d9152611a6f8712e728e8a526e610c93a08da1f1ae773092b6edb2a4106873b00d44d6a46e9f43bac4ebb3e81115a0f16be98d606de4076a577ce5d93c3211ebc5522100bed6e0864e01709a3695673607a408c39eb7bed231093b44100cdf6a7fa83c49687d0c040f53c17b6f33ea18fad6a58e9c01a405d333397dec02e1ef837f9a0ad82d9c55d31481c80d64c1dc1125221d4e59ba9c999d4c016bc700d15deb588b5d6208a7b44dfabbec384eb1bcd0ea561f78aa9d0d9c1ac781fc45a6eb1c52ed7d35d306ad15959b112bb5140a41216431ddb063ca70bd20515686111d85ccd2323fe37f39ce2fb6ea377d0c8d76d9feb58d904d209c2339ec5a2915dab15933836be3693d7a0ef55005177d89ca010f21a8b37a6d54520719bdb73ad028acff605fe66ee9a99ff4bbedbb4367402ac49cb65759c6621d7057f36e766a6f2b8af98fc8dee24f84fe07e54a6b349e7949bdc5432fad91e822c0aa40e6afc1fa6ab02b8219d3b039057a8d7742a4e7848769be1f3e1cd1875dd40d0efb6a9f96fba5493ded805c16a31bd7f661e3e5ba4786f64b7b46d05b995b4590c5b740ecd19683370f48ed4ffc68c881e8a3f4b6c4151ac22b242df5ded48374bae587a3468aa5ee874b0154161da103f0cf1d00f1c21de0ca47a8b4fd3b7f220b02206eaf52406dc5f2df2ff0ee6e110afb33e82d34170987b7295667d780fd48c25a11532ad7ef3ccac1b015e256c057dbbb788052390c632cb7be3ae78a7d62e1599500c99dc6c2d710356227b9d930ff33e29ba27bf17e46862c8806f51a6382662d339a2f755c9640b3926c6e180498b6def2434e8e689a3f18644335cedb8b1fea75058fd48c1e41f7a383c1240162ef0026f1d843b06a8e198901d2921997ca9632d409946fd2c89432f76dbb4240a16e14e9cf5793bbc6499b9090543978367d495a46c1dee47cdf383ad790c63c3f85351b188a4fd0cc6ad3e347d6e5d6a98139b1750db41358a2a6912aa7532ebd91d80df8ceb5550ed42ea3d15d86a13927359a03a501d05cfdf01ce4b36d8689c7a19c82663e4386dde5f1a5c59e9b2ca162c18640477230df76b6b45b8630a60ebee121d17da64246b9be036d01aed1aa7b5be1c853a21c7c979ca3045eec7e072f8edb95133ea18ce86af3df81ab4da71b2fb0882acdafd03e4b00c8565b2c975dd19b2f29b5b33358c2793c670a97bf389e9e72351ff1e8e42b7748b40e0408cf90e1cc7fb5392583e383b0654bfcd14081e0ea5052b5fc42592f36a91b572a69bcc69df2c53233aa9b978c7b2312dbb91a938c4c4dbb26c6ecd547bedd1a176dc0eda31a9540d1f998f648b650b2d842319ed99f22ff4651e4c572af4c3ca3f6680b0ceb50ca15170fe697b3a4ca6fee36338cc7e015c04d478f883724f9abb4c1ff93be2a5c2b04da6532cd1d234ca1f8da9eafc092379e9a4015c850ccdfdd9b906c5c09b4e1e1e4adcbc7b53eacd2f0cb9e0c6205694e026d6280e708b244980a45489594519f621205ffc00856705846d6ac98622130f9a4e63195115d1bf892bb11d620ffc016af209ecd80febbdfee25f097487450aeed247705d6487e4a2846f94f08ce5dee4341c2af4d5bb1398af771ee4caf19ea9403e71b7925b0b516ef757fcd03748962a934b598ca8798f9d62b047b684ac8857b453274fc2d21f929bd91b29eafacd0f873ec207b187e8e2730e0cb4b8e7648b19d350d8a1a74143ca224ca63b6680647d1ed54fba7fdc3d38204802fc2100d4a87abaeedb3813a2264c02e6e301d1f1cecea2289df3572a8ec76e3750834b6f1c430d030c3d226e3845908b5dac8988c662935ee958f2a5ab06b380ba0af369799a26ea4b42d4af4c8e342b46f403d8a1b75ab9c6799bc31c796eefe1e97d867083e57156e41a1e016e1e65293992455e1f34d8358c32f5981c084aa77c08e35a64760ef5782849b4b75cfa6550aa380a20d114ad1667bc966846cf0f4a0125c58d46e0d9352a4586fd756ac4441a77925909cc43195268c9cbfb0c25270c652b458e3986600eb0d2344c8a7272cabafc0cbec4ce5579199870a74bff818cf563f93f7f1c6a42cc1f90abb9cedfafe7bab57ca121c2f92e28dae129af53a283ffedf0e653d4f81a7476816904475fc564049a41c30992df284f9d907944046a28a6707c7a2389d3bcbb3a29077994149e5790d21e9b0131f3bd9696e5d76d55bc6b33c1c5eefb419d294bc259e7671137745bbad61d09b1e61f02696f0bb3ab95752f3532a4d355c87bf24e2127d60d0262b3c28cc98265fa52ce649b933244baf3606966783678460d82846d95bcdcc5d3fdaf8ae925741b2226dfe149bdcb1bb8abf26698a08d484ff6de8356fe6099a910b89405b4d1692b2a23a5d56aa2fcb0eaad1c3ccd8f5bc32e9c969a799250634b92963fa155582f8a7da1e6dfc6c1b4ecb964ab54b17c235540479c3782ae75713bfe311bae48ae2eaa2b2d565b8006e4c88cea16ec8b226c37e281ead574cb1b1fdff58f513fcebdeafa1cac5a584a110d00290cb600c88379b2af1456e098f365078b5facb15a24d002dde9f397de90b703bf598266842ce4e483d1c272342ed2596b71feb7ba074a6ac137b7d5492d03d9dc91c9c0501dbce40b8be32d8918ce3f27c7da08a736b3262da6addd7efb3216878b413518a764666e13f75ae25810b0827dbfdd4438d6691bcbfee6ad2fcbfea35af42fa12996c794e2c65cfef1e8eaf7399b7a6c3b081eca2834767459096d1ae5018738836c87db9c222f2b545f95e58efd87528833ac6bf8c5868a3709717f8675bb39febcdb5df0b2e7aa6b3e4addd67f73e425e3b4cc84afbb7cfb5a79c23e24a3d1d6b94144d60444942a62d287ec01b107d832b025515c7369c63a1cb47787c492bfe031778aa919cbf6b93f18b4aa903f77357d9ee27d033fe50e66df4ec49aabe4b107f5ee38f7a100553c2299344fc53304594947e12cdfbed79f35fe2eb4f32dcb96c7b6597b4b1b7df7ae922d96d20fe64b73c4be06631a743b06548575c033373516fd00adb7700e3c1230938c1f8ec1f7a1dafa0907c221cc11dbccaddeadc61aada46117d8b0defd50f86b246614d6470fe2fdd4998655830873daa43a2f2f95cb6f75dd32963ce1316fb44675bf3f2d4d878e37161262e69cdb0654725d61f94713b883b6c0e9bd12602988a118ee3b3dfc60e1d21b85729d9b6c69d43f2d303d3f8ba56b3a34fb9132bc8a37623909adba32b5fb866423687787330b38ddcd6d79928fbc81ffbe22d6c29b6fd2bc4e8c563c1cb6e6938407ee6313ddd006d715070bd58abc64d7ae217a4d819fb00b8928c635d425503932b0e68f99c3dc3bbca3892b3e7db79081c7aa00d28bbc81aac878f73b0ba2f35d2473927daa02bb27bab1a97e2ab35cc6e2fcb6a6953d2113c0dbceadb5971336fdf82c6ddf5a98df55ca86f39bd8ea64e9f5685321507c4ed8c35f510720287f34e116ee60852ccfaeac5c5dfac5d58e4993f71cdea572ad3fb50bc0a08b6bdfdb852df51b1532121183b308c4eba589ed94a5a4319001cf3417c60d470d6a7f056e1e46208c8e5c42710c9e66f5440e00ba4239040b157547578f4c5426acacc1cab1fc941c692d96efc20cbc2c2512bcbaa9826811da9d40d70d308d41fc47c24293911d600262fe47c1a9ba32bfccb456ce30a1153e3334e6bc1af183040e3609335bbb7ce332b8f10cf486810e4c3f14cbe6fb76cad62f2e4f5a69aa17e2720bc77b71bf9a88529bf2429a5b1091835e648f23833fe056deb4f808ba15a0e462f41781f8fa160a4650eeaa56c8c7a557059e3cad16a13be63d18bba665db37c5f7b670de4151a1b76c7c626615327d5893c9d08bf8f07f5f714d0e8a7237e00837f6d4028ca77b12c17a0bbe25bf55eba60c7d8919dea84d8f9870083652b2abf0546633ed53a5907c026cf7cbc3703f15be0a5217514b48d73335c2d9d7f9cd2654a4de092a0d6bedca72bf90ef55940e256ad82718b6d713abd4308e3e249b88a8c79d33bef9f4aa86c73521e00d566ae557a9b1aa1c17b6f16954014c5464bf7d3ec750d875f225c9272790402598e5c80db4374e4401fb08a5a451ea23420a2042047cefcf95558f9888dd26cf945db3cedf4e96eaf5df43ba64cd2129f7ae2195f72bd4f30dccf69851fab20123727eed60c35e68ef79168b6f409f71965a6c0cc776112fd94b53ccc2586484e0ca9d040d2594fea941ed3a49b34574107ac47de87a3224eb094306ef26e9de6f8842bc060afae17acddc4dcbe03b0037d3e5c57cce4be98e80b916aa8f8881a7ad0aab1412fcd425ac5afe4b6e2ed506e1e799d1190e0f839e1ab2caaf3e4e9e0823fac5ad9ebb10d43ee28d019181426c3fb3acb2fe801e06b3ae4612e52a6ec4571f8d7636b40562790a4b28f78bf403188e56b2a36c187f1da5e4dba4560b70e74e8c6cc337758f40379ce375647fa6a533fd21790e98c7ec4e85b927b72e7f8af45cff04fe3361464c19b6dcb7bdc3ac66406db0b1e810e4cd3deff1c27bdf784fcd7c8bad23fc04b6d42684b86529d6c9a7ad992374b8aad9b73a87ab02fd8cace95e669c4d5d4659de75080b41254a7b66a41b6b13c5b05554486f08d6ec4b773f49ffb3b06c76b4dd0898086bf1008d3826bf5b9ca6a6ca988872b050a9388d8fdd39bf2ef5ed03c9b80ba63b8efda631e3a87695973af84099586b62e72cfb704bd88578371dc65447018498f39a1c725c9f719f0070b8c3150cba1c6310678af4b78e1df14cf3562c500136a49781563a29f2c0ad486e499cec428013ca571c092acfb558df3c17dab7ec6852eac769e172512e00b1e14b15e3763cb9a2f1237ac24abe17274b01cde2fa15cd639f7a0ed12e52899b1b315bf878e82e9c957eb1b4e436eddf8f4c855537f4b340b2107dba443fd9c69431e9e3fbf6ab1d0333f891654c56c43be0eb103cbb2f546190540b3b4ac3e5b92fc27eaa2a49ed5e42dbb2c65100fb2f964aff9d99f321c33fa03c6208488b22e36bb3d14d669b7edcbae53d0a83d37eb3c554c8b8fb70548472bb772e949693fc51a606a04d871bdd82cb52b69b7060894cb1ba9fc1bc0e30b7b40399c50d9ef01ca089264b6b896840dd8472bc9714dc1052d7e3fd6818bbea7a2646fbf68c5137f7a7668039a401cad85a5a1a3c5a5e9c372944d5cfc6344e12f0a9373ef06be5248a0d4d4e6f5b8ee41402a2ad1e2bd49cff4fb57f1457f15bc025fa12f194dce9946bc795c1ee6f2871641d6a3a43c00bb8eec56aa8e7fbfd8884177a35e242dfe3fdf9684b9acfa8bfd1225b14330228183d939d10feb42a9e725924751d9b3ac29dd9a55858bf6d3c8e62ab46b283ad0af0d1897534e6ed2f0bc29b5fc1f402db74fbab0f8e3d073c9bf195feff72e1090ef7c7f198f23d82ff8c51efada2190ebcfd49c773dadb899350edf05a1c99931b15b66c4491476271401f75950cbe7e76d661d7509d167c766868bdf22721cc055683de34f9a6e7b3d53e30ea755e1f6e5854ae9621bb0e7a99c11d2bf5d499a2f1346b869fd4e63f094a9753fcd5aac93e76d7175788f2e806d4abc694cd5893ac2d939395cad3c75fee80903e277b9f8fc12a0a9086896ba4393736c0acea924cf7ebbe5dec87921b48d695c9d69e62f37ada0e9bb7b7c211bb3c47467ed0b44829b6fb136a098cffd8c9632434f17cc4810fd3591d6f120ced5fca8f55b0f0a8220582e7c5d23f229696facf855f54e7f2a302da48241ee326b9a04f54e62c60b61a07d65616a11a55aaf8a72a7e488a78e7499aff6204f6cfd109e27ce4e5df361b75854c3c3328d2644c2fb667c6ceefc9e59c0d60f76ea4cc6ebb7fcacf623253ccb62984fc989d0f06c96a078eb4a390517affcfab2b33ebb8237a608b4571b3fabfe2bdb16f4d7024f1cd30a29ec76e0fb8330f671acd366ae698c45f4743cfafee7b564d510fff46e9a44ebe7c7b41a4f75f88acd02a3c50b30796eeadc45ec6481ef2a39b5767c64d95fe9a00b2c9168e21d755bc035ca4cf651c3b6f7def9f7c983dd99805ee4de2d5cb3d7fa2d04bf12d9ab84121cf0fa61c768b68f22783af4de85d25cef5495bcf5383d7391237fa4fd7514b432aa48d593400afcd89be82d4fd195f2fb846be0eebc9b346167761978af80c6f85177093a776196a9c962c4e666b84753537aedd255a0f11d7481065c1116f17e0625842a7b42097706bc7f72f6e65240c73b5e824bdc722d5be1a5dec8c3f8e5b08674e2441972c15d0e03cad2c5b44ccbae82234fec4e287a2f660f614395ab2218a90190c3c10e23c7d0243dea018ecb7616e0a9f631f5cd9d868774baacb14f0e84a28800d8cc28407fd4c7d3592672ccc005b03ccdf6b132f1a7be1a68bdc367a77f7e5e5efa1b4a45b3cce0011745ca2d690f80aa8e84a0225025661e338db712f8da451ce415b54189bd57fd1e22d37056815fd0f3cef0483c37d25deb8e55393fc66afa0e592cd6bef3097c78ab7f52226db02556fd788ef2bc7e66d3f3a9e81a534a13e8c4726349811aff5668da2fe07cda3cfafb0edc2dfe89aff8af208a617a3e88b690a82c3ecef0d01186e7bc8ac819fed776d6132cfa5dece75d271cd2f39f8acbe0825dcca8149eed0d9b96dad4767130aee028b62d908c65d768c26e9345c2925335e706bad81af4f3958e0feaae0a324fa5e1e7f134676ad823613f5e0bccfe8cdb563a92a76bfd3160119d362803488dff02a85d4f2f5eaf85ba45b5a65dcb6518ba443e7998aad9d964217c0ed176deaedc1db2ffe205e4f4fcb97154c5a6919cfabdbbb27285fddd62ef0c8f810e55a99d9492119be2b5cca376858be1117fee189ff8feb640375a49b7ad0447ec73fa35fb5c9c86adb07a14249f1a3e0e52a01462fa127f7ef7ab1f034f16d3315676ce06acc0d63d0b27149513c82ac5f46f0e2aa42ed2f074e012c2ece068e3ef3f6ee1baaef6f7122dae7cb86ccf71d3ee1ec5f26b8fef2c58b5230fac6025a81078ac7a0357955b6f2d73772fca6c1ce439bad0ae6b492d9b96ae60e907c7425345d923805bb44cd26905bdffa60b151b00e01d3792cc8498cbcd44d8c63b4a9747f3ba47e32763a05626a6b4361208324e8f89e9e54b5286f1d68c4b8d869ce74ae0d24e7df089f62f79ba9ece6ab6f8f7d0437d29f156c63afd250317d7908c022fb94e0ac014b414f13de67e66afbc83bc8ee733b144de19ab09018df19a6e554ed351355b6bc54684a9ed1f1f0de6fe686af3933f52ff66f4faf3612546002a56a9c7985e76a0ac82a390093762f2d3e5c91d73ce24ff85fa629719fa0c048383ede9b51a43592966da573402e4ffb7666a2013c48bbf7b8b377dd9980e71afd3997d91b28ee8910d4ea06b4ae1122bb928eed45f1c32f126cfa071979c0503bf8c19bfd4cdfcca2ba5800d5fbae552a7ad4aedc9e263f5ddbd4769cffe2405767015c8b46250d163bfe636b4e0dcc58cc35cd4f8444bf74e0194356602998feb1d977c74754b444fe7ec7046dfbc58a209dc20463b01be3a97b9e5c214393e3b8f08111da36aa21d26024806b3fc7c063a9f6bd2fc5242751219a6839af74a32e8a2086183a27b272c625245f0df964aa068ee03c0409ec63fba950742d87a13e31acabcb8f97a226c7ac71d8d9ac6cabc96022183dcb734c1676eaaed71baf6700ae746e14362a46cad1769c2d001b3b3aa68df8a06f44a085aa4e617eab1c4a87b8800822eef8d57cbbf9644a002f58e8e65c6a52167c758cb88da767178b46f227b1ff0697c44c9e50eff2c072c976dac4e3d6c9f6cbc4809dc187d57af9c6da1903729de61fa9753a57e71ae22870844094b621fc39e7e3ff32e83d30c54cf1c7090ab93f9df60a0d3b56347c9ef109b2adf1753112095502f0fd9d823c19d618e65827c427b24ebc39461a258016f5f497eb268133b146f8df7f6be0e461aca583b5c383bc5372d75d36d3b0af3e4a0c8503c2b1d1471b276076918db8accfa547438d55599d6d9787aeba52c21a1f4a4833ef249770f5f8568fb5016410ee7f83e2c63b2a873d09fe39527cbba2b33c95109e81c2e93457ac017e4d5ba661272b705dd3f3aee037227f6f2094aaf2f2ba683f0795918c05de10afd3ec6d7a52145c35e079a2a5f529803b83aec1bce72794ecd6183382a9a99d1b4628bdb371ccc95f2b5ce437bce40f349901be1c9b90b203cb3e7f77816edbd1eefcd03d0991634b3607e141feb0825ee8e9522272c1dc63b89dd378046e906b77b425751a859ae55df4aae986172c086229cd5fe7bdbca5f3509e52a4eb082f7daaa5529aded35b075caa154b59a7ec4642eaace255d43b99bbed8217c869b0da830f236aeb50c4a09cb6ec99416addc55a29529baad5671c6ab79f2a2189cc5727de9a467cf9a4217a9f312d54ba3755eddc468fae8426b6f0fb9bf3e94b434d00a5f92b65b85840d4a3f440998c41308f9050bcd90c5891e8e603b0d307399b18059bd22db02b845d921d95c912d77ef5f631fe8f275aeac4502477d10727146d844c9ebd70ce3b671c86c40a56f115dc2b6716f5f4877295e31e253d60fbeb5e937c99a6a182943bb861c574b9bf0d2c8be7b1b0c969abce551068af4a5a9128af56ec83cc0a9ab7af4c52726a043ac71a14fbbbf9cc4970fc7fe5c99d3661605fdebfdfa46e1c205aa64374827748cf5626d420f10195c42d2e2c095664269414729629b4df74569d1abd9041d92b1ce72486257629ade805f5a830e7e0c0c3005ac55b046c21892004872ac76ac2cf9ef1d94081092af45704a0d61fc6017b8625e9ff9294f891a69f95e29bbc8d3beda1956ec538bffba56b242b1f35534a4a7806e672c55cadace7c7ad8952c743fee57d25d9a320dde844cb5a0e80c21ff594286a7dd6c72d4ad7b4dd72ef046c9460a9e8cee9adfe39961f5d51bb63843043c351a0845332c414f087b9bbca2a973177d5ddce552858e0efd4bab737b6542172677928fa584163e617274cc93f545a5bab3e5e84b123091a06e616f341b7f6f9c95df29e808ed7603ff34fd7530bad910ef798a343ab6c38462d7912fff1bc498d165f29aeb651f6df1d9ee69fde84f87bfe3f89be63627dffba23da0c4b51f62ad56172a5a17806e8e30c1f3c55903d76d76fd7e08824ea7f488ac6c2a2c56503469a34481e3bc40d9e8a5895f6de3cd1876634422d0a242a85e4d24c26223af2d5f012892ea1910c72ed5bc8c114955c2731fea302cb30917dfb3cd1b0cfb17f576dfb1d72a2d3444f944f27bbbcd5fc38526c495a1b0c70da8941d7233df14d170a477dc7dc75c213e556d2185f0e1216f440e26a63acd3505203c315a01cf1936f8ba4c5b5a8d82d98718bbdebd7284704444ab6ea7bbd9a4c1809ebb7e498b8e44b9ed506c5d2bfc791911d597f53d84ba385e75143e09b3725719ef468bd1d626fab83f9052ab1dad1ef4e44287e862c9db10b74a82b93db4f8ecfceaf93e5f4c77199df50ed06a26faf0f95ff308d6359ac1ab1583c9cb01459e5702fdfe484012556d2b977ec614408eaa0b73d84421f0e234de94e1887ef400a7921cece68981305aeabf8fd4ebd76513f02217b2e75a6829d8edeab5f272ca1a14645930be15c3b6153f8ce9d434b45e5cc8de1aee12bcf19f6286f1ba3bb55bb8a37e81813100cd28585b36fa7f74e319aa2f95c9ae035a3b2a4e93b50eb884f90305af88becfcfd721ba88b57462fc3abddba5df541e5d7104c58b7640adc45f3c8e922d368e07d9e68342ec3e9d4f11a2337e24d7c11a91bf0f2a80904cb547e625fe2d710124d90b12119c1a91311d09582b91584c74ed54f8ac3004818bde826bab4d5eb1b94775b249c6cc0556d2136af83ac5fc6cfad222ecd786eec3c76d61ec99e2bf5e74c511782589517efe4e07fb5da330c403cc8442a1231c706bc078f47ea72ff75a7639e93077b8a12ca3c098c9d31f8ddf3331075353a93f039b54599892012104e0676957c1b8e8b0e2f81bbc90b5098c98ac013f003fd5e767798bef463f41f47825aa797ab0cb98638bafc777817d0cc70e574aaad72c5ec32b6c3e1e5bfbc2cf94b227c7eb1f692b3c33055d0a5f0ceba64bf23a70972f04b217f499f9145a35b38ac5c9b00a349f1127f5e78205597d63a0c843e850e565faedb509bdccbce4dcd808b4e3c1012392b565c6c0ed62da704a64d3726685ba4af03c2f46abcf60c89f396c87296adeb1534ac54a5ca6dbae8a0802778b87099750d6090ee73ec1f0089022032a8cef41f8a0e9a42d8a457085338e34111044832c5aded912b042c5bbd736b5e28568a21885c3606e4e997d5eedf5e8536f2d3ee7647c1ede51d7c441159b73970cea401040000000000000400000000000000000000000000000000000000000000004000000000000000030000000000000004000000000000000400000000000000010000000400000000000000,0x0404000000000000149ebbd49d416af102e324244a6f79e1e5565c90fecdf7cb01c0b2fd706ef03da0cb1075e3a8f1e504bafe825f81c9b4c8b1ff06b5eec6b6b99edb60d210efe52dd891149044c11444b77b9e1004ed8b88bc301d525f0efd0477410982a364f51d0a88f24131bbab650a464742626fdcb290c6dcb482fc3240534deac0eb227eaf85e741e58c03596cea45eb46a850bc474572fea52d15a0d648d75cc40e2015e859fb9a7e137ead107703822b88c0271b2d41e230060a84f6647548391c2fc8eab03558939d55dae1ac31638eca1ba06ff22103a2accfcf26e7ebbd4e5aa23b02181acfb1c43ff7759fce157dcf447f7e008606614dd955b1459ded3e10e16b002579ae79182b72aa944345f2017fa09b44c51b193be9ed9f2851fa51d92f01a2fda4344cb2a4c461d6e88e05456b5dbeb7f55a0fac29cec3866af6e77d272c3d1166c8b8171bc8a50e74da87f3a6e800bff518394ff511df132680fc9b03520177a76bb795ff84036c0ce72a5b1771722207594676bfa77197d76c55dc224beb3d512229336c30e7eb15946785bbaf6e82641324004879f824f3838562f4eebd5214b009bfabd8c02496cd64063ade0442b979b395da8b587779120ee92dc9396872b7ea4cc548ce9f6515c81803bfda8ea8a68fe32072f3e33e915757b8961d4637ca33d2cc18a015eddcd3826d9c5c7c9e746320e5e63b17722723b06ee2bba76524f2f10c4ebeaac61a10dc8c085300ef4a4e426624d6b24e8693d4e2d1534a3316fc71cf8bb32b69c7a53d0812829ee90078670c62fb2ca37f75a3a544019f70b178862f1a4cf3a1b605e429813851d0b466b1e385cb45179b2c7bc2762af69daeb5b5656609c6212d7a2f7bdc9e878e669bb936e5fc0392c2c23bbbf4d1d46e4c68dc738f2543379f39a7925372aec4e21952fe61b1e49e2570f747bafd7bef537cc19c9c5c0f34f55c0187f13603cebce1a3734d800462026577fccedd74b9581a52758b26bd9b170042e462aeb0b0fd0540014079e98684997b4b6448add1e23362042301e80aee435fc497ad572d2dc5a7f34f5c7114e84e37a8e7ba6578e303bb5a64fd3bd4cc7e0212b943c1d3e4327b496167215750a48890a591cc574405a4f5f06bda91ce75005f41fc637b3345ff675f074180b7425145288bff27f597ce4f310aa832d82d2a15c7f7144c7f6b7aa5c74e03d102343cef6928a0365b2263b19c7204f3e81082d3335c43fec43f784ab52542342752807688eb2c45a42c096ee1e6bd5bc35b30ae9cc9b9551dabd82cfb6a7aee1038b3fb52ed2ba98cc3de6441464934efd021d0ffc801d030b486f157ee0bbcbb566b6d7e3b78d89a1bcb1506bdc97892030217da20d5d23d4c5f3df94fd8530501cfa90637b50550c426206e9c7c320e6b052a962d3425612896a9ee166fa2e6d9379959d76043981c0202fc52fbd5782db610dde20cfccde3c2d2999006eda28ae3a3ece0b5bef17f33250e638da89ea5d00e0498abb31cc884a95c9f22fdca2daabdf11cc1684b7ee9e6f1ae69da64246de31b9c33c873129d83b0803d63abd90e5552f9574d25c835917b9bd7ad602475ecd9d78cc81e7ef382e030945fcb96ae9dff12c2a9d0c6cd6ad2484e2015410a990e662bb543c58e03987136f34722db849c244844b9cf4081251bae9b2f77e62877ee70bfc1e840278cc3443723003f73eb905d654fe4e4ea5a2d6382ec248373f3f2f69061c7acdc24afc062133e5af47c3d42f9ca6fc07ab3f63969117a6c2f8d5ef8a3ba918f5eeedda58f935c1ee03b6a6c59fb386f738e084fdefb1c84e300ce08535ad9e12447221406132c758d04bd6c59d2adcb5525cbe01a031fe9a5ab303c8e6b09398426f28e06a1086a2fad9fbbd62d15cbf0451ca7a47269376f1e82cc69500b95bed76876629e7b3015a1ceb5e3c3dbfef7cb3a9101a78b2ea9f97b6084819d6ebece3bf89681b0311b111dbcfa74be1569e20618d67981cd75335348108676a14a53e0b1841857dc6b008a60878e85a69b2e6e4e01594a73750c88725dbe5d05ce21e460451eb6394ad4486dcc7447eae186c178208a474b0b32b386f6421fe1be23ab4ceb47a43369633bf37435df9c3c4801e30617833597bd1135d40e14fef4c9b667e28c77bc69fe803c14918ed41e41761c896d88c445ddd6c56511013da5e5527917ce2451a16a3eb69a4b01fe802a10e6a42aa19a1795c2aefd8cffccaf136530061f21adf7b047572f569d23df17edade0e6c1eb97034c7c9c23598599520f0f6eaef54f9ea05cb82a97a904172d7d0e8005d4fb045f934f4a36d1310d8eedb2fd59bf4e2123fa3539a301d38bf3a25fc7965f4452f3ced64c2cff04ceaed79e761c2009422fdfac92fbcf8fb66b596790c0e08fb513e1df41601beddc8f46958dbc9b5b0048fa0b8ecb1d48147e6d5fd50fe37f592338a77abfc727ef45b97070c15fab068099c2bf72132f54b9b62f8ca32714bfc1c11329a8698d043e66f26d78a6edf4f472a6c865ca3324e6c0731b06452c2ef2a7d12f02bc585d2a31196d3f34f1ce43a8433ebbe9772f75b663e4eef220f19657acc13bca1fbe08293765eb43618ae9dc5b8beec2b0e05967611f2b8e81e8ce253f5347abb4e7afe7dd5767817df12fdb38209df251457a202f379e24a7df95fc5a0ac8263bc2699286b0c278f677b4d662d9eac5773626213ec237a0378aef5231d53b37cc74a3173e51fef28aaa76e86b7d94a3e7c6069966c2aa25e70ba7d6050e7d1ca4847a1871cd30d3ab338071bca1513e1ae42ba888be4783688702dc3bc22ab7881c95beb77530d5bdb91e5514167c470a57196fd7baf06be28017c51d908caa3c3250122dc364b0989ca1a777351917ed2043526afcc74ed3546dd17f472cf9cfbee3343b68a25dd37bd242d9a63555f88ab4499f9a3b4fad9600a42857c645e431aa6905474726ba8bcc3cade597317a9c8fedd9e530fd293e51a91396ad785ae6ac85c89b99dc459991279a9effe4974ffdc77cb75f2a0ef7c865faa9d04b1bf7f54126a7818f887688fca13101a1f42cf610872527a8e30b2cfe31308388cf9ac448f3d1f49ffc77df011dd91776943d6e521f7ef3829ccc876a606a041dac1992c117263a58a309c50bb8dc33fda0abf45cb544ada93dcda9a76226ca4a77faf3c96b7e6539c574379410b7564e7ba928b021b74579bd5aa9759e4d781e3a4c990591db206634ce19826c89e93db577ae2e6f2991d230110499c386621f2f55728ea91de435449de29dd0606e1ca1dceb087e9956348030cb3e9405c3660ff6e2db55c77b00611f6ace88b8efa1a3c304ae10e8ed23de511de8f0c877a5ede3d8f905ef4fba13137ff89a65206666ebc51cdac5c48f01ecde06df89ff7f587541223371122a9bbdb30418971896e234c0f145b11793c1900d73acde6b265e6703987ab22dd5bf7a7c27cb4b1cf4c3b627f4f9ceed8e583821f0a39e08a1231ab10ff48a73953685cc708b3c086e8a60be04629971ba29edf43962fc63bd17b26abebbddaaaef4ba913f60b27984a7c742631239ef4a33b88155fbe5b931f54a6c8e66066a35f97d7e705f36d6bda2b15c9dcace9c9791345977482e1425ba4ae7f640b55d397495841af6634184a33b7816b7e26b17283d9ddefc044d43790a4e371cc457fa2e25a52eb02f7dc87b8542b613183ac81021d72a2377865c3fbc80ae63939b7e3c362f75a5f95b081d6c2e3b75950b566be9dd8a040ffd4bd25f16d28dbdb30326dd000c07d57dfda8d023da1d0d1c0f2556f5b72d8778019c8a3f89f9bf9933f71970c78d5afa610569492ede128f74789dd4132fa59051d0dd71d198f5f8aebe9f4395c4f90076387d333ddefcd737aea61349a029fd4bb1ecf455467dbce927de57a99f8b53a2c8febbadc65e53e1fa1f9e394a1ed2282cc82051dab4fc8846eb7a19f9e3729768e00a1a6f31e5456cc99504e28d9632cd41c676b613dd80e50282add9d73a335bded81fd94e3411d0445621bde7ab492066a640e8b4590f2ee1cfeeb08ff6525f4156d03a9af6f35a6df94d97fdef2e1e1c2c9d8c07cd9a5ebf9edf25f27fb80beb42c3615353daa7c018244b186c2f0da880ace8605fe6af2f71f8a7d1c718c7a07c48e39a8255f1405972d387c524cccf4bf680e147c4ae604031806db6b4400b5219a480906c9f3e00cae6a903499eedec1b901e76391544ffb37e9a74edf4251996ae368ac7e51995ed0a8aa2a3ff059973e2b93a3e7820abfe388f872f1411357370aa9e0f4919a71279bad76b9bda22cf1d09759ef3a8b1b463150def98b3064ad3af83cc78f51f0d7617f92c410ac599e29a8f512746e7871a3b793751be228f600343ec733eed308a30de3a1b90be7de2dd9cb80b7b3f8426960c276c185ae8d4825870a825d9e2423de6b76851571572884709df048e6ed3a5303c8cbd2463d220cfca1801513f479b34031b259fa18e6b0b9cb487a53bd64d80e74e1bc7475af0b7ba265f6c8f04736388ed6911c82e23ded0299e56ea4f32b5acfd12f5c0e97650b25bd84d469a1bbc896e49f217764b7db0183939029bd2fb1a13e10e03b3a8eb00368c44a57dc4aefd8ada4a47543a8d3279d4c804c4ea4deaf8ac2e555d53b406a3893b305b1ef32ddcf8c968ea896c93384df8c75eea2f10faf73952d83bcaf22a64b73c823bed4f12295d69e918b4dee845bd2f270cf08c744fbb9b6edd73d565843b04697731b795877c0168f0560af981c23ed4755f4d0e183fb024bcd7e355f65085a42bafa628cfb34995e2f5e4df98e780f34fd76d1830c8d786a4d29783d3b14701b44703f9bb7ab5a097b765e9c6d1f2ee77b912379ca9b1050dccee0b1ec6231b8a98f9868f8d26be9eedb43e49ac0b4ae79efe4741dbc02607b8b85f8c97856c8552b886d051f5e3f0513bd8263f84f9c3afdb40f3522092cecd7e8079a166d9355ec75bedcc356c4d54bf00025ded4bb740035dfc7d2c42ae3cb7d31f266576ca0a24967a2d50af4cbb548ea054aa3cddabfff677a70de9dbfd0e104fadb41bf17380e9c19536f95ddaf998026c44f313afd60a7a3943befa0deb3a2143bdeaf6d238e94f6604584ae9baaf3e727c3a9e06368c72c536dea86a3042b1afdfba8871a24324bd2a4c45b28b6bb167b9bab7585ffc0384bc6e389522ab5749df1010c4aabb7dcf06c0300b9557d3e3471766159506902e003e4cbd02bf68efe59e51c66ac99e52a1e5d2c4f2778117fd9e885f19efeebb85a556efabbc10e94ea89fb748d861d598249ff06fa65296791064bc11a84bccba06c7d835a3b0d7ea10c222fed106f974627610433532703b8cff123d6b02cdc316b779d1d851305d523bb39899dc65a1389de6d95a6480b8593fce38c5fccb916e712507b738a24f72d45962fe3efd5d62f0de3c8c2446d1324c86546f5f21045cee9c3e052cf1ee86d4ddc1d1397716d57fb22e87e0d9b58d7e4c5be903a86e1f3e6bbe3bd5c5e17cd2f9529c8687f662573a680857767ab0155cdc0dcc1c48b90a92e63fc79b7943c9f2f79ad5f3ae3e639d827cc2f1470c6c6bb24ab06a627f4026a0fd6853ec1f0a7dd2357783ea3587786003fb84e35941e0cbaad8b5ce26a25b5ef5c41a2d3b805c5e90386d88394c35250114ab4d089158e82bc85e4a870542fd970fbcda5ea9f7736c093bd366e243b27fb2aad5cb45ffb0a287c89532302bd6fe69459853069a80cef704c5fe77f151e2248133339864080591e008b9b176df656931398c55ab5b640de5c86e5f4b36210d5dcfd82f24f1f0298d1f327c967d853b3c5ac44bed79bf2453362cab8dd80ef066651691272cb485fc042757326b6a5c776c3780ae9f1d4be56d0bdb7d16bd8dd7aba71214cf88cbb02fce4f098df62f1505e1c804ef9d17a1730b6ed9326b6f623e9d42c3324d569a11e0e4114f74f4ce85cff20ba25df1152e5838cb75b3b23916e750d9bf7b7810c04513e0b584147c82fb19f331789d96a51806d4c719584560cc60590968c6f54cd312cde6fab7b07aa316d22129b300d1050c519fa4d13944bb90d49df4c323af4f28cd7032fa94f5e096a198cf6639b9b403238db771ff3b43c1df7f96e55581ca5696723d18ef44854bc6448ff86b9f9ecc4e39d311f7d7792531317ce20210541e27cb0d25cd74fcda9d44c0ba4f408f980c907fdd82ea1243b95dfdea0b6893f4286c05055bfe7fde38cac4739c1c0795da66f6b6f60287d43e2ea38272eb32454b2bff7d0dc33e4fbf7f2bb6ce63d5d0226d368cdcd0dd31d5c2ee25a5d9be9d001c53bd2d88fa92953692c79c80ec8783c09623b8a10d3fdd849364ab167949eb328fb403012c1f4e01acd7c1b32bbfda2aa35c2eb8192af68642db862617444242589d272243123aa465b77b10418620d8f94f6997d11eb95c55d9c5b6313e83978c35d246d737eb1bef1361c30348c8266178bc1fa528077d991bfa23e42b6431787c92d3fbd1db0021f2a13430fd7d0a9490f7548ed5c38734b18f6fa873185114b3909efab6c1afcf6fd24f67bc134957f18f6ac93e296f5f5b7de2b281e734a9069f6c615bae4fe5b2330af42367040d6cd26f47ce055f73dee0bb574620829820bec2f3388f375879adf7f3d7ce17366c6ee475882a24b2ea77099099439af2f550bd39bb725f651eec6d7fa8aa5c61bac85e4a02a47563430016bbc15005d4ad541d6f275445c202017c5d47b5e30e847d529bfd9e111d9a43cb0d64e9f91d77f2483e27b32d7589d61b5d60e9b3e83ded83f3cc6c0db57be601bf12d11fff3f1d26b8257f13055b980b7eeeb6cc11b15c38fc6ece01df42db1f06825140cb7f7f5692a9a4d85433ac1a74e03c465bbac38b27dadb203becab48e979ad6f870baae48968bfa5666b4f323f0a93428c5fe8bfdc02a5e1b3f37c6c6284cd21e3ac8be27d5d609e0eb6d27b9aca776a0ade878c4bd710bfa67eb7e2bb14965030fb66162dc5c298b98dc773337d5381fb6fd5d479ff889ffedd3fa85837a24bc4ed74ddacab5cfa0bd868d97c0c934d1110f147da5e6dee7b758115fcba606a7098458b0691ff1feebc773ff7b2b1b986aaf5f886360b2a10263acffa7eb00de1a130ed7986267e6c7d299c269f9ce546b4bd4a9388d0260510442423df944418dfec51643aad1d45f4417965ef919e99dd06ac8937c4dffa8c015e931687c30c2673c42fc995d0c1d5128fb2eff4d5a3f97ee5ab695cf990f10e2b1497c7c9fb75db6891e42c24e9e29de79d821bc4eff62d96e709956ec427b5e0f94b726259e1a3853f4fee6fdb28b30c7fd1c24e5c17ab3844dc4c5c720f60aa898bb4f9bedbd0127597597d910afaf6070672000eb6f8fecaf78dad36a73c87a57570bf5a194607b131b6279f77c4b0008f8618700c12d7c1e428fae4c03ac2ab9aa0405dfe637ebb2ff87c3b0b91421e00ceaec38c3df3e0ad4d3a886cfcb9dc99afda94b70c04b7d6b5b33baa55ed7424a3944811b91244ac456addb8507fba294e577cbf87057d14ce394b00a208d1778a7115a618292fda1a05d92e565437e41d4bcdffaaa9d15e7bc660c8d8ccddd825c3d2ab6c48c5fc08a70f99e92f170aa533244adabff3f48aa831d6409cac525f9c71a2446f8e3a4cd5662e3db5b1559e4ef93b7ff311be3054fcc0d20396ebc95501ebf200b9d6743cf6b82049dd712e66f1c8e08b999d56a2d073d3ef2f100170b3a1bd17363f2055d6cfef6c8a3d9be80aff46c76e2037473acfc0d63ca7bf7fd6a9d7a1be4866a29d629c78123d31a14158092d8ea1a77939171dc08ba85d71ae0f2644f1a69e1c4164966a3e099383e10fede9c2c255292cd0be763cabd9f2c3a88e908b6b362f70755aa1ded9b2bcba3e20b941df54a12716e6fba9ec30a686d0c7920677100f9922cbaeb11744bdb227fe7fd5bb74e7c3398c52ddc99e5dda26c689b2940c7076503a3aa52bbbf102028728e70a70537c4ba2d25ee694b8639659e9496b42dba8a02ca4460078d19c945ae1f3b9477ba1488188502aa9dd832f37066c93355c099df982606285baba73c778039fa636223275658f62e2cf0e7939e8fecdd3db3577c04576bc972109c47f18a4ff46dace3219b546576bdc4018f75b48358f1af82980fba938e4fb81d8d1a036ae673943e1d695ffe5be032092189e5fb803ef03bcc305ebbe54a217c0ce6a57c049c60d705f4e54331e54230e5c8fd17a7160b52a5a76afaf84d56f37235df360a7633cfce7e338de9e89a72ef5593b2e0551744677062c5e1b1d78c2f2dd306b7db18f5c2bdcff0fbeaf6d1e907b7f717740f6fcf872685b73e7464587e31fb6c818ffeea028a056966b959880e1609b451061e8eb887b9f4836eea4357e78eac5e88bb9b3c8ecf87eb8b0003844b36172205195da4e38767d5449eca528fc2386e97e84cb3bdfaee7ffa0b201b7ed025dbc4d9aea367f97b13c310e45c6ab6e710ca73e7af482d8546086927b38909783acf4ecb9cf5be52e02ce8550c9a995f23197b929a0838ab7e6c00a1e5fc60d01a6d8aea7abcf1879d562af42074d0ace64ab5d02a2133a76463572a2ba19d0a2af400b481e3971ca4c59cf328fa483fc6bb6dfe877eff810f411a79fb7a203ad905e01d935350323e87d466faaa0267ebcb8438ac01266751dc3363c16da6eb7b277b54b222734e913824661b0249fb82e6c574e194cbd9d419365b60fca59a6abe0e7d0010a57fb7d1e8f05f9c3f833f1aa2ed98d30d08f0e0e6b17b7d8f294d242cddaab204eb01a0c5b80cef8208db5680202cbbc8a066721b6d5bc6403a4be7adf0c845109ff5dbc0077e170ec2d55c083356526161cd8f19d77b570cdf04b15a0cf9c206f7349e2e2e030990edab00b8e3251ce72475d7d5813fd53a16cd6596270ffad139f7c1aa3c1a04ea0fa5ebfd0bde74cfb64338af85a1de03bd668f0768ac750a65ce7a32c5ce4ff09d46f21bf789ed172dac51c03eb3959fb23eccd9bc864a1c9a6c886ceb698a098acc47feedc7ca17567abdb70ce636df94674084effcc7d8babf36774f0e5249a262e837aa8df28d6efbd38754f0f16da38b928921e52e5e98a21a5dae53ad3c87ea1e45a89b47a3b09c8308a41ebde7fd31342f2ba7f194920f5e6dd853fa957eb71c722e503d786fdfba27ea97adeaed97fb34785dc79979300ab36c92ecec338306a630b9043d860323716a7509c01a745c1966456f2082052939754e482a3b9a33c9ae379a089e0e90fdf25fc0689d7b7283e6739a1deba051c1f8a8f8b8e5838ab58e92ae283391d35312ced8517d558236fff9f2121cb4adad56c069b098a729f0a0e02434b27b012533e86643945e51c533b5396efb728794963f429098e76b2e0ed8a34d8c96a8f043daf0d8d7b96fdeed34055542c7573d036619341a99f8bf983208dd15d48ead1963a24cdad2ac73f717999548de0283e130e41d50c2c827a13c190d613c86bef6edc928c5fdede0f0d26d01e1d7ff8b772f5179bcf18c92b03e333a6695e3bd9293640b0fd93d1a5cd990aa3c15739cad300e16649769055e9b2e12661dccc57b928af223ec18bf198ad45123e70a172d4cd41707bc091685c339617d1bf74f6b746357218d31003ac9b5a4bdaceaf4e6d92e7a391bb25d830342b708ad6d925f53b87cf10fd0cfd098ce5b697693fc61176ca059f8a1c646799e4bf9c89646a9c47832ea679bd41f79c0745e4ebecb135f92c5a9008a787eec2a6342464ff88bfe2ef41aa180c50b71f3acdc189102492d2fea78e7847e739fbd307f4dfabe6cddf9d76f5165f112723d8ef08ae83c50e54baf0a13a3748e319464c2a32f2e69534742032337d09e591c880c115aab6290f9aac47b3ec866d6c4c0257a9b8f1adcece1525a323e12db36571933870d77b0b3decad65149942074fa64bb835e601c674fc940a82bd018f121217a73195b540bd4e51b5acfb40b6d74fb422d7701aa4f6dc0dfbb526c5ef8597ad40dafcb50488ebb60dcee95c8650a0b72af3b35650d40e7a541ae70d8051206a5ed97fd176c85d1be587a0af7b025ca0e1e51f085d1cd7542a1535337cd0fc06036acd6c9f6315c113d93ddbe46c142b35749084f647ffbf0f7009950dc409102a85d46ec684ccdb1a5ed01cbc89610bfaf14f1f763412d1c0ddd9cd0eed2083234cd1678349b298fa584b6615ddbf860b520f270de3d471c23c60fce934696f6de371e0a7f260f6cb4de3ae5a8229876b989cf83b6bf89fd8ca29cf1202d5d7136fc62914d60198c7961fca9c26d1d8adc7d719797d1a8939d6c01bc778776aa753ad90282be54f71971ba8ad3b19ef2be24264f50e44b0c2138efe0768cdc086cc16ac4afea82a806e1df566463ee71a7ee487185ea0a17fb26fabaf976c68836a075f36a79ab57da86139bcb5b2053bc59338a66a4a818d9f600239dd76695524fa55cd4e7f6dc2dae2b01c7a43f6cabca717872a9dd44d30c657f136bea68c26bd202b2df3ed1fd63e8b2967bfcc9dc8b8a08af78c64d947e39e179d79e5e02519a5c9c7d04e6e2f24651038a2635001f7378bb736a681cde563fb8be83ca17b6fcf1a904cb0b72cf325f366f57c89223b21fef151bf93739ba8bc179df4ceaaaf59d96b2eb69756bc64562964d211b62bb086fd483c6dd2d1eac27ea76b5067815b3880a8a05979ce4bc268735a23b26cdebfbb2092f3b2bc7c2e29ccdd613d6805dce0114a48b694807d4e668a90585f8bc8ce8a24983fb658de391ff59e6f94562327bc5b18ef1cce4e2f9877acb263002ceec47c6a08745278bcb833def7e007e0a57c776dd831db464fb00b5e5e318d0f222e07482e046a7a5ae802a6845227bc60139d5ff439172315b69e5401eb89bb35f1414d36f444313221c606ce9b850fa504f5b83a51f23b910d205aecd979aecdaad89b5a9b48ab5590adda7615c032bc0aed4d1a836308d84abdd3b858ea486b62d86f77ffdc12fc5cd416618857bcf702558f7c7f428bca5e6d2e53186c49caa1660112847fd0ebdefebccb204bf7fca3c75f503580081d8276bc2310541e6532ec0b983cd49e4a9db65f016f92e52f19430fa9a850866732f2582a1a6cc4e5f49e4a6191f92ae23e2671d4126a80c7d96845654a32d79ed12d6c473b231194dee4376998bb4bf067983dd154c7303dcb73f9b13e84ad383a1bc378124a53a54aaa0c977311647f73b531efb3076d62b22be5ef81a83782e7d893469d452e50d76f4d22d11e523613d7142fd9c3554bd8493e9eaedd7d2a2069b4d3892d36c5bd6c7e98653bddf3c0027a535ded96da28c10ce0a7e4dbf394ed8f837ef528c8a37e06808dab620a8913ce4783ec59b82e8b40f29916ee334e65416bfe5c61741baa1afcdc46df8dc537cf8c762d930e1ca3e8191dc2523efb392225146005ec94c5165e32a14574d63eca60d9b3f1689f79aea28f15b3fe900de6c845e3420bd2065950d648c87c60a3007220b5e21a2a98a2781e709e170bbe84c5baedf6882fe55dd340a2191693cc5a89c793a389c80932b0107123f24647fa7624ac01040000000000000400000000000000000000000000000000000000000000004000000000000000030000000000000004000000000000000400000000000000010000000400000000000000,0x040400000000000019a16b14c77ba3d4481858dc94c0cc662ce5affb13372cf0125e27aa55d651ca8b84f717548e2f65752e52d735e1d715d4a0a94fde49b1cd343cd58aa1db3178708a5fdfb595b6350f67a86d3aabc39bcdd999abdc3df631406cf94e38b221102ac91d8259a54e29d507e5e9cb15e57381e915b7f586f1574557696109c90c0e616eb5e965db6e5543799db93ed0944ab33bf5588744d5748dafd844417d9ba4d70920e0b988bef5b9907ff99b469ab0dbe0a9c028c33ccefea35de80fc86c5975cd29d41b6f490636e2352c93cf5110abb34c444d1b6de4815e3dd55421678d5930362cee5f33ddf62233c82f7e6828b697dda7929e6d4c8ccbee93cde6274a79d00889f5adb2c85da67afc86ed68c2d65b9a3a760d9ce453118315693d1ed50c752e189dbc631b78a146093b3871d6088268b521137decb0667ba09824703db6ff219019ff07186d7f70dbe8f2802ef1218c515e6ee64daf357e463e1cbb6220b93e2f9b24c0d6e66cfd0e8582ec3c664ed6bf58b1928df69a5e6955ea610ebedb2b09cdc8902716ea296b9bb62b7e919a42b272bc6bdad0311c18b1f8d85cdb5b97c420ab7e5a064e84f75806d5c58d3f1e675b422b87a8f57830cf63c9733ec6b6ce28c2a79fdcf3a73c889394c6462cb8b663522f419fe14815e08bcb850ce4ece6908f3ec95dabd1e31fe65c411dd8c05805bc4250e5779841ce924946fbeca0713a4f6ffd4a6cb6833bf404a63c1cf8be76222acafcf630a708b7e2679be5fd356f9f57871c08a82f6f40fcf47bfd1dd291aef0e6ef1618e9a96f4a8b0df15ba71ae42c80c38a40d9cfd645d8d111078c87b6bab60acff5fa8cb9bdfc844fea363905c52b4f48de9ca10c89a0e33da1258c9f6cd9d88127bd5bdf7e4c20c67abf8622a28b79424d763a197933583a0351b73d28423458c7a5e3c083d15989ae866bbeaf6cc3b0697269a9dd878c542bb776cb734de1ac35283e44af950c594d9c11cb74bee463b24ee49933cdb33d11390ed93821c80dc432aa74b886f1dc07adad5285bf0d7d9397bfe92286e93dfb4168c6e260e231020cdce2d48bb943bc424bb63f2d825a07faf0e01ac4fcbff7c636c0889c6341c26d9d65ceaa8fcedbc20c3fcf383e4f0d1e99d90daa9c59bc8bbf3fb97106544ab88ba5fe4d04d2e42c27e8d283198fafd317e14f8e07849792665b538c66db22bf0ef18913270100f61291be790061efa06bb650a78d2b40f55d8527e6b77d438617ada6c3572881efa51f7e692065ab612f0220286bdf1278ba7779341464295ed1f689c116cc8c37939e583868e75f492c5156935d6ea65dbb8f4d51d764e0ee9124ed377e99a51a6efe8bad35dd9832c6e31753a06a76cdbf101730d95d2c80a9c231c3ff113f09e86501863964374c1e898ad9e5968a08607f9981ccf62f0e04c2ae0b8c9588fd36fb4f3a020cc983f424b76b06e8e6bd2e055edc698462c0380af351005217afb1bba3d9bb7b16288e740973e3cfb490d8658d4e313ec88999adebac2b92c0830ed4fd67b3b6c9b71eeb2f8be2167d046bd5ec80f3fcd8e36a16a3219089d9a9d4a215b1d57d29af1bd9e9137d1f9953c78b766f3ae3847a79446aa92a6fcfca77c6ca96a8ab0cebb1b9327876814495fe5ab9fd3b18b87392d3fd2a67e98800cdd5e3ab22c86a7d5d94bdf99c7db9731bed3e971ed32a46a1ccd68dbeabe73838c1480e023942274fc135f2a2c136eb4447ab8771c7958dc749a1516f18b58dfdff81acbc070279019489eaf36fafe511d54b9100752ed955145e98703ffafae5604260924a0a8f4656e02166c37adeb0d0b2835ee8da7ff618b53fe1e1c77ec30a63ff379c0675a8e527e2ec01a3f62905c770978dcc3ed41d83b076e7052e4cbf3d0a21e4bbd4ccfec2390aae56bb65151b8fb61b816a2fa9f9f01956a1ac4d679b430e914e0418a4125a01accaa0719077356aa115252f6d79461b672bf0503b3b8af20e03416773aadc7fbef58e3d73f28d7c6eea3da83fbe1213c97109ae72f38a94b1d421547a31c7a5e1449b3fc8051f5dea5f57149a26bb405db12ca2a1964e7f5e0fe28230a59ae6dfb236ea3aee5c40e52073bfd7bc44c356e08cb484bd99171bc4968300b66de7143b5e79f9cc31ef38df43aa7a7f41a708def58bccbba5cdc07513fa06f6479c695d7e145917e15a7a651f1106ca16abb500efcbd53432a204c907f7e960ec623fffbbf3a527cae5aca3c9d2ea810bd8f4b023f60ea4157cde7868d3c0d7347b9f65f073ef756c2d29bc0ed236b085b4af56d7a49faf24508599d50cd9a4b601c7cfe69ab766480a36e2271e62a92706ce47e2147b936ec44368c4766aa63516d74c337f347b4a2bc6368ad58e2f30b960663e31493f32a0bd2a6865a028efd49f861b9a205456d9c95522364b6b35880cdf5a6c3d8f74275abdc57c3850020a8dd5b68e5a0caffe094f2f548395d9a4a84883f25234f8243a5d47d4db1467bf2b466482b4ccaa979917a11590a6209b2b218eb537701422e4e5c215bac6adc3223e98e59a6fcc04dc5c7aa470b42f8e1ac5c617cfb3c8afea356834b8aad860592cfd9ac58538fdf2cf4113d91368dc528c737a9188142bda21069209ce4d033662f838298ec5aaa63922e50a5d7aa09ac90b25bc401ef8a817eba87a5548cba971ce25754139cbbd7d78b999c9ef655462c5d0b03e700446927ac617cfff4103b47d8cc127b6c009fb07d86572ff1f5586383ea0ba3f142c491b4937bd28cf425c9d06ac027669f35944b6380d68e0fbfe0e974b26f8963f53f091d60282e80a73e704c0280f31175e90e207b5565a01255a0643a7ec5fc8b82125f58c42b56b8504307ea1a946d261aa1727866317bb9055d442b5249dc251792844c820dec52756ad5b4de6afa935d3616cfc41423831301c2e5661df0e20039298a1a7fee7dead2356ec6dac0f42c4b8004ea7fed56a7482af457f97c3290c37c32cc18f3a28155eef7eb6c5c63e50fb1b8be92db4d06f020dd278aa9ab030ba430b6614a4bd4063af47c141789d283669b11171d9243b389aa192566c3855a8d88028b72d174a7e5cc6f0721171fc3d88acfe9863de8d6d77867ee4bd081b7da56da26a5f098a90d946a2d64e5f0f1ac3a38238b0ee2002338062f8993082bbe8cdef83a7b0cb75310e8f6e79e934c26ed76b526b817afa87bf82b79c6b79958f52061cdcdfe9461ad6cb3f130c3d09d2d8ba8a01cc9690c840e33fc4703590eb91c7a3a0db0acba6f7cb58e875d6cd5f4dccc65eee5d40c330e8e30235129613729c30a24b6c7ca9e333d67001f3abdae92497663e807ce3bba0148437a7525ab8639161851a4fa411eab80f736367ca1b059b63a64252d2d6fa8107331f6b35ff48fe540a368c409a7f2fbcaf64ad948a2547d0f695a1d1cf24d839c1feac480961126b9d295985f8e641b80cf73c4067f4256620115b7f15dee179f9e799bcad934eaba1f7d4420b0fd3e6e0e4285119cb64a5533a6bf56d4f3768dfc2d6293e6c9587ea8ffaa28c910cfbe739c58844d367ce37b1e863a0a1c00812c465138c9a351836ebcb1dd8c6b38a859a807e7510ac81b90e29aeb97c34d1695ea54cf4c717d7250b0beb9374abadc628a818a8a238e34a5500a5fb3a2d9a70daf9c8237b018ca5e4ac59e3497a56dea2c9fe50c03f737dc660e777b94195e7d09a16184664b4a501162378e859f149b296383e9539ccd58500b52f98067c4375fe4da63cc01492cc1c5e13f4b7515d407fd7d67d4d45518ac33327d30272aa89ba07b24dae804f8b38611f36e5e52506c5e4cc52e008753a3e99ee8c44695e04a432c1351d17644babc636e1627536b51f4f09b60b39d4d9b629141ee58500debd401f6ed022d992c9d077ef6688431adb0783aad36abfc2d5034a69d95b175552c2c19252c0696179b6c3da1d26c33b8baf0a9b26d5fcac5593538ed3617a0bcd6291604a233b5ded3a70017983cc152051f9222743653dc631eb94c6110a1ca78ef26a204d11581243a397cda1ff4110f3a3c890f187aea9415cbf4fe84b17bdb79d1cb533fa154e556a18d5944d1184d6de7ed5e8c9f8bcfa71619d2b340a9b365df1930f5baca42a40f653631bab67668145d77b7bedd51d97f646673119a876b11992232ad83db2c3d3181a267580c039173a0f29e7770f7511973c031ccd326a2da67814b212a86a0d59fd8eca0ed0966da1529cf428a3a2202a0c599fe17f699e7c0b18d12e882df5d954bb7b68b04332af69ec71eab49ab19850d98c78221df64c5576de57b63b28a36337868ccce577221beb9d1d172ed6beb3de106e19e6d62dcc208f6aff0fe2ef8f7c5ac7cf638befeb0af10912e22e974fdb9a3f66dd24648aba7eb471fc32921d0b2cd742b4d8ae9bc6ae0210cce09e5915db640820be96a1e750f77ec55770fe7559dcdf4ebcde00e5690c250e6fb851424c2676e332091b946f304b51a03e8633ffb418e570bd7d6b63b93134aed5d21a38d091e411f5c72d0b295bc0d3cfcfbea679afe156943480ea2ee2c5483aef693281352ad9ebdc1fbe78333f015008ca7671eb2bf7e3d82dc00703e61495b33cda99fb76d2268dfca866bfe6c9c0e727571e86763043c389d49eccaba288e6d276af537a5a440323f84e0df238580a97916403ae4fd47c7b8e36f1eab66a3a771d1d9b58dcf877c2d01cfc95e1ea65af7794b34377e7e6f0f31b0210499412232875c933c76f57d8d35ed5a558417d7cb2d3fad471c44f054bb26f1c6bb71543e7e9939cbec7763c934066881fb980f8aca0e4e69a218b958a816e51694855b61e3529e4b55a89e417324919a2ae1b8b0bd4b4a3d559b8b9d0d03ba7b2a3b07ae760c1ecaa215d363a38b5f1448a374e626a271963de019b30f03832ec258c901ef57d8f636071864e8564567b0084bf4228aa8d055d8334daee95aceac2d6de96fe7780931af3a64e78df485687bc954ac325eff6daa7fa9d70e721d98afdbb1dee8e5dc2ac5f6b6610d500fa18320a3f6909a8a53343a8a66ed58784952c3bc9a5df7ac5950696e96a0ad869cbfeea1fe6e93e761ef2497b56f5ecca3a58dc2b4b38a59e3837194ad56c864a753f48a2ba7a8cc373a8d1a65c350e5f293c614bf380cccd72de2de0fe2137fd174ae7fdb9b3585d5f7440f00d06d83b5832a81d3315ca882bed8f49cbfe7bc0d7290b5342dc42f942c3f4e117db4e01e0a3d3dd250815f456a140913acddda8805347ecf3b82ee29da57bd4d97c00a306e29d72dab348284e81542f569eb15c26f5c11d600d704fd911098d5557dbbc7835472a7efdfee5a15e8d52715996b98bd74280c055ab37e07ba13fa90e16418a6300fd3b00887bd6113dbd50d94d2bf1c3d39cba91a9d12ad4cd2783ac42ff79c888c4e8f4d35df818a2b2243cc41713d4165de58ab30f0bae43f8982f28456ee450dfde5cd309854fba6ac75ab755fc0a6fda212430f25d595222c351c9e9b0a6844f703b14f1d0a6401f5b88c02cf8dbb6155a51b2c80c04690f06bd779120d4b0af729ca4bdbecb171ed91338903b7aed2665cafb21c62461a88b523bf1c1552a02c0af5efc6110de35ff2bce422ea087670d9b48b32c2b6099dddac271981dd2b89cfd7eb2a665965f85928626f558568af103e706136974fd00d533da4cdca7c78787b2c29a03c4c76b65f9de19487b94d08b2ef238120a18fc150780e7745fdf98f51edc016f8a53de1e1542f32bea3325d40425c24c919a2dabe559da620351a6459b66b86b877899c871da11729319b7e624293333c4c60521b4ce11cdf49c6e7c616fd66c7708304bfb02a911b96dbcbd14d53d59851af2f1c7415404c52bd41b12a4cb0920e6676e0d5c9df432c76440f55cdbb5cea342f77e60738e68a6017f184d6c10a6dd6cb80e16b877a4db75f352f2c8b73f1d0267e35f83b569c65da7cdb5d2ddf509107c8c0f507906537ed530d4b988d3d638950d2aed73e81fb200d47113db5ccfd3dac866743db93986f3c8c1590c50148afd91f6ed4dae74cf21cc8dbea5ce81e01f7c7e7d5314aed82d21028839c423ab4ae0e22c27a3ee0f5f77e4c9f240e64d5b185afd8d5b38ff83cdc2f6417127566d7ffa5bbe9d7039789c429fba16a64e065640800da6b6ac59aa204deaf7c72bcfcff1cc3312db0c43adc859e026a1afa107a0b7fd9380745fb4b5fd74dacc068cd30ba6633e82cd7f1f9f464a73429175a7f779a58d5f1c0356d6eb22099ee41591381c32dd6f08ce90c16e92fb41ff9049f5568552c05c079df7ef512f0ed78d5076a7d7555e9101904a75252318611329a0a8c50e69fa948c355ea0fefbce47c0966c279e977689f4f684210136176116658561c4eeb2c2fbed8ad2fcaab7d3a0ba23354678b6605220c2880744eaba2b5ae06a75ba0f894450e6396b4f11ed6d2ef84a2b06b5ffabc5c1ea8371b0cc28b89f15adb993aa199d3b49ea04cb1f4cbe641e2e4df948cc5a0b955b1d120579df31414339f6b7d4adf94fcd28525a300ee8f3d7bcd8e4f21cb3d2cbeff8e7db9a4a0a003329a9721714475a50a84739c4a2d948f7a9b2dbf4d34cad49446436f6c46c2e66029e3f443fb0d13bf0c3856be9cecf2039317f17e948ab7dd37b7aaf6b6a7f832f3e04caa4f69dfc2496718a7754d3e775c3cea71552b19e1849505ec6e148fddf459766c5ab919ee43f4b5a431d6c20cc2c943a917381250c2c433deb2895451009845b5e69c664fb0fe94a191e314863833b4ee29180fa13405deb25d0fa32cef9b6d726600e4f2c66e979e9ed771d248a25d62c9ab1c3fdc8123c9520fbeaebb2bb58e12fa5efc03e6c119c218fe7e44adb97361e394069e28edaa6f2c538def4c9851779d818f1fb7ee33de0213b3bb805755072c0f6c7417ebba565f2511e0f59595d60ff2790ba3b894680dec5b983839161c25aa2c75e853d602a4c8c74ffd4ebbf8d81a8f6d3ced6cfd3e9ff842473144200dc199e7982686c2397b97ed1eeed32a189be80a4a2b9b353dcbf0baa77bbc3338903efb4c774346c31a6d69040a70a601f2c3e60358a8ae926f67699ccbebd582f60273cd712cdc9a656f0a65d9afdd490636d4a2b8c9ea37fdd5160293998792a0f3d02300e783739c151c7043ab7bf1c88bfd6b4a4fe36573475a1f375e78f5bdf0136aebe1fa7f49a7c2df636156223c73564d67699eff2eb8d299cbc55860d9645c34fb7cc4869f932d7207d5f49b87e0801182af13fee7c1df63a5512b74e4bd24096c2926ac3ae9f7479e5642fefa2393948c88007525b6d4052e4c53eef120c4af595431aea57091c082e3c960c1888c9fa3ec7e1435c376985b7ac8635ba6900c25d8626d8031fdd747aca9aa7c8d28c0e47abb7527041a4b7423143660a91fa143512146d3fed620d8be3dfc8dcd781c12e18c76fad2211d13d033d78b2453215c2d817c547ade3fd7c5fb0799544550898cacb9c1480ec7ecf2daa8d6bc4cb24b43c13b70c50f990fd7ff5993eddd147258b358c3465a2132722eb58c1e825d76ce03dbc2a217c4a83cd5aaa7df48e6cee30d0b46cc27912e33798ffefb58e1c5500469a2e0fea5489059a76ce320b0553e4390418fbc43afb00cde62225d869f9b867664681cadc6782bec830187798351f76415d5e0a568498fbe47d225c9e2083ef11cf7e3b2b52213107295e6072882dd87628f06c9644f04886a044cc2369f7aa92d2f15447f95631eb42efdd4a67884e7db10125bf08b63838a73063e49199df7453632ca5b7f9987b230062e7d9307245ae22e4f0823a4708c287c5d76ed920a48391d5511043d6755c1c06604d30a21e51c2c2860d9fb4157d2b186b90261c445a3c7d7812f8e4230d1e2c3e4564e857096823251ce9b9315c4758a556dad0c8e0ab90193bd14e9402820de41dc26c3d5de9c2b01b85cf77461d27527d1e2af64587783f7c2b0d2fc7717891feb7062bc2dafda482acb63d8f40370e33fe2deb73755668650afec5fd1ce957e74a98336a579bdb4f7f1f19795b442348d88c4ebe51acdc1cd83d6c048b6658ed81e3e3f17b62e48af43d5da53a98f166db7a958c75bfd7b0928e2ff84081c00c3ed0ae72efe06f5e479a35d558716c271ea262d0c720305a9e1ad108919d301bfa09d9c5676bd5e84b9ecb0cb24fde137783b16c286917f041e472b8bce3ded30e103e2718e36dc5cf142534c43ac2d0064ae343da167fadf4acd49360740004754fc863acdc6347dc227bcb48fc94cac947b15199d705f7ba68140c4a4b9ff11ba90200e1ad625cbe7092debe463fa9ea6b9100bdb56c03c969bde6e9299fa7d13b2bafc989512683dc4f3e21580bf57a9fb96923d41545c12ca9c0c72fe3c5b387c005f5d092e6c5ae6a3e2baa2fa2b1f6490dfd47c3924a02ba7f3a89f32dff3ca44e4a01ccdf6b592312bcfdec82dd54e0b898d427a96e177511ba4150c45f98f51b5bbb094a677a69f843827732ebb34e63b656838b1d4230339502eeb069059f95bc5f26a02a13edd635f7ab501bf4925d574e3cb1e49f2d4cbec7b81b21fc63d9d516f7f3314db76c88f8de59e236ada6c04e6c6a377a721b33ea53f5a954bbb49eac0e389dca681b6b41be1e0c6357525f67ca4237623ccc028cc475f2ba8b4198251f9d2c73e37ea710bdfb60e9868d7b62de4b782c81bc77dd26c38cf81727fb9335d96f584721215544cf3153cbc8f97e8415bf34663c601d9a63948b2e16b1e8bb1a8ddf04a70092719c12830c01c137417f3361a65e45be2031680d18a398bee78c25638fa5590414900f8fc56933071568761c1d45e2bb9479643a5664549aa475fba27f7cb0fd326f5ac554abe0eacf7a4d329184f3e8d48cca7106d0d26604f9bdafaf83fbd5889970db187953d5fe34fec64f05e8e6e246849d1ef2bcdc1294792f2801df2bb76590f1ecef3e3a50a9b43de8be02c71fe9c44081c0218af1c2b28670792b123704d5257bdbf6bd3685b21e8cf797ff98c95a9c6d127253fe64a2a5b31fcf9c17d41c65e8449da1c1349cf79629581e2836eeb67e88f75419a06efd8f5bd75fcb78b62647040567850c2af523fd70d5424d5e5c0c1f235757a90e05314c1b359a20428fcecf2d7213fc4e3909815b02d2da2a042fa726c5ea7edac0f9a754778c401e532e5bbc8902cfa16813f9882f052f03cc1ac8f02bbea963f69f3bc1e4b34a9547901ca1c35af5b53606258ad9f455dcf2dd733650c778e5315f8ee8dc562e70c2db4d97626c9fa1fd5c205442f571b278cb5ce637e372c163aa207220c5003f6efa25202616a8400b60b161e192d9d5b7fc996928ba9bb6ffe9bc9681f7cff1d37fe0d0edf3e1e201a4d58d7c480bf16912edb9a05610c772ceeece17500b4f02a8d3058c4e18ff00aac612596915d69fc0dbeb738751e1fe790f16158b392b5bae8e8293b3d675fdfdfd877180a0ee0e64e2ea00180266903cd6456ad5385ee42ddef2c132905a476ba9ad944dc82b56406b9d8bc7cfb7da52a0b87cd15798dc567f13cefdb0409a311fd05ec6f59f2c1c49f6ee5a3a84ad6032b51ded22f8b23f1c163cee68bd81cb5b730a858dbacbbe75da4ce0e37c2a9438a8a73ab2f3633f84244c280570d5b4c1040b34bb2a87bbbd129de4840a6b1c5e757be1f9f8413a9b49be6cf76a6e949e62bf193cc465307d5c4d354d7a420b37b2fd3ef1a0967156539e99aef6401dc7fab2e11710871307c5e6521e25eb8b9979ac2f69fb6da8348eb26f11d4dd752dc8085812ec289929f86dea0ad110e7fc81fe515d09af81441a16069b02e30a465ed6956383a91ee156dc751958bee0fc0ae2b529afc8ab88dc1feffe7689983881d06f400512ceb7a0063642420b566bafefc921856ed3464f6ec49ff1e541c7e46c81e05ed4cdb271db9c668532c32dc43d45d0abe25024016b3eda1ac1896ca97f64245ba84659ba87fcb22cbf308a35775c525b260f85e775d4592b70802839be2e93636380dab0ab79771604b91c6e5a8c6b8f78ac8b7b5d87b13db674309c0448e5d43fe26687e3e2d0da35284ab3167415cc7afceb0ee825649c27527d91fa48bb636cabacdd24ef81223cf35bbc5fb54843050195d1d3af6019223ab130a87c0c2a2c0715ad29a5a3a706054e6e3eb26a5bffbd8d004fc8d092db0dbee971c1b24c426f7eff29527ea01d4a8b36a62e28e4d9fa8097fae38690414fa14b6b04e2a04f160cab76361bdd0bc246cbb20abe15b6e55409413ecdea38b828ed1c6310a12041659a949f646b6f96ac3c75d134ba91d2287e2e315b9b61457f9c4c901996eddef15c54b5d62517565b271c2a3a93b6b07fc051926a415b5f159adb14259357414b70c70441350f94ea8a27b696899c14ef3952552fd15fa3b9c08c1a10c99a20e4a74248d4c9befd92dee184c4d8e0e8f8005e1b850d14bee48b8b88c00c9a5c1b0b5ac2c0b689de8759c9baa83fc85b6c83375bdcaccd27292b98472daddd419c64b40d670da0918397d5c5c8b5edde2f13401c821af4707a6d12dc9cc691a5cf2a7c2b1a8dbc46e25a571d0b039ab423f50f1a3d91d94084331ad622d55157ef0851e782c6cfa740ebc7996827ea9986f34e9e475609bcaf5613b934d33672d7aa0da14c807d310c9934e3f46755127a52cff7e3290a4590fd1e5691bdcecda287bea63235123ab5745c0401ba12b7816c1d2d6823db0b548dfd3785757171f313dc3c1f30731a52ddf48efe97dc58e05ed67e600f1fd729b794d06ba7025ca9720473038095fcdd68571a0e943664072c9ab0f5bcd872e0641032329d071aab4f6481afcd4acb33366f55b9012a686bfa579a68a1bff53d04741fb706eda32fa31302a4b367470d5012393901e87c1b9f83742f585962bc15ef0831f881fbc5822e6ad792379c72966089a6d9a60e1deed2362d2e9abde29c80d9b8f2c4d5fea8c009e92ee90851ed763524ae27030dfd566cd0b2f7545d84ca1dfa01dbee9586c2786c56af94bbd4d64215934013a398128e6587aba1bf74970153ca60e57514c542cb9cf4340982762bfe6ffb737b3027c99c5bfc87707301a081bccb313546ce7db2d4410bb6db141bafc53637fbbf80b5d0d6a6c532a4a9737347adaf04d828323555a610808ff84b65b03f9835a35836f148c4542b55a0ae9ce4849eb8d5ade10500e492e2056e147dc87eeabfa7de33ff35de45d79a15dd844e94a7bb4d9ce3aff406b4a806164ec8513aafcb77e38ba32c96205f0cab8b42c363e8d8ab76d0e8ff5b8b6865ef5dfea8c9ebbe7acd1899e1c7cfa03ae37a822650c774a319c63ed45773664fd422c76430e9843e2dda0e479d1eda5b4a6e7c9ed6f22423ee0980556cf2d8e9d871f545df72d53e70fbbe77773bee90ce5cbf48cf2e4ff4affc040cac41405d19631e9dd3c51615718fa6bb111814cb582c6e5875cd3ab6efdb97f6c1d62a4eb8ba1a9c4047c33ed7a64d2d4124f1b56f142a5612341ef6da234674b9eb468b1fa38b9e1ac1222dd4b02bc58d9e172c706c9944909d759d31dd438c5e89c78c1afedd0133900803da99c501040000000000000400000000000000000000000000000000000000000000004000000000000000030000000000000004000000000000000400000000000000010000000400000000000000,0x0404000000000000791bd50075e08bdfce0c3c962a56ece10a7d0905002c57182b8136fdf0b7147387753159d1abea48ff5750dc8abf04c2abe53dade7d8969912fa52fdf3027ce9f4ae354c6c09dd1311b534574c4558aad9a95a66f8a62f99c993a96b507be51bde24d83c3ba94946bba3b18ba479b03a2512d75419217622a74c32efb10502302aa0debb37bb974cb6eda111b0e9bfce03ce2ec53efb01f8435c9bc9ec36c96fc1d8a90d48686e225a3f2dae3b75441643af7e084bec077af12b63b1e2d3f24b403ccc55aa0a700014746ca34a9db1f83851f0284538d96d8b65130e425b972d57b03f51288f444f1f470f8d05aac7a97a63fbb015865a4d7a75f005c50834db27d0e081e2153896bef91205fb244d4798e753e6da5363adc932ffff9a174ba28ba3c8705ac30dd701dac569054b6ac8a8ff51799356baae0f5656fc26368e4f1a0f3a92908d07cb4c0a88a72b19ad334a2a6669544f040d5259a644973785d1b3c7861445ab1b35bb04cdfd71b381ffa92da96fbed36ca3d354455ec6de17297255b8b6404abdcb50b17bf2a56e6aae0d5973172979135749fbf5ff50990d602415abd209e7c92bdad2131c47eb0639140d4a8c2e834e543b5909a0376c58717a6ad3eb0b80d2e31ea0140714d80418fee9395a7e009556ecfb9827bc86e40532275f4f9defeb159e4aa5629753afd9f9f839b89720720e1bd18f3f9c6770698ae07aa3d0f591e71cdf0589cdd50a13c116f51d57a8d94f7e4f39f1d5434fe7c8237c3e42c74071c91c6b2fde7fde41978b650cad1b83077428cfe781d0f0e3888bf4ce84649b247d996775e45054717a2d9f427f27fd6449664d088259d26e5f90cd76a00b6e1df5ffda9c0f97684b504402a18202e41e612a76b6d3cc9b57105b9952f1020f671baf99b5f729bd83a96e04a165854fa4b4310d43563ca3f0263cf93052d739d83632afe2269de844e20a932a6ef7df650d7aa73730a8931c122ba22573f8d62fff931aad00b4efef3d9c8c2008a7121d3ae6ec426ae08c79f6615fc074e4c336b7bf73734fbab1b7c484084b39062259ddc0bd53f1dfdc545a2746a07dbc1b28bb2bf0f4c42b243426be9b286204fa881f512eb89f35007eefa0ee857a6abddd75984f35e74b7b01e380d9917b3f570201d30b5e236d17e5d3c0ce3e80d19d4dd13c69154d555c2e4dacc47fec8d2478bd8e3c4d71b79d4c77c7f7e65795a01e04899fe3dfe72b4272e1276ac8c2ca09087eaea61d501fa981f6350b079ef85e35319e2cce0f5bd09d9db90d9ee17ff4c5d6e11ef09aad79ec3106aac3672bb339cdd67d55954c35050f8144103c6e1f9b21834c867a05bca5b68a7a64ea3990c36b20fd4a73a6c539cffcbd209095e505d54ea781c1d9b8db43933b14ba0ad2202a527089968dabeeef60c5cbe45e013a1d955c1ccf9cc66a69d606724ed83d082cc0d7a62fbb531766354a7a9bfd448695222fb81b5699162f04969f1ae48cb26728cc5705c9dfdb3e0599b680928197c6ce225b8e40b762a677451465fa4cb08f4ccb2c9fa41ec1f41ff1a185fbe5314ce1f50eb03f677829cdce41f1af6e2851df34692a0fabd71674864d1a5c461cd7ea0bec7757010ee2e1f5207c38dc2b99e0cfb222ab50c48609d94cd94b24c7323feb60d16dea30d53dee0df20e3d3ea9833c0cabbaedfe199b75e38e987530774756e4535b0b38cd7d46e07677f0424569aff2316fe93757940be5bf474da2d6e39f2a050b0bc5cdbf041939275af8d67cd7917af44016bf328ad3e88c5384eb9f82ab38de39ca33bfb0eb11be63ae68070ba3cfa1b1108f7b7a70cef27fe0ac5298366b8b37e73ad60f212724c4519ca5bb79c1eff8ddae4b71ecb43973c5215d8ac960963f7b2f4677a4681e7929be81439f8dc4dfc537d781712a4a0cec837627f4bfdacc8e23486cbb681cedf1116a035a57f59bb76c2431d51c9964dbac7bbcd0b04c31fff60760f2d7aac9328b9193ac8f9d11c1d60ee8819b89c121dd39ab2b18b1f2c12690f7a0d1fd680dacbac7cdecab786a9704c63091f746494f4c2b97246bea96235a8a97cfbe04b65cd6b64ef104f1043f6901b93deb5c109cf4bb946ecc54334733b5ab4e6cf39cb9e977a943f04975c4d74ef83c481473dffc609cdaafe1bd0b360fe0d59993ccd1c1680b7e721a50588618f62f0014706e702a769ed9af76b33068ba5577d5c0ea4f09469df7e1b08b021b47591ae4c5df8535986683a733c2be7b910b7fac50788a25f1279fcf568d5d1b4635f665ea3850f42aa736138c018d2c0ab10814236273b7e06d4619eebee9462939a121bbf01aa1cb3e60dbee9644fb56cc4ca9bc0bfa987bb85e0d7b6369c4bfc05272daf897281e4b81f5369a98ce8712e276551567aee28ecadf775d88eecea20ac56cd905fc5b432ec00cbf02d1c7fea71f187596d2c822741f1a64d05baa14f2472aba591a01ee28df3c0207745b63f09bea89f9c2c269004131180e492979a722e2c3711c0ae777b5bc692312e0497ecdd397b106ee244351316d4f7f88ca029b2bd877dfae811db4e651e6c963ac2b8f4779ec1562e0e378b5892f095ca04709db6f28ea623bf71cecf9634cec088ecea47ec32f48361b06ebbd6b1725471b15925473ab94cacdb3ea05f7ad61abec248287e2086d99c505730268a72149db830c0fc2d476460c98e4e47ba471fbd8c33ef518808af9d6c1218af1192f81bf2113e60770712daadc6ab20df761ff34bd8c2ed075291289a29154edbeebc5ee65a7500f280045a1323a61a82017a65b510287f7f4e216109d36e6e7d0c6fd5c3c8733b04b5b3e2da79350e8cf84c12f9f6e5a236e4f18b9f1afad4f06dc1ba55cb3959102bfeabeade5486ab0c39ff08414b8088f5bb1127a82f6b7f987eac6ab40e0312ae42b91e0c1497264d2559e1a82252b546b87d0b9ddffa64eb576dfbc7193c0af3f27fd329446e0b916121f78a9d676043b041c88a549b3e0333fcc713d1f3f1fcf8bdc7c3f3409c8b50ac9844d5eb211bf05d3b3d7426e8ceda31b452b3ec28739a3c440b3ab5679cb525a9fcb225854bd0f8d9438265edb20679d939f58857897012a46f471f703da83c031bc4eaca88735345a8312a8ba676b730dbc6c81aa7fdf68b185788210b38827ddd86f8e9005624a6ad826455dafba7e1d160c62063fb8b406a17d0a2b825330707a360016decfaecdf6ffbadc2bb53a04ad04fb5da57666a51f41fc2b957624ae1714f7bdc41004ced0d177dc75ba3cfa0fc8168b078f18aa9bf85159c0104bca71206e4b6ecccc7da7cfac71d3c3bb63de67b00aec78c14cc1be70e20c4b6ca41e786bd48e9c032cab714e0f6d54ce8320fbe3bd806fe5cd6a71c051afd649a02672002b9c47368a2061e6a40a7a27f246bfd67d2cae47fcef1d4e40568bd9d0e0e20690ac94a755a5fe02fcb5d22689ef395a101fa8c9f091fd6dd7604c9e485328cded3ba24213c8eb5bbe5f777772aa3f327a62b31100866207f72871bc2929c158b3191e59e56dbed43fc8d33e15245bbb223eb6316d82174f9441995e50d26970a6c09f5349515ce57685e95359bfd7b952e15e1c6d097cdeb0fd415e71a6b14a64ef8b312330ae6596e20b91917457e142a8b39da127cfa3a7145d3a8c0fd4dff8b9e0cebed8de129dc26e86bb68876e0044ada7939a454d4bf155376fefa12713ba399fd67c2fbdf6615e21c8830bd43566445645c2c5f051b9ca2db7c8f146d598a46afd3df13fdb076f62621fabf476ef662678a5e857ce9bef1199d9bef3da082d8a6759fb0ebbbcbb847881311c7a749ba1727baf6d7c3e421ebf348fad2cbf25c5ae178c366e8792f246d60622dc3973b4d8810ebf1cdfa9c953828f83fc9b5a343eaf521881c6d91b4a20410626ba085bf19578eb5f2b779765dd651fbb9c004786c2db114aab5df8ecd0d3e1607982f48ee79a8aba6f1b04e8dc659807b2710312f70d346f0af1f3f561612acb1d753ede129e4e626ba439de5e006c7cf5cd98e412dcac9dede56b1ccd53dbc9982fa37d2a591e2e20ade6c53bd73107d30a265324630e77b0eeded4ac463a65dcc2120e0237d9fdc79597600b583b46cea47824d52beaddd55fbd0c01b91479a90194271538a5212a01287c28848bd3360b24f10583c7837fbd2a2b9c9837c486db06f8129304c176cb273cf9ab29988cb455d5c01b11824d791b22847b29f9c74b88a6af28acb9bb57b7b7cfac9a1c325cf990960011194cdd405228f053d8aa2978304945549e52559d74826e52589d454bbece01ce7eb8828d4ac6b27f9710ba64fb3865916a95c268e44cee9b20e8ef1c933632d350c6c0dce5bcd255e2b9326fc2b78fd2268b9a95bde524555e4b277721d36fd35a289bb1970cf536e348010a4584520ca25fc7206258d7c18481b141f670b99862aac170d873713b2c3cb35cd776d71cc93a077eae90457d2f81fcaccd6487302f7586b492568f6e407118db14eb8516ac68abc174e82cc2465bed5b15e98cfab4fc52169e6fc2cda0b92d57b3456cb67ff5f8cbd7541415fdb14d2d3e317b88b74abf4c9148c9ad79c955992840576d469b22c0315a15aff27e314b996551d09bb7499add549a7bbed59f80fd41d43cc4264e6304711d82a14e065b61652c6ffdd00117037fa95645e4743d742a6a360001503ad06fa9a4711b02ca22908b594a79666d56a531f49ea320fde66686e703ebd3db1aaf65e6014991f5d08f03c15357990d99372f0b6b8b3dbc621e997c54208013e2c6a61d57e024339d445653d2dd4f2be4578e81b11e3a20548c545e6f28821735c53cb1ec610450257f71e3a813772c3c3fe16278884261d8702f63950bcb685f9f378287cd3c175d3eca0a47f2715496164a1194e0fa68128908c2a4579921761dace67300a545119ce2248a95a0d09fbffbadc7e7ff2a1081cf9b2b0fa5c218639ff4e6e2889e41d9456dd31ff8e711a28ebabffac1fc5b5811f88cfc1bf0db589e647994e5de9665e04a6740a5689a81595ee11ba23aade18f2eb8355ebe755fcf438540f2e6532dd9ebed35891d63d09c5091cce1d4b79142b35811f4f55ec2f192bb465e8e6097500732d85eff96b79ed08cf68fbf7f28a9958c4ac3ed3c451f02f10de2a6050a5308b034cc7982a37a736ac6817dd6c3983acf0402b7fa96c9e47a9d15e9a70e3e320c0c9caf03b218f26251c8e1bd4fb2115833d170d83d3d877b6c16a6d6db521ab3d566ad10791506819e78900ac1d17228bd5da90988a06f5ff001233468feba740f5f85aba399abd98413fa4829d8007b08a7c5365901d068b07bf8e841ec5b6d273fb886faaef1468b682fbb59fea3fc6264d32e721cc3151616f1b89bab6e6f5c775b658102750fed488189fb8b6b037bf04a2bda1e2f08924663c574d70781e6daea685161b07092c4705a9d1847bf556340ffec5e1fe04f6cf31182bcb53d8b8412619896a9add924d804794f50bc1def70c55868366e0348cd4719850e9dcaea3d55de24aad93b6cc63943ea236290b90add7742509b11ed84584bacf9b65f550fae59a1c22fc2602bc2583d76ee68781a29b431642dcc3d945159dcfc42ee725cab5e8543ea3951c11be18cb78cd389c29942b6b748288d326e7d42d203df6dddaf69047e6dda5c16cb492353228ec8a47f0816cde9fa1738d84641ae138c5b9dfeaa26c2876205787e10302a701312522718dc71124980abeb130e19ee128b33b51551448828044ef2c804ce312ed6b02ab9e452ea0a6e5b8a947b9978afdb8c0b8142a0852808bd74464426e5bf115a8085817b6b847e6c8ed15570ac6a311423ba9554b33122d443df75a52137330ec2baf8876fb9b501b0d41321daaf54291e285c8abfbe51fe42e25051b106deefe50034833f671954ca82ac2258be1a7eb9ebebbcb47376993dae0929cfb62aeccfdea5abffb8841cd9e0abba6fb49505813c7e4ebcb065abc84badd9324b623c97d39d30d3bd23b10275fbe5bf83473394ffb782908c3e3d8432bb6f27a9531d41c9da48fa05658a504dd57b02ebe04898069615ea70d3bd5919098563238f27efcf319892b37c88a8b0c1b2ab743719531add37f8fddaafdf648ac0247720eeaddbf5635943508ad707094ed7295c66b3adb8caa4eabf68a88c0f84d98cdfb539fcdefd66238110ca0180dbb165e24e00e8137c24d54ad3a4fd49da654741fa51712b7c881bf2cdc29d878b544b4a45a74d697016d171694348ba21062045d91deac01a03f399c6a6cc0a2cfcbccdaad2b26108ef3c1c2831898c68ad94db2ebef3ecff94d1b951295f8f9b39adeea25d1973319dd1514bb7792c869d93589e22077defb0229fec1e6448bf002cf36e96192bff8953dd83f8531905224b1ac0bb1fe37978e9699bc03eb15b243aeb1f6fbc4d308c9577e229d8452cf7ce6177e5673dec264ccd0a33781d6c4bd4a39a4423452d1eb5e9999aeb12777722c04d68669951a5a70ec957724716dad9511edd3429ed6298adba9564ed4c4aa3eaffe4e0cf76ad4887ad4d0ce12d787289be444bc1ff6c25fe872c12a8dfe3047ad038c1915ee5d3af3c4d4fb193317c213a8b04c6ba62b837b7f588e36e11d210d8aae3261683a170902e7100439659b5f84a506094dad00e707412787edacfd8a7cb41bf870389e386797b7e3d6f77ce17cd74dc3b3370ca96b46fbba13316370deefd004ea002e2322d409b7ce90942a40d2598296fd93fc065012efbda4b705c8d004dac41345653669cd8a2bb5d0e35b5b7f6d91d4d22a961444d440c2c945cdee5a881b7c513f8329fa3345d8c556de436823a66a38793c481ab9bcfc9ca65c18adcb3bd7f8f60ccc639becd1cb41dc5c9e349f18d9150d7f036c5f567052b3f70ab4e765234307fe465ce53733f8cdadc11a53faf1a3399b830d7ce0dd19af1dd4c3e3749a1ee90b966201debd0aad2a2871bb1032dae02c3ae5b2801be3d69c4d7266abf6ba6219428e8a0c127de1c91a325cb7be1928110664e68476147814e4075fb4e4858af97151fb5e5120ee1cc8d8c948d1e111314ca3e9ba3a4b77ffed793cf36970d7f7ab400beaed7b04a2e30cae656ca60c02a344d3e93cbfea0247576278dfec9a2b20e5672b5243456be6dadd1858cb0b91082cdeaf97d00b299f0a7fb6bc8a1ed8db3a850d1300e8cb2f7f1b01a3122a27d09a826c45862189ec969bc5975337b44d99910563f8107c98be4633b47171ee48c72f8b8ede05f8b3e277d549adc91d0c192b1ca18e3d92665b2f2c18a28498feb8c6573e94d01fdf83f2357735691bb1b709ed9c52d439cdcb8f45f06c4f52bbea2a9e22cabc37fcd8f0603756c7179cc0eb5164cf76b7cae5dac4c69f616fd42900ea49f96ced3989afa5d29eb1fab3fa3bec96fb16460adcc4264178455383d4e12da352966b03f8a0fa603f5f66420fcb871adb3b4bafbdd0908bbdfe01cb45809d20b708d5eaa07b448bdc53c8ff62fc2af74aaec22310e3b6dad687188f020f97ffe26ac045247718d69a7ec909240e6c4891cb09da1221072b91841993c6e4570c76197b510270ca7a1791f74a72f50350657f0b4cb9c9536f19a3ecd97a338db04660676395e17cedcd735482b58c8677f1d94b6819cbeb015953f2f3c9bfd210d601953585899a7ae198e9c12f01b1022f17c808fb1732087947d66c5c4ed4b77b3b685e0a684e17904614f88c0c35a9747e37db0032d8276506026984f8de2cb30b76205a94a8b94b7e58296a2deb72e7b130ccd5e636780b430769fa0d0d39bba2d6a69c4336df535303befccec798d66159f58246cfa58e75d3a0978d1df3663aaa70a19a9e6e494437e8366c265cdf27505be4f058ffc651232348c851beea83ab6b4243f7ecbf59c0ec0a0c4367f3d7ab4a8a4773712dcf9798016cde96e2332707bbe83cd160eb59e259adc0ecf75e55cea561c7ed538b78ff7504ee6e240d8506e10720c076fb8fec70e91e22109cc747dee0ce661804190c74a4fea437b81784869a9d6e2564ee15c3ab39f4f4fb22bf2d730dea5b0e1e12834be72a99a8376ee2259fa06cfd05ab30f138b556552e78a8328bbdc06f8f8fb10c3d15fcdd904ebebb814b399c9e30bc8eb7d9113cfa47680c172b5a83a471299fd6db86d0fc15a518f46ce5d0574597cc0d3eb14f556010e3d46efc4b4ab15053ec02968b551ea137770fa3999a4467fb076159698426c08d3fd02ae511c85ef9d6cbd23af8ef2b92602b6c279b33a104bc73e2f5afb0e906beeae71a15e61fbf4fa17812cbecd41a8ef410032c0a035ec7e44340e212e8cd81d18ee15ea5f3c17008c532be8078bf8d8ba575c0b7a34745e649cab0e98c42fbffcb9685e6138deee0e1a3952b2fd6e645c920968cbdbad7b7a70c67ce6e032bb3b252153259fbdc0797e566fc1600eda8ed00ea81b9685b3576171f015f0990454c33c728f19e458b6f77d648fb1ec6b468924cf8620b4c3139bc55095339a5e13ab775d92e55ae3790a17b0e4eca9488a10571f5fc688a883b4b8c681319de5da152933b4fcca812925824e188e0cfeeab8260fc9fc0342322f47aa45aff3c7834b107f9c31b6b01b8bd46a5f2bc6341e557524c96d141141f4f1b23058c4245ec4538bb6e7952c8b823582b76eb191ccca14bab93cd3d154c350c318628471ea6bbd0dc3d89e02ddb39dafe08449cef6b7b50e8a1be0854ca856a16239d8f6e36f2b2e50da4613b1335c0633c8039082dd59d9a7c62587ab407a4c8cd3b6f4efa8ef059f53063b3722d4d9e0484af68e118f5eb3bc9a16b4fd1c5109efe1a94be7ae6a969f521a01a487ec9f446a1410afb82201a9a918eea8af6423bb1a8350b29e4206a7ca3dfc8d5193f196eaeb4937e446ade50ff4270766efa0e0caa8e10d862c0691cc566650ff22ad930992f476ab5d309dc820df37686126a967c29de7c8eb017c98ded0e321355a8fe43b2380d9e1413005eaf967a9a774cb3ed70b03ab2c2f0d62b15bdfa2c18dbf1c3c3a2bf58afefafdf3f0227dbe6c352c89d72c8e3c9fc359501fd2fb5ecf192bb665b7814fd5eca023f15b3ae20281fd0d561d045860323ca8190732c85b2cb4d8d4ba1464b9da04c0162db53d8846a0b54aac58bf752b2693117b2b9fb93a2a106441edcf7cf90f618cc8280cdd85f5089ec666b6e5ac80fdf4186e7e5ee345744831114b7fe65fd509374bd5fa679b83f9e4e40a898c6909d11ba900ac8fd2b3ad2dd48b8f0bccc1cc42ff05f7e6fabeb9da7077c4a8531f87099242ed674c26be86d7fdfbc13143510f403a42b07ce77604f8de070b97902c99f8534881904f74ece445b8f7e61d4c8caa30278c5d2397fcb9a6c52b84c075754091c1038b797073796cbe393c4a6cef2d27616e823f004d61edccab2ecbb298a3ee5b561eb6cc2b31635365762157ea969def63da7b11f4c71122e31c8526811941e5998723c64ce5e1534b3e5a4354d3cc07847707bc2daaf3f6b95866ca81dae54e6a8e4e84a4ad105509bee0c78790d06691e0652a244dd5fbb1fae53d2eac7e71fd42e128ecd38938dbcf909e55a19d18802a858fa150adfca85bee1aa100db5b4c4c4c5b8fa3e764386ae3b81b036fd286e3b99d4dc0da45b829f27a21f1ff7645f5f0c6db51887538f4072186f6d84ad9ffbb7c5f4634d90ad23ea4091188a2875c63fcab9b357dc892aaaf705407f324ba5cf26ea0b332dea642212da144dcf932f83683a5d3846229e69320d1300e5544b6d906fcfaedbb4e73e53e82b8b8d9270641cea130ed98fa008b7ce01a8f46f1f57442a5d077d16e08be49e93e47c96d17b52e5d8d9923a43b9c1d3ce9d1c0465bf5fa76d1122f546a947df53bbcdaa4b1b05cbc92338f6cd5f7303fe137b1532afb770d64ef3c7854525d73800050f4c7cee1c950c51ba6e02147a918988bc141bd9392db278cabad206b16dcdb54316d6b209497e0892f1f37ecb8aae3e4d9c628845b436e557534014d35f157992a1ee7711bea309f1ebe0485c37561d4d1385b555a1cb50a41ee2e49c4e74b8bd54853b1f5eb5f48b390a2c8e722ea51b1b0fd810b58b8275e202103e7d87161a79268579ab424a940c243f308af52aa178643eb27c8e721ee5353e36fa0afd36e16ca79ea0d60a202f25a6cc7f4016a6d2b8d0f76b688cdf1744cf85495f611dd09c092e15a42c31ea5f7d487fa3561c05cb1f6c5a56e4fc917770c6afc035253fdd9f584e2cf205242a6d3357e2cb3f10a8d7baee251ce84c02215dfead3f590db019c3d51546a76d62ac2eed9a1793ef5fcc38036dc71c89bc07fe4c7c75fd33f0f4b5e6ef17ab09adeceb6026ea3aed64dc110665d75be681b68e26380a3fd50f57531116b0b5696e47fd843483bd5c8fcc1d2df0b0fc40741ad1df9a76170138e21b9da515bd1370afd432fab1b651bf06ed08416b09b15d1db5d5b6f1793bb7e4c8fca7b27b36636e9a0899d47a15991e5c9a7d2f91d24db13ebb5a1df8ed24186ac795406ee6dc1bed197ba1533f46a996245cd245ddf8098beab3a9dbec5c1eecec7bdc7834aec5945eb8c01dda369ca17ac6f0e59d5f597e93bf6e243841ac6d4e96f41db5afd905b15f59802674b9d76cba267b2bd033cb03bc3ff2cea68183b000cc63bfdba81cd4e05d7354b540988093f30c6a986ed0d5c036c059f87574cdb8af95ab7130c931e4c973bceb7565bc4482dc4c4eeb5b95e9e2f9177216514f855bb590200e1c667981a2e00d644722f883a2499bb0959b0a8e824ff58f31ffcc02c028ce7445e81a126e05b1848706e1b22c8fe52eb9b7a1d0c872322b13e9469b6ca3e88a0323fbc80b341e49433aa21565efad88f8a28495d0fa4332d97df3bb3863ceb7a890eb817877da442f10436abb59cfe440029a76ca996bf50b2fedfdb9d430d632f55f3dc480fe07daea39b103be9faffb7c811d4fb28b780a09b094cd20e12b6c39b4fa91783a1aa623e0a070b014e9e77e64446e0031ee237d612c5d0c47fd46dcbed74aa4b4276d6c286e755f7ba78ef085331d2f4018cba545980276c2a0fc399d1e080b22ed646f74362e37693433ce398601315430fc4326754883cd046aeef5584b277308046283fd0e6dae3e1a2a5ced4618b364e22558de8654201446f72e1f2623c8f2321f53bf8c2b8a99dbc3f76d9f97f9ca1e26b8a38f52446fe0484218b301d36b6e6f824690f291da505b103e92f0ae72e12595ab967cc5e86896711fbfabd7ab3e209c74e82dcc03cf1873865d5a86128ae2f5b88b75f522c3e7f400cb10ffb2a312f90726a340e9d222a3a2a93604195c061b3870837aa1a2f1e9847d37297c144cd80b8a56fa3b057eee0ec0982c290e400623dff665f945926e150d06b791af1736f7fb99085b3d7464f053da563d556bff73b24324a73034179d4d8afab558dc115bdc80c71b593b369b1ce491cbaac48571fc49040011ba76e04a35c2063f7ec978a930f2c8caa577b243c10f2575ecefaee5a89086e869389ed6203936e7f53132df362bffaa4e9742a1dd16a91138d57e4af7c7970bf62d4fe192b30476f01040000000000000400000000000000000000000000000000000000000000004000000000000000030000000000000004000000000000000400000000000000010000000400000000000000,0x04040000000000008292bcfe4616e6d304acb58c9d625c9ad96879157797b1bf93e3abd9a3c7c361de06c9b75d6635a1dfa87dd145ecaaec0ba835c3d7595c967a4eed62ef96689188715882fd3e35596d5a9e1e0f362d8702dca35cc3d875a0ae8e32f3bcf6eb6d0374bcf5ebe6db75a398de1ea6f93beb444dcf0b98ee00e22ce00c38c3def474470fead4284a92e60938711cc602e95bdc92f9af4b74fbb230364f501334c5c41ab0fb43b365b730212ce69cd554f528a69da8defd7436873a0152573b4710661e3f4554e5124d09e623b8d3b6e62cb58745eaad1ba75ae56ff3889a6826a1483b1d25e2770e89be529f93961336401217268a676fe9e060b341eaaf9af313560ca06bbc2d26df559178ea198659c72f561afe9ac51ed7b9ab085c9e603e874117d292b6ce3cc52d00c5df80e176db1ebec121720d75d2c648fd1aac0c5f2c4c7cf0ae3a8e8a0b4914513bde09c02a9b2dc1e2e2cfbf677e752822efa77fa48798c1e1b94fa22a6b459b8b5eef24bf94e35e3852ad1da613cf5f34d9934fa7fc4e2f74c472d0fe14c2409d59a17bd3c5263fb8258b57bbf1335da07d717908566459545d87b2a4e39d766fda6b119b143c693c3897d7278b1e39dd60fecc62651b013b7ea94ae202842e300ac81a6f979d44d2bc56ce92363804414f9651b473045053d459ebac5a7ff0e1f3a49b157b91d7402f75cbb08a169b2941d540a60d21d3ab6db4896b54829b6c32e6203e5c9d68fd1dc60482c20013135ab29e7167e3afee8c05d239b9a41c83778525dbb84111d43290d50ead143469ec9de967c1f4c8363c979436f0ee0d7d32805aa7a6a392406418d51f28ee2e483baf19140e18893fe6f2ffeb112ff0515547f82c4e62b777a0a71ca0f48408a201348986509b873c2724704a0ec0c59bfed7a0755765596cbea8598915c582c87ceaf9f11b217945609ba5c652ba96ba3d3fad8fb2c6131ab77fff40a413a69a7e59fc69b4d4b301eefb0ac11cef25cb9432e62010ee214457d6b4cdafcec402655b9b68c5d145f4ee0327a128a60bc7c8cdcdb09b49ca9b2669de9ae06203cf2250c04aa7031bb9c09284bbdfad1e0887d297e454078bd34f8ad9b0a58678a90cb83be775115bfa5b6fc29df87f8742e443c69d585ff5b96feaac551483539f3f0cebdc7e76d8eb2973cbd3c05d80b9a1bc7f85a910ee045cce1d2aedc01baae9aeee8809706faec0e626c33de0e5b4a217c2de96043495bbcbe18af9da4fbd3bf6c3238ce5749cbeabad76486d6d10a2109926d8d6e389bea6d0f51bf1af018f30a0c477ba881344f73841bfcf6f3f05e41506992a5912eabf788ddba533e583b9f0ca4bbf7920fde19e72c52137009590c7b0ca6a80fb3065ee3422ceb0ea8cb9282c5bdb25ebdef63ea558b7dda834f903338cce82021cd0517064e3176935c0cbc48bb225d98f471c4da2eeae2bf904f20012ba81636f30f8d44505197872af471c4124ac842ffa3ae33592183ba650f1080c0901a5d6762d8313df745e9bce01abf46a63fb6e485f36c07ff7fb5bdd23e092dc1ccc447d81644b8844620996283607f4de28477373dd7082bd24de4bf4b4ec6c198a9e8cec76d043e03a01c6e79d033d200ca6ce76c91f9fc95195f7dd31edf7abd6a286505188ca6a6fd7ba17906df90e837dc2ae5da4e7af7388f2282aec3f4a067bd4f9a7b8fdf5207940503371b464d2e51a21c4105d95f43cfdfb1ba4632909093251a6764abc83b42582de203bbf82eb625e3dde4d7d490d2c841767f964425d266b87b69d88aa04a459713cf264dd260bd87d8283cbb83b67b706914b8e590cf41591ddfe260073febb50d24ecf23084a610621becaf63d6dcfc95bb619be87991eb8afa139a74c43b712579288988f9c2ed3f87e3392f5fc53a2ab0db980f743b668592eb28b6c256ea52f6eb4950c0066c8ce4827c9eac9589c9e305343c50dcf86ea6419433616504ddf98cd6dc6ca9a06901bdd8e9ff0f7866a8955a3448448559766e27b0e0b67bab95407847c0d74822291d054aa5a2b365e24e5511cefc5910e990d718253745a761b93d4b40c405d0a9f9a301078f891a675e08025173ff82a3195648649e0830f6fc0982fb56b43ea75e6bc6b46b303c31002ff8206c855288826f375797a28d0d05c6ee47bd32e2c1924a6b0ed062cb90aca7abb6e47020d72d4d8f2bed0d156baba50617975877d63d3da7d9e04c3024577c6fa562778c50768ca6494a99495d36db67b6de884ec49bc01c00c90692e7394d12f788ca9e8c9bcca3072bdfcd13d0b1fd6e287846364fabec63ef345cfc0ae9951814091a49dd853d32cd8feb0884e18991b340ce42de621e8cd5f5791a61b8d18f7ba24029d4c5d09c852ee98ffc7e3144a4a5c826284db617068c0a6914e2bb92b0980385fe0f767fccf2b7112d3ac6d14868a9a9965ab9e8cbbca6794419a2f2318d8be185f93aebb0d20098f7e7b5669c082d757d074d499c8232f3d543ff66e372a7f8d89658bd27adc797d0f6eba50873c8ce8a76f970bf9d0390f66c0246692683b8409b354320e3107e93ed8a708aa6d0358a1843e406640d9347912520dc435b4390e66eeb38cb60e27a18b1172dabf2e0ce1f62b16757a64d2ccc215744701a45c045aec2b34840f1f9be21fad5464661ddf16f48fdd1c801030a9e5e8c2174dd508610015671e9f2983e82d81d642df27309079e667ae71843a6e54adc173925bd2cd9b911c4601520b459f6dd5f7b48041e894b19cde0a5edda99f124483776ed4000626cbeba5650a86de634f56928ead020cb74ee70a3f0ce533ef85a983a0bea6aadf6070f9b48ac4f54a0b5b86fdea8b0e788dec551e374653d95f70bbe5ed4c27e40ea597ca41e25d2da3d3c96f406cfe6295b4632644047e5004e6ca0eb7235684759e3e1531068e8eb1f95afa41a4063e9b2b5e91db74d352300d02d703c9762c30121f30a4a980c323de7255d30c4dfedfdf23a531a7857a7fa4a948a11da665e05de13fbedc3c5db4ac14b8967cd7512a54b765791d25aa1f85c2fde389f10afa994be7fa1187b84bb69b063b3024fcfa51bb1e05bcc1d07c193876c69c8288ed74839c9f59f2a27bc17d61f06b99cc70eff31e83ac34558f471870539533f905833edebbe03afde2e5a8980a44f4284379d3ab8ecf60dc427919ce43efdb1bcfe983e9b39f1dbe400bb72099c2b5211bef98d8ae9dcfbe15192ca78543d6520b7ea85ea5c84fd9a32087bcdbb816ef39b10c3df9ba687bf0494169c136939b23d93e75a9d41a7a2f77bbf1d4b4f9d863d63c6adc6d96cef98834cdfc3b0efd0b2b483a565646970758efe651d5c19b64f9ab2831dba09a0d681646d07cf953ae054a5ac3c7cf307335435e5b75155815e4c2edae57ea7da244ff1fffc7d1e220e9529a92fd4b9a673810c41f17b2f3abfa4b61c0e858c289937c9389a4ffe43f3d5f8c5d8e367467badb4e3fffc613d267c8ab6ab0e260cf459cae7ad8b18c6257413076dce28cb2e2352dc1a16d03077496ea176838e6ed4f40b51f81dce41f27e81f060507d01854ef7d83e604711cae445ab21b65b73e814569ccda804f3ea76ec3a66235d095e6b4eaf453ace3afeef39bdb4dec092c76e2d79e7491ed413b53b7667003095528c8a18ff5e18feb9fee6bdd255bd23dcf8b2dce93cf6e0aa495d813fe7207fa5a15f57aee3d030b59972cf05b3effc1cb4e5c2485d2740af4caef1d827059ac83a99f6dc16a9652e4815b75ce37625668016c0752efbba383b1949963dd3b1d9514847c2c8d36e502a7b122c214a8a943bc5c839a4dfb3fefd4fb15eca87c44db92f55e4870c5da137cb06efe286fd4906f9a9e84791607527b7dbc9c6a8d5b0084196972650008ade9acdcb44c1b022b757e157bca8ca0d4257f1437d9e1b2436517b36f0d30cbba43e63db0b640194f56a5af1709af9cce6276b52ac272e23613ba7ac4b40f388ca6e0b6f3ffa166eea36be7460f054155365c8f9f3e6acda791f65bddc12acedaa47b9d71267cf063cd43c5d7f395134209e20b1d91d57f353f7d1a5a105509235e2b6644d3b0211a32f05e4353f27f64c41eeee35a4553044aab9f599fb63dbcdd8a826940788a868fe1da8c92c822e1ae44983556a918264e4263504383ce730b348ba8fe12acca0339c1df576e5240c7f7dbf9976c8bea9c71f915563315624f4a83132d7fb04b937a6c737459b86b6b803b9f12a046889b3e7de9aec87c6fd888c93dae9ac880b10ea947d1236b1a216f59d229cf453396a5d43b3e875a27fa08f55edd61968fec53a4ccce74bdc426cbdfd6bd4d8f1f60cc11873f57b78c24f62cde6132291e7fd63e0e1405514e0d6a2b4cda89b2804596b081036247dd1fae1501276e155d62c39bb18a851d7885893e143954620a965d424e79b39f1826d7526b78f31dda0162dfd010ed2ca15e4a5c93c8ddbe96deede7e675074dbacbb1e202249b6029684c3f339d5525ce6072d71dd467a88e0dea064b820e1506fcc7f91118a78780482335da069a9b287b73077a1baa9358a3672ae41cdd28b71bd1bcc38f8fbf1b16a04bd3eb172b5b7decbd298b000f234f1708bbfc9eb6ab3c945700bdf3627f5731dd5084362a41ae2c74eff677cdb37cf02d074d824574cab3b15c54d51245ecf42c874c9c169ad65dcc33509095b3b13db2359f585371568d8390da739057fe895a8a9c2f65e11b01f4d5aaa9af2d42b31f176cda081bab185e0f64595868b2d48cf789b487759593fc17c0cba5817d638aa73605ae2bee747e77bd1b639ab8bc24942201ea4dceab33ed921be30ec856854154bad8e20eb861ac626e894982e33de00f2050160cb1734facc81b5ea8c846f5dcdff1c2e1d70ed18a5e223ec79f8fa4a3810145b4e3088b6b849e1e67c7cc4ba67c7b68946eef24e8861f8b57534d5d9f269ea2db25fda3f78d1c66bddc3f4678ecda14e37f50779eddc55f522cd4bf772c43be75757981b5096d543662d61bdaba5d7cecad444fc6c8e771f7833d57e8f53c4a8f08f20b9e902780e4d75ffc7655a4eeecafa4a72e3bf81bf2a9c401f83ae4f11d05fa7f43626fc88d0476fe75603ac27ee908de81390e5dd91f0e296cf8ee92050e64c7155bab9dd16346314f69f585df95a02e0a7f6748081441337dabda07ce33f7cfa4c020aa2864491f40dadf57cece8436c61e5d12997c46d3e703a82e5716fab30378666ecb4e573a604db9492bb3da8b96d5d3fd6b3b637aa25425639e66abbfdf30e644daf45603394d1505f4f0a3f865fc888d1e70147018aca98e10d7936bf426ab60852a95d44b7ad44bac2f95096d3e3895bc9098b5ad840cad66cc606f1137726527fded7b783bdef7f67d73b7e107fb8294dad4a173e9425626b7b7aca2d264dac4253a9cd1bf552e22e5d35c649b58216fffd2c27c37be349d4deb222d1fc9c28726f034788b0ecda733b6be923b630e5dd68aa3bb54fdbaf1d0eeddcc97beeb10d35a0a24bc976c463bdafcb5cc88a428dff50f400dc0d00285d698123438c9a82d5b51903f1e3f093faa1915a166373a197a468dfac05742e11d7bbeea4b2bf01ae650f6133b17622c0ec79715dcbbbec7c30563e30411f00882234b1482213c1410f5327f1a6046bca648ec48faddf68338a42d0fe1d5c71354fc27114f3699399804c50a8cba519494cd187060cb7f7f446561eb431c937c784442fc32db3c4db22201d9c23e6ab6d56ad5ffb30627a4a9651d95b7977cf780dc16756667e66c80ef37f48b1af5c88564f6d12de56d7d695b743b98e4bcc94d655a8485e04debd6f7d322831fdfd24a9132a8c8a04f78b8d865dd0af4996ca0c9011cc5001620bda080c7b5652bf39e7b0a78fb41c6f9ddb1561c7f077b35ad5be33634a90d8888b685e3f9c7346edba908f2536350c19e19f30204e899285ffc248421c7099afafb0d6c91e514dd7265f60371e629756a514895b703b3457532270b164b358be6a8570d21e62d58d1147d25119c113c0182c89a7c24a772f7cac0939bfe30e165dc6e72872e97110cf18bcc293a0bf0fe0c16a7464124cf63f7e869ed81303bca8fe792606ef7d85700e0b86f1c6f81f332b568689ef7bd73cbc15b07d0b0a1816912f6ed7c18b3fd5493e724c4b13e04764417a14db6087ecb3ed3ffa86c725846e4a1b7ac6d6874927fb2e2adbf64f0f0ddd856ce350807e788332c39e90a82924ea28a6f04752b031e83e6c531089ac5a89094a1cd478b4f96c2e226ac0283368595321098bfc9e41247470c62a1cbe2cd34c17542a5ae1e5cbf490c794fed435164074c36c1c77071437e92ee5480a8bd732e6fba3c1ea07abe14bf4389b464ec9c505c30d853249b47b99e0d69a55c58162927e6f424c527722de2a2115167b732a1d915932ab4e2c5b726f0e8afdcd59715902f7ab200041df97eb0601b2148cdf284f7248d0da99d1c6541a2cde0fc38104701129cf65b2dd5f7808c49d17eb61fd6e1a2b08e3469ff9f7c9ca10c4689ee618d8c6a3d98c277dafcd3e0488af8216334265efea905d587331914cc43992dfc8acfa63414ef0e0081a95c3f43a7e4687f6ebfa335dd7272f9ee1b9cec2b4b5622896416d5fbca87fed7af7722620dac1fa704d983d77ae59a401ff3134ca5fe31b8ce5f98a508db36f5d5c1fbd96cfd8822b5fa35142aa84f52704395e43e2b352162ff120f08e1eacff22777bf0692f5f9b1bb4711405657ff003a5ff89ff9a172bb0de9c4be7e2ba1cbcc14f71e1fbafc7912494ccd886319e694a574310cd9bca462cd3f5c0b30fcb071b14b8244f92fad9a62f30dc0dd30e2a2263316f148c2be10f047b0888f150884f8edb42e704b5e38e0c9f398bac50d4079a234aa084f8e3e61e8c84fcf85ce36aed510c999fb11de98ce88ef4eb40aebc48f6da15fbb7348c87481e66bda4f82f9af2e7fde69df308f585cafc05e32861851eb3e3b94d01aabb53fbb1c18088599112755b0a7f8a157347394dfbf27ff761114f518bc91131c61cade1404abf930a4b9faf3a92226f36db7bef8ba9c5d915aefac2c77464743079d782d524e482ad1e30149490a44aea5c6acedcc52d33a0581b2e79143281764ea742db020531b8cad1056f8ce975db52c0ee574a8d880c51e6e29a4b4ac69b46988a00c4712d91da33f251914e20f706dd0b773491f4fce12abb9fe7837de824febd3b366eb1b99883822b0b50f59cf7e7a2c782818a2641329e74bbbd9e72c2ad4c58b5b1be456ef8f8a49cc2ba94a56f66e0c9c41de1cce81c724f152de4cb8a6feefd6d2c1c5f4c7036815b9c485faa2e91d007cf15dc565d287b66032452a64ac8e5443f914fa054b9e0ac477a9d2ec5e0292b298407c0a38d7a4b76dcde88cb62c68096764aeb65e45db0bfc6773d5081f745c119751c7fb5c70357f2bdfa41e680a94b345c41ed056eb70156f7bdcfbec5473b4b7a643d5c358a25480a5a900c6d7e6e451c9345ed328dda3ce9616a649d21df707fca15e63e2347d8942832290927d10721d4ab632532b55646cb29f99cb22eab0687cbb85c96a8f55909f53bac1b52b423ce1de68f4b727ee24cf8919564ae8878668064caa5da843166910a68d11c21c8944d54548f00d0d537c5040e70a6e9ea802e061fcb1df52c0e5eb28af25fc4c0714af020a720a59ff5e444d3bf6ff4d177dd8a56dc558f7c4467a96b73aaa4736ff1479f30b45e0c962c9abe7b6bf5118b02ff6c8d30c252857d7d8348871390d9b29cd37ff75dfeca32eb9c61c8bd1477f6638a2d7158b2b234564ceb72c4609a0973acaea9d364ae6e92aece4ee89b06c776777705a5dc3be140294f44c8900dce589fa41f113060742557daa9201d495a990364813513f62b9aba6ac1eadd4e7d01dfdb845b6b38283e9200b57f9120a9d21b737dcac168d65a8f18e9661246b5f23adbd745b57dc098fb8e07f0c1ba7436f1f4b4418f1fe8e01be0a99147de12168c4c98d6e467d80a72bce70152183366ce6ca28627be85e00fac1c37d20f17ec6127041ac70b28c116f16802a7832bc9e6a0a07b1de88dfe8690297ea4e5f345b811a174ca1ddcebb083cc9d68ed7f389cb139269664c1c20caa1e3a112df02519c3df00d1f69fd25d012694c2072b3dbb7d66002c118815886204b8cc6777aaaaaec29488c29289d2f42b3835a2bf7254b9cc698e8be28d59c8c9365cce45d174ffe30044af3a1e1879fe185fcfea31cac3b3bd3aec5c71aad1d203589a8432cee300463eea8e8ed673999ddf0425176786db802573449d32fb4e71838b8769b8e789251f84d991841176b30ca5b4698db1337e0a99e916e82645bcc98b5eb1cde0e303592c6dcb6f25932eca89f24b201aaaea66732c214b1d2500137d2e6eacc0e0c9486fe776dc8c53c45fefd5ec33085fb6c0e5004e40a1c87993090ead4601c892814531778f54f6528d24c08100931b98eab93af51b0ff6a61998535ca977acb556544f1f61ee46bf1ad2a490ce0a6f0643af3bf24b9eafca81f7659d6932c730aa8ccbbc89ef24149e40f755fc7a1ff2156dae8a526530cdd02e3edd2ddcb3aff9813f0e2587f0cf517bb3c00bf33d643ddcb8dc239b3c4a2219dd93e3c8c570d82e39037040b3d321b354366dffdc2f7fe0b3a1316679d443c42e211295c4dd123e419e422d053dda26520242d4b1d345b4c35f091c4d4e207caffe596ffa55d529d4c2c9e75bc093f3157fe6de7ba42c70d73deba84596c8cafa07f9b5730edc4656259b32c789fe04fcd6b7f509c2ed4d634f4bd94019e90e5a2ba98bed2c2bcb6eb4b112dd41e79b8ca9da630f9a4c82eacbf94fccae6020151b9b62b26f64d0b55b72ce9b9446aaa885381c0399f85bcb60d5acb2fcc6f9b7ce2ad45935bbad37933918e93215fec8653ae74564e168cf87349a48ffa01352460d24490011a84a452bfda2c2e2e29232ed46b186dc26d6709adaa3a557101bf4e5a0d3971a10da9074feb065504f0c2dfb8bbf1f62fc27e55646a8944adff6d6a66e131ae39bf87b633884a918eff54fac6ea72a240bf1e9d1b6f573a75626c977696637fd639a03bed7b75d7ed52f69fc7c0bf751b9b0cb2e06d40ef07475075314ee51d8a2478fdd694a144bd62b624a4c7598a8b0fece3eb3c47125da795202e617884be6f5ee49c512a5d474616469695c1b1bf5cb08762e64ac89fc9fce6e5506822e5539cb844e5f2b6b810f9eb4affcc52a4e60854a2216e5189454a90ddc70087d16f0dcc518c8d077d0d1178d16e32da7ff46e3346ccb0bea4269f64728e8abc32ab6d65e0bcd9d115d2d7a743d4ec184639922963731dfb94a2b7318533a76a494e9032c252d55a3b794cc0a6e5da8ab28e551954b8ff0bbc8f4a452c8847e609f2fd4e6bac19e7bb02ac66fa4522656eb921acae88ea6d37c8385a84985cc3e5d3bbdca1f559bb123308f7f056ff69110650c52969a50cda5956fb2e7d7839d8b06b165edfcf97a50cb7ce5160cddaba78da98bc2e989c34b71f3e505c867d9450fe7bdd2d2232efba81926dd653995d0c6f3ec11c03cc07680fe321e13e7a7853e8f5c8b5d2d274a708a56ede6a31522291ce4433b79a01ec7509a48a848ce2fe0978a52a0b113bf4141a62984bc642725eb4a2cc26a555b618c11701cc12bb21267d1b5e27087975e3d89d22059ab73ead004e6087d3c45883a27f92ebc532b21cc6bb5dad2d9fd5eaa4dea3e80e110d614075027c9e8af0b12e60992e31c39f2582f26c79e967751214d3c062291546e62c021a1d0bd8e40a25be490be195eae00f1835cb681a88b402304fb09d152cc34ee6966c5d0a53f65f3433af574db10e7b6f53071908fb381a6929ae18f3fcf8edbbadb7e1ebfe85fc6ea1ff57ae503e48def22b0d9fe9c06cad1f2e0c124a0e248c7fbefd567fe6eee2fb1257504735f184dfaf0895a95644517c4ca25e3a26c5f9047f06054f8643197c1e4573d28d820297fa51dcaccaa6bb68ce56ac022b3b188b6ee5e87b11401da5dd5aadce0ef68efab480cc5153adba83457e47173be0242ee371ae9191ffc94df5cbec512d2d33dc2e6c0a971bbd0f17c7bf405aa414338ccbfaa034c4121ef0745232d7ed6c939ac50ba26930b2ac1afb61b300c27b4b35b42264ecd51d3be4bb54c27c89f707765b9ac68284ffc040c01e3b93a2d8192ef0b510b974faf9edf674e36a2c566f8c1a4e786844faf6a3b631b2a350375ecbee0d8a47085cfb7cf45a9a7519733d50735b96a88ab7207bcabc4ad74018dec4457b1136d67a15a3ee2bce8c0decbb338e12f5d26f7dd07d7a364d91f1c09e80242280f8da209a4ccdbac1ce41c8f8090358d17a10e1067b0aae6b47890249f9c1851a1c249b3893024ceafebac5f07dca7de2c10ede9df3c7215485919efaaafb0078db015db94ed9599961fcba464110de327b55596a45b37bde8f2ad7667ad6057e1c9b4421c592315bcc0a61c534d5a2de65138c80e4bb1330c2bdc43118f97b3f6acebcd754994942f0ca1ff52bda2c38785dcfb1302f68bf2ce059ba09a66aaa0c0f677450561543aecb3b18e7241959b2561ab61e0a4df29e0cfe18b40311afa2fd81150691b58d7bb1b02bca58a59f2c10198c052fe093f2bfedfa9fe87145b14a91604c99a6a3fb7631255ae4e477f6bc8579a164011306082bc9148ed78668a4b4c6f0190efb49fdd0a2569a0bf8ccede9582687a48ec50133985f6751105bc62e48bc079a1a1efd7bf08cbd716f7adfe3efeadd132eb76d908cee9a153ee5421b91189ec9a12e7096d4f8a06d9c3b4dfeaf6f1aa5e286aa2db89921ac17ac772b4cbcd9d48ea9e27428405bc638dbe6ad86baccd4c62fbe7a626fc83ff715fa7251abf567677a8d9b79e18a931314edf4f9a401aa949d91eb563272f38abc504b560acceb0f74da252cb3ef5ecee6fadf49937a92ba29477397c7bb4f278e102a8fa991b1af3e42c95c55c806648038f6408aed49026d83a9812f36ba094b81d26e41a26204b15cf46c9fb72788e5666c3e65fe20918e98fc61877ee3ce9f0f480386b8532dd5bb154cb46980073b47f98a0b4b9bd62d552cbf42109fd3d6a6e1963cacc8e1f78932b499af40f48d22348953a8eea5069b471b49225892f3d282ae998b44fcb7592acb2c8a927112cb22360826f99a4f29ab9cb5a2fdebe582a03aa0bd0b1cec0b650fbaf41f73c0f7cbff9adc2a11dddb5adb316b3db73a99daf5558dd9dc63d894b50736fba5321b858832c1c7e4c28dba92e756d57a1ebd5a1006860895f75fedeb725930c86a1783143e91bf7befd1c0fbb4ca9677fd38af29ff42aeca4d53158402c646ade84f092e4bfdabcd7b18e2b6f385a21e551f651cddea495296212d07748af50e860aae86a0f617f91d746036ec37729a23b76806cc2dcb6af11fa0c499fc4176d463748b957c47b894006bc6efb96697778e13a81b5bbb58a04607524a853ea6bbdbf2552f28b983a2c8189c2007ea8cf5cbd42095a0097aa48120d8c9c7b9f50286c4340c775b7fd8fc8b0a83acd030d8bbe7ffcd80750af67b3bca1d0db3860d1d01040000000000000400000000000000000000000000000000000000000000004000000000000000030000000000000004000000000000000400000000000000010000000400000000000000,0x04040000000000005f7a437a891b05aad47ca68422541fdacd491732ab111630f5e106cfb36e861261520070efc9aa808a8b2a2ffa41af00e563d35cf8d413b0803cb7a97ec622cdcf814f819d42edebae9d8099fa74df68eb2534a4e3138a9fcce4ddada8e5acee0640d3dab0b791e703e0b70d7c1f8f29d81751c7707188920d1e65c91781524d53e34e76e044475f1039031f158e88163a2669cbaf956596ecf29a2a8d26835010273984574833ffc0555ad435a4fe3d423f2cd684ac88883fb3da2986bd4155043f175863c5731779674cff903ada344242846ed6028600b764491a26156c19f6e29652a7b776b345b72b44f88dceadc26ba0df0f7938798efefb245cf5690fc84346233a0e687472d19bb57cd5f08fbe41cce0f03ca0abc0f6b375200a363ca20a228f3b022af5b822178791a89fa62aeaf9107a51b241b4ef1e7528bf5616911a495548b2c135c76d7b89ddf41021d431ae970c6e82361c438d2ff1bd7a162699ea790a50377aaa73468d40dd55df1c295c129b8e08f09dd847ed082c24614837f71bf7b9613a561718e358691635ec6985b5d44f82aab3cbdd6853c79e67419c3da998d7dd824e0325041743f4bfaf8e29a6ddd060bacfad060758371e53df39736b037a6f9b4437f757f068ee1dccf1c2752b44c77077d4116d09ee019a03a8b0d363a85f598dfafa316bc01c73ecb9fbe1da5be72ad6c23f71759e588595ecf4b00a3966338454e07e63cf946541a797f3b6dd7e432a51613bc834d5b75ca35cd4c36b5ea6b3be5f82c5c156944f6d572d846ee8865f6532c92a24b38930f66ed6e0c066abcba2398cfa98c67e02d767ea618487b9d253138c70eab7177bcd5b5d96cdf56b2057861526a2011203ae9aa9221284ea9f5b0a6f43e5d6f774b64fc6093c2ab173b070a5fd90211e2afdac91329c9ff9dfc085c6ab061c7e60d37f39b46aa530d28daff03dc04a5da6eb5361b2b14b7a2719d5e2f2ef25e8aa000e612f060de7267227b038f04619da12fd51fb0451e835086eb1ca02809ccfd62972271799d853c1248011609922a1a09ffa3d0653942c73816562440d1d4c76c0e710ad0d940e36cfdf436515efb2b68089a7fdc07543d496720f44d4966430184c4c76ca79b2c8089a7e1825ba250128bf2b0022c8d4cda4f9a345f8264192e652e183c83f08b48e6d940575fe2ac2f92c8610169acd10ff7f01c37fd636b9de802efa9364cfc62ffacbbb075872815f1f10386b68ab91cbca7824e0805d86822bbe1c61c188e914616bd51e2e952dbcc77431e47add3d235bbfe92ee5d8362f80f0625a6111d38d23326711c18236cd3cc8c0654c2f7f7ea2ef4eec271a59ff4c04717a2246a3ac70dea453570c334097fb15d929c3160c97a61ee43c98192c20b3e279cb3ea09723a8e4dbc79d945c71c233e87442d001aa0cd50b1ce48ce1805e1e73c8f9b9e744698b4af0ca031631de407678df5aa58c8f212c75429c0f1d6fdbb5275bbf7917283889d71c2346d7bbed8bda851a75a6d0901c6e8bad66769de2ae4e0a58f657c40c5c14d3f52a90806f758a1468e3ba6bfa082b4c336327d8e93ea53c4008fc50df54cae64d57acda7d4283fb450197e05e2e523e8d89797bbabf8b40f62d5aa6c996579602e324b9357affba16051de85a910383fb99bf8b3427537beb659a4be2219d75c71dc0392ed10ba78c337089b9a15a71b720b6b3630ac0a0b2c1d8be3771dfa528575fdbb15c7458e26e7ab41ce628f9c3a097ba56c98dcab31d2575fdcfee455d6501872226000c65b28f8b845bf15517607e0fbde52d9b34f8682ff5206f6048a5acdda77c28286d8776d26e021864761e4527ecfbc22cfac149b946b92ce6360c48acb3e7fc3817879e52a12047d1a69c181333240a9e929b483ba91dd7c5533a41e1d7f538cc1a40123234aafa5d7ab54a15d15a4b25c1d15c8c699164c6bb7367af51829a4d4c72b1d6e892717c55f4fad0df698fd3a8d5790b7ce3bff2dbc0e5692f7dbaec8248a2defc255718ec28d0c641b5b4abf23509d8e38077538f7e5c4fbb0f0ba3eb4b589e480680bd8c50d94937e9d64ea735386e373cd7e2781a0d6b975daf672cebafa164da88de6799fb77e6d78b89f64b3b429424883a47d8a9892b534d61761ed5c8ea100f88425cf82d98bb7f20fa4a467ffca090c5898062ac47b3bdc2a86558763e71fd79aab956d2588a3127669047048fcdce7df0c7e59bd41626d988c39ba2760ce7ba00820de27adb96bf0709d8522fd6067f23520a12ae8e6cc63a8b834f67be7def595a780db75d7764a7fdbc1ddfba28e04ed063395dc31238f58dab800da71df9d43332f4442cb90ce4ab973b1cb12ed0ef3969e8ba49ff36f6e9cb395d06d2667621575826dae3463dc64f930e985899795fe6a878aebd732e8bf36319c852ba2a296168b97966f5f17d8a20d4eb56d701b13e26d8faa7ede01d6c6d3812eb3fb6ce0a785399d636fcfd8da6f935736312e1d906aa8641a243302b5eb56abd8c6bdfb56084bc611b74b9b06c5b8107af6b82485c13bdceb4b7a2455247fdb8856c443d1d397ac1dd6dc29fbd08c60db2cdf1e6168ab7f80ac34dc1fe744f973e87747e3097eb30e8925194f2b6476d65d0fdaac9281846b4436f0fca474bf5c032b45ef2542f5dc563d49696dc22d04714152e89b526f715aed80a3bc8ee106481aa98d74357da5989f92c62e6b43e64cf9cf465125e9002948ff4c8ad761deefdeb3ddccc49902b63610e153e40495be90d17ccc163a310ef498d2fe1afdf78d36afbf62efe4898785ae71131525fee3b56e69f370934ae8a7fd3eeed47c92219df0ccc80b9c6659b2e4fa9190a8c236b98b496aff5365de5c3f3508643f3e27d7d47c5700788df33e539a6761f7e3f37ceadda38602ad2df92fac88973e5679294535f4957c6323655a0067e914cf07f9cf334222590481ac8f30640d2124bee3fe4dd42ea651dfc36c5573e8f4b708e6c540156747d62f932c98fab7acabc55c022b8b653baa81bda8f899e69f5793fc26f18d4171d428fcb1bceffeae489f84e420c24c2dcbe292f6ba178a21dfef15828756f21be5dcbdb031576999c619f42b01ddffeba1d78d3fac0b6a65f7f08f06255625fc1197f949ec998d33470c3a87d5e811baf4f4ad5a596c2bcf2ffac9ecaf7c6ae9d222c3835c81c994f655f99a8c0c244ded80ab9f7d373d410966b03e047474b83f3b327c2eb1349d18cd0960967b923571548fffdfd5dc39ff63453992114c6be02b9c6da212cd772f3965c9cb33feec8dd9d692ff9b4c8a7790582b271d8bed0c14bfb46e0d0448d4f902d7626d8fb7a215671812a328e35e8a2e4e4299b21ad098335b32bcc5d134a5bfec14cd3485ff2c98efb6294e26017cc335e7fc62090db9bc9086d895b136878f7abfc7c6cba4a12d6f9a77411459a3f62cb1badfe2bcf018c200cf7b93b38a62dfc82ce150734e1bc85f4b7320d714b5e14faa5453dafc83c9220be3e7a71a6a5190f37974e3b42a1eed3a8e126c0dc539d621cc495dd164d37e092947abecf296201ab3fc0b3f33dc91bd3529dab5a8aaf04db1275444572ab7f1b612c160605d9c52a098b9d0ddd704de2af1e4c86e5b069e7b14ce4e639ce350a6308b532b8c2689d395feaf55ab4a480f03cae847b0895438ce895128acc0e54d55de198f8391ded6f40a3df0293d41ca073617403756f21204a0b302b36fc97fc04602aa9c0cbf1d2be9a4e631d1b0f60491bce6dd3a63ff093a37b6730f94890d5e56ad6da2d27584bb1e8f8914230fd31f6a8bea441271ed0d430065985c79583f12c08c4b7a67f544a08a2cb37e99999a95da73e1dfcdb29a914d487aaf70b367df1b3ea03524ace726623ea9814debfcd84dc80903b3b37ddd1e96e8fc6f3a3dc26940b9730e4ea8d0627f062787b1ac970ddc7b3d3c34c0fb3c8f284417105fa4d4e6fb4dd949141543fd03ad1c0475ee8a48a3b90ead0709b11ed6df49bf1cb28a5c355d4ea647521ebbb1693ef582af169b10361b0a81be35b83d42eb804d2576dee44f4be902f60be3cd9bd76923ffb8494f2927f9665e1c5a26b9d4f158404e71da77e092202e46cd1399af619949d3ff58d9df335eb4eb549aca8187b4700f03d078f0b50cd3f8c9acfdfbaaa49b447aab59721a940f58c6c4029804586eaad5c1f6bc50f62289dda3bdc2c79ecbfcc15d00ff7118353017c8b15ac239acaed44ebbb422cbfddea3c5c8d9c64fcb81be74bf867ed2833c7f52837c195e03ea5b4209b463fdf48acec3ce6f84cc0c51aa994fbc3cfb54b3173c13f875315fe03cb512310cdd9ba415e38bbe04f64b56baa5ee00216953889240564301e3171a2ba415f146a2fe78b4ee670820444d28689945d075d5e2923ef88917ed8995cdbc3f0364bda3051cbad393b5cf66e891b2fdec612713e3f90c56085c746730261b2f29d905ba740e9ac22c13a916c2a4245907af3cd42d2684fe9c9274aac3d055c455622809f1005a1af6110fbb65a5871e8816252e53d622c833e8720637ff778c515c06b9cde03387f779726ca101a82f3a76362e7b0fd69c396774d04b86ae035026ef02f439389e88c96e55aa515729b44ab0e73657db3228c3186ec2343853ad33a1eba90e5d54ed5b322d8f7b1d479c5aebb4813405a4248828aa8c40c450d8890b5ffeca5a0f2a7ddfa89c1f5cb437309fc1dff91ace3104238d8fb07aeec4f0d0c06b9c9b642d78b2049ae230dc8777d17253b66a3a1bf8d55e446dd5d645158cf1484fe1861b6207463bb25b8762e94d5e77cd5378eadc3b1d9c433f5e39a799e6d176ee8d021456233f6497cc39762be348567d9b883c88b91dcc797e23d59e3164cbad61b93e98e5fde6e8f3d49a4f0c7d5023d6d69292838761d3bb58300acda9d841b4624707c7538f8ede846a2e6c233c4ec3221b4624d2a2a5e521877adfebd3042ed508fa50711dda080a885235eaea2fab8fbc63ee7e871b6615329655315b7f26e9a84ee1f4b018d71f804154e3e1c4c7b9ca3832de0fe23fac13c773d44adae1c930042f45e658a3e5e7df361bee097af8d226ca9f700f929b28fb378b9dc0c040d389f4a68b2a03be714d5990254a00875ebf43ce1b983af70dfb20b6438a5ca4c371255046bbf6735289fc3e457a89a83b6027f8bc58bb7e0ddeb7dc154548e512770c31d3c09cbd228db0a1d1f1acaec4bf4c4ba8df6eb7e5d00fd553354b20ed3314b91acd97865ff5023ebae4d5bf337699c3dde7c237b347e2bbecf832e1592f8d3ebef6bdcd7780ca4341456c24d7df16554cbfbe27400970a014174c95853131d4efcb5581cbb1297ea3eabbe863ebaf33b5d4b76dfb6afd631ddb017ca13d2923d584c8882508bf4aa463f8ba960716497af2b264328a71934e6615ebb6e108897dabe3bd820c22a812a22cf9cfa66a635ef00dfad3f0d2d532cc87f3b6905085c4f9f88d9346a3612d0f33a088fbdf88b882e681cc46cff354aa8cf09f4c1397ae91eb4e91e59572a410101599c827f0dd9cc6b29dcd1a12d2571326b257480e29fdf6027237aca8598a86eb3e4b5f621aa24bf811ba902aeb6e959356fef3b9395e673bc3f3903fd9c418e7c4e1b247b9eb83a7483ad66fbf51d3a4a0ad624d397fe68d1f795b1fb530418e5c42a88a68b455e65b161055bca9329b71a209e590679c6db264b4d791f5c4285397340d5e62548d7b6c59afdc524dfd88369ea8916933bb9ba382847f170293fd09543c5fd92f63ce085f3fb638fa25303b00d0d544955530b4777cd07bba2912140819916a90bf1b07fe6d57a068f818ea49a2ba5ad1a6b1e54c6e18180ba56561c4091c89c6719ba1b874c2f5a26c676ce4fca87945f162b141907ff13b30d1244d7dd3ba5123bd89e02ac4b573b2645e5c1420b2431829d7422fcc5a63f7d1f113eb1ce76752fe0d4a05e5cee9a92b3ca221c20c6cf91a189878301ac497b71bcc6cf48f3687905b61bed341c12e223147ba07d0d1deec4cd834546e887c32fed6afbaa7bbc0cc34ee9c006bbbb992f57ff552547cce1cc2dfab9daff385029de8675b0c40e7f3c5fbfe0441bd6862e7bd6a09bae9b4e5a1a4545f369de4245e698af23d26165842a78ee6dd4a9f81959a037e942334749537dac869fa6da3f09d03d1c01c07afce70a45ce2ab752e20c8669a6f8935e9fceab68ff36bde4cbf31c86e48f8ac418c81c7cd38902a80ffe5bba64eacfdf5545cf91b65d9e33aa022d10dd933a9960c9ad105c2474739a1e7a1e688312fb4f96db47947ad07de91e747578313b77a58f62fff3b836879a08a945839da7bee4606da34235675eab466a34418262d54aed432bcd9f0d00058fae1b343c17339839aef515c286bf1d2d2aa82dcb2f25aa2f8e68bb2cd737285e4ef1b3d0a6c47cb2533adc537b3b0cc0a0fd8d710eecb2b2f4aae701f300fc17ac60d2a4ce62e8aba5e629c0ea30df85d6c42bd06e46d259b2a65d8b168c77557368642eb95bad0e5aeda1c53354fc2070dcd02a58f6063911a5daa9e6eaeb5d0186cbea43e5f6770054f7b9699ccb96cd406c6d7a675f9b99d4fbecbd4689d0e068c133343d1dae72fc50c95d05b8efff76da1e6c9c3d3f489a7a853b68cad719761526e8c0c8cb8eb3336b3fed02cbce9f8a4b2ddfc6315007060f417f4f541fe21a99d92124a7aed840c4815f793f325d5fa4d7a32ea2c0c7e1dc8cb25c5ea046bf8e718b9a5132af8ea5f02a3e79e3ac2a9ebe44fa29eb4998db39440834bcea6d4f3aef005013b0174b08c146497fb1da7ccd7cb41199af965e51bf04b18223dddc587827b883ae3883fcd9ae589c311275af0d8faee1d87e091e2e2c174efa0559212f4b614fe58eec6dd223137659fa90b625b12224f2056d1c3afe7482a20dde4e16ec1ed50efe7faf498eb3abe7f4beaf49a73731ec1847a46f7b53b044542bb03c977f26fb3f22557d4f0ee8f06b6098d4ddc8a072bda7c44cf8b13effec6ea9a932a64842a24019b182b1f54561637424cb999d1af8bfd4daf6d6a08ee5003b704aebc4260a159d4451a35248fa5c9ef80f33b2a2c93cd93923c348c5fddce676fbb35b7f0f543107a103117a28acea14c7083633482657c1a09a73a7cbd3812f294931eb8053c6adb27db7309dc4c21f1297e8f788b84152e2ebf5f3d42a1350fa2484f347d2dddd1fdbd81b22920ab2b1bac41cb6194c2643c10e51616df8955dc8f01f3f6b009544dd4b5e82d734b3017fd77f5eb73925201613b638a0c1cae0f2f1d33e8416340f3f98125108001f4a9575ffe8134634bc8381a43d40fc43a94c41ed77968244c4077c379289f9b09136c4e8ac9fddd2b675a3a18b61d52e391426b5388fb5e26af8adaf2c8062a378b7a36ca02c50cd2a56dc4b38f5a8772cff44589bef1c0bf34497bd7eed58d5f7ea08f64f9565ee230e10ef57a3c044bb460a81ae3fdd3b84ed264e4b31bcddb7e574387b288e0c1a621d8d1e712f22bf446ab39a9ac0369e901ecea0498709336b3829d52752e2dabdafcac25aae1c8133f59f9c28cde811870ad13d7e33617a25dc0085d69080a6fa098b5c277d4caac1225fbff90e2015a6ae10c8f137b87cb32ae4f46e96160bf36393bb64973c9be2c3b1ec5ad4426cc23870f000f6a6f0da1375535139d0d3cf29e6e447a6191b76620761d25422995cdf0ae03ff08863ab5ab5cef501cba779421fa7fe67f21e689eab4013a069627f842f97cedc0e57bad81c619c67ba904776af289bb2033b812bf3a01ab7c7a881fa6d956e3456b925721744994ab2b8907de49f275e6637c744a9e00b0dcbea10366f07e8151919482dee8b31e17850203f7100aeb0510c6ee1b62ce1d2a6cc1020b9215cf0d0761062da066751d006d3a6656cb9d27602fee18703039879d216b30d4e9a2673f219657e4cef52196b4591e09008d87d61d880d12e55a48a1fe237047febc735b38ff9210741b1069644b9ea0e44989f8aeaa5adc5d6b678db0f53a4111c1f27a3d49299ae7e7e3b4f2b953832aa0594db7df7ec2f75a94078a9374bea21fd6181c8412ebde9c27328646afd96bb7581c09096f236805ffd0e3311ec819c49da5f233d38dc0d44c847791c405512fe39e0bf53a91ef25ee2a9751a5616e53fd107e96a62c2e35ef4f8b762a0be45d34b52118b7a03b8b735c19e906d4aa90948bcd5780f025e10892d550fb4ad36c3790ed66734771bf311148ccf22aa65bc3a9c249e18b41d3224351816ac562a2d617ffc0f6a1af28762db35043c8e8f80421ee0d3c3b2619f377bd17ce7bfbbaa35e574b9945ed451e80bec76854558064991f23b39a3b3a50954ac5cc82cc2cb12ccc2d7d8e7f66d0bbb867efaaab47e9d7da4cf6cd40d525a516e78930fdf45dcbdbc1fd1851b8dd596a6c110158f5fa4e4ec4888c1a894b9792683e9c7a29483bcbcb515e7ff0d06caf9dc43c8b9fbcd7e5e6ac29df1476c34aa92baf86e157c254402c6b50730a665f249b3ab647e8651bf7b4f5c69071bb399b4b216ee82b2aa2c626dd8f734e3fc249a29a16de33f0867106e838cb3eacfa44b3012c00da1a0cc6403a25388ff79eff7ead88f46be869ea43a9cd11e6d8baeed748519ddab9d4cc9a3231628fe750f28cc6b9d10d584e77bcffc34d42d11f234eb725bd7420fe3ae07785f59b7d26d92e44ca02bf2f9dfa24fb68043b987f16ac4294fd7b6dc5fce66a7f30b0aeb2cc3007a7caed89569fff128dd4d89c62d4e13fbc483bd41e5f79d784dcbdeb2db7158588304d5a34fee29659c845491eacb9f8864602c2f18d2e787bf812d145b0ef02aa2fc239fc7b918a9709d49aa5f5b3d3ea24fa96cc7b253c9c1052d60389d88891db294966667de7caf28430bbfb6e1731c756a97096819c878699faaee9646c534df663be8d1b9ad73d5f945eb8db3628ab7327e9adba9520a2609d52f30e4702a57829bf9a9a306da6646dfb2e79dd90f501eea50184a33da0149b27f9c60a755ff05463d2816db35c1801eb30d8a4677dec2dcda3e2af9ceddf71bb93d28f46b61c24f9835b95079223a85e4c38dccebb4792c5c04f84d43c248353a7a85f91e8ad92cc62a87953d0dd3102f96b713fff786edefa1a2bf9ad472fcd203afc1c0cb3fc1d3e2753297608c306f3cdc416f6a4f831749886a84408af5f2883ed743a07cd9b573b76588b61b33c9d2ea85addde869661f400851422833582195977bf8b1d2a4ba20d31fbb00e779091cdc058e5ea4ea64e340eebc66d3efa1509775f09883cf24b50a3db5f9a32b8bfbba0e2cb147c1d0b7f50fc1936135548c29d228d3fe1209ba0c52cefdbcb23745ca9c530c3d9e37a49c2677f2eb6f17bd7bf1f64f66fce5086f7db207a8d11951e208f95f544966d7e9af280c063e0b9f8bceaa027fd6dff96123bec168d1c793952e8f448261e073721c640e6830391804fe7fd13d10e3c85bfb34dcf16b0bc2ae7df5becd3725136184c3d8dc329a091d25ee93aede564d4ba5595e3bd58a521153f136f3290f4ffa8a31bc4596cb1c90682efe33a2c0b4c3a073e2362a609c9dc554df6b5533e12b4b5a59ceab2e297b931326e97703cda2c730015e5a74215009ff76a97a2fd7da2e83d5428705d2ba0b43d724029058438f3e260cd66e01c175a3f4d5aea64c179eb72de3528cfe11a728cd8ebb41c5a9dbe899dd17367770673242d91df47731a6a41896ba1795a146f52d60284518def78bd70797910d09111d8e2207478585c9dede2e9827112882f862d173ef1e05f72854bea10d347e65ad6ce1ac5f1c9469979dac8f8d3a1d7165063ec171a1fcf714955350d1c879277949350b4cd5d0e97f1d001a59497ca125969f590be5333e4c6807bc2d79a3c69866e76a9c2c078de3327624956f705904bcc9fd05dbfb59f9a35dc6cdce95b77cffad7b329ef56eec04211f29d7381507c8cc632724720f2d99bfc7ef08dd3eca88411b2d43f349194fce360008432f1622a6cf38f3e886013061ddf77cdf7b8a2cd69cf4810292255ea81e89ad458f1363cbf0f17f484d28811ffd47d641bc94dee8cab9056e77213e3c8fa1eec1ca4cbe05af7216b5417b874e30720deacfd0677d13e0d39a078789394f9ec0ede895daed37ecab6ad73494c977c520f6bba893cd7e40dcf741df10e8aae1286f56e7aee3dc77144ab3f106c48621063e70e89e19a58434a868e1be6d4cae593e5d5857acaf11a04e444f1e4b79225b63b060429c033494e377e581c286ae19543c6e0fcec3c5e72694ce3f4610beb336398d72ea3d47e922b29c8602be8874de8f0c4204951bd95fb5e298c4eee86cbd7b9db6a9a34d09313be908dc8fc9672613d7ba1e1f3487a07ae69f42e362b2ada8dd723dcb8a072d5efee90b5fcfd2f297432c6517406b85341577d396175f2d0ffda99df5f5ad8f2793becbf909800a0f5277075be65b5bd6c02966fd31f725005d9a2dbc7ee6592534d2b4a188c21ad951a7869704c362128a5bdbe9cae72951287405d7b64143df9b9f37ba99dbef6bfbe8743e825dc2e3e6be4bbdc57a282edc59b16766af7b1f31f2326b7934d6681fc65ea0ff0c8092707cb58209917f5d20ad5a3cf7dca701d8ee4689b1eee50322f10cad10e4044dec710db4f191d24989134c24fbb6b05ac8bf75641fe11393e5c040262bfebc1b90e391355c33904b6a109b39732321bea5a08e321e6dad95a27e38a8fb94ad8b59594c8848ace43a63ab63f77cce59ea3e62207c254e866d2a638171cfdb1e8ba24270e5458deceecad888f20e38025136aece370af71658305d91c6c9064d64a63a368410f913a8e20d0212c665ec577522fe401ec7336bad89dfe939fb20d0ab2f644d3751afafddeac5134d7231e3de5059701cdbeff034321e8269bd5dbec5cb7ecc1aeb15c8b81e8a23690a1a49a7f04554fc69b3fbbdb8c1499cd70f8e43f78363b1cd0f1cf6a618b394ddcc91e469623bc64d6cd7a5900d01f252a5d83a4cfbc9fc829dd2de982189ea3095fed3cb95b96f7f1ae10293d216f49025c192f10341a5b8d8234ca8d5b228cf4979578bfbe0ea577cad86b64a0f5988ce963fd181dc53a84bb4b1e3730135e951ea924ea4bc4eb5379355e7d3d7df8042435a1c25625a7b6f92ca151953f402bc7d4b2e7b2dd3055930daaba0ee4b13edaea6ebaf8e6178bd7f20ad1f389c7a23415d567f9e8e01434e9a5688fc62f79dd412c527788580d41e9bda4aaeece8f72a441e829292c5bd4e3a8190a4d496943282a51ea35611b5a4abd4547bb417f5d234390a2100e8396980df436803e43f1258a70c25e18a2b168f86bd217a9ec126ae4a3e1ce50de101a7f9458f45e3a168e415eb8f93d30bc67125c1b4f8f57540f2a756cf380aded5f17b9f8cf4b831c094007806b024e85bd52675dd814dbe5441618b5b0480e82563dc24fb6c66f453eec201914110149e2e80f49fa7d655b9df2f8dbd94260ee7cde91d3f0b3e28f6ee1c53c92ecd0c443b9b868473ad2414f1174e0eb5d52acdc71678501fd60f61a7a6dd65b23d550c36a6859153938c7fa4cbe25501040000000000000400000000000000000000000000000000000000000000004000000000000000030000000000000004000000000000000400000000000000010000000400000000000000,0x0404000000000000e53084c0cabc171dfc351ceee943fccecaa63372f3b26be32067ad8021bd09003456127a0678ad1e7d01084bf7719764a930a8520ffa5197f1628162531175fd1796f4e6eb9f85a5fb007bdb1c2889032385526a6d1d3582bec13940f0f7aa11eeb8ad7fa490a3044bc7667b0cd021eb392c3621959e218804b3d422dfa95396e6851893ffde89fd9f2d93d09a7f61b52c6b8381be3c6adab314b9aba5197f5e4231397d52e515c0ec83c3241eae6f9b95a1f8a4c9b40f67854092fbd8dbd74e97613c062634c148efffa26322242d67d11d3e0c87969166617803e7bec314be37cca10e88e33d8b9685dac319dd53fe0f9f088f282a6ebd05a34a69fa343b211c1dabefdfd2498b5fc26cd29ecd4647fba3e9c3e28e9653ab7c1e25521b31da1df0be6d15602171a4a3ad729d22080a0e38c47581670e367071233ec39bd8d6bccc890027cc6643f3aa7c5850c2d75f51e973169777c35f4d7b6d5927d11fe4f4d3a0ae0a8b97320b902ea3f82ebe52c31f4ad1449120bd05d58cbba07b4e7b5ad632b30f174ae8ebd1fb4c8828928af295632b1680b5de39025e38c3a62573a8ace31873109d83b7047901d3ee898296c78469b2fc00a50048112ce98b919156acfa6d19a3c6595defafffe5dd34b400d9fde9ba570dd8bebf42c1847d47d0aa52e0a319ba79db029a21764d5a1bbdf5012d7c128ea0e9c1f25b3a14f65738fb227c645883b02846427d5347e4fa6542308061fe92cbca7c53bbbf63db5cd5080fb72f67d60f0e579dfbe76fec55891cfa054b4d0634aa810d6c0f2a27a8eeace5561b8b64ed301471d6c125e89b6a59fc8e149aa3cd9672cbe62cb7176ad01d64b31f7a8f4c99c52b1b5c67cbba109d89ccbe15ab587a6406fdf51cd769dece97d3fa2d16107cb0a9b50e122e68ac255ea6e92999ff477815c5dbcec663a7ef8f6de5c8c85bcab8939698a380f2c7171bc5383ec127bbb14a9e2285b0211532834cd7f1aa43c1f37230f96e85b4e7ac1812fad2479b746efaf9544f61f337b33b224b9913be32468e6f3e5c38369c78d76c60e3fe1c929cec65f9b1bb28f018640f8b997fccf0b09fbcc66edfa5ff9c321ff36fbd8f4b2013bb0d5821d9a40fb7cac3d6e7420d4dee882b832f4a506668994cae10d9cd5c1ca1e6952ed85d5093913dcd2aab9942878ae1d91797d064a726956ca2600988c57b00c5e4ef82c63671ee65111334e05a01bf28a450c527db10bdd1d6f3cfcae84d1961e4cbec15f81d67d71014962d27c1a8b62dad1db205d475b8d21f30a2ee0702d3276d4091190c59c91c11999f65376b3b32786fec3fd6d0a7b2b9c4f10cfbc6bc8f46ca833463d5e97be2b9d5cf4bb310e25602388b6a02942924d9cafb9d9105e9971a508713da89e571d12a86de269e5536b58c656e2eb473130540642a7cc745be50242450df7326e342da69b6ffeacbb66e17430d22972a5ca5b534cd8c0ee27efec03103cff63d54f049860d8e812f6a3a74ebcd8f66ca3331b21157a53c010d39a2ef35ec975ab733f8348e57d333e479fa0d012fb67e68ea09d132612a270f3c50a573b01fd6a3aeef5edef26c5f8759778fd3a452f4c8f1a17ddeb39dd214bc03ab4d10bd1066b9569b2ae119a5cccfd7e31d1c76d3b4b8374adc4f8e51ad87cc001bfc960d48432f85d807e828d24808925888e7e0c021b37dd1b6cd5adaef71b2a4292cbd0af9babf005100f1cc39ec99e828508626e82584ff17585e7cf209ce0ae8bac03432958c55740c6054bfb57a3a855f132efddc91f9920cd527a8e431b2a7a14e0154f0dce9f538a5a5aa85efabe17ecefe1a409f7f2269b60d9b56e234e4f629d78d8b93f71042201ade1669fff0555d2de4a5a4bd03173d41708258b8f3fb35cae55db6b13473c4b6d8c08f75e618fc4a3c5169ef2a78a2b8f947701b26322e49c4dfc4ae924a1280d0d282d6416e6f4c992b9399706c0a729eb8ae380a8976501cf26037c968bfa8b3c9c35bdf630c5d49ea4cc1ace8930c6a383a9119ed8760ea868194e03c96e688e1d68f38c76fbf7361161aef3a6b95df038f5f8004321786c5580b6f9c6a6e1c3aad430528413f8f47250de57007357e6d5bd60e5ab0a58da64272bb683f3d411277d2dee2aba1ba078b2d403ea4007bebfccf43f980386ee29be73b6132686d609dd05fdab919b895c3cf5d7dd1f9e3a6e8fb83f56d0809baa3e9237545e0affd9bd75dff97dfc3bd3103d9616913a82e481c90467edb704f4e310b601c8de1f9a58b51130cd5c1520863080f4daa643b84c2bc5b2374d9837445adb11a25095265045e67f3e1e4f1161607bb80d42b2ea7e5852a0e6951f3f38bdb7d9103e74076b4df47cd8faa0c2e11dcf6121e2d2148868689130d5c6fa988f99e45ad0030966a020297afdc54724cd4df7f3dec4348aa0b3fdcba74fd4562d2ce605c72d6e299b7030b949afe55e954ddfe94c51472945ec3b13067a333f3cadd3242fc9f68d8611a4ff53047ce94cf8dd4849816c0e617de685cd2c2b9aa2aa0b9f06c87a2407ca46eee29b2a952c886e5a119e3b134862dc0d4f50713250008d89a31613c3ff8d8e221010e3c2ebcfd133d1e2c2790a2c75d54058545be36df9961965da04a700f9d601d944ff83cc9df7667ccb6f0691ad9aa5fa54a17eb634908f35b65c346185172cfea439687164da2c3c7bdc91d2134754607252d496b0d260ea1150cdd66086f2f50879d97e44b69b7825d4987c9acd79997563ccd2815eeac6be967f0a516bb74dca8cd52530bb2b9687b5f74f9e4f272ef66a65a22c9b22f0db544b991e799c2bf4ffb169a00beaf70cc915aadf36953f7b2d8b7bf687000976f6e5b739aca4def755b201e0e8f6b426f927c4f8794e4223c1432ca34302cad06f767a23f867a03788f6ba1368db209100faddc5fe9b2de9c2e3ff90684451750887d98f8cd0400640d217faf0af76788936fc05b5f61760eba9bd256e0b5de49833adcc881cd92bbdd53a559883353a5234aff92e53f9b33f0d6cc6b7956a5fd17ee227b7602a521322d4144475ddaea36298be98db14bf1ec9533480fe175eec813796c50d29e3aa086f47e744162b900ff2ebb19225d469f968d11342f920863116463083fa68ee51f8c97246e1d8b48d42859df48544b2eb6dcba18d6957b261ca586e33fa708abcb3088d5f75b0adbafe513f7d1f774ee944153d7982795fbbbf066eb55f018ca7c81c243b3e9592052c2732ca8ab33f36b88b7e364da6e9187bc39cc95ff538e4798ecc3b8965fd94fb24cc2dd4ef65c7f4b51801da68be7be7eb22f692a2818f6de9b7b502a53058ed925c0bd38e06ae8afcc3dc148037419c00c7bb851d5a9f24d3e28f6293311535f18a915258b53b8da298c159c24374c9a0cfd0eb5ee0cfb63c690c875e6500cc8f641d6dcdfe3df0038bcd78c3c349f762e47bb4ffea16537205102ce9b2715b0309b952047b73d112a7050bffc714307d66a270ade63a43458105ad3ee5c832d91c46ca8fe6c0059a0df116f2d99ccb8010c7e9d13a0edae6cd76bb4b94f9f1b550c863ace183c55c67ea2151ce12a422a9ef06ef3d401a402f359d4bd8e7a6f620e0106b670862901d2ed18fe9599970e556a3e893b59a7d25d0454a5e067a3b124bab93cd4d9b07d097708ce70c7fad137deaf35b6c72238bec65d98b56727fe14095fd52adf3d17241c3de4d46eeaada6e300081d387617d8a851ea4a314d155109d44eccfeab685dfd39fdaed924e942ff41aafda17e7d7f6569a2be3b8c6595270edb426fe65fb7f379348d4e998c69b11f51e32ec2299cd6366d46fec03a6eb8d8c664f13c6636f1c465a8c2143d9de1c09b12d58a60e84fe852f257f6cbaebb7d980c0c9d26c639ab73beaf3243a5e1df9ba29b4e5215547dbd4cabfcda0122f412e19662326da6597f7a04f6a4a3e40e5cc8ddfcc0bf1324d1e90d1b73b54e8e15fa64b5c1534609cf3b93a04db719a5632367c8c6309fa48cbc7adf9e27415b91dcff6c7bb193afc554127a17430eb41bd209eb4fad3c39d9cb50aeae9756729ccbb958000aa64be466612eea8dcd20110d9c0f65b4a6be25f7b96a7fc9bd7a6be24bb8251091b3def4d66a758bf8a7e069b02e2eb91973144a45778536f1b262abdbcb7f9555ed33bbaf70a337825a75a0d85a51915e7e53278c22c9b06dfb13bb947285f59de493f66d2ac271b57523583ada8f9909b0844a739ae7994e6d122443f10b2d91fe0c3f06ec7cc71fd9d8410c48bd653cb31ce8d1e69cef2ce71fed076adb925f49b2d91b867a014ca41480e71b9ec78a6e833413e1bf728bd4669263d34f57d7802c7bdeef80a169029480a991c86515e707a4a9c073afaa129124693132c835291382edcd019ef888db4de286ef7ebcf792b84dc55b3ee66875a65513388f486a4190408755a9124fa96a0bb6004d74a1a5ac9f4f780f7f03840871356c0d62edc655d9ab8c0f1e175c4841cd5cef62199fa2d78e4a8b1893ef0167f7804691af33eb1459fafbc26da0ab66835a3187d64b9952f9208cdd2a41e2e79ebc897262e68e1918e00d6a417a219e20323141c17fb9f146c283d49f99b6ad3ea888c09d6f1d61d75a76bb207a202a7c89d094e61e34ef0e2655eefd044a61b0a4dfa290958b6cfb97af670c959918268f67f5cb37285122c4509dfd85b84167c1b1cef9305fbc2f7762b9f2f8b3ca74df82e49fb4b350ad6415c445b0547a07053a29365b8ee14165bc4f63f8008e1b6d9ebb217d06229688c14d4bb4dccf82611181feb1436cedb8ab58dd44ffbdf76a4e6088842e1920a94e1d90efdc0a7a51cb89fd0e2c4c5db4e4eec099dbaa6dd6b4fdbe3a365f025fc205126e1dab0c815debd11f92c38880603f93d659bbed49f48bd8cc839929a60321d50bf4311ad8efce79dd0f49a454168809c3774785e74904dbe6a2ca5f16ccf56fb7d56492b8a30be7cc7dfc0de94f100194591b850b2dd5179dcf9f139bd4395d1a30c66cae637a6fd5a2f9944adece686f57100c46c97de8a7239fd2a1a5cd399a3e7d180fa9a6eead4af064fde1b098613efbc85edbe820cf50e9c82374f2e9868b851c40a07df3ddc424a34a0b8427f7ea0685ee400013347ecaa88fccebd04842b82192c03c94e49eaf82630d05f682964a51c9f12b9debad66bc126f70a7e72a2cec0029154e403727a1ec3da10ee2d12d0688d11ac9d2f8b7aa5ae8f82d6e7dc3f79d26ddbc4ae4fb147388654d3d24d7c9750385d1fed69beadf6427ef9424825cded2e01578634b7ac9a49cb422665f56e46a380756b62b213f5297fb8c0ab67adcc3364baa29a80ff7e69038d5059304e2b815989e213abd6b92aab0c5983029b0277754e32a930f85e5fb9d7c7ffc95dde922b8d59690fa3af87152033478b0a16289a00172849ec9d9515f95213b4492c2ebeb90387c23d55c724b388087b079e33461576bd9662b2294ac59070a71e56a805b85cdfd22b726de81a9f36846ed8bbd614c09a3fd35afe467e876d2041c5a6c0198fba9370c1629570aec02bd222753d6ef9b9b3eeacb9ea8e7b92ac45da29c8fb35e7209de22ddd23dd60ac321f02b4cd7146fae7a6353cbd16988be5c613b2183aa5b03e5b43e9bd969068eb0c7742654f3d7c4c33e9a008fee344a33d454be46ee86b062b862ce68b420d4056e855a3d490050c5cc04072f0b92f055a10b2cb813935247f026ee38c967616f92a489fbe83436bd7b6aedc3ddc1a1ad6445d519e096a864ad17d480cc3a6f73f98e797b7ede03a08ae844a3ac3caefd880d584d3ebe58dea738e6182bbe399b9eff3ec2d16d91e85eacac123c129c5df7f6a30e343ea5c734073b1535f6e00c92d504929dda023d88c15e6cc9de181381eeb255db0127316e56e2a25f13eebeca5c4791e91b360648fc4f806fb6e1a85a2cfe4060a4637040a20e1c68cf7f889ee4d4586fb4b69ca6371708d265aa458c5573248cb97ef064134d5523e451c0b8edaf365e32185f7bc1c24d4e134f6468cfea7aacd184be2714255bc3901d9d217ec8ee36ac36a8e9b828b462fab9222c8744cf223b684d179bc9f38d4829934e84a3c59e22a5e2a45718b8064e68d5b51737e1475be175b0dc99d51fcc2533a838b962c17a56fdcdcdffbc0fbeab9f462607c47052e51f4d6e53ebe1bcd39517aac6a9773928706e7a934a1ffd9f886f94fd8490e9e7f3b11dfa779ff00e2160d47c6a858ecda0c3a55b3029d36457faa3c40b9c0e3c244d12422b003ce4005c20d13cb76d1604dec6f79a684a021fe6801565149a7f82538db9797c50b05a0dbe964d8caf152d31916d3fbb7f70d9f82596fba10a296d07252e339339e9de88a8ba15da87937445d860638d3c9f6f0eb1fd9088e375826832b379ac7f60a6b2176d24529f8b7ca56c926ee59b9fbc8d6fab40d4282fd1f92af11993d8d95a44a1700821b7b5f281046b325219eed8e0c0fd9718154a8e9bac62ac1c9852ba6b3e1d01419eb8657b7add6afd2023bf45bf8d9a90197f1459bb3d6c0c3dc261978ed08fa7e32c943a707eb61e9ac0c36a13b44b0ab56999c3086e82936f10f98eb7a037e19b07e40355fbb9bc432551f0d59367ad1c8d8d5c57bf9213ce7dea869a528e965467cc5f078a63351bd92d92f58e9cfafb2ade7059a2f8e1535a067a2769aa0c9734380708e78f51e15367d3341a60b949ea778ac3c3244a39faea45049fb0a82fb6b8f0e480e658ccfe0f4ed58b16c86f6fdaa87a95b90451f775ecf3d91b392c8304eff3ba395acebac464b7a2c423c6726db142d61e565495042adcfa38a961b44bc73b4dcf2ac56611b90951e75264bbed6c8a1195645388a27abe16f6efbfa42f5fa9d445fb14721c9c7258be0f644be78cbabad157760c638a837f45b6a2b88d92ffadd87a10c0b8f3d796be8f7e95506d7836c353868b77cd9ab812d14ec18f56a09770f359f807a2f3571f51c23d8352c90bdf3e529ae037c25f253ddb05f9f4eeee972c57cda430620f626217abd7d3a242d0e57858177fa15bd2d16e485109bced8fec429cd38e4fe85435905f1a5c43a9736fd1736850b6e46dcc0b361e8982a9cde77d10b777ad7b6275ac26ccf873b339bbe36d6eb251b90c462405932e320105ff73496db5fca3fc607a44b58b22b14cdac0feb668828155928334bf95b2848a495339c705a15c38f05466db34c575677b5eef1118bdd94f15efddb93e97d7ff40b9868a746e225817dc122f05fa976d8cc81a0ad549f20171f2e5d1973886cb440e25b3ab9781bab54df3e4b8fd985e9f087f44fcbe530052bf6ca7f5a3f8dcf808a3a6448b3c9d7357b924e47ab899e9e20465e0e2dc93645b47015b5af532606ba6949dd01b69af596c549ed23f0f732da6223dbaed339c79123da478d72a102869803790cfadaac12bcff262b09204c27207d977faf72a3be5e6d11c1b57bebdbd5aba68b45e2e67fb046d74e64307a9823dfd06bd902be0e7a0326695cc0dfa388d8a12310e6e69aa95b4f7ed7bc0b143f0375958277b61bd8d503f8d758e42cd1b7110c809c7d0a54d64c8bd1d3aab0a435cb125fab56d61c0623f69630d0ff5d8cd5b3ab8bbfed342e05f5796f4bbf084c0e85903ba8034b7fd3f45280ec073ad9ceb47ac0014cb50478ed8571109f8f9868c365b468327758aceb5d5f0724c240192b12eb12024f27da8e5363365c38e7a44343b55bee38fbc9ff9e3473850a5c1d388902db5873e4d34e8584cff4e98b260095a9f14402179c4661621b0777d8184e1f44414113c35be5cdb8d5b8bf52d92f1bf4b86c82c6c85337dfdb85eb7290113b1de31598098bcd1bab493930b77d74010dc9a8ec6d0effcc32910941798995a391b792e4cb64bcc64b3c7b60ccd7b638643f752d6c937842bbe6378cbf44322b3fb6f75b8b201470286099ea8e1e0ae06460c954847300d2bc732e85c48d73592269f691bb02bff06de29d366dcb9c32df21c954ab50990a76658922a19b4cb845c8ffa11b16696d1a8526497ac7f7607deae9bc3e054d2a2ed8e8a13edaafcaa064722882a8752f8c9f6c44ed122a8808d038ceb5a547414763bc07527df0538efb3ffe47d422161726b51537cd3e669b5606fb778d8ea89d6bfc71872fc7087efd9884c00fd262bd3268f2e3645bbe36b4bde1a649fdeb3a38b06c677e8aaa3ce8e7c7c75477784e94a224ba013a77aa8eee80a26bab3551d5c79ab1873d4d021efe3082cfe07fbc537a1f65c1ba51151ac8a93f22c78e7242e01b1477df032cf492ff14613d7dbedab2008d63b199f9b38db826bedbceb9f00c230ebd7463299e74d95bf54ef3a00c38814cd29dc470eb8168fc683eb47c7ae8fdb0e3ed9cc4af90ae0fa7150a161eaa19d3555c12ec08cdfd5781507c3f720f144c013da75fc373b8e5c102fec8e7fcb8c1e39d1b673c7f9d04bae857b0019ff4a0e76b4004eeaab0d62c837411b5fc92362c59a3e0776e3caea7ff126b3b8d350a752d643f32b526728443adf03ed64da724ac3ea68b443757c81cd8c767393c2cf1ce75f4ca54fcc2ec5a45c138eec6126ea98c08234a81258352640d1ecb06120b0ed930f4b1f3278c9edd5784242657bb53e346cf34f7e7f09a47652c0467b84ddcd96cd5c0337ad0c6a5a2a2b1f7e8cb8ee4c3601f0baca8629a0664a0f0a49e00f9a4e49dc50e006fcf34b3a99af19338402224d05caa67b352fbe81fde38471b46173f95bcb2b7c72ec137a970d8305dc7d29cc7b0e4d329f19d374e043766c120796ec7fad34e3b85ccb1d566ca1f73ede971894a3d5bbab6a19a673f3202ecebed2ccec35a2672097d2064a521d24951ee797b5b1360cd5c46ac3d43229fe6466addfb0f144895aa31b1424eb65ee634eb65e74f513169948dbbe08df869f1c4a0631653aa9514a79b9dc58d615ba6398dcab1b992327a13aee2afc5fd98752b6bacef815f2ec40bb43ed424d7706721fa19c1d727290ea1fb55ddb8921a3192d0f8fa23025a226afd602427de250aab7edaa4a62aedb01c00f51dc968c91d4fe7b141aceae07d98e0070498cfc55dbd8f83e7992ea5f596de22cf81a817d1e9c0ecd3996ab00f25c0b5ef0be3f1c6fb72190672971921a253b732a96d6a2783c2d759a79e38237685ea9da568d6ee2acff7687e84275a56b9fa4b8ae46d52dc4ee2713024cbf3fcdd125ab5b3cc1e2bf8e724b178868874f8d65dcaa19365685fc3a301d7a65b668afaea7a44ca250fe87cf83405ff3eb547a7fa8c24a6d2e060e9c3053f1a609b4eefa6f859e19c96f0b6c4de5535fdd5886c36c7fea19367ee795d45a4acc36a813f85c6521590982f8818d4335b4891c3e4409b5298d1d8371084e804aa69a550a51cddc3be3ef9dcd4aa3b7e80942a8b43ad07ae57ce47b5eb07bedc769f3138134185780fb84789bd25772355a93587f12563b67fc8dc23002084b065c6ab28f3d7df762bfd5438e6d5fb635f575ce031c3ee9cccaef4a8731c37c4af30a0cb3d446c65ee1bf29261bfdffb1a5baef1a7d3b94939b81fd733a7afbbe28e2f513a6ad14bdfb927234899730771c528efee52f6d4934b2b58460a8a1fe9602cb083bd9df2d817a32f7ef3027d66a0a02e4b5bb1212fb83a94572eb84dd6946763be2dee91aca4430c5241278c13ad5b6dbf96e75a54e192a024f36a02716a3959fb4f428907b55d02e841b4bb9379eaca42c6fd21695ea0b1d8853a7cd7c9d55add31cc3286ff0bab452a0e86e076880b95f547e481b0a247e5cd81dbecb6b6a38ff1be6387b1d81a9638ca476bab2e1e93c15d6774704b145cc728ae5d549ad4986432f9b0803b69c2732677f51db0ca54f51e60a7650faac25d4736e601dec96f555ba7d73846e8bcd6574ce82a457d9a62230b8dd056b719f3a8419c70abb784d15a375dc937d5b16a5cc47d4a5ad45a44892b740fc8fb5305161675118b9e1d7c4fa7e7e902f5b48e853c83064ae56172c9acdaa40177d06fd0f87ac2cd590c1e4bca8fd0d444c49ca0f43c007f66bc6ef6cb7c3ada616d915ce3b8d2f4a1272958f0ada514a7df084a3159878053cf1e3e4a209e1d88ae9d186ecc42635b65c278395d9a888975723505917f48b8572bb3c99c585bb742f30885f0904276d48d8394aa73de18cc4aae009444b36840eabca79e25e8e861d0510420033069fbab5166e491a9295f6fc242adc3f82b6edd44d748755f47a175a0ca4336699661dbfc7e01a419347e7ce5de3ff6fb746be1c380dbe6686b72b813d24f1a5de9edd049a1fc625f61b6db91b0bc129518da79d77722434441d318db12ea4b017df4949a3504882f6a733603b62bbcd225c8e7abdc602e55c0bd664c12a10c94b613e1c8a2a04d1dc16522d38845bb704962f42a3caf1eb6b6f4b997c24ddfa5183bda31a3c6fabebb8940ae6d077e5fc2e6fe989e8c29b30edd3e83241c7948d508ee7a196e44ad17e7be340686ebfa96d7a5cfff067a5face97e5ae378194fab3b6f870510b27ca4ea69a137c1ce03a11339348d35f2a24a025cee069768a96d207c30eb0205cb717c347f5b12c98e99d1103f32dc8ad5ee90eedf63f2224428b7d29e684b5d94b3a47cad1f16629954c0379a9177cb61210efed0958a1f621098b951c167635fe6c2b73acccf08aa3ecb209fe9d5f390fe04ed6fd32e4cca0c5edb9516210a790b48fc792b917bab8bad0763ad43b8939a2dd1869edbb2e4e4b4c9a53bb6f96f0b0403528a701a64cab222181aa23e8058b208a53405443afed890592672a93224202951791aaed598a14428bde2dab3b919634913475b3728068e1e8b6787917aa3ac76520ecc5ad53f87e808e6e4e6ff3e50ebef069f8a7498133b75754bed1afd68e463c66af35ae5c3386d4451c3ce6c7bd170e1551e00431b628ffc5759f8a14146de44178ba6c126bef91ba158c2dd87bb6403270d88440e759d6dfbd4f51fb18c0e36ff2d00ae77a215dab56c47fb220e1326c0b603790fa0e8c79344eb97167ae2e24b64a4beb9fbf3a2cabcf217084afaafb687169573804dcd0445101f2131b86425aa643b77f68af9934ca3fc3e2164d816c895aded03c17a0567b378967f338c19ee522995cc923d3ee5a1579f5ed6d4f8e9e85ac8261a6afb072238e4067547b7a0939c0dda1ecb5817e63087245c64a7ad5f2efc05145c599fc8c304bfeada0d1aae8ae6043f7f088faf4cb5fcdd979e46667e82854f1744c405726eed73c7a9f3969c5034e3b0a53d47061bdb5ef130de636952559bc1b60d585f2aad637de864dd650050c3963795069cc59a9026099b239b2b7510d63983b1650320b04accc266fd4a1a81d5b52c169a8aec6a6a13b7317158c70750d14df4274b7842aaa44e2b32ef56659c52b9dfe4c14084ec78c7e7b143b3f639f8289430858060d49d66c267e63dab6e5ada5371973d3c4c855fe332a4b5d9e211736e42abaa8d3eabac52a63eb5939cffc1de370ff017e0fdf265d1104845fc03e2c1b967034c9e9dcd6a27c9e446580c94880942fee2919f4e7e28726c286fe2de421226c064ff71ab598c76922656801040000000000000400000000000000000000000000000000000000000000004000000000000000030000000000000004000000000000000400000000000000010000000400000000000000,0x040400000000000017f53f3576eab8e6da72f3726719abf04e099c635dab6764d1197f073a0eadfa57305b3139d800cab4fe94f5240cc3854e866e253236b7f198273154bff433a9472a4db4d86e97c33a7276f0a90dc61157f1f5c42f27a62ed7fe29574beec75391dc80b72298b0734af35ffddc230b7eaee6a87087fe4fddbc5c8b6ff55d1efa040b1bb9668cf13e6a78d791392ca799bf8efc79f40e464066baa74c538d9db02efc7d45639e6a3d62849dc4d2078e90dcbb602b1bf42099ec74941916ed6532e2fd2dea1e880ef9d4b1815bb0c6d4bd1f0a2f91f4ba4d634b55c7881c1f1a7d07616f47e500d80cee065f9c17a0b6e18eada9e4b955329bbc389468126abf9e8b1cf4bbd06fd9d757ee9f60b6b57130b03fb346cce4fe408a7d36ec1e3bd94a03567a0bda57317480690686d3ebbd3ee1d153b75206f0c69d100b38b7ef9653944a10a6a1181ff741f748f97067fcf4f716dfe3e5df8967fddc933efa87ccbb6c44f20236195095335cf9ef0a9d51da72382147fe5272f4ef103e118f15474aa69d930fb64483d96a5aadc53a5a75cdf2b14e5b2331e963220f5004ed6ddd452ca6853cda8033cffaa7ee3f0113bd5303010a29d497189f20d3f6aa3d3fda5c0b4d0f9d21cd720926fdad80290aeadf8da0e57914d478a051a05c561d8f94ced0d8d8697bd3dfaea3c9ead1fcefe9a1d4e8236a014ad633150db566b4837b48c7ce00f6365ad455f71554e5a5cf685fce25c90c909db8d64f179ec32f5be049614e17358fdddddd61d766cba9131074dcb17cb16c434b1c2def49a3edec1b30d91305695acbc9fd18dec775948365452b4f9dc407052af20e543b0171f88184ec2bf039623085eccd38bb6e91b99e9ecf3299c51788348780792cffbab920b05e9394ed3b9e743df8a2273c8938419cc5cae28929d69b7d41cf28cc89eb6a918f1c4d71cf027e0dd182a747318b44dca47cc7afb2821e9f2a4368f5006aaecc55642802e577f51b80553d968896879d9c99bc616d1d1d875666aa4cc9247411d149b3b6fce68e43be8d113b8d1995b695739f8f7b8d0fd6172d0a966eb5f62e64173e87ed1453209d27982db109a7f915ad378ca9d48df6fa03dafd5fa955f138f0a3ec3ebbe19abd936ec12a59cef0a9b638d8a25b31390bb6861f428871ec6ecdbd1131bfb7423f6536bcc046406dc91fe88f3f9b22b222d0c9df6eeaa15c1ffdb6ed30ea76df8bbd1fa8d7eb33e513041b515504a59e7fcd55454bd25b6eb97d982ad86ecc9bcb789fc6ef3edde2666fcc6b8e9c37d7efbd1ea5fa05250d4fc97c0712518cf659f20b0b973a359769cffc243404496f103846ef03007e5ae3e6032e0a5a0c0bd5a2e542bf008572d835d6100b6acca2492d2b13a22636e89ac2e260dd14dfda205fc014bddadde935a0a23e0efed116a0ce63491d00db6828abb6b298dbafc2e2b45b25b83df2ecae98c8c6d3108360b30899d7eb53e10e3378bdfe55bd4b96e03704fe331c04872fe2434de5c227e356cc46a5ec8a50b8c0bb6762ff286052ea640b9e5b8dbcfb8baf4b525e30929f5c5e3999ed9c1b0f826d921e18389f330541c5a4d33d62ab0483fe78e170ca0f873ff57bc5a812a7af1653525dbb8209468201eafc5f6a70ea79d6f63fc0e2e1666fbf8bebf4cf59a22c68185a42c3a504c950baadeebd93314a66421bfc16cb176566ab9c471d9343e3ca679a8536dba64aba2f9780b761e7b231cbd478e7d6d13dda879ee10d4efc4e413d43fdd92848b5349f6639538d43a0c79005d2f26bf653bd9b70544e787776f4b84d36cfa9bd28c6708133999290aaf9d414d196fd03a3d7df37ce8213033a3f6cdf5d9991fc41403c75ad123520260345f18b2144b3550fe176bcb30517c1a93ed2baea47892b633cf22721e344d4b59a3ba3204f0405188893d0b88d2d1601644bd4ca9d18729e836161aa7c65acfb658edf5561397b4307fd6f7bc8069cf5835db25beb7dd6570c9d10576b031eb4e9917eb5508003d7f9581925d58f3b0433f698e98a7f821ec3b05dca1f5b8ed92b45126ffd262a4972114396cc6a02015d7853c1dc761e402db27d8c1b8d01dc0da6d29e94a8a8a47dcaef1bccf2458b2b88e4d5141b9eee760cb1b8c29f94a0761e9d3d6eb8c4260bfec679eda097297bb0abfa12a271f418bc8b6c40d5e28ea8ad1cefe177b59e6f80078e5fed716da305309639b3d7d171a99a3709fd2a04f74f32c5095952688de9ec094996150ba0d83ba572f7fc4770e7e5dda94145afcce0e1fdf5fa9647200afdd453db85096b77b0971d7aa5b5656de8ab65aecbba63d3280a7b0775f2a0725f29104bd9133d4ffbd9f13fc225adb2c2979d21548508a8fccd010fef04caf81db0a3775a74b97bc93546bf31cd6720e8f5b47e46faaa1469bd3818b686baad69e4191195ccc09e76de6c14032a53fb933b9da68843d7717aca4d792c8cb2ace0c27d73b78a7be90e15b4462eeddd429331d06a9a6c046990b083e8f7f5ab35e328d86b0a63fedfa95ad469df98fbadb685d9996fda3f64347e372a50df2d85cfc4de61d725f1c38843d3fecfd9e126d4947c4957d3bbaa2e2799bbef31d7e1baf67bb727fd509af48b24dc2de1e7ce981bdb6e0c88c2e020eda2b5c43b701c18670139ed1f2d8708276946071d02276de0fdf2c560bb79896a55752213fd2e58756e023b8871ccd6cd3bd5db79f8e3af3be02a78dfabd30ca60443809d639cfab7867ed4c587cf4969c185c893b56e928e6f0804df48370384aabaa641c23f7d5cb563db5f7ee1dd49fa37b846f3cdcdb12ecdb0d30fc17c32837652a5f6ca1257bdf28416500600a6b1e298b898196989d2dfdd561326871e8228c0f3cb6d0671f665b059f90c797b31fbc60410bbc7ee5c324d1b3ff8476bd6811cb39b52def5fe8be9d4e2324300d7b0c5cd183bb8cd79b1e69eb6f904e8240ae1fa332eb72aa001065ab15a307d1bc5eb0da9d671ef8fc5c66cc43669fb979d836fddb278749e35bdc3277ee7ff44d0515d0e3b6034018ab584addfe51511fd62392c7ccd48607065b626f74d895fedaefbe787c80ddff3217640f80c5987adf97b87ad12e714fb31304eb5e8a05a4a7d49b63d6419cca8e5625bc44f946f1346244474e6988ea83f4ab66d48c7c8492b149b7f6a0ba47feb12fdc4053c4d9a77b9b5d42f9fa37bd6f5054d80becfea61a9a9ae917afb05adfea6de02122c818172279858d73eb35c437e9314d1fd684b5bc6f108e7ba5068f26cb7204bb438e0c5ddeed2ee33c0c8a0266697a156a3e26b177b51e1e60a1eac9531370db4f0976c2c827b5425016fe361a9dd3dbd3eb42a95ec9659029bdfcb3ccff27ddc919d964480128f7296c3bcc0d2835fc43ac9077a3b54991645481abb1b9e09bacc41deba473cc3998f05d8331fc05a488ff2e827189524736881b880a232f93fb439182c2737296b996b3c38d11bcb263606e4111fbf28070cfd90ecb13eebfe4b4e59eb4ca71e2e79d0ae881ad76e4e7022ce092ff37aba4fecfbbc1d8e387c08a1d6c844c86b5d917532b75be01a4176e21154fc049c993d8f2e1cae374827bec1a16d6255a57189a783a22f51700737a47c2b1033baf10d4ec9025021d52dbe6cc1e09b88d6ca2a868f2a3f76b7283e0e61e2e32dbf86f70498720e80e33409faf0179910d161d576bf62b1944ed6bea58ce28b9c32e54492d80677bef4a66b8fd8d94f8e4d2a4c513ddb9ffe3baca8a14777a04d148f2d6e396e5f9fb29ac6be42f5528096014e012029ae24a189347a025cdc594b496f44902111e2c9a90a29810757f56ebc0cf152c7d8ddfa15e8c820608a97b99d92e6ef495c1050729972b9219f559a23f90359140d151f256e6e33220da9e78a21310fe834d6a63906b801b23ec656745174ab64204fe044e836a499c734e3fd4b4f894ce78f79da4eeca8c3fe20e6c3e065fb6e83770ef39b58647b0c86e7683686a37f0f6d76d868d32c60217bae7ac6cad9e061c747a424efaf53e3c1749b0a3a34cfb36066cb026a9a826aa842c7383e7be68a869d08d72aac9c360c3abd6bd405f1137e3dac9f215fbb8ad992852798a2f6ec7fe30497a95cf51bece43ada22ac0bd99fe6a857c877d4cd20a99eeaeacb9bda5abd0e1059c653c129df7397ab7c8782795a2764f4a44fbd41a6ed711d0c23f4c1c13301e31c9df18f3c45c0db35f57c4d44fd28126f13558535cdae9e483ed220f91b1270840bdb8f619c336de9c5286695d0a9a92f7e56c0ace8ae2291e75644f743c44d792e72858756259aba3b96bd69451650fbddb54c55386aacc97785effe95fc6abdd1c9da8f6356af19cb5bb0488eba9b4e7b17ff178dd6946f95037784422d2d190535c9adff7bc4df9f0c6907ab7059a35d74ba9064586e746ed35dab080fc89f78e1bc965f38e1d4097b5360edcf4111cc02220f9ea422a0fc6b109ef908f7c199ec0b9f837817de0fde7f15c47d71e77949f7e571b9ed7bc5db60562199da4ea83592c58f638d1491843c5368bc03cfc4a88367545c1ba44843f495bb8da0b141cc9ee20faf21c6a20bf4e4e861c750623ca801641a1aab0034c8078ef99924e34bad8cd3db31cff44933e9e4be757401bd4011b56e97948606d938daf8019315e9751660c702f4e93d44280b099e293f23e3f44e167bf4dd5a7b3607c7282ff9a46fc916fb0305f44022afdec3545ea3cd7995d10dbe57aeb24f2effcbaa0686b6e286b52a38e78174047f2646462a2a3407082e8960de05ed416267d82f12881a7219f972ef9362b2b277d2331093f5ce098158e1bb2e41db1c4edd11e63c281dec84dc5c5a7bab56b04328654d6668c14cc71c33d85086851b57778a571090e30330e6f52b2c4bc77ef1d2f657459cab840b64752d271aa189e33d16139d550dcd7856b99c0c449139725b13ead0eeafaaf1bcb41e7ece3119fd463ac6c9216d125bda5ae10fdc820407ff5ebd14f04bd3b154d36391ee5b5f5fdf25af43879ceedccf710bb7dbecb80a1433cacdb28c88ff00407dcad9227d47fd3e27d2968e90baa3b278266b784da277a85bf6c04ae652407c5e29f10e7192e1cb96b815a2555b167a5f58ab9f50d248fef5ff86c990b23593775807cd54221df8226f53e5d9a93ce7b385debf77bc5a622ed2cdb5e7475cc4fa07df32a192fd622635dd48f77c17055313ef4a09a3b2a8ec146a4da02c870951a8cf496e1b43915a1810c0097cebacd78b843b00ce7f6d27a84bad36d0610334a39521c9a887430749650d290ab10664ece19049d2a618b73ac4d5f9c80f4f5137bf9226e684b24b8773628d3dad423e4746ab3bbc3dce0e5e218d76f8140920fb511f331fa12a260b15589d2ef78bf4b44cd7e537f5dcc4ecd6807d282e9122b5d76d25083ff28faca4d102737062886bab716e53d80e111393d9fd001b137fdbcf697704ff65ed26eebf40822e27df81f3e93e72aafafddcd42b0e792242863c372708bec93c22cb7447efab92ab23caeff6c76e7871c51bf82f3f725d51e1e0015e879d9bafdc284e8a321bc98f486fee272a16045bcd431c596ad397422c92bb2736f90150d0e95d23da15f034a0226da511639cfec705c39bb1ad9d433418e14d91e56f7f87f75307c3041dd9551f724b83fdd3e4e9793977275381cab784f624cbda0b4295657aa76f426619298f0e6f8d512e4a951e215d8595c22c9505a17e0be41f56536a54e79b06e4e99d36057517a0d7461506c975ce285fadeb0fa7465001beac3c999888f9027f260c9aa6c1b13261f630a2b1932780d186c8fdb1d5ec15cccd4d7747716eaa65b57313cd5815bfb73d5f5c1ce58b1b25ab15fb84bcdf1c3aab0abf9d41f7f770ee1b85670d3fc8bbffd0b28179ccf1f5268623596c4ffc6de41c68929fbb107b7120cf7bbd437f84366c14d576e6b95fc934308026c54b6d7eef602387c0c61786b77272ae2fbcefae95ef8a545d9ea117433bcef192ea5141655b03414a1e9d1da47e30fdd378c3924205d85d2aa36b0c6e0220da0453efd107002f02b436a763f7002525398359267fc42a7c043d74f9537b23d06836730fdd26fc1d7b42be084d3106aa10405f7edcf1b75b6098c42ace3b91d185a8044c370b696caa2ef77de0b38dcb96d1a40b03630ea8ead01c35fa253a65ff8f5ad7741e0d406028e308aeea7db73536d0c0a0c9b949fde5c570ab72b8cceae93466f2c4733979ebda38343dfe7ca1b5bca81e90e376c7bd32f08ecf71d240d2e722e670a57785e1d7a0569ce0cc7416fe4ab5bb93f752316ddb09f36da56e60908e22bdfcc52b008d1cfbec5d8bdc27e97bd50d395662967ae9bf24af56710880fcaf3b33b68692e4da834b656d346ffc37d12c9c38398f94124556097f2b0c4c4bdc1436072061b3406ce54dc257e29b8c1ed260f0877c3171d2cb1bcc469e707dcbb8489b3b6e4e13e184ebe62f4efeac5ff7db25f8249f109c1ab3d56b7f3b9faa86a1bb9d9e6f5c5eb187d3b85d06e6e1f5164c4574713c32dce9b41ef5b03df3214d1bb9af9741b5149ba53855bdf338a78ac810ba6a5b39f93334a67219c290bc3cec2d952c8d746d9cbadbd77153b122b2db55ab262b58af8fa2726e66e5f5a8adc9d0125bc60c7f30e8d725abf3da1a7d6ce0716696c43c7c2646f66bf9479c692d44fb246a3339a2601f5dd07c2ed393a948779566e9ed7f0425852abbf8417c4e309618bcb23fcc968981804232128f374698d0c2b6c6aafb89d653d502692d5a40df12b45e0c79e3809534a5827e51fd83201054f7f0c3bdc4226f22d965289e38bca4539a660123a488dc962f461aa56b12dcb267d19f67b739ef188b077e6aab7d1c4244d9e0344046983982f53ea3a2f68d5ee19478c11f9d68df509efeef6ca986838d214d382f77819421c56806db55c5d46ef68558398bd316f5a40ce2b360b163506fb80b4c10ebe56dec7a9aabd098a5952a94d03bde2161ed754c506e18f1f8957ed880e36e46d1c008f50563088b2178da95ba0f106fcd14a7c28c4d459191f43e927f6678f26214a68311676b3f2f81b9ba9ee70ff99c02b46f93bb9c0e97e711ee470c55e5b582a3947fb5ed001332895716be00de9d57efdf3248d5d96f0f9878092c52be9bad25a3c6d8afed8aedb31ea757ed3eb616ca3d0b72644564ab15bb30e051cd97e2ae785c242144f4bb1a3d833b78db672878775f14ca7062bafd30d519a80223743612c41fc537f2342bfc71d9282736b915976edd05e13f8985d10ab2083d9044dc06aa18ff8c72600c54c99379139db24c97a58df026694c5b19918d926927a8dda1826892dfaef32389ad4eedbc027425ff1e5bef4ffc8a17f15bd63899d61842a61f12533e38377a56b50230a22397da54159d9495cfe9af3538c50380ca9bc470f0718f7a3b79aff38f16d691c82802a1aa5ae066be085f6b6ed91fd9ce82cd30a04685315e40add5d8de34828c9ce65a09be135824fb669fe9ef6ded832d764fd992790249a2180725832cb324712b5fded1c9340bc681587cd82acffda67a9ffce1b6cf5db86ff1491ca9ace7f0cb1e4cdea907937f6ae5090460e8c27dfb4841792741026485f8732a5c540d2cac4f1b180c36f28c661b8cf00f4314828fbd417e50645ace8514fa387a3260cd7cfc1fb47dbefb64b2bdcfaf25646c89d0f5262f240ffc4c32f182900d2dcb93c16e791cada6274160a75e5c42d3c0bfea2d7945ac52b2e6c4de61a9cd696d4ed4bfe1e15e1f51880d1c36a6f7a5453a0f2ba68b9b48f9345c5e6810ec8413c56836cc0e2bcf2137684eb4b6c1d3c4d4a6d2f31fccd6a67da8879cca6b585b02f111e2c7b753a8aa82d19822baff8db32f8a16d37160a925741de7373fdb763d50ad1323d11dad0f26c6a5c05ca9f984e9374270e3a5dc779a510fc44cb3e67b85d410cce408275e64949be1f931aa497278926c724f10b69e4997af32ff9ca8a953ce4b92d653292da80d9cd24c5cb564945d7b527c03ae3e861673d713fffdb9afcf0da0b35002bb3c687e4ba1b35435f9570fa7a8c59eea21217e46a60f796a6c0a4396c41f9c5a80f65284f8b628099702fe6bf14e614fecf498cdfe9e2eb5170fcddc0d6e4d371246ce13a1573babccd25e1ea2532bdf05c0c10c6e665d1849337968424fc3efd55db834feef138cd9fadf821bd1ce9270b1b45a4d156dacdd6de9900297ee2d1d19f3d416c466af7ac5300fbf4051edddefc75824ee9d47a8c7cdd4a60900ec46420671b328522763c8fb1c6f761d6784094239f5d216d438776d1c57ea0c50a6841455f8aae0746787090af5696de4eb1d91909b8701de322fff9dfbcc790161c303b5f515816dcb1723f433dd91475fb7dc886cb2ac12c9d9ec947dd2b303ab0a63ac7f64d63a26aa77efcfa49e79a6e6a88683170d35889c037892cb3fbd9120d6e0754216f409251b17121cf5ff34c302482ee313662f6b9714a99290eab783d7a2660326ec09be0f6c36cea8a7e2ffe6279d210512c2553802af313e69ea975c8ad9b406b7077d305ac7ae4cd994f88342e38392a804e219cd2e6966952315d8bc57038b71ee4b40d16539e62fd3209cbf92c8e4d392b478ffd1187a01a1522f7ac90af394b05b833780335ce35100f2643e0888d4ffbc70e34d18482e1eb4f85130e6da913216da89c7114856b2e71c662b06ec91fb02e1b48f5efe65f9af804d1cfcebec5aa845d28ef43dde9b2c9a3ec5ade0da351a0bd8728509a3c335fc67552a7727f38efeb58607eb6d9a5d2cf271cef0ed2acc660e2e43375d5a8e91bfbfe7ef46250cc0fef3520afa55493d64c8e4d977c410cf629119efaa025ed4a2537225e5929f0becfda82189617296e757fe032c45981a60321e7a7e02885e2e6bf4fa471985dd3837d67168f4a1b38a7b248e82869ed113b98759ce96c7e0d55b8e2a56dc7e69de1d90f781ccc4dabf877e20e31400ca3272909a8c60856fbd5ef79bd04156e0877851835c9a3f1742f43ef67b843c02bf26992bb5b9b1ec70e0fdf9e2feb4cb5fd3a55d9d36a1f87b57d08e95c981ae546ea84147ef5ad771e2ec68cdcf74d694f35fb36ba9b3c193bf24f8c3f1f7a9a48375c6aa582edbf75b878bc7c18f9e7b0d9a185f18d3a7486d0cda6c6e44f58f3119fab6c59ec0df4eab18044208d0784feb720aca2efde21673e4765434c2dfb386f50075c9d779cc051fc1d21ddaf6f70fa650e711cf3c3693a8acb1d1f8e309a2ba3b50dc07760dd19864f1567914c4815429ba76ec78cb6876eb4ed07c79692aeb25c5e307cfc899fad28b32861d8450481fad21d3213f28305b5ac4df480d9e55b2596421979d472cbc6365509f22c4a920a00d6b1011310c5cc12e0d663a303f98e5e3d8de269d1d2624f38992f119c2a35e628d092ddfeeb8e88213ce9073068548cf0b845f862ca97603092f9cc487c86020787481f08fa1e65c5dec00246e65b7f96dbcc66e841bb8a6ce6f1815ddb1a94c81baa670031ba489c2d0298eb17324e1423805f370f14748f9b1e1fc5c174d43718a53420c2c582e1dad5e793dd81b70199b8553bfd075361f3d5217dd50a0605a25ae18018a16d77e3bb36fc10f7da70e03ca6ebef3a5d3efa7cdaf62e0962a0874b11b88a5622d94f5fb2a76cd6c821818196fb3998ce2d77cd31d0cfe879f26c08f791af74270085bdbbd44f255ca4081bfdd8ecd23dfda82d6727d352e8d6903dee5a77027bb42e1e333443936403c1768494db68877d79763741926f4f6bf919717ccf629978753783b5d230bd28a58d9ca786d70964fd784a4b3602dccd52d7565746dafe8386b60a45a79615b976cead11971bc6764f3536f3580bd2068abf2f6cfa844955e98117bc79a094957a6dc902b292b5a2a21b25d43dde50cb9bf45311db98f7242d0ef6b59e8a4c8ca235d0fe2d5a00641e0cf288fd101ced6291b851d44ae633014dba422f3131a7f65d8aa2e61341cee1e1450a154d1dad66f9f43851ba014f21a6c6e7b860fd4045e31a03567b8557f325785d85ef91ccee3c25f19641429fb66975429a2f9d40797d4f133fd1e744513d84ae4a057ac3fbe534aee1895b96f0f6a26d67278d56585754536114efdb239171e148260fbf37e4ad52c4525f526f901d291a43b7dd8a97e115c1ecfd8c8bb353b50dd2dcea071cd66ae3e3a61024c3fc4ef970bb2e16d87ca80b5f4edecfc7c1f3caf8caa23e2f84416a3a4b92301f4379ef06255ebafcb4158ec32173a96290bee22185c714d20130f5cbd96c4827f9d6da9b477d7e5c2691e9344ed529adeb144aebc9038e67bba1b970cf2bdf0385b5299ce206ecc6e9494fc1f62b7daa0f2b68ca2e5d8987d54be1e8fdd6dc0b972c5ef7282a2d64bc3e0592303b14549e68e63c6d40b362bd3072bb12c76df2e7b33cfe2785b1039e37cf7d93064fd54a6620ebe08f7088836ad580f07e7faf53c589ad80756817f8e20935197e2921496e447c24d2f549c0cdb66d5c0ca644e64cc95b12c211a4f81a62bd3d31d1e7de028b0ec0348e568a1644b2586b07c3486b321f4a7986f8e40b305cb02e9fabcd4a1161bd01d03593020f0399d96bc7e168b78be784fdf880f48d626613ea509f6983fe55d1a4b18cc3b34f002b798b45f565a8b6a2e68e0a4c936fe4d9f445edb20ae7e6a64e0a022d1eafb051fb5e85a77d7c6fe31d579ec33bd03b2dd49f2afe9de8368bdae1d7f1aa199546464706f693ee7c705595d31b7c1c08a7ec4a9bb1b5f67218dc1a2121d7b21371b5c80362c88f01ddab2b81ff82970e2c0eaface228207caefb36ae85b738020dea5a1a7c82f0dd570a1a7bec17c9585fb31ff78d757f21ead76c5c8e6807e9334da1042b5d33395e6ce76f8355fd89fee6c2389a2eebd384e524e0ad551fcb92bf93a7529d763692efaf151ee90fba899a800a940e409b2912ca01329a6c99a3dc6230d05eb03da3700be4161305746f631b04825f2e9512cb22ac622a5d12eec32f859c5193087280d251d01d2ef1a80c8dfb47016f2b47310f2dff80f0b4a726ce766ebfdd109802413f8a66fc53d1f10c4723ab4a1463f9e13ffa246285c9237422a96842554ad563a06f3ba7073b1823c6e32154e54c1c581c1f654030313b2eaa48ffec6e48996f7d27fbb7d7d2e984dad4b4799bf0c196b7851939390777a5ca7d1c723a967e80c8e52ce06acfd7b20e37f87db26a9b1893929a20c43a538505b3669fe80777dcec591154205a32b2d227e16d0d7cb86f763586af58e7e7bd30b146391895fa7ec972a109759aa9da6e4814e0102494dbb3de446c2c6e2686bdfab4fcde51cc8467ca8f1b39b3cca0cc863e1033cba0b5384ae0aae5c44810a490a8de03decf601e7b6b4e376b230bf0465ca68b4665424699719eaadcd8e74a92dafb547bdda159ca031a9c808a8eac01ee403156f934ac31962a8f5e0a9f06c1e1d5a6c84128d7fe0579b3e35c7608c81bc7675e8d2b2f9cf9872e2522c5ceeaeccdaef01b7d9170645ae002ad2931df1c3f3fdcca0da3442298d541ea9d94a70a4f4af161fcdbf9cf6bf1541fe1001040000000000000400000000000000000000000000000000000000000000004000000000000000030000000000000004000000000000000400000000000000010000000400000000000000,0x04040000000000006dccc3ecfdf0f3ce02dcb6426468aa1a9ac8506dab91b33d79d68a8eabcd1647e665effb41110a049b8ed37bbcbb6c0c6e8becaded730a902d86ba4208972b707421f6f466cad721ac73c84eca443b8abe779a6fc4b130f7bb61c9985237ca6ef6053dc74d49f75fe38ffa30bdfb91f76ed2f938c4a687db07739b117d65755e4d466c7313806eb757e51aebf6116760130ab2e87c0142dfb54cfc7e1918a7f24e6a269c99e0ccd346e69dcb815622255f38164c4d88f9965577ee51cd82ca2ceadeedcd5e1926c28693b910f5d3a139781d9dd9750cde40b39c0d1671d6369c85a721f624324ea05ca454f37bcac10392a3af532c669ed700b4c140670282f89ba979ec65fcd9f62129a71b824f8d1e8756e62ef9f3b8ae02f030cd7e803963bb8a1cddef21da0500a6393cb59447f7e95a5a38947645f9d1ddae2013ea556459e3a1e2bb7f5f37e2f8473274495afed828ac53552b78a2e24bce16992f38cc296e1778d02e06c3b3d5bde4406e8f96dcc66673c69fc5d2e0927c0a46a1d2df457e11a4b9b966a14c99279977301f227ec9f40646e8555fe35e5abd01dbfa40066c87c2a77dc6c69d9b6f81e48f0cdecd2a3fc7d1634572efd9c36f545d883aea03eb9457b6eb557bf333137016e11867895feebdd20b9bef8956e1a36e8af65a19a60a44fdff40842318ff4e522204ab15c1c92f20ca0c2bde22420b9a9447b765b2d683d6284dc42cf7962895ad90af5f4933b9bc5c438f71616a9f221f4ca59da0a2723da9a2a1847912a0a4dc78c32075d68419648d2f180e5a2b7b903de3be052c47fe35d69864cebb0b29d22b76662b7f3298d9d78a65938978ec8735548d9bf946b7fc0609c09614dc6ea09c8354a58af7d437cc8ec7c8553f47c1cfb723a98867322640d0bc9a234926def4b59804ea9340bbbac8c5cdc1293b159844e5062c7837e6354648ab8ce715d323fa87066aeae47d4305eac75faf65cf7e9778e8c2d5e1a43233466c2e5030db53cbcf6b8a9d056006dbb6f610f3b467593a29095fe835f01e84e7948353b7d0b0e83d8b64c5a0686b36118f1b6ac4f9b5d32da880cc5ce27c1d23dd5aa04e0e959aba6d62281b42dd4f026ca7274bb94539d1d437695c94911e22c7339178fd0041ca493cd9db64a343913b020a85b384568d7b11e0d0080a7509ab5893ca4f36f3de9c7da72f58fb9a48cb8ecac8222aab2fb068d8948d2b9899958e31654234cb07585067bcf8c082d0dc2f0db0d52fca07e855c78d513efc012df02dc47a5d5965967aa4b4b5122c211a3f978909b780953bb42da4cb3759334e989eac25ffa74bebe9eb9578f19da82f5f573a453e5be4f17f6a7f46fa2e3acdb67e465ad45618bf9f0e76372b158d291ce88071ab0fc711af0e66aab1fdae61fd9f527365ed30bb981b707986b5bb4cacfe82ca22e2c41e8ecd56395500d65868d21dace3d7428d641099f7da8ee0ce4280845b8eedc495bfe5f0212a47ee1e6ade289113094bc1bb708f80b75cad047859d62c723a78f6a43bc7d9dd4048aeb66e585287e14c0f6a4c9d8cb684da65b85d713943da4511839be6e08ef6a8706b1fd5c5e34d11a4f27271265653e7c18b5281d680473d33f55d24ec31d2717574cee8650900b988ea8b1778ff71b63dc85bdc596f8a96ed75355f5b67de0894d4eff4d1d5a8c9fdba3b39268dea63225d154a47546ddbec8c55fbe242b586ffc9fa7a65dea1c7262ac1e7b57aac51076479a4b4b19f75d916e22f1ad0e8a4cd665b00e2de0f2d00d2a1b0510a7dd44dc243b994b0d398c0339e15f9c62ea669e620bca0cce6492a475af64791fc3fdcdc7353593a814868797c68255dbb80b13322dcada10ffed80efed7d77c01c4288b1dad3a831783ec84e17ff82991afdbb0b4757f70ac65ab83eda4e59ad44d70c2bc4c955c0ed9ba8c3eb7554d47a40df6e98626207ebbca4eb9c3ffc72681333c9fff789b742e52025b57056758400f2a4b326735754b56814c72931e165df7de1b203a4d6d8acb8dd7a4e4fede398495b3961cc72d38e566b0b7e75bbaf7b272d540a62b7902cdfa2f93e5700089af763f5974d2e3fe194a51b1f73f54348f758364bb327f1306af7c3c5f3b90ebdc347daf4401e04de4ae331997576412cbe46c93d6ae0af367e4ed1738599075d9ff230e4205999acd8eba951d8c727c79ac02c0e4899e6a4ce1f3c8eb594ac60da7b4b9962ce1256af85edf6c66868784aff8b9a0509416ff11c2abbd020e0e016722e4a6ba16e87a33d4285eca1ba262f24ae701d8c13a20d4a381bac906652affbde24fc54b96163905a2da83911641e81a13cc050deaedf6ffd39a4c0961e9a19520073fa0ee134564d8ae32b3f9123addb7d70e88aec85ab5d8f5454e17f6532db7f5d53fa32b38065d5d867c9ec3413342106475eea17dc691dc47459f8a40452c1d1313007eb19ae5a4e0322f053eebfe07de08b694e16461c692db2ffcab89ad578903100196bad6ee2162af157a78de0385c527e90f726006fc5017ce283583518aaeb3e30504ff49c1492cc20d99ce7b8c9f2fff2b73f59eff79eeeeb901b10fcf40e2e5675f431aec29ff03d5fee14630ef40dab9b482a6f8fc2872553b2d968843001aa46050bf0cd8dc688b19ede278e180ba66944f4de917a8da7e4939514a2bef208be1fa0131b9f0f1905b90f37737b30ccc2fcf75b4f66803be8593cec33207b195265d56c512088038b3a1f8556f66771872b37df8220d06e0d80d87ed8ef03c2fa1b6ae74026f3cdc314fa6b48fd2e1fba453b6a396ae1a5c0a25feab6268dd77862e4e12eb3db3fccff238d79fd81c57f84a138c4d11e0ea3c2122645f114d5ef3c71270be0a5892f0cbd505b4e581d59f6e6edc3cd694e84b15d24c1a78d3e5e6f3775fae763641f8973154c0c8b4248a8327a362a81039bed0337ea5bd7d99ae9cca41631909e0d513ce2ab9bc10ad90497339eb51de344c14a5571a7a5950235e0b40edaf202cd0e496aaa4baf33a5e9838b837ed5b75b790cb462be8eebb589a750e1fc4aefa94798b918e73289e130ec22134cad82fdaddd2c4be46e9dac6bbbae36b186719f6bc442d9869d1331c766136837ac68bfab701ea94719de634afaefd36cf99fc55b4c7c953f314143c534333a65ade81fe5367879f83894510ba2ac069fcbbf95e7596f8eca2378efbe0a21c264694c3c3691a45b5d819f9e08ac322ac1adc57e2fd3774739f2f59cd932e58d0783d900b4ce127d410585da2bb9f246aa071bff31d05df1aeb1b37c5e2a42b53e77c2eda9119287e25da35ea6b9e2f6867cc34f922d4c8830e9ade07c531439b05fb5f8dbe0a25fab2ea745207930f884846ca56092c84025be5d465d733fbe96c9d17fa980b22ff14b510d7a7a3589d3f4ebf0ac1876f144c952e9d517a2dcf48571c9750c2982636345494418d8148bdf4438dc30cec96ecb7fb341e1000d1bf13c14c597b2c3da516950369b263be3e5d45e6173c2f725e5c38f9a64dc361d470bd99b5e5a76675570531b8529679cf2e08693b1d7493c3bc21b89903eae31d99672c4721aca48b69efc90cf0f34f1098401224391abd6a799811b039337fd4b15ffadfc5a2a90e08c64a7978adaed6a36d57f47b28be9e76d6b85f088634f1dc31a19fe363d8aad0a942138f30875d3095a7934fe725403930ad05cbc20f612e1b8bd3cd9a41a1db93aebc62648458c1e46c1591db3fa75a3e5717222dbcf32b77ff79e5171d817187c8c81250e9379d4cd72fa4616ba0897e5c1230fb174a396522ceb82d7d0b9feebe4490924211f8b03ad8e156d4137175c3254a578f3f66204b1315ab7803a8d9002f7f00b91f68fb2929f731d9e7353ceebb6ca24c8ba78abf0b79410ac5d735620d2504edcd03c65160c075efe32514a88595ab6f369834c367cd824e8f66399d9c590ef3813a802347fae4a5af107a71929d5b58319d888e7b7fb5a188b64c954c76b1fa29d548913874ee9f0af1849723286c0aab804cc5bdc37c3ae0992b3bcdf37e1cc9234e200c44464fb8952b6bdfdd8da1adc2b65980054633ac5a71d133370c79ca5d58361ff854764ed8fcfd5a3a5e3b6a1dcd9a03f7d5317091875d8974f0596c7b0dd4ee10465a7213819f1bdce52e7d765b1610fedd0b8f9076da87b7152cb77e3cf2f33233bee1f851955b95bbfcb6269a456b8260f73216acb1972cad097efb478613309b53d22349703c06c07c005b97dd7929de4f01c54ab4be3888b6b037e6c6642ccf22cf36e48b977d58aa7d369019d15d5d0bcbacf936c9354cf6274fd63911b165845871e6fb074678af7d96c123e759d2f8f83f004223dc7a1357b476893f9c44dbbe1a0e361a00921e069d6ac032c871d8983367dfa43b363b5de7a33906c793d4e9a75a87c4f2a0fe1defe2a87c4cd0119a43491e1e80e2151d6b2e754e0263a8bdcf2a70a93c76d261eb831413be0a9947c8e75ac48f651ec7deab7b9510f6a1e1eeb9fa7d7f3682d53f57d2e1e35be3f4f7eb1396c9d4968aef8bd2bc8226f888fd4c214c840a90fbaad7d16d9519315ff6e83d4296f4cdf31a947d38a8317e6c59ca218c9db99a4db4232a9bdcc58e294ce423e92ec4a05b3826b996e67fdb7656768ebf35d6688ee2ca873e6c1a13cd6be9ca189ac312d8cc174a25eb9bf1945f507b3d27b6a74175cabf55e8eb7890ac50b235095a9989f78329750b08b2469d5fc328067cad2ac8643cff2de76cca7f9e7379255174165d6c16abb5638e9a5261c99cb6f2bed9dba3326377808d9d7e9bd392a731469a05ad812035e90aba593e1ee54fad4cce591e6e1ad8d6c3c0abf935fd702fbe3506b9ab25c39bb161b716b7aa58a8a38501bf09632433f708c170eb7c26248145098e40cf4e38031cdb02fa89855902f60fd28f310959e7ed5fbfb1b6ebcc91195a2f48d3510ec91a802c96c68d0e22db9209fd51596ed9e0a6df5877fc85d70ef3d0eb1a308f7da0f1b53b68e3070cdedc89b5873e8ac9c7ea3389a0e1a3c712d032b8511b19c549837ea59f1fd665ac9aa87706f4431e74fd64f6e5c0e399c1dd56d2276c3ced9c3a685003f9c0ced9c3100bf50bf960a3d6a0f428b5a51b7c89e4fb1b115c74c6827595368c3e4ee46c30bd26a602d2d5b0a86d4e406e3c73977ac3fa15045c34911f250c03b2b70a6d1d1ea61f7416b5c3e32e6a5fd8883c2b4f20beb7f8f14c7fb370c8b226afd316843be9eede89d85db2171e1fa3db377fcdc04fb6ab267dec6a0c598f4fd5f177b2d61a3525d248d0ca4cc66bf012d414bd20a0b090fb5797b9a4685d329a5f6e5a2703b0e67d0a8980562b44bb63d6d56a3a14a2dec3b6f2caef30712ed079cad3a1d995d5818b20626463f6ec8e20d6e57e96a54355391f969a13bf02e636317fa50b4d6e50e6a7605b5b9cdfc7d69ad7a10a102a34e0ec28a76c84b731ffe1ce623f0c64613139f74df6f79f28c200246498e021d17f26f29b94d87fb72aaa3fcb0323621170d07ee4663383b4f8f24552f80366c10360ed8184c236b733b2281a238b0d375a21a58e66f2cad3aa0329dc989298f2e70626786aab7e5af8f176a68dac5cbb0e938e5fc2af8a62d06b12e67974d092b452ddde3e3ac6f4f1b60e0b32cfe5d720bd8109e956b505f9248613836c95078816bcd719654a1f4ba1aa91fcd19cfbd9ac5dcfaa0cd8c7658eba30ae093b9654b5e8383cfabb4c49e891e4213eede6d2c99a7509d31f1538ac000888ea1e926f81c4136c8988107d18b8f310ae5e635b4f4bfc883f55c268ba1653d76fafb10e406a99a096e3d30b9f91a02b5f9c52d35e167dbf6d17f492bdafcf1a3813fab89669588f6e97cf960f604b06662a21b4bfed6f705f454002c05dabbba3daed99c0f57a68a948bfe4994081da8c57039c4ae9de27f37684a06b70e7ee415065331be00a87011c5b90e6e79a0fa9b1fde02f761c27392a60a8e12c4fff3d277d0a279869bd56d5d609637d33dd26db5f50f337ec7c96bb0f529972bff92204bd2eac15d786c5b6f9b91700e26a25c11a517abaab7e3b33fa043226a9310fd71bfe3d1d05e059f3de2308b750f5acb861a9696ba323f0527aeda76e053c4f24da98431419cf3037dd75086a9d99ef448d97e5ade88a46c9b17a3c72ec9edd5400c30418464c380981b87a6a441b753cb3805ad901e8686f8a3d25222cd6c684c4a551659ddb3a130bc2203c6fefdd9523f7171a797bff6941d70611a3b619dcee31a65c83471ee43e9c67009f0ec2dae56171e6460f723bad96f73a1b49709845a7a0cbf7bef4fbfe94929da6fa8c9466f2c4b406e82da5c950a85043896e8a6396ef8e0398aba7585aa34cb7f6d755ddb6b417dccf9af6e1cc4ef5bb0ee05e5c75b204d6ab5f3409926beeea1aec3a215d6d7275d4a2684c820c487f062ab61e7a462c2db7ab77f394f43f09a9d4b435966306bfc7db2a4552f3d00ee3d07a5d7d6d1b7fa76485d52e23180eaef0caeffbcd5949c6e9e450155e102845d784d600412c5b6d248f9f5ebb7818eb6b5da1780d6a9dcfaa6a353172f11780017bcf6e0e8e5862cdc9ede48ccf27b85cabe85d9adf9a22c22b538ff09bcf5d1ab2c289a490e344707e91fec939ae6b3799e0f1fcf2b5254eb5e9a29794f6c4898476af689451273232774df32a2322d92e1415870612b4316d0fe23628c34cd79f454d46008ef57fdcb3d7402c87951091bdc3960cde9e53fcc6fdcbc62cfa497e7e176b274f21ed1d79548542182c65b2800df92586777b4c298dd3518f72fe559d7251afdf84c7990817d733f2203ae5fce248c260fd9f23944daceb8caa3149ffd642f1437169c1a4abe6698c353b237eceb945617103b91b4a1d6d28199846adf74bd588d66e8cd27cba1db9e0d641b7dbfd8317c6c0cb326e165888b9fe9919c428e2a136b0b6c07c879733e9654fc71ecc94cba86781ad1758ec33822f47d9ab410ba8866941a797e0cfb66196d3ddb19b3fb8a2d2a473e6b5935191d93ffb2715c539047686e3dc1b8569175816992765f779e44d3d06b186b3c602fce159e1dc89709a92d04e3dfabece68687a01515a602eff1a9169e86ac67cd0051070aa976f91e22c887de5dee9fdc993c9e83e6912b74b03bd420a8e178bf4e4bc845c87d62174cbc0ee595f231b646b8458fa706dde8dc6f072bae4c936e97722d6874ced3ce97f61eba0d8ba2cf2d7e5ed94a7e3a71e87af0bcc125c4c5bbda5c13cbc660f1777894dfb1941a6da505931f7983ebfe0529fa8984a0a907bc7070cd4c9f9adeb3d88bb9f18a30274757901ee758bb9c12278d830fb8ae56d09de12b927f305cecda8e482ede721c5a8027a571f9687a7803d173fe6b27be66e9c4e18f0657fb7abeaa3a72a1f754fb8a2178d96f616e3925b9e382cbc9a1d67bfbf22c556e9d594fb0ea613bac7b5294387553b24d70cb81cf560e6ae9abd8bddde2bc31548435f3b62251894441366285409a5f36647b2ea93e902c8fc53dad0661ddd1b50df164085b254b34e0d4615208556381c4e6251af73a5529d01fc073feb1d7ff29e2153802d312ab3ffa8d44c9fd574651432a614d4815ab4856c0b2568cbec4c2360ea82b49cebf9ed00d9942127650fc15c7385ee0ad8715e03f14ff6f2f1a931e81ea25320fb937c5d569b6a93c7721d0acd4176e7f19f81dab9ce561c59b8ef09d39c9220defd212d2d62f7c9ddc4946bee9e0e2a4a4e387c8ef41562a87bcd9909c53682adf6251e2a0439e12647b3ae8c6e9c6b80dd9ad16b0fa209512cacf166f951ee0550bb934ab59df7682169d334a13b4cd185a9c57224abec0a153513a70da0acca83a509eaa3b86388335d3b64ae617744b9700661702cbbade84f15a224292ae450016b486289099c90c02ea61d84b1262caaa0478c75094fbd9d6588493a784d91070392f0474225afbd3fa13bedd80f84148fc72533c60931da9183e465df2e8711ba2838b272f42ec0a17e79376f842f26b95058cc22f590dbec66d6c14f438f02111e5af18df22b76faeb4742c6e43fe0909b2f88631d1d06fba5533e3402cd33ef17595a69af15da43aa040e189243910c093fb8ede2628aa0159f6e5cbc219d854be11b41b18096af559d47f7f7c0ece5c3b8b77ff7ba236815708f478fb5c364382fedffccaa99d5e867f130246ea49caae07c48219f2670584d67e5f3a09e69a3c2f9a2aa9bf953b634f1b559ef8298d196cc1548846b5711697c31082435299ac9b16ed5a540aefb7b7a6da6bdbbddbc5d5c7a2930115e0935e9dfa0cf3c216ba516b0aa841092f6a1bd6e0f2c19a3230ff86abd19305d6107c4c5c84fe786cb42c5b691aec2366369c74139de749ef441072e9c83e4f90f18b9c3a16b9721306f9724c91fa2502b3cacb2ab343c77ca1bc604f001142aaa4c888c6ee8a5fa3aa4025297fc788f19bd22f8e33e7a3e39d3c91c6bb5b6794d1822241c4fbaf2854b5239aee922379fd629d3789297f6f1578dfae0f6303292e482b2957880a4d441086f6d130fbd4bf6d4d3d7132b675a67f1470e6eb707c44643f970ef9295014616b214ee919d7bbece93d9bb410a951c43558cd25bf8fc9fb24345b8c042db20408f0402e03a543e3c7b8849687d50d45b60aea61e7979d08a32c32b02abb8207866a8f15d4241be242d84a7c1eb901d89378c586ad39f0769f2517fc4a204d05ad78b414440999c84d3c8ec57bb981081684df3f73f9a1178c120649d58e586f5ea8692dce0ea733b70078325151376a719b1906be88c35b510b4a8cd38505c56acfee2707bd316173283a445bc99f29602cef2b5019052a8aac528b40392bb45d882ab25356b3f9da5c22d1206ee4f8b20a5db1e8768200fdbadcb5fc25a065ef8f5278faa9e29ebd99adbfe73b02a0a28aa0f41a78f1724f0eeda6ee96b69e883eea9e9cd51a5420a66b6cb44926b1edfbe5497755007243242c88a64d525e09a1faa31408c156b6f3202d4694f52f766749802fecf67bc73688ce560021fbdb0f334ea167b47ce841aaad274fc8677a84155e6b52f3274aaebeb6afdeffb1ae2ec0a7318989d573030ed71b3a64795358db82f5464f6ea584382c62073d2c3a9f940b62df7188eeba37ce3e9b46a6ba8d8667467b758020aec5fee1410a8002f19b60998056e5e0b2a56f8b0c722c7d425377d67c70c5a30369829e1c072b8d742794190bd74866209601a27abf77dc2dd6a6ff54d4bc6204d67baa12613b21e1c1ff14ef8f384798207d37eb0371338d864d6e019a399ef6d22c75a37bf27d83e4d1ab78dbf748e1e3f598dca53803ba4f8a7b1bdeb97c52e17556fc7dd958b23e70b7ee377468ec3a661bc90f67896bace0786d7311f56786f1e19603210e7acfcddf2d365a076a905c33f32823da639440cca1543f75a9ec99febb097d309c437a161b7acbbc6d67e1730d19342d07b208257b6ecaed4c7488df7484590a316c37239c4b1bdf11b3eae00f31e225323d9b34bff956df8fa4f30090d28e3bf460e2e1488d4752e8fa4c284fbd9f229ff86cd7a49075aafb14c5abe4c7faaed2ece7ae874280a61e32c88645eba478258b42a371e2cac459297971083cad416c77646396e457798992a82a6eb9e2385ecf5b0b0b0edc7be2d9347f557138abcc2b6eb8fb0fd94fdb03fe97462de7f370a94a6b17b774985c07e3abced916e5ff72ed687b42f98b45870ce1d23d2183dcb74b7515891f92b2be0586f7c0f3a883092b62150d78d6ca61bb7f912e256a7f6a04d5765d0d42b39426a7606db1f44df1f80ad41e6f9e7628fa0f25eb74d14df656082712253729e90777e614d72f0634085797505f6f01e4b1f330109f1ca400c4ec4c1a62ebf7c30ac306dc1826a3f71d81221c784150677846b3ab3c2beedd19eab7de3219bfc120965cd6c09b18973232d8744f34ac7b6caa97f60d31452b2ab37a89e09604a9b1e5eef586dd0dc6f43209e855e599af4eb11ec761b622d8891cbaf0f3722c5aa988fcb1170ac8db12fd2c49a4e8f4f40ccc0e836fc119a0952e320d9ffcdfd889ab81fbeb376ef5acd0a6627d4e0cad4a25ae1adb041ac37e5bd257351e1fa4c70b95a14916b0966c15a425cac5bb598fcc0466ee8ca3334f1eb48addc58602312f6aca13ffe3fef33cc81e67339b6f9636130c2bf621a2ba2b22061166efce2f0247686e98ef681760b26e6dd9e34d3734451f213ff9f5f1ba4aec42b01d5db8957b55d2e3842c308fdba8491738f12cf30a96a1d886ac0f6a95613146f966834fb4a9b69686cf5ba42ffb1f5aab1d3ea9a300d09079538ebb160a5ab28b16681f288449dca11c651ea4347146395ae0c8cf0fbc47e06ce1a82e49fd5849378c605358d68b35e7ce7d53e4130e6f2da5d41229b3b5ecae9487cf8a765c13ad88672aba00cdeeadc68f1a90c0a022defd0d6df6ea8ee8d140a273d820cf586366b0f349ef5262811db1904bd32887015b0dc41c98e07143fbab0785982630da92d6e53734fe684cbe8efad1d73c650489c2908770d5648a4da1619aa09e97369dfadec616f05dfb14492094f0a9d066968aafdcffca64db60b604343bb6436f5cf2b0ba3e9ed4ea309378e07145a3477aa00294c8b93f1e3eb9986f290a9734f67a703f4babdd82ee8d8f8b7778bb4a9a22a0ae8e1693295c6f5f66bf2944f291aec308ea4423526fe419227823ee03f112fa7692f29dce7d1609fc2384818e86390a99346d745f218d71aacd65e7d8fae77b63b90057958846e7cd2b885cddd755351defc006edb77f428a01d396d7ce6af8a135caf70dfe0be8695be371115273963b6c75d5f106bc2cfa3099bbbf2dd448dfd5fb40afe4f331cda69e9f02b2f1b95555b05d2e80193199c42fa4677fba3355e345c00df9cc44a49787c7af5240aaaf04d641f654199fe0dbf7be6ddcd9bd7c5c725a199fd347f8c1bf7dd64bffc6ce4412c95a671d92ce34fcd306721f171318234f9a37e040d77ca85b657e91eda953ae80e6a143c26e96c4fa82c8cf25c0ffea09c57d8e776fa37693ab5ecc1a1e307f34f18884bef41f76783699907fdc0b9d95165aebbe2d047d0cf7910ebadfd912cfd9eb89620834424fa6f6aefb46c3f032dec3d9e6801617135709d4f543011d8cfcfa11e4ec82880309c635b239b02927fbdd25e7a159015410931768a07de34e2147117b91d5433f6c204a9c9fbceb87f0ed444549a3163437877de94247bdfb1c865cdaddee71177beeffdd9ea95db720148c72c645ddd8245f633c77e6a65dccaa4540ea7afcdcad39288f0c32188c3bb4986685c4226406b782cbb9c44bb394790027901a2263a26e23fb4c68366e7e2a513b1f61734035becb436b8b5a0363293e977d7d608ace010aa4f027f357c237e715976be1d6cfd397db1abd6a7d97370a0c16c9aaa61fe8448a13ee30132e2374a93dfc0ee4caaff50e44881e5d989ba830390c6b819e1c6e666f26251aa09ab1f7ba6ca1e3bf3b8c75ed1a2115e1cc8a804151bbc85dcf02798d4a4568f4afbff6b34564235903bd1dceeaa98544f8943d94e15daeeefd4a1d801040000000000000400000000000000000000000000000000000000000000004000000000000000030000000000000004000000000000000400000000000000010000000400000000000000 \ No newline at end of file diff --git a/package.json b/package.json index 45a90e8..d1eae3d 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "eslint": "^8.28.0", "eslint-config-prettier": "^8.5.0", "ethers": "^6.4.0", - "fhevm": "^0.1.6", + "fhevm": "^0.1.8", "fhevmjs": "^0.0.5", "fs-extra": "^10.1.0", "hardhat": "^2.12.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3c6c37a..239a064 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -77,8 +77,8 @@ devDependencies: specifier: ^6.4.0 version: 6.4.0 fhevm: - specifier: ^0.1.6 - version: 0.1.6 + specifier: ^0.1.8 + version: 0.1.8 fhevmjs: specifier: ^0.0.5 version: 0.0.5 @@ -3103,8 +3103,8 @@ packages: reusify: 1.0.4 dev: true - /fhevm@0.1.6: - resolution: {integrity: sha512-tZ+huE/K3TaTn6RGwIRcm4MJMUaYSJY4kArT4eTWM8UsfhsyiHYuAUVhhBfFWiBQX+KUSqNspJwoNyfY7aNeeQ==} + /fhevm@0.1.8: + resolution: {integrity: sha512-aAFbgXZEJaS2m4neq9sN4KJhOU4oQ4mffHu6E6sNPo8eb/K2wH1SsUCEnRwnwxHqvkGA9p1F3kJ0yhRUFJLcqg==} dependencies: '@openzeppelin/contracts': 4.9.2 dev: true diff --git a/test/battleship.ts/Battleship.behavior.ts b/test/battleship.ts/Battleship.behavior.ts index 2c33764..86cfb99 100644 --- a/test/battleship.ts/Battleship.behavior.ts +++ b/test/battleship.ts/Battleship.behavior.ts @@ -1,4 +1,5 @@ import { expect } from "chai"; +// import fs from "fs"; import hre from "hardhat"; import { waitForBlock } from "../../utils/block"; @@ -23,408 +24,593 @@ export function shouldBehaveLikeBattleship(): void { // // expect(amount === amountToCount); // }); - it("should verify that there are 17 ships placed", async function () { - const shipPlacement: number[][] = [ - [ - CellState.Ship, - CellState.Empty, - CellState.Ship, - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Empty, - ], - [ - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - ]; + // it("should verify that there are 17 ships placed", async function () { + // const shipPlacement: number[][] = [ + // [ + // CellState.Ship, + // CellState.Empty, + // CellState.Ship, + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Empty, + // ], + // [ + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // ]; - const isBoardValid = await this.battleship.connect(this.signers.player1).verifyShipsPlaced(shipPlacement); - expect(isBoardValid).to.equal(true); - }); + // const isBoardValid = await this.battleship.connect(this.signers.player1).verifyShipsPlaced(shipPlacement); + // expect(isBoardValid).to.equal(true); + // }); - it("should fail that are only 16 ships placed", async function () { - const shipPlacement: number[][] = [ - [ - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Empty, - ], - [ - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - ]; + // it("should fail that are only 16 ships placed", async function () { + // const shipPlacement: number[][] = [ + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Empty, + // ], + // [ + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // ]; + + // const isBoardValid = await this.battleship.connect(this.signers.player1).verifyShipsPlaced(shipPlacement); + // expect(isBoardValid).to.equal(false); + // }); + + // it("should place ships and check game readiness", async function () { + // const shipPlacement: number[][] = [ + // [ + // CellState.Ship, + // CellState.Empty, + // CellState.Ship, + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Empty, + // ], + // [ + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Ship, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Ship, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // [ + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // CellState.Empty, + // ], + // ]; + + // await this.battleship.connect(this.signers.player1).placeShips(shipPlacement); + // await this.battleship.connect(this.signers.player2).placeShips(shipPlacement); + // await waitForBlock(hre); + // const player1Ready = await this.battleship.player1Ready(); + // const player2Ready = await this.battleship.player2Ready(); + // await waitForBlock(hre); - const isBoardValid = await this.battleship.connect(this.signers.player1).verifyShipsPlaced(shipPlacement); - expect(isBoardValid).to.equal(false); + // expect(player1Ready).to.equal(true); + // expect(player2Ready).to.equal(true); + // }); + + // it("should attack a valid cell location", async function () { + // const player1Ready = await this.battleship.player1Ready(); + // const player2Ready = await this.battleship.player2Ready(); + // await waitForBlock(hre); + + // expect(player1Ready).to.equal(true); + // expect(player2Ready).to.equal(true); + + // await this.battleship.connect(this.signers.player1).attack(0, 0); + // await waitForBlock(hre); + // const positionValue = await this.battleship.player2Board(0, 0); + // expect(positionValue).to.equal(CellState.Hit); + // }); + + it("should decrypt", async function () { + const test = await this.battleship + .connect(this.signers.player1) + .verifyShipsPlacedFHE4(this.instance.instance.encrypt8(2)); + expect(test).to.equal(2); }); - it("should place ships and check game readiness", async function () { - const shipPlacement: number[][] = [ - [ - CellState.Ship, - CellState.Empty, - CellState.Ship, - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Empty, - ], - [ - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Ship, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], - [ - CellState.Empty, - CellState.Ship, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - ], + it("should place encryptedships and check game readiness", async function () { + console.log("called"); + // // 1 is empty + // const emptyState = toHexString(this.instance.instance.encrypt8(1)); + // // 2 is ship + // const shipState = toHexString(this.instance.instance.encrypt8(2)); + + // console.log("emptyState", emptyState); + // console.log("shipState", shipState); + const toHexString = (bytes: any) => + bytes.reduce((str: any, byte: any) => str + byte.toString(16).padStart(2, "0"), ""); + + const shipPlacement: string[][] = [ [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, + "0x" + toHexString(this.instance.instance.encrypt8(2)), + "0x" + toHexString(this.instance.instance.encrypt8(2)), + "0x" + toHexString(this.instance.instance.encrypt8(2)), ], [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, + "0x" + toHexString(this.instance.instance.encrypt8(2)), + "0x" + toHexString(this.instance.instance.encrypt8(2)), + "0x" + toHexString(this.instance.instance.encrypt8(2)), ], [ - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, - CellState.Empty, + "0x" + toHexString(this.instance.instance.encrypt8(1)), + "0x" + toHexString(this.instance.instance.encrypt8(1)), + "0x" + toHexString(this.instance.instance.encrypt8(1)), ], ]; - await this.battleship.connect(this.signers.player1).placeShips(shipPlacement); - await this.battleship.connect(this.signers.player2).placeShips(shipPlacement); - await waitForBlock(hre); - const player1Ready = await this.battleship.player1Ready(); - const player2Ready = await this.battleship.player2Ready(); - await waitForBlock(hre); + // const outputPath = "output.txt"; + // fs.writeFile(outputPath, shipPlacement.toString(), (err) => { + // if (err) { + // console.log("error"); + // } else { + // console.log(`Content exported to ${outputPath}`); + // } + // }); + + // const shipPlacement: Uint8Array[][] = [ + // [ + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // ], + // [ + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(2)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // ], + // [ + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // ], + // [ + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // ], + // [ + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // ], + // [ + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // ], + // [ + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // ], + // [ + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // ], + // [ + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // ], + // [ + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // toHexString(this.instance.instance.encrypt8(1)), + // ], + // ]; - expect(player1Ready).to.equal(true); - expect(player2Ready).to.equal(true); + console.log("shipPlacement", shipPlacement); + + const isBoardValid = await this.battleship.connect(this.signers.player1).verifyShipsPlacedFHE3(shipPlacement); + // expect(isBoardValid).to.equal(true); + expect(isBoardValid).to.equal(6); }); - it("should attack a valid cell location", async function () { - const player1Ready = await this.battleship.player1Ready(); - const player2Ready = await this.battleship.player2Ready(); - await waitForBlock(hre); + // it("should not be able to attack if not player's turn", async function () { + // }); + + // should not be able to attack a position already attacked - expect(player1Ready).to.equal(true); - expect(player2Ready).to.equal(true); + // should not be able to attack a position already missed - await this.battleship.connect(this.signers.player1).attack(0, 0); - await waitForBlock(hre); - const positionValue = await this.battleship.player2Board(0, 0); - expect(positionValue).to.equal(CellState.Hit); - }); + // game ends when 17 ships are hit by a player }