From 8b8442e8917715734b38018b76f77431e57990d7 Mon Sep 17 00:00:00 2001 From: zfliex Date: Fri, 15 Dec 2023 17:35:12 +0800 Subject: [PATCH] bitcoin light chain support transaction verification --- contracts/BtcLightClient.sol | 62 + contracts/BtcLightClient.template | 62 + contracts/interface/ILightClient.sol | 4 + tests/test_check_tx.py | 1559 ++++++++++++++++++++++++++ 4 files changed, 1687 insertions(+) create mode 100644 tests/test_check_tx.py diff --git a/contracts/BtcLightClient.sol b/contracts/BtcLightClient.sol index d99408fb..376c840b 100644 --- a/contracts/BtcLightClient.sol +++ b/contracts/BtcLightClient.sol @@ -80,6 +80,8 @@ contract BtcLightClient is ILightClient, System, IParamSubscriber{ uint256 public storeBlockGasPrice; + mapping(uint32 => bytes32) public height2HashMap; + /*********************** events **************************/ event StoreHeaderFailed(bytes32 indexed blockHash, int256 indexed returnCode); event StoreHeader(bytes32 indexed blockHash, address candidate, address indexed rewardAddr, uint32 indexed height, bytes32 bindingHash); @@ -176,11 +178,20 @@ contract BtcLightClient is ILightClient, System, IParamSubscriber{ // that when an (existing) Tip becomes stale, the chain can continue with // the alternate Tip if (scoreBlock >= highScore) { + uint32 prevHeight = blockHeight - 1; + bytes32 prevHash = getPrevHash(blockHash); + while(height2HashMap[prevHeight] != prevHash && prevHeight + CONFIRM_BLOCK >= blockHeight) { + height2HashMap[prevHeight] = prevHash; + --prevHeight; + prevHash = getPrevHash(prevHash); + } + if (blockHeight > getHeight(heaviestBlock)) { addMinerPower(blockHash); } heaviestBlock = blockHash; highScore = scoreBlock; + height2HashMap[blockHeight] = blockHash; } emit StoreHeader(blockHash, candidateAddr, rewardAddr, blockHeight, bindingHash); } @@ -271,6 +282,49 @@ contract BtcLightClient is ILightClient, System, IParamSubscriber{ return count/4; } } + + /// Checks if a tx is included and confirmed on Bitcoin + /// @dev Checks if the block is confirmed, and Merkle proof is valid + /// @param txid Desired tx Id in LE form + /// @param blockHeight of the desired tx + /// @param confirmBlock of the tx confirmation + /// @param nodes Part of the Merkle tree from the tx to the root in LE form (called Merkle proof) + /// @param index of the tx in Merkle tree + /// @return True if the provided tx is confirmed on Bitcoin + function checkTxProof(bytes32 txid, uint32 blockHeight, uint32 confirmBlock, bytes32[] calldata nodes, uint256 index) public view override returns (bool) { + bytes32 blockHash = height2HashMap[blockHeight]; + if (blockHeight + confirmBlock > getChainTipHeight() || txid == bytes32(0) || blockHash == bytes32(0)) { + return false; + } + + bytes32 root = bytes32(loadInt256(68, blockChain[blockHash])); + if (nodes.length == 0) { + return txid == root; + } + + bytes32 current = txid; + for (uint256 i = 0; i < nodes.length; i++) { + if (index % 2 == 1) { + current = merkleStep(nodes[i], current); + } else { + current = merkleStep(current, nodes[i]); + } + index >>= 1; + } + return current == root; + } + + function merkleStep(bytes32 l, bytes32 r) private view returns (bytes32 digest) { + assembly { + // solium-disable-previous-line security/no-inline-assembly + let ptr := mload(0x40) + mstore(ptr, l) + mstore(add(ptr, 0x20), r) + pop(staticcall(gas(), 2, ptr, 0x40, ptr, 0x20)) // sha256 #1 + pop(staticcall(gas(), 2, ptr, 0x20, ptr, 0x20)) // sha256 #2 + digest := mload(ptr) + } + } function slice(bytes memory input, uint256 start, uint256 end) internal pure returns (bytes memory _output) { uint256 length = end - start; @@ -439,6 +493,10 @@ contract BtcLightClient is ILightClient, System, IParamSubscriber{ return flip32Bytes(bytes32(loadInt256(36, blockChain[hash]))); } + function getMerkleRoot(bytes32 hash) public view returns (bytes32) { + return flip32Bytes(bytes32(loadInt256(68, blockChain[hash]))); + } + function getCandidate(bytes32 hash) public view returns (address) { return address(uint160(loadInt256(160, blockChain[hash]) >> 96)); } @@ -465,6 +523,10 @@ contract BtcLightClient is ILightClient, System, IParamSubscriber{ return adjustmentHashes[index]; } + function getChainTipHeight() public override view returns (uint32) { + return getHeight(heaviestBlock); + } + // Bitcoin-way of computing the target from the 'bits' field of a blockheader // based on http://www.righto.com/2014/02/bitcoin-mining-hard-way-algorithms.html#ref3 function targetFromBits(uint32 bits) internal pure returns (uint256 target) { diff --git a/contracts/BtcLightClient.template b/contracts/BtcLightClient.template index e09a0609..c28bb432 100644 --- a/contracts/BtcLightClient.template +++ b/contracts/BtcLightClient.template @@ -80,6 +80,8 @@ contract BtcLightClient is ILightClient, System, IParamSubscriber{ uint256 public storeBlockGasPrice; + mapping(uint32 => bytes32) public height2HashMap; + /*********************** events **************************/ event StoreHeaderFailed(bytes32 indexed blockHash, int256 indexed returnCode); event StoreHeader(bytes32 indexed blockHash, address candidate, address indexed rewardAddr, uint32 indexed height, bytes32 bindingHash); @@ -176,11 +178,20 @@ contract BtcLightClient is ILightClient, System, IParamSubscriber{ // that when an (existing) Tip becomes stale, the chain can continue with // the alternate Tip if (scoreBlock >= highScore) { + uint32 prevHeight = blockHeight - 1; + bytes32 prevHash = getPrevHash(blockHash); + while(height2HashMap[prevHeight] != prevHash && prevHeight + CONFIRM_BLOCK >= blockHeight) { + height2HashMap[prevHeight] = prevHash; + --prevHeight; + prevHash = getPrevHash(prevHash); + } + if (blockHeight > getHeight(heaviestBlock)) { addMinerPower(blockHash); } heaviestBlock = blockHash; highScore = scoreBlock; + height2HashMap[blockHeight] = blockHash; } emit StoreHeader(blockHash, candidateAddr, rewardAddr, blockHeight, bindingHash); } @@ -271,6 +282,49 @@ contract BtcLightClient is ILightClient, System, IParamSubscriber{ return count/4; } } + + /// Checks if a tx is included and confirmed on Bitcoin + /// @dev Checks if the block is confirmed, and Merkle proof is valid + /// @param txid Desired tx Id in LE form + /// @param blockHeight of the desired tx + /// @param confirmBlock of the tx confirmation + /// @param nodes Part of the Merkle tree from the tx to the root in LE form (called Merkle proof) + /// @param index of the tx in Merkle tree + /// @return True if the provided tx is confirmed on Bitcoin + function checkTxProof(bytes32 txid, uint32 blockHeight, uint32 confirmBlock, bytes32[] calldata nodes, uint256 index) public view override returns (bool) { + bytes32 blockHash = height2HashMap[blockHeight]; + if (blockHeight + confirmBlock > getChainTipHeight() || txid == bytes32(0) || blockHash == bytes32(0)) { + return false; + } + + bytes32 root = bytes32(loadInt256(68, blockChain[blockHash])); + if (nodes.length == 0) { + return txid == root; + } + + bytes32 current = txid; + for (uint256 i = 0; i < nodes.length; i++) { + if (index % 2 == 1) { + current = merkleStep(nodes[i], current); + } else { + current = merkleStep(current, nodes[i]); + } + index >>= 1; + } + return current == root; + } + + function merkleStep(bytes32 l, bytes32 r) private view returns (bytes32 digest) { + assembly { + // solium-disable-previous-line security/no-inline-assembly + let ptr := mload(0x40) + mstore(ptr, l) + mstore(add(ptr, 0x20), r) + pop(staticcall(gas(), 2, ptr, 0x40, ptr, 0x20)) // sha256 #1 + pop(staticcall(gas(), 2, ptr, 0x20, ptr, 0x20)) // sha256 #2 + digest := mload(ptr) + } + } function slice(bytes memory input, uint256 start, uint256 end) internal pure returns (bytes memory _output) { uint256 length = end - start; @@ -439,6 +493,10 @@ contract BtcLightClient is ILightClient, System, IParamSubscriber{ return flip32Bytes(bytes32(loadInt256(36, blockChain[hash]))); } + function getMerkleRoot(bytes32 hash) public view returns (bytes32) { + return flip32Bytes(bytes32(loadInt256(68, blockChain[hash]))); + } + function getCandidate(bytes32 hash) public view returns (address) { return address(uint160(loadInt256(160, blockChain[hash]) >> 96)); } @@ -465,6 +523,10 @@ contract BtcLightClient is ILightClient, System, IParamSubscriber{ return adjustmentHashes[index]; } + function getChainTipHeight() public override view returns (uint32) { + return getHeight(heaviestBlock); + } + // Bitcoin-way of computing the target from the 'bits' field of a blockheader // based on http://www.righto.com/2014/02/bitcoin-mining-hard-way-algorithms.html#ref3 function targetFromBits(uint32 bits) internal pure returns (uint256 target) { diff --git a/contracts/interface/ILightClient.sol b/contracts/interface/ILightClient.sol index 8907dc18..bc787067 100644 --- a/contracts/interface/ILightClient.sol +++ b/contracts/interface/ILightClient.sol @@ -7,4 +7,8 @@ interface ILightClient { function getRoundCandidates(uint256 roundTimeTag) external view returns (address[] memory candidates); function getRoundMiners(uint256 roundTimeTag, address candidate) external view returns (address[] memory miners); + + function checkTxProof(bytes32 txid, uint32 blockHeight, uint32 confirmBlock, bytes32[] calldata nodes, uint256 index) external view returns (bool); + + function getChainTipHeight() external view returns (uint32); } \ No newline at end of file diff --git a/tests/test_check_tx.py b/tests/test_check_tx.py new file mode 100644 index 00000000..29ed5fe2 --- /dev/null +++ b/tests/test_check_tx.py @@ -0,0 +1,1559 @@ +import pytest +import brownie +from web3 import Web3 +from brownie import accounts +from brownie.network import gas_price +from .utils import expect_event, get_tracker, padding_left, encode_args_with_signature +from .common import register_relayer +from .btc_block_data import btc_block_data +import hashlib, json, binascii +import random + +def teardown_module(): + gas_price(False) + + +@pytest.fixture(scope="module", autouse=True) +def set_up(system_reward, btc_light_client): + register_relayer() + # deposit to system reward contract + accounts[0].transfer(system_reward.address, Web3.toWei(10, 'ether')) + # set store block header gas price + global store_block_header_tx_gas_price + store_block_header_tx_gas_price = btc_light_client.storeBlockGasPrice() + if store_block_header_tx_gas_price == 0: + store_block_header_tx_gas_price = btc_light_client.INIT_STORE_BLOCK_GAS_PRICE() + gas_price(store_block_header_tx_gas_price) + + +@pytest.fixture(autouse=True) +def isolation(): + pass + + +@pytest.fixture(scope="function") +def init_gov_address(validator_set, slash_indicator, system_reward, btc_light_client, relay_hub, candidate_hub, + gov_hub, pledge_agent, burn, foundation): + VALIDATOR_CONTRACT_ADDR = validator_set.address + SLASH_CONTRACT_ADDR = slash_indicator.address + SYSTEM_REWARD_ADDR = system_reward.address + LIGHT_CLIENT_ADDR = btc_light_client.address + RELAYER_HUB_ADDR = relay_hub.address + CANDIDATE_HUB_ADDR = candidate_hub.address + GOV_HUB_ADDR = gov_hub.address + PLEDGE_AGENT_ADDR = pledge_agent.address + BURN_ADDR = burn.address + FOUNDATION_ADDR = foundation.address + btc_light_client.updateContractAddr( + VALIDATOR_CONTRACT_ADDR, + SLASH_CONTRACT_ADDR, + SYSTEM_REWARD_ADDR, + LIGHT_CLIENT_ADDR, + RELAYER_HUB_ADDR, + CANDIDATE_HUB_ADDR, + accounts[0], + PLEDGE_AGENT_ADDR, + BURN_ADDR, + FOUNDATION_ADDR, + ) + +data = '''{ + "hash": "00000000000000000003158101f63cf74f1111a9ab4b58a42aa05fdc6aa47171", + "confirmations": 104200, + "height": 717700, + "version": 671080452, + "versionHex": "27ffe004", + "merkleroot": "f5f421f296fc94b46a55f95c718b78a29c9699f725cf12bb638338190b7bf09a", + "time": 1641629325, + "mediantime": 1641627659, + "nonce": 1596333996, + "bits": "170b8c8b", + "difficulty": 24371874614345.62, + "chainwork": "000000000000000000000000000000000000000026b3d792a29fffc18dc65ff7", + "nTx": 1378, + "previousblockhash": "000000000000000000052c338c6d40ee82a9df507dd3597675dcf6fe6a66ea46", + "nextblockhash": "00000000000000000000984ff52391aaa3d5ecf38a6753c380cdc2402e6bbade", + "strippedsize": 837381, + "size": 1210795, + "weight": 3722938, + "tx": [ + "f97eddc27174e5c5c1b3b50fd2f2f7b50ea97b2e9ff603673824f864d30ccb75", + "92d74fa5c43c2bd7579211cb31035629cd7608506c9d41c2a2c4f66031376d37", + "7ba62545561b2b79c9203de11ba94eff553ef43d82392aa6a77ea4f8f5319c86", + "4a4ba299d056708cd31a97aebfff98dd8b06cf4dbbf6f4903546da7485e5d64e", + "16bae28d38223ae0e37aa7ca64952b2dd6b5c556725e5c4a636677f8a4adc161", + "d4877a4f34743eb216a20231085c472424ec1886f63cff9a961bf74f6b9c84c3", + "97160fd6b6393d5334a101abb387ffa18226c6074227395fa6a275f6196970ec", + "813cb38265a755d190bb761eac7dbf35ac8bc8e82928b1316a916a6ea2b27563", + "f6916508de27ffd195963bb54e0d12d8376c816de0e035311d472cad691407e7", + "c762c847ae6ae0590f20bbaac5ec897c204b1ba717cadd55de7e316fc29e4d43", + "4c93566353d3e95b58df01fafd6c3d8fde13488836d554aababdaa954c9984a5", + "11a3e1a1a6e378b657bd0cc88cf1dae4efa78a3e4d6c57a141d59979669b67b4", + "79c2de981ceaa12303313022bd780b4dd8baf401a1f4cd67115d991733e7b8ef", + "fc6965b9b2e5e008c6d77bcf5001c1c04042fcef3e3eea1fb893bfebd7e65f60", + "494cd424dc4d9bc2498f079b56b848040c5d9d45db19601f0ec1d3eb75a0a0a6", + "510277edc019eaa3595518e3270b866da865a6bfe08697f72fcd95adc57d40dc", + "be95815345de8abc9bed31848686217dfaa32c63d45a751df1852a71eea7d742", + "37f4fd9bfc464d9329d335f1fa78623c46a2fb06864977b206ee446daf253d6e", + "97f1e6eac82e480cb8bee0f753f9b1966db3304c370950bffb5d7da5d5d71148", + "06550f544fd92609edd47b782db1016b44f05e7e27fd937dc92afbeabb90d0a7", + "dae40643b1f5fbd5727dbdbe92a8df17ee581eeadb424562956fb1271d7c03ae", + "8543cbdf26f71d27a0d0c3ce8da135d9d6fe6c76e472b84323d5528dcd7b304e", + "1e45c2e927b9fe01dc913f7c235c774406e8a85fb0580096139328fed4e62dcf", + "a0c8b3eeb6ac218c8887fbb1ad7b4725457abb25183f36760c5a9dbdb74d9868", + "81e1d38dcd95acbd6cc78de57b3838a8f57894f0cc77191325d0ade521b448b0", + "d72ac0d8a8644116ab347b5d143fb0fcd1a014e65a1940a5a181fed9e5ecfd2d", + "1fd4605219abdd632191b9f34c2c8318887e9027c63451b6a76847be9af13655", + "b1eb1941b827c1112709db883010189faee697a8c24ce7351f54c760cfdc12ae", + "59646bfe13c852eeab721fe93ecde92250652c9c81d445590fc84fc524b5eda5", + "3107f9a0c44525c039102d50f7a0be894892857e43640276bc9e75504cf3b92d", + "7d635dbce9e7a911d3d7a686f359af5061d3b99cde3969fac185005531a0bf89", + "a72960e00a7813736ede538c9ff67ae40a6a7798380833a4aa74c50a3172767d", + "3f1d1f83c318067146fb86cf7889ecdd6d0d3f48546549ea6b692a7dc5377ee5", + "7ad9c7bda982b752e3d6eed30a7265fd70c064dd21f58edf6184f6e968274375", + "2d54f80137ea242fd5215e352864d774234961f8a6d10c84e0965d2e0c067147", + "75e41814d196790b0727b1ad111c0c4aaf0c3c6b69b568be542278e6ce4a3c15", + "361040039b3b0eed38ec956f61fef17a53a5c1ed93fce92ab5d4a7936b4ddd29", + "12435e01d100e1a5511712ee15efb1f99fe7c904bf1efe0a2511b819cdf00c58", + "0cd387914048b100523c2777e29e1f357f79ba2a969e93a4df3a81b56f4f30cd", + "535989b515a10993bd476056c6f699bee0d5a4cdd40d9d36b4e36e1189941eee", + "fbc2527a1ea28e8fe9e1a8465be85bab401cc9ecd5635a27e85cd859a6e6fe59", + "b42617ce9242acae6ce489555b931dee168a5758ed4b05e3034c9e4e03899c8e", + "8ad25683246c988d8464bca5a437a3efadc4e4ef008ebeecfae8b45cd21267a3", + "b6560d030f02a50f5d53370b301412bacf1583c92a3fdae3742f5cc0a13846db", + "6d5f17b3e701c2f421424666fb839aa9473c6aa0809051c2230f4689abfab11a", + "3f75f75ccea394c2808d1ecfcb5aa52eaeda03ade06c7fe49417b046640cb2ce", + "d66bbbc8a44b6d5b88091c22414eb42dcc771a1faf461d5d90f819eb4df62cef", + "85f6fca707531420c9d2574b57f7a780bbb9e08167853c5336f077f28abdc16d", + "26330c50475b52252fd364987ec866901202590f122bfe6b56e334f15f8a1a34", + "aa450816cd19ebeefc5f66c6503b83e1da60b272e9978124843ae6c41cbe1c41", + "4c7bb75e8f7eef11b3a035adef02bfe606f1d9744c592f1dd059f4fcb089fda1", + "60086f524b4d3723bec50f3668b2f01379c879b31203d5ed84a16683cf1f1748", + "a76bbeed6c28ab601dbf0f2a90145c5e5e5b3560a8ee9733b9d58141068779b8", + "5a4d60389349bd6ae4d461d3cee87504f21432b70aac46cd4764139db453ad8c", + "3bd76a38d4bfa0e6b2178767f1c27a9b95f2108165cb0991fa28cf69124ddcce", + "db73279c4c185f2b481d6861b81401471fc470aa2a0becbe8217bfe8bf607cde", + "3386c50d0af51b59286b58b325f8983817d01e57f569a5277a7434229d035d7a", + "9513063449036c0389ae611342347873c74e98ee97885b4bab043310a68927bd", + "290c8f6bec29490619ad1d3097e3701a8aeeb602737ebb8b096872819b50e51a", + "54778950d6d45d4637d4024b30da56326b021f6951489d94516b65149b578833", + "8c1231ea937470d730948bc2a67499b0450ad5070913c0c90fb3a8720387df2a", + "1dd8973919130db690e612a1285590250b69c5e8ebfe933748ef1972670349d4", + "a023b7f63c7c630d0609e69ce3437360753c570db016cde1627bc91fbe309989", + "0df55f18b7a2fa6ee162ab6c584ed263c881e9473f3cd453185491234a51feb4", + "3bd3e9cc278e70520b526244aac1d5d46bcd8a96434ca37e3ee31881b3e2f3e4", + "5b47aa2a67b06dd77b64de1c91ee04232d9888d70ab00f7b7b4fef05b8eeee6f", + "ec03a6bcd3156e8f8a89fb3c34142bed5c6e488c07703d33e9143e4f3bc77f8e", + "e75f9cea96fe863768201fccdf973d620831e6c98b6741b0be0437e798b36943", + "c7382d4e8f97b5fcd45d7090ada2992bb7baa24ebea5c11a8301e57407acb764", + "299d1b008a359adc12aaf69f7c76e1ae6f0f699cee736cb3a6420cae38e704a4", + "e37f665120c44d346d0ac5c3f20b7a5a1217e119f8c74822b69371eedeb9892a", + "56030e7ec782a2902ac11a67e83f27bb185ead107b38921026eef6f10837a5bb", + "3959c834cd7b06e93bd799f51a863a15098d6806b1161c07c027f2bd5844c0d7", + "8373b3d0b29f1ec270e5a12b69bee32612ab1b5910724340e6fe50cb4ee5f2d4", + "7aca55fa9f0b53b20715bdbf17f8df66bc8c14272fea29323d2d770a081f369f", + "2f5968aef93becf3114927b31db15ff6a54737f7acf6579bd69235114c5863ea", + "db4345ed2e53512bc8254307a02faa7e427529ff5484692b9e3860f5ecf5fdc5", + "3babbdfe845683ade62ca8c9b8fa92d14c62dfe5b91198d271d705aeac5e33f8", + "d389357d1d4342f9644caa14806b731c05728bdb27006f3f75e00631809f5f4c", + "214a3055ae8a61400593aae8bf3fcdea30b5c96c82128d13dcd70db0c71a7e63", + "cf5c2356a8d03dd2464242b292673fd94e21ef09fed1fe56107aabfeac4b1020", + "b0257286ca374ca5830d0331af27ecb97761cb64175d24f8367badb02113ae37", + "88ef49bd0e1dfb32b62c94d0ed9a3b8897be5594173118460c4d07c913e813dc", + "96519d20992a4833caea2a6b95a684cdb985d4acc8b770988a76789811f0a302", + "2ae8b34b799c4c9a9492310b65c1bc04892ce056be69038d24892d4c0ad37430", + "efe3e2203879bebce90c602bd760677752081584b7af24f63c11bab849f5da25", + "bec02c7967f25bab5ad8a49f152f3bba30eb4a8676ce73a3c5b3409e23856449", + "4f10b015de400f9b21ba4bff42cabebccfd40523a7bbafbba98a832b800b7849", + "df04cc115f65e643f68d462a2a0e47601ae5dfe2935ec8c5c9c548f6b860d007", + "ad7a18f0fb1c3bc88b4641050da8edf2269015368efe9c0bd65859da4a0589bd", + "8b73956bf039e9e4a71bae69d4299b6b2d8381209dc0dfd0f10f0fab6f990e23", + "6de89fb911dd49adf068e8dc06180deefa3d1026dc57966626b0485e606fd43c", + "5157dc3b75fd5b12bfb5b335e382b18b6616ee75dc4fa2f3f6dd9067fac8bd7c", + "93e6e2eb149fb590abc8e24e6c15d2b6a3923ec1300fc21159f85e76f79c1a13", + "76d09cf2c81203e5dbce46febd4e8ba88f8e091f39fa52588165b62b15fe876c", + "1f0f553d439af48fbd2b63fccc5607d0c02daf09ad3afb5e00f591e21b03d683", + "ab809043461fef78f7d3500636d30d611ce9f961db8883959b068e5fe52b5806", + "9d755aa5db615a9fe2f2f751d4c072afcd637c420af9cfe7b5f71a1a6853af02", + "592a4afac80352ab51d3644a23b6200d7f7c06e8d17386f7497af73394f08825", + "75eacf2c40b7bcb712b96f1a4f9d63eb6d7c4f8c6a9707fdb44b211731e60537", + "1320bfc1c8769df8b6f23d37bf4cf9987c0b7cf516ddfbb429281f17926404a8", + "0d18b320bb552b2468678dcea495f78d02d7e4f0510ef7d8c6f4eb3532f361ab", + "177614738143bc6bc482cca10eced527084204e5cef9e7ad504ab20a836b5c22", + "2eb4edfc03f6aee634d9fa4f8f96328dcd2b6f979752b79c4bd35180a82d4371", + "27609edd554748ccfadba4eb9404cf4d30ff10d030d2881f8ea1022d8e3b1985", + "be020620ca6de7141faddaf4fba6ec8e59e59b4a51384113fc2f2b82cffb9331", + "7a3bb8b1ba3b734c224e05f9cb6efa045534d2e55ecb3106b10b8d3557e2af02", + "86eb9aee2803d6601c5862a404c8c2f0ca8100de68a33d1185c1ca6352a6870c", + "c00a9a14b525c394b49d8e7d4401ba6f534785f570dd2d27de3a50722298fb0f", + "59b15630456bde1cd1e9cdeb48620ff9b6d3949277d4a4f95d2b7d892e5887a5", + "49986d70e681ba3acf8235f79549ab04f4e5d395f2aa2471d35950b98068ebb7", + "6557786bc2b3e3a82bd752876c21697ffb70e43056ee8f24291d287f8480366d", + "b78253dc6401f1c0fcf3e70fb6314faa56a19449c3fad189842a81de10d7e520", + "a26c06ed8c40a4cc719a1c8eab1767e4cb23b69ab4db73d200b34140fcc47f40", + "897f26735c877de27da6557d7d5e0136ac2e28158e7347324144e6c1f7319b41", + "34df1d6c623d5c7b0ebadd7e064f46c81bfcfb8ad999b5e4049d65f05d393a65", + "4cc07fc2b5fade50e3b35a8fffc535b87c4d79689129f26cdd4b44f0f421c59e", + "b8c8dfed1f3d5b3627831298dd2bfcc04125c32cc7efff22ce2454aada9e1ad3", + "7bd7d219c3ce451c9337c8ff032a139a8d45495938e3c058e3650c87f3b2d1e3", + "ac6d0d0e9af1f9f50088b6aa30aff47bb7a446ac7b733596897f518afde18af1", + "d91c8ec4d9c82dc0b334c03b663fb1f5f1afe45d44692c1630bd5e4a0608982c", + "fd1cb0b94ad2c1e8a6dd88af9e2570da0d15cbd6bf77ad63150bed3bd3c4a92d", + "5e516e70446cbed900923afd651cec1e9107272f16de5b81348b847383e1c886", + "032070d1331d8f119b392135e5ae819fc5274467830b41783ac4c7a49719a0a6", + "b838656209160f7bc271f911f9602b8c08eaa27fb30137b18a7db8463c9be41a", + "ccea6267bf91db65089856c78ef00bbeb49e9685328a6bd5a1290c16b685088f", + "925a949a831d56e86ea58a47055f3c225be19ae4cd7807d9bdba3abc63f7e4d0", + "4a79749199c4c75976e0c21becd26c055293a3b1b1573a5eca65a94a641470db", + "395374817c08c6c6517f76ce5ab1459f973a54eabc329947852e0740b3a3a880", + "4382aa5871edba8c16e6214c627e0bc9c4ccacb06981d9879580b23f9f486ec4", + "bded6748e6aa6728d328be176ccf27a32384b887d518451da122e8a2149c0847", + "bf694c912d22d81d389cb74d830ae347221ca22df384c20be28dc240bb10c873", + "c3055a1bef989912847fead45e036e595ea9bba21712efecf02120bb43b4ad07", + "494888c474ba7716f1741d22f27fc3b153dd098d4b8639e6152461217b293f16", + "dd6c422e47da5c256fef671ac4ebec030dbb6c7e2657bac78c4358d397d1cc03", + "ab2e6ddc8e1764e2d2ef7c74d64863468660c684c8bf326656b39344ad280b03", + "ef398f84c859d2b1ee52986fb2c6cace54ce196823a4d7e173ec2ebc6ce0a94e", + "fc1077ad6ed4c5f852b45bf3297354ddb167455f29a049b10495bd1e61ef1d5a", + "276ea844b5da69b087fdb67357d2616e725458b51a3d8bbc5cb3324e42f00728", + "6b64102dd2b5a61e80d86025a2239cd8d9046beafc26d7037c3970ad14e36620", + "9cce27702250a7d522e7b090420900ccd74a82bd01881bf0ac3e2657a1ece25b", + "65512b64220553b5e88c91a7817c1ebd57bb15aa6d1e88a60f1c3a2d7ede3ad0", + "ccfc4080a6889f004d4d946221f86bd67c51623ecc473b9af33fae741d7d0843", + "b943537a446ac05c4c36fe7287cac1063ea5a60757d013283f43047e987d31f6", + "f836a1d80133322aeb2759e66b2afa135a975b884273cccb82411169afe8abfa", + "8d543f596625f43359c4880d39b480aa9063936c75a702d94f0c976fd27016a9", + "2f52682b747768e91fa102428e2d1df10e58d95cfd6cca4e323be40db28e2e9f", + "489da2a8b14be3bd29bd657c22909297053b6e6106a313495a911bdf7edc05c9", + "73ed902c1d4227a99e11bd56dd9fce9af70439056b0ce8ec1ab6eca6cb48f604", + "ed61c8ed2a731bdc6a86ef8381077895282365195a010653f76bd5c25bac951a", + "dec97875df6c0953a4ca8337952b2384e0b1d534086c076945856a4218a3b0bf", + "9b6cde6bf5f1522949e61fcaeb6c2cb6fe4197118386521a95561ab79903ff58", + "0dc7ec6c6ef40f59d3505dba3e3977406be0bbb6b34584ed9f9161c41cfa2a8c", + "2e09437a8ce012b7fd7423bd124e9cbe8f5589387e3d9363e9ba019a79350ec3", + "fa1f9758d910ca630f6edb624d2e3b2885a246ebab81f04f747a58eb0bb44ce4", + "3425ffae07bf66c666a52a9adf989219031385d202d5d8c2fe6f632648bf1de5", + "d481a54069636b26222b06cf1db137d7a959acfa817e68e78a366651d6a177e5", + "6cfa4c2d5c90798df957b1b511cbfcd76104511bfc045ed92d03a13ad4362fc9", + "5a072b9e71c0af243b34546b4ac5083a67a82d973af0d0acd197b43a303f52ec", + "1b92c4ce4ebd5ee201022412254a24293cfbb9103a6639149631d94250c8f005", + "53d740d152d131ca1b57ffe146190a60d969bcf104cc6665d27121f5d68ede98", + "e1c31f8733195d7d38372bccccd5c99b43d9e2f0b283ae96b9d70e3167dee4ae", + "0169f8cd511965257dd68700cef08c5de653c4de5d138fb8554fc0affe56de9b", + "527fbf8e9eb3037955e78556fb24483ed8f07584b672d70aff0f64fbc6964678", + "a1210fbcf41ff9e4bf48a3ded124d07fd5b05699e0162e13351e86472406060d", + "8e189a285802445a40a64153e7929c0f43fe55518e65b63c7428df9c55bab977", + "44ad727b84e5c92141038cd9b0b6bc0fbe9efd735b82eb864d5aa16635c6f985", + "93ca055104e1e15b8500b23d16069288e2ed3477ec99c9cd84e68a4ff9978460", + "87a15ae58e4ac9af5fb4d0f72aed080b0b4f2b4c394666556a744fa707b43faf", + "03120902cf06936c6f3ee92dbb030cad2cbe06eb85147236a8fc55ca0286dafb", + "979d1e51fa2e7527a27592ed962a023f0af87483f76245e3c0b6b2bad954a130", + "cd998584f8fb2c23d204f71e85185a1994c7fe9427d86184908b3ba71205efc9", + "44017bcb51a5caa0688ed763d45e2c673ef04fa2a4975b7996af7d5563fae2cc", + "59a821e9333994534cca30541abb8efffbf5670874aa5bf9c440af8fa7f36202", + "7ce047ede7a19e05c629195ce8c203e7d7af1eeb7e3dbb707035fff3c753d47d", + "b388933810e9bfe3b4e1496efe8cdb0dd9a6ce87b6782c8dd001b4c8813d1769", + "7356c4413861df8eeabad94ed08450936f8fa88153bd40dfb2af960f5ae1a42a", + "f189ba6749f7ac8b608cb891dd98c2ddf9ff1ea0e32f4047c5c3592476b33d1c", + "2c3a65c3c6c53a42e5453115029bd07b6f2c221918f57e10c287fcd88b622fef", + "991a1652639904e1cd067fe0ab158df7168c11b4a96909097c8b73f4dd1801c3", + "0893c3def2560c4311117dd6c6f09517e742873a421fb7db091622a5457fbf2a", + "3f589b94014b2e78bcf295ed80bc6aaf5aa2d8cff7ed91b46c684a6b337a45ad", + "d388f8f6e24c3dd23976db4f33b7ae727230e17f53d5eeed10b59ee33c2074ef", + "88a6b522a818fb77ab6e8ac64298108a0e19de849db55a0c00953d7f0bc2d2b2", + "4eab14541a933cb5420860b6c82ed46794bf0129f46b863309e7c6a6eb4650fd", + "7ca97e9a72882b065a4ddbd8c8022a20ebab3557830e124f3d0122118dd74ffb", + "2e692b2cf64911b1cc16f88e5d3486a7f47b5064b573b3441bf92ba3018a5011", + "92739814be8b6865099b6443fb7694def5b5d2d1ebf8b4a4e45a8d2ef7bd15dd", + "6c83e50e16942dceee14cac3354a34b5c7934d9a5d1e17eea00a67115a4c8024", + "86bc4a3afcf860e379f8a36db99bc15c8b0d98e7ad75f0cf2fdbc23d37e5b7a2", + "af64eafa00c741efc18784c4cdede3538e76d1f43d8348ac3cf9ea666c6a3c26", + "ef9d9e1900b6bc7f89a4f05ac35028785c6da24d28cd180dd39a445fbeba8c16", + "93dafe51cba403b7d18bb2be67ad10ec40bcf726c70688452ba0306a0ff8c259", + "256d2410569bf83be2ae38e3cdd43a9c4e59610e9099812df8f05bd380e2261b", + "54fbcdf322514a080d204b84792708522ec0218a33e333cb4038f233631abbbd", + "4145e85fafafd487a598b383fe58822ea47ede72618beb170576875f370bbb65", + "ee89d3f1fbc12d5df7d6c80985630e7051bd02e4e84b443767ed99b45d9ddca7", + "001261553f32f5c501fceac96cbd53834bd65afb97f71b838006fec698b610a7", + "df8e4f7fe4ced6ba39381445bba32536b711bce4e597746b8793abdb8e2d55d9", + "c009b78cda60fdb4cb62b37a9a281e0b60c05b80ebc414a5af3758f288153ac0", + "0f5ea25457c68cf4333953615735c62296f66782d94be450c970ed0e92521aa3", + "72bc89ac5bdd09726305ec657dea9b7b6284c86d6d8a85325628291bdc55c414", + "578fd1b05919115cfce53b623185b01b8ed5543c8b5188dd8d4027d19ddc4843", + "3d6e81d27eca96b74fe18cb6cf6f05ba9530a596b7320feecf732c35fc0a40d6", + "bb746e7fe97a3727d9bc9fb0e07c8d7199427544d8e77dc2aa42b5800dd9b91e", + "ca9cf9bd09838f0a8bda12563383b619cd4a935d9d41bab03511c40166dfd385", + "c5ff093ffb87fa3c2403243f493a122778f1bc855b55d6de2f1a0056b65b2a4c", + "b166ec152555b6c05f5743da59f6451c1b4002ed084658e3e5d624fb03858ff3", + "1d6c57706c6f547ed5736c723e1da40d935fdc35e604247f6ed4ad4ff31659a8", + "54711df48bfefe94ef07dbd51a0b6c7ce0c1c488de8ebd2f39646f812a7aac4b", + "3c2e7983bd801e506c34b2dda784a25c53bb861f402b484a6e58c52b86f628f8", + "7e67c6894d88fbed41b4c6bc48a038626dc34a3c9157f7433f0b4bfa78d58023", + "eca824919b1fd2dcf80097217cdba28fb6d5fd25f31356132bc625ba95db7612", + "dc1b785f8534136c458bd7b9fd47c2d0b46c83e8c81e943038f744436988b99f", + "f0d37ce41635e38726665616df19809811e761f769d36685accd7e5a6ef375bb", + "2f833a1ac0e546b9bcbf6fd4da326c27d476daeb27a5c86cc47be2cdad226fd4", + "457dfa67fdbf2c60cc5be564d57539a9aaa41bce7f5de741324a80b07e19efb0", + "e8a99cc9de40c7968ba6a030e841dff0ef49d4c6152994bfd588edbe043f7b75", + "1a61832c6d2819675d80702ff73fdd910933dd58ff39a49cff3f1399b983938c", + "c8a212fe3dca75fe025bacee2a6ff367e04a6473b1f8ce8e83239d37186c02b1", + "ddffa471b4b7e4c5cc9153fffe9de1fd4ba5710aa546ed0750a8f0b35a16e3b2", + "651c14b623cc49258187075b4c53e12c95cfcc14536489f62523e2ba653d7b03", + "1ec9df410309349af8cd1c168582552f17ac726fef7be0a6aa235a3f2bd69709", + "e22d52c2aae2d5fcdb540dc2c723a72a02b4e88910ef76e6b7510d2e6ecba759", + "3d15b9b359eb1dcee3610fa770d2ecb105040ebb881408fb4747f349209f74a8", + "116b84e84330f0c65b111f97588c615357716b56a57cb8b64d1fd32f7d8e1f0b", + "71051a4f19f22e876cdbf080de30c3902ff762b7cf1c4538130b465b2cbd9080", + "13da04e5cdbc255dafe9857d9795891af2408c8e87cd475d66058a4a249fe8eb", + "9657a9a0efc5d81877e66adedb6d5ac451904a4bc328556d1ee0d3b4b5b18ad1", + "f9fc23400bf4f6c72b177d3a78fee3f47a093fd34ed1aafdcd75eb47eff1aa95", + "89171d5063833645b7a2d3a5d8193507344e503ac51594a59b98996e857258d7", + "ff2343df5e748c1125db56665c9097a8ca6f5b1ed6f413ef359d4439836ff701", + "42e13e7543dfd0e423590661289c9534cc5da2dc7ea2cabe14b0a83bc40ed303", + "9b276137271681e9568b7ab0cbd5ea30072a52065bd2832c0b5b869ab7a4d02b", + "55559bff95676a68042c317e81420cecb182d111bef2012714585f0d3b4e2b3f", + "42d0d7e3b95705a771299f772886dda5c93552d0c0e5099e7897f2d2af4c3841", + "8585ad0a8ef3add80a95c5450ff7804f50431ff9ae6fb7b5419f14d99bdaf051", + "2e73d3e39888cd3f82c7d76bc5883d631f0d34cad112af07ae3f629f9e934252", + "9cb1e7dbe6cdbca2364af19349b8803c36630ca2c251c5daff5d612885fd3b61", + "61a73e7cf07235a2a1c7f616141e386a7f608b454e970e7e4aca1e1a2b5e756b", + "aa99015b977724c082bf9d3f8c709465b04804a514e4c980f180d1e07ba8e993", + "0ce5155a0367add06ffe6df87f2806c815f299b7a788c7550acd2bca550f2f94", + "ed3927dec5965f475475e5c0a1b02be9ee6bc0fbee09a43572f6eae6accc0098", + "473bb4e405175dd9d846952141bb33bd4838cc8746e2dd22f33410fe8c93fbac", + "20f22cae7a856cc467859563451813bb44e974b0bb9324e4173ce6eb1ce999b4", + "66e41dadc9c26a839bbe01062d4c04c1e1edb3f03a80ea206514a85b6edaadbb", + "cdf6d81bfdb1811c5cc1a463a248c8ff4f99703cca0dfd862e53267fb59554e0", + "ef58ad219f7dcf2ee0268a28372f756a9b98bb4813ef1f62d71e2d96f4e1e7e0", + "fff004a751e5c1e5b2165efdafd8c5ed6f8019eba44bab8567a7f0e2616ad1e1", + "cbf0ab63013bc137d64dcc7e7eafb256ab3fd724b58fbe053fff65f8b7a0bee5", + "27138939ab87be42a9b515f84b899289132ea85c7c6be30f35f4b89061d95ff0", + "e054f47065c7cc0b82613b6bfb9e1ce703e400cdf80ea3d1a6c1b72b7af09cf9", + "c2834054dade2afd00441506ca155596f68a17cd26b941ca1f4927ee3af0bdf9", + "82e8c831f2f059bd92139df11791670544dda59013eb8ab45d9e8011be58d177", + "d81fbb07b2b9ab49476131c6759c2d4fcde825b0b50dfd1cd69d1f6f3f78c2a2", + "94e1e4d6b8d975a2287487259645b6c105ed4fd936003b3949d553319752e08d", + "ec84ea91c1d1444bdd343bf5dc10f9a79519b6d2f8917af852d9365a35174174", + "9eb32a87219a13da01fb7977881d42d3472d25d5aae23dfc0d70dc5f1b0ce834", + "397686a9964ffdf1048f6f71ed3d8a9a704cba305995bd77705204a0a93ef006", + "f9ed241c67970e3ac0387039eaa8489521c1985e837e5c3c774da06d22d7ab58", + "324f4f2f0452dc36d38504c3dec860a412feaac8ad6fb54fb0af20d0eac76d8d", + "8ed499c5a78260a8cec7f7a109b7739945086034821ca9d2836f01eebd2e01f0", + "b9ba773a73da665057c7d184d7538afb725f4cd995561fa16aaa69de61a9fb48", + "b08281c0c0eff6a5689bb368a13201c499adc5faf4052669ad366d0e19d13222", + "aaf4b193540563cf564288170ce9913e6078d446508193e7912b0f869a1daef0", + "9719e78e01a8bfa8195d8b827d25752aea1783d7c2a9733521742cf72accbec5", + "6032d0b62082c73e1c84028bc363b3f0c24e3e1011cb64ac551d3717b3398543", + "0172654689687e2305ee2606d7e84f4a15943437bcfd06ae60acea4d9d09ea18", + "5af8e79ba7bf6d4378b7883f42ebc5295cfb53b1d3955a1bcda1357c4cd1bd93", + "6954e6849be355514051c77a7e6313f56931812381b80c4c7e83f3f8033e1eb0", + "799537b37a9b13bfb01bae0fce301d1dcc9e69398b0878e9f33d8b7cf610e4af", + "839515de1dd94b558cf23e7768a80adf6b9c312ba57e4cd0fb0e53b0a28a2d14", + "72dcf381306e245e794848109b3e5e9b1fcae4c37cc76e61664aa0a6c3bb77e1", + "8082f832c53118ce2c32b48ce65dd77b4535178a5d6e42c62cea2f35e3895761", + "a29aa4f6987f7c7c3a13c654696d242bfe9eec254957333c3e96fc7fea8cccea", + "fda1cbb6f7dbff564d4303fb55d47929e553bcb008b45feb151f962b951d8ae3", + "c75d521d37cb44bfb7eaaa896b84b7b9ae3a223f9ace66e43b82670386ae46a4", + "141acfc994ade3593ed3d2ebd888431a373b5056c00c974b6e214231d96d3a2b", + "e3fd29bb1a568f424866276f7a1071c79275c530dff10eeadbdf95d0965a064a", + "2c632ace86d2fdfedbd283082ecb2b73a01fe17f8c842acf41421c2562192106", + "daf76c06abe2de31e50cb03555f29771d9992e31f6885cd77e8121df133b9df6", + "08a3ed197e73ce96e03f8a2a45a69639f7061cae07d14c0a1b1a4984ac09e030", + "1fe8a77a83e6f763338a60e6b290a9f7f7b7b9d2928158e8b114e162f611ab34", + "807dca0235c6e8186f3441a1acd7cd1d0298bbd2a2d1cbc6fe850b7c4226da20", + "c939e943a87e8c58ce29fbf4f887a91e9af818ff46113efd9539c7a8d55e7642", + "f608481af7ca94efdf15879fc269eba515c98adfae51194500f89de21134cd6a", + "ac0c11a6a991815d1607562f4640123b1ceb15893a0e19656c036b6a79094edf", + "b5178534765a5606676a137a559b1f0813773589ad86f61460c3d42442e7f286", + "13152f702c08ef3c6d174ff5be332fe7b2c6d8009ae4cfd4fa895129b08887c3", + "a6c5ba471dfb58aa3f6b7b860abfc3296dbe41cf919330e8378f0fcc337ae31a", + "694880aa485388fc7e05aa6892827a41656c6afdf23fc09c33abcf3e123c324d", + "f7124ba9091f4a32a02f66a07cbab9530cb096f512a1fcfab08dcc375bfca97c", + "93b3afbc00606d6eb9e1178d8df1fc4b63a831d80b429dcdf188a55cfebad425", + "3e276d529a65baa7afb90a9e8fdd8f4a49c694268c9ea03ed20e5f0e1b3a9fd6", + "81fc409c3de25c38e82e04f38c66598065154eb9a084ceb420390a2cc65660e7", + "10af7fd90dc81722689c2a5121e7e156484f0e2ea1cfe32688d7c9538376fda0", + "d68fda2aac6d969fa88cfc7c77069ce2eba8edb31245333a93376b4ec57dcc3f", + "183499a58e735c97f5ccf1aedac78155b5ca140250854c53c8d3b4cc2876fe4d", + "5dea197b0a07409c196917dd3a1c55e72eed4d739358ea6b912bb33f07f8656e", + "ee07547b52a93ec3bba9959ba4071f6c2c150bcf3a9a70540f72ec32a28de0ff", + "c5de3bc073f43e37a340580b20b9e3d712b07319364f8f87f85f7280d05a1d4b", + "a7f9b1127556c38a81a76b9aded8dd6c206a7ff131422d59a6d7cec15dda2090", + "33531b07df6d83718b014e4acf9d44ccba412d746b9d82a15a13dda42809ee8e", + "aef180fe3589b1e54c69831aba44ffa8fa778e6f303027733a9867535899057f", + "08e38424ab1f65578efbb6e96933d7b88be356a75b5d46f9371debdf4259570b", + "aa70ea1b2ce7c85d8bb693b4448a1e29c0bbacf46f6629ee09b2a2b03f2e8533", + "997fbc8f1fc799e329c95cf8b0e7ff249ec2f460e42cee8af143b9f36109cd68", + "7c832f9c5e991479e83ac4bfa63b29c54d0db141ae83e98a1ebde91b1abfedb7", + "61cc08e75508357a2d04aa2190cdf6a7dcac22c74802a9c267ff4a8da10a8907", + "99955aae971509755cdbbe95d9e44930ef62a6a00c7d7a5dee877677fdfa896f", + "4bb5e35c5a6d7090f2515edf1f577525300e0f39ec8d23cbcf250223e5ba0aa5", + "b011d5e021e5166be3cac96428cb0a26c0c7f1f435c7680fe0d2fedf7fae2cd6", + "809b82eb6351263637c80a535e43b251e298c500a4a06b6ac7686c001572c601", + "524bb8969737745cf75a1bb208c36e105336a90ecaeaec1577600656778ddeb4", + "eba474361fd15854109e5ca8fa4d1b88cb3e64b930934b66cb9580fc933f16c4", + "4ce97a352bd609073a0329012beff21d17775b767e732bd088d19304b041b965", + "ab49e4d013c594bd27f42d69c32d58f0e512d2c02a2477714df4c953f2524866", + "b323cea6f5683cbe175cef2933c88e33e2b80ba8761960284da6a950f71e1101", + "5a0f60e3b62fb305e8ccf7c73403db16a25e334f921a459e5bfe3f60b465c401", + "09835cf4239a423d10fea14eded775c75e4291e7f877b88dc1e2dc8811644703", + "7023c5c79997e76ce99cb6d6db7a10a0604bcb16afcb60e65e578f37693e8f05", + "6d0aeb2f32b8563f0fa5f437bc4d9fbfd35862e9859190452b6e6dbce1f75b0b", + "870e78a32b45d2cf46571d93e4a62b56cfcc07c09e03bcc81e80937980933d0d", + "b4af688b8d552c43bb06e99f602ef4cc9ac96a8813931935d67f1b8b7ba5ff0d", + "c1cfbbf9b9248149d52f30d094de81d454646945c1031c25748119290e47970e", + "d73c449292b8d85fc6f3bea86b70a22cf30ef2fe4ecb189c146bebc604be8915", + "3dec3a98ba81904fb4fb56242b636d292708b8c844108ee2be4625fb8c3ff718", + "987d7bf848ae09fc6d6ae1d152fd3997c63b1883e6fc9b04be4678cbc331cc19", + "18bd0d6a2ed71462bec2a6ce0c9200f6ba71b82dde4c0cf9e51fc1999380491d", + "4fb1c1182a3f83a1f541b1265459a9147ea9ec01d256990c55d67ce3d0f60d20", + "32bf0daaaf3496e1c7c6ab7698d5bada524836a800238c83d8de1d5af1694f29", + "576aa33016ece4b7011f7717c45f5354b909dc0fea0040f1e76541a324f8b72b", + "cf8bab9ccf6bc3025762f95c9d81f5e5d55ddd17bf0232042807f3d22989612f", + "1c89027d9d57c26fbd49425e7dccfec2491da8620ef532765b145e7a2d4c8432", + "c730aff11454585bf07e586ee9b834f7546fddd4bb71ae4d3572d0c35f86c434", + "4f918855c9502ba2bb4b4b4beba1806e93cccacde67137cb0aeb820be3908d36", + "112266a83244fcc3f60d4b267b7f790193adfd37ba1756b4b48120a9f4083639", + "e4fbb358478df8e6eb768e3e7a868121823a5ac6b7207521a506a6c6c4a10f3c", + "0b0688755f57605b999b60f2845608c86affbc9248600db32db6e89ed0e6823d", + "be290d6ff816f275ec0c731259ff6c1e9258ce187965c39061a30f2d4dfce23d", + "fc487253c545e055d112f3a86bf9653d0854934fcb85002593022f97b8d71f3e", + "02c4ca6d70338d4d635561c2be1029eea3f73394eeac6bed17a31a2e9c6e9f40", + "bbfd4fef1ca4ed064ed2949cd292b1b03c3bf99dff39852e10d8e3f984341c41", + "14352f3c89aae1537b1dd8f1c92121e48bfe634a127e057be6ba8f10ace38f41", + "10b65e8748e965f5e817e43f95133483699b043acc79b7b82a24137debe94c44", + "28a2795a7e5d59223c9de41985b7ab45fd4dff9aed5664be288380d26bafa845", + "29fd393d8d338f4fcb5bfa389d6ddb34da16624303fc427abb0693c5979aad53", + "6313e4abbe7ea02538bd2ad308a055ba05ace386111092dc57480e4768c1de55", + "1cdeaa1b612aac3ce51c63a0f51af8b49777e3b596ee8ae97655768c656c5a56", + "c5e206edc012c2b3691d07447d2c4c0c713343ea66a198e0b3ca7306135f3357", + "e80c4f1740c6da189742b69b3c655ffe30aae22ed4f538729d3d2d8a97f6a157", + "745fbfb5fc6dc8f5d8c6ac686ba06f9b5324b8a458f55f44d4ec929d6c3eea5b", + "96fedc041f82cc3e7ec712ab8da1e8cd895676b3f6309a4049320a75a39d095c", + "0f279330f4266e3f31cdffa506b5e5c5a445d23b4eefaa1ebe0daaa2b627705d", + "bdf7082eefd1422968517df9d54d3a1185653f4b9abadacd7a0c277d7116bf5f", + "db0962004ff85b638e37aa1a6d71bc5b83b3a4a8f6024e9a0ba2695affa5c060", + "46a94165a0f3a74f7766f619452767498b26dcd733ce7c3fa05553e6a5c4b363", + "3ef4869c59b19793115821a9684767fdcc261e7256cfcc9a30c52010d10d0264", + "ee744a2fddc1b8a9ffe7657d9f16145e552406e8148395f52b0971203ad37f64", + "71cbdbfcc5ab6ff43ffe5d7f44c443b9c453dc93a57486d6a7e7644aa89ce564", + "4c74b711320b1d3a3b5f17e21c763f6911b4821bad3faa7a30dcd341a7df3768", + "bdc82b14dcbc4305c835a591590f78ef1b076934e9518067d672b120748abf68", + "fe1eb475d08a1f5c79a3c1560b0709e59a114185b5d3c3ea3ef4a8613e60f868", + "ba5bced9aaeec12cb801bfa8a8092dd38c75cc7ecb5bfd4ef2c0f2c5f19fc56b", + "fcb0adbfc81ddfff8002b4e91d579d4fa577ac1b9d223146f204ce9aebded46b", + "77d5ca3444b8d743cf4f5acbb0ae4d96a25cd934d49404b608f761818fb7966c", + "cac8d66ddd9da42742de587fbc0972c1bae41bdc0baf16714399e64b501c1d6d", + "9a74f1fdb4582dca5a16c26924496a70651efebbeaea3efc58e7936a34108f70", + "449f446f67629450cb9b8a9cd2cb82989120de0dced2faa406ba43442f9acc71", + "1093323cb7ec7ccbc59e0ba246d9bab766a16e0bcff177163d42da1d756b0272", + "69d5b0148b4a7be23c8835293e4ab6a525a9fc1a06ffa2bdef6cb60cc7943c78", + "81ada4f5f32647bb0ffb38bdcbbc468db0c9663e3cbfa06341231240be768e7e", + "68e3566f33b0f1de8338ce97d1ee241a6d1ed8ec2d575c98fa1cc82d520c2981", + "7f13f0fef37b975f1128e4d29efa28f2b614db9740fe16d89167681ed4113b86", + "88a69623878002cbcdbd8b4a3f39cd0d1996a927640481f6e95b80e8a531698b", + "90e9b5946541a3a1dce9a7638cb48d24e1dcf1c4a634d02194c10ae65dd62d8c", + "b506c8de909ecf583c9387f153dbb5ac3d522c5b1666fa78312a421340de7f8f", + "266b313bcd8d6c880205c25187f350a856e15b98ffd444d52e9142ca40363b90", + "ecf127ed64b86cff58536f0a3667e0437f368d635b1689f3fedebcd97e890591", + "735f3c837fa4ec148b3675358138d240503b8c5204e9bb59f0451b106b7e7497", + "1a8855c00acf507f0e4b4668cac912c6f87b0442a2c718fbec55b6e68e78499c", + "af2257708ea89c6639a9a759a809764e1aa4cdf76bbdf1b8fa9ebd44a23d029f", + "9119c920032e3e9c9dcfc697b9ae2f7afc634c0742d135e7d799ad9305ea639f", + "c0c8a3bf8759da82b523d81d351b7d00903f8a1079a686f654ecefc2d67ca19f", + "4f8757b4f789d471c47e0114cc5003c3c5c0f7664c35fce5ac10f2e2ea8ff1a5", + "0114628870729a3f329e81a04c48318aeb2d8f161a03a0d94073ebe448705aac", + "1b27f216b4fe6042afd5561e257b76d331459535f7ae8861c7108abcaac676ae", + "a0e60c940d32bfaa4628d6cc7ad740598fffb2357902a3785d103301c38522b0", + "e36118478f907fe2712e920b6f61e851093393e4aa91a7ff04579f254d210db2", + "0af8677a8c3077ba1e57124145ad1e2a0133e9b931fc9deb08433687d07241e1", + "114853e980bc422bfe564bfaf2f449a6233c3f70b6fc04cc0f7164bb244c0bb5", + "6a5debd92e339b508213c7efdef05cecaac68602a9754251c0281a0cf3fe36b7", + "7f78c9612fb7daf43e77e9ebe9fb2d68f5957746721800984f15a03f55190dbb", + "e0f17145bb3c4c5bbb070505101b547a2891501d2f43cf6ea3ab0ef363a7c1bb", + "3bfd21ca6f0a87f9c116dc26c9d99523b17d652d443b017cc1ffed9f990df6bc", + "ee3dfddbaaf7f4f2379e1f6845a7a9cb74159a0b6c283a894650488e4b32f9bc", + "d9db149b0917972102637d460733971ab5ca0ae1f141c716fcfe6a4ec20574bf", + "a85f504b99c8d878eb745f500ba0c6828c7e7efc19d3a0251b0ce3ca32b781bf", + "aaa93c5c023a07ed263d7ae13e5f0dc13a4d2214f68e1eebaf356e4b057685c1", + "ae98ecf755c63d7e7ef202a950a1d320906c7719a71dead1a94c4e31e019f4c3", + "078b2dea83dcaa762c1a08fb9811e4c026533ba60218763af330c8923141acc9", + "562ad9c5f8d9aec2ff6f49025c2da7ed6ead34aa35d8f3f543c97f154616d4cd", + "7ceab89376b5d9798bfc07c9cf5261644fb52ba7893940d99d2bb9960b8e36d0", + "2c9db75a0488bc2b3a3eb34ee5559fdb546b08f5662530e0552151174e7f74d6", + "e914197dfd7d098f2ba76ac2aee3b5ea3231ff2338e73ccd4190c22dfbf18cd7", + "b95c2e66293ea69a0ff6fd2397e0358701d4ace7723c8f2b0b6ee7b3bd1a1fd8", + "4a78959952293d0a83ae087ff1262cd3dbd201a42f8c057c7e219b99b13ecbda", + "f4c29b2519727152ea468b3a8ba6e2e84199177c530a1df677326766f4f157db", + "5434467c6d41daaac4eced2c52ed36ded87a652ab6b48f9da11feb8dac7236e1", + "f7695629663bbe41c71f283e4ec3abc5cd04bd5fecd89d3902fad7d4f6de58e5", + "ed0706dc8bb37460f001aebeffe238350b36c12061a00de6600fd7b4869214e8", + "2404a244616292c6b3305933827cd7491186f371a587391330721af3ba555de8", + "7bf74b6cf5e32b09aa9470b4b33a1c022151762c913a0f637e241c2dc33493e9", + "9099ce78a0494affe45e7e84ee23d79390df07699985a726c651992fe2a695e9", + "f6e76e409290d0b9a917134ed355bc31045afec30da4ffa418e68c0a55dba1e9", + "f1889f1562ac73783a8913d2d8a0fa6f69fe65a7594a05c469a3ab0817d348eb", + "d6e72468ddbfeaea8f0fddcd2681badc48b8bb3c9fb1a769079398c33723e4ee", + "856a10361d7652674108e5863888ae3e0d6383927f14784763f79f13729f73f0", + "ff8fe830c116e4a0bed3ba8196e5f0cf5283a224cdba5813ef1247fcfb7cdff2", + "0693d747ac8fad26e212f63898a08212e97e3c15eca6de6897d8239f21fffcf3", + "0fdd5fba26701a44e707981f427e2787351d63c11756277c405263b10ea09df4", + "afa6fe2f34212c5584fa71438480dcbb0cbd73abd564f87357591f7885dd15f7", + "41a08beaf05c6e96779ae8eefbb6b11afdff5eec15d51951a221a04d2ced88f9", + "4998d7fb7a0a851bbbdc746adb6ef08fcd3f0538b7369d73e29c394ba92691fc", + "a718221b197b1e1f96d8f8772bbb6624cedbb9e61c27732ddd779d86576275fd", + "6e766dd46b773f73f8fa1829a07df6d37de562a25555b97111ddda343b89049b", + "525ab37a119ed84141cd4b7b63480136ea2434ce8388024aa114996b52e45c4d", + "98d9559d5340b2b9a4e4c5bb098184bb7f62828e6718fd8f4dc1ed4019b22caa", + "afa9d0ea47d84fd3b456ee0941a9d3635bd3bcd39dada4784b2b42a63300f07d", + "af99e3cbf9f8e2da02cea9f42db5f990a3bea34840604d5a2f8b3ff272ba7a30", + "cbe07223292ac33f76f19746a5552785558a051ad503966a1c284b1dae50bfee", + "c8d5163224ac53747c85e243a84159eb51445c71fb64ea87f97956db3b79ee09", + "e0f973b16a1ce9b7c6e31ae5a331a052ba80cb472c8a53a39e6ee8b93545b5b4", + "a3fe3776fc6f52e63adbd14de7e35e98a6e9e8bc942481c450cef20371eac2a0", + "6f1cdda20285195349ac7d12bc46a2203ab3eda5982aeae3fd448c5897eb04a5", + "b7f19f725827c42e871e17cc5978ca3bd898976c176fbcd4ad953323e46b328c", + "f41de62b981927b74df04fd59d5110bfb9840bff03220ca23d0b06937784ad35", + "735db51b952754a3ddee274ad495331a014063cd6d21912b044e31a274660309", + "a47c7a4b5948a272cc0fc2c564bafbd31a468bb439de44c7dc44b659873c7a5b", + "7f03eb85424d846ee15039013b48c8df8f7f0ae6d685ab9467d9b3e0821ad4ee", + "3d45c0783f788c462a08ffb5ae1130fef236eadf64d7cccb753708f3e06de2c2", + "48cf755772c12e73ccac35702ccea6785d35901609aed07188659e2d9aa26f6e", + "1ef744f0e7918e8fbda866305fe6145c74f952b8f0f7feef673d93058c1a6f18", + "e7b33939eebfe0cde9b491119d3d0ff0dcdc4d8352a7211a9156239ad8a6311c", + "44dc5f24795959052527c20d7a722d42d14c2098ec4c4a806d0335533cbb3c3a", + "b8804b10efa6e960a7a4fa5da9aab9396b07b21f18de6f173f41594a85a66054", + "e0dc6e54e89199e59dee8c36b58f927b4925c66c419ba7fc2ff0f840e43c6af8", + "01ea4fb5b9c9b3dfb2d2ed5fdd96b0a526eaf9c598133b5103bee5943c254007", + "2e35d3b42c7d5c51b845f466f2f79e9e5e2a5c36c79ddb19ef17c64b47dc290a", + "14f27ed9910e7df2af06877b4259c065e8bafc2cfb757626aed5d2a81b8856f1", + "a0a9817db04049fb670e526286c4092ac2600864f544ce5846734fa2d1f87871", + "30ccccb8acc80bef9f47e13a9981a303c54424cc4f2b7f91dd1855db8172a6fc", + "9e7361e54d92ca6ff451586be79ca709d905f352d4cad35a010ab9a3a62d1bf7", + "694b253a89af45a307dac3c4ae5cdd61b99d019199115ae04310655918d841cf", + "f25f5ece413b94e8033a6a6901aa29dd4ec2b5207b784ada852019d158cbc4f8", + "ebf192110568e2417ca6ee90e87ebe9727f2317b89d836a917753aee18b0c210", + "b714d81d16bc56d8574ab79d5463bb3d41b9b9ea6dd085626e0d33430c258f33", + "555d37a52d7eb939e060846321d3ff25e71009cf2b6a0a59990c0635f7506c52", + "445ab62ce1235499cff0fe65d8984d6a9c9c5905f32afe54f43158f7a860c46a", + "f21d8457d54e36f6912da5fab3368667b97c8928499d1ab47f6a1788bcb4586e", + "ffc79687a4aec14ae2135999023571c177c0c486381fffb9649e04818bfdb450", + "46fd259fcc1d8fb03a23864b238eb148ca51eb75de09b15c242ae6c9ec9ae4bd", + "763f432be539c5dae22a4982e30e363ed8d3c057db70ba5b429c4749f30e7772", + "021277e4412fc7abd695359aa5fd0614df888ab759d995f9153c16de31f46cf7", + "3366bf494eb3cd8c5c80240635edeb4aef419b981ca3f3a1ad6b0444f212ba6c", + "9f05899790663d01584aab95902358fbc8fc69fce3886e0fe292275ffdea0ddf", + "08c6f34473df4d3a3d95944e8dff584605bffe94c0a034cb86bf2e67014127b7", + "6267b2489a853f455615eb44006602e75aac24e63f9cef6417780c45b98334f5", + "43203f1f523ec6f8fc7e98766ea7d7eacd91192074e205eabb841e19f6c5a21e", + "b44d4de7415bed85d01abc1b30a872b50aecb9de7c64fb426388f627c7172d33", + "4a393474c14e1423ff4e6b9c9dcadd58014153ae0d4d1194672e452f7f0065a1", + "8092e1c0f4b888180319ee35715f4c87535f882373c6976dc66f9b6a2bff4d02", + "d5dcbd1e3037e1ef266bfe5e5f6fcaaee75d9aa0f59c11210e3e731cd547571f", + "de3a654f86e4cee2727cff98d7e1338b49c45cf4d6952f53320aa28f5144fbb5", + "1854363c86221fd47f8a3c1e7c6d4a6ee32b13c54114c95d0eb989e2b4b77c01", + "17e1f11642ffbd22edc41d684fb20301c749cd4eaed41b04c9ef1a502ae3670f", + "ed89dd0a69bb0335a62055599711cd0649e38c6842d6408bcda5c470d196f1e7", + "bc3ce5e5fe31349fba1f9b8c6e84ce73b6be292d5fa633da9bc02b91295beb07", + "b9ee241c973a8bd5a96dfa75911f60d25647977aafc697e6bad06d25cef785bd", + "1db97da2f10a95f01294ddd69c03e1b7aacb16c24e76deca6d4052a09cc7c575", + "bb9ae61d4a7326c018f27e0abf25a7195ba982e6d4d0c7fb54d49eb2aa3a655f", + "82a3792a82969ca17d2a29a384a7ce49160e2f721722a4a047227e034f9dd8fc", + "1448e559e3aa49c79539763bf1fc4c968d5e6474ef3d14b21cbe6f6d0753c284", + "0c00682241d9f03416c0b5105da79023a2c7f3a4756939de7ac7d66aa596b3d3", + "eb49e3832c92a0f8c5f9df03713c7ae06733bbbc91c6a44bdaf785b0768993aa", + "d31da9051cdb15f7913606d6f901a578eee17f00d896a9e510735ca5c13b5f04", + "7de30f095a1016f552d118b5300f075b340ee58b5d3dc476600d561bfc3a795c", + "b029aec1baf85c19d379ad46ad9eef7d65d7ad7546ece3edc6733a58ce668196", + "b2030240570741a8f02139986edc67dcabb8f4dee34e1e45cd7c33662a30b5e5", + "dc1c863d7346cf3a8f38614d29ab09347527d574eaa0bf5de88545e20f3279f1", + "487121f77a92de2c9b9c031aeddd3da6ba8a4a45fb6e2b033f97d4a8944742a5", + "51049bf7932c9c6ace169a36d7d6d1677828e2af93d562f40e9ae14feb6e603d", + "1c7d87ae133bcbbd3538a4304ce18b88b8b25bf4c867ed201753cacf4119c0fd", + "c4a5b24b26b65bd958f0d730bd4689bc8525ee3010e7c2b3eba3f65cf67d480d", + "953756ccb8689ae12a9bb17d7f8618b84df64cb9134698961e0882396eedd425", + "c63a2e91499f9eea0b420bea266e554389d60b3f797ef80941007a6647b2a536", + "c4ff37991931f1007de8032b35072c4c374dfa832ceab524273e051ed834f307", + "b237392038be9d89ee61b456f1629e775c0305b5fdcc214c59aaaa3028ca0dc3", + "cc85646cb2f71a8997d8031e6e61ce7202ca8d2b64e7df477b2bc4778326601f", + "ce1c360ac53a16fbcc6ef3c7c96e3a59e43961d6293a51ddba69304e022b81b8", + "ccb638ac9464d26226f33553df06f411c729453d5426693e2a426d73d25a0b8a", + "dc7f958a05e6f34df5ebdd21e28633dc411db78ec0e95b8d226a4c221928738f", + "05e18bc85b612927c277c01c48f5b70f5e94795eb7753c6768d56129e88b0f2f", + "6f97f39874f6d9a95569b7f9486a65078d72b1b57b0d9c351bf2801f137b9af5", + "7f34f66fc5ba3d4ba164b32ee76d96fad41f644fd4a1f72da99b095680d023fe", + "0902130db445f537f1c2d9a0c4d74894dfa13ad61dc0c0f0424257ac5450046e", + "1506dee414f922e58f02f06c91be6b7015bed444aa629bcbfd65a46beef763d4", + "76f2db33539d14f179239815f2a37b0dcff816782139727e2b8249d277d90bb4", + "c07bfe68cf15e3f8f9585a7e9b7cf166d66ea1d4226b14b84a3a677a1e9fb1fa", + "48a39602355971cfb4fcbd1c2666cb128f90e43affc395cfccb64b1f5dba524c", + "ab2e4110927a14edacb40a2d545384d4a206a26ec46965fcdb62497a42609508", + "b99b2a9d5109c8b9a660627c6f1d6224fe1545ee209e62be58706358c4c70216", + "f5af98446fc064a1f00141602d070be7568842bdab5ce8606586bf03826248d7", + "d0aef3165a1b5c71ce32fe0761b6c6ab14953b9a8ef23d6f94b2e5c0a262ec9f", + "04ecfd6fc44f228f7dc51196908b75d9c94183cfffbb3c4b7b5f52e30017da00", + "600cc2b96ce44a1c3d67f110f26fbfebc4ec4cbc91bb88ad79addfe390acd026", + "2ad5c407bd4aa89b12a783f321fadc086c15e5e383a30570619062b7d704893e", + "954cf698fc837a3d38382ab240f79b04d95e2500c8058433673e79fdf8763e4a", + "ef16e13bd39da0d236cde470cf49ab7d850f3bd456e60a38acd4bf76f3f7985a", + "e8594548b39707a43fa0fb0f2cbb0306e053bedd841f6193e467c0707d938c5d", + "eaf7717f9e7f65ddba4eeeac2fb34e1154f5a9ace6d691513c02d74b907e3c66", + "a8c07ead5cc57798e67a7392e9c9ac6c64e0e6681b9fe0153c0ea12375ee9eac", + "cd59afbc5952bbf0175bfc1cc1b0cdf2153bd5b956ea1beb0580daa4381b8bb6", + "49c5df3b4f60b3757670eb22812dea16287f5c79fd074d2899150882b83ebdca", + "6706eae67c9ecee2829ddfecf98ee41552618c50e3f741453aa63d5c2dde34d4", + "e009f55b8d83db36b3c02c9820c001147e6690fbad5b151173555d7714e406fc", + "6c2a49a4e0088c02dd3f51b2858bc53a97d8fe87e83c3c8b54c5b1cd2814ab78", + "99665b2bf5c29a2d2f0308e803cf676604bdba8fd60203e1a2e8cb22b291da90", + "b2fa75f71b1bc697ec28afe54d791e34ad7aa33539a497377e101f2e85fa3706", + "41de4ed3cd5d5229187329a72e6551f467853aa565ed994362df6379d01a094d", + "4f60e38f8cf866b7f0b46c0f4018f049c78ac16b1970787d61ef4d9c011dde53", + "f12ace0f61d0d2bdfd1baaba65d0b1451d623cb75d9c6d475ce02ae0e71b045d", + "2a76abedbc9018752121500663b1e2881011b5af1050e44428d8a1ca50ee7ee6", + "c2617572eddf380c22b759ad875aca462a386eed703c3615860698dfd23dc3ce", + "a584bfe266a83ac8fe9b421f404302062d5da58cde98ade391eb279f189ab69d", + "ebc17be0367c1ab6b73a402d3e0e331e1f7ccedbba87dfde547fa1c1de34b40e", + "5d78dd0f6f87d092fe08f36d5a6d25b3824c1e1c04a51b3090dba46c6592353a", + "4e8b26385394b8fc61609fa502f8edb248ea800e7fc82faf02d8bf587ad3de43", + "dffd7272d156b2af756f1140801e1a7522c1ee32b1c81e938c007b506ec20962", + "85406694e5c71a4e60d6b6f81aaa0c8025985f3197f6712cc993b9dd67aa0365", + "4acb58d46c0b533786873b1f9e7ec425f39029efc4fba8ce951b24116f2d5e72", + "af8811979674334c65ffe3ec987cff91ea60082361ce83ae98ac8c317b30d9c8", + "eba4321218150760d8aa62c6c5bcd42d87a7322c14cf28b3cba024b5809b8bcd", + "0f2b3343d9741e4472cd6d44c508404aa7aed864c9cd132260fc50dccd858ee5", + "1fd2fef2a5e296aa182e84acb0818723c4205b6320b7af1dc115390859e5e947", + "8b753b8c4e80f8d4bb63fb8b3b070a9bc74216543546808944e4ac66278bbf84", + "4e2c40da1322b6af427fa9a678601c20c782dc246fa295e5734f51a107da4b87", + "1bb0d0cacbbb562b2785cd9ac6f8e15fe62fed61b8f252723703fb79b93c0d23", + "c345cb5de49fac40ba93da8a4b5c802ee264057872f3011d4a4ed6ea2c5b6394", + "f68c1a18f9a715d6326bf185200ca1b70c37dd56d1cc1cbb64fb79e22780e237", + "67c69d3da745877e7230787a843e9e321d7c81e0610166f29fb2e8bbea193d75", + "787239a61722f023ad5dec7f114a44bb79a45892104be0a5da96cedbfcdd3189", + "936f3ee960e5fa47061f16c39c759a6a8a336831de0c7d419acb50305f7a78ca", + "ee07fd5d8ff4497bb337d17feb52fea08e0a401a89d28dd61eac14aa4dab37e3", + "886b0c10c6e6f87d2042e240fbfcc8e3cab71a4e9a3628ef7773cb57b67e297e", + "6a34a9761153df334ac27fc006e5f0a0778d0a918762fcaf09ff7f4f31c2ec86", + "85fecf81d0806cabe85a6c4f2c070dfdfdd50635dd99f4cf142cf0c675214086", + "29d5f89320a36eafec2d8bb0aecd0ddad973d256b9e2683c8cdbd53e23c581c1", + "1e7eba70ed19cc1a8f3b8bda538d958426d1242641918240544ff26b8de0bece", + "7c7d3cf20a021b8e93daa87752cb9d14fc9ccbdbcefcd92cfef205b0eb6ce8a8", + "ab5ea991e46900526df611bba5dff81a35d71135970158128429fffcbb86c806", + "064ee9f2ac5f268f2fd90f14b7cd8307cb418dfb1e2446dccf7e99db995161e0", + "ee4b80b85cad99bd14f0610864c6b14a652e1d3e812285e7600a04cb7fa501fd", + "c95b73443a9fa12fce5b8b5d61c87cadae30e64126b6f51290aa2161b4865e7b", + "6cf18d8f3225447f8fdcc5dd77931822d65b5c80d5cf63ec348fb5e90c243d70", + "6ea690ebb783e995febb5cf7875752a2dc8d05d12c37688beb2d23e5fb34f99c", + "2e2fc8be65e700cb5725a816dd2e33eafbb450fc1045dc6355b2b6ae0305142e", + "b318d77155fbd0c2c0964a98a0f81b8de14c2a264aec5141e3fb53fb98ea133b", + "3b99d457d879ae1f2c50e0625819d15b77de36b34a57cae43fe4b8743e65dc93", + "1984e81701bdda813d374e664c4f95c9e7f7562c6175024a8f921ddb3d303ffe", + "b6cf9d0e8263bfb3d67efe3fe329f153763fb5798c24cbd6b299c0e48a620766", + "73a45895b6c329984d7ab06c43b0eed13663ad9d3c36c63bc52f6eb5f9db363b", + "6a196a04a05edfbbe3f3bd08160c3837a96f7d86bc240eb4dab9bac896318674", + "1cef8c05fd00a59b0a8a2f68ce2cea7671254a110f1af1aa132df34e49e23d95", + "746a06a7ed6090a82e7670c3a596c799172fbddafde7243f1b0d32b33ddaedb5", + "dd07fe72c1301fcd775edc583d31d4504ef9fcc8dbc06d0c7ad43cd2823748d7", + "62ef7b177661004bf50c550961ffffcb51db7bbca3755d65a687cad14175a714", + "65f4d1ae33ac56c6b212075a6ba9dd5fc327b7a180e90320d90d49b75c5e22f3", + "fce6cea364e24bf9c6041163019f5401317dc4dac6c5811bb821f571c63bc7a3", + "c055d6f9f3b4e6952fe88cd5703146cf6c775e36ecb27fd867858dee57bc0549", + "e7fae3712bca0fb6110a74eed5df96695825525466127d331ae605f70504f612", + "8324edbc447dc76ba91ccd826ab4b03540a75121e3dbf7ae943240254bd66e42", + "54785225de31fcec9d2340a05ac45dbaef617b0697ef4ff66c7332e45631e8e7", + "578db3a4855f538aad162e2ab926ddb381df4150b53be458ebd2b955b50c3ef0", + "40212b346d7a2aeb2bcce8d3e0f55d12846cd99902a943376a80dae047ff290f", + "c84836cbe78ad4665d620d0468d14cac84245fc4f5ff1733e2a7bd9eaa1b159e", + "1b442ca650e50e77f046ed33ce86106df02f476e6a3202a18469911f06ef752b", + "04873a36adcd02b1290c4b1d0f3b5db5544c34d3a60330a2a0198a8f04557b63", + "d77cd8caf50b9e18d10d4397aa6e7bf1a538d438c4afb60f620f5b9ee9ea2a22", + "e5ed68f12646af31e9c78fbf99094c153f43899bea9b944a8796b0281594b00f", + "0de3b24f8b60019cf84c046bac1b767c35fb9dbc59fb306239b3f6b411542451", + "8bcfc6b8546a22b77f9bf2d6fc296d6ff2625ed6b9a304b26aa73e488a8e8156", + "c1f4f13e4853d9729103c62260caaa6e1c69718b7f1dc84dc305d31e261fd3d8", + "a3161f395541378e3b41385119b773aab11101e4fff5de77c44b3d1620e29f27", + "ecba257c326906607d62579886adc11c78ca906779f16e1a16c065a8508e63d1", + "91eec2e75a8791c747bbadb87b2fc406be84931e1b7701b87b5e212020da2a17", + "1e12b985f5133a89bc75c5b23eb779a5436fd2682502dfd1e224899a3860ae33", + "464c824750befe11e7df66e679812ed7a11475b623ac191c5f0ec97413d57d7f", + "f2cad17b59cd8438d526ac4927eff385dc25a72f224b72227b963a1e007831de", + "a80f045ee08db87e978d980a8bbbe9f8e8dc282c65e8707bb9ed4934270b5de0", + "b9e4238b328aa23a94ab3aad8add8960ee7c3123bd5d0b395007e434d4d874e1", + "def9b1249e092dfe87d4c921a8f4ebb94e4e8bd5bee3e2ad82634e455ca6a2e9", + "b0bd8ebcfc4172b500adcb963e4ae81a859f6cb75dd936f7996f49de4ae53f10", + "2933753180528291b0e6506c52635895de32c3d14e2f59e2656c018ad1250312", + "8412835b40e41995d8c10dd832b9642c2b9bd509c098a93bf0c89a7a1bee3213", + "41eb92e6cf73e0ada34536c7a393af6c3ef2834ee5ce2d61e2b5527aaaa13ae1", + "b69ece5c3e70340a547cbb07b7bacd9c70fe9c0f0d3f5cae9f1495640e7ff3f5", + "cec5c555a7a5115185100f99f8b550c42976a7e0199eb9edbcc2da25d39efc06", + "c7f03868017eb757bf18cac5cf65a0b0344a1fbc97848774afdd30a3bcf42e16", + "e9d5695c47724610b503e4d35ccc2001e1eca88aa9a082458a61b5a84a79a75b", + "96728c7639740e6a9547256953251f4219b0082e5a6cbee3ebc0655e3b859469", + "c352af04d1bb43b0c9b7f039f64a79893d6586a7d8e78cb2f5b70c1c4776266c", + "9ad56318375e00303fd3ab2ea55161ca1b9065b870874e839b8a75380e94e86c", + "27d4631b28d42227aa9a2c23f1c62f32429b1f23b9b46da0dab641585a94cf8f", + "d7af2b97f4fa048b82babf059298d7d347a66718b47c1a31bfc228a5c1c3e499", + "104e04fe8ec9783984b99112f7552f2f2642cfb786c0b8c138e55563b2fcec9a", + "bf8a3f79f5deab9789a42e17d8aeda65cbf99b8bbaeb3f849ecf6f58ab0beccc", + "982b0373175dd4de15fbb5ca3c11ee5a3ae33b58475e307545049d579f9586cf", + "e7f6f2b5efd740eb6bc9b4fbcd2f73661fd0e0ce5efbaa213f22d3689765ecd5", + "c6b4494bcc3ff21dad08eddb45086a5214fd43d660edbf3bb2d4b1d6bed917e4", + "14c4bd296d35b09f51639207bf7a5136f5cbb48fd6ce8cca9f2ce276912e5af9", + "3781310d36356fe0c65a1cce2e81b7d98447882851634f9cbdc9b9e798f8df15", + "1e32f29b59081acb8c9a56e7f25a313d24fe66846d91e079c2a6661294b52543", + "5a01b980564073a7c8a5f4d720e7581505d4fe0181a64a561e733416f98125b8", + "9eb3834caa470f0e3ee42b8822449831c7c10c28f1da739d21c6b29dd8c702a0", + "539d65f179517dbf915e8022c3bca8cda8f3446956af0c3b28dd4e60cc49dec9", + "cc992043c800698e7b75bbb01c0b7eda3598939d682896bc4754b3fde803f4d0", + "636db1331f11849c5c923ab8981b41dd8cb7cbd0432683d0ccf4d685920003b1", + "77e1304624ff61ba5b6486990e13a053c6aba3514ff1883a2dcd8472f26456c8", + "c56f45719e91bf7105070881fddf8973d5514ad070818ea83915dc3d33a2c830", + "8f1c372d8b0254f08739d7621313d3b42bc95ccc6b211353dadf04dbf2a94fc3", + "db7275f513f61863135fdf068194200220c8f6244edf1198bdec0d14cfef0504", + "056c424aa2cba081163b651b33c73c214621ae92582071027d687efc60e6e873", + "b8da34f9edcd755179faad8e6c58bf87580414b8b6ba790e197567a2cb9d7ea6", + "737962b8064d5a75c04f6376a59f71c78881e2f9e44c90e3e69fa397f820adc5", + "25f4f5df6745c88a7bfbd74c5817e8036a07a40c0e4f7514897446c3a870e722", + "566275204479075beaca1235526a13e783374cfb84b4a67d295285c4af7f3e4d", + "77a367829a9967fc524de492d9bfd78f2c3839cb1ea0eba605548f9e85ea39ce", + "b898bb3d480d30ca7920d477d19cc87dde2c3f1734c578f80c33b1d4bc0d51df", + "b35cb4dfe7b237cf1c6cb918418dc3707bb204dd78f8d2dd63a7b59dfeae49b9", + "b1003baf7b06a51fd6d51fa358d38076944232ac3ee7b0c2e5eec92349df105d", + "53fa48d366348c6d4f93f662d3c4b408af440670d040f590e51400a47f1ff661", + "7210b56db2641baf3b109b9e40751b400947d935b2d59898aa3555ffcd57c762", + "919dc0b40c94f02a1fafa33a1be1d83594343393e6b43571651030a8831cc1a5", + "e40d2962614ae2be6c30996b88b75df61f41cb857ebd9cc0081368073c321fcb", + "1bf4d366bbb5ef13334ec7af25e0bfb3005271cc5cccd511004548dd8178e7ad", + "3e42783f54b2d513b0ca6418810795fcf61357c684f49c07ae58b6591cd26d95", + "7253ce49acb602fc69fbc96691e7c48d8f3df44d6486ea21dc714d4dd6566681", + "d772d39e307fa754669d12c56d42eedd76663b7f3d6bf93d8eed450451fe4e9d", + "0d0d4131eabb46aba11e5e6b812bc23a9a2a8432bcedffd8a799183e6356421b", + "ce28f41e9c8acf114911ed62d029a8083e8aae4e16547a4d1b62279ca11acd47", + "4bf1563f3428399cfcf462022fa5166a6952d915e05c4c2c31fbc49a7a58df9b", + "d4e9ee5c985df835a609bb1da6ff9e4207c7033829246d4b794768643242da21", + "3516f898e42a84f5c1c12a1be71cd29ddcbaa6391dfe01a9fa063861298befa7", + "327ff6a6f97e782ca1d6d8ede7bf69d9cdf6267e721ee8f43dc36b3b1f7c1611", + "8808af9924b21fb6ce3e5ae24ac96c596da8f354b26dd0e7105642c2d8e81919", + "7438cdf2573721bd3e8517ed608fe7455e0f2e404bb611472c5b6e7cfc4981af", + "42f6afc5f77659c0190062fbd8ce1cefe76a06423191e2fa4dd6b6e2fd770ab3", + "573398b6cd27bee93f8b59f48b039e6de072ad5c26cf02b3d59739800a4a7d76", + "aa50dd56e70a82ace8d35056131bb0b214a951b75e2228b2153bbe9fee168c44", + "f71ec9aafabea43054f96d8c5177d3d0e1417a787c89c6d8df08043978cf3f90", + "0c9910363422de13dd52d38625f621b86573ab5d07a9fe89be1dd03f64872446", + "3ac26cd816a3e1003ba8812d1994bd1504e9d2ecf647d0501ca539bf6ac5ad15", + "5bb93c24723641553f6d466849ef94ce787b2844e53c6ef6a9c115661c673edb", + "2b3de87839ca801c81fb52937ec6fd32897738bf44d6822af4243e608567ca7a", + "543bac132a39be5b80b0361ee8aeb6ba0d38c92c85a46599f82aae801ecf0697", + "5580ba561a7e95d329928e5533802f2db6afcedaecf0a87d9d66aea89a2e3e54", + "7521ec4cd4f7084672ff3dadea0b077d9ab4e8b47051f3a899010d75b4080724", + "35460c6b65c106521b15e59bc614e34501a7f2240f5a2216d455f68431719b53", + "a4e62f49e92e40e547f02196593ebaa2a14a48e248302d8829340ebde8390009", + "d06b6e3d26d26f6ea4f7f6704f43a956d4bf9371ad4cf1a2167730cfc10ed3ba", + "1541dfdeae957a81577756b764a8b2f5e67976f7b894e1193d835d11879dd139", + "d4ebbeb3dfc74c7ee83c3dc1707326d6cbd0f64cdf023565db60f5ddf09868bb", + "618702c50fac9a4f4a1800f0ea6775e59016b315f09b48efec61f9967514dfd5", + "83bea886b28f76f6a91afb8ae41553ebcf4beaaa2d4b90838204f3ca853f65a1", + "0addbd4b62d7ef4e48e89a56f7b01942b63005f23350fd9c8c1b60c95adf7efa", + "fa4fcfea69e2d01cd15390fc83119b74ed51815853d2b3a8a83eb85c3e030797", + "ea4625a0b1ad39e3d5fb0c99f1d82b283cc29d4f85c78bc0d851ed4ec0ff2645", + "48f2b84fb3250a22e45592105ba37479a2f6cd4213c3acc1fafbd3b6aacf0896", + "78a2bca5a510635ec7ed4a7c33bf6b039d0132dca90b5054588a8e0333f77c1f", + "9db51777eb448511ff59c4462107f5291138eb7efd25e0af268e3182f04dd6f6", + "d30d23e8e0b1047e7f7044aafd6de9bfca450f9d2ca99cde8460f9b10bf4286e", + "f00073ccfb579dadd48515e7d715c78188485edcd602b782c78393fd05c6e8a0", + "17a01d3b9231291d2ffd653e22cbde907a080d39f80d37a207e632714bb2e5dd", + "0c4d196ec6f666ae2b565616f09befce3be3a68c9729b7a951bd290315ec04a1", + "5dacee9d414e799604efd5d7d64577ad970efc4a6ccbae6801854e47deadd593", + "d0b3b52119e81c10f6b57729e9445794a57fae248b4e197cdf38043216e99018", + "d1aeb74b9ebb2195ba80a68437e50526cf7c235fa1160ca5b20e9026985ba67f", + "1e065ba14d58ef7e62f416c79b8e42eaac354187cf85872ce5c41e19fa8372df", + "038308b6ca96a25924fe25a25b43b5b1d23432a2f126f6693d060b980890ff15", + "2c11a114bdfeb60b598cfcd093e26007c35e20c2a7a2cbd9394f6a347b810652", + "ee4cb548cfc6dabad2686b7ba950a3bf0720c709e5932ec49071d7adad35a40b", + "e5df4323a622d6ff675b630b0e9007c794dd6a0b677e073f9820e38789c46a84", + "f13d67a7d96918859a05e38281be72458d78ab1393682bfb6fc1c593b8c2e02c", + "395061b59796787e0afba21d65e389767e1933b1c02281b67cf9086f2530cefc", + "3607ccf8e398954c5c24431811781ae433728175a20459b2ccf3b9512d895f67", + "9b064e168feed8c3ac886413f110f76c8f66989362ab5e0c37e17ceea3ec87fb", + "eaa53a1e5073ef1ef9412509e4999ac003e8e8b8efa565a5d15905b2ca68cf4b", + "41766c8c08906241e385ca9f991c5c54adf6b8f427f4f0753acf5ab0c32e4f0a", + "ff1ab3fba8ea2b383305a48013c636a07ec1f4037a7d91b88584838272e58035", + "236fbd5af3750b0e9410585930dbbb1848ea60f1aead2b72815ccc251b48704f", + "5977f17fefc78327c6032bb9add0e027ccb4175bcb652a76b5ac4e16fed4e2eb", + "b3cf744ef8772c1563c0e969a323e9810c3dfdef0faf3b1dae4ab1260376155d", + "0ae52aeb4143b47663a048d47e68ed2f060d055c489ab71b0a13e754753ca140", + "6016d75b662e5fc231e05031bceb0769a604c410eb99a2fffc96a04122a1268b", + "021ddef8f684255533b9f6e2d6b5f2132ffea73efee8ee09ee8a1c23afe64199", + "08600cd51e80e4197fa7af00ee735b55c2cdb5f536fc639e82e38810dc59df52", + "aca1105ea24f8fd68ad6a8896dce4971fdc03b1a6b88d5b3dd8d0f79aad28737", + "3a579b8fbe6e5a9744348825175f38ef4f0e5649be1105fd8246c18756ab2d93", + "d1fb6eb15064cd0bf7ec0186d50cba0941860b37ae278f50e15e4f60bc8bb088", + "c084e05c042945e46a9ac94bbdd5c59f1fc159aa834c17fe6cfa5b571d7f81e6", + "56f16af2b18052605e492b7be0fdaf36b7914b7a75bf2652cf0edd079e5eaa72", + "62116b58d90bbac6b03d3989a7050a7a15f3ce4dcb30c3059ea19a5d65c56a01", + "550dc349b7a5000f02eaf92302401d0a94b14fb907a028e399638fe8a76e0329", + "b5d156b1a81f688fc6bc65a14ac05edf905f1fb33e0b2fe4033a91792763197b", + "30bd90c5673aa42f8a06d6f04e40d7f1dbcb30848caee1abfc6aeda0bcb3d66f", + "497435a6eb61d04176d9fbb53a530183f3d9ab4bb135c6bd50a44fc802a09e32", + "7b68b643276b992bae432b76a7300fc123ce334672de9b5c1b82f0639cca6e27", + "5721737348314ce0dd4f08102fae185b632bb0877f1da7834602c01539232557", + "8145e31102fb201f30f3a8177ae1d9464e4e6c7a4ce090ad1dcce419c1d9dfdf", + "2a7e775268d361ae72bc5e04e431bf25dc40f74b15f3e8d8f43014623b0eb229", + "81046245c0b6c086cd67f3e779894ff5371271bf38985630254d065ffde50689", + "c010e6d9944d813e732da5279478813dd3019f9c537ba08a96993308b0564974", + "fbe4ce52a00869f7e059787995797d0b3d9d3d9bf588b9feb7258d21eb024bdc", + "ca4c078a26aca6c68b4b1ef17fd4da6aa12507f8b9d6f72ebd5a6a0066a4fd11", + "ccb54d6447d3fddec19eafffde0974a832d1ca8b805fc5a0c146aaa5cd9b64e7", + "742b02475cb61548da5dc689952d4fa0f80fda853c9d96bddb9bf5b8afc4aee8", + "b67559cebf5e9934a8689a52d292414770e9a6bf9db3cbda23f9732bfda22071", + "17359758022f0151fcaa1a3e8800fd9c5fde019b0625724e8ee2b9964aa04995", + "6e9477640a4d73bd88113c669ad715a97eba6d1f469bc77b96e8400f49526c07", + "95e311a8b0579eded2cb141e668575ae16c3ccc08daa2c5eb8c813933d99d93b", + "299f623e632bfb66a40b227919b4c6e1d478b27bbaefcdf44825d013cc3200d9", + "cfd57146732506b9e3a11b1a7693e632b38518f5858cfd621a9f0cc85ebed23b", + "a027edf469dbe699592cb03f2be00d67b1d7194fc59ed1d09c74cb12bc6df842", + "44f37d5c529eafb968e5c9740848c39391a18ad9b098edec9cbd39adc53f9fba", + "e21d80ba0c5e651966b3a72d79cc2ab6c4a4d8f6c02974d1ee042025df39e0c9", + "b02ef195e60583a027123a39951fdb7d4d09632990b42cb22eebaa109d3b9721", + "0db323b660ffc7477b973036621d4589f36d1ad168c733b228e8c6d7f767951f", + "553ee2e5e35ffdff4f6fe2d64d7d9ed2a61f98c1d0549d11e319dd3c5a9064cc", + "c18ed3f7b9ea49515cc4b9c7af13eb704da26ca753c59a6eab4c49ff9d469eab", + "6515fc5fdfdc8d1f57be467e708e392340c699dd9b7265c9394f6bb1de2a2a43", + "eb6b84f81e0b524303892b150db130dba26da05007c8be7e43237f26a8da0dce", + "5ecca5c2602f52bbe5f9fc623c2baf06ca7e2c1c80d4e03d6075c88384bf0bca", + "69b716028451c9d802628471c4cdd7c1c5e9946129199ee1f61c26636cb53af4", + "a9ce1bc2392180e98b1291b83ebc59f6766c24140c3b9c9f42dd36c5be01d395", + "c1859abe94fc010b7e7f22f81afbb34fc4c15f24de72571cb857f985a11c2a9a", + "779f9b557da29d18eb004843ef52718ba9ad410031603dfbf7a6bf69818f9ce1", + "98a7ee894ef4e57d485673a637c9692e5d73099a9033de92c5a0e516ee0ae179", + "e12e81e7838556f028aa6a67e082be3d6eb13fc6ced435669dcf0ae8babf3854", + "65392c83cfbc8f36d238b490186d8e6711f2e0790aa2d095d4563cc75e153bcf", + "13e8c04ad94e402e0bdee8827eb9cd75df5b98d8f57d97d3cc7306d6feb497a7", + "e59ad528c955b3b1954214075408788948cfa95a773c27f7eff68d59b223bc8b", + "b5c72ba630bb7abc011e1293d600af1d06ec49345603a910b636105bb5921c65", + "3153b48fecbbe805424fbd5cb30c3ceb082eed06033c4804b7583736f785af97", + "c00d77ec692e9250b8be492406e6ccbbe447a76086932a6019e73a031aba0144", + "a70c0a8bf15dc1e97a2fbc3bcf41d43cd6bbc00467e1ccc5c5f2973f68f378e4", + "e3580c38a4276bce5082e80c967f22cb0e9826dce5b9298d93e4dd8566893935", + "2df36a8927288a6c179ee346dd550b1a265cae78a1ab929358680ff44b5b9819", + "129248427ee12c0a8bd1894c6e36aee508c3d642ad39e37ffe24636c8d484cd6", + "d55bc826987c61a80ac5c394fa788215969b61f72b97000a89e05192d0a25f46", + "1a5972236aac4783a433a6f21f50db6ec1def940cba145ba83536593cdbb2dc0", + "7c2c1a4220fdf47973d015512da48b854df96727cd73395edb425b86920089ad", + "a837fc61fd9ee4477c09f427c81e75f6cfda6721928c96cf278b4ea5b340d693", + "50c7fa3efb413e1e2769484aaa3c1e605cc5fed0a74245b9441cf27d0eb476cf", + "d5e4504aa962d112870ad4b8de8263d60a3d629d3ad3a9d0d9e65653459e763c", + "3f0211d80525315c4c6bf2d2ef1cd1d0318209741277787a180fb5854f01dcc6", + "0b19d35c2956c44aa8c43fda09c1274a99f476a32adf880cf7a81c5c4e81da8c", + "6adaf73425befca35d3ba871fe23bdefb79734fcbfa8bac5aac58f4d5c4a0571", + "8e9754711cf80faf4e4c4283b4db817a10f1dc0e78ce8170e553cf1f8c154559", + "e5d8ae6dd602d97012b331ad891d3e11a730a0d8aa8e6ffc7967558c7e438362", + "97ddd960da3da3ef0eefa2fe71869fd1a6860e7b98fcfd847fbc1d89afd69e9f", + "874a90cad86e77b73c15600a1f7605558979cd9150ae0bb878ec3d6a25b84af0", + "5f4904268c8869b1a2600035333ededb5dbf650c09c3359bd8093b235947efba", + "64938728e1068a8f7aaad0f2cdb57bb780b0c759e1a04162e4b402e7c73d81d4", + "018eeedb31140f055b333e71dea1009d11b9b23ae0bbd2292f9dfa965c843211", + "9efe7d7b74b181340188f0e1eac7ef21f52a335783580e485975802416e9e47e", + "9afaa8d82b5a16b08747af5056a432e305bc9bf05be80eba8da343f393ece844", + "b0351817f0d97fbe7b6e4e14c3c3461ddfd5ab152050a9addecf1e9ed29a223e", + "ea6e879c203b1f326fc19c3e2e0a14f3555625a6a652e56fc0475fc971830bf5", + "80fc04aded449b244b98d5d99d65ff6a2aa2f69775c0b36cd34ab65a674f0dcd", + "461c7809d96dcf2e3753d4f099645e12defafb0b7cd2ef5c85364a2bd4679dbf", + "f281f0aa2045ee0f7c43bf816f447c97eee546400b2964682a194b6fe96d3434", + "3c04377adf027a32d9d909503afca0fcd6961cb5c04d7b966e1fd881d2726f95", + "c9530008c7988d5b127d483163f13efdee3d31cd782b9d63ae20c7ff68e9ee31", + "0531d044d7061318c767a024ddfeaab62fbd2c53dbe53490e8bb7656d4b7f139", + "836431d4632fd48bd905eeb26d111eb110576d35c3c6bce370e378db46f8e56c", + "ab141171792afe6568421c9c60edbb98e3ca64dd44d688decc3ddca2b051a735", + "fdfce962686aefe88b5ea79e31dccc49aba4e276201d814a1afb58a77252473a", + "7cc12c83e03e5fcbf972f59f788d18885e10299a10fe31b6a136576c61f8c54b", + "e808a58df64b864aa604e3be8a1c433cd0dbff5c221397c90c36d7f93d8f85ae", + "38fe9352af515755d4e9f948a70199dc0d2dba540a193855544787c770466e24", + "46e2a363258034abc3cbc68b08965113a1c09228383a17e8f9f3b0441f035372", + "325b144f0c6ab9a8a4f22cd24578e34b2efa4a2a54ff56963cbf4506ae27a995", + "46807bcb0a96155b470d8b3bb765c4e29db561b7683d7a89ab39ea5484629e4a", + "12dfd7c96bfc4603bf8ee630c3291a55b729d8ba06027cb95938951e78e133b2", + "f3a6855d16a7d762824243f6a98211579a0fdf86a62f269114eaa46db7321244", + "139166e08a2c425de98813c00f08163d19c25860c42654c5b8ea9c0432e783a3", + "a51206a515ec99536566ff5d1601d86b3b7f3ed8403925b059531ea65c56ebdd", + "831fb7bda2ed3a6fc2dc50cebfa59eba351dc6cf89637dc1a4f308a37cee7641", + "3c81b015e4f4cddf26f79a121cf885882150ad25769a4eb73840dc8d1a2f7820", + "65ead62297c057de6deb888aa4c4d188624ab38335fd79ca547d722b60296a58", + "3ebc4c9eafc151875bd238b7b30f178d1a08900ee8ea81c9c9f558c9739bd30b", + "a4949228b503afe16822aa07324143ec7f932d36f5d5b8cad85ea780d3e562a1", + "225bebe1b694e78e535a22a6d909f04b5f38cf57746493474f1ba07fe847d6e7", + "fe73ec1b4cd52ce96b148c6e2c2bd66c99c201ae9804243e673a2c95fb882869", + "8ea681900c43e249cccfcf1e8e693cea198ecccf6749e8869327751ec4a015ea", + "6d98b27801b883d9a6fd6e81af11b54c60d867065c7bbac9c61e649ea123cfa6", + "72621af478923835f9296d17ddf737ad4b29dc3d4a5fd13e49655a2789b81d30", + "69a4f1df3d00500ded6692215c541d809a80dfddf2e56052b66946b0bcdacea0", + "f256951ab499e080ba9ff7ee6341ccda87055c415cc170632213f6737b38833b", + "fc35a1dd672af6123a3e292c5f97ed7fbe97b3ffc0cb319700deac9863573642", + "a4fe2a56ea22b37ec8c96ad6e3b7f7aaec31c48555ac267abbdb1f943e4e7283", + "a62859aa011c3ec497b34c4a17199aeed092fdfd910a606700ba8ffc8d554c94", + "f4fb5c2941c7e2ca79bd4a84bc49fe23e953595e028e8370052222baf5dadbcf", + "4fd931cff0fbe64921c41bda42905c4100dd77274915245c26fa4e4f33216945", + "4fa3da0f054c8f81c0198d8d06a71a00573afdd1f6d7813b4032bf4619bbcc75", + "d3c61cfff47cbf9102562a0f79274c56befb5e8915c34c0a752c3959ce6cb3d6", + "a79500defa536a502485612b66ae796a47634c60e1135991b11f6d8395a6d9f4", + "7d5871e1e2d0ff73251c994f4c12be77bd0e3965f32c6fb8918f91c73f9ad8ed", + "52b8ef03fec6f9b695e6c6359e6d7ecec3574370bae763d741e1318d1c855022", + "76961ef5c34d84b1080f686facce3539fe62f6d385be6a06aa4754444ee1099e", + "043689358e36ad7fba665eaf67d84e59b7e46ebd8f1370fa3e067ca1259d9659", + "440dcfe3eab06bc84c1ce90a8136471dc45f5c39ff4440b289a8237a08abf36e", + "048eb77e432c8edd50d69efaddbf899a2854160ba3cee2fdd2250f0ed9ec94b5", + "d554359f263c3daa44ef37404947edc4db626eb0757599e46aaaf95248f75e92", + "ba9fb13891256354a35512a2079f7f2be83483c16c534ec114e47acf5bf27f4b", + "a5ca4532328513420bbce1a2d6b2fcba649132f2bd90ba2057aee29ec9ceceec", + "f6a3a36cb04736406ff4a761f343db64f4eef11e99420592e0fe6839b6c257f2", + "eca2ac664ad803ead4566b3512eae5287784bd08ae0c93de68eece18b124ad57", + "c537bc2ca3a80a890cc2fd302468434666c2c785bd1a1ce396af147248e0f6ba", + "809632948ad65a6d775ba7e64578b91392ab08ef1ff3b6cfa7bc0fd144def7c6", + "3c6b8a3ffa8dc20801d6375db4fd56714f745dc40349699e9646dd0f8eedb076", + "060857857587659aa5bd5bbc517d9e25311e5b51e97d96f41867e2c9faa2c429", + "172517da73b2d673fb0e6dc041709ab3bb69b4650a262a16b0afc380661603d5", + "bb72db2f272dfb15b41dd5c6524b71ceb4be05236a4bbf8f1ce9d043cc25f167", + "4503e19356347ebef5ded63515980942bb2fec347e347ad4261dbe018c194276", + "064a242eea4d96ce4958ea217403d18264a06d58f14325fab5643f14778ced8f", + "eb1dd36cc4f1682e4d52776c5f18d0305b8028bab4089a60b5ecfb6c79e9dfad", + "b8b647a1598e976d969508f7b469d7688932e100ab9d4857d11c0e278e5e0648", + "9b9c5476223992212735d3dc94f6a620537b27097010692b747579d4910616fc", + "4347525498c5736f704c68ddd750d546b1a7d8aad5e21df383f269d23790fc16", + "a4790b074a32a095823d1f04ed4c7431ea3f12903dad24bc87e8857c3eb3230d", + "7d49d67e5ffc852b57c001b79aee02ce51aec763c6e8f42d11b86f29c6e30954", + "056addf64301c80268fb5a992dcd53764951d485dabf44e72a2c1c4c9bc88873", + "4ce3a3f507bf2135849a9e33d9ea95080861b336f60a3d5bb7d855d6a15b8e98", + "bb9dc85bae6073479edd4ab761f7b4e74fb856e5d3f4c6fd49d38f0e9466faf4", + "1fbaf569ccade4e11aff60a3537815afe2c557a62b35f1112d473a2c0c2a7246", + "779ffa28176755d8921ae7c3fbc7fd4c632d74a35adddc97c9d6c011df2897c2", + "aa5191929d42505cb0ac2354c15c0635dc37c5ee48212f5bda9b9661933d014b", + "abd39cb106af021863cf6e6068ba2fbadf3bf8d9011dba6c98d4a290898965d1", + "03846dd38daf75353150df8f8af05f1d13e0608594844c2c359b0eccc464741a", + "056dbccc760ef9d367183247c5eff723659641c0124ce37d6da3c1dcc1494a82", + "01566da2d3b930974d7f692742ae21198a383ebeeb107ce7effbe10a59080a85", + "1e65bed57890d96e78363ffb8c26b27fe2f5fce26f33e3c237cc22e71654fd7e", + "47361ed66264766bf1ea144589ff7e6091e2c88213c3561d36ab7d2e6126e71b", + "5d545f7fc28793b7bb810cb8db1279fa04b6b494a92e36814fc1dbf1fa3f0839", + "4662ebb732843da3f6282c83a3700c667d1dd6df148183762590d64601dddf9f", + "f1ec29ac8465dc2124330707cf94546934f0e941d753569d4f7770c478c8896a", + "91434f1b93998eee26097917439aebca1b71f7ecca717d16f7b5aa74187fc717", + "7749d352f8844405bbb217416dc07b98562d797cb5c48f80bc430a74ac758a4f", + "4a64f17c17442d38a889f45a370564f791cf9bbdc8c704c36e86d253f0ca7f3a", + "90036411f41e14383d491359f2b491b41e913cffe37bbaae1c425b67efcfc33d", + "1ff3c1ed5cd06c702880887206c287dbdad9fd69736ffa819757a1abce6605db", + "26070921122e35a6f609e2346725a765e54954a977358318f614e8bdc0f3a079", + "37436c5bc0f058ff19a9ef35ecc4cc9b45b594f90fa4dfe43e85d253457d564b", + "91526587dc807c6fb2719a30feb6654a7cd7a79c00851c7c10b5911174be3d04", + "e5f4cf3101f7d76279952ef60af068a231981f689c0b7a08463313bc6d8e0bf2", + "8882d7cd046d1f6fe278798d73ed8835e629b2f83a00d23a76b009c47a1f87f1", + "2e7069e27ffb2c4c3c4b4c06536a620c3e1cdfebfee82f526331e0fb91abc20f", + "8e9485d6d59fb76a8927b2843c5c23b1f8d049f6f4a81f16978ff63bf2fac6a7", + "c2080263ddaa96705019713098a3ea98525ccae454cdea0d2643df38c91740f5", + "b29c555d36b0978984d53f625f2fdef306c7ae3d7cde015f35325338b8401a61", + "14f81a3a89941fbbbbfb314835e93d8c1ed990260942d207588ceb7d1ae5e222", + "ac0312bfd8877a49f9793622aed36719b8f4552b6ba5f5c617259c31a7a17b7b", + "910c6c0083b32fe4bed0bdf72efb25eda192f82209b3d37a3e374bf8055adfc0", + "36c2ca7d3b42b996a39f3ebf277d12692c3c4f4bcc6c30de54bb81ccec8f2b96", + "cc5ec0d76296fee491c53d409f53425ffa2d42b2eb189e1b487200f7051631a8", + "5fb0991ae4afa3735539acd619f83cb5c9016a56098c85fc9889adccec27ac24", + "27c31802c8c9803b0b1812c855273aef3845812f5215339a24dc0a00e4bfed40", + "15ac5c15bb2cacd6a6436125321e45a06b795dd33ec08d2c779259a2bdd49859", + "02d06d9a8b9ac486a2e173acf41b97c13a1a771822b21998cf4a36f78e16566c", + "ec562b190db8fdd39dee131b918f3392106143b7f4fa5b3c48c1fa3c71d97476", + "981e55cc78f66d303964db31bad8077a5fd8821cabbdbe4414cf10c6e219329b", + "b1047aaea8c3e0518d74d0e7adb92c0918783b45f8988170a16b07863beec39d", + "7ed154a1e5ba60f609d7e4a676ab1e38359727ad64e7b4d6aa63fc1748c3bcb9", + "b9412ebaa4921a364b9d86cc7ebc73531c513f8b9f5930a6af01791a2bf98310", + "85ac4c5b7dbe51a2bb7caca9c201a122f2e53b9002ec53eaaad449de676f751c", + "60d8683bb99b347a7dc5fdc5fdda1601db9d053927db44192b2aeea6db62891e", + "a91fd3e5a6624aec54837852d0d03fc720b9d1ee030433c55534389bf95fe93e", + "a7dfeb5a3291c658eed26595f1884163b4cbe891fc0eef4249f9570317347e42", + "21351dad2fd76f0ee5c87870be57f32d8eaa4d1709cd0a9225ca8679898b6d7d", + "65c226ec2f3937377406ff23c9d83c64e90c83b93b92d89355e0894db5c893b3", + "40e7d55e994c92e91a56b1e4db0df17bcd1cee3de1eb56cb5ce8b77b701e15cd", + "160c4d25a99df989c4a9e6da5b6ef1ccf77907085837dbff60e234502e8d5dcf", + "6554ebfb81f0b4aff4b62f7c11b46f5e5514bfb5502f0658532cc55d7c23bbe0", + "568e9c9e8c9bae399fb0b6bd5d8233cb49edcae7b86351f052e5aa0671b5bae7", + "9df57cfad914bccba3287e3901fb7b2f647b7a121020d09825a3df84a74235bd", + "2086a85ccc880cd9c976432f02d7bed2a04ffcf6bbdf7b01221f101093c4bfca", + "d5ce057b858ca38aef00b37c4d73943b06430be89b6a306880d1142ba4f923cc", + "2be5e2c4a275a1930e1afa3baa00ec9ca6123bfba5746becd43c2deadd084c6b", + "e5d142edef94e49bd0ab9ef28799ab6106148a11539f945c1c1f012881803296", + "48f20f48cffc12999a524d0ace007a631878f224ff9a4a3c977a40baca0e902e", + "4da47075d8387739e1979ff1bbf1d9b55528787a918b12a54939e8eab9aecf7e", + "494090942f4b8eaae8765c1f339d3ec1327f9a1eebe63a6564d62a94729f7243", + "3b5085ea60884da89311f1254539edfb79c51990071bbee40bab5a8be1d0bbb2", + "349f22e9dc493dae42c6441d240b21215295ed9f06bce80e666dcc44ee473fc9", + "0aea802852fd353118b0c415574470f214639beab78688fa6568ea3ef7ad95f3", + "12c5836c91c8f4be847a6421d3273e61d187d49adf9fe0c9d4a4ba349ee3baab", + "8bdb3f786d21462ea61c820248dddaf2838d0bdbfb7ea4dc4892c8b6c5ea44ea", + "ed853dc09c8846d0736b26d76a54866a3e3cad4adac73af0b072a552614ff68c", + "e2f8340b00c94a81afa02e0b74531941144a7748c0ed86553c03abacd41c2f5f", + "d90b69c47c3c5ff58ad0f9b6b8e138c78bebe225519931036fcf9060c167a328", + "4ff42b5d6a760905214a940ec33efd66c7ed058a3662084ecde5b7cc09b513e3", + "1d31f01b07d8c87a22260c9a8dde98269f333e2c0784b3b54c7cb67e209d7146", + "38971633c65f1b7f35ac1ae30bdf36856d148a03a3697447742fe19c5b3fb89e", + "75e49c1e5fb845ac4c6ae76cd7d5a6e463f231b864515303e96031d716b6dbcf", + "a005d4e8d16c2586c087998340beec45392d9b4b96f9a3f7467002cb9c56de54", + "ce076ed660312605614bfdef56452c973c1202811613d604088abeb7f98bc794", + "da94d8b7d907a5de0a9f26e4d9ea83cb88c7572367ed61e04847fcc5e24e9518", + "9f2453bb743793cac71ea869ff69af373f0c9dc0ef2f1c281e7f5f1453f7ac4b", + "bbea82962638d2a7e06a415cd59c46430916d87418a1c7029a8163398aeecdb8", + "422c90c84f63a2b59a107e7ab727e3f23c1500b292b047b00ecd92863de5d847", + "d5a5703794823877108e643d2743e61923b501aa76a8b674eb7adf2226d0e1cc", + "8465a5f816caa75b9ba8ad5bf999251326f97e753976142891192cbcc1a509d6", + "161accd866883896b1c712fe6f8a9e6508d7276ce8abbcb01df67d491fccf9e8", + "ce86328ee8a8b68fa7af43cbc74d841c37869f8d8cf3072c839d8e9a8ab3d407", + "c4adaff711969ccd0c9ef0428939a39046a91d43ce6bb889a304ffcd608c7b7c", + "eb392b94698b279b33a5e60fdc4c048d02fe13eeff2b60e0454829ff1a7c945b", + "917b11eff4b54b1b65bbe76efc62947d0de9e30cbfa14c5a78ab1c019e1ce1f6", + "c9eb302673447f4da6bf1acc74ab6b637f2b8808fe9cf558595c523d2715f7f5", + "c6777cf5a1b1da3e88aefb97a1350862c628883d7d948019204f199a6b79256d", + "204a5b11985d7b29d9b0c6d44bc0315e0640b5cf10a9e4390f6ae965211b1e00", + "cdc08464d5ba85c96b9ebc9cb8b033b83b06a0ca7bc04cfeedc148ead09bde36", + "0d77a28dce7e9c7a6ecbccae406ec6e6b850f45d9483363294f2f6646f984d42", + "4865e3b1b24dd5f0620e539e92cc63abda39e03530a48aa7021afbb0c4616264", + "68cd68ebad37565432e2adbb39106f3623a43f7785524db83346b03f146a628e", + "36e12dab258db465795b13383ffd5cec30380bc0b8db64de17c3fd12e2f9a5ac", + "52059198078eac3c240aa086d47b870ac32ce20749453831d83578724c7b29ae", + "6238400a33bc20a9f25013a15686d6ad241fb5387c6a5f8cbaba721db6fb6fc1", + "b4e963b5e93ed468576c43559ceedc4fee34abde848eeee219ba038fce7760ca", + "631204742c29f07216859b3fe510842a9c6175d85fbc73a3d27ad03cf44c9fe5", + "8144543dcb303e6ee5f4adafd506f121a9ff18c0c5b6a338f565ed0472e27dfe", + "e24cb6c432db197db0231911998e11432c4c9ddce35528fb05a2c12f4e1fde02", + "325f1df5025559987b1262541c018dc15dd0d0f1d9b58f6989b72653601f4198", + "85bb452474943c8388a2b3cfe39f6786790034eff76af387538f7bdad7e422ab", + "b1c1ebda22c1bb9cf6ac6b065ae5b45662b9bb6c0d60daf36ba4f73fab8ecbcc", + "5832ca5804296e524d87cca61837a9ea0fa04839861c62d23e9a16063158c6cf", + "7a983374a8859d8dafd3512442abb7dba002dc17e51505b2b91cbcc1df4dd6d8", + "586a5e87b53d9421a3df864a16db5f9da27ee4b5000d199a954fc124e0ef1de3", + "e5c651bafab355e4ef32e282d4e32e10b309734fd1072d399674b9f3822bd0ef", + "be10dfd4e0785b80c2649b6245ace536ba4dab0a2bd8b884449ef49ad219d18a", + "8c1ae26a784a01bd728e5e83f0c030575e7e82722122bc28c9e22348716e28c3", + "a8948ce5738a7cc98a7b8a7a6e1773bd7f5ca4c42389ea36041bf8716607b8ce", + "7f0dc17fa5e01c0d0cc920c94b7d500fb89de790530663f54c5bfd59b60c7b92", + "130ed6181374cad82a6f92b5bb99b244b065b7ee6f1013f1158546382c885980", + "645ba55c6c49946d4962e919aa38f42f961f65c018c66209e65634fef7a863b0", + "1e43c43c3d652de699d3ab68c845a0423cc7da15294590b570cd5cd3a48bd88c", + "c1b58035494b2eca8a3df74904bc40ac537bf56c8f553063b0f02ac546f0b468", + "9a0d516f571a372bff01e74ebdeb0f6866e24bb3fd68d00797acefb9e945853d", + "4d3d94c689606f452eac0de1ea6a50c272531143b12689c234433f34c46e2247", + "39d31a7423bd3e49e7002e767173b3cf31ef0db2742fd46057a2f6a25f71ada5", + "5438d261dd348c897bf341085cb0b567e28b15c6a3f3562bf57cd9556801c080", + "a72a1e2e3a762b71f2770b67980836b98337ee835b9708fb77c793157386b1d6", + "b818645c3eb26cd61934b33e962d26c9a3a6f09acada4cf15dae037d6ba6f5a2", + "2b522631868eb23240945bc3b7515e0c33efc8373b24b74718291a30a12fe032", + "5801b67d36b2130d90029270392ece7359ecd2cfeae9074092cb00b739c5f8ad", + "b7b49575621ec8e28aa60ee9fd27459672d4acb6e1eec087f5bfa6c3329e1c8d", + "f0ac4570e572316d7f42162276fc5a17196c555a347663a6734921525fcefbd3", + "723799b845017b53e9cc4c8e3e38b50e8c3f9bcbbf3062cc8a75de822cb1923a", + "c66cc88a729897601477117ede17ec3b96ca53dc00c82f76ccb14d85633cae1f", + "a48a24e12bc35a0a8a5b0f0a2b95315ac3c5e9e5322a02ebec24cb17224fe580", + "9e33d1debfa4c63357ce1ca59b828e3642f8d413bc5cee1d9d1624b9e33a6e40", + "0a7eb1a2b5cb058ed7fa9953413769c5102c274b75197440c5102dc6818b44e1", + "3dbd49da6dc4240d2e4ca9b0c38afb5ac2d845f2e8ed14e75e33e26b10264f91", + "fb54f98560c75bdece75f49b9b478bbb076b113cf4ad2cce68c79821c934538c", + "8c29e9422fad36ab4e481af7d08fbd785dc1c3a487e2c776d782043a80bf3206", + "25613ae9e6333bd5f68a1f2c8afe568b1a94f66c44e3d8d66fccc311b48e5e25", + "c9cacfa757f376bbe7a8af003aa157462197283d9ec4fe4ff9c1355a70936ff5", + "44228861085347314f2f45d9ab9b5b646ae55475167f45656edc28d4e66da72b", + "d5f6d8b9c9250bc715d8de6b6db124bce9dd65b9d06e2bb55a735f6cc3489299", + "0cfbc3dc872b47bfffef2458277922cb409f47e795ee3bb57f1d52d7979cadf5", + "a88d03dab0239f99ad4720e4c08169e840e947d70c20c5319d0441073cf1c237", + "da255084f83b9e4ac630627c4830e9ad28528effccd4de6d603e5fca33e12eae", + "d7ef7af7ec84212dfec44f7ce478fe4d28e242c0cd1ac7944f949413914c5eaf", + "0cd036b677c2606c5c2a9d945be755908d1577710616cbdd5a63321f785b28ed", + "8e41ae7742ccac3a4dadac058a030c8f82282516c6cf558c6eff7f02617d7a82", + "f405622368c8ba65c3b000bfdf886e966fc41e7d667e0cd9aa75f1bbe34066d0", + "aecf19480dd11bc6aea3eb15ee5407363c279a03d66fbcb22bcebd90b9c7c102", + "eeca79de807297f5acc96a66993307586f4948cc8d646a9806d471066e29ec15", + "a62ff58978c2d855c4e5b68e8e0a1aeeecf11ad4dc0c539363df38adc455e019", + "b31809a2a0d3dbff0046245110bf0341f8ea5f1fdd0b72c33cfb4d42aaff011f", + "f469cb0f59f8b8272c0f9a3ba93e7801954ea9409d6a922ad77f43c96800ca2a", + "5f10e269c542ec865cb8a740a3a3125e8d4d232da8877cbc8521980f9ed0712d", + "ad6ac31c37ce8811facb7d493163a7729167455f4323ea928aff121fb3551042", + "ecc662c2ce9e0e2395a646cea57be80ac2a16463777e4055950372b37dcf3d52", + "02cb399f049c2e6c944fefe399b2da491253fa3e4b911efc0327699e9ca64a78", + "8a7abeb523c4d9f117fcd295f4af2e985fa4146f67466d3e29e19595f8df8a87", + "950f80a62ca8eea7e3b402f09d76e2fbbe0a6f5928a18e5b8308c97675f3ca8e", + "284a64543aeaa96756404844a99f3f2f2ee403d53f34f326d18d5a50c919d7a2", + "9dba51a85e0d172ba59b91e8f38b75c8b619929fdb6d3b4d700fdb62b5cd71b4", + "28949cb41ecc8bb76b04d9f52338c138c0d1d984e612a56eb02747963421f808", + "234c7166f65985b4e046a6e7b8a7884eee382ce8e8e97654c4761b5e9b3e9258", + "6011b9c8d3c477e8f81cb984af407e3e496304e6838e367d97364e8f2e790085", + "2f4d1c8dbc29d257146f420e488c1f25d1555343556340277032511989e1ceed", + "7ce1639df1efb08942f16f99c2ecf8bf37a9bc564f3d035f46f24bc50ba4abf0", + "d653d765a2de080c043f2145ee8f611c851ee686e9de8301852a25d64f9c49f6", + "e1464d2462c6255fa679e98ca8adfb32b32a4d2706e79e83026170bd3fbc9158", + "758854d95f54f0ae1f9e7cfc45d7b5924e633f714c188bf6cea2858f237c3868", + "9625f5cf709f8994a73d8a0d3d479c9bd147512b4151d18160d2be207bea0120", + "7cd153fb5d224621fcfd38b1204443a497a01e348612455f62075a2f7ca64b82", + "2dd0c39b222f35b780dae3823faec8ca8043ede668b47e017ef5f38fe454f6e4", + "4f4e69867e101b412f9bbd13e4504bc19f3ec96924549a9aeb6363aa27c65157", + "663818022cace9803b383e328dd417692ba2c6afa1d05d231ba86440ec8584a0", + "eb8a138e7ee1d6c094580405a5c249b29b7178d041017d158774e152065a64bf", + "42bf153c84b4442dce9ffa3b7336084368923df0fb4b40451d0b1d022fc6deb7", + "e28250bd52f21a80cd30775b390a407e45ad2eb2a8559ad9c8bc0c6e803f170a", + "24338b75619dbae712c80dff37f6079f3a515aac609d21e32401350320145298", + "003255a6644b428cea69292b02ce5839316ef711296647ea41f01e1e794836d0", + "e6e0a8b1f6797a30ff8283424e138e87e084c440c403304f246d74b794e9dcd1", + "49fe69c0014e2e247d7c9231ecfa27eb5b985232bfc53330805e8d606caf91f3", + "513aaa0cd508afbc6d8de1a8ac04c69d9cb6ee256c3e390a19a62dab5e1c0af8", + "47a589d09f589a49d6f1d0302214ba14a3b30dbaae789e841397b90d4b341949", + "ea8c4d7dbcb6090806e71050ec32aa852effa89fec0a31da72f1f9c5684138c4", + "b4af0ec19758d16deec4798355d62bc13be3338deb94bb38849a436499e71939", + "685c9d2a82e5c572584ad01a27153579ca3ed22af59e39f97df02ff565250f46", + "19504046eaf69a3d81977097ab7422105a81b8399545e84d9862902c391c8657", + "52166c74af46bff4e384d66f055474b2d51740ef21d42fb71bdb535655a76587", + "294931f204eba4955cc15ead115dd694dd7c0fe1b774f5aac6b221532177d1ee", + "ea4cac11cd6bb2976d40199df3aaef797c0da8fb246661fc2bc381f003f900b8", + "d2db9afcc128793c6d9feeea9d5d8905b3d2d0d4bf559f08753edf3ca817d610", + "772b10e5e5462c8c12380f390db6ec1bbb5a9e12ef602b6c4e5463d719d74f54", + "af9f8408171218e8f276f36e5e08966c92da00503e95a04efdc539a5c69225aa", + "a49a19c09343da1ffa86d0cfccaf8e0ecce385a9fdb9370496e0c5e4c0a2d706", + "eae3def00cc785c35d3d51d90979445d8490b8e2754241d8401de4f2a574d1c4", + "4c7963fcc355b67b7d9b763f3684d4e6673f503ea79521c3e036216e2a5cf1a4", + "97a027374caa617a8bc8d13de6fe0443a5f6e338d0b5cc2bdd61c69bd3dff8bc", + "ea25ef20f84c4c1c856b03fe8c8a9aab9d56b6422d2d2884b04a4ca2b2de6f76", + "73ff02a035facfd0a45d225cd8190829bd36517d40a3b816272896224e2c0790", + "aea1c4aa834966704e6b67d0a1b2d8934602ba65b097b0ce563a215fc826d5ce", + "43bd9ccb9f8c0a0e73c371964202af3463d202b0cf7e48775f4d738613192317", + "9d94277c2887b2545aa54d8a3584fdd16bc602ffc6df1c288d26bc1eab920d4c", + "cc0f0637df5b3305fcc3bef62d58107da61ce8a5d093f70ef67242bbe1ca87d4", + "79075e0ac9fcb004159452b64818b4038c78bc015306b5e42134f5eeac0bec7c", + "4bf28f3d7328ec8d84adea769828b879af9047f27d03854e3913e16e8a62542a", + "c3bac60d2779291b2bc835c8ccd280c4a6dbc65a8e571f98fc9a33e0f2c08433", + "9966f119fd0f97fdf4008878baad7b716470de728a2f83f95232c1c1f2fa676f", + "e501a5730e839cb765187b773e824253138e1334925fcb5c542d22c11f8ccc34", + "47cbc71f881e8c8a9f3b35e7d093c6ec57cb1f7dcf4bc1d3e5bee82b3ca94a9f", + "798f85b005bdc5f9553070340a980c84cf6d356a2376997e95636463726d8e18", + "f772f6a6c131384a1d210b967a1cd3ef03a0b8fc5768fa1ac355e60967da3485", + "1fce0aebc09675c65dc6f9a76bd05d241528d7cc876b87b77c8a570e9e62fb55", + "e09f756f4605966c49f58132c996ac10ea7a50172cd03b5c86728a118674f0a0", + "86b071a80796801b23ddb9d6f886fdd3509e74b4df92259472759b9e0584bad1", + "851707e374e3e0d7ce7ba00fbe87462ba39a3e74993be1bbd0d74e0c51e2dc5d", + "73aa9629fe14fe306f0c734fcdd1531c0bda462fc1f828249498f0c5fc8f20b9", + "53576b34403c81539cd756c9147021ca5565f5dc47c761b866159b6f742d83c6", + "0dda5a6992fb3561a69da743b5a2b780f13ef6434422fb6501cff80244984786", + "01be7373a0a8fb6d9d1f0a61ae8fcea7a23063070c29fbf0e5179130cf532111", + "ee1388e54c60c93f15be25d8cc2dc9112fd705ef2a29232e2e9137907826243e", + "9188a43b8d9f85ef2a21efecf9228bddad0c61489578e8835ccffad2dc494660", + "dedf8a8139a47416f5501580ee12d84a932116ee95735342a5ce8c665d7b40b8", + "06a5c54f0bc5fa087fbfab35f4a2f8cb24bf861888bfe446e8062febd2f08413", + "e1eb1cff59d108f024d2c08d3c993739bb84d192c7630ec00bdd3c7a3c6d6da0", + "ab2d6e6d0344dead840cdb4e525c666b21b838f8a6de77c2ae8b8df8e6ff32c7", + "604a97a7f0455a3e4d451c97b30a03cdd26d41d66991e3586f473d32ced2441d", + "68137312113e96b7d4210e534872fbeb7743c595d545c38a1b2ce0b0c45a2035", + "f1a6accd4eeb582fba28dc1025ccc897dfbeba87a049960b63bcffdfa4a9063b", + "38260ef32be6acf1275d091be6d8d13e01fde3fca3c974bf50193fcddd629f48", + "5dfa880ecc27cc51e3013580de59034f30d582942261e6260e47eebbcc6d4f50", + "3be3c9388da9c0c494c871a5339f3c4be790425cf3301c18482989e3855688be", + "26a9b18f68c49d08d58970d1550fda17ea74edbd227833fbb379bd6074e38de8", + "b480435fc67cddbb2847d98669df7ec0f38dda983440e07866634bd1b69525f6", + "8f514ac01543de5ea78fd9828ed75fefb3c5283d717709d98970a0975d0a1ffc", + "9f793e8f394098be2c8d750e6a52cdae3e83a467628e0d645f8029bf3a6787ff", + "3f2192e3eda7d7aa34cdc2344a85694f3715db43b44560f9d0777ca24eb15810", + "e0c474c850f52d61b74b19ddb1e7928c702cebe346ff58f6e778d71df3baeb12", + "0439d20b1e2f3ad67386c8228014d90b02f72992caf12849966efbf34d02e1d3", + "00c901af36f89b43eeca04dae225970235dff87f65143fbf225d89725cf54ef7", + "c86067f795cd5e1b157046760eaf496d162db88e5e64b22e58abd37c40f10fff", + "cbfc1f62bad66c3d3343f4dc3684172515c77341034792c4e6df2898464f3a10", + "5e391a46270a9ca71de16ac502b8d674926f76af718ca42035eec7fba39bc51a", + "60e43aff75e4bb67890b45174475ac7a4764ff51bddf797646375ab487481854", + "6ebac28f1b86bccb5385f7fa1667e47ffddcd651d6682019b4d4dcc9831e607e", + "5ad896e5dacaf29b4a8ddf8b142b6839b1ca81e87363de39c35e3f0751861901", + "2969208293bb0e924b75308a6ec8bc134f1054887484b379a398606cf5cd9fb5", + "6e6b95ee4934f3d982f6e8a792aed18438e4861476b4af6af7d98c69a32315eb", + "8e9e62a93969cbd954052073dbd0be5a64ed2d4d11c14990607f80245c6404b6", + "8ef1c3445b9ee1cf8f424a27981d2324cfd9ff8231d12362584b4fd02b4d8cb7", + "c2d9d7759ef4e68ec2794bbdbfb5aff3d4115cae34b612cbacf841698fc6e36d", + "eb18ff5c095d1f595989fb084654a468cb176fe44413255205252359cd3b4c29", + "1a7e7abb33e373caf1c848cdf8714e16cc71bce0c03c2de9153af26e2fc30294", + "25d04d77efa7e09ec5d6bcdaf61a0cc322b8022ede2a3da0e291d164239c2d8f", + "f19346ca14ef9d9e60eadda3c3270025f909cc8973ea2bba44fc00e73a10b920", + "012852099fc74659c1972933cca8ab3ea09e0813b884b0a13ed35bc61dd774d2", + "51acd1fd3dea3fab14bfc9e52893272aacb4846ddd670b9244bbd67db333860a", + "7702116cb7a390065f52be01f2aa99747e5d1ba9440d792b8a5dfbb9366a9e0a", + "1197f84d202e8fd5fa4bdf66c273306063acc92eabeaa831758e3a8ead730e0c", + "a0c0339c4cc194033e67f57aae508c35f5e01bff7b59147bdce6cd2023ff3916", + "c5a0e464367a5b166cb8e2250cb3b6b4b9b47cac2f9ddcb8807b6e7bdd9a601c", + "b849f6fda2e50e16831af1e6169ba7eb55e4f5f3400029689de206b75d72fa21", + "617b16362a7e835e6771350fbc957b25c63b10a88e04d9edbdfb6ee1e8efaa27", + "b6d6896674bca7b500492377462611f8d50d3c1f803ff886a8a9fe608e45102f", + "a3231354e33d896c2d57679bb5f662bdae848b4d35167692961e00a92521d441", + "0b36a4002bec2cc88535a136f53e4bbed94a8d73f71c34959b954834a900c24b", + "d21c67fb7fbd5124137675e82bdef47ce4860747b3010dc079f6f078fd92cc4e", + "550e74d51de43599f838554207917bee320e69a8413480e5451c62e8038eb04f", + "28472a7b385ea26cd70fcfd2b1d9f70cf861c9d94698ee30ed1c2138fdb02760", + "787b559c02c2d5ec22aca78ee3714cfab887a24a744fccca08fc5978e7dbb46d", + "f25da6d8e450abdc7286a28252153cf5e66462520ae3a6501175f79726c3a573", + "1b2d4e2104938b5080d37247ee852f511a7d6bc5362470feced02a18d3e9d573", + "22c1584236f59554b6583bd8f92ef187497ec5fc08c638bd40356624460aef76", + "73b79f34b0c66b77ce20f5e7e33417551769066373577a414460a2635feb6177", + "c0d2dfdc8f38acc04bd7de05af69003b95091f6333fc5434e1214465067b187f", + "dd01426761191b26366917aa8aa33a17f653c35449b21ca6fa98edab770ee395", + "9f8421b427568064352a83dd38ec62072335e91d0eee57574be604a551c31897", + "7fb46beda7b2a08ca246bc14a56fc3852a09163b684e333f3724792a50048798", + "846bc9d79a1f7d60870acc82b618be48233b6ed252474647d64a0712f391b9a5", + "c338cdae66a27fd4acacc5838096655fb2359e95f52f93233450d6b9d8689bac", + "1e57ce803b2ee7be7e287d8e83330d7773d780095482e5273a9db4ba2d90a4b5", + "2107e7d7eb043c343e932068a224961af528939cb7e4321e911bdcf89be4f6bd", + "e61170522770f22fc087a20a18e3b30e701a57290ad171a8269a5a5214578ac0", + "745dcccd17839d9cb04a38f163d43e4fc1890b2ad710bcbc96a782b060e93dc2", + "015bb8e0f23272933e640019adcf1849fc2121d49a35dd9a009dfc9075bda5c4", + "a67c6dd02531b965c3f68da26efe5737cbba550230f6fe970b56045bf53f23c5", + "cd78adfb83abe10d52f6158a4f0b193850521dac8a75b8c6339ee7d436622ac7", + "882d68e3478788506e82fe8a08eaa8e1a6af510fa86ac3ce655179ae87d9fad2", + "ab2d50c222ed657c93f74e93cdf508ec8fc1a2cf9084785b9093c697de8cefd5", + "09359447c45a9556ff837fb64e6dd8206317cfdd43bef3c134522f7cdd0f3cdc", + "9c8cf73eb9970ff2d7e0f966ac84199047ca2d48951c90d5c3337ab25b2c0cde", + "610fc52ae47a270fcbc55fa3e971789db5e8ec59a79df0051d7c6e899c2e22e9", + "7e981b4b3f95495a1cbcaef565208324e7ea514404cd3e7c8b254a9416be86ea", + "7e39f1f62af6d5a7abed6f732c6c9b28b666ca955d9e13b30aa677fb3af93bf4", + "6390a136c17bd19045a4f67fa2cd7ddab464d8eb532fa314febcda2bed7f3d05", + "e111ebcb82f3f1ca94662fdd7a5560ad660ac60e5c989a87264984afd82d1204", + "9220106f37bef5dc7f9dab9e8daaaf05b475c144487770e77dd84f5aea7f5111", + "131d4b72bfc2ffa567a3cf5b5ae402203a377a93136fb413d04b74b8d84df615", + "a53435d3948785519eca5515740d51da31530cfaacec40937d0ea1357b563819", + "54d01ea629e8200c7b6435f492fbc0ffad20708d55e88105398a4290b22ce21c", + "1f3aa3216133dcd6aaaa3a7ae162b1a3508714e52ac653fc2ae7d688ec3d2afb", + "e084aee0733c6c41476b0fc432b34392993453da8b908a1065105facefd24c22", + "1dbe2e79d7fdb964b20971d68896b43a59171a6ae0a39331adf083afbb265f22", + "526cd2bec42ee83106ed2f59fc972f3c3a5d2bfbb68fb80ceb688c897b10c825", + "aba6ed16df99f0e8685bb2eb6ac209987b910de12ee44e00c86fc76d303e0635", + "fadece133f51db9b2ab4659fdf2644eb88eeff25dd0593fbdc4e057de5509f3a", + "ef89d2e86064161b9ef30f41c7f3724a72b19b9638e1ca3349b4ad9d09f31b43", + "8153eab6c6837aa95cff000cff0d777c0c6f34956571eeffeb664cb04aa42444", + "f42fce9bb54fb178ab2237919dcc15baac4b3ded37b8fd3e9caf81c29b3fcc47", + "9007e5c2bf82d7c878f2d9a25a7bdfa9b89fdc65f2f00cd687c5d9a6f9a1e75d", + "5a0abf046f6d5c5452027817ca279d5f81977c392299a2afa07b2fff6e722662", + "ddb80d18b2cd6b72c1ea821a639354d405e1335cbba0a9a0690a04f23200f575", + "c6c94f0500119cc6cb756d45a291331e1c319abb45bfe37f4bc71ea2c06ac076", + "d40fefdb1ee29afe337c508ad0076963356de11fd64ba2fda0f9a7a25fa38e93", + "b52388f010b082a00dab071e7b1f86ff745de92aae75e786f30d4c91210f289d", + "2e72c8f36cee4e57529b0cbfa62d38ff6d9f5a3ce0dca71a4067f0e3011928a1", + "c3d453fac6fcca0594d1d2ef310c16b805164b93cba4a8b082786c950c4c6da6", + "1fade60078e6f6772b33fc4608976bca7e075dc9f9b3807b4b3a7e5d1dbd32a9", + "f6b864e01fab379559f97a71ea9cbcff9e6b686680aa477e2f9ca81ff30294aa", + "c3faf49f4a6cd9bda07efc5a6def67e9e543e25dd7abf5e697837503bf9fedaf", + "3960e7b8a2d3a1574ca9060179f2fed229f0398cac8d45749e581c7b38e66fb3", + "2d0060b7cddde420f2603a634bcbf9bb1684f12a91371caff12b86c558a9dab6", + "3da71743b934871b8fb056036784993be458ed513a763c91b6b2256a1e25c6d5", + "dd8fb52c4d82f334aa39b7a1d77f82c5f89b5416055906dfb1d85f116bb64cd8", + "9de6c4196194ad243fe0151b452e480b901f8eec7bece7109f114d72c74b57ea", + "e5e59448878092e610db6603d19fb210529b0fff70fe89f1610f226a6e9a86ed", + "83668fd92972caee5eb1c879ec1979a7a551b147d1ecb3f4b8c1a3a27770e3fa", + "d4d9a83320d847c2b589428b63f2cd137187bc39191526f365264cbb7c668401", + "980ab3568fd09ab479681cc77292c6b65f678f194715850c15cfbc1c69f1401b", + "fb9b04f2fc55bb9dab15c04a0e9f41345f6e7a2278108470b37022836170a524", + "31ba3d504ebb8d432fec130fccb974b8e19b8ba345111fd40deb72196e6d1528", + "eb9cae096f20ef6388d890e06e6bc1ef40c624dda966f1297f1ce16128ad6748", + "51648a5f0a352a18969bd56ee70767e726fe2cdb33e81a89384c169945ffe8d8", + "d9f28f2d9a73ce106e041761f2a6127724bcb89b56c5318247594b16627f8454", + "ee3c0de900a49cb1dcb0cd18ce05cef41134a392efcd49573375e164be241257", + "825fe2fa253bdf46addb245e54ac57f94bf5c7d9379181c3c77e332862e76168", + "3186529b3e80281334642af187987c71e7e7b459ef3c236f7e3021169e44606b", + "3f6656cde64ad6a4bd8e27aac8a7650ffefa06683bd5bea749c661df6aabbc6d", + "1233b5f032e340eb7c894580c3e6c20ab7e774261b31a3cdb0cc9cb6fe0a7771", + "ff554364ee373a8321b1a3958aebf3e008979660f1df4310d0748084838eec73", + "b5f4584ed2d392856626361ac2383e17b9f3afbe5e3e4dd288ff31c220c5a3c8", + "023eabe219af75e87ed35f295a952928f554bd4e0770c91a39c483c3047e3de9", + "82021dc0187d9d38cc4289fdd45c6bb529d1a01ef6e57fd305c5188f12841bf0", + "5be1c279cdc2edc8481c2976debc104e9574b58544d0c30d42183301f17fb438", + "347db7ec1948b79884167f73bdb7035baebdbf5cc5c72fc99681cb40de82af43", + "7d9cb72408ba54e34852a507852fc10e47d57c23567900140e137af7755eb2ab", + "37ce816ccad34c4e323974cc6140ebeeb5aaa3538f5c09b3ae9b22ec27ea206d", + "fafd641f32a5bda06f0853e619aa71caa56ec340126863f94a4c8df4922720d6", + "171ff32056bd4c1594b9f7cc29e5ac750ad073bec174baa1877ba916ece01773", + "71a0571028736d972f83abda92730e69de89a799f6a314ec96ad2f34e4c88ed2", + "c56d2413a49b9f40b2b8731c679e880d98734e695c9685dc569f4a4c01215339", + "d770218dcca51f9eec5540ad986b31f667957f5c310f2ca42e039c60fcb1d25f", + "dd32cebf2acd0f1e878a485976a8265ee9504925f6f84ea5a361728e48848993", + "02be48cf938631bb37bd7fa9354701a79d387d1e5a3e03607cd79bad9031fd65", + "c1997f45cedf985eb4867139a5a02ca8c033b315bbe3400349dd973f085cb07d", + "e3fe584fbf4b128e7fce34b94161bcbaaa5ddd024b2b0ddefa73e748d14cdc9c", + "8a4b01b7e46dfc8c3b615e90cb1a9fc42ab96f99093d45a5b16f8f7fcc85d84b", + "2697bb322d47206f9c03f26e17c17e5c686b3e236707353148bc7992b0d4b5d4", + "e930cd8a65a0079b237a92fee093f42aa2f275afa9dd4dcca09b3c97bee1409c", + "67855def23cbb77f3a6526d88c6c97fd205caefcffad906d6af530cb5180cd2f", + "398b3edb33f336b8f309953be51f9d3b177d99b3173fdcb5e4066b02b2436ac9", + "b73f1376a8cafcd3b4eb5d30ddb9fc9d88217042bc43a7daae64c669cced623f", + "ffeda0a27f1e843cafb33dce246b3352d5ca327a606ba94f3ad43e6be698e6c8", + "edd0503e3061ad40fe65bf210566b9dac3af8259b01da48858c7551bf31cd70b", + "618f57ec2794c8b5e14331860c1a6c41f85d3806849b9fb540272e11beb5e2cd", + "80d4908123cbc13c38cd3842089530bfdf95df7363d5db1a4f37aa935d8b1e94", + "24d8234956fa82dfa0408aded93bf131058b7e3fa2df2343a11a43910a087cec", + "0aafee197ba943492748f7c7613746d75868c3f8b5ff74ec9d8ced42efb4ddba", + "c510a1118591e1d93042de3e0d65554bde16cc726161bf86894ef8e027976ecd", + "9fbd2701a2d8e6d37e44c483b38e0eaa6e4003fb88118a01152adb11c6bf7690", + "cc706897cb2ca26f40f3d8acff4b63393c0efbd3dd63b5739e08a02facee647a", + "385219b7c7e024e2b4d4d117a0c367fbd8a344158d5535b31f6b1b73296053c5", + "e951ac355698c0bec0c18529f6b76d81a3e2c8bf11e09b2bc6b9c6aa62a82922", + "112d57799d74543c627f7e1796a0f0066daa8d53d566cb1c0613c1f8d60fae29", + "03e33456bf1a291cf3ced716cd8838fc19145b284acc8483e37eb6b138bfb67c", + "1fc0daab241be78ba9382555423b4225e9faf788d8f2f3598a57789a235e5581", + "ba79e644eb117827e91137f9bbf0d332da7975e4e49e0ee504516ee2717e8e61", + "d0920f439d6ee9eaca00e9441dba1bf69f2b39fd958708e7e8c6e724aec340a9", + "a46021ca156db7b59f775e34c58e839be195dbce1ee2720bb4051e2122eb96e7", + "1f0220ae7a559041ddb1e34badd9d59e5cc0c24001c025b537d3d20402fd9f2b", + "3c04d1c509af968fee17dd52fd619d31615ad2c643e439cd38b65a7f7560f634", + "0a846fdb560880c0c69fedab72b6d5da032186adbc4ace3f893b16227dcf9a5d", + "bb2eda8a28f195978670792d60af6e2261b4d5b8fc05f62c0cd7cd509a705e94", + "c01209f07936ab9c37c1730b0553d24e2188405c608035b01d665f5a50a06df2", + "b2e659b19cbbaa501eec0dffa73e7a0a96760da2878e283a78dc4ba8b8b5e5c5", + "3a9f1380c7c97e4a07f080ca05c016da851f988cbd55f5f311eb684c01df6df9", + "44baaf0bdfb63def7c1aaac4384a928b82fcb2031c4ba826d099621c22049d9b", + "b0f68610405837c938844cf52cb9ec472ad73ae443f269e895e9f92e220c2ac8", + "1e27e0b8ee7a4a61a669b022e3faac24a6b763c1e6a3f55d03a3881fe2cb692b", + "de043f96ff1c662bb9434cee35cb95650481fe0fb166885de215aafa6d168a1a", + "4c05fa6bc2c5fce537a56cc8a6288a2356f09dd1894ff65242e666a488a4143a", + "f63646b2470528aa84fe4e3cbb8c1753e170333760c76f97cc294a3cc81e1ceb", + "548f84c4d184a7e36c00ee75c6753239c1680a0daeb915543cb1ec8ba0bf56f1", + "c67453664efd64f265257704fd71480f0ce3949e152858fe60a6ae8c2e4d1cbd", + "4f212f52117e725af10d85bc8131e8429d0ae44cb4ae1d6cded5f77d833d0a2a", + "e88a890e77e8821d94cda1cef6732bb9366c74016dda21919a95ecde2433919b", + "36efb80accca660d7fc3478a23e9363590bcdec28266c4202b471387936dbf7d", + "0a437a7846a9f60e8c24310543d155887188dce0b743bec736fb256c01692f68", + "0dff8af94487c9552e844db96efbb5d64e5bbd8abac974e2bdbfb9a721a2e1ad", + "a2d3290a9f2606c17209b1d8fa2ce0565ed69876e3fa37ec2cbe631d43360356", + "9f44fd7f86bd7f55f0a37cfe28604616d2f92e587e82333fcc295fb58fc9c494", + "4caea02726e7206a31b250f45b3fb0140f59729cd6175b257717da7d99e4fbcd", + "bcdc601ec7924c739cfcd6cf1ac93d8a37f61c887607d1fb9ea8f77b3e2756dd", + "8446daf3178140e4cf6124db30e0caae41bfd669e1ca220f946e2f01e3b1eac2", + "8235e86a306d7552542773e7412a48f2e306d8141571b7ba35456a5b214263de", + "aae51d1d3c624aea50f78c6e38122a48a37543fcaef498dda8eed04f8a3d4e4b", + "aef567204501b9b8c525a1b07bc16c30c058a8ead2eddb8e63b78ac7af397f99", + "795a70e0f8eca9172f2f14feb812c7a5cad2e921a304864e66ea40484705da34", + "b4c4800a1ebfd9ec08f0541e8911e3cfa34ee54f4dffe3c34ba815089e70e5e2", + "f8e822f7b8d43f46340079799c7aa5cd7ea2e0d1fbff5b70574dd8ccda426437", + "affac0d76972fce961755a9c17a5016580b9c6aa4bc2ab49fd7f05f99fcc0c50", + "de38c1a8a24dba6ca240e0ad576557f6fbd793d343ece2a432061e39ee0c79ca", + "99b21122a015433ac6ed5517969d16efa8a812e56e3fdd659472520b96050ff9", + "1fa76bbfc4ec885a56ad9b79bd59a45025cc26b61759ce62d7f0cb41c881ff1d", + "65f5ca6517ce0e46ace6ad0001bdd70a83c008d82addffe7d7b998a172762964", + "d9875f7a7542e3f9f962a248fb0ee6088073993f247d55e68bb4fa7187ecb716", + "fa42a492749e0c4e2ba8db5a5afa8624b4372ecbc2c166dbb01d498f88a7b64b", + "82a050ced6265dbe3d51dc9173f7719401a94c236e02ad7f3eb218809d19c9e1", + "404e9b3b8d10957d1881ee03b299d6addb0608cce906defd95af0ce9c5c57198", + "dceb4c12e889e81e4cf8762f6e3150ef4bdd0905201d8a58fc532731676951dd", + "c750b53b0a161e1ad85926914ba6c8d5ad1ee510713f3960560ce394e7a52887", + "885197928a7bbfda4f7649a4ab43921fe3edb097c7bc484d0a630417cc43ba6b", + "693897feb379204ede1719bb7466c5d2bfc510e13241d81e41faf2362646e48e", + "1c20cb31510ea1035f58629048dff51725918996c4a5f970787462ab06b52659", + "c538aa3971e1c25d32d08d6df656e693fb78900189347a2b4f0926abd0825229", + "086df5b19d8a94931cb5bd6da4ff8e28a5b9b9d728fa941b5f610b8e2f941a3f", + "1806e88dc8d479e095b5d12c4fd3fcbb16cc200ae6c9b0d7092f366722409e50", + "4fb760be3fc053dc0f8cea4fb3e3153d9c09a0ffb6ae9f8b7a9f625a01d9f41e", + "8c529bc5d720c674981a54463917a1668930f901a829c7a7fd81df9e22c6065b", + "23ea9fc5c411418a73e6eb1e345d59c38594e78d557ceaa463bc517f70b04ff9", + "d66255233a785a93568b3090153435784a88bb18a98f4654f6b9f1a9b7523775", + "f8dbdf84e625376babe6dc70e9b3ac0c87ae500d4723186ebbc41e452c61559a", + "642f0f1a96fe851410fd6fc240bc9dc92ca027959ca53a0a629004bb2ea56fbb", + "c608b8c3a2e13964225232a9545bf688e0d60a0d063f44d316d9ef7a65e773ab", + "8efe90c4b46bdb85b2c18796489751583a8762d10e620516fe4d3fac5a5fb5e0", + "234ea08f1312c9c4892f79e53862bc559e5256cace22d8605f5da28a3be67f5c", + "72966ddc735efd19c67ba7d4c35a5eda48dc1db5c2e4e58ba4a27aac093ffd3d", + "be81e71ebcfae8066066118fcc114dc6778eba813b1ac5f081b739d677c5a029", + "736c8e8a76186fd13a526106af7d175099c3b6e2fc97817d11f30a9cb1ef8e7b", + "c24c1121bb15aeb63ebbd31aefeb5f8ed020e3b038c082c25c80f3e31088ee9a", + "98fb47c030aa0012422254616be6d6dde7a10d6ec87935e23e82094d1bdc0143", + "c4683b960415284d3d35fa64e20650cb1bf5be47478d1b35295488c23a18147d", + "96a41d3d1109af1b3ee2db8f0467199efc861da0cef0a627de09738b903c4d82", + "3f7473ec5eee65870c0f338f24ac34eb63d82552b18eeea948c41e4af5ddb8b5", + "138d746009105440995fcc325469112b03d8f4849e9e328ba50e7f754926e2cb", + "70f3d75631eb590e27b04a50cf91489bb19d7eaf6a50c76de4b660e08ad5b338", + "bfe183cf3530b6d05dc6b153318b5367b4251f50ec33a7096bcbb317a6b9ae89", + "14fa27be7eca7c7622ff844052d233f46267d131791250c09851d19f0d8fafb2", + "cf958c8dce3b4a62f7d20ff5fa6cc986fbe6149bde5c62645bf153f97cd071c0", + "8d613d9da18f37e1bc978f0d368217e21b952e43ac355d8fbf7acea0300f1171", + "4ad78b35257b3526dc7bbc27073229ff611b1262479533ed3e87b1f5969b5d76", + "e9957d75f3406f76d794c3f47fdd919ac806beeccef5771df235e579e40aed4c", + "702bc5762b3cc061a24e22d9714779db479322221b0fe00c5d7da21c53f52deb", + "7c07be392fa06c0a227b041b699b35767b6b154ba9d347f7d7e633033f2affb8", + "f42b0a239a7f1a8937d017095db7a226bc30b327929bb6176ffc6140e93f6183", + "508441dabd35b41f6e1ea893f365308704ff4c258658e2e69df5976f04cc2ee5", + "ea424f5d2b9721ccb97da1d76a7142e9779a4d682e372816c770370d0b01fa39", + "1e85419f0d05900a74e779afd89881131f1557fb3187ce93944d6e441d2ada90", + "20cc4acff72d84d791c9faa6d45db35196e8234a9a054cf7544ae614c1b37471", + "0544caa5e02a7c37280d78d16af90109b5e7ea5f01d39454e1ef9ca58dcedff9", + "bcc99dd7e18d0ab7550b5638d90de59e4cb41b3d81a40c078beeda7fceb8c8b2", + "04e0febc2ccd40ff6d3b99a1a148f9c9419e1973b16f050e5541c6d52d3eba28", + "e8a2c17565a94ddbeae65da8aa7598c9df594b504f39b26d613f54cd8421c3af", + "c38f96bafeca31cfa79b15d62ba8b1ec804f81e39223732f6c521e6e48049d1d", + "e9aa668c9637753107de7c9a4b1029b0b42e006aa55cb57187b2cfe5cc06b72a", + "ec77d3356595766184bc4193a217649413c4d01c50ea474e7a37b9059ba3ffa7", + "ce6dbf80e58ec8f306e2aca374bbe566435f699d000cccdd98f2ac33b8cdadad", + "0565b373e22e954f6ba435f95a5fb2ee9624b1152eb0578fecdfc17e90214ea5", + "b804828541878da283fdca1600992d6679e44ae1d87dc3eba8cce4dc89198ebd", + "101881ef4602f0038ce7b55f915621e0cd92124438695649fbace601723001c7", + "ac48de2d286d6b7218c560c104a2d8d6e0da7c06ac4a2082a16ffa7e1a92a2f6", + "37e80dc38e48d86ac754f9cc04c88ac9cc083016d552f310b190ea738d22d62c", + "37005a19cbb16b5ecc16408e2abe1785afd71e72e6cd17f5e7b99df39fbf5704", + "83ef08a0a5fbe15d7f2887bb1693ab5ee9674b8de1d766d5c595d1c1e38d3e1a", + "c7993cb60c68818951fd817f3c7e0516aaf57b85d6e5ae2c1c515e8464c00f36", + "e095d77ba9122cc70e6c68788891c170dc5ffefee2b51d0e635554b53dc0248c", + "ab08b3570f75bb2e1cb8ab98438320a38f4490e3d1cabe38cdbec3a5b3b5e331", + "72f18eecdcceef8a781bf73c76a3bad51b4f99da9fd32ec27d2bf5b22463cd70", + "369f261a2029f9cc32c4163c0570dc14c99eb49c2abb723b1f589cde25a03908", + "5ab0e76bf8fbfdf36fa3c18e6da6b759866e932a3c6ac2d4f610dcb46daa9708", + "f76e9b6c663926bfc4c90f5a017f83100cfc92526cbc15ab3f11ac8d59befe11", + "a8552ade08a47aa76be97b9d18c0a7cb0383be084176444d66440a4683041613", + "42ad10bf621491e989d259f91d82bfe7daac43b069f6241c083d848642151b79", + "727a06876d9f835fca7bd47d09730d659286ea9dc4dca455558adca30b56f926", + "11e4e7cbaa918e9ed5dd16df03362ed2f56b10d123da19ebf01c0e34122bcea7", + "143581e5f297b5fa2fd9c3475b3dad9f0549b44d0abc2df6d4bcb62a36538783", + "6bfdfa1a8766452546d5d3e06eaff8a2fc23ae051dbff22dfeb9bdebd615f1b1", + "45cdc04a1d793d51c196f19b7b748a88e875b376b7a3959e28515e37f8b7784f", + "e10c702eb3f6d0174786f8af90a4acef4248f42bd784ecd3c76350ba3986c02a", + "239db0c4797f6c267d14be16943c53543666189a76bf9f3a2b4ef58cac974839", + "9e142a1745b20056d538761b429f5891b6d10af600c9d4c2b3deff43b97fd42d", + "a3a08f2307f1208515d4560a54a6044a68282fc06030a286b1bbc6d93032b4b1", + "e644db1ea5fea02b675074b6dd2bf80895a20092e462871b1947eebc87a1a237", + "488b51651b8eaf5a83eccd4e99f16b9a07205aaef7fd57c31ac63b917743c43b", + "9045e5b03a266d1e22e1cb40f3b514ffedc9ba1d5dee59f091170471f4c39e63", + "59d76b743916fe66242b48409dcc21baf7d1df955df16268e24e1469ad0bf864", + "9f4e83395698fa77a01c56cfd9ed20058bdf0ba0e4ed14563e2287da22e188a2", + "bb1cb449ab0d2da5b8acd3e0bd5949b9ef7229538900ab90cd37abcad5c474fa", + "6ddf833b01dd0b9a7bbaf0b1c4c01f1dadfaa557ceb8f3c224176b5f58fea6a5", + "5c22fc8e8029f0ae33f5bfa31c9ad00bace868026d5f22cfbed2a1a0aab25682", + "cee3fed676c4eed50e628f7fa9069c19a2f8124bbd0098c26c14ccf3b34e8982", + "5a3fb73ae8cdbea7ea874863d05e48109c3fceeaa89565f74a492e11c0f01eb5", + "f2c9b58f776b97fe8e58b58b7918bf8a3b7af6a7d4bbe25c7e2945a579fbf2bd", + "1f7ecaaf9ff8409b85d946c4dfad259507d3078a2e7296c8b12f59a552e433ae", + "2bf1e0e4b3be63bcbae96bd64ac3dc478716173cb51ccbf801b12ac84baf7fe5", + "a94d3d937f5138e187e7aa89d23cc44a54f6e73a7fc8e0289dbfd0cf8cc62626", + "61b991bd9913b7dad3876d9eb71437909d5fd171ece5266c08b1589f2feda71a", + "56751ad25b75e552f790509e494f08b1c95d6345e44b925fef3bf56ba5e0c77a", + "04e0ea542d2d23bf56f86a7fac0c2c73c1aebc00e7095b916f76f1c3308b9c01", + "9230a31f2860bb2467d3cd85dff6f86c936b3a68b1e3b91b3382c6c01681e232", + "65c6a4f1e752664996b0b8f97738bc1d782174faab211b66f9a5baba7dd4da8f", + "448118bfd6c8df89196792d9274fbd33a56f9abb7562eecd47471b53b6b851c8", + "4932c917dd551c2f64991ef9e3add945506479eb97d62e19ceb7fc3938163807", + "c5ee4232a66792864e3e075946dd7181bace1dd506d477e71b60a04e56594d0c", + "5a11be7b0569e2f02efdf8f143f8d46cfcfbe5efb71636f8802459d3f5061cad", + "1ceba9d1d1b8395a464a309130aff69b0879af4246b3cc96ab2957c924c8102b", + "8096e5f70d9976a198e4a1a2eac3e52a5dd3fc7325b98cb74d32cfbfee6e6a17", + "8859a27bc6e6f3d6a9a41e8884c32fad92c93118047cddf2d4bc840e57f1cc32", + "cda040cbaae869b1ce25689ae9052242b751e2047062e7c4be6448f9ef2543f8", + "9b56a225545bf6c8c057ff5caa270028beac2a1470d81ae63f5e188339aba470", + "1e7baac17ffe2cf69a397a7a4a5154f64a3368178a7d89302cd787b528afd138", + "42a412a8c93623a898f95f3830dd1eea40af353657c99740a585fa42dd73634d", + "57db5d3a5372c5bf6dc4f49e37de815ec01ff316c1276ff229fb6d783ff0bd4e", + "41f11d03fe09aaa4e238f8b7f9ee062bfa45e84e5a024f6dc9ec44cf3c9d5950", + "d82cb6530e052a600b66e2711d354991f45cb07eb770e83cf8546ef76b119c9c", + "d5b1583479ab264e4bde7c270d4545736ef2cbaacb32f650988ff0ef4e0c66e5", + "4b0d74dd8f3b56497b3f0fe03574410ac834a0b75ac7d9529b732c65547caecf", + "5eec62cae7a864e2f2ea78f9c51f4d7c02bb5014f9d3dca60772687ccd4a38f8", + "41af9d636d58303718294a789258fe65f1cb0610a0723b1756b22981a8c74742", + "29a10b8096b69c7fd8c89983c184ae0c2ad6778ee41d33029f7b61b534358c1a", + "d0a83b51df33965d690521ca9c4ea3f115c15f003178c50c811febb32335019b", + "5205e4ea985c5862449bbfb256bc1f75d46d4259f9a2bb48e527a4cc00e17f55", + "77e59b0e89b1b47ddbd2e739a765dc5469ebd91a4f5dc11434d8252c12b8b1c7", + "7839af22a778a4e902f2e251e146405d43b82664aef6015b9215439005cf5a0c", + "1500dd5f94624163765ead3c9c9b02d02030f3f25c4c878fa85452bb526e0f2e", + "fc1858a1ea63fc64ae3660832206e776956104683d174f1418574f0508de7e53", + "2788c18135db7a0a799902330f0f60540ac67b1b6e68f3bd8f1c190e9cd4236e", + "b74806b3e50011de7fb377eccd486e3f69be61fedfbf8b1f2b4789ab1f8923a0", + "4e67b684b1c1f743b9197a85ea6da9ed5a52d912e4b027bc78bd95b59f9f61a4", + "591253d1532d7feea798d8c66e7d52cc44efe828a0a6a167f0f76e71dcbf60f6" + ] +} +''' +block = json.loads(data) +txids = [] +for h in block['tx']: + txids.append(bytes.fromhex(h)[::-1]) + +def Hash(msg): + """SHA256^2)(msg) -> bytes""" + return hashlib.sha256(hashlib.sha256(msg).digest()).digest() + +def build_merkle_tree_from_txids(txids): + merkle_tree = [] + for h in txids: + merkle_tree.append(h) + + size = len(txids) + j = 0 + while size > 1: + for i in range(0, size, 2): + i2 = min(i+1, size-1) + merkle_tree.append(Hash(merkle_tree[j+i] + merkle_tree[j+i2])) + + j += size + size = (size + 1) // 2 + + return merkle_tree + +def get_intermediate_nodes(txids, tx_index : int): + merkle_tree = build_merkle_tree_from_txids(txids) + intermediate_nodes = [] + size = len(txids) + offset = 0 + node_index = tx_index + while size > 1: + if tx_index % 2 == 0: + intermediate_nodes.append(merkle_tree[node_index + 1 if tx_index + 1 < size else node_index]) + else: + intermediate_nodes.append(merkle_tree[node_index - 1]) + tx_index >>= 1 + offset += size + node_index = tx_index + offset + size = (size + 1) // 2 + return intermediate_nodes + +def test_check_tx_proof_success(btc_light_client): + chain_tip = btc_light_client.getChainTip() + idx = btc_light_client.getHeight(chain_tip) - btc_light_client.INIT_CHAIN_HEIGHT() + + for _ in range(0,6): + btc_light_client.storeBlockHeader(btc_block_data[idx]) + idx += 1 + + for i in range(len(txids)): + nodes = get_intermediate_nodes(txids, i) + nodes = ['0x'+binascii.hexlify(node).decode('utf8') for node in nodes] + assert btc_light_client.checkTxProof(txids[i], 717700, 2, nodes, i) + +def test_check_tx_proof_fail(btc_light_client): + chain_tip = btc_light_client.getChainTip() + idx = btc_light_client.getHeight(chain_tip) - btc_light_client.INIT_CHAIN_HEIGHT() + + for _ in range(0,6): + btc_light_client.storeBlockHeader(btc_block_data[idx]) + idx += 1 + + for i in range(len(txids)): + j = i + while j == i: + j = random.randint(0, len(txids)) + nodes = get_intermediate_nodes(txids, j) + nodes = ['0x'+binascii.hexlify(node).decode('utf8') for node in nodes] + assert not btc_light_client.checkTxProof(txids[i], 717700, 2, nodes, i) + + for i in range(len(txids)): + j = i + while j == i: + j = random.randint(0, len(txids)) + nodes = get_intermediate_nodes(txids, i) + nodes = ['0x'+binascii.hexlify(node).decode('utf8') for node in nodes] + assert not btc_light_client.checkTxProof(txids[j], 717700, 2, nodes, i) + + for i in range(len(txids)): + j = i + while j == i: + j = random.randint(0, len(txids)) + nodes = get_intermediate_nodes(txids, i) + nodes = ['0x'+binascii.hexlify(node).decode('utf8') for node in nodes] + assert not btc_light_client.checkTxProof(txids[i], 717700, 2, nodes, j) + +def test_check_tx_proof_not_confirm(btc_light_client): + chain_tip = btc_light_client.getChainTip() + idx = btc_light_client.getHeight(chain_tip) - btc_light_client.INIT_CHAIN_HEIGHT() + + for _ in range(0,6): + btc_light_client.storeBlockHeader(btc_block_data[idx]) + idx += 1 + + nodes = get_intermediate_nodes(txids, 0) + nodes = ['0x'+binascii.hexlify(node).decode('utf8') for node in nodes] + assert not btc_light_client.checkTxProof(txids[0], 717700, 5, nodes, 0)