From 839d520206023fa1075a65e19392d9f9b72e3a62 Mon Sep 17 00:00:00 2001 From: Chris Stewart Date: Tue, 4 Jun 2019 09:53:00 -0500 Subject: [PATCH] Node (#490) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * WIP: 2018 12 22 node project (#280) * Add files from old spv node project src compiling test files compiling ran scalafmt Fix serializer tests Get non networking test cases to work WIP: Debug peermessagehandler Update CRUD, remove all of the Actor craziness. Add DbManagement trait and unit test db WIP: Rewroking PeerMessageHandler, create Peer, DataMessageHandler, PeerHandler Reworking Client to handle all tcp messages and message alignment for bitcoin p2p messages * Wip: Node refactor * Create node test project, move all node tests into that project and move all generators for the node project into testkit * Rework ClientTest to use testkit, start minimizing akka usage, implement connect(),isConnected(), disconnect(), isDisconnected() in PeerMessageReceiver * Create Peer, PeerHandler, PeerMessageSender and PeerMessageReceiver * update readme about status of node project (#359) * Add flyway plugin to manage database schemas (#361) * Add flyway plugin to manage database schemas * Switch database driver to sqlite3 to be more portable, rework configs for sqlite3 * Set up sqlite database directories and files if they are not already created * Add torkel's review * Add chain, wallet, db-commons projects (#367) * Add chain, wallet, db-commons projects * Rework db creation logic if they db does not exist * Add config logging to try to debug travis ci * Pass explicit class loader for db config * Remove duplicate call to dbConfig * Make DbConfig.dbConfig a lazy val * Remove noisy log * Add scaladoc to DbConfig * Switch dbConfig readme paragraphs * Fix compile issues introduced during rebase onto master with rpc changes (#394) * WIP: 2019 03 12 tip validation (#378) * Implement blockchain handling data structures Add TipValidation happy path Add more test cases for TipValidation.checkNewTip for badPrevBlockHash and badPOW Add overflow check, fix endianness bug for checking proof of work Add pow transition check, refactor difficultyChangeInterval into chain params, add more tests fix a few nits Fix compile error, clean up unused import Remove redundant files from node project * Implement GetNextWorkRequrired/CalculateNextWorkRequired, move BlockHeaderDAOTest cases into chain project * Add full POW change check in TipValidation, address code review nits * Configure logging in chainTest, turn logging OFF in other test projects * Address code review pt2 * Add coverage minimum for chain project (#398) * Add coverage minimum for chain project * Add first Blockchain.connectTip() unit test, switch to a in memory sqlite database for unit tests, starting using fixtures for BlockHeaderDAO in unit tests * Add tests for ChainHandler.processNewHeader(), ChainHandler.getHeader(), Blockchain.connectTip(). Refactor redundant configurations being passed around excessivly * Address code review, fix a flaky test in ClientTest.scala * Test Fixtures (#403) * Working test fixtures * Removed ChainTestFixture trait in main code * Composing Fixtures (#413) * Downloaded over 9000 mainnet BlockHeaders into a json file * Added new fixture with populated blockHeaderDAO * Split writing to db into batches * Rebased * Simplified fixtures with makeFixture abstraction * Added util functions for composing builders * Add integration test between bitcoind <-> zmq <-> bitcoin-s-chain project. Test that we can relay a header from bitcoind over zmq into the bitcoin-s chain project. Redo ZmqConfig to use InetSocketAddress * Address code review * wip * A compiling withBitcoindZmqChainHandler fixture * Tests passing! * Made blockHeaderDAO private * Got 9000 new block headers from 562375 to 571375 * Added offset to populated blockHeaderDAO fixture * Added scaladocs to fixture things * Initial wallet: import UTXO and spend it (#391) * Updates ExtKeyVersion with fromChainParams method * Add equals to Address * Update BIP44 classes * Add ScriptType * Initial work on wallet support * Add foreign keys pragma for SQLite * Add UTXO models and DAO * Add addres P2WPKH generation and WIP for addUTXO * Add logging config for wallet * Add change address generation, proper-ish addUtxo and sendToAddress * Address code review on #391 * Add empty AES passphrase invariant * Add poor mans test fixtures * Add listUtxos, listAddresses and getBalance to wallet API * Use fixtures from chain project * Fix CI test failures * Fix broken up package path * Updates bloop config for new projects (#424) * Multi fixture file (#419) * Created FixtureTag and ChainFixture Used ChainFixture in BitcoinPowTest Added implicit conversions for nice syntactic sugar * Added documentation for multi-fixture * Made defaultTag a val * add a logback-test.xml to the wallet project (#433) * Introduce AppConfig that combines ChainParams and DbConfig (#432) * 2019 04 23 app config per project db config per project (#434) * Add DB conf file resolution that works across projects * Create applicatoin configurations for specific projects, rework DbConfig structures for individual projects. Force network to be mixed into DbConfig rather than DbConfig to be mixed into the network * Add ammonite to db-commons, remove noisy logs * remove mixin for DbConfig that required a NetworkDb. Now networkDb is just a field on 'DbConfig', this simplifies things downstream type wise when interacting with the projects AppConfig. This commit also removes a parameter from AppConfig, now only a DbConfig needs to be passed in, and we can derive the network and chain params from the DbConfig. The only exemption is UnitTestDbConfig as it is sometimes handy to specify a different network (i.e. mainnet) when testing * Turn DbConfig objects to case objects, wrap those case objects in their parent type companion object * remove cast in Wallet.scala * Add EnhancedEither class for 2.11 compat (#437) Add implicit conversion from Either to 2.11-compatible Either-wrapper. Also remove trailing comma in WalletTestUtil that breaks 2.11 build. * Fix CI tests hanging (#438) * Execute wallet tests sequentially to avoid SQLite deadlocks * Refactor logback config to reduce duplication * Use in-memory SQLite DB for unit tests * Debug prints for DatabaseConfig.forConfig * Fork JVMs in test to ensure proper in-memory DBs * Pass in Akka config to Eclair tests, avoid cluttering Akka log output * Don't fork JVM on node tests' * Move things out of ChainUnitTest (#448) * Move things out of ChainUnitTest * Remove printlns * 2019 04 29 client test (#449) * Bump timeout on connect to node test * Change from isConnected -> isInitialized to avoid the error trying to disconnect before we are fully initialized * Wrote tests for POW difficulty change calculation and header processing (#429) Fixed BitcoinPowTest Rebased onto AppConfig code Rewrote ChainHandler integration test Made chain handler test synchronous Fixed a couple test bugs Implmented a more efficient getAncestorByHeight Fixed ChainHandler integration test by using the correct starting conditions Responded to code review Responded to more code review Deleted redundant Pow test Made BlockHeaderDAO.getAncestorAtHeight use a List for its loop to improve performance * WIP: Create ChainSync, BitcoindChainHandlerViaRpc, add simple ChainSyncTes… (#450) * Create ChainSync, BitcoindChainHandlerViaRpc, add simple ChainSyncTest to sync one block from a external bitcoind instance via rpc * Add check for having the best block hash in our chain state already * Fix prev block hash to be empty hash if genesis block header * BlockchainBuilder (#439) * First commit for implementing a BlockchainBuilder * use Builder rather than ReusableBuilder to be compatible with scala 2.11.x * Decouple Blockchain & BlockHeaderDAO * Rebase onto node, incorporate changes in #429 * Add more comments * Reverse order of headers in builder * rebase onot node branch, refactor apis * DB: Add utility method for listing tables in a DB (#447) * Node rebase (#458) * Implement BIP32 path diffing * Rebase node onto newest HD changes in master * Fix 2.11 compile errors * 2019 05 01 wallet ammonite scripts pt2 (#452) * wip -- not finding testkit in doc worksheet Wip -- classdef not found for create-wallet.sc zmq bug Clean up some logs nest zmq start in bitcoindF update jeromq to 0.5.2-SNAPSHOT to get rid of annoying log to stdout Rebase onto node branch with new configs Successfully running ammonite script create-wallet.sc 2019 05 01 wallet ammonite scripts pt2 (#25) * Refactor Ammonite dep * Add basic error handling in AmmoniteBridge * Add very basic README for doc project Fix compile issues after rebasing onto master Add code to sync our wallet code with bitcoind after creating a tx * refactor ZMQSubscriber to _hopefully_ avoid hanging when we call context.term(). We do this by closing the socket before calling context.term() and using socket.setLinger() * Update doc/src/main/scala/org/bitcoins/doc/wallet/create-wallet.sc Co-Authored-By: Christewart * 2019 05 05 sync chain (#460) * Add code to sync our wallet code with bitcoind after creating a tx Add script to illustrate how the chain persisted and how to sync against a running bitcoind instance on regtest * fix bug relating to subtraction operator not being communative in Pow.getNextWorkRequired(). This kept us from being able to switch proof of work intervals correctly * rename script from persist-chain.sc -> sync-chain.sc * fix 2.11.x compile issues * Refactor chain, node, wallet config (#463) * Refactor chain, node, wallet config Get rid of NetworkDb, DbConfig Add proper structure to conf system, moving everything under the bitcoin-s root key. * Remove Scalacheck from node project * Add doc on configuration * Add override feature to AppConfig * Address code review in #463 * Throw if default data dir is used in tests, add Scaladoc to AppConfig * Add explanations for withOverrides, link to configuration.md from AppConfig * Fix compile error * Moves chain fixtures to testkit project (#475) reset node files * Store encrypted mnemonic to disk (#462) * Add WalletStorage object * Add encrypted mnemonic storage, locked wallet Add lock and unlock operations to wallet. Separate between locked and unlock wallet. * Handle non-existant seed file * Respond to code review from Chris * Use val instead of import * Add doc on how mnemonics are encrypted/stored * 2019 05 15 spv sync headers (#479) * Implement SpvNode skeleton, create NodeUnitTest and move it to the testkit * Implement test case to sync a header via spv into bitcoin-s * Fix compiler errors * Make node project Main runnable (#26) * Add logging configuration to node project * Make default config workable in non-test environments * Add more logging of config in BH DAO and AppConfig * Make Peer id optional * Make node Main.scala runnable * Implement Main.scala to sync with a locally running bitcoind instance. You can now run with 'bloop run node' and sync the node if you adjust the parameters inside of Main.scala. This also reworks the structure of 'AppConfig'. It turns the *AppConfig into a case class intead of case objects. This allows us to pass custom configs into those case classes * Address code review from torkel * Reintroduce withOverrides (#29) * Turn off chain validation logs * Make datadir a parameter to bitcoind config rather than having it implicitly written to the bitcoin.conf file. This was a difference that was occurring in the node branch which had a parameter for the datadir and master which was implicitly writing it to bitcoin.conf * Add ability to overrwrite conf file except in the case of overwriting the DEFAULT_DATADIR & DEFAULT_CONF * remove extra Bitcoind.stopServers in WalletIntegrationTest --- .travis.yml | 1 + .../src/test/resources/logback-test.xml | 23 - .../bitcoins/rpc/BitcoindInstanceTest.scala | 48 +- .../bitcoins/rpc/common/MempoolRpcTest.scala | 8 - .../org/bitcoins/rpc/common/UtilRpcTest.scala | 4 +- .../config/BitcoindAuthCredentialsTest.scala | 7 +- .../rpc/config/BitcoindConfigTest.scala | 16 +- .../rpc/config/BitcoindAuthCredentials.scala | 4 +- .../bitcoins/rpc/config/BitcoindConfig.scala | 102 ++- .../rpc/config/BitcoindInstance.scala | 37 +- .../org/bitcoins/rpc/config/ZmqConfig.scala | 32 +- .../rpc/jsonmodels/BlockchainResult.scala | 24 +- .../rpc/jsonmodels/RawTransactionResult.scala | 23 +- .../rpc/jsonmodels/RpcPsbtResult.scala | 3 +- .../rpc/jsonmodels/WalletResult.scala | 3 +- .../rpc/serializers/JsonReaders.scala | 22 +- .../rpc/serializers/JsonSerializers.scala | 7 +- .../rpc/serializers/JsonWriters.scala | 3 + build.sbt | 189 ++++- .../src/test/resources/block_headers.json | 1 + .../bitcoins/chain/ChainAppConfigTest.scala | 33 + .../BitcoindChainHandlerViaZmqTest.scala | 51 ++ .../chain/blockchain/BlockchainTest.scala | 39 + .../chain/blockchain/ChainHandlerTest.scala | 139 ++++ .../chain/blockchain/sync/ChainSyncTest.scala | 74 ++ .../chain/models/BlockHeaderDAOTest.scala | 175 +++++ .../bitcoins/chain/pow/BitcoinPowTest.scala | 76 ++ .../chain/validation/TipValidationTest.scala | 81 ++ chain/README.md | 17 + chain/build.sbt | 3 + chain/src/main/resources/chain.conf | 5 + .../org/bitcoins/chain/api/ChainApi.scala | 48 ++ .../chain/blockchain/Blockchain.scala | 109 +++ .../chain/blockchain/BlockchainBuilder.scala | 26 + .../chain/blockchain/BlockchainUpdate.scala | 35 + .../chain/blockchain/ChainHandler.scala | 73 ++ .../chain/blockchain/CheckHeaderResult.scala | 5 + .../chain/blockchain/sync/ChainSync.scala | 124 +++ .../chain/config/ChainAppConfig.scala | 62 ++ .../bitcoins/chain/db/ChainDbManagement.scala | 31 + .../chain/models/BlockHeaderDAO.scala | 196 +++++ .../chain/models/BlockHeaderTable.scala | 89 +++ .../scala/org/bitcoins/chain/pow/Pow.scala | 119 +++ .../chain/validation/TipUpdateResult.scala | 28 + .../chain/validation/TipValidation.scala | 107 +++ core-test/src/test/resources/logback-test.xml | 16 +- .../bitcoins/core/crypto/AesCryptTest.scala | 25 +- .../core/crypto/bip32/BIP32PathTest.scala | 64 ++ core/src/main/resources/common-logback.xml | 54 ++ .../core/config/NetworkParameters.scala | 24 +- .../org/bitcoins/core/crypto/AesCrypt.scala | 7 +- .../org/bitcoins/core/crypto/BIP39Seed.scala | 6 +- .../org/bitcoins/core/crypto/HashDigest.scala | 9 + .../bitcoins/core/crypto/MnemonicCode.scala | 2 +- .../org/bitcoins/core/hd/BIP32Path.scala | 72 ++ .../org/bitcoins/core/hd/HDAddress.scala | 2 +- .../scala/org/bitcoins/core/hd/HDPath.scala | 38 +- .../org/bitcoins/core/hd/LegacyHDPath.scala | 4 +- .../bitcoins/core/hd/NestedSegWitHDPath.scala | 4 +- .../org/bitcoins/core/hd/SegWitHDPath.scala | 4 +- .../org/bitcoins/core/protocol/Address.scala | 5 + .../protocol/blockchain/ChainParams.scala | 49 +- .../org/bitcoins/core/script/ScriptType.scala | 69 ++ .../RawBitcoinSerializerHelper.scala | 19 +- .../bitcoins/core/util/BitcoinSLogger.scala | 6 +- .../org/bitcoins/core/util/BitcoinSUtil.scala | 7 + .../org/bitcoins/core/util/EitherUtil.scala | 88 +++ .../org/bitcoins/core/util/FileUtil.scala | 9 + .../org/bitcoins/core/util/FutureUtil.scala | 8 + .../org/bitcoins/core/util/NumberUtil.scala | 24 + .../bitcoins/core/wallet/fee/FeeUnit.scala | 20 +- db-commons/README.md | 21 + db-commons/src/main/resources/db.conf | 17 + db-commons/src/main/resources/reference.conf | 4 + .../scala/org/bitcoins/db/AppConfig.scala | 278 +++++++ .../src/main/scala/org/bitcoins/db/CRUD.scala | 148 ++++ .../scala/org/bitcoins/db/CRUDAutoInc.scala | 30 + .../bitcoins/db/DbCommonsColumnMappers.scala | 169 +++++ .../scala/org/bitcoins/db/DbManagement.scala | 51 ++ .../scala/org/bitcoins/db/DbRowAutoInc.scala | 15 + .../org/bitcoins/db/SQLiteTableInfo.scala | 7 + .../scala/org/bitcoins/db/SlickUtil.scala | 19 + .../scala/org/bitcoins/db/TableAutoInc.scala | 17 + .../main/scala/org/bitcoins/db/package..scala | 16 + doc/README.md | 16 + doc/configuration.md | 40 + doc/database.md | 13 + .../src/main/resources/logback.xml | 15 +- doc/src/main/scala/TxBuilderExample.scala | 157 ++++ .../org/bitcoins/doc/AmmoniteBridge.scala | 43 ++ .../org/bitcoins/doc/chain/sync-chain.sc | 82 ++ .../org/bitcoins/doc/wallet/create-wallet.sc | 232 ++++++ .../src/test/resources/logback-test.xml | 24 - .../eclair/rpc/EclairRpcTestUtilTest.scala | 2 +- .../bitcoins/node/NetworkMessageTest.scala | 15 + .../org/bitcoins/node/NodeAppConfigTest.scala | 33 + .../scala/org/bitcoins/node/SpvNodeTest.scala | 53 ++ .../node/headers/NetworkHeaderTest.scala | 33 + .../node/messages/NetworkPayloadTest.scala | 18 + .../node/messages/TypeIdentifierTest.scala | 23 + .../control/FilterAddMessageSpec.scala | 16 + .../control/FilterLoadMessageSpec.scala | 13 + .../messages/control/PingMessageSpec.scala | 13 + .../messages/control/PongMessageSpec.scala | 13 + .../messages/control/RejectMessageSpec.scala | 13 + .../messages/control/VersionMessageSpec.scala | 14 + .../messages/control/VersionMessageTest.scala | 26 + .../messages/data/GetDataMessageSpec.scala | 17 + .../messages/data/GetHeadersMessageSpec.scala | 14 + .../messages/data/HeadersMessageSpec.scala | 13 + .../messages/data/InventoryMessageSpec.scala | 16 + .../node/messages/data/InventorySpec.scala | 16 + .../data/MerkleBlockMessageSpec.scala | 12 + .../data/TransactionMessageSpec.scala | 14 + .../node/networking/BlockActorTest.scala | 61 ++ .../bitcoins/node/networking/ClientTest.scala | 108 +++ .../node/networking/PaymentActorTest.scala | 118 +++ .../peer/PeerMessageHandlerTest.scala | 207 +++++ .../sync/BlockHeaderSyncActorTest.scala | 242 ++++++ .../RawNetworkHeaderSerializerTest.scala | 42 ++ .../RawTypeIdentifierSerializerTest.scala | 34 + .../RawAddrMessageSerializerTest.scala | 30 + .../RawFilterAddMessageSerializerTest.scala | 24 + .../RawFilterLoadMessageSerializerTest.scala | 29 + .../RawNetworkIpAddressSerializerTest.scala | 32 + .../RawPingMessageSerializerTest.scala | 21 + .../RawRejectMessageSerializerTest.scala | 32 + .../RawServiceIdentifierSerializerTest.scala | 32 + .../RawVersionMessageSerializerTest.scala | 132 ++++ .../RawGetBlocksMessageSerializerTest.scala | 52 ++ .../RawGetDataMessageSerializerTest.scala | 41 + .../RawGetHeadersMessageSerializerTest.scala | 32 + .../RawHeadersMessageSerializerTest.scala | 73 ++ .../RawInventoryMessageSerializerTest.scala | 27 + .../data/RawInventorySerializerTest.scala | 30 + .../RawMerkleBlockMessageSerializerTest.scala | 53 ++ .../RawNotFoundMessageSerializerTest.scala | 30 + .../RawTransactionMessageSerializerTest.scala | 26 + .../node/util/BitcoinSpvNodeUtilTest.scala | 80 ++ .../node/versions/ProtocolVersionTest.scala | 10 + node/LICENSE | 22 + node/README.md | 16 + node/doc/database_setup.md | 50 ++ node/doc/header_sync.md | 61 ++ node/project/Build.scala | 36 + node/src/main/resources/application.conf | 25 + node/src/main/resources/logback.xml | 3 + node/src/main/resources/node.conf | 5 + .../main/scala/org/bitcoins/node/Main.scala | 55 ++ .../org/bitcoins/node/NetworkMessage.scala | 55 ++ .../scala/org/bitcoins/node/SpvNode.scala | 84 +++ .../bitcoins/node/config/NodeAppConfig.scala | 13 + .../bitcoins/node/constant/Constants.scala | 43 ++ .../bitcoins/node/db/NodeDbManagement.scala | 8 + .../bitcoins/node/headers/NetworkHeader.scala | 102 +++ .../node/messages/NetworkPayload.scala | 714 ++++++++++++++++++ .../node/messages/TypeIdentifier.scala | 49 ++ .../node/messages/control/AddrMessage.scala | 33 + .../messages/control/FeeFilterMessage.scala | 28 + .../messages/control/FilterAddMessage.scala | 29 + .../messages/control/FilterLoadMessage.scala | 58 ++ .../node/messages/control/PingMessage.scala | 18 + .../node/messages/control/PongMessage.scala | 22 + .../node/messages/control/RejectMessage.scala | 48 ++ .../messages/control/ServiceIdentifier.scala | 54 ++ .../messages/control/VersionMessage.scala | 120 +++ .../node/messages/data/BlockMessage.scala | 22 + .../node/messages/data/GetBlocksMessage.scala | 47 ++ .../node/messages/data/GetDataMessage.scala | 37 + .../messages/data/GetHeadersMessage.scala | 67 ++ .../node/messages/data/HeadersMessage.scala | 33 + .../node/messages/data/Inventory.scala | 49 ++ .../node/messages/data/InventoryMessage.scala | 36 + .../messages/data/MerkleBlockMessage.scala | 26 + .../node/messages/data/NotFoundMessage.scala | 30 + .../messages/data/TransactionMessage.scala | 26 + .../bitcoins/node/models/ColumnMappers.scala | 7 + .../scala/org/bitcoins/node/models/Peer.scala | 30 + .../org/bitcoins/node/models/PeerDAO.scala | 13 + .../org/bitcoins/node/models/PeerTable.scala | 10 + .../bitcoins/node/networking/BlockActor.scala | 53 ++ .../org/bitcoins/node/networking/Client.scala | 243 ++++++ .../node/networking/PaymentActor.scala | 178 +++++ .../peer/ControlMessageHandler.scala | 36 + .../networking/peer/DataMessageHandler.scala | 53 ++ .../node/networking/peer/PeerHandler.scala | 63 ++ .../networking/peer/PeerMessageReceiver.scala | 244 ++++++ .../peer/PeerMessageReceiverState.scala | 181 +++++ .../networking/peer/PeerMessageSender.scala | 97 +++ .../node/peer/ConnectedPeerManager.scala | 32 + .../RawNetworkMessageSerializer.scala | 28 + .../headers/RawNetworkHeaderSerializer.scala | 51 ++ .../RawTypeIdentifierSerializer.scala | 23 + .../control/RawAddrMessageSerializer.scala | 63 ++ .../RawFeeFilterMessageSerializer.scala | 25 + .../RawFilterAddMessageSerializer.scala | 30 + .../RawFilterLoadMessageSerializer.scala | 27 + .../RawNetworkIpAddressSerializer.scala | 42 ++ .../control/RawPingMessageSerializer.scala | 26 + .../control/RawPongMessageSerializer.scala | 25 + .../control/RawRejectMessageSerializer.scala | 51 ++ .../RawServiceIdentifierSerializer.scala | 30 + .../control/RawVersionMessageSerializer.scala | 109 +++ .../data/RawBlockMessageSerializer.scala | 24 + .../data/RawGetBlocksMessageSerializer.scala | 73 ++ .../data/RawGetDataMessageSerializer.scala | 29 + .../data/RawGetHeadersMessageSerializer.scala | 68 ++ .../data/RawHeadersMessageSerializer.scala | 60 ++ .../data/RawInventoryMessageSerializer.scala | 70 ++ .../data/RawInventorySerializer.scala | 29 + .../RawMerkleBlockMessageSerializer.scala | 30 + .../data/RawNotFoundMessageSerializer.scala | 39 + .../RawTransactionMessageSerializer.scala | 28 + .../node/store/BlockHeaderStore.scala | 52 ++ .../node/util/BitcoinSpvNodeUtil.scala | 114 +++ .../bitcoins/node/util/NetworkIpAddress.scala | 90 +++ .../node/versions/ProtocolVersion.scala | 163 ++++ project/Deps.scala | 83 +- project/plugins.sbt | 2 + secp256k1jni/natives/linux_64/libsecp256k1.la | 1 - testkit/src/main/resources/application.conf | 19 + testkit/src/main/resources/logback-test.xml | 3 + .../testkit/chain/BlockHeaderHelper.scala | 137 ++++ .../testkit/chain/ChainTestUtil.scala | 84 +++ .../testkit/chain/ChainUnitTest.scala | 419 ++++++++++ .../fixture/BitcoindChainHandlerViaRpc.scala | 9 + .../fixture/BitcoindChainHandlerViaZmq.scala | 23 + .../testkit/chain/fixture/ChainFixture.scala | 31 + .../chain/fixture/ChainFixtureHelper.scala | 48 ++ .../chain/fixture/ChainFixtureTag.scala | 45 ++ .../testkit/core/gen/HDGenerators.scala | 23 +- .../testkit/fixtures/BitcoinSFixture.scala | 131 ++++ .../testkit/fixtures/EmptyFixture.scala | 11 + .../testkit/gen/ControlMessageGenerator.scala | 161 ++++ .../testkit/gen/DataMessageGenerator.scala | 108 +++ .../bitcoins/testkit/node/NodeTestUtil.scala | 102 +++ .../bitcoins/testkit/node/NodeUnitTest.scala | 167 ++++ .../testkit/node/fixture/NodeFixture.scala | 11 + .../SpvNodeConnectedWithBitcoind.scala | 9 + .../testkit/rpc/BitcoindRpcTestUtil.scala | 76 +- .../testkit/util/BitcoinSUnitTest.scala | 2 - .../wallet/EncryptedMnemonicTest.scala | 45 ++ .../bitcoins/wallet/WalletAppConfigTest.scala | 34 + .../wallet/WalletIntegrationTest.scala | 77 ++ .../bitcoins/wallet/WalletStorageTest.scala | 102 +++ .../org/bitcoins/wallet/WalletUnitTest.scala | 72 ++ .../wallet/fixtures/AccountDAOFixture.scala | 25 + .../wallet/fixtures/AddressDAOFixture.scala | 46 ++ .../bitcoins/wallet/fixtures/DAOFixture.scala | 42 ++ .../wallet/fixtures/UtxoDAOFixture.scala | 26 + .../wallet/models/AccountDAOTest.scala | 23 + .../wallet/models/AddressDAOTest.scala | 71 ++ .../models/UTXOSpendingInfoDAOTest.scala | 41 + .../wallet/util/BitcoinSWalletTest.scala | 98 +++ .../bitcoins/wallet/util/WalletTestUtil.scala | 63 ++ wallet/README.md | 44 ++ wallet/src/main/resources/wallet.conf | 5 + .../bitcoins/wallet/EncryptedMnemonic.scala | 41 + .../scala/org/bitcoins/wallet/HDUtil.scala | 78 ++ .../org/bitcoins/wallet/LockedWallet.scala | 271 +++++++ .../scala/org/bitcoins/wallet/Wallet.scala | 201 +++++ .../org/bitcoins/wallet/WalletStorage.scala | 229 ++++++ .../bitcoins/wallet/api/AddUtxoResult.scala | 34 + .../bitcoins/wallet/api/CreateWalletApi.scala | 53 ++ .../wallet/api/InitializeWalletResult.scala | 31 + .../wallet/api/UnlockWalletResult.scala | 23 + .../org/bitcoins/wallet/api/WalletApi.scala | 174 +++++ .../wallet/config/WalletAppConfig.scala | 12 + .../wallet/db/WalletDbManagement.scala | 21 + .../bitcoins/wallet/models/AccountDAO.scala | 46 ++ .../bitcoins/wallet/models/AccountTable.scala | 50 ++ .../bitcoins/wallet/models/AddressDAO.scala | 70 ++ .../bitcoins/wallet/models/AddressTable.scala | 205 +++++ .../wallet/models/UTXOSpendingInfoDAO.scala | 21 + .../wallet/models/UTXOSpendingInfoTable.scala | 146 ++++ .../org/bitcoins/zmq/ZMQSubscriber.scala | 56 +- 276 files changed, 14987 insertions(+), 393 deletions(-) delete mode 100644 bitcoind-rpc-test/src/test/resources/logback-test.xml create mode 100644 chain-test/src/test/resources/block_headers.json create mode 100644 chain-test/src/test/scala/org/bitcoins/chain/ChainAppConfigTest.scala create mode 100644 chain-test/src/test/scala/org/bitcoins/chain/blockchain/BitcoindChainHandlerViaZmqTest.scala create mode 100644 chain-test/src/test/scala/org/bitcoins/chain/blockchain/BlockchainTest.scala create mode 100644 chain-test/src/test/scala/org/bitcoins/chain/blockchain/ChainHandlerTest.scala create mode 100644 chain-test/src/test/scala/org/bitcoins/chain/blockchain/sync/ChainSyncTest.scala create mode 100644 chain-test/src/test/scala/org/bitcoins/chain/models/BlockHeaderDAOTest.scala create mode 100644 chain-test/src/test/scala/org/bitcoins/chain/pow/BitcoinPowTest.scala create mode 100644 chain-test/src/test/scala/org/bitcoins/chain/validation/TipValidationTest.scala create mode 100644 chain/README.md create mode 100644 chain/build.sbt create mode 100644 chain/src/main/resources/chain.conf create mode 100644 chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala create mode 100644 chain/src/main/scala/org/bitcoins/chain/blockchain/Blockchain.scala create mode 100644 chain/src/main/scala/org/bitcoins/chain/blockchain/BlockchainBuilder.scala create mode 100644 chain/src/main/scala/org/bitcoins/chain/blockchain/BlockchainUpdate.scala create mode 100644 chain/src/main/scala/org/bitcoins/chain/blockchain/ChainHandler.scala create mode 100644 chain/src/main/scala/org/bitcoins/chain/blockchain/CheckHeaderResult.scala create mode 100644 chain/src/main/scala/org/bitcoins/chain/blockchain/sync/ChainSync.scala create mode 100644 chain/src/main/scala/org/bitcoins/chain/config/ChainAppConfig.scala create mode 100644 chain/src/main/scala/org/bitcoins/chain/db/ChainDbManagement.scala create mode 100644 chain/src/main/scala/org/bitcoins/chain/models/BlockHeaderDAO.scala create mode 100644 chain/src/main/scala/org/bitcoins/chain/models/BlockHeaderTable.scala create mode 100644 chain/src/main/scala/org/bitcoins/chain/pow/Pow.scala create mode 100644 chain/src/main/scala/org/bitcoins/chain/validation/TipUpdateResult.scala create mode 100644 chain/src/main/scala/org/bitcoins/chain/validation/TipValidation.scala create mode 100644 core/src/main/resources/common-logback.xml create mode 100644 core/src/main/scala/org/bitcoins/core/script/ScriptType.scala create mode 100644 core/src/main/scala/org/bitcoins/core/util/EitherUtil.scala create mode 100644 core/src/main/scala/org/bitcoins/core/util/FileUtil.scala create mode 100644 core/src/main/scala/org/bitcoins/core/util/FutureUtil.scala create mode 100644 db-commons/README.md create mode 100644 db-commons/src/main/resources/db.conf create mode 100644 db-commons/src/main/resources/reference.conf create mode 100644 db-commons/src/main/scala/org/bitcoins/db/AppConfig.scala create mode 100644 db-commons/src/main/scala/org/bitcoins/db/CRUD.scala create mode 100644 db-commons/src/main/scala/org/bitcoins/db/CRUDAutoInc.scala create mode 100644 db-commons/src/main/scala/org/bitcoins/db/DbCommonsColumnMappers.scala create mode 100644 db-commons/src/main/scala/org/bitcoins/db/DbManagement.scala create mode 100644 db-commons/src/main/scala/org/bitcoins/db/DbRowAutoInc.scala create mode 100644 db-commons/src/main/scala/org/bitcoins/db/SQLiteTableInfo.scala create mode 100644 db-commons/src/main/scala/org/bitcoins/db/SlickUtil.scala create mode 100644 db-commons/src/main/scala/org/bitcoins/db/TableAutoInc.scala create mode 100644 db-commons/src/main/scala/org/bitcoins/db/package..scala create mode 100644 doc/README.md create mode 100644 doc/configuration.md create mode 100644 doc/database.md rename zmq/src/test/resources/logback-test.xml => doc/src/main/resources/logback.xml (88%) create mode 100644 doc/src/main/scala/TxBuilderExample.scala create mode 100644 doc/src/main/scala/org/bitcoins/doc/AmmoniteBridge.scala create mode 100644 doc/src/main/scala/org/bitcoins/doc/chain/sync-chain.sc create mode 100644 doc/src/main/scala/org/bitcoins/doc/wallet/create-wallet.sc delete mode 100644 eclair-rpc-test/src/test/resources/logback-test.xml create mode 100644 node-test/src/test/scala/org/bitcoins/node/NetworkMessageTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/NodeAppConfigTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/SpvNodeTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/headers/NetworkHeaderTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/NetworkPayloadTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/TypeIdentifierTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/control/FilterAddMessageSpec.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/control/FilterLoadMessageSpec.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/control/PingMessageSpec.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/control/PongMessageSpec.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/control/RejectMessageSpec.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageSpec.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/data/GetDataMessageSpec.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/data/GetHeadersMessageSpec.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/data/HeadersMessageSpec.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/data/InventoryMessageSpec.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/data/InventorySpec.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/data/MerkleBlockMessageSpec.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/messages/data/TransactionMessageSpec.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/networking/BlockActorTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/networking/ClientTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/networking/PaymentActorTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/networking/peer/PeerMessageHandlerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/networking/sync/BlockHeaderSyncActorTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializerTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/util/BitcoinSpvNodeUtilTest.scala create mode 100644 node-test/src/test/scala/org/bitcoins/node/versions/ProtocolVersionTest.scala create mode 100644 node/LICENSE create mode 100644 node/README.md create mode 100644 node/doc/database_setup.md create mode 100644 node/doc/header_sync.md create mode 100644 node/project/Build.scala create mode 100644 node/src/main/resources/application.conf create mode 100644 node/src/main/resources/logback.xml create mode 100644 node/src/main/resources/node.conf create mode 100644 node/src/main/scala/org/bitcoins/node/Main.scala create mode 100644 node/src/main/scala/org/bitcoins/node/NetworkMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/SpvNode.scala create mode 100644 node/src/main/scala/org/bitcoins/node/config/NodeAppConfig.scala create mode 100644 node/src/main/scala/org/bitcoins/node/constant/Constants.scala create mode 100644 node/src/main/scala/org/bitcoins/node/db/NodeDbManagement.scala create mode 100644 node/src/main/scala/org/bitcoins/node/headers/NetworkHeader.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/NetworkPayload.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/TypeIdentifier.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/AddrMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/FeeFilterMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/FilterAddMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/FilterLoadMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/PingMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/PongMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/RejectMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/ServiceIdentifier.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/control/VersionMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/BlockMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/GetBlocksMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/GetDataMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/GetHeadersMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/HeadersMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/Inventory.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/InventoryMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/MerkleBlockMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/NotFoundMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/messages/data/TransactionMessage.scala create mode 100644 node/src/main/scala/org/bitcoins/node/models/ColumnMappers.scala create mode 100644 node/src/main/scala/org/bitcoins/node/models/Peer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/models/PeerDAO.scala create mode 100644 node/src/main/scala/org/bitcoins/node/models/PeerTable.scala create mode 100644 node/src/main/scala/org/bitcoins/node/networking/BlockActor.scala create mode 100644 node/src/main/scala/org/bitcoins/node/networking/Client.scala create mode 100644 node/src/main/scala/org/bitcoins/node/networking/PaymentActor.scala create mode 100644 node/src/main/scala/org/bitcoins/node/networking/peer/ControlMessageHandler.scala create mode 100644 node/src/main/scala/org/bitcoins/node/networking/peer/DataMessageHandler.scala create mode 100644 node/src/main/scala/org/bitcoins/node/networking/peer/PeerHandler.scala create mode 100644 node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiver.scala create mode 100644 node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala create mode 100644 node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala create mode 100644 node/src/main/scala/org/bitcoins/node/peer/ConnectedPeerManager.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/RawNetworkMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFeeFilterMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPongMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawBlockMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializer.scala create mode 100644 node/src/main/scala/org/bitcoins/node/store/BlockHeaderStore.scala create mode 100644 node/src/main/scala/org/bitcoins/node/util/BitcoinSpvNodeUtil.scala create mode 100644 node/src/main/scala/org/bitcoins/node/util/NetworkIpAddress.scala create mode 100644 node/src/main/scala/org/bitcoins/node/versions/ProtocolVersion.scala delete mode 120000 secp256k1jni/natives/linux_64/libsecp256k1.la create mode 100644 testkit/src/main/resources/application.conf create mode 100644 testkit/src/main/resources/logback-test.xml create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/chain/BlockHeaderHelper.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/chain/ChainTestUtil.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/chain/ChainUnitTest.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/BitcoindChainHandlerViaRpc.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/BitcoindChainHandlerViaZmq.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixture.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixtureHelper.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixtureTag.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/fixtures/BitcoinSFixture.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/fixtures/EmptyFixture.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/gen/ControlMessageGenerator.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/gen/DataMessageGenerator.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/node/NodeTestUtil.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/node/fixture/NodeFixture.scala create mode 100644 testkit/src/main/scala/org/bitcoins/testkit/node/fixture/SpvNodeConnectedWithBitcoind.scala create mode 100644 wallet-test/src/test/scala/org/bitcoins/wallet/EncryptedMnemonicTest.scala create mode 100644 wallet-test/src/test/scala/org/bitcoins/wallet/WalletAppConfigTest.scala create mode 100644 wallet-test/src/test/scala/org/bitcoins/wallet/WalletIntegrationTest.scala create mode 100644 wallet-test/src/test/scala/org/bitcoins/wallet/WalletStorageTest.scala create mode 100644 wallet-test/src/test/scala/org/bitcoins/wallet/WalletUnitTest.scala create mode 100644 wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/AccountDAOFixture.scala create mode 100644 wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/AddressDAOFixture.scala create mode 100644 wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/DAOFixture.scala create mode 100644 wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/UtxoDAOFixture.scala create mode 100644 wallet-test/src/test/scala/org/bitcoins/wallet/models/AccountDAOTest.scala create mode 100644 wallet-test/src/test/scala/org/bitcoins/wallet/models/AddressDAOTest.scala create mode 100644 wallet-test/src/test/scala/org/bitcoins/wallet/models/UTXOSpendingInfoDAOTest.scala create mode 100644 wallet-test/src/test/scala/org/bitcoins/wallet/util/BitcoinSWalletTest.scala create mode 100644 wallet-test/src/test/scala/org/bitcoins/wallet/util/WalletTestUtil.scala create mode 100644 wallet/README.md create mode 100644 wallet/src/main/resources/wallet.conf create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/EncryptedMnemonic.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/HDUtil.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/LockedWallet.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/Wallet.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/WalletStorage.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/api/AddUtxoResult.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/api/CreateWalletApi.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/api/InitializeWalletResult.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/api/UnlockWalletResult.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/api/WalletApi.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/config/WalletAppConfig.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/db/WalletDbManagement.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/models/AccountDAO.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/models/AccountTable.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/models/AddressDAO.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/models/AddressTable.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/models/UTXOSpendingInfoDAO.scala create mode 100644 wallet/src/main/scala/org/bitcoins/wallet/models/UTXOSpendingInfoTable.scala diff --git a/.travis.yml b/.travis.yml index 4d88ddb5ae..7c3cf2b13b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -54,6 +54,7 @@ stages: script: sbt ++$TRAVIS_SCALA_VERSION coverage test && sbt ++$TRAVIS_SCALA_VERSION core/coverageReport && + sbt ++$TRAVIS_SCALA_VERSION chain/coverageReport && sbt ++$TRAVIS_SCALA_VERSION coverageAggregate && sbt ++$TRAVIS_SCALA_VERSION coveralls diff --git a/bitcoind-rpc-test/src/test/resources/logback-test.xml b/bitcoind-rpc-test/src/test/resources/logback-test.xml deleted file mode 100644 index d8a7177a47..0000000000 --- a/bitcoind-rpc-test/src/test/resources/logback-test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - logs/rpc-test-application.log - - %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n - - - - - - - - - - - diff --git a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/BitcoindInstanceTest.scala b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/BitcoindInstanceTest.scala index 41b2d1412d..0decb45ca9 100644 --- a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/BitcoindInstanceTest.scala +++ b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/BitcoindInstanceTest.scala @@ -34,20 +34,6 @@ class BitcoindInstanceTest extends BitcoindRpcTest { pw.close() } - override def afterAll(): Unit = {} - - def addDatadirAndWrite(conf: BitcoindConfig): BitcoindConfig = { - val tempDir = Files.createTempDirectory("") - val confWithDatadir = conf.datadir match { - case None => - conf.withOption("datadir", tempDir.toString) - case Some(value) => conf - } - val tempfile = Paths.get(Properties.tmpDir, "bitcoin.conf") - BitcoindRpcTestUtil.writeConfigToFile(confWithDatadir) - confWithDatadir - } - behavior of "BitcoindInstance" it should "start a bitcoind with cookie based authentication" in { @@ -58,7 +44,7 @@ class BitcoindInstanceTest extends BitcoindRpcTest { |rpcport=${RpcUtil.randomPort} """.stripMargin - val conf = addDatadirAndWrite(BitcoindConfig(confStr)) + val conf = BitcoindConfig(confStr, BitcoindRpcTestUtil.tmpDir()) val instance = BitcoindInstance.fromConfig(conf) assert( instance.authCredentials @@ -73,15 +59,15 @@ class BitcoindInstanceTest extends BitcoindRpcTest { it should "start a bitcoind with user and password based authentication" in { val confStr = s""" - |daemon=1 - |regtest=1 - |rpcuser=foobar - |rpcpassword=barfoo - |port=${RpcUtil.randomPort} - |rpcport=${RpcUtil.randomPort} - """.stripMargin + |daemon=1 + |regtest=1 + |rpcuser=foobar + |rpcpassword=barfoo + |port=${RpcUtil.randomPort} + |rpcport=${RpcUtil.randomPort} + """.stripMargin - val conf = addDatadirAndWrite(BitcoindConfig(confStr)) + val conf = BitcoindConfig(confStr, BitcoindRpcTestUtil.tmpDir()) val instance = BitcoindInstance.fromConfig(conf) assert( instance.authCredentials @@ -106,14 +92,14 @@ class BitcoindInstanceTest extends BitcoindRpcTest { val port = RpcUtil.randomPort val rpcPort = RpcUtil.randomPort val confStr = s""" - |daemon=1 - |rpcauth=bitcoin-s:6d7580be1deb4ae52bc4249871845b09$$82b282e7c6493f6982a5a7af9fbb1b671bab702e2f31bbb1c016bb0ea1cc27ca - |regtest=1 - |port=${RpcUtil.randomPort} - |rpcport=${RpcUtil.randomPort} - """.stripMargin + |daemon=1 + |rpcauth=bitcoin-s:6d7580be1deb4ae52bc4249871845b09$$82b282e7c6493f6982a5a7af9fbb1b671bab702e2f31bbb1c016bb0ea1cc27ca + |regtest=1 + |port=${RpcUtil.randomPort} + |rpcport=${RpcUtil.randomPort} + """.stripMargin - val conf = addDatadirAndWrite(BitcoindConfig(confStr)) + val conf = BitcoindConfig(confStr, BitcoindRpcTestUtil.tmpDir()) val authCredentials = BitcoindAuthCredentials.PasswordBased(username = "bitcoin-s", password = "strong_password") @@ -123,7 +109,7 @@ class BitcoindInstanceTest extends BitcoindRpcTest { uri = new URI(s"http://localhost:$port"), rpcUri = new URI(s"http://localhost:$rpcPort"), authCredentials = authCredentials, - datadir = conf.datadir.get + datadir = conf.datadir ) for { diff --git a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/MempoolRpcTest.scala b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/MempoolRpcTest.scala index f9fefd2c5b..1bbf86fb38 100644 --- a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/MempoolRpcTest.scala +++ b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/MempoolRpcTest.scala @@ -28,18 +28,10 @@ class MempoolRpcTest extends BitcoindRpcTest { case (client, otherClient) => val defaultConfig = BitcoindRpcTestUtil.standardConfig - val datadir: Path = { - val tempDirPrefix = null // because java APIs are bad - Files.createTempDirectory(tempDirPrefix) - } - val configNoBroadcast = defaultConfig - .withOption("datadir", datadir.toString()) .withOption("walletbroadcast", 0.toString) - val _ = BitcoindRpcTestUtil.writeConfigToFile(configNoBroadcast) - val instanceWithoutBroadcast = BitcoindInstance.fromConfig(configNoBroadcast) diff --git a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/UtilRpcTest.scala b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/UtilRpcTest.scala index 162f5aa349..446192707e 100644 --- a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/UtilRpcTest.scala +++ b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/common/UtilRpcTest.scala @@ -2,9 +2,9 @@ package org.bitcoins.rpc.common import org.bitcoins.core.crypto.ECPrivateKey import org.bitcoins.core.protocol.P2PKHAddress +import org.bitcoins.core.script.ScriptType import org.bitcoins.rpc.client.common.BitcoindRpcClient import org.bitcoins.rpc.client.common.RpcOpts.AddressType -import org.bitcoins.rpc.jsonmodels.RpcScriptType import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil import org.bitcoins.testkit.util.BitcoindRpcTest @@ -37,7 +37,7 @@ class UtilRpcTest extends BitcoindRpcTest { decoded <- client.decodeScript(multisig.redeemScript) } yield { assert(decoded.reqSigs.contains(2)) - assert(decoded.typeOfScript.contains(RpcScriptType.MULTISIG)) + assert(decoded.typeOfScript.contains(ScriptType.MULTISIG)) assert(decoded.addresses.get.contains(address)) } } diff --git a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindAuthCredentialsTest.scala b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindAuthCredentialsTest.scala index e341469d65..992e49ee13 100644 --- a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindAuthCredentialsTest.scala +++ b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindAuthCredentialsTest.scala @@ -4,13 +4,14 @@ import org.bitcoins.testkit.util.BitcoinSUnitTest import org.bitcoins.rpc.config.BitcoindAuthCredentials.CookieBased import org.bitcoins.rpc.config.BitcoindAuthCredentials.PasswordBased import org.bitcoins.core.config.RegTest +import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil class BitcoindAuthCredentialsTest extends BitcoinSUnitTest { it must "handle cookie based auth" in { val confStr = """ |regtest=1 """.stripMargin - val conf = BitcoindConfig(confStr) + val conf = BitcoindConfig(confStr, BitcoindRpcTestUtil.tmpDir()) val auth = BitcoindAuthCredentials.fromConfig(conf) val cookie = auth match { case cookie: CookieBased => cookie @@ -28,7 +29,7 @@ class BitcoindAuthCredentialsTest extends BitcoinSUnitTest { |rpcuser=foo |rpcpassword=bar """.stripMargin - val conf = BitcoindConfig(confStr) + val conf = BitcoindConfig(confStr, BitcoindRpcTestUtil.tmpDir()) val auth = BitcoindAuthCredentials.fromConfig(conf) val pass = auth match { @@ -48,7 +49,7 @@ class BitcoindAuthCredentialsTest extends BitcoinSUnitTest { |rpcpassword=bar """.stripMargin - val conf = BitcoindConfig(confStr) + val conf = BitcoindConfig(confStr, BitcoindRpcTestUtil.tmpDir()) BitcoindAuthCredentials.fromConfig(conf) match { case _: CookieBased => fail case PasswordBased(username, password) => diff --git a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindConfigTest.scala b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindConfigTest.scala index 42ec466da8..0cb64f218f 100644 --- a/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindConfigTest.scala +++ b/bitcoind-rpc-test/src/test/scala/org/bitcoins/rpc/config/BitcoindConfigTest.scala @@ -9,10 +9,11 @@ import org.bitcoins.testkit.util.BitcoindRpcTest class BitcoindConfigTest extends BitcoinSUnitTest { + def tmpDir = BitcoindRpcTestUtil.tmpDir() it must "have to/fromString symmetry" in { val conf = BitcoindRpcTestUtil.standardConfig val confStr = conf.toWriteableString - val otherConf = BitcoindConfig(confStr) + val otherConf = BitcoindConfig(confStr, tmpDir) val otherConfStr = otherConf.toWriteableString assert(confStr == otherConfStr) } @@ -20,7 +21,8 @@ class BitcoindConfigTest extends BitcoinSUnitTest { it must "parse networks" in { val conf = BitcoindConfig(""" |regtest=1 - """.stripMargin) + """.stripMargin, + tmpDir) assert(conf.network == RegTest) } @@ -35,7 +37,7 @@ class BitcoindConfigTest extends BitcoinSUnitTest { |rpcport=4000 """.stripMargin.split("\n") - val conf = BitcoindConfig(confStr) + val conf = BitcoindConfig(confStr, tmpDir) assert(conf.rpcport == 3000) assert(conf.network == RegTest) } @@ -52,7 +54,7 @@ class BitcoindConfigTest extends BitcoinSUnitTest { |regtest.rpcport=3000 """.stripMargin.split("\n") - val conf = BitcoindConfig(confStr) + val conf = BitcoindConfig(confStr, tmpDir) assert(conf.rpcport == 4000) assert(conf.network == RegTest) } @@ -67,7 +69,7 @@ class BitcoindConfigTest extends BitcoinSUnitTest { |regtest.rpcport=3000 """.stripMargin.split("\n") - val conf = BitcoindConfig(confStr) + val conf = BitcoindConfig(confStr, tmpDir) assert(conf.rpcport == TestNet3.rpcPort) assert(conf.network == TestNet3) } @@ -87,7 +89,7 @@ class BitcoindConfigTest extends BitcoinSUnitTest { |rpcport=1000 """.stripMargin.split("\n") - val conf = BitcoindConfig(confStr) + val conf = BitcoindConfig(confStr, tmpDir) assert(conf.rpcport == 3000) assert(conf.network == TestNet3) assert(conf.username.contains("username")) @@ -116,7 +118,7 @@ class BitcoindConfigTest extends BitcoinSUnitTest { |rpcuser=username """.stripMargin.split("\n") - val conf = BitcoindConfig(confStr) + val conf = BitcoindConfig(confStr, tmpDir) assert(conf.rpcport == 4000) assert(conf.network == RegTest) assert(conf.username.contains("username")) diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindAuthCredentials.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindAuthCredentials.scala index 859ef242d6..2b732cbd3e 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindAuthCredentials.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindAuthCredentials.scala @@ -58,7 +58,7 @@ object BitcoindAuthCredentials extends BitcoinSLogger { datadir: File = BitcoindConfig.DEFAULT_DATADIR) extends BitcoindAuthCredentials { - lazy private[bitcoins] val cookiePath = { + private[bitcoins] lazy val cookiePath = { val middleSegment = network match { case TestNet3 => "testnet3" case MainNet => "" @@ -87,7 +87,7 @@ object BitcoindAuthCredentials extends BitcoinSLogger { } def fromConfig(config: BitcoindConfig): BitcoindAuthCredentials = { - val datadir = config.datadir.getOrElse(BitcoindConfig.DEFAULT_DATADIR) + val datadir = config.datadir val username = config.username val password = config.password (username, password) match { diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindConfig.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindConfig.scala index 25c0c49181..eacfcdb93d 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindConfig.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindConfig.scala @@ -1,12 +1,13 @@ package org.bitcoins.rpc.config -import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.core.util.{BitcoinSLogger, BitcoinSUtil} import org.bitcoins.core.config._ import java.io.File import java.nio.file.Files + import scala.util.Properties import java.nio.file.Paths -import java.net.URI +import java.net.{InetSocketAddress, URI} import java.nio.file.Path /** @@ -23,8 +24,27 @@ import java.nio.file.Path * * @see https://github.com/bitcoin/bitcoin/blob/master/doc/bitcoin-conf.md */ -abstract class BitcoindConfig extends BitcoinSLogger { - private[bitcoins] def lines: Seq[String] +case class BitcoindConfig( + private[bitcoins] val lines: Seq[String], + datadir: File) + extends BitcoinSLogger { + + //create datadir and config if it DNE on disk + if (!datadir.exists()) { + logger.info( + s"datadir=${datadir.getAbsolutePath} does not exist, creating now") + datadir.mkdirs() + BitcoindConfig.writeConfigToFile(this, datadir) + } + + private val confFile = datadir.toPath.resolve("bitcoin.conf") + + //create bitcoin.conf file in datadir if it does not exist + if (!Files.exists(confFile)) { + logger.info( + s"bitcoin.conf in datadir=${datadir.getAbsolutePath} does not exist, creating now") + BitcoindConfig.writeConfigToFile(this, datadir) + } /** * Converts the config back to a string that can be written @@ -187,16 +207,16 @@ abstract class BitcoindConfig extends BitcoinSLogger { }.headOption } - lazy val datadir: Option[File] = getValue("datadir").map(new File(_)) - lazy val username: Option[String] = getValue("rpcuser") lazy val password: Option[String] = getValue("rpcpassword") - lazy val zmqpubrawblock: Option[URI] = - getValue("zmqpubrawblock").map(new URI(_)) - lazy val zmqpubrawtx: Option[URI] = getValue("zmqpubrawtx").map(new URI(_)) - lazy val zmqpubhashblock: Option[URI] = - getValue("zmqpubhashblock").map(new URI(_)) - lazy val zmqpubhashtx: Option[URI] = getValue("zmqpubhashtx").map(new URI(_)) + lazy val zmqpubrawblock: Option[InetSocketAddress] = + getValue("zmqpubrawblock").map(BitcoinSUtil.toInetSocketAddress) + lazy val zmqpubrawtx: Option[InetSocketAddress] = + getValue("zmqpubrawtx").map(BitcoinSUtil.toInetSocketAddress) + lazy val zmqpubhashblock: Option[InetSocketAddress] = + getValue("zmqpubhashblock").map(BitcoinSUtil.toInetSocketAddress) + lazy val zmqpubhashtx: Option[InetSocketAddress] = + getValue("zmqpubhashtx").map(BitcoinSUtil.toInetSocketAddress) lazy val port: Int = getValue("port").map(_.toInt).getOrElse(network.port) @@ -224,13 +244,14 @@ abstract class BitcoindConfig extends BitcoinSLogger { /** Creates a new config with the given keys and values appended */ def withOption(key: String, value: String): BitcoindConfig = { val ourLines = this.lines - new BitcoindConfig { + val newLine = s"$key=$value" + val lines = newLine +: ourLines + val newConfig = BitcoindConfig(lines, datadir) + logger.debug( + s"Appending new config with $key=$value to datadir=${datadir.getAbsolutePath}") + BitcoindConfig.writeConfigToFile(newConfig, datadir) - def lines: Seq[String] = { - val newLine = s"$key=$value" - newLine +: ourLines - } - } + newConfig } /** Creates a new config with the given key and values, @@ -254,30 +275,30 @@ abstract class BitcoindConfig extends BitcoinSLogger { network: NetworkParameters): BitcoindConfig = withOption(key = s"${networkString(network)}.$key", value = value) + def withDatadir(newDatadir: File): BitcoindConfig = { + BitcoindConfig(lines, newDatadir) + } + } -object BitcoindConfig { +object BitcoindConfig extends BitcoinSLogger { /** The empty `bitcoind` config */ - lazy val empty: BitcoindConfig = BitcoindConfig("") - - /** Constructs a `bitcoind` config from the given lines */ - def apply(config: Seq[String]): BitcoindConfig = new BitcoindConfig { - val lines: Seq[String] = config - } + lazy val empty: BitcoindConfig = BitcoindConfig("", DEFAULT_DATADIR) /** * Constructs a `bitcoind` config from the given string, * by splitting it on newlines */ - def apply(config: String): BitcoindConfig = - apply(config.split("\n")) + def apply(config: String, datadir: File): BitcoindConfig = + apply(config.split("\n"), datadir) /** Reads the given path and construct a `bitcoind` config from it */ - def apply(config: Path): BitcoindConfig = apply(config.toFile) + def apply(config: Path): BitcoindConfig = + apply(config.toFile, config.getParent.toFile) /** Reads the given file and construct a `bitcoind` config from it */ - def apply(config: File): BitcoindConfig = { + def apply(config: File, datadir: File = DEFAULT_DATADIR): BitcoindConfig = { import scala.collection.JavaConverters._ val lines = Files .readAllLines(config.toPath) @@ -285,7 +306,7 @@ object BitcoindConfig { .asScala .toList - apply(lines) + apply(lines, datadir) } /** @@ -321,4 +342,25 @@ object BitcoindConfig { .toPath() .resolve("bitcoin.conf") .toFile + + /** + * Writes the config to the data directory within it, if it doesn't + * exist. Returns the written file. + */ + def writeConfigToFile(config: BitcoindConfig, datadir: File): Path = { + + val confStr = config.lines.mkString("\n") + + Files.createDirectories(datadir.toPath) + val confFile = datadir.toPath.resolve("bitcoin.conf") + + if (datadir == DEFAULT_DATADIR && confFile == DEFAULT_CONF_FILE) { + logger.warn( + s"We will not overrwrite the existing bitcoin.conf in default datadir") + } else { + Files.write(confFile, confStr.getBytes) + } + + confFile + } } diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindInstance.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindInstance.scala index 5b1f888b13..aa963476a7 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindInstance.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/BitcoindInstance.scala @@ -50,6 +50,8 @@ sealed trait BitcoindInstance extends BitcoinSLogger { case _: String => BitcoindVersion.Unknown } } + + def p2pPort: Int = uri.getPort } object BitcoindInstance { @@ -104,8 +106,7 @@ object BitcoindInstance { val file = configPath.toFile() fromConfigFile(file) } else { - fromConfig( - BitcoindConfig.empty.withOption("datadir", configPath.toString)) + fromConfig(BitcoindConfig.empty) } } @@ -120,15 +121,9 @@ object BitcoindInstance { require(file.exists, s"${file.getPath} does not exist!") require(file.isFile, s"${file.getPath} is not a file!") - val conf = BitcoindConfig(file) + val conf = BitcoindConfig(file, file.getParentFile) - val confWithDatadir = if (conf.datadir.isEmpty) { - conf.withOption("datadir", file.getParent.toString) - } else { - conf - } - - fromConfig(confWithDatadir) + fromConfig(conf) } /** Constructs a `bitcoind` instance from the given config */ @@ -137,21 +132,11 @@ object BitcoindInstance { ): BitcoindInstance = { val authCredentials = BitcoindAuthCredentials.fromConfig(config) - - config.datadir match { - case None => - BitcoindInstance(config.network, - config.uri, - config.rpcUri, - authCredentials, - zmqConfig = ZmqConfig.fromConfig(config)) - case Some(datadir) => - BitcoindInstance(config.network, - config.uri, - config.rpcUri, - authCredentials, - zmqConfig = ZmqConfig.fromConfig(config), - datadir = datadir) - } + BitcoindInstance(config.network, + config.uri, + config.rpcUri, + authCredentials, + zmqConfig = ZmqConfig.fromConfig(config), + datadir = config.datadir) } } diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/ZmqConfig.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/ZmqConfig.scala index 7d6603317f..3bcdc406d1 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/ZmqConfig.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/config/ZmqConfig.scala @@ -1,27 +1,29 @@ package org.bitcoins.rpc.config -import java.net.URI +import java.net.InetSocketAddress + +import org.bitcoins.core.util.BitcoinSLogger sealed trait ZmqConfig { - def hashBlock: Option[URI] - def rawBlock: Option[URI] - def hashTx: Option[URI] - def rawTx: Option[URI] + def hashBlock: Option[InetSocketAddress] + def rawBlock: Option[InetSocketAddress] + def hashTx: Option[InetSocketAddress] + def rawTx: Option[InetSocketAddress] } -object ZmqConfig { +object ZmqConfig extends BitcoinSLogger { private case class ZmqConfigImpl( - hashBlock: Option[URI], - rawBlock: Option[URI], - hashTx: Option[URI], - rawTx: Option[URI] + hashBlock: Option[InetSocketAddress], + rawBlock: Option[InetSocketAddress], + hashTx: Option[InetSocketAddress], + rawTx: Option[InetSocketAddress] ) extends ZmqConfig def apply( - hashBlock: Option[URI] = None, - rawBlock: Option[URI] = None, - hashTx: Option[URI] = None, - rawTx: Option[URI] = None + hashBlock: Option[InetSocketAddress] = None, + rawBlock: Option[InetSocketAddress] = None, + hashTx: Option[InetSocketAddress] = None, + rawTx: Option[InetSocketAddress] = None ): ZmqConfig = ZmqConfigImpl(hashBlock = hashBlock, rawBlock = rawBlock, @@ -33,7 +35,7 @@ object ZmqConfig { * `localhost` and the same port */ def fromPort(port: Int): ZmqConfig = { - val uri = new URI(s"tcp://localhost:$port") + val uri = new InetSocketAddress("tcp://127.0.0.1", port) ZmqConfig(hashBlock = Some(uri), rawBlock = Some(uri), hashTx = Some(uri), diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/BlockchainResult.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/BlockchainResult.scala index 8a124a71d4..1d8d7ea5cf 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/BlockchainResult.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/BlockchainResult.scala @@ -1,8 +1,9 @@ package org.bitcoins.rpc.jsonmodels -import org.bitcoins.core.crypto.{DoubleSha256DigestBE} +import org.bitcoins.core.crypto.DoubleSha256DigestBE import org.bitcoins.core.currency.Bitcoins import org.bitcoins.core.number.{Int32, UInt32} +import org.bitcoins.core.protocol.blockchain.BlockHeader import org.bitcoins.core.wallet.fee.BitcoinFeeUnit sealed abstract class BlockchainResult @@ -104,7 +105,26 @@ case class GetBlockHeaderResult( chainwork: String, previousblockhash: Option[DoubleSha256DigestBE], nextblockhash: Option[DoubleSha256DigestBE]) - extends BlockchainResult + extends BlockchainResult { + def blockHeader: BlockHeader = { + + //prevblockhash is only empty if we have the genesis block + //we assume the prevhash of the gensis block is the empty hash + val prevHash = { + if (height == 0 && previousblockhash.isEmpty) { + DoubleSha256DigestBE.empty + } else { + previousblockhash.get + } + } + BlockHeader(version = Int32(version), + previousBlockHash = prevHash.flip, + merkleRootHash = merkleroot.flip, + time = time, + nBits = bits, + nonce = nonce) + } +} case class ChainTip( height: Int, diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RawTransactionResult.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RawTransactionResult.scala index 62cdaf0aa4..48b9fa687f 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RawTransactionResult.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RawTransactionResult.scala @@ -6,6 +6,7 @@ import org.bitcoins.core.number.UInt32 import org.bitcoins.core.protocol.script.{ScriptPubKey, ScriptSignature} import org.bitcoins.core.protocol.transaction.{Transaction, TransactionInput} import org.bitcoins.core.protocol.{BitcoinAddress, P2PKHAddress, P2SHAddress} +import org.bitcoins.core.script.ScriptType sealed abstract class RawTransactionResult @@ -27,35 +28,17 @@ case class RpcTransactionOutput( scriptPubKey: RpcScriptPubKey) extends RawTransactionResult -/** - * @see [[https://github.com/bitcoin/bitcoin/blob/fa6180188b8ab89af97860e6497716405a48bab6/src/script/standard.cpp#L27 standard.cpp]] - * from Bitcoin Core - */ -sealed abstract class RpcScriptType extends RawTransactionResult - -object RpcScriptType { - final case object NONSTANDARD extends RpcScriptType - final case object PUBKEY extends RpcScriptType - final case object PUBKEYHASH extends RpcScriptType - final case object SCRIPTHASH extends RpcScriptType - final case object MULTISIG extends RpcScriptType - final case object NULLDATA extends RpcScriptType - final case object WITNESS_V0_KEYHASH extends RpcScriptType - final case object WITNESS_V0_SCRIPTHASH extends RpcScriptType - final case object WITNESS_UNKNOWN extends RpcScriptType -} - case class RpcScriptPubKey( asm: String, hex: String, reqSigs: Option[Int], - scriptType: RpcScriptType, + scriptType: ScriptType, addresses: Option[Vector[BitcoinAddress]]) extends RawTransactionResult case class DecodeScriptResult( asm: String, - typeOfScript: Option[RpcScriptType], + typeOfScript: Option[ScriptType], reqSigs: Option[Int], addresses: Option[Vector[P2PKHAddress]], p2sh: P2SHAddress) diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RpcPsbtResult.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RpcPsbtResult.scala index cdbbb7890a..d82d76c07a 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RpcPsbtResult.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/RpcPsbtResult.scala @@ -5,6 +5,7 @@ import org.bitcoins.core.currency.Bitcoins import org.bitcoins.core.protocol.BitcoinAddress import org.bitcoins.core.protocol.script.ScriptPubKey import org.bitcoins.core.protocol.transaction.Transaction +import org.bitcoins.core.script.ScriptType import org.bitcoins.core.script.crypto.HashType sealed abstract class RpcPsbtResult @@ -40,7 +41,7 @@ final case class RpcPsbtInput( final case class RpcPsbtScript( asm: String, // todo(torkelrogstad) split into Vector[ScriptToken]? hex: ScriptPubKey, - scriptType: Option[RpcScriptType], + scriptType: Option[ScriptType], address: Option[BitcoinAddress] ) extends RpcPsbtResult diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/WalletResult.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/WalletResult.scala index aa9d3e66ba..da6fc67f70 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/WalletResult.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/jsonmodels/WalletResult.scala @@ -14,6 +14,7 @@ import org.bitcoins.core.number.UInt32 import org.bitcoins.core.protocol.BitcoinAddress import org.bitcoins.core.protocol.script.{ScriptPubKey, WitnessVersion} import org.bitcoins.core.protocol.transaction.Transaction +import org.bitcoins.core.script.ScriptType import org.bitcoins.core.wallet.fee.BitcoinFeeUnit import org.bitcoins.rpc.client.common.RpcOpts.LabelPurpose import org.joda.time.DateTime @@ -198,7 +199,7 @@ case class AddressInfoResult( iscompressed: Option[Boolean], witness_version: Option[WitnessVersion], witness_program: Option[String], // todo what's the correct type here? - script: Option[RpcScriptType], + script: Option[ScriptType], hex: Option[ScriptPubKey], pubkeys: Option[Vector[ECPublicKey]], sigsrequired: Option[Int], diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonReaders.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonReaders.scala index c44264203e..a000c764e5 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonReaders.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonReaders.scala @@ -20,6 +20,7 @@ import org.bitcoins.core.protocol.{ P2PKHAddress, P2SHAddress } +import org.bitcoins.core.script.ScriptType import org.bitcoins.core.script.crypto.HashType import org.bitcoins.core.wallet.fee.{BitcoinFeeUnit, SatoshisPerByte} import org.bitcoins.rpc.client.common.RpcOpts.LabelPurpose @@ -448,7 +449,7 @@ object JsonReaders { for { asm <- (json \ "asm").validate[String] hex <- (json \ "hex").validate[ScriptPubKey] - scriptType <- (json \ "type").validateOpt[RpcScriptType] + scriptType <- (json \ "type").validateOpt[ScriptType] address <- (json \ "address").validateOpt[BitcoinAddress] } yield RpcPsbtScript(asm = asm, @@ -498,20 +499,11 @@ object JsonReaders { } - implicit object RpcScriptTypeReads extends Reads[RpcScriptType] { - import RpcScriptType._ - override def reads(json: JsValue): JsResult[RpcScriptType] = - json.validate[String].flatMap { - case "nonstandard" => JsSuccess(NONSTANDARD) - case "pubkey" => JsSuccess(PUBKEY) - case "pubkeyhash" => JsSuccess(PUBKEYHASH) - case "scripthash" => JsSuccess(SCRIPTHASH) - case "multisig" => JsSuccess(MULTISIG) - case "nulldata" => JsSuccess(NULLDATA) - case "witness_v0_keyhash" => JsSuccess(WITNESS_V0_KEYHASH) - case "witness_v0_scripthash" => JsSuccess(WITNESS_V0_SCRIPTHASH) - case "witness_unknown" => JsSuccess(WITNESS_UNKNOWN) - } + implicit object ScriptTypeReads extends Reads[ScriptType] { + override def reads(json: JsValue): JsResult[ScriptType] = + json + .validate[String] + .map(ScriptType.fromStringExn) } implicit object TestMempoolAcceptResultReads diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonSerializers.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonSerializers.scala index 357ba45d00..741dd9ef24 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonSerializers.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonSerializers.scala @@ -20,6 +20,7 @@ import org.bitcoins.core.protocol.{ P2PKHAddress, P2SHAddress } +import org.bitcoins.core.script.ScriptType import org.bitcoins.core.wallet.fee.BitcoinFeeUnit import org.bitcoins.rpc.client.common.RpcOpts.AddressType import org.bitcoins.rpc.jsonmodels._ @@ -87,7 +88,7 @@ object JsonSerializers { ((__ \ "asm").read[String] and (__ \ "hex").read[String] and (__ \ "reqSigs").readNullable[Int] and - (__ \ "type").read[RpcScriptType] and + (__ \ "type").read[ScriptType] and (__ \ "addresses").readNullable[Vector[BitcoinAddress]])(RpcScriptPubKey) implicit val rpcTransactionOutputReads: Reads[RpcTransactionOutput] = Json.reads[RpcTransactionOutput] @@ -96,7 +97,7 @@ object JsonSerializers { implicit val decodeScriptResultReads: Reads[DecodeScriptResult] = ((__ \ "asm").read[String] and - (__ \ "type").readNullable[RpcScriptType] and + (__ \ "type").readNullable[ScriptType] and (__ \ "reqSigs").readNullable[Int] and (__ \ "addresses").readNullable[Vector[P2PKHAddress]] and (__ \ "p2sh").read[P2SHAddress])(DecodeScriptResult) @@ -359,7 +360,7 @@ object JsonSerializers { implicit val walletCreateFundedPsbtResultReads: Reads[ WalletCreateFundedPsbtResult] = Json.reads[WalletCreateFundedPsbtResult] - implicit val rpcScriptTypeReads: Reads[RpcScriptType] = RpcScriptTypeReads + implicit val scriptTypeReads: Reads[ScriptType] = ScriptTypeReads implicit val testMempoolAcceptResultReads: Reads[TestMempoolAcceptResult] = TestMempoolAcceptResultReads diff --git a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonWriters.scala b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonWriters.scala index 6a8da924ca..fcab7bc15f 100644 --- a/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonWriters.scala +++ b/bitcoind-rpc/src/main/scala/org/bitcoins/rpc/serializers/JsonWriters.scala @@ -17,6 +17,9 @@ import play.api.libs.json._ import scala.collection.mutable +// for mapWrites below +import scala.language.implicitConversions + object JsonWriters { implicit object HashTypeWrites extends Writes[HashType] { override def writes(hash: HashType): JsValue = hash match { diff --git a/build.sbt b/build.sbt index ac74e31c41..020c0eb2cc 100644 --- a/build.sbt +++ b/build.sbt @@ -6,7 +6,10 @@ import scala.util.Properties cancelable in Global := true -fork in Test := true +//don't allow us to wipe all of our prod databases +flywayClean / aggregate := false +//allow us to wipe our test databases +Test / flywayClean / aggregate := true lazy val timestamp = new java.util.Date().getTime @@ -57,6 +60,7 @@ lazy val commonSettings = List( assemblyOption in assembly := (assemblyOption in assembly).value .copy(includeScala = false), licenses += ("MIT", url("http://opensource.org/licenses/MIT")), + /** * Adding Ammonite REPL to test scope, can access both test and compile * sources. Docs: http://ammonite.io/#Ammonite-REPL @@ -76,9 +80,16 @@ lazy val commonSettings = List( ) lazy val commonTestSettings = Seq( - publish / skip := true + publish / skip := true, ) ++ commonSettings +lazy val commonTestWithDbSettings = Seq( + // To make in-memory DBs work properly + Test / fork := true, + // To avoid deadlock issues with SQLite + Test / parallelExecution := false +) ++ commonTestSettings + lazy val commonProdSettings = Seq( Test / bloopGenerate := None ) ++ commonSettings @@ -87,16 +98,22 @@ lazy val bitcoins = project .in(file(".")) .aggregate( secp256k1jni, + chain, + chainTest, core, coreTest, - zmq, bitcoindRpc, bitcoindRpcTest, bench, eclairRpc, eclairRpcTest, + node, + nodeTest, + wallet, + walletTest, testkit, - scripts + scripts, + zmq ) .settings(commonSettings: _*) .settings(crossScalaVersions := Nil) @@ -207,14 +224,45 @@ lazy val coreTest = project ) .enablePlugins() +lazy val chainDbSettings = dbFlywaySettings("chaindb") +lazy val chain = project + .in(file("chain")) + .settings(commonProdSettings: _*) + .settings(chainDbSettings: _*) + .settings( + name := "bitcoin-s-chain", + libraryDependencies ++= Deps.chain + ).dependsOn(core, dbCommons) + .enablePlugins(FlywayPlugin) + +lazy val chainTest = project + .in(file("chain-test")) + .settings(commonTestWithDbSettings: _*) + .settings(chainDbSettings: _*) + .settings( + name := "bitcoin-s-chain-test", + libraryDependencies ++= Deps.chainTest, + ).dependsOn(chain, core, testkit, zmq) + .enablePlugins(FlywayPlugin) + + +lazy val dbCommons = project + .in(file("db-commons")) + .settings(commonSettings: _*) + .settings( + name := "bitcoin-s-db-commons", + libraryDependencies ++= Deps.dbCommons + ).dependsOn(core) + .enablePlugins() + + lazy val zmq = project .in(file("zmq")) .settings(commonSettings: _*) .settings(name := "bitcoin-s-zmq", libraryDependencies ++= Deps.bitcoindZmq) .dependsOn( core - ) - .enablePlugins(GitVersioning) + ).enablePlugins(GitVersioning) lazy val bitcoindRpc = project .in(file("bitcoind-rpc")) @@ -264,13 +312,56 @@ lazy val eclairRpcTest = project .dependsOn(testkit) .enablePlugins() +lazy val nodeDbSettings = dbFlywaySettings("nodedb") +lazy val node = { + project + .in(file("node")) + .settings(commonSettings: _*) + .settings(nodeDbSettings: _*) + .settings( + name := "bitcoin-s-node", + libraryDependencies ++= Deps.node + ) + .dependsOn( + core, + chain, + dbCommons, + bitcoindRpc + ).enablePlugins(FlywayPlugin) +} + +lazy val nodeTest = { + project + .in(file("node-test")) + .settings(commonTestWithDbSettings: _*) + .settings(nodeDbSettings: _*) + .settings( + name := "bitcoin-s-node-test", + // There's a weird issue with forking + // in node tests, for example this CI + // error: https://travis-ci.org/bitcoin-s/bitcoin-s-core/jobs/525018199#L1252 + // It seems to be related to this + // Scalatest issue: + // https://github.com/scalatest/scalatest/issues/556 + Test / fork := false, + libraryDependencies ++= Deps.nodeTest + ).dependsOn( + node, + testkit + ).enablePlugins(FlywayPlugin) +} + lazy val testkit = project .in(file("testkit")) .settings(commonProdSettings: _*) .dependsOn( core, + chain, bitcoindRpc, - eclairRpc + eclairRpc, + node, + wallet, + zmq ) .enablePlugins(GitVersioning) @@ -304,6 +395,30 @@ lazy val docs = project ) .enablePlugins(MdocPlugin, DocusaurusPlugin) +lazy val walletDbSettings = dbFlywaySettings("walletdb") +lazy val wallet = project + .in(file("wallet")) + .settings(commonProdSettings: _*) + .settings(walletDbSettings: _*) + .settings( + name := "bitcoin-s-wallet", + libraryDependencies ++= Deps.wallet + ) + .dependsOn(core, dbCommons) + .enablePlugins(FlywayPlugin) + +lazy val walletTest = project + .in(file("wallet-test")) + .settings(commonTestWithDbSettings: _*) + .settings(walletDbSettings: _*) + .settings( + name := "bitcoin-s-wallet-test", + libraryDependencies ++= Deps.walletTest, + ) + .dependsOn(core, testkit, wallet) + .enablePlugins(FlywayPlugin) + + lazy val scripts = project .in(file("scripts")) .dependsOn(core, bitcoindRpc, eclairRpc, zmq) @@ -312,6 +427,17 @@ lazy val scripts = project name := "bitcoin-s-scripts", libraryDependencies ++= Deps.scripts ) + .dependsOn( + bitcoindRpc, + chain, + core, + eclairRpc, + node, + secp256k1jni, + testkit, + wallet, + zmq + ) // Ammonite is invoked through running // a main class it places in test sources @@ -327,3 +453,52 @@ lazy val scripts = project addCommandAlias("amm", "test:run") publishArtifact in bitcoins := false + +def dbFlywaySettings(dbName: String): List[Setting[_]] = { + lazy val DB_HOST = "localhost" + lazy val DB_NAME = s"${dbName}.sqlite" + lazy val network = "unittest" //mainnet, testnet3, regtest, unittest + + lazy val mainnetDir = s"${System.getenv("HOME")}/.bitcoin-s/mainnet/" + lazy val testnetDir = s"${System.getenv("HOME")}/.bitcoin-s/testnet3/" + lazy val regtestDir = s"${System.getenv("HOME")}/.bitcoin-s/regtest/" + lazy val unittestDir = s"${System.getenv("HOME")}/.bitcoin-s/unittest/" + + lazy val dirs = List(mainnetDir,testnetDir,regtestDir,unittestDir) + + //create directies if they DNE + dirs.foreach { d => + val file = new File(d) + file.mkdirs() + val db = new File(d + DB_NAME) + db.createNewFile() + } + + def makeNetworkSettings(directoryPath: String): List[Setting[_]] = List( + Test / flywayUrl := s"jdbc:sqlite:$directoryPath$DB_NAME", + Test / flywayLocations := List("nodedb/migration"), + Test / flywayUser := "nodedb", + Test / flywayPassword := "", + flywayUrl := s"jdbc:sqlite:$directoryPath$DB_NAME", + flywayUser := "nodedb", + flywayPassword := "" + ) + + lazy val mainnet = makeNetworkSettings(mainnetDir) + + lazy val testnet3 = makeNetworkSettings(testnetDir) + + lazy val regtest = makeNetworkSettings(regtestDir) + + lazy val unittest = makeNetworkSettings(unittestDir) + + network match { + case "mainnet" => mainnet + case "testnet3" => testnet3 + case "regtest" => regtest + case "unittest" => unittest + case unknown: String => throw new IllegalArgumentException(s"Unknown network=${unknown}") + } +} + +publishArtifact in bitcoins := false \ No newline at end of file diff --git a/chain-test/src/test/resources/block_headers.json b/chain-test/src/test/resources/block_headers.json new file mode 100644 index 0000000000..f6be36f253 --- /dev/null +++ b/chain-test/src/test/resources/block_headers.json @@ -0,0 +1 @@ +["0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c","010000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000982051fd1e4ba744bbbe680e1fee14677ba1a3c3540bf7b1cdb606e857233e0e61bc6649ffff001d01e36299","010000004860eb18bf1b1620e37e9490fc8a427514416fd75159ab86688e9a8300000000d5fdcc541e25de1c7a5addedf24858b8bb665c9f36ef744ee42c316022c90f9bb0bc6649ffff001d08d2bd61","01000000bddd99ccfda39da1b108ce1a5d70038d0a967bacb68b6b63065f626a0000000044f672226090d85db9a9f2fbfe5f0f9609b387af7be5b7fbb7a1767c831c9e995dbe6649ffff001d05e0ed6d","010000004944469562ae1c2c74d9a535e00b6f3e40ffbad4f2fda3895501b582000000007a06ea98cd40ba2e3288262b28638cec5337c1456aaf5eedc8e9e5a20f062bdf8cc16649ffff001d2bfee0a9","0100000085144a84488ea88d221c8bd6c059da090e88f8a2c99690ee55dbba4e00000000e11c48fecdd9e72510ca84f023370c9a38bf91ac5cae88019bee94d24528526344c36649ffff001d1d03e477","01000000fc33f596f822a0a1951ffdbf2a897b095636ad871707bf5d3162729b00000000379dfb96a5ea8c81700ea4ac6b97ae9a9312b2d4301a29580e924ee6761a2520adc46649ffff001d189c4c97","010000008d778fdc15a2d3fb76b7122a3b5582bea4f21f5a0c693537e7a03130000000003f674005103b42f984169c7d008370967e91920a6a5d64fd51282f75bc73a68af1c66649ffff001d39a59c86","010000004494c8cf4154bdcc0720cd4a59d9c9b285e4b146d45f061d2b6c967100000000e3855ed886605b6d4a99d5fa2ef2e9b0b164e63df3c4136bebf2d0dac0f1f7a667c86649ffff001d1c4b5666","01000000c60ddef1b7618ca2348a46e868afc26e3efc68226c78aa47f8488c4000000000c997a5e56e104102fa209c6a852dd90660a20b2d9c352423edce25857fcd37047fca6649ffff001d28404f53","010000000508085c47cc849eb80ea905cc7800a3be674ffc57263cf210c59d8d00000000112ba175a1e04b14ba9e7ea5f76ab640affeef5ec98173ac9799a852fa39add320cd6649ffff001d1e2de565","01000000e915d9a478e3adf3186c07c61a22228b10fd87df343c92782ecc052c000000006e06373c80de397406dc3d19c90d71d230058d28293614ea58d6a57f8f5d32f8b8ce6649ffff001d173807f8","010000007330d7adf261c69891e6ab08367d957e74d4044bc5d9cd06d656be9700000000b8c8754fabb0ffeb04ca263a1368c39c059ca0d4af3151b876f27e197ebb963bc8d06649ffff001d3f596a0c","010000005e2b8043bd9f8db558c284e00ea24f78879736f4acd110258e48c2270000000071b22998921efddf90c75ac3151cacee8f8084d3e9cb64332427ec04c7d562994cd16649ffff001d37d1ae86","0100000089304d4ba5542a22fb616d1ca019e94222ee45c1ad95a83120de515c00000000560164b8bad7675061aa0f43ced718884bdd8528cae07f24c58bb69592d8afe185d36649ffff001d29cbad24","01000000378a6f6593e2f0251132d96616e837eb6999bca963f6675a0c7af180000000000d080260d107d269ccba9247cfc64c952f1d13514b49e9f1230b3a197a8b7450fa276849ffff001d38d8fb98","010000007384231257343f2fa3c55ee69ea9e676a709a06dcfd2f73e8c2c32b300000000442ee91b2b999fb15d61f6a88ecf2988e9c8ed48f002476128e670d3dac19fe706286849ffff001d049e12d6","01000000f5c46c41c30df6aaff3ae9f74da83e4b1cffdec89c009b39bb254a17000000005d6291c35a88fd9a3aef5843124400936fbf2c9166314addcaf5678e55b7e0a30f2c6849ffff001d07608493","0100000009f8fd6ba6f0b6d5c207e8fcbcf50f46876a5deffbac4701d7d0f13f0000000023ca63b851cadfd7099ae68eb22147d09394adb72a78e86b69c42deb6df225f92e2e6849ffff001d323741f2","01000000161126f0d39ec082e51bbd29a1dfb40b416b445ac8e493f88ce993860000000030e2a3e32abf1663a854efbef1b233c67c8cdcef5656fe3b4f28e52112469e9bae306849ffff001d16d1b42d","010000006f187fddd5e28aa1b4065daa5d9eae0c487094fb20cf97ca02b81c84000000005b7b25b51797f83192f9fd2c3871bfb27570a7d6b56d3a50760613d1a2fc1aeeab346849ffff001d36d95071","01000000d7c834e8ea05e2c2fddf4d82faf4c3e921027fa190f1b8372a7aa96700000000b41092b870cc096070ff3212c207c0881e3a2abafc1b92507941b4ef705917e0d9366849ffff001d2bd021d6","010000004f29f31e6dac13710ae72d54278b5c97ff6c1646e95b27d14263016f000000004349d6a4e94f05a736ac830754e76dfdf7f140c331f316d1a278517e1daf2e9e6b3a6849ffff001d28140f62","010000003b5e5b888c8c3da0f1d6c3969e63a7a9c1215a3360c8107a428db598000000008c4cc1b42c9dab1973890ecdfdee032079ed39892ad53a6546844d237634cfe1fb3a6849ffff001d255ab455","0100000082219cebbdc9bcb715efee535c13a44447e99dfaff6d552e9839d30c000000003e75f63c634ed5fb3d8e21de5fe143cfa63c8018fce0fa26cbc628378b9bc343953d6849ffff001d27ba00b1","010000005f411e0d7783fc274b4fea8597209d31d4a511e887a489cebb1f05fc00000000be2123ad48038313b8b726a51cb080bb5a8b81c4166401493b017d2d33520f9b063f6849ffff001d2337f131","010000002620766fa24558ad47e3a9623cd17ff4623668768dbea19ed5a1358e00000000dc1490b5ba227b1adbb2513f74e0252e8fe68b6c7de74c1a22adb63b14e8c16712466849ffff001d344eb75c","010000009810f0fa1817a4d2d371a069addaafab2ca99887abcc5bd2528e434100000000654f005a6e4b4b57b42343fb0e47f32079b4ebfe643c2ea4ea20e46c3af00c238d466849ffff001d364c8cb3","0100000081203520416c370fde3d6d46e82ed4332b5035bfba848ff97207357100000000bdaed84e0cbab735880d4763a1eb2df1ecd59dc261f3446db37bed5b6ccb99f331bf6849ffff001d2e5bd48e","010000004409709aff1b155be4f7a9ccef6121345050be74b4bad1d330940dbb00000000ec77d34cb2f84f3447c37ec1b4476e044e88478378998bd55d031f58f4e261c35fbf6849ffff001d32cb39a0","01000000cb9ba5a45252b335fe47a099c8935d01ff8eef2e598c2051631b7ac50000000031534f7571b5ea98c1318eed04937d6ff16582ba72c53552581c40828b6ce2f5cac16849ffff001d080315e8","01000000db643f0756bb4f6b25ce4a475b533d9ef75cd536e72df664fb9c91bc00000000cb527bd29495c02c9d6515de91ef264df333447e48ef730f3b66ffa8db3eb38630c46849ffff001d155dbb2a","01000000c4d369b723c2cf9be33cf00deb1dbfea0c8ccd12c415f29434ff009700000000c9c0fd0ae7b7973c42fc9e3dddc967b6e309570b720ff15414c08365f005992be3c56849ffff001d08e1c00d","01000000e3f6664d5af37062b934f983ed1033e2011b42c9b04735276c7ccbe5000000001012aaab3e3bffd34055aaa157bf78792d5c18f085635eda7046d89c08a0eabde3c86849ffff001d228c2240","01000000627985c0fc1a71e052a5af9420c9b99845432ae099f27a3dea7370a80000000074549b3151d6dd4ce77419d01710921b3211ed3280bf2e3af2c1f1a820063b2272ca6849ffff001d2243c024","010000008f31b4c405cfc212fa4e62840dc8d0c529ed53328bb1426c3bb23fa700000000e0af3bba9e962ce288d9e232d28a1ba9c85bd1e298890738a65b93ed97192b85a1cd6849ffff001d14cadde7","010000009b2d32c7828a80644b92b773357b557462a1470d4216e8b465a472b5000000005a4d7d92cd839cdb7dc448902438e4a4885721487de33900b34558bd6f255dd01dd06849ffff001d2ec3842f","01000000de44324d0f70a14985385f4399844b17925ca24e90b425f543d624f8000000007d282068b770b35b587a9fb4356491d5854bba3b60d7c1a129d37ed6b54e346dead36849ffff001d013eca85","01000000866f0cc679170b6a99e8b93e58dc276cf64f0379112d128e126dd9dd00000000689a44cb1c69d8aade6a37d48322b3e97099c25e4bcb228a9dd2739febda90e6c0d66849ffff001d0003e8ea","01000000ddd64fea2fd6e3b10b1456f2ad2a870ff5ff8ed524304d928eee197c000000006bcae7125656cc0d6b3dc563ab3e98d5496dcbd89785095138b143a48bc18414d7d66849ffff001d28000260","0100000012ad62326d4d1d7d32d2f169a1a816984f6298fdb5ccc3f606d5655600000000201e1ad44f0ae957771d2e60fa252594e7fcc75a51db4cdfb5fbaeb38612390490d96849ffff001d06216771","01000000aa698b967619b95c9181ebd256700651aaa1255fe503f59b391ff0b2000000005a8da000e1a2258630dd6f0286ddc24b7b0ef897f3447138c9a3ccb8b36cfa9e47dc6849ffff001d07e8fbd1","010000008b52bbd72c2f49569059f559c1b1794de5192e4f7d6d2b03c7482bad0000000083e4f8a9d502ed0c419075c1abb5d56f878a2e9079e5612bfb76a2dc37d9c42741dd6849ffff001d2b909dd6","01000000f528fac1bcb685d0cd6c792320af0300a5ce15d687c7149548904e31000000004e8985a786d864f21e9cbb7cbdf4bc9265fe681b7a0893ac55a8e919ce035c2f85de6849ffff001d385ccb7c","0100000050e593d3b22034cfc9884df842e85d398b5c3cfd77b1aa2a86f221ac000000005fafe0e1824bb9995f12eeb4183eaa1fde889f4590191cd63a92a61a1eee9a43f9e16849ffff001d30339e19","01000000f8000cd0261cdcd7215149ff2f0090c93b0857f0f720d0e8cdee782900000000d9a6665d16cf43ec412e38aef57098c9b5ff613bfefc1ceaa1781e5f087897f6bce46849ffff001d21be2da5","01000000bb36b800114609bfdd0019c02a411702d019a837402f1d466e00899100000000fa2fb24edda69806924fe1ef06bd073264d8b32f55eeaacab45a156563d0d4dd91e76849ffff001d0195ec60","010000008ec0e98eaa3378c803880364eb6d696974772bf8d9a9e3a229f4d50200000000f6ef70bb4846dffdefb6daa75c87d7021f01d7ed0590fb9d040993609c9c7bd1d8eb6849ffff001d20e842b0","01000000817ac590d6cd50e70cf710266e33382088e111e774a86af831455c1a000000008a15f1ddaef05f8acb0db86b2f4534f68d417f05de65a64073c3d0b7e0eded32d4ec6849ffff001d1b6910e0","01000000896e8271cf721a5db7b1dbae43b40eac2a7b0247870b06f47802968800000000595badffff2bb1453255880ba0f33d7be62a2f55b6f266bc26869d2715974c196aef6849ffff001d2c5bb2b3","01000000008de6ae7a37b4f26a763f4d65c5bc7feb1ad9e3ce0fff4190c067f0000000000913281db730c5cff987146330508c88cc3e642d1b9f5154854764fd547e0a54eaf26849ffff001d2e4a4c3d","0100000033aa0fa26441ead7005df4b0ad2e61405e80cb805e3c657f194df3260000000021184d335529aae22259315be42915b0360deeae97ec428a654014a3d2899ca00ff66849ffff001d0948811f","01000000632dfba41dda58eec7b6db8f75b25a69a38829915c82e6d1001e511c000000004f08f5265053c96c4eb51eac4ad3f5c668323f4b630af32a66915eeee678f9b36bf96849ffff001d399f07f1","01000000b5969273528cd8cee5b13a095762d731d9c5e30a21b4713ef255c6d600000000f54667bee8511d31bb173bcc6f15b0bf3dc42788a813439bfea9065f90586f3ca6fc6849ffff001d2c950522","0100000005ba6ff20c063f7f23b49c53d7004941241eb5347616f406333fdefc00000000b57076c0e5f498a6f06ef26c72e224cd7e25784ed6cd569e570988d5e59bdcd36afd6849ffff001d2edcf3b7","010000005b74dda1cc03078d30fe49722218667eb31524f22c59687ac30fe04e00000000ede29e76449491b0e2b766dc213c0e15bd7ab6eae48a7cb399c22a48621c5219cd016949ffff001d1b8557c3","0100000083527a686e27387544d284257d9238c5fe3d50fc9e6ceb5b8d8b4346000000000201df27519bd574817d5449758f744e42d648415d1370b17ac6448b6ccc9cfe20036949ffff001d05727a3e","01000000c0d1e5e651f40fd9b0a4fe024b79f15fa65f1d85bbf265582ccf93f0000000002837870b786929d9e30d651dcda7c3006a04b79d292261031a4235328b0f0fbc5c066949ffff001d1c00dd1d","01000000917354007e87c5ea0a1bea34d5275718a40d082bdd28717d7075f34f00000000e43721163a2bdbc80493a9e0b65d20b1ce63ec4c5ffadc39ea01e13d4e053596d4096949ffff001d1e2f1812","01000000f12ee37c151ee80a22be4f6ff155646addc588cf604e3cf354dfb4750000000095ca77f0c5dfd190be1eab32399d93555666cdadb8f44eb0636a608414b10d3c400b6949ffff001d160ab450","010000004aa5ae0b1842e2daa39a019e1a6cfad2306aae707b035f3ee571710f000000002d00540fb7aa5cf6fefc567912eeef891a19ac2f9fc055eafd229b1a73e1a182470f6949ffff001d02956322","01000000df2c4d42797dd61991b8df3033716f364b33f87a7cbd3494b8587ac400000000e1fe31bd4e94cd3a004849125ac5951703d34b33f3a90ca1ddc67ae4f8ed6eae2d116949ffff001d37466753","01000000c49052b367c9cfc10792aac007acdf986aa1e60fdbb87193cbd6732900000000eea3f31766c62e47ca1e9ccd303e37404887a570375079fa030b3e036ce71c7038146949ffff001d0552ee6b","010000002aa08c1efce70618d7370e0383a0b5801cafc5ecdc8108e34d93fe42000000004f0c28db6791823456c979edc21f8e9615a037c410299a745f2e7af03cf33107c8166949ffff001d22e2cd27","010000008e6285267ce431a52e3ef3c46eefc4a144f51195f3bf8489c891ffeb00000000a4d66fc5b10430fcfd14558e63d19b649a61ee95b71b1bcce948b1d53583dbebab176949ffff001d4f7aef04","0100000066184d75b89754b5363036a66b0aa70142ae537e9c2a64c5175f97310000000049935f8c517625d3560f23a3cdf82fef68779c99f4a92931c91d8c11517c5cf137196949ffff001d2dc932c1","010000005002c9b34042ac70ac8e36b1840672d69cb0ba6ada5effb6477de4aa00000000743a0389e4d8c9f60ad41025b797fd25e228123c4b54b5df20ed02ca97781df03c1b6949ffff001d21537e7a","010000000d765e68e3487bd6d3372dd9eeca050857cf6c9bdb171fcdbe34d363000000001567e4c48479995636794ce5ec794eb145c1194478f45bb0a45cc11d8cc27fb1581f6949ffff001d28d2dbc1","010000002bf72d8a5d6ea0889a5b52e19f53268423d644d3d61364174b859ccd00000000be23d982899e45eb4f5095cbc1c43ddc9495e93fd1e4f0bb3a20fd461412c5bd7a216949ffff001d14fc8df0","010000004c812cdb1077ddb53fa3da180758d29b49262cc37eeaf9ef74a8afbf000000000743ebb1940fb72a15cebc9dbe481ea7625c70790a56bedfb7d74e0ba8227880e3226949ffff001d182b34b3","0100000039e975250e63187ecb299082518f8da887198ea2b0834a1089cdacdd00000000b87adb107589f869ca344a457dec051371352b2f38be825d914139b568305faa7e256949ffff001d3a42e6fa","01000000cce04fcc1138bafcf657f97e31c30705b991827071233deb2eae63ba00000000cb9f33326bbf60634a0634c3bce1c4a7e43ac4bd3fe54a654ae35be3f6ac83fdab286949ffff001d2654f246","010000005714bd772bcbdb97a08d32cc82469cadbf7feb69bb4131a993bc7c7f00000000e19a9f3635b503e037212f13f6dd2b40a6b2d81379b9b341df3e33c14c22a3de8a2b6949ffff001d089368dd","010000007a127b3a7af982beab22647b6456c8cbe6dc43a290c65d87b2abc08200000000b4ff4753f29de2ec4aefcccbb72b113f820894587fb3b7e0218ca6cb648cb441d02f6949ffff001d39a360d5","010000005df242b278026fcf51ac4ba5cf5b590e58c2d1d76b2c09b25c52c98e00000000d6be02040ee5f8e52f2e925e6f70c73196064f99f20090bc73ea71516c5472d455336949ffff001d295b06ea","0100000056d42459d4e316593155b4fad15dd700b93e9d2eb9999490d49e98ec0000000048b6a7bcf2a59e336da83ee70ddd230fc7e2db16c3c2654494c5502dac012538ce356949ffff001d23c2373b","010000004ee5095194d71ca1b345ee9f27dbb6815ce4d5df9dc2c3c91ba364be0000000026366720a786e6615b3203909f8df77fc2e96d1afe593bd3d9623d19c481c947aa386949ffff001d1e6cbbe9","010000005878d514861163b782b54b2d4c6f6bbdaf22e41c2401e9f84522515a000000000e7dcba835e4c20485b614f252183b53921a8901049ea6ef22f09a42195601b5203b6949ffff001d22c63213","01000000ef06fa30dd7275529ae9d2677998c4d507a07517d28b23e6e08ed2e7000000004ca77b8b243eee32a9b06a8bea33abd5cf517bf68eed73e7fa951f4f30d2a17ec6446949ffff001de4acd41c","010000002f8b9d4d8ea162a1d2e5fe288b110bf80a92b963b2d30f40956c88a2000000002518bddd47990bc127da5579b114cc3976568c7d0fc8f5b7a4b90478076799fba76b6949ffff001d397d4eb2","010000002100cacac549da7d2a879cfbefc18cac6fbb9931d7da48c3e818e38600000000c654ae2f49a83f60d62dfafca02a221c9cb45ad96a5cb1539b22077bfa87d25e7d6d6949ffff001d32d01813","010000008fd40a92b8965c798cf25dcdd8395de4ef75f206337de4985a3262be0000000099add42809e35d9c89641de1e9497db2e70bbb283e9b9492599f879533654c5cf86e6949ffff001d30177cef","0100000086cff19f969df7040f27de690e7355436001cb3e361e7589526a077d00000000be4544845044c67df65f37d0ba8bb323fe457c141abe38eecdc2e530144bfb8103736949ffff001d31852f96","0100000053514b63574bf6c65d576578f6cb2ad0f6256de1454211ddfa2222160000000073cad1e2d193f0d27471b13eb4b1f356aa63de8dc78a58a9128a2115c6eb1e5647776949ffff001d140de59c","010000002b120517ca99a3d8361c2a9eef3126fff7c18e3ec365dc2201c315ca000000001d2e4b642f3d14c24f57f237d38acb8e4939855a8ca6ce7dab48e2cd85843d9ad97a6949ffff001d1622692a","010000004f8dceb614b17b5ac9c9368906ffb338aeb750a1dfe1adaa67eef59500000000b45cf14a7caeeb5fcb286d314ac2fa85f58df3d5156fa95c832f373930de9bc3b37e6949ffff001d36e9e4e2","01000000d143e6eb3910c5e54f55655e885727810105c04754ae1edeb349992100000000fc2bd82cfc026bb9594f5e92e7aae7f0c5750e6e7d8dd73812bc1fff792d2712aa806949ffff001d1d5b20d8","0100000053fb045b4d3ca149faca8e7ea53cdb3168bc58b875e47196b3a6b3f100000000406468307c915485a9c9eabe31cc853e68311176e07e71475c3e26888fb7b7ed30846949ffff001d2b740f74","010000003ce6c27ae14022e4b6ea0a5c3633d156e3e3a47509c1adf085371ba300000000f01258747019514aa5c475cddd59a309347280ead98d19d8df8f9f99eb56757938866949ffff001d18bcb4f8","010000004bd0b78e90c6b0f361f395535ac170980de0c8214380daefce31fd1100000000282c9db8313817b4835efab229872eae2b8b5011c2e90ed14e57192984da062359896949ffff001d15c6aed8","01000000c232af712ac8656ec1305f0eed1a024dfe6a4011897b753c58ecd97600000000c6752761b3f3db282dff2e4c43d1e44830dd42daf448f0398c2511925ccc949fae8a6949ffff001d14ee579d","010000002fbb2cf37990cba3a83ac9b3b465247d6d56c30898bb680920aa65f300000000671df2bb3376bb03ff686d80d2ffc4794cd7f720b49c9e6e09f494743dc984c1558d6949ffff001d0171077a","01000000b1c1b830fa67f2f425c668042dc7f050e114137be60d942a2bc9556e000000002d5f16b75aedef22d1331a6ef93329b3a1a3eb453564c93862fb6386b996b881a18e6949ffff001d05b824d3","01000000d2e151e4c85e327bd88a0d9fee0f5b37b0fc0d78c268d3460a0cd409000000005a92e14ed75457c0a01680433301e85dd78b7988e5dd9004c46d6d1712e1cb717d906949ffff001d07521665","01000000f0e44c20dc3e5d26a89301741c82703a423dc4e1803cc44cb3bcba6900000000905498df05eed30ba5bb145df31e8b185e947fcfd3b4f4b15a5623af5aa726329d926949ffff001d297eac72","01000000f02d0d0cfee875d2b128277f39a82378dfe0cc00d9aba9151fdba81f00000000c07d8b31b161830db5f6198d8933bba12c985618b18fcd6291acb4c2d8d82c8f0c956949ffff001d25d3778f","01000000cae10bd8c753c43529191bc15f2956f96c3c2e9498b3ee8dd506a42100000000d8855c4002ac58a052b1ad12af7179fecf988893093528f2a457beb5fb6b715fe1986949ffff001d275a6678","01000000063f92bbe049395e3bb6d865a6de0a5b26f4b6b01e90f4bfce381bc20000000090162a9c64459060f320a51253378106c6472a23a9dcd90588f0cc09d00d4dcc549c6949ffff001d212e6768","01000000cc91c80800b3a75d6542b82bc6d8d7024551f9bfb041ee1b0bb8ca0e00000000668b636991dd0638ddb442ee2b10e3184d87e2d059a43076e10512af8814d3d07da06949ffff001d32db67ca","010000009918d5221408b7a4325c754792ccad2b13e22e9f30dfcc0d965eeda80000000069a57920735cf77470917d6ddb01a83fe26fd9bcd71a360443c08d4d2d59a43372a46949ffff001d31070a95","0100000095194b8567fe2e8bbda931afd01a7acd399b9325cb54683e64129bcd00000000660802c98f18fd34fd16d61c63cf447568370124ac5f3be626c2e1c3c9f0052d19a76949ffff001d33f3c25d","010000009a22db7fd25e719abf9e8ccf869fbbc1e22fa71822a37efae054c17b00000000f7a5d0816883ec2f4d237082b47b4d3a6a26549d65ac50d8527b67ab4cb7e6cfadaa6949ffff001d15fa87f6","0100000084999d1fa0ae9b7eb8b75fa8ad765c6d467a6117015860dce4d89bb600000000ceefaf23adb1009753545c230a374c48851676ccb7d6f004b66dd302ceb5443b4eae6949ffff001d192e9d71","01000000192f62105285f84e7876b764dde15cc96e3689ccd39ff1131f18041600000000f38b91a939e7f81483f88ffcf3da8607fd928a093746a03b5eb4964ae0a4d2886bb16949ffff001d1541834f","01000000753fbb8b0a766119fe8e9347b55cf6f977bc961d7dff46b87c050921000000004bb7d646fe8e6678ab8829cc899a89f256b6cf19dbddd494a773b057c374002489b36949ffff001d1766221f","010000005bbeaaef7d3123d7367e9d68978f0cf8225a2815b3024e0125ef11fb00000000c87ac7e967e3b09e53e4bb31d4d9306465bd8500061c1819b15d451b46bdc95bb7b56949ffff001d2ac2b510","01000000aeb1c63f4aab6eb66f12f3c64949f43a4bbd1d13ffe777c3015c4d850000000080ee9dbb0f58c4e12269383c9735abb1c6f03065f40d5238ec6c3e5fec3a88189db96949ffff001d00002aa0","0100000014770aa562d6a32431289058ac1bcfafec815bee4bd2e7eb15197c870000000082232ac15c8d8642df8827fe5e3a297a758447f00c1ee9e51b2e578b22c5e5976dbc6949ffff001d2c5b65bf","01000000ebf2a13396772607b579e5313855d85deb6c2ff5eb4b896d17b0167e0000000002946a80f855fa6e59264de3b84da0ce975ab6d0806a90288bb2cb7f4e782b2016c06949ffff001d049add3f","01000000cf247ab093cae5a6698f9f3fa5e9bd885ef6589f2e5e5cdd9dd6af420000000030b2b4faab68a1669e4eda67442919f25561f8df26237de4760425433f7f00a33ec26949ffff001d359e2d4e","01000000aeabc567c5d100b902623137777ee19e9d5b758170acbde0c4cc5d3f00000000c780aae409a4f0992ffad17806e5f339c7b641cbc8562c04fd7319fc835edeab03c66949ffff001d01b4c881","010000005be5ce66b835f9b908c0f1680a009734919fda6f3a81a15861360ea300000000974ea41630fe3addd397cec0f06ee4aae825f9c2d6d789b082d5f2c646e2a3e7a9c96949ffff001d0405f8f2","01000000356c1a09522af6e71ed56b162cdddd491942547becde82b8d86d6a4d00000000ad1e219b43cca3ca0cdc2f17cab1a4b34a681eb17175916aa2dcee017011383479cb6949ffff001d08e0347b","0100000037c36afea0a92552871867226ae9c9107ab0fb2f66de0f64c98027ce00000000e1e5c48a2c1e53c4db2764dc5bab527232d2d31f476240b39e567e256c269021bfce6949ffff001d047b1301","010000006d7c6757b8cec3eaee4805a548bc2f4f083807d70606e48d83769101000000007c23a96d8cf18a918a19e68c5fee3454b5d09ec88b1f63b6c906685495027bca43d16949ffff001d2cb49bb1","01000000bd1ec9370830746c6d00b96f75c786438df4124833b6c4240cd47d5d00000000a4e0c85f9b755b1611de231958c1d7ddf51186095a5ac3d9dee1b1d78594d53e9bd26949ffff001d23df49a8","01000000c8ae056e45843ecabc6328e036bb92a3fa8acddb53c273fd39a5492c00000000a9be635b8f87de2c48a738f3e8201f3353c2044d05f44f9aabc4a59c6905865ce4d46949ffff001d2798e910","01000000713c6c20e18ace81b09f7de4367c8e81a89711ebd6e96ee05e80f27b00000000fb4361f015fd0ba2b6d7baf685f0cf6eacf1397f84b2744ff063e63ce76ebfbb3bd76949ffff001d2ddd0ec7","01000000c8c43b8c6a02ca773a2817bda6caf2c608c190e903518d7ef132bf9900000000c28142c6baf94b86be7c50af14abe462faa489979826773ff4a932a299cf51448cd86949ffff001d1b00da30","01000000f34115cb9177628f46ef37f45deb3e04761dab5d0b88acc3324958540000000068087c53b8717afb90c642f009b8fb9b490e8215e242737f36adaa0690c09737bddc6949ffff001d06a64e69","010000006a4690e6ba50e286b8c63c826399a6ac73be3f479f17406cdf90468700000000f5e6a6e8945968936187c5bcfbcd35db4c259198b38779e494938d18fc5ed641e7e06949ffff001d36a19bef","010000002ac91bab86c12ddf776b1408c8d94700c05502961e0dd5e637cee16800000000ff7ec13a3709b78b7a29035e7c10fa4363afae9d786e2a7ca497db08cc07d93879e36949ffff001d203e2d0b","010000009b5230635b6e8eb413d75661c3b07285145a6f5c38f151015286608a00000000efdb9fea5b31617d311cd69f6f54fc938c6d0da6f659d1fab97f84c9d9b637d6c9e56949ffff001d1f92e6cf","010000007a844a2d5e3211fbc9562904b9951b2503cc877e0541545686d1988d0000000009ae88a66180549143c5ab25014dba8b985672f1806827a4f4b5f9778cef44b97fe96949ffff001d14a906f4","01000000a0aaf794ab3acf94f717ee74fcd635cc01badadb296aa11dfde4bba3000000008e27364c36456cfac6156408768d45af49a465f35aae702bc48ce63f97401b6146eb6949ffff001d05adf26f","01000000214f1824d6b2eb5f201c6780488187fe72c608bd66f078b51c2baece000000006ac9cb0d762ee58fba505cf59b6d36f2e82ed40cfe19f1016cff52eb7ae34f0d17ef6949ffff001d00566038","01000000169995432bd5a5855c37b0437a5e1584955fef197af1147b67fd4a2f00000000c8196e93d912864d817e2a81e07f7cb1a026e3fa5ca80b4c1e1e55bfed4a61289bf16949ffff001d20dcfff5","01000000fa2347d35699e4fff52d432daf752b9ddcc0c0f0e3a96e19d3805e7f00000000e1ac834e2c6e79465b2fd284f7ca1feda75d155a88ff8bd2b9c1113c4120480aadf96949ffff001d5c6cab17","010000005b6672f14e399b1ec67140ad0367e63506347d266fc865332a757a4600000000bcfed99e7c1771baa0582d46dba9c84268a31f9023c259a0b9027171e1a69a5f2bfa6949ffff001d2638702a","01000000f018084fc61ea557815ad3e8a2fff8058c865e8060c86dea337ba0dd00000000bea5824628bd47b2edeb32cb6a46225a2b74c498a9fd4c5077bb259ffa381f9a58fe6949ffff001d1622a06b","01000000ebf0aa9d07b693713c4562044354111303dcf300be82240a6bb284180000000036ba73991a7ac5d0a454e2e019e237d3b1e4838de39b93207ee2b0cc5bbf00921d026a49ffff001d059e1ff5","01000000a1597c83840b54c99a7206effcc252335f2e5daa369cde117e9139a600000000f91fc47ead0859d5f3f8a33f73fd64abd16a21a3b96ef48d52e893741499969a75046a49ffff001d98df280e","0100000067ce0cc7d592a1aefe86fa83ac6101bbcc0d736bd7a0ac91529422c000000000e4a9a2663a445292d046b21dfb56c59abb24b9af231b4913bcf6cdd45eb81b0f90056a49ffff001d19e7838c","0100000017ba37557e4381bec9bffb1b8c0e6e9e1b045f5d008267559fa3a37f000000000d50983d860884a1414e78d728e30106ac7787018c1ca53ef29555551486640823086a49ffff001d0267d559","01000000f8e93ec183ec2f6428f1c82370595974a35ca60df6bb22f8f97b7bf00000000028ab6cc3287a5ec4f7a4d787a99e5cae6ec7d72e7307551097e949e9aab13105e9096a49ffff001d188fb1d6","010000003a3c477a4943dc98140c07b5970b78278f36f3d16530ea664e1a538b000000004a01544d614d0ceb34ad67b7bcbbb28000ba532067282fee211b36b9b6c8a9f2e80a6a49ffff001d2472798c","010000003af99f9879b01c4f520a3df073d7ee31f468d279d22542fd08e6ab7d00000000f1c9801d5e85c29842c8e5aeaf83a0786ef952c19d0d0bee33f78e629e843b50d40c6a49ffff001d196e6c43","0100000079ba841ff20eaa20745063d8b58deaeafc50ff30559ae7de395788b800000000cb537ad225f53bdcc69762c164492dc692e190ee3098cf933f82597350982b88f30d6a49ffff001d38909c8c","010000004a823aa83595a947a91df4dffa27d24a4211c1c1b352614d5128cc6400000000d9a7f8d838220becec1802eec1430b4769d6b4699eb95fecb7d1d5c86e6613d80d106a49ffff001d1c45247d","01000000fad05be324f6c411800e9195bde30549522668db30be952e523e9c49000000001d01af6c4716b28de4e5e3385a5846bac1fa90a565579065d904b354da4f8765de116a49ffff001d065c70e2","010000001d1f73cbfd47c38aefe270faf05873ddaeae469eb57976b067cfb8d800000000d5273768443e9e48d86acc6a1c5fc3925e69d64f11aa17297c1c16e6e339960e5b176a49ffff001d2ac19999","0100000095033bbd6e41afe1eb283ef23cacd5d72c5551a60c081f2f341698b000000000448490d4ce520ae01c822d2f2b489a3b2805416c21b558cf99cd1dfa1e29a8b0141a6a49ffff001d2bf5326c","01000000e50eaf73b308c0b468bf3a8ab80d9fc6a350e6d998ec0e2869ac3da800000000ba98b85bb12baeffda12c2d2263a701e572219f3c93972e17c07b2aa71cea4731e1d6a49ffff001d208ef699","01000000a0001921bc03feda5874a7954f914cbc7a8a6449e1fa40439b4c3ed9000000004206fdefe7da3b2c5cb0c8dbb12d834ef3ac8d6e2c68050eb716babe95f4169d48216a49ffff001d2a17c9a5","0100000061188712afd4785d18ef15db57fb52dd150b56c8b547fc6bbf23ec49000000003658f907b55bf0e46ac560d0cd6ebb1d141c311c00193ad69a98b4f6b9b6b87058256a49ffff001d26089718","0100000002a8bd45fab7e40d8207ef95762e8578589a1961a9f9991aefb4477f0000000039359e15c0251a9162151f681d2b23c71e734595db271846aeed8736c2ef443f84276a49ffff001d17d2841d","0100000012052719601a039f27921ef35a24c82cae5f5024f326a56c8ee8762e00000000a683374124eb823197b4caab534ac172d7da016d06e35ab5465fa883f7b69c42fb286a49ffff001d08d5a80e","010000001c084a379912af47ef38e75d8eec1f6f698b0cead98fe1baebe17f6e000000006f6168c5809c18ab102a28087ed22a5aac41e5c531b39b8a0975ebaf1fc044ae102d6a49ffff001d1434411f","010000007e9651bb2d6a7298248c64cea76c14c02c1603c1f2961e9f4e487a1a000000008ac11bbf709fd20c4a6adc39dc9827402a4df48149090c38bfa393f20deca655a82e6a49ffff001d373d76ae","0100000035a83bdde524407a7bcdfac3232d2bf6710f5559d532bd2c7534b8e700000000474fbb76278470f31077953b66d0ce967e1b3e2e3a4041553b82cd3fe1a2cb5aee316a49ffff001d0354b0b2","01000000933d9038fe5264f9453951d40e55c91504e1920801c85dbb5c27c81100000000b9253cf4f366a018182bab5a30a54c700db0736b540e3ad16fc1a109a81929b530346a49ffff001d19fd5aa0","010000004d1f55defafd65567a149e8cd32e1a2019b993e17f52cfb43357a79c00000000fe0c90dd69f7661425eebf7c913f0dd932691f3b1e3741105dd3600b69b9a9a0d5366a49ffff001d018cf476","010000006af39676eb24f1eaece7abea73ce12d06667c7c3f463de9513c54ef000000000ca7e0cb6eb209f2b422bc3c764e25c656065027dfd60224ee448d12c57fa74b785396a49ffff001d309eaf13","01000000c66244e034c9bfa52424ad91905b999cb6ff5d49dbe82021d59069ab00000000ca3fae9a5bdd728abb0b3e1953a589d945448dd452331c0199e3dc2b1c5935cb893c6a49ffff001d1c0a17e1","010000002dab0bfb58146516975016ad954f4d359d683e07fb648a10edcc805300000000ce3465d7e5317988c75a41ea862dc489918005c3d90f7e4590ab3ac04dc1836e28406a49ffff001d08c31735","01000000a966418ed4f17c3c3c561f2bdfb169edceeae84cf1ac526d89918bd30000000052fa7ddc59d3574bbf404011820e1e48cfbee2aa6e8f2f5b472bbfbfab874fe9d2416a49ffff001d17e6dbf8","01000000844617f4b214028227f2a12e1f51713fa9c0b5221bb2dee5bad355ae00000000dc3ebd22794574257ffbfd27b91a86dd7012b2ed308f406523074da63465cccbf4436a49ffff001d34b4a57b","0100000060c630658c5f01cb69f491ea3fe62c1be151e88dfcbe10fd4de29dec00000000d46520bf3888d22e5fe5e3b42a90b7aac299b95fb494b7918fb4bc117c79c83122466a49ffff001d20d07655","010000001cc93417ce5624c12cb0276687806f821ca362ed9a8c29cf85b009fa000000006de50306437d27771ba99ef09fda4941a6c6c6a9c86e0743b4daea0756c082a055496a49ffff001d0147d461","010000004e317ab331a5202400278e0c50ca3b6686e57e73bc86ab931245c0320000000016f949e36753aeb0e437fdbbaaefe5a40aa4960e215a1e3adebc0bf787bd52455a4a6a49ffff001d15f68734","01000000bb78a59387b1637dbb642533e4a74b38a5195b0a6af8541baa9609c4000000001763035d50efa2bcefe978118171858f930994578cbe46d39a19ef0deb14b02eaa4d6a49ffff001d37d6ac39","0100000026c058c08c4557df6e34c7de02656e0cbd6d764723cfc66808c1192800000000798a54b6a726d075c488cc745ccbbcdf77a4855b8b53356bae38791f8574169a85506a49ffff001d2f6a5fb1","0100000003da8ee59288435e53b260c26bba634075fb06b5835ce62e1feb615f00000000f6e68f7cce7f5d8f9c4765be05fb97c748e55a891bb4f7832d275c0c275f010190516a49ffff001d03d47d15","01000000ef366900fd58d8d80995065f9e1f229ecb097bfd5e4e86ee9331e9af00000000110cb7ea8c9c3033ae0d411bebe5f901a494b2af8e5ef486292a21f836950b03657a6a49ffff001d0036d305","010000000a140d07068a12d8dc0b00995dce36389485fb18899e90022a80fd6600000000fa24daa03db95f0e3a181c98e348336cfe94b50c4583e1e795df141bb1643605137c6a49ffff001d14061228","01000000d77eae89abd94eb4b6ea46b05a711fbd02f49633234ebd28b2943e0f00000000be9e027c64485d4b00ab136704aacd49a966347d35828f8f97226b3907281ac1957f6a49ffff001d28121ef3","010000008f617fec2ced454f8149c42f4c1f849f7d6792c842ea0737de77696f000000007a7a94c3844949abcedff5ff841f6c2c14a322787ccf59444fcb0fcb23e7ac84e97f6a49ffff001d0394987d","01000000596a61fd813cf573a8f0333f0012ca0d328f8261731e430a7f3b8aba000000004c703a5af4849dd5bb01d47a4b9263568fd3e3e3515ab52a663c0b8ec9238a2667816a49ffff001d2dcb6462","01000000de6125d98bc1373a22b1e4014e25246202cf847092e22b753750731900000000d8d170cb03bd901495b9c0a9cd689f3ab78f11a1151af4fb3f698099ad26826a3d836a49ffff001d2acc2b62","01000000696aa63f0f22d9189c8536bb83b18737ae8336c25a67937f79957e5600000000982db9870a5e30d8f0b2a4ebccc5852b5a1e2413e9274c4947bfec6bdaa9b9d75bb76a49ffff001d2b719fdd","0100000055bd840a78798ad0da853f68974f3d183e2bd1db6a842c1feecf222a00000000ff104ccb05421ab93e63f8c3ce5c2c2e9dbb37de2764b3a3175c8166562cac7d51b96a49ffff001d283e9e70","01000000eea2d48d2fced4346842835c659e493d323f06d4034469a8905714d100000000f293c86973e758ccd11975fa464d4c3e8500979c95425c7be6f0a65314d2f2d5c9ba6a49ffff001d07a8f226","01000000e0b4bf8d80026bbec5370a7bb06af54257a9679cef387fab8c53ecc900000000d578b0399b91624a8da53552035fecdd8f4ba2b9c69dfbda68d651fcb9f99c388dbc6a49ffff001d35464c5d","0100000054686892dd112de389acc225accc0118765f9c51c2ec9306f6abefe3000000005209a3e77e3679703f6b7f039fb9e054d7862e6eaad617e8e3f3d81d297e966015be6a49ffff001d21ac0323","01000000c585ac476b5878f0f1917826430b3daec278ef28c121c2ec9dd6e9dc000000008195110f0743ab43d4146798c962b8d101e325f4afdf8e936d15c2d51371b9cc7dc06a49ffff001d32915d0f","01000000c052286e779e7e48397d8c39fee98a3a5718c82dd6bc5b71eebed8a700000000903bb52cc35576a52e9d8f35a901073d33145b6f7be16aab1aa328e8153dfb4874c46a49ffff001d227dd986","01000000089d2d7196d00f737762fe82cfd86820c6e44bb2a9dd0f5fc1fc4afd000000005c3de10cb7cb6934b0050360980f9a37a95a8bf705edfbcbd3541591ad95c16466c96a49ffff001d09338966","01000000586ebdf7f1df4885ca322a3021773c6281691f9450e8b8edddf3a91600000000885e36844a21fc6078813daa25b0c331523374924d21fd63b2e939ca3fb2b407edce6a49ffff001d0931f108","01000000b17df64200cd007eea9b6ac2760f69693f83f19f00352bdd99970c48000000006bf4f1083c14982eee4239a9ac2c94c5672f7da3d763bb88488936a4ac7827672bd16a49ffff001d31f068f5","010000000d5ba629a32522334a8d40374b82505533f1f6117c8a906cbee06dca000000006bc3cfaf5339c2989f4892ab10bbbd5ed3db490712b5b72dfd29390ca89178c795d46a49ffff001d37f7ca97","0100000070e12562bd8d2d8b2c1d298fbaa3bc4f005b4c41692850276b5aabc0000000004f1d6988f3aed27c24bcdd92ed9296afb0d58073f77da34caa8cc83718fe8cbd3cda6a49ffff001d13bfb72f","01000000f2c8a8d2af43a9cd05142654e56f41d159ce0274d9cabe15a20eefb500000000366c2a0915f05db4b450c050ce7165acd55f823fee51430a8c993e0bdbb192ede5dc6a49ffff001d192d3f2f","01000000e5c6af65c46bd826723a83c1c29d9efa189320458dc5298a0c8655dc0000000030c2a0d34bfb4a10d35e8166e0f5a37bce02fc1b85ff983739a191197f010f2f40df6a49ffff001d2ce7ac9e","010000005dad27b228dac0272b484c390c32d95aaa38e75ba9f74ffc1178485400000000292571e03a414e493790a4bc212dac24d5d6cd5655cbefb4404dd8513b9825df6ee46a49ffff001d13fdd3c0","010000008898a2630f7fe0b924cf5b986c8a8da2b2959a2d6faf8b033f516ef400000000bf20f3ca28996db0f2f884ef15a03ff53ba6ad5669ed4e14c861d5dd56a16172e5e76a49ffff001d2e11190a","0100000046240a842144b1583595716102ffc02afede6696ee0f763c4e2f86ff00000000eedc47affffe3a58b9e90e1b82013b695a1ee4db3b40f0a5cf00e092cb41df315aea6a49ffff001d1b7d5c80","01000000ef73923157421b892f07214e80eebf6b0a9503f8e6673bf6f38d4be2000000002f7c7b0c58bd33eef2b77ffd707cc44cdaa2524af9606d29cd03649d3491cb21b5ea6a49ffff001db033dd00","01000000bed482ccb42bf5c20d00a5bb9f7d688e97b94c622a7f42f3aaf23f8b000000001cafcb3e4cad2b4eed7fb7fcb7e49887d740d66082eb45981194c532b58d475258ee6a49ffff001d1bc0e232","010000005d496e62546b36558c139bd429d277bd00f3ec379888169115e2cdb200000000375bd2a0ab09dd7911c8bedf47834babd51a929d7226d8cd1908f47c0a496d3aa9ef6a49ffff001d197c3bd9","0100000093f117e1d73ee60eb67360d3be4243c14e5f40b8cba7f389b30d949a000000005e6f2b29966c399124c09a17e7922e17491bdc20d877a05ec5193c5965696c5fa5f06a49ffff001d26aab366","010000007829db45b94dc80ce11ec51d05710cbeacaac839c3560cc1cc0db38b00000000352f966d224cbdbe797d75831458c63e93019acd98e2f704f47171d9b54c7503ddf16a49ffff001d05d324e3","0100000035158869187e847cda0d32280015060f87141c57f4d63f2c59c3317d00000000b1ad99b3de17d2b87f6234843deb5a49454bc889498d24e3cac05052c15000ebfef16a49ffff001d25bbd0b0","01000000ab3249dbb0ec7a1ecf9383cfcf20e89acebc9124313f3f4f61f30b5200000000bd444a225b8474cc205ab13fcad732afd5967fb54814696b638f07d4a63d29165cf86a49ffff001d1f9afafd","01000000360bc1a14a967fd75d7ff6fbf412f40e25efb6ed5ddc174f10a6350a000000006459a7a18e345d1297ad46328d519f5321607f4f68842eea6338443c2c0e47107ff96a49ffff001d1b1cc7ee","0100000096960b9108d868524f9e5dc8445420694699b4964a9143c5becc3c83000000002914dd3668b3b9a3b8be41abd4b19891326376ff0bbf6cb267586d43f5d1eda704fb6a49ffff001d35fdbf82","01000000e73ec9fc17a74e1bf3cc13b864f43aebb3cc38688ead29beb70b689500000000df44c7db330d4f72049206aec20ba3ba0bc40fe8ef869f6424f20ee13d3e204969006b49ffff001d31626c7b","01000000fec8cfb1d8ec7924ec65f74c4e3cff4cbb43f6ec639c5c9dae97b968000000002192402c287b8d63b6f417d5285e42405727c06d7f217251c8328c2821353c3f9e036b49ffff001d32f91830","0100000010e3bf77a047b400f882ebc26190c347074a6b5a7aee8fd67761209100000000cb2d57f524b9dbcc51a990a86fc9c07943066324a6cf4c2ae873b4698d23987a90086b49ffff001d25e04f95","0100000014b89d2cb8c442342ae166f29b09ff9681b2d681dc8692f5371927ef000000000c25033f4632230ab97c43b37fb6a8fe25decab5642ca31ab3a2f9709b115384e10b6b49ffff001d1d7d9d2f","0100000043e1769206b487a5177b71abaaeccfacefd5654ab0767146c15854e80000000028fa7465bf717c2b27e570363ab4e1c10c4abfad031beb60543062df39b99477350e6b49ffff001d18ed7689","01000000eb68047fb29d78480b567ef6b76be556a2ec975656424508cc1c69b700000000bad58718fc3c6f5474918f06c44400c70b4c86d55a3f3ca3493b1d40c2061f2ba00f6b49ffff001d064b3a6d","0100000020f3ee2eab6068af3c66a24cf45129e8117f2b40b8160c3208701a8f000000001dcec670b3bfa0a5815a1abedddb30de7e87375cd69069cc9586b73e19694b866d126b49ffff001d16c59fee","010000004a816f59a7df5b9eba6e53132776d8a396d209fa24b0063896d5502b0000000068e4fee88262f7c148ebd3c3ca12cd7044abe5f2a955838d5514331ac609b43ec0166b49ffff001d282d538a","01000000a8bda5c3901a58b32f33d88d97b5795924230775bfac9b2f6530c7090000000065d60f17321f25f9e0cb3bbaf6a2c592c6cf7884df80159af2f6f3478a9c3b1c081c6b49ffff001d2a3a9557","010000007221fcd1f376bff2d06339d4d3d7b5036fa35a24597ba841a8a7e51e0000000021a7e6d42f17933bc030f40e92df8f94861b7d9d082e65fc29d9a75d4aaa2e4b5e1d6b49ffff001d6729e900","01000000cfc9aa754fb17fc796ea26a5a181572a5293a102c08daa121c09509e0000000026f192a2a1c8da08e191a1fd5ad19542e1934b3af1056c391b9cc805ff9e78b4731f6b49ffff001d0758685d","01000000456cd9f21d82d8ad7c72c36f6f0dee1208151118fce2ab161b26e3d700000000ae40981d242770153f1eaa23101d19134cf53fa0a76883d7fd028fd0e4b7cb3209216b49ffff001d79f07f07","01000000787a2b9ed1399fb4d3460e408282828e00e876fd412fce6d5d0986790000000083c39d3b58b93abd3b845604c69bfa59a1d6ea338ad861e77bb02a65323d211055226b49ffff001d1c11b8af","0100000008b0c3649ef5e09882ef0c329343ca0071fe5a6d18161f4ea64f71f5000000007749725ead5952f6f30a2908e4906af4399344613103777df039e42e0200073ed3246b49ffff001d2ec915db","01000000ff821fb870996402c8fd921a177c00c8c4611b60aa816e73fa2050fe000000007d3538947282faedd8c84f85c251c505c4df714e240054336a86d9033d7eca15d4276b49ffff001d17cc84c2","01000000036bae2441980287a666d575a3b739b6a11a06db1c45d6f53281470e00000000c65607846fec55396090b5f91fa82514b625bfeebfd4f46f6eb64bdfb0f6ff4c99286b49ffff001d7a95a103","010000006bf130ff73d65265e1cf7d71ffde239a688407230819f02a34321910000000001baa9adb9dd7d2c5a04567c480e7a46ceb0478dd5b5b1bae2e2e67f311ddb517eb2a6b49ffff001d086384ef","01000000c40b2d8037694fa88c7c56cc0343a2770832b4ca57d478bd43d6a236000000007a3ff73ae9d76c3caaaa46586164959b8f6090b9aa0b46552ee67c4e77dea770892d6b49ffff001d2df8b35a","01000000ec2abb7fcb2149936ab06e5d91f277d50ec7e09872dcbca907fb6486000000002f0ca022561b484b4ad478799abca66af5e8f0b558f1f871df4f20290fc7f1f22d336b49ffff001d25bba8e2","0100000027e876b8de88a950b6ddfaf3fd45938fe8b6ea8e9de1337defa569fd00000000c9f7a0d7bc0a76ae64ddd7d57895387b51dc58b83f78cfb583d43effbedb83e4e6346b49ffff001d2993c5cf","010000002ad40106231864c755ff0db3b84c83852ac589eeff6866075a646ace00000000f8a050001ee3f902c8f630388944b57ac1ec824f6ffe323dad1024c80dde97dcaa366b49ffff001d05252b0c","0100000074a54c99f532a50b7e54c46754a1686b2794ad5e92d56b9bfeade08b00000000019b7ce46c11ee1789e95c5e658d34d63f7ef9fac8ac5b203abe0550afdd5760723c6b49ffff001d01dc56f5","010000000cc9e84d83dc83df0e5adb49ba1c383ef0641915a3b23ba81dc2a2fa0000000036528fb723e4419ae8bcd48bf920cf90bfa34eb1f77d7d6f0ef114fad898a1560d426b49ffff001d03ffea1a","010000006459f3b5bf36eb04421cf99c8fbe584a294d9af1bb7e4be0f63e7d7200000000001721693a1dc8e7d66e641a67e5a0254c861bfaab11bef49c65330dbd21e446b6456b49ffff001d2f2154db","010000006b0c1d025552446050f41c3d74f102c331ba3b7ea18519ebe950752f0000000082afaecd8e8e141c4ac4fbb74744c90be0050c44c1dbbccc63b6aa44b1559d90b6496b49ffff001d32f5b172","01000000845a5302858d80f3d16d3ea5967ecdf31c4c4b1f33fb7578c613c8d20000000013059224acb3d334b142bd1a291cf388a25d75b2b0013034a1d2d60d20939ed0594c6b49ffff001d1552f7b9","01000000581d2b080bc47372c06cc5de8eb40386b00c72d4bdfecdd239c56ab600000000079f89b6e0f19f8c29d6c648ff390c9af2cf7c1da8eab6ae168cd208c745f467cc516b49ffff001d0171a069","010000002ad4a6b233a139883df9ff34ad680da20dc6c2bdd83d35a49166356600000000ed0dcebe3a28000c0a0f48840d6b7b22ea66e3993a700310dabee7b39d3989251d546b49ffff001d294fbdd6","01000000161691787f1ee0509357df163af92df6ba66c795703c87ee6684a64d00000000b4b1eedd2afa63d66e71476b7dcf5617d1d26a2ec884048a6c2fb48b40fd38204d566b49ffff001d18c580a5","010000008f1ab51efb8d1677255f4c7780aa19d97931a8a89d607222de8a93b900000000bb2b971954496cc2f0ac58182c614fece7dbf4fc5c38fd73a58c8d269854128a29586b49ffff001d1e5b4da0","01000000f209a7cf2b8c5ff0ec0ade962ad0ecf91cd59d07db4d5824cbd5293c00000000ad4d5fef4bdeb6d00ccbc7695ef9a5b84656d48fc8e890e1f20ccfa306e51a1b945d6b49ffff001d1d507af3","01000000284f213d7d9581d6a6559c1733d94038e743fdf51af65c9d9a2665c6000000006b82d3737a21532b37822b8c6e75358ceb399391503f53ab913a0483963f499e62606b49ffff001d18f1ec19","0100000064e31cdc15d226a83d8e4da1b5b4f0117e8863ee4486b26113e15351000000000f5418bead63da28d7902fe1a45a9c9ca4f26ac6eec67b367dce4efd4cebdfb00f646b49ffff001d002dc826","01000000631f74a1ad394caf3a23d589b22a19120209ee5c455651832c0d8bfa0000000085baa38193bce58319968e8b34da8c4263cee659dafbea2e8e43bc58cabb419995656b49ffff001d26d58b5f","010000003a3449de9f6b8e0c3516ef3e9747e1fe4aa1fc7b0b0dbebfee26fe570000000052e95211a597ec8e642a059d356c367e36d08130f8457207211ff04ad84521d859676b49ffff001d34c07125","01000000df2bdb1560d7a65d9818b5089009ea4e6432d7cd02c52aa0704885dc00000000ee61f26e77ad46e205dca3cb5342ed8d10ed25c2b92a97a299c699a985ee94aa136b6b49ffff001d01cd8b01","01000000c25254ad3e64a3a34904def21437381c8fc5d16d82ccb0d2de4f49a7000000008c3d70b36e1cdbbfb7ca700cbc35746d87a2a74a99b5934896cdbe83145129627b6e6b49ffff001d18f83d55","01000000db7b488cf03c93c5bf0e6292474c2dcf43d2fba78c2648efc81beeb600000000a16c14c7c54feb4ef4b8f82187ac916f9720cc317945f1af4b25e7bcd6c4ccbd20716b49ffff001d0623b8ad","01000000cad62064f5dd4297651e7cef3d0b64213081db589ab207310453e49800000000bd7579efee8d09583f239bc9e967662044c75ae29bfdef3f85b9e435c9f26bb08c766b49ffff001d2aed912b","010000003e1ad043118bf06edb7fc69db4765493107c698fe05a6313d6dac7160000000035525e6f510ed6c89553317de3cb71f3dc43ba6da9958633e7d0288271a4000ffe786b49ffff001d1b47947f","010000008e20ff28bcde01628ee43ab262ee898bf7bb477262338eedf0c9edc20000000006c70c492b26c2f79466bfb7efdd40372ca2ecc124754e227f80f815bf17c90ca37b6b49ffff001dd2175908","01000000d2811b555e01009b79ee833e1d2e48d4b4f21761803f24612b27066000000000355df6ee4558dc0662b36ed3f909d5cee235533e2edab3f8d915ae63169bda8c277d6b49ffff001dcc97d001","010000002b7a35ba985a32ee7de35cbecbfbb395d4b1ecef5f93db6755097e2900000000f64e2025a5d4bd008d79d2783948c4fc731b8f1fa8a08216cedd488db0de6d51417d6b49ffff001d008774c5","01000000ca83df82396755d95b880f736abb542701e382596c32e08aa312e23e00000000e5cc59f81a335a267a591bd052d9fdd53242f429a38178416779a9566c77314293806b49ffff001d342d8ec0","010000008d8ac3b2d5d890a336050b7eaf84d7db9f4e7fbdc9bd1fdb5cd953d1000000009821b5691aff2086c37915db646b0d914cddff16b78eee59f830769d560e52ec8c846b49ffff001d291888f4","010000006da1588e8e72c52aa6536b382f90fe136b4c817a7f58f90f5afe67ea000000005b1abbafa765153ca7510e19707d952d438512c0b1b231b975dbaf6b8464524346866b49ffff001d3069d304","01000000a84aeabbd1f5ff945f07fe9af47c4adfd15857b8555a2b6db0f5b3bd000000003e5b9149016433462350b6a2dfd3f0aaf7820f545019d9a40c1cf1ef52f6b94c09896b49ffff001d396de01e","01000000809195637dc8668cd8cfff3a7f1e420281ca23991062a5f4dd7c820a000000008fb46b848f1d829a3ca64469210cb7212f76821b9b46e6922a1c2278399cf0152d8f6b49ffff001d251cc6e9","01000000dff0bc9bb8d9cbc1fceda2b97081fe9069ed30cc13354295ce110fbd00000000d793273b92d7a4096730aa4087cf363f5e8d7cb09b226e386aa0db16fe5bf61b92936b49ffff001d1b14a510","0100000082c9aba70c108b20ccb3f7effabef7c29b718f6bc19e6de2e41b6d8d00000000ffaa55797c0794fcf67869f520fd58e7cba73f9a77187dd67ce34b60e199ce6704966b49ffff001d1fba4d71","01000000bae5f913a2797640fa7e092a0c844a8ecc9dd787c25a2252f4f1eb4700000000b971b6c1c2810db67c3031a465b79eeae7c4c64743ecc5c7823ce0f9046312f76d996b49ffff001d22c2147e","010000006f03e79370856cef73c3a6e0e7528714e7b045ef322644ff494f7131000000006bd78ff0c8aeb1fe6a303047123bd7389da58a3e9ef92c94f00c714174ca806f6e9b6b49ffff001d00c02c98","01000000321a0f86f1e7d319b649b2d357256f2bb79a0d754ce3e8d2722fc6cc0000000001544e4fa7d4aea7b50a44b50977508c484c1adaddf0d3a62ecfa902d794765ffb9d6b49ffff001d1aca797e","0100000031b810423f2bbca0f0ec63dbd27d915b43d9c1cd8c89fc063d7dae5f0000000000c13252141214f62d96633d576d72d966acc6b00cdc56a1d2ccd5a1dec264ae44a26b49ffff001d194dc0d3","01000000b0f6d0519262f1555fd22b6e50659d174a56755010aaa1c7ed445bfb000000007d8956020efdf05bbe201b77ed22cb32c6b92ec033eadb97739ec3e59c5615b4f7a36b49ffff001d17940a84","010000005521242f0918fc88c3fe1c3feaa9d54edb313ae04594d66a863a481a000000000e2d5d4c0802c25fce07270a170ff08b459c7e873d8b4eb88733e1f07446f9d448a96b49ffff001d323a99c2","0100000003337dd42339a6cf4230e7ba82ec641c83dad3ab21b07fbc4436834e000000001c365fa31cb23c2ecf1f9d217972a86d3b701db5781d3c58c0e59c0241d136ee5fae6b49ffff001d13cbf3d5","01000000ff8d980bedc154d5692a95ff6682a229464b5bf4fa7462b3d909dfed000000008a83b414d75b3cac1f414ad97815fe8d6cc48c7485b7d652c8c88a00a6ae2a24aab36b49ffff001d205ca29d","01000000aa659e28c1c521edd93e5f3ab7b660cf1340162dfc605724478efdc8000000006d99f811e136988d65a4fb0c5eeadd53e31257e8ade811f56d4b26eb93cc8c65aab66b49ffff001d33b2ddb7","010000000b442f70cc9c14a0ff1ac48aebd20d03fe2a74ade8b80145313ec3d100000000503b4097a31513eabbfe4ac3cb93bfea20a328b6893307b6e3cc011eaed0493951b96b49ffff001d2a343a41","010000009c371af755f56db86fce75b282e9f16b2e5c1896d64d2e836acac365000000009ed7bb8472c60a6ef80e0b0c1226ccb9068994f8bc08da09f3707ad7eebf09432abc6b49ffff001d3493f76e","010000003cfe06478e3d07aae51f33d9eeafe4602f02927bfff9ab1f865ca7d000000000e8d38cc77a6b4495062e219ee46eb7e727a72f33521a578331e761a444f1b21239bf6b49ffff001d367aea21","01000000e78ffaaf0db48b2596e59375005528432346769f4fc608c648d8b1920000000037272f04e5b7003f5305822427fc162855b5843f140b1262e173c003e0f54c217bc36b49ffff001d1a876bdd","01000000cded848bb1059935425159a8d43d60397cb1bcd8616c0f3c43a63d6100000000198f9bb878eca76a780e29dc0a31cefc4aa192e9813a7fca4b32ca6d46f3bcb81dc86b49ffff001d30d91813","01000000b5d54eef2aa510561b8a80167185e0549af7ddb9596c22971c8e741a0000000045e3289e34a5c2b63b44a9d0ca4d96291dfd835df5213675169372b169eb76d7c5cc6b49ffff001d26462d40","01000000d1ef076904a53ce3613ed77b732056625186e1ef905a1c41f19e4c0500000000f3145b34cf00c5ff01cc056c67649bae850ddad54d0b9f06670fc65faef78f4d68d16b49ffff001d20c90c03","010000007f3919d1322c65157d7b405d257041c032c66bd132fd47fe501f503200000000f543194bf3dd60a4b17a415fee38819751a9fc21d8d6bc1413fe7fb3935e01fa57d36b49ffff001d234dc055","01000000b9bccbb92e5a423e1516df739262681556e90e4e1f9ec8af44ad4a0500000000a18165b69446266adc0bd4fcd12e7d534b46ffb8ed7a16dc0f336181e689128a2bd66b49ffff001d36f6c3c6","01000000a8479ee1a435404e1d08818ab5cf48b099201eefe2215f3e2946e662000000002c32b91e02ad893a2d8989b3034a184e9d192a91e71d52ae1008b0f14813362beddb6b49ffff001d052edd40","01000000fcd8e0afae830796164ad118da1a355ff0e0ff0ab7cb6cb962ec3c8000000000260c379a8b783c5122e1754883c09c1d55486bc40c8bf37b2b0166e4242db2af1cde6b49ffff001d2c240f27","0100000078b7a4b5b016f5959ef45763567b756187a0443126da4b06999b1f640000000011ab63f31531839ff98e81ea12006a17bacd6322dc380cee12633cfaf7fdbc3c63de6b49ffff001d59ad9300","01000000c35d5f3f6a916544f09398f16fd161f754a97ffebf6fdf5c33ead31c000000001000c3af37eff7e2e47d109a38173a5ebd989d8e7884b077c49335804f1e2706dade6b49ffff001dd2784b02","01000000b3f4eb9ef718f6973cb08991e9f12614290293cf3e97fb283854de54000000003d43e6bbfef83509076ff4213b9455e62359eb4e70e89f9b51a37f82fe698aeef4e16b49ffff001d723c0010","010000000f1f307b23fa10673ee2e2093c81730b7df6ebbf35a0524d7862e107000000000f40f5e65e115eb4bdb3007f0fb8beaa404cf7ae45de16074e8acc9b69bbf0c39ce26b49ffff001d6d61f600","0100000026d1665eeea76bbfb126950b0e2022dcbed7a54951c6eee8966622f400000000e3341bcc38ea820da34d10aa763521ae7b0ecfebf0308759a0a8c7a8c4d7a0043de36b49ffff001d25106512","010000007f2be63c541ac07fe6e364141643a2d03660dacc173382d84da367a100000000789b7f76720b3a11a363a0469195debd20a0e589959c69d37db16e372f076f740ae96b49ffff001d278861ee","0100000020796fb871d5bb123081228e4581031d2c5ee8502ba13bd551d48cc8000000005f61fb490ae66456439fd95f99d7d617c4b85a23f5245fedee93c20220d479226ced6b49ffff001d005a151e","01000000e94e0ac2c4b99c00e036149b2296b89778b60c2aa0ce72f0261d983500000000f3a0a04cb6612e78fd59a3c3a057602bb43a8884a256170d99884a63a3ba39c651f06b49ffff001d19840b5b","01000000f10e90b9198296337c768a9041f364ea3a72452f3fab902ab081e5d40000000087d290030cbea58c20e0fb4a147ecd6b7bb2ef43657b8ef9fcf7b0663e5e44e393f26b49ffff001d00bc7a10","01000000d07dacd495226ce87aed1e55093e2edc38b974782cc8f134724fd99e0000000022cbcb75214dde47d189e01c2d5f6af26c903b757e3f828dc61c63d2ae828c9e26f46b49ffff001d2009e377","01000000c8f8ca6c1c6b79460daa8eb7261c3cd761cc97775bb5690c3932143c000000009b5af440543f60554e8c386bd35121e5b541701de39db8d5037c97b34661bc583ef96b49ffff001d2a571bb5","0100000018f961873c3b1942b57afe0aeadd041f6fe47ebcb13bb4a1bd5992cb000000001181e967fc5e514944fcd984a63c5f973c16d80576a86797dd27701cbf80325a4cfa6b49ffff001d051ce75e","01000000aa49b33e4b86d6ae192eacfc270a817a129a9c3e660e63b83aac3e9100000000d33f258c55bf764efd77fa9a96e123b5c2a7434536445f84fc1514daf46ebad971016c49ffff001d2bd9d253","010000001d2bbe4ec72c655a0cdee4c7fd4e08adab21b023e37cdbe336eb3ecc00000000a47d8ce0f463e913d97f225b03676ead5ae38bac8b79990210b1dbe3d4d54e00f5046c49ffff001dd1a8b911","010000008af038b83b3e305700964d99e78e1650dd895dab16756bbf72050760000000005763d81e74b117fa98b95a0040b89a81d2c97555b60f941848cf2b478a920257e9056c49ffff001d1c20d897","01000000fc7a55cc4b8599463cb7d8234fd334ab218e6136e376ac9b8237915000000000332c73c419a245a3e01cccc5b34e0405177df52921756d798e8c4e96866ce3a7b3096c49ffff001d057fe75c","0100000018c7509b606d8372a6c74e56623afd0ae618c833c2bbcdbd0b6b68b7000000007f7773aa1873cd9ecc9a023ee1471a73abbe5813b2fa0d6e56b271c8c81876b8bb0b6c49ffff001d344659d5","010000009c86627c04b31a4b46dbb4cc427c09d4637c933ea9be7bb9e8a06479000000008635cc654d9475aa8fecfeb298406b54411ab77cb56fadc524e60cabe834d9be9b0e6c49ffff001d293c344e","0100000054d6054b326be657fd8b7ebbf2c6ec999807133e089785e52ebbf22500000000b817544bae27491dc2af09a35450de36c0ebaa5961aa39d62394b677ef36f43695116c49ffff001d1e918720","0100000086b3bc6be5711838906d21721ae63cc7be0718f03ebebf68f117601a00000000e02449420732c979fb8bc9137aae638d06d68a814c273d66a2904f2f062d281d6d156c49ffff001d399dd6c5","010000006754e16bd9fe93061c0f09281f35ba469bbe30702691fb8907209d6d000000005c91acb0fa224a709c5e03d2ff3c3a4158f2dbfec5d7da3f1abe1784ce27fed8691a6c49ffff001d091a4279","010000006b00044a8cba3dc3897a25796ce8adf757a85fd592eeb42b4f39a4af00000000ebc18e3ca2d6e33a1ccd46ddde8c64224b2b07042b8c6f3e79e7a2c9649eff00a21e6c49ffff001d27ee3155","010000009a04aff6c23e703fb320b2638ab3f7f6ac55ec41e084491d79f4d3ba00000000b2b3b30d79d265a95601d456e38c1d8d965e6d2e0864c0142d9c3350320e768e77206c49ffff001d182f7d85","010000001bb833077f0ce1ea0a215f9569a99305a0936b2efa3457bf7655f12500000000ed3831a5fe35066e87b7a876fd0b926de1b16f3d7c1264253b5be006b86941254f236c49ffff001d1e4e4be1","01000000ef44fbdcd2ebddeb3d08724206ba39569dad1cb37a649f33dbc216dc00000000d3bda4136057d95cc68b01f47e606b26fd6f0527c15f698409d1e31263a4de9890256c49ffff001d31f6a0a4","01000000b77205bc432e0ae9eaac04fde56a772d7229a47b51fdc51ee8e4ef98000000003b8de1dc5786db9245506b2279cf4ad265a04844684207c0b19171a54e47d3a596286c49ffff001d36314722","0100000033533bb129e61f0f74261d278f2bd55f2bc017488642f121507ce8d30000000021d7f702ded0987044a6512963eba50e5ef05400da1206d3f1570fe41d6282eb2b2b6c49ffff001d08df5cfb","010000001ffc654c5bb7573373ecb008c666b1d67346f3c083fd70a01b3bc40400000000c21a3a98e03ad686cc87f2d51f8de2e02b7531d668238feae1bd2915650a3f5bc92e6c49ffff001d33ed0ffa","0100000076ee758307d3585549458518e9becda757761e0314c50a8cf5a1167700000000987c501da3e11059bda0c7e2b0029120fd713d8736e0ee741a6742ac4aab5f0621326c49ffff001d23e0a5d4","01000000215c29adbb60ec035d12a4103d2083abaee412d45d9d4dbd9b6f108f0000000007ada786f5321ee0cdda517d705f8dfc1511bfd8ef3b2b85622109c3e4ffd95f3d366c49ffff001d1fe378ec","01000000bca771226aecf47d0c2d4d0de03a9d25476ebbaf0d072e6f3af6b236000000008e6856b17fc15440998586894e98c1a77b1d754342c70fbbbd86cf9dd612017ebf386c49ffff001d3707e10f","01000000ba173a10edbc4eae2540fe5dd9bcbe3bf5189b1dfef9975e3b08b13800000000a5739f6a44d001f0e97b0277d0f599b47d18c2d7cf8f168f6c5fd6e1775fa6edb43a6c49ffff001dd60d7505","01000000cc5dc955c03710cfb3f9c458d75f19c95f56f31e0b95640d76026d6c00000000cc6206173381330f6e9eda325a2c0a332bf91e5c9b73efce366f20e60fa69f040c3b6c49ffff001d37f9d05f","01000000079548816898e8cb7212a8a88eabfd59078b50b4e41973a3ef3005d800000000ce2901b9874557d7d6749e39bf4d0fb8e881df8ea05d2276f9989d758a00904c073f6c49ffff001d1e7336a6","01000000a97c079f94095b63849a5ac2ed1fd82e97d39ebd1124702a0dac29db000000007e931c5c905c4bb2a34b6794f7f5f6b2494fd700d267df407421f3a99e0d734f8e426c49ffff001d15678994","010000001cf019203e6548173a3c57523864eb09a82f7a4f1be22f4bc003b0b900000000ea0690b8082ec296c36f12303661167363147b054742b97b187c63bedcf915bc73456c49ffff001d1cf5bb38","0100000009869f4346f9195dcd65c0ba9e1e71b098772d78a512332c4a9eb662000000007424ae9c39a23c31c2edc2278030d62010144d3ae2f056a3f4dcdd1f7cbbbfa657486c49ffff001d2edd2722","01000000f633d7ed3ab899730fd3b64988fd90e4ffcbabba76860d74a53233a200000000e1ca45884a8d5c3e1b96f843ab103d7f5adb49b0e135f67ace25f9e3501257e3054b6c49ffff001d3805daee","010000000aef3503e227d687e663de625156415c1f9160682001f4aaf26cff7e00000000272d33c3a4c24ec89a8006bb3b10fd94c4f8971abe71fe43f6f709b704bf9c50e44f6c49ffff001d324c2536","010000006088282be394ce679916d8eba3a0abdac3330fd2710b1ded3502e06b00000000df6f19d80afb715ef20e25c00f2653a871be7786dce00b951bb79da3399ba859fa516c49ffff001d364ece18","01000000dcaa667b62bc3842d19dd02f669ed6b0ade1c1a5bbfd563d51c75c370000000016029115e149a3d2c26eb524d30639c2a17642180abd31fb1b58e6af807be4ff53566c49ffff001d1f7603c0","0100000067de9c26790bb5466429c55ba9016ac3ca52bcbf57c6d0d260046555000000004b63eaf96a27493190460930e33709aa48ceff8ef7004672ca40dd2744f160c8fa5a6c49ffff001d21d211d1","01000000b8c34305184a81962937a0f9392b74956df13ea433b5d59382913bef0000000085f0ecfb52630fd1f85c9a76730135c30514c121f981f8692f5cbbcf7601cfed1d5d6c49ffff001d1a423fbd","010000009b4098cabc3b4e1daee86d0e013a4d4b9e7aaae92a1a4605758ed611000000002b93a8b3600bf1f439f661035a2b648ae01a4743b7f3f4e1c126a58361a8c306e5606c49ffff001d214112b9","0100000094a45d813e28f95c9299389016042a34545103806742700e0d972d8a00000000d39b328e213ed8569eb7da16936eaa3ea0a8811a45ff3c347c922e63c086d3f210616c49ffff001deb133800","010000009ea458509b5ba68d1dcaa066575583c254b0afd4422d2c77502fecd30000000009b14b49603d25a274a1d08f89ff3de309d08e36601381764b7aefbb86f7b6c602636c49ffff001d2cf1e7d4","01000000f794b96767ccc1ef96b43ea2e69bb6a1f52e5833458e5c4443cb59ee000000007eb7b78aa311433c2f4b6e6552a9ab7761c800e115b50d50cbbd3de7a8a6f2e08c636c49ffff001da57e5701","0100000031d0f776374952ab53ac9a4594819b4854464f731a403d929ad3af6d0000000048d9aeab3becdb2cbadaffe319cdd4b1566d8b9b72256775b76449ae60b2b26664676c49ffff001d1d0a5441","010000005ee3919eaaa05cbafa09780904edf582ae1a5f6f041b0e335460fc7d00000000ca1c8b7de3eabdf44606aa308184a701b17e54ba4dee3c329cba74cc2108e0aba3696c49ffff001d0041b0a7","0100000089089002cc47f9c66a2a6177d048820e23f78d9973a318ab181ad8d90000000043016ba486d169ff402a1172fcfff49e19f4a3ef7f5621237586181da10896198c6c6c49ffff001d29f267fd","0100000070ab7fa5bd9d2546e8f57adbba0c6a72e2c4705dca154f9f07c5d6c1000000002524b345fd2bcb26dce6d270e8b2e9d72fc8e30a1c1d84300cc94634eec5b34d0d716c49ffff001d06ac08ef","010000006a6b37658b50fce0f3acc70340376fa4cd6aea3f757fd07efde765a1000000009b28183036532d921afc7d5be8bc32226bad32e73379e44bcfbd1eb2f7e4217a95736c49ffff001d257a5b96","01000000ab785433e91951c8879cf46a7a8393ddc8a1fc1d307bfc0376950a79000000000d26ba57ff82fefcb43826b45019043e2b6ef9aa8118b7f743167584a7f9cae76b756c49ffff001dd56cba00","010000004ab0ff71f735c72adb7ed3ed0b8ec64a046d87f6cf2c80b351d2294900000000962297e559039c86187f2dd36eef3c3752b82d4fea371e0557aec97e231a5b48ed766c49ffff001d1758af77","0100000084373d6653273dffa5b0a267acf5709b9f346af1d95871ca952a077400000000c91a78674c03e33092c646a16c6fe6a30c54a79646200d6c8a0059490db2253ca07a6c49ffff001d00d66cdf","0100000018a30d56a3af9c4f9f2677275f18f5e4af7f9db3dc97728b63eda962000000000ebf18b992082aed467928e1f328676f05c199a11e2b9363a16ee6c4a2ce716a4a7b6c49ffff001dd47c9202","01000000a72effe22f07f4f8dbe95adf5ad7945082b6695ff4fb9027cb0b103f00000000538722a0cf6f858da3aed95d4727a6166e2e3af582cefbb3098433fc4bad5f294e7e6c49ffff001d256a0b7c","010000006f5de128daea015f9eae5a13ac8a58c520554c7d26da2febdaa2c37e000000004e48d9840621f3de84a336e386ba3b91fc205e9f95553e697ae21e90731d0dfcf5806c49ffff001d2cd899d5","010000006d78d441569887713788f474f2a7b6223ba4513c8cf62abc87059dd700000000d036219ebec5233d8037372b4bcfe2f503d7ae50c23ece7d7d1688f82326b846b4836c49ffff001d22fe275e","01000000d433d44f69e5f008ef8a06142eb8af0d2cb6922b566b60b9701e0d90000000001fa0786d4cbe6087102b8f4eb8898619e074d3929671588c245da82b02f85093c8876c49ffff001d17dc8264","01000000c7004f45b05debf9722cfeded9d7c8751809e14c6aeedf566c3c508c000000002fa875269268db96fd0b22ac822c3caaec14670b13d121e0d07230f020c9245f038a6c49ffff001d2c204523","01000000cb8cb40f7101b5c1ea84b21e9c5ebe72c73fe1fb4de6c9999479e2b400000000168b726409f50b93fdbf84627ef45c764a232c43dc57c1561becac3c2be80ccfd88c6c49ffff001d272367e6","01000000e3b4dcb2ba78c95108039d299e91c944953aca612a71dc7498ab7f190000000075adb80fbe23ed9d10f241be958a96c26d8b0809bafe28fc9a7448c8a2ccbe580b906c49ffff001d1833eec5","01000000dae09bd53a1e3020f1b4e78526c6a74d32cd28b9bf4b446e0079477000000000cfe55d64bde1484876ea7c4d936cbef46b0ec9034b1f63d99802e44244583f96a8916c49ffff001d0834608c","01000000d5aba8f2ca60e1aa608fa79ae16002efc2f6b679838b250c0f82eaa30000000085ee5dfc18fd498766e9cb0388fcb20adc3935cf888850463b7f28e93663250412936c49ffff001d0c5bbf05","0100000075185a650dff2e961d87210ad20e6f72937a1238351b1a192fd39c0b000000008298c733380a6f78cf85f392ee278cd02d9c2c724a27bd8a4d87e490405d880b34966c49ffff001d036b479c","01000000c031651fcb166fe7110e244d14f27d876ff44a74dbaaec65b6921293000000004b4d0d1687e33d159db56781fb9722875565ae6f839fb9a2050793e0ed81e3ac5c9a6c49ffff001d278ffe71","01000000708deec6a30c31102ab7bd4f263cfeb57f07f48f42a8321a7956509f00000000d8dfc7824b28b78ed915172b4a2d9d63f82dab1b1c70d5127c199f758ec51ec20c9c6c49ffff001d290dcd10","0100000015fb083a4d0b8a95fbd467e9c86cf7d71261dd9861e53ffe5ea62817000000001d1da5bbb69b0bcff2c853c64be7bd657e09bb570ee824beb657f6fd8e52b538e99d6c49ffff001d3476683f","010000008190cd10026a0a135ef4c5973b83031b0ed90d4caefdaaed981f5a9a00000000be803106837e8c8467d3d6fff043f95eb8b5819e71daeee2edfa1a6db5130952a5a06c49ffff001dee74970c","01000000116237f8a998d670ac0945dd35e88e748f085aafabb89dd233ae946b000000001ecb5bc79ca6d1e063fa8d3260debb04ba334699c9f992637ab1e8c39633b0c29fa16c49ffff001d28279db9","01000000d885d0bc3a0c7e73e406fc0766c0ff3d31aa3c5f178d53fc4d1004b1000000001e419be3c4ac5302bf144187146e055bb406a0e19bbfad462bfb8d0b02323d1e04a46c49ffff001d1b5cba13","0100000056791d8749fc542e3f9c07b092e9e10c9ac4ae4aa5efa9d209506b300000000091d784ee83e11ace28bf4b06f0bb66b5854b1eca8fada68737e6534e46a70229d4a56c49ffff001d30692f9f","010000007336db42f627db39554576340a228c219e5a8eb99018a44b25bc8d5f000000003a11c368c5568a8b5a35c8d6fc36dfe276630a415d7b61630ba5a9359a98b56678a76c49ffff001d3668d211","01000000a67d9bc53da8dd0e15d068812efdb58d1d444d3e8f812dbfbdc0b704000000004916cef33e2043de9b0da2d3bc65a2472dea036fc2367d104474902c962b6e25c3a86c49ffff001d361e0919","01000000fb23de1762eeb37468b8d73ffee3417a26fcce8120c6ed0576ea221100000000b7786e567d1a7dcfdbfcda1a67adf74ae8d528f3d4a1fa50defc5788b1d6ff9dcbab6c49ffff001d2854f5ff","01000000b4816e108bc1b97d922fa72010ed60105dffd279959b04bd3956df5d0000000009d53c3649ad7cf431a0af740ab33720918240daf9092d2cc8f324228c842a2bd7ad6c49ffff001d153efd3d","010000009c69e8c38a99ae7df04b3e6b8c15b9e416e59888fe7963b0f58fa3820000000009f0382eca9b67a55ea4944f4a2bda00abfbfedd9d159773054328db3cc2d58864b16c49ffff001d140039a5","010000002b055b861a1d958d2fe0847ced4f287b38266d332fd471624317d33000000000b9450c8735d71005291544c2c7452809c02568423b7439b3a0cae818721ec9e0fbb46c49ffff001d1444244b","010000006e7c72d38b7ee0cbe945f88ec2378a1a4854321405b0a5a9a1d299da00000000827b6c72d983c743b808e212892671652d43f14df9273034b57a224829783aba12b76c49ffff001d0155f073","01000000140df01c2d9ebd29be458484819765b1c90a6a1c379754d3c522c18c000000009a9e2349449f0156f066ec114e90aa4c44085a0cd9ed8cf3161d08ccdaeab4e985b86c49ffff001d2015350a","01000000373ee8e0935316e0210ebcfb2413fde9bf7e4e6fca4163cf33c278c3000000007ce2602bab12c5f50e1bdbc9dd47a2942ae8b0cef06daa4810b10aaf637b0baf1bba6c49ffff001d20c97771","01000000b7a4f96e0ce19ce4cfeed7c1f76190370333b48adb6483cd1722d6360000000016177741d8b5b422caee6cc1db7434549d96a18612ddd50a1907b75dc7cda69cfabd6c49ffff001d2f577608","01000000be264b375b5450a6ac16e5c7799ff07f20f406bbbbbb059645de873f00000000bcb0cadf3ba895ee39d85f4384cfdbfc987e0f668bc9d83017ea91f395bc40921ac16c49ffff001d07d3041b","010000001c758b1385e733047f9e7161f47f6c4237e5ca2794c24f2ae6f2478d0000000073b378214c4ab232de2735db40a0cfbc8c163786b510cf1c406a533f1c54532019c46c49ffff001d307675ef","01000000d3c6eb229aab344ba660510c5bf68b384e68c59d6795bdff3b9ef4c4000000001860d72ae64808ed108c935795d25de4728e6e6194b2a2aec3039ace6ba12d2786c66c49ffff001d01cc1e82","0100000044d907b17d9d4dff36511a667739dabc23282f53b0442e9794ad86e20000000036e720a12e51469646b1975af8572ca88dcfe95cab31b74d46cab82d9be3b77bf6c96c49ffff001d154b0fd8","01000000d6b43be9d5f3496884e050276da787bb3e9eee56c72d90404d9e62db00000000671aac33008a72cd8ea85a2d7856a606d2199442ba37f0d5dabf7976d0294c4ceacb6c49ffff001d1de0bb25","01000000917c8c2799e9f0b3189cffd70cf4c51d8b0d1fb9924073b5bf1ee3900000000010042e639cef8b3aefb9ac853bc0c14f1d165a916638bc0f56f8b1c3c074cacf3bd06c49ffff001d1d39a4ca","010000003bb5a31fc9cdb5dac66ef9be5b672d0124e641b25d4951f8fbe5c5de000000000d979b9b2dee64d25673be23c57cb7163739a36ce7a51563bd641d4f61b27a9885d26c49ffff001d056d1fa5","010000006c437917676c9f606896d9c74729cc055d033d57a228d81d8782bc9b00000000e02a7f4942e1b1993e6d7f985a4867f20be960356a16ec2136beb032587baf3c89d66c49ffff001d2804113a","01000000b8da726118f15cd7db6b2692d5c324255a15c087e515b7a50c216a6b00000000d594b867592f0d8da69c46f2e70a8dbd38312b7614811b08034e521be4b97b7abfda6c49ffff001d302474b6","01000000dd1debec615490a9a3a0d457289c9abb3c3a5b78971659975adc25e100000000f7272ef43189f5553c2baea50f59cde99b3220fd518884d932016d055895b62d58db6c49ffff001d36154402","0100000092c9638beedd5804fb2619fe653932f7cc4bf9e9fb7998d1f41f271800000000acb4f51d6ea7f21a6418c98c7d87b30a09f7c9b98a9ecc7dffefff947a05148eb7de6c49ffff001d2fa0a121","01000000b92f5bcfcd38f864dca38c1883e4723d7368e6a12038214b2a69d132000000000ce1b184a9e5e134003e24a19620da4224cb5a4b463a012506c2d2d2dab3596904e26c49ffff001d2d38517e","010000005d0d57dff76768c9609e6199618105eafd72403aa8296f0f4d7ec5920000000021f75f3139a013f50f315b23b0c9a2b6eac31e2bec98e5891c9246648899422646e26c49ffff001d7cb94900","01000000d62ccbc0f883a025ba68442ddbf938aa134fab1e1316df072a4fdeb300000000402f7bb52670c6013c77ace8ee338a11c29865f85d5b1bd2af8590cdf262e8b201e46c49ffff001dd590ac04","010000000fb21f972d5ee102546d45dfef8ffb8120e95d5ce409d7ef9531f3150000000003729128121fc9eadb757ad7e2bcaded2cba454d13ee7ed05d50fe328c4d52ec4ae66c49ffff001d250a5e9e","0100000029a783783081126df75419263dc11f46cc7f14d39b7ad26a86e954d600000000456857d38a56389f2b64da33e37ccb38ad729678d886a07c652434b356fbd19499e86c49ffff001d2281c493","01000000413f60805ff131298ef6e1351555ee41fe182714e507b93dab07801200000000832b7fbc76161b8329b163ecd2034f11d5edc80293917d281fcdd0d238b76e3050ec6c49ffff001d31281cdb","010000000d6cb209049d4cda2ebbf09f0bcd554ba5687b752a5574f7cac329ad00000000460948613e6c6434b5a16f29d6df3c49b5d0e46ce7d0fb977e1331d934227263fdee6c49ffff001d1d6c4d52","010000005539f16a40820fe33a80b06b0a32880d8adc788f6f93c92afab256c200000000c21876cc26c83da631550882c8ade02d3aab879550868d8037199bea7f17315101f26c49ffff001d0041308b","01000000d5fa3c2fa3a24f2c04d8113f54b8a25cc04dd9488a0834d4b5a7429300000000efc5a1b3752136496bdc4894ae6b4887d1babcb9b0d2fc62756b61f24650ecc080f46c49ffff001d2c13d509","010000008a85e066d7458a7cac21e90c7d4570c74c5c8b97545f1eccfaa2fab400000000131902771caab0a6d0418ff7207fe9dc21e285ca92f2a77da03ff5de63dc914aeaf86c49ffff001d00b2a51a","01000000b8f1e96a9a8f5467a2c8104ca4dc0e3bd60ba64892908cfdb9d2ea2300000000eb27162ed9adf4ed1c2a8a0b8af436fa85f4115ab17583aeed3ec6f47734c6c86ffd6c49ffff001d34f504da","0100000053a5a7a5c1170e63263c082e2b65eba3358a2602aa7a407090cea76300000000d1715aefa8c54e47f34582ca4fdfb52aa68ca065c54c8074c99c7eda8c89e88f29ff6c49ffff001d2791ea97","010000005c7eab8188bc587906fbd43bc699698dbcd4b06890df19aeaa9dd6ca000000000dfb0ab7187dff8c41632dcb4c5fe8bf6064d553ba45ecdc1b1e0ac243da9810ef006d49ffff001d08be4c7c","0100000086558cc954042a26521f3e95cbd4215e578f06a7bb047c04c84f88ba000000005c5cf856cbbea2133b64dfda5dbb8c00c7ec9156be08f19904177244e48619ccac016d49ffff001d474fd601","010000009b95e8a46d2f93c2aebf911c564fcb54432880c2bf33f5242dc9122600000000e6816c04b2dde17d28d9974695e29a252a9646704be91196d4307306814d9ea1b7026d49ffff001d365962ae","01000000abf29f3a3ce4b2e7133659858c177cbba441322c7eb52cf4e53419f90000000071576545c553857602677fba7f8ecd0a8af349472bc6e093632f06b6c13abd3ac4056d49ffff001d283aee95","0100000053741e63c86961f77c62efad4dc2fb007669976656aa1f0b1b0aad7e00000000eacf56dc89327fd34e62cc0c821fc771b8762325ac9f08055bdc34aef65e8bbb470a6d49ffff001d011717d8","01000000b5d31fb950f4cb5f03cd8cc6abb99c7c87583404d9eca1edbaa875a000000000c9440e8e418aa75e4963d365d906e446d0ef462a141829c22c513a0ab710fd54da0e6d49ffff001d216a0d24","01000000e227bae22a3e3098a3de6b0b08370793226def733e5a9df1538bc445000000008f58b567fecf6a68ab1d069902ce9c20cbc2b63bd86dff26af16c9f2f8c81dfd96126d49ffff001d342a7422","01000000321cf471e583e453eefb0621f485346e841764d5fdcd8c5ccc307b6d0000000095fe197691075057f225d6a8e086e36703a0c119d28b7d103c5dfc3eabffd86117166d49ffff001d21eb4c5e","01000000e66ce20d82688e81368285243fc59236ee4893d22379466dd07ed12a0000000009e57ffc7ee3ee0b57d14427ec55a706164be4df891b3934348c759b8d2ab8f158186d49ffff001d2771081d","0100000018b0f32c161899d43563c9ba2c4f3ff7fc08c07689f272c1636782ca0000000086b330142d07a464ab327853997fc96f5b077f65d7d73a3a16df7478f84f2d1d7c1a6d49ffff001d34b0ac24","01000000c84d8ffd2e12cbe9959712b6ef5be0d1209502a9eebff6515a9c615c00000000ee96e021d87f2c793497040d036896c53fe12b054b9838715f9bbf9b19153c25be1d6d49ffff001d19cdaeb7","01000000c3ee7fd0a6262146fc62eba0babf80e27ace03b8e9681b9aba769353000000009687cde8c26204b5309d2c8a1fba2f73261d52b31e86f7c42483bf651de5ac20bf1f6d49ffff001d3a3e2c0a","01000000d73e6336614afd63cee36f8d0b78029eefa58b019efff9382a4c841800000000a53fd0c3b3df86b91604faa6b0eaffa019aaf02b09c0eb05229fd7c795971370cd236d49ffff001d2c33f7e5","01000000b823b05ce3ccfaca3017fa323e864a762207803a2a300c6a7ada102f0000000077e812536b6c182126b4a518ac059892feac5394f11e757900aaa3b9e10d3b2e02276d49ffff001d25885678","01000000ef7d5ed0c1ff4ce9ebe01263a5d17a10ccdf10fce2bee206f2812aa800000000035f60551be2523092f93a6d0fdeaf6229b999e7cfb90ab09d3e5dcbbce667d91a2a6d49ffff001d318d7853","01000000a67d64eb6c368edf74c0533b15b832bbb22c4c68accad8cb9002afcd0000000041154b8c80af49a514e083a83eb53cbdab125645b7da4cf245054ac21e6805f6fe2d6d49ffff001d29dc28f0","01000000d994a2578982b91149d6749b7279a82a93a7f6f3bd9e030aca7ed8610000000076cee71739a0c2e4271b16b25cf74c14df0e44b5f643c66a040049718803178dc8316d49ffff001d2b02d8c3","010000006f6413b26c1e80a4c03abc9c0d0d31cd433a8311c30b86de3091661400000000a250da79b426fb965e9c84ca0f7e84347d1c5fc3114a81fcfd8954d392727d288c346d49ffff001d26df2380","010000006ccae672d45feffd9ac65bfdd64965a2de6c30ce38a0b508dd59c5a800000000b6d0fc0cc9cef08dafeaf19717fdd026e66b9f4f0528fcdba83c767b38084ecc9a376d49ffff001d37c7d2c4","01000000d71508f3db86079c93dfeb4a33ff2c49668b77452d5869629618fd20000000000b8cd6832f9e266f6b3a726340cce6cd93a2264174c33f240a4145eb0c0a5804663c6d49ffff001d32bcaeb9","01000000ca7019bab7e70ba8402891fcbbba0a74171718be2483c0ba53c1e2cf00000000c1b4452cc92f63a5363487dac9332d973db8cbb4d14c68c1e118d4ccc412c71026406d49ffff001d1d574a40","0100000004ba59253f725b324bbf9c33ba5bb34051c2414b9b702b344268b9b70000000074964cbbc3d71366e3531bef5b50f53976b3876c1b72c5eea940ba3f30523c20dd416d49ffff001d02667067","0100000006e44fe670eed58fd8795e9eca53cb83328240821742e119a7257281000000001eae8458220094078dac57f1c68a9476da1f01eab256caec7a2a69cecf740bfa03446d49ffff001d2d65082a","010000002ba3ea608ca3ff62775dbc48f8384b1060fba1dccf831c9ca96cd77e000000005b8b76364380e4c44c1e8756bf3a8c8a3913ac5f7c7010c85754c280413050b572456d49ffff001d289a9c05","01000000cc9b9e14016f1057a878df25b4300edca58d57197448a8ec4636d8df00000000427f54ad3c97de5db75295eaf90701b29d515323a756aa35903f6383df7fabc3db466d49ffff001d2fd6f048","01000000a8103a0c02ec51bdfff1fb7a7e6e90403476106c3f1f6c0072bde1da00000000d8de24476549bb12e356f70516db2bb4fbd2653be8f3fcd9e205c58449bc35127f486d49ffff001d220d341f","0100000076a9d99f9e2d1da2d20d7b282a62daf9dc636de0d3a20a553ab299b80000000065b22b8b5c1a10beef86d13e136bf81f161f2e53e6001af1f309b9bea9ca0380e24b6d49ffff001d378c6f9a","01000000e44ed8cebb98a6536a138d6d5e47a39cabbf0dade347ac2a05abc0810000000016e09aa0e359eca501839586d2ac337cdb89d6c75213b5786d5883e98ad456c0ff4e6d49ffff001d1e1909ad","0100000089fe89623ab6564bb18aeadda14b9df79801745851d6cc272a707d2f000000003e1642c5990bbba1c6c803a6d6abda32f267caecee76a2e958578a9afd16abd99b526d49ffff001d230e914c","01000000bd3243bec9f516a367e3fc5327c37366cafb18a0eb0e730be074a706000000008f56dfacc64834bb54092460ce0ca4ccd6086d26e9532d96d6ac4d78a3a12bece3556d49ffff001d024ad382","01000000c32819a73675d3d8859ee30c060a2757cb45c9b70b59670a9f91d92d00000000f4b00dd6f24cf51936e6f454021afbfcdd82ba1248ea5f46f906ccbaad5369fd94586d49ffff001d2d858eac","01000000147d3bffdad3b6c37c4320986e6180e98ab28a8a25eca6148dedbc5b000000005a1e3ecb9b3a3a1eab6f22d69d4e2420ffb4b4e373c10c5de493f664c7bb6465335a6d49ffff001d16189344","01000000f8d8592ba08dd3c9f04d71e765d9121686a91e96a7917eb9afc56552000000000d7a585c00c3a511edc1c5ecbcab009f713643a0c0483f75c8065b01eaced9b15b5c6d49ffff001d1e4d99d2","010000005a730b9ee0642bdcf9383ef5a72bf984583ac6a893ad7da8b753e9700000000037647c66b84bfe8df8b2b723a0756b1e4781e1b2a218eda08842c9dafa20fef5505f6d49ffff001d22ed0265","01000000e8732084907af8e1981e8c2c1d38b54f636ebbb26884183f434fc1e1000000006718481bde81cb501f77bc00c4a620959797009298fab47e267aff83316039938f636d49ffff001d26eb5b92","01000000dd898676760fe07ce02e217ba10eaf4daa084bfe0028c0f510f348a1000000008ae6748a13216cccfaf34ba38e3d3d3abdc8439aefff5414e602096b0784511443686d49ffff001d210eaa88","010000004f617b019886b365688c8547821690139e4c847defc2211af55e38e30000000008134b9ba94ccc74d4b04e50c449c35f8d55b096d43ed9a270f80226be6a080bfc6a6d49ffff001dacb8ae0b","010000002d37d8c9e650c8c1c1a09427e856903e07d1d0bbe468ae1c0096f39d00000000a9e6d7cd607049cf76151251dc44651e3f838dbffa07379c004ba5907d2cb9fc6c6c6d49ffff001d3452c2d9","010000006bead87bbef72a40d57d95ab59b42b8a5f0af5b7e7d42cd98e8679f000000000e0bd2afb826e788fef8cab5e3247104e687468a69193432e2b2d51c050a2c842ff6f6d49ffff001d2dc4cd21","01000000271b8889d654761373e6a2911be342efa5847dbb43531acaa8bab55a0000000080621dbe70b4ec0638b830fc901ec15c99412e8345e397ddf431c77a673f2480c9726d49ffff001d367cbdf5","01000000ef7798cd6c04eab45afc937b04fc736d0a1a648256369b2ca6d1799500000000681a248d11008a00fa98cf68447bc318acb51f60bd9ea51c6f70ba4b9fa0fc4121766d49ffff001d356e1579","0100000094af2bf6a6c0570c7d615ae60fb9fb1587c71a7b3c5ec8f877b3de3d000000007e804760be499a15f70aa0ee4c677f9bd395a3cd6b6049a6095d8dda6d4a4ebe17786d49ffff001d23a1bf71","01000000f02d0ee496a1c2bd136d8cfe32fc6e1896fe4bf9b8339a4f135cd97200000000e300679d1b4d3903a854d1f5ca101639c3ab5dd7f0b60855e478796c00b2eb839e7b6d49ffff001d25296e09","01000000a1fd11ee3d2e04495e899e8a17439426ffb4f841d3c915b3b0041e6200000000c39da70a48781d8184e506389a8207558b6dffd2d0ad9ac6c8b19046f3eef42f7a7c6d49ffff001d19e5939a","010000007b6d52b97db9e83a9ba21d5677c9f5fb666dd56856096e545a44f55400000000e854a8975df5308780e1f801816112a369b9ccb2b5a1d334542a0d573f22539f757e6d49ffff001d200be371","01000000429bb1f7138a9404dd5db04040c6a3fe193586ac8416fa8745077e3f00000000d71e0f2735aa847499a8ecf472cfa580f6afac1d843fa35f3a90da9ab614e007ee7f6d49ffff001d2f3ef58b","010000008f50acfcc7f5c52ce52ecfcb1121c4f2c36b688a846618c10190cbac000000001bb875b247332e558731c2c510f611d3dde991ea9fe69365bf445a0ccd513b19ba826d49ffff001de49fe403","0100000008b8448159dbc4107ae56041d9f1184797b65feeb5b4fd5a6d5934f3000000006446cc8dd5183225a1f7540b7de5ab7c23a2572ddab69ee1b568cc3dc410ff6b29846d49ffff001d01e260f5","01000000f2e0e9c6d32c6e15caba61d28516e77a7259f5d5011fbfa03e16553200000000cc8517734bb353b99330974a0c6e6488fc1790d7bf3b457c287f899029374417b8846d49ffff001db5865601","010000004f9120ca95889736172dd60044b58cb084f84b67f2fa5877a4d7d42200000000516822b57b6bb2fcb9fef609117c5baeea3de069af8d65214f35f94e6c32328bf2876d49ffff001d143508d1","010000001940e01bc8b57d8164eca58f50756614ae5fffe83cf261f8be6f906a00000000ed6b6200b65d633c76b243f1b9b76e755b7aababc68a928e13cf83f56d52349597896d49ffff001d59c43207","010000001ac798b7586138573d10bfe9531ba9a409bc33face51349af12d16ae000000008926ea02799bdf550804d03c70672ec8d20c953405312e9897e2037b418ab428408b6d49ffff001d20309fe5","0100000074b2ece84e9de9f6676c75f687ea2854b805dbadac469a94022571e500000000525296df24170c89cca14ccacb0ffe040ea4b3715879994db8c94c7172726fc4f58d6d49ffff001d254b5f54","010000008ad3da3fdd6e7641ecf464a8f18a8600cc1cfc99dd328943c9c4db0200000000329fee4990496b8151c0588f0c319fc4170e9e085cac7b16dc4d5155c49d4b6187926d49ffff001d1bc12936","0100000044f55cc6a1c256e72d4c2fed0be900366a8e974afc270f3c04fbeefb00000000ea5505fe4b87294e29b15502722f7720cf44bc574f6392efa660a893de043a45f1936d49ffff001d086d832b","01000000e6836b00521dd207fa0f0b61fcbb337191e75ee7ef23b851fb7dc93100000000e61b52070bc3ca5986792a47d17e350b855f640d73a9237a03f168564a6cf3c1f4976d49ffff001d30bdfa2c","01000000103717884a57fd13610e06d675738d38d161e80c07a66eedf8a4bd6500000000910e314d68872fc69f04252c777a370b68e29865d855c7f53fdce8edfc948fa2e29c6d49ffff001d25a0798e","01000000e35d0f0797028e6f9283b40e85332fa8313c2c7fd2c484d42114f8d300000000ebe5c99a0478352809049ee550954f058cd5d5f33a587883058af778dba9afb41c9f6d49ffff001d29548435","010000005f796f901e3ca4562df7f25ebddaa60135549ca6ad93c6e73fe139ee00000000080836e135b44f37b7bb1f58d4e74f5a7debb1217f449bf6dc9b437d2b2a74d479a36d49ffff001d03aed663","01000000e738dc97bf30282fe83178eae71427039b5ec9bba17dd158aaa15d8e00000000e4fd721a66bf2a8a2cce0e0108265dd939221a80d97295b075b56f4ed37fd59ba4a66d49ffff001d278eea6a","0100000059cdfdfe907a3113874b6a467ccea4159572e86828b285659a8d7bf5000000002099e1a92d94c35f0645683257c4c255165385f3e9129a85fed5a3f3d867c9b6c5a76d49ffff001d6f409b01","010000002aa4bb82ee29a60bc645a5cf99a41a3621b9170d9aee883ab322971e00000000265e86161d5f8fd38e45df01a0c07188ece872296335b0d85e5f80747b6191064da86d49ffff001d1a394c67","010000008f0eed6f3137abd83f59ec657a9064ed36e033392c8e588c996660fa000000002e0287851c62f4205899c995f276a2f56c2da8668aaebe5fc20422fcbde74ca922ac6d49ffff001dc193b810","01000000fd62c47795cf8c049d450d075808121e95cd8cdbfbbc326f239e1a5f00000000af9302738200b9698f183f74f5ba9cf8ec54290c6a2235b6a0f1e7acd7f9842caaac6d49ffff001d21c498bd","010000006dda37e759836f6c455cd2fe56e37a4f80e6916e7be4581c3c0402f10000000089504189b02d1b5b26230ab1bea07b772a171e53c6648880caee6ddbcf8b0efd32b06d49ffff001d33a025b2","010000002cb5b8456fa9974b18f4d12f5a42cd717e03dca7d7908c7f213dc2d30000000090cbd8b763cf88334adb0678ce14a1097a4a2f19262696ea298d818ffcd8704fe7b36d49ffff001d2be31e93","01000000541dc3b6fc6a019d5489bf5715d6219a488dc7f206da89da60e87c7f0000000014a7c5aceccba1b73d97c8d5fbd1873416cbe0ed1b6d03689afcf5773197fb3a04b86d49ffff001d34b16282","01000000d785d65a8193b021992c4074ea1071b0ce16d70fc706e70b7237f45800000000ad110e0085a52c383d1a693a77393ff1466b90ea6ce4704db7a6d1ea609ae7f6e6b96d49ffff001d3014f89d","010000007a4c10d21f0b0c3a624d20a03ca4afa46f667ebe34d7adf844b6c62500000000c91d99e483f23091b5c138776ce14331c69fa07dad891af674deb01392429c72a4bd6d49ffff001d614e1710","01000000d780318aeaec0b4ecc6734c990599a68c9e2dd9e4af50802267e87bf00000000d6c871c502dd9038304eb8e08e650235a18806c0eb191a7e476d27f025fdb13bc8bd6d49ffff001d29d0b2a4","01000000fd4d884f05c434eb29efdd8847d133a984bb3daaaa970c6e90fe9d4b000000002ec058bda1b3917d4a3a5fe700617f4032a5ea0bfc1c40cb8cca6beae496928c91c16d49ffff001d21101956","01000000a926c75ec6e64c70586dcd349744accf969fe5eff81fbe52990e0ffc000000005fb770c4de700aca7f74f5e6295f248edafa9423e446d76f4650df9b90f939a743c46d49ffff001d702ae903","01000000ebcb77cc78c4e996f85a23ac6df5b959572bf5d3e1f1ef185b595cc5000000000ea6ac7429b4acd4ca0c094c18f77bb5579c53e620c6e61b81021ecbfe906529eec56d49ffff001d39f8f012","01000000487e516441c18207e91d30ad39403530de449be5c1d81deee09e5c940000000099560e61a0a6e3fd8b0d7cd1dda3631ccf97b54cfe51cf591c47f4d946924aba9dc86d49ffff001d1c579769","01000000c78a4f8f0f8deeb48af10381b38912475c876618a1be00ec643af4cf00000000ac280249d4c0fee8a4c544860d201ff7d0ad0774331a1f5732e1315966a51b3361ca6d49ffff001d30a3c29e","0100000042f40d507845112d799123ce539e423e984fc83233f90815edf507cc000000004ec2f4c554798d31ace2ebc056a9d345db4d700c81dacdcccb25b279e6796cd5f9cd6d49ffff001d22f24b7f","0100000001d2357fbbfa34717bae7d680c5e4c558c6f053d1b7fafa64958313f0000000013df331d734e609a679a2d1ad50bffd7936c578dd94844bd04546e8ccf93804ce2d06d49ffff001d29992c3b","0100000005d5e83fdcc04eeb26dd3ec79cdd945f857a7383637465dac58b79e100000000d5cd1070cc0366ab5dd8b5d71d0d136d0e6d60245d887a150474530d6b054ee231d46d49ffff001d061c2b08","01000000ac2bee93ca914c58c326cfe3f33603b3e129cadd1303937e856ea44b00000000a9b3280328e3c8d0f57fae8519176f4e5ccc12a5c7e260ffb885b56a26012f8a8fd66d49ffff001d0047f1f2","01000000f6e5e7e5463691a63d1d0322e7c377fd5a0658a63b8b9af30656241600000000968d4c096ee861307935d21d797a902b647dc970d3c8374cc13551f8397abbd81eda6d49ffff001d55ad3e05","01000000f9f3f14029398a0df6ca3eed54ea350b96451826f9dabc095c8974e400000000fe17b51c5dd7a75f1937414c82cc4e920f52b508d5dea0943620f3e1af181564e5db6d49ffff001d37bda304","0100000098eabc920a6f9742f5f072afe2666de06e73980bcf6cb823ea446d810000000083c11c5a85ebf27a69d9bccd0c4d09c37084028a1e7237388033d5d1659abb597ddf6d49ffff001d235ce65c","01000000b2fa1ff48712817647e40d262e31ac14c9091db6546ba14c86c3095000000000b82c01637f712dcb3010862f04f3f75ecb65b8c648b9c66c24461a82947fd0f29be36d49ffff001d36bdc532","0100000014f7d694c62703e5ddbcb608c6316e58de3a569c8efba226cfc8ad3e000000006cdb192be84c48bcf56f9585ad0d9920795b699e2b911de82184387a8389ec80c5e76d49ffff001d2c80f32b","010000003e932636458926dfbc2006cb1c4e93c4669cb2f9f96f4afa228e44b000000000b5d18814db24c01c65bbc13424dc7603186eb1e66b5bfc0a44f20fb4e3b52ccf49ea6d49ffff001d2cee2ffc","0100000060e7197869adb433b58ac12e0ba40ba87c7424e5ccdfaab40326561300000000730eeda8af7eda79ed8b8901c417c167407860199b9f44a6507a3fc875719fdb9eed6d49ffff001d00141f6a","01000000c524310b61f2da3b3176a512a37c9a055939099277435b031bbc5683000000004553fe72289a3f49852356911ad6abef64c8db5cfb94301e2773ccad5bbddd7a2bf26d49ffff001d146d05e6","010000000a5f36361d8653631baf19689bd3f6c86a043d17ef99fecbd3bb860c0000000093be83e8628083d53e7dfdd29d460f75c9ab37b1ae09693b1a4937fb677a97de46f46d49ffff001d30a41243","0100000016adf6a68a78fb0f1879d775965c9944bafedb0820f89dc8f757db4900000000f7e73747c0a277ad4b9565f8a5ab1c79e5f9819e795c0987435eab3e0ec9fd226af66d49ffff001d3a34d374","01000000cfe7060bc43f9e1a95c6081f0f77d986503ba384ed863669dd7933b000000000af5b8eba252bc676f86311494152b2ccc51171bdbb6488382d26c927016af5efcff76d49ffff001d2798915a","01000000e41c18a7921f7baf61b5bad498c414e4104ccc39c0b3a68b8bea9b58000000006bcdff869c6c6b17f0604deb238d48cf8a797b4eb3bb3f66b10a28f3ccda019ec4f86d49ffff001dcf86f303","01000000afdb6c48183f28cffdd323b66db69dcab14392b66f59820e9d73822000000000f7831b83aeb439a8c017d4be195e24a964d878642332d029e9e825cd421c0c062afa6d49ffff001d2bec8d14","01000000b15373b2a7b33ac4035ffd81ac72b60876eafbc7b8d5ff21f61ec895000000004a26e1073caeda821bb11a143d5dad57d5402b48579cffdd1a9a9571c741b9fa72fb6d49ffff001d68c47003","01000000fcebefd40c65ba1c7a621dda8789d8e10f1d62e80b3d05463888967700000000e560b11265f9e3ec7f3164983465b0748ead71853fc29716765f87ad2ed14537c0fb6d49ffff001d17775376","010000008110d936e3310b0284477556096a1a83dbb9833f17bccbd20afc029f0000000074e91a22ca3b9bdde05fc4ed376a418deb5981cfa52cbee00331438ed0d53aad08fd6d49ffff001dce015905","01000000dbe9cce47cd433f764026708dc57f3ff9b5e4dee6996df125e7210d20000000013c45c11e723cf2d0cf74e742775cbfc24bef49311f461e7152eaac88fa4d086fdff6d49ffff001d32c272f9","01000000a22bdd8babbe8df247194e63dc294607c8f028d4a5001b053897915f000000004aca07acaf929b7b154171c38afc3b798e620be583b5adc3db689ee786cf5ff26c016e49ffff001d2e14291e","01000000207b627ac67036f6b9853df8b2e0d1cef359c8a3192f9a8c9f15097e000000004accfd0bc42599680f77a7ba4bd9528994a917083b440588ec7c06ed64770ed2cd056e49ffff001d1aceb043","01000000014c71b9416c3cfa5e00d90c640d2ccae33fef8656143793bf9c00f600000000478e78cb917083cb8c5e5a1ee72591821903ab3e077ecada6f2f45792c65db333c096e49ffff001d2d7c6370","0100000010d5e45b60db1a4f5b59fda452501c50de47e2a8f19cf550a8035d4b00000000a1cb52ab1adfcb281fe32c06cdea885844819f22fab84c4cc4ed3c9d7347ef8d5d0b6e49ffff001d181e07bc","01000000d11077a0e24e7c64fc86cf53d7693759e6e1347aa8fa19d2b24635fd0000000091ed8858de31b160a3eb9124c45356417527f2bbf1a2e3056f8c261ec8066f3f1c0f6e49ffff001d29aa5485","010000003b397aaf36f1e2950514ce136814f7eaab1e58c786fb8ad1f14f481500000000a5d83e1912cbb89f0377a95617a6d48828e6522d2df4c860aebcab7da6724ec198116e49ffff001d20f4f194","010000003e63d22f7322b3067d7145026eb60774b62f4641cbffcc5c09e9d73c0000000080c99a25dfcd334324dd5be987f62b9dba104da76c19e0cea9761eac2e3e753ec0116e49ffff001db2746f00","01000000cfeb4a671bede6b2c7fa51222d59d4c31d20bdb284a03121657cbcc90000000068f252ae81359a3d34332fd03c9aadbbb1c04d345ea70690c273f13ff82886aaf9136e49ffff001d065d20c8","0100000040e53e24329d2b8f9db7bbcfa9e4632e9fe5061cb61a97d9f0d5150d00000000cb4c174617a6bd0cba4bd47766c6b04a19912d0400f8464bde5ea041fd59c88cce156e49ffff001d1c54c2ef","01000000042cd76fc32a93f1e64b1443f853abf5b6eea9c96bc65c54f7cb64db000000006d5ab121c81af7cc82e315a05f39da68972379b8480b0efc89348e472dd098ddec186e49ffff001d058a91a3","01000000729390ceb6c4703139c5a93274091e1ee08623b49c83277639063b8d000000001a510df2c6033fc47525d50e6c70e3fe74f51e4c0dd238c518d5e347d15a540b051d6e49ffff001d1ed1d440","010000001e003962f0494376087a0c99226a93b492d7fd4117173b651aee5be1000000009c883df5634e7f03bf03c765dbf101226fdbd8c0fb039e767242749a26f53f44891e6e49ffff001d2a393816","01000000719b8684fb7ca628f9de7a9caa35f74d79df38d2e36a70b6eddef0a100000000572730f63559b3c5a094491dda172849938f6f063efbf2073692d075a767a4c059236e49ffff001d175c3375","01000000b39c50a3de991241169a549b8be02181f506fbb9760b7eb9668d12e200000000961560f3a5bea8233949dde17501801361d1f3f092d7327e2b25a01b7a6cc5fa69256e49ffff001d187edd8a","01000000ace74bfb4fb7cd5a99bf8a51c64fabed5a446c14bb07b7da76639bee00000000c347ec6780d7849d557e05f60bd58496a0a64cc8d310536ac0ec99bd1181c2496c2a6e49ffff001d278d938c","010000006e8099910be4ae6b0ad5f0bc785548f2e4273f99ba0723d87008a48600000000e0b73f02455b438c97558213411190ebf962af553ca47cd9981e658d8e8129b3362c6e49ffff001d20c0220a","010000004d8e20d17c90b69b60f9f81512e9795e65c9df13cb7fb619a192183500000000ad738109c5f5d2ba6f8e0fef3645f2f93e85bfbc3bb3e3241450fd582511ed3973306e49ffff001d209f16cf","010000001a81f4a5a61c50329446714dd9afd2ba1c51824fcd8ba68264ceffec000000002fed99c8adeac656511de53c3d5b0b054a77a32676bfc45811aaa0eb9f6101976c336e49ffff001d1ca2ed22","0100000005b2a2661d1d93cc43454f53c706c6701100f37b0b98c981e785b15e00000000305f5e88fa4ff2de7d37cd62c7b34957eb322ab592e7908e484e0bca42dc245bd3336e49ffff001d3e8bdd01","01000000decbcbd9dca15a8a72e488191cf660c739356e6e8b123572ec12437500000000546094c2d30b8eba972c12658bd8c2ba5f89d9c83d7d264a3505be96f32d293646356e49ffff001d2b56b737","01000000da45fe5ac3cb755ba236733b14ec3f712b25d1683025a5eebe2632d3000000009ac99e6fc86815ca2e241ce47b2336af5f23c88bc93f53cf94396f475eaa1d49af376e49ffff001d0011c9dc","01000000539ae2882eb7c5accab0eba1d0fc53c609386b75fb93fa5462200f9c0000000067bb4dd75076972d1b0ecdeec87f470ca37de91a49512f0a2bae1f2e79c15d6d023c6e49ffff001d030cbf7a","010000003829b2f67fecab70ad1cb7a3105b37fc440b9438d4e3ae71a44ed0ec000000000c31f3fd81e767f01a3e08b0375ec3ad90d2bfc5b29f891eb35f4593f298ecba4b406e49ffff001d271833a0","01000000330ecbe4e87ab9894f369a12a0eb9691b6d3c48944655c2b8b68207f00000000aea31eb8b9d0bd896447cac8271272d140a6923c7a7fd7023fa383d1c1c9d554ba406e49ffff001da60dbb00","01000000a0f39bcbbd7c47d8bf158a10f8e158ff9ead287cfc3a73cb4b3db22000000000ccb21f5a0cbe96e89fae47060d96a527650770d76ebc8471af2ec7a89202b6c82a426e49ffff001d2867e7ca","01000000b4677f5cd0ff8baaf253f253421b5e8c1657759d986b19a10d1b4c24000000009ff2eca962a68b5e5b3a5eb20003e347f06aec93f78f472468132e3441bf65fd7e436e49ffff001d213c4746","01000000652e64669a7f2179aafc1d75428b8afee9888e55abbb96b910509b8d00000000c464d527cdf5f4325c85894da0df73ff2b1abefe20653c1fc8aa97e4524cea8bdf436e49ffff001d40245701","010000008b1f67fbe0c9a3874289e9698a20bb1563a109da2801e8db674088080000000085c5b2cff6e8f19c438ac35681265c65b70fbb1109de6ab3a83fa6283078c81a6f456e49ffff001d31484673","010000004a20590fa8cb3842ab637ff967e8db33d3b4e3e1c44090e9e81ab64f00000000c4e08f498bc6263ad23d0c46793d4834f5937b10b6b732619445f56ad47da1d2b4496e49ffff001d3135a634","010000004ddccd549d28f385ab457e98d1b11ce80bfea2c5ab93015ade4973e400000000bf4473e53794beae34e64fccc471dace6ae544180816f89591894e0f417a914cd74d6e49ffff001d323b3a7b","01000000e770c2a77c47cfc24caf6edfeccbd4ef242269752e1da6b240a2c5b0000000003cf35b66adc8c3337346191f33b59a4beac07201cd58f5326ea4dd0baa5bf65b6c506e49ffff001d1f5608d3","01000000de0b79bfdecfb7989159b3c071d6bf3f4be20904f8c110d39aa29ec30000000008785c48dfad1a6b79c93e4cfc4ed00b97a26b77b5b3992af48f9aef7bba4f3500536e49ffff001d0121bfa7","010000006a491ca8ed6e242089e9e393d2baf66407577d203eab8c066b6d3a690000000043effd4eec541268821d642aca58da33fcb8f709ed41d3a0353f9b2397b87642c0556e49ffff001d2a7cdf66","01000000459f16a1c695d04282fd9f84f4fe771121d467e5497eb1aa8bf66d8000000000cf7ef5b5c22d4edf641f0fd5fcfbcefa30acaa2fbc910206f8773e3918748504c1586e49ffff001d398eff7a","01000000db773c8f3b90efa51d8e40291406897062c164dff617d2a7bf64f64f00000000774328ddff50701ade3a2e1f28711643a17ad5f53f1e94639b04234fa0a5bbcf575b6e49ffff001d7232e103","01000000f9980503946685d96c93e577fbc9178bf36afda513d16ca79272884600000000a2211eb4bc799c5a8f144bf04cae15842c7981ceab73ab53df166eaec53b6d99275d6e49ffff001d1f75f325","010000007b75943c35bd0afb424749fc1678ff1f965e24c5c4b623484a132737000000008e4accc55fd5d1bceace79d79732249b0db8a73c38d6b87af374bd556c6dc9db85616e49ffff001d17d549b6","010000000a8c01978fdb97e72da780dee3f327fbf5877b354dc023e11923a155000000008d5cecefe37e8dee52868a68c1e99380d1dbe9f688a2e04cbaa9c9d27232ad98cc656e49ffff001d237ca29f","01000000eeb1138feb8e098cb7e9daab99c297741f5883955ffc138ed28e296c00000000b836448b8d2dd8de87b9765c04b756577521c572e1952e5606ff52271477f76ffa696e49ffff001d17401385","01000000873c10f7da8dab97ecae63e4d0fbfdcbb0c13feb1cac9de89894f6470000000078b733ee4c2438f7379ca1211e575cce9bf4ab139e6ea01ab6c31d411e862b28e96c6e49ffff001de2847704","01000000dd5f9a1ec0f94840096048c454c243dd0ab61434327efd43c02595a900000000a871208253064951df351646d410a8251e94d4d288ffe705036bab31d8a35fa8186d6e49ffff001d168ab213","01000000f08388bcc7029cbf307f74e7fa635eefa58bed3dcce96592c1ee6a1c00000000f5dadffaad68fe78823cd2c5c22b8bed56036dd7ad0b80bf3d4139b513827f8844716e49ffff001d0822669f","010000001ae5b762b65682bb4e861f549cff72ec82d7fd652170f261410f550d00000000f60b5e96f09422354ab150b0e506c4bffedaf20216d30059cc5a3061b4c83dffc8726e49ffff001db589e004","0100000066e778264a7059ceba6b336fe057e917c9ffcabe5bce9d1caf3ad3d9000000005fc81309eedeec4cba2f97783315e95678561da4179579ebf901057c1746bc6c01736e49ffff001d140df36b","01000000844884e8bc0d273c02ce85837fae68c614000a8097665931517f4aaf0000000006c59d850ba77f37481602bdbf400ac63e5f11924331f1dac2f36eabb941cd587b746e49ffff001d233cc2fc","010000001016f473e2c221fcc407552c5676eda4e6dbf4a1c94f33fde178c813000000004cf103ce804e02d8460b2cd5a82b899d1f9ee97de805b2329230f660621077a946756e49ffff001d5ec81502","010000008edfac31673aa6b2becc6905862b47b615429849c65fdc9f0062860c0000000071814c9c95509d9b9a368649105fd0527dc45601dcb95d702482e14b54ffa86d63786e49ffff001d350f68ca","01000000556b61f040823c172bd3aaa585c7323a43781969e2130579de61ddf600000000d3226717e7c0150181de9535ca51dc231b58a52b4682325f85e43c2ad626dfd9707a6e49ffff001d14a66442","010000005d3159d8a7dd07e0fd665269d6a21bd891444978e0f3ba3fd66d0a0e00000000483f470963903c78f5406e56bdaf64b9a9486773cb6691c4f40d7be221c0effeda7e6e49ffff001d2147e50d","01000000127a68159ee059fa42fa2515849d62fa92a636a7071c50ec6128cd5200000000ccef677aa826f0ff06efbe96f1ed59e3ab4bb531221405d6a10dc7c4936c89e5b6826e49ffff001d1a3ff80d","01000000a583a5f68b578276e4cea2746959b337633b645ac2fe74be12058e8c00000000f5b6cea39fe8800b3dbe3037cc7be8d7b635ac102fd1045036e378afc3fe0c6a27846e49ffff001d273867d2","01000000141218a64d92665f79f9f1f402db6807a2ec6aaeb70e8cc248a1c49800000000b7ce48fbe8321c00eb0f243b29fd17a76ef3f1990cb487471dae1a14ff660dbe87886e49ffff001d2605f07d","0100000028889a91835c0b98c3efa95bf0477d05b9c4a251cffbbd90f6f8bcc6000000004d08bd06912adadb20384e14dbea85ae51e0f31fc36d40aa4a20407df8eede97f88c6e49ffff001d38965fd7","010000002304d0899a8b63de0f7fb53bffa95b7797611f733961577b46ee2dc800000000572ec0b96307af3de1e49326c4c72b841bcf729805a5454d4ef3840d33136515178f6e49ffff001d171f3135","0100000081530c498ede569d51f8f23b9736ab2b622792206cabd0a66e4c93d900000000bf1b908172da77d71f5885e935f9c0101070911217d7ebd4db1273b72bdee2ad35906e49ffff001d5a333d04","010000009f09fb92c972b95ee5237fd26cce579b22ff2c492537830d246b87df0000000058f3770a9228ec06a15a7dd045db5fc0894f62f86a87dfd23157d806a6a56c24c7916e49ffff001d195224dd","01000000884dd1ca3dea4e958b3de3759c03825030e520db158d25954dca58a200000000eb59db31d319cc911b3b727457e35b987ca8e56f02611d4960ce82424719265f99936e49ffff001d20ca0878","01000000625129ef48c551c3412c4b981085e69e6c3498c0553cdc7d35a2223c0000000020d7c2fe310ef91c326658ae119a9743e7ded3c2e4a05b66f67556ba13883a1172956e49ffff001d05974031","010000005eba50c0c8db7241c9d07bfe5795e79905aec8620344c78fd7149030000000004ab69a1b320cc1edabbbd1f739b1a5a05f0eedfb6e7dfa3f5495f31880aabb1d64996e49ffff001d2f552984","01000000b1a0b9b99e88d6722fc122eaeca773e8583cbec3fd4acc2bdc02540100000000bf0e7ea79956834f1c6f14e4890ad5bc7381d2a1d82553160e7caa4d3785e96ded9b6e49ffff001d08e0593c","010000000d918e726e1e0ae3042971411b37ba7abd4573b6cf7ab4e4e67294be00000000fdf56f33d026e35cfc0fbb5e5ba0739ed59e93c96d73a37d1791eaee8a43cf939f9d6e49ffff001d2a2705a3","010000005d9ebc8257fb0c577663a96daf7735d60c6492e54ab808068b5e475000000000dfb1576fd26ca9438e2233176e82c8719a20e8e2a0aa7fdfecab716e9b9820a30ea16e49ffff001d549d3109","01000000d434836a01e6209b821782789a934ad7f0b53b55a6dd6666a27393e4000000002b6ed6ff447f7da29f8db2e7b806d3557eeb9f5e7f43656b0fe2bd40a4cb013054a16e49ffff001d37242382","010000000e73f0f5b98a430a3f0df1343843098e53c1e3dbd3eb34df659989a0000000004dd62e2c4f9998fa9f2f294377fc65e1f8f0830b362c5c1a724374ea3541911cada56e49ffff001d3358a93e","0100000036c1c9e205efa1ab7e731cf25a2c29d2521fa0a955b25fefed8aac1200000000b2bf91f2a5ac90777f0848ae5ef881032789315821f9045791b5d8330a88886a30a96e49ffff001d1fce51fd","01000000ff8f8157300ed47e77d14168e508bd69f1ca9429212a0b85a367eba80000000006890127c16d4b2a32144f1536ca891136208131f9dbac529487e8b70f8ca85496aa6e49ffff001d360c36d0","01000000e474ab0691d5e193f015c808e6e7603fb95b485826597e4574eddf5400000000e377aabd0ce40613ccba7949354320572f15ee37c3d6d7ab5aeb8d81d215a9305cac6e49ffff001d08ab91af","01000000ea7ee6971b5f811165409606b2145d57408ff1f5e2c4fd3d87f386dd00000000ebd3220564290865ad7817c029e16b9252097d05c6b39817763443816a62ebff33b16e49ffff001d17d9f576","01000000dc4b37a4f8cfdf005a7e9516740a9602558872c7651fddf6af297d8200000000d10565b0160eb487cc02392e8c22b8757a1ee0fbd9d52b6891e26c6bd51bb815acb36e49ffff001d2ad65bf2","0100000095ba491210820ffda9524c44c65c5c3cdfffca4b001e535ef18be9ea00000000360218966364e245326c9022502684e71c5024a1a6d50db55eb08332a8af873ee2b66e49ffff001d36dbe6bf","01000000a56b1005e7e8f481c50b28fdff91ea37ee10ce7ced39d26aef2ac22600000000650488ee24b488df9e05430b1ed7c9132256b756c0fccb7a37d6e318c257950b50b86e49ffff001d1f600db6","01000000a7185d5b88bd42894af2bc2afa36345b7cf3045b60e105ef554f84d80000000047dc9ded51a2aa8734e03b0e7dfb18183d0ce36128c98097144517e98b9b054762bc6e49ffff001d25e1da35","01000000afc29fe3922d88fdfff2684a7669ef615d8b5c4f7cbbdc5aa10898160000000089b6be1e4d771c289b409e2eb5e8b8d1aac723ab4d5be3309b60ad4a2ce2a640aabf6e49ffff001d05172fdd","010000006db156171ab1e50ff12e0c7fabdce8005b46db0e0c4887367cb8a3ea0000000040031e97b324b3ce3a0bf5fc10e23fb9a150be38e65afd6d8cf37d089f85bd0fc0c16e49ffff001d38221ebb","010000004fb8060afc08aa7525fdb59bdbb8a889fa0553b32aed3e4e61fb581900000000dc16765047bb14a816c39a3b9b5a2af94cc62b1a1346cdc3e52a02620e815d3f63c36e49ffff001dcca52c06","010000004bd6ebf9c982caf2df04b4c5a1b3a2552c8441aec9fa63c7d90437aa000000009827f136eaa54c812691766568acebe38a4192fa3b84f847e7e32c53f1d27155d4c36e49ffff001d16017d43","0100000042490a3de212575a7cade89bed6ac18a4466e667f3d679bc1da1b2bd00000000edb0a433b741049d6e7c0b44838a188ad809c60ffe5076f4c881cb93ab70b247ecc66e49ffff001d06fafe08","010000009e36757d22bd738dcba6f6fc47215839fe149b8b849049dbf305b90900000000e398331a75c87c42e14d571dfa7ef036cf4c06f85d05fee2d366bb2acc1b1fd4a5c96e49ffff001d02b465c1","01000000f5790162a682ddd5086265d254f7f59023d35d07df7c95dc9779942d00000000193028d8b78007269d52b2a1068e32edd21d0772c2c157954f7174761b78a51a30ce6e49ffff001d3a2e3448","0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29fc051906800000000fe7d5e12ef0ff901f6050211249919b1c0653771832b3a80c66cea42847f0ae1d4d26e49ffff001d00f0a441","01000000e64ac3beec275a3edc5a0dfe11b51014b7afefce067e661e78ed4d5a00000000d2904c383785ce368c59e2145dda1b393c169318d8baf0242fa5c62e40cbf9bc4ad56e49ffff001d39b1e8d5","0100000077ebe63083af4cd6860105feda4a70065cdae0949bac1b54fb85af55000000005f3b5e7e7e790d5fc6293c837353763d3acbc21942e234ffc52c8f58ef2b27e93fd86e49ffff001d15e7fbf0","0100000005d732979157bc492864a7a618bdced7d641053800c7cb86ddb1dec2000000006949124212608698b07e2d19ddbf1e4f8db3252b24701d5f8dbd4e1d69be77aebbdc6e49ffff001d3a8d120d","010000000fd3a3d4941144674e12abcb50cc5163adccc63d3ca91e916b50837500000000ae545e6b296308fbc77fefef86fcfbafae3c02d57543e7c17cb0fce41a4ea87f15de6e49ffff001d36e9c0ec","0100000075a5ad37b74e9126e265eece6af8b0e41c9594803b3a57773cf44f310000000035b1878318821687007890055fb65f442b1c4145c4b4dfe5092bd77a6ae4d2757de16e49ffff001d1ee51ffc","010000007d790b8a4f39dbe5d30a486db70becb32234ae457da9364578e8facb000000001384d807d4f276f3342828fba4df3503531fa75d45e032328471271cdb30430b1ae46e49ffff001d06e03864","01000000ee0a6213cb0cc4708764948f6ad97ff95aba9b366cb3f337df21128300000000d65bd544eaa4870f47df21613da0f9b22071885f7331bb53defbfa3654ba2aad56e96e49ffff001d335d6e97","0100000069e01e2d00d6f87adc1f552002aba2b7df61ac076dd61861be09ec72000000003559d5ea3c76414688d91e80bbf3ce8362bac94144e5193dfc25e5e4618881f7f1ec6e49ffff001d1810baaa","0100000079c30d2c23727a1e9f5feda4e7feb8ea0bda2ab98e23e7f6a9cf594f00000000b0de897e42fa7a3b5c3a6bfb8e797acf4ffbc16169394b03ad93296524ed633dcfef6e49ffff001d36d19a6c","010000001c1e11540ad5892a508caabe84183d7365ebed27bfc4e39707e4aded000000003f075d298921f89501c16ee2fdd02a5895bf1c6e338f700a8767b77fb1574ca8bcf36e49ffff001d2f225d06","01000000adc4cd014447c192d822920cfef8c2fb4b1fbb4876650fc0e24779ee00000000a03bc376eee4244d3f59438d0e0031aa973082d9890c62479d9ab04e0397cfa6aef56e49ffff001d3649619b","01000000cec70016b2c107a6f4fc33fd160e85e67724b5548d3e052a9a8d1a5800000000a88fd10885277062eb8db1611eb4743d302ca776c9bd20aa8076bfcf58f446714cf86e49ffff001d33166789","0100000015923c78f820152228a4e48058c7364986651be42a9989fe910894e600000000b592460ef77e50551b32c61c47acfcee4269d6a10916ee5ade59d0de24c9eeb128fc6e49ffff001d211ca7e6","01000000dfd4b68345669704b4e7121c9cf075bc2430b1937d2017a72d3213b10000000081efd372e23cf4e4f12bf1d2e100a6536d83511803ae8dd6804fcf1767c22d937afe6e49ffff001d30cf2ae0","0100000065ad502a7980e29354eda9f22789f473126bdc2ff6bd2a3eea1fb7b50000000067718550d1aca048fba5a1778056c4277912e0fb428fa4c40b7be689acc6e9b3b3026f49ffff001d205a8046","01000000d62b3d54e8fc8ca22a6df2f58c622b7c83cd6b71688172e64cd6b95800000000bee30a717915e03f7f4d07d72d11448e6f3db2a08c0e8bf8f3c77659ae1c8cb872036f49ffff001d44d46002","01000000aea47a15e2680f180f27510dd6e616e974e1f73edc2e465e4679749f00000000e5f806523b27719c1c98223e592d51e4935713b6990890ef8258952489a5ef1b72046f49ffff001d6155fc02","01000000b70dd0fa4e4fafbb4926ba5905a463474e11bdc90bf09bed37bbc2c5000000008403e6332d5293eca63863854159f3c0625ad9c80aaf5fdd9079304b3527fd88ac046f49ffff001d1d6c9d43","01000000cf2e24eb67746c7a22fcf1c43f67aa59f31b779cc7acb6293315149100000000cc36ce4019fc5a068d50763293f881d3274248665f7f3cba93098d02bf120abaf8086f49ffff001d14ae7781","01000000c1664b0361d9f8b1fb208b5050e18c57bc6055b0cfbd7e4baef95ed300000000a23c64ff9e6e443b61878cb03e86102f20a48e839daec5421c495f31ca9aec6c030d6f49ffff001d3543dd59","010000005395a73db030ef6e47242fe57e41c2b99cd49b0698ca47ee94e00e8c0000000056fd7c1d895c466996bd75f258143e8302b2aba61083150ad6396d30303c7d8d3a0e6f49ffff001d68d55b03","010000007573ebb924d030a8440964e3de69199178c6fa2e957d11bd4bfdd1140000000079d6e359db40c49910fb111cfe1d52d6d2c3aac57661205e2d428b40c451f1375a106f49ffff001d07065fcc","01000000e767090dd07ea2b5358a4d4c10a9677cd05807adc42495032ada7aaa000000003b28d2cc0ff4c773f7e379a7660954af69d1096617ccd4251d02d9bba67be46492116f49ffff001d1940620d","01000000eb9dbb95f9dde4d203a114dcfd7a20ffd399c823e1baf18602ddf7e000000000024d7a961690aeff5d72902141438fcaa9720cad80ce878b8190348cc47effd408156f49ffff001d2a0bbe7b","01000000490a9168a30ed451cd83e9c73599064b662cdb4eacf789fe069e2fbd00000000dc60861beafeeffcc8db0eef60683a88fde60f09174c6c721136356d667594f78a166f49ffff001d355710ae","01000000e03bca7fd55e0e108cb7839e77c308747a9471d102d5149aa0d386bf00000000ebb77750f9bb0f4b28bf0b6227ed6449c024cb4476b41527661d4bd3639b8c46291b6f49ffff001d32491f0a","010000009cf22fb8225c3d6d65009b41cd5a3ed8b668f481e57831afe8423b3b00000000d6fe2d37205d9b69926042eade8de6159f1a209ad86049437354ed1936b3ab665d1d6f49ffff001d1f3611a8","010000000d75c1bf0dd9d92fa8c2aa447dc2e7ac473a79fce7378a02cf632c4f00000000550fd6c11453054544a33a22806345aed90ecdadae96cb907f0073fbfe9fe495c81e6f49ffff001d002a14d0","01000000417e9c5c926f8fc67ce66b88dc4aee70eeef2774bcef4acfec35d75c0000000090a7a7bc8f1a7316736e4c0a65d5a37f2a41cd278516f5b4a20e6d40fdce3279cb226f49ffff001d5510980b","01000000a8d44d2b2ee9bdfbb719801f1df1dd8f2ac2aba31ed6a6804abac3ec0000000005c7032d5752a0fd79084d20ed2faeb35862c15209e6146e1d08e2905c58c1404f236f49ffff001d1a0230c7","01000000b5fbf970bf362cc3203d71022d0764ce966a9d5cee7615354e273624000000008c209cca50575be7aad6faf11c26af9d91fc91f9bf953c1e7d4fca44e44be3fa3d286f49ffff001d2e18e5ed","010000003c668f799ca5472fd05b8d43c574469fbec46ae3ffec010cdf6ee31100000000a97c6e691b813753248aa4614e4d3a34a3d1471e6ad863a392ccf4687d857a30f92b6f49ffff001d22239e3b","010000001588b0752fb18960bf8b1728964d091b638e35e3a2c9ed32991da8c300000000cf18302909e57a7687e38d109ff19d01e85fd0f5517ffe821055765193ca51da162f6f49ffff001d16a2ddc4","01000000acf46b3ddc0abffa740ad7e3ddd37779978aec7b24b51a561e7ae77400000000404958a17fbe4bedd4a44b847497b9cd673bb7eefcc62c77494087dbd1029bbdd1316f49ffff001d380710fb","01000000d26725d2b87da449b4b33a494d13e9e0ab677225e52520b1e88895dd000000007ca0fef1c17096a01a45398b1f32e53015cd91e37637c975788eff7abb105d35f1336f49ffff001d30d6930d","01000000fde75159df5ddc5a2f22633900f68d98d283a3ae2565b0a5e85b9384000000007551e06b3e6d22c4d87fc781dc48f84fca5c9b62c9f96a5202dfef18fc20fa291e376f49ffff001d21d2d95d","010000001b6018b2e8ecd65bcc5aa1009253b58db6fcd41ad561321b39dd680500000000313d89e80ad490fe0905fd8f510e6b7f5a52f3dfb6c80158bca977dd2144ac7b4d3b6f49ffff001d33226fa1","010000009b3745c8611c388ff4112f6ed88c1e939a82b8bd8ede50f48ef4305b0000000090ee55ce6c42983d8984610b6d83456a5f2eeef4d85a42a86a9c22b878174ed4ae3f6f49ffff001d2cc198dd","01000000c365649c1b7bb11e569785be2dad7e1d16d191d81bd54b01b9c3d4d300000000db8770db22e3d3b0aca85e28b79f4166b3b0f1105b953c761d9cdae494f597b2f5426f49ffff001d01ee970e","0100000038babc9586a5fcd60713573494f4377e7c401c33aa24729a4f6cff46000000004d5969c0d10dcce60868fee4d4de80ba5ef38abaeed8a75daa63e48c963d7b1950476f49ffff001d2d979137","01000000e78e910eb318a322b58438c9b230bb031695ebf43afd5e6c51230d0d000000009e4c17381b7c6fdc5e11e99628b7fccf96ad20d45f35f3533c660f6b00727bc6924a6f49ffff001d2c30c7ea","01000000208d03520184419c12fd3fda18d12c4c20750ccca1ecc405491c04fa000000000f9549481cba4f222cedfeeacbc4aa52c3735d9ac7a6daa8d9113dba75d29340214e6f49ffff001d1ab8b7f6","01000000a8dc77bee6a0001957375a7cac9c52976cbb8912ffd06ac260ded2b90000000069c84147eb0a0b270f2c7c374bc160259bc09298c6805aff778c6b7215084d37a0526f49ffff001d2536839b","0100000035391da1da87391e5e00f6edde60a23fff240080abb51e5f600563b90000000022d07cdf4c304bdab06d8a9fade932b43dc0e4d68165b47ef7e8f24090661637a3546f49ffff001d2ae5affa","010000007800db59b3fb77c97b97c9e44be2a6030680553a6745480cce8ca08b00000000531e4fd11c77dd8f9a5fe75bb8297af93316502dbecd217c7dad84e7f0d467af56576f49ffff001da538280a","010000008a7a3e40d3dc47236b3f2accf0c28cc39dcc0d8c91c21619de81821900000000b061c1528607759128ec8ffcbb202d604055c0bc418d97fcdd56706f34458a0042586f49ffff001d33b91969","01000000842086d5abdf5966d0c27556efd81baad06043d12aa7fb3382eda47b000000005903c1b68fa63b59e0930e7fae61e86ed6e6f84b11a1c1a0315f193ba9df2d959c5b6f49ffff001d25ec8391","01000000b2ebb57895e766f70841ea19e0fe6f367971e869d553b663aa5e6a1d000000002d235191d1fd5999873f0ba1652c74b6c6529598fd34e2aa57bafdcc92e9c003875e6f49ffff001d29df8902","010000009a8f1777e5bc25d6205d448ac4e2e5427d92a661d61428789b5dfba30000000010839862ea5438cc722f129cde84605b9b0d17ca43721ee2d1a341248c76f34de4616f49ffff001d087221c0","0100000050d9d2a9d9ee80c9265f052f841a06230f2cd340688d1acba88ba5de000000007e951a85df490ccb4adb17e59191fd9317fd5b02584ad8fd01a1d5671753a68b94626f49ffff001d8cb40401","01000000e0ec4c9f392c0040ef5cc1f070f0ba2a998924673f5c43088c17eabb0000000056a8e6383ab69a0409b3d1f65d5c9aa49fbe6ce1c1d0b560545d49951f801a44b6636f49ffff001d05874e57","010000005fc5c302ed20fdd5cd68c8a1405691d9d4c74ebe7a94726f126e1172000000001cf8954c63ec92fba12b07152cf750ef79f1653c5d8fd3a1f709070f2597b30301656f49ffff001d6b3c9f03","0100000044a6074a92b7c32216a43643238eaca18f7aa377aeeb56cf5267d1000000000091a60455ed8da925a5b80717072f4957af84a1e8f9e49cba978d32cbf0ae55518e686f49ffff001d097d253e","010000004d1d188235120d8cef9ff8af1e976694c9be0f1c8ece6bbc71458442000000004e2cd3f675e037239d0636b7e0b691c688645d91409ea099e049e0ea5c6c71815b6b6f49ffff001d380fd98e","0100000088ea921784f3757122a69eb521588018c317f5949cefbb13a956f9c7000000002902b235ff8abd85e3a7550b935e60573a2c4bb548d50c5e31137f41a7b4ac7e4f6d6f49ffff001d295262ec","01000000840821cc1914982dd50596ff0e5230fda9479b3049a3e97118fa93a80000000070f0882b920be0c5f37f885a561de6ee12c75833e1a3671610f9aab679dae85078716f49ffff001d14e71769","010000003b07a8d1d124993a18377209f09d52a3d6f85f2b6a302a4aead84b48000000001244e55125575c9a93201e8b6d86134400e8cc905f361ddff74435a111c790d462756f49ffff001d349a2b76","010000007b355bd5f7a65e43bb89e2d416dc476ce0218b923e994d51004a6551000000003e4e2656a784241ce976a3a59fdd521e9df70a209d93e48da4fcc7acfc92ee1980756f49ffff001d80c5a500","0100000073623f61cff0a8f2aafa9e4118d0f5d4ccb342405b7bf152ee0b09d800000000c4c0ac99519c9b38cf9cd58ebe82303c1c0ed693ad6235c83e7f746a5cbfc6b2f8766f49ffff001d28ac7f7f","0100000043e4b5a77bad6246458c7c73a62d99a1eb56bd65bc52916601953d4b00000000090a1463e193c93242f125240e5a7ad1c8bc4a1ad1c508fc1c576244288c057e00796f49ffff001d186cc048","010000002c27a842bf9a5e1d42d6935172e95adb5d3a5eea5fae8982dfb7ab8a000000006923c9ddf99098ad17c569ea36a0ba8c4002cae1b9f90d2347554d0b94cae69399796f49ffff001d83b42f02","0100000019f49c9c9c1fbc717fde97f6a1b7f927523ca778c4fe7a95893ff7a200000000347eaf23fe4472df284b85c827b3e23475d5b50b6751b9fcbfb055322ba53e78127c6f49ffff001d06afd308","01000000a9850b4967ab610bb4dfdf062d37cb05891d99588343e028c3d6506f000000009a0c4ff07f17972abfc13e0bb75a1913b21dad2ad47028c9647f3febe366120b557d6f49ffff001d141461f6","010000008a64b50a65d2c0e53067168621bd81690d4c02d85818e6c753761f8c000000004148dc681cd555766f47069fbca92e6b3176170f1e5e8063eecf60b7036f993c07806f49ffff001d2e62515b","010000008885b229c8053fb1a12760ea3ec2d2a26eb147d00356078b0f09e4ef0000000047001c4980a3ffa6cb102fd87d1be6ed1b583d74590cb4a438026b88c610644532826f49ffff001d00474858","01000000db82403f5a1642306d56c29a058e0f2cfe871b9527ecaba275d6dbd0000000009e4013f8d089d0a79b18b3d22f693c864d71dfed50bc0233a0be7fbcb8448cfc01856f49ffff001d1a65d7bd","01000000e2953a8975e49e0f4a90a77c564f710fb161d6e05306ed824fc447f0000000001d5b805c06144764b5216905a4033097b68514138d2c92f9c84a6064be427e9a3c856f49ffff001ddeaf4301","01000000fc267457775b8e50267c7981294fe72ee74a68147436978f2341994500000000e0780a0b870eff12d74199f0d3e65b2881da07a5c18f5bc25f3e6c735d641c51c0856f49ffff001de6f68400","010000001d2d7c0e63aeef1b9aafe250704e6677e2ee1bc3a3d3da671114857c000000001d672dc58035ff91ec44283004aee94366fee20e6387098a3adb52a0570f531bd2886f49ffff001d0366c3c9","01000000c85969757fa7211ad88f1230d0a0b7e7a20f3c3559aeb8e702fb2c880000000019816c50a142a69421ebb523cb11e05d4a1b9d0db58706a3c53239a9d20e7a78f78a6f49ffff001d019dbad0","010000002f6ac1e0c8c7dd9cc8d3b2a61b672a6f6a8ca7dbcd4ec2d13e5c80f5000000005b7d4512a348d439649cc984fd958a7517e58dd73fb80aa1666f594368f899f53a8d6f49ffff001d202dadd6","01000000d07b247fc95d22855992e86d8e827e81abc5aad8f191323e5cf1aa5e00000000fe8580383c97f6c5a5bd28a8d1a0f030bb92ffcf87ff2e9cc8c6fc776fde1258e5906f49ffff001d06718490","01000000ccfae7cc83a66a97559a639cb92f5753a27ce93b302405ad4d350eb9000000000634baf70a91767509fafe492e8a71a4a90aa3b4de1effa9b147ea6ede376830f3936f49ffff001d3747af93","01000000aeecb45752fd8694a0ce4a0bec23bd8f6104b042093e481c2b4faf80000000002990024b4b572b92fae66a0968d9c53a1d0399eecd5ad280cebc3e0858d38d25dc976f49ffff001d043d1e70","0100000013d36ae7a04a8251b739f38616e77b714f52440a91cfc10451c0ecbe000000008ab58830c7cbec2278955f4a2a81cea34854e8882623ec87163ddb77e12223c269996f49ffff001d3095a309","01000000e5277b55e4745c00d9be131f689e277b277bc21789ed7caefa3b4cee00000000015b22a79914c67e9dca76d0ff9efc6e0c445174b6ff030957ae0daa935b3a08399b6f49ffff001d0401ab70","010000005c4fa0d70e9346fd2f962629b531d4cd6a6c20d083cf200cb97aaa450000000035e1babe612a6c111d0064577381caedde2ee58625dea9d78210839f1b543974559e6f49ffff001d245c5b9d","01000000b40d66e32218a918e5ae8712499d48f4df3d9568b767868b91db8435000000008103a151fb61fe82da2f6b4ca303a51f8c6f31114118142d74fd882819347d3ad9a16f49ffff001d19a81901","010000001faa945a26ec2169a881d1b071ab48ae878cc3842e9e5963a8aa6fcf00000000ac07aebccd3b3771072a2e210435b07898adc76ee38b9932f908dd04549e1c4a1aa26f49ffff001d23440ed9","0100000022ed00476c6ef74430fa97cd72c10208115755b9977a84787f4c429900000000576191d96e019274a758a12bdf89bf17e88344f99f168cc13d15d69ae7a1f5f10da46f49ffff001d16b435d0","01000000bf0ba21ba45828f6bee26d7bf17da60a689f682a2acc9ca456828133000000006b4ddec8a7e883406226b1b22b932bfedfedef993e397963ab73d4ce3325807e9ea76f49ffff001d1793bdab","010000002907b68138272ca81af5da533ef99971aa6786d98ef6b06368387c4a000000003ff1235143bd9e26fe209a064d651e70dc053c0223625e0dd4ce0a49779d93e1d7aa6f49ffff001d2ec936b1","010000007d85b156df849a4dc5e79e08556a0254bc9802a35250cc3d1479e7b500000000936edd9d99301bb46d06cf6baf4109f0f594d23b672eeef175efc7df29e023b197ad6f49ffff001d212080a0","01000000036c3e7edccc8f88c2b9a6746b85334f5710060e8ab2f7fae8f69d9500000000171db322553cb4663f461729d7e1fc5e51363beffa81e3c28dffa7178fda65549eb06f49ffff001d209c2120","0100000057de25138a5d879f997f38d5539fb1bbb789c84974f60ab24ca74d2000000000054e4ae7a0982f1980d30c8d79da9bb561444995232695d23ecb015c109578aba2b36f49ffff001d232c7314","010000000781685aeb235dc169e062b45ac69c15f64b4ad36afae447f7cd722c000000003fa5c4fef10164b947d76e885535394e2a25611e6ee365597e9217dbb6c9566eebb56f49ffff001d1d60ad86","01000000068e299e90f28638c2527e2fc3b03c620401208050f60663c6c12aad0000000068aeb492f6f7cd070d9ce3e80b7ca6b9995d19ad173c1811733a4b97d67e6e3368b76f49ffff001d03738508","01000000a15f31d7a403ce8d3cf158514914ba12826a591e086ee20b140788180000000028c2a278649bfe70999929b9ba32a5e49af979b95643ce2d10c81e13fb53630a27b86f49ffff001dd51ddf03","010000004ce4d545357d3b48a2c9ed9e4ba82c2b791e1707c7d88b7f9b19205a00000000d41aa062190b9a3109113a05cd5c1b9b30282e7bd8678310566089e6a653299f23bb6f49ffff001d2e0f5282","01000000178e5c143db1ffbcf4acbf01bd19025898e9836ff14ad36a0fcb29eb00000000456329d621ba178e68a51fad817a6ccc540ffc3a9f0790db133fc5824656593558bf6f49ffff001d0832d1a0","010000001fb23cff4e741fbedbf2d6003a0a8b58867a54301b360990c11b0f8b00000000e6250f53b25b2e421def717ebf3709c86e05c918ab2d3aa83a4ad0e5a7a25021c1c16f49ffff001d220ec818","010000007cb08ac92bbc508495235e56412dcc876f7c03c56b408675b33a913300000000c13d21cc3eea01883f5c1525d8d6f14fb136b41fa33f4a9f7864ab7547b94ca216c46f49ffff001d01ec7be0","010000005e75fb7b1b7ce661711feb2c80043410a498d15a4b3b7c9a5219eeb100000000b66ce57db6ec6c148fe9622b6f8857b00fa7a33a063d4f56b1393b5e972e08cb45c76f49ffff001d01af5898","01000000cb7d046be02d039fa0523bfdeacf94aba33b8a2fc21d2c0365d9c11900000000ac0989be50e5596dfd676fe93f36c8e917977781937e563c453c9d6ed046e80a44ca6f49ffff001d139118ac","01000000cc5b332b47bd99c58cd1b1d0801a6ef04ca499bb77ebd28978b5e91000000000dcbcef96178496fc80d1c206d349cbc0c539daebcb75f4946ae6a29dc044e18c1cce6f49ffff001d083b5772","01000000d8f5f70be4833538a6e0cd361ea01666026cd315b94ea60bd2df39f100000000cd2d2f986012f91e346e028b319ac5c10eb78fd299a038368a6f9df3e01107b1e7cf6f49ffff001d313bf3e5","010000000b93c0ba4b9df0f87b86046018deb95b01899e09764e744f79f133dc00000000d9afbc89a74d80ec2bf8275b91d93872e58247559df651bc5ecac0c05be2eda0d9d16f49ffff001d305ce886","010000008b8df56fa2d38e3f50412a638d76fbc8818722abcbcffa1c620eed6d00000000249ff67a2f10319f7c76fd664632beedab5534c9e5430377e43b0136733994811fd36f49ffff001d10035b06","0100000020f0beee15b548ba55f0a1015cb701aeb8dd2dca5b73a5ffc3cb8fb90000000012f934c2752047af803c78a29909303281fd8897599b09842be29bc3564054a370d46f49ffff001d30400f69","010000008d7a90b9223274b8055969dc758a82d246b0d5c88bd7121902f3892600000000d863964f3a15f062ac9255a599e4c683ac6c1709ec5366e3e6fb99059ddd0bc159d66f49ffff001d31b6a769","01000000a19d6e6b24aad18aac20d169635377806aecb6d976fbf756b204744100000000057b51f5a945f575c8c90746c9f817574da5ef409b3ed69edea993069096cb0344d86f49ffff001d21d20c54","01000000de972a0426702ef84eed4cf7fea653577d9ad6e4b5fa8c656a0f2b29000000006f72f49e5ed8914d6da2f9d8aba62ffaf1b59c1e84627234882d16e4cf11cee2e8dc6f49ffff001d08080afa","0100000026d6db032d4ec15ed0a64c03e65f9af37144b74a754a11594351f955000000007bc5491d12521e078d041e5cbc9680b78dcf6d5356f31f2679a13df7b59561ea1ae06f49ffff001d13b5c8c6","010000001daff30eb6797933828ba22ac496c74c21c283c59986bb55e32799a900000000ad4796da2a3602baf21e59dbe5a24e406258f7025e6ce352d52e4480dd36b48143e36f49ffff001d24bb3a66","01000000d7718bd8e9cfd002ed6af7f343dae93192ba59799840f11c0fcaebd3000000006c748ddf3860c055bb80fab34f3a8848eb1e872267400102a385d9a083178b9d06e76f49ffff001d1eb91708","01000000e554d0b02e41dd3dd9915fa50c6397f0aa7b3b70f5c12960ee035e2b00000000870ac336d46ef5da1837f54a71e5e31e893607e79530cc4ec71329e62b06013750e76f49ffff001d1c7111ad","01000000c70c578f49e2cfd132ba60c7f674e12b0ce2317a036a128d99d91b8e00000000dd7a26baea46a9f2161876092dc189e20f33d70ddf5866b6b8be6b36f3a5497fe0e86f49ffff001d18d439a2","0100000097251232efe4dbd9368011efb6b37760b015a5a648f90403ac79365600000000778b578195a4bbfffc94eff95007b64e0d437aa268d5f9bed6aadabbf8a7895851ec6f49ffff001d1d2ff090","01000000346553ae03686300deab3fa8de64647c7f05c2ba6b6ab3ad1b4477f900000000e968058c0714af4b29b5da565928387cc6665edbf27eb93250ed020acb21b0fc9ded6f49ffff001d22086b01","0100000033d822e0273edf8f5d2ccd95e69b7c8f65df4aa047d561ebdb5b0b180000000068c6c8bb54a84a670753d747e5dd546f5d13c285f54e5767510201b4eab88a3b6cf06f49ffff001d1f0b133f","01000000764a4a31ccb927f449a36fc2e663ce599e5c62e105f93d7e477a5f910000000095838ba5ed604ca42e9a5fdf8431ae6c1b23c868237b60dcfd19f037d1dd483f57f46f49ffff001d075f4d97","01000000c3ae132f1d8d9138a2e7d84b0aa21b6331f822fe8c5274a9b7449c21000000006483bdfaad1dacb792a8c94ed22ccb1ce6b66b3d5f0d876fa7ed9e3f450a0447a5f46f49ffff001d1ad1cc00","01000000b383250a718d91b6322ea2ab426a00b52ec6fc93076785240f24ad6a00000000e3dd96504183610bf21cbf6778c0b526777a26ffe5aa16ac3393bb8da79dd0c7a3f56f49ffff001d139d4049","01000000d324a6a9bc3d4b2c7ddfdc2d2e28c80c4f710899be441f7a241e07de000000007f40791b631af689efcfc5bea9bdc3533baf15ca8d311c744ff112c002a91ef3b1f76f49ffff001d01f46c67","0100000097244ab525b397807caf32d0d985c40be19d35c063330e9cf74466ef00000000c3df4468e0bb897e88693c77b1a76a25b4cf8c476647b5810dd4c0f185e364df60fa6f49ffff001d37a94893","0100000063dab835951b69582fd992f276c4a8898b5ec33c8104d2489d9a32670000000063bd4a1324cf69889506a93556fd8284c64ea40df57fb5c3feac8435be5a75966f007049ffff001d1406f893","01000000a4d86eea180ddd407903422a3546a60dabbf85ddc258e6644eb007ae0000000070d4220230989014d0e446341862db39b033b0c12d58d7d0ebae1da3533871d48d047049ffff001d37fa5b6e","010000004443510a75b95fe93e5af4bfda453088a733c5feb1cb7a9285058b1500000000df465d83d7c0cbc2d8d4585f6b18e894cff2c5c7bdf02448b8151ccbe9c00e193c067049ffff001d234607c7","010000002672270891978e3379f1ad64ad1251f65f01f64b7927aa54b9df4a3100000000bed22337730004e9b21eb7e196cddbe1841155f20b1daa8be254d85b19e233d77a067049ffff001d4f57a200","010000000051d9f21942ef0cc1d1fa788837aca2b24bc475a6a3f3eded92328b000000006339e4dc58958b60d0672f78250a06d2ed8fd738c05e62e73e66c5f5cf6323a3bc087049ffff001dad52b908","01000000f9f439cd7f25a48d2d6b19fd04d67fae80e475e70e817ff2763c5bfc00000000b0c31dc07f9109d90181966fbfbc331a0ca13876b04b5de537c826cd7d0cfdf0ee0a7049ffff001d39ce1622","01000000be1f71e6d738dadcc69a77b910a45b12aa59701869fe4c491d6a362c00000000f980f3c8ece7e29fc09ea95ad2ccf09951bad9fb446f58791b5cafaee7921d5ce30e7049ffff001d27306673","01000000eb3b1577fd29565b46f7c113f432d65a86e3aa9a99973a9905f5ca49000000007549958429a8a082471318aeda3a47ce964e5382cc784dfa68c1ff2480e9151486127049ffff001d2ebf20a0","010000009fac95ae628e1403269f0ce422f3fbaf402c36ac4cd11f1b9bc4f762000000004709d2a404281a357100dd2bb80d9a052dc2b92e0cc5a805fc0fbcac88b342723d197049ffff001d2fcdcb33","01000000fc511224678e1e34eef623e652bd0b57c6c49c84d8bc7e3d90777fbb000000001fe616f88196d06ec97e7608f7990092aa01233c43c25bec3f575e2e66c40b30561e7049ffff001d3549808f","01000000f11a4ac759eabcd40a6eb00801083e08bcccbf1c6a54ce9834aa489e000000007737ce3d46e5ab9076c26485c142883eb78f663167e3a237d51af0a94cee347bc7227049ffff001d35c82332","01000000b43471ffbe02fd4196feb6764e7a6e9f948fb456ef53ecfc9deb0c5d00000000329368102905033ac4f121acd9792290ec259258bf48f495768d4c87fe615c97c8247049ffff001d6db8dc08","01000000f6971a59fc6c3aea99f1d26bff4ac99da9782be1d00772da0ee802ea000000009ca2cb8635c70db5e4fea24652ecd16e5078f8167a7052ffacc947b182ef0db14b287049ffff001d39a42d67","0100000006df0c9d7efdce977e97c4b79d5fda6934ef7cf9d4201c7ddb8227c1000000003ff4710181b301afa77c08aa6389f0e91ab81075baee78b15e342209da997fdcf72c7049ffff001d341ece14","01000000922b1ac84e08576c25c49798e174fbef0f1b32e4503591e5c860c2c100000000ac3c873da47c3444690096ca4c52b93fc4cec3b9bae12b82dda460f9cda5b5163c327049ffff001d33eb4098","01000000581c7d49a69852cd4cf205e2c3451af2c042d3e1818602e63143a23e000000004f03fc82dedd2da9877be64ee2f1630f29183f4276c0ac1c499b414b52f99c074f357049ffff001d1696dc83","0100000059c7b93e30d39af6758025f7985ef0a0ea595da17400328c555a1fff00000000afb4a2e1f9ffe918091cab0912677bea63140e7a7afc69ef5da23ac472865409c0387049ffff001d263bbd96","010000005aeb6134f1537285acb00242f2862b3b06db6143faca1ef6aea68b03000000006e02a9b1a9bf4dc6023ea84c355c3d9fedc6536df708c1de81c51737a348ef7f413c7049ffff001d13ba65b0","01000000164c5e1efce9b1ce83ad6ebfee205753bf61d236e211c0e335f24c14000000003b50e386ac7dcd7b5eff8c376309ef0f62168b5e4b724d297941838d18ee2ef7ea3d7049ffff001d223f4b21","010000001c184e3f3ed1ef349faa1ff5471c577cf3667cdd79ed6e2d33f743190000000065d84844ca1628130eafe1eafd22669cc1ace6a8e6dd18698e80578e98eb310d59407049ffff001d00d77ef0","010000008057ed0b626736475cf8a08867ba09524251ffd481c13b06851a3c8c000000003dec42720a15c670a97a60b5c94b079f219f46376b2736ebe8efa37d2537523bcb437049ffff001d0447a8ac","010000008bc0d40e157bb30d0fb1317a4490761a93ebc3d657b0bfbe6204d0d3000000009cec59468994fa8f42700bbd88e904011a6aada79cd33cf418a0762337fbe340c6487049ffff001d1b490791","0100000030744a9fd3673963a83ffab4b61e50c018e3df9c22751a93f6c1eccd000000001692fc311b3f15bb29e77bc19f3e79d132d2fb8e16e01f0af1b7548212c64768754e7049ffff001d03e9c59d","01000000dd41c3b0350586390379e8b76b5e276140ad22ee1e954ce5ff70e5cf00000000bc3634eff37ec10353fd1cf682210b326fdb4fa77c0a5f352952d017944c5baf114f7049ffff001d6ef47701","0100000003f4e13fceb2e745d24779a375bb45aa08eaac1300e26ee7aa26b07300000000246d5e4d8716088fdc86b7b6b2d71d81c77a8ff797cafda0f65e499e8e7db9ce19547049ffff001d3335ecb3","01000000942b43f0546ed817c6af7e25be4458090bcdd45fed73eee6161fac7000000000900848f8338233d538498138bc2d3097f698071eddc0c227a77aa7710a9fdac252547049ffff001d8d4e5e00","010000002018595ea8d5a437abe7bc89b677f72ffae94b19e3dc01daeaf6a56b00000000cd842184febd96b412a222730f754694209a459807af8970ac19c2db0b803000f2557049ffff001d358ab9c9","010000001e1b079a0c02ca9f25edb9034c6dace85d25f99cad5245749ee1a5ff00000000f28b1b8ff3d3d90a802346617c4ffbac6f5ddef90db5818964c10131a8a3fa53ae587049ffff001d3329f339","0100000052a45f371dfd92e1004b10070cbd11c9fdb1e5324c62ee753bff514f00000000e915542049b4820ed7c7d212952c4d8b2b32c21806e63344ea32ee00488b8bb1aa5b7049ffff001d223a414b","010000003c7003e980d0dd3fb91b5938327dd2831e490ca91cbdb43285d92fa3000000005e9db80f10518390873f4bb923bb70333229d92e3ba80651ef0fbc4414b54f5fc35d7049ffff001d1d2081a0","01000000b71ac3421b039e20c5a20542ae28130e6a9eb513f8d7ba26b60d447400000000c19bae77addeece64c8abb4da3badf5713939b4370a89e8264f4a90dde079b3e54627049ffff001d187023ce","01000000a870e029faef10e9a5288f385c78f7367639f3c0df8208854ea2464d000000008a1637b41db60935138f46ffda290e183369fa30d7e54d0486a9cd50c5e4d16298677049ffff001d0535bdce","0100000038af978e80184fbfefe5bb06d04433d7efcf8ee87e4c89187253815a000000001b80e6a1b0afb967bc80fdf36c816e29186ffb03b6a656079f4a01a34017b79a366a7049ffff001d1c45ee18","01000000234e6ea4d74326a011d7673636959962b5697cb7790ddc8f366e5fdd000000005b5b69b6bee3878824f3a30e0c3be0cd1ab184a84087e6ae9ddf53c412e09aa2196d7049ffff001d383a7d22","010000002cc0ce750d175367b6982103e44af24a3f0aa8671d87c4c654fb15680000000040aa53abaceeed34dcb72852036261ae9b6ea21e1fef498d2b5abb6a47e034bd82727049ffff001d071d76c3","01000000a6ad2790593f3aed0be6e09eb5efb6b2d3b59291939337a700f18e430000000068e85d8ed3c89dd94475b764911b780da781ea0a6f25fe49cd93aab8b7d8371818777049ffff001d2a6ef19e","01000000dfa1c821b02c16e033a68a3f2ffa22b35660ee7dd360cb520605f4a30000000056571b0714c029143e573444ae7e55dfa2eb943c960067abb51306663c0547d325797049ffff001d260908ae","010000004c908a440f30e6208bced40d5bc06fc8d381680b743f22018f73108000000000ede58002ccb36dbf1443877f34b16f57a75bb0f253e2861cc9f7b59ecc4177e4207a7049ffff001dc4945802","01000000f2901e924e05c7e7c72eb49971a9fb77f8b3ad2b4293ed2294c3a0830000000019eb06fe415b65f086053a1aa5ee50aad89fe05c39838b5f6ee6d8eec43d5717907c7049ffff001d162d66db","01000000c1d93cfd8fd7bfe334ec3449d8f1efd20a43a2637ac88183c173d984000000001cdac550fa16aebe0c1112651b50f9df1798950079bc898044369ff0caa9500228817049ffff001d178b1527","01000000d5069cbae4a920de882897bdb7d9bc68eaf49fb77a31df94d8a685910000000019dad51703e7a436e3dc3b942e32f137e78dcb07ff1150990fc392af96a7b965f9817049ffff001d022eec01","0100000071507e837ad9712c986ff9b49a8c83458c281d969ecc39baebc31e8700000000fa29b280219cce9748ce2f86c3eb6ef3d341ce08336623329da5f76551883d63c8827049ffff001d151d738d","010000009344dcb6c74a8587e58c37afa7b9956660c8aed8866759b520c3684b0000000030d3effebacbd05ef6203ae9cefe1cc8be7a785777be14ebe73c757d065103d730867049ffff001d1c53d4cb","010000009cbef768da8cf2733633d3654c9a79ae63d632b10c820ddf5aa8b1b000000000f04cef396a112f1b84612b9bfcb7ac10eea4a16a1cef77ed7b9ad96bd4b4e181a4887049ffff001d374d761f","01000000fed4e904686b9071603d809d0588414a1d48992da4f96555b143be4e00000000da6cc974a87701fa5a58cb4c23dda3047ebc671ee485aa92868f18119b311814b68b7049ffff001d0246033b","010000001a4b089c8e8c16f899b84faa077075679130321b0031ed6bb709676f00000000d9b12f1498a431e8366ae070635a6470c3c5014bf7d94b7a2559b670ca0aef56f2907049ffff001dd6a27200","0100000074a43ff274a83d00f5d18588e68115338e32a96421d8728b7b7f9cbf00000000db7e4f909a3fa133ebb0e8115846e07327408c4d82fa9042cf8fa2bc1bdc473e75917049ffff001d030efab2","0100000086673e47abf882a97cd0e867b68c701995db441b1fc4ef0d6cfff0e400000000c6a4e23bb0e680c029e17ebbc47f49c72ae02843dfe4ac04338555614d1f6dbf10967049ffff001d3566fbf8","0100000066d0e3ac0ff38f4f3f318021305050a6a358faaa7c2df40189d7b560000000003f695d04c7819381e1d5226159fc8ffe59e974d19c82ee5a145fab18febf843df79b7049ffff001d15df7070","010000004586207df119c350e355476ffb26dd931d8d16582b46d62d70b11f790000000017280571e23c14231d14b95f67b812657d86af064fab68c0ad8f33ed0660d602a3a17049ffff001d01c90123","0100000038b8b456eff0972a9f3816821b9f906f99357b540641a08c932ad202000000003652e54b37a139bfbd120729c4cfc9418d3a2732c08db84503bb7c9c3b43463df6a57049ffff001d22ce49a1","0100000068266b953fe2380309677c998f37080c94e57ce70c5d928cce32ed1e00000000e8d397307d39807b38c158db17f54b09aefa51272477b3afb439f787297c68182da67049ffff001ddba5f200","0100000050bc5985f1340c37fef0b0ba0478a94bdef84d75137e27f5a30a211b00000000f41f64a10612631d6e8196ac56e575106485a433beaae980f2c51688dd2d36cb6da87049ffff001d188ac899","01000000fab96833e9962af46fcfb05c3d3ca3e3f81bea70db7b712218fe0eb60000000020953f049e15705bfa9cdcc8b2dddceea45e3948c364b79a19a9eb60879bac0977ac7049ffff001d2a0a417c","01000000d6c768bdcd6456800e6aef862fa51ce60bb14c3a492d9a5c74f79fc9000000002c4183d01521413108672652f7595f3ca2d96a92f60d350959bb584cf12ea8ea31b17049ffff001d19075dd5","01000000de3377fe957d04dba77c6d0518d62cd30aa1ad93888819d7116c4802000000000e5815b93471e174832691de817ad6e44bd6b7c8abac96e1bb1e89241eab8f9770b37049ffff001d2192f967","01000000f188d2bfc712a4bc23e476abf6b355398a340cd020d2c94beb7492cf0000000094ca7b50b97ca6a5169c51e0f1cea9142dd551124bf137bb565b81b82d45c84a04b97049ffff001d396a93a5","0100000079bcdb288ca9bf71930463dc7fc50571e94c668b42dd9cd783f0920900000000c98e2e2b091aa7bbc2cd139cf24aacfa2392814f14efb051d7ff792338bd0e67f8bd7049ffff001d040a1cd2","01000000f06d21fc226cecc012f709ada08c618c8e27d04ff80c4d295980fd9000000000ea43df68eddf12989cbe851ec3b1b516fab88dc7eacfa8c81ebb59786826572ac1be7049ffff001d1f17fc01","010000002ebcf8d87120c62d32d720a0f4e2fdc4ce480e8adb45d61e127c65a60000000006b33a5f7ccf9804fab556ebef7fec0aa5ef5e56c85f1bd5d76ef7e613634d3a76c17049ffff001d2e150ea4","010000005aae679a4e8d790d3c6d884e58c204b4d98835ff11ea42fe8d17435400000000c612edca4936377f30f65f457d40bbccedc55bf1d7cd4cf21ebe0747e717e0171ac57049ffff001d38a68b93","0100000099c8e72f6e998230e2e7893547a2cc87391a5b14050fc41ceeb4330000000000e8b4dab01be9945656e1ef47ba5ca9fcae53431623bfd123f19b31747efe36a0cdca7049ffff001d18515b25","01000000ee5533576f51881c58bfdc5cfc43809665f391c93f26ea3b8aee5204000000002196bd3cf3566f1c2af42f6652bb5072094bd3c68c1ebf41dc8b9e8b72eff9da42ce7049ffff001d2e927e30","010000004ad1e933bee6bab03c2cb890a7d08aa6161b901b9a43a4beb33cfe5300000000821016fc5d44f7362e0b88ac35573a60e0f151f782b0bfe3eebbe2df4be14e63d9d37049ffff001d02a6115c","01000000eae4c26cc3413ed83a843c6ad6e63ee03edfa4177feab10a1780c689000000000c9bb2ac60bc518c0e239d5af9d8d051a6bdfd0d931268dca70c59e5992d0f579ad87049ffff001d46c0dc05","0100000079729aef9d705650cdb1b71fe89899f44e709e464e0524543c49f3db000000001d99b4a03448db0a40ee45615642ca9fd5bb9ef005e256a68dc134089692b968a3d97049ffff001d060090f1","01000000f7f5ece6ea082b189321daa86e116e7ff7a1ae5946f19c12abb67e1c0000000061b975695fb120cd1073e8fee0654124811b3b2f743d5ea77c167c6970d77f1f8bdd7049ffff001d7436ab05","010000007aed7ec624dc306bc422a77ce027bdba99664d00ad518967972e4fd10000000093c729f13180b4ca122cb88c0b53c0c523018b3512209f5eb5db996025ecda57b6dd7049ffff001d2658867e","01000000bf2f67b7880e7ec8207d9be71390f76cdb05eda3fb3ff06d3a758fce00000000ae2ccb4169d07779cffd06aea940f6bb17a5895cd33a3ab331e117cfd1ac2e3131e17049ffff001d1616080b","01000000bd526ebe388900031a0764fbca83f305864ce8b6b798c63e6981737800000000ebaf5c2201b757b79bd7b584c4f552646708ba73f2388012eb67e6945c17b518f9e27049ffff001d2c6b7ba1","01000000a62729c0607281abb6e94afe0d23683a1d6bd7f79d95b96d6682d319000000000f5de1403b52e5b4e92770f73078f2784bde59119b60ebef64c2d67b9b5326ec21e77049ffff001d1af460ec","0100000007beaa3fc1534184e83075f8bec9cd553965dbb29fc3e4f06671d4dd000000005ee106b85628b2624419c80a9c3baf53aae9934fa59a9a576e41c5dd54e7d72b63e97049ffff001d2f03608d","0100000005a51220d53ebdbe88ed91f5f908628e4415b39088694b1d07ca923700000000791e7487d2c1df02b91750aaefe03a074da2786d5045fef135dc0681ea721387e4ec7049ffff001d20310b84","010000006ce2f8fabf1c156f23af23f97aa68af6c7fecd6fdec981565adc657f000000003bbbb29cadbc7e129af5786a69f172fdd391dc96e143552dfe19e2d71bb4b2b732f17049ffff001d2030deb2","010000001a495a969e4f3681e37d194e8b56ad5e17714e9add1a7994d82e135e0000000078ba11d070e3c92aea4942e517909e48bb3c37591cad5ce996ff02fdce33966dc4f37049ffff001d29ea004c","010000005c034bd112d572b31d5e87d5a94cdfb3bd61ad3e8e100031666a5d30000000004cf550cb2129896c443121f8ad3c8779cd96901c2ea26a3c4b45368c955f644ccff57049ffff001d272523ac","01000000187912b3e70b15eaa13586e4ceb91d41650fb3e0500a8c220993f0da00000000b88f3d962cbf9697fdea884e5c162e33e52333c0d01981df6ed84662f58fa5244ef87049ffff001d2be1fb15","01000000fccec8a6059fee4fe7605466a1dea671939d9be6d1d88222cebac20e000000007f15fdaea53b898d2baf047790a35e788538867106e4ef59e02f6960c465c406fefa7049ffff001dd618fb03","01000000c4769baea84d5f280a168331b8b21dfe84345b566d1895ba0272e4f70000000034d5a19430bd5436e96ed46c7a6758c59dba8a386ce23c6fe5ebea08baefa9bb88fe7049ffff001dd890f810","010000007d8dac2bd5ffb264b7052665d6ce493908287230d865661c876090c300000000201729fa0092341bd1cb0a5ee82925c4aac792b933745e35ac56439568855da027ff7049ffff001d1df2acdf","0100000038f0c67ee57c472893b89e7b1599f0d5b1d99249f82a80f945c0866e00000000b6c4d9ca41d1f212150653e9ee448a83835961313a948670700fc48a4d1c94c0cc037149ffff001d37363a20","0100000033753ada15b40ef849910ec41b8f478fcd51f4493563922f86d47a7200000000a877dfbb53bb0f5a7a18a1311c36479007a743085244f3be23bc2a03a66f9104370a7149ffff001d1e6193af","01000000aaab7768c8be8b98c24f94b050130703a9ce992cddad41c0ae19127300000000a9402d0eed9c468b2aebbf367bbfcb7ad47cd33a8716449c491a90948707e3471c107149ffff001d3983703d","01000000206602ab55db6253efe32272455f3cb556421795905a5e7f58169834000000002cd2d87fb04a59803575689bf4f9f1faca85ddb74f053adcfe1c1148d6f46a0c41137149ffff001d1e2b9695","01000000ff3a5a165c4a4904d16bd94db6b3c46bd24b9fa7b43896431cc731bb000000004c5f4a9e51bb9689a1616f894d13c04b0139e34bc6f3d19544cbc6802340ec712c197149ffff001d16bebba0","01000000806a77c5a4797c1aa51f13abc5d7203caa9e552275d7a187f9fe4ff70000000001c53b92ff4a78526b404098dce1dd36deda8dcb42380840f34abf63880bb4ee191e7149ffff001d1e732315","01000000cb614505db43e44b4b0e11230529031e87ba35645f2902a2885fae6c00000000220eec8f12c58cfc3acca3ebdb7783e73125fbc9b49e008bffa7cfd78953ef7c561e7149ffff001d32731600","010000006ce9b6112ea41650452dfc997bc2a76f532c92ed377f04b5cd0f7a410000000039c23ef6f337aaf07dc59fe00993d14a40dc79870b4e3e9184ec67c99d8f678d6a227149ffff001d056e1f73","01000000cec0dff7452c5657d0c7ac78d1af3a0d6c0c4aa0b0710892c6bab7f600000000c9d1d0778524ccfc3bc4493c33dcda49ec3892ef43e66860e5dfef50e86ea03e17277149ffff001d150eefcf","0100000025253a1d72b6117c0df88b767df52c3c147660fd012c1b1ca77481ad00000000d4700b5a70b36a0c0fe769f6dc7b0d76c679eb89fea44c1775a554bcaa78da9d4e297149ffff001d0758ede3","0100000025b466a83fc19ee7a3e03423635d263e8d97720e47798b765ac4704600000000fab15c48f9eb6dd53d316b380a7fef454d24b3412d44d0693827da1bbdd1b952892a7149ffff001de78f3203","0100000034e907c015b2e97a682045b00061ec0258be4fcaabf4593b0231f6d900000000d4d7404ab9b78b6967bd7ed777ae5ed39b09ecfc3e1ae04b4439d068ef9dd3e2082d7149ffff001d21fb3a38","0100000089950ab12671eadfd3f9ed67779615f3c3d2e43f11126fc1cba3a31700000000fce82a49bca077e8270e4b82c6cfe7f5077c4135ade7d98d1ffd0430b303e40d0a307149ffff001d35e7c18f","0100000084a46bf1ef8be7ba842d5fd9dc76dc24c44f1025129465571a86977a00000000f5cf95169a9139a774e284909445e78562cb1c2bdbf53240899eb6c837ab5bd547347149ffff001d22536f5f","010000008cc28b7a115b2a9e96bbdcbb9efdc30c0e2e1c36b96e51b305482f23000000004fda5abce224a009e8a1eae6c4e5c5c327ea6c16da6f0cf4a668d882942c5bf47b377149ffff001d00838798","010000005781153047cb34f6d87a251136f16c016b5d952ec2851adf4da8c62400000000d8c13ecbe2d387ec891beeb339b3a4d90d282a1afc342fc4b1567c435b89e52043387149ffff001d4b1bfd02","01000000d22298a96f021f26bb1195581b13a964352de44e553453b0ac21dc85000000002afd58c3eb12d08e344bb3e1fe91fc326a0ff3f09f2c39b77677e423a698e09c253a7149ffff001d1a00ad57","010000008eae0e160a5abfc0e3f8c4ab6cbbc50f04cbb66b19fae760e3859d24000000002baed3adfbda2ddc9cb83263d32ba7776278433312cbc3647fc1877cf08092a1da3d7149ffff001d00b3070b","01000000178ae443c136ce6e7fd5b403410d5551d11d26437a874fac6bdaf0ea00000000a8b6a41da8a68f2c1bc29958cea575e6027d76232fd80c7ab33fa2366c9ffdb078407149ffff001d43eb030b","010000006b8a3a7ab2b480dddf246792fb05ecf989a727967a38091ec0582c0a000000003e23f93be1c7941d27982d831d44bbe9ec7db06f173feeeb2483d2377220e8abcd427149ffff001d35f4bbf4","0100000064658f8499f9bb0b28e67931020fa14929f5750086c9e4c0b62a62ad00000000cb6ae5aea07b953a3e19e82d7c713a9f42c5156d71b6995689a20bafe1b78bdcba477149ffff001d2c67944a","01000000ac9a12684d7983d2d7c21049bf5e6d69210a3ef8d2a7e9147259abd5000000004eaf0680ac8ccb158c44c18a147099374577c98d8e3e40a3f4ac7a45c4531fa2d04b7149ffff001d26b4a6ed","01000000be3a0adaf6ae89da7acd6580a60286088b4b00e7a63e34375b32e8970000000092d92b5271aadcb4a5f237438bbd6af081209581514a5af8b1a33702ee86b0fde44d7149ffff001d32feb9f7","01000000efaa888394aee8af4e95837be3907ac01a12c20cdcc1d611b8bd2727000000008dd2e9590d2dd2fa658641892b996a3edebdf78a1b2e805e634ee1a15df9ae865e517149ffff001d35fc56a2","01000000bf527d712164b36ae05b9f7e0526c6eb9164c81f1571895475f7c69d00000000218db8ebe99258a4a86a2fff390ba500b18878fd89c72f439ab5c06ae746393e92557149ffff001d063a19b0","01000000cd1a0c6f0134ffb841670bee2f0d695dea15d995abfce580c627959200000000f225765101a861342150e2ea19706f51cda1a39a56876f9cb431d6eabe8181a5b7557149ffff001d10ca6100","010000008ec993c58338db70d43519c3c47fca3f3bda167d6a04fb0c5b87a52b00000000de7025f89aced8a61b9ca8f096c8a76a4a55505dfa37f12c51f2e34ddb2569bd2d5b7149ffff001d1bb2152f","01000000486e07b5e1b2df8fbf66d575a4fd6406510f9388228c35f998d9f80a000000000d51b2fb612b221e2b6477e97ab72c7d30c36b2a40f69754ccbab4b5af5aa70a41607149ffff001d05d5b67f","01000000b27848c99c3308f71550987f2a1415312c63e322955cf365977cae140000000016b848c52cbc3038c66f8f74ecb26518bb2120f5ee4e031d725f27e7b54539c2cc647149ffff001d2f444134","0100000048bad43752423d5c2c5d8f359e23392e06d1959e13c5df4dcdd91a6400000000fc801614e9d18ce2b2d2cf9246f257fd87bf0360b306bd9743644d4154f8c08441667149ffff001d3775c070","01000000702d99d9f4ad3a84d2b908ec5c3fe7f5a0bcaa7c73937a27e96a84c600000000f678f47f9c11a31941cb1cd8405f11d52878089d459bd0c250dee69dc440f443bc667149ffff001d49d0a800","01000000ce0948a36a5caba0785438213ecf3db1dbd5732967fefe1791b332a300000000661b0c8f4dc446c831de3f0b07e65b2809b15c26754798d461255fd6f72fa5c557697149ffff001d3adfb109","0100000063019c9b89c8a1233931fc8353d558661af684b1c987fb1b52f33e4d000000000960126e72b29048baffbbc78bde6f50880c2e804a4b3717a2fc3e548ac22d79e06a7149ffff001d276e000e","01000000299806f5421bbe3fd77be9354cbfd1b7cd0c68326d8c050bef8b858f000000003988914254b6a0fc67f3a7f072158ff82ca5c8d25d3100996f1e4f16ff3c0d3334707149ffff001d15ecb070","010000008d4619dd6baf5352e11e2ff73be2dd08030290c446f5b000b73944280000000005d226774d6eb08e4da3041386e07b960e9bc77a468b29ecb7b0a0f7efe070e759737149ffff001d2e8859df","010000006ebf6bff9130c836127730f4d9c790e8808afda16e36975429dc3da0000000004f66d5ebb2348d22919f6551d7f5a1f3476309b636b7a5113202484a1e21786aac737149ffff001da384a400","010000001b799e67f277cdd6bc5c196910db1a9f24abdec547cd7fb7e162d90e00000000553c01aa29fb07cec84a2296597a52c8eb6fb4a0e4db52227465e014267a1798f7757149ffff001d04dcd862","01000000517c3c9be2f5a6c22eca4d8886eba5a631d1548a0423c144b5b10705000000006a604212859305cfdd13bab294def57dd6146ddd445ae7355b15c74e9cae1343ad7a7149ffff001d33d996a6","0100000030426cd26eec1d1cf9203e5cb179accdfbceb6a5d159ffe57359708800000000dd65651f22229d9adb04a9cc22df130efad10fb86c84314a7fdd8d82b9847dcc747f7149ffff001d3744b953","01000000e6978ae28d5bc91c0959a7eb00d9ffdb337723664d4c891b476d67ba00000000966d03bba806ad7fe8833d1a2dfb53d478cefa2bcdd57d9547523a577d0f0eb3cf827149ffff001d20d0303f","01000000ddb1b09068da9d018e8392727a4ae6ba4455c0b21d542e2e0d8a634700000000eda5cabd1697404e802311048def56e91dcefaf286dce7b4a493ef1e22fe43afc4877149ffff001d89d5500d","0100000088a06644c2502dc23158dcd5b88cdb11b7596cf9956f9afa25907b8500000000e28c7f4ddadb1c7bc12d1aa095d25be0e8f3e6b9ed2547ff9b9383f3494fe334d4887149ffff001d18650705","01000000556ae96b6cfe732b81b36430b724adc7ea8cb2eaa1dffb3d3fc9ee5c00000000a72f63916c53ef800a2cd5a2a20eadb515669caea50f53d79022336a127a0d473b8f7149ffff001d2e6acd24","01000000b32e2a2e103b0f6447c6c6f95220aed55b0ad853a3a639549722fc2d00000000e0ec4937b3c81b5e839e589c659d060ef4b79ed4bbd9f17f0d36e191229e4baf3a947149ffff001d24f99211","01000000b7545546c9605589d03dfae40f3d47e7fb605bce793b952f0cc8fee500000000ac94618e248c779ffc95e9785e274d31991eb02d1486c77a96438fd407e35f0bcc947149ffff001dd3886301","0100000010f1cabf881f2b54f6c52c2a3089d685f70c020f4d55f427f791dff600000000a07dc2c1a30b72d2e0a7aa4f59ae20afba04945c5ca69a6c2a27bf66052568ca8f967149ffff001dd1245c08","01000000ba12ee3a6cd1292d2c384cc206118029ea98682ee6da415ce80eafcb00000000f65110f216b877e66432822db37ca6bd6fd85cfbda674d52aa7ed8d128c1b0f1a0967149ffff001d713d4c00","01000000f764d8e547d94df85d9f7cc049c1e38010f7e6bca262ad18cbe8616300000000f383a36474ccaf03de087114e11327c6c4eadbd616efaf4c82c1a2e5a73ea58b56987149ffff001d32c2771d","0100000025c5ab8bfd1b7335bb83e164bd934bb58b5e4eb60ebc44fe5427da6000000000c7de9b16aa5fbd600145e78e8f5f8b5333171cc2110889417a589df72744a8a1439b7149ffff001d36d05837","01000000837fb462e52ae771ebb56ab69675ad463a9b2fc2bed48a35f34ec77d000000000c1d48212852555b68f73feaa3ce720aac5512b6c081dfd8c7252d025598151153a17149ffff001d26a77a6d","010000004236431ff59ebbd5582b9963f9dd0837af3a7f6bb8934aff786a5fc700000000b9e9a26d9812850c7894a09732765e1f8eadc5933b6f5b631ad5bb3fdd81141e76a67149ffff001d260d3334","0100000011121c5f0ed828947afede92c4bf30a9b4e455c88e2464162ac917be0000000009aa7e45e56371d5602057f2b6fe86334174b20a7fb5cb93cbd9a4721704778fb6ab7149ffff001d2b35be54","01000000346aad4d44e1aa647d08c1b5d3e656afd7604aacad4978dbb6121d0e00000000997c98392dc3b85e06bf0edf15adaa2e3f41c39b901f740f98906ffb9e804c66e9b07149ffff001d010bacdd","01000000e23e02b780d571150636e030f3543ca0c1a5db543b9a464561ca706400000000af58dfbef24a13d8212919cad75b385746509ed657180c10c2c26ed8ab63d2e5a3b47149ffff001d151b1e0f","0100000089fc1077cd6ba1104d6b2fc80f421bb2ff55e280c7221ee6e1d6e6c800000000f12cb0e3d1b4f5e6607442e0cbedac8ce959c5aed2c3f23c42fcbaf2bc03756527b77149ffff001d1dbf6c67","010000000e0b749597811d1501129e20018c0d51d335e50fb03b8878c71fc4b500000000a492fecab122424442ab7b6e341b4aba7cea5db4c139257e32b58994d028acadebbc7149ffff001d36dc3a43","01000000ea3f98925502c9b7b1dd2d84381846d4df19249db986d7c0f235a2b000000000d825d82bc4f9000900345a0e9da116239fdc4bbf6797c4a78eb34b9d6d6ff4cdeac27149ffff001d082a7860","0100000024a09a14ee6d516eb1798ce9782a799f7a7f167c8af7418693f97554000000008abbe2eae39d45dcce350825ec9e563c05edb9d33290d1c00e01168135e7c5b68ac87149ffff001d300f7173","0100000088c8c20443868f0d41df0d2a83b8d28dddacc427cc6d454f1a25223b000000004844b0177b37ff2ea04949426816026ebabd437f0cdacb7e46590f408c0f345b91cc7149ffff001d0874cd77","010000005d9c4fc6d5b745df74270560f9f88259da9bc5e57472ea995854f8de000000005f640f5fad8ce049a1ff2c7f0e11fdb19de9bb12d583d5c2a6ea4f699893991b70cf7149ffff001d1bb8ba39","01000000ebc2427d7b62fdde622b68ea4e7cebf955e11248f20bfb7179d7570000000000eb28f222c0f51e172ab4c0f05a5c8fe09d4736b8ce9f9db1a1d7618ba4bb07410fd17149ffff001d1bf8f728","010000006e6020fa1d2b7d656a6dbeba666bbf1a072c276d57e197d3f7648f1e000000008a0d8b188e1c17f905fce04b632fdd86f291fe6b5d0910bc56cd5382325801a1e2d17149ffff001dfa390c02","01000000ae4ec0e37e77c93a886c73bc01f57a31ce626b77a1b026e3d4003d650000000060776eb5f8aa1d6526891139f89e824f99ff2c69cd0e84f3643957bc4bf277647ed27149ffff001d2319e092","010000008e7fa2f84ec06c12c771e3fd8c0b30adb6652cf52b33f2364b259ed3000000008ea4c98b0bd26d9603e6eae9e3569855b1f6eb2514ba4501fa1871adf48bf2381dd47149ffff001d34cd7f87","01000000344cecc2dff7824855974e7ee10e09fbaeb3feac363e3d5c1405643f000000002f35d255bcdf425a3b2034fa3aaad0e64e58ef3b313a89412b27a6c3f6c2a2848cd97149ffff001d1f5cacef","0100000089f20beecafbf475f1fae3fbeab2e690a37616aa4c7ed1264799769c00000000a7678d9bc21bfd381672e88e4ae09d6db8d707cd0c192ffd540cbcda552b276bfcdb7149ffff001d387010dd","01000000d895c1c6795887658fe59db735a8872e4531a75e56d7c9352b1b3b7900000000fadf0aa2526b277ab43525c3a26d989700a028f56cceff82872d8a6d6ca9fb071adf7149ffff001d0180ab52","01000000d237c3dd02c7351812f99465355431830841fc9e8ac9f5abffcd142400000000b7cfbe01e8668e53bea92da228971c451c13b7ef62b6b71fe576b2e21ddeb3e138e17149ffff001d92512008","010000009e7e5927281de4520a3f8343e07bf15a11f793dec97c3615d583026100000000c910441aab9435a3fb4aa19764af6abe2c37b429854c26fac744c1a57cdb9568c6e27149ffff001d36f9dd00","01000000607b282aaaa69d7334a1b0240c498ca08453bbadd2e2844ef0b420a100000000c566ae2df5099bfd5794001234f44de421f73991ca148317d8efbd72f3a927d0bce67149ffff001d4dca7713","010000000686bfee9832f9362b4ad92bdd40effc090fe35f4cd7c0d8fa13a13600000000bf62800d568d66c3fdefba6c9f78a16dfb08a5e2c28ee8e8a0dc86489434ad9c40e87149ffff001d2eb8c1ca","01000000ccb51b754ee6abee3510cbd713db869e467825cf75b5f6e367d139d10000000018afa0effeaae551c5e5fce87d3278b9e450f18024a56b5041b869693cc8fa5df9e87149ffff001d288de101","01000000951c2d71074e30651a453228a06528bec78cd902c0030e27763496a0000000009909aa39fb500d1d2f116720c0f4ae0a90f3c61585f83a89be8306195bb804172fec7149ffff001df7dad60b","01000000bac3a47d82304c2678edd527b50c8d00523ed1c081d56e1b8f0f8fbb000000003eddcdbb258d93a8914978b1c33445f625dff9ed03e7b982838485f9bfb403dc73ed7149ffff001d329d5504","0100000034519c8948d2448ab4e5227fe74c92ae0d817b7aeed259131dbe105300000000bfd87203a3115c9ed373a5cbadc463ae17fcef58e3c1e229fcbe76c8447b98a82ff37149ffff001d01d67975","010000008cb5b6226cbb308fa5694c316f589eff8a5052d608438ff67777b899000000000458485e43e998a8f9595a0efc598947a417447a1a65a5abe969906d524e8d8185f87149ffff001d37c0b0a5","010000001cb09cfdce9f2b758eb78d8a4e76a872a466b724650a61336264554a00000000fba164e2721ef2926640dc253a590705f4555c1ca7801f3e52a674b55dc2d8a583fa7149ffff001d39413681","010000006e58edb9c6f3f700b96264b1fda8040cde855c7e7aa3995e50b33ec4000000007b393a1e83ed0f1d69b6218c4a2c42a29f1c4bec97a56edcb953672bc8487b0e6efb7149ffff001d511b5a02","01000000ec127fcfe1686a627400cc51a6860622fb7d185317a084c729c2870b00000000012487c53c95ed0e5726067484fe1af8a6f7c127b1c5dda1e5bb713307ae9d74acff7149ffff001d37a079de","0100000009bfeeb9dbc9260551e455bb48272bfdda49a4e8737f3dc1e51f7d8800000000d451bbeff4bff57f8aacde07ac2d3c1f9cb14f0425ae0fa0971890e7bad2006771017249ffff001d32153401","01000000bc0b4d5ec9ca6bf6e9f751078772881eac887077abb25d168b0a1ee200000000e1a8497e7719710b43bb332b234db46cb4834c1fca6513bc10776eef7568148264027249ffff001d1445583c","010000009d959cf6de6e5f41bcf392ebdd47c8a534c67ee06e5390c9ba4b167300000000534b86bf6e966aae04f4a4d6c68f6e358f6e277516c6c6097af4ea7ef732e9e33c087249ffff001d3109d5ab","010000006d2985689f45e2853f2015a7688c1efcabea69d427d9facc4c4df9ed0000000097881d172211a3d6de472e5ef5cea174f45dfa98761411d603a37879f9397b4e2e0b7249ffff001d5da02b0a","010000006829b0219710c76a387d8bb8b683c7f9899b40d0f796bb058712fbea000000000eff957ba6c7cb0d8c3a3ffb64b43f0580cb50af3e86acb53de79093e5784cc95c0c7249ffff001d059df0cd","0100000091a770dd85ce80e7a45c456acbcacbc079786b7db35885cbc374c7da0000000025a20f445a930409521bd7760e8adc4de23b55dfa5390a254832033c3deb5012950e7249ffff001d2ff6c50d","010000003aa9fc1163bcad4858222e0ce6ffaeb0b6c790ee722feeeb728077850000000042795de0675f59fff42781c6684a086954febe4105928ea6e8e73dcbc3c3d6fd47127249ffff001d18506562","0100000010c18a00d57619f80b1f2423cef7c72d269061f9207ff1a30c4d0bc50000000068a002fee96158e2ce28bbd761b21b7e4cbd3a034deaa57c9ec6731b50e10dad25147249ffff001d89543b07","0100000026573debb4fca5314655ff8f218e9319c00baf0f52243fda6597cdd50000000090e192e3a253c1f4f1a360447200966f215f195c8137d038662fa06e4b2fce16ca147249ffff001d33ab17a6","01000000174760bd1c71331789278f5e5fe87901c28691da06a3a9d9aacd251a0000000041bda1599107f6e353fd73dc01d203b81eeb08059665359749497eecd3aab6a532167249ffff001d8260cb06","0100000099d39dd11c25ae20a50af4b1b9b7e366b8eb93dc66ed866e520c5c4e00000000b1cc0805fc83b88343f2a495e3f2b87ea9626140f025a3a06f98614d0842be496a1a7249ffff001d041aef4d","010000003bcb42389dfc0b694724fbd5db34f16fa40c1dfebf91ce2404e157f5000000003729d593a37582c78701a9d330dad7a174d9ccde0fad0a49f9748d62cf8647b6f91d7249ffff001d1807a7d4","010000000fbae9890011478b9a1bdd75942b59f9fc056faaaefa07410ba49fde0000000077fb4092f56c0c6b1763df93caa6354af6e0aa7b29e8a13e67f0b56ed923003cb5217249ffff001d392ef040","0100000046441c1eb8d69e9abbe79df5d965dd9f30a60476ec810cb83c8851b5000000004e2d36d427f313825cb27c1649bdeff1fbdb4d55b2602069aeba68d3113565aaa4257249ffff001d2ef42dd5","01000000d0333ea53ee6ce3bdab024b2b65b1cae52006e9079eaebb26cd418e20000000038fdb8a5adde0e9c7dc866b6e9a0dc3c2373b6a232c55d2be9c98994c99034f37b2a7249ffff001d06ea4c07","0100000054451bfd676e4fa5f894391ab51c16e41ed0cd3867982d23da7e300d0000000086b61ef294294636d789c24565a5aa2f809a8a1c6ce768d1da43e186cb4e4a288e2d7249ffff001d285b944d","01000000214c72277e29f1e3554fedd09856e7cdc4e851875468336dca357765000000005bd21c6de66dd2ed675bba9573807c66796a02a8ca964e4135db34b49305d7bd312f7249ffff001d28839e5f","0100000041a04efee51ca2ba50e818d86cf45e7a6af385766216b08f5570ce6400000000e74df072d03b21af83fe0a6d7421002128266b61ac25ed8122692cb4e4030cb887317249ffff001d13cd6ca9","0100000040eeb4d92ab034fc09c68cc1bdd0847ccd4efe36d36e458f2acdee7800000000550adbdfef21ced402e810e6355a8bf6dccdb281fa3badfed159d97c410185d3da337249ffff001d274f5cc6","0100000097dec8d804950d3f61fa6c034456cd923141ab0b24d4a2cc63981ec0000000006a2aa1ff613fd92bdb6510e4a6962ec50cf0dc9dab61dbe90e923a7ecac30fd4ac397249ffff001d2574126a","01000000762f473636db0f9f6dc0db637cd23bab413ef8ad2ddad1680bda3cb000000000f0a875bc7a97825996d1f84c813c4638376b0d273423b5834e60c4e275d44d8c043d7249ffff001d07bc660f","01000000a4b3cf7e22aa01ab6af6e26540d0a044cad850e482eac964a4921d0500000000afd4abe7faa8aaed349f17d83292cc4f7c6e301a98bb4498914feac0d57cd567ba3e7249ffff001d58415b04","010000001989eb234eec3e683db969951432bf167b7e48cf2dfdb11be00712160000000058042674cb2edf904f87b3b1b7c3ee6760708510a99229b867aa13f2db0d26ec7b3f7249ffff001d1f7a2f22","0100000065c6faba47776ebf46b4a66c0de24dd9c01ed8429b88da5b31ae5dfa0000000035f1a1ec40ed3134dff1d515b51cf87a40b160197d27a8e7bf049eab387ea05919417249ffff001dd4c69a05","010000003109034b369258138112eb0b2ce70d27c4fa5463b8751b164624079100000000fe99779d6cd02ca82fdac3b89972b73e002540de1a346637a5be46c4f8bfc0e083417249ffff001d05913614","01000000444f0f37638e92dd480011e86cd340317f4894ac75ea2f4ddf8e3ea3000000005d64067769908df082391644dc1336e74dea1f6c6f2d4831f09e4c4e41fd275c95457249ffff001d2088ef38","0100000017e3eec6ca7faa43085b09be24e6433d189a2d19bf138e7496640c86000000007c1f1418de15a8b397964d91cf1038202f9718290bfdab39d52242f22694951add497249ffff001d0707d37c","01000000789e8efc4ab108ef78234d605fead2218d943a309f3a7191b85689bf0000000084906f8856c03573040b8cebd6b5f023884427c247780924d6cb1c64a03caad12d4d7249ffff001d2b1e4275","0100000066f46da1dbf7a3da3a43856d1f3be89bdad8978376311b5fbd82982400000000ee260f390df365cc7116600507c62fbaebc7b8f62fca141a6d59c8eea2974ead57517249ffff001d1c4ed407","01000000b4a43a19e913d02dcea79cfb9593538766b7f2a1a36ef46f68ef04fa00000000d27bd628173abaff8c51727a9cb719030a4167565063b8922abd9f4b13260fd003567249ffff001d473c5907","010000006b3836518875aa1c328b82cdedf6667ee65afac8d270f07728993a9200000000aabf9bc6827f81bf1f1877645a146fcee38d9433ac076549ba8f3cfc81b09c600c577249ffff001d1622b128","0100000089a96bbd49c21e654097e9df0691a76f7889ba68a5b1bc1e4ea3c8450000000071ddb78b616cbdaa30a1cdb25e6a4d9d181279cc46c9e5da96106df7a21d2f36ca587249ffff001d00263fd8","0100000076ec325568eafa7aaf5b2d5d685f6a947645583730669df8629940020000000098b7a417b3e8a086acffc57019d86ce25e60dd017aa808d91ddc33cacf2badd5155d7249ffff001d353768ed","01000000e9099ecf1f1a179bfb29fa66841fcaf0cf16ea09b2d84217fa6b0eb000000000da5019aee01e5794b7059252afa5c2a90485cf7920f22b9f012686717c9db3da8b637249ffff001d3891ff0d","010000004482ad82ebe6bb89e7a7bea51915a53149caaa0d651056d21001349800000000e9333875ecb06834c1306ea0abbf1a574797f13693d33f0cd98c842a6488786963687249ffff001d249dcbf8","01000000bf2ee72d907843a72235852fca6a7a121d84120a4fff0708d4c3c86300000000dbcb6c7b22016b09610de5ba8d556d39a648cb6b667de0a8ef9097e2cce500c82d6d7249ffff001d08841044","0100000013616b61dff9f3e916a89ad6e56f453228efacca7fc0b5745f8b90fe00000000a681ddc5614f6981a63d95069b4c84598d2a084b8d0415666b94c694a4d60bec56707249ffff001d1fd52a0f","010000008c3a0e4c379dcb0f50651fdc24296d7514630c30328790bd95b929af000000001d8a975ca8e45663f5e3f099f7187ecd1f32e0e442cf6ca8b6e0450875f8882a66737249ffff001d1a8f2e0c","0100000023bf28b0e8b9d7993e19d06ecdaa88d0a03d8b8f0a6fc9bba6908c0500000000d9c9ffb67d6b850fd3f294e86f217b73b2a9d9eb1769cfa7fb66c3dd8b8cadd65c767249ffff001d24ee1b1f","01000000e22cede2cc54bad50dff591bbbbfe1027bc2fcce07c7343d0486e2a20000000006372b73d4ee9b4bc20ac023a5048dad92e4fe772fa6bf3928bccb5cebf0f2c39c7b7249ffff001d00d67b67","010000009cce8385b99c0e693c56bd8231adcb2e4cff7bae7571ceb898dc466e00000000a2294d2692fd26066b28862c0c3b375bc52baafe96db2487988c4cec9021fb86227f7249ffff001d062b14b7","01000000ac40f504d40f3b55348ec4c6181094325d4cb0498d933920df87428a000000004c862c5db8568aa6b2c7f1cbb1a713edd99ee0eb478949c1c2caf842cd1fd9d0ff817249ffff001d3505cec3","010000000d33066218db161f527c92e82faa02cd41e5573a1ff95822ee6dbdfa00000000aab78b5b5dc49d804257fd9a53fb54fa5f448116a9bbd682a06f457da9888635db867249ffff001d3282e8f9","010000000999aee925d48ea2f89750a3a1f624c0597713dab556794b3309c5bd000000002a76d845ec862c3b42428aef8c53ee0a05b6e286bf21132ffbb0750acbdde223108b7249ffff001d381efd01","01000000218ab06e416ae4fb9ddd4651d69d088cabe99d4f64924f1d49778aa3000000006a7d1d7ed92b6d85fc70c07eb0dbf82fdd41b691cc319541335e336071f5cbaea18c7249ffff001d3680e19f","01000000843ae5c4fbd010ffaae64b8e4c84729906738ea476bd67cdcd65c25e0000000095e1d3faa388899bc6b470a93d1828d2313b9e9736c60ba09ce5d8599ce9bdf0b28f7249ffff001deb17460e","01000000ed2f56c1ab375ac6cfa489f8d7c02548a516e2272915256ee4da49b300000000abf94e62b1c78534fceb853c0ece57adaca4cb8e8f39c54a418ef0ab3574f4fdff907249ffff001d1a656b6b","010000009d16de3ab3427106a4d6d0cd471cde47480342e14235a0d27304eb63000000000b177c1a3750fb3b25c9d3e462d21bf2c2297ca416ff327ba0d5d3c49fb0de98c2957249ffff001d1b654bc1","010000007878693207817d7adb1ca6566a096c0022ee0dc037e637ea36279a120000000082c7d3b77056c9c624d958aeb494331309e341c13fa97507427610879aeb2787bd997249ffff001d43367f0a","0100000007aed1bd720470ed15b9add750afbd74e8a3539aea83d74c8688594a000000001661d595c0180548a532c685517142e0b563864b4c10c3baec53484af7369fd3b59a7249ffff001d07b625f0","01000000d69d7bfcf4477fa8fe5d3bb984496855aebcd8d36a60287bb9c9500f00000000cdb19a2528db5f501e221f1532041cc1d9ff98d598f93f769f3787596f05bc84f6a07249ffff001d25168b92","01000000b7677c89f20c033b088e5c89f0564b9ad3fc6d10003ad812018e70a2000000005dea3003108a464a5a2110e9906f0e1e872360112629b45114d9c5d28943440795a47249ffff001d1fe72fab","010000009bf9f181dc903fc4c535e66bac23cdac4974007e1c2752ba717989dd000000005437023ae0826847ecd955d5b5c3b65cfe2d72b01df82eb0ff31b897fa78a90e76a77249ffff001d2877f34f","0100000087b6b4bc141e6c28308f6a92fe1454b80a074283bcbabe0e5d44e90c000000009e46db89e4af3b5dbf66172af12a35d584fb3eb295c65f315452ebe7f61d01925ead7249ffff001d320170d9","010000007998b4025f288d4fb19fe32f92f3f56564bbda30ec82491a2dbadc8e00000000697c53759ddcd9b9a8c64d85cc283fd1fdf938cbe09e024e231034b029740c4ef7ae7249ffff001d197e7a23","0100000036fb7a9734ea3fbe59ad2272893f2ae9f351f20a90a7f10947a08e4d0000000005442784928f6a74f7ef51402b7342c438366a46b887f24d3d2ee051e0a0f5859ab37249ffff001d39356e15","0100000083a9828b751a766f55682159e62e7f51ed3973d993f0e6c5a687a3f800000000fffdc0516aa3a06d9dad703a5240c65ece47325a8024e91a83636c0b05a54f3b1fb77249ffff001d079a45f9","01000000ecab3cc15819cbb54544eee1b26f0ae50ee2d74b1013a00fa1e9c2340000000055fff7fbd3416d211f055384d28da013d3fa289cb73ed8ac769fa65dc15984fe9fbc7249ffff001d071c8788","0100000050ca6e0916dda2a4222983859513278e31a5d046cd43b8a7b6ab13ee00000000c2161b61e988eb7ac34d55b606b7decd8efdbffe89393aec7d66bf6bc79a96d7c8c07249ffff001d335e6a11","010000007e47b8d3f59a48a0765c9af38897a870c388fc5a657b67f8cd493070000000006cfca55c7a042556acff5e7c3fb56f8e2821e5a28220d61245ca9841ca13edbe89c57249ffff001d23e831e4","01000000192fb8fc8d2da58b49ffa31cb58191b0d150a418e3b6292a7571257200000000858553467e7fc4d98cd9a9e8d0f7d4ca2c069a2aba6a59fd00d09d4fbe792dfa1dc87249ffff001d1f8b394d","01000000e2fb263f04d973d6d9112511004eaff58b035058f92f81b5c5b015b7000000008fc836011701d8c27de11db07325e9ff44065ed868e6881b0a473228f6c00b22cdcc7249ffff001d20049e9f","010000007605615962ba5713dc84bacd666702a606bf8cb3d134a017f498fd9e000000008e647ab476f8144f4739c5ae9b73ae750288d46cd71d78e19c5fa8b1c7f0c73c31d17249ffff001d169006da","0100000046694986e2dd684643e74c1b025eda42b8e5c2f93efa330fb9e75ba4000000000f2ca0fa6f16bc708f9152089bce51c61e19ca670a77cf1a8a97a088e850dee4a7d27249ffff001d1bcb66bf","01000000ef728e263beda851ac99009df0c197850500ef483100257a95ca796800000000599298913fbfd1467c57d41e18117b3992690744706f7aa688b7231cb027fa25d7d47249ffff001db070a900","0100000074f8e2b96d4dd3b563bce153c9f56703dff8fc24a0f67d97c9d37bfa00000000f4ec8fcc3d5c184b58ffa759bad0c0e3d721214759b8e68b048d8e09e1a978f43fd67249ffff001d00f2ea94","01000000eebdd1a06b7eba79f44bcebd3f35df83502eb1a328cefbdefc34628f00000000acd83f8500d8e8e2acbc9037d2621391d87084fd17d61f92c8ceebadfab113cc0ed77249ffff001de336e203","01000000e450b1bf5fa14e460c812d1c930c24d1afced0596db2f3b9e7e9e03800000000271a15af9ad6be5a7b94646b3891d67db99df20aea597c6ecc78776689f5606de9d87249ffff001d1f42daab","010000003e6aa010271abd218c443d0a687b45bcec929f18c1c9e6139973dc710000000009adb00ca7127de2e13823a69549a721633ead497b4a247130044edf71f5717aeede7249ffff001d06b402cc","0100000006ae8d0e3ec1bb5748fb8c1ebb0a976629b4b4bd8a847e7c54d38cc100000000f986544131a20b764f72b0106decd2f230920c4bcf0b4d41c323325f1bf0bcda8ee37249ffff001d3711a594","01000000a5e5fdc0bb04f72104bed4e8c1e2a7ba97f7cd98a628b987d9c5a6b600000000354c8075ec4496858e7188fe3cbddb71312c13dfa99b6569f08d11266a0bf49d61e77249ffff001d20487d89","0100000052efc6f654e0934223b649a1a3b20b979ad8fdb5af68695037829c8c00000000b8c434f1534f90dd10d81da928129ed77a92ff0542189960ae638f8aa1ecabc22ceb7249ffff001d0893665b","01000000777fc88a0640a68501b6be98eb61fa0c324f3260f94713906315116300000000b12c466a6a1d265339c162e89db611055ee0ccb6a92a9d9bcb9b63d1fd211207afef7249ffff001d2ae77d19","010000004e7776a85a1b7971e734e51371bf6ef6f4e7433233d3781b323f710100000000aba4e1292473d20c19f8aff2532db5752aa8225ad363f2463cfee67d9479e07426f37249ffff001d242ebd73","01000000ff067d2db64f967a55078ba9578e8d931a83bd50f9a3aea5c0d5c75700000000d4119f44262816cc7624b97236e6efb7b19030b452b50d24a9adc32cb342815288f87249ffff001d2e759aeb","0100000026ae0c4e6412255f085e523ca9dc5a6a838f968335acefb2927ae09e00000000e1b623b2f4420cbe1f7caa4aac36e6c4666d2c298f66b1119d47045686059b7c22fe7249ffff001d0279e4f5","0100000089858e80ab0ac00f993ba4f06c3258ce2ee272d05a61fb1e4435beda000000003cb6c11b27ffd4d1c5c7d3d9391aceca79ccff0a820793f03386fe1b6c2df23a41007349ffff001d1e281edb","010000000c3b7ca79e0944a91c3371855053d49f4dea8fa839d754a0f28f6d30000000009c263297006bbd516df27e57aa6b1ca6d577023540161a12d4e3d02e1708f23e1d037349ffff001d21114924","01000000e1883066497dd6aaa910a4d1a070ae98920554e86013973b9cccc1d7000000003f7f6bf85cf44e131be4d927644b7effef236caa33226d635ec9b42e533fec376f077349ffff001d3bca6e15","010000006d92e4ee1cdb12c1d21d1976aa750c33c8bcd32d5514eed94b9b9a67000000007013921859c57f3a36ce1f6da695a1af61156d8b222884e35b657390fe71b6aa11097349ffff001d26151716","010000004092d1469783a0537f9b07112153f8cd93a1be65f7bdfa679e3084e600000000ec82d35186dce4a26b51791ae2b4b8fa9457af85a6511c7f1baf01441da0242ebc0e7349ffff001d00495895","010000000e73c0d5c047f1360a29c544037a471009cab651be34b3f565dd435d0000000068d80d8136337cc8f3afa4f511c0262f9172c09cf3feadf82f4248366cdee1d2b1127349ffff001d346fc629","01000000c39720fdef444ce9f94f8864d6752640374ec8cad7f15e30c2b7537e00000000eeae8701f1a8eca2cdaab7861648ff31260a5fd8f327d54b16dcf9be089c1de4a7177349ffff001d1930cd85","01000000ce9fe746df8cdc4d29c8672b1db88b2ac8b60bc5377b28b69ffd5fb5000000004d9bbe3aab2056709d5e51bee1eb64c999ab739b8b5770e38a44ab201d9ac7b6511a7349ffff001d16685b76","010000003004a300cadef84e8240634a1ca568bb3d226be2707a9f4d01a571e900000000190b8634186691609ede8dff59e6662d70d8085c08b79912ca3578f0c242464b8b1b7349ffff001d08343c03","010000000ca35507687c8a03cad7bc19a5f1307bc944ac9d824a7d3d5d26eda8000000004c36f35f9b0160ac1b26faa6f81493eca1ea64782c8d7442c2dc9dc8ee231cfaf11f7349ffff001d07362577","01000000cb690147ae7e07a0b3044ceda982b8cf2450bca38dfdb81e5e2a7396000000007a5f0c7688c938f2495a6b9abab6886f165e8083bfc247feb72b8a8f78adcc5f15207349ffff001d71a18d00","010000006321481c4ffaec17733c0e72bcc805b12b8d24643eabe4eae04904c900000000796cea0dbed9a0af97c888592cc9846c046a059020101bbbc92b9ea317c39d4da9217349ffff001d20668081","010000005622fc2303221722bca07c921402453bd0e5ac029d25b5e6a48ccfbd0000000080eb63783bf9d1980768ffea858b2482b212a603462a70673b2bedf8d408abe3e2247349ffff001d06df3ea9","01000000442747bdebd0d690551baf6ea9d6d0470d9a1764b67afb712ca196120000000071914f9e703aa3bc15a72254b7ae2223d1cfa4a66e47e89579aa5f812a6d16ef182a7349ffff001d31d836ac","0100000073389075a4b8330523b9a124d37d548405a50b0ea20dfab7b4bb260c00000000e6284f6210fa080fe42edb6bd10948189cc9a9b7b0eb45c970c9d8ba9a29c2d0942d7349ffff001d2db54137","01000000b7bc65a457ca569c188d11e79964dd64549c3f99ff42a9ce3000564700000000d8b2cc08e4e1edf5f7623a684d19e44947e5d3c83b18dbee3b0cb26d6da3b263c6327349ffff001d246d1c00","01000000d4c7f7fd88d90ecb856f78d5f6dd75881118d6dcbc816db5dd34903e0000000066a8de518cbd260907791c2365c51468154ce5e2f8d9e4f9f5f6d5ea3f4c82ceac347349ffff001dd8a02b05","01000000f806b1cc32d68db39d5db1b0f0ad8e757d488da5045a68834471c9ee000000006295dd84d54cdd1e513f8d7eb7eaefe9be53c28f5b01ff1dd2a169fc6572a73c06387349ffff001d149a1d89","010000007ea8898288c16eba84e2a7429c79d79eb1f627a343f964bd92eab6f70000000096d00873f8e9e96d998a5dee3bf6406e96c900bd1e20ecc47eb4824caeb6e775753b7349ffff001d9162fb10","01000000a8c3da526db1a1a2ceaa630b7ecbfffbb2e7cc6321953156d2ac0d1700000000403b71c08dd4e7a07951cb8a1578b29b3d7aafa9d3ff4097dba8032800408346a23b7349ffff001d23499d19","01000000fc672ade6be333fd93aa10adfdb1a7646f61d7d8a036ce4cdfca0a74000000006806d3055330cfd24b6c8b17c1acd39e33794bc485982b0706d77c184c15fa01af3f7349ffff001d067d782e","0100000034c720e32cbe10baa4b3c99f950f877877b4b677372672df3a2dfe7900000000c9102c31957dfea6b3e0e9a845a60acc779d287e91320b4458795baf3bd8efecde417349ffff001d1e6090a2","01000000b030efa2de9e095f4a17adc28d585f81c649e5588107a6b70e071279000000009fae21ea8410e264a5466a1ba798366449489d10f8f370a7c1ceed6290878f796c447349ffff001d143fc2e2","01000000f4df327c17ab088b4aef262cb03d5f56e66546ed7762f4db00e82e4400000000bf31cc73e3f4f98f32e0a5969fb73d548fe5457a24d95f34470b783e34587f5055467349ffff001d33d6fce1","01000000413cd251341ac7e2436a8d1b382d987105513bb292a8c4693d059c8f000000007ab67418d5dbe80f8fe98865f651680adbb794293cd34dacd08b4ba0f4f3673e87497349ffff001d25866f1b","010000002f7d4d8bbd40b2161d0456c96f17393b94e75a4d17fec750e6b1ba8600000000db6d970dc76c80d8d19d722bc4c1bd03f79027cc0be41237695fcfabbbca4343e44d7349ffff001d1db3cc72","01000000345dad9ea1f2e937c5a1c03ffba1139b025f97e17721ce2310842e9600000000a36f3030a01d70809dae42b3000000bad92c0b05ffb8ccded5208ab70d2a6f89d0507349ffff001dd6fa5704","01000000663152a537312ec06c50a839318e2980303014844a0b67ef23a38d2e000000001c088773c2f9abe4b86e070cc26b4644d1017f58c664c8f53dd317135f93f9621f537349ffff001d2eec6ac7","01000000860da0a3705073b6e9b5afd9889d1604b432bf3d2f4fe9fe22581a9b00000000bc4c61b32bc164050b929e3c7f6e83afc7aee5d51981bba0b9f96df4be2b334c06567349ffff001d3a42af0f","010000002eca327d99c39901d7faaf6b4584306ae7e82f60fa98d87bc130b96e0000000013db54ad43671dba3ddfd5533a4028c8d542d369aa6bd14af8ec8472494598742a5a7349ffff001d272aec9c","0100000075c181b65843c2a4bd9c0d4379c1ea8ce63bfb5793e887442622a87d000000002349315f57b2fe859a31f3c8d3d53885e1af4a3f37e9ce98abc6058d420ce692e95b7349ffff001d06602101","01000000d648009e5e417514766f4a88ca7582a1e342790693fb8745459d950e00000000a17c2ce427fb25d5cd9b05bba227ea79fcf27c918a8d8267037336eb130fc5312e607349ffff001d1cbe3177","01000000ed3e139499cae6ab00e1f73e3586f61b867455b17cc508cdb304840500000000a5338fe126a8baa1971a2eedf2a48e48ed8e2147e500e0717dbd57f3a15e89569a627349ffff001d090f76f0","010000000c73c218a9391c1006950c895426f06d78c3d20154393251d5871b90000000007b986e9b47a3150848be7bde8c1bd3dcdf8d7a444c8ff6dc1fd5d63718b8ba4c16677349ffff001d04967477","01000000fbea151c427bb44204104422a2c86aeae3d033b00ebb0b82fbf3e04200000000a43c293cc65792e07d000a8d4d8afb7dc33570d1c6599f844890838c2e3e4366986c7349ffff001d24d8c991","01000000a90850ad862774a0ad74d9c3ad45fbc80fde3ed2b4db089159806eda00000000f6aabdbd46ae6feb9f4f6aaea4d2a5d709d4feedccb2262158a62354a1be2bba196e7349ffff001d1a6ff4cd","010000001f4cc5d4af81ce11ad79028be9889cc603428b4e467249a9089ede210000000050b6a3eee608e47b8989073f234449620ec95e470e3c019beeaf3a3d8653cbe83c707349ffff001d07839be6","010000001eed6b1d63cd656be1540b630b013fa4f01729cd92747cddc76192f9000000000ad2328ea393a41e039a2440e3c3e2ecc69a812c863dfa8e6af852e2d295c416e2737349ffff001d236829db","0100000036a25f888891822ad86ff06c3ec259b92019a7b01453b5368f27205100000000d155ede38c86284933a3e6636230a4e4e24592959e3d9767ba5ce0d13c073dc06a747349ffff001d71c41a01","010000001559083441556cb1298f8d1278f89d8e9c99c14a31f06c44b88bad9800000000cc1b8414921fad68796fdcee3654e7e31910c2e956b1c6ff7aad38c4ea67c0f514767349ffff001d2c2f6809","01000000a2faf8e3e9b6b72fb8307219c6151469849d729c77abb800d01ae2f200000000c06ddf578c66eafa9b7090d7a4aa51f21d1b6c74cac90ea04ad64a2118aed1871c7a7349ffff001d15aeb099","010000000599228d0abe17121a3451cbcae9a41f47e707d25b8e060b60e21d58000000002154fb13b852c7eb637e4f9f5f02842b25f92fd5e023c877bd74279c1daed8d7fe7f7349ffff001d05acfa30","01000000d24f072cd23dd63a64edc67694fe0ccf1ca713395c50eac325caf9650000000034dfd7c230d18ee3b0aba1cec67ae133e070f397ae4e6acfa5c50901f5cdb137fe817349ffff001d06bb0ae6","0100000012ba142e7bd52fe3398593f98da6386b0e4c86a59d04c130e90b3e16000000006991d41ecdec96e2ad4c1b1b84819ae8d77afd2f515849c58e3e81f88ca6b43aa5827349ffff001ddd2a7202","010000005fa1d5af998077882c67c6b1e2e137d7f1d2191f0facb8fa2e3a58b900000000b83b7d214545d5a2dce8b05c900921f9e0d57cf0e7abfb7d546681fec4d5f9e8f5837349ffff001db38ec705","01000000f3200e2a0ed6dcf69026ad59c643096cb0e4cbddb59b815a69043cfa000000003ab46352cb82b88cef85c5b7b9cc3b05c10cb84aab3c81a042d223c22d23adc9e8867349ffff001d0826030a","010000009ba7a269117149ab6fbd5830d9e9e18076b3374c5187d0a196f8ed0200000000dfc77c7ec5c0081edf3698799abf36a00a1b935407bf55d024ca9a746ce960a6f38a7349ffff001d2e7656c4","010000002d8be0c74e65a693d5c3165337ce3b63eae39861acc18cf0f8e6a0e9000000001e4b9bce572ebc10d288b6b6a548974f5e321123d18e71c02fabfc9a4c247e97fd8c7349ffff001d01ef6e1e","01000000e7ad2cc214bfc1b16450869197f3908d0b20de4af769cb5ee07b1b1200000000ecf541e10d8596a3988a03adc5b96567bf882cb8e74e11485d7f10201b67c5cb858d7349ffff001d2f84f601","01000000d9df11dd0a2a6a33b72f6c12d596671b54294cc469477e9f73efa32c000000002329a81d6db80d85ce49e4dcd8e36ca3107bd4094c270abac6582b2e654d0fa0738e7349ffff001d24dca4ce","01000000dc7e3348d4bd38c9d1889a3d52f4d35d938cd7f4f27a9fe4f09891dc00000000a2eedefd90fa459f18f7ccd9495b585a9feb1225fa0a16db097f65820d63fdae5c937349ffff001d22b949cf","01000000f686d15a284fb60fadcad831f0a9a9c4f95527423fe529f2fddee852000000006bf864290c494ee283ed784911bc135548d3d4083084d9dae3ec78c851c6e2e900977349ffff001d371d698a","01000000f178e8051aba16e0ce11dbe33c9bb7cf1b26c3ca0679a7053c431d7200000000f25e69c29592afe2f14bc4a373299b1079945c8edb901869e7ae4004e8db5f269a987349ffff001daf6d2d06","010000008014fcd46f0757761cdaee1606a06922b11f98c942316023fad7b35e00000000f474568d0023dc5f44caba35c451b18798d774e155143c635e6a7f9307d61b7f3c9b7349ffff001d2d4e46c2","01000000ec8f0e6df755d105f2907032ddf269513b080b3f4b92bdf34f9c9ad4000000007307e4f6c8c17970939765a51d1e34736e2710a62ee6b46539ee04913fabc9a7239e7349ffff001d353cb3ea","01000000b7edf2028ef005e3437661b46ec3fcad935b05f8f402ace4df54030400000000feed9b6fe8c4aba1cf995a6f1b4db7364bcbdf252c4bc52e39e175fa7fe1e3ae4fa37349ffff001d2ce079fe","0100000006ae1a13e76278eb3de56f30fc466e2bb119b6ad379887f16e819c5100000000b646d2f34068d46ea1aa89f21fc1dc9390b5aa369494bea579d9a16170b120a580a57349ffff001d386d73d8","01000000cfb62549d82c94be349b2fe204f67229acad4e7c8bd4dcbd49f91bb600000000d5d99d7320dfca04f3525d2f35ffa6879ad42eca4d95bed1dad0b1ed93c3dd9e65a77349ffff001d291cbbb2","0100000062500962d15a43e082455c5c0b1b5fcb2b4e19fe8b2a4812d4a793710000000048525523e67d476662089cbcad5878d17768a35869fde44da2ed347260952d5d15a87349ffff001d49705a03","0100000035e7a063056d3735235a16d40b11e1b7073e77d6b75a8934f4c813ad000000000ba0928e0c0f52f3f97bc7fd5be6a2d85f729e6a8948ed9881bf4998eedf3da11daa7349ffff001d09958a05","010000004a68f11945a92058fccb9ad3a125c8eec9435f5472696ede63327e6700000000c76036e3726ef293e1d67d35438cead66905bbeb5a8e1948b031a637553f0ce78cac7349ffff001d04cef640","01000000d1355dad5af3243459d55942d9ac7b703115575b814041a524221674000000001d770c26de75acd67f3475a2bef0957a602c8a374cd03727c87170617d3af03a7aad7349ffff001d757e5002","0100000053a91a10f7b8d841d8323f4e7269e5a4bc59c9c162e0b87e9227ae6700000000ff1898c1538d80d83d450b6b5b8f9b3cc45346b8b8ae0d46f76b896b26df2e7d48ae7349ffff001d9da94503","01000000e225d7a60728190ce4d1bd2784b334436fb7e92fb05dc45bd8bf721400000000a8f08cfae19474f0571e8ba1571deb6f3530864fd9e6275759fab723868930e956b27349ffff001d259faa5f","010000005efbe31679f49120c227b7eb7742db7ece5ec68120196743f5afb63300000000fbc2149ba657856cd6db8bf86db756910a89f10535bf2a4a8510f3f00a358a35a6b57349ffff001d27156194","01000000d0ea9d19611dc5174441aed5fa77ca676a093895caf2f7cc87dae257000000004742207c33894ab944068b4096db3e925eb38146de89f6219f76e5375b6721c780bb7349ffff001d28218f2a","0100000011d6a8cf8aebb4f99f341f54712d01aa62a30e07386ee55d656e685700000000ce3d4574837af9cb91149b62dd047235e57d82c40f1a49632796a306effa7a8f4dbd7349ffff001d1ac27ec4","010000006253c559564adc6c1105710352d514c49058c8b9c6c6381e7b2654b000000000d61599064453eb823e59d3a6abfb0bbdf0d69ee794fe9ad87f16eed8d3fa06f9f0c07349ffff001d27a19711","01000000a9673c7b43d090634d95923343fc87d92b176e4257090572b2e3356f000000008e120c1da2d3263506cbde4cf020c012bc51c0dec3ad50427ddf7313a0d61b5acbc27349ffff001d23ac436b","01000000920cc2091abea10ec83722c6434b15187619c2e3f14f864ff614384d00000000896fcfa1dc5953a52a4baba3b4bb4e17994337b682bb4ceca7d4d407b60adc1177c47349ffff001d80ae4f04","0100000022037b341f61235a6e4765c86b73ce3e61b26c4d306a9bdaf17aa392000000000416608887293ddfd64a495f8b234f05741d5f2e1666476fbf34add6a69528a61dc57349ffff001d29b24969","01000000bd77a4ba1b4594b5ff1f0fec4142f2b89819db600fbbe026b74df9cd000000005091ee1b31459dee38306d028db01c00502cf23ab3eb834c65c387cb52a303a62dca7349ffff001d17f2e5c6","0100000075b5d277378d857c6d844870fc350709a0bea93b3e8c160a3353dc0a0000000086044430720e1ab4f1b27aa36b88768ae808996823bbdb9b9b01178259b71147bdcc7349ffff001d32fa25a4","01000000c0a01feea765bf4ad5d1efc53652b2787f6867a20a13add4a432ed690000000098e60527034939beffadf62df0bc8e3bbf3dde643885394ed8cfa70d06e66db4b8d07349ffff001d2dc71c64","01000000701582f3e3dc47ee5b369f463828d34c5144ad92803b92576e6b69fd000000006d88493e42543bdac917f5440410ec02c78d2c483c9cfa2d5818c61a10e80d253ed27349ffff001d399621c2","0100000097358744905f5941041e63ca5fa80f6743e4f08e995b93d493ccc7aa00000000fc39af640bbcff356eb6fe7b88b8f33c5c5ea48ac176cead14d812d91b8b8f1ba0d67349ffff001d03a7a64b","010000005d603bc34af34876c6938dbed14a217af9ff77cf6bca73ca67f8e6ab0000000049958e2734bf0bdacec5c3e96894848da6c7b8bc569d3b3a2123bcb7d8cddaf032d97349ffff001d2d794be0","0100000079f488724a7e5a7cf514d7a723db32219aa74b6ec76737a0413ea608000000007857fefffffef16c81de071266e8cabff07abb147550dcb5e462de38ab9e1a2639db7349ffff001d08834704","01000000d3f733f8f532d3d02549c80d76534dd242b865c145b030e61d233cbe0000000038452ac7eae0a1d0ff7115a5c865189b027cced31df37e519f40ae6fe83239e5e0dd7349ffff001d1edb5201","010000004ce64424b9e5317e75e39c713e707836b716133069ac52b0dac37ad600000000bb41c1882e346a611a7d087f27f12774d44549e5fa12f65046540014299afaa316e17349ffff001d2033fe33","010000004e7228e75be036a37f3f1a9ff292ba125495ac7efcf3a2897bcf7ced00000000a8b5213a9e7abd3fb1dcb1e90e3478cba2b4dcf59c2cf9f3a18b961b2aa7c8ce09e77349ffff001d1a8328c8","01000000d549a14e5abd6fc9f855147082bed93ea526c9e66a36d0d98587cf70000000004744d6669eaeaa189bb2659ee39814c7890de6feee5f9ca25d6de670d26860fa0dea7349ffff001d2f67725b","01000000d92749a8c19a359dc5cef95a04b4ea79281aa8b2e2da3617f1503cdc00000000ae1a4387b6bdb8084a580ca9184efd0340899b5678a2dd20eb7322a91b736248feec7349ffff001dbb103e0e","010000006261ed8f54b6b4196493336577fcc981e777aa4454bc59627d0b872b00000000efed77e62a851fee34c97bfee65514459e19d67e54294c1a50add7d3b47b0b0c13f07349ffff001d01b652da","01000000d71aa8951eee2b6466eb5ece0e77418043f4a4274d5fb99da6887a5900000000ef49f3e49dbd706e59e08a04858cb0d0c191cbc318a3ee566ef7b8cd1a91afec75f37349ffff001d14306951","0100000044f949b6cae75e9c536ffa02ee5b1063a1aeb5b3c9b30ec49d0f037f00000000eeed3971a018d8b91e6bf3150c21c2853fe3d23f2768ddac2667f850d8a1f9495ff87349ffff001d22bec85f","010000004d3638e1187244fe807c7974611f30c2d2f1bbdfe798cff2b2f3de0b00000000023576ca4e4d2240ea8fdefd14936479c35925ee39e851c79d0bddb1e93e5d4065fd7349ffff001d35fb016a","01000000dc231ca0cebd07405a8ae9c2e039bc5284ad013747d9736dfb266dbf00000000f0f37c3888641e1e09e7b5fa6070e1ed03df7bb38ba71a7bbbdc8a43c39c2b7f9cff7349ffff001d40144803","01000000f572c37498c8379e5745fe0d12ed6ec8401ea0930afb9a57b9f3823100000000229498b521f43d9b5b3dcf400773e55c296a7c9cfe73bb9707f0fea9bfccbdc8e4007449ffff001d2adcd8db","0100000035758f2701fe07012074bdc123c71a8958f3db592791a8205ac8c1b700000000d1d09d58c7b0359dcab0f2b0ecd37ac807d3f0aeb723f0cda072501a033d03bb2d027449ffff001ddebdd200","0100000094faaa0bd37a934c1a3b00b10e529dd35fe3e7035ecc08a635a0c6bd000000008e6e79b54d5476932c202bf4d7017590b77aa7cadc59575d39fc3f1723af07c4bc057449ffff001d351622b0","01000000f4d38dd79d5cddcb93be5f275e95ca04b904f99bb63b63902b48e64600000000df6e92a53f312dff00396a8f35baac584eee8ef615df9db99cbf2e0ed09763afa5067449ffff001d836a3503","010000001d970d420756cf49699e398fc48d417c6fd91b69645583efddb8015b000000009df9b7bdce1676fe9328ecfe5c64880e94a94723540bb338f09e3349485d5ce67b0b7449ffff001d28a1aefa","010000000d68f26fbbd9f608544f0ae7db9fdec1be8298d2e64ffd71cb93388a000000003646e7e815a5dcd4e792b64250aea140dd590428fd5a3faf9bae1f9edfb42a725b0e7449ffff001d348eb1d1","01000000147c7a049fe3bc7b8e76568ab23fb6fa6b17af6d7ba0ee785ffad03f00000000010d18b8a711bad736c0a79720a6f1641ffad8ef51e05185375e257eaa51fc2657117449ffff001d3a8886b1","01000000fb5ebe76126f5a1c2228eb1f61670c03ce144ec8c42185f9595e7ca90000000018dd8fc92293038ccec1e5bc40cc78f6192253bedb137aac4de4f0490c1c534a94137449ffff001de3594407","010000008e28e712886f0c659188da379bf072a316a4873e633da0a3f73f115b00000000e1434476dd2000ab5b8749b2442c79159619e0a856be02bdc691851169a807cda3147449ffff001de8e3c901","0100000037d73f2d8d15b7b60579f9d13423360418421de5e79ecf90f0307034000000007a8f47fde68e6c447a12ba52275875960ce3d4044e4b6f6e497fe763bdccbf57a9157449ffff001d4e88af04","010000007b4d977f8353ddcd54aadb9ca9c65255d518f4df3cff565497e7e8f600000000e98c74c0a1fe00289405bdb2b07853e9323f44c8c3238126128a0be73db0150bff167449ffff001d190832cc","01000000f0d317187b3f4b72a7c0ec350dec26c85653f47c2db23e7f28c18108000000005026aaf44cd4577bbc7661ba94972e94c9dc2a1d891d0a6d4630b7cfcff6be853e187449ffff001d50321a06","0100000089d283f19d7380e97fa5987d0b7801c35b0ecc43bdb870355a515e130000000092f544c76e9889c23f269f41a1eca589376ff2892208fae297e6ea5d5e81f1a838197449ffff001d05ae54f8","010000003ee73715d1e478a6606695964585024096527d31bd7a3eebc4f831a20000000042242fb0c0bd97065f5eb47be68c1f8f894bdf37f9919c37ef5665830bfa73c5191b7449ffff001d2b7bc602","01000000a0f148b9bb7f77d788518de7a781c4e3e8e84e871f2bc6becafc2c3b00000000cb91588c55e281c32f01fee8948999acd618fe33a04999e1bafe53c7459c87034b1d7449ffff001df2c7c506","010000007de867cc8adc5cc8fb6b898ca4462cf9fd667d7830a275277447e60800000000338f121232e169d3100edd82004dc2a1f0e1f030c6c488fa61eafa930b0528fe021f7449ffff001d36b4af9a","0100000009edf646d13d2a7e1da8bdad14d249b037eccd8af23aa704379837c90000000080de0e69a474620acc95b99991bd7cff09341190c55bc04597d006c25b6ef6a68a227449ffff001d1afe73bd","01000000c6b465b2edf2fb5a720f34deb9236bc24b7e2e379e85dbf8447388a200000000d2929449382b171391597bf3b589b97a52c4d87a9dc572897a64a77ade8f5c9dea267449ffff001d02996737","010000001a01831ee1a5442e6062831afe2d5115668b1653c158f6f4b3200a43000000000d4b4006ae1ab2b1b5b4b27ce7bc84dc3467c974f6b68616a2da9fdb19d86a1e142b7449ffff001d8ed7fd0b","01000000e58d16155c44d15d511a66aceda1a7cd3064b752e3c6d964328c5d2d00000000c40db24d022f90d586be3f3c8e58afb15e090ddd8598fec4d4b2c51a3c33db06c82b7449ffff001d02dff728","01000000650a352a674c75726b6a1196963633c49aa9510fcd6abb53993aedad000000007fb10a28733a66efb3ff51e6459fffea5c6e4ca91282e97be951518f57aa5d4223317449ffff001d24201b20","010000003c833e8fa9800f2de9e75344b09ef22a80116233a40d84d8eef6596600000000e267150e892f5aa3df16034442209a6fa71c4fe3a2e659667101162e64b3937ebf357449ffff001d1ce7c005","01000000e294a924c6c6bba89abe516f3e78ae3366bc5df61df193801cb68cc800000000039984449a78b72b31baa1733f38201c9172a92ca4d9213ca20d4c195d419fb382397449ffff001d397975ba","01000000a66da0d7195dbf92a0a55d8eb6ae090ad77d4dd31776404361beb937000000004203e172d0db536bbc40763abf155a3a454ebc32a3e0a57b28ebfb5cc907f7f0743c7449ffff001d22c9859c","01000000e8709ff578e3dfd7ff062bc246195e4f594fcdf2a118d9072c447e5f00000000ef4589250f2edf6efda5ba470ce14096cbba7437a2e2809325b566a732a9fedc413f7449ffff001d02d8f7b5","0100000050557e2b9d51a7320d47f0857b2d727bc9b233ea65bc4383920bb88b0000000062bd44b6fbe246c29ebcb8b03ab111242e35fa24e84975083313a84541b3d628eb3f7449ffff001d01293503","0100000059278e9887bc7c864e3d5e1018ee3567ca15f372827e1a0615956774000000006c4299385c59641471029eeb681ab350cc0e56bb9b90c94c8d734c28a49edeba48437449ffff001d33fb9ef7","01000000fcbe1a19835c773e8d8257243a25e09649463f713c5fdc7736cdafbb00000000d62efa3539d6fe492a2c8a2574952fefcc44110297dab57426b087d808df37e256487449ffff001d1c54eaf1","0100000032dc877060549fa2c988ef4238c6e21fedb2190f9bcc5f4ec4a84820000000001d3dfa1289686bb990220a103784dbff364233f239371e4c465fea7a94eda8eff44b7449ffff001d045f2007","01000000b645e1839483ea9d0b858b3b2b4d7d6b6b15da5e3d9f02a7dd0fc2f9000000007de3bcf96e85a9bb06b899182b60e57a205e181f0f7495140efda374b2556ecb704f7449ffff001d44e7a409","01000000dd3032fe06302896a3bab22b97dc935248e35a555f3a7c990a95fbd200000000ac352c126bda3c49b21d2384b0be07a840c930ed54c3f94cb9e3d49c78e0a46541507449ffff001d33927cba","0100000032960610c083bebdbd983a7225128cb31896d3745b73c93fac64ee7100000000cad4fea59f99336273f960eb8c947ce439f91ba24f17805f41e3a38863238c7294557449ffff001d3a2d015b","01000000f00f6a912f2e6ee324d7950ab5d8a356fa3b1c95373ed5a870ccf92000000000717da32c02fe02e0ab50c85d1604f211a32a961e6fab499df3875a5c5529b32ea6577449ffff001d054b18f4","010000001ccef39dda525416da853c9298e810135d8ed96d04ba5de71dccfb84000000003d1f5f58d50eda9d596ab9262bc8c2d3d61d455b5a0ad9e3551e5b7a2649f14fea587449ffff001dad172903","010000006380b55fbb39aa083346d3a7d906e511bae03006049800d3139098cc000000006ac07ccf5006ea60fb06e6d3263c5a25a763620995e316ad50ab32010f9c202d425f7449ffff001d13d52975","01000000e7362076e7f3a53785466edb656cc749e3d3d53ec25099c6d693d34100000000bb1e528f7a469690045767022961684dc3c2a374283b4c50cf83bfa0fd2ac87d1b647449ffff001d27495a3e","01000000a2b517930a0f1bbd2f2ec9e68cd5105c5d6fe8f3a470b6189746a3ae000000001049f06c2e584aa2a7a656758d926c922cb299bdedf92af0fb8e1c057973ff148d687449ffff001d2e355e18","01000000fc80b61ceaff29c5bfb4da205111dcc04b723682d56d530d9ca28f88000000002eaf94c9a6df0659da4ef82528fb49918a18ce6e293c45bcc8e07712dcf33e0aec697449ffff001d357a6431","01000000b7bd9f286a77d60ac34fad57c74dd681ffb340b1095200426d0577e60000000049df9f01194792e1804e31480bb36bfa5c670796d3a78f1a373110636933a57a106a7449ffff001d5f7b9000","01000000b7fc0964dd1245c072510eee0e13924b086f6691252740abc07b81e800000000f13e32ccdefc55b677c5a885cac169e776ba146527d80ea115c103285dc8fee4126f7449ffff001d19a7d715","01000000838a6f13165359fd62dc1ce69601c09db7466ee78ccc21fdff5bfaed000000001d1c546c572936b6ecee3ca7a10979979cbc0a2bf3b299c939f06fb60e89259460717449ffff001dccdcee05","010000005dec161f1fc47878ec39ca290bfec3860fb7a6b0550d54e188f24615000000003a047282ea5507eed6e2fb4ae9e05eeb3e7f2f3e538086ba0b60a3cb765d61c8f0727449ffff001d3784b786","01000000667a39c4b66d97f833d47ac32922dbd0b5a5e1320aec991dd24a5a4200000000813eafef78e8dd944e482ed3aa10b45c98d956fe5aa5bc1ccd923a1465e1386950747449ffff001dd2f5af06","01000000407aa2e4921bc61dac4dbe550f0d3d017f2d557c132dc84fc2ad5b4400000000dca1168fba20f8180f8922403e9612d2779f1190dc716f8ed6a15d5d8d8a44657c757449ffff001dab9e8f05","01000000165d8ccf9a9f85fe64c1ad8880be258e164dc12b93fc47b7a28dac1b00000000db4f18281044aa6021438d26830904ef341a6203effa947c6c4e04ff10013f9141767449ffff001d227526d4","01000000a3e361dcfae8662dabd2967818d78950e37e7cb2979628de3955c142000000002468d37c07b56f3a6094028d6f0a1f34e592e1a57eee877b0e4a57e8f72c4d1ec1797449ffff001d051da8c8","01000000b53777719fc0a2a5c9f9ad0a494d793b7990e70c1bc40546ec5100f100000000b29b263b5a38986315135dcb289a5952123af8a110e8e3d692201e65df175529007b7449ffff001d5f18d101","010000006d5aa32387fc54bbc1737545604876d8f22c0463798b393468378d6e00000000260a00264e2df779df5a807c61c2c696b5546cfae982c7c23cabfe2fe3004fe8347f7449ffff001d1faf1426","01000000f8934b102786beae84441ceac3c9771bc5a74d78329ca4ffa191171c000000004cac10b97022bbb576756482c4bd0d0a97af741e29249e32f079fec04bd029efc0847449ffff001d23f80569","010000000ad3cd86c32488fd96f4dc52e9c5ecb7509addff69f810d066be3b220000000027975d8ac851b3c40502de6c498fd454ff69af8a6bd28a6281cf6a1ffcd38bdb73877449ffff001d30ff63df","01000000de22a8c3b4c9833922955ef1d24675c45db15424e1baa1fee57e98a100000000eb6daadd5483af2c70d83b5e2d8e8be07f3c29745d2334ba7b0d5e429ba4e528298c7449ffff001d21f5d62d","010000007cef5f0b4c82b8aef5bc6c40bdadc9a17dce83d4b2b6249322290cbc0000000020ae307f048a9a37bb436238bc87d5c8e8b409b867760261092fa1efd155cd8503917449ffff001d065be50c","01000000e6783375b566b13674cb36b268c65530aa8f7c697931f7dbc58c9614000000006c02f6972a9ebc4620f94ddc9573c2c2cc9ae8e79d836b0d1fa8cd138ecf491a9d937449ffff001d26282c2b","0100000074bfaa94cc9502334d3f51373e36d0020150475b83b48de4a9062b180000000006a4ada312a031cda39f38c6e02eda4e0907399c40520f8d63a4567bf300924fa0967449ffff001d361b7cc8","010000003c8f9f0994d1ff75003fa43ab0df7d66180094ea206b0321e62e8ba5000000001eec0e229b53c6b426a5a13a5727dbdaecd466cfaf60253523e955423b563b2084997449ffff001d2a6cff38","0100000032b71c6d0b1bf449899695ddc56cd9abc72a76141e84961086a736ec00000000129c3e10119b5beb0b67471b7f4b48abf329e89433aec1c8685492f5494f4379c99c7449ffff001d2f3f8617","01000000caa6dcd02e4132ba94063fecc504beff1d6ba0bea6617b634e96405300000000f83eda950f6997c0a2a281e949c88074a804c98f931a2e35f4a990b847ce7bc03da17449ffff001d2427a47d","010000001fbcf858d704cb4c9c59d7882b057f4006ecd46ed4c953967cefc2a100000000808c9cdf6efd01641cca15846cebd6bd0499944864b9e4f9cd8930e4c91bee4bbca17449ffff001d3f5b2c01","01000000ee48de279f7f5d773c64de073ad87f238f7c5785878d2a2745567762000000004c3b7bc489987c67fd6f97cd4d15ebbfb3d798a3395d91e5c4ae7ebba09580ee01a57449ffff001d1c248502","01000000d3a207f03360de622eed04f6667c0ede24762f733896373b65f2e2600000000042bfc3f5466ba2a6f894bcc1ecb931e910b1360dd49e0fc00db87e8a9a9402e43faa7449ffff001d24c25e4c","01000000f6a3a89357ff65d286426b0eff732caa76c90c00caf4dc48acf75d3f000000003d25eff3e94f508256fb5f9491d45ae3f9c555bcf335156ea17f3c12dd93c4195aaf7449ffff001d2fbed521","01000000050025ad4cd49c58bc9b5aabd038b4ac0dbe9129c7debd08bece8f1900000000eaceabe7b6fedc225447efa8abcf4e50d720a14d19d717dcd538fa042552fb413db17449ffff001d36542f55","0100000049b71ff485657fd40d9494dd2c3dbf14b3dc5d605f38b31e802dd9b100000000d8046df9edb5479865e2b99b62f7e8db28bad6743df95c18699556764fb8a923ecb37449ffff001d1d7d47ee","01000000cc24b3f337a19ef1a51095743d6f945a0888fa99667abb858bd9c3e700000000eef9577d9d374dcc534037b8c200ca2f1e8a7d8b925051cba7a0e2207b5e2ae214b67449ffff001d025c5ec6","010000007244a5b32a2321d56d222c227b3684a1693d7821f496c793a387efc30000000054d1c4c9fb899fff2070a7a09a74cadf37ead10b4ae5f01f8a5f4ee5193fc95d23b97449ffff001d27018ffe","010000002388f37923dccfbf9f4c7a8a54e335820487c164494b469436abcaad000000001c5b7e73f5b1bec2d532e852fed407f193a6c041c9a64472bd805f24f2e35c3102be7449ffff001d2a19ddce","010000006fce6fe73a939d137b99e13269eef13f47195eaefb27fee8bab382520000000049925b1d5b16b956896de37923b70a7ad89215c1fe3d0c6591e761a3f899f14950c17449ffff001d31c15d33","01000000203ec0d4fb7bf01ccbbb790581eb762c1996a2f886c468dbd9de0934000000001eb5bb64efc3ecb9d11fcbb6b78d4bb899fbd84d406b1901e99ab3f70e6be47ab5c27449ffff001d06e3f79d","010000008fb862337ef684831a097a8ca2e5dd9d0905d6d4a39c5e002cc05cdc000000003c48b3e23abdf07b0e06e48dddc9f1d628e59d162523a52a9d67b30b09b8a52075c67449ffff001d265cb298","010000002534818dd3c16db891f088c4c8281f25548d477493b1e257a1c9fa9d00000000d53632131246e2f2e366487b127f85bd4b30da2d377a3ec7e7c776e6f65c59e396c87449ffff001d2f1a774e","01000000fcc8dd3776f0c44835a3e5f3f7073526022010bbc306c087e3cc7e57000000006fdec02902b5e47863e7ba15a958cbc01e27f23dc8cd4a09c731ff72d3b647b3dacd7449ffff001d1e801b7b","01000000ba444edc874ae25b5f93e66290d5d40479055c2d9253a8a97d02dd080000000042c989c68619108318d9365b10cc5c6bfc2f4cf5b89e0004a32acc0fd80e625eb4d07449ffff001d3935e6e9","010000004fc6cb07c209254e1eb145fc10a7405c0cdd8059a56ab621486b528c00000000e91265b43cd9c29529552f9eddfcdb68bcde751229e680148dd372209e5677375bd67449ffff001d2d34183b","0100000057fa65fca3e70fdfff924cc930738317c82170b402669db8bba56d4b00000000ae4d50d2aee41baad737d9ca117f15af07e388fee9e4d4ebe9372e25f77e4f29edd77449ffff001d2886927c","01000000b3871a9905bacd4c27697109b8390f654151a16c58e2e118993057d300000000bbfdc64faf176f8405f596f0f32beff29b0bcddf6157e67bb4681241fd79e79159dd7449ffff001d15eb623c","01000000b53357aa82a7a25206f11dac1e51901bdd57c5c6d6b579f2bf58e7f6000000008e35b86436f1ba848ab05409a6536ed72f0b00c4df55c0823d8fc0f887f79159c3dd7449ffff001d49c83f02","0100000051fee0ba4741a2d8b8a81d399bb92af81fdc41dc36a7fedda7bd96a300000000814d5969a8c72d61e25712b581e7e5f4a977bb650ba1d3fbcce21050196c4d4c08e17449ffff001d7507a310","0100000033e42ca090a0f641395356b8c2b6bf099e95b5ce9f6527b0259849620000000007dfe8dab0210c9c3c4e7a64d2eaffe7fabc9b4be1c33e6c22b999a4318376ea28e27449ffff001d33f44a95","01000000f3d1284f6b2f658f8f60d788d1bfd4cf3c8f4e9c64d6e679c7893a8100000000a0c3a7a50cefd231e785de25820b96a9dd91ce2c67874b7959704d81ddaffd2bd4e27449ffff001d5e27aa01","0100000007ec5af89cf1dab31e02a8a5381bfc369ce473a62f59e99e298e872d000000002a5e1953337322bae2fd066fb81cecb493c89e1d0e2b99440803fb160119264ca2e57449ffff001d04bfeef0","01000000287d2a8798f4e57aeb31ed0fa2a488b17b2ab2ec091a3870012b125e000000004b34fc811eee37c55ea2f830dd816b1fb723ff56cf8984468ccf164ad8aa027546e77449ffff001d1b6e7c08","010000002d0304d68ea93e843ffece8e1660ed8f96250f9489af11798529169000000000acf8002377df6a33b18da8f18cc195d9b551f30a77fd3c9321c6643f9c8be41bede87449ffff001d01c46319","010000003b2b695124f9400df196705fce764191df50f768fd0480a3390dcdfe000000001fd158940ebe9e64600dc227b9115af2e14ff42c13e21529ddfa0c62608f51714eeb7449ffff001d027dbdd6","01000000796cc4bbc1833e37128b5f9491f0c0ea48d770994357dd6b4b50370000000000b1ad9c999c85a7d800a0203dfdc87950e0f78f6e2e4b3219130fc0bab72956884bee7449ffff001dfc1e7a0e","01000000790e03714d7cab9a3228cd08097f6e08c125857594ad4928cf335720000000004ff6e3ff0175fef08d520409c377a744f7466c116b0d04ace9d4500e8a8d1b427aee7449ffff001d36cb76b4","010000000014dd1ea81da210e49b8be54aff1580f6c549880f70fde022c689db00000000d49a431e368a35295b31fabb1c851a70e35c8d685d1f26a6d9e23824141d543d44f37449ffff001d20ddd86b","0100000057d6a1e0375b4a504b15a923945056c0bc73810e95d68bec4278ee2e00000000a58907f0202e4c8d048feee76fb821634b030476d65aa7aaa2bf0ee8313daa7b3af77449ffff001d092e5476","010000006011e508dd6e62419abcf52b47a893772becd9dd43a6838f6e7fa6ae00000000bdb2a8b04c984a812bc980ce862d624c11c750cf85f981408c1503c7e30aa7d31cfa7449ffff001d2a5e449a","01000000d5bd6d361befce3a9e4c75d2deed2622102fd9d3e0b68fb03d6f09e6000000000c07901dc64096e0ecf32c08c88c49e0011d6afa0312fe98bb4b76d0d9c07ce972fc7449ffff001d237baeba","010000009231f9ad5e5406e3c511307feb888a70760fdb91a9c2571416ee927900000000e80299dc382cbc8fb9d6d0a9d27fdc307203716b2bc11f21bfa8fe4542abc6ebf5007549ffff001d2452869c","0100000015583a2b664741ae84eadee8d9b4fba8c921cfb7bfbbd75ed0e7a62200000000fb93ef70c752cbf511b02eb5f4a88e821914a0001f8b7eb3e4f3659bbe305ab894017549ffff001dcb14ac01","01000000740bbbd940046d89451a636328cf46801d003be836185566d13c46570000000056331ae4be32b00b957df3d5cc65bd1c50bfc1cda87b0d2a198efc7c5fa7c7f3f7057549ffff001d28b51ba9","0100000017c8b6c655206df34262fc9dc027e965119b40da8d9ff9a4024df5ad000000002c60335f2e35a9ab7f768549ee665a415c79d3c20a66cfe6532ccb5f2a741eb7c8087549ffff001d06b2b5ac","01000000f8fa953a07f3f69101d433e582913c87affcffb9906e02fa5cba110c00000000a65aeeb3595415a6254f0e1c56ff4758828dfdcfc6f2d3262bd9446b2677d4296e0c7549ffff001d220d61bd","01000000c9e1a8bfe20172f16a8f7d94205e85c05b838613cb0cd037e8f21f12000000009574d47889bd4fa52637d35a7846f042713fb6d676b78e78ee9494deee8e2524fa0f7549ffff001d3030f57b","01000000a89a76983b19a781bbd2dde7696354180a11596c963eaabdc001d50800000000c54bdc118a6b5326cd6d8ca436c4349e76b365a17284cfe7b3ff1ff8054abd3b44147549ffff001d1c26bb8b","01000000e76eb1f9a5b1164dcdb27212f859ba6389aa626d01a83b515c4027630000000047808a0ab4374e12bb49ed082dd1d05be2e822085ce242468769cb5bdb650fd569167549ffff001d24abedbd","01000000eec364ce4f519aa63737d14db53a1770e99916e605ca8fece2cb48a7000000001da876d5b13b51605a669407af32ba9cb409392bca1bbb94ea96c4012b25e1aea0187549ffff001d0950693f","01000000580f39bc1de73633d5bdbad290352bdbd00450777ba67b814469f6b90000000022ffa6f40a48d66dab35556f3ca4e623526c382123c14afe9a11e28f7ffb953a001b7549ffff001dc5dc690b","0100000062e338c6a04d75107fc1c0938b950ba1e11aa817b5d4c5d3521d5380000000009aefea8ed2785329437a0bf95cf155e425b312fb8e68c6264d088965d256be320e1c7549ffff001d02780811","0100000094cc02d465d142acf7fc2e405b78c7f9a0a03f64b808e36ba354942700000000ee0793ec2e211334c668d3728b7fd497516440b93222437a2c473f83c2befaaddb207549ffff001d37e70fba","01000000e43ba747331d5be75df5811eb837602b41d757754cff261a9f23ad5a000000000859542b7e63f0e82139fad332b07b30342fc6d271f31db796d5839e3340774122247549ffff001d1d1bf3df","0100000090419c2d4daaa497256a64a6974beef039d81a560cce3f7779d456db00000000951a7cf7cca734e1ea9a4d64f427dd08010f5b6b1bcf1ca6b1ea647e6f775a9c11297549ffff001d036c5bfc","01000000b5c50a3ed4e84a2522c0da59d2d20f5c8355e0c548ce1fedc10ed298000000006de9d4d2fd971489f0b4f358cd075b3d246c6bcac29a0cd0bf66f592e92972f52f297549ffff001dbb25a800","010000003078031164c4b552db456e6176d1ddbc5b6fdfc4856bf22fec20727000000000cac84f716c01d03abb09afd66e942f8164a40cb4ace3594282b03d55bd8ad4889f2c7549ffff001d2110d3d5","01000000a39914441d4710e69fe2dd118633c65559a0fc381c5307ca14b8aa180000000093f268f4ae5a21b38acdc6021830834d6963bc7ace3a180de906e1a122e5bf42b82f7549ffff001d07ac83eb","0100000035eda558b48c16e42db6019057aa84a8ccf4584c8446de444f14d3d2000000003e59551b5a411b057656d18a4f99da00a7f55df5ee35db3cded71144d9d9482ab9327549ffff001d1ddd3e08","01000000028275a15a89aead901bc0e42f73ee80d213f0d8b76cd19a6263fd0300000000c1794ac8346bf45e6880d2ae4761be2755d246a73e7f3354e89ec02f7c0a04c82a337549ffff001d2d472ea7","01000000d5cc83c61ae000aa94eed871cf45d6b1462f53a3aeb00241b3bd0924000000006882c5e646af8a86668a8dde8971ce5e16efb4f10c8d331b82c96e0c1294f7818a377549ffff001d84fe2214","01000000e8f49c09d79f639753d2e6e5fe00a489b18caefd2cf07b830a514ee6000000002f28f08c5b1dd950aee4f986b2239b4b3bad3fb361d0c572789f7b73b8e03e2bcd377549ffff001db32c5200","0100000085ca857f3327f26261753805d1d8fb999b8aa9d637bbce01b870e3d000000000fc195b0d8f78800c8ce5da3b98fe5aab5e1f5f5c8b4b89ab21c3a919ffd7841bf3387549ffff001d1fe66d37","01000000bbc3b60808b401c50f64475e0e35e2e72ab729473877d98669bf4457000000006a0d0837acabcfc35d2739b41a64d98638230a461879aafe4bdc59149f990bd78c3b7549ffff001d38ed9908","01000000fd061d436fb973346673fa103e8423272d618370cfa40f08134ea7850000000015ddc6ff02d84d0b6f51347a5c22406d9971f8ff368a4c33eb6b25b6924cbf87ab3e7549ffff001d21d7b583","010000008de6b9ce5c246f4be529ef3380b3cfeb4e263514beb89625dcff05f3000000001c5d0cadae4194466d9206f8402fbe9816d54973fc8e860a359962ddb400c0be5c437549ffff001d19272650","010000008b122348abc79257ed38d569c2e3cadcffe3ff550b4240e52eaadd4300000000cd7b1873c9f5989f8061fab8776c2416c53ae236e452daf7cfce3f521bc94d041d497549ffff001d3819d160","01000000d09be4b8170805fc1b9249112c65480ec59a59c36e81587533b64b830000000009ea757af3339f6a5619b96ed44372c4b92e2ddbac2b51599d3c6a6a379972bdc54d7549ffff001d1dc235dc","010000004bebf407e731efdd6175c9b7a7b273b71e5655212043d8d23cf9d39c00000000f24029a5f673de6f4a71789f670ca017e3778478540a1dd53ba9b30dc1397774d1507549ffff001d1b307da8","010000000759702c2810dc42b23cf77135e2e7abbad5db297d3c3c451afba34e00000000653438b942132a39edc307bcb12bd959bb8939b11d939c9b9dd51ecec0ed88c498517549ffff001d5d94df03","01000000b0bee919732dddc3e52dd7e6655f4c81c1f06ffbd8d1572f4df042e6000000003315253edeac27c88ff82f3c8eee5216cfd4a81befe79204f5a7b749addf3512a3537549ffff001d01a0008c","010000003c5c04e5593471a02d52dc9de9e109974cbe7c2d34345e2a328062a400000000ba19f86518ec796b83951ce1dbb213f282784ba468463f30a1e862a12255c5469b557549ffff001d02c1f7e6","01000000a5a09835e7822f78f2efe34b896d2229ff7de1e4437c4f336f8ba3e6000000001646b7d064e7748d3ccb6c79b68dbe79d0d5eab683847111fdb6901f1df62bc30e587549ffff001d4dbe0c0c","01000000ea15a0a3259ee3f1d21d0a03c5c0a8e70ca302b8226c726084c78e3c00000000ae60a442cbac2b01c2f3088973128d0bbef1a1f8561e185492d6da26df55c94760597549ffff001d32fc5622","01000000602d3d41ed75a592d9dcb44463679dc4b31449b2cc0e5dea15a027dd000000005225b9be4726f91b4120acdd6aba5249074f7811ef91b7eed146296ceacacef0b7597549ffff001de27bcf00","0100000047a2b16cad3f913e2062f76cef45b1bd3ae9a4a8fde258cb9c766aab00000000e65f88a70ac5ac901847b656933801749f67c89fc00580f2d5e5405470ea713e1a5b7549ffff001d2c0d76c3","0100000023ea88089b0403d9a8eff9f076a99eb61c55c6ca5ad3d56356c333d0000000009faac357041d003edfbd371026afd4d3c99b17e3ac1aeefbe5d61093da8ef06b4e5f7549ffff001d364d704a","01000000683846e266504d9cefb60aefffed8cf03a583e7a6f4c069362dba9a4000000002a1a1f6eca8d892fe199cfc80d411cd2cf506e237d3f0378f97042764d9fa24983627549ffff001d1d53ac1c","01000000ec88acf7cc99676e5ea0f4c994af78913840fe83cdd47651f4ddeb25000000002205a302a33c27826e913a92addc5d012f9d63d4307d5502fb814b6f1254887312687549ffff001d093bd6d7","0100000005588da1211b63f110bd0e52174aa9db41e667ea881df14f4b7659ca000000003a82fd7b4917c2b6357bba910c30acf4752fc0d542d3d441ffebfd92acb6cdcaa36a7549ffff001d05489140","010000007514e6911c813d844767b75d600942e17c7a9f8cdbaf2c7772d574dd000000008b4a3a86104c822f63c1131223f884fdc41807ab64f665c1a4ad2b6140b4ce69116b7549ffff001d737e1101","01000000d2500b9c7ceb15eba0721b0a85b9d7aaecf71db19c8ddac77085bad1000000009a3d9a8e49b586c24e58d8464c1f772efd2cc0028d58e52c7b9491923aaf294cbc6e7549ffff001d815e7f05","010000007c6b91296864d33552f0481ea1729c670fc68819ab6e84a626d50d12000000004a6373fd02b1a6234ec357a9345a9509a5e300bd6ae05a6a6675b15c78a83695136f7549ffff001d2625be79","01000000aafeb87b0f127a46ad81e77a799551b10f80c1b28bd6594abe7e0ef000000000a4acf86b1cade64e8baf1c16d66a49c0fd52c950d16d5a39cf4c5c771cad152547747549ffff001dbae6a019","01000000a2fb7c157db181a0c75b2dd266bf9fd6f92ec58d713269527b5b818a00000000f3a84227a63788220f438e757573ac026f8cd13af5a568ff529a8ad27369ed1b8e747549ffff001d1d460b93","0100000039738489cee8aded16b14742aaaf6b1a9241143af2c30d1394e637810000000004c8e1050bfb385da8544a9dbe378405e04b452898860b22a1ad229ebcf62bc653767549ffff001d31a4a20a","01000000b6ee2503134f682b3e79bf78343a983ef64abd02ac587ae58296b60c0000000025a4e8e1e92bc10c96f4af6460552ca7302150349a41d7fa1606e8fb5c4136d783777549ffff001da190a104","01000000247a6bd61b0f268745418149c462f2cf94deb8bdf2d90e22c8c7ab85000000004544646f273a1cce79915a59299c53f8ad6744e76a0db6e50aaab87b73909393a47b7549ffff001d08f28ace","010000001e9263d59723e2af80bc8c5fd0253b761b5aa0dfc6a721d862eb6b6900000000ee4e56cb5a52adf8f21340b7ab1bc39ee0dd57154a35d683b41f5e54d332c6b60d7d7549ffff001d18a1e0c7","01000000365661333a18ca9dccdf34e47c434d5c9acd1bc75f3db56eb5999bef000000009b54a1bca2a94ecd82a3f4f323c63e56a8a1e1d7ea407364a78c6b0d5c7a3896c6817549ffff001d050a4251","0100000015fd577b1188dc92d470067202729db7f8cf5fec1e69f21a4006bb9f00000000207281209f45d85ef5a299fb535625f9e7ca9f23b70cb0c6452f586c28c296cacd817549ffff001d1af60f00","01000000b8cb757e47b20d74ba508f10dd0fee5798eb69567a36ce2a5d18fd2b00000000fa780bcfbeeb3a122cd5aaa6090d916252c677818c4a3f5ad6a60ad24a93e4dccd847549ffff001d041d6460","0100000007c6c0952cc93e257cc6fa2dd22f4cbc70fdaa49619b31fa6d2bcb4700000000af261e5e33cc3c7a71dd3e010e2194efcb7bcff00e0a2fe3269212692a79278305877549ffff001ddae47a08","01000000b592aafbc8cee5428b300c3985cdfe4b4345bd3ff77b1167333107ff000000002cb53ea5b606057d5cf040f0120331bc3005a9a26946cf9a36a9961e2f837f7f2f897549ffff001d3549c5a8","0100000086039699edcb6e7c9908bea9bc6c61cef87b890cca2044f24303a50a000000002775b8619318970cfdadb8a69d99d95ed24d5742a76551acd5f87637111583663c8d7549ffff001d1888a370","01000000ffcf7dc5f05da1c4cc360a533478fd31df09eed72e2e3b961e6cf503000000004e725199de546cf715ecad2987d9dd72f68bd89b7c5d9e32beae7f1552b7b50301927549ffff001d3341a068","01000000c7a67597ae7c20bbaabd47d3085c94150be85d2f3db7bc52d9c70c0400000000d62abe43a652b31e213f7a850d5d1c93fbd969305c040fd1de71fad7d4d4344854977549ffff001d084a2609","01000000d2095bd2e60255211b4235247349f81f74c121e9ea79c779fb0f27090000000046d074b80a303b9a16c62ac74adb725fa476b2ab36678f0c9225012f94f44ec0f0997549ffff001d20af20a3","01000000a01f4eb4f45ada416cc9f961a1ea74e25f3f808b2e0837406ee3851700000000f4929d17b2a44d0cb5d2a6127f3e39b96dc2a7876f29010929c1e4edfe77d0b9c19b7549ffff001d14ba910d","01000000f8341079ed520d464ac82aeb6a9fe1bdadb7bd60b226a946440d76b700000000914e99fce95e26e7278bd8c5a62d5ec2daf07e857c386cd91f04b8df63488bc2c89e7549ffff001d29eb895b","0100000008bf99237a4d53148dfdeca6ac6e342ad3a96b5ba5a72b356f8a2fd000000000738a8472c364b07e1c36cff81a5f0d5ed0d7664a5880d1ffc23f126f80c8f51af7a47549ffff001d1acfb8b1","01000000f34436dc8af0ffbd483214277a573b03a171eeabdbc5994e21009ef200000000646172c270b30c62ef71451c501bb75945a9f33ce1e5eea4e3bf67ebfe1b40d94caa7549ffff001d080fcf66","01000000c9f004a8977b201b28e98bb0f7598469130df1f14c7ea9ec61d809f200000000f962caca6101b42ba3f95015e7e15128a61aadc4aec123ef673ade114136f17ee2ad7549ffff001d4ab27e05","010000000efb80612f837a35c67d48d082f82d919b2a8a98b721793e36859d2a000000005c4c1121612f19fbf27cc7fac81f79e0fef2c2ad35e028c696f4a8c69100258d83ae7549ffff001d7770f600","01000000505001bd4b39bba4654713e5c075b59972df31fc790f7e305dd7a8110000000031c415e61a4e502be49050a23a3c18eb34cd2532115e7ecc34f4295886e5a53358b07549ffff001d328e5d96","01000000e63bc43e82793d7f2a25c9f412fae3ac2eef7232be94902a401402c500000000693ab42955cd66bf6e0caf963dc71e37cc4be06e547e80b1a9b13b58fe830af34fb47549ffff001d3137912a","0100000095b10a0a19ca282355233eff9ee5b53ff44283f1ae75c427ffe21b7400000000e8039f2b639c1638d3a509b3aed06ea626d08e9a9ed798d110864d59a04ac37c89b77549ffff001d711a930b","01000000a980fd2579c2196512b74793ed4d83cfceac35c1307edf1e70ae378a00000000ea0e41fe72c53db8003eb5cff75bcd2d4db2f594c6ac472fb5de4760c9d3da030cba7549ffff001d3a3f4fbf","010000006250ed7846a0e95851ccaf9b5db1a57028b709f22122bff723946a0b00000000ff7e9049a870e60418bd480a28c7c71f651e1c7a2796cf478d0b850290f089ed40be7549ffff001d00541d71","01000000d72165e24c7298c3366c85f61b6d761d6950b671baf3af731a3006f30000000073ec4d4b2688993245bb26b34a8af237371af626e97b0098c33de068e759438d51c27549ffff001d064b77d2","01000000e76959b5bb4a846dae3bd128c80409baa393ffddcd027dff340955c7000000001e02fa36744b80bf67951f42f8743e12c8ad94b152c4728200d70bae51539728c3c47549ffff001dd6bf5a06","01000000737573602754856eb4ad1c4a0c9f969d82ff75709d8d290437e1367f000000000938d207cade5997b0903c820fbf44e13771d217fee9c1a16e97d54a54dfb55bb6c57549ffff001d75c09f03","010000008d49f482f838a7c66310bb25827068098e9e99e76a67c4e1562d00310000000006c154801ada95db25937074015cc2a82a8a064ef38d43b04bf5074536b5cda748c67549ffff001d263c574d","01000000626c0a4f7b352c0425897e103814a06eba8c3f643f360645897be8770000000060486507fe734ca0edb6ee494ebb87948c049485864171f9d2292118f4fa804e1fcb7549ffff001d09baf18c","0100000097d127daedb27d1d64acd37f8a7b800ab81f998f926ad43749ed64d400000000d8c9ce6c139f873f6810449dc4a0b615ad1de0c7f05ab6bfd81eb7b51a57eaa141cd7549ffff001d227a84fe","010000003802393ce5201263e48df64f66e1965d95b4726b6a66c8272d889064000000003cfebf53465366af096e630e8cca4be3a4ced085b4bfecb1e306075721705044d8d17549ffff001d2e353938","01000000422a36d9f5282b4ab334d28b51cb99efc896eaf2e4335b41c1bdacda00000000ca61ac5a10adacfb5efc71d7ac468619d3761f08d75295e641585f717f493e5a17d67549ffff001d034e9723","01000000cbeafd5907d6f8bc561d8b1a086482e361e6fcff7d06793942fe277e000000000920e56adf4c108ccc86e34808b990afe0fcfa0641329a2d8bb7d7a67ecf848be7d67549ffff001d8ac30404","01000000b646981400d86b7e4746aaedb9e0eec8f747460e56e75ce516b063bc00000000269fbd5cbbc38eb355566426ef953f3398d52d27dc6276b9981894cc5f92640665db7549ffff001d326dd406","010000000cf6d13db16e40ad2a0d37a46f2e139aab7c6a20fdd67e263f52bbbf00000000c218947c05a0041f5772c35fe7ab4d5d6dc3ffced357e1178b0eba70ffd1ce2258e07549ffff001d04c7e92a","01000000f0ea59187e8520ff2534eebbd410fba8366141b58f6f5a4db6e25304000000009ae072c07f8714899da9772a5f4dee3461e4ad46b06a9dee92b70e6debb1f9220be37549ffff001de7271807","0100000055b227fc019604543e4a7ab6e02fdc1d5ef15765b0b96b237b0ed7a100000000fa411461c6305ee0c4b68559d007242c9a84c8f66a66dc790b3c5bb88990187113e67549ffff001d037dd1dc","010000001323e096c34ff1ac9c66a6b88cba9734ac05c9c54113ed51c21b9e2500000000202cdc12bef6978172dd81811137f50ac5305160dcade5023587a39d29a161c4dce77549ffff001d24894f43","010000009e9247ccb5f9bdabab26b61aca9bfbe8b7760b46a0890a3aff7bc34200000000ed1d63f3478c3f9d7f60e8bcd389367eb8b7fc43d3424d059933071630e501dd75ed7549ffff001d38bf3f51","010000008223aaf0e2f2d03e78550732acaf53f528cd44f80f9115f38c94c4be00000000c9be84f0060e8e7577f155b8fef35fd4f4c510f8a4baf5ec685816255c00bc1829f17549ffff001d2f7e89ad","01000000f1184b069d763d59dfcbf5572e2f57777e78ca6af6fc255d8c5c878b000000007a384489fd780b1dce2ea4456b5494a9dce296e91bdcab88da430a354a06907ae3f37549ffff001d33204cc1","01000000f0444ab679124fd8505c1b653ba219f5d65d6690b4b3c83d128f862c00000000787410ea5ee6f9488d4063282489c5f93039fff5a9b61137064cf7b8f85f9f4230f77549ffff001d2b2199d7","01000000ddb402d9241f3aa8168e738c1980c97c4a3f5366bf07ec4e863fda84000000004339e5d95717a9d6168c31bdfde42b8cbe6f11ff00336f535a5f5a58cb7adcc37bf77549ffff001dbe072201","0100000087ef6b9578d1c07d706567ca997c0c093b50dd3a76b1bdf98baf953d000000003a6d8d5983de6db75c8cfdccb48ddbf55a19b191a4b0a1a5bf1bc5e088b470b769f97549ffff001d1ba086e9","010000004a8eeedac9a65746e30ee114cf26698f8bff34846c828c9ffe0413a5000000009b08f32ce5f3f46d58180bd9618d9e80a54ec1d0f28443705ba1bdf5459c7a25c8fd7549ffff001d01897d9c","01000000d130beb31becb52c4cd4eae7a0855e3355f8b302f33a404f4d1df25e0000000079caf2f360e38c115ac3dee028ff145c55524e5d0a543079c622131af3a3917a2cff7549ffff001d2de342da","01000000f519d6c341a752b449920eba52bcfe685902cae2ac584e96885deb2f00000000e27e215b065376119a3e4feccb5c0aa0c3cce3f85860832f8ffc94fbdfd75c9a16037649ffff001d23df3628","0100000024a935762fed684f3c166035dddebe3f233581ebc61446fc7a7cc05500000000f46e40f65cb725d04a14938c6a8bd335d1d041348052713451536bdf2a137d4ff8077649ffff001d1d8b822e","010000009b81788f077941a7b9336c65346f5166857489bc59887e972322809600000000c9ec3538434b89128b60f44087af287dac6583497d313cea754647b6d80b99cac60c7649ffff001d03852c2a","01000000e11824d66ded6bbd21d38019f33c1b8f6c004bceaa2008fed37a6b910000000043df51905a24108550f92eda9e695915421931fec4d55ae69782e235aa28ed24b30f7649ffff001d2d85f770","010000006096c8d750fdc682e26e3db5c829152391d5ce0f9d837962d77a76f000000000e889dedd1449121d91f51b3b9bcab7af68c2966c679bec0aaec5c0fdd730921a2e137649ffff001d36836905","01000000bab5d6147ab7ad02049d9f3cccbb3a39a0637e6f42f272b95e72f80e000000007ad86fbd0016640f725ed378c7e09bc4bdfe9fc5f3122a5cf75ed31b4f04811f96177649ffff001d33afdcb3","01000000464a000ff2e57e01febfd9d54cddf9c83eb309a85a5a6a239a6687e300000000e88006469abe2b94262e13840efa3bbc646764cf8a7df7375445a6a641223c59bc1a7649ffff001d1f34732a","0100000009de5d5d251ef4e8a485f8167a3190360df92160f4885437ef4ba737000000009626337ae186bebcdc213b2847417750087757f133b3e4fc4d71be1b724f164d031f7649ffff001d369e6dbf","010000000554097670f2962d94e3974853445f1f5f658ed7000423a955d50fcf000000003179992a64604568d361942504c80ec2e0b3523351abd94fdc07c32b6884936469217649ffff001d17787f0b","01000000c0532fb0d3bed303838641245694256b03c3e296f90f39d240010588000000008e877b6abb978cd9a349d283345016509c45a664370f45c170ad1649709c43e1f0237649ffff001d310a0a7e","01000000223271a346523af5ad2b47cd098b04447f1994d141ad0377f59ead5400000000d206fd2c75f9c1a21168f61e85533aa30ae28d0754b5a729ebbb891b86a5868366287649ffff001d2b48b9f8","010000000a61d45cc6cfedeeac69c18b805e2ff362cef468cb808d1ed31763970000000079d9c46c070c08eeab33bd33861202070f9a68086093371f4950bae8c32b46dd8e2d7649ffff001d042df651","01000000ca179d7e594421e23723bd2b3bc2b0897bf6da41382878827e73c18a000000000d8505057d6aa860fc1602ebbc7ff8633cef8f814cc73d6e5368f04024c1e3f502327649ffff001d2a6350b0","01000000f4fb0d27cb3a960bd93f6134cd5a29d6c6e27052d9f59bdb421eac6c00000000824c777f9a6a552f4d4078c75aa19bf6722db8d86aaf25ad6e3c1c799731a33b45357649ffff001d1b14ae8d","010000006dcba5d80dc9add6d5db89b2920c03c3af78fd0338c4a266d3b0f64a00000000120953b36e1f3a519078abc66365230bd8220117eb4a0a0b4f95a0a644a61f8b6e367649ffff001dca172601","010000008baff663be0719e192a53dbb5d63aacc533714996443fa3664baad1d000000009a42ff53fc2597203e4d4d86f707cb2097dcbcb1d61a989c67acbac86bb7c729c8377649ffff001d753f7306","01000000f7e762bb9059defa5e8c0dc230ea5975a49e716ee449bbd25874fc3400000000f082e15d4f982d7b5ff008e73f2b132bb130fbf47925a74f2162a9baad6d98a628397649ffff001d2fc334e4","01000000aadc8dc160b615c72202faae0f3fc6fab6a23decdad4e9a41bc02a590000000068e2cd7440418ed549aec6ad16609317be7d69b18b0505102143d404ead4f9bb803d7649ffff001d1b3fdd49","01000000e163b40db742339fac47f20eba2de0cf9fb0821740f3b698da4197f300000000e96125bfe9f5f8adf994550f5ef4b6598f8d69028fdfae072645c0709bd02a830d427649ffff001d23c56f08","010000000b29caa69377f67bff7800d16066b05416ac7898a8a8cdc931d3220200000000c79e244c8779350399791fa79caa0903d5172d41590f19598355ff4f81af3c49d7447649ffff001d1f8e5797","01000000abcc78dae09b6742dd0ecfe32d12fce01be535167ff033475c635abd00000000f64c2cf05823e95aaa4641cd74734967e625729590b5665dc9d54c539fb0eafdc8477649ffff001d05109858","010000000135138159f353831b35d81f31ac3302b602569a7f1cd58ce36f81f000000000f6a16492ad724094ced610b8c7c0df8522d7b3f0799e94254be9f2a44b6125ed5b4a7649ffff001d1d0ae532","01000000c8cf56cd4b402d9440c3b108e6d930639f3747fbd5511a932204dad600000000d0d9386d1ff671ce2a44064b1af9ca8863590decc8097d2d584e5159abad2291f54c7649ffff001d168134cf","01000000a6d0a9f781bf43c5563c6cfa9cab1a6cf29ca36e37867e869857ed8500000000b0f38f5c97efffa7e1031608adffc9e90ca56b2412dee1f696193acc42840440cb4f7649ffff001d2ea4585c","010000005fdfdf6cab71e347b7436ec81b8832195f8a5c76ec3a9ca5b921661000000000bf77724866f2029aa5fe163174a38639235d22be0404d86825b2986dcd801b96d9517649ffff001d18d3a8d6","0100000038163c1c3805eeefff73a6a9162fc9df6c23aeea0d1ad248eb96bb8b000000001f8ce990254df18735a12dc56e5e5081b0906d901afb3b5b4647548e25af1fbddb567649ffff001d164cb7c0","01000000de03331453b9d346ab3ce45b6fed859456c798f762dc17d953ac94d0000000007d9a9cfaa06a6ad8e8d0b58a0ead256ae3a094756a018be89be6250ea6648d07025c7649ffff001d05e614da","0100000072350fb5f90e9ce9175f33f60ee9464347c29c01dca41973821f8c5d000000008d8c5316571c1890fb03c0f9ad70f5bc5a1917a1d29d5a424f6b9ea25e267f36d8607649ffff001d29a60708","01000000fe42d692b6e63a531327320da85155dc055a98eb74023a9eeae3c3dd000000000890bc93cf116efdeb8dcb94eb6f560d8eba23a619329ca5fbade209b0e7b99915627649ffff001d38f39604","010000002e7b62d2881bfb68398155340a8263235a63e197426ee93f46c65be1000000008d553892ac9170b5aecf8f68357e768d738e7df206e6e8025c2089c7b794c4fb53647649ffff001d2223882e","010000000750f88d6ba5d3050c1cf54b4c2769347aa1d9353d8f8ad48037427f00000000f8af7a88909f97a09bd675233d51b256ff43ec28fefa345a74e5cd48363095d6d2657649ffff001d073f8100","0100000061418dfca4082be0d71976772b309f48ad65899aa92666da192861ea00000000871ea39017fe0d03d7110c6b79f03c4696205273d813fe888b10bc7e9495edd4fc667649ffff001dd5fcf802","0100000060d730c1deeb8daa45d783ffee0670a5dbcf3288e0c028d00ca55ede0000000040e1766e9721398945c9da250d3fb1e1514f8c324e0bd291138a22fb08ee41f6d46a7649ffff001d2c2c59a5","010000008e9254f24c9bbe60f6f22aa48ea2b6253f706d96e5e02b2614fd633000000000bafb34c5e4f38f434b3f79b19f3063f49ef4aa2d2bf3a370c1804e1f232c47f6da6b7649ffff001d232b8803","01000000e12f7eba767b938d5887817fcb307dfc4649ce4f783892542d3770de00000000214903ed27fea480bde5daf8a7145fabd5503c6f3185db2dbba70fe8698b0c86576f7649ffff001d359ea39e","0100000023a16c02d985c3f67920087619a53ff64f2b969175a9ba2e58e61b8000000000be149eab25dba85e5eb72f01307ce033c939e98e8fdcabbd1cf45bbc39b6c08109717649ffff001d2509e221","010000003747479c453ab1a5ca7b44db3a283ebedd8cd68b510ddbeba57e3b5b00000000b76ab5df9ccc1bc5725cbf0a014d6899fe6dc15089e61068f4945ac25c970518d3767649ffff001d37e9a13d","01000000c79fa4d7d66f4f0d424b98bf793d7c05a781e1872e27e3d196dab6f0000000003f82f82ecf28a4456156091506f04fad71d6ee39e0f06858925b7975a6090375b47b7649ffff001d1c494038","010000002159333caddf4a4832bab638e0b60c89d5ec38e7e1807e19fdf1fbe60000000068d309648248028265f410d0cbefa08fe1c09839f91c3453dd74b376a711a3abd37e7649ffff001d24c73262","01000000128cfb2d17bca797fbde6c97a6f38ffc536d452f4aca8879a2ec6a980000000059c1de91bed5661d13fdcad6d0e53f35eb44a1335550fe259f00aa51a0ec9e97dd837649ffff001d30c40356","01000000ed511280697586d120b5aa9273554f4735affaba7a698aaf2cc9afee00000000b820ba499b2543e3c3d521a964dd44b716c64ee0fb465452fc1d995f712c11dfa5857649ffff001d20779360","01000000f5634db8aa2b519f188a61e9ab40ee34f58d7a9833c293c004e6160300000000eef329e15fa76dd16e3e851c52ba4d884fba88e9c87c541b9a9f8bd41bc2a729e4887649ffff001d1a8a5ea0","010000008e16c193cffd63dcc1437c2655d5b8f9d2c2aa5c61f3b450a4ef2acd00000000b4a783182065b1e4d54cfac9e2f54999b873cdc59317570dd065af12690abbea0e897649ffff001d2cd53500","01000000174260a92b3330e368ddc493ef1f5195a54838c93861e2e66ce0cd6a00000000c55941da2ea17f69770c2e92e7247fc2d845eec64df0533743e3e0c0ff967046c88b7649ffff001d036e14a1","0100000093af881a11fb6fae204ec04271a9fd314d2c646cbc00f2275be66b2000000000a52f5a70099efa609493ae3f7484590e20b800542ef6c8bcf1eb161b59ba4cee3b8d7649ffff001dc3cd7a06","01000000c6db713d337585b8bfa0cae925f96f2a52d65de95ab5b31131a949a900000000751d277a734a700221c0c4fb800a75d7e9d2a7d829d903eb5c42f4e151ed6d5a58907649ffff001d1cbf25b0","0100000064d2bd1a060e930704ad8572ecf203f3c7427f78d8baafcf2829017f00000000da4f81e0b6333815e77f56d0be1061e509d39731508e0c8928c917f8b81f34ccfe937649ffff001d1b38fb87","010000005ef1b3e875657258c27f7eab8f05b812445d144339641128853356b300000000525b413e1fcd70e27ed468d723afcb3ae6f0b8137336a975083529d39b0411b5b4997649ffff001d2b289983","010000001751a14743774bc08e6bf1e4fca9b58d6c8040c60ae630b3fc6604780000000050504e25e6e4712bf772d7a609c77135da2ee7f84fa635877dfd833de6169eeb9b9d7649ffff001d039db4e9","0100000081131f25e8fd8a1e3c03d2273a63fd16fbdcab0fbec842e82e9df8e70000000074103a59069b0b07caf99ce8b596e6a26276ca8776b9a9691197764f4904fc313e9f7649ffff001d20cb239a","01000000736acbd89d8342ad0954aeb0cc4f9847b41661b49d31c1245bba4eb1000000002f51bc6cbc8ccdc03381a65a4e07cf400d7928066d8685b531bc8d18759c978277a37649ffff001daa7be20a","01000000144cfb97b52ec0bae58c66b542be22c0e6b9cbf1adcece87ee87dd0c00000000d6dac345bd109082a75587120218b9aa7e605e437b389b916f5effbf0fbbdf9a0aa57649ffff001d3a6dbaf4","0100000048b870cedd7f5c7caf8bdf7a823d347e268ea5680a3156d9ce03eb3200000000811719b6bcfa9db03e374e0e7beae83f20d506845845b4df53dc6addc9d7f1be22a57649ffff001d8d839700","01000000e33daaf866172d66e8c42c215e99ad4c2d84ed4af8129a08a944e1e300000000013aa73c0d91ffa4360b286d678aba26e99f4753e64da532e2d677295032515e05a87649ffff001de8c8c707","01000000c7ef2e995466e3f9d218f78e16c5e095a01cce9d1511df5bb8635b3a00000000b7e71100052191074be3e73febdbe19e6ecba6054c0a90b948fc04f4eab5605f6baa7649ffff001d8fbcb30b","0100000033360ecee801bcd9ddd0a46830e743d58b3f14d50f695b4b125e1ce500000000880ecdb0206fd400ac9303d61730e07aaf4da06803aec5a3922b612c1a438cd85bad7649ffff001dbe03f207","010000009356a0f50b1cd20c35155881c718b61a355efbfd03fe55d1ae364e9200000000c312c4dd7a3ce86d3df62fe4bdf345d308287e6f2d2afcf2c07fd29c6cfe2ef732b07649ffff001d30226114","010000009bc841c601d058eb4551b8e7045c488a04520194a584907cb1dee247000000006d593d13858dc01f87073293e19c757af5e10216c6fa9231b4fc3f7e179a97a4cdb27649ffff001d2655a058","010000009b9c0cae1411137b417b7fbd39265d4ebf47d231ff4dbddc706a9973000000005c2ad94b4e693b5484f07280c2e098da02a434a4c5474100418854fd569ceb81b4b87649ffff001d1d1c465a","010000000719b308c3dc05254fe706c7f058ce54d659d96b0598b9467651f55f00000000319191a0ce751252963c6744b840b94a822a53c1a5dab897f801ce6e8df90b0fffbc7649ffff001d346e187a","01000000cb70e9abe47215f7eeeab0806ab444e4337d2419f1b3f7b4f10cbc50000000004a2e6af0665ebe46f890c6da1c526162954b5ace23d3df4d57af22f9e3c4717189c17649ffff001d3393172a","01000000e04a0b2169bf43094ee34f952bb4032585193cb31de4c3de6ed6436600000000ed06beeb5aa16121cc0d3a674a781dd27f124439344cc5ac1f5884577ac41c1073c47649ffff001d01eed0e3","01000000d385727dbb55220a743f329d45aed1a58b1f40ee4677a0e033fe13c80000000077915a455e7ffcc3b39c8b41f79e2b47ab7b7707aea5672fd128cab782bdec6e0cc87649ffff001d0278a6ae","0100000060ac3dee69937b53555cbc266b40d497e1f39138d649580dbabfec5900000000e2c0a821645d74224c7b9c9dd51b923bbd66a0d275b4c4777dfe4f1a7dd7f7f028ca7649ffff001dc6a44b0a","01000000284fcb0c0f00b255c0be183d3882f3e4cc50c17e36902611af78378a000000002f401707806bb34b10d71553330ecfe947f8bfa19332256743840d6e3055c57fb1ca7649ffff001d3869d83c","010000003fd604624048d4d79976cdc063b5f4474def536347c0b030795aed2200000000e62e0a7e702e605030970e755d8f29e11595c188dd234708991f4fe569cd6f3f42cd7649ffff001d149e2207","01000000410c2b4af3a97d05b497ebd3474ecb3b89f73985432aef374360ebb4000000007f38618a11204fe6c922269e52bf5d59fceff63f50558c7ce6f921a34762ad6968d17649ffff001d3766c66c","010000009b1957f52ae87b0cf0add3e5115e0a0500a81f55a036fe2a5b06b57d0000000077a8dc778974502a181b0087c9ecf546acc1cc95f23295b41ffba4303d1880712cd47649ffff001d1c43604e","0100000029f8711aa3a45e94ac7b2fbd8658ceefbb5210fbf435e534b0997fc200000000312276cd4a64b4350befb5dd62a2061bbf4edbb04a3ef4e892ef83970c7d95d63dd87649ffff001d1b9c0776","010000006985ce71bd024f1ecfc309e0942449d5074bd9712df1a78884cd5fb80000000078de4efc016b2582b3bf123d12b6ac24a95b091015360fd2e36eaa1edae13192e8db7649ffff001d46135c09","010000004cd744b906380af0fc1410f6c8f0ceec52d5fd962e170889bf590df0000000004c6598b79a69378aa479b4d38574bf591f279fcb14210676b8c277e04efd9580c3dc7649ffff001d30c4df9b","0100000070d8e149532c4a127af68e23712285eac199ebbad14010a209f2574200000000febacbb13dab4b8d6fe6058139d4da987f03cbae5f4cc8770b77916af2f511d69ade7649ffff001d275c1532","010000005dcdc81ae79ee4c9bc92cccbdb7fe6163ce2cef74461df10d64d7f55000000001f385f710e5b959d86a33b4eb46b8c68ce42069ac9aea8be5f7258d44a5db0eeefe37649ffff001d16a0c642","0100000075c9bce0467d51467b3080ae301431987f67bef80dcbc1005a82347500000000a845deee01497da052504e34d7aee6eec5c11d869fa1fc12f82726ab1fa8452d32e77649ffff001d3a8e6bb6","0100000091b311f90a51b2e82754ff93f760aef1e7b4b1e7775313f1792053ce00000000573878eab1b446f131ee4e5844ae47b6bf1a7d1228c8aa707ae96516221c590188ec7649ffff001d31537977","0100000037ed7194be2d3997f61a70c5d537a032f67291cbee8b6f8babe067af000000007f2b682d5a5167d39c0af96724321e4beb3a4d6c51cbf3ef185d0b67fe4dc94e22ee7649ffff001d0581ebf9","010000000e91cc641dabcc7b0338b81a189adf3ec780eba16388d31085d6dc2c0000000072b7d07fc6b1659a3f5171d39b51cfab914b7a1f4468ee896f110438a237fa6894ee7649ffff001db38ecc00","0100000069ab01f7a8f8262768c3441e01b177a2fd7b3925be28b327285b5ea8000000008040cdb830723f519606a58a974b779b719edd096f9aa5ec160159630f3a74b048f27649ffff001d077b43f2","01000000b518f080d8bd499638e23fd11337337da399c0124228ee84415c221000000000329dffc873b4a293e4cb922e844aef4f045d051d2464f082b41234ccea86aba760f67649ffff001dc2f2ec13","0100000083d5c4a1b4cad6a87f37aa85890363ab85c76854a452484ce188581800000000b896be5e6e1602dc1091d7e9b471ea7c3cf30a9212d5da3f500c5ce33e94b509c7f67649ffff001d19a3c7d5","01000000664a888b101a8f10f8c92448d3db41254074586ff8e6d7e00bcdccaa0000000056c89f5d90deac7fd4754a72e8a72cb04573ec4b606b2799b44620fb5e19cb99f7fa7649ffff001d02f2506d","010000004c2941ba17493402b9317cde938cc98c19d95e3a81ca328c1a426246000000001dff54a62d2a448a4edfe40f38e980e604a1fc8b533e0b41053921b3bea64a431ffc7649ffff001d728dec02","010000007b6f6ef9df69a7c00abfe9ce6f8df62f7e1b30215ab3be4202c9ef31000000003d3dd64f0e229110478870471dbb6fcb7c2259c65c0218a0c48c2bbc683375a877fd7649ffff001d005c4318","01000000edc4485328162b9861f29b3f613bb23a4d81109b3ce57033cb4c974000000000888f99444536034902be237949dc3739057d5ac0b48a1fae85723de4c58b674df5017749ffff001d2041d424","0100000014271ff3ece4e39ed507ed968530bcf1aeddd25b17b94ae3001e5e2a00000000b09c12a22a38130615cbc818b6b71053f0543c30c59b8dc60646d440773312460f067749ffff001d638dd013","01000000db0f0e794e699f94f28435045b50720ee40cc899fd810a4388cf72ca0000000068470f0b81e5419c367b6019b54f6b98e9a7c06d91096f663b357f0a162d6b7808087749ffff001d1df98280","010000007ad96f63903a8ccd9ccc55044c8763286985d54d031bf4ae997fc84a000000005e85fbad9fef5a350b3fe2c27dd779477d8519752fbbcb561f593ea26ef90807e20a7749ffff001d25dba78b","0100000061c4cb5a928934de426bb0eb5c82f39408faab8bc267a9b041e1d2de00000000be815c042c2afe9697a21dea914250e56615be92cac00d93c23d13905658e8b4190e7749ffff001d2c1193cf","010000000c3905739192f1b730d76c78b292770848e21735d887af147e74d7d9000000008f1cd5aa08af8af00069764b4528d8541dd683fcf67eccc6d754cd4ead65a8ea90117749ffff001d02cbf42c","01000000d74c795d212ea6491ad0bdee9b37015f4853f140a99652f10050e43b0000000039f1e350430d0d8e8f3b7fcf5cbf19422e258d18309e77b81db64662ea13fd692a177749ffff001d072675ba","0100000098e93dd75e3fc334d51453934fe22ed434f2768fcfe72f72813d5a3400000000e3995f90b553f3cc1b1b14c4a9e64ec477ccf1abac0ad981ea4642c2384050f1f2177749ffff001d4a381e02","0100000023f0b2eeb77162c97e74eb8bb9f12224b9fc8a95da48228fbffff910000000000df43938fa84d440cec1bf0f89644eb93bb5887ba432b0f026c356e16fc20889f21a7749ffff001d88fe0b02","010000008aa6e0c4991b5a7e2fffcde4d8b74c10afaac983065b0c00bdb543f400000000f5882c2e38d9f76b0f11ef0366fc6031ebc02a0a32c50e26519d48b526507136181c7749ffff001d15eb4229","01000000a75390898ff6bb31f69dcbc66bd4cdfe7fb3a84283aef3adcf0b725600000000919812fff5b7562241da08d4e427c20321cd5f05d189915678d952bcf86c5400cc1d7749ffff001d0967cb07","01000000a909d66d221a2add424b985ab318018bd35c8506a09ce6dbcd1333fa000000005fe347fd352749b9d0b2f7ca5d1ae83bb7255a5375ff1d6c51a27ca4e708c51889227749ffff001d15c36992","0100000021475c5716e753ce3d2bd06ac9f9887a1b3642b62f5cf16c8af2be8b0000000040e5827092c11eac39fa5cfa4385274748d1cdef300d499d44986956f3b93ca786247749ffff001d2feb0ee4","010000006f0595b9ae9a398460220bfdf7e7ff1869b1abb31e2a80425ade637c00000000bef004bfbe61d7babb00d52bb06ed7203f7399004f1c3b3b151f34fc14df3de0c1247749ffff001d32983f01","010000009f09e48e4b90ca2b99a071f0e8bbabbac65a5ecb247a8a44e90e304d00000000f0f8005d26b0a9d6720117529f8ea458b1a5c316d57e454b7df5148c4e8ee90a55297749ffff001d2289e9cc","01000000c4490608ca50355b478e322def547c7d7b138c701941b29d090682ee00000000ad3cb623cf9a04d4516d778e80bfeabf1b7edc7c89bed07731930e995f73ed97852e7749ffff001d0827459c","0100000048cd7f08ce050f48e1d185a5d75056e938fee4ae68c949e0239068be00000000aac63923ace86407fac4178374383804424adad6ad1cd1c330d1be370f101007a9307749ffff001df0e79708","01000000d31323c95d47fcdff436e737751fe1afa91001bde2c58db4b8affc5100000000425cfe88b24cd8185326a806c1c58a47da6674deb7b2fcc3d1280f28cbd6eec0fe327749ffff001d3049e89b","0100000057d3e29e4debd4cf7aab90bdf76fbbaeea2b633c18fb85a81536c5750000000092130f850394201f6b95f2135e609f93343bb45959fa8f4cab9b5a53e20d3679d6387749ffff001d273b2037","01000000aa767932c24dbee295a12e9d02b098cff1456fb55a5c04a32b68c96100000000aaffaaa8d8de665afb5152c1bf707f8359c0f7817100b3221ec3683c13fdaededf3b7749ffff001d1ab6d73e","010000002976f7c00e5f5c2201ef741b33e9d0a056f21851371854f56af4d5b1000000009568d629bc2816dd5bb678b58b76ec19c2b9eae73b36841cfb2a57d20636cbc67a3d7749ffff001d19963404","01000000d2035070fdecd0a5998b9103b27733fd6ba07950662f8577feccbc0e000000009bf228fa8711ef5b06aeeb5db81a7c85d8b97ce681c32eafa38d15f09d44ef6ced3d7749ffff001d08cb52f3","0100000032bf448c09b84f54ac1cfb23f345ff2e3ae398f12b111d4cb54255b800000000516f77f53cbaab999d412a879ce54f480ba8ef11d2e47dbc18af99551356acd3483e7749ffff001d1c057b00","010000002f6b6e37b4c31f89617c51f6e56d542cb15ad612c4e018616159f2ed00000000d311c786cea7c11aeb5c6ffb4ffdc721e0132ed79fb95e6649eb03da50ff89149c3e7749ffff001def79aa01","01000000f7ff82cd0e19e2ae58f08054aa4046204d91e543fa019dbf79c5d1a700000000ed4136f247374c05a2019ad3d943f0428236d907204f7f02032db18bfc5879d5ec417749ffff001d399133f2","01000000173fa80c37383c27171aa96e381d55da417e650389450f657a671da500000000d0b0094e3b83e1815d5a22aab0a8b66a14cc8a8083ca79b3797888b44d8065f548457749ffff001d06e66de7","010000004258f6d544a9730ad118f11ea0766b06871563ceeba0b3dac1040e8a0000000009b0315d857d70874eac1dfaf41a6194bcc631da72b9e40cc6a90699e59e8303f3477749ffff001d20acabb8","0100000067d88cabf56c211c566bc2ef8ad9b39be3634272fd9c2d281da898e600000000b21ee9a08fbf14d61c7f6f05929fc740b47244568516ca25e26f348e32fbfe009d4b7749ffff001d3927dded","010000003b4021f030b48d3a1dc91f2c3f6e3d42f39422211b5c69ba5803dd2d00000000ddc0493604591572077ed7983474a0edc0822036dcf1a6030f51a28876693ac3204f7749ffff001d35e760d0","010000003bd00a0f91044a9bea84e32ec6cd312c3337059935e4523764b1a6e90000000069621e7749d5df56a0cdeaf5e6269f579d5629d9f09b492e767e1768a32ba5fce3527749ffff001d7e5b100a","01000000c426d7d93152ede8008866013b36c2a267d484358a55789690aae5ab000000003c371b455b5ce9f070f923cb4b3a5faf7b05f4306e7ad50d98dbd0be8bd0f0c4b8547749ffff001d26bfb678","010000001ca008c26fe1a028c6c12dfa1c59460ded220867748d4687faaf30d0000000006f3ce32a35a323835873321682e57c5b0649f5571867b29a6b1ce6e31e87b3f191587749ffff001d1ca592f9","01000000e07fe53bb757799a3ca99668fbc43db4c7e70dd61914f006e857e55300000000b4ca4e7109aa22bb581c228bded8fefd6d10732699c7f64fc2cbac3b9b9e1ee8725a7749ffff001d009516e0","0100000053260ad9c331356b6773818723112719b38a47f387ff4c2d95f2e0540000000040b57701484efebf1736358f0c270ad8c68a3449d50776f4803b11b6cbd509dfd85f7749ffff001d25aeb59f","01000000224a4085239c3964d0553bf1fd86e63ae53d749f08654705b135fef6000000009a99218ab79dde0f01a2ed2a3e3af06b19dcd17f71aa6b7840a407dbdbc12ee2a7617749ffff001d34e91698","0100000071ec5e6bd5e39013c88abe63a09678d1ab8599a02ed20f9f9b4ccc5b00000000e7014655fc290386f31c0e814dcf0dc6ec3ca8c189733004f1c13aaee4c3c7646d667749ffff001d0577568e","010000000f01a989da2f370095e0bac809eb73e66aab56a2e46a145c2b1e1b6700000000b4de311f02c91e2732b80631e4e9f93c6a7be7f73ff20cfdc3307374621caec3916a7749ffff001d347d9982","01000000581c28473965dc082176698b18dccf7cbf3a8642005088e9950ec25b00000000a9346db6478f26947731cbd801e0a0a025cf6a2e28c25d7556b916bf3c22f79ed06b7749ffff001d3a71c105","0100000010a2ea9b3e8cd8b0454b5e8e30de85a9a4c8d1a25bc9e32f7435865000000000b3abca1ef08e803f222ba7fb3b5c458582825ff007d19c6fa6d9e13446da4603946e7749ffff001d746b4b0d","01000000329978034ad899fb4810fa68d6d3d1265d8ea3cdcbca59463b6b6e140000000094a432435906d1256b2cbda1a811797fccb0e7c7e7dab85883bf16628b27ee95806f7749ffff001d34b5d791","01000000066b4c89b5d097317a89c835f346ad2db06ef81493e5b2848be8408f00000000bc6580043f66095adb59fed74d413b174ed22a53aba2cc69cd1ee066d69b165ccb717749ffff001d14f80af2","01000000041642bf7bee3d1d94fae3f18f94aed41638fe070ce9135a13362f20000000008b221b345b104b9f23bbd52a0b05aa769a0c3510e6451a2e5db10f08dc10fc3322777749ffff001d24488d30","0100000019d5c57e66d3a66f4c4b5c2060119cb64e01efd53d694684670ad1ab00000000d5b7686dd19ba01ce4cc3ee4bc3645c1ed473f5eae0aca4f8677b9ccd7a3c56e76797749ffff001d9d22350b","010000008ccebe12c2c3a1068cbf283791eb738ab865682591202f2341346b3a000000006467195b9db207a6cd94dda0367aa893d1802f876703b4fcacb7e845f42974dbb4797749ffff001d37b45f8c","01000000304d4b40d28ee19d1eeb4b8c02a474484aba7fff2ad8bce18041e1e7000000004194a4aa6d2434af9aa480ae69dd50f8751080fd3fda5e638761816265da00b4647d7749ffff001d2635e923","010000003e182cb7908df136371312d4b66896aa25f17aad2e3bb6971127620e00000000d6100438ee64dc6bb26f69958d4a8ec2bbe48aa21274022a565cdec423f34adb107f7749ffff001d2d2cdd59","010000000e69329d90a92288211f92c296cddaa81c12ca54e313b370c809d0ec000000000fd76820e5dc8c662d2c811c10f2ab27ce3722013e7fb4920f6eb5d05137d58000857749ffff001d2c50eb9d","010000000ff45fcaf8f048affac0e10ad691f95f810539a8b00108062b15aa2b00000000775cb382d07994edbd9f32dd7a1b514575df7644ceabf9ef0e1fb94e45d1236e70897749ffff001d16f2edd2","01000000cf578a234f330c287354e24234ff6b86d6ab9e4ddd3e5ba71a6bcbf60000000072d12b99bdb63762bedc5db30bcffbd7903721bc736dd683de37b1a3632f90002e8c7749ffff001d29444816","01000000c1397d4a33adeeb3383803e9ac3db4b2c2c9d6737cbabc13a534d2460000000089687b66140ac9874656270e066ed7ef81d5133ada2d0133f09322a87b1617384eb87749ffff001d07cacb0e","0100000002b00072521da99060696ed696b46f88ea0fb5c678a9a78b3eed4a9a00000000cf6a01d16172ef0e1fa6699a8a44b7a7b407595ec13652e3501592d035c093dcc0cc7749ffff001d2e87955a","0100000065c37f916a28a2504d7bcd680b5f396b6d7d986f8d74e67762f409c9000000005d6129e4338dbf443978850aa498c60b60f2bf1e0399ad4d51fde21e8c9b44e0b8db7749ffff001d7556e347","010000003dd227beed1f628d5bdf952f0a1118e07a015c8fdbc33e97bbbdd3980000000079fb6145929b72ecfb989b8279c91ed39fab5576b42f513b53c5315e9cb48baf68dd7749ffff001db19a3805","010000003fce37dc513706c1aa6675dde04b6905b5692e17ad1644bc8bd49be700000000da238aeab8c9d2750a96a41760b38fd652ad6fb88411ec22405797856f45b39bcbe47749ffff001d01b3f87f","01000000ab34a952a20ac1c386706a2764ea48fb332ecca11ac9d962b712a7470000000006acf574540c016be6f6f129147812fcb00eff2b55ede3b12b4aabc7cb682003e3e77749ffff001d04f369a4","010000006154cdbc7f40c7cbb7ed2f7770ee885690ee69bf3cb36518d8d2570b0000000059a86894859b24e3d12fe1a5e7a026e9b65cdd1c0a89b89e1a8157628a6c73bec0ea7749ffff001d36721f7e","01000000205b9a75c45f9b7e464d6dbb128f657a11c2294cc4429c17b934bf4f00000000761e862f799428fcd39a1065ca84582fd8ad76e5250c1d832919ce6c0d527fac8aed7749ffff001d21ca99eb","010000002de43b1dda23498aa1f2e621e6791f5dc472e801d4066eba9f51e90500000000b27da08f50cb583071c7e4e00a04563275fe20abe89e23988485d82c3729541ed4f27749ffff001d2d913c57","010000000aba105335bea556ae312095f4f072a26a57154f8b54a15d8c72f0ff00000000d2131f25f2db2cf34eeecfe896cdf26394db0a33c714205c3869e199a0f01ff54bf77749ffff001d263b42db","010000008eb75781fc416515396cc48cda5f9a0462799c0082972a148e1c67e600000000e5aad309d9911fd8befe80937c962d4f5ee131eb9b3d371ebde957fb6a64e86c2dfb7749ffff001d2d7b107b","01000000e502d7787b81cb01326f11988905609b7e588ad73864857fe3dcacee0000000042fd07a16964a21e1e4e5b3e2e39f53417731137a8408ad5530d29d026be4eb477fd7749ffff001d2ba39b29","0100000035924d030b50e3f0f3ee1ef94b600f12ce997f6920c30b6b43cc4ef700000000b19deaeb82adad8c02b679ca252bbdeaa756d842f7547ea2a82c595e10e2e56f2d037849ffff001d27c68bd1","010000005a6e592ba9bf47543c94101f26181be626ec0c83632dd4d7e5519d37000000003f00f1859ccf4e5a3f9ff89ff102219d4915c432aba514275798ee2c5db09d5868067849ffff001d6ebf8107","01000000e74c6b4818508b05f7d6a0d9b9eb20417677c328198583a04c801a2800000000e821ca554049afd32c04c4ab0578246b29172ee5dbdd07c7aba337cf2a1f60db5d087849ffff001d15a16828","010000002d25dedc86cef4b0c3da258b2aac5b4e05b82194da67bd0e75d865af00000000ec3ce45a28c6a6a957556753445ade69fc100013439801715b2b58916a5a7ba2820c7849ffff001d13bee4a4","010000001e9e9908490f826a80f146b2b6f11f29d12fe093178f1abb3ef3bdea00000000ad2c3f9f44950afc83eaf488522a07f5b9056c09b10205fa15fcefa23d45f29fa4127849ffff001d35e44c04","01000000e7c182732f874d1712bd388c910f1267161a359273fac1db7c9428d300000000ed99a7352b8892db266f87d7c72553e84f4ba05a3fdf0c843d89849b7eaf00790e177849ffff001d331846fd","01000000b547df785701807a72533898af75d328fdb82cee6946ade1256568b100000000d6cc23eca8afa216afad800b2f20af3fcf79502e32325dbd79bb551513e0e757bb187849ffff001d2a5b93c9","0100000036081f459ceb0617c7437d673ffad27939bf3da79157b2954e1f90f100000000e5815dc75841a9d506f18fe80d9e402a23be7a679fc5a6dffbab256b2fd4d4ca4c1c7849ffff001d337fc699","010000006e2f40748cadee6c228f057ec4a09e098cb0c894443a23e243467b4a00000000eb160b10951082b2ad0b8a7779d62422a844bfacf94ded185c0e583a1d6ecc0aa2207849ffff001de9da870b","01000000e74e637546714da806b7c9497c4d2fd3a171aa9e0c52b501aff8a85f00000000a0fa7ff06abb04f537df35731e50a2ebe21cbbf79acbca1e6adca45c00df4c68d3217849ffff001d2d5cd087","010000004c97fab8af56554a2ad1776678df7480a645191edd49f78206e4855300000000df24faee1e61d47f7f651770970e5caf5815ac81f11608019431d865f96d620219247849ffff001d25ab27f5","01000000f62d645da69758e94240cc2cd3a89d95cec1bb892e1097201d93566b00000000db4f1b02438dd6ef6d00391d3998bab71e9f725d0ca8e2d186faff2be7e2ea38b1297849ffff001d284c5ca1","01000000eb1bef0d3491bd50f711d1ecea17e9f0e5ecddd15c2597179649c32400000000489378eabc1c9d403d11b6d2ac60a73dac0270d6094373ad39690d54a140984e7e2c7849ffff001d271f61b2","01000000b16d6d9b0b25f38e620de4ac766b382a7b98ab70f5eb7bf345fd818e000000000764dfefdac6537e576f394b52c355a5f0cf92efc8e96737ed4aa078b9bc8537c2317849ffff001d15196bb4","01000000778aa99b59e93a7c9f4fd68f1c9630ed9f026dc78b068d3691f4beb70000000085391184437e7019f2ef235f387743fa68943087bd454b3667a6715e06f46dff78377849ffff001d04173b79","01000000958160325d8a81d917fcabce962a6ccea4aac3d9d960fb379e72beea0000000058a33c10255764247d529a662809f4c6ff32fb9c0840bd80c6118260d661812998397849ffff001d2684d441","010000007e55e4eaa333f422f783b1f91b947026f394728235e3fe710464f508000000006ac375f217ed383b1788e94bf9e6ee8af5c0eae9a8fa11c27c42b1020b0d6a93753f7849ffff001d09887766","01000000f8bdb8c34bd45e37fd13856d40f4d527aae2807978704d1d38bf75d300000000f12e07ffd365ebb2b48f7dc641dc8754f1ab6e07dcb6a45f453919ab7ff10f71f4447849ffff001d004f3573","010000001fc8e73c4e255a3d6c0b362b66d3eab5050c8fd4c9e20b2ff3506988000000003a9af93cd3a177225eb7ccfb3d6fbf90869110013991ba51db4f5b65f2e2325a39487849ffff001d33c43970","01000000b733e593ed7a8d76117e67107f489be18782a250b5b473e21c064a2c0000000034a8ca286fc16975a4430208aca5ee4049e12efba9e28938a6139a8558f60f17644a7849ffff001d1bdd7290","01000000af2bc3422cef6950a82d957c14ef985f7c6e1cd9ca0e285d77901f1800000000c8b0aa8ab8c1b1e93677b04b14db7924f92fefba315f5aca0bc5e06124385b014a4d7849ffff001d3a0f1d14","01000000b58f17bafffd6b7c6ed16d6a98f7ccb23b5affcc73da83ccb030ce73000000005961da358dae84bba116fbb8ce1ad40343a3b700966363760c910ed271bf17a0ad517849ffff001d378de34b","01000000eeba2d25fdcc811cee7da6d14f702125729c2cf7ba6e631b0a425068000000006d59f93fb759a2d9b28d63dd7a8ada3ef6fe505513312462d1b8321197f5f328a3567849ffff001d2f7f0ec1","0100000041b1a46b0ff71d12ebdcf97d8f9be1e90615278710f0d0bb4944243d00000000ea37c9d6f15719becfc0d3d3ef6ffcd5c0f56371c64a74eeac3113fd9bcd31df58597849ffff001d0418f5ff","01000000e13ef0efa782bc6922da7445682e7b1b0afccffb09b4cb5f6e2679f100000000886f14230d82650e8880dc05cb6d8b1c5f3b2780f5d0d9a88c7af70fa6ecc706e35d7849ffff001d17fd3ece","010000000e29e78bd6d4ba23937c3031c35d29e0190b464360014f360259887a000000001acdf2a4cfdadeb1e18e52b5994d2daf1d7b4ebd9232846a7b6c6183a4470ba067617849ffff001df4cdcc0a","01000000579ef2d032fe38fb8f6bbd021ae682727193826bc1ba73d00e4a1a8400000000e782e76174911a725bdc5b11ddbc977b7470ef47caeed030519ba4a5d4ede979c8637849ffff001d2dfc4127","0100000033397ae02bf30ed11af9fe66f67f151ec17bc78875516ca28d542b5d000000004e28380dbd7c180b28b15e492a24f9623fc8c11cd1b1077531c8c4ee5d525ed40a667849ffff001d27c9f271","010000009a8f88bf2ef6c4f386af78a1c9c040d616078a84bf5459bf1ca82d6e0000000031fbd6a7489a5719778d786bf8846ffb166542e6041bab1547d9f96b2c538a065a6c7849ffff001d3088ea96","01000000ce23c42a8e23474a6442d1b73f77eb1844f26883a3e536c49f01b47300000000b4448d1952d7be438949e9d485d7e7f3354e2afda7aaa944e49efd8af742a1bde06f7849ffff001d1fdf05d5","010000006495a1869bb4d0ae27cc2ea953cf65c1976a3a2003d2098a524af48b000000007cce10a8499aa0fe055ae8050a224a8609dad04b6bd2faa7a9222168d8f3a117ea747849ffff001d2c1d33ea","010000007757c28620c15b8efede8baebbcdf6b88580b1c859075486e9e7fe6b00000000165ab0b03bf081508037c7bdeb6c2f5a4fa4bd059b6f5d1d770fe36e78db8260fb767849ffff001d294901a0","01000000d3087ffa7600e3c546bd117279a9c646368878c838c2fc357cb12c8d00000000287cd00859668dbe93930317b1d4c9b62a099cad35e53eef9f9ed02331ccd413b07a7849ffff001d0471fc2b","010000006c9c37a1ee6352dc71b049abd4185867176e9c4bab2ca523ac934032000000003e2f5826a35b5f911d532ce62bc810e1e6527dc038e95c19b0c5dba2a969e46d6f7f7849ffff001d17191ae4","01000000c4953ff96ff067d0e878eccc85daef3687e29226a72eeb7388a4887a00000000be8e1119446d4aeb7c1154ed089ab7018e46a02ba99c76381db115d2364955d72a807849ffff001d2065b902","01000000d260bd0589be61cca91e4388b357445ebd0d6ab8b0acd70ac328a7b800000000eaaf55cc6a4cfba48a244f8cc8a168da84adc3fc5b3941d76ed6ee5b4fc354112a837849ffff001d063b8698","01000000198cfe5799f34792c996a1ff9d29144f399147ae43a655430bf84076000000003e1eabdfd239c6772a3706d9af45375d79a906557e74c5656b5ec5eb48b71c2be8877849ffff001d17328ab7","01000000b1b25cd6dabf1c29670017dcd934e5cf8365a934320a6fbcfaf5d50600000000b0b2d3b84531621951dd374dcec2405072bb0a503519d577eba9fa7095d24d0b338d7849ffff001d2bfc37c8","01000000d3f6a6c60d81b7958f1e221780147718884b871d2194d4f038e861fa00000000f6ce250c86f5612528eafd3219db21f5c2a61c5c06105aa4e72ffb9a9e989bc05d917849ffff001d146fcae4","01000000ccbfb3e3c4321d62df78d99dc1ff3ca9400769978a0de983ea4dd0b700000000e05c0d86b4047e8549f19ea3f0b55993d8eba892a94d533e78fc1521fdfb65d3b3947849ffff001d2a6679e0","01000000e297d2adc4fea3cfb463b8216deea7464187592500aed33e4ee214a400000000826c361d52e6ce73daee093483e9702143e5a11716dcf211b1edca018ec48513d7997849ffff001d1d5e1ac5","01000000a4b672cdc763b2a2aab166336a1af5f77480169698fa303dd53a38b000000000720bba53e7c23867f531a05a2fdd6f850755cabc197f4472e93d39b729671481559d7849ffff001d082c59f5","010000008e7325b1838061c92f5288d44b3b4a81614de662dec2d8a29973b98700000000cd1d0aa4d378673d10286502f331e1ed477ce4c75d2530403dad61f9650f6f4d9e9f7849ffff001d1ffa4014","010000005605847cb79e854a630d6b3576e34dfc11def17c0b2d84fffb333b5f00000000649421349674feb6e246537e73c9c5cddfed04f577245adec390b38b4f0ca1d06aa37849ffff001d338bce42","01000000866c0449825fd003594dbdeb41a390f93dedebf774e6a0f607f557d500000000e83430991b0a1f852802dd2aee65157d5c0158d13fa80c000dd856522f06c86cdca37849ffff001d3d2f2802","01000000f0aaff93a23535bc01ff717ff4a4e3a3f2283ba6b13f0a5539c5fa3f00000000efd250cfb1feb549788ac64fed205468daa3ef19ba4756bb21ad44296232614f96a77849ffff001d00935ee8","01000000ee912f0ba2c5ebc20910dcf809fc38062fa1130cea0363506f7274ba000000008a131b8d36df6a6489f8f1ed0907a1d20a3b9e5c995b61f98b4ad7527ee098e24cac7849ffff001d281afdfb","01000000795f29c973d5111f793c3358d62555831f0e6d5f1eb1c55b6c09f4da00000000492e55263d9718efb0002d0f32e68f703638674c1cfcff79e40ab137b1008fab78b17849ffff001d08ae6da8","01000000abecb2255e3d2003224818889ef9e129f8f446720e9b0ae992826619000000002534fec906f0c6cea9acfb1c42532048e1e5639150d39d5efbd9996f72ba699624b57849ffff001d360d86ec","01000000c4f08627b000298cce6113be265a555cf878ce9bda401fa57071473400000000a72db155a21d5d7327d619f4eb45fd40c3f10852fa534d95a5238b635825e88476b87849ffff001d16dbe3d7","01000000d93dd3314e1fd1a7c3ba933570891f8f8a432d18e78392326ecf4dbf00000000c342c15e81d155c9a04d6b5153971f734d2d2e6733c54d15ab1c167faa0154702cbe7849ffff001d1fad5a4d","010000000980696feda929f5782fae4199e0e6346a021d929589e1ee8bf459cd000000007e72816251625c154d91723bf894853daa8fbc5d8d66b728641fcb04c518b82921c07849ffff001d1d4f1fb4","0100000038804d317d8831f9420f8bbdcb3c5ced27ef2ef19bd9ed73a816729300000000a4084953f3f87b3e31aa5f3bfb4002348076fd5356b2d5a4cbfc5587e4ec821951c27849ffff001d3406eb23","010000005024030b403a902804ddf640ce73a1426d9d975ec73abae7c783b4d00000000065ad95181f7f4699a83a6277b830ddcec05e0ceae7269038b07eb34cdd0a1bb448c77849ffff001d04fde082","010000000e1e1127126c852dfb676c06c9ab0c27abbc8ef25a8fcef9cb4d4f1700000000691ebee3c735b607e344897860ec2a87cf92f583e0a8df8a7925696b9521be1ba7c87849ffff001d06d4c2d3","0100000073fd64c0532a6408695ffc8e0e884ff377754dc96426a1a3edf6199500000000521053460e155732a491978de1561492f596dcd1e6a9a308ba63231a20ff561935cd7849ffff001d2028e7ed","010000006e878e69bc42140029afd09d8097d74bfa8d200cdad981eb006729e600000000c39b272bf53f767892fef1fbaae480fcb9d11aa1eeb9654c9c1bf2a7212cee521ecf7849ffff001d23467e8d","010000003deb1fddd8b5230204922159387aee66af7f628daced5622bf27d52f00000000e40c5c84e5f761c14d74e0779fb75f38131583c3f27a823674b5602189f513383ed17849ffff001d090d02a9","01000000f328ae1986fffbedcdba7cdfffc996bad0eccb882f6029f6d31a510100000000c4e1e4d67e69e40a26c7311899da60f89de6e165c3eedbbaef11b1dce9f5d6cfe4d27849ffff001d225517b8","01000000298ed8de6738861af71f2b6dd1da29beec4bf2fd51e93bafe90daa1e00000000448bf8a41325a22d200c29f1a692e355a9da5cda0dd6fad92bb392bef08af8ccf0d47849ffff001d15ef423c","010000006c773a084fbb5d19b66ec45c8c934fcf7475e0cf2ea88f0850066ce7000000009fbcccf237ad977a4c9c1a48c71fb3d9e156a50079c8be8f42ca03d3f82c2a01ebd67849ffff001d18c68dbf","010000003dcc9c735824356b3bb80d41edb507af2ec4056640b5c5b9a0d240c3000000007923584f7cd0e62fcc18c45c301d846f92e0ff19c9c5154ad39168b8a90d713190dc7849ffff001d162337c8","01000000a74f97dcec2fc8739937d492a8502017a2c1dfaad34b7235c30f77de000000007be9960745e7411917b7e121f061e1cb9ae286c28c2ba13d3f0a15f1d980e74e58e17849ffff001d280a982c","01000000003ea8b8e1940e49feb0607cab49f3225e041d03ac74875b1063b18f00000000d9767f694a6cb00f10444b775211c3774119a8e32bcdcd5c2a066428a0aefe2805e57849ffff001d123feb08","010000005934123befe21952ae1b4cd60c21180d4284335ca3c1cf7de44faddf00000000e90e4719e8f652797937b4b06a492d506d291f944263de562a509fe9b4597e0d08e77849ffff001d164d9add","010000004ef329e861d34da233db93afc02a266c734402b18babb71af284c958000000007edcdd2b78c0a75a13863f7e1609db7420e60bc8896e953e5779f60e7976772cd3ec7849ffff001d19065c25","010000000b852f650e9db5df285570dcf47b49f3c21dc6b2144a1ca600f7d4fc000000007d733c34cdf5d2915a722e1e0100bdd32ff96190d00f0c1442278574ac9ba23a6dee7849ffff001d384ec81d","0100000012d616ba21469b1f9d0e66d0fc972a4cec6c3f55def1776670e2c2cf00000000813804d47e92d6abcdebbea4c514b9ec0a291441dbe518d33382eda510deeac856f27849ffff001d3806d21b","01000000ac30917d6804be3fc6a391913267240992e96e606132dea48ac37cfd00000000a3a463cd5206ea0a992526286ace18d0fa92764ce5d4b88b5b26efe36162a656a5f27849ffff001d65e77e00","010000001ae515593af87a82fb23de0ae2e1b63e7ba1b9271104cbc742442b520000000026394f5531605066b7d306d945909a585b455e7f9a487031f4998b77e5507230c5f67849ffff001d240be98a","010000009fcbf6a30845b0c790a38871fc9614f0db9eb3a0bf74544624638e7600000000a45ae59944ce57a9cc57a0fc700152bad761edb6f65dfd7532230c60b17e825f19f77849ffff001d087ff500","01000000207b8c50b4c523ab68de3216fc389ed0a4d36d9edc2074dc5a44930c00000000370ac65d25ca4864aa2ef40e6f7c00033a9037cb2a79adfc56072c365f234572e8f97849ffff001d25aac22b","010000003f112163e4c9249a2215c01698547ffc3ff2dc1c1147b1f7d70acf070000000095cf01d2567c68c9a994d4093032b3c985ca3fa633a1305da979970039f9cfbac4fd7849ffff001d292e0740","0100000055850558b578709d8986f6b7c08868c1bd9d72e27d2c8587156444770000000054bc06e24e3f30f169cfbe055189a5e8c799f4b7dc435398b2d529fb80025ba585ff7849ffff001d220f687c","010000000c3c37ffd23f049c392d68386f5d5ecf75e533485b1abee14133527f00000000b8564bc8451ce7ac6312c635230f4bb40aa0b325dfe26206249c638f9a77cce1e4017949ffff001d321205d5","01000000ac4958c4ccd95c5a240cdcaa42b5c530e68d1ed78e09455a25a3ce3d00000000ca40d89454fa4eb72d1716425a3d5038fa58c3cdefff9a63f383ba6c05bc940c07037949ffff001d992c0a04","010000004280d4d2da63d81547c090e076736bb6bd6269330de9b1bf7eef5cef00000000b644b755408e6977df94670e63ccabdb2a27fb40dba004b135d9fdc5d69ee07e6d057949ffff001d026e8a83","01000000f0dde9d300716238bf1408a94a992c1620e9989b632e6a0df0c62ae80000000004ef8924162e619f476b19122f10d3aeadbeeaa10bbc7d6cc5030fea71d590c387057949ffff001de3815900","010000007a80e409b84474ba6ef2b4baa0d9c25f9cd0d1b54307cc7f0554f9200000000057e42cd173a31bbd5bd37952f96870670f817686fdc9c5ebfb1321681736009744087949ffff001d32574aa2","0100000075be9df6d865f7ad5ec17d7e0278b1ed0dfeb49f004a51ce0d0999ad0000000006b8045b63639307b16af96c7e00a3b3ffca2c5d4c64f66613ab081579dcdeeb020a7949ffff001da3854108","0100000024c75632620de4a837bfe613c5308d19a88686bd33d928a942ac270f00000000e84988f7c55b949b053cb58c18abeb743d96b658e0d9492f93cda186c1752515b51c7949ffff001d4c35ee28","0100000065ae7f8de9f507827ae4c5a80e83ca084eb9ab104ae1afd12ec05ef60000000095ec9ac8f05a22e7148572fb17657816997296279f9d85ed17d59116456aabb1543e7949ffff001d3630ff16","010000005c0a9a56605e4566669d13c1cf2a0c937202d32e16afb42af6619a6a00000000b7a97dfa798e640555f6c9d8876b67014c76366a4c674b733898eaade51354cce3727949ffff001d2cd0a7ca","010000005d0fcef3d8f77b08a76b9764f6bc6e13a7518bee2663f34cce1b43dd000000009fc490a0b08544498a34ba6b531fd94e7cb251bb8eff6f5026f32089e80b9b6653767949ffff001d7797d205","010000000466137e589b071cefd6051596ebb1967d8bece4ea7b327d1397beff0000000041af5eccc18abf10c52a32e733e9e11c0185d34d5d3173262233289f37bfe938377a7949ffff001dc2928112","01000000a575f9ff2bb00ab934df0ba9f1627ca0b830e058f4660245bff1722900000000b5546bd4fa257dbbefe2dda26f4ddc97f0faa6e590f2fb4c6e805c106ff48599fc7d7949ffff001d4a271712","0100000062b405a7904969edc9b53d3db43d5a925a1c34da1f8b84446b33b5e500000000e4d3bdf7fd1ba0c7c8293ef9bda1a7ad164c6e9c471cfd101785a955ce1c0d434f8f7949ffff001daab76e1a","010000009e318b699ee42f2498ae6efc2686ca0e3266b8980b4630a9fb04b7de000000004102d61015428a214e90acf0f3a40766728dfa40298e030b689d9b2c87fd0a2187a17949ffff001d62355c4f","01000000d74b4bdba721093482c3f1e92c3a293784f6fd240afda77ef8c48dd4000000009644ca95fb229a4b575cda2af15ffc97047c0464c7b68d08988322c24a70653477a47949ffff001decb4040b","010000007e87a74af1a85a80451e763eb6f062d4c4fc63767ca17318fe163c61000000007328e408b704214b3449d169d04f5b7594d2055b305ff5bae5d491ca211cecfb9ba57949ffff001df93d3904","01000000083c63fdd17c31e9522eed1b4a6da5bb28b0c57ba4e39e47a00c05e7000000000cf4577bf352d27c9bf0828778872850861fd99f423097a1ad22f040c0ad3dbd18d77949ffff001df41e74b9","01000000ebceeda5ab770316b375ec3c9aed2d455f62b9b2b685470d7921dfa800000000920bbaa400d67d9a4c486069d0d15db8e0203dc8460af7f51ad0b8b29daedebaa8de7949ffff001d50ab931d","01000000f5880bc288da7e558e04dd4e54deee612aedea7de15348106c45ae14000000009f9975a11be2a035722418e684702ff52a54aee597ff27ccbd24bb256f2e68cb51e97949ffff001d37fac241","01000000f2d8b5f51d31e988f024b6690872012a21bcddea5b2260b72b8dc2c90000000092b4e7920b3398155bd6782afa967cee941d2000b48d3c0a9c42b37e539e2ecfe2e97949ffff001d0282d7e0","010000007560d9a257d2c545b29823141794e4d288570ca77ce77d992c85a7c700000000c7a92397114be6019e0ad218c18483852d6ebb7f63c9d98173f0d93ad71bea4845eb7949ffff001d373719cb","010000005ff4f05452a14bd2a0a4c5fb7d5d499bbd1c54b426dbfcb6a86ce05500000000619ff203a9a7e9eb7bb6c1ad69764292d417c939fb40973ad41d783236cd37f98dec7949ffff001d39d7f32b","010000007184e4e2873acbc78e7dcf6568c6124744f2d3bc54640fca76002b5e0000000074dcf4ac0c6ebdfa4f23e5b41bbee29fa5dab54c506f0ada2ff77509e7b35a4694f07949ffff001d03f16235","01000000abd24f2221e0b6d4b0404defc1766b2bf8aa335c005035a822f95f8700000000f22c63ef58020b6106010b0c78a3f8619e6024e2158b9c32ae69734a17e5bbead6f07949ffff001d1a9d5c19","01000000097933c5e7cf737a56c01ff9f5e23270b0d16dc3594289e8a5fa72440000000050e82c2e5a3195da8f2354bf47a61105ea31a9138dbe9a00dfae718a49143ce9eaf27949ffff001d1b8d403b","010000007c7c3b55af10f5cf72c4ee3a090ef782dba9398d567dbd56112fb1ae00000000da1fd42cae2b314505a8967c90a8f2ffb878242496d572b31c1eeb67ed9807d40bf37949ffff001d23a35d76","010000003935d05bf9402e0091843b3ce1342aa3a6c675517a26687d0a79622f00000000d7015add3cf8a58798f92319a9947c5c47313374ad4bf3cb5756ace736a45f9101f47949ffff001d2da57804","01000000b09af2d0353fe754c065b0cd5b3edf067a1809362c99c39fa574655c000000006b44ae79a753bbe3807293e6f22c1db1767f230938844997ffd153295717c5d2e3f47949ffff001d8f028e00","01000000cf57bf634022ee82fc6efab63dac370d470d7d40890d6eb9226c644b00000000a24dd6e686f480d80c263a21a8e5f93b1f62f5ba0c7ecc328201e07f154c1faa03f67949ffff001d35469b19","010000000c84384f6b1ff6582970fbf732b3c58a8334c00cea6cc38639a3072600000000fe963362a95aa94d1e0b50de6f559541f31d7243584ebda0433d6023960e913f24f67949ffff001d142e99b4","0100000082dc944ac5ccaef2d3e7747f901053947cd3e4229787290d655c448a000000001e3b69c90e59e945bb23e37461abdfc0c2104e805c651b8faf76d4f83b3f96a235fa7949ffff001d5d826c13","01000000aef17c35a2453458ef5138622ca0150d609afd99fdc3cc014512659300000000b052a2eb6810bb4ba79262af8f9b65a6e9a4c1cbf873cb5b1e3c9a93fd7bfa1255fb7949ffff001d0053a7b1","0100000013b1afad979c137bdb84e4f1ac0b727d9b9d07ab2d772274fbee7a6f0000000059b273a6e8113ca2123a449b2f61d05c4a0d8ed532b29d9edb5ad32a472b17b3f1fb7949ffff001d1ee68b47","0100000065b83a3ea127d36b1c400b1ed14a523736e79e53606ce948db62614d000000009485e9b0e080a052342b124bc998cabf6dbc571a7af921ce263207f064e7a5e059fd7949ffff001d029fea3a","010000002861cefffeb1a3c4cf5d2bc4daf086f6a632eeec222870cf3b0e47e9000000006deb06edb5d25eaea6a0ddf448ab1318da97972f402352a389d83603f7be7013a9007a49ffff001d21fe51ed","01000000b316787aa35ae1d7a282c15972d3f5ccea67ad752941b97787d65ba500000000387620e7d54fb28d41eb430bc185711f889882aab97d4a79959a857187952f551c017a49ffff001d9973c200","01000000e0271c03d60ab1df1b2f66b74e5eb7807e44a8307454605bab5541bc0000000075af513734975ea66e40ea7fa298ab20d161204a20804b5c2ca55f703504a4c66b027a49ffff001d1d619d70","01000000ba279f433893392adbe9f24b7c8f75125fbd347f95203c807dd2e00300000000e14f0eabbd2064fdc948d1278aca778e122ea3467f5acd3bc22d9315ac0e665ea2027a49ffff001d2f51e005","010000001efd3fc3140aea35039b33218a4ebd938bdd4c844c26d0ca2ce087c900000000066eb963a7aa40c6d83c5748825196907ba00da87f62401065a14395af2fb5c555047a49ffff001d34573bf8","010000005b8eeb7292fe193aaee6c4febc4d14c4ffa45f326d846fa14b5a0b070000000023c606607971a633e6ed00b09f0dd96139dbd230d0eda70fd38622b003955a9787067a49ffff001d3a4b148f","010000006414afc98f48bd11092430289b5dd8d8d83a419aefb1f218740d78cf00000000214b4b138007041ce0985a08140fa9ea63d2a5ed31945a7d21c70ed4f10eee3538077a49ffff001d1673b1dc","0100000040cdb23b27c59c4ccdf9c34cf79aa7a19ac840bd6660b91d882bad7d00000000b28dbe89827ea1c22f70d1dedb959cc18a2bba648f074f35c21b6735b629f8f815097a49ffff001d1d3e12a3","010000006bdbad4e5746b7e288a966ce72828ff63aee25925293c8ff0aa8d24200000000f9d1604d7758537f701f63f0345e617503380249225cc3365f7e338fd1a4aa28260b7a49ffff001d017b410f","01000000a78f2cd4bd3b97b62de12e695d8da6566001e0e98354711c298defee000000003c2c4a5004826bbc82f228a950668484154349dc0746ab094ea421b68978a2781c0c7a49ffff001d36584402","01000000594a0e3c57bd35d0cc88659d2881ad15c134cdf0ffc186bc7b62a33800000000a76ea8505f3ecf3e30a5afa13fbef39a1053ab0dd616f7172411fc1825196d4ba10c7a49ffff001d17f41838","01000000585b951bd632af9530ebc625b9aa398323c1c22b6fbd56014eda86f40000000018471f44308928be5a7e456ed041c55b44a9cf0cd4d4abdc42ddaf4c582d7e32600f7a49ffff001d29da6ea3","010000007ab5b30cd3bd9b535764729a7a9a67ef560cfac274e92b2b6773741400000000a18e02cedad67fc845b8229ef89d75475324e9babde0ab47c55c74748315602ccc107a49ffff001d336fe6ae","01000000033420ac61b4f8d108696f996d90cad56705885b62ffff3f1d00430900000000123951757236de86982e38233f9efcd73da5a7c147a938ac5491fa5cb6c63baab3117a49ffff001d38ef01b8","010000000ae47a11a18d19068e83672c47c12892e896144d9c8cdf62888ef2ed0000000075ec8816c4dee200864403e7955c84ddfb3023f9dc14da98f71b5ab2dde725b722167a49ffff001d2ffc93fe","01000000497ec6696b198c07c1fc2bfb19b506c460b0ed1279159b826d60090000000000f25d20253687ba023bb60ca0de8250e0b8a398d51c26b58dbbca935a9a4c099ff3167a49ffff001d141fdb2b","010000005d56d14fd47d4cff42088afda1b05f84be88e18b624ed6662861740f000000001f7398d55f5eb9a4da70da7c505bd73aa6784876f24371121aa59d9fc3e09d12de197a49ffff001d2e5599e9","01000000b864b49881d2c35f87d370449eb85c39f796f3fba4bcbbbe591e586700000000dc13cd6e4fc67c73332f238e8358bf1a41699964b6bb0e81e501e1eeacfd71f7621b7a49ffff001d1cb6250f","0100000034af4a371818e084823f10663c6bfd81f1e26f49702192b4ad77c27200000000b531f944607457c781627218bac7f289ebc43c0829a2bdb5bff8fa28409ef6ba761d7a49ffff001d18609f39","010000000c19930b92bea74f1fa7e9738148568cfde6e8671dd3308a75330857000000003554fe00db10f0b4b4fa9f4502577da495ba532cfbd721872ce9ffb1e6f6fd3dc01f7a49ffff001d241c82f7","01000000546617e0358ad5dd0193a7392bb3c8b800af56add86606d45a090dd900000000359ac7e38f9a0ea25256c5393a3932d95dafaf808e6b28a49e89cefbc145b43d07237a49ffff001d223b889b","01000000a8b15c4f96f1005395ac0e8cdfe3c5460e2f3aa6a98c536ca5edbdc6000000004315a51b88b90c1695bc8ec8d85a309fbdfbd3b12489502e7ee82e1e50c178113c237a49ffff001d1f29aebc","01000000bc1f753434d0f5265fdebb5494f1c424c8cfd0442b69397bd96c348f0000000001e0108ca4c807cf9ad2565b481d84f37ab048d86642e8374715658b3a3b19e7d9247a49ffff001d27e1b911","01000000ef547ed0efec5122f7ec4bc7a57fb61adc40bf0f939eb760292c260e00000000f9e30bf9015aad78197540867b1742582cde054230e877999e3b9f20a8d3c2da4e257a49ffff001d17150e45","01000000591f70346df6011e2178cb7ec9c2274d0da318c4a00b4c9af95570a300000000994952880c671d2cbadae26fb4fe32c9faf051a51f925d06a4bc4c4f8b95dc963d277a49ffff001d43f4e804","01000000592dc10d420b6fbbb836822192d0d1748ea24ce136a0e746a5cb67ad00000000b13b5522e996921b9392d194b639ac6016bfbd9bdd73e62e28a937263764c70190297a49ffff001d174b6f1c","010000008b5c9f93fe32b0e171d8d1bc21c87db5d65ed035e73a62bead0ea49e0000000039f7f95db59e3ac114378f9f2e3f18ae6a133dc4f838d400cc4a05bca8af7151ee297a49ffff001d25d64d83","0100000048e599d6f580c6c05d07d7b367a7d28096ac8848a058906c38e455cc0000000002824fa8f244b47f17fec270adba7e63c201ea78ca61d3456b7f2151074c94b1612b7a49ffff001d1c89779f","010000004bc4aa73fa562e6ad98ab8d04a26efd2ff3610b43a09c882e8bb044500000000a5af9e05f53a9f9e9b70adc702820e45cdfc3b23d6f2d36814b6ba44584b241e462d7a49ffff001d2c166b64","0100000036104c9530ed0ab66bbf72e1f8dbb408b6efb003ed424334bc085d570000000091724901db7c0677ac43be57d10d6f965b5ac516c876db5f097a00fe82204074ac2d7a49ffff001d15bdc5b3","010000004a1061d414931ae33d0edfab4a12bdd04c252af44cdae5721c448b3c0000000082bdcd5364abbb565f5db88cbb3eb5e018b278e8b2b06ff01020f08d4a2280ab09317a49ffff001d0077a945","01000000941ae3bfc570b4532cb4f3bca45c312d6f27c3c048d8f76bbcb0400a000000007f2c3b4b759f324863554c784def950ad77e29c3cfe50bf34748e514be61126ff9337a49ffff001d1c072bac","010000000780b119800cb56c3d4a92348e1c09d33a0acca49822c0fe7d173566000000006053976b80d5e7790b655c663a8a4fbb9ef0b65e75e4da70dda7ab204f120d5598357a49ffff001d28ce686f","010000007447f538d076648094d6bacae3b4961bbf90be705a3cc52df9ee68a900000000b95124b6fe3c84f6a8744831de8505d1c8e24613e37887ce6f7211c38dd95d9a0c377a49ffff001d2bc2591e","01000000f8f6c3c6543ea7adf59e3caf39344d814a45b9a09b6709ee01dea10a00000000e7bd4656a02f4726a79204deec9989d68b20dcb2da77816fcc4a6c7e48aa91f268387a49ffff001d16b6970f","01000000d909d758214c10fc2ba33554c216d8c249de671588f744ca2ff577300000000001c1277d1f8b477952975417afef71ae64688803012d3e072092f50f12f33daaaf3b7a49ffff001d00ca86e0","01000000aa69a4fd2f787e8502ad3deaab0439ea51988044d28758f6bf776ec80000000049139f5698542075f965ea4251aa51980dfde5649d0cb9dd8379e415844b9c97d63d7a49ffff001d33129fdf","010000000aace93d928813abfc9e6e6c15deb93b12d9269f205d2bed82362f6f000000008bd55385d3b7335ae7d79784d501137299aa2f6d402b9186c2ab76c46a0b70ae383e7a49ffff001d3a0b69ef","01000000d0b23c82236aabf1741b01c3e6b3d9bf1f4d1302c0890e7fc403dcf900000000984904d08dfee0587185ab3d67060c177fdd50d0510ff6c1888dca059a3dd6c071407a49ffff001d3455bba3","0100000018fb0ee25d52e4c46f414a02e11815236e2b0098714fd3d7c0eadb12000000002e199b3f25b288a944498d3b5b934e6b3710f3e443024f85c65b1365773ce1a104427a49ffff001d099a9be0","010000005a0e4ebd22c104f60052e6ce3328f2e8075d608fcb2b6fa91ccc5cdc0000000078c12c19436460524a589ccc425e06cb156beb95ed1875fe191299f2f22fa5d9a3437a49ffff001d2b0cedd7","010000008459e4fe47268f6d41417ae0573fb00d4f5db6b60e3de75b5f7f1d3e00000000822f8dcee9eb4e1cb238edf0f7850d6350de55fb9e437d9322b5c1f27974c937a3457a49ffff001d238d1c58","01000000b5aa830d02580b6bebec9cf7684421595fd2d9162f487868c153b6c10000000031edfa2085ebdf7c8a056862976e37b0bc95bad8c1b6b66f02e014a9e6e9e3bf54467a49ffff001d25b433a4","01000000193f073f98ea7d8fe2d83b399e192820cd213626abe89a0e2b3e0dd500000000d2805d503b7fff22bf59c54fc455f13dfe029fbbfd33f4b87144ff3ff728163609497a49ffff001d00cbab05","01000000c3d97b7f0bf8110a7441881ee04f217e65b410aa353ef5e4bd86dcb40000000032fa7941877750b99923a6021d47c5d3f4cc6c024fcabea639ccb767534380d54d4a7a49ffff001d007da24a","010000004a52d9c3b27c93523e2ebe09bff962cc372ab6e1eafc5806ce6cd160000000002b7e0d2f5236c4ab6a0880eb10bb60f3b1486be4114daf13a74a9bbda18d5c29fc4c7a49ffff001d19e63d9c","01000000d148bd8121e4470d2a57313bc03aa733734492ba6d74acd7df7960cf00000000a16a3d7fc85122c82bc461c85e228df5913c90f7b04d64fdc9ab51ec3a75d588864e7a49ffff001d354247c6","010000009a5b5745642e86da417694d6b1d429e182474b55cf9955a6475a1187000000000aa605f51eaafbd862e4a06a4c471d92f698881fff81cf53d288e5e82432883aa94f7a49ffff001d2be937f3","010000008d1b9066eb786e8ca25ceefcf25d82679cf10772b5ab68c0913c241500000000a78b6b3232734320e6dfced83530abe1874a7847a1656cad4f6690068b79bcb325517a49ffff001d28ca70ba","01000000f8739e80b975cb8922a5c22c0786678f8d83bbff628884deb0528cce00000000ff06ec40ea718f7a431cc9163ae309f9e093f9dd10134a0e07d0c6937c7d2dc741527a49ffff001d26b867f1","01000000e4ea4dc0b43f17e903daa706651a84faf547c1bb8c3b5dc8616111b70000000002ecd41694327609bd6e22fc74500a6a9286e204778486779bf3f95a35d77180ba537a49ffff001d1e65a852","010000004f21f2050379b332b964060c2395036a8c4fa76aa7aa132d7ce73b2a00000000ba0675dd5c31b163f92e390f994c8f09a759cffffe18f26564e3c77dc32efb603b547a49ffff001d2a73eec2","0100000059ff8a4ae351ba3afaef098babdb31960feb8bffddd63241426201b500000000fc3aeb1bc7c6dc2fb9bfad72185c617c03745bdedaffc6991936cd8df60ae524f9577a49ffff001d3a632a61","010000001f619296d97b61bf80e0a0f59466187defd4faab44144c7e64219c3800000000a585615cbdff19ca868f3dbc7308119f8b7c17a58f69aa82c67ed72f61f3febe2d597a49ffff001d18ecb1fb","01000000c1fe9cc23d035055b47b3ab78c61550166a32652cd368cf44fc55b27000000006e3973b0977c3c04b45e6fbcbf73fed5b539b56125aa14dfbf5a931ee85d1e56da597a49ffff001d1635b5fc","01000000093eeab544c2f4e277a2a55a2cc33359ce14cb0cde60554409b007220000000064b1a1d6c6c20859be6b96d945ebf2c2d1a0277a525487aa5a1d270a26b1f09f545c7a49ffff001d44bf4706","010000008b72f3040b1d2bde881d12233310ad8b3d56c64eb7338054685ce93300000000362e46a009acf956b2afe48f48edbbab535a7b79e3536dc589e1f5eb83ab1664665c7a49ffff001d340c5633","010000003df04b967ab71a249fced3ffa582ba185d73b18ef802d874694f4746000000000c3a9ae69ab1faf7bb27527d7862b0715690e5be048833db593d648fc5888079045e7a49ffff001d073a7c5b","01000000cb769bc8b18776718feb0ac9da7e6de994cd346a9b00042727bd955600000000755b6d79d4977d0ea3593ec56b8b381a3281c9704b62858033f26e10d871c5ccc2607a49ffff001d2431b388","0100000070b6a00682b780ca5d829d62d1aa3aefa3ae824a3c483279adef05a100000000f894659003ad0a0ae94117c59030df9adfc1cbce2dfa4a1d9b5779acb7de7c8a85627a49ffff001d223e9b44","010000005d0cdb2d40201b0f3570a1e18fe3b1deaafa87ebefebb69cc34e5310000000008921bddcbe16e78258e5d52cc05b9deb9c87d4f91bc1b0e5839683802b923297b1647a49ffff001d00b4ea20","01000000046eb16b5ce9ac4fda6260279881d0ca038ea7888de90868d0872c770000000066c634d662692c170a8f78609b62e61909540ad6fea1dee4c2430a78031f3d6a4b667a49ffff001d34fb77b8","0100000002ef1d419fcc847b0e8de44fabf8c9382f6ced9e5c9f24298df17a1400000000c237585890a894bec00e1f90baad317ad2c2d17978676cc4aeff6510c76116493a677a49ffff001d29f509ad","010000000c32f4c5f10d53eb9ad7ee8a6c823001aacff5d92b0e23beeb14ccfc000000005ef92448b56d9949a27b34dc06ee5ad8e0134b4f7dc3d48d3458a2a634abed695f697a49ffff001d3cd27605","01000000f521e0b38b703c915ef12e47d0eaadadcbcc955d09bba2e966a3f0cc00000000597cb05f3c4a54cc66a69e7e5a2af7922a9529db1c13417d9d75d633093c00aeb6697a49ffff001d15b9a3e9","0100000047570d09f918a79acfbcf8b8fa70a5c2b4265082e57bd577b8a20f9d0000000091dc66054bf87c3ebaaa8464687e10356898113d0dca91b99197a28f7a0d028cfe697a49ffff001d2f19530b","01000000d5342060f1e5901d51648227dcdc0966d9454c5e49290ff9bfd1a40000000000a90d0503e1fa1dadcd6660700e84c6c03618e4678c836c48a36cafa452e2702cbb6e7a49ffff001d0646e727","0100000000834f5e83722c3982c2d371fedf0578847c8b98c95eef8ce44715fa00000000a5d8a6a23fc6095d6ebe022d819ab079b052f95a2a45eaf01168f9e7b0ce30bfdd6e7a49ffff001d365c1185","01000000c244b7cf696fd831bf7207935835537e581e5726b119a8fac1c7fa94000000004b0dadef3eb0cd07b867f66ef996d01e91fa8b8028d383381512442d20ab081c87727a49ffff001d2de0c36c","010000003ff1dc7ca3e4b0860ce51f91b8f8ec710a250b390f5f450c7e6e026800000000d8c3847b58cd2f007c0396a1b360a318033bd31a49b2d9e3ecab6922551c47ec17737a49ffff001d1c7913d8","01000000843724a9517b7ed43e468c01d6ef69113b0ea401b3cfcdc3001fe32800000000e947f62d9cb86abac65d4023f9adde080b201a4a395e9174e631b2a8c817f59a81747a49ffff001d23a47403","01000000bea5e6482fb290b5158a4907cba2406744d60bbf371bca0cc546eb6000000000b747e6559b4846f3991cfe1351637abe1d461dd3909d4de166659ef1ddc0b171e4747a49ffff001d180ef001","010000007fa4635a4909a9fcec6ffd66f9aa4c8a96a2afbe5616b15db490ee670000000003b520b39dbcda210fd2db44ff5e1eb322c6e9cf4cdc641e1ad0ca12dfd853eff8757a49ffff001d2eb72497","01000000250e496b1a09f3b2460afc70a47e8bd8c47058bc867086e64e85714e00000000de23634df6e0259406062e3d995ff7892c371f4d6a979e551e8d71c7238e20b624767a49ffff001d2053db68","0100000026fd5f7a879de9c955828a29f11e197c39d35e19fcfa1155c15d1f6b000000003851cecee5a462ac2c1cc7050f8a4f84b3af429299c9ffca7b77122d87139fcffb787a49ffff001d26ebd4ac","0100000021c8c3856e4046925a370f051dc4315d54dd541e23ce5c3c5dd2481d000000006d8c69a135b4f1ba54b64f651c7ca80bdb8fdfa91f2f190bf1c6c2b44b1a02a65c7b7a49ffff001d16121f33","01000000dc4a5bc66cab2ca785e80ba6f53a25fcf521ec1791b661d9dd25f5b700000000761a8b904786f34112ae3c4f1cfddce2fc1d8ae1838f80d9b815534ff9d1245c587c7a49ffff001d287956e1","0100000068739982c95594019db8d9a6e40b9521b6dfb1ffafc7261cbdc690250000000059a134d7799ecfc55ca880af8e98e748b058e860d2f1e8eb41d10b5d7e7e6a690f7f7a49ffff001d33d079a1","0100000078262b818f3162ab41ecae47e7b99d9916de74a1e7acead156bca7c3000000008d3edf68c952097e9a24cffbff9a865e3ed86ccdd9ef1aea87a64efe21f9b0f718817a49ffff001d38b7676a","010000000986f8f4badc538b22288328199aef65158847f793834b19becb4cde00000000d9c68940fc0b2257150f535c2d387e4551a3d21b5e43bc63b855475b3a9fe050d9817a49ffff001d2e2b7d8c","01000000a7e00c2146f4d1f94ddd03dc19b2a84651f261174a19caf406cd1d4c000000003ee97a1525d7b274129c6b00abb85a852d825e2162c95a1d174d968ca94d8cfbda847a49ffff001d1cb1a820","0100000050ad4b0d3dbd7f368720bb7d58d9d100dba0a64d8072030d36671bac0000000077059d61825865af4f21a78e8b2c7da03372dfe737735e5bbaaf229c0ef5dac362877a49ffff001d2fe4972d","01000000218d0012f4f148b052785713a5c7b687acd1d95bbfcbd2dc4062652a00000000189a13746d2e0b7c4f80f8f6640ba03e93bbf8ed1ede9d9fa1e984e4ca1f9833d4887a49ffff001d2e35945d","0100000078c2dffb431aba09bb67cd65b437f0d21af993cd741f6165e3cb200a00000000776cfd5b4c11396f1366b4eb9fd75dd9ff21a36d9ad2174c368829c32a2cac4f418b7a49ffff001d20abcb96","010000005c8582943bae07092edc6b0ad628e5c7bf2ca14e3110a3c2098d996700000000e35a1c5904e03955af4b59265c6f7e9ebb5a7f3c9a70ef534e5009f0363f771cc38c7a49ffff001d34716bea","010000001340bd94b5153ba7e5e9b692b59573843e476cd9b97b5b951a68077d00000000edf2fee22f803a01bfef2f2f6b4ffefb05772e7030b7fdecbd0e25923d561326ff8c7a49ffff001d358a40f8","0100000037866e14a43d83031550147cd771e7d8074999b6270074c47ed3f75400000000c4e3ccd9f6c56a0a1324796be2036f7f022c4e13597c4dd136ef28fd0e9d2d7d2a917a49ffff001d2c97bd52","0100000050f086612695791a44eda5d58f107ec6600e6659d0468a1b7876d7b60000000059902a815bd72e3bde680da4c3b019054b28b932cf5f7c80c2f03d7aad020773bb917a49ffff001d23ae33f8","010000006f70625e3e7635571e39af59d93c0cbaef0c5591b4efe3679cb5deb000000000d8abe60f087ae6cf4a9d4c7bad1a4b07ac5c63e5419e7b50e1975663b8af8a4f39967a49ffff001d3a24b59f","01000000eef25e8c617a8e10d09ba118908a0dc152a564f70f710d8543b246f00000000051f390dddaea88f8c83064543eb811d9cbc7f9781392cd13fe283a4854016cc76a967a49ffff001d14b976ac","01000000c2ab524ad471f7426b3492cee38ad56485839a0cc2e96fbdf1987a4700000000e43af2158032781fef8f7d295d6a49f03d324de85b6cf5e237300bb4328ec8e426987a49ffff001d2c730697","01000000f4da36a540e0530684b76e9248d5355830d28c85b1429a890e28219b00000000995beb0832879f23da8d1c1ab1d5adde6bfec330c86e626f10383eaa270fda49e8987a49ffff001d80410501","0100000066d1c17937b24e0864beb516aac3f30abc04ff0b1e6206d5ccc81a7e000000009e5acb0c0e9b9f53576b25a17b19d20c888509bddc63accb864e8da538081671a1997a49ffff001d1f357d5a","010000006c4b52f54c16eb8be6a7129399236e046b7f48a2063c60ffe291fbbd00000000b6736689320648c9c83cf561189bacd550225e70ad3080928d43e1cb2a536f02189b7a49ffff001d36494597","01000000eaf20ce5c4ab5897f4aa0f439f3d12075a6da95ba7f46a396455f67c00000000063d0536c357ec87110fa711df43453360bbd579ca86929c9c08132573a44ece939e7a49ffff001d3133f5c9","010000000603c5b20a915ef83a9b7352727cd2d3301f79c2438440e41976c83500000000d095d679129e07ab8aa282983bdb5ea7917bcbf71f351a7acb6bd39969119df20e9f7a49ffff001d39d74da3","010000007392f182507754360bc40538d33a18408ed965faa4c1128d932ca8a40000000076fe1a103544879a843a7c45e780c836d8c28c7c900126fad0b32494528421965da07a49ffff001d06e31122","0100000035c5226f0be2e839c84a004e5ea7ba512cf69c834b1d24e11cdde2de00000000a01a12843b7fb1d500254e54ec429dff5d78b10a3ce1442e5b6235f7a6b237e2dea07a49ffff001d128f6401","01000000fa316af59a68cefebb9f93c9da45e4ba59727860777813e8deff66fa00000000fd435a1f51b3e906672d3cae7ad4e66a22c79bf6868f774f6032060f91cd740981a17a49ffff001da816c702","01000000eb485f22a43f35ecb001df865300bb646011f4401b8b6ea3d7eb05fe000000002c20359f0c585392926b867e96b6ad0407bed9cb0578486c31652dbbede60fd4e3a27a49ffff001d28b50ff8","010000000802854f0421e2d7c22547122a505a3ff39c63a52b3d273f13a1f5ac00000000251b7e8bb1f10b81d124b689adb76fffecd59c3de453ae6e3583bf90b9b22273e2a47a49ffff001d056f67a2","01000000fa6dcf0a5b44e318b785a6eba406b3bbc1939f609945a2fd71c797f8000000009c7219a53a5e943b206657bffaf1b1f736c7e974c894850f91ed2d712d4b4967eaa57a49ffff001d362f871c","01000000194e43102090f157b33e83fb8e62bf7b3aad2298d4caa9df62677bf200000000abd01f031a8be7273272b29a74ce0c8015daf79e66e5a64a3ec1c8ca33a5eb2b36aa7a49ffff001d144f59e9","01000000a6be22c9850717871e91caf95c8daa7f1b5cd8d424ca16b62f55af5200000000475f125cc71659dff8f9f14799f42ca045f5807a1008a7016d9cd0b682261134e1aa7a49ffff001d37f2b7e7","0100000007ec1cf5a292608d1dc93fa5ca3a0477f83f1da21529c0b69c3abbc00000000029c5d7177ee10756c8c684b188a6010055bd840b91c8151b61c76ddb36b061a240ab7a49ffff001d67600901","01000000e943cd6cefebe2004c812497c5d3b8703712e2e3a7437b391bbbd57f00000000bd869bb6beae5e9d5c72770649a2ebc625988f16e3832226eb92908dbcb28eb0cbab7a49ffff001dc2918702","010000009eaa9bf99f5572236b359fe27476b8edb2d9f2143fae470e3e555c160000000067efeaf50edf66e675cd3584ee66cfedb4da55707880bcc218df55f0994ca48af2ab7a49ffff001dfd875b00","010000003f6d9fb876e5be2cf388fb0e83c31fa485b480ce848856734ac1a5b50000000064c9e52d2a41bff180c6292647731bb533eec37db8622710bfa7fd48a2101248d4ad7a49ffff001d03ec61d8","01000000bd661c46fa4df3fb29d0c7ba0ac8e80cfab7a414a03a3f7f871f10690000000075eb8bc1d8953db8c03cf871a3899c5ed6707f1848bed00b760f650f73842a68eaaf7a49ffff001d2720bef2","01000000afe4f3efeb0dd32ea82a9ffc05dfa0630fef001dd08dfae18111d50a00000000d3efedbe6c8bd1fe49ed2bcc9fd12bbd77973a5443a4c69b3da4300ca0eb8715d9b17a49ffff001d28391c04","01000000e98f771eba55ebaa8ffdf7dce32131411f543274d627c67bbc1b6f72000000000da2250ab9070f72f83659990cc19ae91824314d107460f965642d9bb82b304042b37a49ffff001d1df529ec","01000000e02adba52b78bc6a6aa93ae857242013b175b280458d3e04f63af1e9000000001e1d53d88ca2203dd4ac2dc3016de7773b5a5789f6b028a5f5528f9305224171afb47a49ffff001d39ec9e69","010000001cfdc76e50f4616055622780cecccdf18c6ea16bd602562e6ad8efad0000000033228cd7a9e3683016f5bfb8f27dbcc40e643f5bb797e65e0c864ada7a9e93ecd6b67a49ffff001d2a8b4351","0100000043e61034a7359003ca0f80fe4332c3f193044ba9a4136470c553e3c900000000d117c618facddf9baba62b6d67ae51afb6a62c24dc50f41a0f0ed6657ec836ff19b77a49ffff001d2d041110","01000000ff2473c63c34e67601f95edf7b37e418e1d6798880e6bba27b83b3a200000000d6ec5f63889e39c14d08616425c650df2704010f475ad50651a77e9576e6f4377ebc7a49ffff001d05883c01","0100000015fac4ce47bc32779834707119dece8edd4390a6b5645f0c4890f52e00000000e9bdcef12ba02b16da4cee12e568ea2964791dd73066e8689cc27cd273f17000a0bc7a49ffff001d2a08a153","0100000023b50a3ab24ceadd4b4f52ed16e68acdcb46999ec467a22ab9550cab0000000086c25b27b1304f85385b5ee07d3220da2e94ce18242b21baeadc7b1e5f3c01ff17c07a49ffff001d28c354d8","010000003a8fa644d2fa13fba00287aa9a3e431ce7b73b2c2bb678eb2ec2bd6b000000006868ba87912379b739cc4f0a59f2acfe78f0efb9e677cd7b7152c549ddf463810bc27a49ffff001d1f1584ee","010000005389c1757aae2ea165a91d9b4071d8fce16c8f0f47f6590f2013b1b50000000018cea4c59e77b1f24f37d1671a82c06c8830a13eed0fba355936b4314ac028cc43c27a49ffff001d036bdc3e","010000005ddb119981c9f8602babf0e24a644d569f64a5706f72082f9fd4407d0000000054e7bea99840bca74c10020700f0177307d42633e7b31bb85d7d78dd05153d09c3c37a49ffff001d2a7f8d7f","01000000fbf689237405667c1a7b786d1a003459b5d2b56b5ae7ff7d5300350300000000b2eb600c395b129da5f5359631e9be4fc614c4248c9371bc589a12070476eea560c57a49ffff001d07d4362b","01000000b26406e76edce5c7237cb7e829d194bbfcba7fcd1124ffb966b44ae50000000011315feb65262961f38ba91626605df7fd8a930cdcf9edc1a3cd79b701e83d5767c77a49ffff001d39cf7f38","0100000017ab15712d4126d606a363ec3f33f1b96fa92037d3511b85f230938000000000af598d47004cfa82a53734c496a9501884c4265e5da7b6cac1a216b2d947a9571fc87a49ffff001d081633ae","010000007c263a6956fd07f64f8d9d56489ca674aa05c220ee47a496ab1f5ca0000000000a274fa65baf74566e37fa67cd4be4ca031d0078437ce1c057ce324596f073dcd2c97a49ffff001d269d0c5b","010000006fc229eb04ea5111a82615f2b0b8ca222d30b232d6fa1f50d9f00ade000000002f561a52d4e3048d3919852da01c96d2d5f332e2e6459efbe568264ba3db7e6305cc7a49ffff001d1ee199ec","01000000ef8b600e2d8f09cee61dd373b4b2d8eb0ca418beeb41ed420f7ca7e2000000009b17e21bf649af26241cb0d06f3ff3a9412d721f9c01709bc7cdd7cb87a365c65fcc7a49ffff001d2157f4d8","01000000e39429abd4c39d44c9988bd982db3874239e9a73180ccee0dbd5b9d200000000ead68e83280984dbe0587b54ac1474524febb2285a8b0e35a0f96322d86228f91ccf7a49ffff001d099e5bfc","010000000d7a94d066600ca133beb9da60977c54871a509b36fecb09b01e0ac0000000009b54411a9e122c31db5597bd7df2cdf34a4301d59559e9a23ec17c2e31a5345e3ed07a49ffff001d068664aa","01000000d5b408754f73950b7572221a7f94b22d67a50759e01a31fd406d5e5a000000001d865d5ba043269e4ca6d61c16672383a43a65b841440f85d90bc5080f4ad66e06d37a49ffff001d1813d901","010000009b1912332c8dfaa28ceeed71a915fb35b41aecd783e88b8fd6764d0b000000007d8fbdb77e7c6cac164f46659a2a8fc96045d4a5c251ec745971fa2e320381d58bd47a49ffff001d2b1f2904","01000000b7656507f4bd0f1d98b12ac51feda0d81d722c4028e6c47ceb5113ab000000004166dac9355ed003975270f6c3a0ac99376b4610322f59c5b4a3aec5e94737c2f7d67a49ffff001d2e033f82","01000000d12d21d784ea38f388b9743a635f20fac7b98d737914420f7e18b15f00000000addd9a36cee128a120fb12c67d8dac9c6e36303a7888c025ee3fecf7629e337277d87a49ffff001d635c0604","01000000ed77206239f70044f24b3cc8aa3adfce04aafad027df2f86016f27a300000000d28744275b3f5e6ebb2277f468cd8f66455be6f460d6a4f13ca09115306d0d8bfbd87a49ffff001d3636c955","0100000015fe9ea2056d3a6f92515b5847709b67586c53951229c3afddf1e82900000000383322c34400ee4dc6dd3ea1667b4ccff4e033db9e91f5c848ddaf5fd9b5e84587da7a49ffff001d2770e45e","01000000e1209af3743e900df56edb3a7dad0899ee73b3f8ca315478c8552f7a0000000008dc7ecbb38fe24aa1504e7bb285cbe818faad4a3fb637e5c2215a62b3ef1a8cecde7a49ffff001d088524c4","0100000047de6447ab7d80a135ca99588304a54372711ca70557d9cdb69dfb83000000007c7637cfe96636baf8e599dd692136760f24ec91818724d756bafd655996bb3676df7a49ffff001d363d16dd","0100000037be4a9c7f446c27143d367da5c974285bc14ab3b087c9c7d227219300000000b6722922139625f21c03ef9f6b3ae1d6527ef2886416a7b93b4fb176aa74152729e27a49ffff001d03b63d64","01000000bc03209c6f35a6dcba8e698fc6239f888baa659d09d8cfb0e165db8f00000000a1e9dccefdf6737baf7fcb2ff30ea5b6c9d8e4f1a742e14e3f94207003a4bcc270e47a49ffff001d3a4094d8","0100000030ec4a5a76fd1281c922587f206ee0350f4a9bda32df4bfe3a8f4756000000002954e44a4be07551060891d97cdddfe2def491bb0e8d52a26a519519947ceab201e57a49ffff001d14f3990a","0100000072d2191d028fdcbe3a01f225e42404cc01c0bd6ced3a81bdb4ce072800000000f7a238a00c0bf0ce7cc66a8ba3432f528a5bb20691bd397cf63494d7e367fcaa4ee77a49ffff001d33132cbb","010000001fdafd1b059588acac87eab44c59fa34d3b424912b878b5efd7114ad00000000c30b1cd212efbc60ee4f517f358aa457550e0e21dd6cddc0a3327e4ef57a264edae97a49ffff001d2cc5cf3d","01000000592c1bb96d3c5da26cb43a4771fb3f58329dfee089a897576d6c893d00000000b94f9bebb93b0c668dc960eb0070afa0fc1237c52884c4b2e08fcc0ace653097ddea7a49ffff001d242ab4a8","01000000f38282a4f482fb7c59a95743ca5314ae755e84362fbb9890b1e45415000000004dfc5721ab5e0fe365a490efa334c4f3b9d0cd550f4d86239e12c8da929fdae3daee7a49ffff001d00b34a7e","01000000a78ba48bd986a189277b5b2d7150bff5ba9bbf3fdd2bf8856cb52783000000008efb90c1fc6360ccd78ff1c87be19cdcc91135bac4740ccfe68e8e6a20ad52bfd1f07a49ffff001d153821d2","010000005b8b0a3a33603eb91343ef91add0908e2d5d196c239ff4b3c39c8b890000000068122fa7def7f19b566112ca3339c9b22ef77afc1bb80460763ab7af69ea372c49f17a49ffff001d279df4e5","01000000d0c8ab21e6f93e5457a8ebad3b5b8b6bc6572d1688c7547b52f4cc6e000000002eb954e57b4d6af1790a8eabb2248d40096d2e9a40c9764acdb2c56abc76e5dd55f57a49ffff001d201b87ec","01000000e409254157a277292afee1323c4b31c385e022f871950e666934c7690000000026d4d35d2ca3be65358add52eecdb07005d243914216435aac3c2a0d4ad9fb792df77a49ffff001d2077353c","01000000d6cb8358040c11a77ebe8aeafaa7ab9d812d34080db2a1479df0900600000000395c950409b8d48cbb4dd73016bfa42242187fbb3ab5fdc8f9f63b1daff35a81dff97a49ffff001d09a6d630","010000003d3691511b7c1f711e33b40c7974b51ed085ef5256199bd40aff740600000000e79a1c744871436530cde6bbdd194843dbe081445515d01bd1b96693bfc344aef5f97a49ffff001d35137791","010000005fc9893c3b651ce71d5588df282bc8ae8f5960f7a89ccc656d3d4c50000000000911a05722dec02e38fb54ebf7de859555dc8e0b76b00b93e4b10fab4d8ae42ac1fa7a49ffff001db0c79201","0100000085d63ae94c54cdae990838fde0ea4e46bb919d0178caa96e49308a9d00000000354b232ade79085ec1ca82d2aa92a3973dea3b3913182ea60980160d4bb00a9004fc7a49ffff001d23d2ef22","01000000cb3858d92d52992ba0593e556b24a9e31cb315e6354abfb9ccf69d110000000068f5300bdc0ee2d1d14967e0f2092c8fd0d85f06741f6219c8a7190bbccc806f46fe7a49ffff001d00762e08","0100000064a16ed56c80ca92c661ece144fa365ff492baa4c3cb236458a534fb00000000714b106fae863822ef94db8ede817d78795295ef6ecf7bb2b537126f5056f1a57fff7a49ffff001d19824c05","01000000a497c179b79366704ff068a26cf99a5502827ca05d9ab8ab006feccc000000004c1b493f849c969ef0afec6ca9f9cb0a18ee549f128693750bb8e33e8f7c670d9b007b49ffff001d04503d52","01000000c5aa9721dea01505340099bee90f3f68335f53ec3f6bc237925d3d9000000000e61e394bf1805ec826ac4424af1ec4e9a234502282942f6e433b4a35e528fa90e1007b49ffff001d17520022","01000000db246a8d2aab97202761f7dff8470c75728d4cfeec02b2a0362d5e5100000000fd708adeaf551b449b8b8d9bac5a3867ee41216e1a146b2a51297280179d58cd4c037b49ffff001d47169a06","01000000bab4e633372469a3b923475de30ca5591fccfef77117febd82af0d2500000000fdbc5b477ef223467abb1fc7f0fbffb086799e680194b4d744e936728e19ea3db8037b49ffff001d39596525","01000000a333f0481ab29d6422072758bb34e17a5e73d509192a17f989cf2da200000000307bb30a97f4083cef3ce3954b20d9e5d0a6f49fa984484e3596372f7d5e834c56067b49ffff001d1a3415d8","010000005b63e8b5359eb7c4bb78277f16d0035daa2f96e941a8ddfa1159f16e00000000d8130f7d9020fc515b4287f93624289854d21a1c44a10da5502f5bb8beb9ea974e077b49ffff001d2cc6cdfb","010000003a938e77f4a1758a48b1f5f70c040f418cc0e6037a946d94976d6243000000000ed99f88b1885eba6c08c8ae8957817198ebc950234f788af9d784836a47b35e21097b49ffff001d39a71fa8","01000000cae96712cd8048fb0cf3752a7f3d1af44cb66df7fa0a15aabfb8dad300000000f0e7e59837a34667b24a3e6f3184401b142516e3fba376d8837d9e6ab60c7681bb0a7b49ffff001d455faa05","010000001916601ba8fdedc57dcb3f1e6cd0f2b390de055f228d4110f95f42f20000000015ac5e2b313320717227255df5652a9273e3d30828b56835b60017276cbd3256370b7b49ffff001d25f3fe77","01000000a54f215ee28f56d88c79418481fd0e0dc558a3f82b9afac5914e590c00000000db5dd18601ab50c173d1b56fd25eef039d57fc392e36b9d7b732edae6384f5b9a20e7b49ffff001d3651eab7","010000001da5063ebd877c15f36037f0ee0cada4cf017932d47eab2021393f6d00000000f5e754c971d09fb9283ad9ba653729b2020437be09e2a826a050bf7614b25169f50f7b49ffff001de33cb504","01000000cbe8dcb88b2ca2e8aac7e7c1637fb66d889b5f278b29981f84265b68000000009e648e498aada28a5e98210a0c47cacb6301c52929e0bfaa0e336ab2c942456a4c107b49ffff001d0248acd6","0100000047e5b4227d969697ade2f42bc1aae610a280de46569c290c7ea16051000000005cdd27d34ca6bc2bf8f28d1ac4385e51e5ce65450f14aa5af971d04d8a26aa185b147b49ffff001d36144534","010000000f1ca66223366a8dfd2ffda59fd56736ea7bbb009d0fa48f64311094000000006dd2c5b5c858dfe21a0295d44c49e445b5435373f3b8d2b12eda17bf7147a8c8c8157b49ffff001d1f4c0bde","01000000bbe0a7558a74420dab0aa8ec33324c533998f28d358271053b99cc2000000000b04ca2d8a8baf2f035c279ff08ee140dfaec855359e88505c0e38dafdca90b525b187b49ffff001d1767af26","01000000d0caa0c6a79844ffb2188709f0c8adbcf4cfdd5603f6e5afbb56fb82000000009d81938adcde94cfaf0f68352a42f5868889ad28b6c2e1ab0cbda6b97aba0198ba187b49ffff001d22a4d7ef","0100000024307593fff1c365d719783d8e51faa615fd769a3f9e35b9c2c594fc00000000863862c5244e2e9ba848849bfe789dc161be6663f8c82813b09957b4967ba9b53b1b7b49ffff001d39e47d2c","0100000085a0bc89dbd16e0bbe7b7fb80c8a10106fa6718c9a21e2db927ef4ed00000000cef190aad22f26436a2aaf7154d26e6887e667dd7d8c34a70a749e29f90763001b1e7b49ffff001d36e8c01e","010000006f1b754148b85da178e3d8b6ad0795ac3f201c914442edb547e0665c00000000c345531f4a895a07fa00595b10c1e67b2e2946a5c779fae783f5f092a6fa020820207b49ffff001d282eab9c","0100000037224fb8cc135b202a0701a6262813f7e5d1f9d87c7debd994b99c5b0000000021e460c70917bc6651a98031426c28bae5f0d8e1584e17cb42ba635b37774e9961237b49ffff001d21504c32","01000000db01bfd1bb2bfb98db340c13684a17e8e94f114a22f94172b9a63c9f0000000078a344a24454c565f0f3f117076e34321082dc664ac574c35e38168a91a1b36fee247b49ffff001d22fe0051","01000000f3408228e726d31104f98516b5a9b6dfb8408509f44b173b4acacb1500000000d5902148256e6903dbfb050f3723e9bd3b45c47dfa3a9bea744633ccc2f337d070257b49ffff001d2d53b473","01000000a35cd552084d70ef72b82a8522840f8e583be220874493a35c8bfe0a00000000f7f87e65629e913c27d25cac3779bb94da5ba09f295cf2a77f6005189c6c910d22267b49ffff001d8c228a02","01000000e8f3bd44e3c78f00cdb8b52797697695f873d4964d7370bab02f15d4000000000f7c486870fd9afde54cea94e21fe7cd3f3aa51899b0981dacdcb1914f061ebe4e287b49ffff001d24a5e199","010000006bc646db729464f86c0d0404c2e20376d2ba3eda74f0c4a0e34e1459000000002bcb1adca12f136261f113f539f38e076cc9391dbbe4ab4470412c20d5cedf63b5297b49ffff001d29b795d4","01000000e1c741e760bb4f832c0e7335e85793cf7cdd581d5a6a4953393529dd00000000a68d456191f506dd3af28aba90e963f1e2e4ff0034a5eb78a2b3083ee7ca002e282c7b49ffff001d14381bfb","01000000cf13fb63d4bae50cd458303b08c9687a1614476ea7e0a7a0774542b600000000bf584c8c8705a70777a7bdb81dfc6b29ec36607a22fb64795b4d0f7345300da1af2d7b49ffff001d0171bd54","01000000165192248e1a00acc0c4bd7edea0eca85980756d2917211d71953c7b00000000647a188b08638e13638d2163a83474f9df5261ef47ff2e07d2df8b61b8a8edc967317b49ffff001d375d8f2f","0100000055a96cc7c11164dc8f2267248fa27d40abb5df8f22fa49c783fc748600000000e67a2c4d1606c8f8c5a3dc8b48e0c65a5e88e7ab3006d4d960b92eb3de853e033a327b49ffff001d1ad15c51","010000007578d7a7fe83ee74a2ae722b9e03cba48115fe59d47ee01a8081b7880000000089b8f0a787e1fa901fe78513f3248cb0dfb67f6a3996c2115eb65c06f0d37eef5e337b49ffff001d9dfd2c04","01000000d9f9cb344ec439b7e658b979fb4bd329599a7a758370702bde7b460100000000ad86cd4a407ad757d50683bba0774a6f81b0dbb02744dce665c544afb64a0d042e347b49ffff001d1b6c8a02","010000006d018d566465f0917be9778362e2b358cf3166cea05f201aceeffd9d000000009e654fe502a187208f7c3e381c42afc863e69e5d8fcb6d3442f39dce34c4212a8b357b49ffff001d232333f6","01000000bfb8d5d20540d320e21cb6e745d388995adceeb29cfb7a66ee8fb3f6000000005aa662702a1584ee8114763a27ef2ac167b32f3bbd723c58f9f79fe919baca3c3d377b49ffff001d081e4b83","01000000c7a1b9d16a4c83c283486f445b859677e88808844d712c8ee1cedaff00000000cbe89230445d62516a0408ecb7f952716e9441ab335a6df6026b97c11bcfad4287377b49ffff001d2a7c02e9","010000000f5489418397e8214f6fc4dc46b128ea55afff2f544e531db31bed0f00000000ffd869ce044c0a093d103cf0c5dc863e135a713fb724d29a98d592f2bc6b8cb4ff397b49ffff001d2a402100","010000008cdcec619b3a346c569244f18280ec5fec971bbb3e559578f809d28b000000007542f1e778dfb7d032a857bca0766c0fe3b85ac345632f83037d99327b8c966d853b7b49ffff001d1b2f798e","0100000086b4457b92c0e034608e4c0f17064edbff275f2068773f2b426513be00000000429a18be4f5197b5f856eabbb53e049da61f46ae22a13aa0d72ac987ec691ccfbf3d7b49ffff001d387a8c52","01000000773ed4a78a3215439ed90dc5aa1d5a29df9930e86bd624e6cef796ba000000008fee314039f9349c0c364234b02d7ebdaf1e5873edc4de024c67559b479341744e3f7b49ffff001d2bfac8d1","01000000992aba9d139f8f9886626f74883fa55a7b974a5c70dab9f4748d385d00000000b492ff86e1bf08759f7b6e7c3c7dae3d37af4fd11bc2322ca76b6af137358082de3f7b49ffff001dc8084102","010000007a3c25a3a6c6c88d2561c45082e424bdf6d2cae0801862e06db733fc0000000098627ece6d6a140f4fc8b3c1b88f584bd871f3e538a828afc19ce99e0e7d57f86b427b49ffff001d010c5795","01000000f488b4aeecfc4b1798c9c874f0eee85574151df3a58ac21beb6750740000000099fc9b61f3a9c2e31857d5abbd9a8e84c3e02391e894e8c879bcd6695a69020fd6447b49ffff001d096de0b2","01000000383782706dcb4b2e28e22e7bb97c37622b0833c75b78208841fe1f8b00000000b4f7be6f43d0bd26dad46e77e6d9cb6168f8b04630eadcb0807273fb20f1566b9a477b49ffff001d0291f84d","010000007cee731103df10e00a5e6ce6eb271ad08bf8817a4242d77dbd5973d9000000003e23e9a7c9716a8d70cbeb77c3a26891f075c7045337bd1eae3f0d68d1a63cc64a487b49ffff001d315ea87a","01000000f13ff25fdc84e1ed05df1bf093c53e318ecfc329e6f0f8521d99132b00000000712efa9db73dee0dd4ce671cd788be6bab569349b1a243c7cb36747af35319d000497b49ffff001d282ba290","01000000568792a3f386760a3c8b7853795c24fe83c6839877888a29593208ec00000000ea4c9947a1ac4a93b26ef328f053a114a147dcd0b7c87465e7452134dc692ccdc84a7b49ffff001d2041d767","0100000098a68739fa60fb67d9f05bbc9a9683b18e58dd6a33420f6f0f1c22e80000000088387fe1df5db5ebbb19e920ba0b2e805ba3fc92366a05ef5bbc7711e8ac5719f24b7b49ffff001dc79f5503","010000002b1f2bb2b480c577d1ef13570309afb59f1593e07dbb779050aa8d92000000005020ef9dffd4239bd07d2b8fc9f6ab74e2da1e23c9f9d00677b9a710432562ac364d7b49ffff001d2069a21d","01000000bd348b1bf76261417d72f8e796b8a2a84815250e234629337f72c79800000000f1c8141614d4ee6c86a0776fa6f64bde3af33a36b52e5a88838ee7efdd969933b84f7b49ffff001d37f40f3f","010000009d6e0e9130e54430a14e47018b4bd06d1e52cc852a3226590b0baa7c00000000abbddc37a756a3ab06838f06abedfc2a20a1c9efa3ededa578be78f950488e5f9f517b49ffff001d395755bd","01000000305383c0e2360ef85977b57f2579b7a93cd42d65914f0e9cb7e90d9700000000559cd040684184eb45cee9c1a5b9eb55e35c05d0af1ceadeddebbfe8ceed900609547b49ffff001d2dc18465","01000000bc46cb80de4cd179a19904f10bfb6ac3d9dbc87f14614da969a72eb5000000000a0e91eb2b47c261880ad444ef34852807f4ffd3884f9425c1d045e13531b0e763557b49ffff001d2a0139fc","01000000d03f2acca9962f0d80cb45d14b2be236343fd0d6d596b33c63490d5d00000000fc51082bad4b1e4a8c88fade37633513fc30143ba0ed4efb1725f9befd867f7e3d577b49ffff001d3494f257","01000000ea0fa91cccd3b8676c73e71221aaab2574f102471e1f5a5d73a76a89000000009123ae1db8722f57f54b73dbfa270bc5a93b0329b44a0bbb5f225a642f58a71edc587b49ffff001da9d2d905","01000000a6992b6f1ab980f0d5dd54660ba4800ad5401059367707a3cdb7aa2600000000a6c15eb91ec057e301b69756058913fe7a867cb48e99d65b68ba8e9704af54c48c597b49ffff001d087bee63","010000002f3887d013237260b90281c43fddaf72da18e306e0adcfa78dbcdacc000000000408bad84d3d7d3073c155f77c3d9364c011c23aeaae989148999ea37cfbb558d95a7b49ffff001d2322dacf","01000000cd006ab9622d6911f77b2cae7d1036f8ab45d0c9ae5d462c85d46ddd00000000cc6bea3361da2de8e55cfcd3f530e8d5ea39e5fb3a81c30b0d52ac4f0f79689f845b7b49ffff001d2b6f89fd","010000001caa0dfe5b90db5cf443e2e43f4626938cfd4debbba43ba79d657abd0000000084289dcc630dbf0df17eff0b7942d98435de6497fce97ff447a5293c0471d9db335e7b49ffff001d2ac16171","010000001eaee5909b67a7300f5ac9afa1cbbba7ab64567c02109f75813248b30000000005b7067095f8b50eebf4dc31584bf9bd02cff52a1ebfd692669029dcf894e51edb5e7b49ffff001d17087a2c","0100000054fff141461981914c105aae6bddf8d0de85baacd97ae4d56030aa3800000000daed9a597889e2bcea62982f1b27c4909231925d185f24e2a13d7a0176ff8c139c607b49ffff001d2db05b40","010000005fa82cef052d5c3a16c8c21aab2feebbe370595e91aa7085400e3cb00000000095dda3cdd1a8d8185f7cec1d5f611df73072dec89aa5881c2eb7786a0a9c841c40637b49ffff001d30c22551","0100000061c83f743c7f0995ac357911d0ee95044cc7674ef7ea676cfa4bf0e600000000fc222fc5373105310aa0f0ef3c9a07d7827c815a1ad457ce58a304ac0afc833cc1647b49ffff001d050f959b","0100000047de298bcd2b0878cfa8d11f74c68e559fbe56305fdeff9dc01743d60000000068187851938dc07423ea8dc207fc33083c17ad6567542652cdd8b2319cc09018b8677b49ffff001d1bf815ee","01000000e8bbbcc73fde8ae380862be4836294e517df95fb71055b332eebcdc800000000cd81aa16655a6cdd48da39903d77e38ea6017251689f84c9bda66bbde1ee6d51ed687b49ffff001d7e1b3404","01000000b1c5fc3980f7ba7c7350eab54ed08b963436e76a1c0ead224a9abcb4000000005ed01fbd9416c5151cb2e6acbaa109d00b1da3da0ca5cd8e5810c3ffb206d45681697b49ffff001d2ea77365","010000006d31ce8751ea100e47c68180abdf5d2cb4885bbd48ef4bee9261d0ef00000000cc45e9dfe9ad2b61fd03fd0e8a5ff3eee162aedaf8ce8559527bdc562dda235ca26b7b49ffff001d275a84a7","01000000d1df72b352951bddde8efebf91621da94a3fcfbc67ac895957a2209c00000000c11ade6cd58d9eda3e4f4a7b7e13d3e20fa31b08131aaa188a0ef2c6bac80d6ebb6c7b49ffff001d1cbfccf0","01000000e897d4133a2b33fc07b6d65251108a48dcfa9c52de3bf4d3502444e900000000762cf0ff5d0503afa3ac4c4e0a9ce3d0ffa969ca83d6ef6e633a4680f3da747e136d7b49ffff001d02c54f9d","01000000eb452c42bc293a0d533a907b5f8bba2b533aeccd4bb257608339f79400000000837f9190433e200e8b3c12a5a9715a07daabd28058b0d7bd3e68c4790a62a4b46b727b49ffff001d02e90885","010000001810fe50fb3c6a4ae49166e2115bbf018b22eee05fba37d9942275be00000000b138a32778c2a655bfed398e8d7bd8053d9369685f7779dcec08e0810738fc4786727b49ffff001d24f6220d","01000000f48385beba251a26d0ecad0f50829c6a521fbc706775e774cb7baf7200000000a0486528c0b309c2896fb98483117cf5ae2e5e4f8b8b8e610f8cdebd5a5ad22545767b49ffff001d262c9b57","01000000b95d79bb172937310733fdc3d291bf77408b312983056bed118166150000000042e07e17f9e3d55024c1b4b5ecfbe68320b725b1c14a4812c41e7e32a68250003b787b49ffff001d2f31c19e","0100000012a5e850d69d4d09fd1f6f0450bea7c00acf40f58e79112b0662ab65000000007d55cb0cb76ff73fa0d0913acc4c57b804cd4e2f58cb9f81610c8ad3617fd608a97a7b49ffff001d38554e37","010000003b14050973bc644582fda54a9226352236cc5769bce8dee2346a6c0400000000d1967ceee6a0416f8cd746cf5fdb9d20c89e7a90a6bab787ad819e5b33ec19d2447d7b49ffff001d2113803b","01000000c3ac45dcee27c49ce77d932ac458519c90c2f3e5944c4eba9235e27200000000ad3e91abd71519998e4c2caf05a6951c7e8ec84f9eeb7320ee0e78428cd3a5545b7d7b49ffff001d1b4118dd","01000000288ef6a3943fb96660f5e57202b91533de5443cd23a5e65ce1fe424800000000a0e5e3ed4bf31df532449947a96dace21500880ad7b2036f55fbfe9cae22cb93b2807b49ffff001d283ed7cc","010000003af6685530695f1fe2bae934966409c2b73416c5fb09336c18eeeb9200000000dda31c6eb2aa62bbd05fad740abc9e6cc150c4410d1a4abcc3c336c0ced7b8a0b5817b49ffff001d37ac7275","01000000ab7a07cf3eb06b07cc080bc9da9face21f44c2afa8ace4148b7012430000000031330b51ec7ac486a98ebf94b346d3d13d0216dfafec3142300f4b39ad3b43a95f837b49ffff001d00b7ede1","01000000761a1436031aeaf9c921f21e7eb0e5aa382c92b54a63fb1bb1594880000000009096aadb1c36150bde507c575eb9ce5e43a196df5f334dc5638bf1a6139760e66e857b49ffff001d29771c6c","0100000023761e6eaaff6f4294375132c118d100430b978616cb827d6a94dcf400000000c310b400550606aac7e3c870997de74848962ce6b67bd00885d42191539bf88d96867b49ffff001d30727135","010000008c31d269b537481c8b8f034eed401fe1511eb513a237f146bfd9407e000000000edef9e5a191dcdadddd3ba59805a0f8b01e7c7d3e65488af30bd2ae73a2587fd3887b49ffff001d21853bdb","0100000046cb6d65a816aa579d2f334542b2c71b2acaffb64f550936fc770aa700000000759789b6c4ae6f3ecbbc88f5159a7bbe7c12c12b07d44e0cd656abf6002e5473948b7b49ffff001d2df26a82","01000000466dabe4dc06c3a8dbd0a064be0df60a895d65e98c188f6727018336000000005abb14590a3019f27550444edf8da777eca63542c4174015327bc9b184fe9da7178c7b49ffff001d4c60e001","010000002ab37e9d14dd745bba83428b359004f907a34164467bdb7eaa422f27000000006b4e0bf47c4c02b400a935b1d9a7d5996e3cf6db9d4eefc3a053418d549c8087598d7b49ffff001d36748795","01000000e2275c0780bb6bfcfe20a99284f6bff19f8614484bea6702e0ae311d000000000e9befab0b204124d7eeca95cceeadba84c05247736037aa03b2f37f89c8f316858e7b49ffff001d445d2d05","010000003ea0e46e72ac80f3c37c1875672c46bc86be8bea051330c8246a8c2500000000b0a7e5f0a13a4cbfe877b0fe01e749caa49e4514b919b7e7cbc699fe4a313572dd8e7b49ffff001d2affa1f6","010000002139a9596028daf7d7feb6f775e84576d3207da7be57f8435f2ca55d000000000b9a26b4f404965621f3703c90edafcea13ec1c9b6ec4b9279a25a94c903663f34927b49ffff001d354360a8","0100000048e001b9efce09898e8dbbd14cbb876fb42e34bb37a191cf4300aa4e0000000034940548c034ba091c9dd052074461be58df2b9054e90413ca9a06347ddfeead35937b49ffff001d346b5b33","01000000429ae49115ed08f33570ea1b645d4f646049bdd30f9f1f6204b0e4130000000042e778b8a8aa59f098f45c3d58e8caee8c96c06e7674b456cb41b8bc5d70aa2dc9947b49ffff001d21f04563","010000005440e57f61e6ff31a03ddf2db0fded9b4ff26cd7bf9bd466a873a47a00000000682cb1c6bd1915cc3c824cfae073ce58c8bbf594d75f68eead0a39ed7ecc7d716a967b49ffff001d33ede5f1","010000004b112801bc6853df7e8fd7f68920120d52c5d081a895090ce8cd93ce00000000787e6cf5bd2292b877ae64a4f5cccd8f5c5a41120fbafa170a98acee9b4380c045987b49ffff001d2a57f716","01000000caef1dc7af4b671aa80f76305b99ada2154319c9a16393863e75c22f00000000ea89ca5f15aad76415821544c5e64303de81100afc66812aff10b8bf6b5b03d529997b49ffff001d3d623001","010000008fc4ece61fda14756b496a6d61a179315466cdb2897a6ce805f51e0900000000dc46542b0032087e6f32acee5c46ee5e248082f4687a8a061d72ce70a3b5f76140997b49ffff001d244bf451","01000000cc52298f4751b102469e3e8114e6f7a8b6daab26875752e4c73c0b7700000000ab42b0483349e41efda50525881e847827d1d32cfa126540c2385e2b1563713b9f9a7b49ffff001d2726dc7b","010000000843ca3e0474abeb12d48a84d4b282a12b6e72cf567595087f5176a7000000002d1f232b349eec562dcccd6a4e82117ea58166993e79bd16cd05ea5080c6d7126c9b7b49ffff001d2ec2c8d2","01000000d6443780a0098ec1683c1f323e2c8b50bf130e461ad7412f2b5229af00000000e863f86b44b41806ffeef43ab188ff063ed64a5d962436b89d9668db0ecc355f499d7b49ffff001d1c90d542","01000000e1c66034ad7ffc7bd4b5b705606005c6cfe2492d096a7227204b8b8d0000000094de6e0e774ced9635a97fb83650f041c5549b7562438359ac8f682ad05c315a0f9f7b49ffff001dcb7d1708","010000008513131670651b267a1f11f3e75cd717e19d8750b9e1162b7f2f1a6d00000000fc4f987be3843acf9437a84154848e70afdbc9d265f6f4aa40c969b53b7aa083999f7b49ffff001d20d09ab6","01000000281351d2c84eff72c21a69cb70d69eca09d3ba0fb39464ce7a5a4b1c000000000c274c6cb61e9880515d2042f78a8f6448ebd2af47b46ab0c0ef060acb6edf1a51a07b49ffff001d16d77502","0100000042c05cd68f75a28481deec1edda3bb9f54a4b649c0eba71c5becfaf700000000b72bb2913410f7218e90aad524f9b0ded2b749e2b317363616567da608ed16fd5fa17b49ffff001d0693fde6","01000000f86b17d5776f67751f915e35fe6bd80317814731d70ae8e26c92bebc0000000025f9ed620527a7b3de66943bfa7968113ce7332a858d87f91b281511ef18ee1a96a37b49ffff001d337139e6","01000000da749065a840f78b4f8d3180a248222390baa741f38c34121495cc8400000000ea6363c30079cde01b7687ab16e63665fde1e1ce73637ca53b22ab54f7ee6d5b52a47b49ffff001d13f4a86f","010000001f62cabf066f40e2f614a8f045c29d8ec599f8cc9fbfaa9d28637e3500000000588d68df47d69d4c97e6ac277ad5dcaf5d4c78d048eb9d00ddb338df22081bb104a97b49ffff001d15542224","010000006df8c434233fd2357a6657ed5f8c2562dd4dfa616f63b239a9587a5b0000000063e679f6f000dbf86e13f7af8972af9737594485d8394c8b399a294ec51256409baa7b49ffff001d38d613c1","0100000086bce0c609c112bb78b7edac359606976114d44bceeb6aa8ea4e276700000000b448cb2a9fb15e7816b5f5955edca53fd668484ae892f492218c82eb3dce686579ac7b49ffff001d22a07bd1","0100000037ab898d9daf0048e1a14e7d973463d9fd3eba99838bc70cfd781f9700000000e9a3dc82a1de1a1d1fa624b74a6cd7514867fc103582fb2492c2c06c560a318bc2ac7b49ffff001d43ab0801","01000000a7024ca71a5d97e1a664eaaf9ca45f5919d5ba1422d7e7a66399d55a00000000f250813314115d7b50f889cd64a727b23f1306f0afd5097724b4c1016b90e5cd7dad7b49ffff001d96957900","010000009618eacb65d6b334043ec99112c0811bca75d91547558bc3862865e100000000348c0de0cfbd3ddd7384093601830d3df7448562e1694aa4a7a1ada946d030b4c9ae7b49ffff001d3564daaa","01000000176ee78a3a326f8d31e9f07bee85db0f58514e24e65f1b5e49001d92000000001a1587d87433d2ad16b1c440b968cf3b58618cde8e8a4e5353cb0f4d80b61b39eeaf7b49ffff001d26ff0903","0100000049b176c612df29ea767e4061ecbfee759b2bcc7e7b217eb9c84382bc000000008f8316581008ff3cb3dbaa1534579ab13f614c640b4ce5c921f3a4f28454ef56bfb07b49ffff001d170095c7","010000000f0126e69ec27a632014493e49b994fd5a621a1d6f1b2a6cfba4bc6b00000000a22a55ad5d157b9b107bfabdbc8c70126b1bd529304f364fb459a76fc8daa235f3b07b49ffff001d69a60c00","01000000b6251d784f4f6974b2b538bdc8c73144cfae8cb46544caf1de7fa7f3000000004cfc5b36f2cbc4fa3f0a5986da063eb0d81125e03366cb4863aac6301f53833399b37b49ffff001d1efd0afa","01000000cfb367b4bdf4321a488e4f7ca698b9d80879364835b45c2b2963dfb400000000bddcdc1c5f4cf26166e4722b822d6f41c6fc4baedfe07964f8b610c365e0a8df81b57b49ffff001d16218ae5","010000009b26985f6ee83131c8cb1f419948b06c91712029fd7a9bd7146a8da8000000004f70e76d2a2ee1e181a40cc5fb168eeb57e5141f7d59286ff05815a8faffcfeeddb57b49ffff001d0601910d","010000008984fc600d0f71530b92392f62591d29065a6f07030c0ba0eee133af00000000140759e7139433ab81dc32b6ea289ebd8641020e56578712a6923d2d105d91e1cab97b49ffff001d2ffc05e3","010000001acd71b595bc283fa413633d031aae3077cbecb9a052ff86c735cab900000000019712ccb52c2fb31cc3303fc8189341e7e54b3275243351df0b2f245a7d593909bb7b49ffff001d14668c82","010000002b4a9304e1b395d2e1035adb5a8034e3f78fa1617a74a0c9903c21d800000000d63bf0de9aacaae0c912e4d2a7db447ff371ea4db60d71fe97f7fb64bbbc6c91a8bc7b49ffff001d1b495c93","0100000018df85dfd156fd6ecd018b3b7047cf4373d80672279d2e1f5cc8857c000000001da4f7b4244a3a7e0b60e280d2b7a6bd1f5f80e5bfb76be3d452bda148d03f8005bf7b49ffff001d39f8c17b","0100000007d667f60bc21917283e40a64274387c4d3ce531ee17b5c4102986c700000000670026122c11d1b5375c9244ca92203a0e0911287896063a8a9bcee20d3a5b141bbf7b49ffff001d27b36cb8","01000000fccbb1bd2b8fb5f07030f481559036b1492e701c8ec32641243c120700000000eedd342f92c3d7c4459979d492696d80694b63ddf2e559342c3f63cc348e710887c27b49ffff001d22720953","010000009813c5ffbf7bdda280a760e455efb1d48eb5c45d4c7a9d98035e19aa00000000a826ee60be3b063abca32fe97e41e68b6aab3aff6da8b117a00697b4314ecdcab3c27b49ffff001d2f488cbd","010000005d398eadc883d34a3e10499f7d89032f19e2939f21bd6fee5070de3b0000000054d227e2a549263d3b1ff36a12e60d73e5546ae43ac9b5ee992b547fe2755c65fac57b49ffff001d24109c97","010000009271a9ff54f03283b582acdb13bc540e11341155acd4930667b80fd300000000f4a3957a7e463fecf91a1e55e44524095baafdffba3efc96766de72262873a2264c67b49ffff001d26453273","010000000bf212511411cee3b2096bce3367fb7a5b810f0385f18018fd7c801d0000000037130d42d3a10002f4bb1579a313e4c428c34a03d4221de1f0d31f71e28feb3e24ca7b49ffff001d23e65d48","010000001238b5e469f14fcbb5951e9c75c32e4732be34055426090819fc5fa9000000006fa286ca5217d1a2964fe6e868830c323f08cfadec0fa94b81edb277f7171dbe18cb7b49ffff001d36b26755","01000000c7e9daff24af83e7c940f102cf81dbc4eb5f8c087504c6231aae916400000000c1d1e64cbfd454637355e9659a272dc5a6e5ff286ce16e3818e1c68ffc3e931906cd7b49ffff001d22c6549c","01000000aae80f26c6f9c9023dfc7720b0ad54f127aae5ea83d4baa24923829400000000e7ca2490222f3db77281268a4b54cc4972b7dad7b4b6c38f281873b5786e7bddbacd7b49ffff001d3459023f","0100000092fdccbd7e150c9580d0185ce69e9dd542730688e17d327e2f9051330000000058bf47521aeda00e5878ef995f9d8c9c9d8399b2f8e3d802d795f7e19d04c41dd0cf7b49ffff001d2e4f7cb8","01000000120353e2ff1eed24babb90d63a41dbc61cabaecb35dd7ccef06944dd00000000af96cd9553d31a2339347626ed867be7a2bdc5f0fe6d62b534cf3b324f3a8f4d97d07b49ffff001d256c8795","01000000699a00df1bf21c7a7a24e9f58dffc2542ceecee87ff22a77d979e8890000000014e7327d59228af6357240140e85be9b5de4e2035fadf257fea54095ddf9be695ad47b49ffff001d26b5c280","0100000081a0fd06fa6228011ddbe4399552ebc5f2b8eb6308b3b91d4eb5a1c000000000eafe875432ae6ef050e2b025ae61ce00a16ec3f96776d18e5f957dc5ef04a9162dd67b49ffff001d39378a1d","010000001a5e9c900253ea1848b0237830b63a19ef17a7c8b3c16b4ab0fc1e6000000000c046e30b77e124b04f17dad6a76e53e2d192d1841743e94bc045154c5aee9e2b81d67b49ffff001d399f93ad","01000000687d71b2b7e3aeffc2ff8bf71c80f944118d5cd687e489b12076dc3a000000005a55da87f425b8cee1ea86f8bf53275f83f9bf5e4382cb35001e9aa6754f5eff4ad87b49ffff001d1b0de2ca","01000000d458317edaac98a722101c9462458d1f2261124931bbb138a13af09b000000003241958dee5e5b17499618436834d22fb72b0846f241a1d21dcbc7f34af55327ecda7b49ffff001ddf14e501","0100000028eff80cab6b445bfb5497ba6d916771abbc017294fff77664eec93900000000ec9cb9fc093cec004459f6b27c806b6e33d96c4423c8f961472c5f944d54f1bf20dc7b49ffff001d31710c26","0100000040ba815669d751175d0d2f885032b333fd2d55607c7af4ffe31ad77d00000000279a7f72c7574ec7b6a23dc5a7040a84e0a3fd550126336a5536f1ef68fd17bdbbdd7b49ffff001d3834e978","01000000e4649bce2eed8eec05762d8be73d3e3833e5a83356430a69db9cb5a0000000000dfe2fc6fc4480a5c61dcf53a77ceb839b6c24b4f389fed2a396a26e238f0e40dddd7b49ffff001d0764e303","0100000094a726307249cbabc828457b931c72e894f30debd6265075f0330e32000000009a1ced3005c4b4ef9ad7b2908dc77a31c7a4d31b0c228a806808468bb705d43ee6e07b49ffff001d06c2c9d3","01000000bca32bcd43b9a1de9d27357b1e63ebf23557f6e3773b9e1cef90a72200000000ca74226437912bad33244fb7090f58146c7b0ac2cd341b6082e4ab9a5c2c1eb130e27b49ffff001d28f924db","01000000784ba3470bb765e53f806e13e6bdef04e1051d43b2c6a593f2a966e6000000000137c6af0c48421b21c6ffd3aa300775c985adb49c90aa094268b0c33f22ddaaf0e57b49ffff001d35656567","01000000f6e68b8f8b8ed76e001cd285ab7c2a1eb27063b9260336f110a267df00000000e3a94ea8746dbb0c0351a5239f64fba21f3e37bcfcf668c3e8d1129d1e183fbdb0e67b49ffff001d1ce04359","01000000095c7feb9a7e67610502764d8257c18eaa70c6de949496c578dd73aa000000007c1661ce778a1fc283497085f029b54c317b5e85f1c950c39999c478c7ff488a9de87b49ffff001d3a616940","01000000e5bee040552e6f18f5291dc896a3e69d3f84c1d819a0df5dc32f5316000000008f0090f7411f576a5ca05d63316553f948170354b4866984204fa551a6f1d066d7e87b49ffff001d2953f42a","01000000645a49b33b8c9c0426f3fc896e9a6d4e804182af1e7b67c6e84df52800000000cda67c87c80033264de15fbfe1798da0e915fdf4645c87b86bb2e6a4d011cc8e91eb7b49ffff001d3372f85d","010000009613f52a95a4591e64ab3b8f0583f3392a4d40a7f278995fb97c10410000000079795cda81ff8b17f81d1cfd5ec3170752215d365274cf61aba238def0628db938ec7b49ffff001d172e0317","01000000af26fced83e0c092ad69b271fe6f82d1c0ec598f02970195569a83a30000000038c0c71ae765c4cadc3fc6fe2ac672ad0a8aac4666bd21f23a7736fab5398c281ced7b49ffff001d91ffd202","01000000b0af7fc2f36c6e7b71f6e475dd1c25f69c83851a0d1dbc2dd093f0b800000000b84ab63988cfc88c4f4f27ab62d63e977482567378e6b011ca679a990d6009fb8ded7b49ffff001d2eab3f33","010000003e42b56c1afc21cb1b586e19f18f7d455732a12659c8f475cd2fab9e00000000f47943683ebc7a9c253cf3fa2567fa5db27657229935538121a4ef957a0db340afed7b49ffff001d2cad3d93","010000006bb558383ef0374038230187197512c267e57619f87765feed2d5c580000000067440a440767357fb0d88fa862e91df1215554b973442746d84505202d5a35b50fee7b49ffff001d3cc06800","0100000024e427b80b729a379dfe594401c8ddbaf1e731f3857828cba153f1e30000000025e25b1628198f306973c6ea89471dc7f2a5da463ac3b31bd458c0e364dd13b208ef7b49ffff001d37e8ded7","01000000a9a42dc2fda68912784acc98747636b3ae3cd5f5135d36587fdee5c10000000036c1d6c6c64037c73716bc9bb2811881c299c2c04aba3542f5aef555b6ffd3d122f37b49ffff001d21944f05","01000000e48994d6b663a7ef48d6d4ac4d556a1b0add9c9580f49fd85f242c3a00000000f22ad3d404ed6136c851fe1df5fd4c478073316134204e35ad8824160dd225dd8ef37b49ffff001d16ee58c9","0100000036da957299c736e885f79b3ad2c67dd4265166e862d700047c7f5b55000000000a01a3dd036009b515c629da0724551b772015f25cdc82ae12b5396a93b319ae9ef47b49ffff001d5573f102","0100000086781dbad91fd51e1193b6bb771133f26671d9b5f3ff46068ece9e3400000000be2e620a6a29ad105c3e2b1d1c2983bb2ff22970ea9d0a0e2844e44e4148fc1f45f57b49ffff001d19eb1975","01000000ce238329fc9fd3c74cfb71259d62d9bcffbdd1057962b2ce8547208b00000000dc5de9dfb6b562af05b6f7e9ab6de13e7342958eca7e30e079fe06343dd6dafe5cf87b49ffff001d2f284c14","01000000c99f5603853249075383f8999faef8d6454e220c4331b4a23d5c2c9d000000000413ef671c54161912af813df6f5dcbde0992ea9ea85139090ef3d02944eff4e7af97b49ffff001d2322ab17","01000000508c32c1b7e194765a9b9a5547aa33d7f790659cf2606221c5b622e900000000c833e2e6405a17e16df82c00f72493fe5626eabddd466d710fb61b365970c84e72fb7b49ffff001d309546d8","01000000aab995320bf09543d45cb28073af6893ceb2065c6304e1942bc5703100000000ca548431ab96cf420c336b68343ad340d0bb86188c683e42bfe522ff22ced7a231fd7b49ffff001d0620d6c0","01000000c2246f00903c6f87f9498a739bba66a5980a43a7546ad1c0671339bb00000000e6b210b63dc5aa16b4309ad7458d6d0c86a6711c93706d125ff4fe729f5c3ce0acfe7b49ffff001d1f33c849","01000000f41d995c8dfede6dddaaf71392d8833387e02e501418d6fd7a86263e00000000adb6fdefe4b008e13016aeb8717c4768842cd48eeaa7cea36c260a4302f960e69a007c49ffff001d083fd013","010000004cde0dd8dd19db0c55e9ca55b350d0ced0e52f7de9d77e53262ed70d0000000017903d581f3e832f8faf28d0931cb0aab114c4b685c9e17fd3c8ce8b58d19d3163027c49ffff001d17265d8d","0100000087a21716ee07f213b65a5674da23190bad06535d09df7910aefdf90800000000dff89c814a34f4cf6ec25ce16da98d9526b9b6be51b359a013644328ab4e8f3eff037c49ffff001d370dbe36","010000006965c89f4ba37ed2a43e3547bea77e82f5cbf24e4b9304d1c2189ddc00000000f2a4a58aeb7fa7b919ab0471926e358a8bbce34d6a340680367f214f161cdc128c047c49ffff001d052cfffb","01000000e2e76b9c0bf8d6cbbc98d0b1034c9ef752008a48da0262c971ff876800000000dfea4e7141643ff67da25de8800d8fe7a2a729941371dca2968d49325b17cf8499077c49ffff001d39ae4859","01000000011afa9d59114e7a5c9c01a2776cfd681b5dcd2f2a802551d60f11eb0000000084b62d2ba98246bc35707005d45335ece75a9a70fd81552ab9d90fcca12604d130087c49ffff001d20b6fab2","01000000a3e32099469e17a350c3fc8f15d9708883d05a482e4e5b00fd8cde2500000000374e64927e75d792c53ac165f3307563ba3c4a8e8dbda78a862a44b9986ee16cc70b7c49ffff001d1a52e518","0100000041592c7d60e0d56f34d1830013b2c69e7bd958339340ee4f7b9457b6000000004e6f9a441668e1a3d6a1d2e3c4b7b945a7069e0efcaaf4bfe8ef2ce3273b5c4b9f0d7c49ffff001d1545b7c8","0100000043a89f3e3e1e92b397a9f00d31a608fbfb3b5097952a79b7cc8d3ae80000000056d11dafa5c16b4c9a3db27dbe9ea4312b0c9aa8a13e4582a0db08049b2d1877f50e7c49ffff001d8f256b04","01000000938912fa882c33e150c1f00a15ed15c4648f66861c5c18be7597a9850000000054d032483803bd3c8a6ce86c4e04df771935a24a424bb81ac3c6edba3f43851da70f7c49ffff001d1d2c472a","010000002c28c8dc0e73b84ea0fd1e438882c16d20e6347b9e22f1a0287de34d00000000f2d1560b0de69c7caa92cd65c28b33e835d59d68b4ab2c5bf77cfac5461ddd8ca8117c49ffff001d2e5e73da","01000000f6e93a7a5e9c23f6f28460a646e879e19884352036d5d71518466d7f00000000ea62d66ed65e1d79113e2414acf7f686c01fbe71473321e63e613b3571ff84ffec127c49ffff001d181e43df","01000000b7eb54bfd978de666f0154d23b5a5037cb0fb451767ce70a55e34e5f0000000000fef440b30fc7e45b8b1c6e3774f44c585c5247b6932b93dd956df71a1e784f62167c49ffff001d2cabb795","01000000046ba0c8ece3ca7dace0e0e8ffe93fd65d0d4fa6cb66e5d54571a640000000006698688e8b0cc8cf7b8d24bf85010287039c58db64cc565b0d2837d2c16114c8bf187c49ffff001d1a323f5d","01000000156b7d422fac1c72551220ba1a4897bc986e60816b69ee9058edb74600000000b9b4414df4addc45eed0e360ccac5a71a49ce9122856bd6f9c79e148c405a9ecbd1b7c49ffff001d2228d197","0100000068de086f91b5a53ae5d074a9ec60f66bd5e612f428aac50381451862000000008edb72896382918ed37ab9a135f7d26e2a75fd1aa17f44cb68b0db0f96553bcdb31e7c49ffff001d08de3ae7","01000000f151675c9ff40a15e7b51b5bcad4fa39650a2d22e376123b9f666349000000006fa9c24cdba44d9d2ee20c70485da2cac0b123e97c677bbab4766145bbee25d9f31e7c49ffff001d07ec9300","0100000052ad4a7ad754ef8e5fb59e3b528d05ea0fe2322d647504476063ae620000000022edecea4a108d5c17f74778f19d27bc12f0e2106bb343b416c13db921dec336891f7c49ffff001d3681244f","010000008e612cdd1767228bd8c1ede2357354bfc1c2539cf800439e7c8eb8fc00000000839d3ae9de8eba7a8820d87123f4ccd661034b3920e1966a3e79307f3f30d3624b247c49ffff001d39b9eda7","01000000d3af0dcc6f32c2a6230d8da6c311a61343f8e8aab8bd45f7b3047d0400000000f78967c5d3d52f300f09384a9af0f0abeee840dce48078d22b24cf8b93dcb9174c257c49ffff001d0860b433","01000000c1fe2d3d94e7af1c30d19e12352b50973da8960410358a4fca4a6f4400000000fcbe40ae5cc4d924ed133e52a6c142845d103286fe71c1232cdf0d3ba5f59b5e26287c49ffff001d3203d991","010000003b110f8c846811d5ce7ba447266bc77cf97beb9a0fb684b2f56d975900000000944a4fbcb53290b02cf9814bf94e595dd35e1b0df735fc8e4557431df5d0ed15452a7c49ffff001d3029639a","01000000b5d20bb6fa15481a08c9e68e995e411db4dc9393608c21c4579a7e5300000000b6435d6454a34e6cf1af1f8baf90ef767b3ff7c6d5705c7f8b82930080ef68464a2b7c49ffff001d1c8789db","01000000532a301ed84a84ea5d85b9d2370862a1dbca7a273a71dc862e2a2a970000000014875bdc3e79c34b5967889bb54b6afeb6ecc8fb4a7b225d22ccb1a75414a946bb2b7c49ffff001d2d12995d","01000000978fff93b59e1ad59c85c9c806fa68d1c9d4aced722d8cb8d67cb03f00000000d60c7090fddbfb7c4e9988207f064bc827aa5c5b5d0f8e5200b37ce87c04e13b5f2e7c49ffff001d18f0aca9","01000000dfb19d9ebb89542d7faea300fb3ee519176a96519f8e19db59185c5b000000002605f66ecf282718fdbc67280ef93ab4302b915eec90e2ead6b7143a5ab86c0965307c49ffff001d8ca62e09","010000003a6a5aaaeebb632d74998dda6270f1b115fd4d21ef13ba626bab96f3000000008e50282b94592d1bca68c477514af14b5b904e99e5bbd35996c630b68dabca7776307c49ffff001d27a214b4","010000005f5c058c780806c32abb1e6ba99f0d24efb55fac9e5a172197cf6b0c000000007a00c0822f7ad74fd0e5bf9ce1173fdc5c81459e6969c3492cc0eed1d380960b41337c49ffff001d1dc89bb6","0100000009597715b6e69445325371d3ceac699d324fa5de33a5791c32de46130000000032668c3094735da3f30454aeee4f80637fdddfde4e9920aa9fa7f9b225cdcd9b62337c49ffff001d21227e9f","01000000a6a9aceeed04632f90bed04b2c190fc33ea90b822d63c393914b4e3a0000000074f0162a33f97dcb418a2072b32f262a9f22f7f548871dd2a5f860990737763f14377c49ffff001d2372d771","0100000028f7ef901f0729b960a65365de6395a36dd952339a918330c492a75b00000000d19d356ee060a9314a1eb3211a555b55bee6ee9f881c947a0fc14b8d0397489a3d387c49ffff001d38949b9f","0100000091e8317094eb5b334dbf2ca87649d4ef92004299352d3b0e6d0612f500000000cf52c74d2c1c2457d66337dfd3c99e2add973e4c35c571c117b3779ffb6c35b7fe3b7c49ffff001d1d486c11","01000000d69e9d5d79bc406de042ab094c131b6e8f8885c89353ffb494c447fe000000002baf90992eb74409ae7cfb012291882becfaa0aadc0eba3592a98eda29a5d211783c7c49ffff001d315b69a3","010000007a5f5f90fcfddff2be292eaacd3d9ca53d6d0908ecb9e66f0b9d2dd500000000fffc1776d53a6fd0627e5344efeaaa8702054139bdb076d3f40fcca5d5e503b6e63c7c49ffff001d1615fd04","01000000c83f189028bf82caa73424f36ac62d217a2abc26aaf61a143e9e023e000000001788ea2ce1d82098edb9a12f1664918916574767d49f52faa8dc5de368c3f7a9053f7c49ffff001dcb4aa009","010000006e293f286ffc22b36a293990eafe1888ea1d62b04c4432ca30b68ee900000000ed326cdea4afa2a3ae91a939ceda8cb71b8e5937ccddbc09089edbba9470545873407c49ffff001d32cb3e80","010000008cc2a8ac3fff7188ec079f8b1ba7d0c08ba7aeb1bb9d04302553957d000000005076f505a7b57918422b57399573cdf2d2b4d17e2b06a401affa29b364a8c83583427c49ffff001d1d65cec6","01000000fddf0083321d5aef66a1d5ce6c49403d4ab5a3a7b2dc44d7a22eb93d0000000051dae1022095ba70230bcc6f6d3ba56c2188567793e90b8391de8f1e37b56637d7437c49ffff001d24fb5881","01000000392edc792b0f86cf82869c904e44e3a98966e9e64915f33c8fd0d916000000006e0a65d6ad52d2933e4fa548e43d62a233462957531cb06bd4813dc01b8f3605be467c49ffff001d175dc882","01000000b36b01d7431e33b92b5440d270d96d06bdfddd331c200808998ac0f0000000007f4900404b8d19bdaa45c991bccde79efcfe4741a278ea4c78d7f4c8d0f241fb69487c49ffff001d22f7e6d0","010000001a5251f8e195a1f520b893b6b566e3d167a59e767c1863864718ff8b000000009323f5ecc4f9a1bc99d99f44b8f7d2470cbd4a7a0b02de030f10e3b30c380430994c7c49ffff001d37e9eed2","01000000e0704534bc5b5d257fba24fed08a873082551ceca0778d99ebed484a000000008f0c0231830d913d51a3727dd1984262e85285fe0d961cc5377465a00bf29eecc64d7c49ffff001d2fdfd0c7","0100000053285de40f9f9748960d08e2a74998df1708dcb7d6b8de48cbf8552b00000000f14f51187ffb5aaf881bd4040b4eeddd2f2bc31e9cc0633be74193c6d6af6c4d274f7c49ffff001d16c5dafc","010000006944d6066917400119a6b07e3421a3555f19a1637dac1cb8e7032077000000000edfb8f6c0b5c94d45c9e0d99e4b7d7db4764d8eb32c21760848098a35e3ca9fa24f7c49ffff001d312e2550","010000008c4ca46d23fa7c6c9c40073839eaaa2f3754db3b3fa9bdc71efb476900000000530cef8298951838409ab52ee06abda6a425802855830f3e2013c0543d62e8f556527c49ffff001d2d531b15","01000000e204e2e2356982a91cd6d44928c38f5a20eb80765ee7a51e2a55e1a500000000988b6ed318e72d3ef034fc2b129f0146c0afd79a1d04c35eed67d1dd9d4df642c5527c49ffff001d331ae3f9","01000000feeb4810cda1877a6a4351269f72c907b62644942b32804b99a19cd70000000067664d0687f11ca62410f41b1539e1111723f566c049ce4243daee461e614f8d67557c49ffff001d5d80820b","0100000007c6e2266ef432800a4d27e68f856c576b317943ac5ebfee722fdf7c000000006831acd23693d29d4fc68cb653a4c1d59918ceb7b8e0db5aa24d23b7aa9a33362d567c49ffff001d17dbcba2","010000005d40c89dcad3d39881c4fd771cabfa859cbacacd5e866c353b29421a000000003926f326865b9bf95e316aad36a32280c8b94c026fced7e3007f0d3dc623d75208587c49ffff001d16018504","01000000c2ebcfc6180f20a0297ae06f199e223f253825efa43a9d731ca1218a000000008d6540948831e06e71a42d4c3dfc7f997a0436903704069f3bcf5ee8b36764e3875a7c49ffff001d3761ce97","010000002c79dfd31c6cbdd4fc247e8a9c0a58170836e41b55a7e57bd2d84439000000002734c7b45475aa833197bb2155c4f57e06b2215ad39189f3711f6ef337029be0325b7c49ffff001d25b3d333","01000000d3843495a2d9f251c46643c3e0aa3ef6109d98a6cacc59245b8d3c9600000000cc95044a8a91cc2954ece1e1228ed5f858b0ce602187526059391a3b8eed1d86ad5d7c49ffff001d1ebcde44","010000003b5f473be98292dab205cad7829a4587990306ad94172491b94b7b3100000000ec8d1d84f9050afc3511983b1ae4a9008ff0a75cbf348cb5b9993846bd1a8a4c3c607c49ffff001d353cbdd8","0100000077feaee6a13d60a2434e084992363fcf0b572c689e59077f1b3501fd0000000089a1f65286ab233e2acdba6063613e389eabb289015ae696e1c12eb9c9067d571c617c49ffff001d2a2eac03","01000000c3fc15a96b192b34025a7fe6fd75cd568368df2a6798d858a58b79ab000000003fa7b113990c6b34a3dd8541bb3d8eac9c5d18a3d604acad0374394eb5a9ddb937627c49ffff001d22ed878f","01000000e00e4f77c039dd0b36a2522cee556ae17a227110cc39380d9d07c726000000009b02f3b47364360638c1b5f97be5fd50129d03ae48d6b20e382e25cf2066b54f1a657c49ffff001d285509c9","010000000a9a209cf6866d1bb74f9029ddcf445ff567f04d13ba998e3a37e53f00000000f7361096df1f770fa06faf37727f9b15ba1718a8ea75dd77d8e2a17e0bbd20f449667c49ffff001d275692db","0100000031cbff1bb1072ee4b0e01933591309cf46ffc1216c90f444773d9530000000005de52bf3f4637b44d9a008790751e023007e7caf715e25d1222abcd57492b7856a677c49ffff001d1b9fb0b1","0100000024a74d67f30234c2dcadbf0067958e48a74f5464c2e4154c870fb5c800000000d20666cfe0baa259742f58439c58f38d0679db60b8d61a3109b7aa47c1bc6e33e8697c49ffff001d2e2215da","01000000b15059d028637a0b20618ef20327c379c7e80938c3ccf1f5ad9ae1190000000023e21e0a10f93dc4b14d3261db0fa731e9d0ea0df05a97d639eaeaa8f51f30ba716c7c49ffff001d07e317cc","010000007a9b04825db8507c871690dc59e47f68d45d154cea1af907273926d300000000c55226fec8b1e96cfa918cc3df2f8e3ad82a0cab2c45699bc21922b7a1c57ae5e66d7c49ffff001d35fabce3","01000000d8abf4f4c57ceb50acade48c0753564539d380b7d7f2c21d26b8bf87000000001e162103956b36a872379ea223ad6b7da140c18e9a18ba513fdf7887bd93737bcc6e7c49ffff001d2a80c9d6","0100000071e6eb6b153e87254511ede66e5862638ed5acfb21791b51ec375243000000000863fb2195b1d70e1effc2306c97109d13c23657d03c7c2f8bd7408a8872be96c7717c49ffff001d3859c27a","0100000051f6153c629734bb3b967fc6c21bc4c12f97d5e4146d04c26053b309000000007ef714771042ab4fe9dd0532a2e4505480e8b38d51769a3699e3d31f89430b5bce737c49ffff001d19e0a66d","010000004bfe64a242c27be5dd95223aa01c586f22b4d79326f2e40a7294108d0000000073be6e1df05a82127be7fadfad5356de54ca3f1966f49ed353d5f54f356cf2964b747c49ffff001d24b608db","0100000075f34113c86ac301450b583b6dc8e55a7a63292fc927025fa2ba3f0d000000008a6dc2b378503a15701871f870ea92afa030f40f08d6afb0369d5da15e925eb6b2757c49ffff001d037fbbe1","01000000267305c0914479af7aacec78f34e7773de25f85779512842aa0600b600000000720cd0d8e12c4036492600a37945e5e13376589a67bca4e3167ee1c202f3f865fd797c49ffff001d24014ccc","01000000c8cdf94ed2a525f73052944e8b6809aa8cf8ca44cbb6b6429de761a2000000002df231194f07ed94f94fe66cb743f452a91e03b8cce1b0d3d77f7003f60b465f657b7c49ffff001d138c9385","01000000a174703a839bbf2c910bbc31b3c0ef68f8d4ae201bdb6d2615a1c2d400000000d55aeda22d219dd9bb53a23fc75ae1f960248bf464116afa4c6c955b80a18e20587f7c49ffff001d1ef92c3e","010000003032966fdcec86fb74e4617d4ec9eb313c83ea232611c70f886820d10000000070ccaa85daa4418ca1e4436aef7cd0ef80d7e3f5cb91f5b66b583e666e36b59445807c49ffff001d1e19bc26","01000000f045ef1585ec64155bd679a6081ba41a68d55f7216b7f083b2a655e600000000bd9190f84ede170bf342a2f0f60d55db2c687b95be67c6e7206a14ab94100b46b7827c49ffff001d25c24c68","0100000077cd613c84bd5f296df1f7981fdf6098fba33af7f65559b21cb7a177000000000215d3c4eca52138d9bd393fd342f1b117ccb56efe737314d8f26310762152587a847c49ffff001d26cb6668","01000000510ffdba741beaca070ceea949e198ab33cfb498792db58ad2e6d94000000000feacf733094be22a43c5c5e264aed8903db9b3e4c528eba68e778534d0052bde4c887c49ffff001d1488b568","01000000ae9f0c6a4dfd8625c9c060bff0bcc79672bc7cbcd053b681f0ee886a0000000065891175bc50e022760cddef9d236331df1960be40d88fd264d6f2628d70f2707a887c49ffff001d27697668","010000007f749e7eb44dbd2a2473e77dae93e3caaf5fc0de319a3ce12d4e6d04000000004cb9e11bde9580d49d150c3bafbdc79dfa056952ba83c377efbc9671d2885967518d7c49ffff001d2d84d7d0","0100000095f27e8c1ddc34e19f4a2bb8833a26c3fc048d6a03453e2ffdddccc900000000bfa9dc3e2fb26ca7a28315dd8cf4d7891f690275d0dcefdec5f8008e708f913f858e7c49ffff001d361215d8","01000000ea947184cb4fe5dfc6a2518c8fbb6276d5d813435f26989d59b938d200000000c67acda6e9f0d213b46873fad48743f3b44eced9032990d4a0cf6151f7725a77c3907c49ffff001d1953fb7a","010000001450c7371aece6dcaa386cc5024d1f4336ff9b447a85ecebcce563640000000090805ef1b69b51dd99fc314b12d3121677a79d0d9d89285faeb96919064d0b0c5c927c49ffff001d1546fb45","01000000aeafae323cba1e16afbab076e6829d59b9ec8b41039ad73a8bd79acd000000000c32f36813afd73926b060f4106d313eff954b1481e0ad6a0b401da22f00c54c48967c49ffff001d0256d924","01000000d9ccec8100224fc99926b289802b7aaa7ee12e103cfa28a56c846eb800000000de833842cc07d27a4045bc8a4772ec353b163d9c65853fbbbbc1739b56683fa0a6967c49ffff001d18ab7823","01000000dcad28fb0b0f1bd0baf80916a2832bce2644b7f954906032093ac90100000000bac752dba141276f8cb6be7ce794272c645eee9f8e0bd23eab4283254b8046c63f997c49ffff001d35c78c1a","01000000b495e16046c6a71d7d30062aa1e5744fe785c3a94dda1621205e5bbd00000000844619f4baabcef5778554e35ce736b9c7b6d6231734f087abcbb281da8f76f5789b7c49ffff001d04d792e6","01000000053a09c2fb37a626aef918121fbe6c3ae18483ee83005d528aaed7ff00000000700d9f3c96865e9b68e8302084ea6e45cb647465a1ea1f2be91924047034b2ab649c7c49ffff001d326e0fbd","01000000f3abfe082221a1848d5302ff3e06b4cd0b87049b0d116eda6d1248d600000000b9ae0674c6ad6f44a96c68c7b86e7c1621abe1e8e23ea7d2f4ba78bc35bf7fa1259f7c49ffff001d2f010e42","0100000065ac237f5a2bb71bcf5de2e3d842a0c52b3147a1e1bf200387a0d54700000000ef3b69dc0b6f640fddb6e64d60b2fc206ae537975a460ee9051e7762e0d897af5ca27c49ffff001d2519f768","01000000152159670fd0384147400dd1ccbc72999478b155fe606574b1b24fe0000000006b1a5367b73eeda57bd76029c5f3043f79067776797445f7733dbdeb989094bea5a47c49ffff001d22ab8533","01000000add01e2b2078f6fbfe88bec758c6d469024fc7bf8f01d7fc0b379b080000000035f4d5913016ed74edd8b04c00e408d7d029133427bd8259d88f509d27af20355aa67c49ffff001d2c1e6245","0100000017f7d142b543b912f3c822f09ad8abd44bc39e94e3e69638605123fe0000000049bbd0a63002e7d58e2fe1784d9b66824bae3a8e05b96b07b790c3ac870b9063f6a97c49ffff001d1ce49a55","010000001e841649bb39f8232d2796ccad1d7585b7e9c59a88bb92d16e01a3d400000000a67b626b6e9cf8b5ac88e718b87e7a6d8756fa9c7fc4aced54b53b87790e5331cdab7c49ffff001d08dd8309","010000009609722a51d1e8e70b26fc6f887f06ce56d0a9f4f0062007af3e083100000000a95e38ff004bbb44e0c5bcc7d8bae459dafef324592126a6f52d56a4963e8b5326ac7c49ffff001d35afa1dc","01000000781e3073780e65369f001e76ea31b2f4617768e39b2a440bcfa3effe000000004f9b94f94231364baf0ecddf5541f684433c0f992d5b15eddfe04b50e3c4a3ae2db07c49ffff001d28a127eb","01000000dab3796945917a9dacc845ae8046166808d22afe9d7e7a92b56fa72d00000000900207b8ece663d95e0f55ece880af87d3a8d9bd0977effa8eda5b5e55808b7215b27c49ffff001d146ea7df","01000000d9436d52c2825f859426c06157a214174b15055b979a43ddec6cd1c800000000b68eabd475b657786a9b177d79ba75624c6e4ce7cdc6e49fe8c519e70c8f6cbb89b27c49ffff001d06c0c631","0100000012c1a3a558ec69f9366308dc336a9fb0b4ba1f724af3c262537599080000000078a1bf9d66608bad27ff9fcf55a2330419ce367a3cda058ebc232f4d70eb05e250b37c49ffff001d51413e00","01000000d71c75cf9a96501f805b6e0c00dbd3e076db325e6fd142f7f28a0ebf000000009f3550433697b124f75ea55f2b98b148d2fbd1dfd1811e50439f505d6239219fb7b37c49ffff001d15b8ad6f","010000004b28c42e2506449f2d2c03b744784cd802c9cd31d222528e685da03200000000a864bbee78c24116596356c2cdb0884984aeef7655f9ef03a357a86f8e2ac439dfb37c49ffff001d46001000","0100000005eaeec02964d8384850e96fbdcc16eaeadf6170cc05ee4b37dac98b00000000c74fe3e80ce297dbb2d6caa69ff7909d691155ec6bd83b38812ce222d515ff4942b57c49ffff001d153f9754","010000000bdc76c6da8500c1f47ea4b4630f4f933888c742530bc5515f6ecc6d000000008676193f7d492a4eec1d4e070ef3c42d9a3f362247895be29c4c685445dd0c6a26b67c49ffff001d0869cb2e","0100000052a16b0c35d6b9c8adaea9f4bfe0413dbafca2090b7195abd85d22fa000000001cfe9946416ec48faa183ee2b3c37ca6cfbc888f0f5855d53ff0fcae2b320181ffb87c49ffff001d35689372","01000000c3b98cbebee4c72854ad290c18d7fa8599e6fb1f82cbb6d790d7c09a0000000028f9402eda7a26214cd8afb0c6ee83c6b2b5528222b873767e7282a2963bd53a33bb7c49ffff001da80cfc05","01000000e25330712835ac1d1222410136dc651a0070f09848a967f566f5bdef000000003eb49565c4a890715f79b9d1612f5904ddff90bd440f4d1c185f687c9bcc223510bc7c49ffff001d266754be","0100000042b89abb388936566ad17b800573ad418f0f1dadc01b2d0bdb0dd4bc00000000933038ab2f1c81d3f012b2b52688e297ef028af2fb061da851d0f14c630c1251eabd7c49ffff001d04d3ec61","01000000062515b4a11c6af1e6eb18a53f59e26d625a5397195062baf25c4528000000001b7b5d2c9c9d820644ea446321d50b1503b225a2ce21f3beb8c910b7db4a38ab25c27c49ffff001d2ac5725d","01000000ae0adf7b8d5f3c412e7c07e11b4df7fd7d8c757319ddd26ba6e074b9000000006f9df53224c3d5ddb3897618026d13b4ebf9452ab538bccb5e658d4daf0de24f7ec27c49ffff001d36982e01","01000000cb6f21a6038593a2e55fc33ab62c4be7e0da3a9536924053d0056a9e00000000009e4f78626bc28c8e384cba4a0b90c78cb72ace6cca4c7033cfa981ec1ce324b6c57c49ffff001d223f6035","01000000b054eddad1fa1d9b78dc41291e29eae2cb91c7a55d7754cf1047c2f50000000041f79ecebabef6d69a7ddaecb869fd91c53ef43163381a7777874828fcb648cca7c77c49ffff001d3333f661","01000000868c23d71b946b5e4cf854bcd2dc0985e0e001b1fa3bf713e031000b00000000d30a8d811482a0879f25b5765d1759b3aee0211f71f0b9cf3481941e6518ab09cdc87c49ffff001d13e0c9a8","0100000030c13dae8189db8e8d321523da55e51e2bfddee6580f8759b41535bb00000000a5653b1073d8b564714d1ac30c8eed537e86d036eb6d572a641186c7ec65398a2ccc7c49ffff001d1e168b61","01000000f42afca484cd7c0f626afbe329f684dadf3192a117492481e82f31a40000000039f7024ffb826af754bd6be687676ceecbde3648fa0b71bc287409728d7c1ad6f5cc7c49ffff001d330584d4","0100000050710343f468ed1e104d75e84056dfe25e70a165302d5b9fa3fbac180000000069b2f6a7c859dc3dec8052d1dc4128a00116130bbb3eb5eb8dd1ee743f8fd2d33acf7c49ffff001df8f7bf06","01000000d189f45cc221173294e976aac82a49913a504c52e52014c9ad91a6860000000066772fcc242240cec6ec839e5565393f686c638e693a4a1c17f3921b6aae8f6d75cf7c49ffff001d04d50e78","010000009f28390bff70e36d109c568590a4bafc8abb88c1d5b89902427880f700000000887a19c95189c4a473c95b09d6f5ecbf922408ffcab360a4119d5650129987d60ed27c49ffff001d23d7157b","010000001ef3f62ad8f6f76f8bd1732e9f8c14c0aff9d06a550ecc65b37cfa2200000000a26d71f25c248f9bf0bdd86df52fe5c6fd1529054febe2804cbf916de3b3758d67d37c49ffff001d316678af","01000000b11a7972e5b9f92b5e15b41d3d3a9a802f6f634b7cdab9112960853000000000ceb1caa3af99a7624b5b5dc206331fd9866a40465c2744726891f1c195c5ccf197d47c49ffff001d34266f1b","010000008f107f036eacf814c7190e81236ceb1565269a14b33d56e6180a4fd800000000edda7c5ec2536ee55862f4bdfb8b7403dac84f9a797572ee75b725c47b482965d4d47c49ffff001d9c92a500","01000000c93f6be223c328d36e891b147124f73515a5726371ac94bdaa2a822000000000aa6aec4364532485c28e9705cf7cf24dca7d1fec40263d48ceb30318b068153634d57c49ffff001d02eb8b9b","01000000d190e454e3b3fb7536a853b6b5f74e9ffdd05e7ad47cef67fe1b011900000000d6f2c5a1b1f255212a902e953183f10477d3737684667a2a50a820f9c3ad6b61e5d97c49ffff001d154c1f08","010000008d65c7107c19e9d6f90ea34e65dcb2422bd5ea2604b188d69787d6da00000000db84299da7ab4fb83b413ab972cc35cced09f55d88704f1cf406940d6b56542f2adb7c49ffff001d1c45df33","01000000e2233e36daf64948527f4a1d2d3e1de84d8c7ba70fe6732f278869ea00000000299586824b3d8b41775039ed40ebbf6ede25d9c53e340548881b59a3dad976e1bfdd7c49ffff001d238379d8","01000000aacd838b0d3b2e26ff1dee1bc4ddb53ec34b7c0ad2df9e12dc25099b000000009f5d252b3493f17dd55179ce4cb3c17cc3b1b015eb254297cb91e17b0566afec11df7c49ffff001d2097cfca","010000009972aef12c09f39126601b339fac6532a2ca662a6553c98e853c883c000000005605a51987b7f6f7fb8e9ceba2ee4b3ae719b2ac089dc5afe807e0dbcc7dd6e3a1e07c49ffff001d300afe81","010000005380881ddbe303a630fa4b52f1a8d75da074cd9b70b034d84dd0cbeb00000000c4a1c908e089541d7f4f9a3142f88edec7e9459973509d7fa5afc00079d6fea90be17c49ffff001d02976c86","010000003a3b35bdc435d8eb19bae514e30235f51eb55e3da3c29b024a1a5a8400000000e5e499d0f452bc418a5ef01f450b5e2fb6ca68695ad59953a63eb7273e3f06dd9be27c49ffff001d234adfe4","01000000dcd7ee6774056c4520f9325ba1c4a7e07d9afa6a25479db37a9289df000000003159503642f8b1680073e33d72dba27ae1ad296657f42e8b6a709eb1b4364b56e1e57c49ffff001d04f0072f","0100000078305911f1be41e9d34a3dfe8f710c50cdf7d39c85bef969c8cd5b1b00000000bd6c9b4a25b44f43f7724adcf267bf98ccea9e75e8f834352fc452bc4914c37335e87c49ffff001d269b9035","0100000021f3df748915fafb6af004dafb450a96331ba06749b909ae2730644700000000b78c5193ca06d83407be1a3a7133c91757fc7b389d0ef3cba33b8faa105667f920eb7c49ffff001d02bb7424","01000000e847db8272d60599588d2fd76983a6d238c0b799d07203ad9f954413000000008d8027874801d5427277d7c0a864be76f430163d82a1b69abcac0636a0fae6bafeeb7c49ffff001d1b668eb5","01000000b87bc9a3591de57e2f8fa8033225876082d4f8bc44ab542c679d0aa4000000005175f35c33f720e48c4451a16ae396908b4a87300e5d6b5de4f531b4161f06c596ec7c49ffff001d363abb22","01000000f41d482f1037727b6eb6eb339142b9f262e8294f2922111d315669ff000000005782588841ed5037d6ff99ed431fedecb8002a792a39ba0dba2855c223b8bf2aa4ed7c49ffff001d32a3c444","01000000d32acc742f4b2e479511df579a3fb4439e677b892372169e22eee13d0000000002f7ff034ce26f5c7ef14d1ecd8609b172dea9a19204daeb626780666538a0f547ef7c49ffff001d1a56806b","01000000d75b7f38da24420af90a1d6b168c50bbcd71ea30ce3b68136eff37a60000000005b5ff69548c76142f6049e537f3386a17508044ff96d5af30b7a083f38dd63b05f17c49ffff001d36db26f7","010000008dc17e707c25354e4450cf69d7f1ec5a53e705d183f0b7e22ebb050e00000000887a73c221d8f52c428502452b2190dc5c3002c8240ee2d61cc36bd546d148de5af27c49ffff001d03ac23bb","01000000b619c1170add016c5b1492b4e48fcfb015a91dea7344227fab279b0200000000f1f31f4a9cd56dfbb25d99f414c0aa46bc97fcacf7b4e5f28f6492ff44fed2cb80f47c49ffff001d1fbcf7f8","01000000ff524bd8a781f3c3d72e3caed7922782952a0963478f657ff09f47f400000000a58b0abffb4b8476cea2493171bc4a6ad4ab98e5eb3999e126df21ce6c18e355acf47c49ffff001d2b1b8d2e","0100000099edd8315324087e5e3397a2f61138e4caf8aacff2e5f098dff8f13b00000000cb0e987e477e5a792e22b81b723f088323befda723c9c5b083a23e70904b99ce0cfa7c49ffff001d13a4208e","010000006ba030a351ac9f5542a0825cee1239f0781dea861d85f64d343a03f600000000dc9603c559ce98be6e6e1d15b50f3d66243b3854588334a69665a97809c3a800f3fa7c49ffff001d2bfa0b2e","010000006afc84ff18c0cfb9f94976d72dde57000c55cc847d47b18cfa968d7e0000000097c93b878bbf4d7046a893d0a7c77994e9b6af6d066de569d79379edb4621cbac7fd7c49ffff001d2f7ab96b","01000000063686610490bcd5c6e174e0a7cff491153baf57038b32685b8e8d720000000084d226d517b26ce1d825229aa9cf74e7161aef15cbb9c7bd6157d3f8659a29e66bfe7c49ffff001d9b759002","010000009c90fcbefb16ab38256f2d3b8fe6cf7e171930a5c29f8f86bdc225ea00000000becf724ff91d20a086edb050723ec9f30bc3bafc4de3f471aea1add12b00bf8c49007d49ffff001d1b18d389","0100000046567c2a5fd09bf76633e0d6b4b54ee7a0a35b3d975325f662fabdca00000000f66e3d74c2a55cad78c9ba46c5b20f4d5209201b4974a6893abbcd0e447aef0b27017d49ffff001d2a65b710","010000001e649ceafe349178c1aada1950180951c2374fcd6204800dedfb18f9000000006b5f3f168c0dbd186e2e32674dc28c1529e006592da0ad0b97e91baeaf70c854d4027d49ffff001d2821da34","010000000d3181e888b0bba8459b487b7792cf6a6fa4e83542e3f8d9880377d00000000092ee384c1b56d12750c4c02182bb7d078c1d5078b7a813ba1668174595d8d1e422037d49ffff001d32b1c8d1","01000000c5cd3dff270227da2e76a833a08be62ac954c4f38efc1d89e409ad62000000001270e3ed23e797ddb3c048a14482e9e58f5050753a53dea02a94e8ca1123814341087d49ffff001d1a26a6b9","01000000c3d91c846054b2d776628030cb3960fd02a97ed4e9555bf2b51a6aa7000000005756e9d87e899d2de771aea68647689a536ebc309aea92fb4ca2fa1cb5b67a5b8d087d49ffff001d2ac1649f","010000003e25b11220169d7040ae9f7dbc2f6e1e83baa60737076fbbe34cd63900000000e01310b7e5ccbb23311fcea99ac095813cc8a3e39168acf6a58105c4eb293d7c710a7d49ffff001d54c7b202","010000004c3131262ef498dffe6cda6049ca28dd7e6663e7d3bc3146ba8a259b00000000683229e5769079c7d25506fb928b4c6157c4a35a7a8a80dfc4235787f8039bf9f30a7d49ffff001d18178611","010000007884f303d05bfbaa8669ea0974ee1eee6fd5e9683e13f38e96e3dfc20000000021d25a901bcfca8838cc580109f93c828dd43963ad8501df4517f2221ae14ddb8e0b7d49ffff001d24a304b5","01000000899d5f8162681cf4099a1d2c10b081d1cb16af12c64259814fdfac2a000000008c4efb101ea59e5e3317010e32c4fa366691ab1162b0da6c13656f23e3e1cb101f0f7d49ffff001d375cc7eb","01000000ece6bc902a7b7be2ef7f96b0b0e391f956e1b37a80d16405f31b3d960000000077571745e090aa1aca60881eb58276e7c3930539b3423fca3b48970f7eb7623431107d49ffff001d146205a9","0100000075ed9896efb2217f8bea8e3020194fdb576821a653045d45a0235ea100000000b7dedae3cef00d39cc3f13c5fa56714dd133f30901aa43c86513e315ff1d3664fa127d49ffff001d24a36652","010000003407e085329c0ebe243ed4296c4e4144bf1ed85074a360e54a9097c900000000ce89d2347202010745cdbb045441c7325acdfab859fb676446b1a980624cf66d9f147d49ffff001d2d155a08","010000004172d521448e8f82e5f171d840b940154804ea120912054225a548ba0000000052f07e5cc635c6af6ffb8169add1551891fc8bdbe1dbfc2a384fdde5d5e4e519f1157d49ffff001d29a08784","01000000b44ce9a9ff7d1130cdfa31a85ba24ec7956bd20bc6ac124b9f472bd000000000022896523374e3cfcf6725c98e85821a3c51410883ebbc8d7eb39e80cbcd5369b8167d49ffff001d14db573e","0100000050d826f3271604f485d2b04b7ec5026491856cba80392d01efc11847000000003f4cf2add7b048d796b4426cf50ec3838d149f5a23add862cdff07c304d8a0140a1b7d49ffff001d173dae9b","01000000085f7759cfe6ea0fbb755e5d0b2b5c47d9885c7940e2c611d22651ef00000000d4fda321f59850339b73da603fe59d927319982a0602baba521bddc5841bf735741c7d49ffff001d16946963","010000008086e00c0110120c48cdf86a3ebb24d2796f7f5f649e32d01b7d57c000000000dd718dc90a4356b9efd1b6db07a02febf14dc0e4c5113a5d011db76526ebe053781e7d49ffff001d22c517d0","01000000f622c1757eeed2cca6e2fcd7e7db84a84bcfccbdcdb8319cc8c6572400000000315b28e9ee2f695679ddbbc2973050b7bb19a5067e7a8ce91298191d421f563a10217d49ffff001d2fe8b8d7","010000004adaeb33aa2a4c64eefea145fb939dfb37ef0ad2cce494644b0debfe00000000e346ddfb018cf6695dee412134f5e856990dd6852532b55c160ad3dd0a9ea927b1247d49ffff001d1af680b4","01000000dd4c4aedb2736865a4175622d34f9f3b1cb2736114dcfa8f13493dbe00000000a3c6c1e68fa721f00d6fc9a1b0414d89a853474207c0515aea17f7a6f9b57561db267d49ffff001d2c732e96","0100000052fa8d61d098e8a393c424c2cbaf624b1246d221081c85a84a677e6a000000000a3b6289f17e5777cbfe55b2649adbf6d4c133c3986dc5d7d5beafe8f921b29618277d49ffff001d1af12bd4","01000000f9a9334e75fa759820fa3a6fa5d62e5cf5877bcc67d76c06bca9d27200000000867605aaf100fccde44e85fae1c06bf5b63aba6697f03339968999421a287f82142b7d49ffff001d20364064","01000000f3afa0f67baa8e18b163414a92f35eb98e622d47bc5f058343016588000000005cba336bf6f460553fbd324043a9f35c01bafdf41c2f77e5d2a58715c6cff33a282c7d49ffff001d235195b3","01000000a1f2f2b3d1e0802ec927386f666ad5806e74d9d674a3573305d3e11e000000000fc8507e1100137895c01bc6dbe7038c04db1ffba17838baa5938c5a0c147f785e2d7d49ffff001d3218d758","0100000029f152080309106ae8b526d47363a85a3b617f90df3767abc4c43fbf0000000075309a984b0b5deb2185711711310f7cf663941edaffcf0b77ff489524b6c22c972e7d49ffff001d271c3d9e","0100000022b0e1795104586314e52e024a0295177213d6c7bd32f8d44515a5a8000000004c1f49de8f43e627203e15ec18e4d7be005bdf617b25b7e979d24a27724f9590e12e7d49ffff001d241e3ff6","010000002610cb0b0ce4683789ec81838e8eec88e613369724d7ddf17d129b0b0000000088be0f9aaae007208642f86b0d73b4f15995d744efcf928276d0334ea383bb7b76317d49ffff001d22c28696","010000004dd7564a022602e84811942fdd60c7a5c89af7a8883c1c2c8816482a00000000abd3181a805d17d6bc51241c0caecc38d14dd311598f34353e45c65c3a4d428668337d49ffff001d26c4f174","01000000b54f414c8b4e1dc76680c7fbdecb6cb2d5aea2080c643afb88d8d4280000000091e8191bdd65206180d51f5485b154272ae7215c81deb7233909277e415fccae26347d49ffff001d13df4a9e","010000009ecd4e90c8d770aaa3542e17ef1051a2d7ea84603e72120bc3e3f43900000000b76341a1d1829b102e30c945cecd53a9eaa42b14a9e937c1c11b7d7d814e0f344c367d49ffff001d1cac2664","01000000dcb10a95f19097724d27b5848962dd0a1570d359f48b2f8ad147899c00000000ed015c997df338c1d721b2c2385c97d32ccfdf558643918d575635041ef4160ba6387d49ffff001d1df053e9","0100000083d0479dc8812f626f2aae5b26c25af2a725270f7696c379af97e66e00000000cdd13d098d0d5e524b55744a91be2dddb9be52f4c8a44651d05a033016bdda723c397d49ffff001d26a0f6f5","01000000690be1461b6bc5d197b32a0e8e1d3a4b75924a2cf656d8dbb624c4a900000000eac512d59dd74590d534e5ad0425f54a084a30bef17181f92939da848cfbccb9fa3d7d49ffff001d1d55e243","0100000039083d0071d9edf503bea7f302e7bdc2aaef5b9315b48d0c6b38059d000000006cfc00a6b48bf78288cd93d6a8336753852050f097a9cc7a12250b19b3debd5a273e7d49ffff001d1853a3cd","01000000f85880bded8028058cf394d0c63d8e53c0bc1c1996ba116e97d45bf800000000f9dc81f30df5098dbb60d15beb679d0ff5b0aa5bec2a57c13effb9ee0e9cf28a293f7d49ffff001d035e5303","01000000712edfb26af73d6ca5c72290b860f44e2930f15b0ea8bb0da8397fe600000000d509280378f39bf51b0e5b3fd40c9ed46755c517ddbe1c7926f5980fedb34affc83f7d49ffff001d0268f4bb","0100000096ebc73516ec9b630286695f62e3201bbbaff89c953ec44328f17dd700000000932158c95df948533f6b5e2795ca9b21445609c9ab79a22d126b4bbf4d2583d973437d49ffff001d045e2921","01000000d1b2df7febca1fd7d0031c54dbcd58b2f20d7198a5bde80b3725c51e000000005339fa4067a6c47458f55cbbccb6c87b1a486ac4525e5f1d1ae17148ac1ec8bc94437d49ffff001d1763f4f1","0100000056aae14ca5bdd0f94d817f025b1a8683fb9a50d2e9f7afec4bb081a200000000774526178b8ef9772e0c73c2b59be609ab3168ae712084a630e2e8acb98f6b1edf437d49ffff001d93189d00","01000000e56efb354c8060c627852b87500b24c596b434db3787d0fdc957b93c00000000924b2ce0aa435667186cf6ac437ddc28fa5cdfa52ea1d40352c2bfe95c2243714d487d49ffff001d28430277","010000009a4cf311e301a97be98de23bd6b54631a7b44c949003bc504ac94f42000000007c7baa4529770d18d2f72e31bfae756e778eb1fe58e4192752392871fd51f075d9487d49ffff001d1fd340e3","010000008c94c4a60ba044b4499ee23e8b7989dae4492ddad9c8ad88120d0b3400000000bc5f96456a43b3679bac5e196b6e9d1f59e440c4eb974ccd391c8992caa00533554d7d49ffff001d24bd6da7","01000000b674c18be2f077534a3a2b842f094bc146585c06f50eddf34ab47828000000009db5be7bcf99105fd8f42c59326f6118da949c40ee67a9c10fcd1ff02c66b224b54e7d49ffff001d1c1a9d68","01000000fe9f1547a55cb991ac43b6fe8b87a3d44b7a6092bc626fccac19311c00000000794f4f79cf580880ee88e402dc2f4d5fadecbb3bee25100f8350b4028f60d29fed4e7d49ffff001db33a8200","0100000093edead13b009909768e6ef5f4d3b981fd9215046a70858b2c2caea500000000d3b7e7af0ea5eca4842d7a0842bada5a5dc1c6534d3ba469f11cfab4d97b4c7d99527d49ffff001d2c39ae2e","01000000a6863ed54fb1fa25d997525c923e80a622df9cc67ae9c9a75f32d4000000000034fce3a933bf4f09cf51a3dee215cfff1be76e8b11d75365d93cca55f656b262fd527d49ffff001d18f34a8c","010000006a4b4f41518361e6ce3a51c085a0ebebc2a791aba33d0ae79c9d091500000000336c436d235f2b6652daad2cc8e182b058922a4080fd563ec19629549589925b6b537d49ffff001d9e612a00","010000006a5f445cb4ef6f0841f5e5a87a60e490570ba8cb0aeedd40af97bc92000000009323caa6de9be4ddde0f6e771b0648866b7b0684ff10f3b023746e49a9da6c041a547d49ffff001d39e68068","01000000dbac99bccbb530eaa059e750fe2ddf014445018b089974b4bf1cdf6d00000000ace7f22be6b9632009eddf3f605871fbc479fcd32035baa5d47ce8d6c4d1ac9226567d49ffff001d02fed317","01000000ee21bfdfc7fba24c70040a24311bfe0ea16f93de0c2f2cf5246adca500000000015e0417bede590ee79291cee30a761e2afb3c7f16df5ffae0306e46d129340a1e587d49ffff001d1ada6fe4","010000006f415abacec339ca296f9e6c00e16067243f620ad24979d2055e9c73000000005713a082c2f627b68becd8d11fb6c136a229cd7971702a6e1378c4292ac08e38787c7d49ffff001da4189c36","010000009722d221159b649658caec7cdf694242845a96e3082474115dca0c80000000007f04797ba74378f19ae90db9fd6581e303f87c19c60d8bcd57f1204b55d3e2c86eaa7d49ffff001d6fdd5b7c","01000000e783e40c8b8e34182eada7bc212d916b89ef1f447f3b61add8682527000000006d11652084911c18b15db5d37190ade09c61724302a69d2f934a64f747da678a4eb27d49ffff001d9396b225","01000000302cfcafadeff58f2a28c1d8ed646d44c2785f386192ad7bd698b5b300000000e8e87574bd1ab2145f0527bd84aa59927a27a63065987cb6d9ab950f4d72e188c8bb7d49ffff001dd9f5240e","010000008a90070610fd4dd0c09ccde8a060a44b83929c1fa701ca2598638b6c00000000676801ee01649d91e3b0b465de1128ea84f87c73ffd2bc6c9885068383541b213fc67d49ffff001d286d0832","01000000cb7629fbfe13ba550c87681b20d31db5bbc7ea64abb108be9c979edc000000007acadfe358f8fe5b6e9649243a75d22a3c28c7ac7a82ffff9b08af79c0c58601abd27d49ffff001d2f34d607","01000000aec7f414c234e8452c2ee3d16fe23ccdab34f5da374e5127bcc59de9000000001ba3c5bac68fbb5232c732e17e4f5f48eb8ec7492206229c4b80b4d0833d395d75d77d49ffff001d2eed85e4","010000005b811d3b1199e51675df340095387d51bce44c6799a56f5761896eb200000000646aa4356de32b8e6879fe93ae6997c90f39d618381abceab3dd5fe9392df4ccfbd97d49ffff001d48e6b603","01000000b4ebce08804e55da344d94e0c98881d68bc4fe252f53ec7a9368c115000000007fe976b47f72709ea046ad87e40cb3eb293baec65e6c46acd5e2b016492e8c9b0fdd7d49ffff001d2abe9d8b","010000004d96e58ad3f70e28864ff64cef9bb1e9b758735d11ab9d05f9f3244a000000003fb9110c7b8e6a9209f440c50745646227ce1c88e57400aeb33e8ef2dfed19a491df7d49ffff001d22c26327","01000000fa338a26b7d54909c0ddf34a04217fe5543cfe3d826e5569b3222a4c000000004d2510a7b4392764d9a52b458f3d1ec74f736aa14ba369691913f138bb6b92f75ee37d49ffff001d052ad887","01000000a63df89e8bb238e969f66e9b7910cd3164d34365b2f99890af9200e900000000e51b989b06c9fce575edb3e104d5ce0965271b20177b17a2b97e025b10c5316540e77d49ffff001d3424ce0d","01000000e6f075fa6de6e767e22011f5a86683478671bf3eafcd2966032918b500000000d072869d6194ee4a4e0bb8c174cb3dcac704a748022110f14beb6e45833cdd0a13ed7d49ffff001d1cdecd3a","010000004e05253a14ccd2d60316d0ed54d531073105e4dfe1d29b7471360bf9000000009e6bbfab38a5ee5b6b5de0e7a20786b7196d9d6c920e7ce519a2e99212a0b2cac3f27d49ffff001dbe5e6e03","01000000d793973130882798fd20905d4f16a95bf50a3d17daf666d1bc117eb400000000b60817ad39898bdb9a38e37458462b130e619e906ef1160303c33b910d094c82ecf27d49ffff001d1c856697","01000000689bc9fe802d5238a84f4afbb9cc9e6d32ca03512b59add2a757767b0000000076396cb079149362fa6ba61c682b3ad149e60b9ec2ff57e42ddf925b358b46d447f57d49ffff001d0961f6d0","0100000093c44e0d7a5a7a247d442f11f41639a8a3b8baa861a1c47252fefc22000000000e88ca7e0ae9633e7cfcfcfdd1c67257ffe82c75abbe20aab993e7475a493428edfa7d49ffff001d1e209c00","01000000d9b9326901306f362d2e91bf9c4ed51409118fe2a16cfadf7db4b79b000000000ba6c9c97ab323dbb0f673195fb548d7aa3f5af3c0c84d86d3cf53a1af00f0f26fff7d49ffff001d2e35ed26","0100000023ecadd8d13e47cfc49746822c2fd0008acf321ec8e4907f36a229cf00000000e9f2436351d1f567a0fe0db1043b35be579127e3d33a0ae3bceea8f5d65f5c3b3a057e49ffff001d008294dd","010000003e8e9bf358a40231bf1bc7513a3009c262d274e73b0fb98be38b5014000000002628f6c12136b20f47063425c94714010a87a92916c15415b0d6c951a9c137c501077e49ffff001d3cf52a07","01000000f73252d4de0a14e54e79fd030bc9c6ec6da14fa4d323dea485d2f70a00000000c7776f9640c405e9068208c1c2964016a6492ff191503a0ce4597dd23b9678df29087e49ffff001db8862801","010000003a6b0b6c495e53c309a069c3e6f70cbf0d7a2c2ad3a7a08f354dacb80000000082cff3735dde9652f4fa875e6f55cf0db0f9d35c7b572c3c14948df7f81e5a70870a7e49ffff001d36cff4f7","01000000081c1127948e3775d3527235a39a330fb93d0d780d951e17f0acb32400000000845f24e121512c6d9f6549bc0ca86ec2487b58e44b368f1ccd3746550ad1f38e5c0c7e49ffff001d32cc9405","01000000a689baddc7df259c57e89648ddfcb7e499ccc5ae3255b666ad61c3730000000056d8b7e550a56a93c3be57e8010eefb4923bb66f8cf9984fb3ccf3a3e0e8686bfb0e7e49ffff001d370b7596","01000000c1dece210949f750d7d45ab8869d58c56f13a06d185a99e1b950f262000000005fd9ba436ccddec68f91a657aa5eb1250a6b6e2e13ae0f85e691bfd54f32659fbb117e49ffff001d2fa4e5fe","0100000007eabcdb6245988d7dea396a4232c4655305a608ce75d9a6bf3acb560000000024c94ff5cda0889e493632a104fc299f9d2dc832ad94b71ab22d854ff41775ce99137e49ffff001d1fcc8f1f","01000000029a585b88ed967047f39979f20de7e659d614442a52aa130808821300000000dd4f3fb58dbf7b564102f8e5080f72766df582d22d1c8785437b4b2280c0468800197e49ffff001d3971a8bb","010000004c869bb69ea615c888ad420df05759cb5b574513129f46a00086acae000000003753dd4b1d948ad87741f37405691a039191d0257806ba3298918999bea1c657b51b7e49ffff001d18c8c8ab","010000005342066ad2092873ec19cae4a446b94075671d6158ae0749dafea7730000000041db662ab06d6a1169b2173f8e547ebe9dbcdc999994eb16e70f51aac5396b01ff207e49ffff001d33c25182","01000000b588c8b9f368e04647753d791e9425f8e3d1c827bc38c8b8aa17f370000000005a60e0da2458fa49f9469bc6bc27a980ac1527952e246d31fa9493547ea4ac8681267e49ffff001d18be7fb5","01000000c10c25ca4b963e223dd27d4be6575da7aa3f8e5f866268ff1710ca5900000000757c34302e2ccf9840138d055b14d8516e7f64553b101cbffce803f915131aeafd287e49ffff001d3a3451d1","01000000adf3687eb9c9979bdf66d664599d157fbe0347c9d31202869ac0a3ed00000000cc633287f31a84333aa81494fded073a927f1806f9e7024941d418e396db89aa7a2c7e49ffff001d47f91102","01000000e87f2c721cbea0b691b07dee0bc8c8a283d62e19ba3c9380d33ddc3900000000843f758e87d9a83e7ee3b39a187245b627b8b013182cafb2d21aef988b0dee27dd2c7e49ffff001d09b2881f","01000000a49752874adcdd80ab2944fc50c90eb42eac53d44ba674961fd3234700000000c31ac0e175cef7c39c3021dd300d2ff88751bf7af327cf9ca862da1ca53b2086fd317e49ffff001d13d44f42","010000008422c91e9350c2987bbeaaf63e73e47d14b939f1f3a42fa235d333fd000000002bbf3050ecfc688d9d6df68de5e3a57638adce91fd5be8e603bca923c8150b9b18347e49ffff001d2006c56d","01000000dbf72cb489957c8e988a831cb957057ba831c5d3fb594e6ed7873f8a00000000aee5c0ebfe41b7260ac0180df42041bed8bcfe32a360ec733d8a2fe1a9f438ccfc387e49ffff001d23093a29","010000007bccb8843ac057df14bd4f14c943c845fbf3ed1c240608b0c4f1141400000000578c733e3fa70c52fc96c44045b1e84882660a6dabeb8d4b4ed81b0d6f4c9afba33a7e49ffff001d06839aed","01000000d1f70ed52cb685f9e6db7a48349ec5fdd628ea46bc00ee50a73262a700000000522b0d06f4cbf0c5506496f1208e2cbc505d5db9a412867a61ff75d8d3366e66cb3d7e49ffff001d354b007e","010000009139022fe1cbbfd1e1cde141600627549a6cd540efca6acf9703fc8700000000e55dc84a9f84fdb08da357e90690edcee9a5fafe1c51a828584a8f584dfb271ed9407e49ffff001d247ebb0a","01000000119ffdebf07c8eabf5372e6349807715f477372b75ae5fc6efdf0b7100000000c1be1b0610a1ce032c5e9cf6c3d3e1c35784f157ad95d628d6e60c658ff9fac7f9427e49ffff001d1601b816","01000000183c30ad86de8982e4aa25ffa907659b9bb8952543391dd3200e8abc000000000e47a8df9d829ba8874d6060f202f134383f3b59ede047006bcd5c5734dd93892e477e49ffff001d292614e7","010000007ceb7331ea6532c263c473312b4c15b820e1f6f087ec85e58e7d802f0000000019dedbb81f09c1f794df700dfd9282ab977de9728267a8540b979c3d6582d7acff4a7e49ffff001d23b90212","01000000e8ad66342c972510b02c85044f1e97d2721010dab5a4429782a5b4c800000000e8c3cc40d97387d8543e3edf62d845102a004590d1378ee6acc349f5ffd9e4d3f64c7e49ffff001d33dd9b09","01000000d853a498d1b3f35f6f84171f43ee004ad668dd0511d1ae329e3a575400000000e3d876d261ae40f539c1825667599fbc6956d64c47af14911928e79645f611a171517e49ffff001d20fc3d98","01000000148b184e9660476090955e8b9bf07a439a5199e0ecb5e4b18fecd56100000000cab62b09e6ef74660ee03ec23c08c833ec13dab0ed35dfa20e725cbd052200920e577e49ffff001d2fac7fbb","01000000bc5da14c3e7db6efe91ff6e7ee811c15a94118ddd260af6446f762c300000000b6c907532b1d124e3d6f5ac8e8401cbb96d3eb0d30f8ed8228de18f20afc6e2bd55c7e49ffff001d2afb0748","0100000008532e45511f49b81255469ecfd783fee512a989707d669a69cddfac000000001ee0464d05d5da8a3229d3d934abdd904c316ecad056a816d3b6910253edf92d2f607e49ffff001d2a27e86e","01000000d3209f66a5fe021120ea3fc0af3873eca6d4509507e6165e85f554030000000008b19e9cd9288a903ec2e5f1be94eb0065ccb4c79a5a0a16cfbf9c51723289cef4617e49ffff001d33acb90f","01000000fd0b7a98ada37a3dfd75b8f4358187c288a1e594d8378cdcd46fdf2f00000000a0e2909b07a979c3062b58793e83d91055557b58bf0fb8e547d057ef09ee75ee13627e49ffff001d2e183400","01000000c19b96663350f17a7127f860d873d318cbffa2db0215bab01766431100000000ae64bef74678ca404eccb6a635037c7d35731def0a48db59728f1bf54c6c5ddf84647e49ffff001d19f06dd7","01000000c1b6b9bf6cad5c70c6463590a3678b9c55c6f3a451c2180a584f937000000000c520144a76b68043cbeda8f12f30f9cd65d738312d9bed26c8e37752bad88806036a7e49ffff001d03f03aa6","01000000e8657a98ddd709b6964fc7319fe432de1900349d22edae3f7974c8e90000000058f0c580da15f6d72b3ad1754bd98d28c6d9649d89287323479d2f20e7ffde27096a7e49ffff001d42587300","0100000008b076e2ef4e482cb2bd4ad5e1caaac6b9bf2e4d46f64484892d21860000000002a58de79e3c179f4d0e7106647368e35ad2ac2490b4797faf65367ac6c0ff5ed16e7e49ffff001d1a000507","010000001233c8c8a2859b0920e9bc3ebbc09935d7e2dc57c3c94b40961f6f8900000000727062118466e6d2600b4d154968d5ead8b3495af97139a010ba7a7c5e234a1d83737e49ffff001d582c5416","01000000390f332ecce49ace76d5cf2d755e36989fdb540ddaddb7fca9ac9abe00000000cfb8db2b4c6b89a014af4a15107035feaacdb8975b175eed9d2ba95735f81d2bc4737e49ffff001d3a759a97","01000000b41b526100b8abb0f1f065be681800d44cdfa0b94e94a07676de10120000000040154a1af1382bc38d6a56f75cd9d42cc238487a29f2eeb2659353b7bb2d42a903777e49ffff001d4161870c","01000000e8be11e84211e5e8fb678db5c2e06c35fad7d90c29198de72641529d00000000c5d2b84b097234a8e90206fd17e6b1950d167b1ff49dbdce9cf2c7107e24b78d04787e49ffff001d21b94e60","0100000013271a2bf28b7538f5e11dbd94b966595557c0cc4db909a0c31ac1030000000067e999074ffcc002ab6438b1914b967486582f5332ed97fefba8c1ccbb3b748ea6797e49ffff001d0057c4b5","0100000036ca002b2276c6485ac734f9cfef1e7db2e95b41b9578a2660d69d2d0000000064f920127a63503eb75072f139bef7a58ae302d0ab6ea3cef1f28a88797a224fa47d7e49ffff001d38955866","01000000539ef39c30f2fa4e165bd2b770ae9b85ab10a8ad02cf24323fbd6b6e00000000802d16505af2cfe365e538cdbc713d6aba144f2e5de02a2da882b276cf168bd8d27f7e49ffff001d05cba464","01000000dafd33228d9779fe48893f13e8bd4898911b1d3e5f3249f33f747643000000008abd58a57aeffd061e6a99e6f558499447490bcdb1c64982d90b5684311b8c2086837e49ffff001d06d73514","01000000d8f53e6a8652ea1cac229138967c0b7d898a5bb78eb9bb4d600b988600000000e0dca28250ea4c22eebba03b38969cc9e89a1af7b7901b0423d26225d456fd63bf857e49ffff001d224d4e00","010000001e8856d6228232a1a3487a6683716e5485082cd3a21aba9f675b65f0000000002e1bb20742fae30ae0beed81d1ada74b9d8dce19e0959cd36a900aae021b1981e4877e49ffff001da5549f09","0100000043576a7b2710ffd4d441bb162ed343666f40a279203dbf262dbad7ab00000000d29bf69bfae9cfd989d879af02301daf29633bfa30c5b9127e31a97b79135e4ff1897e49ffff001d240b3000","010000008967cbb38cc5bb31cbcdc60ce66de2f46d6dd10d9a92cfcd9cb2766c000000007bf5eaf391af7bec34863b3fa3c0f309599ab1d0976a517843bd7a67c2bae08ef28b7e49ffff001d2a5fec4d","01000000acb6d2474862e1801e4d046ead51f7584ce1172feb54ac398046551600000000e6710ac8efcff56dbac828171fdf5966dffa4cd24b3d15ea58ef7bc5bc1adec6798d7e49ffff001d387dc50a","0100000053a62dea3f3c26dbe3ff172dbdc7100266edef4974192bb71a69ec4d0000000029656b9e01fced90f872ec80e399ef0bedd7ed8574d7df68e4e89c2117919438538f7e49ffff001d18b9597b","01000000821bca75f865950ba630cd59878bf91415e521e46ba3ecb6ea404071000000008622ca77dc6291379a46fd98299cb732fdeba61a8a51c132cb3d424bbdd4e267de927e49ffff001d00f135a8","01000000a28c5d8864db41da90a304e480f5755fb8633a7d673fb78368c73df100000000323e0b1d2550e26dbddc679361d33a388e833f75c6234958ab5fe620690446ea06967e49ffff001d23049b27","01000000335b71523058163014756de98cbb4fd461bada6a11ae21f11afd6fd40000000050685bc2574c496dcc1f954b712062c83333d945c7c6ef110c3bb75a622d8da58c9a7e49ffff001d228d63e5","01000000b71e7adbbeb7d8e5deee61374d943269774a04fa9f8e9b42d084b9c7000000006a4b6f0027b9e790893115a814e7bbb4ab2ae0921f514b892b007bd5183242c6f29d7e49ffff001d39f6d29b","0100000084f81e9c10dfc154b14cfdd9bee68c953cc1b9c3853b0aeffa3d240000000000e717d0f15b6f62b21929b368e6073cd1c8e532e971fb5a0b611d05d7945c0b6df6a27e49ffff001d195d77cd","010000009ec891d9c73672a8c8a6b1e643cb6f61edd7d7af2d8f45c8470dba730000000005c1124dc643d6483b53bb69b013d5e15bc4bffa17e005e5f7c1c7873e243b87eaa57e49ffff001d2e78acd6","01000000f40b2f135430d8f1e8966d175d6aca610465af7a0a63eed5b792597800000000f8e6c7742d76b8d0293e8585d9380f4af23e0c759ebdbc3ddd2128d8add6006a7ba77e49ffff001d241b6fc2","01000000e63b23ae4b4f13fd1b8f98c259832568b9efae0628e9247ac474ce2a00000000089bf12d8b40ee8279b3380806bdc30f168dc909f704a57eef04a7cb7d9346a968aa7e49ffff001d254902b9","010000001af4ac699d4a17fc1adc7490032ff6d29d7f73ab66e2e944d1cd5b67000000006ee5a2fc97e6d00c5b06f765133ea77170abcfda239a4a00b04cd24a240a90a2ecac7e49ffff001d02a7189e","010000006e72ff261e4f67f74b3115e19164fab42f9b745ba7bae8962d50902a00000000607b840862f523e1c5b798a083e8204c43d274f8a16e8f76053b6dafa0e7b8cdd7b27e49ffff001d0746be70","010000002e40ca27ea4719b9ef2964f8dcf7ac6e4ce1badd743860a9d5b1957e000000006461013c26af00e0f087c2c0cee9c06993b49d3ab311fb2d198221a2311e910b47b47e49ffff001d00842904","01000000f6b7c92c29caccfc713968da0c97d186289df1c783640b4325b6ebbf00000000fcc2ced41d23905dbbe632c3aaa2534bd12726891aad129a0273915146febd7638b97e49ffff001d36a2de69","01000000b3877f32b66264c0318cb83497f2b4a3bee50069cf656561e8edc8a200000000845d345fadd3d09af4cd42ecec543b8f15664786093f73f81f0114c211ad0224ddbd7e49ffff001d0702a097","01000000bcafb94859b3fcb4d6f737895054b29304d35de3f413cf0717f09b3700000000a4052d6b367d8fd7810ba5e186be471d915999baf48c067455e9a8f4979fce6421c17e49ffff001d461d5f0a","01000000b91116f4c5d8df789fc514d18a89d699fed34465c1673dd3466387f0000000003cf583c75894d3922a5d19ea46d1152bcd7207e54fb0baa531f10acbdf70a6e890c37e49ffff001d2fb2f6d6","010000000def164dcd02111a4953da9e4d168c393dadb9d8f0946c276dcb840f000000008f95763a4ae7a580b6c4c912caa5fbbfa3398aad0f22a69d36ded95654cab6a38dc57e49ffff001d1bae9045","010000007704851017b4d2058f88356de12d315485ea9acf8f8c6b02ec6d436200000000c6575fe01f2d49e805aef530276ebce416f9eaa02aefc56234f227d3a0212b6f43cb7e49ffff001d39754983","0100000026a22e3c2d19d49a1c1cb8a68e6ab77440c30e5974404a2a806d49a100000000eabf215e0cc526ff9802fe16717dfe87d734bc90bbeaddbcd61a0831e672f010bbcc7e49ffff001d0035ceb2","010000001a95da875f907fb31f13cb3e93e38f01630af6b8b461859d5cd6d5df00000000952bd3ac60b653d7ac8294340ba5e5468a8a62f11f656f3e240b3dc711b2bfd935d17e49ffff001d335382ad","01000000c0b77cb010de866789896e327d6043a92dda7cd6ba5490c4467a216700000000f5e7687d09bfdbe67a68dfc2ab1d0b787ade88f291951635d1daaec2122a4495b1d57e49ffff001d059a19da","01000000781f2249603f4bfe13301ec1deba005e98241149e548ffd2672be31400000000f581260915ae7c66629f990724bde1802974cb5ea0af6441c96c4329ddddb716e9d67e49ffff001ddbb98105","01000000bb70dbc5e2d371cf90d55a5d090591a1d55fc058065e63b0f8da221700000000220cd75fde034b3dbfcded7f9fd764a0950bafe7fd240b513accd5e3d825d20d83da7e49ffff001d1616efcb","01000000254d276a2751fefe2223d6a8f78efb4f095b94039d5944d48cb1490c00000000f96f40d7ef0299e075e0c71b5a9de266450355ec5becb7e0403b9b0f1a60667805df7e49ffff001d20e6d55c","0100000085aedcd5a2f8b6ae72b57ffd77a3058a5b34f06970a0c65bea39645c00000000ada15f8a2dd66cc9ef30394554c5ac7cbdfbeb580108f71433860a04bc51472e81e07e49ffff001d2750f0b3","01000000cc65667f494f489c82b37e38756da9769bfaad88b2934084cacbfbbb00000000534a15012974b6c177ae6558cbe6ce24d6663ec0dfeff7596b75469c49388a1ea5e27e49ffff001d1e6ae2f8","01000000f3e388d62906fa19af28f323d71489585c9bcef8a46c0f219d45289f000000009602a72be34a2eb2545af3d9b3a891e4e65f97ac3192c191dc848084669200b388e77e49ffff001d048fc9db","0100000092d4423cb9d3c7753a194611cca4074bec17fe4897985f25d3221d110000000082971b255a55141c921b9f79e30e7dad8261c39872a77d771f4790ef9a44ac84aaed7e49ffff001d1904c134","010000004f29a0af6afbaa60129214b1d51699ecba44914d28b9f95d3493b5d00000000096003a966e3859a6b3a7dc7c23bc4fe5424953eb289951c8e89d2870863cf31646f27e49ffff001d3309fc07","010000002bdf82913a66761ba56d0f6956cf7de0328116598aac1335acdd2c61000000000ba8937b556454bcc9f5e209059cd1142ad7781a23c614ea1183661ec06ca41d68f57e49ffff001d195a72a0","010000001e630b09c69476e69f1820594e99a3f6faa1fd4b8f554c57fee534cf0000000015243d994b1c93934e8f049543f4daee5f3c8cffce20b58dbb4530109873945111fb7e49ffff001d1b6b3dc7","01000000b4504993fa09436d6562803aa636e6ebb9d717fc934bb7047bf2f425000000002416b927094d634f45fb5feaa1abeea6816fced1b4311505ad91da7de735d24ef1007f49ffff001d31a4bcf8","010000008261d8b07aa0ffbf4043fbee2499b04cb9a06fd2ded0c39907e3f7c200000000b496cbc6d52777991345b8c72e46d803140bb030a870995036773567fe149f71ea067f49ffff001d2cfb7680","01000000e25509cde707c3d02a693e4fe9e7cdd57c38a0d2c8d6341f20dae84b000000000c113df1185e162ee92d031fe21d1400ff7d705a3e9b9c860eea855313cd8ca26c087f49ffff001d30b73231","010000006397bb6abd4fc521c0d3f6071b5650389f0b4551bc40b4e6b067306900000000ace470aecda9c8818c8fe57688cd2a772b5a57954a00df0420a7dd546b6d2c576b0e7f49ffff001d33f0192f","01000000efdd7b6c4ce1dcbb370690558d7a556e431c3011f2546c896a2141a100000000d65bbd7472491e067d4562f38fc5420bdcd1335b4cb0cf1e90aefe828fef88cbcd137f49ffff001d34a93051","01000000ee6de0aba74595e2115667ab4ba69e094280a449ce7a16febb730da300000000981b2f6f3b1eb1928355d519ee6fdcaef5974a92f6d48b9f6d9a9ce27f84364ff1177f49ffff001d14cbe157","010000004013adfdb6375a209ce566d1219477d1bb1fa409fca8652e037822f400000000638de603de0f413ecb78fe8e568410a891c52a322111ce31e092f49dd27398afc01c7f49ffff001d289a840b","01000000632705ff61d3cd6ee2b6615ce7c8df1cf79174dfa5e6dc2ccecf26fa000000004256811a2b75046bdf168cd22bfa3bff7312f3b135b69638ce7c8293c99d363c781f7f49ffff001d3a8f2d56","01000000d3910719289a729f251f20c1fb849ceb695d78a5af988c63cd0e09a2000000002468504982c6dcb1fa2e231fed72a02ce099c011a1248b0556328e246bb77ca3b4257f49ffff001d0844cb68","01000000870d5b79ba3df5ec418bc5fef364b2f177d9d25ad4e7cfebe6b0a6cd00000000226553e164b2a019f292a6f7afd32c4045b0122ee06cc7b3131e990e0d962e72f1297f49ffff001d17d95719","01000000a65a3da0f4a339be4ac0692526d0a6becbe634d0b414a9f3d14c0226000000005474f9c188772e8f7c035bc7645ad0e53759b3c916c45e5befd005b32d625cd3142c7f49ffff001d2d539367","010000003c8ea4f99fccd00f3089871102ed226ac0fa592bc7fa7e4cccc06d5a00000000838489948e93f0a1d99b2271c5ed144867d1b95137cf8a2a4b59a23a00416a04e62e7f49ffff001d2465bd07","01000000c77dbfec7c88b72cb80b87524da0403158dd291a63083422cb89b2a000000000ab6b3d3776b7503382f07e0f061f0e6e26d4a45ae4bd5f1206ad3627f51c3a06dd307f49ffff001d5ab6af00","01000000d3d69a0d275b623bcca42606b012a37e506a54d9b7d9b0796c5e45cc0000000013ebef2e960f5ccd4e0df313e0a0b2f93151b5ac212ee0a499e792696d797cd660327f49ffff001d03795bb2","01000000b1a3ad8536b02da73ac3da8a50c76c187ca6963420db631b8e3d3ddf000000001bbf80ddaef202a062321af98f96b8accc5453ea69cca0c3948d0b3440e8134df9347f49ffff001d26fac5bf","01000000d6f1ad07f90e1453d24b4c06d335bf0264b9d8ce6473b752b600fee2000000004cd36d9fd0ce2cd3331ea284b1db146a56936facd87f80316957ca0fcee4352ccd387f49ffff001d288c181c","0100000066f031421835ff6517076fb46ac107b35fb72949806ee91af44075bf00000000bb0d8cc85b858956089032da2593e5a4d88ba47e147a42971386261e1e95201fc43c7f49ffff001d2adcd539","01000000f2194a9b08bcfd07c1f7ddc17ad9df95da4d70b2ca01284a1c51db5600000000e69d1d7c5a80904156370268c72b49fac16005166584da4be3b780482f11fdc7e23f7f49ffff001d1459612f","01000000d3633d3078d0abf8d5d3da2fc865474bc1edc575e2e9b42834b2e9360000000091b405f31b297af01db754054e7a1296d2650023c45759200c0394f4a59295cca6427f49ffff001d612ee003","01000000d0179badfc4bfbac1d0e0794e8e1bc8fc9bf5a16d6a4d8d944b9c8b100000000b49f1c333f9b75833909e92d42d51125f246a54464cb593c4d78f8f66175f5198f457f49ffff001d285c2c42","01000000bffc3b886541e173c748bd572784003841c3ee945f3a18c6057991b400000000b74ec39862bc410326ebebf2ffb3ff7ee6ce8e319a66d1139843163dced63113bb457f49ffff001dfc3b8200","010000004df1953bdd4d0ea3c0ed110ef0b94176d39de3a2d6601a1f0a80c47900000000c7a80acdd27f32abc363a2d38638cb8e2aa05fd59a736e26e8ed265fc51b21c3894b7f49ffff001d21b3a30c","0100000025d432b3fa9d2621ed019f95703d9bd5e410440ada5970b2e3dbe0ae00000000331bb6f3e274e80fdd65dd03e397618f6879ea978b758038f67a1b7278103a73984d7f49ffff001d2d69d239","0100000037928fc0d415427fca5bbcc9323bfccf049dedb70675ed89c9d97e8300000000b94ce1f39297a4879e738771eb720691df4e2b218c2c06d64dca677c6932907881507f49ffff001d2a2c4408","0100000018408432962848b32f0abb9458eac6d144787d6914c8a5f0c733de11000000004bcd6111d8ff1743d0be0088b90088e0f4ca84183151e7d3246c40e918d1117e43547f49ffff001d08264e53","010000007650416188f013079bd594412a8b072f418332aa8b1d21970131dafd00000000ca0cf2961efbcc55b4f50badfe9055576610a7bb517a97bd253a08ccf58403c9ea567f49ffff001df911c905","01000000a5a563f37bd86f1a95e6aa7b7267a8f638623e0648b352c9b209a33b000000000009e17f0845e519907e1e0eec90df3f9dc2783400a705f556d1e5e182ca464ba3597f49ffff001d2d86cc96","0100000083f1ec3d14584b9a5b4ae6d355565090854cc39c019a6826d9b07ed100000000864e75d79eb7e0a2bd9126a22539e0722fb87a62f7a17af75d537d54977b4a20685c7f49ffff001d332d4d5a","01000000bb25b019c342f735f42a1663dd01a944d1224b4ed8809e08b76edfd400000000d9fc6b43a4a0de27e38214e8afb3b235d3a5d6a3ee6af7e97f77a2824ba7d73d58617f49ffff001d21ee4526","01000000296a872a24057ce646e75c68a2b0aa7a1eeca9548ae68b1233e3038f0000000078a40e84b3977ddb69d2b770926860ee10d01a27408aec4f5ad24e9b5fde2eb830677f49ffff001d1a4bcc57","01000000d47dc3b4d6ac58cef08b71f85cfafae5bd303ede4a51aa2887f676f00000000034edefd13ee792bef86fad84e559d5731e962feef5ec4fb0b9d4d465a47ddb2fdb6b7f49ffff001d259c5cca","0100000042b874b0005064125d1ba8e2bcf21e27e4614fb84d7001c97957f501000000002bc556db336b1a2e1e86dbb28c626d801a4165217d79dd0809053fdd1ff560de0e717f49ffff001d301ce6c4","0100000000b7729b91f770b84c9f30701ac71b0b7911bec5b22d425445baf152000000009ff8a9394e69666c5704e4370e73595526c4bfdcccb888424266b5a3c042dbfe24767f49ffff001d28d9194c","0100000051e6f60f1888be6bf37641ab861e1a2bd9a6b72a8048204bb2febecd00000000764270947bd11e3ea4b6b3f85aac89479a21a8e0b6dfea6c3fe9b3ccfaf0a1ad74777f49ffff001d21be3646","01000000ae94ad279dc377452cfc1b366375ebb617787d8fe995e900699bfffa00000000152942a2cd1210e720eb46c0ba06da2cacdb3ce48745c2368fe5a43a57cdc28c207c7f49ffff001d1e4fb4fc","010000005432ae7440f6956b96f91566a3b32b88eec1a7489fed0b75fe27817e00000000629dc3848f25383a062a380619ba6d74cfc2e21b192f48513060d448bf85bc1fe2807f49ffff001d09344297","0100000048fef2f7dd2582bf9ec267c90fca6f636d619dc36cb0bd185cc7c3e600000000ad102e0b9d4dd44c8643290734d4ba09dcbdf32ff9590af2878851f5d1e80eb135867f49ffff001d09b561b5","0100000043444249a67f240af37f0c77d1edf3fdb65cd2965f09cbcdc01cb34900000000c1e87c8160425bea784abef4d674bd8a234642225d06614d25630adb66bee9233a897f49ffff001d2b308cd7","010000008562d82965da85ecdcd82d1fea2efdef8c8023d605f78ca3348cef06000000006952b4e8f916f91079b93c2fe7754f1b5ea0c8a2ad421181082527c69bc1d6bf50907f49ffff001d3178fb08","01000000a1211801e92369202adba437bfc548b16f6fd857b3a0368db7255a1800000000f0b43839198ac7b4b1e63d56432f1ffad21d3db6385d31343b51f7e87edb247a30927f49ffff001d34d1aa00","01000000c631d42d98c2b88efa67f880eac8a4b7558144fa0f4fd1be7d244ed3000000006dc0e968947b7c7840b6d871400c04f935f23c1f11834a7570402cc2528028cf3c967f49ffff001d1d3afab8","010000005600b9c448d7df10c13e4c1bf98dc24a0e0b8e11df7540f1cf2450560000000067bec1c66db108bb588839d0a33a2e216c7713dbee9995e5b64712e40967a84df29b7f49ffff001d19e319cb","01000000835a7a140bd05aec26d04aea581ad07538bf4613f413dc78b3b3424b00000000f4da64dde79dab2dd9cd6a13c7757a79d5f8b90a99a262538147279e5a34db88b99e7f49ffff001d05eb8cc6","0100000056933f98ef42d706e7873bda915101822482f92537b41aef73d8fffd00000000038049798de825c5b3cb950b53b11ed8f8ef452f4bff3c37c008a7f15913b4798ba17f49ffff001d2f9cc50a","0100000038d82f61ac49aab9af56a39939397edda704a88d87a1cdbe85fc3797000000009a987239266137663fa33991bc35986b9533e16c2e404b9fc132502c01da93d6dda37f49ffff001d013b1d9a","010000004293965842004bcee61458f069788f509f1c759f889a6132568dd5ac000000004d1dda2b7ef5670a7c840ae1230b99f5fc1e6b301a4a8500199c2ff27c1cd269e8a87f49ffff001d3a0b48a5","01000000fafee16ff84403068f29c4b37d2578ce00542d87ec938119e678d0c50000000045b0a129d44fd831eea82b886ca134308cb8d6d73d0eca2f690a9205686624b649ae7f49ffff001d2bc5ef96","010000001fc229d037a6712d68b65288a8a917924e4ebfacc97682123a36dc4f00000000a469e10e971d5bb2efb23eac7fcb9a06bf3b90321d8136d1991668e1e8f0eefe35b47f49ffff001d26ee2b44","01000000dd79fbd4bb307f616b2d6b485b6cd7f4595f42099c2635da94632d5a000000005de09aff7448b392d511e1fe01fe8b7c3dbe02655bc047700fec58f51dafb2f12fb67f49ffff001d1bdfc8a7","010000006d4b7e609e110ecb276f0c3fe7e65dfb80680fa32640777fe3e52acd000000008459404dc1e6fe7bebd5bb02caf41833b8f2fa262d4ac6e303cde2c0b1fbc093c8b67f49ffff001dc1f46502","01000000d8ce488750307ed03de59598bb35cc255b1f036125c46278389941d30000000033e96fe17ed7827ebfad548b46ef440f223a525ef8587cf273756817bc62db1ab9b97f49ffff001d2c301227","010000002c655b93db5ab22f50c30aea5e620c9bf68b2c30afe900dec0fc243000000000a96ea47b7ae130d110685fcc2254a74d2ac81b1dd4cfcc91cf0df83bdae7d1a95fbd7f49ffff001d390af1a4","010000005d09e69d33d724798b0487bea265320a4e22e6eb4a7b663ed4614d1800000000d9c910fa4a91871011bee3ae09e3e046869cfbd15c2d3985ac6604eba93c2faf60c37f49ffff001d0499d8c9","01000000b7c7a8aa7368be7e9319e87c9ee4c362f38abdd14266d133f6e91e5d000000009a1d285c4f6869905c2be8e3820d91b5196d549c1d7786385873b192a039731fb6c87f49ffff001d25f767b3","0100000070afd8e4515d6b5ba1e61989805c6c549368ade6e073e6acf6c0ffb000000000f2a8628ed17e4745c1d8a98a108cb0cb8d6dd74d00f9665cfc7490f5ecd0510bc1ce7f49ffff001d05fb9f93","010000002908207f00f1505e31be51d018ea490e73d70f6aaa05feb6102595eb00000000b9f543a37fe6b142c961681de6b6b75623bc5e78a66ae7d1deb71585e51df03a59d37f49ffff001d1557a853","010000005c8052612f7c4688a4df9c00cb7f49bd5ac636be984fdc8099da519e00000000bd02de2d87648ea24a53a7ab9c31fd0d68c6854f32a372cc3bf6edf0ff98809602d67f49ffff001d1cc9f8a3","010000008d363336aedb431719dc1fac4b1acdbd3caa6d44b30da99e13bc79ea000000005caf4a0abc609a3c7ba4cb18c3e4ba649c4681609aa829c037bf180b05c356e874d67f49ffff001d7358cd01","010000006452162631b1847e1e0a915a02e3c239bb95365095f207b34f397fc800000000b0d35f2170bcf62fb1d84690e0db19c9f8b9b184316e38fa26ff679c22e03ab10eda7f49ffff001d25269d31","01000000c6cc14e03be513f7670369576ee7bc39a37cb5d5ae935fec90ec3422000000006251e92ab984185fb12c3afb1384f62032cf23fc262be9a8077aba51b2f7a76c0fde7f49ffff001d2fdf96b7","01000000fbc5de01f4cb0b1317629d3abe89e54d05d9106332b68e2026b94ba1000000007db71dda764be99ee3dbc38a1db45c9ab6f81cd9326376acb49ea8b9f9d7b8532ee17f49ffff001d2ab449b7","010000004d1fedd06efe698c6ddd56f7e1e973df9f9fe31a4576468fffef24b700000000762487b3e5e43a2f212fdcdbe8901777f5f195bc2c1ff948f0707e39c0a25c0e3fe47f49ffff001d156622a7","01000000a0208f495a89fa58f6b80bcfeadeed46c9780af1ccbee041a414b26f000000007210939bd6688a6091d8bb5e60c1678c34941c69d07fcb56a4fed0107b13fb3f10e77f49ffff001d2c6928ce","0100000044242a9fdfcaf2cdfd4039532b19c80d0c08106e4993b25e400972250000000012c39addac8727fd15aa2e6c726a3462a1ad40bd67f2d54292810ecabab1c88a9ceb7f49ffff001d2dc5a193","0100000029e8eca9efa24dee92a3aa56ac9125bd68c1b1a15f342fbd91615d6b000000004fa5de6ef3d583fa7106b0a1f677be0b58720b42d84898f4c25db8f91888cef6ebef7f49ffff001d0272acad","01000000b31e79f9818b98e390c4b6b4bb3544a23d943e1c50b3cc430c40a63d000000005ade15fe2d4fd53cabaa9ab899bb4459853b791cc68dffbbd766eb65faf8fffef5f37f49ffff001db394a60e","01000000211e98c10fffeb7432a6ca1e29e547352264f9b78705c47ddbc622da00000000f7020aea49af58c0596da6b2d34224060fd1f2af800a664cb62c8cd92cff315ad2f57f49ffff001d0848c6d0","01000000da44ecc7834e5cdb92896df26aa8a6a58a21569784e27366ea63089600000000f48efa4a46f0d4dd24de8fa54bf63356063d094ba25816c7915d6cbda2e8ab9a9afa7f49ffff001d07619c7b","01000000d986f1ca7b4f7c50be081fbe935791d6d4889a82bb54dceb4160775600000000ecbdc9c5f818ad8bdf209053adc8046c22775f6df238263db52fb36ab3733ee9b5fd7f49ffff001d05c98ddd","010000008fd9abb222dc997e63105b83b5a8be4592a7f1281b963db5e0009a9c00000000aeab91a4048288f740df060e3224ffc719b97d7176781f42c5a21dc1fedb533809008049ffff001d33c5f48c","01000000b1473ed48bcace3367fe9abd05e3671f817e8ba89637732e38bdc31400000000a496b1aa55ab3f81d071562d61d097fa4ee294e11e043c54118c2789bfc091f642058049ffff001d1bbbb942","010000002e5ec76d9b0a71d5f931b6239138f5ca6504485c7e35b142d9fde96e00000000304bb63cc8e70b690450cedaf261e2f5a5d5753365e151e4f7c81caa7ac530c21b088049ffff001d36efe314","01000000601ab4fd3e1c3ec4e0ed1a9b67872312569605b9a804362bfad34d440000000011efe6266cecd277dde1a75d178f903a44d1a386fdd9b8116ebec4b8de0e5dd885098049ffff001d36abe901","01000000d9d971f725162835403db0794eda4fad8f66fbe9ebc33aa8d2c774b500000000d3f0efb9c0b2868c90319bb1c70fd19903ddede4a06a984c2a86a107e7ae585cf0098049ffff001d1a231bb1","0100000081130881893b2f38bde2df983c0bcfab017477337fb59e5839b954d400000000ae62aade331ce4f98bd8b0fc9906c7f46891ca854006c1a3058f14481f916758320b8049ffff001d1548b205","01000000bd4a6fa450ab48df201424c0b18804a0cff259f5e87902f04a9fca8100000000db0fa701e62afd9777cbff6900d4811c92e1ace42f1c51b9c078ae3a06452c54af0b8049ffff001d2ce0447b","01000000808929fc7ea5a70049e3df3639b08ea29cec5f3bab197836d25d91b100000000901e9e260f653aa1225168b5150ba1b07cc06168d122553adc2a0fc0abe19d87ac0c8049ffff001ddba46d04","010000001a598a4bda6d7f1ab135c484bca7eac365bfd47dd85cbda2fdb1886700000000fc23107791deafa9cff58a792a6cbde9c4858c5fc3d75ae4ddb2b34505458713f10e8049ffff001d2c70a5b3","01000000b92df72129eded02a51580941fc7737312e6d9ebadcc4cd10d68b48c0000000078881c7cc9ef3b174ba58378e426add71685e858d2206e4d4233a763e50350c4fb128049ffff001d055e169c","010000007d92a6a2e7e5ba119ea4a750f6c3d77b23a6c59d41a2ce94b1299150000000003e6332a6afb395e084ab079058602764d7476ce5d1d92c4ed295538164b260a8aa188049ffff001d2d9e4a27","0100000088a777bc611a10db83e1530331fe396451c1f03d8a2f26e32d73322600000000987e2afff26a671bfd3027f82e40434247dee7a10206030fe2821b7e896131846f1c8049ffff001d1e9af552","010000007eee1bcd753506a8ea8a11d93fbf21d41f11f10b6e43970c7baec9a50000000076522e43988e6e132d93738115febfa6ba0577c347dbea8e49ef5771e1c0ea8e741e8049ffff001d24d0f156","01000000d4e7dd8626945eb009cbfe19f1ad8a22728725df34a5fff9aaf9967e000000007bc968b225067d6ee03ed36b0527c0a613ca91cace5eec2e2f884794ab11eba0fa208049ffff001d37bf095b","01000000eb166e582bf3cbc16cef6c233704bdb4e5d17fa8e47d824b2bca56bd00000000add7dacf2732d3bfa51745e1b682d8d66d8426e97d260cc6288082c818961431de238049ffff001d06264c7b","010000000c7b2dc6f69de34a7462efb1e136f413165bafe83a82ffb1b6983a6100000000bf193065e16ab23832c5a4fe5e0b2aef836d15f329cd0167f1a45003bef7e24941268049ffff001d3915616b","01000000ef08283063e607435cf2f52dc9be6e3e8aa90b189e3724c452264e5a00000000fcd497ff1a8e287cd8c3b261220e6973f1a19bd2ad94f9e3d6244cfe060fbe2c7e2b8049ffff001d229a683c","01000000d961786f6ce0e5b95d77ab79605892557711fca3933e6417f989915a00000000efcf2895cb390518bfd4ddebc20e2add5b912f32c51cbd8eb8916632b1c54da7352c8049ffff001d94610202","01000000722c801c3f9fa0ac9aa5625c29950a5941f58c3aa445543a6b9293a900000000fdac2376a42c774b52c538bd26f25915ed2945753eed967e9045def18b1443a6472d8049ffff001df7edd704","010000000b99bcfc407d9c04b0d5e252069f27fde3282fd47324a9c3342009d500000000eda5b25242b08a80f832fafd98f3effbd66f8900fc57d46f32e4a1c19a05f0c948308049ffff001d2d1f46a8","01000000af5e20d7dfdfff6adcec4db59dd9981f96d96d9bea42dc3b242f98d800000000715ec2859711d583493dff219c620feaa746fd8d9974a7e98e6f478d07fd35db74328049ffff001db0708906","010000002acd82a2d56efdda2c89390240aa180647045034530fc3357cfdeeae000000001f982da4f358d04fcda07549e33f5d1c3263866ec52ac04531de47c9dd5b5608ac348049ffff001d2d8f5296","01000000cbedd3af783123d6b72df8db1b7cfcaf67bc92785f324e303d8dc3d5000000001c510244aacad2c81c1ff3b3ce89fa348840733e91390c3d3b2c54c4ea50dce418358049ffff001d267d8b00","010000008b0d9192a9555863908e77e17840e862bb38dc7d1a215c5bd8bfd8740000000086feb16a5a05b2a9dbdbc436f7e4a7ad7f46980a6d75cf201c50a4d6b034f677c1368049ffff001d3116134c","01000000cc627b1d4aa221238f4baf645c22b3e5a28485fd91bd5050b6486f2600000000069089ee432639a41778d5649fa17713f0a21da1845de91f486f133dde2f53af5a3c8049ffff001d02d6cc7a","010000000d91ba66db89b93aa6c9b05fe21224aa458a2f9f3428fc8e84d75b120000000026e7436cd78943ac35f7f693725b74d743366c43bda4b62e680b62560a2bf82bd8418049ffff001d082aebc7","01000000dac027df8462efcbd36961836fe9d6378fc3cf220456913ede12934e0000000009de753d51147133aa0fdbff869ab1906c49f2687cbb95ab05a251b726eec145ab448049ffff001d02926e09","01000000bda91e25baf228afd1074280809eaa356ee9ee7f0974185d78a38a8500000000101ed9b5a0519ac30a8ebff4ab80e3978a80a6dd9844774f98ba25dc22d524b23e458049ffff001d26a81500","0100000083f8ea9b307f755dcd00d3519d0cb2672fe4b3d6a640e46a049f7fea00000000e005b011fb24cf3bd442f29d21f52a1071541c5acfea03f578de044a9dccce4de9498049ffff001d1dd31642","010000005702f0a37910a6ad7d25b5b1428a0d9b99984912c49707bc21aa9f4e0000000088de1fe9626d6ad7fc80f8fdfa79bf13df182dcc5d0a8a63cef9976835294153a94f8049ffff001d39159675","010000001681a359c7aff5f98a6ddd216b436d1ba60844c0dc2ef12fb1871e6a0000000092126714267869dab357fade793d972826b1eac5f757f84b2eed16966b9522e093528049ffff001d2d526515","010000001ea8817890dedd102cd64f098b4b625e6dcf5e9cf18e9faba8dabce8000000002b5a9825af49b201adfbe0f1109de196066147bb352f2fe4c82b1b862802e1bdc0578049ffff001d03912aa9","0100000081d9b051da4cd5ad57bc6e0e643f58ca45682096941e060b83f8e67400000000aa064dde454a6dbc331e7e5d7464d41da3d0b5552f05550fdc930a5483a16effb55b8049ffff001d5317c112","010000006b939053196d17fbe25bbf80a49c16c09e61e99d19bf259c7a38100c000000001e5ac6946950e675f7d5ec6f4af22f53b538c2f0347bf41dd854fdc6e12a41417c5d8049ffff001d22920255","010000003a3178561944fa806b3078cf1b883657864217fc72ca66ccfe331a3b00000000e7f7392a4fce7a547b05b03b1fdbcd7b4935488302559735a1fcce4602326545ba5d8049ffff001d5c06ac00","010000004cf8d6d058a4d962b913d3b1401a190320464dfb80984ee2dfc9bc3b0000000069a56a99a0389616332c7bbbaff4635fe4a5a72ab5ae7e9d221e4e808730cb1df15f8049ffff001dc277fe09","01000000d10e7df9859fbebb16f5cc4a0ebdfd1e14a343aef5fd34d79a3dcf78000000000bf603cbed4dca15f883b9db309246fc11503d9eb1e1e7698468b17339e9197908628049ffff001d1cbe648e","0100000086f84a220a5f290501c27ab9431b0d3cab742997d52fb5ca65f6428f000000008b69c692f93d025efb8a5c4ec217da02333c4fb318ee0a81ff019099ba257464ec638049ffff001d36bac008","01000000d64e07f31642090ccd075a17c41e0657048643b38713015899e48d9b0000000042fd57f7629e8502940ae1123b6d463c485218d002e4045dc2fcd539f7b63cf172658049ffff001d1ecd252f","01000000b97a8a04ec945c7a3be8328543164f05be2301f34035d72fd94b289a00000000119d247e888a982e442c92a7ab060b6cb2e2b9a9c46398d58915ee0613354a9aeb668049ffff001d31924456","010000002718f74576c22380e030f6f1b193f1793eed96797483228ae05ea35f00000000421813555cc8c348cfd9624614f8c6b516f32fed5ce207f714e71c0a21d9bc8bd2698049ffff001d36922c7f","0100000045767db7faf8d4b311ca68615df4bb50fa5fff424404c606a6ae2e6000000000d457cced9deaa9fb0c95886e4bd2f57b1bcae0cd4a143aabfed08caa811a59f1886d8049ffff001d1d3d584e","01000000e8ecdf098230760e4e7c99d775901e00a73b9da059c700415f9f09a3000000004a95ea22b92eed531bff997530d6c75b1255e66d449a9dbbd2191164b1ff5448fb708049ffff001d1853d2ba","01000000f18be736b1c3de68c055e6ba8df0f43dbbe6a2d90a2e09cfa1bf63ec00000000fa4a05fe31d0f6650fb302fb7d2ecb494f77c8aee4d134379b6d40799c786e2da1748049ffff001d04ddd9f3","01000000236a5263c7af6e374f05cbd8de70a4824a2b7580aa11e96003b0454c0000000017a4ef0c9b0bbc990e0c32efc2b036d82693911359c4d88896a6c8666c3dc5895c768049ffff001d2782f583","010000001d276e177ea605c4f68dfe4c64f86fec056f3311b879f772e7f5452c000000007fc11695409178b7c2a53ee03c4c36b10ac9f4e783ded54dbdee5a432364d797d5778049ffff001d99ceda04","010000003c3c0944cf14d3ebbf7a9df6661c18b0d3f1f0bc841f511910e6909900000000a5c483e1b32787d9b6b0785601a33a4718c74122d458177b4cd586e4d371f3cafd7e8049ffff001d1e78d468","010000008d10d2e1dc525c4d3f39d6128ef8c6ce6bf29827f2c95d3b8c9b6ca8000000004c717c10363b61641d46eb0a1d16b573cb5c4cd685d4ad162e9ccfcc9721c3dbef818049ffff001d1c741d8a","01000000fa96a4dfc9045c2bb53e2ebb8e7594cfa9bb0b95a048cc718ebb5e1b00000000b038f3e4a3a1959c56be1ddbff91a1c90393c19781e302ea6c3827320cbaa5a550848049ffff001dc194e40a","010000007dfee8aee32dc722cb38e8eb27b36ffb9953d3fcd0700e1491a34a7f00000000521bc9c8e78c0703cfac4749e12ff07bdc53616b3e257453f32f8cd4969ca799a5858049ffff001d33b6483e","010000009e7cced4d0d391bbd7db063c0f24096294cbb6692365b470975875d3000000002025d4db381dfb8d143361162f74b7ac2f3f075fc3a731d71b8d7b95b8d52d5b858b8049ffff001d2a582cb2","01000000edc7d13d323002255e10f1156ae736687fd2c56c64d9db246def7f9000000000f3f0b931ccea64a7cef03dbd5d43dfa1c49eb0d4f57a85d49ff513b692798e75b28d8049ffff001d074f46ab","0100000075b95601570dbd477c80d3bb61c3231a963487524a28bb9ef0bc30130000000035b9dbb1023cf02f8b482fc3080d186c7d9af48208e0fb2113233d63a43ce8c9fd908049ffff001d2efba6d5","01000000659a8086fdf00c3d8233b03799d82ec4b4bc7363b728f6336fa4156d00000000480686ed0c848cf7dec88f298983e435f8498ee236fc2dc3e152388029fd572cdd968049ffff001d157915df","0100000054ceef373dac86bb0ddf53998824340bd4268657ce8035b0d4d24e1e00000000d12a28b43984a03b6ce372186897303afaad7d1b03d66a1fda47077ee91ca71b6d978049ffff001d8c1c2d02","010000008387de3d211856192b0b674d36fe5bd3f9b21a52bf3ee2410c72ae4c000000000c5cc720ac2f7b204c79d536260e5585479d15a9cda357ab1e6c56924153cd12eb9b8049ffff001d0928e3e6","010000002c7193f1c0b882a65a49b3319c1a8788b1755c7fb046882d34545cc4000000002ec5d0a7374e302c8058bd53d711d6aeb01bf4e8d68c93f456543474bc45b0cdad9f8049ffff001d0545df12","01000000a2c634a26f080c31010e048e6bf72db41b3b0d9bd64f3f69b7916b0600000000010c91637e6c55588fde5c59fd30f775fe7721d7eae20185f4715f68112c027d7aa28049ffff001d031aa46c","0100000067532ef3eb5d4e2aac00c7462be65fbdfc46bda8c4d02fdefff226e6000000001c84ec2d9e3e3a5888e142e35efbb65ff7d7cf9f644f2928a87eb3f43caec61539a88049ffff001d1ab416c0","010000003b4d9157db2b6fcf8d804f17ac0dd3813068d75cf530d85952e1cac300000000a4993b6939aa965ef0d2166d41a3efb9441fc8f0baaad6ad010139b7ccd3597bddad8049ffff001d2f75e063","01000000721e2cff70ede901ca5f9d4533779841ba139d0d52792f806b6e79ef00000000d05c03e85276828b373e51426b9ee6fa67974f0b45b65901ddf56dee1f3b29de38af8049ffff001d17e7ad89","01000000edee5c7eea64333c62a9247b6d9b78f748a339679209b9a402594a5d000000008fc3d5e4b475df6770dbb58d1852b3afc299f8391257ed59df7e83c1511cfb2fc6b28049ffff001d274f513c","010000000be8237a9db0990011f90c18b5809def490151680d237569177f005e000000002e832a7053549bb1c9e1b4236cb3a2f34369237296ab94cce487503d030689c6f0b58049ffff001d38e7626e","0100000074bc91164bd03291001a03f7a6a1866884a8a993dc2e9f7f7a30af80000000003aedcee16004647576d88f8095b5fc46a721f54f2a37ee09324af88bbdae484d50b98049ffff001d237ccb3f","01000000b82c47a71ce0ea9314d865c2237b9b41f9ab48ae45b95799f2aa0801000000003cdf017bb4989d8f954aeb8b7524ba31c7d176e37371c49acdaff59bab51956b7dbd8049ffff001d2cb4b9a5","01000000020f6926cd26b2429dc2ce987c61700c572f1e8bb54d3c412ff3336500000000733e3698e94ee47a79bffb430a887a2e87e74c6e823aedf761e0bb914d176ffa8abe8049ffff001d22f0fb03","0100000022e9eb87af335d7ac76c245e117d62fb3664c531f942b3930ad0e32c0000000033b6fcb4d7f9bd138bb480530f7760dfda9570b3f3be50b7497a9326e57097d6edbe8049ffff001d74274800","01000000b8e11081077150fb3802c688b89a326632f286861bbbbd190a568b7d00000000783b2b4e09a75734d41f3206c22277a9875595ead5dcd243a271b9817c536c4481c18049ffff001d32f79540","01000000ef6b993257f51f5125b50af4a23b15c8fb3baf7a4375374816926327000000002693cb458636025005a3f91dd714ecb8c2933e2c508371d402e75d838e98e5b625c58049ffff001d28e4ba7c","010000001752ec0a4d35ac9bfb72e0f22f6498786acabf7bc9aab34453529d3a0000000060e4aa0b24369987b30c9624eab12f12283d30a5894ddac5660742289863310c7fc68049ffff001d25061363","01000000d878fcdb119dc84cc709faa18f241bd7360d672c6d5f90d5683d8560000000000936997a590e17a4b6a7771b472ca646fd348c5140e08c6d5e532c06dad28940becb8049ffff001d66cad718","010000006677b25637f50a781a28d6e9cb41ad821637af132b2a3b30ede10b71000000003272ec12bee5567ce56c37bf3c2f021c64cc270a240ac400cc27b3c50ab7f38493cc8049ffff001d01ca29d3","01000000a6cc5331fc739ceff639b1f38b1befb1222e5b43924b68b32852dcd100000000154c537b1690468c83c2fda6d9f746e5d1d4e2bbf87681aeaa8759d272e727a34fcd8049ffff001dce726902","01000000a0d45edfb231e274999d78d432a6df080e4beb6953c84f3a64ba14eb000000002e2416404742c16a1b92e6ffe55a458fa4e6648e15bc1f78e765cd5fcdbc8c6fffcd8049ffff001d2f8f629e","01000000de2c2c15c5e2f23e6f772ba9049f705a0f7ec35b8aa3df52ba544bd600000000205a44a9eb2483d1a5b8efd28448ed6fbab362e64435bbc2f40df6b231c4e26dedd18049ffff001d1389e0cf","01000000a715754fa5cff886120d67f82ca559f918b4d92ad00464ffbc5a976200000000ba32720f485797fd1453482b9cd2972d18a887f8fe0c5490516bab64393581af10d78049ffff001d2d93e563","01000000a52de295e3caf94de1b50fc7a1a6bcd1cb6f46038a407f74c85fefce000000006abc4e1d92262162dc7be28852bc39c03ea5fec0d16729ee566e50c23f854985add88049ffff001deb566907","01000000c459ff897014114dcc9fea66756cac24052abcc81df4ec9297b29acd000000008ff30149388cd03d4e1f5b102db14a362c466fde89c8eca870b6418e2d612919e3da8049ffff001d0551e729","01000000b09720c1dab8683c5ec9ee797d36113306192095e9661fff941aaad600000000b4d1a248109170c682e772075fe642bb7725e83c70f65b00da823a5e51d21adc63dd8049ffff001d091db2d6","01000000dd1db2e263b304f7450562d4d638da732b807dd5e41cc9c0d88f163d0000000017d4ca5a4b2f8dd614fdcabc77b746e998392f6b49144c4d9311604ee0f1cded04de8049ffff001d2ceecc00","01000000756cb5caf99258e5901501d79c94d7ac0ae1a75dd97df688ccebf3c80000000043f79ad39524d5530a9e95834fa707a9f51880a9de10aa2416404c2abee79a216fe18049ffff001d2c36826d","0100000099d9930dc071b594dfbc221221223bf3ff5bac8a5ad8cd5d90abf0aa00000000c6a967ca2658278ee83ce71b43d6f6c84ac81d5c3194157f35ac00e79f85650fdde38049ffff001d52f6720c","01000000157ec295a68747723b4576399a8aa48c4029ec56f3321c3d7eddc3a800000000a783127adede247301e1cf210a65af00abb63b26f83f2e2c6722d3fec1059237afe78049ffff001d26b78bd6","0100000006dc4755ee0dc75d5b7750404387c0e5dcce8cc40f8c7abbb914b2d80000000025fe17e7fc2207b9dbcb4d43b9a54991167881a1e8bd44d3401b487b59933f308de88049ffff001d12c76d01","01000000e402ea122b78f274f39cc3f210863c2e3d4ac580205258ebeb1ddcc100000000e2a6deede59de2e9d074776c76c293700f3aaf011698143e2b4a054943df80f2dbea8049ffff001d140ebb5a","01000000bac41a6cc476bb6316fa37c23b2c4411364e2dbdd55540032272c26800000000d059785583135ffc434043adf0cd3ccf5779d9da99d716f56295d0d878d6929c3af18049ffff001d37563eea","010000002c960863178e77b9d522e27a5cdfbf4f0570c5ceade29ed39dd6ddd7000000001d0f2fa4e5bdd2c513987a494063e8398c32cf5e2d9dff4ef586cd84616dcc3e4df38049ffff001d1a96f53f","010000003e01e21779fc3f55a3387c3a57eda43f29b15132429b7d07a2f23e540000000089dde34ca99614eb01b1c192d47c06fd8da67a9e8504a049be9e03a419beee51bdf58049ffff001d1b50b8fd","0100000050a991b1a49c3682fe955e64f8370d6224772ef77700cd709445236b0000000079957d32504d88769cd18f78c6e23679625c9d481c48d7b75d9b23361a85bdaed3fa8049ffff001d22bf6033","01000000887f8d5ae51603884c3daeee65c84ff9a65a35ee1b00f8fe2dc4c4c500000000d19997d1742ec0ea8a5070472a4060e92bec796798d552acd84a6ec8fb81d19b7dff8049ffff001d26d2fc66","01000000ea793341e57faff503120e9215979e7e96d0b7524951df427c5deb6e00000000dc0b9300ba0e71cdccc6e30bf74ea2a3c99eb10d60ec2987efd857d70c51e0f146068149ffff001d2133e0a0","01000000ebf5c100ff4c3773c3b19b384b88425fa981884cd594455769de0d370000000036d1fd2da9d49d16079a4b241951e7fe4108038cadd9bfdc6fe2d8bdae2395d9fc0a8149ffff001d1ce26356","010000002a04d6b06e6bf71b005b6dd9942ab251e613c231f1d20c34b77a98f900000000efd1bf7ea25f75376751a417a21803435e64de3def8be73017a644450211a4fb610f8149ffff001d30d964e1","01000000c57868e6686d224aba7ac7cc60de4aa6854b4187b79b7d57821d03b200000000b3cd49c3b7705a1f0215c57c42e165af535b391754a07ad017fcefa297f6890618118149ffff001d29821eb2","010000005d761a4d521b81466cfea153657199413d505f94db8aad86bc0da8f700000000093389dcdc551e677474e8e5a1fd2bbcf2d9f409a66c8cda2f1a7d62e6df076381138149ffff001daf778809","010000001c67a5ab3930f66836967156228d1ca828c13108886df04596280b7f00000000d293133847fce134a4169c1d3b2ecaba76b0fe3a5f2c872147f55d5aeb1134b41a148149ffff001d06e75b50","01000000e385c9ba6c6ba5718ee38af4e6cc01935d83874db31fd10b411430bc00000000d7a14589d64166623f1a566e1cdef47d183939f968a354917a36c559b7f93eee03198149ffff001d8862e013","01000000af428de0bdb0be7b9b14105d48ddfe30d8729bc051221fab0326a903000000005309aa4f1b4d605302a286965773eccdc46981e54a7643a74450c3d5e6923cd017198149ffff001d0672f561","01000000c670edbdd11b7c55f8def290b2a1c06b6ee5667a5394eef6b287807c00000000a9d61f2561dc31597a75562675108cb94bb4261f7fcb23606238432cac9eaa7b7b1e8149ffff001d1c054f40","01000000a8dec1ed60fafdbac02e9dd460cc16706dd540b208198455bf94509000000000801f9265a748dc82f7208d7375879a9ef62b08d7735ffba23c826b8d3bcc7637b3238149ffff001d39daf186","01000000a3083b81c1dd61264897706eae0a858233e1a4e8f3019b94ebec035e00000000eb8d51aa3db41a9a5504b72080f1768ab4fc5ef44acf2d3c62bd5e8b8aa3a526db278149ffff001d1fceca96","010000004283d5455bb396572fdd4601fdff5a6f7be78c263d10ed29efdfc17800000000f84812093997c673268d672fd37017ac01fe441cba18be3bf7dcc42db6cd2e90012d8149ffff001d17e7e6c9","0100000083719b4497f9fa148c12eb14ce1592f5e28b4e5f8a18c00d672df1530000000042ccce3d283c6ad8cbc8614d30c133cefcc6d7904e01514560f584dd6f623063b52e8149ffff001d30b8b106","0100000014f741ad61feef5ef14f0ed1785195dd8ba4fbbd62fc96286ace3bbf0000000093dc75792bbbf7d10f99df71d349b34feb26718f6cd29985bacffb52c5cd74554c328149ffff001d2366511d","01000000aa54407ea8db1471f93c9b0101975d6932fab93128ad7830499a9a6a000000002d1ca25e869df60122c8a054175f0f57c1bf65c5d19681340cb6c58785e82cb900358149ffff001df5e0c60c","01000000f5158c3911655fcfe1a505dcbdf53e034d1afe8589fd9659eb4930e200000000993599eee7aae37f5feb809c9645f3b452b4e97c0cc1b57adfa8d746ec04e6a98f378149ffff001d349ec814","01000000efd19f3bd183a6b5433f761227d9d8f913f9ad1a98f96416ab63e5ca0000000005480242a03e8347e94d7608c1a26cf11fafa64c24620335471fd3c73fe2604dc93c8149ffff001d27ec860d","010000005bef6c8335f995ba0798451f0249ec49d297397f31a594570bf3746b00000000b99cb57f0bdabe0aab518bcb6aec5016e7c8bd280cb2fb66fd7fcc9c530ef0b7ec408149ffff001d75d88e04","010000009120fab3b9b6f5e7a07da7b0d76623ad1a69515d53ce03858fb4e0b000000000ed92b223e586e351e4908769d6f6eb83f00e63ce7993af8caa1ec413e514c6dfa8418149ffff001d4ed84a05","01000000e4f883e964f18726e73d23f95fa77e386add046d7bb1fceed0870699000000008f34d3825416af95ac1b04431ac8f7d3c06e69b49af7f70215077f95cdb93faefc418149ffff001d304770c9","01000000a4ee61584255c2714d972fb7c0989a48e574ed93e126053b1589bf3c00000000dce2116f1ef4a2c27ef7f3440e0ea43d2aaef66d775e5b3af644f5d93a60168792468149ffff001d060ade4d","010000008e315d1658b891473f56f9ebddced3c967178a54dbe95bcbc990fd310000000077f10e3ccae1954f08f427bbdce88f06d651ad69ac363aaedb4b6b798268758ed9488149ffff001d192fb267","01000000da1ad59c84fd846aa962339a9d081eb1ddf9417c3082138002614a37000000007bc96a5e198c8f403b220c6dee96bab91362a858c8a8045e2aa1bb3faf04c7d4514a8149ffff001d1456bb92","01000000ab445455c0b76c5c3f278fac4e6dafeaf9ba59991f592f6e9504b67e00000000764937555b1d33e440451ea6699be8d262076ea311a01be3007138fde2726dc6bf4f8149ffff001d16c9001b","01000000c5e14255fd2dbceb22b5ab331ab1963652d35f5e2053face705aa61400000000055df735b8c4ad545290daccb73f62f1018a4ca9274fd05de0fe6666281753c7ca528149ffff001d2ad451dc","01000000aa4b570f9433a77b00814bf94247c27bb4f2bb9ef79e729f985985130000000098cb06543e980c2512064774c046959f6bfbb6e7f4aae5ef9a245a293ecb314e63578149ffff001d8e61eb15","01000000102abc26eb0646259392994337c2bffb8c944059adb77f4e5a1c948600000000b3bcf2d3d9e29fa81283725758cc58a7b908f4469e9529e1b625292595bab18f2e598149ffff001d0152b39d","01000000ed839c70461f45feb3a8a69607729ce17282e825247ce34f4cffa348000000005a2ed93cc077425a01d055ebb05b682d67524733134988792811b2c293964294de5d8149ffff001d09a89e3b","0100000082cdd34e1a314f0c74df3ad937698d4aeb74d2f76b29010d2098b73300000000de9c1dede06869f4fada592572981839b03562b7f7ae74fcfd01b5c231935364e35f8149ffff001d028895fa","010000008e94bf9d4c698a0e38a5728f23a0093dfc33451d726a43e0558b1170000000006a8b8f7c82fd15ca8ccc68383a3f7e8039bdeff9aaab1b0248e95848b737dc1361658149ffff001d16c29e65","01000000826c7fa71d0cba0f32609cc0e7276fe5a505f7ef1cd740ee00ac04bc0000000075a9e273da01ccbfc5476f9c13c4b47b34b8a0db6bbbf2350edb20c38ab953987e688149ffff001d1b1f17cd","01000000d325b3e8f065d3c9f9726a287ff0a680b5fae77d621869d68256e91b00000000ecc5013e849546afe719f2ed7bf5bdcdd8239ab9f825486178641b2fb41189f6fb688149ffff001dec057600","010000004f5b5be8818759193dc50ebe438659302c01942e8491da0df783a4ab000000000451cc15e009a0281de1923e26a7dc3d6de68ef5517af8294ef9582cd8003972016b8149ffff001d1caa1273","0100000098c803d91aebef60f466daa8e2791df3a3c931adb95d840e1ad7fb210000000067578e200a98a3bb853fb768a5b3026a517c94c6deb42aa2a91f1062c402315e256f8149ffff001df8a66e11","010000000582fa49cfe9b2aa39fb7f5a7b52fd8575ba06da2e2687573b536dfe00000000737b1d9ef402c1c3fffd7f6ed60be6f846b5e465b3ae0966ea0c2c4f505eb308646f8149ffff001d33438793","01000000660dae223f63b679e30ae0fcb758526b51706a0c49966286b60df6720000000036215278d3a3f309dbab5b893ead1e835510c010c3d3e48e24a36e372c667eef10718149ffff001d3a049b67","010000002169916837136c1a9e4770200b71852b5f47f2e1ba09fc69c8290a96000000000edbf13257e5313107361d184b4916fc9c45e0b835b2228e6b21c9e3cb35cc59eb758149ffff001d06ceee2b","0100000080bd792e0959afd073c339fe85f5b19a3e4b7717537544da1e6f29e600000000d5e7c11ec99fbe93c35624177de15b0d7949a26e8dbb8662a64835d311ba589dac798149ffff001d0fca0d0b","01000000dca9f19aefd7b4efefdfe12b84609e4d468b6849e509c6a0a7f32fa800000000014e821ba33b3e522813f7ccd8154091a7e81e3cd07224f26e09907fda045161157a8149ffff001d1e36c2f3","010000003ffea21724e8568f4f61ad70190a731e365c7a623e2c075310a3a7380000000041093fd2b097b0e31927f3e209cf56316e87bd0782c079c915776991fa403cfa5c7b8149ffff001d544f4703","010000005daf0550c86f4306a1470d302bfb08b37b9b6c144e6f0e98f9a2b7ef00000000ea1cf8dccf6b189f0b70e78e051091c448ccebb6e4eb0747e262a5b5fb46ed1a787b8149ffff001d5a6f4700","01000000cb9fe07a98e7da06176cc72b69441f9e4a48aa655aad5418e8caa20b000000008bd81f36eeb8a17323997995458e800b1b4e825bf2a862025b5e7054311e7266307e8149ffff001d2a219bbd","010000009629573fa3cb6bad18d38e2122bfbded4724f07ec0f92ed04687df9c000000003353b69ca1eec41ef67bd7ce5841f6f059eb6cca7c9c55a485650960d30c805f227f8149ffff001dd0c03a04","01000000c3791dbfd39573b49bb30ca146c6b472188f54108b0766209b3b1e410000000021e31694e275edb59c7a54154be20202570687f354f92586ffd5816b874dcf17b37f8149ffff001d1ac9ad2b","0100000019b7fd7a856ff719152b15c1bb83d32be0e4b5b1463c49693b85e1920000000045b06e5fcb09c2bef5c27267ea568d3aac50688977f8dcfbd8482f1f42057795f2828149ffff001d357b1a3a","01000000fb53377492146c5cdf142105c0d857f1f71141ea972d821c2a69ce5700000000f36e365282a54c46eb973aa3c2209d9c76dacb34302a63ce1510974c98a468a55f878149ffff001d1b2d496e","0100000097f27dfb3034b5dbee902ccde2d90714d22fd4ce06d79354cdfff0680000000092dd541f28f4c2f8ab7e3db7c297ac8a39b667b014eb945a2e94ca638b3fbe4e248d8149ffff001d1e363e3c","01000000fc7115850e1a62df3804272f92bc59783166ee58d6d267d5c3f7614400000000e90e2cc33bffe31fff0e5f77d94f69abb29985efaf266a38d2135c95b0d3f46eee8d8149ffff001d73c0e901","01000000fd1c7b6058c00f49b9cdf0e9819ed549841a72161b5321192e889cd8000000001acd7b3a91a7259d94a127d5f7d8427177048fd6d519c8e5b53a1fd5e0fa87c88b928149ffff001d32a017eb","010000008de0bf2062d0f6837df72f0fb3d673e9b357c184cfeee74aa5e00ac8000000006b07577f57b97cc01e83536cf0d0dc5c78bc1cd8e7937e0adc69cee6ac0bce7c49948149ffff001d34384315","010000003b4db9b71dffff29efbe483892587c09e8ce199bb7229c67580b49f0000000002274311e8224346338e5705354e5ba2bc5837b13211b8c8de2c3fc431b67818c99968149ffff001d20ceb849","010000001c2dfbe55cef5da5d7b117837d9d19f1adaa207e3fefbdff7a19fa9f00000000a6f1d5fec1b7ed28b05026019c182ccbaa739620075a1acc31673943f231178a89988149ffff001d363161d3","01000000fbff631e0931fe4e2ac3599206f7e44157c9def6e9bbf74c6b21896d0000000045a0e90039b03e2168d48da35d60993c5733d466f3d85abec8dc09dae668613aa3988149ffff001dbdc0e200","01000000f0f6da7e882d0eb3b3a671cf74ed75a82435edac9944dcbe07eeb0e80000000085f6806341aa24b338b350d325f627aba80b97b3d9cea7451470e6c2b8956604839a8149ffff001d244b53ce","0100000020f1aa1e8a681af3d18c6edd95af0f3489707014c16722398538fda0000000002ed62fac54c340d3132993b647be7c74ccc0dde3cdbb513f431ffe561a67adf2ed9d8149ffff001d1cc41d62","01000000d263b6c61855cbbd116aa6deddc50a7cbda6dc2ed284e2e2397aa12c00000000a4d2cd07c573707a3ac65669e9deb9bbe235fe4cde4f877ca09145f158479cbdfda28149ffff001d360403ae","01000000f6470ae324b8271e1dd3fcfa10a4256f0c3c4ec8afb233aa47d2fe0200000000a8d752c190067bfc9f36a28f629dd1e92efb560c1a5a0ea3568735d6271cb156d2a88149ffff001d96497f19","0100000034f8afacc798cd7f9f6128f21b96a7543cda0d5e68ea3bd8787a31ec000000001a26d719df9301af72ef5e8f0d6b852305d191f39a713d14a49f353fdd905ca4fda88149ffff001d1e645135","01000000747ed26e377d6d4ce1bdd52f2e08831bde01f832fe0ec8c95d5261bc00000000de58465269abbc9a9772fbc572bda5279eb85eca8611161d765bc815965c734c77ac8149ffff001db09ba103","01000000fe4a7542173442310a3fdb9caef32fdbf09e9987b5bb6c50b066548300000000dc6e7986bc44b3b51f9cff6523d50e1e4ca585534df713b39f010400328491b68cad8149ffff001d3772775d","01000000b8d0c77c58e4e2e490562c776258570a62127508f8e49aadb60c586f0000000014c1301f6a02c26296a1f0416d9fb98d6d6e243ff199bb240b2debc515c083da01af8149ffff001d057aece2","01000000cf4808974c56585570f2c5773d7b6af23153045a6ca5950a5c9928d100000000f6c55d75f3b6bfa7cefecf8caee5a00a00d0cc1058972759101151efd9c5028d42b28149ffff001d08274dde","0100000096cf130154d00f736f140bc94a02b3edbba87b8a935bed07cbd20b3800000000857442ad700cffe14e0ac7d3f13ce54f7e331d6facfda078ecefc1f0a0fea9084fb38149ffff001d95a6a404","010000007166b6eaef3980dfbdf364b1e4008383b04350ce966cc3f248a60b5c00000000642c088308828fce51df175da4ffd78665b4fe9a0819320ffb2e31bd7aa86808bcb48149ffff001d191609eb","01000000a549a5369c8d8ce06423295136c6b8c6c57556c81c7026cd49574daf00000000c0429e68f017093d536d7b0f0a689165df5bf67eef6452318eabed986ec3353263b68149ffff001d36b51e2a","01000000370c31299e29fd23aa545cd85eca3e5935378b855cdb75b6176de5e200000000ba5d76b061dbf83775e1543da27b11245bd49d4f826cf190a05a76d1d17d2ef244b88149ffff001d16fe2623","01000000b3dee6000485c2cf442a8907337c613093cd36ba64c3e533c270c40100000000156336540b2a0b6415f8266668f05a4d438dc2d700154497afc347e507cc08fc80b98149ffff001d29c86cf4","010000003927a1cc3915d83bff6496a7e76c9f31104fa0cc3fdcda0e1e37399400000000336e9a7b8c0a78e20b92b01ef10c4b2ff06dc225de9d6ae4b93eaab5e83ca50fd4bc8149ffff001d199cd1a1","01000000cb2cbda0afc4b568bad6a9779474b038f37481d8d8ab4f02910dae6600000000b25cabd54d15819ea04eb89d668974840f48d9f1648885a6b939131311b203d0aec18149ffff001d20b6957b","01000000210e6143317fa778fda05e6e7e527bedbfa6ee70529b2b12797c9b78000000000993560db8ea594bb3c4cbfead701e1f4733562f5be2f67714c2b0d55f5879b336c58149ffff001d206f0b19","01000000dfad671e18059197558df87637f6f0efb68419ae46fab0e053f0d2c7000000009934d5a260dd23a7c38dfd4bd1bcd7bf4dc72250f88c230a75bee35e1dfdb3e0c7ca8149ffff001d2e21ab1b","0100000006044e40a7e3b9552367c52fe265cb53ed9f21cd1c7adeab49fbbef0000000007fde7753772ac3d3b70acfd6837e22ede377bdfba4ac3e1ee0f3a2c48581fe6835cb8149ffff001d4e90be01","01000000a68162100f9f0a06414fa9c8099a078b441bfc0acbbef4dd4c826cf500000000c6f6cf0bc063f7742d283a7b6a3fe294ea281a70bb113d7eaead7603147588cf02d18149ffff001d2f82c326","0100000025e9337fc9eed0b80f8649806716d4a5512342a92f165cd40d0e0b7f00000000096e5939ed48962eb6082410a69aee7896a9865d70a4aaa745115c2c4503b6388cd28149ffff001de0100a04","01000000f9ed1fc3198f2e1c8f8ded69d840bb91b0e43e4fe49de33f20596aa5000000008c6c28e154552b2c0ed1ad7ab75592f8b94ed2a973c942d0ac744cb6ec2661a797d38149ffff001d358fa0dc","01000000271749bb201e74b45a7bbbe0c479fc163c356600bd2a4d64f0a02b5a00000000a05b61382a0e1126972c7ffc29e61d0f3f86b6b346fbca33f58be9b56e7afe77ecd38149ffff001d3e148f00","01000000bb0bc57e64a89f3e5f98e13c70b547f89f00752ddd0245043a515287000000009d21737fe764daf85a44db9afa8478640c02ef86a9df06deb09b07db52bc9a9c2bd88149ffff001d1e24a285","01000000720b4e4afff43c25965c30eacffc2b7a65b210d616b7bd3504f091ac00000000329b953354a246a696d81c19dbce0fd8f2b22b062462d896615258ebca6ffd1896da8149ffff001de2fa9f06","010000006ddb87f853a4dd3a46f63167b8d33d0ce0896abe25d341051a1991df000000006270cbcfe384dbebfea72e7c60e3bdfba294b89c832bc95f49dcc5c90dff67890adb8149ffff001d11c51e02","01000000b858c19d12589619977282ac97151817d3e9d89fc3b8bd9eefb51f8b00000000b7ff56f3e2eb916dc445c561dd6a8524cf725c828f100736d358f8be90d4a812aadb8149ffff001d36e4e010","01000000f27e3f87ee79e626e51593911c5e1303072783150c34dc182863aafd00000000d5224be2bff39d1136e953da5ad53963dfd1cc9bdc83019470d1cb1a4286db218edc8149ffff001d4bf24202","01000000e5c9004a61af17fcf51ce151a805a80d99543b64eabc3f801ce2b74f000000008a3a58e03e1a31393defc66c1618e29463e9f1d3faba22aee711d4a89795938777df8149ffff001d6c929608","01000000630b553af9d8047ee80112b5f92f5a5df670dc0b17643e42f7b12f9b0000000010c9d2b058d8bbb192ad6e8c4d484951e39958b4d97f520e5a33048c882c4caf57e08149ffff001d1863d991","01000000a12af654d20295395eb23a46ab726f130dfc47cf7c49888b197bc68400000000fbc2340f899c70f133a4b9a5081ad1c6fe6527a9471dad85deb14636181d5890cbe18149ffff001dfdb99105","01000000cc9126d2a328370010698d6b133b62acc89265049d3cca52ff71a1a20000000086c0e08c0872a441c2228d9db66a4f5717166bb1224679d11123b0b12c8c7a948ce28149ffff001d024bbba8","01000000141ac8f73fbd72dab394eb435c07e00903ae3e7b152ab06db0a2c91600000000bb45bd9f4fe89957ae0dc370859a59cc793c8b08fb437a68e9ea12283b9d9a29fbe78149ffff001d182fa149","010000006fffa0d951466aba706115e291f4adc019ec7826e66c3e45b893eaaa0000000096803070152c8def511f3609860556a4022a322d2f111f5661c48e891218b708d5eb8149ffff001d38162a41","01000000d6650fa68aa9ce3fa23a6101c6b260e165631bbbfc02a7643273fd4000000000fd2f545d129987b01ac9f7a84bfcdecf8606fbd49ea0ba5267e9c14a4cc50ca26ded8149ffff001ddb41b100","01000000acba5e3c70d287b0780c0c290a6821efec7a0e79cda6c87861158475000000008f72ea9f5202edc1a63fdc12007fd7c12ca9192f55e44626a3d35760d5ec3f31baf18149ffff001d2f51d834","01000000e5406405c210babfe27b65641524235957e736fee38c393fb31d1f3b00000000fa4dd573d4ef64ff7e52a38bfbcca2f9973ad0f81b93236454ac701f0352259b08f38149ffff001d2c403d06","010000007896f437f6b84d1693fd56186585d122dbbdc68f4b5c3462fe75e67c00000000ae59bb11f23cd680b8a71b4c3b391cc8d1c682b31555db139c322a0cd4d8f48b46f38149ffff001d371278c7","01000000f1dd7e229e05bf236650f8610d99b56e48dba3922d8f9c00c3ed3a2e0000000011bf4b05bf8b1bf2eba12ac983f61bf573f1c37776d0c216d6f8d4f7aa59c308a9f68149ffff001d223761dc","0100000018d2af4091fd5ec1959a212be23ad6cdca54892b77696d1e6cba2e5b0000000049b2ece097e33d92847705c9eb3887b108d50d093feab8fb1e38c03343d44c43e0fb8149ffff001d1d169caf","0100000077ea300d9d1d71557f53329697674da6a6c3f18934c83b83919c51af000000007ed92cc0ae70925723ad8f9c86c471f4c63726f899bb44285be618116f3d2e0c07ff8149ffff001d26875b99","010000000a0a30a7c087174a4c386f29222426e78c579675f65f39b265d3eb6700000000b127c5ab40948ccc70a94ba3b07f5246b8518ef1025b4da140b2eaf9df9ece58d0038249ffff001dd16e1010","01000000bbf30093dc30fc65c5cdef085e3503b08051ea55ccaef8cad1c78ff30000000059cafc9d01ff8a977639680713b20d7e1d71672f584a8dd1dff750aa17f4899aa3048249ffff001d3124f5cb","010000003ed18861ee824f18862e272dfcd201a62975f099f7171c5e240a157c0000000069514a9b2456485e37f14887285fbd7cd79c602efb012ae2a1585d2caf0bf795bf098249ffff001d198ae386","010000005e7d6f3d61ab2c53e94543eb9b3e5475ba09c49d79a3f0bcbb10706c0000000047797765f2a3f4e7e96805fdc07bb59b66aa0f05d8952ca829386bd86beae778540b8249ffff001de7981607","010000008e77ae52815d8e38f519948e01f348c6671fe8293e371ab1477c41d300000000abfe489f425aa3435bd00497b6f92e7fb563beb7dae47236fa8de30d2f187ae40c0d8249ffff001d0e0bde08","01000000f6e9e26997dd4ebfe48e41a37182d560ed6302e7dfa32b18658d238d000000005d1fa5eb998327f99cf2c57139751f81f7b6f0e2d5cca9bd7b6bb961b9416f450f0f8249ffff001d0534a7c3","01000000c3aac958f3579bae2ac404af3d3fc507c98441e58cbc35f45638a0fc00000000e26b61e7b7a2d8535b65533313a73d1e3cef67abf00227121fe222a58dd66966c2128249ffff001d533ebd0a","010000001e8589743d188df0105f474a6698337dff96bc7c87096ca5e80abfbb000000009fe9d8ce7088074ddc211efa1766132dbc4d00519a60bb8cdf6588a733f98be318158249ffff001d19f0c24f","010000000b2107ae4d6e4755bb9fe968f6950e013f89e25fd07ae627f6bc3ad000000000becf681a4de75feed7c215692b10fbacd9efd6898fe33a78effeddd19d8bcf8577188249ffff001d1f4ac074","0100000032b15faca5188b3c383da3ee7c314ffebbb106f0f70788fe495335630000000011c1a92bee511f7492e4648093cee61c57717b030dae7a1d0ed484ebaa27474bb6188249ffff001d1d141601","0100000054e1e404f99ac7f1b3b30e42245b76cc0870d3f69fbd677ae66cd83100000000dfa8a71891b9fffe2fa1cb9275e5db0d68afc9f0767857fb83e5ed6b4b12d5fae11c8249ffff001d06abff43","01000000f7587ad6a409443a8669e6c22c9d7042dbc36f170671bc7c5460ce1700000000e96bd95469c33b173b3cb81f8d6e10d51a8ed424be02d7b50e56f94d47a53d835e218249ffff001d054a81c1","01000000f07dbb3184dd7936f34633ee4647e65081bf40961bb082f340ca521000000000cc880417e6d6df13fb1b6528b87b3ba2515a5158ef5034853bf92ab005bc8ccf76248249ffff001d1849231b","010000000205b021a6886923eb2cc0c8c9fde8ee3af6d2624ad879a71720ddb3000000005f9c6fb90298179b8408e2074f0879551be4631e6e01d54404e2df8d4285cace97288249ffff001d6fde3710","0100000088903ff4c84ed6a1cf9500c2e86a048448a9fdf345ccf73e6d93bcea000000007cd37d73b5e6c9e3eb449edf213b8851e809772229267d1ca4b658db21c3e73f12298249ffff001d2cca0736","0100000014986de79b10655499a4f114b146a6d352de5c7beb2e0f804b3edad900000000bb5cd18f01922c9962b3d645df6b482d6030366175768c4cd3f4a420e848766d452d8249ffff001d38b03415","01000000e69b359fe0bafdef95ffaaf4733308f623922da5a3c60ab0b154956f000000007f5fa143717e9ec8d07304368827c45f82d67f7aaf27e03e3d52df994018023b442f8249ffff001d36d5ad41","010000009bda74105a158397de2ea2cb8796e544e95b442668a9e574f5d5435700000000d4964ecf63ee17e025663a08d1862f2270e4009ce71ec4514e68b69d06914775c4338249ffff001d030633a9","010000001662e9156e86f1fece0a378657f2bc1812d73e90a689dbf89cac697500000000f785358d7cb27838523860693540c3a28bdc9e407172faf325ed20ade4f3577583348249ffff001d1f5e4700","01000000f6fe399b11dfadaed1a3841f2a006f5bc14d37df465c96b178584d7f00000000f1264aaf08aa81abeeccdfe109720b8ee116142cb7ad12d62877204bc2a76e92f7378249ffff001d26e9573d","010000009c5e7deeac06b865fe7634c575a506053800d84ff6e934fb8ff59a2d0000000052e918590de546a8df5a0773c4ef5f765c04036517c20ed3f0ab79cb7a85b1bee13b8249ffff001d188459c7","0100000053b718f06e18888f1ada7e5670a6f6cf0f84798305e32c847f44771e00000000088f2d4802396567a51755a47e479807ffab424889ed360c4aa2167639052bfefc3d8249ffff001d23fa06f5","01000000fa4af5c8141047ae5a8b7c07db590e356c6a2189fe9430082abdae6500000000c4874dfa7dc4b19fa7d42ed4ceacd640628f6d7f9aef9c5d5fef76ddffe5725f25418249ffff001d3bc60704","010000002df7e1c8190430d42c5e97d2ab1f02e6879e85198b6e3659ced75b62000000000ea4333bb6c40a698f45ae45abce15918581f3bd98d29a8a0a4623005cc61c7d1b448249ffff001d3155725e","010000000c3217723ca0481f250f04d5243dee2fb9571cae2c5564f02b2068c0000000006d07e544dae9109caea63904c83d3fb474704aaf6158d29acdd05dda06bbbcc0dd458249ffff001db2f3eb04","0100000023b46b8348a0daa6b737a752492853967c6d1a0c0e5f32dafb8cd58700000000aefee6a67770d50ea30c1e29a40b3ac18422dc7afc5b79787bd08ef46d78136b2e478249ffff001d24748457","010000000da8690440e0cffdbef0b0517f0a914d97ea40f79e8df7c346be60ac00000000976c313f1b8d3a1bb89edd4788e97f683f4d1273d316bbb8783c537ea088b5e491478249ffff001dee1a4501","010000001afdf649c64ad8860d4337b95bfac9a0fb8011c5336d8dbe7f5028f400000000520d988d007efc93bd89b292041a655e05d560069a54054db50223877dc8849a694a8249ffff001d277bcaba","01000000f8189cb81761c3082a6fa976b6efab540cf0b1aeb7c7dce5e11f739900000000452f2591c20d621bbb8d184ea58b106cac9dbc5479d738ac2226a47b6ffc5cd3034c8249ffff001d30ad6e86","01000000f67d4d416d17675fca4d74d8a7c8d9e225ea2b99aa83d6ab9f84f51800000000975d63065adf88552a0c11c348ff6e62aed20d5a76cec6ee1dd5d630db43ab0337518249ffff001d25e2b0e6","010000001fec002c8a63d70182df6a3ca39e41f6e656291d474b6179cfaf73010000000058aea1d43caba560420dc4a52b82c336ee82175b61ab1a814127f0c61c1168f960518249ffff001d0d851700","010000002ac90891c2f59e17d5aee1c8a61b1b1369a46ef755b13d606e4adf07000000009d6e47385b6b746163b4c3cf3d040c924072dd3c197c1c2c1a6fef57b5222a4e1f548249ffff001d5cb4d502","01000000ac448dc8cdc96008660d1d428c77b8e02af7b0b470785c32760e1d46000000009c285653909817cbb1bfe64671b5131dd64fc32ab4f6f3a39a326fe5eb5d7b7df1538249ffff001d13e126fb","010000002864a3a24df4159a46a59a33b803ed337026d7d32447549cf5621ade0000000085d1f5b188f66d8bf31aeb16e19abde1d1b84c849b1d542bcda3ab4e7fe0bee251568249ffff001d06b736e6","010000009edb1b747e7b2f86448f52d7ba427c8c407c37a7a5663e0f5b884558000000003367d8c6080eab610af84d1893f5d07c75f64c74bf68e582a7f9376722878e2c8e588249ffff001d7c927f0a","0100000009ad7d93d1cbb571273f401ad6b34920f89b86ed07fef5b5f4fda5910000000098ca5a0ab704828ec76f98025d8f2945633b0051a36c84c25ea7b0f353805099235c8249ffff001d22aaaa8c","0100000063232872e833ad44fa68307bdd61b6fa9ebe0e23e03a4cb4543c290500000000af62705c18b77e818d04d639913df0f1a70379b3db7f636e7ad14fbb334758027f5d8249ffff001d31caba67","01000000a45bcd0914d4429aa83f9f2da7c09c402a5f5eeb437ae37b661d0ac000000000a59f4c349c2acbec1f7a077caf6f6b828a9dcc1625f1cce2e151e6de8164bcca5f638249ffff001d01a26c80","01000000aa02d36af09c52ea6a3e30c9b597d524a942ad7e6471e8158f3c513400000000f63fd118ca546cb81e1a2ac527e52f0e23fd10756cf7c2e961a393a88e70285ceb678249ffff001de6e0bc07","01000000d830fa407ebcae051b826a4937fa6c143cbacf5c0f331ef40961a083000000004466bdf18f790ed67c2387ff8e6701ab2e6bfe79821c114945c43f00e190a440fa678249ffff001d220b47fc","01000000a7c6350a1b4dca08d5c88114db68da62e89c4aa8876caed15c6059f800000000f1e55b1b0174937c7794354bed4724ee9501038c28c93c7ffbb9bced648119031e6a8249ffff001d1a0bc678","010000009a6b772e9a6c42d694c42dc3fe5437f037bb7050291be825bfd82327000000000a45ef4b21fb5464fb5a0a7b217127d8110e6a7dac976ebffba786ec99ded86f926b8249ffff001d1dfa1494","010000009cdff5fedcf3665124421a8bd216166352ca589afcc04dbc5ae352b30000000009b0f78b6cf0fb92f05818d8a4d4bde508fc256c5e6760af60ba4e8ddca15900ad708249ffff001d186083f4","01000000d6361228fafe5038e6e76e1fd11a082e3f5ab4c5bb69e7a1600b60e000000000fe61eecc97ec674e45ade4f5ab87ba3bb080bd0ed81a8cb88b56b1bd89eec875cd728249ffff001d3a76104f","010000002299250d623df612a1143241b069dbf252acdb0e07d1746828787dd500000000c9d99162d2bf6d36640cd2f0ed4af49edf981eb7f78c28b0bbe7a2459c887e35f8788249ffff001d18cde403","010000007a07c067ced73d692f7180ab3dbb023fa48c08d371ab9dccd5dd7d94000000008adc22a7a4254e301c835aaa48058b076513beee71c5761da066b9ffb8d01f6d727b8249ffff001d2f29baa2","010000002c010360b873e05a79433731e8247104544956f4019750783c616fc500000000698b7f2e7b116068a72b7a1a29cd58d8277f53043ec3eb81d299457bfd9e22fd14818249ffff001d1d870305","01000000ea80c8b8925a2f7cc8cbed6debea1c597fb340cd3a1dc250bcd27fc000000000676ea5248aedd08ac7db3b9cedf34b67582fddb2c316b80116328b8169d1ebb778838249ffff001d7a64b906","010000007466090fa20d89bfac5849043f6ffffc4c3052cd9886ea2a38c17c0c00000000288cf4a70f7189e72fd22324163f267d2611c3f5df2cb47518f072776e26a68a42868249ffff001d20ef7cbf","01000000842ed9d375c677c0c4b6653f8d30b56f11e0271e1dfe6f778ddc945f00000000bc9a03276bf82271b2697236d68d81419fd08c72eb38811a8af2f97165e9c7f7ce878249ffff001d36d2bafc","01000000eb6c9ed98da4387e3a4bca0da32d8bbdaa3668eaf78a31b83dc3122d00000000d71b565381877370e779e2841f835dc307e1b6d3d96ecd41abceec56cafeda145a898249ffff001d2e61f5f9","010000005534a94c865a2ee0d67547959289a5f56e676fab94e998fcf248fc84000000006c724673e629af1928fee16679e85bde354127f15d56414a9e9d5a34fa5b1ebde38d8249ffff001d2595be47","010000007bf37bcf219899f825c645b565e93b4c925041af44dd983a7665fbe000000000fd025af48314418652ff539eb4855bc9ea2fecd99943646c1f1dff40cfc73018d2928249ffff001d3a4c5003","010000003370940c3dd9c2329302e2e862f3da6632a01b55082504e2bdb909fd00000000cf060c4e332e597a5870d7be399b6794c4a2a859b38db6e1edeb3e542a3f389753958249ffff001d60e06c0c","01000000f076536a9a5348089a872ff6db2784ae8bcb9811b35867fd83453a3000000000c2f32e8252f2c4d92666bef4c7e7b834632a051998a451f9ec6b90d5f504872262978249ffff001d1ffa5af2","01000000691aeb9537bafbd5e4a27b2bc126061cf0e17de06e5317e49d64107c000000003e038c40e37eb16b17389d375d73c4f490749548bbcc1677f9d8fbb48659a12041998249ffff001d25b76523","01000000a68c541af64f99018525b9482c236734422eadec20189394ac483e5a00000000e168aade63248a56ef669152dde0a1f1663c635688e25767e2fb41650d1b33417f9d8249ffff001d212266d2","0100000098fb5b2706f7fb8d9f0df96d3788087131490281526bfd564ea647cb000000000a7d9e5366469545b32c2ef41a932e2e9e2022174c1b4f4942b29edd2e4fc50eba9d8249ffff001d3c2a7500","010000009e8c050117efeaaa16d33be294c2e422bb9ecde447fbfd56a320b3cc000000007980f66f833f0e8e2526277a31b3a063835b4b8a168d8b7188f3d86a121237425e9f8249ffff001d1d46d60d","01000000f58ced945b31fbf03694e7faaf240735c0f0f4c5a8516a3e2f04ebc000000000ead3df5c526823e25a898b349c6b40ece5c63f3e1b4686731fabe7e690c945ebb2a48249ffff001d06f9355f","01000000402e8e922ee56c536578a66a46aca8121f242e8a29115b4f20a7bc6800000000c8db9775bf8950c580b32e25e244adfde72ddc843aef872394df5918174892a163a78249ffff001d078bce2e","01000000c2798aa4654ecf25e1700a7c6842d3ab15aa7cd82bbb4c54aef7a914000000004a233e73f50d46be113e6c808e24d835fe0aaf4bf90b60f054f88e7823e6e8473dab8249ffff001db681ea12","010000005978b865672f63771cf4d7c363d3520e066b2c9fef162cdc199d32d800000000e1d5cd66ffd91df288d6f65a367c7b9807c591d33fd437a16a2a5a16c6ada90b23ac8249ffff001d140709a9","01000000a3c42cf159edd5b7a58221fad62e50d2effcfaf24692c04a8f05a39100000000c959b5b6e2d2abb8042f8debe2611a58588e4d62641438b86de7e48e4547f7251bae8249ffff001d39eaf846","01000000d2ad1902e337fbde741c9322c450ad45fd52ace62d57c7b4a242861c0000000084c7be69975a03ea7bdd81a2ad7cec88e77589473d4b99a0c6a4aa4dfcfd774b8faf8249ffff001d211a9c05","0100000043945e2cc5d2c3dfe66329f2fe4c4ed1ae77dd984db17ce9d9bdb2fa00000000b8d8a593270d34812ef91b23125b83e501907b692915f26789e15eed4fcabb0757b38249ffff001d1539b3aa","010000002e358c06c83896cc62d3b126315f4e7ea3efc44d268f0db6e00c091e000000000673755223dbec3d1bf99229613b89c9cabcacd9c3a0fedafcae850a96340b34ecb48249ffff001d2bdd1079","01000000029bf127870aabbb0d8d4153c54fabda7ba8f7af8510aeffce2d358b000000008f6ee0ea2640a83d128e8d370d4917d18fba42ae25d33c8ef6415f32ffaf558b72ba8249ffff001d231a75b0","010000000b673dbd6fc77980884300635118859c6400d9cead80286bfee63c7800000000f2edb019347b743b519982d905c1c76c8f2e2fa5cf67e1ab557eaf896bf828b30bbb8249ffff001d100c3603","01000000963e5dba8d7329f9750b629db2cc5c74b24108d21d63bf36ed715c000000000006529e71e46ce724b690c54b5df05657f8b13b1c8a9bf2d942c44bec980cbc276dbd8249ffff001d3a6ea1c8","01000000b28df1536f3c5609126442b563e705b6e1b6ee584bde1fc293df3af6000000004edfcd4e248048db06a253e07cdfa77f580a9438d2152b1aab066b38445ba72f88c38249ffff001d2ad497db","010000007b3d4edc4b0e3eb962e9d1e204409f0bd0089ddb5d9fe3729418e4fc0000000068eb0e24ffd80e16e18a5c123016b2ddec822922f4f5f317e808fe8d24f65b1e53c78249ffff001d319a5795","01000000f0fba078bf444943f667afa1babe60aa364981b7dc87af837b211d62000000006dc8380ffc0d5798cff9a9d0ea672395fc3dab624c5c524435ae26e46777e31c62ca8249ffff001d3ab2d40b","0100000016da6fd9966e1b389a0e4187f42adde05b7170504ccc1856812a9777000000005f59a72664c24c2dc144fb7bcce9b2e9efe54d51dba0f30dee6c0c93297c3b2c0fcc8249ffff001d8d2eca08","010000000d92609f96f9fcde419a9e622d8ea38fe6ea9c2b47abeff0c39a2a3b00000000ed05593acbc00e1974c2f37af7f7f276cf18e777da964583d539db4e6fd170dddecc8249ffff001d01c1373c","01000000feb15def0697369377925dba74c8c87a79c7b99566bc42aaa5242d1100000000ef052b2cc448b303405b0626eb70e5db55e70785801a2b3aff6cad660a2191c10ed28249ffff001d00a2342b","01000000b456c3f86c2b7c7e81713f46577e55e240c35ab94fcf63309fa6c011000000001aaa972c06e7ed910eef421e830b534f398f5172cfa86d8fda1447c891c1e572a2d48249ffff001d1482cf59","010000007c819e098badbe9c49f46dc25fc7b0a41771c775b8114d0c1177e90c000000007d87cb332f36e57b7648f24ee4f001c574c9270025b98c7439dafa26bdd9f9c7ecd48249ffff001d11930801","010000003a45b7b0ffaef57b86795fdeaadd6d40bfce23dba4ae6b3d634b0eb8000000007fd6b73d46edb9d6393e8366aa161e95a4956c9175922f54ea6a9f36fc4975bffbd98249ffff001d148d2633","01000000a95e2352d8c271c7381a0932732a286915c9eacc6f05c72d871d62e40000000052d6ebc067ceccf750184c98f72cf7006df4670a4fbbc01547c6fd57ed7443e7b8dd8249ffff001d01d746fe","010000006250503045b957ae36c985995f321cfb2689a78477bc44aa33f22470000000009a3bf5e65aec3dd60bc154ad673988bde9eadfa638782f518e49cbb2ebcf6c1248e28249ffff001d328f0858","0100000002f22d2d4bcb3ea6d7d4667732489329b1de28cf9f1a13ad447eedad00000000cd5c3289745366cc377ee4d3b045bdf0365e5b6c9f4bacb8882dfcd9c86ce5a29ae58249ffff001d2bed9a96","0100000099aa0283840f765b5456b247adb7a76e1d704eb0910799a936094e8400000000ddf94e1e566a2c22034f7b8ecdeb91c5fe83261b26138949b6244acb5960f30e4de78249ffff001d24046b5e","010000005882b793425b6db6ea45b454b683b085c4045949de459fe6fc66ef0600000000e3a15c063e9bf7df71385f39a498b93ac34e7969d86db3e5e6c86e3cab653388c9ea8249ffff001d082a0055","01000000eac2ae5b3ccc407a761c12e17ecffd70a1f360149bae89a470d878230000000055732dc0adee7a2246992225676e71098dd8b9c9dace884a15d0aa0e0219bebf8bed8249ffff001d1f4723bb","01000000314c14cf8b7ad4ff15ffc6458e033f8fa68a21662bb126138fc15cb10000000097d2935f281d46bc8c66914f68341e6eb0080a187195187afc2f3004b51ef155bff08249ffff001db2906c0f","010000003b2b9985d3cab53f859bd5b5481d25976c9192b60e7df8294256469800000000306d001336da7e90c39eda2a6bea9e3c42d4330a3710d00b42760d821839c0470df28249ffff001d0320b672","010000004c38ef2f281f639a0a147658a3c8f59c684d91df6c511eac369a26e2000000006acfaa77631ec9d5223aa51a7d3fa5bf837c5e55e10ffb5b62dc9c056f6b6a7292f28249ffff001dfbbc4101","010000007f1d925f63c3bdf7d8bf0b923d3a520e08c3bc08fbe23006b7d2fd4f00000000a45dd74158f763f5fb98aa5554e15740db471aa76739d6e3184d2df5a75ff05e59f78249ffff001d367bca15","0100000081b3cc7a8f0efe9912ebf1b80ca193340cf5e4de54ebdba6befe931000000000f02f50829e7fdf9cfc1a1d38c646178efa07e1b60c50d062d5cd2ea06715e76380f88249ffff001d894dd502","010000001d209ddda99122cef466625ab7fb1e1c2fe65840d24a22b5979a56670000000000807df287fab057a6e6be10453559355ed22fcf2390530232972045c47d3a3b3efa8249ffff001d0832afe9","010000008458f64a2c4870e1a793fd9fa3a2cc07a7da6950418bb779665cea57000000001ab832ca0fa0f4702ea8f7b23cc26354939cb9a20aff6abf923a14e05df1efdfc8fa8249ffff001d721ade01","0100000007c5e7da4c82fb8abb553e5c6580da3ee13ea506c5f9c601906f638600000000f1c0dabee0017a65eb7a6c096a29caa2313c95e42d068ec01d1f2cab7ab520892ffc8249ffff001d08a5f500","010000007482f02a5543597cb3422a8d81c293a301cafe285cd5b0a6c4de4d5100000000ddfa0b86ad0c0844a598f7f2c522290b03d6a8be96d92a81dcb0567e90b9a131a5fe8249ffff001d265b0407","01000000ec125e286aaa33b154f61a0adc061911a9306f140737012d17fbcb4100000000995c51f6b1094fd3400a00d0d79cb4f1550a50bda010f4ca3dc1c821795872fd43ff8249ffff001de9282502","0100000085fadc34e410d030e811d59a87fff6ac9b4b8b1fca9217e866a6a8eb0000000095c40f521b973e7afdc32d38aca37ab3009602281e23f3b096c413ad8c21fe9cd2018349ffff001d02a6849d","01000000572c4583532d397f3597ef3576ff572e724b59dec5da6e137d3975aa0000000070afbebdcdf82287c434939b32a8b60cfc3f73d2ba18a299d039764ac93c41492d038349ffff001d0b3a0906","01000000284dcc9c784258b3b0f12a771d98adf4f6e22e43df799dec731fb278000000002571f138d7ad3507ebd0b276ef1e411e3e5b5a63d96711da6b27ff61035217ff22078349ffff001d27aa7f4f","01000000c914340547c9153b733a8b28430d31af26728e826e476a96b42785e8000000008eb443978077295122daccbd70c7fd56c667d7c99b737ad84fd0d6941c364f82c2088349ffff001d20cafaa2","0100000096aadbfca1615e8a26d900353f2b61cab7df03bd05f6b9632fdcfeca0000000092cf591e6e30b2b7094de81dc3400fb57192656280b0977ebb5b6d61b2ae4bec310b8349ffff001d3a1a47d8","01000000e779d5a2b04bc7cc2fb3586665dd71b830e7bb94c2670908c59cfe80000000009d492d6a5df3edbad5579f77490acbfa084e8263152cc7464419d1944c0e84fad80c8349ffff001d08acda56","010000005159256c849fde7737237f75d5e460d305f2c9728f8a7593adc5ebf4000000005a5645b0c2fc677d6ddadc09899a0702b4fa2e90452f368a939072d9bc56493e6b0e8349ffff001d81fdb307","0100000039ab2a99bd81f030616eeba0961336f5dd10f9a5d5f4573b375bad7a000000000b33fab6f6a20abf12771cf017baf81b3eb13fd0c06dc9aadb33083ea9be90aad6128349ffff001d26f71f9b","01000000ceee49010555fa7a11f287369276c0ca3916f17b544a4a37f5c9970f00000000572d151a18e0e22364ff14a676cc15be55075489425b0a9a518e0b34a9638be3c6188349ffff001d08353b53","010000008491b21588d636c69fa2cc6fb2a477bcc3d58ea455f8bec81b98369800000000ba1366eec0d99cd70cf082d748ae7b6b476cafb6f052e00dc29232d56c0b3568621b8349ffff001d387942c7","0100000078fe38f5c8392c72c88eb2ac4bbcf04decbc45e4dc57b3adfa17c7f500000000974445f0ee7fbd517cd79dd4adadb566fc651ae534f54e38425323ada34670a98d208349ffff001d33f0eff6","0100000041348a6967bdb8dd5c8ef507d76d67cf0bf5101ce92f8dce585a0e9a00000000bf1fff1ce8e147ad54aa7d0df7e83c44311050028ef5db039ce935fa7d663ffbf9268349ffff001d218ce6fc","01000000ec0da0e9f1496a7549d4a6be43c71faf092ea507b6a5740472e454e200000000525df0508a8a4a1fc5a541bd971478dcb5c0ddb2b9570cafe727d8c1ec68fab6592a8349ffff001d27243287","01000000f4965f37c87aa34ffe887b784fdf822cd47c372c0746976ab396761400000000a93d4384aac198b364f649fa7902e8e191c794023593dca496804ba68813b282d82d8349ffff001d2e6fe02d","01000000c112d3f3d99e18fe4c08aa2f7a470603aa24dd28fce6f1d8d46f26c500000000644ea067c5b2bbfc677464f5df1c248b4517183b0a1cd27a9195b6ae9669edb79b328349ffff001d1f51fb6c","01000000b325f51675b4ee6fb173b780ae690b37c856a3f5e1d37266cc1cb7d400000000e081370c4518c45a0973ec71db653187fae8b728504aefd24aabb441e4f7d7e4ce348349ffff001d2c8139b2","0100000043cbf51f8d4c79d8e97038fe1ebbc576d44af24ffae732e57a52ffb70000000066ee28efcfd2827d08fa29b45da7db6aba1fdeaa291e83cd9eefe5dd789e376f3a388349ffff001d03cb02e6","010000009bb42cde8a7ee6be1d8e15f21030ecbd8dda2f304da155185491da5200000000d768fbf9a178759297ac8b8c08ba5041d4201a548795d534908365c0e1a5694a103d8349ffff001d20e4a377","010000009507af88ae439513cfe8b1410014d6ff0f25be748f211509e99fe9db00000000b502fc41025cf8b74cbb96c697e439d3b68e4fe12cd09df19604aba8bf0e235e3b3e8349ffff001df18fb903","01000000fea751e3fa1acfbfb9723edce2e543da914b67356a44bd70c0e7bb6e000000007e9a55d946832fa49e96ec0870755c123bbac8d763687f70f6810b988f7a3a7fb2408349ffff001d297bdf5d","01000000eed06a146f9a70f10ce21f1d409bf3bcda24979404ecdf5a987c90e2000000006ffe122b6c8e22fb5d8c4182b99eabe445905702ec54f98df4753fa7ae321f3c72438349ffff001d04ba7165","01000000a9d8ea5b85ec25eff3d818b1d65a2dc39ffb97b8a3ec54f110f89ccb000000005434cb52933930e34f94540f6f1ed90a41c6d7a32b9bcea2b0b93e24b11bd06c45478349ffff001d38d062c0","01000000bc95982334e093aa6b656635a3d7a3a8ce45de266f3e1e02d495098b00000000c3b7445905d887cd07b253e0fa61ec3d8ca8d3ac4b7c35db5c92c9de3186bc9b18498349ffff001d1681e950","010000006a5c126d16d5eec40b42487037e501d639c2da6be8a44047be31c274000000004eafa7c8f391fc20872869e63ff4c73b58954cb0357b0624ab99a38280f47829c64c8349ffff001d01a080a1","01000000fee9777b0b6a305f0ebcfdcbf220d054c4f24f49c21326902b10b8d400000000e47a818f14f169466851b5464fd8fbf7646a9e82d561a7a1549f0609739d3fc5fa518349ffff001d04d0e3a0","01000000a974f9dbb127ad2a3c03d94146a933389ab5b17d44955048eb8223990000000028bf590e768ca2b79f11a43a9886be514d873e31472cfe0b77401cb9b509bdc58e548349ffff001d2f45a977","0100000021ee17907d7b36ae872850b6037025602548a0af7a93366e46d7036c000000000632a60044aa3873b9e093d613d4ed4f2b371b4b94bae7a33c5cb455017d72a6ce568349ffff001d71301502","010000006caa966c5740bc6721c3949325382f6ffbbdaa8268e62fadf0455178000000003506cc77c028404cbbbfbb709ed2cc6169e380f231573839120a0cbd42e39e3dbf588349ffff001d38b3ce6f","01000000c6efab872cdda9e930e51dea9939d0c5f5371ebabbcae71271ac6d70000000009cc430d16607c075b1e7b7db0e7b540a17ce50148077cd6a229d9bc93d0e9ef8d85b8349ffff001d24bfdbc4","01000000f34a085d5651d415f5cd72bc417e10810d7233b35b3d8e6aed94e54a00000000275f6ba44d253928bac05f0f2406e63ab352a8587943bfaeed90a1976f5634d5e35e8349ffff001d3f9fa80e","01000000a184c1dfa377feb37ab82c7339c6f8bbe756d896ebdb29afbec72b4e00000000674a49cd8028b863d4246b6bd39023ca271a0052c9133766b1554aae99c3835122628349ffff001d3478a764","0100000060a9da14752bd633c4733c17e4f6a552c5b321674f83402465874f2200000000bee35a905d9ac35b5ec1462fcd1c8159f2c15a2d90a01f5cfbd940608e57f2cbf4648349ffff001d311872e3","010000003f267ac6d689729e625dbf6ca82a21fa97af360e0a13cc37685c8d0300000000422611ddf1e050921d1f84072e7c3972be83e14a72cc9b3405dbecd5ec998a0b57678349ffff001d005bc641","01000000acbb6f10045ae22a823cb4ef1d2f92b6e68281135df9411a5017e45a0000000030ea296ec2a1694c650623cfb13242b139a4d9d0bc4dd6f12feedbc7b4ddf875236a8349ffff001d27a5b239","0100000063fa25478b9027d66a9c12ecab2f450d8e153d52126ed5184956c05f00000000baca7344a2ed3635d16e6fa4e77180c2c258460bc2802b231e42e7a0656114c9426e8349ffff001d31ad45e1","010000005603f56cee3e6253bbf9ed6932cad71c4cfe8745eb7cdc5c467cef6c00000000f700bafa8db6585576008d74943f0015f78755ddb01f15d2ba38d95e07793bfc33718349ffff001d144a757f","0100000013f77ea1d38a5a3ac9857a4c0d2dab180c121e4de041130851bea6dd00000000a1d3be92eb07c1bf3af7619edf38e3007a0306c93ec3761ed2b844a3b516451041768349ffff001d32ace3fd","010000007abdc1a23e3cd2e218b3c73f2e530e8be30291b316007440dec82c8a00000000a226a7d1a1d780a5151f764de33c11c7b674e54e69c6ac33cf1fa8cbb864932ab2828349ffff001d2a51e506","0100000058e4a51f819cc7d70b64569cf424f68c4f8e51d67fd9b7ed912d7f5000000000e6481a3580b1021c781b96daa7c810050e71ca98c4ed3f69648c5f198bc27d3bfe838349ffff001d1e21094c","0100000068b4475bf8e2cca686047deaaa3ec4e558048a680326751d0fcf7d8800000000c00fecbc5f688e0d95073d45af92f98d005a92ec86b00b7b7505037f6002e1d14a848349ffff001dfe778b00","010000006729b952286a3ec5202096dc84296d89d8947fb2eb160225eb38100800000000038ddfd34286b1edd44ba52552884d99c46d696fac631c2849faf9abae816b84d2848349ffff001d6e356201","010000002240ca76819045b5f8546ad2cb79b9401807e60889c9afe6efbf27b1000000004211707a8262fb904837c3e517246e0aefd508748fa3d93f1808b8c4ae2992ffd9868349ffff001d05eee8ba","010000002d3f9f89e50b1225a612b09f30584b7ab9e392730faf402f73a40e0400000000846d739bc5b979876d5dc90268f3cb3e0edda0c1154dff15dbf8460715782df5638a8349ffff001d13d1dfd5","010000003ef00ef8f04e3df11dd98d529ea445f07ee8dd1d61171b5c2cbddba800000000756de70c6ab4d2651d685826ecd029b232ef0cba3184b04fc60e40b6a9401c1a33908349ffff001d054ca400","01000000fd3e379b2947069793bc022153fd1439bca954f8a919e6f1085e851b000000001134313c697d1f71526a1d8ae98e02dc0f747f121465ca428fcb9ba2f31a1608e9918349ffff001d335c8710","01000000cf69d4e759b2eddcea93892f66a90b8c381ea86bc927ad990c744df60000000058cac99cf480be96481bfc099aeaab803f4018fd4bbf6d23a297a4229997647be2948349ffff001d27e2a100","010000006f21aea2cbc6f874b436f4757d590859340f8df506ebb8f5ac964ce0000000004dbf9dbe46178db2a87bea8110b41ae6dd8491990974b875737650c836d73a900e988349ffff001df837dc07","0100000044614b167beddb806e3b889b3b944c6ce66b62a1496be210af2e871c00000000b9dcbd581782465ae98ba6bef93f06e649300984a585ca639a9c6013cb21728ceb988349ffff001de7be5503","01000000f9b108e94b63ffb56d09b3b5ed4c575c5e0343bebc80dd56175021d200000000e097c2dd37edf3c84888460af505bf484ef9b40dc5b2a495bc47110e3abcb2d8ce998349ffff001d22a006cd","01000000377fc2983c98820d5288c7d7f4618bcda92c2f67d7ebb40a47fe857a0000000032d44260c894cf2ceccd43127d33bee9758047df84e6eb523643dfe1060511c7839d8349ffff001d1af7210a","01000000b71330d5d7393d2f7ffb4eefdbd718933127e1a657709c013fbad66d000000002f8dfbf40ff753b5873b2411a28821b6f5bdf8d2c2a6b9e5873db65e71047ecfa79f8349ffff001d1a5bd49f","0100000077089f0e6d7ed45ac70d18115c1c2cea26afe90c0a82b5bf3f88883c00000000c565443b35f19462ffab8333c3fa9bf3fde5ee65f320aabc05a0f0ab415452be13a28349ffff001d352cf3c5","0100000061045b61ba46d6bbda9d1add85622131057398dd8823b6f40f1445ce00000000469a4830fcafec227623d4d40c5e9ccfba64004802c24920d89e3ff0b5d9177d56a68349ffff001d1f124a08","010000004aba1edb63e962e3351ae45f26259ac9b7b0501b5d298b7f5ce2c741000000009d9448bf8d04b652b61793f048b22dd77657860f6dccfe0e63b34fb1a70740db5bac8349ffff001d2d8165c3","0100000071277c7f17f56a7e5cdd0422b3f0716a10fc0c918058d5b9b28a8bc800000000648b4f9be623bcddeda5658cf91bb073fc85e48d1e64a637f964bfa781097a73d2b08349ffff001d2f2357db","01000000b72ceea503d3393610a764b219df02061d383e6e39c4738b2d7a48b100000000a8d85a3699b6a4175091d3f85437afd193b1e46f1c7babdcf5239a067f1dd11bbbb38349ffff001d1e27b240","0100000016d625348ddaf3967bcdc5236310f45665c67cd725d1e64c85f116420000000017a1cf9ce6ef308f06969c44a3dcf064e9191e7898292518472107a6b2d5edac80b68349ffff001d3584c32b","01000000f49d9ce0ffd454575b6649d1470c75391046f967fb2edc75179c96c0000000000783fa54db0d8a139e3ed8ca190141fd163c8090211a2e84f60341694165d357c4b78349ffff001d2aab59fc","01000000ad9d691398d753ad03e09d3004a6a780512b940e3989749accc4771c000000009ade19b56196b19546492ea1b7a3323e37c11c09de416a8bfb2ce3eba6f3e3e8bdba8349ffff001d0903ea03","010000003523fe05fa184d4114718a63333d72a0a038d6baa2dbc06315c250f600000000481338f30e4c2c9462e8e227243481ba0c6d0434cb2d4350db0428686765871120bc8349ffff001d1884cb99","01000000abd6486ad2e49b7726f0f11b8a1aa8f9ce0aa5049c578f9ca0a190c500000000defc74a5be02b8f86ab8bf1be747ca85aadc15467baa4df49bb9de9e9c2d7ad6cdbc8349ffff001d84adc402","01000000e97bc3bf115ce47540f5c761f124deb667de28bcdff6f8dbdc7980ef0000000027a9439045a69415a103751042b510bcaab126e96929ecd02fefe32850acbcb970bf8349ffff001def62df0c","01000000e47fa6a265816af3a02f2dbf940650e926c9110edb8a0fa44080e0aa00000000f444768b361956db1cceace03d6b1ea7e1c92025ceb409cc7c9c6977b8540f0180c08349ffff001d08d44604","01000000fe8380d99e6bb9991e71c14ca9c50cc18ead588aaca97b9ee72c62dd000000006a49e4eb8a461b1c96d985c05b20c80e2970728ac18127406445a9ad35dcbd31abc58349ffff001d1781d6d1","01000000b5761dc54b48a6fbd44253999b3d81a16a929b3d4a0b1091e95eea6a000000000d2fc2dd2711042eb85cae594a79e726144e5a91e38c48dd2894cfa0a997cfd3c9c78349ffff001db2ff3508","0100000036c735f81d25d554407866078bccf2867cb97cd9ef61a36e6c65154b000000006f4e065144575b7f1d05914e63afd6db7f23ef6324b564c3cece73b977054d7231c98349ffff001d28728b2a","01000000258fe0f306f0b31db96ea448f8753a5744e7b9c45758bf26da27ab2200000000e3c344e7a20186d0ac71656d9514b27876d2f7c26cd5d0113fb8aa30ba29ffde6ace8349ffff001d33a8333c","010000005f7ad3696f50227d1243131b8867c3ffb3d0e2ebdffc808f642e7774000000006b5239c0d01613d3cb0e83dd312454a0a6880011f61bb2611f2d5ea706b867c09bd08349ffff001d35fbc337","01000000adc6fa0c729bb0bca0cc2907a2aea61987f5260673e4602afa2c9cf700000000b0b5710c086e6ddaa4cb8f9e0321ee193e5969f22f9bd84de250088f34a29c0ad0d38349ffff001d307f94af","010000003dbf744e978212014cff80c548fa60227e92536575d0bb2cb772040800000000ec625711552f53200e1edd0a66457631dd5aa131c7d18fbdbae1426d1364c2a878d88349ffff001d27adae35","01000000adc1e7320e059bd21d11730ab4b6b5beda822f89ab0cbd454f8fc7d0000000001ab3ba4d966c7036ff68f1f933931fae23c4c0cb9a037dcf87d168a50d2c6ea674db8349ffff001d14e3c5be","01000000e216016d938069b0dc1a53d70f2e31b9770a47ccbe1149b7a6d5f6ea00000000fa7955cd3f920f9f1f9465ab425a9a24bd0f264581df227ea1cd121646394dfce0e08349ffff001d1bb4cd6c","010000004cc730e880c2fcb105961a8525fd9bfa05f029c0fe5ffa813cb21949000000006634ed6c1c94bc8e7ef5c6303b068e7a3e4107794a7be94224371af003b0e063c6e28349ffff001d29680c49","010000006fe120026cf74b8f24ff5e0de0f6ac8a920de277afed4e0ed47c04510000000025d8db4c6207d80459e63658d0ec147a5719f788e13cd3947aa747d93fc189a191e48349ffff001d1fafdab4","01000000272c6490041377b2d8098cf3d670852fe33f99011e5c3f3e6357add20000000042cae240d90b7a73c768fb7cfa006ac3bca32bc51b7b7678bc38f61252bd6bf8e3e68349ffff001d59b8ec0a","0100000049cf1aade26166a4f5d72b4677996a945913acd10a2718d08a8961170000000059f35ba50bf2d9148d7e9b622bd0ce2fd32b76ac835f745287d83939a5fd074c80e98349ffff001d2ea06a2c","0100000006b08b82aa72da9f0d2059dda0eb8d46e152017462455990a9d09388000000004ff61f26d4425e456f8ba7b3127e525aa7815819d7819f96958049fe2bfabf870cef8349ffff001d1e192ec5","0100000005a4c6042af928e72827badd1ca0e1d51a8ce7de2c8fd285fb97630600000000c22d7e914ca2b9c062ac1375924bd6725ee82cfcbec39b71ac78a2a6451e858ca7f18349ffff001d319b8693","010000009712a26496c03cc0defa8a59aa6f05a9640d2b6e14f5da73666f1f950000000025376b06682fcb0bede7e66738e03ee3a27c51fcd10b56a2422a7a88ebbc334759f78349ffff001d22c28a0b","01000000042718ac802c78ab709219ec7122e4915ad6672b28e444395ac66e710000000048c6d9bbd1e5cec281357740c954056a15a7f805c38195199eea90d62044f71574f98349ffff001de5ff9b06","0100000087d91171cd72c8a1d22906475c1195fb6e1d88c505183a13193abd7500000000c7153bfdf61c25cffd7016bad40493bd1118b3fba5c330c2062a75ea16bdf4ad2ffb8349ffff001d19d271c8","0100000063f3545c65f679515481b3192627748bf9140bcf0b5d29e5bb83da740000000044e41ab42507a0714d56d08ccdbaeabb60c705dee1011b0c1484e22e20c47450a4fd8349ffff001d1a9477c1","01000000cd5c0cfc9faaebe4185d64e8751b5708225a0c201a467d2e253043ef000000008947e43852fef33f4e8d801330ebadc40f85384ebe2d0e0745a2495d74adb2eeb0008449ffff001d19a1f87c","0100000078591e3de72065cf1d6ad258fc2d56046d58006ee9c6778c0a01a88300000000b5909a25f0c342a2f9e961db29585956b836a6d9420b13d4fc5716a7ec9a074c28048449ffff001d161fdb54","01000000089a0176704bb007b509b8a80731e3e9e7dc369bd5dcdfa657ecf2120000000006f7d08dbc7db78887b5f65171c2ff52ab85084e93a749e2dfadcf6bf3664710a1068449ffff001d31fbad28","010000009d33402ef714770e76f93d0900081a9d1419fbfde3c080225a39250b00000000d27019007dcc061c306d293f1e004a2a959596afebe99ed790ec76665775f46e7a098449ffff001d0849f6aa","01000000e0888796b1f03ae585188fe94e2bece9f3879ef1926756dff3c1dbb90000000075f5fa12c667b5b95c1db46c34741b1afe34ca1540c84efcdf1e715d1c00e028c40d8449ffff001d2c5f3b11","01000000c557790170e362a4333efeb096ffcf33bc4fb85c006e3f3bd8376c2d00000000c34b948f4acb2559fe6d60847c869a3a322f516517ee89dc0147cdf629005b17860e8449ffff001d2a4fc2c8","01000000b37883c39efc7665cdf6a7df0a0d30e1e3597464b27ae77a7b8a6d8e000000005015225669d30080c22e36ca07fd6f8c5c163c19f0f1ca5317511bb032d54edb23108449ffff001d071f2a2e","010000007845277f4369640586314457e52bdac27fe344c7b56dacd38359de8f00000000b4fdd69c910fd97fe004a755d32cb1913cade19444181071803ff218dba23b4345148449ffff001d25adb8d0","01000000990ec43356476715d2300e8258bce2a39f88739d2f023ff368ccd07b00000000e654b04b662f3eef8c60776388bad9d48845179f9ac085dc3796b3522690d09362188449ffff001d20a02d0d","0100000078f988e9a3b0f5d5c570ac256fa3940d39ff7fd42c2a1014007aafaa0000000069cce2a70b210e2f58cd805b1cc21ed5353c9ae9101cffead356568ce7869374a81b8449ffff001d0504770f","01000000ad6fa6cb8281b08609f6ede11e7e9aa742a8f8c9d5856ea1e2bf6eaf000000007ac208f6bbe4ddf22ea5a7d05298b0a7f34ba346f8cf5678a0c53f7fd1002c2ed71d8449ffff001d1fe271b6","01000000aaa2e95cbf2c608ec17b10d81d873446a5b001bc7faa460669838f25000000000f21b92afb4e55720953df8e042fb4e947d82780a1b15cc762212d7cf5680b23b41f8449ffff001d193f5d8b","010000002f79b5f116b380576c7a530b6612becedad67dab05f61c444532e2870000000093ba16800d137a0236edb7a572c88a3bfa54e3ff1456347ff99a06d77b39a62a81228449ffff001d1e28a504","010000003e26f6b5249cdd6e6b74c6a7bcf163603cae63246c11eb8a8387520400000000ce12cdd41107b874267b388272776641bd5e99c76b289fc11906ab2b0b44c49bb7238449ffff001d24a823ae","010000006afb4ec870b1ed1a18d090718b75f0f1da6f3fb423fb02eb760e51480000000063320eb27e9d9096565d03bb1dc18623436e1c7c32d54b29afe112f487b2567bc4248449ffff001daebf2005","01000000cd6f18c501894d997e42e08e2eedc384a34745c10247d507b729fdd900000000bda4c6c0ea3a896b8634b9ab6056aeb52643baa7487c80b732caf1382e08a2d3b8268449ffff001d2c23db23","010000000582f723f71bccd1835a98b71f38480c63887d90af11a2d7902ec2c9000000009887f98d62776b8b6bc769204c93cb30164a23aa536663cbd287b9295422b4536c2b8449ffff001d1b893b74","010000000bc3b701815d9f99048d3ed1dcf380804a30f623d07748b9eb70438e000000003d6163ff613714272c597d1bba3a39dafa144de917edf7b65e0ec3507c1488828e2d8449ffff001d294b48d9","01000000544eb317b14b68e33a471be07330be3dba3366ab3d4e6da6f25d0967000000000ea8158eeb0d2690217fb1ba827c55ce6e18957cd02a7dc8f9ff324e04ed640177308449ffff001d1c64cfbb","010000001c258403b2c8fa77d1f223261eb0e222c92e1d67cece74bd9035aa300000000032cd0a6638bb4371209a2ebda17b50967f82a3a6f7d06c0f07125765fee33012e3328449ffff001d0bd56006","010000003aedd1da748999e160af02f85190e1abba1b94852af45dea4945b923000000008c69f854fe114b845c84ddd22e062ea2216eba63ba6ae8847b09a065cad758fc58358449ffff001d3433e022","010000008d231e9dec925c5752a3561b99001bf10278a4b51fd80e260c3a87180000000040add94c650ca52af31645f0f0eda1b5c9abb8ff4c1b0f7e12c074eda6ef783781378449ffff001da7189904","010000000dff25cd8bfc32238d13904f6faf8ae10aa6a4c52e21d11712e2ad5f000000009558207e4eccc551a7c510a08f9a8890ba3bbe458b3af9d6845e2723727024aa94378449ffff001d240d6982","010000004b6374ffac298c06b5dfd1cfe35d263da6a5e3654100517a80329fcf00000000a0c209fc2c26304719b974e62ced8833f127a6372e5295d92a31ac9e1adee9e387388449ffff001d49a92604","010000006f78661d0540427f3e5b3f73a1b7caf11532eb6540c1a1e6faea41dd00000000b631b4b7eeaf34b33657f6df410181baa9dc671548d1936df353d68370c821a4213b8449ffff001d05d5c850","01000000a65fa5cf0180da40e57e570e7ba7cb5dfe50e6db5fddaec6855f25d9000000008a22c9ad7cab78d6e4c509bc5753778c290a0f24c3258d8c9ba455cbf1440ee6fe3b8449ffff001d391f7103","0100000012e1af62da001fb9b85ca9326b5d02460517bfa63d47e2509025e6620000000049c8339ac7b9404aeb2c1e760d1aa98da5136e35ba2105aed678fe77ad3b6c09973f8449ffff001d095e3925","0100000069382410a69cd62f9e07a51c19898176ede9da1a1c7d193a4cdc825d00000000de3b610cfd7c92442a41c9ee996debf0878d510edd0d735ed05af3ba368eb8a061438449ffff001d298d7cf3","010000001a384c2f914fed5f744b74d6a174c43cfc7c146382cb1c520e91b6a20000000027973b5befad506bb9363efded8019c71cdaf4ac9ca5956ff5e420f99f3e72308d438449ffff001da6796100","01000000964c3b3df98dfffc7c3e2edd56c032d6c93bcb0239e38ffe4f10e13200000000d45b2f8d88197517d2b7ddef7fb1775da146c0defea13b4c7f1639a4d4c2ee3e70458449ffff001d195ee3d6","0100000065fb1ba632baae2d0991f1a129e17ff399de2824982729fc698f1c6000000000446e7a46bcdfde92cb8d83d0bef0c4fb7572ac09ad1a96ddb7b4be9ce219e8bf79488449ffff001d32292e9b","010000008743a2ff4156a1fa176607509a3554c06784d6ff29ac43ba45e2b61b00000000779a402a5fc61569f5f2dfd3a840eff912eacba6427da962d57f60dc41d541121f4b8449ffff001d2b20d0e1","01000000bad904d2068763d1c6e244aa0d0d0b0421eb946baeb553dd014426780000000015ff00e2eca474c6dabe9040b92de1fd366d0387f826fbdf26dab6054e6e9b2aa24c8449ffff001d95fcd205","01000000484ba3e08583502936cebd9d96c076f8d784726a9cff486e7261728700000000fa2c52bbf1e40718101f0b17711c1570abd59446f92946f349056549729696d68e4d8449ffff001d1cef4928","010000009fedb87b9b8084939978578e7cd4d2cc52cf5710e44d171df5025790000000000cfdec59277aa92846f1f6dbd8c1c79fe1f5da0bf3563f72291d3b185a313fd96d518449ffff001d18bdf7b8","0100000048ff0f1eadd35850845887a9998db4474961b3beab9c361bd68b3b160000000080b95ab4c8165e0aa14f683cbd7a833d168d21ba11e11f98c3534e0a1b12586a7f548449ffff001d2845563d","01000000f636dccafd7e5adaf02847ac94a218d94bede7676240a8040eef7173000000008043930308e198d4e1f1f3d368604f654883456020a948864030b28fef84d5d98c578449ffff001d38317dd9","0100000054f17c7d161016a77eaa23753b0c73ed2427e51966c6472c27077bb40000000068555a06d9523a31e30699bfd1ec735e979b656ae946bad128562db96b03719a9b588449ffff001d87317005","010000007a55706c0e418cafca3c9d8f2c314f474dfc62238b865ddc314a4a5d00000000ded903e4b7b62279c1efc956b50fbd8c75f9e08433007c1474dc4e52050c02386c5c8449ffff001d2b6144d6","01000000bd0025a2b43105bc029ba7417698e985ace25bd6c89939f3591a68230000000090f811c8ab2956c838e0b799efb0d6c5cb05449da3f50aca5ed99df3ddbe265be85c8449ffff001d4b36e300","0100000032c1cf0bdb88a609f00788a862dff7fa0c0c7d92f096ca33db161947000000005878dbd7c094f33ae4b7b461a8cb1ce6d9e3715fa63733ba0711d43553e0d34cb9618449ffff001d088e00de","01000000d028436636d09de04bb19870f0ec6406ca11b5ff70743e4b55d8018800000000ad3b88f31f5848e045dea41aa1a31fbff8d007329a443882126ff27fa8e1830938638449ffff001d078472d8","01000000e52bb375fbf840eb8b863aa202c223a08916e6b4674632397b0c1e350000000096782bacb8a02c31c329ccb6f279aeb953466b8648509ae2d67614506dc2baf37d658449ffff001d38fcf783","01000000c163d510eb6deed40b352812c5688f72becd887db9e2a98f56e00b5000000000b7910803e04d25e561c708f9e545d0ab79874f5c633f0f64c260d5a4a701a393fa668449ffff001dc276d602","01000000e740a4234840504d03dfae30ee624aba1897738958e6c90bf98dee5d0000000012e7a9663bb5ebe0f0fde81891a288da70d57afb57ec992f183fe7349f6fbbb734698449ffff001d2f9faea5","01000000c9a30be56482cff489daad4c5593a59a1a3fd30d5328445584a86fbd00000000ac0ca46f757304d99cb7135edf320ed8305f1a868c24fe3d5ce6c299b8a7a2548e6a8449ffff001d4a8ea002","010000001f91d3b00d402a242d97383696fe13f21341097f5f0f60f7904b04a0000000008452bbeadcc11bdc9687247e766fe409a14fe45043b50cb40354058f07490c80ef6c8449ffff001d09d86002","01000000a251744e70e9f79f2ea29d1e6c495468cffce1a51ad190d2a06f2735000000007b0658b680e83a64a8a27247868e401db95499cbf43d866ef4160f5edd9679dca86e8449ffff001d0157b1f2","01000000d7d7412c4861cf2f79fcdd202ff0e9e9fc2100c79b32d9920a68482600000000e5c1a7cfd5026d751420179c767a09eb3988271a9221a3f921ef543b474a12f69b738449ffff001d37e681cf","010000009202370a6d3fcee04b395f4486be231eec07c7a88999e87d97a4333d00000000b4200b67457aa12659d7707106b7a6920539c34df8de2f90fd512eded23d2acf0c758449ffff001de8234506","01000000e803710a3a7d703a142035a3b8b355e8c1e5b0547c7f43f74eb3ff3c0000000091a2eb9dc4b051dd2eabd75993974d8abed47ad261a1aabd9f0d3abc937d115041758449ffff001d1ce10302","0100000082464920fa675afc0e3609ec6638fc0701cfb92ad1e418c9ffb16b2f0000000087e74fa7196cc69b888b225f6e42380633538b4b4f5c1870229e904c58c17dd3c9788449ffff001d36165cea","01000000e9e5bd4ae4fe2de7df969f1d36be6a1d9a1c7a636227f69082a46e9700000000197beb520b8c360f796944b2d2c6ac7fbc8b9b642dd0dce6592cfe39a84bb689a57a8449ffff001d2b11cb70","01000000d1e3237bda67ea8f22d3b82d28f425fe7a5bbc5f1814992fc87cfbbf000000003e41c8a1ea5681ffa83241923579e54c61a611b7fabc1acdf608df4e6bfa4cceb67c8449ffff001d22e48058","0100000051f257d3047518ab455fcd65563c949e7d1f3b2669af07fd9d7fe6700000000070b1913f18c059e1a17d7bbd55f42e5724a32317ae29f13591816e2b358795b8de7e8449ffff001d25ee2d81","01000000035cb975ea5c71612efc048211c5567308aa24d94de57df2a9ac880d000000009730442e048ae170dc0d726252fbfa70f2a5e9361454d8a1883b88c69a07f15c55828449ffff001dd074d40d","0100000002a6cf8cfc95f36723864263abdbf8f298f6ed218c5f7c70b45f4f230000000034b84e5057fcfcdec32a93ceaa869bcb95f5e58e9eb3e63a4f3b65b8d2e473638c838449ffff001d003a44be","01000000ff34e3060b87c88984de12878bde550112ae4bff4e93dd3ce22cdc36000000000330eb8110843b290eeff9b3b59419eae7ca16ec93eac402fb02bac5a15bbac0b1838449ffff001db4205000","01000000166b116776ce47761955d195d48448a463edb216d991169f552447d800000000c7069f05f1095c3cb32063a7ffb0fe092868c6dae3ae1f62d6100d056b4ea16934858449ffff001dc2547107","01000000c5987a2ec58891152d22d7cf9bde239b2385e7c29f84948904021af10000000030c3c5a106a5d28429a11801df9f2aabace8ab1e9dffb8c55c095fd9296c880c49858449ffff001d1cee1700","01000000fb83103c511c8659d978e70022b95d39e3c1ab7bec796ffd1d243ebb000000001e8a4e96d68ae5b57efd5cdce4a67570fac84cc8dc47bfc2d75e6966ebf14dc897868449ffff001d03887a57","01000000de26dd9d42c156bcc346b15e5c7ac42e5220ab1d22a68681dfb4275000000000700d69eef76e4793cf93a567a5bae7d0f28e31405f58d4a14d278f8dd195855bdf888449ffff001dcdfa6d0a","0100000002e0b1f7aed5e5b3c185396c5c5f2049e87572b08af456aaf04b399b00000000213b8be2d6841ee360d36b92a23bd7e63c227a9f4c9bf3cbd8c7cce7882b57900d898449ffff001d286910f5","010000007c4c0e4541cc02d6c38a28bb004c18cb2c8d616c1c61ffa63d0c86ab000000002776183410f913a41bb5c4487d6ebab54e614fd45e26da5249f5dc54485db4ca398b8449ffff001dd8723805","01000000149dd1485e47ed1c2fca8feb7124a634cad5ca3d5df027a9c8374c2600000000cb7797cedf44072158834ba3c83b6ed17ef38a7760f117e72246f1a801c1195f9c8d8449ffff001d386a7a2a","01000000a33c87679f71c5502f70828588fee6ed43aee942257c42a1f05bbcff000000004d128cc757d68b2ef86ab1db5b87af82f21b9c156e98c0e4222c8c9f0eb7b58d388f8449ffff001d23c38160","01000000c5d20fa5dbdf4b287ad8445d9e82ecf4a6877f6f4253dc020e13d4a800000000ea2c626ba8b85e6ec129bc5edec1533d24d7b20a51524382468f9787eb9ecd1923908449ffff001d879e9a00","0100000048dad21a2f14f98d7bd4ccd0f0967a46b6711f8a8b31e8ea4f41688300000000f1453f2e5995b405eb21752c3371489c0ab8f8d9d823146b936b47a0f9820e52a3948449ffff001d29e6b009","01000000518f7521270ee7efc5b2631386cb255204f833d14c6180ee7a8894b200000000e3fbb75d40522e94969b93350cadd0ccec874ccdc3ebfe8d9ec6c9ae8933ce3f1e998449ffff001d2defb840","01000000d7d779a518a580d53af4eabb67cbeb8a15588ceb0060ff813fa7071e00000000906ad2a0f33b5db126656d8834e243f3ea8f438209f2217e3f27d55b875d9787709a8449ffff001d51dfa303","010000003b525f0f30a0b14e5d6a15fe466515be1a8c6096ef1737eb328b214500000000cd8868a83d80d5d8886bfe8b575ae4ab01d930f52db8f083aa2fa71b9f6cd17d679a8449ffff001d71711200","01000000d948e07423c0cc2e2dd5ed87547f81b95649c8669e6c3aa71ba6307000000000990d6e885631e4d80680e920c4704a7ecbceb1638b3518cda5e50dfb5a8daaa8dc9c8449ffff001df444e007","01000000b6a8ce70d4d8b749ef47ba7b0a6811b5c7efca49a7bd0c51cf41b92c000000008d777087eea95fffe6a08796924f739c21df07072eb64f3f37fb09d4116f170b4f9d8449ffff001d28f7ae9c","0100000062693bde87133d4c210542c51265d79e5a7bee36c5fb0588ffd61e2100000000970199db7667ac56c860a32f76a3bce3f53a5513fed3fff3e14671d44ebddce1149f8449ffff001d01db158e","0100000088b3fab2920ace5645da71c184d0f21535322250f07c1c425f51e3b900000000639d14f44c845bd94cc19d3c1e8af4add8578ff04ee0b5523254e209f7922b3e869f8449ffff001dfa070901","01000000d9e04aa72b389adf0534956bd3aabeeb29b1682d2e439c3ea25a051b00000000e53c595e37d4927e12456268a15ef027f36b11b9d61f8e6232909f400cbea88cb0a18449ffff001d6bbda901","010000006ab6b0d52cbf1e1e063eb30047e51e009cfab958e08724c8e6b1c906000000009614ba29879bc27acd2de65d8df2ff51fb4863f25d5fc5ef3cfd5cae55d6f4b333a48449ffff001d139421a2","0100000060143def94939145918672428fd93596e59bfaa3587832c485f41f5500000000aaf277406968c24e22f05c5733c48f402b727900a78b14c068659d61077241939ca88449ffff001d20e19551","01000000b2933cd8d3ac275f6875664be0c42b99e2a0fce8287674236749c26f00000000fb465f631f2b67265b9a48273b9d1ac879d335da5b1589282575a9873e70358ea5aa8449ffff001d34260ff4","01000000d4d9f0696efe31dbdab6d73152e87d3dfbf05e4e2c90b304cc98a37e00000000667d6a6e03e1c367d9e9d33c67329566b45a41f4d0cb74a58726c982427f3eabdead8449ffff001d03508040","010000002325b1a68503f34a752d8b98ef47ae29427666389c206d2ec67ae2800000000002e54783d01f0605b714fb341a6899b41ea5b47afc84a69cfa7cebc30d676e3b6ab08449ffff001d34064269","01000000858aad4813b82a249334b7d3b98f40bfc01b6c10ec0ee0fca92e02f100000000823445de7b6621511f252fbcdfc1b242abd174dbde0db11fb1562f0c9ab191d405b28449ffff001d22003dd4","0100000050b129c1bd368c007f004e55327a69f5be20b60f75ef294cff271a0e00000000bec208b52e8fa1c8130da4b7ebecb7f84219de58de04bd0c600c2d0bd57e1a3eb2b58449ffff001d29101311","01000000b0cfcda2c225e6b637b513fd26f870bab275318aa16aecde75f1201500000000b241d50c638eb26e5df377b6fb5c7bc91f5704d2778af35b278034b30cea9600f5b68449ffff001d06db6178","01000000ad3e085eeed89751ca185a6d0ba8caf70f9c90e9b71502114624299b00000000084ab098b6bcaa91ebb10aa25fd36e042cb77524bf9578149b26592a45919ad99ab98449ffff001d045abf77","0100000029f697a251a3015e62aa9aa1251c7c02373fed7d22eea7d0a70cef160000000060342a3e686b8ad7f967bdacb145af62a00f8c388fe3f14020893e60e7dc205b99bb8449ffff001d24c8e08e","0100000032e6538fe6a6ef305f05c47791d3030505060af802e133193e6cfed50000000053c29358035e7237ead5a8bf14e3d12c7c2ac1f84d04f7942eb619688c187f4e82be8449ffff001d1956ca23","010000009337d298f5d90da929ac92d9b728b277620af49c61060e6a67b43c1a00000000ed05bacbc4140e9852efd6e778695be85a93055cc482452847aa97ac7d419c1098c18449ffff001d04658ac1","01000000f32e64f455794a36064e8cdf657d81c1f9956486a6bddafe25b677d100000000dbaef171125dc3c63e8163225f0263c0aa2e1bb9aec8b8d08ed8144d393e500f13c58449ffff001d05286ea8","01000000a3a1c46ef3cb6487cd2403cca07b67ad7608cd7d8cfdecea0728942d00000000b32b2e84c8cc0c8e29a02b4783ba3d9d58693732173ab8ee5243920d46c5edf77dc78449ffff001d28179f5a","01000000c4c43432a63a9d3e6ffa738ac21ce12621417810c6129ad0723932c300000000a5246817edd868cb81c65e60c0760ab6996f7c9d0b9ec540e6a93084fcbed45816cd8449ffff001d1b4ccb23","01000000fa8fae725ef683801df3180490e523e9aea65aec0611825f3b2f094d00000000322c6fd3c092b337a95a54db681b3fcc173f213e118c60404dbec48b0429bb5aadce8449ffff001d36947b84","01000000a6b41d233773ac21866cd33aca9eccdd8f394d0b8ac5442009c621f00000000009e4bc9fe42b2f3eb46f1e073655a2c0d66270a07d40cdbd62cf32ca2a6c0cc3b8d28449ffff001d2a0d541b","0100000045e16f4260865811707b4a46ded3d2643e00bfd4102ac1a982e00cbb00000000cf3d29d1af63475c4a32a4b05920bdd12cabe3d206db6c1cb7149b1ad295e494ead48449ffff001d7666c405","010000000e196011ca6a9a4cc80d8af998dd0c7aebaf200374b733eec96a9dba00000000c2143821a9017771c541a3bf817fdf1f8083c6b1d62d85bf05e240ff1a392f2c30d58449ffff001d03c2a59c","01000000ccf44311494fea3c9163e1b3b7bcf8061a0e91b457ae6a8208e1805100000000e79cb2e69def3f45d2e66965293fa4bce605d192fd35ac7a631ee2f2cd9274a045d78449ffff001d2a526f6c","01000000b853b56c42def74a2d544735cec8f915d6abc26744d6f087331f524400000000ed69f06f664ee4e01b6534f9b6648426158988ce6af5e1f3b8029c7b47dd5f32e4dc8449ffff001d1b401f76","01000000115b30d93d3e3b7678091e4b4ca865eca8ab92b20769933e461bfa8e000000000bcc0dc57bd70bc349a6094f33fa343b184a29d79da19ef1d1443105a281301e93df8449ffff001db76bf20c","01000000b35d8420f76a5518eaf3285f6f195e96973aeb19488667b8e81d69e3000000006ac754d5420c5536989c62513143bb5b9a412312f5c38f55b7d4a3f1422a4606ece18449ffff001d57a14902","01000000697c1b685fb57329a5d04d230971a0efecfda33e539798ee6617539900000000d1f1f24752515e5c934715fe8de8647a4629f655075b51932191c2fe2540c49fa4e28449ffff001d03271114","01000000723df9f0f4a40391406fb798f235f717135e89330a892f0e6fd241ac00000000583415787140d7a6b279f098869af30d94af7a285b6933bb4bac90f1fef9d71ee7e58449ffff001d2438c285","010000006d68fb6380d2dcbda868ba1c7443de7854b4013b3a1e95ab105c47fc00000000904e2ac45dc3b613c9a17048c27bd17a0d413c2634bf11f4e5272d9424417cfa08e88449ffff001d33f55b9d","01000000ce83aaf8bafb0d0948992ee1030520f77511b141d23a2a32743663a300000000cde1b1afafa7ed83801973d6df316f7e2accfb5565cf57c0f44bf31c85892566afec8449ffff001d141c5b27","01000000393bc3700236c5a89e5b063270c1450323f81b9e591d2a157912ba5c00000000bbf7119931b0304823db150d84a1f99d28209a0e2d6b8946f584349fef1cb3f250f18449ffff001d32024880","010000000fb22e49434e3c2daf18ea1b9645fd44c7f82ecb20e155173a50289b00000000cf39798d2457941dde361dddda1e83a77fff5c96f91733c75ea9f11ae2fa399d16f58449ffff001d35ecec1b","0100000074b283d80d62f4fe8c5b1905afeb297df0b3aa20e601d1a0e9f5f29800000000d64fa31c2cfbd836f2bb6190c751eefb73104c543d33d982d1b41005c663123b28fb8449ffff001d17dab05a","0100000040fa775fc10b5a9b6d0a4436fa7c61f95bf44ebc00ef1e51781010d20000000070f77aed85c49d1ec490065637238dd561a0ed3b1df8aa5098175a86dbc7073e8eff8449ffff001d3147ad6f","010000002979fd4916b96f2342e9ebc1265d00b69942f9612a1aa89ea297435900000000f5e61520f6de8b05aaae6f831a96d3ea461f269480ebac4ce53600bdc111be4916038549ffff001d2e763b6d","010000004955dd0cee4cfcdb3eb3e05e164a94f57ea8066e15aa8ca5c52a687f00000000dccdbbe9350aff0c006b3f98f1843f6cc34563f16ac5edbbe3710acef7f8280e73068549ffff001d28af49f2","01000000ae778e3321fad3342f967c9f9fd08eff0dca808f6775f359d75eb285000000002bd858ac5ea443054305f261d8169ff3bfd731277aa58081335bd43564f7a3621d0c8549ffff001d1e4c57ab","010000005efc6616ae34bb7463118082faa23072282974e6bffbfbb08204ce6c00000000f3d1db6b206ede6daf424b42d5dde24cd3112ae28b17cc7a4c6198acb3498eaa77118549ffff001d3a4db112","01000000d216be3921b3718cb6ce9b0983924768e1c6834b97d0de03bac4d1ec000000003154f4e8913d51469993a7f4ba2b056cf3f2597aff1f1e63a068e1585a57d10df9138549ffff001d2848e433","01000000403a9fc2f536145770d895915af98cc3b156ac550646fcfdeb229893000000002d6d3d9ce46d97fbde2c4828972d3ee31d09589ce7d2ea47345f13cbed30634a56158549ffff001d02066078","010000008e3a0bc5fa361c181561b0b122a3d135752e352a8063d4c552e9eeab000000001518fd321f7026b2b29c4eabb402ba58e4d6ee51b861271747778174485de4d284158549ffff001dae048100","01000000a82f6a8c1ff601a83f23e6af02b9aef3dd42d4825247a8132e167be2000000009e1cc54d0170c6ae2bb9510a8c137093632149b5be8d36de15d44067f369ec9493188549ffff001dcfaa120f","010000007c9cd3c41f24719713f2868d1da0e21a05c0f507c7aea761d2d3816900000000fdbc70d1ae13f89f635a79c92ad478c2c68d6956e73ad8b1843ae7ce454160de491a8549ffff001d3300c2da","01000000590957fa6650771e23aa7f3067a53726ec91def38352dd6d18fcc5e5000000005ecd3ddfaf2a32158bd649a70e02824801278307eae3568142e37cc6525e90ba1f1d8549ffff001d04dacc90","01000000dd247534a73bc4caf361a1624750dcc84d4c640146d093d2253bba37000000008ac199059936e21786414c9cbc03af8bca2f222db0ebcc6f7001b958afbe7d6d82208549ffff001d2f37eecf","01000000ddb4871ccd752d6c73ab028f11d61690b9814a0fc785d36eb72e191500000000e916581fbe0a23711e68738c5bfc5acbc9ba4875643325ae2bfcac72f02ed8361b258549ffff001d0265832e","01000000ffb354d88385c5e2355b0850c9adce6f1fe2e9986ab6124cef07f83b00000000aeac0e4ca4e3beedcb485bc6d056c6d05f4c515dadee1eb740b025e090cb79a42c298549ffff001d2684d029","01000000316d11af051f94098d6c1a4f881fae58405f3b7faedd423ec726177c00000000cee072e0ac837cdcbf7037b8e3a6ba1b61bf3772e4a78a48707758039361a8bc062c8549ffff001d01a15905","010000002f29ed663bc19bd8e1718601267c9e33ea5ff6376ae226cafccdfb2000000000bcb9ef627fd0bc7eff21079162b5c25f20d2bd6e5d1d9f0f22f897b98918cbf686308549ffff001d29310a27","010000003140710b9b4ff32a2853effb5d685e1d1aafd0c41a6ff606ad8ddd16000000003ce540db51ab348c2b2b48fd889ce7ac69c9af171afc61e27d8338c2412b9e89a8308549ffff001d6d681800","010000005e99727fda94a9cddaaa0c66ecf4e0d479635e560daa419bcc852cb800000000525a37cf91185b70fc29028ab2535a6799c003259b2b26c85fbcb946b238aa02ac358549ffff001d377117ee","010000003370cbff68f682d18ee70f276e2c09c1e84d1d3ace8016e8028969e0000000001ac15caa8bb7f038cf40a60409467ec743677ec17e65383da98424280ff1599652388549ffff001d3518f94f","0100000032e8ed0e4c524e75f0ec6c5545da1fd6a1bf61a29fb055d3a9562d7a00000000f6caaa7e26abda5d4accdbf448340375ae6f496a241598b81c4ea81950f1a1d923398549ffff001d61bf1802","01000000c16b8c4448dad47e2faaa0143432077b4bbba0636d735dad3bac46c60000000065d3368b640e75caacabecfef2d8fa84a4ade0b9280c03ae4628540c42fdb131113e8549ffff001d313afc7b","01000000dd14beea6ccb9fcb934885ad56c09ee5c13686b38b7819c6425db0ff000000000852edbdb21769c69f4113c0bf8fd9d0d6b8ddfdd3fd03b39aca63130a945f114b428549ffff001dd2caa202","01000000e1d7aeac1feb216bb0c23864a3bef55890574b036f32bb8d2c7addf100000000ee35e36822eb6d1b8bdac1f309437077dc2a5f68fed01a9d2885924fb193280aff438549ffff001d080e30c0","01000000aaa3b170d183716100d62b79e7582563ba54c6af2c575d3c2a5bd7aa00000000317241c518c904e5f37273e39731be9a5f7073d299e75ef6797898db158a621b3f468549ffff001d0895837e","01000000b86113e882706d5ee40fd50f3e03b3051080e487f7932e7ebe7c754600000000f3fd4b38257061f2624527b17bffaa210b105edfcb4010c11df2b9491f98edfce4498549ffff001d230ee7d8","010000001c727f5c7847056a84e0fd5434524a0d8a23f6fe791c8235a611431e00000000bafb192d2a66e59d7448ff5347758967dd89f6c7938fd5aae1866f7c54784532ef4e8549ffff001d33ee1c02","0100000024768edbc5d69e6ec0548c4484a4204a03889701bb4f842bad4498bd000000001f66a9d499bd807e2da53f14b9fbdc36e14bf96852a2f3e696967317447081e518518549ffff001d54486e0a","0100000025adc8720d632f24a598e4e504729f8116bdc3f8a37088ead8c7438c00000000b0a6ccaf7823566ffb8c9955bf8140c67c242f2e176023efc915e73b63cf08e453528549ffff001d813ea105","01000000912d848e01bba5e0f5059a6e4937ab03a0b97a8fc25aacbd72b96af1000000005a37aae6c42979c5b35a4003c60764819d65786b6975423e3f28662e7afb0aefc7538549ffff001d09145807","010000003812f9a448dd8158c79565ac2231b89effa6d00a72ef7fada4c5a25900000000804d4d1056416a75b1cee05ac9af96f71816928715b9553e36371837e8c26e9dd7598549ffff001d35d6402a","010000009ec61f6ec9019a3abf7b01b36c4e58fcd5fb33dbdb843db52eca5c9a00000000d6c704181bff118c31142f6ad96b5989a886cedcbf7e4d94c7a38e1dc88f4045c45e8549ffff001d331a8723","010000008b93b696497333932a72a488ce6f8505be21243036c962e5fb04a996000000009a0ea8130435b9b176c1e6a1aeaf602b211036539558e611efdce82a6b59d7c3d0608549ffff001d0123db6b","0100000080485cd59b1490f5dfcd23cd3a40d68b46f0583d19fbc8f9cce4e5280000000065b9a6c6f5fee030fc0fe65bc37280984623be456c211ac891b0028a31d5ed41d4638549ffff001df540800e","01000000c1dda4c46eed062f3efb5f7f58741bedfa9ebc45c0ad9b10fbee8e2700000000996d8692d5906bc99e002e45d92e8b10363ef4e554717a01346acf39b185aa7282668549ffff001d18c5c0bb","0100000098233963622ee89fc347f74ee1539eb05f89880998f7936770843fb000000000cc588fc6e334ef2c3f7682a39f98915a03dfe38e13bd067dca39928c8fe64560606b8549ffff001d2edbb705","010000005133f84dccbcc0fd4cead9e482ad555715135498a2ed73120a1af3fe0000000011dbab3744dd50982e83834333b68fc4564b0102641236082c236e48c30ef258ae6e8549ffff001d262a1dff","01000000e2d68f901b38536e95c85ab0f2cf878d622777113f73d40c950c76cf000000008aa43c088249d2676e7c48697d77130e83ed61f8d1b09ae212ad6f6c9b11bfd9f2728549ffff001d2d0667c6","010000000fe8df6c645ea65fc1f196ea20a09d8c6009b3607970a0c2bbb11d74000000004d4eb0e9b2474a79089e27d9975010299a3243e7d92dff9ff31ce974aa5c6f2591778549ffff001d04a876fc","01000000357ba62117541d8ea9df161f3830a425a7fa5336425e0545193a2d5d00000000fcc65d611596bd6965031aa9e2621397955c4217f9e3674159cb43be756acdf71e7a8549ffff001d06739ed0","01000000c3bdc8da883ae4d0764c97e4a331a555e26151c36393ddaca1a5cbbd00000000c65e81102c5d5dd10d3a21a3cc1e345a84e5802bfd6cdc366789b586be143be5477c8549ffff001d0752831e","010000002140a78b5107e204d119d87d1a334777372afd3fba1fe39a81a96b82000000000285d042954f31cafd7d6157fb092427d9e572bae214f722cb231b7a13294e74a1828549ffff001d054604e8","01000000478c0f05b54e68f11599bc0dcb6b0c0f92bd1bc972a6d07a75feff9b0000000073ec3e8532c92fd948a7dbc38e02c133f3460a9b5ef881396ff658d95853e00260888549ffff001d279fdfde","0100000058549389b4f56a598760ee565aad143a5e73b8c727533fc9ce3a2b42000000007ad637ea18085b4c38bd5daeefefccc00c4582b9ddb17ae351426f62ff8caa0ce98a8549ffff001d74151805","01000000341953abbca1721616313547d159a1c5ee42c68b1b06cdc6e44240d4000000009eab25d399d10cf98d242617aff40fa941b3268a44c64449f8a8c5680a0e02f4668c8549ffff001d3a752507","010000005a2c3647be4ae3ccb0701443af90403fff2c0e73617b9d1bccdeea40000000002c8f1b6067a9c7c3b95baad1cc757afa87edaede22fcd87ed452c979f917433bad8d8549ffff001d02da87d6","0100000087d754d08c3fcec93ed13843bf0c73bc3ee63dd7aa79dc2d0eaeb165000000002ada9785d68425bbdcefea4a819d5e5c0188f81349e242b0e2949f0ed8cd6f3419938549ffff001d399746af","01000000b7ec59ccecc9f7716977bc060d2936b0b4bb841e0c14d81bbef1b05a000000002561738f778245a450b787f7971e7f31cff2e0c1ef449c3681dd74ae5814182685988549ffff001d1a6ef381","01000000d378567cc533e3a5068e12f1f6771220709cbd1af1257892ff1c3e1300000000b66adfc63202e4c68d4650adc79e1a245bb3f3dcaa7550fe41398417f0a0b814929d8549ffff001d093d7d74","01000000547198b7bf960379d2c4ee2883c72b907fb7bb1ff93fe3a8fb4662d6000000003bfa788024a1b432c24bc97aa101625d216bd503a2e3ed954159a01730508e870a9e8549ffff001d4060dd01","0100000042d8fdb6d65c2b2c76fc6479999c775692f038a2d2f1ffa27db468fa0000000040b00a493ae2885a7b24d48397a283809fb6d466db9579b6ec974af68a0665e16da38549ffff001d37f3b969","010000004bffca7c4f591c1a517356cccef4bf4b7c82998781ad5f1cbd6888220000000046a92fa0033c7e58acc2d89f138847f1f75b4ac500285d6ae35a950faa73d39f3aa58549ffff001d190d8404","0100000033a4d6be8b9a7ee671fa4a9e089ba34ea126315a2f8153f67bd56cd900000000c375357ccc266b8da00fcb08f903be94423fd09d070ded23c4ec0b12d606040762a68549ffff001d09f91703","010000001029a356cebb62ec4deb733687dad4908f0f4cf25010bb318548a791000000005266cc4ded5070310408b850c02aaa90c2ef530fe212a5dcbc69280841ed69c3c4a88549ffff001d327868c6","010000004196c96fb37bef4c817f9ae85393ba660553e4ba51e8a9e083eef21e00000000d11e8f9cc6a57b3e8e5e84cb0277b9900ecb090f3396c1bd12956111846b34f244a98549ffff001d8aaf5c02","01000000babdbec9141c60edc5de430de5cb9333d1bc02e9e30b9838737db81e00000000e36002ec02e58566ae3c7099201d64a6276523d149ca98dd38381d2b0d42bdc49eab8549ffff001d20658630","01000000767ac955319a05e28c8a975dc16a1a9c0c281b8986b97b66c201175e00000000ad864907b1aec4fb7edc23426cb317220ed3b2e522bc15fd455caead359c8d60b8ad8549ffff001d2c1a5c00","01000000322bf9c82a87a695364801c72702399d252aa55dd24d35f5a940917500000000ea231e1526c3f29e6263cc2f6efbf50e62a11463ad4a68e558d03220e318484a55b18549ffff001d1461169e","010000003dc4c12a4c7621fbd7239a8ee42858128acf702dcec212e61035326e00000000cb7c5ae0b98f6a319280893f808906ab91c53235a7a6e2077ac69b2e692a0c5bdbb38549ffff001d2f401343","01000000b72c4d3c194601a3f9cb120b9e002599f899a61610b2a3093a02df09000000009d6ccaef1602c2c85a793dbb5704c23d405d0c71e2a30b98ca7f8b450f70c61e59b58549ffff001d0897ca06","01000000425adfcc3865c4f210f95062479b9da23447e91b6e7c0f4e75a1f96b00000000a801d9c533b5a97b66dd21dd1291a27193a0d0e6fd3d744a9dc7c7b3703f2e0590b58549ffff001dda5d3601","010000007d76deb48d0749d035fdbf56d6f4e10c93f8859e0281fb101c080463000000009ef458b64174d145b8bb9397e24173cf7665fdbb2d5a2c31eb4f50142c7cc44dedb98549ffff001d37e8879a","010000007b1cdd754280f6d22fc967531d7f1baa3907e0c589bd6f388c3cf8f300000000a0ffc1f75c6a018639b7879d76e71b1e5cf5b4ba7c5fd453987fb1be9bd523c6debc8549ffff001d18ab45a0","0100000054abaaa4900bc79448fa07d375fc930db993ab3c89651711dc41922700000000c6f6a87c848c35653ff954f8e06f4c348b6fb7d47ef84907b0df798f4d5283289dbe8549ffff001da329bd06","010000001723323da5d912d5d39d8f5598e96949013f171df2d4c077ddde4a4e000000001c8a5ce960b9b0bc705338f200da6d9fde5e6e97969a9a1ac78de985ba345b354cc18549ffff001de18c2407","0100000097f8204ee3fb5eb4e92fbb8bac874878dcd40b5f6b07ebe4bcd4940d000000000f735f8f1b0b3d3db21e20cfdf20e7586dac9aa14bb7a279e7978e6089afe32528c28549ffff001d13fbb504","0100000091cb9b0f06c559da271cbec1db3abc8f2b5815f56ee4df5455d608a2000000001db22d84ea4348c0f20a15f112ce93bdac8c4e20afe99be2f894bd70c7307344ddc38549ffff001d77e4b207","01000000427c1ae78694244f7772612aeb6c00495253d88fa8150b41968f08f800000000d5709c9b8a95397310311e7460e68f6663bcf1ba084bd991a7ddd1099a29fea639c78549ffff001d26c697aa","010000000037177a0e945a96eeeb9a598454aaef29ab4035bdcae60d98cca41c00000000e352127da3a38c188947e8111782258997d8bfad3a3870af76cc8dddad6382a6e8cc8549ffff001d04fe84eb","010000009049870c0e7b49b26af6ba1b9c8555375439883ce095650188781bee00000000355fa5423404ca89aacb90a854c19891aa62498b985989ab5cff309ca31fed0760cf8549ffff001d1809f940","01000000b17c0755da0ccae0e8ebfdc6236bc7eedb2bef7f230004b844a39b1c00000000867dab2a464b50a9e7759c568a6d7e64e68af7c3562a3c2144d78f98b589dba798cf8549ffff001d7741d700","01000000dbb9cd13cd5d15cbf6257507cb414db5029f36e058371fcea2930135000000000efda93fd05c8fad90910427bcf5edc50c3067b27a4758f42b4ea68f93adb27145d58549ffff001d2fa4b877","010000009b94fbd7985140e02c399bed58997147a3b47ea1ee7e9ed31e383eeb00000000839d41ddb9905a890f30ce34a1301a0ebbc7bc0cd283b2ae76baee836d0935afa0d88549ffff001db5662210","0100000073a70a863da9e2d1c9bb3db546a41289af320f43735132df41c3390f00000000925caab1e0347bafb6dbeb45b91b89163ed55b48a25acf426edf34d6305c7412ffd88549ffff001dc78e3101","010000002d4a815ed7c2d89aa19574fa4a274ff56f05b08780f63c14a3ed357200000000d22988bda72a4a9d79bec1fe7430053d9e9c8ec70d0d10f299b227d13ca6fb5e68db8549ffff001d030e7b3e","01000000868b3d41762f7e7e496c145cadd4ac1fd5c95d1a4cdb649c988427ca00000000d0741576e36bbc80b9af95d13bddf700a16513a452a15d10302c065b27c59fa628dc8549ffff001d108bb602","010000000d16f3cbec6b01c63946e657c2f27e42b8ad4dafc2041283828f625900000000bd0753e544af58db69e9e2adf29851079307e70c9c09a443a733e278229b9e70e9dd8549ffff001d27ac765e","010000006605b933cafe844fa002799c4590d411c41a0550e2b02699fcf0847d00000000e9dcfbadb94fe98ea8f63595fe9e7e4cc857ab6c20520f4cb29155825230795eb2e08549ffff001d65af000b","01000000f7d6e91bbb05524a57853f38f1f29254b08e14ef2d3aea28ff668550000000002abebe3e5f4feca965d8108e8dc5d77caf10ff9e65c092395a16bf17bf40dd4628e38549ffff001d23a4f241","01000000cc5c5a09a4ff4163caa074ad26ca4c66eac9b89d39000cabf5353306000000001136d976da3c08e902796dc92325efde01292ace9e43966863b0a0215ecfb35fbce68549ffff001d045a285d","010000005a6071b16d5df73836223b539a5acaa42bd49680b90484e84d859e0300000000188c113a7cf9feedaf0cb64831c75141db94beaef48a8900b79b8f5979cb1d423be78549ffff001d099d0e01","01000000ef189c57ccbac72411a4550bfb5e67b9e99105119794788f12e989c80000000057e5969f4a3900aa47322ef53f38ee0f0c735a54f4726fc2aeca489962873c9c02e98549ffff001d388bd5cc","010000002bccdcd009f081efcd42bbae95dc4bb6da8bee6765985178aedd73cf0000000035a4a5e677daa0f4d6dccaa20af31bf7955e3de7fe7cfe867282b2a1473738ae6be98549ffff001dcfcf4a01","0100000010489c4d3ba001fb504fceb53c56d3dff5a6b0a55db2713fac6a4d29000000007e8df9d96b52026c55e7a6db14021da974e556a9e0c1c131cd7391de7b29292bffed8549ffff001d029be030","0100000043502c4149aebd3a706394f82b72938513e77a096ae93361081aff0900000000de0c60690fb437c9534a173b7c3b1dcac543ef1e45b67477627b82a881cbac13dbee8549ffff001d0c91bd03","010000007937e0c83b3ba2df769c2ca25c15e7b1cc1ccef824a8ab011868f21600000000091dccd3b76b176e018b98d55b4143e0cfbdb319de94f2fe7fb86f2d48b0ee01a4f48549ffff001d35d9a13d","01000000ab96db152b2a65a31fa1f0eee47e29d07f5f56455380594003c9da5600000000ebb971b9c868997b569db96e82e6bcf21ed18dfa8fc6446eafac7a44ea97bb05eef58549ffff001d924bfa02","0100000034b789736e8192a9f4e39811ea1f2b9dfeca2308f547a0612df77089000000004ae320ab0bb8c7657cade8360c4231b55a32c6296f3ea9bf76385206a69cc8e26ff78549ffff001d2744bcf8","01000000426d3662ccd47217a27c7f781c80c20e1cb796e7b7b7171873e3b5db00000000f43df0209272aea0a025a75aac098de24d9e353aaf0f9fb35db6dc4be900102984f88549ffff001d9d2cd904","0100000086345dc00e26490393c23cfb7bc50477a6a669fa2d139e2e8e2e8a43000000007aa2e8e4858ca1b49a9f3b396ef561afc75a95f6f0dca1c4945efa611b4b64d62dfd8549ffff001d24f7fcc3","0100000065be128f771dcffce442214f5ab1530fa18501afdd516d3579b3cf1e000000005440a090e979b9dc0579183036924867647ed087a53f66d1247798236290403f10ff8549ffff001d03886d90","01000000eb271f939f6af203a3e4f5bf14d1b1fc23c95717277f1b59bce620e700000000fdc70307c421ddd1085fc596a8230d23d3f7123d353b16d3446977ee9d5b64eb98018649ffff001d2085490f","01000000ae1ee53c7e37b782b8fd988e4ba07e920ee26f7b629bf02437962234000000002617a7988dd0d78194a682bc9f3dbff12f3753f02bab5618f31a8bba8afcc8d508058649ffff001d31dacff4","01000000af82f2a970b9d7142cd14b8f37b6ac3e32e6d3430aa8f48d86fffdc0000000009f6445ee2c3626c076ff06f3cf50926d2c9519d2d41d370e08e22762fdf38b2a5a098649ffff001d15c4b500","01000000463f911624c31ed1daa1abf210724432fdc970ec7f43fd1a191414cd000000005fffc912e4e59557738082d04e37260d659b2088fdd6e4deb707b1c46066e3695b0b8649ffff001d1a9e2cdd","0100000024822f790a6faf3cc3b564bf9e1fa90360bf7190f82273b86cc32f9900000000dbaf4dfc9d1cf6863ea3111b49df424b370458efb42620e67b534b499966accb8d0d8649ffff001dec75b103","0100000075556aeb5960c537b50b43b2859d216fd1ef057a7035cfd3e7b45faa00000000e083a6949158e08afaafbf27d64b80c161bfde450cd709682daaae64703214f2510f8649ffff001d21332c07","01000000c35be533cddd7a4ddc3dce428180ef58d8e436d4d3425ec77c3052d6000000003e766c51a8ede2b82bb7966bb96f91004489d193d765e661367094454eae1b8e24108649ffff001d36429db7","010000000c1d4deb2701445d52aae56e091022d7d11c0d31c1af42c503636fe500000000ccb42c7a1ce466d8692980baceff029ce717e1953a83db8d857a73419ae5270fcf128649ffff001d23984c0a","0100000041fd6fdf981b2cab06b639978813e912acc4e31f165c33accb1c90eb00000000a7f58ec8dc789e823dbbe0633d34625625e14072942e240aad7cf26c263df5690a158649ffff001d18105ec5","010000000b7d865e4a138f13c20df656bc2d524ce323080731621827e261f42f0000000054bffa39078d1c7550be17e874f50252ffbf5bed2392cfb2946fe8f37027a1d6841a8649ffff001d243a2caa","01000000345246a57c464632add6fbcfa61d5adda36fbbed32829973257aadd700000000f5a4eb7ad7cdea74fd8356885444b6e8ac965f1702c3925190db8e329b14196021208649ffff001d070e307a","010000003f8d65e1bf2402b50d0896b592b49fc819cae377599725893b6fbcdf000000004d802579baf79f0502b63498678d0d81fbddaa470616d4404eef06066c417dc718268649ffff001d1e4adb53","0100000036cbd9bf0f32f109de239f8f94505bc8911dee7203533b4e8e58cc190000000074f30f09f58fe0a8212db7b5cbcba9c6fa8d9f5e2659eeb537407db6370be589a0298649ffff001d3867f110","01000000a6b05133bbc334eba36535f38a9ac9852dbe5eeab361461932e1a22d0000000009ae2e25d5b7e928fbaff73fa049823b85dfd61c52a54d794d1ef7431de7f354c32b8649ffff001d258fbec1","01000000c618919e8d0ace65d1b6a2ca5eb3497822f028980978c7a5da74c9e000000000249a81d628fad751ea216942b3d1b02e27a56e80505cc995d9b2139a35ca26c9c02e8649ffff001d28ee4525","01000000c5d95f8b76d56cfcb514dc02305c4c0cc76a405d4ef4db20451a62a3000000007e12006a7d61ae4851a59e1bae8de8a2f9dfdcf9d5fa015d48826f8675274e08102f8649ffff001d45947200","01000000e93c8c802270a753458d7a5211cdd4fb446f90e1a4df117f0a16a772000000007d441871bac89a29ea3b41bda7a1f8eca9355d5780f9e230d116ab2fcaece03f07328649ffff001d02b48380","01000000f8a629058b4ef4bfee15ebae8816491eadaff1365b44b19c06a3a9c000000000ff854a56a521774c1f03dcc1dcc752759860ba082e9fb9a3c365847eb9c8c4297f358649ffff001d74812502","01000000f660d4ec0bed53867629de538b18fc5281110bb5dc19d24f702ae094000000003d9d853b97a1f9b1e0a53a3b74a04524369307ba876019a2979f3c972e590d9040388649ffff001d141f1c81","01000000da8a0c0b9a160ce575032266900c4a4dfb19f766ea34d5c3652c17ce00000000fafbc6a7de90d01f989a72c178615595d2e5f0d225eec561e90dbc8008f1f84623398649ffff001d5f7e0004","010000002cfa6523b98dfb0c98fc8761bca3151dad78aa61258af379ad8e1cf1000000005c8ac5f8bf392894f9b8ff000fff13af0d67c5daa1fcd850a5fcd5ac8eb449f434398649ffff001ddb702b00","01000000b4ccd20b7fa945a50aef8bf7080f7f9773e1400de9d5b6f64701585a00000000527443c6ae4eff88c8ee31fbc50599d5e754cc02b86494347863253e88d481b6fa3c8649ffff001d2a1fe3c7","01000000260557d2c33ee96c753a8975979737d13ada83e1fdd79f8c3502f8d4000000005cfbeb51d94de422501a657e30af7ab5bb132331b1ae713042c6cb20484fcaf74f418649ffff001d1d177bd6","0100000096c6a3e1d880dcbe5eba1e2c20caea79c5bc0f74a783f5ca97dcb37f000000001ac0bb0aa1dcc87bbe9d0a4b1a953290a2233241623758a597f0c1437b541c203b438649ffff001d3d32c508","0100000090597d73de71ba5553a7ad0b1afbed12cf3b0ff40ffd5e8b75bc77fb00000000f1fdb99be5f77d8307e8f9a0ac36ef30ed2414bcf1e7ab4290c90367e7f4425dac458649ffff001d04eac08f","010000003e95de970956bafc967165f17bd44d72631ab80426536f1e91cc558d0000000068c54de464244e510a0aa92be29a5543d6efcc8da2a4766ccaef5bd2e8748e293e488649ffff001dccf4c107","010000005af2bec5549ada7df2acd78b61d56addf51388e05a2597dc42222b3000000000bd41e71ab41de365dab269ec4a56915451742248a5be3f245131e04bd1a51c80d44a8649ffff001d3f10cb06","01000000a09016ad9e79506ae05ebaadaedd3ad34fa6b51523c812536c704b1400000000bcea2214386d82176ef6b499994fd0055d56b4c38c46dfb6f93a2ed040b8f83f4d4b8649ffff001d1fd1e681","010000004d4e62c1c82b0755fc6b84991e8478384196a4c2b45f0b637dc11f8600000000044e2712fe334e12ba012d16a329f430e0420288c48dbf3b695e1983fa12ba31dd4e8649ffff001d217438ac","010000006c8c168e3143ffeffd493201a4ed7078293ee0226ac23a612302e6320000000086251605e2bc35b6f55c6dbc4671fbd633b1f386f37ff67d57c9cc3b09c53808b8548649ffff001d31b7101b","010000004312b2d72e5c3e6154571f72eb78a0480206ad05b86bf4c794b549b6000000009a65428c4576d3817c5860a91812cda0b829dd996f698bd40d8ceda217ae2cf0c4568649ffff001d4d969d09","0100000052a65435f1d6e7659a0bb11b2f21fe66768eeadd9fa3a84f2f9d1ac500000000a616e8043a06b341b7765d790b1f21e5fd84d95f707e47f190273aa3dfa39a0b87598649ffff001d364dad95","01000000dc7f00898c16d72586e565a8fea93db074d4bf99a766487bee81497900000000e63be1c6600a95b38ee898a492120d74e8d5862b92f979eecedebbfc5ca3a66d0d5f8649ffff001d17b55a94","01000000868fbc9cc751e9c7426a60e006a84b4d910ca43cee4aa906e7186c13000000005e11bbe880728c39f44f237cd1cd0b973fe116e90d89966e2f979148e607cf87fd618649ffff001dd8300207","01000000fc2e050fb701e01455e96af67a696e3f951ac238f18d0608049b216800000000c5679b39ced7699f67129c4aa5d44504434e04c2c36edcf7e10e283ee3d72a9f93638649ffff001dc8192f05","01000000e3ebad98a617dd67715f1a4c7711657cd41f534e9155e82013e1d050000000000434f83b07552cde921a210e60f2758495187dac4c898cbef679c16849db7a88e0638649ffff001d07adc55a","0100000032fdb73239056fc6ffd3b627ec81323838baa2fd77ad86eba560fdf0000000005fa543ebec49258b7a3b83a004650ae77392cda814bd79fa5b5d49a1173e90ed5e688649ffff001d3793e468","0100000041910849ecd0854374541dccf96b275b88729e95f628b8744a65208e00000000ad59618176015358f674e26be7aadd10a12cd880cd72110d2db9aacceeaaa3039a688649ffff001d63167100","010000005a07fafba79a9f8c83d13cdfb224d67bcc2b53a1ad0f38ade3ae92cd00000000eb956227ce0cdf2f0f3a93e754dabdbe89254bb02cc691bb95d4252739ba5eb8b76c8649ffff001d01f3bd50","01000000fc146fb5e99fb7ff59b90719722d6bd2677ad4eae7bb9cb141e5f761000000003401428587e89fc83a39d28f35b8ea015210f348ba53ba648e3ac8724bc7c4178c708649ffff001d1754b085","01000000df2e452ec1eef07e3f2823a88993728227c5206c0de1e2e634e38ccb00000000258908788ed028c8604bacc0b900ff159f8f7da293985a516a4de7f7adfb8a93a2728649ffff001d0647ba0f","0100000056f64c4125e63c45c1e37f78c278bbdd230fc268d2c437529f3f5ee100000000a4c8e91f7a98eb65e48640ec7d7405a8d7009312d2f78fa53a63668ac9b179436b778649ffff001d21982b9d","010000009335981da15e1461ff7cffba2e699b7581b494b564b24d7ecc6f69a2000000009c15edb3a2050f0c2cf4f89a3b24e683bc6a5fefe262768125f4c216b97a4867fd7c8649ffff001d36b8f0d2","010000002ac3574a111c2e4957d39d1053d039febc14e6877a5173c9ddfbc5a600000000c9aa7102c24933d84c29ef0a607a143b7df76402829c87eb4fd324e13ea96c48d7808649ffff001d2c893214","01000000ae233761e40b0dce1b33d5c64fd840cb249b75d5b090eca8d7d7eaea00000000665624de0d3848652f7dd088b46c3dd36b10bee77a9bf6775754592be864725e2c838649ffff001d077b5d64","0100000085a3a405f88a55082db4999ee01090102b74e4acae99fcf25830842d000000006ebab7a680d7f0989038849828f200ca29aab3e61dc55cb7e8fa9f5c3a07a59f5d838649ffff001d8bb78700","01000000325fa84288630b0222a2f667b68595621d4d8c52e1aaa0b561aa2c2900000000fcfbb3a15426ff8d160e9411531db8e032d5b07583ff9939df1c76e8f800ea3198848649ffff001dc0cdf002","0100000068a6a9b6c913c230a07c4e4e303f829aeaaa5cd9609990cbdb834e6c00000000679106fe762a406ec8c546f4b52add60fde299ccd20364bb2420f6dd20fcecd128868649ffff001d5823db04","01000000241a87b06355b2022db8bc3df9585d34177b678978475b26e2a65c8c00000000ff6218a4c7f20b6d826d0400d98b6bacc1af07d2d663fc648ddbe361ad91f290ce878649ffff001d28c69341","01000000a7fa9d264b2832ae6d572b575e4024ec46ba8e128df9799b66f48c0d0000000000fdded34cc1c6f32a504561b71af8c792a2064d721398e4c05148093020915e578b8649ffff001dff429310","01000000c15ae32d9884c8218399f4fdc00485c704a5f05a0692411b14dd033c00000000c9b55e9f53332fdfa637958f465290931766d01acd7959600595eb511128b3d16e8c8649ffff001d13bd033d","0100000014ea5994e328f751c20da4973c8f0690e52ec0569974fd72d4ca64d700000000ae03a268eef28c6afae1345460aea7814c467769ca8a02ec79499631c20831fac08d8649ffff001d512bdb02","01000000368277d9ad300e2c1c967ae0f8ca0175f3acf7c0475cf08ee980048f00000000e3882bde1d5792a0ebf9a3d2cd68e64ddd34944bde6e1358a789442f47c4c5e094908649ffff001d256c3199","01000000962d976bca267c2bc6915a0a61f924b8061cfe03ba3f91811abab93000000000e0d3fac3ed90f6c68855431d957a8f4a66656bdc4183dd048d1f5ed43778a0b47c928649ffff001d15e08149","010000005c85912a5f9b5d75ab608313eadadb0b5c0d02c13ab4d6ac482c4bc600000000767ed7c77a099d5a3a479108777370156de48c684cb021ed599da4310e9f42042e938649ffff001def860b03","01000000c34de897224048a970c25e97bd9ab16d98cb35e577a6015b1fd19db100000000434fb2f7b141e1c1d2ac2cd2872a376a30465c6374e72ed74ab836af0da84dea19968649ffff001d062ffab8","010000001df6a84480c7b309d4989460ca3b2e2d415356bf8eb2603ddbb9689900000000b76cfe057afcaf25489dcacde13f1434a407e9da5a7b8de44676a5cd335c0d5b03988649ffff001d01301019","01000000c086d70d787780f6a20084cfa28e595ef1f3e0b4007ece34a5081b7a00000000a605621c5bcce8481906ef261988092bae5c8c74248e61ff3e4e926893363ce7b1988649ffff001d0628b401","01000000fe09b3fa1e4f931fe547d97f1e0a154701004203caaff20c6898b1b700000000fb8e2c1e142095a248c943d39d3acc23e3cba4b5ca39d2e3dce42bc6ba416d8ca09a8649ffff001d4d921b06","01000000ecee8f69d66a090d2ac964d24ac0a4a39348ac99497d5b5c3f559ddc00000000612c58a4a2ae4fae0b92bd598a49b552cb0610afde66cda7998458962013ba4ae89d8649ffff001d24fe5d0d","01000000f985d4e75bb59694d31d1fac5cc725997baa82cf8d558303873066cf0000000037d2a235c720ca03cf0e79f2c1311b411a71a10b80c16c8c34ef9cb2fbca09e61e9f8649ffff001d2a962c97","010000006abeed8bcbee12a61cd7879ae85a81d52962edf525b92d817f2fa28d0000000001b039bc67a8ebb3d1fab77dadcf37e7cc1b7c69160c22997dcf843eb4a117129ea48649ffff001d391b6247","010000000cbca5ebed5f15d838f0ea08319e8a123f251cf18fbd2e53bbf731170000000002b754036d247fec193c194de84798ecd85db1f0a5a1b5d0916408ecc2a12f469fa98649ffff001d03530131","01000000ab4417bd04caa08afdb2402496976ab62f27cc4cf200ae292d52659d00000000a7f29f75bd598a19abc4cfa0c3e564ad0d358d4b553d4e2186a3f4b6cf4646462daa8649ffff001dab824f02","01000000d9d29d3e346f1b7cf7130d75a5935c3d282d3dbe23cfafee5405233a00000000892f9fb8361d24f6b32df43cd929bf233e3afbac5db36dbe27354104b067a7ba84ae8649ffff001d07468fb9","010000004138f1013a9f16c3d74d4b48d14662e9e1004f7da5533cf9d1ddf3e6000000000272fa263979ff73b1d35e377d02a9abcfce518539bb7751d465342e70c4aa9b4eb18649ffff001d1dbb33bd","010000000b2efd6537b5fd542bfe0da36a807f216eff6a20683bd7d21a694f4600000000a677c4c9cc39b1586832e87ea88b206f46717446213cc13168d6aff94a9dce9921b48649ffff001d3269a24c","0100000008f4012a89a2b1d59adfca623c84833b6d9cf4f20402e6e04e78a20b00000000a27e4262887e64ce2a0608df5dfd403d8a9f01fe6935d3a0a8a050256338d07796b48649ffff001dc7ee2600","01000000fffc43d4682969cf1059fffbced58582951cb86ed83c7e9454743ca500000000ed4d36600cc7b1a03f1bc05dd08aa613beeadf245d91c55a607bccdb4f52e867a9b88649ffff001d08b78bd9","0100000004b55d786f003c418e18a4cb9fb27d81bdd05ee4175b581adf2273f800000000c3776695f5bac8966ece95dd500f3849b9240d5083f4f75971b4cf3adb456a1621be8649ffff001d06ae2e7e","01000000e797ec3a5acacad7412fa1358d233f6b805fc18be9c81e92547e8cbd000000002c21cbba153ed753d41c060607a5daae11750d0299fa4c54da4e65845fdb775ec1c28649ffff001d2a316bea","01000000e4f2f8f1187b3746c469f4612d08b3c53ba0554452a47ddb83eeed9e00000000d1bae38c127cd5b59362ba0e94935aee17fdfed88806ef01e1dea0e5dcd4202e05c68649ffff001d305347f7","01000000a62d22d630edec1877c73e08774ab8a57ccd3e64d69911d76bf04aa50000000004e0c182d413ce69935789a16af2c3195369db3bde6cabd63f956d7d16c2c4479bcb8649ffff001d29e0eb5e","01000000c3b01ca26c6c5e420f18903f01ff7cc0238d121493f8d0a6da1d9e7900000000156013c8d2b574c3fe4d9f491f9cb65fb5a9478250a8d232adb5e980f104fe91bfd08649ffff001d1747c727","0100000071902e66a72474db203c515a4ed747fb9f9e789a54a7d285dfb1128a00000000f15cb7f3456236a9ea1fcef278856edd0ba8aa520c76162066fd8228fcadebf373d68649ffff001d1b93d0a6","01000000e6a7afe93d10907077010213c1d93e0f808ca8a069dfbf2ddece96ff000000005ceb31a1f3ef45ba40a905f788f77c42a1a7c7f28fe63c620a198924567f7313d3d88649ffff001d06ff79b0","01000000db5d6bdb514f7f1bd4e7ae5535b9772768731701e012c0e63ef3b82900000000cdd2341d23085695a94b99e68a0034d5ad0aafd3b2b1112a9b062d5705d5136baddb8649ffff001d15a6de65","0100000065fe6f8c070a16b4aae66539d86021c48bc70aeb4a7b206025d007250000000081facd742eb01a6fe40425cb701ee3b8d065419da51d79aa81ea9340744f4fa2ccdb8649ffff001df3e04300","010000005ae382a4eaf734fa33376d1f82a87501b173fd5a481be49e05f2063300000000d41ab374491f6365fd41d7d396bf2c127c61ae757d23049808184de73e2b90282adc8649ffff001d7cabea00","010000004d01a97166c06c714bbbf2d56640eca364601d7f65202b633139cab8000000007a6b90356ec1b14e6deb0a9a6609ec7331310893b6944c8edbb38c1a32c20c8df2de8649ffff001d64fae408","01000000733abac54125992cb1ff516943187e9b6b024077cd38a180d8e0bdc700000000a53ebf1cd724e21f5bfefaf4b2db79eb7365e6eaa2f209371d335aa5541bdf3d0ce18649ffff001d301e6de5","0100000017c4b861a39500d4cf035617a3098c8c627f3730f72df3e9bcc9d3bf0000000082149af8eb1952fd4a232bc0d1d10a69144c0ba13a611916b4906da51ee89c4fd5e28649ffff001d1b967d10","010000009a28998058ba9825561288e84624a541d4e8d21da34d5f727d8c6b350000000041d07b780514a34d3efe0dbe13708ac52d82299515221da4a727a0966829f94b1ee68649ffff001d21f30de4","01000000128140f4a17c1aee327b7a9204cc82889d21aae2d622b276f44102ee00000000c7a53defae34918be164f06c9fe8c4b54db2a025384e6bc55379c55a46a3ed482feb8649ffff001d14871572","01000000257e0569039a9f35a02eb3ba1a4a3050d363a54e4d7990fa5110f04b000000007309ebfedf47d4ba680b5912b0023a113aa2f926fbd313c3ca34f87231d7d8233ced8649ffff001d4c701e06","01000000c07074d91b18b85ad037d2906bcba6960a8aa46052ae32b64182f8cf00000000edeee833b7f8f66c52c2fbd3ff13723f98ac35da336defb921ad9fb0dc019fbb1ff08649ffff001d2f02ceab","010000008c999b919940769f2cdd9ffaf99566d09adab803d6afba70a157726f00000000d9607538f2a4dfa4a449cc16e8299b45869ab22122e18b757fafa3901648f092c8f38649ffff001d1a7e7efe","0100000065590f557b9ebc9cdadfc765a64e304e2f60473c823d88f35b928b9c00000000e7dac937b6d6742e1c9df4dc0420973d8ebb0b9ebfadd9edf53752d0b30e302737f88649ffff001d15919868","0100000067cc07bf8ffba7a43e60364d4bbdf479d62e2bfaa1464e0bcad3b2be000000008ec28acef6e8af48d57b82d5fcbbf36f4732951a5cef59fa4791b62696720da16afb8649ffff001d21ae500f","010000007d56d0f0e7c507ddb8fb5a5724642c95df5d04c495721f23f74991dc00000000c824809ca3447f84203dcb1d4e5ae3963587b8cdb72555d92fb9bbac3b046716c9fc8649ffff001dcf2f3001","01000000f64bf582ccd8e9a2a9dc7dff9ee947ce215f51696a81ae83c3abab2e000000000cf54087a1c0a2c19adbe76ca2943b42f5d69b571ed76b7a442e04346d2322d7d2fc8649ffff001d39a77947","0100000007d16d6fd5bfdbd41f5d9b6d843702dff5a2057ff080facafa03323500000000bc1c846e0de9a8200f9fc9885b300ef16b66c7ab6daf82f46d9c809650859baf77008749ffff001d2e76ad7f","0100000026ab145a005c07c62f0c26115c33d6d0dfb6e85a7d963e5f94581e4700000000c6f8af2d3cc6aa0f4271aa5a7e47f853ffcbf2f5e78db5b148275c7d5962b24efa018749ffff001d2832f606","0100000094d78afe48d42375618d2e267a928b53334f7dee8928a2251a172027000000009e29a404f5f637fd74ac8d6d6c231d26dc4d16203c7bc16ad6a4f6afd4691ba6ab058749ffff001d07b31d20","0100000071fd803911c962fee3237e2c43c6b4090bc5a0b9687f5a1418b2c0ce00000000142d90beefb9833dcba84c170c5ea25be32ecfde5b5c77028f8ca18d61351cf538068749ffff001d48a64302","0100000006479a738309659a30fe10670ef3b52f442c9bed64c8ca6d13d49b3f00000000e002f49abdcbbf93205d469007b2d44933bb8383bc3e1fb3b7201661b50ba31ff30a8749ffff001d02ce15a6","01000000b65f339d2cbc3369b0e5cdc810a94c500d15d195271fc8c94e7956610000000041c7311c530f0a39ea37f77dd180e3767541614db3c77ac715c104fa793d5ef21b0d8749ffff001dffa4ab06","010000001c402a3f91e9b3d87ef4c35d3d16feed05fe53117d6c627fa6ef16ab00000000b35eb6f337d0f19e48a4b435472e4548d3f0a25f8c93361e31ae3bcc089748d81e0e8749ffff001d26764577","0100000064c0ca738aaf27f8407e55ddfd0a038f2a90dfc065c7fedc6a81052d00000000a6d44ce0899a81286d60c8ccee493a82678702bd0d3a9ce7d5f5a204901d2776a10f8749ffff001d22ded821","01000000f2a64e016d50df8a02cb689e101bdda92e0b1ecfaf6e0a566b6d459200000000cc6357c60bb25c4429509ee9c81caf4e6a5049a5c03024112d3691be33696c96df118749ffff001d0f02190a","01000000d429a02105141c2a35a710b482365bc2078233af9e7f3c169fcb926e000000000c78e2b94ba3067d606c8f7a5520337d899604b5054bbc009a616479bf68aa99ad128749ffff001d05c1497e","010000003db4b9d2639b381837d32e1cd7d8baa28c16a093e832038d60cee7400000000084cc8703131db9b2de137b219fa3265f2c700d57fc88f08f4da38124690d0166e6148749ffff001d53eedb08","01000000494ee6cb457822d3e0513112e409353ddc3c79a7633d1ada8a72f5cf00000000cba3aa2c200a618e070a4030c6282c4ef6b1aaa23f37d96c8c94bcefb2b2aa22ed148749ffff001d1b602a0f","01000000009b4f1aed4f7f15123ccd711c16f20dcd5357419f80ccafcd6c03f7000000004c158830563aeebe06086a8316720055d7800d96ffdffc43b12c34ac290230e2b4198749ffff001d3518a098","01000000e10d53a1bed5e56f0a05c002200ffeb011db78e563efaeee175d0d97000000008abe5e94dd854dcaa64d05b504a3ca41171bd7aa8831f4a34b7cd99cb04b26ab2f1b8749ffff001d32330c35","010000000acf72f01f5e31bec3ede3dd2eaf583803575a025a8d8c9527159de500000000244e9ebc348fe621c1694490772de7dca9ff1106220107d1e6e80d1e82715549ac1c8749ffff001d2f3e1b9e","01000000cb41fb9a57c9a39d9d9837306404ca1417a147fe5b1192e944b79e1500000000482ad03088a8160a2bef34ee55532bd45f1a72e006d91ced41c75d469445c1c9d61f8749ffff001d25f1fb72","010000003350f243ddba2f1d61735574d89cf0664a1c1d18a7eaac2c6135893a00000000ad486cc62f8d92d35ecd7842ad0a6df649c4a66298c2bcc448b20be1be94d4be06268749ffff001d2af9afb5","01000000b4df4757e2b952f909811cbe4adb289a4f28c42be8e591a4e9a4c4e200000000520bb46fffa5c4fece903e315666bafb51e5fb686d0f0b206aea1e838e90f92f172b8749ffff001d29a8fdf4","01000000377925338dd5cd32bb3f1d682d387c3771edfac7bbba006e7d6d200b00000000bc2287daad1ee51d770a551d0c13015ce81ea274b9d50ad2ea1718ceef9616cec32b8749ffff001d0369f801","01000000d35c1baa3983ccf13852ea8acb6fd24ded9e031f4e9c0dc60976a7360000000088a1fcb95b2d9b8d0ffbdfed8d9411ebeb700e78997dc41ae805ab6bfcf5da10fc2d8749ffff001d1c13e3cd","0100000088441bdc28211ac087a88f25cfea22de1956541924b80a079216001b00000000f168b058b821d0e19b1d9080b7147a62c62da76e87ecff498f21d50166fd65759a2f8749ffff001d18122e92","01000000054093941011b7bc4312c3ea83bf0a9ac95fa52f60fb6db6f98c75f800000000d34db3d38daf38f4d79e7ab2496c7afa1d5620fbb25bb7df0c5f010c7ddce0813d328749ffff001d166a2dc9","0100000014c5a41440808e4172b48359f140d15762e63a4e51d7b90b6132620c0000000041f4d49f91034b37d84ca622e7e4d0d9e6a7151bc0bc642fce4c09af234d8185bc358749ffff001d37e2d080","01000000f72677367c4401c8c6a4a2ccbae48204c67340fec00d0759d4af142700000000e11efefe535de66dca5a49cc09327a1b27b849b92cfead56b46683d797fdf07c92378749ffff001d33d00bd9","01000000a1ac58d51082a1af1e2656e929cebcf792eb2ca73dc1bf81767c301d000000002ab568a9efec5a272e42a15f1e4b2725f77619d612cb216a336bc4ca54f12fabb0398749ffff001d26a188cf","0100000080ba49b921b779209752269787a98fbd9aa2a995401c60adc3946c7f000000008f579719d29cfaedf5bd1dca1e7314e4cff54efca35c6c98c36398eb11a45981d4398749ffff001dbfd33e00","01000000e5426fb1e150d90a50fc7696e2d7311a91ec4194730e2ea7886db88e000000007b2ee5dee98a0db240741e37eafee2eaff5a06c72bc35d4e4881fc2564434bc0ec3b8749ffff001d19ef7316","01000000b0eb69911bdf88f1cc8c2ae3ee1dd9c61bd3c194cc006a383853d87300000000d0a87fa7c4959248ffd4a81fde27f30d7dbc29dc19db6f3866e7e8f69924b946a2408749ffff001d252371bc","01000000d4ae8fd8b25296104f6ae8d793d11df9ed3008923e9542f3ac26bb3500000000f29e9cfc04165dfaa509f5054473093e655be2970d9c3f2fbfc534127bae017408478749ffff001d31b9504d","0100000047155112776b4a4d16fe4e61272342d39b6faa4eecb51eb1ca842bbe00000000316529641e3bacc02d89761d6f1607eb7d09f31151faea5d5913034149694b375d478749ffff001dd31b0d01","01000000b7e9aef5b246e14c88c1a40a3a467b5c65c71294b08788147f917585000000002a2c2ba93551f7aec5fb42a7bd219375979af7fd7f78ec9379acba8086a742c14c488749ffff001d0bc08b04","0100000061e206221a7f33bc7bcd2e5c016014b7ee206303a0b2cbc4e7519b8200000000e910b30bee575a516ec4317b0e9b1b4f1d6e88e16a09137989219228b2b05518154a8749ffff001d1d791bba","01000000d25c3a08338a4030978ec8a928d750afdc7519be147b7d1cc8fb53d5000000000113cbb5b6b711ada8bf7f221211196c1f069db234f802026f655ea9800e3dffa64e8749ffff001ded846012","01000000e2a96cf898ec11d84cb115e3a393c97b2ad5307a25690d9d245203d500000000b9809403e1ff327ef15394a1354e67ffd0493681aa99d10526b511d0e5226550364f8749ffff001d07084440","01000000d3c7a859e43b3d75ce2ba93159cc8f51f2ca15a58a823880cf786dad00000000ce4af1d5cf83a374dc923621618aa11ec26e904e508d55bc2078d3aa0369a1cc53508749ffff001d825fdb00","01000000180abfd2ebfcae1d8e16b376b0b56ee4098c5bdf1e05b33252951949000000004062fd7b4e673b5eeacbf169da4bdb550158e11d44dc5c1db94c8db9202cf008bd548749ffff001d1e041fa2","01000000bd9461fb9630249504f8544a84781afa98ad3843a1fbf155b17b387100000000bf55a12b3fa2b32a6d563fe8d30b4f104a23401b78eb03938b9af16e283733af1d598749ffff001d28340c4c","010000003d13321140d51f2d874a9e886d1a5a6c1975831f09255e95ba9b43410000000059f7c74aa94affc906a06d7894cae101b9e21d8988a38eb59c78a567ca7efa1bc75d8749ffff001d2f9292ce","01000000c9eb0eda452035266a42da9449e4cca3768a292c398ecda57f0487060000000096c976f4828d675ae93a92db24ae9c4c9296aab60211278b6a6e7fac55eec5a2515e8749ffff001d4152c200","01000000777b76d7543d1f6cb7b84e93baec85e141f0b94089a96d4881eee2db000000005b283692b1adb21959e276c319f95fdfc8c9d57a40edd563ca017ffdfadb42a086628749ffff001d1981f659","01000000b032576d93345b338a8a00755c9349ec953944b924838d53f16ba1b700000000319babec4e42d157fd57ba0218cdfdde91f32193b78949b2eaac64024b73312756678749ffff001d15641ef6","010000000f299292bd5d55d6358cfc0338908c6706e45bde3c1278287850fbcc00000000513591633fa2a5bf16e76604c273ef7d9e3ae9ea65c34c07bff408f581f9204780698749ffff001d090c3303","01000000a26e42748229275dd28b5ff30d934f658a3c0ef2627cccaa5d04111e00000000ec1b332e85789147bfb7acd20b87d013bc9e68c3b08f77595e8714cdb03fa031f9698749ffff001d85a33e01","01000000713c6015911b391b6193a9fa75882cb628ac84997c02077e7eb8db2700000000c19a4f920fb15d3ad16bbd2ca2751fc0c4315fe3265f3d26cd8bd36bef82d75fcc6c8749ffff001d22e6ed52","01000000e975d523144a80ddd80b5efcc81153c8c582eaa3591316bb75dedb33000000001f5061bec18e0b67731421592c6275eec84714190e264a246944ed06affd41d624708749ffff001d1c703676","010000003f07292d1d4bfe8cbb19ff8e924d59725cfec7757f3a9f80a435b10d00000000aa704c3d90493c325c2b4dc83dc15881a6ade5e509320e23ff0817967156dbe0ab718749ffff001db825e503","01000000d114e6ee358964db6c312f247ef551b682f75b3cba9383d3d91ba36200000000329b3041b145dad16c353b949ef70b50ae3fe5adb2655aa602cc8fc52ba405ed48748749ffff001d2785e8e1","01000000dc24742078c1ad87c43f5407f1676a2ca1c23bbb0d5409ba0aa82e4900000000a650529f1a0a1944953922bc0cd754a65cbb70b922d66d88ea339f15f806b907c9798749ffff001d1fa72d74","01000000d3a90c36bcdf1e862713d8276ba103ee0535254ceef4f1c0ca3ec09600000000ea47774cdfc85570a49b969d9c5d047858fcce9c88564430adfbe062313ac2174a7b8749ffff001d03ba1249","01000000708e1e9228df990f75f8442a99a7f16a8c4c7284aeb311a276f01e1000000000ed6452f1e217e5ae659048ad68f14eada2125a11b0b1f64d89ab17ad354ba3d6f27c8749ffff001d0ac18707","01000000c72054121055ae8ae81ace6f5fe64b5ca7a602c7805a913b0f40b3c80000000057548547e1c594e94216f665eba45220c52418cafbb93a5ce506a2e1d17d7b24237f8749ffff001d27c814fb","01000000f17a6167c289a2976ca392b6cdf57359ea49a556c5002f1c3e2ecefb00000000e702609f7eaebc3fe53d92b950f99cb758831155b9913754642ca53841349ef5ab838749ffff001d2cb30762","01000000d88f228738e1573962ecb5a1dd214fdf8ed78582efc3ebe7aa85bb5d00000000ab6df06c74868428509b6a67d6d277df958dab6894340722776ad87a4b360d1621858749ffff001d84616804","010000002c549d85844f779d88549092e5a1871be72205c249f3eaf37401535500000000e3aa963a250373a4900332055b6d5e1c132f19081e989376f8bbec9a6ed9ca72ee858749ffff001d821d3d03","010000007f915a9511d98d6a630468fa6757a4f3206d9bf6465e691e29598fc900000000969c946c42b6c43e4681bf24af2d7f18dbfd7bf98d9dbec1e69076c82397bd94e7878749ffff001d21904ab5","010000006dd1d03b2b4eb1aa5e001e0d6d2548327c5e903f4cc1b827fd6071b200000000c7ec8ae564fef7371b00efad23c4f849a92fb69b3b47d9fe01b3f394abd753f3788c8749ffff001d1602e858","0100000014bc71468ffa62cadb1d2dc57b3a4443a1680fc2cdc977c2e005ee2400000000113be99810d665538583fd6c1804a52c7c6e436dc768654aefe072ec4849fcd39a8e8749ffff001d21d414a5","01000000ac3844134f40590431dc4944a3ae7e7e0a96365cb357f8813c651d26000000007d63b3985f55a7db671b1cc1bbcf7d81e4e2f998562f7e09fe9d0acc3f78a9d1cb8f8749ffff001dcb373105","01000000091a9576a056d85d38859db7d34f49c67d2dbd4b3238a54b636c20930000000001746ffd5ce067c4cd71e695a8e548b5f51e69be11a3b400954978c77105dc051f918749ffff001d047bb345","01000000196ccb185c7217a6438a20bdf8add189883ef1baf36446fa25542f95000000004b5017152808b0e68ae07e37d85d976d674bdab81afad49f859c440839d992554e948749ffff001d06400392","01000000ef6a4b3eaaf38820c8f1ed708a06c88292e562f0596a371ea1e5bf49000000005e182e03b615d8cd88792b323dd136526bd060ad5c4c605b1464fdddce56419bac948749ffff001d6f0c3201","01000000300bc0dcb9e4c1b73077e1b17f6663f556184d4d9b6e443834f5d30000000000ce3a5c5a01aab2935561af172425320c957ee40324d99a56b97e25ad70ec67ee8d978749ffff001d2eb4bb00","01000000a0cf3e9bd68afd35b58c7adbee22bd6d09f1562f4984bbd0c5db3a3200000000d527716593d142fb522081b812accdc4c168b2566dd2c339ea0d011dd2c491184b9c8749ffff001d2be6aa6a","010000003860d87179c85335f258168d2486af1785fb4cabed195e0aadca33c30000000056fcdf9b5b8ddcc4657acca6e599a387834c51fe61066ab3690e686f8a9d00a2e4a08749ffff001d071c2744","0100000087668930689dc59e2f2bf9694ce5f7ac8f84d2cd524ed848f195defa0000000058ed46aea547238fd59d3c7538534745a87e4d91316380813f41ca4c35a24d964ba28749ffff001db0dd8d04","010000003539cb484e2655a87228372fa51de4a8468f0a69211904e396200063000000004a1e079d160663700ba2ea43f6d82af6a3e50444da344aa5af7aea4923ad0a588ea28749ffff001d03d95851","01000000c1b813c76a9c327496ce6f4e67ac146db65e80230ff343623ab9a5e1000000007afd79ac1386ca2ed5483eba1092cf1442c6789d5eef1d161e79272f8fd3f5924da58749ffff001d30d290c6","01000000f4d3a76dd61fc3cb61cc22ca3615482d42dba9307ba0cce01eef6c900000000067557918bf215ec6380e9cea3747f6ea888ea057b29ace30ab7ab75a1dcf0293d4a88749ffff001d1e34e5c7","01000000b421a8dde05603361a357bf1e14e695a561e4ad370b80012b42696e100000000778e8d9b9c35acba5ce664eeec0d931099686a0f15b8af86b26b84c6dca02f1ea8a98749ffff001d81cba403","010000002148cf579a5bfae3bc1a2e4519edb2f7e8d13618c2d142b39c2e55bd0000000018458b9b8b891a8c4e121a10123389ce57a8d382dde67e4db12c61898e7c2326faaa8749ffff001d185cfe7b","01000000aa0934e70a7a57431b2f9a1828bdbe533f18394834a5d8a8dbcbf6c500000000c0a27ba1c7a04d74c55ab55b34e069f5f90b7764643716eb6606d195b8593ecf4fad8749ffff001d14f9dd05","010000007be972f610a49ce54ad0e4ff06473b0fb14ad6f7fbae6201155002d100000000150be2df975a2a57f01c64b1539973497be5cd7053934530e813cca125b6b39868ae8749ffff001d2bfb9609","010000003d8d5d53babc10f9cd3592f9a010bd6a00e6d9b7676c039d4c13acea00000000a0dd4c4ccb4abeb73333dc3fd0df799db93fca5aef1b30d87e473e0363f39e9500b18749ffff001d2791a0be","010000006dbe7954fb9271684a1e30828e1aa7f5d9fbe405740782ab3ce4204c0000000082335b446f76b14334cdd2c1da3015215c20c9f4f93fd52c9582d53849099d58d0b58749ffff001d35b13c03","010000005fee36dfde0f33681b2da48fa9032928225c9b5a3c3033b84b826cd600000000bd5d44ea5d2e0437c65d47d31c48c0cace21f01e9cf0de227be12151554eeec9abb88749ffff001d13917e0c","0100000060c00d6b0629565ab8ea3429faeda0e5ccf3ec61616f201745a7e02d000000009c92ebbc5aab5dd356ab30101659ab7267f965b162274fc8f97144b0e1cd6a82d5b98749ffff001d1d900c03","010000000ae13720bf3fcf453a6aaa984e32d752755e0683269500d9e08a32280000000036da1c4da3d1b177ffb580c3d16476e96af10a5f7d035b7177862a0d9074387a3aba8749ffff001dbc929001","01000000656c38da479d91ff3663a97a7796175f6a8218466794f392350f2bc400000000acb29bd74e450a48b1cdbb4ad5b62e5b6baa1495591377d3cc731912512f710bfebd8749ffff001df1936a0f","0100000007d56977525ee05ec93ca2b548309694059499b7ef6e87d0a03eb95400000000bdfb5be3346e2a5e5ae3c7acd698bd9169d481d9a693848398facb7d81cf01207dbe8749ffff001d0454d562","01000000360b7345d2a3269331eedeee1bd95094c4af099efc660f4553b594b200000000911b7be75d96bc93399ec6b0ca896a8d7139ebb1dc9aad31de70f5e76b39e3aa28c48749ffff001d14ec0c7e","010000004fc6e547409fe9a557e61b2f6113ff081d153a59f5fa995f0386cc1a00000000993a855228202fd3500e1c61727dfe43930f2dfd579d8e082f4890a8818e72a44dc68749ffff001d1d675df6","01000000284dd73b286116fd40d5eb897e9c79b47708b78c56d832c76ec26ecf00000000567b02eadf0e72a8fbaa01ac629b895db2dd05d5ed7dd32fb9c8e22612dec2096fca8749ffff001d22eb9e83","01000000a4c4e3441c87f39b28b82872de79b57714253c95be052f27f155fe210000000065cbca8fcfb37bb28089b2ea59c92058c2d32ddc2919188ffd98464cc4869a286bcc8749ffff001d1f8015ab","010000005d9c91317f5d8176052ebb4cfb8bc2d685d0190c45433ada4d3ba6490000000022fe95062a103f4d344ace6bfef793b692fc99e3c21865fd235cb77fcea708cce2cd8749ffff001d06429e00","0100000087db56fba2898a4c2595f88d38d3236b188a3cfb6ed5e869a8cf500700000000dc999e91c9ad0b9935bb61ef807f84e0b046a0ea1c7d542c29bc23b74c73164934ce8749ffff001d34660b50","010000006911ccbfdef7cfb448a71d52b9adaec6afc4f9059c400ae46310bac10000000007baeafa25516548f231d9f4cdbfae2c7f181abf01f462114d015ccf3189831bdbce8749ffff001dc66f3301","01000000fba569607bdf371c8ef9e5779a30c9fd34e6a7ab0b87745597d3d7ce000000009483acc4efdf84ebb320db4e4fb18193cd10e7c1c9738a5418bdbd2548ea25db40cf8749ffff001db9540001","0100000040b3692d383f7abf703079dd53da5a749f5477e9f1ae70af2dd1332200000000eaa6e755d8e1d1ed87cd1c0bc14659b987216966d4904a2107214f22b35b4a173ad38749ffff001d205bcc3f","01000000b97dd4c0e55a8324e48f60043127c36cc718f6e56611455ed03c0ad5000000000ffa6e23e379a5d7fdfdffe388263dba3ebab862b0c74276bb4fbc118f4bf50035d58749ffff001d8ece1705","0100000077a0c0dd72eb18efaa9579be59706fa96856f55e1025aa416884aae500000000ab197fa03e551f549751322c9f381c9b1daad0fd2c8d8723b6069f64deaf6ca7d7d68749ffff001d0588f230","010000008b8f59140c76858b753148589d15a15ce2001845dda1fd25f041311800000000358eaccd9a9b38f5a604d53825fde9976877de98565abc2f1f6b37b5f35937fd18d78749ffff001d8bddee00","010000004ef59b8ac75bd9de2e169f3fd329ff675604cda80b67980c7808768f0000000020c968a5a0e69494faa438372107de94b2004cab2becf16acb5b7f9e91e4ada703d88749ffff001d4b017504","01000000f6e732e0ed390191dc15988691914eae8a051c0111e15aa14b6d355c00000000c88b45a9ff5af1fa0c0b042cd51767aa6ecae63069a159f5f49e7a38c01df7f3a4dc8749ffff001d36d10dc8","0100000083b7e3cb975563633cc23f18d71d550fc0f3a62565b7dcc921b106e600000000daa1cdbd0d86d4b676b5dfc02b1fc3c1eab2306c7281259ac548169c0973b0ad55e08749ffff001d38c2646d","010000003ad9f3593f9e246e20a67ecbad12332b706e638a4ffd9a839660f8a700000000bf47e09089eb008dc45fc37f1727213173df377115a497b5dbb363d7a95b12dc38e58749ffff001d183dde12","01000000a7591c159745c78cb5fc3400d6d02b29e3c841c7fec1cd6c8c4a39f000000000b5d150ce08cc60521a19b392d259b744c8753b9f676f8c895e299cbbd37be0e34ce58749ffff001d12060600","01000000a365b841aadbff370f6a8606e1207953bdff43c6c4e506838b323169000000005a9667a2908ec571459388e42a40b8bbb9b67a4c28b54b265694f5839b3a349643e68749ffff001df126a904","010000001774c07fe07df2d01e5ca70d3d5f4e0e7bb319aad1b5f58807f0cf8900000000a498da12d4b414d8f507e87ae10d3643da8437f768aed6a199937ecdb74e9b3fdbe68749ffff001d49fadb02","010000007b6027379dedd892e37e0b4a141104b1ac274ff5b79544caa2abc65f000000004962f2f4dfb218df630dd5af9bc4398b19542729d2f154989b6a9dc40876db7345e88749ffff001d304414ea","0100000079934ce3dcf9eb77a588ecf1ce827c59faf8fadec8cfd8e0d1effc9f00000000996ef5c7f19a8ea0bf07a8a07a5eb9106eff47dc8b7067ce13159bdc0a9010cd6ceb8749ffff001d279f4c4a","01000000d5a5193d906767b37da28e57055e29c4295cf007bc08e7429e99d81200000000df8dd4eadb9cf21b7843f60acac54a6894ad83bda92f28504cb14ace45dab6e21aee8749ffff001d26a0f620","01000000993a3e7eae633e799481deae3631d924c84d8298f6474239a2235a3700000000c5fc4104445b9ad68819da73ff8520f67e7cc439ede8e78941181db71b14fcacc0ef8749ffff001df7bfd107","010000004748d017c9efd4a691fd1594a847db7c3f532853c560699d6445bc0800000000da37f14dcd21267f8c2a3e517ff0b5af0be5186b60f93cf75785a9cf54778690faf18749ffff001d073e848b","010000003fb292a089d1145675829aa26d2f504815be21ac2fddc579652ad0a5000000009bd2c2eb5ae75d11f63939d0cba60b81fbf3ef1377a99eee5feb77d2acd1859f78f48749ffff001d2d9b2264","010000002f161c43a60ce55ac92dc5a5d46e7f83afd04b612b4aadbc07eeb72b000000005128ec5917c92677fa529f67632343e16323d15609132c161b15568069ca547e77f68749ffff001d29867370","0100000001fed0e10ca489e3903374cd18429e3752e4ec63fd85eed8cc05f5f000000000ac00f2a2f5ec437770fe12c2fd4613fee5c022432951cbd70551ae4af9fc71882cfa8749ffff001d1812f3db","010000009886eff959b8e9a5de5cf98b6eab5e32ef4db19ddacd4619421a25c000000000e6d30ec7ccf909cd9af524e7bc1e0584c40eef87e3ff48eab4cb3019eb67fb518afc8749ffff001d2696f470","010000003d344e3a5f99d19b9a0e1d3873eff41b46aee9541bcb0d7575fdbf6e00000000ec82f2a7eb7743fe0c00406171e96169ed068d32d07f100fab767191c1d0f2b186fe8749ffff001d2a4b1f21","010000002d1cef7df4465000dc91d218b99467b910a585a4ceff735786f69374000000001358eda6db09a4e1223bbfbef1112af9771ea093f023d8c5f6d52b42cb6ed23884048849ffff001d2017ab08","010000007e84c722aa24402362177440dc84c28ce67fad7b74934f082e3828fd00000000df0e4951c22d93b0715604c0f41eae4a202469a85f57d632bfa3d57479ab0797c7098849ffff001d05d7eb3c","0100000078878acb946925402740b12f6f6fe9d09df27c5b441bb8f6184b19b5000000009e36e31371c93cb37d0d8641eb2889e9fc1455c8fe67ed451232842f2150ef518c0b8849ffff001d1b7aecb4","01000000fb45f3e537b393571a97806f9b5250224e18778290895c45a474655100000000a3f805dd6e41130c53283daeeeb945c37971a44e24d21f66b29ed9e0a51b9dcfd2108849ffff001d29b73b11","010000004a48e67f13e24a4ffcb73c051ba4e9aad4987db3b8eb9af2e3832eda000000001f4d99b1d85533ba8d7dadbf6e26ce5d33d66c339dd89579ea8a48bad8771575d7148849ffff001d040d3585","01000000cf2400a11c2b2ec29d085911fd21dd72ef988e8554fc0f68ca0f095000000000fc7e1caec6d23565f1dc6bab8f611f7f6c5bc0a345ec81f5538ded2574eeeb4e59168849ffff001d4fa9c303","010000001abd5cd1ea4a62ec9b9f4f8402c0a5a79bec4badedd6c070ed3c79c7000000007fa63e1e3e7df677ad80876e3361d04d686f58287abe36fa03d03fc98d9591341f178849ffff001d19023229","0100000095ed49e8a938aa1266f0dbb2ea8bada6baedb227f0e7105195ae156600000000c8807224f6a6e2c9657961dcc0905ab3858bc3b3b0b995f53134be2bb1905378cb198849ffff001d04081408","01000000aa43df338ce15b5bfcab24e41b936bb7bb484c9886b57f60d913a05b00000000271893020d460a2c3fd20df920478d662ccde7dd93c33b0df92b315684fabbfe921b8849ffff001d0380a04d","01000000be58f4826962558a5839ec2b8e8215bafcf77839a46078e2b5439f7b00000000885e56d59f98a06f21b4fb24dd445686258fb06fe28895665e2f945365d52247871d8849ffff001d32987841","01000000b051b84a6e0da689f2d395c9abf1c845d39515bd2d5546e2e22ef8db00000000cb4c74e14576d6fd7a78aeb38a64a60d2e2ddcbf95fc85446739a7a7a7f0a1dc661f8849ffff001dc3433f03","010000005609116409f19d18d9c0b3d74f24b769551e2e310431ae3be62e54f700000000349e066fdd094154018e2e1b7253a357cd49287a8a1461b34472f36c0514c0857d1f8849ffff001d1bdc974b","010000001b3565d5c82186e4d67a8f02adaad8140a5b87989f104e2f3b0c6029000000003cecd2bc5eac8bf703115dd2acb1b5263d1a8a831db5f92c1b0f662309cd003bb0208849ffff001d45369805","01000000347c696d736bf9faa0a3fad80ee56e99173bab0343073d590761fe8200000000eb0c0735d58abffaa0812721ad2ec0b07786c1114c2b68b46239632b99a44a3e22218849ffff001d2dc0bdce","0100000073d46a1c09374803425745158881cb9334a5cb58cc4c549ff88f465d00000000e4e0ab43605f3739c37597fbc2b84dc88ed32a845a9e5c305b05f53265502722d9258849ffff001d2d2d2945","01000000262759039ef6f25c97d43de399f33e9ba9dd10b10b4f92b7ba9e9b10000000003b05d5089d90d2e58cda1d26bca5aa461d2b4d5b02c984ecd0844adf887e14652d268849ffff001df520d000","01000000861a0f578b3a18fe5b3977be0a87d7fa8d2b618262562861aa3c6ed4000000005fd4fc5e1c5e1c4bdb3adf1046c79194f014352ebc89c7b5d0fca09a6c9f79e170288849ffff001d844d200b","01000000baeffd96d7cee6bedc516255959bf82fe080c161be18366cb1a9f026000000000a279fd10adbb8c2a19eef86464037396977034672304189147c0ef8ff0c8c74892a8849ffff001d084def9b","01000000f2436c6982d4790ab4813f8f13d52cc74ac9cbad5a9965ad57e35be70000000068f5c76e49870b1d27012f681cee8c214bd4d2c6a4853cb47cf0e48d5cd244579d2d8849ffff001d2eaf641d","01000000ee619e79e455736e78035143250c29744e894e4df32f775fc485104c000000002a9af653c176dbdeb09f91257c3f72483d6b3896b94f80d0a46bb0cba8ec570b0c308849ffff001de231710b","01000000e307e6274a9ae59cc1f1d4e5ca05281bf5544b01a435a37ec2c1e6d7000000004ca0ed305b93b9e55fba581acea3185c5815c86d59116414aa61c6f514db261634328849ffff001d039f2fb4","01000000470a974c5eec34ef4f8ecc96bb73321952b54a4b509de114b56765f2000000009dfc70f0396685f679b79a572289bdc50611c541edc069ed35b9c5973627b14f80358849ffff001d1b6622f1","01000000005ebdb120b559f5fba99f2f002e7b6a2d1ae3968e0f70cd8bcf7a8f0000000042ff15382dd24d7216a8f3be59d28f2d2d4ea4daeb8eb81da125db1abcfd0e166b3b8849ffff001d17c6b0e2","01000000368a118abc02d047460708870978e56c7f4296397b1def71d6d3848d00000000478fa69f26fb8a58eb5054790c8672fb5a71ee650871ca745af8a84114f612e88c3f8849ffff001d23f6ae60","0100000088928094ba638ad8f10422ad4d361f14e08cde8e2c06f9debec836ec00000000aad52a43de0233ae5212f23b816a8ccd0f7552d426c6aac83132a79f6f7ff8ff24408849ffff001d1df35801","01000000422e0bd57e351e3981a591dcad8e5d57920d41e13a3670bb0daa10b300000000e6f85a3fddb3c7181eed6da91f42fe7f0b565a55acae13e87eb5a68378ae97b297438849ffff001d2f790a44","01000000a0131de5c3b3f6fd42f074633b4cc30e029ea899b9ef6da0630b9a7c000000002a42d8f3b172ac3bf8a9ae3b53142e3b653f9c336445aa9ba42b8608fc5ac28995478849ffff001d220d6c82","0100000029045f668cef1106387bb7d3d36c3bec4ba9e6986118e2b6c557efc80000000055ed046f5dff6cce2a9b98606f647a9b8709dc242df99c651f8dfe5ba3e737df95498849ffff001d95e16f07","01000000856e4cee06c1b13ae622ff462bcf999779a3546596478ed584cd243200000000d691185d8a05ce33f4d06304afd10565566982c2af9768410db5e139d17098a0e94b8849ffff001d26c52289","01000000ffef7c8dfc0ff0fd8a6033d17291bc279c8016171cd908c58d420d350000000015a19f28b271c48931cfddc83151c0548c5d26ff551980906333eda568bf9c54304e8849ffff001d85702406","0100000005d4a7b808d81e5a227472a20fdfba4b0d3aed4ba45525c182f46a6d00000000eadeed18715f6a5d6f60173961b056ba29ffbd4d804f8507afa887aa66df08d079518849ffff001d1747ac9e","010000004f8101354b44b1def6733d0f362fb940aa4483d12b7fdd074abd651c00000000c3d0c7054b9042f90c077d79a0c59eeae6e7d9a360a85300deaea04fccfb7cb793548849ffff001d1a5684e3","01000000db35fa4b846ac7c46f788566b9f01dbf50c15a1a7d08122461a1274500000000d52ca50179f597984b295300f58a53f846a2be815eab81b6cfbf2349a74558467d558849ffff001dd5442104","01000000f7b4abdf3462ea2bd5991db9a32c93a15345eec25385f73d90c975be000000000673c5a61529d229b072b62f2b6335e306a2a91b329c4d5ae34970da905bd22175588849ffff001db6ae5a0e","010000000769e35a89f4b17244173acc7404346c07ba2c815e9dbd745ff68999000000004a060a9cdb3c2db349f22c011c4602bc54bb197d0aa88e189380b1861089a5d72f598849ffff001d2a7d7803","01000000c753d36f543e68b3ec97fe2e24da2ad35c664205e0cba00314f053c900000000d35c3220cce946645382f9d2ab420b12c83712127708fd550a553f699b56316c275d8849ffff001d020bd35f","01000000740e34e1de6e9a2833810c293dccceb2c76f2a058a4cb4c9a178d0c900000000d47e5015f96e6e9a9f64ac14d41168dd8704b4623a391d34e253af41551fc74d635e8849ffff001d02819b99","010000006a3250a2b4a0c4e040731b0f984dfaa05d293c33b79e62ae916c6c5800000000061816687844ba941c7b5f66887c4c26d60bc94fb29e7247756001a058cbd8e315618849ffff001d29b57825","01000000753995dd8adaebd7954b7298cf4bfd8c74c1d7896f1a516bfae755b700000000c8589b077394fa95018bbe4705eb1f40262125d7cb0f2a5eca2668f493b562c20a668849ffff001d1a095760","01000000dd81f5aa0edc8c98451c1e203f08471bc213b40cc4839413e32ad349000000005f995dbc7e76a825f170c6501de169bd5a792385f072e35904552acb9d3dd2f1bc698849ffff001d30e437df","01000000b138e9ba3fc5445e0dc66e6eaf7a45da590af619e349f480c828e01100000000ffb61e3af53a07759cfffdc83e9a8051cb2ff38e5f37d79cca3e418b321dc127326c8849ffff001d38e4c77e","010000006ad890a023c7662228ea6b352508e0f441e6de6a5bad486a900c14d10000000042fe60a582cc160383f7b35f424a3acecaaf97bc01a5900907317aa9edf457e6316e8849ffff001d03303e2b","01000000189f54b692374b957d077faea3c32e75f8b641ebd0a6bfdc19bcb1250000000040a64d0f2058ea6892694a5701ee89d56f0f1f1178cc23428a321b48d74c9decdb708849ffff001d31b228d4","01000000799c2f432ac357e8ea0d8b232e97b1cd7ce2c34a4a405a8496dab37700000000935d9c8c5c7a8db0ce24dc50ff9910cbf6fda16cd544b185652a7fd9ad2e310587758849ffff001db9a4b912","01000000c9984ba4a7185241a68a8ca46e50c04f2418842a5a9c9c4b57b511a40000000005c9936a2895fb3e2d738c7fa6d44bd25a671b2fb5b91d8aef79da41b8e8295210768849ffff001d1a134aa5","010000006c4ae0435ba081bffb619b516783ccde9113bf0bbcd1edf3690fa9c70000000060ed3ebd23fde63d6f0185a15e906daaadcdf7f45f12a6f0356468a55e2756cce2778849ffff001d87460e07","0100000061ad674782b6596768a5f26c7a449280ed0e9e0154632fe5dae9107e00000000064cc8f71bc082ef1aa6a182eb049e92ab313f851497d455b1ec5dd260753ef075788849ffff001d70936701","010000008b6e34efa2d20e0f480851287bc421b0b9ab26ebf44e9106a76536b30000000042565e65087f61f62fd6acc65aa8e0fe66102e361203750b5b6fa8c9621a01d3767a8849ffff001d0243de9b","01000000876487a7214b8760667a531819c28f130883fd7bb2830302f6ec6b41000000007210670907cc0a0dcf8be778c6f54cae6e5404b1646ec4963a9dcb4b219558d2b37b8849ffff001d07fd3205","010000009bbb36709ee5dbdb59102d0653610e9fab0888297259f2908868da4b00000000fcdc5f5f4141a934fc90a6468b6c51ca4277fe0cf923a935a3f8ec4b846827b2637f8849ffff001d13aee0fb","01000000593d45f7531d13cc5fa591c98ede4fa1dae92984515504cb10a34b2b00000000126872788b05aafe4bcda5cbc2971b7711b9bc9b9d5f002545caee4908232e639b848849ffff001d071f904b","010000000d392e8c760940e4797c426f8bea2a2f03110ba0795944787258db5e00000000113cc5ea600ea052571135403148eec5108bac754a907f63133126173dfb0483dc888849ffff001d06329459","01000000c8e1a2828449bad6bd85450c29fa7ded17517c52be0a4b9a901f83fb00000000b3a3d06ab3f9f63ec9ddeb15cead9f8c263aef3da7a3a7ef5e2f769617ae6fa01c8c8849ffff001d2acbfa64","0100000092d20c48b4798a2e623387fae11399a59fcbd5160872fbb8564a2b9400000000bab15d8b8eed9ec110caa80121f09435ffe16854c8f2dc0e3e6007b6bad4b310538f8849ffff001dc5b14708","01000000785fe26d8cbea1a3c5465e829b5d6d67d9a2b9c8eec9d95a3c5195ef00000000c45abf34feddb3017f60922192232c6d94ddfcb06bf77136e12788fcb8f1256d53908849ffff001d23a43a88","010000003d6a4fe207585bb4a9360084747848e8ca9b297247b40e5cd53d6484000000005de78766fa67579193babdb2eafe9b15ce32cfb79b0d6c98a4a5e4a0ca61d51ed4918849ffff001d428ec405","010000005cbf218a5ffa65d396278e8b9cfa52625f25ce2e6f58e222d729c44400000000a8b97353671ee2a6c63b01600b2cbfead256ccee30ed0ff14bbf3bb062e57fdb74948849ffff001d0554e331","0100000090a6bd0d8aca233c172d13f75ab9a8cb1458d732e65325ded2e019b6000000009855577b35b6fa999533350866a7688fd5b0a9c444fe850f905a26d53c36a00cdb998849ffff001de9639418","0100000075f5a2bd7bae994e5e956ccc5d4e2f52f96f390cc5f64130410a22ad000000002e69d9020f0663f3a7894474750bd11f021266bdf1722137626d97ae9e21ca20339a8849ffff001d2de965ec","010000000b909bc0073311d8c237e6b6810bd521f02c0633a47a513fee51907300000000cb47c442f00408f5ec4217b13f2dc5a16cf16c3a861e89e113f8dff91facbe7905a08849ffff001d25921e64","01000000474553beae45ec3ff4017f789222c5a087f7597a355868b5cac32bda0000000081bcd3fd167a65b50d00f626f76840bdea67857ac979e37f8dab78cc79ab4ef04ea58849ffff001dbd0c0b10","0100000025114cbcceee2754991234a89077281594ea2c8f04717850fd251e80000000001ba1974e2162cd8fd58a2e8fd6c796b12490f9b408a5cdd737432e82923338cbd8a58849ffff001d2c47550f","01000000d23f3e0dbb927465a96eb1c3ac025ec18b319acb79cea469137410a200000000ade09bf8405c71e1dd2a7b7b7f56ff8796cd881ce1197a9b8e599b94a318c60985aa8849ffff001d1ba996fb","010000007c0a02f39a42184e1a1f27ac47fd7e1370dab4cd866376aa042e34a400000000f13c0b5d9c8ccd4e66beb337c18a8432f2fc0df8fce01f2a67b91e851167bb8a05ab8849ffff001db1d71402","010000002ca28f8f78110387aab01f8e76cf1c95a8a4217bdcad37d168ce03f900000000a56bbda4baf3238100509d4872bfdc1020e000cfd6c699cb9acb917edd606d03d1ac8849ffff001d371b4ed7","0100000076226c5894f643e0372b86953389b4d7a38179a9612c1baecdbcb3a0000000000ded946400d8899dbd2ff9e91983d75604f479f6d00766467b702ed089109dc217b28849ffff001d38487398","01000000d779caba8777b9d203d8e2e82164158d997cac26fa73dd3762d562a900000000c4152342867a51a583a5651c763eae7455b25d32f9ae4842893ef88a32e903d361b28849ffff001dbe2bc100","01000000f5eb586dab6aec9bb2c6e92c8957571d74ee9c5b061b4c568abcf113000000002f8c9954ad5096a43955956ee04c9fa2e5993601432bcfec9903d5a626d8e74795b28849ffff001dade60701","0100000000bb31d7a5e55f3faa70f3b03c013c6d5af290df9f9c133982597578000000006984ca8a933e6e630b95b30ae9def8714bd37dbec4e4d56ceeafbd05138a0d0ffeb28849ffff001d78591601","010000008d127ec9d126bcbd28b19faaabb6ce8ae1e6b8e1f593990d8c6ac73300000000135462c8d81f817ed371c337850511787a20aaad9db3ab1aad4cb0769b2f51fd53b78849ffff001d2048e87e","01000000a0f8feac05c48dbe71f9f952d0dc9d6fa6a2d01428408790754a588e0000000070f6157bddf560a1d79458504d18dd433ec72e7fdb5daa8278b9e231db3a3d3256b98849ffff001d016dbe0f","01000000c69acabe391dd9a0fde9ccd17f7fccc7bcd0fe764acb9ab2ffd82627000000009c455036e91cac65f9fa2117f5105cfd9a781bec30966d33fa866af7694446a771bc8849ffff001d211fb1e7","010000000f75f69b915ef7a73876cb976d259d798a838dd7fd8ac7114d1bc64700000000d2df9bdee179bfd69b806345d6c488dd06fe223f31245d0b6bde6f5e2cbcbf91cabe8849ffff001d149b7cd5","010000008f3cad18d2957f1a840e47acd5e1e06e06686b34b84b1c512428109a00000000e77be44febcf032f09253e4714c14a9124701d8a05d1b60d7cfbc7098ae3394a4fc18849ffff001d284ec004","01000000a6fa4452d1362dea85cea4bdd78e5b906c46a7018b3078ca806df811000000004e835eda1fd706a98c9222ad0ac2ac49d8e447408f9ce52f37e283d408590df106c48849ffff001d0715f110","010000005d99144dd8eef852cfa8c26dc898072c7ff6f12d5d0551859497c4ec00000000b98b5aae705eec0e834255c20db252b27249f97c51a09e20b23f297f51878356a9c88849ffff001d332964b3","010000000ed4c49ec7a72d7bae64046031277aa607b469d393cf306ba890286c000000002926713c67f2be90a8ae7b3cd4ca54ba1f7a6ba9579ef5070b98a7457f9470e97ecb8849ffff001d38463e5c","010000004f0eda5d2a45ebd032169747b576929f715fbbdf08707a0a193cbf2c00000000b2777771ff20b3dd39ed3d91d7c850b08e0a0c5c905bf7cdc0dd5c202d24274094cd8849ffff001d2ab7254f","010000000e471c0b493c08a275a5f7f32ddadaf2675bd6bf3eab9d81e8dd5c86000000006c3f4989b820d94a35e5ee2b5bce50f8c96117c574c2ac976a66d719894b93fe6bd18849ffff001d3963df6f","01000000799106008943c769c81ac79aec484ae148005523ae860590a6c37e6500000000ee2c2a6ac281ef0515fea54b7999b342e2eda9ad0c25a8bf69fe99b576ec51302bd28849ffff001dd3521d02","0100000083c3f9531df6318ae484cd37a6eb91485f1a63f5c14b4ec9a89dd64b00000000160c7c54b729c70601bc090f3dadc5da57bc1d4cfd04e8af2880bf30273174481ed68849ffff001d05602055","01000000b16702b97754fb7c14830a52488b6283dcdd15130c43a730287580e500000000d25d4cce506ebc8ac27193f22895664c938ae10a15ccc4c17205a33b0a6795a690d68849ffff001d921b3001","010000005d14a3eaca31a2a5eea8b1ae9b3a1f112b87ae26f3ab286ceb5bdb9d000000004cdf077f4ff99d7310cefd163730c55c77ec38a98577e62fb782be193ee17413c3d68849ffff001da39c8b00","0100000068b1764f713c066b14cb129a0ed2bcf38f00791d0b1cd3cb42a6467700000000c5368d9472d2ff1428a8e1a5686b65eda5315aa4bb8cb7f34d13ecb581d1478a67d78849ffff001dc464f201","0100000077807091644ffae78e99cd5c686ff9d5973d491e50eeec616fe700f3000000006a1fac29ab5ba8382bce83e38a72afd64766707fd27bb7043e8dc4f7b5ed5445e1d78849ffff001df2993f00","01000000daebfbb83e77f9b1d8262a914cfcf361f06432fbd971005a92bdd6d70000000048ddda31809de62cbd1b5d8d932cee28a4e14c5942b5db206b0b3979d31d622d44da8849ffff001d0011cb09","0100000046fc1bd68140bfe3dcc9f2f4403f1ae91c43b0b81977395f019f4826000000002a704b69a6bab6ad2fe2c95996bd5f0320ddb52722509caaa46026d6607de5fb5ade8849ffff001d1f517278","01000000025c4fe09d7ba7e46db9e583e7a6b209c9a92e64e77b2db8aaa8b61100000000056afdd919f98089680ff8bdb8165131b31b7fd8d13c90d5192e49aeec0d27f62fe08849ffff001d273eb69e","0100000042e5fdbc68c7d162ec31da1bfbd50214c0b0800a349119d48b6a0ad50000000053511fb50f29589156b5a5109f6690096659fb101315ede38f2e96541ea5633efbe38849ffff001d1d324e39","010000006db9a8c419e864e4b1dd9b947df01e840f74bbdaad7eb3d02bb5720d000000005544ea855192c0f93c568707cbdae0106197854f863afb6479aa1207d7f7eb4495e68849ffff001d07c93cf2","01000000268ab1e47bee3c9cbc09f5a5f01e2ed2c609153574ad47b2ada8aae9000000006d3d0922ac813178206884024bbaaa2ca4df05950a105b9d9557642987e59addd0e98849ffff001d36a8298c","01000000ae3742b289b133b66bdf1e11a591918a5f3815db64c2afa2b7bfdd0b000000009790a7b2a9fe0c19ee35ce7baa273daf584c395c2d20369bbcf89996a7048d6236ee8849ffff001d76938513","0100000060644da2dc46a5e051c64665d24aa47dd6cb9e955d91e244e23e4ffe000000000a84c3e3c9bb2cb2076cca55c722ce232eba31bd73903c89f645ded3e0a9114e1aef8849ffff001d070d991b","01000000e7e6ec63be85b48c17feaca12113e8be6a4d34449bb85920b157bdd30000000072a097f043d7cdc33676fae7fd373f8c60165f648d318f64741af55d81f4d98350f18849ffff001d1741eeb8","010000002315e6290c9d1b27fcee0d74d98b72688532630ffb72769a339fc40400000000f6fa98dadf2bb8ce0b18095eb51ee603139a541217b4a0ece490574bd6c7639db5f58849ffff001d23508645","0100000064fb55438fc014a1fbc374560a65d304446a1889fc8d65c9497168f100000000ddd2442d25f3fff28cd0a7d7a6a57f5c56b9e587a11ea7d0bef79321cb3fb01ac2f78849ffff001d085268f6","01000000a185a1ebab073dedc50f9bb0009eaf7d8ee67debf0d02de7ced7f0d60000000074840bad70c399187f20a0bc50878cb2baaa3a92e83e1d2b8fe5a13a2f8ae6501cfb8849ffff001d235c120b","01000000f7c5d84863b9dc2b6c291cd7603c19a842c00c6999f7c6604e18ac7300000000d7a21d8a1f8ea19a96d4d31f479039dafa7dba9eeacf0c2ca5e69c926c825c92a0fd8849ffff001d186595aa","0100000018ffe81d7eb2924fad0cc6de22e0078734698cfed3aa9928735d81a50000000066e22278e07940229f245b96b0dbe7dcf667e41e9ec44f846d00e721946b862578ff8849ffff001d2cda8485","0100000000f0c139d1bf4fe187d4a20415531dd6a71ebc59fa5660717e10bf24000000009d1a5c93afc324888c0ca5be9bdba512f7bafa614b7b08682d2cdd802b27a5b675018949ffff001d38ece1ac","010000005f01f5409c922cf135616b03bc9ba5ca71907708f70c530edbbd5ac7000000000f17064dda17bbcb5e328072a767f7c6f69d5c51a96cad4092f1f59e93da8572ac028949ffff001d36937205","01000000cd6e6f248429cd3fbcb39dd212f85bdfe02d495e0a915a33a852a923000000002345983628d591906923763e14672dc05dc3c2d3bade1d52d0abcdbb3c82b5d776078949ffff001d182eac22","01000000765da084d6089b26ec7acc23dbc93002781aef679d594dce81ece809000000006868a66162cf770c88e0debee02f6f7ebe33ce2515cd11acb2a5fb2f0cd79a60970a8949ffff001dcb14960e","010000007ae298893bbcc6940ceb08dcf1f992fa0f2a6d0760e8ab43e10d3cc0000000001ded69a92395663b39de810416b771e77cd780de3ec4a83863fa973529b5ca1d220d8949ffff001d1fe067a6","01000000b1aa9dc395c0cf99c60282d9e2e8c74e514ca9c2ed9e1576be6b9a1c00000000e1b811622a8109136b37891212d3bb594b4daca9293b77082efbc327abc53d5a1d108949ffff001d07a30959","010000008790df436a97ede9b395298b4c63ad7bb41c832ccde46140a913985c00000000d20987b758d3d20f636453ceceeed1340a63def7c4cb63165606751736335b6cef118949ffff001d8f766d07","0100000061bf9091ced0102b921624418c773ae90bd3a91a91301b6bef9e9189000000001944eef82ec854d127d9170fc48e9e1962bcf190d1a224294e663406578b0fd9eb148949ffff001d17f8d743","01000000fe2c7b5ac233a96fc41349332b68e96a373b357eca0e476570ba9ff500000000d72486e59688139097b736452877d2a599676655449e26064ceebc56b6d8364a71188949ffff001d375d2050","01000000cf2b4753697af37ff7333e5b168303b59b379722a43b688e79802a3b000000005897036772aaaf234c17062730498714c3f035729ea096a21206205a6b583db2d4198949ffff001d4aec2505","0100000048d2f5e8adbbe34fc5276525aeeadb6f936f1dfdf25dd2b9a6b9371f00000000b5890258ef12620d68b050719161d9b646bdc9059a725adf0bf62a525851f958371e8949ffff001d1d9875bf","010000001eb8f382e3ba5bd4966f5616fb285223a65372f2102b4d15ad06e9030000000044c2f5d0dbf1b1759060ec73ce785a40f642c34df4307726eec7bc586ced39986a228949ffff001df99f9504","0100000042c4f18bbcfd6b94d53c420e09a09d6a673929ceaf3536231662bc340000000028192a62f5c39238c1d130a31e1e2710c1788a8d01a880f03a62edd202dc2ca3e7238949ffff001d292e07b6","010000006b794a902a98d9fd4a2a19458df29ec803b0b798a7772dc11e17f5370000000088863b463d7aac6b741a8c8ca0f4b572b706a9f84f6c7fc3a5546ae2219532faf4268949ffff001d24cd8ef4","01000000086d47e3a760058e47ed3c76e8da48d22b31a906ecfc5253eacf831d0000000019e0837246abc5d833b23ee719918838fcf89439a73c70801bcee430de189558d52b8949ffff001d2da0a209","01000000c6a74d2c035c4da410629079cc372119f2f8553ff37f855e76a03931000000005b682d76284f8a33731734ecc36480fa9d8a72140dd36fcd2b10c49eb6230e96bf2d8949ffff001d24917939","01000000e5234764720fd93c7a0cbd4e2db8e1f23d988eb08775dc24c248f4f100000000adb993a219754b8b906053c500db990c7b5674b851bfbace269ab86b218977e5a0338949ffff001d38031e7e","01000000da31b9a7a3d2b9868c43998b940b3b5bb239b34da7e2d07f93ac8fa90000000094741fc9cb943beac3a038da2d14e4b758ac33a320e4ec31f040d1d87def1d3d83368949ffff001d11fcb80d","01000000b9562f52f528feb5eb56d7ace05cd6dbe12277db3a4a5abd987efced0000000079433ab1c5496317e3a189279063987ec5d8a0cd87c605dac78a37815822d0c180398949ffff001d2c584a07","010000002fd08b873d2c0b4448c1731e4667fb17756e650171aa4785d8f8ab9e00000000d82d999dea900805d5f0932ae9e43b181889532064be9f05eea02868ed9d8511ff398949ffff001dcf0a4101","010000007b8446f0efbc5b3ab3ef41c6dd31e7d9d1be162c73c27c6929b26ac300000000165dd961887543214cd1b9a6c55670257fbfc2a069c5b8393e6820686e8919f1853e8949ffff001d317789b5","010000001a2880a5f2ae6ce1998d8eeb9a287d7a8f6ff9b32680e1c8fec4c6e10000000021fecf367afa0a63f2f2c57d05c89a2d1ff4b807c0519a3778896ad8fca6e8a738408949ffff001deda3a207","010000000deef1569f98f2136437be5ef0df051802ac120aeedda8b05a38e76f000000007b8ed6dd3f8234fa7c8bc2c8b09ee29a3a079e87dbe55d3ae46999422ef9c1192c418949ffff001d24782a02","0100000012961dfa71729d8f75e0050f81ada9606bee502bc937b0e133e6e6fb0000000034a31596e4c7965d3c901b98ccf7cc5c75373ca275c883d7e642ff6f96dc892227448949ffff001d24225a5e","01000000e17d587ee5a1ad0d4915b1964a9cacc6c7593145523c400395f9c40f00000000bcf52529c75fd3e5150748ea08f50165d844683cea567ce747e2a1affbc9335a95498949ffff001d2bac9154","01000000470a7c2de7372214af2baaa654b634a3004401ae9ab0939b38c7debe000000008a7cd92c60b841072f024d32132adb2633cc61c5e826c03fd1cd270c47d1899aa14d8949ffff001d20eb2ade","01000000d088f093f718198019f25f101b7476ec3e5033af20e25a6c1d533cdb000000007cfddb115136717936e8374cb8250696c154212cf448151e08df021cc50b34a4ef4e8949ffff001d14b4df02","0100000071cb4fa074e868374b73cf05117a9332d0b50ced0b4bb6cc1671f78500000000dd813b20fe299a07dc0bade1976d5174b01f4afc8f4e58851645893c6da0de02fc508949ffff001d1efba82a","010000000ad9b8075132be2db6d8ee9f465b178e8e4449b88a52c89e202c9b0800000000d77bcaee3ed5f8261bf309cca86c069dccef22223ae42039b66301efa159c529af568949ffff001d32b9fbcb","0100000043188df3bb7c51383a199a1ae3c42306a718f91b1ada3d7823d5670400000000d732b09ae2f6d6a039325a6d69b00eda6c441b69daed8865d3b6268c7caf4887775b8949ffff001d14f44249","0100000039fbb1ec41e9810867a7b1fbe4ee0bc3a7e348916e4f9644007ccd49000000002f7d173ea88b989043fef48e272e74803fe055f40a88380e43304a6c9a196d87445d8949ffff001d63917206","01000000752400eded802bf1bb95721d516b1caea488f8c2280ead470319bc4a00000000e1357800bca9a619c5ebc53bde26741921cd363abb3a1f58b728229e708c5cf97b5f8949ffff001d14263792","01000000507e8349227644d613aad729013d19a49787156163e1842f2f278667000000003fcc0d9d615ba077549ad5670b0d8fe202d4d794f56b1b4b1bac6fae04490096f5618949ffff001d1732ca82","01000000a43d02c9ff80d90c8508c69d2dd211a2bede6e78797de4d1ffc13f1100000000261cc594d65b149b9755a70e03cff9dda61088900daadc73f6d1c513a2b825571f668949ffff001d373257a8","01000000aa4b09404e4c07ed00bbeb847eea14db06510f5bd4c44b749789715b0000000031e72b4e751b5a3ce997d5226d6d3a110a37a804ae2361daf1fc357b28bd79ecef688949ffff001d097da496","01000000fd8031bddb79a4f8c742d309e9ad700da8c152cdead83e3bf37155f800000000c4f555602f7e6d8400fd173bb3b68a9d749777a3aa29d848b0462b41cfaf35ab866b8949ffff001d25f8bacd","0100000043f743ae50cb8b0b4cca26eb7713ae8aeaca4afe93d212a3511d4fd90000000016e911810edc1fcfff3b746f7081c08cec6ac31586d4bc1b850e9bb0c52459493b6e8949ffff001d38124642","0100000047c4d249516b8ecd20e056d0be241a3244438cad6a6b5c77c7311e38000000004f4d7bd5d5993d963786d70f1f380060a0a1926a6930c43d591c82dc2a0f6bbcdc718949ffff001d31060cdd","010000005cb5ea0bc3f481ae9a2fef12ff246e2ab85a96a8ada6d59174d28ce3000000001b19cacdf35e4d1f5845b74ab55a3f784721bebc23076eb68b8657f6f8689f0743768949ffff001d1cd6cb5e","01000000850cb54d6c83cfc654804620c368ace00f3232c11226d8f0402463ea00000000497eda8313629fc73cb9420462d255acb5379c3ad0c234d77b98587776c2941e597b8949ffff001d36ada695","01000000087e6407bb6ca8f40516ec17c7b143377c59490bde4e0370e4067d2c0000000034d8dfe12c4d174795a8ddc1ffdf284deaa2f8549440875a2d1a9d1479c79fed637c8949ffff001da6538504","0100000021d1ef943684aa9cf27be53a8b219e05f719da02686d4a25dd1a0e7d00000000bf6fe202151483b73771089f16a0698a21dd4aca5964da06be27f6080cc3c416fa7d8949ffff001d0d983104","01000000b2f33509911b7d0bf7f397a854fe2037a54e82b27a0e1c439bca9d940000000021866cece4e4aac2f649dffc2ef9861ec564f342bdb03cdac76d3bfdbd68c2b8b57e8949ffff001d3911629a","01000000f7fee19561ff4ee48300985c1c3de45a55216efa122d9122b086d893000000008f8753cb5523af6bab823cac896d8dfafced35593b0d8da913a3db480a3446daa1808949ffff001d34c2d234","01000000bf6a52ef5504f8ff0f005cf71f39df72e9a3d8f0853ff89b21352d5700000000d82224f8968c4fadcb6df39d7b883a38e60f481ff9af8e7163749f32a1754c9736838949ffff001d151b0e53","01000000cfb975f8e09ba2ffc45c05d1e2dd50b7680300f4f310fb9441e1e5c8000000009a4f2d48f613981fca686a04db41f2e809ff89aaf045b9a0b0a2eb4b9628301b1c878949ffff001d2267f57a","0100000027e9fda184a4f253637469c2a8baa0aafa8928535a08bdb9676572b500000000fab28a3e20ecc1dc32beae8c0bb985fbcce95d943d5bc87481a78ecffdf99437ba888949ffff001d0592dec6","0100000089172432c9313d6a8fed98ab200b9267a32034119901890dbcb1c3c5000000002d36a916d0125f7a4f9092ad6f7121d02be78944e91709561402d87759a0fee9898a8949ffff001d0c1e8308","010000006f368f5243cdbd9f3a743d99a6ff71f7c59d7975108926d679fd3adf00000000211607479dbe7be7063a76a59326b83d6b38eb3a8756d8b2d1fc83b7307ac021148e8949ffff001d1f5c5611","010000002b8e22a969ce9a0963ea321e8a2eef3659ba49719c65a406e662eb2900000000fcf6ba6a52f3296346106ba1007e6afc11f303cf66ecef5527fc2bf7cd3541f128908949ffff001dc2fa7d05","01000000db05db0b941a92237d319cc84e0cd353c63b0ab96571406b18be210500000000495038fc366072b7695454a12f77b169c38246ea5e991b763dad82a2b93e00f1e1918949ffff001d0840308a","01000000479496f91921e7fb5b0b80a678b878369258e350f199d6300d2248460000000077dc16ada0dc705656c615ee98b0ecf5a3c123e23482aac2abf9849abed6da6028948949ffff001d334aaa1d","0100000007ff375ae238964165ea0b9442dad489fbafacb298240975b459bb36000000001dd55149169a23b12aabc4521152e69c8175b72479ecb0eff768594ea430495fa5958949ffff001d3541fbda","0100000039317f5070c4e3cfa142ed019528089ce1efbeb4c7223da9ebb95d25000000008dd2235f35bcb20b48c00eb95697f02a4c8394ea5b5a453d5d34b135fd564eb280978949ffff001d68a97e08","0100000068b2f635f047704169cc4e93d518b766214db370bb3c2e456b47a72900000000edbd57307a045d6894b3ac49ce13d5ddf0fc6914412d1cc07fdbca5f4340b7d0999a8949ffff001d166a8726","01000000e7d44fc554495a940a78ca27d4887f170aeb7fb6049a0fabd28dcbc60000000097e20e6e2869d990e6da6c57bade69d23e7bc7ba9aafa8860a68d969c965f91f9ca08949ffff001d24727b4f","01000000870ff38d1fef524eb5a4d0a9fc52a7b4eb49ffd15f31be70adaea83e00000000e3640ac8113e2ef22bf17bce4a6391c594ec81e5360e40e2bee69fab78462c111da18949ffff001d84ffc201","010000003806ba00b3a750c85fdb00dedc0653700c6a1678fb9204e3dd1b93f800000000f96f37c1b62f12e4f1e496fbc98bdc4c3e2e9d745925a2d74d28f280bd17992223a38949ffff001d2dacb463","01000000bc5533306760f806f2731300dbbe831211f71bf23988fe8cf21aa3f60000000066c76bfcdc98d77aa12e3e989eaac970457aeb0f44b49510d26fc20654b2a607aea38949ffff001deb4b1001","01000000ed7735f7342f2f8f179e7592c37e5448de66d6be6e8698efae6509370000000056191f44cd3d0833bb742b8412d906eb45a86f1e6834b4231ff376bb04bd57dc62a78949ffff001d2eaeb876","01000000188fad3bbee8a195910d89cb6a5eaa9f9feda33bf37e04a3748216f700000000668c36967ce8e34108dc27db897c2fea92b4f3cbebba233c5b619cb797e335ab07aa8949ffff001d3a21d938","01000000a891e8c59e7fea54a4cdc24bf467afdd851eb9cb1a184825f39807ce00000000ef0abfe5236037ed2dde35ec4103747c7057f81a62933374cd2094a809d3325471ad8949ffff001d36b12f40","0100000054153fec9f8cacdb28ed9a3e3dea2d811baf31659558e2309c1bb80200000000591c80c878514910e4cc37efc7633e99289d3dd36243d4f950302defc6186950e7b28949ffff001d15f18ca6","010000009179795d12edbfccb6801c6e593a91d36ae253cec6d1d5555282e895000000007ff98d25d2ae12af1402a9446c1d8470c87a7f2cc2a7f75b117e36cdc197b41a4eb68949ffff001d030270e2","01000000ceecc5a15008989f2fe781116dc152a4b0ec969964119b46aab9814a00000000020c73cfeaead2bca91404eaddb98b41038334df95e43edfd9fa6de182d23d7761b98949ffff001d2eb98b91","0100000045886d600cd3ca7b5449ce79a343ee208abcd469c9718bd2986b1dee00000000e6a47c6a0eef6f4040aefbaf1d817751fe3b55a25b45c430ef64cc1f6419b700b9bb8949ffff001d023522bc","010000006c7f1cf17c224141a6265c82d887c647c934f78f8fb37b8a1a771bb80000000062f59a7502ec54d71f8f518b8d2be5e6487bb21e979fc5d9f2554b4a762ad7ce80c08949ffff001d2d2a9303","01000000acfee43d50d0da0fef955437c94058bf4de61c55135b8438a489013c000000007b3c22343b6ca62a0e224ca5bb0618b544a8a6fd9f5954118e8447746eba512bccc58949ffff001d9293d50d","010000005154e9f3f01247492e829fbac583e07d4d5f71187c1d2ded85b357a000000000cb3e4b96c353f10656695acb8461dddd68a58657f69cbe8c7551df635ab9081f54c68949ffff001d0736887d","0100000017bf17f9190889db311f3087fb6eb64fc29b5a21e2eb41ec42105d6200000000044d9983b30d338c3a74e4dc99598a021835248f0d4e970eacff96928f97d6158ac88949ffff001d075e94a9","01000000137614137beb672cf8974ffba6b87294d806faa418256c01e8b4b522000000009e561e3c0148413883b2e867643e4f4bd26af1905ee8fc2b52aed4e0df5d72ec2bca8949ffff001d10bc6b04","010000000dd4b2b7635e9a1024af8619e06f4c8f2a8e51443253778c600287ef00000000e2e7bd92f14dbb84e0dc5bc6962aa5d1c07bc489be476c0336bd26244a82ee493acd8949ffff001d03f7762f","010000003bbe00c029bdcd0e28d8aaaaf636eb42a4d79a3bdeb79a4e3e0b001d000000005b8055f96996cd7d68867d9127fa8f830398ef4c3f7a29f453c19a4681b5ef2029d18949ffff001d342645c6","010000006670b4c97ad542bacaa79dbdb0e25bcf8c22ba7ae960f510bb21ca600000000003cc0e318e26ee8956ca8e2e99d7a2a8305b60fabbd181664b4138fca45235deaed28949ffff001dc0248103","01000000d4e90abe5ec29516567bb2fe0e1d4afde2961276458c62c71ebb3e660000000030e2f235b7f975acfac5c6e74df864ebb8c801166c573efbbb707f9608a26ed570d48949ffff001d2c255499","010000005bf064ae1bbaa7e8118de7121c8773f9079b1014ff0e90368619e9c9000000003dcd08238c8d82b8532c2ce7b4dfdef0364013823f3adcd58d5798651fc66e3829d78949ffff001d1ea967a2","01000000ab533e59ddadb317bb7657ff9d62821246fb5c3c91e859535eeebf9400000000abdccdcd7bd02835f18ec000299c64a88319f13067539e7233c120f8dd39fdb90ddc8949ffff001d242aded4","010000002116d884b365bb57916633f880b7294520184831e4dabd4a8370f8b300000000052b3e11e7797bfbf586d9fedf8253ba0c57731244d68710bac12916ac9e8b34f5de8949ffff001d8e6b7909","01000000436e7274b1bfd6f3104ce456035db7afc3c6999f628b2e0060e4864500000000dabff45d3061a343f111e904e7b01e277ce677a55860ad648ccd4e7907ffbc36bae18949ffff001d19902480","010000008a4a640c7431f66aae1c31b104e1b3f44a8f6e650bc87d7491c92aad00000000ffbeaafa6342afd79bd556546c58cdf74bd6537172c99476790580fa5b6aeb8682e48949ffff001d340acf8b","010000005d17619f29649b7ce05c53e7ed7581778eeb23d5e8d8af44cd328f25000000001736c7be80602fc69236f13f2a485a013347fcc26289c28869ff1c07a828011e23e78949ffff001d8f0fa30c","010000008e8ad03b6623a8bb806ad9302f75e83bcceef9cf2f811e1146fa012300000000d676ab29dec03829a9e54c33989beeaee1e8085b689262b599a4b111c7cb156d6ee78949ffff001d03367205","01000000bb2df72102aeeab1f92715b6aaea5ccb733bb6be32e88c4e4c2e2f5f00000000efdc877190261b7f203609bd9e878472386f70d53c10b37d995c101695d6d99ea9ec8949ffff001d31909a43","010000001b6b8a106d856a0d94156ae0c589700d05110a4a78366cf5aa3f21af000000008742f24b163f9b0db4cc09420749269a9d83388a6dfef1e0dc1aaca1905dcfbf2bf08949ffff001dc68bf610","010000006245f37226920c349e884f022ad84d5daf9491eb417dab7f11ddfc9f00000000f22339442a92fc64e35e459121d875811b74e50096b7bd7290b4e9c6ec668e9ed0f18949ffff001d252ef2ec","01000000d3eea597255ebc7e23ac73b732bebfc3e115f61683a33f4f3e5ca0d900000000aff518066044bf890570987a187300fe3c100370fb1ad48a88c56b730fa4cca4aaf38949ffff001d37dd6242","010000008a36b48fa1eef13734c4d7f0286e9f15b605094c4c22a97822fcb5fa000000006f52d1b342396b73035a540016319e1e17bf7793768113dcf5e499e8af97340825f58949ffff001d99f5ce03","01000000de219ad026c111d3e8475f3d4f4990a62e12d7fc371e7bff7f0d2540000000006a0999f95f898214631245cc1108ca41f0c63efdc8591519f947d06f185ac13ca9f88949ffff001d2397c896","010000006c7d3dd0e5c7c4015146bbc9f0913011794ee069d436a30bd6186995000000003c530bb7597d8923eb81782a067a6eb7991faaca40975c27ddf1d87eded8e39aeafb8949ffff001d1d6a8185","01000000d4d5a55216fd1dd080137e97791bf2572c5a52b51ad4d867e4c33a960000000098a451206b15acf124b87dd808539a6e94b4439a537c5fe648c0a8e1d27982dc8afd8949ffff001d3660281d","010000005dc56e20168bee02a36e8eb04a3b1599658617c7ba32a62d9503184200000000862b9065de332b6fa834b5b05484a312c7d7e73d5d5d932c781b9ee8fe50772ab4ff8949ffff001d02ca3888","010000007419eb791afec21908cf0b0e3d00133f4b3c616787aa78b66246a89700000000c5e465bc5c5e9406aefd610a89c905b772cbef5ed0fc17006ebe4d58076c793ae3018a49ffff001d9ead3a0a","010000009256154a0b85e69bf06c213fa042610874d302a25c34e47f70416242000000007c54145072c497c5ee48a9d721230f178ee6e029308029373fa130cf802ce6858c038a49ffff001d3488314a","010000002e091cb1fdc92828596797492fee890be01559b2352f06dc87c7b5eb00000000e8e3ecea91706e314dcf8e977315eef84ab7c7e119fd988e76de9fe03b87f8e66a068a49ffff001d39337aa0","010000008afce0e6865ede2adbd86cd671aa050b2ae193a3c4ad9f7c1727b9b7000000006983b8409de3ba63e892902198b4c73b9fb0d0071f0d6537feac2dcf74726d4a3f098a49ffff001d36e8d8be","010000000e9cab6fe44d160a3642a51bf56b7064f01346dbd9d61253eac49d990000000094f0b8db058535c57df0477a70523226d335b9a48ce61311048895414874afc5e7098a49ffff001d80cbd802","01000000cd9e4f8be1cd8bf42007cdcc2f6a6176a51ef1f8dda99e4c76aeb77e00000000ca472376d6aa1618668dca7c3b03f97df2c41f2c16859a744072cef2bcf558decc0a8a49ffff001d360dd4eb","010000005e5d9b53bb5b2248da77454faf861722203e6c7cde46cc03243efe3c00000000a54544c0abc5d6f05133cd889935d24fea8e1a8ed9fe6bf16218ce543050d0d6570e8a49ffff001d2f45c63f","01000000b0f7460afcc852521003da2a5955031523f0fa742efc47058d93524b000000009aac7fbdad90c516a283bed9292e808c2305b164168e3d67e96d436c642fb4ba8f148a49ffff001dcac8d80f","01000000de91203783045cee6ac1ff3456966a14eb1456454eee4d6dce882fe700000000d6fcd2756081946c5250f5b7c371d4b730f667faf4a8933711821d1e83ab4141c6148a49ffff001ddf3e8a00","0100000064337f90166ac01d8d077f5a6b1e5c5707b81de0eec8245709c6adf300000000f4066d3271afd41f77c39258cb75b660d58df46568f5eb50e1a51d9282a0adcb55188a49ffff001d2fa81077","0100000019439da11bfffd0cc849324288fcb9420c06196137e10b433fa425330000000089cc48a562b7c22a90ee3dfdced160efae64c4caaa99c9b45271343cd57165fd391a8a49ffff001da0a3aa05","01000000ec8221421611ee8d3df24982a7e4ba523f45a4bc49cb08874afdf1fb000000003c0cd5c055b39f53ab1c50e57df9444039bc7ca73169ac5504b8201f78a7621de5218a49ffff001d04071197","01000000c56d3ac78b0e4e18f38720bfd9fa747eb004d678dd26b58f2c95eb4100000000153d4c224efbfe95050644a9a851031b04c2914afe42a68301993338549c371f4b248a49ffff001d20832481","01000000fe000aa8184f173d44e87acfbbcbb43e9f98c5bb63b29d5c4eb19dd400000000b3bbc8cf919bb8d4a80ed1073cc4e893a46957e866bab395de5b752316adac851e278a49ffff001d313e5384","01000000e1b837593d52caafe696dadb3dd972e2a4c3e97b8c6d456874513ddc0000000020647ac761ab4627e24e768e59bced065ba10dacd28a8b783c24deae9481a997a62a8a49ffff001d064331c7","01000000a0343c3538c82a0ac51a69229e6ba89c62e9131565d2b39ba62a12c100000000e5598cddd0a42cba34140841bdae49fae9d90fb6b034fe8fa06bb7ed35dfc318f52d8a49ffff001d08749a38","01000000b5e8b2cb192ed9dfbe89271ecf508470b3d9f5b9592c7a10fc6ca6dc00000000a9c5f5e5c4ed933ee29e47097ca6b4eb2a77b515104096df25d2e1b4218ed0669f2f8a49ffff001dcdb82903","01000000ecccc9206e3129378072d907084c2d2eb4dd47902aa9d42bd0dcf78f000000009fa4318db0c873cfc0ce6d6cc3d02789e57fe84830b343db0bc795f68ae37e2fab2f8a49ffff001d05500a68","010000000bda136b89ba0fa25a36d6ed81863c6f43965244ebe494bd59d237b700000000bbf01a70e661f7974490cde3aaf3ddac09584e44e4bf09e05579f4db7288310c84318a49ffff001d787ab407","01000000104b3b41947bcb30e9249450216d81dfe1bfa74a34dc9551c1dc164700000000343a2fb89709396628a5f94ccde1bf0d5b1e5fd94e389e25f6ec6de2bfeb548249328a49ffff001d14f30df9","01000000c2364b2ca9495f88383c38bbc375c123da079110be4e720646d9117e000000008aa2c360d98a52abf008ebef19898c26fcabaac1c22e773f76a97887c0d150a373348a49ffff001d53088809","01000000a54a0809af12ccce65057c7a41b8e5ba587ba353dda13a18c35be37800000000a349161e8afaa8dcc9b48da67a9b1c3c661a1765e6332badd153c04d732a0e8009388a49ffff001d2ed66b69","01000000d9c25beb7d78728204ce524989dd863d25eacb8c768ff4b30a30b5c0000000000136ba7715e7ae22c46836f924af5291dea4f96447f86f75b03eba1712caf2aed43d8a49ffff001d1c328889","01000000d9d179b75c9e6a78c213ed28afe96d62805b1ee0efbc61060766dbe600000000a1dc7f5e55e62120d54958c6ecd40c93bacee24e58045721a23a13d1c9d3772d47408a49ffff001d1e3ba502","0100000028f5bafa65f463e12956dd40285fb01e96ab778ac52c26b9cfaa9e12000000005ecc870fb6481eb1d1d02fb5ef38637e4192bc5bb2ec3aeddc6a36ffc196bcb344438a49ffff001d2d15ecf8","01000000f488605cf711aca5df1c0621a5aaaf1d0391a983f21672082781747700000000d4733d791603e33f5834ec6f96d3dba3163271d2ff65d06487a557182bfada1043478a49ffff001d5c9f870a","010000005cef3b38a8726bb88d363db906655b3c18ad44a7d49e230a5804202200000000e59f86c29738913cb94c4537904b3da894686e55077105544178179f7096b8b428488a49ffff001d177d2dec","0100000030d2651d3638dfe1defe3660218634e1b08ac095eebe99b83c7168570000000036a823efb2e8811b9c6ab5d9ead8251526e4b4e4dcb14f2c5b48cb54272eae5bb84a8a49ffff001d218c722e","01000000914de94b106a88f155b8bedd3373ec67298f90e34ee28a3105308b2f0000000021bea30bd00487a83b7c5f6c6f1ee2cd77379dee3d73ae2bb9a9b14362fa79e1d34c8a49ffff001dd103c609","0100000016f630118b7fd9e9db4df369e33af5ba142b5f36a8253ee9eba6253200000000e9df39745016012e8639076ff4051bf898772f82a8407c0ce265e3213d937beee94c8a49ffff001df6bb8700","010000004d24cb49c0f3bdffff0bac7fbc8ae03ecc88f345c517d7c5d379142200000000a055f6428cee27b700e582e4b0bb083b5162600110ce295b5ff682c9e8490d49dd4d8a49ffff001dded65c04","010000000f422ae9a972cba95b5c872f99130728dd3caec5e55b596db51369d60000000049d6348df4ee49c56bc4e8526348c8a1955cbd325663f2384d3dc2ca51fef7d9e64e8a49ffff001d45c19c02","010000006d688c73f6910723a1d1d629d270ba895605ca9eb7cea89c5ddc86b100000000ab304dc40c4f22616c5497f8ffdebedf039d423a1c99565eb84e745606a0130f4b528a49ffff001d20c574a3","01000000e469e726724abefab5ef2da8bf39b78006b2cc8f72d0374b43298fed00000000dfe33a3a8e38e406329d51959918bef91aedcb304c6228800ae0e2773bf940419a548a49ffff001dea4e260b","0100000012999cb73c3783d27918ef769a8e742b54c8e4f7776661feece2034a00000000ef8191e2bd804622daf2ab916435a4883776dd5ae097cb9114b323bc263d872072588a49ffff001d240f4eeb","010000006e3f80175697383bb45bd13ca223d95844e176832a14c5ef0492762400000000d4ae82d35c83b696ce8c7a0c4ebf376d469f4f22240383be561db5903374dfe4795a8a49ffff001d2e52b927","010000006a703ad3d04fb1ddd9346e3f1f88a2c149e53da2a4a6236d56abb8780000000001043f5d30b9f4b9c4f3781018d2a1cfade0d8dae7e52358d8df37c437c87525535c8a49ffff001d1ef5e7cc","0100000027fef120a7f8366a8308bbbaf7830f89afbe2ce17d1248302e345d0400000000958bbfa944fe0fb52606ef40b1aafea7145bdb7edb68ba34cce798d9a374a1a33f5e8a49ffff001d3070d740","010000004b08d6225231d2d8b24872c519b58967322616a453c680f5380cc5370000000066d0837082362f30fbf4e2761f93a25c2365a1f604f3f1cc2f320085dfd0785cb9628a49ffff001d14b30a51","0100000007579bd028a457452c3cf21d3fa13e3f44da5a53fdd3a0ce2fb7df3a000000009c6f500e5ae2e3035ed052b849bbd3dc30e7d3ad5b672dbcfce194b6f5a9478b53688a49ffff001d2529726d","0100000085e119ba4602ca5064349500472f16c9f1bdcfa8fa7279e2428f307b00000000f5df9b8d04f6d6bd5450adce9274049aa1b5a5456865f8b3afda458a7f7b872a546c8a49ffff001d16961c92","01000000edbc6ce112e8789abb8423821aaa812897b1e10641cfb95e3224a89000000000dd91a53a931f9f4760129cfb1fb49067f88769e822bb2cb16a4ab5d6378e40fc486d8a49ffff001d086b4104","01000000e01cd31cc951260742285fd9db9c04bb17d413bf05bcf5469a90e6b300000000a85fc25e8a4e6d320b524d6d816178435475ad0580fdb735d69413d6b87807b4ea6e8a49ffff001d096675ed","01000000d1ba8efb463d60326b96bfdf9dc0118567a99a20cf8db8356f903f3e00000000e738a0cc13a378ab34422cfbc65c7ca0131ba5b93d3ccacb08a6d313b7a2faa2a3728a49ffff001d1e29068d","010000003c620f2568ab74dd9a1babc7b6b8d8677652740463162b07f833e52f000000008a11cc0af6690b5b9eabfb71ac89ab2602a26a1558722197c0c2ce977e41e6a16f758a49ffff001d286a5856","0100000019ae06bf410e1410ba02bb00706392d996bc1d559bd8d65c6e1d872a000000005f3b11f344557567c26b671a6ffe232330c98525e126add5157833268b440032287b8a49ffff001d083d8a7e","010000003f9f2e15ad10d22b5a110cdba92c26c28b2f7ffa0f0768e0e793f112000000004fde7000d86f005cdd84d681e3a38152da068579519fe5114bfed2627744448ad6808a49ffff001d2a818c79","01000000127089f764b0ffbacea7821546397685cfb0ad7c5d24e0cc8e79a4460000000028056f3cbdbfd2a247e75c70115b9cef81adbb85927bfd7081e8f7a5dc5b469e11848a49ffff001d385a3359","01000000d0be1ff0396eb64d9c35de182e869531526fbc2599af8a5e6c525d1300000000e760e3c871164e9d641f622baef313f598abd3fdb27d21a4d19e2cce58bdf65bd4868a49ffff001d25dc228a","01000000f6d9f37804c447dd297d00963a2eaf13d9f6afd255bfae8fe66715f70000000041798fa4b2924f6196e13b890a0800fb288b5fad0472e4dd92f6fc2c154d755cca8b8a49ffff001d14f811e4","010000007a5d264b136d4bcd49b1935c9e52f498ad94a87dcfe464c0bc39879700000000bc7defd1492a13726aa0ba27b082dff99bf4e6fa102f0b330f92400a69c5a74c8c8d8a49ffff001d16b3a3ea","010000000292f186802d44b17cd2ddfa7b1b5eed893ec7c3b4119326f03ed89300000000c25cfb62883b4a881072e5955575b9756aba1fc67a9995c9c0a7b5d004f2c589a28f8a49ffff001dc0c49b09","010000009d0e1b44b6335bb47de01bd5a600602bece22d750add184a23d6bd48000000003c44e78b81f00efae154542b162ac4131cc95c6491af80bcbbfb5b16a7959ac047918a49ffff001d0840e9c4","010000003249f03225239902df5e1f2d73708e7f9d7470b11715f0aa54f307ea000000006604e863a7f870e1fd6b21c67507469933dbc8beac8c10da1f54bfaf009c4acd7c938a49ffff001d2656261d","0100000066a439209ea9398c4b4de3cbc5939193051480d542374fcda188a8ad00000000821628f382d1f0c51535da8cb1066e1fa962c9c0041c87f46c13244295e306dba4978a49ffff001d38415e6c","01000000782be06fa7c9b265ba781fb62a68e77faeafdd6a05404e3db9cea3a000000000f83c035263f32db5c4a2c9d150eceb1068de288a8cfce6b848fcef88c71a493ae89a8a49ffff001d22954f1e","01000000d32894f815b54a5feed067d3cfe7e35b0e3939a74705e946732d4d870000000002fe37068bd470084a94fe3d23baf8513f3d6086c5f2dde88f086be35c4a86f3a29d8a49ffff001d3a93aeeb","010000000717c6ea4d99b81b4d0d403d8ee5bf3b80e51648a0b58dfe6c20ae97000000006d30ab46575b2e082b2ed1a8f7773aa456b4d5e373dc64a91e71e36ebfbde8568ba08a49ffff001d18584017","010000001a6aace0c54dfaa70216861d58807d64b96827754507d47dd10c8a1000000000aaff088884562cbabb76bb20ba0dd1fd39637305555b143767b518c9ba19b08afba48a49ffff001d1cedcf42","0100000076f7b72a29c200d578a02c11bd503b3c568ed75b76663d085e18efcb00000000cccf96ae586c90568bf46f5ddf0326445d3dea834582a0e10b547d4903031233b6a88a49ffff001d1fd6befa","01000000853b624e97a9ef8146d13438c4cec109ad8cda502b013aa426a2f2000000000004ad5b8aee2315b3366634b75dd5af51e06024bed01148f9a665affdfde886224bad8a49ffff001d37d2ee2b","01000000de43616f36764b03efded21ae7a2633cee2b4940226b18e428cf661c000000001b74da533b361758c2f6c4e7314a57d90638d4ca4251557c243c681d2734e75c0ab38a49ffff001d049d4527","0100000019de00b82dbb880b0534454f4ee1d50fa7d2b9d2f0c80d20a4d6d6f1000000003e1399314803b4a5b046dbd7952f5bc12491a530cb9edde7ec60176656f843538fb48a49ffff001d3810a41a","01000000039eb2f03637265101579b50c03877192e1a905aa06debd2a589966b00000000a5a6d0dad51d022b0bf1193d0dcd7a581bc78978e68b5fbfc674f46c2d668f4a6cb58a49ffff001d3715f902","0100000015b8e1a99c3db388d7591c747084e19e3db7b1e77f64596be783a09a00000000dee13c93193c6de3585788cd6f379a4ae3b67525c3ca3262b5881020d1e1ac77a7b98a49ffff001d242b532d","010000000cfd2db228dd715fd81dcc4ecd5cbe1737c325a5296cc367587b298600000000aa53c63d270c750e8cca54bcbac5d09d58b646ba1951e2096f2bf3d32169769e1ebd8a49ffff001d1c5ca166","01000000bb301e7b6bff011f3c683174b77149f29ab5f1297a14800d767f59bd0000000029fe680abf37268e7df5725e1d8e44ec5b4f4e943ea05998e6cf13e3296d7ef9d5c08a49ffff001d228b1c7b","01000000b55bfee5f662222cf0db2b9de9fa822ef1a7b3efc2f864df7115931c00000000e2755acdf8e90d2bd55a34656fd0ba81dc7cf8e2fcf75122b38e0d746f5978ed1fc38a49ffff001d2e41ec06","01000000f4f0c65c0ef95d2dd51b7a54639a024816fe4b2804bd98bf36eb140200000000056acd245c39b80eb8f6c09af43083a1c9863200743086695f01649a3ce6b10c06c68a49ffff001d3a1b0449","010000004017b09182c6cc2cce3a51fb3fe3523df1c30c7cb2a1b525b3e1e5f5000000007dc60a09efc62a338004cbc33e4db8db2727a3a554cdba1930bbbd6d1603c267c4c78a49ffff001d380c9c21","010000000c679f0438e8f6ef7c3513e7513c5b75c2fddbc128b62da2cc00239a00000000961b1d0d743fecacd9b0747d7a673f126a068d793c2f3334f82de8d2dff770201dcc8a49ffff001df3973315","010000003e02424e391ec00722402d182d9c73e75c3848dbdc6cf7348f0198f300000000e39a19210a960cb83a1442ef3a274638a767e074d5187dbbe08e4cab4250143aa7cd8a49ffff001d2c093e86","01000000913e18f57476b4a2fbddb8fe81b1ba2c1225ac41f52bd58ae152dcbc0000000099fc7b6f672ef009d5290d335342da3bd1052cf26b83aab27b7a10cb2527a7a8a4ce8a49ffff001d013d7704","0100000007898c5f687cbd11d75ded5bd0be2db36c296c54883148af7e0b475400000000ce3228770b882e537ac15bc019c65ef9cf0beb6df02e3793068d70a0906cbd714bd38a49ffff001d393fa0b9","0100000038178020705ea6852e355d955542684e3dd5668d99bef6041315835a0000000027f9e22af1bba1d133334768b76b6154fcd807a2164c7ab695cce7b8aae4919c0fd98a49ffff001d29935ed4","0100000044c944ea5372926af3b58bea2c73ab261fb7fa6aaf5877d8309e4ede000000007faa22b7f246bf16a6cabe8cfb35b9eb2ef2ca3e9e3e640b05a8a27f48fb2cf62adc8a49ffff001d98edf30e","010000005d841bb428feeef8964a642e2eca3e7d677bd823bdb7be065c5dbd6f00000000a4fa0c7721e43bedfdbb6e2dff985ee7a0681a70db1d1edbcc5d22f664e4fb1c7fde8a49ffff001d344c8226","0100000065b3864f233ade3acb83baf977448f4e5de5e342429c741fa41e38a200000000ee9ae4c109a13f2cac06e456cecebd139dea34f7d8efa432a5b37abd271f0558c2e38a49ffff001d04fb1f4d","0100000004eb5aa7652b176a1ec96c48fe44dfe468dc38150f128b895a8d8d720000000050cc910311e2a0885ae0f88327a3a68dc8cc5265aff5d26935a481b233f4319da3e58a49ffff001d4ebff108","01000000f8897a000a75556302cdff69261b56cf9f4ec00f4b74496116af06530000000074277f6e01374e6ec76b95fcab256e7da02cbbf12a753d86a1ac16cd68d03a7bd8e68a49ffff001d02bef33b","01000000170ebe801db23362c1728313741c018177dff8fda90275a5b2a77a6d000000003ebec93b27b231307c87ea5014773c669f600a2f0defd91de1e1b51f88eaa7884dea8a49ffff001d35dd2af7","01000000314bfc3ef8183ec2a5e4fc0e45c389252024e71dd632ed9d6537bfc600000000adc35156ddbf323115efd014c00bb2a66d971d0955174a76df9ae8e8b9f3c00fc5ec8a49ffff001d24f18ab3","010000002bee921506c70c5eded155a92e5b819a5d66e717f82006068262141e00000000fc6a5887a50b714b7722e1a8dd8072ab4cc98b18e6b8fccce04e46c0e5c025dd78f28a49ffff001d01e4920d","01000000a0abd6bcf0eacd3c8be05eedd063a5615c33d9c6c503e1ac20fdfe76000000003230f8df6d278bc1525c494a91051a29e801e010c5bdb57daf902c3bff526ba677f68a49ffff001dae697f0a","010000008195b57302f4a58b91ed24c25a317f3abb607b8b89157ef2e7b68c3f000000001cc5b71c678e6bfeb636cfef7bfa41069f42646a3729abf5d49d385ac9f357462cf88a49ffff001d23b3131a","01000000cb5a232f7b63ea435a286f5c5dda71c18db445fdf624fcc2f28363d300000000431d917676747649c34e9accaf2fbda7a1ebec9c7265f2292a75cea4df66873edef98a49ffff001d31a52151","010000002794ce3a7008aa2df40d1b71e7dc2880a7d4c60c5b4f6d07f4a6411000000000cadb05d3802352a0f70a8d3edd23178dc71b35e9e714a58690eb843349a9aaa39cff8a49ffff001d1d8c1070","01000000ae03b7d2ce58ef0ce23eea800e3609ad43d1726ac6f00c2d45c3d89900000000c3ddb23b65e36ddb11b714c8ae59ace51bdf664092722df452ca5e5865cbbaadfc008b49ffff001d050b1c69","010000003baa72b2dc8884307a7db43d4586e33a56c05e33c6fb235359c7812e00000000396e4149bc688228edf46dbfc65e57c653814930d23c47cea63b0c42e6b79880ac028b49ffff001d8cd65704","010000002ae695ad34adee5d8ca96e5018a2e1550819c972ac1b39a84f3dd4a7000000003098cb1eb9051823dc24e94245dfad1ebcdd37422ae9b4f0cfe48a114d6de8f86f038b49ffff001d32a20602","0100000008632c9a0f483c3675a4345f4d0b09e73934d23476a80d46c73f60180000000078ac039fc6dbed719cbbc3145a052ccec6aac337e82b7966379e78206fb8028a09048b49ffff001d166399af","01000000d9a27538b63273cd1ebfd59ff27d54cd12cc189efab03fdf0ec51a920000000034367980da8eb252acb09dacbaa458a7cfd45d7c5bb566651ee295bf326b326137088b49ffff001d018b9f08","01000000cbf2a8e9f3e9186ce08f6468e1d53b57b77e14e3d8e488ccde512c5e00000000a39b73f6428a204c1be5913092946baae0dee4a6cefbafef968251025df65716050a8b49ffff001d160fc14a","010000009b2e66028decffa1a3a2eb7b60019d4968863d77fc6f43ac7e04cc450000000021bde3b379b500965b939347c01310960bd031f243ee2bee9cfca9206bca46fef10c8b49ffff001d32d8bc0d","0100000013f24dc79041d018874475337c4c3c651daca262c5f987a98149a58b00000000a6bc61234cece73a689d4f05274b1626570e83a1f82f0f4572f427542f638fcd5d0e8b49ffff001d016651dc","01000000119d3ff97b484a22f0cc0c9698b928158ec7b5f5901b49ef84caac3500000000a5d47a0c529951d7f61cf38b8f5ac6a6aa2132a09e0d5997372d0e559592f6976d118b49ffff001d26b131b4","0100000096cecf015c3eef8ad79f57ee4fbc982f5757004752993efb42e6a1290000000080910e88a065fa0422edb1316df8561303bc4e22dbb5e093ad0b2c6dafd26c3118138b49ffff001d2a63f404","010000002a57c4eddb1a2b5b62caae4fbaaf23b96dcf4b61b4355a7dd44e037800000000b6a72e17b890403e31a079303226e9fb447dd7f90b05fe0d1222d6348945a07c78138b49ffff001d184ffe58","010000003c4f9a5a976304b82031ccb9546b3e0a2b1cebce5843abfb1d7d128a00000000b9637362816a9edf5696e43aff015be677a2184684a45f37429f29d9640eeb5290168b49ffff001dfed9e40e","01000000c6e41c7a6fdd7fb3940e5e02b4ab2d6dfdfc69ac32d0a987cb8788090000000070823e4981d00df51610ee66e82684433a13f410c2c02315e38b3282f9c5a872ff168b49ffff001d1cf018dd","01000000afa9d352f53c0cfaf9b54e3af2d56192c47b1b9dc3c18778f960c28d000000006a6f55351c1f9eb11d9e1bdb7fca3c73597426832ac3fc2a10b3ea12e337634936188b49ffff001d80a29403","01000000c896375d6045b58c8f438281b113d24763fd2f4d9509d203ba7b33d600000000ecae2695992342b61863dc0451f49081a10136ce7ae5156f91618d8938102384d8198b49ffff001d139bc704","01000000c1a8bf8aa70a52bfddb26461ea61d2e0eab21a57fc13b4a529d04e0c00000000f411a891d464bdfda3fd080b9c9d06b918b454b3ec5fdbbf54c058664a95d570521f8b49ffff001d2d47e698","01000000127a06d93fca4fca3d4d88f54fc532dfba501bde4dcfbbff711549a800000000a8e66f764d41d3458e478b7b6bb5f983d2eebeeaf32f88265f2f9e968d6f173142258b49ffff001d26efe69f","01000000a3763be045cfa07ee0aa3254bd10a9e40a20afdbfba5804e304c4f3b000000007af66db7e3cab98e3dfeb1fed6805851312ab3fdb939abf3e3669e18afba1c9bbc278b49ffff001d3fb77207","010000002e07dcafc1c7c526f166064ca2549275da3d770565efbdddddfb88db00000000584df451660f66f78d847242e4ba5becab01fa369fd794480de3c6300d236075df298b49ffff001d2c43c94e","010000003952ad01caa9af830d588a441a565b0512898d32c1e412e6d007d6c7000000006974fb4a305dc3d0e6a13538a64ba356e5a0b4b9446eb6cee39195bfb8b31043c62c8b49ffff001d03cceb50","0100000023fd33ea10c36747f27758bbf0fe4e03ca48c06995bf35566455e91e000000003cda6882b95e8315e1b94709ebfef0f4c81c891cd3a41522ad19df150fe0159d38328b49ffff001d2105fe54","01000000486e07a1db190cb5aeefe427a97b8045441ef0da724c33832e9e6436000000001155ed8535a7c19d5301721acfdd48b877fa735cf0759419089e279f87780210bf338b49ffff001d6ad41803","010000007478bde428b25450b9a983d70c1995622b50cca207e4bebb67627d4900000000b088b4356e5fe1ac1359486a2aee1faf9299031bfa9c2a66d2bf5b885d9e842ecd358b49ffff001d15dcef63","01000000e61704569ff1b1066887403439afe4360ac6db8296b48f9fb0c22b4b0000000033247166267fe1b5edee1434607062cb25c486024239095bd7b5f9aff8169289e9378b49ffff001dbef11c0a","01000000e3ff98bcb17f454b522bc67382d272746d5dc7a6f9f3b3545a2b4ff10000000059a7b50d2bfe0cb8f07cf0c0ea4416a785eea8afbf8ef9d29326a0e9c8aec9eb2d388b49ffff001d071dd88f","01000000f2ddb48493df4de94a3a568c6a96675994de983c86e8abcc0dc0893600000000ce0d2093528be204a0968e4e4fa5a09f0feed356054f51057dcdaf5c55ffcc2ccd3c8b49ffff001d267036f7","010000001d5850706f59e07beb9b64dac7ab888186f349a927bf9bcbd78f72660000000028142de12a9029241a08ca8fb162f97ea0466505c7b75d8e2c2380476c0f2df2963f8b49ffff001d6c7b620d","010000006fac1be918bdca3d35657ed540e772bb7ec226e69dccfe11f7fcebb000000000a9c2f32c9ed8888309e1a7352e3e0331cb71bec4eb729acdcb726ca41a9171d4e73f8b49ffff001d23744d01","010000003de3cf782074652f4a35a92a599a70f05620d44019947caf9af743d000000000ee0253ffb4d85edf901efbef63dce62656a73c4b0d3a8bbf9b9cb556b7d1b53b16408b49ffff001d291b30c4","01000000707b5813b21e3c568f490573272e67c81448e8b6ac98e730fe60b42300000000545b29180199ae7bad29afd82aa154899991fe045a8156be87f9a0835e7db78a73448b49ffff001d23222765","01000000592094d6f36959fc26c05211bb2d4b64206893dceb715bd8e600750a0000000071298c89d5fd0c3f75dd4ecd34101573401a5d9fc1b9f353335e90bdd55110f081478b49ffff001d21592406","01000000ee0c062498683760695434b586631dc11078d8753d1361c3f0a654400000000028fe36af21e3353872f53ed734ca49c29dd2309edd17cd8cd980f5a3815f13b6c94a8b49ffff001d5f54f20f","010000002f3b7fab0f589b18c192a4c076579e6d84775d562130b88c2afe498c00000000520d37c60b85281668534cf24f1d0fb88ed0b399333adb6bde42d79bc4ceafa7174b8b49ffff001dda003c01","01000000c3f8166f3ad35d11e9c6f12a22257b5c93881ec444891b776541e01300000000d446f2bdf4a8c3452c19a6341c6a9dac5d4b0f427d55e240cb11ccf9b5b42996464b8b49ffff001d33655600","010000006c5eacbecd3e9292dafaa6d317f347f50954ee27e30b369ca378e8f6000000007677b6ff2366e34da4cb4994cb53710ea09c9b7cb5c2e2a52e60753fdcfe9f4aa84d8b49ffff001d270bfbbf","010000002cec7177aae1ce4b049f05408906a60def7fc92d9525ca3899d3bb0600000000a29bad734c6ec76a7b6a29bfa106d83865d639ec77f58c568ff08c2fa095ea3ae0538b49ffff001d1561de71","010000005cb389d6df4db7f9ac66cbf35d8aa1d89109124d12ec25f0692bb10400000000ef393691ca2520437e459729610e219a66c97debba6b06743ae8efd057508ed3f9548b49ffff001dfc313503","01000000515b9995a9ccc4f403bef7929ca59af7d94dbae5e4a6b4e6ee1716a5000000007aaecfd300d818ada749e555a5085084be133dec13a2e969cf39fb1cfe8ca0632c578b49ffff001d161a6f25","01000000d51aa8a37268b611efe6aa21d77eb4a8d139f1a46a7fe8e72eeddbc7000000002b98eb6ab0c5ed36585945009cd91c145cb6a97b7af3c142b9b433825010ef020a5a8b49ffff001d22148d03","010000003dc105f0ad16be17b42904d15504b6e8529a647dfc0843e7e262a79200000000a7558bdf2d4850fc02e8277f7f085e13fbccaa4bd6def5bc2a1c313a94d6c337f25a8b49ffff001dadc03204","0100000091aa107d52925554729cadb043b6a319ca3ba7aac23309d095326ab200000000ec562246548faf8a7e3af9e2fa93725293683a45606491ac79523da4d45a611f1e5c8b49ffff001d347d13ce","01000000a1194c5bef08933d7591327a3f5832c91d2346d664a62c5ae4662c65000000006018311f785fd86030932a81057c1f0046d7d2d180e9e9e73c13e2a513bf866f3f5f8b49ffff001d1c6f442a","0100000009a1b3cb30aad581ca9cc27fa6657f7dd8e01b7988300b13549c4da70000000092a73f3d670bb7689052acce05b0c218bb44d41a20e6b088846f480aaaa8fee1f3628b49ffff001d2c5f6290","01000000a06e0e901944c1b7a80f51ce2f005683fd7b22ecc237b0fa0a8cf6af00000000613daaa0f73d82b4dab053f1613bb303eae99326c36aff38074e0cfcdd92fbe8a0668b49ffff001dda9b8d0a","01000000855d786bd45f41c7e0b643913df9cd15056a7f3e77d2a766b704aee50000000083a6a47d5e08be0e5d161873368f3dc4413a488af00feeaeae23f324bfb190a44e688b49ffff001d3396a303","01000000b99362bb8e5b04832a770f37c5ca4aeadfe88f53691b2689b102942600000000a488e8f5211b8f88212a9d4cff886d8db6d638bb08d1b5a084785f3d292af28490698b49ffff001dcb068f03","010000006a1c5b61e1b142dbf9046a6aec552a105f8b6f0999bda985998100be00000000ca23eb58ce674db8fbeb8211d10f7ca6f9827339bd4b4e15f0c4aa27212a9621556b8b49ffff001d2fc0735a","010000001b7d1507388d7a92d035dd4a9c39a9b84f31383538042b401053b3f6000000003b22fd94f88ac30815c8b6a015a22b3d424580c727c184161bcf002ab470bf40586e8b49ffff001d1bc46f55","01000000bac935caf12f8fb0ead516d7f9d03a9bf7ae0ed642e2658d82b08034000000002c50426116576f0cc34fd5ce4723e292a2c8f51db27461ea8ae7381ba8c4d5b509738b49ffff001d182fcf02","0100000046b42da06ab83ddc16b16faf733c08b77028713218ddeafd3afe967200000000ce9d3ef420bac6b740855b8050dd32d936465c070264f4a7dcfc3dc1ece6ebe042738b49ffff001da043cc00","010000008a057d539d5567e04425157e035185af1639ec6962ae6c7cfb0b361c00000000fcf5d477e8128f8ac31dd1e1fa8a117ef2b23cd9ad83e868ca99db4952ef1132a4758b49ffff001dd46d7706","010000003a63b23c9b08bf817ae809e88ec7f97594e564a74f611f38acde8b1400000000e7e2b2e558052c2facfdf4242e11bbecdf66cf971d9a6cae3bfbfcc6e926c0b3d0788b49ffff001d222ac22b","01000000abef2e3ace5f3c08d6975aecdceefb425d24256b2a2ffb9bbd3a6fde00000000cdb15701b834fd8b6365635660a5739d7dfdaedfe22b6db7d99969d4be65a5811d7b8b49ffff001d1c22d904","01000000ed9891dcdada44978481931e086be42fd85d90b23489ecd525efabe70000000047bb46e39c617646b98c36b5e77b7c1ca68f356de0c086e88d277a48826e1928377d8b49ffff001d1ed2646f","0100000057f7df646a6c3aa0ffd5724f96d313dfb33634d15dea1dc67b5fdfc0000000002e353cf40d8a8d211a51a776b192726ceed6780a90362e490dda7bbb1ecde8f49f818b49ffff001d03862a5b","01000000b16ff58decdfbad208e8090b13ea819c5518b7340ef4e7d9e7ab602d0000000001759330bba3ede53241a84441eace20c0e45139cfd835f9b745fcca7e666ff1bf848b49ffff001d5c38dc09","01000000fb9a870b452390abc1a7dffe8df97f958e02cdcd63c3be0e07173ca400000000bb5911d43161b12afc118bea4d5a64d1161e20b751b61d8a8f1d372c15d475a3e0848b49ffff001d656f7200","01000000a8b0e1c1e6bf80134da82478c138339524583b4d51268ed396b588a20000000025fe4cef39b33c244044408055a75c6b7caef70eb38b55e3c3c90edf58de7d7d52868b49ffff001d244f485c","010000000f9d9a0c3e50edd0701124ea4332eb660fdce15658d4af4952b06a060000000025e463fbebe55254388269138acba684cd6daf5590acb49b2d9da1865162bb429a898b49ffff001d2ff407be","010000000c48afcf9b653c2d8615df43230268245e283c242c1ba30dc5f9454d00000000e15b3551b83f2b444e54c0d9b75e15e2a60c64ea666c39e4834fbd832eb5c178a08b8b49ffff001d33185809","010000008ba3a834aadc701144629a4232de7b0479cf87462a4e64b7385a3f78000000008ae4629db8a61858aaa932ee3602d64c4f71892a354e7de693a9e8f12d83af3fd08e8b49ffff001d33ed38de","010000001133194988b277f1d286af05217d0b29ed49800ac7a3c6d8e38e0b1700000000565ea8c2ac3ee9942a8914e3344acca8739ce13fd6a70ec7e36c4e7302acf4bbe6928b49ffff001d1a655fb6","01000000bf7f043ccc2538682e5aedde8acb84548b205f7c700bae79e01b3a2b000000003f2ad11af8ec2e213c71e71d0d53e2731b71bb9ea479a4a100b12a84938d8e0670948b49ffff001d0494a938","01000000ab4ce4ae68d1a87a12aed9cc3c095f56ab13fd0a51537042b31fa7da000000004fd1469462f22be6edeaf4028ac9ccfc00bba4443a044691391fcad93dbd583336998b49ffff001d2565ebc7","010000001009436b6dd1ab385d63dcceb0ea0dbdb40610e54649e465304238740000000051b0ce4bbd9cf3f04d4f84b2662c0d59549ab9af5fac61823d2c1dd74fa3011cf59a8b49ffff001db3111906","01000000a6a8e155049c4bec15ef6385d78a492bbd6b5d3703f23c3fb96f3705000000006dcdce21c338dc3f374a4f04269660e0d2c6795fdf8025d9ad01d7c275572ee93b9c8b49ffff001d23afbe49","01000000f9dbec7c2b1036296bfd154c59383a19e9f12f93160155bda2501efe00000000f8f67cbf7f826ae21b68655d84b006d8c03101a0ee021ec2220d1b732df115e4dca08b49ffff001d30e2e1c5","010000000af049e4537a153e491f1686098a3264df26ad5ecba9038e832c87010000000059324a612c40310b3d354b95d3d28c2cf7994db4aaa2afba2bae623faa57817b4aa18b49ffff001d48378f00","010000008fe30bf7de156904cba9cf8482db1c4bb92105bc74171ecb81d3a0f800000000c485b384a814c360ab04a100807e5cad96f2d600af6f885dcdfe53f832aaf1c12ea48b49ffff001d13890b0e","01000000cba5eea905acee0931a18448956d187861b4fc31970542c5bdecd0da0000000095d3af3ae431e38ba9e3857a7b6e7e30349c51d4af17ec5d5bfbbbe1b38b6f5daba78b49ffff001d255796c1","010000008fe4af565b270b4792aa0569bac1a47655971b62e7a3ad27975b26440000000097d5e17f64a8832c363886e08a084b2af38cd5cb9a544a5c81c7792feda9301a22ab8b49ffff001d1b5f4ca7","01000000f4091ca9bbcb24e185c85b0b36ea4a2c0089a0b6b359800e4e8acbb600000000f7c688e7b9b4143ee6a7dee540c5dc05924416135cda5b4a9efc7e726567b4b418ac8b49ffff001d60dfc702","01000000954804e0c822144207ceeda4d9b696582cd9843c989aa19b7e9b4a8700000000463a18a77c5c6deaa525adc4f9e380ce8803e1be0da38a80b9f207b7e77c19379eae8b49ffff001d34a440b5","010000007565ce98501de663ef05ea2e8d0043fc94116d9aa77bfda5870885b9000000002a2b9f636a768e6205c3b6e659b8e71089b20c0ff1cf958c0d6d945994cc851118b08b49ffff001d184934f2","01000000051a891886f64ec0c6c950635e7a1f8cebe6251b30eef17fb0b7cb100000000057bd3f215443954d44061b35212dc37f659989399a4550c895d2d9d38dcd65901bb18b49ffff001dbf32cb01","01000000080fb5d02c8a3cd82fcef71d491dc8ee1063ebd73f024a4719fabbf600000000f57825c880ac7c1010b59bee36406493c2fb3e4077fc4a8d32e8e5ddbb4028cb18b48b49ffff001d208f49e3","010000003259cc89f707af1aeac6d70fc68909724d82265983511a070c159ffd000000007a8754ac25bb8447a2c001296cc8fbbcd526009268b9a962e8181c96bd8d28b3adb58b49ffff001d1c550871","0100000050d674c0e695780f5b053c5f4840c61f413aa5e4b04ab85523b947470000000078f40371fa54763f6f093c1595a104b92d9d751a5ea376fba265326aa81bedbd64b88b49ffff001d99676b04","0100000067a0a653ff206896cc50a9d191cf3b65669d4804a7001899679f2fc5000000009e5d04748ceedd29e85822b361845b7f1be9d3d60d22d668b672c17198bd4a0e9abb8b49ffff001d25bf037c","01000000a2b41720a40329976a2228f48333566512bca68b39973399c31c073900000000f6242b08367277dfcbe8cfe68ef0744ea6357b672525268b9500c9559fec34bbd7bc8b49ffff001d09dd9d01","01000000975eb827ac04cefcff0bfb0e7064e461e3752bc86fa060b1d2aaee1c000000008da883a355513ae76cf6a27127a15b1740816c9cb778cfaa95591d305a9d999c57c18b49ffff001d0580a1f4","01000000664d60c798e3d8851cefe2c6f906f55b268c08fef5f880611bbff6a2000000002c936a4b4febf0010b60d50022e036e1a9f92ab432894670a103986e574768fd0cc48b49ffff001d2840e08c","010000004b6ccf926f099fe4d2251b613cd7b511d84cd43c960f9d5d279d0ffa000000001dcf21583ae34e9e345d28d04c16699238ce5e9c2fd857ae84cde600e00f76e487c78b49ffff001d09115b74","01000000329fe4e532871e87ddd54ebb6f48a74dadf76295dbedf8dcc777d99d00000000fcd7d7a6891a6fac5d71415b30692c45175b5f9ffab5bef509c1411f94d470c199cd8b49ffff001d26273b94","01000000dabf630b05449502e21dc8b4efb70aaf5cc592aaf6cc8a6291baae9d00000000baf82f5963f1259317c917de3e0ff848e8a6a1cf3a83695a52cc53ebf9a3ff9c5dd18b49ffff001d2703231c","010000006f1e630315b7922be619b68cdbf14b210e2c6992d80656f59ff13b0d0000000057638fd4382b67f1da23d820e159f57b817d73147bd85602caea1ffc567f22b673d68b49ffff001d1de8278b","0100000087d2a11ed6b8b640def075bd57c1ef0fa8668d0d7cfe307048abcabc00000000bf39a0f8adfd5ff7fda34059b8041ee6afc0df16aeabd9cf00a924b20fc74b626dda8b49ffff001d35bbcbe4","010000001a352716ee65ed38987761a89364d10fae2adb2b80c95b2644aac72c00000000c8afd965b97739d2bb5ff9e3b8f8d6283ecb23cbec2e7c0f7aa96712d4444f2814dc8b49ffff001dc66e6004","01000000605f5af1d1f95daa8671f10ccaba1706a94990ef0e3e240c7efc682400000000840ed0b4280149a7a763263cb8c205f7d05ebaa1fea5da44c8619a3ce9f46c03dddd8b49ffff001d7da88d08","010000009fff708b3c23088437c632ac53abaa1669dced84a6e6524e5b09efa70000000034c5581a45d5356b14ef0e470b0269d2b22b6d0b383fd763b1387b0418249597b3df8b49ffff001d29cd87b5","0100000006baae73c7fd0cc3af98bf1e65e2c880abcb6a930e3e45bacde5c20600000000ee728724b7d382ad6fad3412fdc350e36fed1f6a0fdf961fef4f5228458fdf99bce38b49ffff001de8106c0c","010000003e184f60593f425c1aa5488c3dfdf4ec9b58bd42e05fdd5a768c6f3c000000004346fdeffff90be86a5c519a1582e2959936afb3f4318364494664cea04d3a9323e48b49ffff001d1aa14d52","01000000ae019b224701ac771991feafa8eb3eda69e0b81e3f572a4c64dad5eb00000000ad73205486efea09fdf15ffb66974fdb5c174b8a6f668567c54d208ff1ed9d748ae78b49ffff001d2ee8c915","010000006c8e4a5e1a20e7af63ca9be1968f03851b7358b25cd42aa6fd631873000000000e4c989c6fe01246ad43eaeeba20e40f89bbd37b7efa0c1663f742d5e2791c93dbe78b49ffff001d51e85d00","01000000a2a1d9b76be1211a48afdc57e454937eb527e24501e7cfade513878f00000000a4f1dd3383e900742dcd2aa9e92789e5b09295dbd90c91439af56cf6d2a4406edfeb8b49ffff001d17d4cf29","01000000df414ccff0412fe5ef9bcf46fe6e0ed3048c3dd04c59a131f0c4eae9000000009cd663cf5a9b5be4a9e6d5552bdf9ec8a17063cb7b7af8d4f2faffc2726a49d7eeee8b49ffff001d385dcd60","010000005c621dbd307f3b377ccd97c0f43862381b223f736d0f77a9651621410000000012e2cd369e00c0b4415ce8e39afcdf40c813a13d3404f459e3433f6537edf61fcbf28b49ffff001d05ca22dc","01000000a4852b72715c1427f77bf74680c2368c3932e71bafa4f94e469f6fc600000000bc3ae26a81b3dc253aa87798dffb638d5733f895b97e26f993d1acdd6d3e53c2acf78b49ffff001d14136d5f","01000000a98041632f054eb1ecb4627febf4f7cf4f58b04ea41f1d4086c91a170000000044445d8a35b412fb6e97476b72bb1b7bb1af7590b34be1699cd5bfa1ed24e70e58fd8b49ffff001d20a700a3","010000004d696a59869a3b67a2d117648b82b70214d397d90501eced5d0b0b310000000037aedd0d1ce53278578d692b36e994ff7770711f40b743a0bb3f69bc423db161d3fe8b49ffff001d149ff072","01000000579fce3c72e1a095ecb4b6633665f18d0deb3fca77c53bc3022e0b49000000002f3529175687dfee4edcb4d574607cc2b52c76509c8729f8b98bf9c17a05c4cf80018c49ffff001d7ae73208","0100000014102618502a1b6982a2beed085de4ab82e967393779a247327f284800000000346cbe241fab80abf978f564ca9a7ef68fdcdb5509b509672f085b18f854b88f0f028c49ffff001d279e44b1","01000000f4551d1ed17ff6a05503ed8a639db56826844ecd8160cb29aeeaf0d000000000ec765ca4fa1aefb9d1811ec949f4e3aba072061b15c23bb5970bb616ae88fe13b8068c49ffff001d36139f56","01000000af0e7c81b12ebb7ad3c80c56a3807937a1909c795380eaa06ecb7223000000001440b3c9ea11f89a3968a7365b84b23c68572292c2ca7e4b3f252d08379422f071098c49ffff001d22c5832e","01000000babcce07fdd148cb9145a77f41ad2ee6d529f0f0eddda56e6c0ac6cb000000006c3428cf99eac0e204d5b2ac67ef4a98819ba3c38bbe25b44664fb26d6c20ea65c0d8c49ffff001d24c3790e","01000000a70d72131900559ad4e7bef689989a1f65ea9ce9c974769ab69f2d1e000000009cfca87c4c855dc603e932ffc12eb28b8df3d8ab61a92cdb6a0f1e86c949f8b9510e8c49ffff001dd8a7a901","010000006715849d42bdf01962b7e9ebef1f6d5c5f97d515d3ea4cd2ffcfbc0b000000008f91ba74f1251185bc8acce8097afd91b22a8d1c3e30572a9abb8ad1767ad17b68128c49ffff001d2eb11b5f","01000000b550cf2b0619e5d7b6a18a211586c2b651a1895d3950c73b03d1c4fe0000000023942be779fbaae6525cb36124dbd34d57416c19818218b1a23de62c9b2e8e778c158c49ffff001d31cd5d2c","0100000094d89d4d87fd7e69cea640bc86fcdca78fbebd6a43932bbcd6fd8b0f00000000de3b51b1d2dd26f810b49a2ca50ae7ec8d800872ce13aa1a3754e03543e2cb3ec5168c49ffff001d86852203","0100000049cba5e15869fd3eab4e28fef3e5459b51a766dc90477df2a8c1a0c90000000029a9ee6786c4dabefadd07dfc42c6804fde8e3efab64ae4aee56dce735d0206cee168c49ffff001d37067a10","0100000054c876dffb7eab91502c3828bef751ea94d6754973984074407ce418000000003498539e77701636a09f67666ccbe5319fb31ca79dceeb2c46810a9fbf7be31007178c49ffff001d38e03800","0100000063cd2f9815a6d04f887e5ae58b9cd947a934f7122da07504f8e3f87500000000c3d5d94e61f61f6c075b650749fe7fc3ac1bcf211a189ccbd4ca4386c787cee8b1198c49ffff001d35cddb0c","010000004c2aeb79bc7cc15a44a9d08d0ced655f9cd4c5d468da37a1b4fe06760000000022fa0e78bba0b78e1b7013e27057d87bcb20d605e13aba42dfe97e38e0dfce2fb61b8c49ffff001d14e66d1d","010000001fd1ab5d17ad805d667558cebc44d74513834bb4e0779b876cb1330e000000002c3ed07199d38752f410bdb88167d5fef54333fabf4d5774395ecc6a7e9fe7bf3d1e8c49ffff001d2410539d","01000000deff6c39eb03e592961aa378c4e3f0a9989674e3efee955f306f627d000000001bd9ad3b6c8b212210d9fc83f5308fc06bb887a6dbad934f88b0dd364570470c06228c49ffff001d248aa82e","0100000061815f62e338f6292234d5c11d666d434bc16e9ae21d07245304fa5e0000000014ce791ed5c31e8961dc2a666f41948aef42757b2aeca2b131968be0ed33b1d4bd228c49ffff001da5a60a03","0100000091fe5fa3609c0e02c4b8fbc80c82fd9091b23764e55e8a3b271fc2760000000020c64c77187190bc13825520220a044211e81fe47819888a37ab3a7a84f8db4773258c49ffff001d2a640c33","01000000033c1a5295e4a4474a648bc360110cfd29fd5152b0fbd8a9da8c407600000000b067ce66b1616fe688600fc357bf433b33cfb01554390a115aa97a49b56ade31b8298c49ffff001d29b86dee","01000000498a25c87729525c93f26dcae8315afca2b81dcc3530b4a921eb6b6e00000000233f835cef489254b486e61fe562d26805feaebf64034daa1dedf095dc0e29b5fe2b8c49ffff001d1f958b25","01000000c2985934abbed41b91f528c51ed5ba17b827e2e6e730db1c6cf967380000000055c5f7908cfe246c8db2621e23318b79221f8a61a47335e12254271b91184b06582e8c49ffff001d080e1d34","010000001defb5e7b3c42eebcd83126fc5b225357e65819385cc913051c12c7900000000a17f3d283fd224fec28c9a7ba7e9207a633f4062f39594e2ba10db166e6c599c41348c49ffff001d1edf11c3","01000000bf33c7e3dadc1dd8093d90f419009bed63da31e08c8afe96d3a9fba7000000007c7e94a16e0bc14853b3ffa5c6d126d129a84ea2a6e9f4551573f77af95b1128a4368c49ffff001d2411f563","010000009a747a6866d5dfbe6afa000b1f9934bd7c93102366663634845688c800000000a00c99bf95274a17dda03400c39a36cfb171566dfe1b93365f015db6063e5739603b8c49ffff001d3868ea42","01000000e1a5bd427f429e9c3fa5f7aecd58e9fb19da02facd650f638ec7640900000000f4e221e3ccc8da85553c94c63bc38ddcef72a1d0d9df1b780b3b44e020a164edb33f8c49ffff001d0159446e","0100000049be0e8483c96d7b413f976adf2ee0d74f2d571647e59e878e6c5c460000000040ee3102a7cd9915bef48c7d9ed9a702d3e2e69d01625e5d32b66468959632f383428c49ffff001d04ed54cc","01000000949af63a5f23d1f6809ab3110be387b44b019d460a3b790bee67b8100000000031df6ce7d48c707f3b23344db7a5c1956f8fae7a8d639f39866e04c959d24b6bb8428c49ffff001da8b04200","01000000bacd2f2ee2acfa65d4d6df9668bfed766e4b7100293f814197283e8800000000872e4124077cf78a9efb427db295bb91a4855ac205a9540394ada45c2d13e6cee4438c49ffff001d055d8de0","010000004491e64731b6c09cdb3e30a3aa3d00d45be5d0b02d572b716822430400000000f0f74f35d8a5ec52c275d6911d522067b37fda20924fd0936641f6ed63824aeee0488c49ffff001d3575e001","0100000040f5519b36cc1827fc8a90eeb089f45711f2306d1c331b8e1c1b99a8000000009d4515667adc219d8ad772f5d053ea0da1e11c956a2f851013d5890061070138494e8c49ffff001d19862d49","0100000023da3485dcfc0a35a254548b1ba0a799a0db267617a4dcdde11f77a000000000999f4324c8bf6634b28acf037e973f665dde448ffd1c1d9b31989d7c3a1af7f77c508c49ffff001dd3d9a506","01000000242941d49e17bac3f95b89ded7a37b9017004a167ba54c2efbe7cffe000000008b9fe6b7fb6e540638379ee76ad19cabd3a4dfbb09e66ec4fa6e8c6ab5b83c115e538c49ffff001d0984cb1f","010000000af496df8cbbebffc0082d6271c000f2d7dcd16de98f7fd8fbf7edcc00000000acdffdc82dd8955a58175b240138f3c2fed7e211436e786f4a8f7ae84c7d43bab9588c49ffff001d0689f0d4","01000000f2a6dc393af2323256b0e7491c698c1ce9c096d340433c8da6857d01000000008529c2b244a11b634f0de6e5a72755facaeb5f0388f43d31049968a7642585b8a05c8c49ffff001d0619ac81","010000003c8deb33be8ac01288a323cac0c01b63eab3d35c3d1f5ad000b579b400000000ad3fe2aa443a00c1844699f5bb2639c758028ea418d80dca6dcfa325ebe60442c05e8c49ffff001dfaf38f0a","010000009c8f328fa51240b9d3ca1e4b4ce53a4a471eefad76da4df6e1682c4f0000000067a26d5da902d129bcfe9849cbf2df9a7ed21de83baef2500568dd5aaeb545f34e608c49ffff001d2132a290","01000000eca853235556c4fd68b05514715305d45a9e05ded89e735b3b81cdd5000000009ba2d470b716ec98248e7a481a7a79cec43946066b1acda01a3a54280eae6c709f608c49ffff001dfe874f01","01000000810ba50756f1e19c953b07f3b80229f20530d7c04dae1bd9998e73f000000000170a627c40d7ca40049e73e7abaeb6540cf3239dc35b882e51cbcb37356423d65b638c49ffff001d03ab2ac9","01000000f5e08cf7acc86bc98d6f47df9bd64d519f177a91f2c0bf0f5cbd0d7b00000000d50b37a0bdc01cd9690f030bf26cdf6134917f8b2df72e0488ae93b4fdd2a28507658c49ffff001d0102aeff","010000007a8008baadfbecb8f228211ea7fbcdea069aa5997d8ad7335744a776000000000c5c08f019524b4d5e77c3f7ca1b13b4142b93e615f617d2e98abf2945c88ce046688c49ffff001d21377a50","01000000a50366dc3cd3e6c3adfc6702dd1f3f541c61e5cd0338e3580e7bb0e400000000e091d6e44b6e8ec898cc46520e91e0fca91c9840eb430d42b16a5e6132cdb22365698c49ffff001dcbb93804","01000000158435e6a0d96f7f59bbc103a2bbd7d8b5c5c1518aeb16e8ae134fce00000000ddd5928a07fe54687a19e39b4c27892ad8c213b5ba06fff7d9b2612669834d0c3c6a8c49ffff001d2f558ad6","01000000026f65a95298b920ae2df32552d0c841a5dd53e43540e8762b177cbd00000000b4a91d0fd0f529e764b0112cf548ccfe0edbcc9513b4ceb0995b31de8441f086ed6d8c49ffff001d39afefc8","01000000f41ef73efdb61aaf892d0147edd22c4de76cfcdb7eef434aff25fd93000000006fa3053a12130fe66d0fa9dfa64cb99f8979ca6184ea642b03ba619153e1403f2a6e8c49ffff001d8bd1b900","010000000c7cd9b43da8326975c120c0d1ed2974e1b283ce55afcdb456b5e0930000000099dfd226cd2b391ca4b37006edd08285e3ae01b033a8b2de5778961763e1ee9a826f8c49ffff001d1de428ee","01000000a59d3510932c6714afd2ab88d1e755079fc488c8189e0607763bc9bc00000000929b156c7bb32a703830cbda03fd0f2a0f71ea97d26df4746a2f1e91980f9932b0758c49ffff001d183f935b","0100000091b3b6e3cbaf815f2d5dd11bbe155ee79177566d47f9e3b1a5e0202b00000000918e47a63935b70ebf5a44be012cfa0934b6b721148e9f4d79401d7509a548b29b788c49ffff001d23cdfaf6","0100000030e1bd904b7e611c952e5f8b6b0234fb370d32b05b044ccaea125b3400000000e3bdcc6a41b98900b7f82b13f08bd144c910b4f6aba6c1b1e416ea07215d74afb37b8c49ffff001d23b97c0a","0100000004ddaf7944996eacb847aae219dde612b93077f98d6c9870f20d1b9400000000fb96da2adb19f09b2778b2f4df7d8db4843691a5bf38c196c4796e7399a69b06247c8c49ffff001d1ef2005d","010000003200a320546023d5d5f7304ff93c40b4f7f1696f5e58556d37367d1f00000000c40a97cf400c47412d16db2fbcaa597aa8814c155d59346349c8bf9152b2f218a37e8c49ffff001d142f7393","0100000028034063c6c51a2b722732e2492d7c99cde34ad4e154c32c46911574000000007f9ff931f7fb8694d1aa3eea586e5df9bc6dce35016abc4a44b4a0be902b252ea2818c49ffff001d366dcb6a","01000000177523f3f2c8095028fb8bec6d36627b234fca3df28bd1ee97898ecc0000000089b3d759eacd8a87dde08a69d43f145ae4adda74ed929d74dd87e094b00427d889848c49ffff001d040363d1","010000001a30ad4153a0982661cc3ec8ee821337c08fac32742fd218f0f43c9c00000000cb08598306ef6893fd63aa3a6f39a789c3fefad31fc6d966bf5008838dcff1c023858c49ffff001d70ef2b02","010000009a20a563fe732cab3d43bd310aa4bb037ad3ef18983ea3d263ea69fc00000000bce9aa0257190b18b8022750f4b14286eba784a24694ae96df3985f90dd4f92477878c49ffff001d39ae16ef","0100000051d05de16f006346e7a7110ee4bf13b2014b64656be054137a19bf8e0000000018d08ca90ac22f2e4b705cd321c12fd5699d4f8ec99997ef5a3a2d09dedd28f6e08b8c49ffff001dcd8e7415","010000006664069092a9f7fdb8acb3b7a80ffaeff70cad5b0d080c07d749c9ad000000003d590507558cf7e28f889117cd52c507e8a3e7b6cbdb7717381daed4d41058f3518d8c49ffff001d2ab27a60","01000000b344d183cc126ab3f274db8bbdaf20eb3d5fcecd285dacfc2b9ea7970000000077f811c8306c93dfeb0a5533ecc79a6c2c5cc9ae3dd3999c6c87fa7a4ceeb5dd1f928c49ffff001d19737147","01000000222bfa9030897b6864e9fc6bb0d84de2fc089967209c04af7ba01f3a00000000f86bf23b95d397c737e07bd63fcfddf98b0d96af516c26d3fae9204635df661c6b958c49ffff001d2e8a963e","01000000d38413cad05044c9230f2227e2b8eb9d9a1afc8bc87a3143cc71a58a000000000313e4c6f465defa4f2202e80982ae630fbab931972b7df7dfdffa839b918937859a8c49ffff001d14f8081a","01000000cbb546f26df002e8c4d42cd746a102463588be161ba813977a0f267b000000007fe24cb7b8a6368d6aed984dabb9d95b2960e383f245cab05e10ea81dff6d190ff9c8c49ffff001d18a50401","010000009cdbaa79300814c017e10db531cf3ea335bdb428840978cd6a57a58300000000a85e3870bcb1528061e54f520b5551455bc3e6113008589785b6568dcc456b936da08c49ffff001d283bcce0","0100000073c8a61d51a0ecfaa9b91a446116d3414a338f8fe9828228fba20a9300000000d958797d7171457347b7c8a37e579323fd1615bbc0a3cc0485c3ae6ddbd22d9883a08c49ffff001d40051900","01000000d7b00eabf2a85d0eff656e51ecd88f01d4227f96a19790a8c500fb9200000000fcead9604e2c7dcae1e445788d48a8974418870160f781c04cf521848865cf22eaa28c49ffff001d3226cd04","01000000732b009ee6ec1404fb86186f0afd89fb2cdfa9b63940f71d7da7765e00000000a072a93bc6f25e19e0114bbbb105ea38377e58d9df509b75f4983c22e1c7af3a92a48c49ffff001d394529d2","01000000c580fc1a0404ff27367b4a2c14115f7023fd72e31afe69b710ea7fb00000000091a019021d2ed884b477b7df8257484691b09e76ad3077633e867cda7c9483e573a68c49ffff001d20db9df6","0100000099a6c60b3eae5e6c2c9d3d22698c8ece61f7ecc1f577c0f9c2356f7c00000000420adfbf679810c1371f714f80fda9b3134131916db83355e1b0686c4a9dc65bc3aa8c49ffff001d1d3d08e8","01000000515ab26deef1b4b35b85eb4c68bab4aff793ccaeab937eea7fc7915200000000657d8676c53e79ed1b78dad6fbdffa2af5d7fff9201a43d96aef85e5ed7e6fd813ad8c49ffff001dfba05306","010000008761da1006acd1fde07e7e9a5a8c0d5351b21cb0c26e49b7b7ffd86c0000000085e063e368c61d4e0a1116250b72e8d760657c27ec0a69cae7a78baeb3559e4f9cad8c49ffff001d2f1b37e6","01000000b8b19ae1429782531f5d599657080d4089934600c52796fcd771381a0000000015593694ed8ae5525ca593d8ade74ba36b74bc118b13b4c397d9a559548ca5fba8af8c49ffff001d373e159b","010000004d1f3c1e889a6508a492b6aa7a1017e4c9537fd4968b4a39188b3a81000000009af59c92f1e6f68e9c95a008b04b22eba8ab9c6bf53bf0f13a951cdbc0e5238d71b58c49ffff001d25f4d413","01000000b8796fd6e87e9fc3fa8643d0ca25e22eac06b7d16b49066f164dd98c00000000151eccc7bf6067a69def3a926650f2a077c46e4491511e91f6722f0976589f74f6ba8c49ffff001d03664a55","01000000b51ea381949c0f35fd25b7074d7b876fe8b599aa4935a95fbb310b39000000001ad48d1bc824e58092674fce8ce09282ac6bb7025f5d8856aa0e2139abdb2962a6be8c49ffff001d2bf97310","01000000af25a33a57cf8304c1725e51b6b29d9cc79964e7df8fe49bdcae95b900000000102a5ae5d838d669c7b2a0466207f9312546f5853952ecfb674f02e51a80bf90f8c38c49ffff001d099284e7","01000000dfeb7a2906ea79eb6d261fa57d76816a6305a51848c29bbab20609f100000000137e070ed4231b8ad5862709f6a1262d4500b1d06925e541bf30d522d7abd0e769c78c49ffff001d2e3b1ca8","010000002dce0249c0bccf0cecff1c7e4db4c2af10de98329046bb7549df0d46000000002f9fe298f0ccfc293fa3687664a2c27b062ac94fb998cdd17be548b20b482ea717cb8c49ffff001db4aa200a","01000000c22802e22d869250f96c1ea0a99da1f440a8e124aaee0d31adc6db3600000000725cd3b027202b18364040aef3407633d02557edb8b66fe1614fe06176ba576f67cc8c49ffff001d304f447b","0100000001671170335edd19b582b5d44cb0e1640d1cca47784bd0597c0a6df9000000009a72c61cbea430d873911551d3f56787166f4cce2d1c9422c3f806bf7f2071a616ce8c49ffff001d34c76948","010000007f073d3ac4ea619091463d5504b3779d93645a0dbac175c76807453200000000737b1c252f0b877dc4fc5fca369219c1c67f43f5e0ec0c01bf0e35f1cec66e98a8d18c49ffff001d15765e0b","010000009d25b670037db4618b2386146afa99027f90b8226ac2bac776b4ab1000000000b12a64a7f9de79281fafc62e2ebc7da217f45cc292109513610b736b39adf0a19fd38c49ffff001d16721011","010000001e9b99627e577b8065d6ec5d532c2d9d2ed97beb4778c42ea523450e000000007f7afff4834d876004ab397e22abddb61aff312ca1b00fb50966324791865daa89d48c49ffff001db9c27802","010000009cb62c9d2c02beda9164071791a28520cf864cf2c447124317313af9000000007773ace405b9bdea85cc122740a251cb881b428f72701e0e1769e8ffc8357558c9d58c49ffff001d78cdea01","01000000447b6738c6445e57061635aa6a735e0ce877fd008f709dcec7f31c3c00000000bac94a8ed111f24c596cf1126457227640337d16833a30022bd0a9ca821a0a18ebd58c49ffff001db012d100","0100000021043884ef8bc8996fa8f52a8005aaa78b26148f3022558af342897500000000af4ba8332189ab1eb1114b8c3112b23889eba56724002474050015320d02edcd94d68c49ffff001d21d41987","01000000404e889871dce7329285091ba7fb29b8d50ce6bd6c6e5fe534d4775e0000000084421aab1cab65a9c74fbf1920c8fccefd9c404712bc06d9b9e0aaf85f13fa2d10da8c49ffff001d29c54628","0100000016bea0a7018764100d78a4a8dfebc6376c7dd1ad2d5b1cda0086343100000000182e2c7576db2b62bef5773de535d6ce7481272a009e401a225e3b05ff154c5edbda8c49ffff001d227d8303","010000000130d5324cda2916741d8f95fdc8a09f98f50a4e6911693ec872b80900000000b01ea734686e414c2f0fad4f95c5155a44358cee0c0b32bfc4504f49aa26512784dc8c49ffff001d26c87dc3","0100000004773e6be4b9803a37a45f3184a834d3ecdfddfbadc61f0f4ac10a31000000002aaf0f9c30c98e258b863193918bea460397223a99e585dd9c805f7f83016efe52e28c49ffff001d095c7f52","01000000fd0215b566d865579bcda40d034f356c9a6adcba0b5394279327a4e50000000005c46fb3dfb8968b2cc607281af8204d93028546fc156abe6f9c63c8580b0f48cbe48c49ffff001d23c41190","01000000f5f0dfe4306c031914ba64152a34defd5f071c28079eb50a01992b1a00000000ad9fd25e1fced0773d01ea5a77d45f23f2f175abc5c27c4d23228e1a467155ae3fe68c49ffff001d1aae70c9","0100000090634fd674b2562ce56f0af37abaf20c3f8637f5c21c6cc4f10726520000000026346ad8fc0e962613b5b73a02c462bc40673b803216705591f7ce58e079c04d5de68c49ffff001d131a3b00","010000003d4984ca32dcea23c0b9b7dc46b3bae1b1ccf1536509b919103221bf00000000d7762b517c2f984f3ef54fce8558a6691d646dbf639d50d28d89832ae4110128a0e88c49ffff001d1674023d","01000000763fd7604ebbfec8dcf8d9eaf59fea8c13d11996c48c99d2e2e152b500000000636974dd1ed39cf6c2a95b571425827868e726ac2bebce5a93814aa80853963448ed8c49ffff001d19c76b4d","01000000adbb04425779dd13d0169950d367346624bb17b89f8529927939b108000000002e9af2ed84961a1c401b836bab070ab560c6ecc8a9f510bb48a6daa11e9192a158ee8c49ffff001d01ebe002","01000000b37ab46c8cd2fa7650445357d49512570cb550b1d69afd03ddb2949000000000ba3050bb56362ef05275c87c8fb0bac3367f699aaaafdf8bcca990e8cb40ab6c6bf28c49ffff001dc5d89602","010000008aca95df9960987ac1aab96bbef0366801fdbfec4744b28c73f844c5000000002030f5e787abe72102561fed2ae6d06df5936743b52122ebfcb8a4b6687f507bdcf28c49ffff001d2bbf1e36","010000005df2bb403291265886effffcbe5960201a22f704f1d818d3604bffb000000000a6a6cff176359d43cfe23849e96a06f843c61e14183c6e9bb1f06b546e314b3ee2f78c49ffff001d293e37da","01000000863685ebf6a555c5f6e44f7fabdee3e78f0b7b098f71d599e9371f1d00000000b3e00a9a20542cfbafc6268dbd4ea7620af4d05e0a51f183e8a5799c25f164bc52fa8c49ffff001d2f71d014","01000000d759aaed6787f61acba006c7a422d119c87766173466b2fe6467089b000000005b519ee55ea69708ba90745d4102f26944e744329d34c5c4d5409a688d580f0911fc8c49ffff001d03b6f120","0100000049b2ccde77ad4d865d6523e139fb54ee785cacddbbe10f8416360adf000000003301e1428728e0ae945c7d088dd2cc97f61a0509404be10be3edb9853c0d298c3cfe8c49ffff001d37073219","01000000246b4bfac634c2de8ccc37417a1de6a14df7d91fe743e4758b1aec380000000052abbc12604b50190ec85ed96f5e3b60ccbbb8e5f1b3e9f27f53d98c18940a77be008d49ffff001d18985562","01000000f9557573d6161e012634aae6be1b01f6e1ed4952e81c1f980fe557ce0000000042aff07688c93adabb7bd65844d7461eed813437f8d659e2a54cb5670cff93536a028d49ffff001d2bd6c9a6","0100000032ad7a28b892853b9718a2b086d9305dc7662aff83a0b4668ee0fddf00000000c211d2ed99748a3d4c74c1393543fe7ae7d9a262cec6cc91115787d31cc3f4514e048d49ffff001d555af208","010000005875ecbb544fa89d42aa48368d164e5321736725fe9eabd84ac6b99a00000000e3588d20158a152514abc4408cf48c3b092eaf9800f88190ea586118270acd1216078d49ffff001d31f826a1","01000000643c388df7e1cc321a94eb326cfcbe000ebeb836e7ebf57b7e2c3596000000000bb798bdb7790671cdc3ae4b408e85c2c4436d2430967c7034f51b85eec831ddf70a8d49ffff001d0660ab7b","01000000bc223290c725cfca0e65cc1059a61a5f3e8a61be4a1d87ac9702b71700000000a3c3a0bebc58143680bb98f45d389806f703f756c3c0bd16d6e17e87687b03fe510d8d49ffff001dac403e0b","01000000a7ceb7f4b0a6d3ce2d79d43fe6d331f2ea4597984ea0bfe159bd998600000000de3ede7d96c39f0de6245993cd772f8fbe59091665ed4ad14de8f119bbd9b646450e8d49ffff001d296e8cec","01000000e7035335ebc8d8273dd2bb0ef79f63bd90a919a8a708c4d7e817955100000000dad880981eade5b1050924d0fded83f183ba6f1280234d16514832c734f3be5350108d49ffff001d23bbb8c5","01000000880b2c9060e793a15b2b7fea02f046118fd1173d0d25737c45a5b5050000000060a8365fa5c6b1d046e54ca3754528013e30d61a6d9f4fc4ee9a7d8f9e57bab9cf118d49ffff001d1a44e86b","010000006b53fddb53c832d8cea16620f28db9abb3d608810a0febfa380cb19600000000903caa0ab1e357c556b52b67856a2f61253c1f3c36d3fe64e019d711117863df5c138d49ffff001d222291bd","0100000000316980a1d69886ee2ab8b9d787fcdab8cedfd54b2e133d62169ab5000000008a9b4a00e0e4a8da260d6a376e659ed85d35c396dcd0aaabd450096f38bd1679f1148d49ffff001d4c700503","01000000d3a36f09f69f38c14ed9c1c935367ced9fea757b225b2cfa417037b0000000007e032c0dc2da1f04241ad72d7d9e8bd0e964830e3ee331ff90b20b0ede8b0c6942178d49ffff001d1729a0c6","01000000d633211529d07a7aa2173c168a03bece9c31c9abc049e124c09e022000000000884fd97797347a029ed20ec1d1106b991937c27c1da5a54ce2455ad38a9ccd04f1188d49ffff001d298c8169","01000000bb1dc3d66f822bd26c06e79a865824ee271546684706af85ad8dd73a000000003aa0d911b05c2766a4b7eddb6b65e9877c527355440ed4e318f0bd3dac4663693a1b8d49ffff001d6e1c9e0a","0100000013406f22305a1cd44425e9caa2d07554a307048b5a647b802a0599c700000000d97f551ac96c3ae640e38355b784dca4c75a6f6de2ec8f8b7b2421e265f78974881d8d49ffff001d2d984b99","010000004819278a7710f7bbe9e0719636c1ff9085567ef4f72aba415e4df5ef00000000193abadeaca69f91337dd61d53eacb1b278726eb71470caa6ee1bd1f8c4b76fcb31d8d49ffff001d3f927700","01000000d5a57536647f1041e51d7e0ea4cf891d3bea6dd8bff0a6c3c78b58f200000000b4f64579d6be536f40556abcca3a994e3b9758d68e9945f8575762db6df693d067238d49ffff001d0270b378","01000000c2db44a2ef39492d969a532031e8540408b757c733b1e60cd8f3ac0f0000000022f20ef4692dffc7a30da0e028dcaf759f0efbbb84ab10136dd132302ec27e1a50278d49ffff001d2f1e2c4b","010000006e6f8f3a96a03968006adc01d5533fbdf818667b8452ace8ccf435000000000066019fab68e359aa3a7a624a472d55f418360d18e3bd8b734f639367cfd012c969288d49ffff001db67ead02","010000004e4e2714cd944da02156902411074a02f701b486b4557149897ee78e00000000ede2fd1ef59b8c0e6b4c85c0eba6cda6b70e9adb8b9846b13bbbe677442a473cc6298d49ffff001d18f85d67","01000000b533c41a46ea54f7485259e3926424bbb521210ce4ff37163723dd29000000003f3274e944279d64adf4fde001689268ef74f56aaadd96d30697d53ee219318ded2c8d49ffff001d2dc0f6ee","01000000a38dd89681f01943e59249b105d96b489162fd10addddb4661e592c700000000e8cf212b9ba7bcb2d16d48d417bab5e1088156728ba0d5709a0bbff5c9911757fa2c8d49ffff001dfd432f00","010000009efc44e423ed8a7a1de217e184fcb7c4be39ef2f6cf1b9bdd7d2c01200000000b5e246396f146c573ce268dd95424a0b82bd0a9846c8c63544363daf1f62874088318d49ffff001d392c52a0","01000000397c3c36799979756669a7d0579155ebe7d960d83563b45d073cc13c00000000050c437c546459161a2a932e714845b686bfc20cbb27aeb695548a3df82940f59e328d49ffff001d743d3d04","01000000a2a87d8636b3e9080c6a2aafaa26f91e547df28fb2d28cf0c41001320000000015643e8631dc5b0b668cd8c8cec3c7f1f4a4a66dc5d12691d41f644048e3ef6d27378d49ffff001d18558d56","010000009a837ef0bd50cbc0b7307b89aab3cd99a5b888099fea09522b02d29c000000005619da09b64c6447b2cf10f68e8817b9d2cf810da706a54460b1c06954b9da437e3c8d49ffff001d065adebc","010000008de2d1cee8fcfcaa1b1bf6ea7f7855677e432a71b72a3df142786c8c00000000937891e3412c11caa1affcb5c3497dbee16fec32da313630b401857fe48b0d98673e8d49ffff001d223b45c1","0100000095e910fa6281db282fbc8bc84ff006487c90d538368dca6b1790d607000000004cc2c173e19215b5439e1efda0fb0bf3c852d0cc9042e59475f51c38ec8b9581a5448d49ffff001d2f5376e8","01000000605a0593b6da5b8a24fbe783e2bf3c36fba5fd9cfb3d32d73c7dd2ff00000000bb063171b99224a85d0279344ea7374e9801f4d2e4793b412a7250d4635f0d1847488d49ffff001d29ac4efc","010000007b56e1a677b0a676007e87fdfd427443dd30e6c2a6096a28809a765f00000000ebc674d24a5be4859195eedd35c7d777492b702fbfba5a5ec1f21a4181dcf4d8634d8d49ffff001d23695c6a","010000004abec4f345b594215ff51f4ad87ae1f0859ca214e2bf9d9d234210d50000000045fb00f60a48c6e00f62529a02cf7a748ff496ae1ce859ce8da991274cd4c7e928528d49ffff001d3292f268","010000003c743710b440d14f958cc28314d3be74d59435de8d21dfbf340ac710000000001b0426cd081d781046deabf67082014064a3230602609b53a0bc0cf9882a5719bf578d49ffff001d377de79f","010000009c6a3e6530fb38dc93f2f94e75f33bdca2b3c0cb1d8b4f7d7bffe4cd00000000b031a18196d8931fdc6ab853166bea286c6d2a8cd2e3a8bc70d30b68d63c85c4ea5b8d49ffff001d29504e1b","01000000bb602ff1d6571c91a97f3cbf8a27bc55ee8683ffec6522de1437668f000000000e2ed7034c3834fa26e94fd6b971e5c30bc8a374bb7fb0c8b2559d36ac04efe65b5d8d49ffff001dba895504","010000002e8a864c46278bd560f03eb0222dc8c162a05d3617aade28db52e56b00000000190e6fff944916845a85344a144a5cd947cd874e83c7a74b1df34031b9c71b07a0618d49ffff001d081bcb71","0100000071faf57097b3b9f1866ec670f4d4feb1071d6775b7b15fc96caa774e000000005afe148bfb5d3c32ac5ea08d0b654268b484a884e6f298e57d5642c9cf4c4b28f2628d49ffff001d3cbbce00","01000000c02c060ff577374818e7cf0400ebee3733016687b1f83808abec31e600000000cf39e854f9fd96abcee3ace1b47389cc7260a1d9fee66a12a58d75cc6b999f2394648d49ffff001d26ecb8b6","010000006400687f75b2d078848f0c6a4fe6afb7d6e3c6089f87e30aa4bec4240000000011574fe33d1cc5baa38d76dc0a81d2b990ee57df38adf8c2c7065b0098679ec020658d49ffff001d1ab89601","01000000bba8f95c66d2ad4c3ae8a03b0917ecb50e92bfbeae4aa0659a1eba910000000042def98f23388f4125b4b1b40be7501f49818ff2f1266fecf6b861f947bc56b6f4688d49ffff001d204ca709","01000000c001aa162f46a5f8a13b761c9ce1dcfff79578a43c918165a9433f3c0000000044af6449762922b9317a4a9a3c635275382d57391b0d6cddfb0df37c213b859ab06e8d49ffff001d204ff120","0100000068749b7b8a86d7f4e84d7b545e5e74b8a9d5bc0b25691eeeec5d5bf8000000006a4593f676ee1fcd48bc55d8f3f38da3d05e2acf336acd138610ba681e49308ded708d49ffff001d2a15ba69","0100000047993521ac6347380e9c00e2941795fbf06b2a007a1c9b12096239de000000009a65b048ddd377177dd43f36dc79332cea3997c4b2f1b5a88c645ce7b8b2eac4d0738d49ffff001d1575161a","01000000ecfaaa53882ba34932228294a301a0397df50c22f002c5dfb5e92cd700000000c216db55fe6c1bb3675a43e396785347fad719141d63d3b8a5a1a8e6153799d4bd778d49ffff001d19ff7fba","0100000068619dc7c7b5cef8a89941be25afbffa53410affcd78bbd8cfaf0a0300000000494275b288d2946a79c0593b4b303c964b757e7b3c3755e031baf1ceb540d08754788d49ffff001dbdc5a502","01000000c8bb3c9a97d2a3a1e8bde88085067f1f7c8a6cc7a025f06731c9bf63000000006708a8c19b2fa7ae27bbeec898175f6ddb6d4b2a988f2565d2f53b311dfaf85ec5788d49ffff001d381f5801","01000000ccf95a94a5943347f1c66f52ab1e7f5c856af89af4e50dad54b42571000000006465af44f8d96ef99a3173f4f6376099a5d03f632cf26a817714cf48c332ed5ccd798d49ffff001d30613140","01000000f09674090354a7a09d75bfaa9f3d3c4b42ce8e5cabf33de756af03c700000000daadaa4b47124495169be2455834c6f8a6faf010ab03639a58e384d1a7b251d7407e8d49ffff001d2f42973c","0100000061faa071b8fcb3e76c317a03bf55eabceed0901bf865ada7824073a000000000db649477d09f325fccf5f7af1f67afbdfa1e8acdac22ec7cd1aa052f7387aac1477f8d49ffff001da5792403","010000009d2a87710a4b9021b27f66ff7df3592d5e34e0973b795ce12f9a2f0f0000000064d161aab13ad4c1d47973700481640eda1b8f681aaba949a67d59c440de0dab0e818d49ffff001d59e65a06","010000008d8a4df1f1ba81c06de594be63d136837756051dbc6043dcef08b52900000000f11bc44fd30fdceeb71a8e67fbfbf569af4d11fb3f142691bb538bf9a25f799946848d49ffff001d279d505b","010000002c61f0f0eadea15552ba14052cb513f7d006e296f159ad5c9ce9d6f400000000a8fb47760e9b0ba66b00119fb9a4f6968110ff9cd76410114126c4347b1a54f4d4858d49ffff001d36845d3c","010000000552b33f54623d0ce749374eed3426fc8e5cb2800494d3374a4443c8000000005f957ac090317d6ca92d43764d6f0df436c97ffcd3b710e7bb9ec33f73ce6b0b078b8d49ffff001d216dbf2f","0100000010fd73ddcc53627d8a1f7a7631d9dab563c36746889c46761069d1cd00000000c4b2796f6ab318edea30f50a53290fce1ab789dbd693440c94526828aa4cdeecd18d8d49ffff001dc9486808","01000000d4c907eaf310f9e56064ea2b5f93d55c56c83dd020f84be80e9959f800000000badb6314b649ec98110a4e10c9d96fce6afb14add53a24379e64fc9f0e626480e2908d49ffff001d290936f1","0100000077e962ad6059cafc8121c3f78ddc9a0ad3950dbea376a6ca8d800ddf0000000083b25443fe2c2072c2d5aef93acd1c9010a2980aa4055bb069ef6b0ae921ea0389958d49ffff001d368dfe67","01000000df20087f64a4781c13ed73b277a8a32797f5d99091b14fb54e09f6bc0000000041d35b97605e0ca1a9ac6d0af09e0dcb9698835b939b77465d21b6413b7c5d4da8958d49ffff001de9162100","0100000000a42cf12ad13e6954d2e8a9bedcbb23e00ff30cb71ac4c58c11a38b000000008b7fe67ebcbfbf15b3d5e0be0517d8824f5ac29ef1a2ca83af9323bba6a08a9f99978d49ffff001d215ba616","01000000a490c2fa35ed74366917c7fb31ac9f244871725421482538998aa96000000000ee53a598cbd5301affd065161f4ba1e4b1d343220ca75c151d403be9ce992bc7069d8d49ffff001d15af5dda","010000009a071ce8ffdd7a52ef548ae957d1a6c4209960a7c39d919e1aae69930000000028ec5d8f21a04d4d4c7b5b197629c90928948a234a45dd914f52ea7dfc82a3ee059e8d49ffff001d97dda604","01000000b6c764b1e0eb86e2ca15f4c0ca26a3491719a106e54fa09974772db4000000005403e87adf0fb3b37293be6cc403c80acd6ceb399fb78560adcbe81f5812a498c89e8d49ffff001d282feac6","010000009778e190f32a7def6e878e2b05d747ac085fc755494a0750e99d6bb600000000a962c1da58e7a49d7551f3af0bbf9be3a188550e73edabe777126922b9c4442d1ba38d49ffff001d28e5616a","010000000c61494dd84924a5cd8c3c821ae4de1af4ebc5642fb505e891e1edf000000000f80e2bb25b2f97dcec4fdf2929a4b6f7a4c3fce046b6d9a7fe357170fea71436b2a38d49ffff001db48d8700","01000000c29b0ea3a670efccf8a9f4a682f69b9be6336bfe8dc1671f8a2a9e8d000000000926f3c0ea377398a3cb53086d2017bf472c9defd49b7276659d2ee92fef530fbfa58d49ffff001d30e28b9d","01000000af132a5051be48e33f376b31648a2d36138038eb8eccf61b276f621400000000756dd9c8ef3ccce01fecdfcafadb1879f8c11ade89c00fdae6fe4c11a415652d45a78d49ffff001d6f972107","01000000532cb9d3ec39a5520d2a21ad47576e1a4fb3e12c5d6e57c28ec01448000000003208e38ae927c095ccca27f6fba1855db4f60565049b2057cc0b5ccc74b7d6c87fa98d49ffff001d14cad635","0100000078f5994f6e609648523b16f03c2a571af889fee28cc273f7dc7cb6d200000000bfcab00824457f2aa6d64797ac68f80e1e3d169f9007da424b1cda7a868d82fef7ae8d49ffff001d3423b704","01000000ebb617ce38a34ad777b12b6f76cca4852e4dec320aa372da2097d87c00000000a76a9310820beffbc9afbd5e3da8cdd650ec4025387fcc9a55e76d4e6d147332c5b28d49ffff001d267ad982","0100000052e617564a9ae01e7528b451f819799ee46c99d20286d2eda75569d8000000007398ce6cee01c80ef8879a261d7b4e7d48375352fc156eaf79ee0cbf0e42421079b78d49ffff001d3a3164df","01000000ca73d8a5fb10355813fb11a0207eb26832fb7bc82e2e05357b481847000000001198d3ee31e192fb732238f3fb7eb0b2df158f96f5247b6607a48893cf125f67e0b78d49ffff001d62ea7801","01000000f4495b88cf91f588dce4d8dd7fc303f28158ddaf3368ff5b174561c00000000065263d08d3eec7981aa306de7ab8780c4a41d9ab14ff117f154ce2bf5b68ab261bbb8d49ffff001d2c414c5c","01000000940c9583cb801c2be5fa4391da6c4bc99397c85e903c5b1013c18cc800000000f6d495c346df56a71e1fa52fafd3d501f7c2934f1fd1c128af81f5f9f576ce4520bc8d49ffff001d00d26e04","0100000085e8d92922648b206ed0c8a270bdb9a8fc38a619b1f78327304f9ef000000000a855037f98b3bf7d252eb07cfc31dab179154b1b1a25595815396681954ba77f49bd8d49ffff001d157dd1ee","0100000007c1e4ed03d4afa96d45a8f4fdac7b8df1146cdca8d5dc2defe4e3220000000046be7227dc4899e7ce888995a6a58c34c0f707435ddbd22302e222fce4ff3d2a2bc38d49ffff001d3a6d4976","0100000032ab7793023480c9c3888f27dad862dc1a7706951d68266f72d7fc8700000000a79bab86157c0198f97093582c659b2b6e8ecac1d3db0f76df291b7f616e004860c88d49ffff001d354a16b0","010000004fee2de906e35d74b4884a9a94817240fa9469a738fe195b12dcca450000000085378a1741770e3fcb0cfa36150c216adf77def0c6bb413eb80690a6aa296f0ce3c88d49ffff001d8e97a301","010000004dd2d3888b623682013025b59f5cd1eff42dc46968bfd0f59396101100000000f016b3c9cb86ae213b8cc0fa3258e537445b3205e643e01ad57083f36fb77ef3faca8d49ffff001d358a9f10","01000000479163c9d613d4f7090e068d9a9e010ea967bc385807d21bf4d3803200000000179c087a1ca53d353faf6271202db46cda1c829152ece5aa381e74ba3ea4283bcad08d49ffff001d096cd29b","01000000003014bd834f8b3e04733525b966d6e30dae255599f97c64c95d5a1400000000720dc15e49a43a7eb05db2d09eacc9c100df15d5f64b1985afe40e470d33add941d48d49ffff001ddabc7709","01000000661433ade57f731a35b73a528bde4a7701f217442869fcd5a810d9dd000000002188a722f48f1463beb93b296e0a5bbb3031cb71f624e1114dcf2996768ebe9435d58d49ffff001d13484d04","01000000611f3a7bca614d03cc3b249a66aa81a97b6ac741ed5a74a6622afc33000000005f394d6612195e36f443bfde10d93d2b8b6d06c6890700b09087cf47afa82d60afd68d49ffff001d1c31c1ed","01000000f77e89d28f2e0f8eb50f327be990513ab67a4f165342ab154ab8c85300000000ebeb368fb4ccefc403ba776962b9db0fe98c96e2172b05b5cb13496f108649c13ad98d49ffff001d2b75aab7","01000000a3fe9dc58efbbb94c15e07230bd488e9b6e2ba8bdffdaec179a665fa0000000019413ea953ca4fdfc53003d973b8461ddb5d437eee0ff4972ec7342e95fab8e83edc8d49ffff001d24c42ece","01000000b785fb7c511e244c7bea483ae33aab562762a07ee364421b979e635c00000000e1ad78f2c8f04c124ba28d27769bcb311e0f4aada604aebf735ded89f5c19b0f47e28d49ffff001d1453e872","01000000fdac151dd00e8c8f7b12b878fd0a257c5bcf664fead0046f8a8e73fb00000000ac45dbbe1550b15ab917dba695be8aa9789956ef9070260f40af402b9392f1a593e58d49ffff001dd7dc8a04","010000002b0a9906e6f23e112d33469d054e06d5a44a62d57bc16a77f848b80c000000000e303651c8a1e6ecd7b5fcace1b0e045925aad4c8a7fe4d1b0772cb449a4b50e3ee68d49ffff001db2a92f03","01000000386e71e0d05116a674baf8f9dc54d7375ffccfc2e7335941be9500d7000000001c585b5e1afbca075e5e978d11006f6694ab363f1ee2684065473500850d552680e68d49ffff001da37b7001","010000009cf13b00c4d8601998803daf6ba7493b0bd50fed3fb384acb67c83b7000000007d577615c704967e1da0eb695454a71d99ac268febfcc5136df6214ea8a6cc4c32e88d49ffff001dfa7ab500","0100000082b56ec1ac3283340b242bd669399e67c72cd350b42530a69a586dd600000000fe7a3f532380e5ae6167908e793efe2235a76bce831d843ea53476b451225be40bee8d49ffff001d1e538a70","0100000057a9bb03367964a3cca43efd33c5302736bf08527c439386c11c64b6000000009155c50420927888ad780b5b72ce75cf3b09f6935cc8586105c4103e79eaaa311ef28d49ffff001d19d54b1c","0100000009fee4cb067b6d661d68606bfe6a34b771a1fa75b0bdddb7df0dc960000000000a9ec345388699040e154d2d3fe6e05f1f3654f3cc555f3b04f1bc02d5a472a467f48d49ffff001d25532017","01000000a7e3ff9f58b9af2eb4d008598fbefb122f326c8babe843c2274c49180000000031a4b9be564af21b5a709e46d9b0702792bf89d7b3f649e8e11996aa2381b8cf7bf98d49ffff001d39976623","010000004df5a21fa5f59db1e8b4a4b747d398ddc5d9ef1252d4b923ff77b5b70000000085b6c6723b8e3ca2f015adb6271c220b9763dfebc607f993b310988c00f8d06eb6f98d49ffff001de9cb3c00","01000000fc8cd7915c7f1b384d06c283d1269a32c70d9f3ba06aafebec8cbfa300000000362ad6e1bc649e277519e9d177770ed85d4afd9e498a5a94c1ea3b0218b6f056bbfd8d49ffff001d041c16b2","01000000f026cfa41e6abf9859c8b64fdc7d6481dd196a59111b78d229a223de0000000019b2600f2d1d455788c54428b2a1731e7e43388ca0412bbd40ae5c82b04f9e27b0fe8d49ffff001d7a248b01","0100000052a173ec5d6f9114591a5616b04d68ad8eefd588bc1ba0855b0cf1520000000086f58a8d557d10379de543f2f2407963d8bcd8e5070432a511d5db8c5fa57a9dd8fe8d49ffff001d220f8600","01000000e48cd5b6e11a4b21dcc1bc57912c12391b32510f19ef6e309828be54000000001ad6824c92f33c8fcf378e7050188ca0ea18e0b4affd4c4f4a255ceac1a33d6672018e49ffff001d287b0eb1","01000000c2558c422a161c92d27e866cf81c15d224b47dcdee0c53bb1cfa8e390000000007416de89168c7b2485271eb1fceeafb55a157070c5258848ec22397ce766e2e09058e49ffff001db45c7010","0100000036787a43dc119c434cd0427044a40b022f324a7317f4b18f47f5a36a0000000089c47c20aec4ea3f530107005c3bdfa0b75a658f13e2f6efd6b8f55df0e0b02c70058e49ffff001d2a4a8dbb","0100000097a94d66eea460bf80c5a8c197d00aeff0b4a1a78d0a25615883862f0000000066d0bd60f49a62d89c792a0281cf41f6c752336d5405aab1190f6d9ed0a69cb8790a8e49ffff001d046c76c8","01000000c044177e24f4e2999ecac58a7d748dbed23696f4575dc1c40cdb83fb000000008384f1535f42223d5afce043270100cc777becc513efead32af46a9fdfda5cb2af0c8e49ffff001d27ebebf3","010000000cd2f77ce61f9d057f8f57a45d864cba3ae85de094000e31df3bb5fe0000000048d3ae88eb73b9b35c1dd0a0da6411c16225b57eb0c15c36b435ba871c83bf28be108e49ffff001d4bb7ac05","010000009442ec06a831f026d29eb65705ac08ffd09b0540e858acd2e41f504a00000000f708566275e8155b86f41d2fdf7a373f934cb92fa7718db2cef1bbb187f504f84d128e49ffff001d1e465af8","01000000d9029ced40210039b5d86e6f38ab7e3aba1157010d2dc161aed12b1b00000000f67768b2b2ade5d6f3d72bf550f822000db29322e5fd0aebe43cae71ef2e1c4451168e49ffff001d1f3fd4cc","01000000fe33e2f3bbdb00341fb82347643b9a778fcc908b370e65e5921b1f2600000000164b4d52ddec638f73a41549257308eabbf6a832a250c3346dc4d0e2da5d931f6e178e49ffff001d7f0c0405","01000000a79cad48c37b3b43390f926a9646a4a0fae06354823d3e41faf4f94e000000002bf43c4d8f88a8ccddda137b28de18dec8f809f76ce914df663fbe6cfb0d9d10ab1b8e49ffff001d14a908a7","010000008f5dddd9b89cc283f334f90dc967d526588b7d8bfa3860997f72050e000000003ecd11fe558350a3f9d97d861c2d79097dea114b158f089b151387526ca7a04a301e8e49ffff001d02021a01","0100000085418b3bc559a2ffd4d9ad29a2b1a81e6cba89c2e71693bfe58f55a200000000673948d669c7fdaca7e73fa3be49a5dab587cfcc6d70003b7fbf983f59640e2ee31e8e49ffff001d2b5d5403","010000000cface5cd424e14075329ea38f91d8f6d0078d212b522701aa4f146c000000006e66fc73ec9f741303cbffcdfb922e25b5cf2877a8fa10a3e0cc742f29ca3b4c6b218e49ffff001d36fe6fbe","0100000077cde4c357ea376a9d2fa8865e3ddfb0933ef16033a67e730612e57a0000000018cae2a80db9f5dd87c558a0409171caa032a63edc508e79dbe66c30e8ced3ef20268e49ffff001d3280833d","01000000ed7c2c4a08fd110443c9c591a166f1cf2372afe4cdf3822d8a58c2eb0000000051b75163dc6eadb0dd46622447ede1521592926ea4062855eda2a4fb81791f1a492a8e49ffff001d3281c008","01000000357f9cebe46b2dd64b2111bcdf4b090040eb797596ca6eee3170fdc2000000009b015141b32b1a21ad389c980dc84f3446d5db3cf4cea899987963c6c4a01e7aea2d8e49ffff001d2f7bb640","0100000048859801ae76e13c89c00d14d50ecf88343bc1d1b00cf1706c6682620000000064f32013d3d73dd53336e08638f1d4c4dd525e54d52cf4f594586fed52841ef797318e49ffff001d3a304a22","010000006a17e938f23aa45e319f6b5e964ff10ed00ad10ec1ddf7ef3c50fe210000000056ee82a45f5572661833d358250e1853ab20aeb1e767f0fd23074d7d4533671670328e49ffff001dea37db03","010000002aa54f843c0371adcddd811022bb2d4537951345c5d867b6d41dd74c00000000df755593af06e2d4f8ea2a06bb410c31e0953751d54122ecaec9c34e1a3878a0c2348e49ffff001d6f18b206","01000000da3e5af8c0ceb3fb5acf8b0b036f8f2081521b21b9b4cdc63a8522510000000041ac63ebc89d96028ced428900af836b67ed1a6022e005600a8fc97a3808721d6a368e49ffff001d1d38a8f2","0100000023079548389906184c8906501a4fd94ee9548808a29dc7305bb84029000000005c14abad3279500b6063b03f4bc2681b135bedfea98d256128d882b03eec901e29378e49ffff001d6e1c3604","01000000d98b1cf6d8a3f72bca8177fb77d1bc7a9a36c9cc0c210b72c79d9e450000000046cb02f83a57eb05fe68324f51db8d30d72321b5f17d24dbd365a0155fe018c79a398e49ffff001d329e3bbe","01000000253ab38307b86db22ffb5f91b99ad2fa2e226eb277ea005acaad22af000000004305ccd66eda980c1cd5d08767de2ad49e0a188af0ff89e5904ba57ee2ce1fc0ab3b8e49ffff001d1c86d091","010000009d6a9589137c7029d4393949eafe3369960f2f1b9e4f0ba58291a5a200000000cd3a7059424293e2bbda87a8ee5d489c7a59df8f77f8531bc8348fe14b33c7ba1d3f8e49ffff001d31ef6ad5","01000000c41c4e59dd1cea671fc232bd250add7aaacaa17bbc9036c445d6500100000000031b58d76fa48f5d742bee8fcddbccf18d58f5c5cf7ca6656a07488fcb9d19731d428e49ffff001d2c9e278e","0100000021ddad62115c513f97dba93d83f4358cfd558e1d9b64d9075184972900000000056d09e0fc16ed6efafaca19c313ff9be0bc2d832ef57cb6b197ac63dac6a01fed458e49ffff001d2a2d0689","0100000050ec113567b34437ea99d1a2a4120ed1bd52ae33f806b822470245330000000026d2ecb464d4fb0aa8966c8bb6e72b3b7d595b5a3f3a78271b7f4d79636e7170584b8e49ffff001d1f67b74d","010000001fab18090a0100668d3de0b0b2424bd2f931e0164687d077234ddd2b00000000349ca4021e76a2e468c21c7f71b42cc79d424ff6ea951f754774718f7d671d78424d8e49ffff001df3543c09","010000001f6b2fa9b5ab406d0d1d11a22c8b9954c4f965a38ebd820f54f8bb3700000000f2a44cea81e876b8adc93ec52301b9b5fecde4011b2e2680a5668f60cf97400b334f8e49ffff001d23422f33","01000000cafff4fc209284ba69b3ba48af9996b0e8e7c76f36baf9d049de47840000000060193f172b245086b54a9c75c28c2f15c4a9f3ae2b202d4854678a5eb2b1aad0ca548e49ffff001d29113228","0100000020302523296c552a29856ff2383b66522be69965ab50237be311005c0000000025755cd9389c7ccde8240a564a69ed8ff9beb7b3e800ca0812112de62c156c7519598e49ffff001d4e3f1c15","0100000034ecdb1504a6b05cb1e3c4c5564f41a141a3b6d5390cc5794af305820000000076ffbaad619f55a4ed47ad91fff95bf54aea564f5267ad192bf307b96fc5962e3f5a8e49ffff001d1076ac04","010000000c01ea1671c7956cafd29e2dac3899488116fb1963bcb757e2030c6100000000bd92edb6d245c010b94eae88c10e49b15fc91702dda7392a35ca97676fce2d2da25a8e49ffff001d21208ab6","01000000d344e9e90999e74ae428445ea7de82814048fcd5b6572f0145340bb40000000054e46dd219bf6512731f6eb978f159f4faf1c6862da2c02192a789080aa44903725d8e49ffff001d3a210be8","010000002a4883ad9fd4486882848f109991b7f7a6582323f669aaadee0071d7000000006aa1f029ba2ed74b7b337dd3b9cdc8060b0e8abeeda7ad079bd26d842c2045650d5f8e49ffff001d10ddb107","010000004371e7a1fcee202ffdc52c36095faa34194be8226849eb7e68e1966f0000000049ef3c8b92bf0a4bb9e0097387bf83af646f159d1c80abe911f97f9cf26a3bdd11638e49ffff001d09b41680","0100000081bdda3e5ff1e790e5407558c4fbd8f37ba0b129ae6383953e2dd802000000002bd11c8f92b95d5ca49919b4a100ee80a87d9ada63a51bb22b643e701d95aeaee9648e49ffff001da76dd608","010000001e1ef64420d4cd3ec7c5e1df8db6dbfad9b7d94355fadc52edb23908000000002a794051b5eb6cd2d1b333783b8ea4e59ef058c6b0bf64e979bff24010089f184e658e49ffff001d2dbb8191","010000003e5f6401ae81a5c2c461b44eb5abaefdd4b435e6b6dcecfe19b418ad0000000074015ece018b39bb04bb3fc48f20a5cb731764e28ca7a6aaaee0a35a6d85ba8cb6668e49ffff001d1ff37a08","0100000048b2fd092d66bb48106ed810ab65d79dc735321dbe2fb73537c699fe00000000470422ec27970d4389d7e6dfc834294063eec649e502457a0427d8b83e73dce2e1688e49ffff001d36afca6f","010000007577555e105d4383ad37e6cc066ed0d797ae3294e1e6cc0249d9b46d000000002e014872244e9fd010c862ed1ea967b80fa57b1db7aa06e25ee260a885f9fe01d26b8e49ffff001d37f70149","01000000e87ef83a25608e1f9e901973dea8bd84e3db859c202b3c69e0ad9ff100000000a74d0e562aabdd84f30fc2eb6cd4df57848293ddde6a661ac3200d52cc565e707a6d8e49ffff001d1927a7ae","01000000dcfc1fbc450044ab97c3f077e2bb8c96983a1f249b696b008eea80cb000000006c60c9af421f1c36e8a3bfa42c2d1e2de1fb500afbd8d6367b762ee9cda44758d56e8e49ffff001df967c503","01000000940f8bb85b1a74e5b3be9b640712c2047bca48368883d7a3652b16df00000000291256aeb6456690bdd0ed38ea79fecf326e11f4674e4c23335044f08f08ff57716f8e49ffff001d9420e402","010000006ae020239265973db74f210167b28bdc3b97783c785760fc5253ff4e00000000aa699f59898607fc7b2cee1f36f99559a0dd6fcfb2bd2cc53909a526204d2952d5718e49ffff001d1cc2f3e8","01000000497ac49bbc359773dd97f226a5e122194ffd8852f0adcf263cbce93300000000da07d487baa62fe642a8da58a9ac8b69462bca180f86a794edaac87feb0a6167eb768e49ffff001d2208ce34","01000000cfacf444579e3f67f2c438999bc3bb842e0b8e60cd6f6cb4d10e0bc0000000002b37c4d5a82015ef035fbe287063705114790bd5a8ffe15b31c6e75453a4d0ce37798e49ffff001d26a9b2a1","010000009650e7c3c8ad5d3843c8f9ab9b3b18ade4e23142ff8231aef332543200000000d962f96b2591dbde4623f29828f2353eaf7ad1718f1823db4ad9004e9827fc7cf07b8e49ffff001d1cdd4bff","010000003b2694d2f70a1fce31ea62fa4fc9bb1d72605b02b824ee3f1744965200000000ffe4695f7c41e51bc310ff1f0b6072ecf67f1984ce3365a30a5c1e2e88406991bc7f8e49ffff001de3d04e0b","01000000c3711784c0ea6a4f70d31c0cd45df57f05d1ba53e9e035183dedf82000000000697fd74ade779251347792eb3a4037e0531d6640796818c77cf2129eb287556c2d808e49ffff001d02026852","01000000fae07d7437f5108bc788831319c7b92461052bac6acc7692f1d0ca5200000000e7786327c053c6e6c2fe584c5b9e2bcc964470f67240ac0536a065363fa90b4047808e49ffff001d9f273900","01000000948486177215b0b45eb4c46680f936f556da5eb48ee0e5d0326f5d0e00000000c1981eccd83a5bdaefcbfaad34e1b1a2ea478c63b3b842a1b4e59c6a5ba7589243838e49ffff001d017f32f4","010000006b59fddad4afdfc8a866a24034a8f5f843261e780f12ed91a9f3536b0000000003b678bca7516bf0defe34dff3e2cd8701cad5ff05519409cc18f122dcfaffc8cf858e49ffff001d3895cd7f","01000000d001d1bec0dea06064ed128330b51e619e119aac8e4d7d7e306abb97000000001849b36c156578d4af08aa8603829943b53bda3cbc609df80c607847ff07220630878e49ffff001d98057806","0100000073a1bfcf5db3149f8f5b424a4c55ab7a07fd4026114b4e32bab3b2d9000000003cd793e1cc6dd44cfa20255746930788dee042e900a48289a8a2eeea70091376cf898e49ffff001ddaf52e07","01000000a6f366e67ae2a847cb8a94ae76346c18ebefa9f0ef16411def11987d000000005c65c8762d9c485976249170ae361d200d6a67ae1aed58c3cdecb7a21ca2e5195b8b8e49ffff001d24db5518","010000007b0ab0e938aa46dba4b032ec9e156db51fa661abb8cd2d83bf47a06a000000006f4773f11c6d20b72e7f06d4d107afc4bd7892223f2c302948d08f839ffd139b0c918e49ffff001d1751ba17","01000000bd4f961363de9a9ab1fdc06d2d4b0668a8db91eb7a1cf08821d00bee000000009ba51fce3472ed03f55e4ea6a43ce011d0bd89ba84c43466ac2e44e92ec91dea11938e49ffff001d2c69a45b","010000006d1841c9606d101412ffcb206d2de1bb390bd5d902145f49bbe99c4b00000000f32dd96b75dd7053f69c9f2c23802156c20ce18ff893c2ec4773abc5dabc36c2fe948e49ffff001d952c1809","01000000db7091791fdaf3beefeecb0359bdfcb2793816f9c638c3ea774832cc000000008fafcab1f4b9598eb52f367e49dbac19652be3f90c959723518dbdc11c63c6f048968e49ffff001d04d30fc9","01000000638831c64d06a44ce5d8a093992a684382a791a552fb0615582aa00800000000af748d43d5529cbfe3816d0d95b32612ab457459a25bbba4cde668b1616c912690998e49ffff001d19d752d3","01000000043144cf63b4c8acf8a6851c824cb7cfc20ad61b0b54d29532999b81000000002916c309e7f255f61eee5a01c31cfe3de252b9e900ce97c1b8640ed187000547929a8e49ffff001d2d2cf703","01000000c5db6e064a1168b3910c91bd33771f092e3baa732877f5d7c206df4f000000001d2fbef4fbb4ec0f0ba2d6509f96291ec6c84afd7bdff76ed9e57d75916c1aefd29e8e49ffff001d3a379479","01000000c8ef1133cb23be964499a0888f1c56cf6ab0182bacf3c9a939018997000000004d567107731ea9e650ed84274a3e779a869e06afc55a87e466a96a476188b1d646a38e49ffff001d304a5037","010000006af8668b521eb3b6f47e0f539847353d6ab73dc2c3bb40f85a91879200000000eede4bdd7c2792308bcd2fb4016b2da45b57dc4489813da64cf3b5ade429d0a3daa38e49ffff001d3b1d2301","01000000a74e17cd090a07103ae957a5b8f55eb53ae705915a4007642372803000000000984954603f405fb275c75a1db0628020bd8ac3077808af3969caaff956758bbfa9a48e49ffff001d1c21ed03","010000005987d309ac2bee62b5834f736ab4e1b06dc428a0e40ab2713312590300000000a8b13159366e3f67d9155f2d48cbc2ad6fe4e3c8346d79cf53b4fe010e7ae0d909a58e49ffff001d1cd333d9","0100000018997398724b0d45d99ed923a21f87beaef17cfb07480d957a43c96a000000001dbb1e078d77fc90b79b1ae1a3c82a8c5f538ba7ae3c4ff86c4644eb18624c33e5a78e49ffff001d01d12093","01000000d29e4310edd94c00b6e60b5105fd19d3d022ada304aa1cd94a15dad700000000d6067e5daca93e5e1760cc3f0f4d4aaf437ff4721080c43fa90aae5cc408c4bb08ab8e49ffff001dbba45f0f","0100000078f6347870c2d802ad669ffe8d1587c442f65854fcfad33d50793bc3000000005416222ea993e88368343014068918192bc812e38ffdfc04d7a83c3487abb142e3ad8e49ffff001d324b8c62","010000006efc926664d80094cc905df78fb376168ca0c0af149810c05327df2900000000cb08fdceef84fe675529a404ee4927f464161571d53cd962f55c12c2b6d25b64d9ae8e49ffff001d92b8af02","01000000cce20b95b60c25a23612e2d38867b8da8987e96d9f01b54a5fb0d6a700000000ffc1bb638bf3000f9d3e8c6d3f623752a8b3d92a5a2763ca916119f718e1836f85b28e49ffff001d078f1cd7","010000004ab2cc9c1a28107d1a3b44905ed0a8107f752541493ca85b0296c8c4000000008e9fbe66993a1fb3f35b6ffc527db12c65d5178dc0163d88b21071472bbcbfde47b48e49ffff001d2bee5608","01000000304c8c91075523bee2ebc25c834b2698e61ccdd152ded7ffc320369700000000f5a9b49d9b943784f98f21286643583815f2180be9f231b12b6d9a60aef55660c5b48e49ffff001d3f836b01","0100000027f4b92f77bbd8213f311f48c297cde3438b611a28be84fee83cf37800000000b21e6d2fdd7e19f0546ffb9ef446ee11438d240d3973e89f23d2dca66886a9b177b68e49ffff001d093ee830","01000000b6498b00072b65b2fa511de3b81e883a10168cf6d82cea32104384fd00000000b7742efe52cb82e7d50fb0630df2c8a8376080e3f3ec47c44733c27cd6e54cea73b78e49ffff001d682e9504","01000000721065855d7f6b7b3c30e491babf8e70c4426e243ffeaed290b170d80000000001bbe32c38da0d9b3641ce8ee3caf6c2a861deff6b36564d074bac73496384fe0db88e49ffff001d06a4bc7a","01000000513e25745eff309ef13ab11926f2ef60fca0e88e5be4e7d36cb9bf5c00000000499db8093d1de30efc9ba8b73009ac8be9dadf77ed0faad4581305da6f795f9574bc8e49ffff001d27b1ad6e","01000000e4448ea0697e9ca859121dfb89c778c4cd1216588925c3045033746000000000a103d9dc82d667b0f39b34accefca434381bd3f398abc4901de5a3a73f7b4ca87dc08e49ffff001d06e0e09d","01000000fdf448aedf5396f1b1a706df200d386bd6fb6347ad1aea174d1f4ac500000000e2cd8e2a698c240d35640b540272bbb8f8bbcecb6a4bf6d3171f71e3763d5a9d48c68e49ffff001d023340cb","010000003df43b5954836f5e44a1782ed2a37d7117b1568333b822149344042200000000891b4d023ee216ca260707d4b804e62ee417188e49a5b73cbd6ee2aceac5077656c68e49ffff001d6e651000","010000009c11171657dafc6276b216843581f08d37139aff9556052a2596558f00000000fff8ef781e6dd592eabce101f86a7f129c6b811e05cbe5581c6b136ebf9a9247f8c78e49ffff001d3fa11608","01000000b58f9433fc1f2a0ac06f69cef042ad63872cb524a72932e0779a26a900000000c7e00e13f832bad915effdfcd95e11ca68fc5ac0f1d7477b8bf4c7165051bd6d17ca8e49ffff001d1a1e7a78","010000005c200f6105f4f828731701d301968a3b77f6cb98e1c93bbd2955c80e0000000068bd10de526a70187348ba3e37abe7ede3f886426d01048c4f7d643021c5c87034cf8e49ffff001d2519bfa3","0100000069099e7530541fe9c81883cdb979739d567348f6015d659e01d48baf00000000a45dba84de3e42283b23fb05ceaa756065fba7ac9112a8816b63fffbb9ab686e7bd48e49ffff001d1e7d063c","010000000809f1904dc2c44b75124e9a457e34bec4b2b746ff58701e447a77730000000086f438f8f1a3c6f44f713d038453466b36a94ec636731140f39066451f9158e891d78e49ffff001d1ed58cca","01000000c1a89cc9a04f43086c29f7a89951544ba71464b7d1b5e5d35063ae8700000000068d674d689624d17591a1f01e3ac52d07b63147f1c86f6d06984d2c79704d6613db8e49ffff001d143ffd26","01000000f65f9fe527066085ea03ff3f92954a9d17abe890ca71b4b739342f6e00000000110ce085676de93bc29c3df21b5ef6498b0c9808c4d1e9434b8beee81a37c0d54edd8e49ffff001d310469d9","0100000060ce6743114e20bb73aed5e41091358219bc78e959a97afcaccce7f4000000008ebd49baf385bdce1b38afe373c9ef436d840221308992d44c7732fbb4c4c80e9be28e49ffff001d1a7fbb13","01000000289f395739afc727e09b9d7b7c252a69fbb9b17c9ef625e33695ec9600000000de959f79f175395226717909f59d877293aa7e7eb5b77dd4c1a3b8ff0c73875a21e58e49ffff001d69f82c07","010000000e1e42d4b1580dfe41ae22a164746c42c038806e7e0be0ceaffd632d00000000f59d277f64a4a96700e2e91272c603885e9ac68000126308e77f532c023fd49485e68e49ffff001d386b254a","01000000c414b5020ef79cf768f6159eb150adecab30363d924ed88f44f1c31c00000000e6546c04915bc55d1c1f1623d398d2ce2df0009071a58fd3006d93cf4a988a2f6de88e49ffff001d22bd05d3","010000002542deb123fdefd48b0a06fc0b7db8907f837063a76305a59530effc00000000ae1d4c032f4ea7db5fba52f0ca5dfd3249e41a17e506233bc4840b5a9a7d780890ec8e49ffff001d1a5b5cf6","010000004ba482aef3cfaf495953b7f524c8cafc3a58f68bf487253b5a9cd422000000001c757f1f5f858861b3e39441eb37e0562c7221940277b85916ca89eeb27f7049daef8e49ffff001d218d5c0c","0100000094838e15d39a5fb4466361809ef1afcccaac32539df1d1060dfd087f00000000a482f65071ddf0351aee02fdeb6db62ed86dfdab2eda33ea457b7c7757d7e83c23f28e49ffff001dcb1b6201","0100000006bfdd644bcae9f07af3db9c2b620030e64c78656f81c0119c8a6b2e000000004cbdea07156c70554118190963a58b625970d06cf7f9167cf9cadf35c44bcec36ff28e49ffff001d94140101","0100000068e6350e3a10f83f93f7ee2955b0b5815ece5afe5ee7adfc66ab5359000000007f80c0506d1e7d3facacc3f9eea42284bf0393b5b7f1c5bcf15a5002d498103783f28e49ffff001d58544000","0100000014df3874c03199068a11b2a47da93daae39b7ca9ccb7186bb77472e600000000b7a55410bbe6a9f60241566b876f0810d9503c7f01c7b19ddd586419c946d2a47bf38e49ffff001d228c81c2","01000000dcd01616c258a50f9aba7750217ef2f15e3c52b63588b9f89cc4ada400000000e040630bea9877a9ff16e949ff45ceb8e3273402b37f57b5c8d02aaa30bfefe199f88e49ffff001dae22d10d","01000000fc362b191fbe912a92be3187a91ee53e99596379aeea938e2d4df8d90000000002c0318a05f0596ddc1099ee8b020c59321c5b7816a108392ffec484513f2de165f98e49ffff001d3a32a1da","0100000094297560871d47d06e934e674937a0dd4d05f01bff39e4895d124f41000000008ddfb1bf6151d3c690ce1306a909feb1357638d87362c632f627bdf80618b9e6dafc8e49ffff001daa78e409","010000001892e434c8a4d9d4afc5efebd9ea9862e426a9b7216587595e73c7c40000000039c36dd8592c30cd5de2f46e70433c481bcaa6e93ad397336b5c90e3d2cec07c78fe8e49ffff001dd831ed07","010000009607cacdca07a84704ac3c23bdfa82c51e58cb83f64beed14c17b7fb00000000608e5bdf4c9dce6cdd51bc37657cbe1389892b78e3712f0fdd6bff1e9b2c8fe08cff8e49ffff001d19c0f057","01000000c6e4f9c25c4c62c2ade9045705f8ec240b71dbc714679b2e14fcc086000000000817d6d69bf6fcf8fd968b559a7afe8a11777f5fa0e33076b05269e0be78ff3219038f49ffff001d15a55b49","0100000059855c60e321eaa55ab1447f6b25d9d3c90849c87f9fae7851941c7300000000797444f449f7a0b308cda3be70245c505a8f6fd127b3cc5c7495de91762f438ee9068f49ffff001d3a11704b","01000000c083e78849a80f49bbbab4e2c9c4787055ba83791e09db1c91b5cec4000000000aa067b9174b7c5c963d1b59cf2982c16603a85ee47d4a2f12001e8a89e845e01a078f49ffff001d560ebd00","0100000009f2e4fc7acb08e19c2b5302605dfab83cd5ea4f3a85538f3a3b391400000000a03ea85db8c487b43b4a624fba714b49c6f986faf2248a2ae9b60fe940d7dacb9e098f49ffff001dac246006","01000000869d83dd1c0919f80054dde3a9dfebcb1b0549ac3a702c4e1d703bec000000004f16aaf6ad714c6a164f3e786ab26c7a8dbeeece2ecea9d0e9b02d95433308e7510c8f49ffff001d37c5d4b9","01000000c8c9dc2a37cd847b11a4f75c18e14078f033fcdd011e082f048786f400000000047aac7f743b7e2e39df567cdb4c4631773a58910fd1cd0c6b31628eade867789f0e8f49ffff001d15c58565","01000000cb2f84afc0010fa4cd3f779114c8914c26c98e23744e9748a42d180a00000000a721cfd2a6609e41c6537a09b7e7135e0163ff52e9bad4ee8f390861950d817062148f49ffff001d0189c5d6","01000000977d54a01e412bef5c4a16fd98b6309819a75ffba0fb62a195484de000000000c9883e7602af88f5698b56b8c5f819ff9417770ed43aa90c58be777d498ce7804a188f49ffff001d1ee9d305","010000008d3a7efed0b29482cea5914b52ff56a8081d545a0dda30629d9ed782000000003cd5ab693add652290a4c7ef5f30f87f8ffc3865e0a071402c8a37e6c098067acb198f49ffff001d15f5169e","01000000a63958577764461d2acbbdf6a08ac8589370573f6cf869d705cc66b700000000a214b95209cca4b74d92d5b6753b8f9fef441297c87a386b64bba2418765f26fc51e8f49ffff001d24f70314","010000002807095ae8aa79e82e5b607731ac1ede1d7c17eb5fa4dc28dac844be000000002927071de2b29c0ca3a0a65c1f2ba0327604343e9c0b37e21b29b42b6ab7a0e8b0208f49ffff001d30079d02","01000000691289ea57e931d2bba11f3f238763888ad25cc673a2e6812cc42296000000007f121d31b9da2862fd5c179c26f1e6fc5ec58b216e52c9b94e02cc3f0c646f7a1e218f49ffff001d1dd25d56","010000008a0de83d6e34b5003a4f55f363e7946ef2a10ea5d2dda8b92d7848c5000000003eae242c5152865c9baa5cc9f0c529e22f97f1698d8447145dd9f3288e7a413786238f49ffff001de5eb0106","010000003e96daeadc124d44e4c6529aca62db513371403d4d892e6db69b40a500000000db58f9825d9f90124dcfbaf160512e3925f8cfaa15910c5b2ab98f061d525dc29e258f49ffff001d215208b0","01000000fc8daa1511db07d1578633db5d085ff52fffdf27db6e711e69f087520000000078a8d534d2005a418649bed78b45f9f0d7165fe4672c042a7a99855012c2e536dc2b8f49ffff001d309c2d67","0100000099d55c16e0f9d6016eaa9ce4cabf7c9453542e8acf403b0b0b1f89ad000000007b2fdd491fe63d0df8b9fcb9739cc06c9558f1f639c61b47da461d3ffdbfe6a37f2d8f49ffff001d35c5a263","01000000ea630664579f651cb6a5d7f72e9e92a452168edeb7e9907a85ff6b6a000000007c4f87589a8ebc19bd3b96c424d9545f3c52b61c7641375358f856627289e1e4cf318f49ffff001d246e450b","01000000f692a02d820aecc7ff1f1e9403a4fadfdb3f003521fc7be3e702ec8000000000a31a388d6838a4e6178de6668648264d2571d1aaeb2e3931dac91960fad5608bd5358f49ffff001d34b21187","0100000041483735653bee4c97ca84bbb1cbc750a67e60f921bbcdb9a9e2f1d400000000be8463673e19e4674eeefa3f1fde75cc57d49f53823312eb0da06bdf6f9586787b3b8f49ffff001d16afd4cc","010000000efabf92fea4c00ada96cebe2cc7f9a17363ca9556369ed3ee90185200000000f1a34197d2646f69866e7ebe531cf1b3d76f578ff09b550aa1ac1e4edfd83dd25e3d8f49ffff001dc6ee0f05","010000001df5f077a096b2a3e2b2dcc26c74bd9489344e34c827afdb3d74b18a000000007120c0c3708210e3b84c74a0b69fa2d915ea09f1fa5013a701f260ff5abb8c69993d8f49ffff001d3a289d32","01000000ccbb0f6e7e0883514b03e4a9c050a8554cd55ab6849434aa52fa184900000000fbf67cd67b454902b94dbcc0f877abc22c2061240121d4730e4c2001c01094c8cf3f8f49ffff001d12fbe201","01000000fb0ceb7a5ae49195eadcf061e0d21c95479f3f51ae487d042cdda63300000000bc44c4555989fa978b00f931d9b145642895d9f44be23718d9621913da10b00744408f49ffff001def4b4002","010000002c256fcb7eec2b3923bf11779012cda5f6f863c803d9fa11a3e72039000000007305fc684691ebfac4ef8ad6554a02d4f12a55a18fe658025b2aab4aca588228e8428f49ffff001d02372698","01000000059003aed5f3706b08c6dfdea84d90a55ae489aa9369426c24d3777000000000e30253f906110d826b8ed6378a5ce77a55765bbfa5cbbcad1a4946d6ec75331563468f49ffff001dcc8d2c09","01000000881463b8817c22d36f6b50420456cfe1df314f4ded5a90b18fa60a3400000000d7a7c275cffa0cf43bf510227cefa95f9addc512937b0d056c6b90e1d286f830c9468f49ffff001d57a29900","010000009a11870580edb69912c0563d89d2318c7abcac662de18a851bc305bf00000000f09511f51a0a82b8e987e0a7f38343c9abcac32e41ab71f6522652d34b6cfa8f49488f49ffff001d22cbb565","010000007e50e29f470b6f07b99471e2de0909ec75118e2de45afc1958f9a3900000000065f2111789fa39c50b7dfe1f2fa3b338682d657994e3ba57aaf4f41b7ce1143c274a8f49ffff001d231142a9","01000000d6bca61ce10d55e1eceda6c77d2727e7b57be88d07b00fd8434437c50000000065833fbb9abf75203826e8e3fe4f53c2f28ce50bd490c5b5b03506eba9dcdfbd644b8f49ffff001d5dc4c605","010000008a1b477a7cc98534c49e14b956feb8cca6d6e3844c2b25884be5607300000000a0adb76f6d002a28d1f2984819fcc836ad5227ad2310f42fb941a10882381468014c8f49ffff001d2edca1c4","0100000001becd032d0f7167ffe99682f241bd5dadd031baf8aaa7a45643a7930000000050bd7660b509cccdcf704256a86b66aafb5f8443774c8c7f386011ee66cfade95a518f49ffff001d15fb299d","0100000097daad8ff26dc8ad7c255358b8362af82bcacd056f745c9f87f7442700000000479fecce38c228a7a6ff1a40aaea94fce9d840f1d8703640ad3119bf21b7d12835578f49ffff001d00389149","01000000ce80920b1461c7057f4a98bbe8aa31b61180ce7930b12b6c9bea64e5000000006f57d9a50071579452f2db890b9ee4de0eb2b049dc781e0257878318acc02b3ef5588f49ffff001d2f17ff45","010000004d4f5e553c32cddb79b76d77d622e31fa256bbde1d97bca710fdff040000000021893417e6884a32f65acbe34723796728838a45345efa874753b4cab3b3a98d385b8f49ffff001d0fdd1d06","01000000ff02f12595c52012faf8cdaeed43dc3b1756eeca31b7a1351bebf4b100000000707e9428158718f1e5dbc6aa3ecd731912407a206b4ff6c0528d56d6f15c5426b85c8f49ffff001d294c436e","010000009037b447011047c9fe25237e7d2c650cde446b02438e7c772339a1d80000000086a3290cd2708a34f564e8ced2f122acb231081a01a9e2a649f9941123cc1985bf5f8f49ffff001d7191ce0e","01000000f0aa527cd9853b43642856936c556233fd87db09f27272824969204000000000b4cb1795b359435a282dce80dba714c8429c8eb3bb323a0d1fb5b7bd4a0050636a638f49ffff001d15305f5d","0100000023d4a8889541d3ce5ed31aac5002cfae280944f8fc34e0c881c77f0e00000000bad36a777945fbd990dcd1962d59759ab4138736b469c8551b05a46de0898c1d0b698f49ffff001d17be184e","010000002ee3187f3019fdf8edd038b36ad8d3f000471f5bc6d808f51a25b2cd00000000a4f5dfb7827bd516b459ae247e4c0d5be0d495ff77977f28d0f4a318c61027d2926c8f49ffff001da29d8f09","01000000a48b27160968bb02d469e4f9d538ca605d24bc8b529e9d0344b4c730000000004915346a2529587cba142f502b8906494ee1a8b00fa6bbfcc3c72d7f184996bf986e8f49ffff001d35c020d8","01000000f8cd615108a51de46201c3fdbcc326238c3711a2634533cf886acecb0000000067df41fe4036b5faa75ec74f12e700641380308410152bf541701f7bc800e1260e718f49ffff001d88d0b707","010000009c27d91ff93f3be26e6ddbc8c94189fc5ceff2ad0d5b4714c713682b000000008950b5c141186f457400a78e861a8bb978f0deb7752f24e713d119d8dfee913d12738f49ffff001d3482d39c","0100000091e3940649251f69a133de4a49199408acb239a16d241b582976073600000000da0581872a52e8e833b59c8df7384d7a1678831f15612b0ea0edf99176c50fa9d5758f49ffff001d0112044f","0100000070317710d18389e35374d298e2ee41d7841a92fd4777ab3e0cac368a00000000aa9d5f439438b2577670c463dd7f3637a47268e8c5c44c7f77bab6c15fe392be2f7a8f49ffff001d3a846553","01000000eee30270b7fdb711423a466979068b54a9bb46c91e0322dc26eb8ec400000000ec547b6d281590c21520a6b494815fbb1742911ab13b6dce282cefa15513be91a07d8f49ffff001d2e8c3509","01000000648d52f362868c953d09de9c0be0c7e58640369647949b1a899289d700000000a16091332ab2bfca38b7b9c192135228d6fa05d7589d8f2e880fc472049ab798b37f8f49ffff001d153a1584","01000000f7073df5539a7900a0218eab0fea7a5d888ba6cd626bf594b2df9fce000000000c966ec6d5c53a49bacd78e6ad264cc4a82bb1c0fbc0c812966bc3636adbc11fed828f49ffff001d66a0af10","0100000089353b8f1798c67337507f4a5a0e375ce3fbe477e3f433b545c09ed000000000b69c3dea26d22d23f75b3c08b6246ed477ffdfe3642e80e3fd000b7670cc166d79848f49ffff001d2e465af6","01000000f804bc14bfc965e01fd49e65754ed81542594617a28b5ece3722436e0000000023ad2f52c9a80d7ae8307a5c430874655d02fed890db943273fe8d128e925227f9898f49ffff001d3468f61a","01000000cc96d4b99ea2f6fdf0bccada22a188f433ebf0095cc97ed4efd5ad7100000000ad74328f0476cdf55130210b06eabfca699904a55601a7ecfd3ce54cfd16f3664b8d8f49ffff001d2f58fd71","0100000070f2f684de0905b1072dcdbc4618aacdcca966297b956dea6085a272000000007977d2616aad6090d8d6055d5b469a0631e7dbce955b21f6045cfae6d3af331c75928f49ffff001da767001a","010000003c2e6fcfc52ede8b3922ec7d3c532223a99108e9086ac48b2f9b0d5c00000000a6c9f45574fa520d038036421dca99e0029ded20c380eb3da7bc473f0e825cf113938f49ffff001d3354c080","01000000b29f47c79e9331aa4a43b8e297f1a0fc52c7ee8f14c86e01649f0c9c00000000bb9486a6ec8884ccc8a6c2ce8c235869db8f7976e6605382b2fd1b99f6a6f33018948f49ffff001d50742203","010000007c479744186e2937abf0600a78c2f8171515c522157d0319cc819d7b000000006f9a0e600e70852545c06569e70022556f969d18b5ea30b1626ced83ff22e527b9948f49ffff001d01d00237","01000000e4bed68d34f7654a1f2f1789c659dd1dc84580991f1282bce86c527d0000000031ed8050b13d1cf2f701a78f84b8beee2af59cb2cbdc76559c98de6b1c9f07204c968f49ffff001d593ec703","010000002f2221d9fcf4d6f7643d3c5a72e54d260bdac109bae757515278ba8000000000c0d70a7881e0eca811c09d178b4f15d58ad5206156b18e75f6dfe5ce87c10dc112988f49ffff001d38aa421f","0100000046d2610919c23b27a3462cd21d52e7bbbd509d5e69e79676d67d95ec000000007d37bf68821e0fd75153ac84f0d40b0fe9f8fdd5dd572b08d10ab68fc5c34168109a8f49ffff001d0822a75a","0100000063aacc9e56b282d6732a5a68a11e24d4159e2263861d907500a35b5d0000000086cd813279b7b0d2a03126c2aa6c186bb2c990ea2b9727f148c1bcb8ca22686d379a8f49ffff001d90cc8f00","010000003a6d8df760b15d5adfe3df667c9a06d2f547bf9cbf3b1c96ac3c1927000000004aa3de5530260af75c2a5e483b0ef2c2e65075aa86e053b49ddc227038fe9d44479e8f49ffff001d039dd027","01000000a8302d8df57fbaf13fa397b4f34080a5537125c0f37950934b9a08ad00000000a83054a05cdddf9de0d1916b930e07e22540d4dc33983fd65a70551b2a7de7633ca38f49ffff001d30bbc41f","010000003d8dd95a6ffb7d8e5914a25b0e2555fb4810f48028f64be724c16ee300000000474304b5da660c378ddd0ace55f83ff429e604635a74bde3ec7d533d69b3d06899a68f49ffff001d338795fc","0100000090aea2963789473df5bb72b67feb81032e5a67aeb4c432f8311879c50000000049db33cb3ef3de0999397147fd3dcdcfca6f75ca1837d488157aec55e7dcec4ae2aa8f49ffff001d34abd5fd","01000000a56eb52a66d6d5a7b5dd04707982d47530a00edd0f4c318950e741c500000000989a69dfd74a53b12faf9efe68fc6027cb567e69c7fa1942a146150228fadbb6a2ab8f49ffff001da73e1b02","0100000040913966c16f3767fe2e2bbd94b70d03f155ab2a5bb394752bae7f5c000000000220a7f013859763fe5c1af16ff2af60250694799b1c06f324ecaced9295d81191b08f49ffff001d1f5e503c","01000000fce7692743fca6fe9cf9c57c804a5a64a0ecc71cf759fa4035b03d7400000000a04f0ab49c1824d531b440fbff624e53cc16e529bb3e8f7f0bbfa7c01b47d93c64b28f49ffff001d37dc73e3","0100000066f7a5b17b85b00559497643c94c40010f4bf4d9313936b5b1283d4e0000000073e60b70b52029a181aa1a70ee83b525e7be2880128f543ba5cd2549c7b2de88c3b78f49ffff001d2ae043f1","0100000006d6a14eb84a6f9bb674adc938e269f8ea341190e2ef97800fa0fab9000000003cf3e5b40cea9756819d73e59489085a947c01524f303fda0a5a7804a0dfbd4149ba8f49ffff001d18bf053e","010000002021cb507caebf70294e8b6f3ab4be45aac1c089b642902df759ef08000000000932022a1188e3228af26e3aa61a78640ba7a83a9097145a2205def0942b91a6a2bc8f49ffff001d2e69889b","01000000ef444754d9c4260946b345bdffd92e5827a501c7c029abbd8d926015000000007f5cd94d2fd39946a41ed73821225597f0f5a2fb4a42e6354c7ef1d93b4728f200c28f49ffff001d2e3e595f","01000000e6353b30e94b32cdd8481cf95c17345262075408c702e3febf11affc00000000779cbf322f41d8355a225ec65786d9e703ccd5750321ae52330a3821fb7268126dc48f49ffff001d2875b6c1","010000001722f0d81fdc0f7969a2fffc3398c4f6bcf663366e18d0b399e09caf000000008d58f8a1e2bc33a7c43dadc98dbbe0886887e5f9ee4db137a66047d0afc0665e6bc68f49ffff001db8036d08","01000000893bd0505e1e90269b0c81d963fb97e916411553c3e98d5f33013ceb000000002baba926d7d1c54c161be56434d3e6ce31fbe3a9fb19efb673df04904f03119fbac88f49ffff001d353013c5","0100000044a964f1abf5b25245476074afe6f69b24455848393ccfa6485515e8000000003a903aae4473feed976dd30c0f86175983683531586d37607e6a3961600058b61ccc8f49ffff001d06b24b30","0100000053ed8647f3b9e2f5fbbf12a876ffab91f8e543273a74d1668bc7353600000000de89c0afad545de25af77d5289a1895c6d88fb1968f49e5924334760850dcba0cfd08f49ffff001d35cbcad8","01000000c141ff659631734e784df47a8bf85ebe72b0dc6e118bc5ec16f1f60e0000000006b03f0de582e9fb1e1669c13d9bb1540146da5d32f666f1a007ffad500f171dfdd48f49ffff001d27fc1712","01000000899915fcfdca894525a22f3e2498f802e576702e3433fbe0b2abe6b200000000f705341a39f90e49ed98fe3f1f0627ffed42c211b0f1184475093968d511c4988ed68f49ffff001d1a6199d5","0100000092503bff6559b7f25bb42c9196d633197d2ea8520d4ed643dfe9b84c00000000bae990bbb390cf4f4a59d527450269a4b50321f639d741217b64d8d0b1e4c7ce7dd88f49ffff001d1e38daf8","01000000b577b404574190f3d98d76b2671fa109c2b764d3ee49004002c1247f0000000009d71ad94608e369bb7a32c5cd534851c239b0600f4bb031bd31e4acf9b481ca53dc8f49ffff001d201b3df5","010000004e64d3442b4d7815c6523bf1bbba9a24c8581f35f45b7d9442f10938000000000e74d12458d6d2e1af3e2ea2e51ea101f912e14e64c94fa38c82138ace1da64cdadf8f49ffff001d9e76c410","01000000398bedbb6765430db915dd517f680e87a2d592180dc544a56edf4b700000000002f97f0ef1c41348b7e99e5261adc5373e0fb57d324b91b29c3df5d0db8a451915e08f49ffff001d176055a4","0100000004b0cf8446c3ef810143bbb8fb3abbb5e7059d81c5200638e039c55000000000786fb0d6ca160884c62a15753043b443f3eb215c88c5822cc3093b731b738035b0e18f49ffff001d15b6b3cc","01000000ea3e612d2964c213274ba49c21276eaa6bd04242c020d2d38feccf5e00000000c2342a66b4c91daa9198c0afb5765c22b02ac5f628f8cd9c9014896024d7959f1ce78f49ffff001d041a542f","01000000f1a4472ca4dc6807ad7675bbcadc4cc064c5c7e689cc16ace424713a00000000b16969c64e4eb03a7df65a590223b978bba529bee8a9996382bc948ec2c0686237ea8f49ffff001d0708effa","01000000233096b6c8c70a24a7b44e2af7a9eef472d41566a614476c17634d63000000006e4a04b1b26abeed21a5702c2a60a222d45fdf99e6db9f0ec7c9075f6da1a7da6aec8f49ffff001d02759f60","01000000a84d5767f31d1a89f395919ecd56a8ecac8f244a752ca433817ab87900000000b63db5e8f05e5cbd6ef6879a9d123430e297e991658955555ebdac4a7810f90027f08f49ffff001d2ac023bc","01000000fef005dbfc91f2faf5bee32e1944415944c53c6a191121c44a89652d00000000362ab363c176bb9d1c2b0a34693fbe9350dd33026466b032d22c5d56a77576eb48f08f49ffff001d14d32700","01000000c88bcccfd361006c60c9baa6b6303eda50023da620abae1858a210bc00000000cd5314e3249162a154bf542552bd2c4b929edf593c81169a061351c7fe1c8e5779f38f49ffff001d02ee3e8a","01000000e4f5a427d809b21962c8ae6b58b8b2ca7ede4f270b792ae1460f34be00000000f53963b4d0f9bd461f290f69ca3b52ab7ca0819d1b5c331439b0da10d70b0ec3dbf48f49ffff001da6aa9e06","010000001d95e28b69bcc1ee738f7b172125d0de065a7e4a5a8937895c022e3f000000009bfe963109510d0977f8dd04621e49db8a9b41dbd5f16faafa3fb0d70e738dd045f58f49ffff001d06ab2972","010000003314b88638740c703ff5edd9ecd4c02dd473a287ab43223ebd393d2700000000e248aa0590ec044e0a01aa97c81d77f6eb933d1feb78fcc7baa9a00e7b6437c990fa8f49ffff001d251ec2cf","01000000de455fd536e6e40dd7ddc672c28b4d4838c512a778f84bd9685aa3bf000000005c3542212e9808c74c957f56ad02fa427cf77f464ece5f64ea82251ccba775ba99fd8f49ffff001d16b23a01","01000000a05a820b154e106b78a1ba9fb9ffdad99e66bb869b9a57c6eaf5f8ca000000006fe482ab72e23bfcafecf7897d023370541a0acb649c727769d9b34c6bf9d49025009049ffff001d86129303","01000000a948463162fb2b1a17e315e24aa78c64bf6c0d673764608ed00e300d00000000719d34a6d92c06456fd24e8c2a3abd7ea7f09c5a164222db7bf3e8b80246e7ad4e009049ffff001d31037c79","010000006fe3452540e0f0f21e9907772540076161700aa60fc5fbdfac2f54b500000000cbe37c27766854177439b65bf50d4c520dae5ae41ed64e21238ad9769f463ee921039049ffff001d9ac13a0d","01000000660ddc71dbf7f3efd19a63b615d49a701340eea5d5aa36c89a1c3e1800000000bbd73bf488eb4fddc5cf12574ef732a35a1c1c679782cbbf6826eb4336875329bf059049ffff001d25204438","01000000ac9e72d2d9325b4d2e7407c534b51ebd4ba14b9094767e2b0a8e708d000000003d47272008c7964d7b263a030a54d8400aaa3271e81043f037ccd8bc747884ed94099049ffff001d393dde25","01000000993b3c2112249f19c9ad8570b5d737edca5569287b0567d0f0285278000000001517c75c37f70975edf0b5b1544a2d0d6fd3756e08a74cda887fddd32cbd9b26da0a9049ffff001dcc4bc602","01000000412cbdad91e7f401a9eba4a2c80fa84fdaf14d5e5b225fa62ba310dd00000000f60c4b914954ab46bb3ea26d1da2cd07a1575092c73db4e8ac7e079dec0904c9680e9049ffff001d36653660","0100000097b66a75a1b1131a4435d242092065a553a5c783982268cd9c1c624100000000b13be961c7d51d7f9e2789cb13115da06c2a43c37d9ca73700f8aba0058cc449af119049ffff001d2ce9460d","010000000e78ece60291c1ed919566f073cebe35e7de9e27450128644502f51b00000000ff8320602ef293f453d4fa80984b99e6b3ddbf327f81e95e7e37b6d706a52cc984129049ffff001d3817e0dc","01000000fe160d825f22c061bde747a4fe57e837df4228bb86a21f03c48cc79a0000000019f3d40902d464bd68201f0af2504999c44db779523c2836b01d1d765d8f3fa963179049ffff001d1b45d175","01000000e04a3c61aa41851378fa3114a19962fc292f54ec4ac6eeba39067195000000009c3476326c8b28186d59e2f840dc4b49bcf30f84d6a9cd3b93dd8383a51b4ad8b0199049ffff001d90652606","01000000582f3eeb13204c6d436bf86a349091d5bf2136bf709deae88f46e7ac00000000fad1874266cbd40fba521b63823acf9a178fc9495c80b648e71002a275188763951b9049ffff001d2977cf57","0100000033e743c97e2d196861034142d8eebef8afba80a9bbe7f04c221fdd4e00000000825b5b144111c542bea32571dd21c9717ccbcd2a42409d9df56e6cec41baf8fc1e1c9049ffff001d0f0b2c01","010000009b0a44f9eaaa8d9bae9f259bb0ded80c869b2aa273252fc48c28999600000000fa77a5eddb0edc39e21feab914eb87177b631171f6084738f88038573751055f481e9049ffff001d01dbf3c3","0100000094ac4f15e91ebc4f73e30c38dcaf05a3ccbbd89b6e63d0ff69f61aff000000007508bdc2b10602af13a227d4dd5aaaba69f564dc068cfb79780b44964268d5da31249049ffff001d25984704","01000000ee74351c839bff3068a0478271d3490131185c2e780bc059661f1d0d00000000c35a1778accaf1fd4c88ebe0091942b5d4ed4d52d16dd917f7321d997da7b2d56a249049ffff001d06c19700","010000001135ecc386797dbe9c5dc214e5272a049941c7260b9a84ba036fe21a000000005543f8b8acc5a6d5f7f9b63fe9b5bdee973f3354d30f3dbd95e91ec312bf3755af269049ffff001d13ab7168","01000000eeeb8b777e2576a7dea51ec3470d79f7f11296e5d6c1441044623ec9000000001c4a2d432b03d8c4c12ddcd1c7fd7566a3ffd2d5893bb9744aa811a53aba2ad6e5269049ffff001db7efd000","01000000016d6875cb8db177caa289fef8c63a381b3344d7cf54eb5b9e2edda80000000047ad5a016d7c282023ab13077dc093031a6b250cf68f71bdaa1fe704f3e568eb74279049ffff001de70faf02","010000004a1704d48e8f9a2b940d163ac9ff1458ac39b740b0676cf150d248e700000000fce4ae8c1cdc453b84ff5bd6b791884cee69b743f3e7c224a51dc76b6c2b997d5e2c9049ffff001d365902b9","01000000be99ac7eadbccfb381d626582b7c919e8f2b9f3cea7de58f4dc140ba0000000009435b1668d90bca05f4d4c7bb628a312f41f89317d25d918ec3f8e171ff4c1cca309049ffff001d14b027f3","01000000004db49c06c8a1452b5ccbf83eac05b0b09d02245ab83af406ff88c1000000006096f2ec8f7145c23b271345b46da9dee9c4f327b95d16754e02b788595825efe1319049ffff001df17f1b03","010000005891f2cfd3abd311afc48e33615875d64a5be59cf21eb7ea7f800779000000004f3b23c9f97a1c50b74fca3a1de9ef2271bb1537c6d34df5e664194c7e2ca7988e359049ffff001d5294f10e","010000003a73f26c47f5c2e5057b984874cb3dd9e33da5c08aa007edb3bbd7cd000000007bd0f699e53ecc1ea51ea4b09aba8c58f6aad9c3b059cdd04c8d72d149438ef2f4369049ffff001d362bd4cf","0100000079463371926fb0eb9b37afa153d28e1cf8c79675184611a0dab889100000000012d85c2d4384cf85bfe9dcf85b7cdbb68cf520cf3efe41dfde58a5feb822936ab7399049ffff001d257340ec","010000002e3d15fa8778041f34ed971bf2adff80482e7722b0a09e4e35918a50000000003b5f98f9482dadbbe2ea39d3cd376c26c3715397d43f29501852fa35233b91cf573a9049ffff001dde7a6d01","01000000d68ddf3ab9278ed969f93378be4360427214ffbd40a9921c902b485400000000d13801e49615f9eb5ea5b4a4493e22dea339059cc1aa948c0fbd7b57f7514e3b4f3e9049ffff001d1fe4ee09","010000008f705ff231091aa74d1840fa627bd12fdb667cd39394e5fd3330bf1e0000000031494da0b7b3b723e767a1ec7d69dc19fd76449d1e79771a40b7c24a0c24c2dbf23e9049ffff001d493ee701","010000009a3046073dea95bd3347999ca5822748ad5eab993c80dd1e08a4e151000000007308c958df8d9af735f6e491558686f48452c91b0d4c625db472d06c5ac61ac3513f9049ffff001d05df437e","01000000f12ef811a1f01624ecc17a7da56ee31f30fe973b5a82a0e2a1939dc8000000009c39b056cd727ba2f12c97422fe9a09953beabbbf8196bc44be13309dad27b33fd449049ffff001d35597502","0100000040aaf9b46c69fca17fd65b1a114fad812d1c92f2b885baf5333f79d10000000017974ae4c48388bff2419407e0707df07c6410739da7137671f6de7c6e17eb79f1479049ffff001d8b702c09","01000000457a7128e58d2f17c670e514d4f8fe0b322657830c44329372279fd50000000055acb759f5be1af9b973752c7f1a547cb07740d7ba3fc32fe3303804ac04bfd46b499049ffff001df0235707","010000005bdf4e8590e4498b9f6092ec7c45fe83ca846fa3ac80d172cb20dafe0000000003a2a792e3a9cba7c116381191a8c02da35e5a73b82846ecdcb86a41391b3d3e80499049ffff001d18463c01","01000000f62f2e53d4d43bd60c8238267a05cad08084f599c11cbb7f0b1992b400000000d28fd20f55ed4ccb439d999aa6839a3c8094d1964bd849cc6aa0425225fe99d6424e9049ffff001d3469a6c8","0100000029f1955af3f55fef2864048cd104219f1d7ea49b6fac92421610916a00000000dc460acae083f5b7cc1c126ee6c6c9dd2bfbe5ca494ad3d9472b55ce0ba7c28298519049ffff001dfb152608","01000000c46490b5204a7d48f4364a7431f28a51cf4c57c327c867fd2ee6e0260000000056b6fda31000e5ddd237c4b8576e249b811ed0b415c7580ee94f7946e6a27ca379529049ffff001d2aca3ffa","01000000cdb16b16560c5dd0db30a41df65523c0f6f0d1365fc6955efb54317700000000c902ce32cf5b5ce12b5a9567e739e76f9981d801947d9b3ed1dd6af3e079311be3529049ffff001de23f7900","01000000ff652fe056ff4bfb69ffd34bcc85d552b5be3293b879717f9be3c583000000004f227b3f165a8a6ac54764d18b3aa0c039d057989581621641f1e676fb9bdd2901569049ffff001d335f13c4","01000000af1333d98b9817e3c3241bc43fb6581559d67e4b426b8b9ea660e1f30000000003b49e13f2bca87fce1b44ea04c3272dc3d30e5759d60215023087d2914d0baf92579049ffff001d160b394d","01000000d6c09f7eedf91495ae2b5575fa2413250aa3f433688612211585af02000000008da40ead16c05e2eddad98cba71ac3d08de32aae819a1e2145b48e945f3ddcf6205a9049ffff001d384e0c02","01000000f31abc245ac4bb521f6d1389a8e4fd108dda6b74dc3ea137b1f6ff25000000008bc44d914a8f76bb18bb9e0ca0f335781b1b1463d29014133ebdbc7961f89516ad5f9049ffff001d2094c6ca","0100000053db3e6f2b5ab997e2a16bc134b259981d77ac54b4167901501e66ae0000000004c80d5f68ed2f606fcc3407efbb2a4df701e31a7de9d7c006aa37e0992729bed2639049ffff001d2ce5df00","01000000b29016fdcedbb38b532a125e3d2e2a1f6c1b072a9af426d63a66f27f000000003e6600750739793d95b5a0900593390352545622e7336d41bb80e13d8d6e1685db649049ffff001db95db202","01000000354fd257ba26081097e863fd41ce455f419a6257b7ee7d4d37f214ac00000000a16e405b650686a7c1e5cf47ad72ff8962a66e6379e3a2f0df5e5b75aa11df223a689049ffff001d194c1a12","010000006de191410fdb2a2e65b57dc183a3e5668d709fa68f48fd86f71910c200000000d9e72b6146f5513c80a1890388a822eac81cfe532b11fbc13ea5c9be6a0fc006c0699049ffff001d34b8b8dd","01000000a39170be48a8d4f3780b30929d8acd811e19740162879358547468d8000000000cd1d74940a93c735718a27658e5e75d9ed5facada3a868354fe4c0a461c956cc56b9049ffff001d020728f0","01000000b7ba18bae9af522e930510d4f6ecf9ea4d0ce5362ed2f921cedebc7e0000000014a3c359177ff6e8db8f979d1665fcfd89c774cf66dcd4c001f727a3a058a7c4676d9049ffff001dd8c4d107","0100000087e35737887917c72a1e1fba94c7a745559b1543f4c3825368cd37fb00000000dc45f54580602a32178d6ad5087273bfb9531372bda5cda37b1f2ec704cd05ffe76f9049ffff001db9626504","0100000072967fa314efc5180c4f17e42bf0ce84de2dbec58a6de9d4146579930000000080e75a427006e604aa665f8153cd28e82e3eb17a70f940167fdfc8888675d1cf68719049ffff001d1d4d6211","01000000ef4b6328fc77becd48f5b4614952394e4584164fa641d785a4e949c70000000031601e2ed703768e7bb363c4fe9aadde040f0a949cb81549f4b239c72c5cd31655759049ffff001dfde23313","01000000ead698557989b6b534e239c2a490d73b4a205ce16d7ae2d4c05321ad00000000ec7882b026b31ef96d8e13be8e8c7d3f93b704a5398d340ba119cf5a1675620d0a779049ffff001dcaf15b08","01000000d67f7b2da7e691bc1327c33a219517112b49842d3762bf287f07c6f20000000018593b12aaffcf0761a68fa54693f8f2b0289df32701c00b9cc757cd3753fc4d71779049ffff001d2777e9c5","010000000600850c46994d8dd5483ac360821671412beb2af6f2604992f1bf290000000070dcc74758bc7803bcbf2bd648f1c9d0324ddb461fe85e80e90c073c046f8df3137c9049ffff001d21ce630d","0100000067cba64e39785d3342c0e5a8a3f15c95dd0676751073c605a4a40ba700000000263679eed5fb628d9e27a5568421c7dbbdb0f62389284d6717fa96562eb0d2c42a7d9049ffff001d02ef23e3","010000006001719970ef93130c46178568d9e0df10639208584544992ed8c5a900000000c446d3e005c7b52e430f613378dd255364be4210a6725728b7cc80dbaf82ce4cb87d9049ffff001d2c768802","010000005a24b7f7b31a279d5ac0ce1f0820be6b7355aa656247393973d815c200000000c8b0b4939ed78b7bdc67c61a0a4b51f90f31f29f93999ebea5dc53c1e3ddef2cd17e9049ffff001d30b93705","01000000a7f7845be0108c9d55bfa718af14344ea84e8e509d2bd7a100df375b0000000018ceec5e6ed4bfe3a4399d662f0330a1646e6d3146d2abac21f5b3f6504710c0a77f9049ffff001d2138740f","01000000a80808b156ab9c626795a4724fe0aa91831b25bed48729bac969e35b000000004eb78046cd16893f2bf22351cb3c180cc3cb0b208d85e9519655ab72436a34876f839049ffff001d01ba862f","01000000bf918de2fd26176d8b76f1c8a08c0dbb54166ef634c9bcb60356ebc800000000e6a67cb82191e9a6dc0f77d56933fd264056fae4b5587ae4b93a94ab08d342b7b7839049ffff001d90b22c01","010000001055b5936b81d204c0e7c0b45897f56c2fcf0232a9c9c46ef96b13c4000000001adcac801d9b484260d143fed62ea1f2151400c51245875cad79c95aee9a263150869049ffff001d365c26c9","01000000ed785df755334883f0e0531b5aef1174d6d560f293c90b6d41e68aa300000000b099d983149bea1253a6296a6786efb33bffff3296aacebe9c19a6423a0235d770889049ffff001d90424d06","0100000041ec4ec54c89c4d3940c88c7884d7df41ca380d60005ecb60642a26300000000fd7ef2360ba0f4e76c4f941a75d5a66c9f02f9a6e8ad1d6ab0a09bcb3e33615e9d8c9049ffff001d3291bc90","010000005e2c197d244611446ab27927dccb2276a3da8d206a83ed24059a404d000000002134ffd637edd746d7a1a747e0f151eb3a0dc5dc36a761c87d78de625a227571c38e9049ffff001d1ab869c4","0100000053f3d6f0f0428fcfd87366d871623992e413e3b4ae86662d0c9b6d76000000006eff04816bff9fa7630dbca74f5dffe19efeb58ae73f64ae5da7c0cabc8a8ce80f909049ffff001dcf847a03","01000000baf0fedcf5706b3c5efeb1c2838b9e64c9b7a838aa1fe12f8fc3493d00000000e71415a2e3e08ccc11df14aad3f359eb25322f7898e1f8551c74ce581e28806a00929049ffff001d2e0bc23a","010000009960f1d45996ce86d5004072fff2a67320b89948b8ba24534e320f8700000000fb8fef24182de84c52e2d2a969eb8f7b0b3d68e3d6242cda91fcefc5b3c17034b5959049ffff001d2ef611a9","01000000d8362373a89ce306e1ab7e35b75ec01e09988213890c1970d6f65a9900000000d4bddd216e0460e74a668f5310414eb1e29caa62d9f314cc88b39c5e1699d3c960999049ffff001d14818496","01000000d4fb8e61dc754660cab48645ee5370f01152d2dc592551a21cbc253100000000c6742c7fab512011f78fb8fd1fb8e02a48c9d87e17dc67be41f1747d19b50abc779a9049ffff001d1d040c03","010000002cd931019e2e50f59cbd91e39a72a9573dfc8b9453e91f547813db2b00000000245ba0cc062d34da678724c5e63a6459361ab8f765135334dad0cbfc90e9fb12b79b9049ffff001d9d161103","010000004ac8279783353fa6431f513906d40cd542c1f0e14b9341b082845c1d00000000ab1810828f16e17d174d40f7aefbab1825ad3652cb00b0c137323495f0ed6b66f69e9049ffff001d2805b76f","0100000038b727eceedf6ec0fa0aa52cb694caf51a05102dc8ea80fd24b2020800000000eadbef87552dfc1483a2e58bf75e6e42bf913e867213a4f9c1e7013c4c370cdc58a19049ffff001d13b0c407","0100000080ed94d44ab1d412fb04fab9bfc84f49f346142407960ce3c590a19900000000cee2a98acb0f5597871d40dad4a43780c5f87601a9696fa46bc619450c9f4e09f4a39049ffff001d289ff290","01000000f60fbf27dc8c4d280a259288cd0e848014a2612c88be66340d171e1d0000000065eeef9ab700ea06926ceadcafc927f0e68e00c20d32839a7c8534068461850838a89049ffff001d393bac31","01000000991540cf96811a2952192970847288f4a273b031cff228178a9e882300000000344943c58c5a2526209ade5425c78ad57009c0ec7f5b52b19dcabe393ae1f07dafac9049ffff001d3a6fc8a8","01000000f515897986b75616c44a24d65e434194675ea2220ae85245baed590700000000aa2c396d68dec9e65f2d9589b47bac447209bf2350c389fb2447c8ea461496139fb19049ffff001d17d95aaf","0100000072b71f4bdef4a294c19338b6b37e8fbd42586bcce6d5c8291e208e7400000000c6e055066cd239fa69db2b17332016bd0f3d17766748a6c46d7546551599fcab7eb39049ffff001d096650da","0100000033bf59609ace81f51598a30b192a47c2e410932d5cf891f61675cfe800000000a620dc6bd5f849b6a0cee21cbfa030be4d6be278dbe3000100098ed14cf93284d4b69049ffff001d330e9bea","01000000759ade6a11918efdf7f571c3a05e1dd44e827547c34a5f2766d93880000000003c4d2c175bc3bd6673c8667aedd56dff4ace1ec646cf6578d832eb2472e7548c78b79049ffff001dd2347c02","01000000fe86c2e8060b2140909552a407cd23240453c1e45c6e6e34cc80cd74000000001758d6b10f5aac6e35a08e3b059c51fda8d4c087dc019c3e04b049418109d1e585ba9049ffff001d2d3ad987","0100000009ab5c7068850f55794223f342b030bf6bb550f44e13d5f248bfc67b00000000231ea2cce28d2b8323509c44362194c51202d8c10a70908e2ce2f5301cce98f0eebc9049ffff001d29c442d2","010000006a94d30084cd64de53e226c8c69904d9c684f5a0abdb778493f24d7f000000004b05790504c7f4f5e7c5e4ec5ae69d79b30e634baf89d3eb3c0f94932b55d1c089bf9049ffff001d1f811108","0100000012fdc33e8824bd5f04e8f46ff60fa0c33c4fa99549433fd64d7ec79a00000000b41dcd7a7c1f690aa50a5c94e6b5e60306b4c79ea16ee1ee8ef54e0de430364217c19049ffff001d2bf98807","010000006f7ddede408869ea2a085a6a99783ddee327a8bb383dbdb8b075338b000000005bdd06aaab06af8778e2898560865be8826b6f96bf7bd37cde7cb693de51453c1ec29049ffff001d24eaf5f3","0100000082bea9d19a941af705770c42c8a911b5abc40754a1e61ea322118eb700000000a3112eb5cb16ea1575bc01f1c5a89433f933c893071a32f72e06fd044ec3a6c142c39049ffff001d1bc43605","0100000050e119108a5eb7677c980e39855cf02b4dadcdc89fe5c91f81bd3d500000000047dea766126a42ef49c5539a0c461f54205a184bfeada06c3e838aba716d4dbbb3c49049ffff001dd5f4a704","010000001738f0c5f830bf8beed294350cb916ba39fffcb4410a062e6e2d635400000000677e768f8cd4ff72d9178613ba1daf78e364390c60c12888808211793165a5c16cc59049ffff001d3441bce4","01000000013e59d5988f3f124164e1998c0bfb2d5c12f7bad9da7b13d5ab968a00000000d8ac2485f625770fbdeb0b884796261e8fe5ebf24442c22324be29a5c00f72cc78c69049ffff001d9a79d402","01000000e353ed911bfa11205fcd34db38f56d707ba87ca77b47f4c0981cbee700000000f4ee5c3f60b580cf74be3a3123cfe285af1b9d79799948b42a38fa6db6757cf4ddc89049ffff001d395aee2f","01000000f5b21f6de2e673590c035983778a034c2282e692bebd5d430a8dc8600000000067f59e74b4a82af5c8fef7c65624ddd6290579dd9566b0460b977f5ee17aa72765cc9049ffff001d1b874930","01000000c8a65acc46e51ee1dfa2d26f0f533874081b3e2d6236a0b0375321610000000029e42ff8f13c7ae0c11b2f52e7487f6aa8dd8de04598eddf16f14718c351e29c14d19049ffff001d26bba576","01000000f5273221b10a2f49e9ce6d4d6471852717ba6e9b9efc289ebfc9a5bc0000000023df166c9aa3acded777d036775f815fae1a44e07e92950095de68fd9058ed300ed49049ffff001d26da1d0e","010000008ae23d06a2ebd4ec2b5902671e26a0db7de316a882ff736bd938ae4a000000000629b6b31e5a20eb6510f8c57530b9597645c3a6e0980a4f504f452535bf6ee96bd59049ffff001d348b6c99","010000006e4c9f37ae46f9aac9ad3969429761e17262209632ed8757cbf33a4f00000000af1e28b1b1bd9a7f86adf940122481f52e5c361e6b458fb920e1a320f3b97cacb2d79049ffff001d1f7fc4ec","01000000312f8f7daa839044e441bc655920007d1dbbf0e47754412319351ded00000000992c4321986e8ae10ab5d9a695f9e49f63b5aaa2d4837ecc897fb148eaa94514eadb9049ffff001d540fb20b","0100000049f3a52796f9108e7e750bdb47820d6797630ff07b3ae7b528f6cf6100000000a1e63f4125331b8c5693c0fbf755a0aff43c3f7b24292919270ad32e989921171adc9049ffff001d2bb6e0b9","01000000758fec32ecbadd8c0b01a5f34a9e3019c5701d42b9015a874e8fbdb10000000049e788f6cf123f0ed9aea1a317ae2fac8d364f4ff7c7c653e8a1dc074e0173469bdd9049ffff001d306a0407","01000000ae33f475d254fde6c564ee68a9da00d9c4049f413609e627b16c749e0000000098e2fbc7db8810a3b026d12315f79e6894b07a2fa5ee1c5c4c59d3f3b0e98d60f7e19049ffff001d065efd19","010000005f2b83fc2dda8e8fc30bf7ecbade04cc97fa3b575a819223c21c16070000000037526cb187142874284ad1327f9ed6baffd5f706c9a5179421016c51fb04d6759fe59049ffff001d38bb231c","010000000a03d2224ce316afd5d327043f3ef0f5471b739310995d2bbe30008700000000b405e42c1f02842946754128a39f47930207ff54f0ffce7ac0fb827b992d1ebf80e69049ffff001d295e9504","01000000ba3d28a0e7f69deab2ecf61f1738c0eaa10130737da112298baaedd900000000dfbe898e8c1acf79223531b6eddefbb376569c0f159d5435fd399c04e62ff91a94e89049ffff001d34f22609","010000003db1221f853f4cac949502e3d84e0b660f5930a23d7d2e902f4bfe140000000070bf94e29199e08d7f1c2c93b58db606ef6700f55710b63601d5fe3395b4b37b31e99049ffff001d375afda9","010000002836f84881d5a2cafc4db5b1b0e14b0aa001363b1336e8efd375820200000000abcaed45a31b634755b930c764e172abbffd360b85379ed4d82356e7f0303804a8ea9049ffff001d06d280af","010000004f28b8e5f046df9b8851899edd4be9efc700ffebba0155f85e0c3eb100000000bf6ea267525cb982f47c9a3d68f4449673a9c3310c88f94d8e8c494b36a53c206cec9049ffff001d2c03d10b","01000000d75220ca3a410d916f09240d74b6176dfede73a044bed7cd6a369393000000009986fe2541f6669ff6c09c95a8e28a635790b57771aef6a810c7d243ddaa7672eef19049ffff001d3909b91d","01000000f1927940b2d9c9803a0396415185bd946ad4155b70b816d7e461322000000000e85d72c81822c54e4fcf5cea81f3656b13674e944ee6d5a498975967cd8849f539f39049ffff001d06f0486d","010000009b5ceccfb3ded5961853c9d5605f61380719f762a4be25c3697b2e7000000000e0eb22db5f0f29914fcf3c7531d79108b166a6bdc9d7948be55e1b119fd9fa106ff89049ffff001d2cdcb41a","010000004b05c891591bcbadac049bc6f6d46c1a125c71e00a41797cf7ff2e6900000000e41afc1a9673f992473f12c4b8506e1b558fa418d6c9c28b0eaead60adde45aa79fa9049ffff001d169cb30b","010000002071d99fd1f611d08bdef37189822268dde208498e34538a6783bc970000000085b570951460da1bea9fb165ce4034ddd9465c5c1f2c0f118c56a97d22e88f9a51ff9049ffff001d2db88b75","01000000d22d97dc0f14ab2f51239bdf83c26b3aa0b361120772cdd8283b07420000000045075be4eda7bc3d9f1e8420057bb6aa9e1aea86273becdf709da5e1a11a34ee1e019149ffff001d26b71fd8","0100000075738a2db0bd3b281e7cefbd15044731ae6a067ab644f7874770ceda00000000de2e6c59682e8a0675bce8f0d60204e37c8aef758547fb07dc70c3890f6ac7a55b039149ffff001d1a932f00","0100000014314895f2a4bd0acf4880bbf42213097f79048fb5dce9cf996bb9a5000000008b54bc3c00366402926359c4ae0cad290b49465ebcd78f06be9e4dcf392c65a945049149ffff001d6885eb04","01000000b59e9ca584ab6954ed71b8e69be8ae5d7a8bfc734383639832f81953000000000c2fa1d06229aebee84b0f60c7748cd3cbd86af7c78cc301c826588f67a7e15a2a099149ffff001d16d1917b","010000005f03298721007edf01dca312b37f769ade535d364a3f2fce79d4397a0000000026382adb7538ee61520c56202e5e08293fa5d64abe1dad39f40271834ced94b7c20a9149ffff001d186f9abc","010000002b821042aea3578516a2916f96af57e0e9a206180bb41986356f601b00000000ba84fb6208adcb1bd8919413d8ae5f4d6b5784506817a31dd1e69458b1270618630d9149ffff001d31831e20","0100000050da05963d0f1184aeaf655f2ae13d8018671afc2638ef570b23b92f00000000f8f01576b95fe074f2896d828bf832c5e437dc7e114fa32d00c4ff5431c95bfad50e9149ffff001d0dab2804","010000002a1cd03d2e2a5735a81d8b4937a7208062e200824ff6c197a08c90e7000000004efd07ced6c388773757f8f11a2f24bdb397faf77e39c6d4610b9c5274a1bd5573129149ffff001d1aad136c","01000000853038db13ea8f5499816c0452d9c8d75713858bc96cc59ffe88109a0000000048f74111196c8c9cfbe9a41792cd990609b171c9c3cb714be2f050503d0d7bd152169149ffff001d3081db25","0100000097d876579bc900cf64613e3e81af8905999b1d0219d7b1604efae19d000000005f02d49c3ab680409cdecef5de465a07cd2bb6642e95fbec193fc5f092ffbface51b9149ffff001d2c185344","0100000093649a05a2d7f90fde8f157a58689d0c179d7b083c43e124beedc49200000000a6c712a761d174f4cc2b5312a1fd78a53cb3e871ab99db90894884523ea3c7e1e21d9149ffff001d020ef77e","01000000cd7a997ba76b916c312ed8d4a1432d89d89f928b242a5893998c4eb60000000058f1be4f7b3882a4c664e59785deb03f2c5a70a674bae9fb28346790d92283eec3219149ffff001d7c58e40f","0100000025d23abffa24a8bbc63bd70f840e80f986c95a9a37d579c81fb3ad9000000000c27870c2d22ed667719998ce03bc31526edcc7dde295038c1eaea851ca6738dc10239149ffff001d2f4297c5","010000001153a5ff1b294ccd49b14a311d6503016a94ddd59a532d84072621b60000000016013b81d02a3f297658b5d1ab0e6abb25a552b2cbce67d57595298a168b84026a279149ffff001d05f2eac1","0100000072e43a6273a09d788e2dc1dd884100acb5831ac6a37bb8304f4d72c6000000002202c036f5481e50357dedaf786dee74e88dfd5ee6baf98a2ca80bbd5c7bcb3238299149ffff001d1907a493","01000000e14c588bf4ce8536d278941cd7b14c873cbfdfa63884be9bca4b943e00000000243f1efc120c0d6010806ccaca52307de0736bf9b0e62dc65bb3b62ae28797d15c2e9149ffff001d3745670b","0100000043fe23439a40a7bfdf7a7dad3d27f1b00c5068c1030f1ca24d7d9d2e00000000114f425a9ff68cddb01745c33b0cee96ce3c696369a3d3c5468035650b65f611d0309149ffff001d363d826e","0100000078f94d4684ae909e33c7bf0fcd8a1b99e23005bc7e1adb1e63e8833a00000000367836b35f1a734a72e03e6fe7773d3e2688a3830128aba698fb77240acbc6beb8329149ffff001d09418183","010000003fc6e2b6c1b841f1d6aed0e66e58e7dd408e646aeff02b3bc7a865ae00000000e9ef6465faf52b8d02ca28919d8c3eddd195e53b6fa8493124c75f66e397051e3e359149ffff001d2a4e09f6","0100000096a0878b057e3d630484aceba3857b33b856e6893c01dc67c68a082e000000000c9156101193a2c707fe72b9b735c8523e31e214e6520a656c997cac14ad450a22379149ffff001d070ffb12","0100000064b53219bd1c1b8889838ac4fa742ee7d6d94c461ed2e228e4424ad700000000987ce33dc4feb5b4c813440870f6e51241ab536899aff16f8eaa98f9c6f979fef4399149ffff001d1efa2590","01000000d3da675ae8a29b5bbfa51b33f7205d87e6a9577fe560d61592f22240000000007e1de853c1995007f83644b76f3d1b4d126110769cf0534e6f9428d52e768507ef3f9149ffff001d13d1f7ec","01000000edd0e3a21096124c1ee6b89de380812312c83b7b0e707217ab8f54c40000000023aa5af4f2f0815fe3853c30d02f0772ed3b32454621bfdc7214c474febfc9eeba419149ffff001d666a0104","010000009b3d861a29bf5f1cb66af14555ccc29047f20591e81106358154f8ce00000000ac36f7aab3ac8058902cad5acc1f8bea0c6e79ccb8977ead8c73651d4138d03bd4449149ffff001d1d5e1ad9","010000009a8f42e13e259345fdd124108e62865614854347d0911c50d73d23a8000000000cde9f3fbf6bd596ce6b500950a0742d49f8edf640fc70a4d8d2a55758de273ed3469149ffff001d3a328da8","010000007386716c73ad07e4d00ad959e853ce45abb3570003d83a5304d76f4100000000ab5cd3183b7782961a9260e04cee20ae41aa90316673cb3853cd95aac295b69f81489149ffff001d085f47cc","01000000598aa6fbce834f827f06597b7529ea94ff4a26044c5478320c345b50000000009ffdc597ec9324326a9a3a3694748232f1c92f681e5f807dc0cd23c98cf1bdf79a4d9149ffff001d421e960c","010000004948df68d3a408ad48163dd02b5a462aa34d4948765ff7a6b3e214590000000066242f9c5d8be2152f49afa24f30c439c649d8bb32ed9c398fb12b7804e2ee623e4e9149ffff001d2b5db66e","010000003e8941cb0eb8b11e5d81b59fb1805e3f630c95b132ec2f50dd25513b00000000bc47e78365b2eda7c58ea3e1a0e0f298507b4f9d6ed32b1f204031524f132ef408539149ffff001d00312f95","01000000fd45665a73e3c45d32e3652c377e8ebf15255e4962fab82dd568ccf00000000079fd64ca99ff446b479535fb448073b2a0e3f1b8d82b6b461ce686dd2a85d8dc72569149ffff001d60ad620b","01000000e57c6e5d17c30710cd842113e033ef866ab20b07f533cbecec95f79b00000000c669dab2e75ecf281f06b5244d52f6e8122016e0aab3fcf0fd1d57b78f041bd90e579149ffff001d3575df85","01000000b2bae628af22ce21d81e9f7846c72f3d7d1120a91f993ac8bee1d296000000007806c6a82a3a0312bcee4cdbd2facd6f7a29b775f0ded508ff3d24259c2d311f1c5b9149ffff001d2deafc65","0100000075ab17071c3b48a2857864f23d6d5d07318e84c417faf442739301df000000003c0b1689b10da80a8f3bd426c34762d5b549e1d1eb413bc658e4f2ae4435a290125d9149ffff001d000e7d28","01000000041a4a86728d13ce3018d9ea1433476eff275b1a07cf5a1c88e51914000000008f7ca8ceb0c26f35d52db10699e152139574eb40188351305e592507609c540e54619149ffff001d28e9240e","01000000293bf92bd15a0cd483034a6dca63ef887bddf1f7dc9e9eda3da1790a00000000a2385ac3ac47a5cea00950db810f7e9f15ea14379b60353e9e51b07da133604ce7629149ffff001d1d66110f","010000001ad3ff92ab24ad464e390f50269615971a233277507136f000341b4f000000008c73a5dc2acc1c3712d6ff65be8eb80cb2a3a25cc2ea5e5dbda359c11120380a65689149ffff001d3913b74e","01000000dc22476fc5f8eb0be12b3ad2d91131b2f33b1a5629f67da21eed60c6000000002fbf16a9b6330cffa36fda9ee099718361026808104cb65c1d4dfedc65fdb4b7f56a9149ffff001d3a585b2b","0100000035faf63b8b1181a4c177bb2c0e32a31ed97351091558fc10c29562bf00000000b2027322e9869d0a2e9f145aca6a72832139cb350678feee7cb8685f6d7a9bfe6c6f9149ffff001d26041972","0100000040e3551f49997cdc6fa849494b0dceb158ff92d2c12c1305b4d934af000000001e6023e9e58433bb84b2343059844db1bcf297b8987b5b521ac19ad985d3d66361739149ffff001d1bfe5b81","010000002d8026ad809223ae3cc8fadba742efad7a6b32d575bf0116a48eb71000000000fcc9cd06a57e2471fa0539f8f24882e498977117271c56007a5c36819c02f6cbe7789149ffff001d034c189d","01000000731c736c4e84a6f01595035ee0be4cb456804f4c6922b3112b51fcc500000000f35fafeed103a7b232266162e147ec76e6c4dbf735db87cb0b9f51768c65866efe7b9149ffff001d333b765f","0100000088750f7567d80db2ac56a4142b01c8415182d33d65b5d0ccfe94a7020000000083b3b2a5cc57504e7ce62459c6a235555f9cc28eaaae769aa35ded3c46b904905f7f9149ffff001d1c56001f","01000000e968480016b2c76a50b22d2d15e87f7e74b47e465640ceb9aad5294000000000635256c330d3b5ac542f4e9ea1711b4157797ef167c1b0f54a2a785bb7d4ff5843849149ffff001d1a48402e","010000002c56a35ff6139aaa2ec8f70d3a39a19eb97d576621fc8864c6a5dd3c00000000e65a5f4b1ec3475785c7e216830bcb755589844f8b329ae6a41236b8de7d5ac442869149ffff001de5bbd205","01000000b3de9808bd18db4e0fae05cb99c00086ad809f7c1a72e42103ec0de0000000001a9435b56f5e350e723f9b5086d7ebaa7d99f1bf2d68563e91d77685d50af4cac8879149ffff001d327fcad7","01000000de66839d7b0da877e1cb4a11de2a797c4b7a7126405850639d50d980000000003874b9048c4dadac273e8adac3c6ea63f498339b5fb6ad30d0d8b90b2fed6a874f8c9149ffff001d08385283","010000001dca3fb89746995c9347c41948af5b91b77000210f75af59c44249aa000000008a79fc55a0990cb57fca3b7e964d9eb495f0272eccb0542e5ec38e3ead0ef66e64919149ffff001d26ae7791","010000006f7a2c559cd4a30164ecb7483380d0b8617df663dcb82563fa7a030300000000f850d429357fe7e98e9488804901b2a1c9a565c325f69a6f38f9dcf90d564671b4929149ffff001d1e225511","01000000cf421eccbc142f40db66b06e5220dc99e4a5dceb7c79de4cc3d416ce00000000bfe2f7ee48d430a3d8132e94ee880213893d25e3052a923e288f07c813838b0fe4959149ffff001ded19810a","01000000cd0e8190c91597c0dcf74b66a56466fb65750032d704cc419df09e4200000000e594f8b1d199267217cd76254fa805d75f5090593a65fdc188f4c68213a717f87a969149ffff001d1496b902","010000001b49562ff74275356db7bc9e820f497e010c463cd7efd85e4b3d1d8b000000006c5d8ea9b5f0be680a69a2240f44dbad6fb31962606724499c66f98f627d36ff34979149ffff001d2da96fb4","01000000f2775eb15b3d3c040d7df069a84a3330395bb58d1d0ca657401ed05e000000007b2b7a430e2be90644962952567f1594c0b2e848811e194645b507bcef52ea35d9999149ffff001d24745db6","01000000c197f004b725ad245266b427fc6445cbb0f5b91015bbd16557ee04490000000073c86690fa90aa5849d34c4128068f15537f6e4ca8625044343f2ca3075c5f748a9b9149ffff001d5a1f4204","010000001e6e1da3db309308f9b0b27be10a82c6cb355b9204fc3c845beddb51000000000b16470c01dbc66a9f5484a3429e5f5b3acefe6ce0ffd27c6efd154181ef7a5d6d9e9149ffff001d1ca16271","01000000377f888d5d0fb28bf811e752c5122101f7950afa6840e53818618102000000003acb332e5b6612aea682ac3c3866e5578d688c7ac82b990307c45c30c8d2c986b0a39149ffff001d07ce8481","010000005dbe12e5ede65a8116cf131ecc075082516dcf3090986af54908b05e00000000d67e65f7a648034183e67d5bb563279d1b5af4af0a8feb1b1701ec4e7653aab536a69149ffff001d28951686","010000003a837a08216da469722f800b271c852cebba4777472a6ae3c2872cd70000000068c2c1c065f3e1a12a1b19e8ffd5ae924978ad060d971475cb5d0a413fb6c2d73da99149ffff001dfbcf2c0e","010000000163fea825e1a5e5a02eba71ae5e6ec2028815cf3a2694c26c37e420000000007238800fc69ee98a63af8697877a26946742132025882419f7a215fc7e49f1461eac9149ffff001d1fe5cf84","01000000b92a9fe796bcbbefe2f926bdad6146333f361a5763df068bf5e4b4fb0000000046daf5bc7392f714ebb6e3346e9d8b7a055727e1522f49a299d0cedb284665265fb19149ffff001d416d6619","01000000e5fecad855805ead23323ce87571e7ab338034a2731f291c6969950e00000000c16281e465423c289b7720b5fba18d632b926e4c8fee65050fae293a09d8c1c2b9b19149ffff001d0641e99f","01000000a5f992439bff4d0f07ca538d9f67dd358826c152b0883405bf2a7075000000006fa2e814c6126b78647c4990cc41443bc9498448e9c864a7c9f27c402e2fcb96feb69149ffff001d13becb37","010000008fe517a1084ea2a9cac644e15cd8953a6773416e47ef8d88560bee99000000001cd1305d212e62056ff7201e64e8248dda44db373a2dd3914bcd8044a1deb8ac42b99149ffff001d1d6dee6c","01000000891d7fefc96aca352ec971e7841ce5dbcbd385449b1df2ccd975de8300000000cd70c29f6b1179b18c1e22a3e4c944591bdf4d29827c9edf99f6ac3d8fe22c4f3fba9149ffff001d5a00e102","010000005316dcb58799ee9d87d2d7bdd607c4baa0cc9cdd86ae256a7e853bbe00000000532643b5d4b94b6b37ca4b9d7ea43e9bdebe5bbeb804e1eb0aaee7fce32df4e66cbb9149ffff001d69142102","01000000e60d5fe68980cb32ae9cf807e76666eb28ef46b19410fad1ff7fd66e00000000ad60b1b54345f6595d9ad4643b6690ea3dd26f07fd9a73ddb9a5f14346ae6f87febb9149ffff001dd2050f02","010000001adbf1283e333bcf42512abc176a64cac016d83f0b0233913b722cf000000000e2dceb54fd256cfeedb97b40107aae0c06a7a155fd71c41a5aad676a303a1512dbbe9149ffff001d3347ccf0","01000000d3a7519b72aae237b858f21ea9809378f0e0ef7bc39b1d23850372700000000045f4cb5737454ae0196d95684cb85b8df6653325e49282c86dd8b74f5871653151c19149ffff001d216e8d7f","01000000a688b8540b351fb649be1bfe1669d6f8b1c5d9ec4e97bc5f86d294c60000000034339ff3a4087dddcaf53967bcd6be8a5f15718a90e9b129fe003faed0390228f6c29149ffff001d25826575","01000000bbd79352b0816beb4562d4fe39f77b5ffb64e09984ca30fe5cfcdbef00000000258f5eb8f27c13a4dd8d831eea34a43dc4c6c183918633947157a2f9755e3ec6ccc89149ffff001d9943a70a","010000007e0fd3ff56d09a37f6bdc6f3cb82522484eac175e8886db878be8be000000000bc7afd87473b788b2d55fd94e846f51afb0cfcea776fa0cb4aa447ac0eaeff85ebc89149ffff001d06735d69","01000000b26cc759d86a88669110c0330e280400dbc3c7f5610cb8b14de169f1000000007337094225a11ccc51ec803a8cc4d259dfdb2ddd8748276872fa8f3ade59b36d2acc9149ffff001d20f6615d","01000000a82c1bfed6e7ea0768a689ab6133fd97cfd8d6700e44a973b8f442c700000000d8f397f4a245093b4092ead2729a43d9c8c8d3fd007914e2d0c66e082263cf0d0cd29149ffff001d068f5b7b","0100000076e8499865de521f6c77f9721481df1adce71d592ad9767ad9ed05710000000037a19abbaafefb41f087192939a22642952d406c005aa3684538d19c69b84a3136d59149ffff001d36cd2962","01000000601f0f3b4a525904bfd40f92fe5f10b79f785f8cadaad6cb74f0accf00000000949d38959f0be72cc72469c63b55515141eff0e7a76d12d87e0431178075b34a72d99149ffff001d289455ef","01000000892c651c18e21e19fe181a07de74c8e30c7a28d059a7c28ab16ebd66000000008a0a85b0ae34afd436fcfaf3252c0160b046d09b9715f44144b2bf95acb7a261a7d99149ffff001d2c979000","01000000ee98fab8cb6e71b9a1cc37496161c75249b14130ab31be01277a9a0100000000a4ec0d35d7ec2f6bb7f02e73d9f8e86bbb279bbcb5b1bfd4e8b6f6bad974ffebccda9149ffff001dc9098203","01000000d80b27dbf48c7cd6d0779ec0b1289841e3de497fdd9c3bed9d5221f90000000072ebb495d07ed7c919ce307ca200c2b660a616e2591fb87591cafe8bcd91fca66bdd9149ffff001d2eab5a12","0100000064c56692ab51e649dbdf9906675c69f82b51c35c586d6312c5dacd650000000020b073020d20e47093766628a413c297bb238fb913fffee50d95da92ba90917fd8df9149ffff001d38180e47","010000007de308985976b0ea0c19bb702ffffbadd3f5c3dcd4721d359bf5feaf0000000076b82db3399d2e75c2fecffc1aefb0e08d8e5d3364c8f96d46b5679a5dfd946b69e19149ffff001d71406806","01000000275e2cbae6f10c9a69db19fe7ab8cb09f043ba46bd4957a46ca2021600000000ad722df1517f771375fdbc48a645148365b4b544ba6b29718309bdc1235b756798e39149ffff001d1cef7238","01000000597a2a60ce7ae384ca3f11643b1cc32944fabd31ec0f3324cb3cd99d00000000b8fd856ae2147809b948dd9ea509fed1af5be9a0a399cd7e42b8d92610a2db2dd7e89149ffff001d0154a1bc","0100000004db6fedac54d727a7bd396f94ebc63e0690dd034f86db2c6ee140eb0000000079c0e1d49c12d24e8ca282bb9019af150c75c11521aa079ad4d4ae9212c7d6125aed9149ffff001d1949dbd5","010000002cf32a49870cbb2d7d281961af00a3eb34f1e9b110fa0f3a706d9b1f00000000f4a2686e7ce38f58b5dfc07afb257f8d1ab67e263be1c3ef87adcb0e88ba409e1ff39149ffff001d26a616d0","01000000378a79b458a513a555ef64a94550599b01c465d9a9432f962e96b857000000004c068b7e0f9f9df32444db173c4d09257e8083c2981e46ebc9bf88ebd6a23c60aff69149ffff001d204ecaa8","01000000846e5a8c29fec22227dbb5a6ff182b4fe85224227934303bac7a76fe00000000e551bfea5b1cdd0113c849ff6e889c12bce3e86a95881e44e2f5274d5dad7e2e3ff99149ffff001d06000412","01000000c5fd756a30612ad7c8234fad0d84090919c7ea03ec612a7f44a72e6700000000628f906fa7283af231d410b1f121218a0bb30fd8a3223e7d8798e892ce70ccd39efb9149ffff001d17ba6b60","01000000310d0e21f2256bbc5b913b407751c454392df5f3d65fcfc3cb1cde390000000041886f7ca73a29a08c1a098d084f7c3b7dd23793a439ceb30d364121489c3a8c5dff9149ffff001d30e018c9","01000000615164d1b1de0d5592d8104eea7f1df76b371c02af82d1a4511158ee00000000c894d85267d877b6e545225ec14bc001e72fae22a3b1a0cd723cbe170114bcf044009249ffff001dec881604","01000000a4d940885075a916fdcd73f3404cc1d984ea649100e111c13a2119b90000000094acbbe0dd76bf62f3f35d409d8fd0edfa8293fa262552bc1aea96f3ffc15b0dcd019249ffff001d045f6bb0","0100000085d82ac88e3b0217dd2f682ae29201ee58bab2dc4ffbf9699360f02d0000000058c3e06e5378572eb21efd637119a8b57b861ce4ec1ad318dd1136cd8de2576595079249ffff001da5936017","01000000b8b65c044c1e7c59c29f5f39509f876519fc749a23993156117e6ac9000000002119a7bd351265054437c142fe63996a73f2031171deb7bc30f1f5b1a45560c8c8079249ffff001d1ce702e6","01000000f25fcab5193ef316139532628fd0ccb6d84414e550ebaf44ffa590b5000000005e3148fd143d8f5ee9bb5a351f89241aa544294c9d5cfd39cae064f319a305a71a099249ffff001d270b9508","01000000250bda52d799b5336eacd8513d8a68be05db9adf81a81849bbab86a1000000003752d0028e9886a81c3ac9b2dfcfa682f542029d1c1123a555539e56f1a68834370e9249ffff001d1e8e2855","010000008b398f5bd9f82a52baf8cf4c9e842f159db4e50b12d8649f2188662900000000463fd62a81db021005c82e73b2d37e217538e6db084835e4ff2779f32cbee95871109249ffff001d25746719","01000000e52ad85001e97f7c11e8289ab3daa8619e524aab96312a90b5e1d217000000008ae7252685b95e964eb83381b3e427c6e478b4b88dcbfb18d4f9319e0907a70fb1119249ffff001d8d1b4105","01000000846da45ca9099e18c8fe2b3c4603325cb4ebb9fb63be95f05490cf7b000000002b0a5d68715da115c876d8ff7a22d414237512f8ba65d0705f8c825d78ac39e673139249ffff001dcfb6d404","01000000aec32d7cedd6f3def2f6f2cdc5facbfcd1c73bb02e05922c6b8cd85d00000000691fa842f708ad09c4c8cb4f4382c431ebbe0140a2b5faedbf49d6b960b29a9bc0159249ffff001d37409bfd","01000000c76604132be1f7a26fa122792bbce9c8750fb6cf5d0d84a4a8d0ff130000000031299784a42387d2a9b4f45e9723e9005924f3ebc9d98718ff52a44a4c08ec9682199249ffff001d01b93be2","01000000cc0fb7a181c498334b0987a5bc07836505b32969d070d77d8048866f000000003bf970831781189fdd331cdf7953acf49d97bf4b54979c4ed2a5be274557d7abfa1c9249ffff001d3350274b","01000000e368f0e434a634d2b1c009bd38761ee8fb4dd733bc307f850f8d77c20000000089a485f25efc7279495b7fb0f1564f8e2da897f7805fd888c6a6a309b83660ff4c1f9249ffff001d58bec709","01000000c635cb97b83a245a89dd33784ad1e5eb11831c020e5a9b477b2d596e00000000be3bc2240a0a2973a4b474f8e024d192e52f53b8ab16b119d075092b26136597a9209249ffff001d85632503","0100000018d4b5a065d4e3269b0dde0f2f2ebf5f8ea64442d4ada08a8a9672ab0000000068ef3577daff64a002378375001ceac2c17176cd8edfab9970cc48a5113259ebce209249ffff001d6f159d00","01000000654fcf7c022b2be109ef278299357e9217e45602b1059f3617b1ec0c000000005eb871735a9d82ac05e59a2adaaf65af1978ff43f4a697085c23cb08aba62c0598219249ffff001d01d4a0fa","01000000d6a3d17c690bb47312ba414594622e7edd68f02fcd9fc12d74942fc0000000008deeaec3aecd56e6e6b45c058d195428003c87b3ec0c107f56dfd6ee3c1d5b1733239249ffff001d9d7ecd04","01000000eff5ba276c1f748cce1ac184de8fcd7e0d3cf6ce98cff8f5dc846fcc00000000dda5f6e80fb0219801f12930151635ac4e359f9946f2c3e114cf3b3b14999e1fe9239249ffff001dbdcc4203","010000007557b0be28c43121b05d05696fbde9b039eedb0d128632003512c7fe0000000032da5cd216b83cdfffc58f8f01a8ef2c6eb88c09cd5e27a6f213f938e0591581fd239249ffff001d230b1477","01000000d76437a4a0e7dd7c65c16b4d41137c1335d1a4160677c7764380f48500000000e145098192ca485008e7e00f135e092b1eb8b444bb854846912ac9911c31648d7c269249ffff001d1c3ff26d","010000005c400d4bcf78a34aff89c5139cc16569dc3db0e0d83481665bffb09600000000a09e56a66d2b690e10b4e6bd91eb422570e9abc7b9bba45be142f882f9043895e5279249ffff001d1b277b04","010000003b299c3100ba05571ef35eb7d9a05b63b175e299cfcd483730f4c37b00000000da54e247b619546fce8463cbc415caa625c94466078165add50e9a9b4f783173832a9249ffff001d208a4cb0","01000000c953cd9a42bd653f9c0d770f2aad91f9bde092732b38acca022fdd0700000000d89905198ed8f6c3d7b6bd19253507532e4f67fa8cfa51c9b61ad14016f1c631652e9249ffff001d065b5983","01000000eaa8455198181b78c3a6024e135493524227b940220f4f22b86dcfd400000000aca1b047657642e6a7aa43c2a1191e626d410a209109b1aa0317c6505417dc945d309249ffff001d203f5996","0100000063c7ad6efcf61506e460c83f62c9bfd7614ac495c138e101d811f08e00000000c25423f372e8cb27706e3fd85ff69b6b26ad5ed869b69f5745ad09f98eba11756e319249ffff001db4ab0b04","010000002cc81bb67d33bcc89feb911c9d75240396f9fc7f1b72bfa87228ed3000000000d1da0af78248b4e1f42f11dd4e4384e014567a93e430cc49daa90acea1e7406c31329249ffff001d13458702","010000008242739efafd371fafaa40b853621063f61bd02a77570da0b97ff9f60000000092c7c8e7ce51b2d18d539ba57035ecc6904e6b6b070db031617a6f72b88ebf91c2349249ffff001d01828974","01000000f955bc34502f77db47970ca1cf57a703041771113169eac674ddcc3a000000007ee08733bc171fb3be69f82978e8b1a974ba39f64105c6d3c2cf227db12b85c267399249ffff001d1b3778a8","01000000c01c856b46fa816b07b0da271f85caf347a6ba539f5312b598af432100000000858a64c26b01242e4be20da714b0e0578f34b87875d7c006e59fe8dcbe6096bc753d9249ffff001daf4a7707","0100000035c42bae6d922451f3aac9b740c9b2fcbd6febbf1a9376e4fc5fa48500000000cad330b67c60197889c9225e0d28d6811146d5412a4a39a8732de50510af03d8173e9249ffff001d14dd0f0d","010000003532c1c2037adbcee984fc611b6dbd3809a9c11905772aeb1ac16653000000008dcdab5dad104e4bd8ea1a4719618bc6249848001025d91b6e7e379a200fe08941419249ffff001d04f21128","010000003515b590bd5fe0ab1f4ae34c02050094b37f5e05141461b19513ac4100000000a9bdc647552dadaf38d867a2064f0694b01767df2dd5d245573cd1817723a0416c429249ffff001d449ffa04","01000000a7228ae684a4601e4d3515b0b1ca7205e3a05ef211a6c8d47cbe8c5c0000000024e76524c82dc9cb218e3c6b5bb4a45d347bbe15fb1286bd7717fec33650d95aff439249ffff001d39e8dec7","010000000ef80df1069428648e6588a90411406806475f8462e178bb0340515200000000ad339ce22d0e94dca724ef18c9158b5a3947fe7581b8f0ea91d0987740aa6fce84459249ffff001d20e6293f","01000000e5d996e03cec8c80179b2d7b69d46feb7b45fae74d26746bd9e1433500000000442b3d4f9a0659fcd92eee4542e62c1f981bc2b484688b4b140dbfe323215914fa4a9249ffff001d2fcae497","010000009061a6f53ff4780687f099b1a92f252f7f28cf04f0bd38bcaeb8aba2000000001dc0744038c3520cd7aa83e2f0bc28e8bfd5be32fdc5da1eedc93eab9fd29005724e9249ffff001d05243698","01000000885555f21822ba4e0fab1bd792ef2b190d2ff0db3e6b946e9daace5000000000e19fc3f51c0d57a611ff2e6f3b0d8445cc0d5c4525f8007af5e1de8fbc2e22ca6e529249ffff001dd3ac8a05","010000009571eb39f5ccbf90d61dffef146c526fca5ea89196a02d263625e3b2000000006d35861785347a47d361a985fcd6bc56e67898e53283df6a32512999e0a398c0d8529249ffff001d312470f6","010000004ee7d41f481b6522e55af8cc4bffb13904af7c6aa9d29976edcf2f390000000029a16558d10eec54e4d50792d5f8fe0b77f2899ada093835505857c49f39316354559249ffff001d19f5a927","010000003446f065bebf72babb1bdb9a51abe5a47458ea7b39a49664692809ac00000000e70cd5f15d2fc9d76a938286e653153657d108fca6fdd425b6b5b878a4ac6e2eb8559249ffff001dce6a5f01","01000000ee43b10515b00dc4ce817c4afdf7e8544ab0f126695cdd5163786de2000000001b5b3dc271c7a0e039dd5a478c43246d3812052b4088c6a1de1bf9387cb0f7fcea569249ffff001d21ffd613","010000005c2a52f277854522366e23062111999917e2158e6895f0ae42b43dae00000000e49bd847cf031993095a47b17c85f04a54358673582aeedf614e555f1425b00d57589249ffff001d387e27c9","01000000b1665cd741b293686cc0f1224a2cfa32a9b62fce26132cecb7d3fe1b00000000069de6dfed0fae31e1fcb1678d96005bbc8b08660fc04305b76e0bd88fab66765b5a9249ffff001deba93f09","010000004d27a25bac49c0e4fb1f48738bbe16f4d371b2d148135dd7b1e9bfba00000000a7a6b19b514a3aa1bd2aea6ad9e04f55118d3526913bc98efc2b3c3948684acb695b9249ffff001d2f758bdf","01000000f3296a8412cdf8bc678b260625a8c67ddb5c693195f2138e56bbddd0000000007398eabb4cd1714f6d390aa2bebe5c33a1c5190b532f90c723f07ebf6576553a475f9249ffff001d39e04f4a","01000000698f68cdcc378fe0d3ceb22710d74c6b8f0ef3417d70f8d3f0a63ffb00000000688040d62f6a94778e7bb5870d566f724bac080597d51b256dbd231f7f8590b144619249ffff001d335cea8f","010000007d8955d5e1fab4c4177b4e68caa63d50fe93707b15ad876c5d06e50b00000000651142360a47bbc624871364bf002337a4b7b849ea80c4366da4a8b6d26f848e18649249ffff001d264958af","01000000cf10167e3a7aefd8a81395dfa6b5100cc39a7c5ff1333d4a283f97e300000000970335aab6e2ead1bdc61a12823017b5617a88d7ad3fa99b0603798fcaa6a462b3649249ffff001da3e59d01","01000000f90feb7d2b269921ed38eff16022f3dd7b49a6a08e7ac6e68d194f8600000000068d21853852fc74cc05ca767e01810c7389441953302828a3401a390869ff1d45669249ffff001dc2e62801","01000000d5f7c61efd2e08896ecd9793c0efd69704ec02ec47a611dea4e1846a00000000f00ac52151e815f6f34aaa468e9995a00c7019e922f3916c2a2c2916592a4ffeee699249ffff001d273e19d6","01000000a1421d30563e015ab91a0bd448a7996f7038fe54cf591518a61a028e0000000092e3120f503089f73d73031014ca3f876606c76c1685106ce96226d3999bfc76266c9249ffff001d06347063","01000000b2d023db7b85bfec001f3a74fd03a5cfa02661d8073a798198db0798000000001f6b7769cdaf3197a69ebe13913f20b3bd9119a52ec89ea1bdd48b77a5f391a92a6f9249ffff001d1a6e0867","010000002d1b4429b29dc68b3c8ecce1aac9b09e8cebdd16f29b8d98561b6de70000000011ad133b6985f53061ec71db773bc1b042c3bca079c7b60c706d79ffb43c2ccb34719249ffff001dcab4ec08","01000000879aaa1b413a1d11d2ff77fbab99439975fa30a87042d0806ea8bda00000000027dd4d0827b1a2ad128771a484461c875c5248967812b2df0430e0af7f3f3579d6719249ffff001d289fce05","010000006d852197297803e3b6dd48f6ea7daf4296bcb9099c66f608e38a96210000000033ad0a6ebee49fe2b216ee0adef390965921b6f2600adc81ac9cc47c4ad8bde68a739249ffff001d955dc907","0100000007bcf5c790c50a3eab050df44e278983e7a222e27b0023514aa4517b0000000066e51caba6d63f453e2431813278d93b62d6ce9770188a316d79636fbadb860d80749249ffff001d34a3ed26","010000000a962f63d1a01f8cd09b7f3d1b972481a63aab623224ca0c1bada79f000000003da704bf9ab332613c13fff1759f9b84eb0883121dad5b5f392a40dcc08d3acb12769249ffff001d2497eb20","01000000681d27b2f2f8dcdc0b05f7b85804edf2db012df31541ee043281f7e700000000bf5d7404cbb70e6d158be12c0366d3665c4f2a3504c74cb8e207b9ec4cafb90037789249ffff001d39b5ac8f","01000000cedcd47727d6144f99f09d7f826fd7852e33f0152ac9abbd1b2796c500000000541193c6d53a84e7dfb5a49ef16098704617dfdfe1cd07389b00a990e94e06bfa57a9249ffff001d273e82ee","01000000c72d359536481383e8fd0e5ed2ec5aeffae209d5e191337b33df0944000000007c2333b906beac9033a1dda5e162dc25e3eb1535a29bb1589ca3f6c11c107cda88809249ffff001d1e7512e1","010000001a4050318e8aa9ca944ce2e00b2996f29a2d8aabdb8b3c224fcd6bde000000008e922aec64201cac2b51e055feb6e33671d6e40f6596226b3a1f4d7eb86734ae6e829249ffff001d076191db","0100000016a2a3eb5f60e05cd52b8937daf155dcc158e416a9a624f45e7acb2a000000006748b247d345f2d78dd2ee21850b2f895e6b8de6e70292fe0c6634cb0e1314d8f9829249ffff001dd840f601","010000004c0940c93bd9f27cf9e38a25b7a83a27e3b28aff62fcc96451d0e9e6000000005765fbf32a363b2d31ab43fba07f1f0c282901974ff6be712b63686c83d772cdac859249ffff001d2b1b8228","0100000037efe6bfaf5167866e1aead5ae6253d7ba5b1766958baa5115d108ee0000000092e13604773abf53879604d17c510cefa953f77ea6dc4898eb6aef5095bdf2b73e879249ffff001dbfb14806","01000000f86c99db81b6ed19c3162df0a8a6e760080f0df59078795409f81e76000000007b7a0243f51c2fa9b947159545dbd34e194730165fecfd55aa94defafa559edac28a9249ffff001dfedf5b11","0100000014af216c6dc0d1fb508607f48765459bb40d77307206ba3f7c72bc42000000007e2008009ae2b74dc9135bc951df76eaf640272961ba2b541ce719f6d97d1d8aad8b9249ffff001d071c1486","0100000092a8df81b3187b3ed4eb2b9c7d5515cd1e7cd60cc3efb4f3198b1dff0000000062c03e6192ae85165f1611a34b5ff902c70a54f1b8c27ef4106468e92e286608308c9249ffff001d12be1a02","01000000c6f9dc6dadfc87284f85c7e7676aea6bd5ecfb8084f96781eb3ca1b80000000066fa8943427713a1f673e613067d2ec7da333549ed27c8563d798a0c503a734c598e9249ffff001d33b70b84","010000000b662aea6addc386f70a85ce6c459f809f9be8eb378571b888512978000000000143be0d5b40774c6a740994012959403e942e59aea32980d5909909dbbde01538949249ffff001d00780ddc","0100000015b950673d2477e89adc36af93123cfe58fb0239baa54592b7221c74000000008725cb1044c229cfa47a96b9c944429c0fe50df9a64e52f434ef573b886359af29969249ffff001d28975426","01000000fbd4949ad4eed9a1498279458ea4e331f7fcb253f0e2d75bddf02f2f000000004774aa7750c37ad8baa34b74d723cf76c2dc30994d8b5dc7e8cf714a59e2356f66989249ffff001d352d1a98","01000000dc33aee49b69263cd94a03ba8d0305dad930e68913e0dbc179e3e43200000000ee63d981403e56ac1f058b11ae571e310256bd58034a59ed4fa26565d084e84d799a9249ffff001d01ffbb0f","01000000f1d18abf5e4cd7cbb31bef8d57c1145bdb31b98be21a7e25eceab7b50000000013f1c9017297e6c9bd2d22426a3bcc15218d4af2976a5c762d43612f7efbb347259c9249ffff001dea1f0005","0100000051537ba278facf709481154669ae60c0e7a1a6af14beba227b2a4d44000000002b3bc8089814d569f488be810eb84a9feb649dc01cdb8a46a4086ce96ea7c8ac0ea09249ffff001d38420f6b","01000000106b9358a69e9255cf6d378e797befd9de41020102fd5f092b8e6f3c0000000056fa131c367a340b0f345ac9a7173fe10adcd4c6b919204b71c11f77501e736ddfa09249ffff001da47d1403","0100000076ed3bdc3e046a0a46370f3011b673d685a85454e555474549e7f12300000000cbd2ff70a457c20f0fe52f6eb7e34bde68311c9c6a3b873a0f4639d69e93d9d64da39249ffff001d3a2e1120","010000003843aa1f88daa2acf7e8a3c531bb4bc14d08f54a15b31556979931bc000000006b843fd862811dfb51ec3b05073bd7eeb6f0a8ff8c2b836e2a2aa528d3ade062e3a69249ffff001d324cea08","0100000000ba2bc54219b1fa26c4819f6a748153991027cd075e73268a2392ff00000000653bad716d7700aea971a8955f4eec0d5e7f51005b112e8c322e2947d8b7a9f1f5a99249ffff001d1ed2f6a6","0100000096f6c54c8e4ba397fd224d78f9576fac872bc8cd8a75778b218086d400000000efcbe8db92e69fefe9e6d3f41bba77c8e9a869dd2585fe3bc9d83d04d1e8bba271ad9249ffff001d024d1f2b","01000000c48fbc468cfd86dc9f8361bf6c1d5c51e941375ef598b8041e1bd24f00000000daec84f4f5f08e04be9e87c8511e74416ab729c86e47d12fbded7dca93d8329189b19249ffff001d1f970bc6","010000008cf2b538f6475eed8b40ba8ef86b1de0d42d5b7831eafaac9a080c1f0000000087e6912642158e7b414e97bb12f93d178f3035273451b1885a5760d1848f0f0d26b79249ffff001d03d2cddf","01000000ff89f3022e722e82165384d35bea382ad20abb0eccf9785b6faba14200000000920cb3075cab86239dd609462df8d887f0d009758e337832e66f1e5e5049febca9ba9249ffff001d28239ca5","01000000f6e15e5d7175965d26a32170c419baf99ea2f4e58ecd9ef09f8524c200000000cf603100a59fec9f93d9c9828522738f004dbfa79dbefe6b870ad29edb8be9d83cbb9249ffff001dc0c21501","01000000abc225aebd023eba52ec7e7934eb5ba46d2e5a019aea3ad3754cb7b000000000f91047a176950d2cfea337aaa85ae0185621b91798ef7fa56ccbc0a1891154b041c09249ffff001d387d3477","010000003186a3c21d66918d1f8c5d826dcf44a62d677458d3330b02e3f7c67c0000000040c09385254421ba0bd933f14bbad14d4b882c9028f17d7d711614a3b30870fe5dc29249ffff001d59e1130a","010000004e40dc5dbec5e1be15fcd090e4a6e2024c34a041bd465614fbfc23c70000000020d94351260b02ae509d7b363d39b1725514d432b6b57f3a1310739fcf80444645c49249ffff001d92e09e07","0100000076903fcd8f99520c1a0389cdcd56368a3951634a91a8cac76c7ca31900000000d9b6d11c6f33b700c3ed175c28b899df285707363b0c8581a3a82bbfa5c657cf72c49249ffff001d1a444479","0100000082240887ba32fe87682408e4706096503c310ce0d71cf485f0482bea00000000173f8ca22958801f5e94f8221e2d60552ab00b1301e687895b6e97e3aec6396739c99249ffff001d372db122","01000000aa48ce25749889fc19e0f382c1e268db6cd7c3ebbe8cd0f2a51d0b6c00000000e167b48fe0cea41fdf48cabb4c2d929bd47d57293e8ae2b12049b6dc95315476d6cb9249ffff001d6ceb300c","01000000fea4f349d48f883760fc858fff822969d8032e936a380b10f0166f490000000054be32277295aa428f67c69aacab55f29d1eb7f63ed984d65291d14aab18502601cd9249ffff001d314b2e93","0100000075a6ca72d35949652937c2821288424a5ead5488374327579e59fc860000000062493122c94c954766cb67dcee894e4ed71b5eb3807b529942f99dffa3b553680bd09249ffff001d256f0908","0100000080a3cd2ff1fbac65964c7739516266dd22f31a6be9ceb212363c215300000000e6420bfcc1c8de64c41a8a13220f926f658ab0a82a3bad466bb334ca74d657cbacd09249ffff001d399f7b4a","010000007264d7f99eaf2d52176765c1db5338af8987838acdbab38a868217f300000000d206ecd3d6c80fde530cf0b9fa15283728dede7727f65a6df18c99accd68933fbdd69249ffff001d074ad768","01000000a942df211b8ba63580dbed37b840f076c49aaa435dc89b4e6d17f60c00000000ce4e849141943fb833d1d6fba1bf64104e7a04935fd4443a8fd81b8aea42e93237da9249ffff001d1bf2d1cf","01000000bd7cf08c579131325bec3d4266878fa49df59ac4935d01f28b1cf9db0000000021a8d983c73d498b44ade64832bdd5074f4eefecd41c62d2eebddabd658b65263cdf9249ffff001d351174a0","010000000edd3ac8e774c0791689b2136a990029f03a2aad8f28c56ee899d20700000000edae20d6410834de1d93f478be1ab3c89d8ff4cb8240ebc5d724df1315f6db49b3e49249ffff001d36e3d89b","0100000086d359dbf7cb0d68a028d1bc1167d5a25052ada56b7c4d87a4753c35000000008960795725f6800a126fdb4560a65f6a61ac0c0cdba21a7332b271b46f89966da7e59249ffff001d61ae6304","01000000fbde4eb173af45c3e484e378b428f2afd5135d919f3548876fd6fd7900000000fde1416fb1be93ecb6142b8a747fb72f385a83ae9cde1bf061fb9b93206272f297e69249ffff001d2d80c949","01000000389b7fa6cd13cf30880852441b48f5118bbc757b137860483a1f129800000000cace8d14a4ae1fa993656b30a390fddc914de2b64004d0aba14f37964bdf1ca85eeb9249ffff001d3956c737","010000005274107c15e0f6e7286e779f054d712b5938ea815ef4902dc6b8591100000000720d3f44ddf903d96a97582a85655f62b8d1e1740b5474181cc46fed32551b0c5eef9249ffff001d176cb0af","0100000094805b4754f51160ca6f2918c0a5668152109f80b6668a6fdca939cb00000000518127fbadc6951b8598f757baac768c9f44b7de24214c4baa162900a3886c6179f39249ffff001d3a117f0d","01000000b14dfb2d4f4680196576c90bd0785903fe33f4608ae4cf1a39505b1a000000005b77a0462049b6cbb1aba55b30ba872810e8a954c562513cdba84e1c21e39c3e3df59249ffff001ddbcfa105","01000000f3c90b5a62c32e3e2e5bc0fc87e7ae5db29d62eb286eb3eec93d453400000000ff5a147583f20609b4904a867e93c0c73324472c85e4f11e0c52cfe7ec07e51718f69249ffff001d36ea29d7","010000009b7ec31025191ca5c50d653cb4557592395cfb576d4176708908486d00000000a48bb43153aa1300769ef0e62c93d94f435ec1be3b60824f0f6eb9a3751e14dd31fa9249ffff001d1cc5f19a","01000000bff223c1f1751793c501bd847ddec7a0c85631e7c068bb402c87022f00000000792ea5e8c01332c08989dd10d74df1945d06e1848c27ce8916b8545019f69fdabafb9249ffff001d2574508f","010000008be0ced7f6fab944357fecb2414e6af293804ac1593e803e353233ff00000000292241ff40910af905c0a1d8335f25daa1afe1052a59634bb493bceeead061b80f019349ffff001d2ce89021","0100000080b858a1ba4a4a49e42e3f69bf2a9561d19ae16bae24c97a8515696d000000008310ddc067b0f3775b3076027e6ddbc8007e288080244f9a2a5298174a23f87ed1039349ffff001d5819390d","01000000634d3585f40d585e1830046470c46f8e6146e1efeb57a3a87ebda07a000000003c482be4d1440f34c9bdfad7d39a966617b69a75ae314a079866d2d797ba1a1030069349ffff001da4bdd809","010000008c00e648b8884ed3ac1dc99a6564c33945ce28f904e25c9de39b6c750000000090a41d748898512e8c66704d3dcc6049dbbbc18120c96be8a5900bcc475a3b8bac069349ffff001d242b9e6c","01000000aab919ee6e6aa52dfee3585f0dfd836501cc0874b4686e624903733a00000000aeab80d563ce21eb3a86195ee9915beadaf77bedcf747e48f93c1456296bee85120c9349ffff001d344f42bd","01000000c0c50d5c5f54f5d4cc323f4840b627c02e4d30807c5b7166ad381b1700000000ca98d5e86d14211fe9def1015373d138e5b01b1de7bf2baacb707a66cce2156ed3129349ffff001d36a85885","010000000722d7c85ad479dea69d9933275d08982a35985ceb9550295b16c9ae00000000bb2aac297a5d5a7ccdc262258a1e2450baca2adc6251535dbb1de3360475fff04c159349ffff001d285ddb31","010000006c8e4a25223496b0b3c166a1ce38a1f0ea84e912f67f17a40589f20c00000000474962509d87b2456eeaab9fb1c74da3446ce2c22808921f95ba38c1cdf221f7b6179349ffff001d6d878306","01000000e199ce48ed56bdd2782cfe552ed470219752f5d9dda5e2c2be1299b500000000fbe7d67f0eafdbc012b2a190e1141d636b649be41e3af7ff8cc8070e2d3ba298511b9349ffff001d261b0dda","01000000080f2de25e2ece7f26073e3720280c91555b3dcba8cf7331da5be8bb000000000712133f8bcc483a2ac8954f03b807e1a060261a0c36b0ba2aa632e87d5e9994b81c9349ffff001d04888092","01000000b8f9b853a736705693743a6e29ee77abfc68ec52771df21b6a52dc190000000006a64ef73767aad9e7239a4929dbf39435b5193df608005749fd2531acc8ce3a0c1f9349ffff001d1c98dd22","01000000bf3ebfaf833fc6f464a6cdc78efba078b4dcb8cc144acf3f3405e78e0000000057a5651416d248963262235abb3eb7492cf3459a861f72651bf275cf9869289703259349ffff001d25dda550","01000000af19a9285ea362bdc917e0bf443170910336212c1db3a7bd5c3fc3d6000000005480f75e58aa6e256d1ed08c93f94108c71d96ad69555aaa4f8010e9b18ee2238d289349ffff001d020a9fa9","01000000899a1a8d2ea6766226955270b22bcc81d80f55f0122c438e1d0e86590000000052923772ed28623c4f41c7292df0cbc10f89d312e0c605543c41f7f81d63cd94a62e9349ffff001d30fcc61c","01000000e782aabcab99aa8b1363ef88e76d5e92a26291004dbbc9b65dc90e98000000007df6546faf65612a776a23459fd371a1cef153d9a628835a245003e34cb195e06b339349ffff001d07d927c8","01000000d0775e84915afe51649a660fb0730a28e11217e918a116f442c9ec1400000000c8a2c232061855bd9bb60aa029e8f8ef1c51cf4c49dde167702ad9b6edac9c8789359349ffff001d30a4480f","01000000aa52d4f4cbe43ae2a7da9718aeada58859f38c986aa9c2f7c7d0549d000000003b1f6484b239cbf45fe219ab204837935052dd870b8ccc8fcc6c04b6cda9f56039389349ffff001d10a5650c","0100000016403ef5dd74ecbb430d3b40eaf63263f5ebcec6f8ce61a719b10085000000000546d2d3b6dc9bbb50c34ae5dd8a6ade29a05a79f45a7aba4d339cc06392f1b4e73a9349ffff001d36bd783a","01000000a2bb24b5a8c3fc32e37cbd51772d990289aa8239d74dfdec26e67f2e00000000db3dad58d1d5ba7362b2cfdcae26df9db6867058cc020f0ed47dbbeaa4eaa6b5473d9349ffff001d2340e60c","01000000e855b63fcdd51c2a52eaa5b822ee30522197e801b38fd568d1e55a000000000055c419e75cf9cd9974aafa2cbc65d9d59153e40e8ddf0c9ef50497fee2814abcfe3e9349ffff001d2e6ad974","01000000e503c18bbc37eed6ed9bb4194527832abf72ed40019d4854cb0776b70000000060572352cf4408c5314c84954dc8285fa593b6246758e196b04e3b8c586b98caac429349ffff001d000e7338","01000000e65c8476e4ec3e3aa53e69c6aa855f42bcd616d239c047544dfc50db000000003a391c2336bd8ba0b4fd4ef6364d3e9d60283993f645a15fc414d1ed395e569dca449349ffff001d356d687d","01000000c69476b3064499a5d5cae0ef38a782cdccb49b075a9114c1966a4054000000009efe3e2a954487fc68c2b8176bcb46cffa8058f73dae493c301dbb1f87663fd729459349ffff001d0a134701","0100000002cef2d3e3f831d28c0eea99de2e27a61da8e24039fc15265da355c000000000ce7f430452d8864e02d54a82ab6c497d8adf412fb76ea1a9c36d15fa906b4fbc1e499349ffff001d3150c8c9","01000000f296737947496b71e6f94891bae66e716f8f0dcc886659dafbe02f6b00000000e84f9e7ab237bb437d5f5d416411b97dee08127fb590f9191331468b8823ae36934b9349ffff001d1cf75b18","01000000a6aadc6c87d597af28a96a5f84121743fe5541699fa8c08ee3459a7700000000a62bb07b6de7b941c4227bc1e41e9faf430f4a04166374d6ec8db71bfa3f9eed7c4f9349ffff001d1532f41c","0100000069a8e45b6ae7928fb8c5060b424f5681c5d515bd7c7c1fd38fbe3fc6000000003bcdaa87c73c7a7363f4d1c6d4cf030d03dfcab474a78e1c7516aa44a8a157d56d509349ffff001dad9ded03","010000008e1cca6183a9fc7e19cbdac6b49f543a48376d7978ea2ba4a8656997000000005fda8e0fb4cfd953411bf504980a9d9aed31bac6629cffff5c5de8ff6943855df4529349ffff001d069647c3","010000001cdc3337f3910befa75d924cce7cd3049edcc36da14fdff34a9dca4d00000000aa2af423507391c209126124d931daeb4b549febc492323f65bf839aac696c4b92549349ffff001d238dc904","01000000db7898684d80434c4748f0a43f3dc3b1ff6a418c3218f9d217f9c3a400000000add78d3ea374084485e3e5c230cc4f5f71e6247731b8980a4506d38568ef453de7589349ffff001d26c63388","01000000bfadce5c8015aa63e5748edd1f480b62c71a0e84ff92a99cf5fea66e00000000af3480c7073de154789f693718f6bafd05a199f2b4cef80073deb424860bf7d7ba5a9349ffff001d09afef74","010000004c8789fcbe4f1ed44cc08f0681c0a3d04e2032496f91fbde4d3b5565000000004c0fd2aa17b0a190f8b3dcb2f1ce92b69a2cbf472818c8700e3f402bf7798986ae5b9349ffff001d26cdd003","01000000500a4231a29f1d75a3942dc9dfab537d9ad8b0dde191183d81d6f7ec0000000050f00404a228fb6b8634f34e937968f5e29408cd3b4a2478045d159a0112fd06445e9349ffff001d810a7b0a","01000000b2552fdb6f91558d0226fc5c4a8743d4f2b9a21296e9ebacb04386c3000000004a9664174ca02674d542057630751b0c72c47dc9ef473158eb125020505af364a05f9349ffff001ded58ad06","0100000026578ed865408575db8fa4643bc9bd267e39fcdfc88c142b606760b9000000000e7e61b1e9f4d74f5e74bd1fcd115701494e43ea410e9cd2fe62501e256bab8620609349ffff001d381732f4","01000000f3016a9f627a9dfe1c78b3fdd3ed8b60bc69ab30fbfeeb974f14c64f00000000aa3d45c566cf61c73cad69012e6be3301097ff11683736ef0a066ba5dd0caaf9f9649349ffff001d1e0cef3c","01000000b10282d711ec0ed6f46d2c6a7ce86b26b96182c86f4c4a2883be280b00000000eb3d80891e75c479ffa8e83e9fda2046ddb263b580ba2e5deb8dce15a12c4bab29659349ffff001dc4917b00","0100000019253024153d9c6dbe1826dd0bb35b9510eea659699ea5227cf493d400000000a7d8a6097123a3f88f75b3d561c143d5c4c69ce7622e4e8693140779ed63dc1aed6a9349ffff001d1d982083","01000000fc4928562739bbc8609e2fd333738110ff0998982fb444ae01eb7f0c00000000b86142fb75e69e4277e7f86a2bae10060a262cc10695f240149faeeedd2355a4616e9349ffff001d1c4fbb97","010000001088c74f364f3a1abb6e75432a9e05c95b20062cf4f80ea4c117d23300000000adc3aba5b1d707cfc9f02e9692d260bb708a72028cca249007cf378a028eddf3fe739349ffff001d27b69d40","0100000034111d049adec37e9bcae1fa976f42ded6c455412293a74f7b48c8f60000000023e69df98113584e174dd04db96962a6efbbcfba98b87128d7246589591ce8bda0769349ffff001d430f6f0a","01000000f5ccb60521612d100a166175873b088d2077f8fb9baf5358f214821400000000b12d0ba86c752af9f782eee1a2c0a043a5c6d2910d10ca825204b72f2941ff042c779349ffff001d25d2e436","010000007c1c8128051c57bc96c572ea4e1ed0a3a0689850e39791b02fa2003700000000abfb555499c19eae49c23fc193115e3de52f4d5d8e31c05d73021338c48c2cac627c9349ffff001d04a80c66","010000005184c3b09a24a29b30e9d1ee16b0fa2a5d23ae940db54f44ebcfa19a000000004f392e7e61a5e0cd84f636c2ca7dfcd3b6a83e1ea370f09cfa85708dcf8652c26f7d9349ffff001da2e24e01","010000008d70898410c1eb5cbb01ba68285b16e8112804ab969951b72a60a05000000000281d174330b03ae0df5d572224bf84a339dbae1d4d729dfe75c1f4e464369329497e9349ffff001d1a9ec836","010000005e96c52917f060255c665fe0d309b484c3bb88d754236d4674c60b3800000000218bf546d32252f8d9a42b11043b4adf7bd8621b7753015fd61f4059621f35199b829349ffff001d200516fd","0100000064e0a21fc18d1428b6a16f340b2a2c5569727bac1a6aedcd2df4447e00000000396177637897bef93f84fa19b93d085edecbaaa339d5ae23de1008e3544cd4f39c849349ffff001d05610dc5","0100000062563e15dababa6752e7059df87b19716ed10ea9e80d81ef4f38787100000000401cce1a12a42aa6f97e32b75a9009e3f342c8d69a2c9819780f264649e48a8142859349ffff001de1091d03","010000002c6caafecf285b5dc41dcc6a837532aa37296721ff2fb10704fe0312000000009c7e262d939aa88fcba6096b0249da05c75422c5c636548b2ce9eb4576e1eb3061899349ffff001d1d45803e","01000000ce920a06bc6407881e09f452dd48f38a2d982e38b97af04d17bec76e000000008731eb34d160be97e1e0873ab5da9a63bb8ece9d84fba6ba51ed1c52db92e7e80d8c9349ffff001d3a2df8cb","0100000000cc1994e5bc6bab8db5fa12784dc29ddf6947f1a5e3ac540cd91a26000000007c0cf845bdd15742cdbf5c00140b22090d823afd13ffaa7271ce5a499b205970dc8f9349ffff001d06b973c5","01000000334d6d41db26d9afff39a5db2580519a3c5847fde08180d3681142da0000000042faba94e5de61297ed9d4f77b4a3e0f0a4d329084bcdad3d01e7668267e50900b919349ffff001de010cd04","010000009a180a905cbd1b135576ccd21ec3849ff32218bb6897a829e6ad7d91000000000b1918a6149368d80701ad9b43014ec1d316ce1f15ada11c38e48ba774dd75a1d7959349ffff001d0874a2b3","0100000013365824e57ced12a3c8e973e90f3e4d37098602f5f64529390db4a4000000004e12f548a80c02fafee1cb8a42233f1bc1c9bc1a6c7500cc18b47c884518579512989349ffff001defa5300a","0100000047f9c4e3c9185c3acb0d23874995d4b0f7a13bb51b38bd7a95451fe2000000009ccf81dae422b35eb2071cf7b741217fa9c63c0db78363a277515acae7b8784cbf9a9349ffff001d2c136072","010000001a06de1dd46f038ec4b4e2be69bdb22b7be0938e75debae77c2a690e00000000e0fa183b5b2718e356a83c498fcef0181e6da789c0fcf36350110e6adc9139910fa09349ffff001d098cbff9","010000009c8a4021d50b37791f5533223179f1a589fa24ccbffdd442673a1935000000001e88d1cef97c6ecc191e6db395c77a572eb77adef5220fa9577dd70c1549165199a09349ffff001d96a3bc00","01000000a321e6ba17265f18589a65dd1b8f1daa2fe8ae6286e8382b58e0b6db000000008b50f5ceccab2a991b3c6d128be60acb16aa1c3a31ad15bd1954e5d36df8114131a39349ffff001d06389b2a","01000000ce56e2f93d270b49aa35dac4e058b3d91170f32b3f6255b2b6c6a15100000000385a37717cbbc9053ca96978280c3dd5b2da0e672932a1c86bff2a069f6894f3eba59349ffff001d2f4951ad","010000008c76ca60b1b8b23f432be9eb4679d815495c099f603a9be91de418d2000000007ddea980a8d4409ff4e5d505bae80631a7c29ddd90863ac017ef24a34fe81227f3a79349ffff001d25b7ee07","01000000fd0908e757a12be8d9f145062c701085c90e5f8cb6d1126e271cb22100000000769c3b68a76215dd9044fed7fd37502efffb31d8f9f4babe6a919ebf7c18382e1ea99349ffff001d30f1cf51","01000000ea4398b3398f42de0f6b95e56e3fba1d2653e13fda4e7f82ec35aaf500000000ce2fb3f16112c5d66c0c6fd9ad8be7a1704f23266e0e4d66098477179ea62ccbbdae9349ffff001d03bc31cc","01000000df0c4729114d4c37eb20e668197bc16818b2770cd080289ad0af60f300000000685b8c62dadba57661fa5f8fc4452101d9d0827208e3d20cf720694d4ba1eb19abb29349ffff001d386accfb","0100000063ace9560b61119cc24e149bdd53aeafbf20d176dcf596a240cbf0f000000000a0681213fd00f10096416e2c28fbcf7be67e83963eaf03b85fae6ee3196dbaa010b49349ffff001d12dfc802","01000000da23f652c2b37e1d2a2a56513d85fb92453547e289569891faa0eebe00000000a786e1884e6c41f611e89e4b08a82a98d008f1218d07e90b31e195e24b9dd53b12b79349ffff001d34fa7724","01000000bc47b0e403c3395136b9820b231ee59b2c91a43ce30e45ca5b01f89e00000000460280c0dd52b488ff6d00440575585f9279a2ea9c0238a16ce966ee417bab00c0b89349ffff001d2937b27b","010000009e559bab324edc201046c72d82a62161b42406efeb916369be2f8ac800000000dc04b82cf4120a97de15ece6cbc0b63563e7876f7cf1463e66a6f350429beedd3cbc9349ffff001d20fd5488","010000006cec4c12a1c49df4fba8e92928aa2f8b96ac787572b8c45d1fbbcffc00000000a14a82b38e62b581da29a242d4768aad1808d0f89030172cff20d92c98e6f06367be9349ffff001d04583ef7","01000000d326e2e60ea6f42f2ad39a902a18ca56f3a53b9f9cacf5f83f8ddafe0000000078d9c8fb04ff3b4f905f6171b5642edb13ab6c025f86f17421fcf37ef6fc31b86ac29349ffff001d1f064c26","01000000868845b070a3563f87f47ce10a5f12e17dc31eee3fc9949859b28a6a00000000da839c38470094c072ce401d33255f390ee03134753de24f73683e8dfe5824fa87c29349ffff001d81853f00","0100000067a66ee95ea6f10b78bbbc482e6d3d515c140edbf5c067b26d0f3ef70000000074a70b92d0ffd49e641196f4d6619e005e70ef500051be5372332aae3b028e1710c79349ffff001d25d75a2a","010000008aa1237748e6c8d88fe9e996418deda6b0c301300e461683a7bfc74f00000000984eed5216ad106b60079f27fd85414cc4c9e2e4acb0cff14ce54909e59fe1a197c99349ffff001d8ab42b07","010000007cf69151e607de9dc8207a6d0010298049885d630ea278a7e5c13052000000004018192b9c608e59411814732496900eb04f0c4f1f938912a1e83d45f731e63af3cc9349ffff001d38236d4f","01000000ff165bea12f70c12956bf8b61a93c80990f18fbb019b35eaec7f568c0000000020392bf63fccaf9cd7d4479472bc600938b8bbe7303503eda1f03d7cf556b0ef4fce9349ffff001d3334fbad","0100000038ccb1a16201dc2337c784d934486c3e371819eda976a0ee5113d77d00000000feac22f59c8b3336e9fcf40853c734719d86bc5eabc5741ecf1a5e02a48fd4a57ad19349ffff001d2db8937a","01000000c923a675077b76e9db62d034c4980b59e20b7510600c33bb90bc81cd0000000007ac6250e8fbe5202ba762290dfa361778647ec0d8ddba13d72a6e66ad411b3d07d59349ffff001d2c52a373","010000009a70af1e9b0b2f7401eb2e6618bc7c35c3df08827145f0397fd6cd7200000000d4821890ecfd71f6db89dc2ec7cb79694d4808a22d636778b34a01b1103008b0a1da9349ffff001d1a165e83","010000003c5304b82a9ba9897269bd22fb0fe4f28a6098be4d57e4a6f1cebe0c00000000baa3b6c4235d2c927ac748104e3b4f8fd5d76fe13a04bb6b852548f10b0601d6c6dd9349ffff001d05388a91","010000007efc1d0feb83d3aaf08578ddb1df79b6c22339e1ffcd28c7e92afb3e000000003414d0b28572526d0f33d807f599c27656293a1b68dc8bd2f4998debd99d09c98bde9349ffff001db262d102","0100000087d980099f609cfe9c1bba9e36bd60e2470ade9cd7e5367322a5772000000000afcfcde1d555aee4db3ed02cc4d3b06c938db1f22ce22770bd2c26a15fb26357bfe19349ffff001d1f991600","010000001b4a8ff2499ff1031ea9e3facd372e132bf287bad68702eee677da52000000003b4e7080df4b9b6ab28e53335c64435d90c598c75737394aa7ded4bf0b956744eae39349ffff001d206da497","01000000bf4b48abe4b2b4da10042a4134b0b6de46ae9041674c8bf7dc5d568700000000411f9e2efc7d67b6dc60a9d6ffa7f64259284e52c303a38445733a317aaebef75ce89349ffff001d367360be","01000000d3408007f7d5dc5336297fe421f0d4d8474728552ff8da4cbaf83b7200000000c055dea31162a5a5f28f55289445cd5eff11892269c701aa3bfe7c769fd840cc6aea9349ffff001d35b14c64","01000000230ef09b0384d2512d0270b2082758680f897ed4bc260f83c13bba5300000000ed20d5ec8163ed08705eec80032255b2689e3f6106a6843fd8fd3e74227a999287ee9349ffff001d95204a13","01000000321e9082424243becd3a737bd5af36769b85cb8a3a0aa3c15c95ffcf00000000c9a7d1e3c837b49401017f9b84946403ee7ba2cf1ba5076f04e5e784d098fc031fef9349ffff001d0639bf88","01000000d6305a3271b48a3efc967e2653ecdf0910f20f499daec5c2dd7c3795000000009707cd0aedf17761e6a054e1b2507b367a34133b2f75ff13a45b4c9a351a1bd07cef9349ffff001d18499500","010000000c0ebf6c17be74848ceef085192dc2ab2525e836933e3aaa0b1ad8a800000000dcd4200cf019dec1aebde12c599bb7f696750c7e0864c8709cb182121ac08ae98ef09349ffff001d0821a13b","01000000be74a71ffdec6fbc911499530b1859c810e34280b8a30f54de66fa3b000000008ccc6fc8bc966a4e1774c71212c247e26bfbcdd94e0304bb95dcfac87663bef2fdf29349ffff001d1c802345","01000000bbf06e6e6960f7dfe4ccbf906c51d1d2b49fa51d5197643dbbaafcbc000000005deeab1b5330aa20bcc20641db803846130a978a681a688644ec0756fa732f8888f69349ffff001d30701e06","01000000f65e29759740dc71e5353e1d4839d986dcb7b825ce864563de34690700000000b388e606ded91c4ff597779382705efea9a984fb03076a379cb36381ee8eec8decf79349ffff001d2fa211d6","010000007102235f68aadd2a6c12c273c89db60194c6ca5465142facf4ea92d800000000972e4292ed5d97a71558cafeff674fb7a92bb8d49a9a1b1025038016dcc01fa8c8f89349ffff001dcd7e6f02","010000003911cb36f32d314af9da78fec2c1def95665da05acd8bdf2921818a7000000008e91b5d0b502c1d9b553683ed4f99fe0e965bda18e11e61e808c720f3c4c7f6437fa9349ffff001d32ec17ef","0100000041d42084028838ea241a4b0350746b9cd75af8b8fa43ed01bcf8919900000000f0952851778cb16b5f6dcb85841f84ed63fc1f23a40dd921aee478ccef08667a67fb9349ffff001d1cb79c04","010000000bbc1e79fdf47be72cca263ceda7d5780b78cc9e7d6ee6e932b4c844000000002923dc1724e269ed46ad7a53bec0966f525ba1591b77af7bae5961cdc81c2cab4efe9349ffff001d2eae1f9e","0100000022c934a83ecfb52c5afa3d60a5451ee961ed65c5c3aa7704747e8be1000000008c31f5c1332119d27e9854f1399681dc8b3641c074ffb1eb83e4e70444b7e0b823009449ffff001d286dfaaf","0100000002cc80feb13784d601d0f62ee1b17af767841032a1746a9717dc45f600000000e105eaaf45167a5139a4718fe41180c1e1d9e59da0d4694c7953011dab169e4220029449ffff001d0a94c008","0100000032840574546c217c873abbf6ddd24e5f75317f3412002e259dbdd10c00000000edfe9d5a60cc6eb8c7094a11926f8d414a18b60d611183851e2119ddc1a022181e039449ffff001d15a7e924","01000000dd45010ac7ba4c1b8301976135baeee3c380db70397ee91c07df795200000000082474ddd67c3d7e1f70f9975129cf4219024fa87c3786df164106b6fcf3f0caf3069449ffff001d14bff8ff","01000000076e930ffeae9197d76e8e64e4eb6ae318b03ca3ecb5cb76ab220d69000000007743bd2a7093a8a2812168f462ff065ae9d70044a5ec04c93a7ad186018419bd460a9449ffff001d1679b41c","0100000042a89266152f35a950df49fd6160f0495f55a35043474ae8a92a2e92000000000a04f7c8c7f912816ecb4f1b4a690f6b46a9d5cf5bfea4d2f40b1e1244ab3e4e4f0c9449ffff001d39338961","0100000006dc5816738cbeec48fa5196ad117a6bd1fd2366b4c606dee8686fa800000000432972f65eff1aac3d74e928290197abf7cf5a0123d453a618d8e70a1b2026a8ff109449ffff001d8a3bbe12","010000001ce5e0a3f3ec6471a97fb40571374ffc6a3e5ffb5355ca4b40fb6ea7000000004d18bb2c0a5b5459c584e704001a66da0504e2926191200da51e03681e35db1c0c129449ffff001d387f9858","01000000f9a037a7ae20a3c37c4760344f0e47d422e98f806e3a0bcdec1f884d00000000502a21e66b1e974454cbb33f60f44dedeb61c166e968e293853568b6d0a4a6121e139449ffff001d2dd78f02","01000000e3b8e47ed345cc245d9dad108e5b4826fe44ecba5a792d98d0840281000000007013aa110b9bc1d7faf128e76aa8e3448e604eaa15760ab8c7d1a8d06cd3091021179449ffff001d2839deb9","010000009645ccfab5f23f0289000e8db22d25d4301abe78c2c2b28f2fa8622e00000000aabff005b1a6926d08b343f76d5110133f31e1a4e26e7f4d1c606433b89b3eb3041a9449ffff001d28e1c533","0100000042637d921adccd961637f3225a936e0413a723dbf4cb9a8096da1a8100000000b2a3bf6f18806dde4e44bcb08dcf58459050da9709d82b19fdb29604b91014e81d1d9449ffff001d350d5fbb","01000000640f18e72416475d1cb125d62961d98e346d637ace10ef43964bfb4f00000000c1897e90d7b4b7ae58376eefc3c30259649dfa0220aadde977300d45841292ffa6219449ffff001d36e7ae48","01000000e6f2a1539b9481d19f0a4f256bb8c372e41f240d24527920caa5f7dc00000000e1324af7755fcdd13e504a831af2901daa08f9a40abc73f95ed79f9cd4f4beeba5249449ffff001d1959777b","01000000838b2097e2bf0f0ebeb0cf9963094033ff78c50f32d558d70c2710f40000000090b5267576e0406e859d84e2972dfa33d856171c1ea7eaad85ddd9649e4231d0422a9449ffff001d397cbc0e","01000000c2a714b41ec46f98c4ae1d17db9347c22b6460db8cf39bad06631c5b00000000b6f2d4b436cb8fc202a27d4309aa4a813d551b99ca936721c0fc7ad48d091a09702f9449ffff001d25f203b8","01000000f3081e87755f4edb89e6da72585c420ec9bacb59e6af2d351ca3e34200000000b2aaf3e9582afb7ac92d5336fd6e0349d38e9d040a8978c2c7c983067f74e6b377359449ffff001d1c800b7e","01000000e883aad0c73791784b965d700b9446bbeab46bb93b1299e73c790b31000000006fb8d272d0b626967b7f05cfc44d60324bda94b51484f33cf610748544cb84ea0f389449ffff001d25a2ebc9","010000006bfa4ed455598df3f9dee02a4e7d946e97428328858186d5e5a231b70000000032f7145c61694e06d0fe5e1a8e4ec1c64c657c5271ba7637b721c1d1827f122b223c9449ffff001d53eefd0a","01000000abe103a3e437d5cdd2dc25a13682921ac5ef201f57c9d61c568d063000000000366156d8f7e644e3f525ffc8dd27b5d1a609ef2a7e7b2447aad29611270f2fee613d9449ffff001d149bc453","01000000d8d92a5be11a6b0571ac1a51be71e297f45db8240c08b0ae7a0b182c000000008d761a94bbfc49f61ce5fc026fa3a3c3f552f7ef7f3b65c5a802a82fc158489028409449ffff001d184d24d8","0100000064c94fda99dd322dd670ced946d480ab21d6ae4bec8163f2de2ed54800000000201d63d014d5b74d05a2dc5f88b6cff1a9c32cba2e5b796c99f5063c187fd0f631449449ffff001d9b17940c","010000001f40bef347d2db2a9ce399f99ec0a30c6f4958d094c3ae06145b6ae8000000007aabc7c14e92e005fcbc40fd21dcc1899f40af3e8a977ef8cc8f314b36d47113f6459449ffff001d04cb3819","010000008e4d4a1c6d3aec8f631549478c5fcab3cee9b489015ce9c7938a75f30000000012465b5bd25d183124687f727158149ba9f8b6034bde8925baefc2d6c5b471a2cc489449ffff001d004ec3c4","01000000ce15510244b63874019e04da11574b6f038a8732cd9c77187699d26400000000fec42db45b2eb4de69a41f9431f435328c1a7787d4fac65e6643510d947d4d83c44b9449ffff001d3a26f721","010000001b3ee8ce87a623eeaa9ebd2c9bd05e7d74b96555aaef9c85a95149ee00000000de080ad79dfa8d5714adcc331202ea18f2a274bb93727e14f07621b21a64619c374e9449ffff001d2e89563a","01000000975188853115bb57855c14817ebe5b9308e25a3ce43bdf4d9fa592fa00000000090e670c7edf0a139b03738846b8974c60fca7bae10209cd9954ef0ba9c8ffbc53539449ffff001d3413244d","01000000a20267602a3404f010aa1825167ac819c77c0899e2a3e2a8b71c0ef700000000a714fb0a48cf91f8708b362861ecfb40074c36ffebbab8fb63ab751922e304350f5d9449ffff001d2f8d4800","0100000067bfd0ecda4f7f45a2caacea3d40d2884c5adac2d1600f5b345fda9300000000fce41fe892219e933cd8f47400dc24d15eea98c0e9ffb883902ea8919220a5a817639449ffff001d2fef266c","0100000021ebb78166f0aa1a96eb9ec662782995c1d965d4478dd2001b4e607800000000e9ae18bd7c53e202c198574fd931d4074f99fc2445dab2bc6384527b6dac749d48659449ffff001dde22df08","0100000088929c4ac58356470e374cfc85bb9894e38c3028d4b763017fe0d86900000000b22fa3f50a1f06ef4fa1489f96c0cc7d76679d1ec8d72358ff1aa3426e2db9b14c659449ffff001ddd873900","01000000780744e72fb9c636ba5de7f911253570ca6315717a327714399674a700000000bfece63313b1bba1310484beeb14769963d258cca8db55571287af57dd089bf352679449ffff001d35cbf950","01000000919574e4f5ca7658d494d61a7425223fadaef55f3aca33367972add300000000675818d0e035dda257945985031647f1515b39ea67eb0c75beb7cb7731f222db656d9449ffff001d32fce866","0100000064620663933515600c8f56823d01f81b0526e5f63eb1e84a705ee1ea00000000c1c433465a7df77b2b14b569e847ea0e1b14bbc260ab846fa514733c52d96ac24d6f9449ffff001d6df27907","01000000ad144c1c2500fa6afd7a474592a37a87300a60a2b9e08285b70c8cc4000000003ff68d5507102f5660d829ac4f1da2e6e2d4b1a06120a322cc06d3ccdb4b85bb0b719449ffff001dc3654d05","010000000d9c8c96715756b619116cc2160937fb26c655a2f8e28e3a0aff59c0000000007676252e8434de408ea31920d986aba297bd6f7c6f20756be08748713f7c135962719449ffff001df8c1cb01","01000000df3fcdd2c7c319f51b2b9d90afab3030a81d8c6be65eb0d009ad37f0000000002c0449a34a86f460cfa5ae13b505745935c70cdf458fce21d20e3f35f9c9a01d8e759449ffff001d06acdab9","01000000d0205d343bfd825e00d548864166537af9de2406b2d7035a04694bca000000008da5489f60e5f8fe99912820488b33feb9967135c9af59a23533e8789e208736bf7a9449ffff001dcfdb2518","01000000867cb9de87490fa864956f2888d01a9e3cc9fb0e0ac066dbf50b632700000000faea35fffc633da027ba1b0593cdfb493f525697de5035cc51156cf5aa24d38ff87a9449ffff001d1a54fc94","010000004096446945ab0810e90c282c2684ec105163bfa9c880109b0f4e9705000000001ae7bd036f0f6f65f1fc8ee8e3a58b30252543619b4002ed1e861c4bbdb22c2cab7f9449ffff001d2433023f","010000003e5d71825df4950604b40e2ced41acfe25780a16447e9c35493cf70100000000ed45f3e1f3b83bdecd6bbadcb686a7d8ad3d55c197d7e06e782b8903140df958a9839449ffff001d1e420ab6","010000008b344d48b3dc8ed562b273bb0ee35ee589e1159c2bbf92cd44f285e10000000093a7eb1d9c477f6c4e05d81b6fa64e4010838ac43c20d1fdd81ba06366d340f34b869449ffff001d99b9810c","01000000d2e7007f668dfce5cd059fcace8fc45b7bcafba978e7de49dc89c645000000003071ecf603a037e877559a4b3b40726356d5c9ac31ce198f410432c6c64680e7e6869449ffff001d326a5555","010000000eb9168540b2a15c5a7291db3b747bd467efe84c3219ff7c7f609cd400000000064550f67b58552a354e9d3c3caac5c19803b0f48c5c30075f75d70a867ef491d2879449ffff001dd2666003","0100000092184492c2bbd3d526772b92ce24fc0b0f784c240fe0cf201bcff8ba00000000704d56f4ef132e451e1cea84e90205eb718ae431ee9e57e51aa8c3fa44e32c7f42899449ffff001dae5d1206","010000008d4ba6442a5a428020390386e35a0fc94eaa8dd2587e0999e1a400c300000000320883ef042fb13f1f7bb870e990dea7f50af8f2431363a8bc37963ad786bfe86f8a9449ffff001d2ddc44a9","010000005e2bc8e5d4f52830dd572ce341c23ffe9f671c8a6fc5b920fa2a1c99000000007e34b0c653b8aa7086f447447080ef48fcaea2220ff7cf02c639542dba006bebe48d9449ffff001d0919099a","010000007ab5ddfecd0ba4716b33928309cece3e6eaf62359dd6f6d70677165d00000000b2f8a86c5735de17311749abd50ef5ce31c24d14d5a9f049195f645a401d97a1a88f9449ffff001d9064bc07","01000000b358ab90abc0e3ed9d7389e89615819449475050a321b910419bb2dd000000001411d284db17f8927a40ee1b5a2100b020e4b41ca900c5227d6fc3b8f5bf63f877919449ffff001d2dcd36dd","01000000420c16b13f249d0780b80bf4a3c8d2a305502e0e9d7f6d703674a22e00000000b6fdd97475c883f0bf5a679e7084c8769b5c7f6bf0169044cc9ff347afae94fb74959449ffff001d1e233e2d","010000000c6b5eaaca958ed2e12a2722c5e789ac41f0dc95c1bdab9224e44af500000000cf3ff95e4b7378c49a6ec919a1d9f454f5a0afd468df4515984cc6a18f03ee86cf969449ffff001de2852706","01000000f1bda2196e4cc70340352cae9e4f9cd1f7b2f8b6234d0cf661310d260000000030d84733fa13eb1b52f4c8a8a9b8d70feba52ca427609146123043a73f1732459c9a9449ffff001d04a8fb52","01000000172d93cf53d3b5eda82a3a1c24db05e96bbd33a5de72e760c3f73a3f000000006b097f158d9ed8606531834dca39549294cb16ae5d693d4ddeaa5ff4a57e904fef9a9449ffff001d6b8a3601","010000005c7f0baeedc9c3201254c32fbeb8d35638216ed38039268a6b81d71300000000f888a51a888eca223877f6360fbfbfd542bacd76d863ed095f013d060c25dc6b7a9f9449ffff001de4fd7015","0100000077976ee27e13b0690ae0a8d325c822f11a400162699b62bd1a9387910000000020d46b434661d8b5401b92ce63e7547f3b4fb9c93720528929d3fc9033ca7487c89f9449ffff001d0587aa98","01000000b09817b4c5dd41dbe3cbac236de4fe6e381c51e1caa1993f07f72155000000007f80b1849b8f21dbf9ddae5e2812b33ff336dd255aaffaec60661e445f8d1ebc80a49449ffff001d1528d3e4","01000000127e44dd0671be400a526a36541ffc9b42ac943b47670909bdbd598e0000000055464c110cbd82a34661a130619bf292353e2957859a122a8a2c29b1d1ad886f9da79449ffff001d09afd9ed","0100000043d2e221c9b1872d63a2a6ed38e9f405d6d5006b2730d119410297f80000000021ca5c4de1c8f2301cfe766473149cf278da1cce5e76adb2096f00a824c7ef87b6a99449ffff001d1c87a75e","010000000b2a5374aaca861b0aea51d7cf67e8418035452528ba5c9a1633fd1700000000366dd668d2129531477f27a498284099f20deefdd69aeb3451853a5c9bdd21662eaf9449ffff001d1b053f9d","01000000b4bd6c290214c3d01a2fece7f38da5736c65a0ff5752d49fd95033db000000008cb32fe52bd1fc9607c0d10733a8931ded5f228b3b9457e9a8eb6c3cd2a92e409eb09449ffff001dcf609005","01000000ed8b4a2e225de3259774b2cb26d118b1e73e4d6e56519475ce7f2d6f000000009c3d6ae1d6560df5ec1dbbc87203b2b8689e8594f5b03348a5a564c0df0e7928d7b29449ffff001d1e6388fb","01000000ee7877be8ed9e56a99874828768c99cfd8119dca816858de69d105b000000000f2ff5e4a8e03288b77709fd08a725fd0680cfd1ac0b0aab1b3db3511de4ce30690b49449ffff001d361aec79","010000001c156d758f4cb67695f7b08c81ddc9d8634d5fd2a38e617d200e2ad100000000af423a4fb90da0715d801f075b9cea435eb8c017e14d737119b90765e4fa987045b89449ffff001d2db34c3e","01000000fbbab9d2cbaecf051ca3a0317944b58322fdd8a6db8f2f84b59247eb0000000066883e116c99333848dd4d7b756b6f1c02a0523a60eeec2be84ac67701a7b55fa8b89449ffff001d3cb24701","01000000ca636a79ab80f192d665d7b57d8b858eb45a0762ae2ceb028c68403800000000080a3283b7bf9676d6a306c16851db3b814fb132562e24dfd0a32600e7a1d96778ba9449ffff001de8733508","01000000a0b24111a8ec697066e02e7b029ad506582178349f8a5b67ac832c0d00000000a4b6a59274cc97dce142d515321ae9291539af37b0992d98a7efd424e46c2e07aebc9449ffff001d1edc49f9","010000004b6b5289484ae55ced2095559401676453ccd79fd2f5d4023c3144ab000000003deac9d3ad878733e943b2c426f9cbd71a92469d51efcab00e5582b87790d8953bc29449ffff001d725cbc10","01000000c62c374c6102411c63a7aa3846d1076e8d6a95a4ac9b0614fb2eaf8200000000498901310b4d9a2bb32f03d6f3a2f11e543dbe6e3c5966b2bd9122282ab0af544fc89449ffff001d39e9d788","01000000302abe521d2b0c2e117e4722232f88e622cb317fd46235377e174162000000005b74ef8cf03674e6867203b667d93d40994de495a5188be8252858f24c256bbf83cb9449ffff001d01adbf59","010000001a6c2e097d3544e1e5d9b9ad9cff8176f3094993acbdcaf7dfbf41770000000021ea3422a346223140040f131e29ead11520c53c41f84ddcbee333fb3efb0f2c92ce9449ffff001d2d8d0d16","01000000b29fbb6d6e5de23d1d50a1b2659bf934f72187baa3c0303ffccc47c00000000036a8aac67af9cfaf58d7d7e63b7624813c731c4441c73ad3c8a49228c9c3d1c560d09449ffff001d8079f407","01000000fce1b1b9afe936813ce5bf8f554ed5305ee3677e080e11ac67c15d4600000000ff62cbb607b9f3442b08b215aee4fe019920fc728339d9c445bfe89bb93b3ddae6d29449ffff001d2d7e650b","010000008708d1f2c61cb75f4d0afd6dbbb6027e500cb5f8bd4d5a7619f6541900000000eecd2a445485b22a67f9307173763692d7f7aa640cec87314ac7cc5187aeae4634d39449ffff001d35592490","0100000003615070012d7613de42ff33e56f59e0e189bb5ba42c0165a5adce6600000000f8ffc0c22139d37bff8ffe118115c41c807030fb33021e29baea846539e5b84b70d69449ffff001d53652d08","01000000b97a648b06bc1d27dff8e78934becbd1055efcdc81c9262e1566dc3300000000f05a6c6d6b3b33d7dbdf0c133b0d359e66b91bb8f2f8890365a0c5463fce6600fad69449ffff001d31224159","010000006ae89cc478ec9c4791ef10213ba2bc44f7583cb4cd9f11e9a79dde4300000000e644bddc8f932bd80ef0c9dd5fd819d9c0cfe45257c01f855807f0442923825577d89449ffff001d24191c01","010000003eb67c4170b0f535ac2b7de456602cfb7b1dbb49ec0f8b48169cbfb30000000088625eaed76e4c84c633362a30419d65a46cff27ef5d5d5121c2534d684391268bdc9449ffff001d1fbe36bb","010000000f92465f22d53a9abd5c9882b1f4882b8ada30eff0c0080439023aa60000000046b85d7cd2ad3e676f635e5db3e6833854c374c3a92a2067d66ecb6867e679929ddd9449ffff001d17486604","01000000cb97f6fd4c8a723f51da10cfc5f1014c527f16efbcc14d053fe1171a000000000d305f4158eb9287136619aedf33c027e2ee30a7b9886d98ac6b47102cd655263fe19449ffff001d091ff30f","01000000b9a3bf8b86b800aef1d2102db5a70bb5fffd2e0ec49a157701027599000000005cadceacfe69b8a53d3f25921fc4bb8ac09e831a88a9de1a769e18e3549b7ac48fe19449ffff001de2af2101","01000000c639d8ad3ef436a663ab63344dbf1c02ce39efc86bb2a7352855b1e700000000649667f72c61a7798927ef6d0f66a235594c4cb79df1e0c8aba646fb0e3ab8a953e29449ffff001d2a99a2d5","0100000037b8b805f77917eb2842f539eb1b490ff367d360cd613aa4bec5e44b00000000db2670ec3a1e64f9de5b7c18fed1084407be1f42b77fb8f4bfb7fd12abcf73589fe49449ffff001de07c5c09","01000000b7546161227bc43df148157c2131adb87a8657c52892e0e2b0a9a90300000000b507c28f9b0cfec28bf0394d15ceb47483d0887d0fb7c8a88bb8dfbf9c184f6316e69449ffff001d23dcca3f","0100000045317ce73d93308502d1344eb912ed866235cd2ba692e31177cb4c4c000000008e95b631c4024158349470a803e6e31475e58623c43badefd373c63e14beecade6e99449ffff001d36fd3b60","010000007169deb3201c7a6a03f01c3db8a452e399e6c66adc2a869b0aca2b3400000000c7e22a38f7010ca6fc54455f2922b609302b0b73601cdd73961fba99d6aaaf83c1ec9449ffff001dbcf5260c","0100000004c8986e3a21452694edee94ed13038a07de5e2568d1377502118062000000006da1363224d5095c8ce1f42b86a802ede21d4f2e79908eaa4f0e020624ab794c0fee9449ffff001d230e7277","0100000084d682611f6b42518bc2c2afaf21b0c7110a8e3128652f390322666900000000c72d50ace7c04b1c13b8bd7593562fc5026b147d3d7006848219ed855b642faa90f49449ffff001d0896ffc8","010000009a1074b740b02debc812567d7cb709427cc85e3f40abeb7b070dba1b00000000e2f2c8e052287798c16159e58d684a48b2d40af278318658e60a9fb110eb5f85c5f69449ffff001d14c99802","01000000f6c72d40322ac1772eabb06d485a07c7a6b559034accbe57414961fa00000000a27c63f6669621f4e5cb56ef008eca96911ff399037776e773af11e9f5490c01aaf99449ffff001d174edd53","0100000072866df9ba6b8634aed204fabea8a1766779deee529d8c50ca0d92530000000060767a664115097e9be51ae30a55db7f138f8b5425927ea4524661db6fb0b40ce7fc9449ffff001d183faead","010000008cedde21bd90d0274bbc58658770c7673262b766269f2d9d7bc29d070000000026de56689de8d0c140da30b1d0f14d1e7eb51201e8e209250073bd759b5467f8f7029549ffff001d0493571f","0100000098abd96ce843a4207fa525aa7cccece9a41dacda93fb838df0d27f1500000000212182c37722058f847b5b4978f81c07e66c03bba2d6be00c606e11d42934985e1049549ffff001d4bdaca07","010000007cde89c3cb45df588449cf6eb8df65b0eede2bea9b0368546f20f00200000000d2307579d8c451e211484df3c50999084df522ce7f60b73bfa7196c4f659083428079549ffff001d230cbfff","0100000014e4bff877af3bbc758ae1849213205e26204f0e9f353cba55411e5300000000747bc35222fe9303197eb9cdef9edc9cbfc274d720e02146a89d95e09ded215ca80c9549ffff001d29bd8e72","010000007051e06b857ec6c19c8f05bdf9cf704c81e164977906a5a072f89dfd00000000ff055aebaa6938a7d6ff18257c8ab76a730101967cd4296bb3220605a6b0818296109549ffff001d22976d5f","01000000a6ac9e04626213c1dd125c85b202ff3f5315ac7cecfbc85d6c4b23b800000000ce711b94d83d81b11e93e2ccd631bd83cf38c2ebe43352517b69d759bacd6a206c169549ffff001d35ae0126","01000000e324595eb8f5c17e7ade7fd800ad4e880eb021f35aeadf0ae5f7f28a0000000021d2f40fc1e898ceec6ec4460e6068ada5ffcfb13fb2b0a5556cc106640cb5ac91179549ffff001d4c603e05","01000000ca39aed80aadc117c78b91754db21a5eaaffd61b91eaa0e1035babdd000000002bb270503567351218c61e0bebdb71eb583f3dfb56f5ee0e046137ada12d8e02a5189549ffff001d29d6cc02","0100000025d67df672bdf369110e0a4305056828cf2f72c2929acac6a77f00d60000000066180a5d81c26eef7027ad2fc24009b0a5f44d7c19c41644e0a2fb55cfff7b1da3189549ffff001d14d340ac","010000008334e07aab80e49b5bd5bae9e0954394b5fca5cad0b6d6b52800df0d00000000e3f60aeae7ea82453c4ae9350fbce5168b0e8f366bdd0ba3c26d22ef9f7c09c0081b9549ffff001d22de51f1","01000000d44f66824157ed82eba1e27bf9876f0e1effb7347bea8f386a06ca6600000000c4be7574054a3abcd851a2bb4232faba6f906ffe22ca85e714170aab17233dd911209549ffff001d266f3dd6","0100000017a7ea494c7c8d0d63db782d94c8e61ec916147b469cafbb0051e907000000008eacd79e5ce614a53a126520a59c48c50eb84818b50f540689e44462bd84fced06259549ffff001d2c9c93ad","010000006c68a54f611c70a2e821d0aa88a84da2efcebb18f809f05f6919088600000000199750fe10ea9ab1384d84b4b3eda0b927a867ebeae1cbfbcc66bd3597774194bc289549ffff001d1769b705","01000000348efe0ceb34598f3cdab801ad3ea018b1104006534cc02c169d840f000000006bd371ef1930fcc1d379f8b007781706b953a44cf288f84fff3189d4a6ea358ca12c9549ffff001d95731812","010000006abc273c2515ea7b222b3ecd421f81b94b6161c18cb1f04b5be22e01000000002c8b086d68cf9db07b996e356e41fbc8232b73855667e13b2ee401c5f51c3a8ff62d9549ffff001d23652bfe","01000000c4ce50556c522d8f5952ff43d5f14df3310590fa41281c31d17955d500000000f23b4730533b0bda57715433cdb5031a3eb40d886f63f3f5784e87822edbd5de5b339549ffff001d334cce46","0100000050eb9bd8325b7712f3b9481eaa573b43ea8375aacc6604c8c35175360000000002f90bc913eb5084a6e92d0e6d2a8ac592175ccb89c597f78c76b1bdf89c5f4f12379549ffff001d21e79a37","010000008226bf236abc9c4f8b569e43612aa18d2538e0a4273dae748b21bcbb00000000e62d45b9838bc6e442bcabc74937c1d5cefe6a9d7c629ee9df19f0c29a9bfe98e03a9549ffff001d2be10b44","010000003d7d97c99c3ea58ef7857c1ea5d37da868d65f9edde2202b0fa8dfd300000000173b1ddf18477f5ac6436e0981ef5c71eb8a4868433deee35da5ac9ee107e2ee123c9549ffff001d5002da02","010000001880a743a9312354d1898ed6569a60a3ed95e91ee286e25645b01b0f000000001397587eda0c8f167589f28b5985fda7529194decf8ce0b19997f275335081549d3d9549ffff001d18f8e335","01000000ca0e87e0839d2349d30d9d7ac9865ea64304c58f4dc647d8a42fe6fa00000000d08459d37893c25ded909f45ed2a9bc9483b5c6972065db328c9347f8848b454d73f9549ffff001d16f66bc2","0100000062d4c378f4ba66bf4f0684ee7b50c94fe678a22bd7de9b56ccf6238300000000077119d4813d7d1a27868063c02071f331809401484d8a0eab54df3456577d2ab8429549ffff001d195f572d","0100000050a8929d061f0762ea0fc05a59bda3b9f1d21d24ac09c9f949ff17540000000060c69d5b07987deb8007a342202a8848f69084557343a662396b52463db52f26f8469549ffff001d6bf5580b","01000000cb091ee621dcf56bd62587b0fefc9ed36b98b4b80402551f37c3ca3500000000ed642b40be08e6b9fc7b60d5f3a9ddccea5376b28addd16fd9361f8812a321f60a479549ffff001d3287de83","01000000d79d2b6c9ad576d4677cb8ddbe6710a3ebdb69eaaa66774ff1d809c30000000051723915dcd98ad9b33d04772a4b634a435dcc3469b87992e86e6f20539cfeb72e4a9549ffff001deb387d0e","010000003f9c921d39469ffde6a28214a46690b1b6c73001560358f3962135ae00000000c51f44fa8eab842fdb2f8d644d1393150e2cd37f4f4413e9a316f99feb364f39c54b9549ffff001d2c37f70e","01000000672fce93085e81f25b5e18322143ce83a66f1f6f347724920b9c617c00000000065289a1c6ad6abbee898a2cb9768ebaa2eb49a6072043dda0cf29bb54c14f7df3509549ffff001d0887fa31","01000000a7626c2ad61b7e57df0009a730478870037298ce6290ff79a68954360000000095e5493fbbb31f2a4879a8dfb6f75769683800741e85da532183211d467a64c5f8529549ffff001dc001f302","010000000e7a39002e1d1897387a298cd50aec0c9e2c154c94b1410689c3138700000000e7eeca1a0b13db59d3c58e93e5f166f67785f2b4600b2335894e07087f3b35fab9549549ffff001d1a91bf10","010000004193ba5babed12fdedc09e841f56e43e3d6efdc6ecb1d1179ccfb2b300000000a60121e3cc071afac9eb9a21ed64e0888ccd6a8d0c6ebd00cf6cbbe7326f4a949f559549ffff001dd7200802","0100000037d286f2f2c596793162977a5ccc93e41bf5d9d8ef49ca9ddaf700b50000000097fe15408431d1441c800578082e776697fc254bfc19431ce31cc44e8415904458599549ffff001d06c0d244","010000008d08a3308b486e0bd69acb4f24680ba24644ca13d9e6fb90eb21ced600000000ffec258151ffab6e49a66dad325043bf725fe1bc933ab5acada2b66d9f342145995c9549ffff001d7fa43508","01000000244c7f78d73e676ae69d2a2866724594e94e3104964a4bd3f91e848700000000d3293c1f73f4857e4e32b1df282139d7038988ce711ab683459d8c943a48341f545d9549ffff001d1415760c","01000000cac49f0b79f3ae838e463a9a144dcbe330fe0b821e400e455aa044a2000000000a064d373026ab06441bf2b704e7a92b228b4c6365c0f960f9dd1128f9f2a22e4c5f9549ffff001d04bc0508","0100000096d74e0819f54beabad992969ffa8aec29d566b64ac3f7837b12b58e000000009f7e488a167f30b196edb6d0b115d141ff6a8b94a3cbc638ffd004d62cc923cc72619549ffff001d1dcf1591","010000006eb139347f4cabac26a174647b1c6290a972f30dd46ae10812d13d4c0000000079477c1b4b8a480211bad7e31a9574cfe65ffbcb34034a3eb90a17a2628b834324679549ffff001d30555f23","010000003988f29776d498229cbb254a6765f5195f060fc7992792597ad5ac49000000007ae8ec8843b24081d66478388e4dccf7be6e88430fe5b11a3fa1636dc08e0d6281689549ffff001d2c495e04","01000000011ad980d88a2280ddca5a5d1fb1993f04bc76941293a1bcb68579d200000000fb587c9ce73eed3b886db1b9f18ddb4b791ab6c00a9195756da4d2fadb96f859a1699549ffff001d023dfbc3","0100000074243f1f31be36f0e721c514b95d1b8e69f8b475a019d65815cf878c000000009b538c2a8ee1c2ee52d05ba34a9de0dcf2e3a869f1d5f4afcce0319b2ca217a26b6d9549ffff001d30ddda19","01000000416c68044a4577ac40623b17d76fac4923a6879df7616ff645ea4aba00000000498a6dacd2b7642a8119724a812f42cf43c3ec4fa793ffa90b5f949d4ad01074c36e9549ffff001daea06405","01000000ecfa609bb93aa74fa879fd38203124f217c565e701b59391bf2bb95100000000ef870e0b50dddbff320997ed11b4a5b1cc1f905624e43a2e5d5721a4939df6bfb36f9549ffff001d10369104","01000000e21b14fb487770fa186a2f8c2d24b86a2368a440af4c08d66cb1294d0000000015b4d59851d4da85b765eb3605bbfbd3dfbd084bccd2fd8a727eb4e12947e3d508709549ffff001d31437026","010000005f2d723aff3be4bfaaec91c8fa6de33bf020608acae1fa312db2255a00000000385881934f1aba77a15a22564bb63964d728fef533e761b680741a5281fcff64d8739549ffff001d19ae7eb3","010000001e778b746127469eefa6f3b95b473c66c3c6b4595b3f8d34f77c7de7000000003f2acfa8e582f14461db81ab8ff19d48dad0f184e7f435ef419139cb725375309a789549ffff001d01392503","010000009366621a1f7a3e79e23b49e684afbdbc6a6a078fec08b8c4691d91c300000000a15fd65c72c74ed6cbb8ce608d0ece56fbf54ff16cc570e7bfd27b1cca619bc22f7e9549ffff001d0190e38d","0100000035d87409aca5487018aa1040c41459b3cf5582e7021ac94ba6dcc1520000000006feca5c1d283a595bbda5901274073072ee99ddbe2109e90b034fe937683c0f14829549ffff001d14beb9f0","01000000be71f5ed0c8a45051159d5254bcb4ad74c03086839104adcac8fca9e00000000d226338f3dbe6fb9911f7878de9936940786f50b41a67ded0ed0b3a93886b21028849549ffff001d1d5528de","01000000b721ba4a7d8564f9f7483f92034a084d7c24e59c664c9c35806958000000000031ad09b4c536183004ebb602b472ad75b2373dfdbb14a60f14196675f310ec6f48899549ffff001d356ee7e2","01000000b3686cd578ba8f1d919e9c4dad8e37efe85d7882ce67feaa7baeba84000000000d6accd52dce88b9d6b1896b588be3968848d7900203bfd237e58bfd92d8dea41a8b9549ffff001dce9f8b04","01000000ca349f8475da3c90bd51ab200b34e4be581f9598ba5237dadd0d9dd70000000076fa72079a18d465eb710bf9234afedbaff7b8ceee0931c1f4723c194da0b7e5278c9549ffff001d161b4e46","010000007acc9085912db4f1ae5387199759a1108dac677d7e5d627f4c6609e500000000b9453e73f51a7c7a2fb484a53540419776dd1b163ee9028470d1e3111d4fc8f66b909549ffff001d174f03a8","0100000079912383e30ebeb6390c9841ae03a78daf9124509e3b8ce23c2eea6300000000ad7cabe377e928b4993cb87ffe48e37f1c0ba2c14c41ea079b81583960694b3fd9929549ffff001d261771a4","01000000beff4d0a109222d4e94579a53db6fa1fd676535cd9ba216f225975090000000010521c2491bd1f261a6bbccd36684295f02e6e825d321956d82ac17881d23e3e3b949549ffff001d2cd3c825","01000000fe42b441f9ad752f901fd51a2698696f68e24e72c69ba072893ea581000000003e02d9bf54e48390b7487ef1ea7e8e2137fcfc498ee5956068aefa4320438ca179999549ffff001d721b8018","01000000f403dd5d14c719dbd9dd4e8410047b6604a436fcd53766e2a3a4795200000000f4aea2c1931ab1ac66eb59ab2dccd2ce7c6360307adb9ae41c409eff3220d9874e9a9549ffff001d38736273","010000003d2390227c414d038fe7544af544c8814b332784e5afd3d6df3adc4e00000000b8abd0e3a76080ecfbc18158131ac46fcedbe44827618a19ce49b234aab4e2cffc9f9549ffff001d2548b2c3","01000000129a1533b1bd4ece320b81b52d8c88e71c767e7d16dc34825bfae5680000000039fde5a0165900df645c876627c49a3d2c6fafb58d1ec196d9fb575ebf26ba7c59a59549ffff001d186411ce","01000000615f00e0015fadc80de108303cde8fca603d024f3c5cde0ea89bdd39000000003f68623f377af8a8d71456ae68e6b6fe45c598c676ea3b547ee861ca5be0bb1484aa9549ffff001de9036d13","01000000246ba653c0ceb5c62663607f5dbf0d58799ea5256f708cdef60649c2000000000673a8aa75c01e5f15c340c1db24888f77b0ee5fa87ebc3fe9179de70ff67408c5aa9549ffff001d31dd1921","01000000a6cd1d377a8da5111fbbefde05af186f5feb09a7f37959735dca2fa800000000548d77dbd624bf1b08b0ee523c5a9911f07d0fb34568d6e8e67d2f4ca320ee89e4aa9549ffff001d50a84f00","01000000a32e3c8a89016c562c6e56a3eaf2e477ac5c938a0096024f4df10c37000000002040728910908f684b6a4fdc9c98ad613662f332c1eb4e762f8f7f3bfaf5611a9daf9549ffff001d08b10b98","010000003b47aad47847cc15b2a485eb6c7345043208da86e5d49c737cffd72f00000000aaed9cde752d9ca1a5415c8da49d6be4243998da45f356babe047fabebf0a71206b39549ffff001d1ea196d6","01000000dba5bcf079c4b1e6e581ff0e28831850c0a00bccf0b519e17b5c6818000000006ad73e06351d99287505e9cbfaf9667c14a4f51f4c55816db4476ad54edefe41eab49549ffff001d043ebb20","010000008c36394d337da6d34cd7f041f49de36572555049acb5d1fe2a2cb14e000000005cc8f9eae8ee4ef084090cec164614487fbfb508f0b6eec388a091a8e0b65d935eb79549ffff001d1c36c21a","010000009861fee98d921ee03757e74052e7437e7977321679cfc16c36c95c8700000000558fe9bbdf9e6d0277c6b40b412567a28ab9826b7a133cb8cc10c25b76cf859ccbb79549ffff001dfb90ad01","01000000ad10cdb139f952ba65b9642b62117ec7e399dad70bc566d40633bf8700000000cb66f174f5f964bf815f2eb6f238549293184fe97d925000d5a21723e85f92a038bb9549ffff001d18562ec3","01000000988b3cfee83e4a796d07fb9f4de189a640765bc5ad2f64ae8c11c8360000000019d4b40271bfdb9efbad5f4eac572df50204bb5ed220d637cc1e6983ce552cfd13c09549ffff001d26a597c7","0100000044376b905e8e659ec41f96272a98a782deb4f23fe00bcd70861de22800000000bbfe0f3324cd42d8bc0e8d3f785617efb07b297dae6c85b649738d2a59cb95704bc29549ffff001d306428de","01000000fc74319841889ac2226a8fa54028d97720fd850c28652844c0513b1a000000001945f63eb5298f690e5b3bb68a584b6ff8a307c2f31ca69156d1c10b300461f6b9c39549ffff001d2a9615c3","01000000e13ee04e004bd1e89f32a7b1a5295cffb946a61c228cb7b4e0841a880000000079e1d0daeaf031eb955b85bf1d90026deb9a160fbb0790dbb8826897284da088f6c39549ffff001df854b800","01000000046438258c1d428269a6a5ca6a41c36a4a2efea89b3f65c83e396f38000000008eb3360f5f814679c7ef8d50ab1caefe08ed2c9bc5b890529a73b95d35e1338712c59549ffff001d3b6bde04","010000009ed28993e7f55c1523a986f321581ee2837c58c65a42f205e0d3390700000000602689aaa511eacae729df16cd65bf30b3125829e49c3e5e3c9346eef38f42d632c69549ffff001d36db18ca","01000000ff11622907d1a72485492c00a45c943db94e6a376f71a0919f3bf96f000000002adf06cffd54c781f6a3832d29181d46f3302f61dfe8e22cb74ec22bd13352e2b6cb9549ffff001d249a4871","01000000869578eb1ab2e1ca8953c9c331a64b3b70296201aba6306a868e095600000000210d0d6fe6aad72b3355c482275039df15810de4e606755c677430f411133d0cabcc9549ffff001dca88af04","0100000045b90dd29da856d985b13d1415bc507eb73758ff10e6ed33c64652880000000054d296ec1187c2460d72daecb8f29dd2299e516098cf26e3773564804502cfbc39cd9549ffff001d06aa1702","01000000af34b20deaf6e23401b796a1b261dfa56a96ef39b6b50d522fb42e6300000000eabb74cda45eb526822c7df486031eaa3ce8f2fe12309b445d46a5b9f3bb233304ce9549ffff001d36ff3eb1","01000000e7853d301dcbff3149bc922173adbd3cd1fcac104a422c1134894a8500000000e248007deec2a794f4bed0dbc660deb577f131d5c9a42856a249d0bd45fb2d530bd39549ffff001d2dab23b1","0100000091d98f8b07002178ba1fcf8a0e898f9d3c3663aea1eba6a0979129b400000000677bea4d9c63ff377557be6d66b893d4d8eca6a4c30e1a961cae09419c9d16bc7bd79549ffff001d20a315c7","01000000d55096da2ad71a0a5e888cccd8a94c2a693546c8992f4bcc9ae3b6c000000000a3a4c6e5a7ffc7be9cb3b47b284df32dc91ee552ee5a2986de8c236cc7519a34b1d79549ffff001dfa326200","01000000993f0b845837ae4912eca34c875b35ae319fed6375d74aa88fea84c20000000061337311a0e5ef628ba201a8fe9624256ac99d07ddcda46914bd27f9592d5ad7c7d99549ffff001d34448224","010000007e95139be125f7bf94f805c90d80ed16b09020ae5ee30cf4b3566c4c00000000a68b00e60dce220f04024aeb99b362e516d68a63434488a62ef9d2e30a6387d41edb9549ffff001de702cc05","0100000027c56e32a09751da96c07f51dd62bd7e80ea87312b84f3c248000e3c000000003210485c3017f592e42b84986c956b5c64f20b191035f841030a5125048a901984df9549ffff001d18add1d9","010000009102b2145c572dfeae9af22d98ac2cb572b83ab90a94fdc7a1ea533a00000000c37199cdefc0f5d985ee18558b27726ca7e13a299a17ad186435d68330bc562625e29549ffff001d2c1fdd25","01000000d77293a4b4a5267ee47557aac9c6f69045ebf52df634eca629922fa400000000feadd39083e2a9eda5752e7c374210db206c7db7f7a20f15059e913a9610f84b1de59549ffff001d06286706","01000000b491bcd1b39ce09ded68e17b23198d5fd811c0e0dda33d571ba8cd9000000000fba45bccbb6a9447eb40ba298f6536e728e320faa79bf4a6c74a477198e8d0d8cee59549ffff001d26e81bf6","010000000e0b05f7475340cb3438d7fd8f539bc749bacd25a3478a7f43f2cf45000000002c16655fa905cce9c65bd9419180920cf10cb7aaaa88863c9667fad49328ee0362e99549ffff001d1077d705","0100000047870a5baa9d27364b0c93fe720b5229e8a6270b09bdc708e025dc350000000050c0c7b19d495f098fff16bb1513227f0f17019398ee8457c53dc77bb8b9ab2339eb9549ffff001d39ddf679","0100000020b80cbca1026d15099a7069a97c49c9f00050d365c3112874ab7d0e000000003e0458687311e55474ef987a6de07b57d18267d773ee45fda6e806273eeda26bd7ee9549ffff001d31bedebd","01000000e535c4ee7f164a3a375b3c964fdb785953bfc72fcb923d2254219717000000003edc451bfeef497db4d624e56faff98243a843761c82076a5bad50471e80d3632af19549ffff001d19ee9d38","01000000fba5b35fe7ee17b8159cfa8beaab3b1ec8e1ecacfc6c77dfd56b22a400000000963d585dab9272617af97cd379ecddb8fed49549f98fc197e47287298e9b5e510bf39549ffff001d1c76bd80","010000006925c00edc346d032ec801f4e37d10265efab7a4a5fd92d4c59d57dc000000006f27fd92d32cd98323f5296dda19b6e1c06112b584b3029cd2414ae113a63cadf9f89549ffff001d2d3ef967","010000006b11982e6bdd7ca6c6c85c0f1c51ba12e2bde48521b44f1ad8342e5d000000000a11253a2c2a233c03a7ae3584a9cac1657ccc20ec42f75dc8deb8b81a3262ddacfd9549ffff001d06574099","01000000892d45ebacf01718de1a321a8f70f6bde16b81cb3cb84bc8de260c37000000001ed7c7787b03a9468abb3ea4f5c9df753615977326ee7c797a22d780c9c1033e05019649ffff001d16cd18f7","01000000b9c8b60c597d8d98c0bfa8407140b6b3a256fdc28f393f013d94dfa80000000026a8bb19aa3e6b0af91abdd5a67d2aa01c09b8b063153909bfb00e73986a34f3d5059649ffff001d1ffc113b","01000000cd2d5ecb202bb48023b84b5eaf1e2a51ca67b4834e515f29bf4bd70200000000e69f94ce8766607a36538834352e30619f742310e53bb01f14ced12926f591b85c089649ffff001d1936bce7","0100000081ac46a58c6763803f6f10f4d4eb90afd31209ad9f9651f7356994d3000000005024a4bdfeece88c7499076025ad845612511fda2f77487adcfa59991893cf6871099649ffff001d5d9b5c04","010000006e951917db89e26b96a8bc0da1f5a86f709edb154e79734fef1973d7000000009429d8125b924c46892f5d133297acac66b3889382599dcb35b95a4ad492d0c02e0b9649ffff001d50d51307","01000000760362b954a6ccfe8a7bf90968295e85b3e9c0d3fef9dc63cd050c2600000000d9c8a60bd4dbb0f0925ca50d046eb8058a7be246a550a506b68c5cd9fdd46a70660c9649ffff001d02797191","01000000506f107179b1289814b8c54d2f0c9decbaf8e635471f2eb49936ee690000000069e66be1e80d45ea4469b762956fe789a3517fc68a894d942bd1ca6cb7c0232f140d9649ffff001d76c71903","010000000a8e1978d110c0d1b1cf7e3bab152e9fabb26aaa2dbdddbdfd88735a000000009c9f31f7441a24aadf2b24d1cec728cdf8f5e8751b5da8cdd0bc2c63b80df1e90a0e9649ffff001dfc7cba04","01000000fadb6ba4431fab56590c8cde56c750b6c9b3c697413c8eaf01db85a000000000b7b04815aede4f4e13e2a4615192b935c0c5fa1d7d5f70039b493f9ffaf10a012d0f9649ffff001d74b4ca02","01000000ed08fec3da8873f78b69ce69bac140b2a132354ffc4c29039a2e9b7200000000b55625d96b204675df5cb887f26559f595a6a05a8107e74c97266cb5d76d59143f109649ffff001d15e098ce","0100000097c20e18c571ec05d5f2cf8ab9776b84c1b4529eda3387e6f7aae98900000000e4d49d96cbd36cd270974478dff9c22eeb7ad34098713253061b57dc8f39400989129649ffff001d0794e628","01000000c7256694f8e39e3acf44e806914c0dfe25bc16b2831dab08038c39e300000000e70318879c7d0c60bfb8129a1ab7e5d6de3a2fe40ec9f6dbe5bf35cd29af46359b159649ffff001dd715be0b","01000000317119db9fc8d67eabc45b6f994d597f8170f8805e34473553261c6900000000cbf616d750aabb6594105d0df653be6acf297a616676beddca6cfe50b92f8455ea169649ffff001d81ea5406","01000000105652ab7ec12e04504603d489ccdaebbf32f7e471857f81d370326f0000000028f29af694b521d97c0c0a144ab6763102d8b75b7a96210d4fd5469e0c7cf6bb26179649ffff001d33d3b89f","0100000045042bb29c8e00d767e97869f4df4e33a9016052a822738219729bdc000000007449c7d5f02b217288d2104837f2eee5f00fc33990bfcc9466eeb72cb3889bbf971a9649ffff001d2583ed0a","010000008ae5ff9f79b7058b489934d59fdc0518af45abb397dc8b13f227f9c700000000d0adfb3de8c2dee3b41d0fb85368c3029f939dcd6520ad6351000a25dcba569df81a9649ffff001de43a9801","01000000bedaf3bca80dee1fe978c8e423fb355395ad74223df245f601557f0400000000f7798d527e7f0fe973184e69c1a96f845a49ab167198b29e0cc7c663a3b980f6ba1c9649ffff001d275287ba","010000006d7ab8d03bfcf9e22ca22d4a87abc195a264004c567eda502f0a777b000000005b95d2318c9ca9de1fe93246017fb1f540f24e53f99bfa59e112d899f6f7ff314e229649ffff001d921be415","01000000ebc25badda1f1f41cb5d16c8295855381b6e9db95e73782a57034e52000000002771e8ee8919f8eb2d0e2d50bcf81812542ac4c7ffb6bb94aaf418e448b551de75229649ffff001d33be3513","01000000a8d5a58879fc828c983c5fe36b639d7128b06c11e6e3c4c7b5452778000000001c2ee887933d29580dacf8631635919eb586301d11df5fd26a822431e6a5a64d4e269649ffff001d1a2f5be7","01000000f4016151d7e3a0bee92f5a5ee4ea0376142273e10ab536ee7c4553b100000000ad9a0daa759c36c149b830b3cece493493d52d75f34694e11f0777c794fa138a13289649ffff001d3b0d3e07","010000003f5da826c976164bf235c9cfacbaab795fcab3bd0fc98dac4aa90ac9000000005058c65540f43067fc90453cfd33febcbf4a1d0114100e034ceb8e7d0b46a650b62b9649ffff001d2bd679f5","01000000aa497470be37335f43f7bdbe5bdc01997dd812f5f07016c16305824f00000000b069ede28208f32d5d94b28c158a9324c472060154ed79fa1a6533458929253d572d9649ffff001d19134233","01000000b5d4dadd1c14dda87d1cdb5373dbe6650a12403de7b749098131644500000000a43dc9437fadf1abada234e4d524772c7c592d2ceb37ac80f801cc464a9c3b0966309649ffff001d2a7ddccd","010000004b332ee29f9973eb4d90657f2686ac156c843d5d427f9ef82991092f000000001a4d0d67b23983aa41fbb929336d05522e94247f048e5e8fcf8509ed9cb11bd6cc359649ffff001d385f1eee","01000000cfac7835894309a416a17898ff93fd6406c4a28c95ce92f1d635e956000000009ad17332d7a24563ff223b23ae6bf54132b006e209ad46026d9dfa4babbe46cf403a9649ffff001d09513f0d","010000006b33efa4bc8b3877ea91952db64499f5e1ed21bbe31a2a13c885a6be00000000aacc4420744f0b5006f92459b848daf127d49c50a73fae87e7198fd1faaa5a76cb3b9649ffff001df2733e05","01000000927f63a1a77b48103ffca035cb8ab39e9468fa839707e53901733b9300000000a91bcba7f20a54b0f88841e1c2ca894f71aa1f65a5fe859a534ce962dec18054823c9649ffff001d2cc213ea","0100000091027d76f7bfc05bad1ba8785addb6838e6ae014498b2fdcb09dd86b0000000035f88942a2d475624bfe0df870886955dc04c67e0bb0e0685cb1fa5d8a312abe583d9649ffff001d7f0d6303","010000003da75b21198a0b58d9b52ae3eeff1a07f6ffcac128b422781929623d000000003a4a6896b04c025780e8c7ba41049eaae956e56ffe4d61fce3ca0ebf68b9471ced3e9649ffff001d346402ce","01000000b146a80a14c8492f526c0c4ae7b62a6b18fd5eaaf5146bd81ddf500c000000004b0f7ec3edaa3b1d125ac1f0b03736115a073ab6be6b38a709f4655c1d3480296d449649ffff001d07649bf3","01000000370026fcb79889a1bc91ef5bb05d0f63aa8f53a39223acb541ef19f60000000030abbfb07eab65c52ac68e853cd0b017453692605548f42425e3a76b665036a42c479649ffff001d08d03229","01000000457fcfce068a96c8642009657e18f55561ada51a512e835d36bbf81000000000180d8a2acad21f7143525f1e785003eacaf205e35dd6b5194e16b134b5fb762af4489649ffff001d298692b4","01000000b00a913ec3a4d65ca599b28b20f31ecad17e110894f127265e77dbfd000000001a2ac515d5e3187a1444518d3b677f55568946aa171ff144ac6e370de637217b9c4a9649ffff001d00b8762a","01000000a707c400f5a237d1c27ca28dceb540f7b3b4e8dd5f3a4b21831c2c5900000000a4de48a7c70675aba27bc6bfb456b42deb2ba552662ff7319afa98a49d98e0a31e4d9649ffff001d3a6cb158","0100000031f4ed2ebeca6f0409e324619554ad8b858111c41d35ff5bb138ceeb00000000fb0a6e706df0b9657209e14c58e010df4051655207a14c71bc4c429e16439892574f9649ffff001d2b58ca18","01000000aa9d31ac4c2133a06cb8af41cb659b70d052030b23b8e1030584d4e0000000001fb7cc9e9b0fc2c78ab03d5e897a0d656976a16e44e400f612ab4d4aab7707bef2519649ffff001d02eb1fbe","010000003e7014be552899aaf171deb1e7a691bd9711f5bf71c424e87128555c00000000991c496b8474b869485d8c362e63d6f8c7fb75a3cc15258ae79ed11713017e0302529649ffff001de7d01b00","010000009fa6edc98ffb7af6542bd083e6bb68690d38f92df05c671e6e1a9d6900000000390aac7664de84cd7a922a22cc296b94574ff8951c2dfad08d532a2b8cdb9d869f579649ffff001d00c02abe","010000006570afc14e9f8bdf5d776402deabcdfb141255890d3542a15e008c9200000000aa28ad14f2959b29777996a96d4c10bd05a7c9bbd6cfb47229d847b5c6f2c364e6589649ffff001d7df6eb04","01000000f1d40d64f01efdce6e8d6ba6e6721da850213040c9332abfca9e9a3f00000000435cb7a0ea88d6452c20f7e406bde1ff3fb4cd83b4ab8d42552fa5649c4d6dd48a5d9649ffff001d2d0c4942","01000000daed094efbaf4d92d8be89602c7f73c08d38e5d2f2ad2f42fb49035700000000f95879d901dcac3c3a7ae0d67255f639137796f2a482bfb3a1b86ad5b667411dec629649ffff001d216575a4","01000000f34d7787c214ba20b3edae0032986804cb7966dae7cb0115ee8a5f5200000000d7299cd04a515368859de262b57c8a5579de2996328124d69e5ff957dd8aa33fe9669649ffff001d1e456a6f","01000000e9acfa7b01b258e1aba4f3f2fa0ac3a6f91b2bbf9390af485f97ea1c000000006adfeae97413106e27d50b4b4ab12bbf895f92e7ab1bbf1c9a22d09c4800dad8a1679649ffff001d89b0c702","010000009174188decdd02160265cc8794201b770bd7711bef1bc1148bbca50c00000000d4af791b64ffc4caaa05480c745e864e8ff4a9a418db3940a856255bc3b9528ce2689649ffff001d26a884e7","010000000d118baec4472ac869aa6a1afe906c53bb1e65027deb3956e3b384c6000000003528fa7a0679ab7be8a17fe89696ef1a41b1bcdf258ea7da034ddb3f1034a2b3396a9649ffff001dd2ea5b06","01000000523e92c91e05ff2b4cf443daad1a89d4547ece987c13f293837ce0df00000000bff54f915a4434575a22d1c1924dd7f61ca878a468e05bfbaa6379ef7df5d53bfe6a9649ffff001d266aa366","01000000a3ab3428a05e9f9d109520ca8d70bfece34559e992f2c4ea1779b4fd00000000b114bdf9e7600e757b24579eeb19afa00256b64551589eed3148a74c36acaeaa9d6c9649ffff001d286e2a76","010000008e39beecb5fa981650167a1ff310fe0acbb342d3229170fb0c1356bc00000000702166ef292f13a108d4956aab8c31c74debbc0dd13c94ca4c8b5efa1f50e8feb86e9649ffff001daf02aa08","010000000555657ce6e9b72d10ac1424b350e1fe2c6003a084c72b6e6020e18400000000e7c669c35a110f5b9e62ff79a1d0427b5af279316f34b0334647d4921b61bd4f93709649ffff001d043aa6be","010000006bb666a1462327a3b50da834d5c24c1630925e377c62f42b4f4f7f2e00000000ab17222e0fc0fa8f3786dc9aa3cdd3a6938ce7a55cc8a3bd37deb2265aead81a68749649ffff001df29bd509","010000009a9422dd5aa842aa77e59bd752376a64e429f63f40ae787fbaef9be800000000ad63c2897a7a2db66cb33df51a792cbdad5ec1f486c69c1860e5670a29bacb0c9d749649ffff001d1901e179","0100000025da9d36e718aa5e030e863493c2629e28ec096e4c31f6b8a9362d8100000000fc55a108281b9f8495379ceda4acc16e110155efed415830df4f10fd9fa904f961789649ffff001d092257d2","01000000cbe6669ae0c614010ce9ffdddb0b6d4eb0c87d2b42cf98adfc9710290000000039aa948f1adc7060c46a517172845ccee2bfd04c6abde167b2b1f1000e8cd098dd7c9649ffff001d1fcecff2","01000000ba4180cb3dfa36dddb22846fae69c2ebe237aaa00edf7426fe3e4f15000000003b0406d9eca93eaccd4e9e56743559d6786e42e5afd02abb3fc7913033b1519e407e9649ffff001d245d539b","01000000eafb5f42eca03231f6cdddf127cc02127c6c773402c356906ad100f300000000ae6e0ccaa0682d7fde93ac0e5524bf097fe668b6168491dd11eb6793ac408be84d839649ffff001d1c2adee2","01000000c7ab7b54ec0702d656bb260d1f86ab5e004a0b75a70645a4f488f99300000000f994573765c537d8ca21149eddc1427d73758346090860418bba6fff4873d33bb7859649ffff001d04a13062","01000000bdd8bad9e357eda076eed17b2e5364b1ce1056fd849d7ed4a070247f000000008fe6648aac5b559bf33db92d5eafe15b6ecc2d9924dd6a0e67e6556d166d7c9027879649ffff001d086c891b","01000000dddd80550fdc4c16c26bb51ffe255f780310ec34bb4471e57cc553c4000000002eac9285316ba7c79ac2c636d5b8e1462bdf52d5978444f70e9b1766c8dda9494a899649ffff001db416a508","01000000b583f63afd947b18ddecfd8e987a6d32513f90093d15f82f9329c72c00000000f6a6db96031d482f1dc13690769d733c44960ef963316687f1d5c047b97b35b4308c9649ffff001d1cdc3356","0100000068891531570faf1b83ce850cad274d01ff35b815285f203163bbe40b000000001a907d0688fc1bd3ff1e7141368f1c1d5a92abdc16844d3466cd77c2a3f7c5f79a919649ffff001d698f6f0d","01000000e79409d4391b20dad1ec98b62997622ccf8177f908c907f572e9dee80000000083d68b5418e1d30278ccedcdc9f2a9d4ee23dd37c7ac1403b6602e1af2814426c0919649ffff001d335e8988","010000001396fc0b1cbec2188da7a7ea6e719135ca3a7df50ae283ba53b6ed4000000000d645ec63fd7e30594d6f89ca4d73727e5a99d95de8ef2bbe2fc4615fba7aaf845a969649ffff001d18bc6016","010000003b060ccd330ab4a48339ae21609fa86a63a37be34c912e04b109a9520000000005b820cf25468758e436a7a71ca7fa9662d8273734759b8d28394893e97a892880969649ffff001d2650b639","01000000c5c2661f138c5756d1321f038817b08646017363a077eab45b88650d00000000b7adefb3b4f301f0654d3e86af52e3b29d330a5570c372e6bb86bfef9ad8dc3de89a9649ffff001d19f45dd3","01000000aa8e3d489fcd268386dd71bd0339d95e1392489fd65646a0ec6abfe600000000c57b5ed6bc082d3bb821c74d10e4bb6edd35c2550e852ae0194afdca9826f49f25a09649ffff001d0d327b14","01000000ec3f73a396c8660a6f03bc3e3a7b0243c3a60fd9e39a31bc93f7d6cb0000000065bbd8c9fcabd85d3e5a215b666ccc95c432483daf5b65e2eb9f44ed36e5787d6ca09649ffff001d2cbe96e9","010000009cb2969f3a6d7e188cd41bb55c8d04c3da4d2ee2ac28f6ae46f0d1ec00000000208a51413bb00ed146f7e40ed12cda7b79c8c4adb7376cf8b6cf6440d3ac45b91fa29649ffff001d1ca405ad","010000007932f9883f03e7fb2b704e1d83cb9822daa5b5c0943707768800bf55000000000b6cb56fcd07a96c7884d753fdbd512d8c0e767bc3e9fc7e5813694c442b52d78ba59649ffff001d3677fb11","01000000ce3e1d06076bdb79a87d3adf73d08c1b286b989e5209e86996e6e9070000000072fd073fc2e1e44fb5d80f04eb2bbc14aa11ac6d29fe1dd3c689109c1d33aa3b13a89649ffff001d74c18e0b","01000000f41925f586d0a561b76e9fe93508594af85dcd72f3477d95db915e580000000082028634b7c7bc5d0726ebf98edf7760a2bc8e33151d7764f3e0ee2ad370cccd8ca89649ffff001d3a39d7d8","01000000cf7807f7b8532609a7768fef93529540487c3c8ee30dd483fcc9932d0000000001c25702bce6058c929560a7b34484a5615efc7af01bc3240bdab1fb33045b82f1a99649ffff001d39f400b2","01000000fa4f214f206d6a9424a10e9670ba4cfee26d0a466a7905290cbb9bf500000000cc9ab64bb2f448a91058f810e53457d7284f9a3b3019ba982a50e7a2a29fe6641aaa9649ffff001df6047300","010000005c8d930ebd33fea0bb59d83300e5de83a7d044347c338d8d4d40881000000000d8c17be7c30657c5c30870ff9ec5d46b79042da51a0d599ca757653f3680f2ac88ac9649ffff001d0887430a","01000000cf59953f9543e8d5531cf5268976b0131b3d919963ca2c0d6eb2c90200000000a07ad54cce58d07e6d419dc680df3131713896d9c6c1caa5d3959814c1b5ecd404ae9649ffff001d67a7cc03","0100000006e42ea7f98ad957ebf7358986f4eea0d25ae4bef642d16b5d162f9a00000000f6ca654106e49d9fa3eb4ccca16bf2a8612e7592cdfdd383f44a99c69c94c4ed3aaf9649ffff001d20989516","010000002d1d1479b48588ca88f76fd815ddad0da90d730bc8527ff2d612035000000000a967348d8a80edf328fdc577df4b1cdd69a67a32a65f69cc45162113f2d813a7fab09649ffff001d3a71555a","0100000047d718d2c80ede0e4d0c483d7332ded19d098c6ff20e507e009e36db00000000230db0877c32f99633225955614055ae6944ca72a8b8e2249172eafc65da0a46d4b29649ffff001dc865db08","0100000035441411fb5fe6f98c73147a58aec6bfc4bb289b496745931d81c51a00000000d8262e7a125155fde99e284d1d0908a59c1c9a3e003c4197b96a2758762752010cb49649ffff001d2a076b13","01000000dc5a9428a03722910a6da4ca18298eb9fc4ab623446282b3c221dd84000000001aa8dc0236de165b9449bb2bc587a583a656bab9c49f3fdc271caada3631801be6b79649ffff001d39e9ddfc","01000000816aaacd18a37b8da145e79fdbc55b0ec0113225eed9460a857bb2df00000000b9399bbb1bfaad93c7161a45f89c9a3e8e1d753f41f5b4546cf50b7a07cf1e22abba9649ffff001d1c3b8036","01000000b7dd4c03e125350c49a346e91d86193f20666237e204787d6137307d000000003f6384214dd9ab1aea5f593b16a137857ab31e23b6447b40932d247b29c658369cbd9649ffff001d1d0b2045","010000001bdbd17054998207b33fa514618ad03adaf822bc3008d8bb4fb7563100000000c6b87421fb0446134eda15cddb5e26145bbcc12ebb1e6abf36f603edc6aa614ee7be9649ffff001d441a7902","010000004d914d29b0ec122c42288f0a9937550fd8665ea5b0a0ca06e3545e1100000000df46ff875b75e46609b1ef89130408288b22645708f41187cdf481ee3498150af0c19649ffff001d24c6126c","0100000050e9ee50550e9e1cf44a4e7378ca8e53af186a7b8bbc9a6fd0114a080000000053ac9f64c5280b8713f4fb29050e23855deb119112f2bfca1ead1887d50206f09cc49649ffff001d176c9ab1","0100000043f52b5c7dac0fe6c6bd2624cbdeed6d9899ad7097b147fa60b7160a000000005288d9c38b125665c216adc3818f37d1d7b6719df8eda749c47e5b55f0de2c95e8c79649ffff001d31d4d134","0100000020fe24e3cfdfd1c005353a9e6641a86e55b5e06e59b1f1c3cf2d77d500000000a8dea76975bd360becc71c86cf3bc76518a5880dc157301fb3983243e1da16f5e1ca9649ffff001d299165e7","01000000663cc2fcb104753c67ad3d0ff0992739c8490bdc0311e49fd0927d4e00000000328b1e5829991afecf1928ec5cdd6f687c7c12880f88bc1174a418d646d4c5554ecb9649ffff001daaab9601","010000008f1f3dcee0f6e0152dabbbfed2394d048b72231bae40530d1cda55c6000000008456eee6761122b22da5ef2d21eef8ff8755cbdd77d9d8464588cb892184be3b46cc9649ffff001de6db1a04","0100000099b1a1e09603285877d3bcedc5b5c1696118b477a7746623b6dee377000000006398cf244b5bc2c6a5799f8c947e3c2d44ab2a0711da7cc0489a2a37c44de44508cd9649ffff001db22e9a03","01000000e0c98248aa68f1a743c1e43846c5f75c505e1afd34d50b7056c1960c00000000ee7201d80ceecdf6cdc2c2305192420d003484bc9421dff1ae481fe4de0072b356d09649ffff001d1750a8b3","01000000512619cdf45ab218aabe1f8c698197a5e438d8d6c09b361c9e8d9ec90000000056a967cd63347fa794e2fa861e80071b551fe2d29be495c066ed91f674fc79f007d69649ffff001d246fd2cf","0100000003f307fe19efd770d073893726ad2328cdfde187ca452cf2cdd2c81e00000000f3a272bd8301f507a9ccde7b13636578cdd825134bce1e2dd12adeeda3e912ac2bd69649ffff001d6e3d3300","0100000021822eeb4eedb74c86d9c64510536d2ad4cdb78023eb684d7c1b10e100000000a5e24c413fb5b22394ea5452d595b76d769397efeb6f3cf00b43215ddd906d1ea4d89649ffff001d1597ea68","01000000d36d5c01b888f131643f38178d8ab15773cae27be93fbbe0b0dec04200000000c8d95d2ea78b5b9887f34f8fd9bd8ae71f3c2b67f38c5a2c0d58bf2d25522ba83cdb9649ffff001dee8be20b","010000001ee92dde7d2af147c40e2dc32b8c94624cb42df789660786af14db070000000052c32653f310ce3486e16a9f1e08e0eeb1746e3290bb53e59a358bdcd31d7bfaa3dc9649ffff001d359befd7","01000000d9586eae57a3338778776b9a60ab615061739d282ab137263299e728000000000893839ec1669da9b38c79f0257271f96a4a413e619eb4492355b02ef36b543f37e09649ffff001d2aa1aad6","010000006cc3879c1f855efa8d9767ba1d6cfa6f54a361d9740a8c57642ca7dd00000000afb94c6abe3ad051b1a2f68bc13675e7b994d0ffc16fd8fd222787da6184403198e59649ffff001d2ecf6ffd","01000000b42aae1eb08f15b391d073ef3682f942f6c0fe91df93b1a5c5fca410000000004c1f398fc85468c55ad7eff6fba99933d5bfd4eee8767e444fbc2cf887bd4f93d5ea9649ffff001dc53f9e19","0100000029654dfce7a19c9f1afc504ca8f8a9d1834af0b802a5c8a5740e2ce500000000132e4ef011c35b47a628fc4c7a958f17d11ff7dbe09a7a5de1ca320b654ae87b16eb9649ffff001d01ee5e3f","010000002794b4a39bae52eb55f11e8bd5e60ea604d826093fc933d93b29e3f100000000c4e45d3a06cf720e36b876b9639267fe2582432409fce68846cbc5d636b8fcc460ed9649ffff001da6767809","0100000058f55defe13bac6b79cc8acc792f8d8ea0e531140f7998ed08991a6500000000666b78e83472fe8a3f7d2f42528689a4db489e84eccb5ee03a316651c1f5dcdd3cee9649ffff001d0861bb03","0100000062a8a2c20133fdf7cd65de990677774946fc74d6490d46d841295d2d0000000023c1de57818875205cc9ab9e7dc6708138d3df781418de3af1e998d0955052dbdaee9649ffff001d2d15b899","010000000891b83fd2b98b1d0bc5fa6cd3d1844b5cbe866797157501cf3916c200000000c7da44b97113ad0e6c2c66a38e2ed0a427196d51c0433c26074e919e2f88232782f39649ffff001d1f1e407a","01000000862e5b74f50be782d120d5b3899fad1320404692170fa5326ba73ef500000000a93e0ad750eedfa022fc57819c55d57be34dad13e5d59bfb39c0ed49d0166aac0df59649ffff001d939d2802","0100000028ea203bc0fed1d5fbfe095beab077829050a15f7f5c6d84987cbd0600000000382b9c4a62281ddaca38115cb8a3fbea73f07e5eac66aa338b16d66f83e2fc6fb8f69649ffff001d13052504","01000000dd27d1939c0495d1599fd4f166354010d626289d25d7c673f810b1e4000000009979dbc50c9b0f91382fbbcb782adf5d660a48aeaa737943c0c3d2a6e511a644d9f69649ffff001dafac7d00","010000006dcdcf1f966d72fba155873cc647ee4a6410299fa311b48cd573197e000000006d256fc8dbb214e842f066a857c9d7c2f170297a4dacca5ba24dd67ba8b6471d0df79649ffff001d1609d84d","01000000ad6734fa92ee743993b18507dd4e76a343beb2b8c85bfed87c68fb690000000091f7ec500c199edd7d5c228ac03317e4dca4e17c3b7784139d500ad6c408ba62ecfc9649ffff001d282c9422","010000006a745e8e74b6f46b367e6b934aa4c8c099c0c109c410328f5e8cabe70000000001b0ccaeb9b43538ddb6500f98a4d1f1421ccb0b283d8b36351eacb34338920e36019749ffff001d1f7f8f53","01000000a72a8743e6ee365b7948043075ca25f1752e1acfcc4550bff3965452000000006ccead24cf508bd8855a0cd658438817ac9591f8b48d7fe542e9e5bc6fdba8430d039749ffff001d2499e8a3","01000000b5bba42dfe81fc0b7ab61f718b0068530bbde15924413be0ea2d5e6d00000000cd51962d15c82856e556e6dfefd3c267e73b113c6f227f558a200a511c596005aa049749ffff001dbf5b2607","01000000434ace667527c2538e769f83ee075faef17a1401c6c04fc1d39979ff0000000084d702bbc55988b24af956d6f4270beda8f21288de8292315134091cda84c350a1059749ffff001d46f3a604","01000000cd46ab774acb3b6084ca07d024dcfa3c966bee784adc8c6ae37cf9d40000000003e3e6a9fa259e18e635d21117a7a2bb359a51c80012266e44e78d8ead0d511883069749ffff001d0069c59f","01000000f6b657522dbcb0cc228f4586ac9685e86bbc9c290e78caab24b1a90000000000f12a14978ac3c1517d41bd92a3a53e3eb0854e9bcda8d58df5cefe69f30722a62d0a9749ffff001d31d1ba41","0100000069a7a65014c4d5515a768805a2c0e3993cc17295ded399c5884de9ee00000000dcb0cf1b6db3e218fedcaef26aacff5c2bb7eb682b8e1bfc24c9e41f3ca3ca790b0c9749ffff001dfe664607","0100000028ec372168ff74cbc6b688be1bcaa4934174eb642303ea63857985a5000000000ab26d6ab0f0e672a05a37c1fb79b17fd728ac95d9e4d52557b3f552b68f4e5d490e9749ffff001d1638a1c4","01000000ffc9dc1259d7cdd106dcaf1d29aae9071388a7ba3986b69f8fc3cf0d00000000c601c43fd76e3c58047cbbfae424302a60b58dd56562f5001536e21e5435c6c416109749ffff001d022e3c65","010000005daeba4bf98594e2ef337962ad7b8090f284c1e8d7b3872c8f16fd7500000000e7a4bf51041cbc06440851ab7406b731d953c667ad9bf957009225cffef727e37e139749ffff001d04d4b9b7","01000000a185e698700d8bb6efd27b36715c92e2772b1c92397e58e6cce5c66100000000bd55c4fd66595969ad91940a838681ba7b0ffb1a3723455f67dc34df2d4c6a4877189749ffff001d3583ca97","01000000bb7c310767b85abe8e50062241af3c74a983333add8a89280b38ae8f00000000ec8331d4d9c47d5d78b21281997f0d7a7002320fc51a757f377ada2521e2226b4b1e9749ffff001d2a98b972","010000008cc322a18cacde5dff37a02db16934e0f117814bdd4931624628903700000000a8267051c91721a9c09d63e188a8bf3fb8ea8b9e6206a1047cd4ab88171082b417239749ffff001d071a20be","01000000027045b8591b3b09cbb0ebcccef7c2a2a3a2d133fca404652bd8426400000000ff1f83e4b31b150d6ba539556ba91b01f012ba9dfbbceb90f7f9b416948dde0699269749ffff001d29bbe668","01000000b43e0e0633f08eedc7f6ce2c1b5208d6ce314cad87f2fb10554bb50000000000d3961cb09db9e39614bca671dd9a93e18adafa03df88613dcc15c172442aebe9c82b9749ffff001d321a4275","010000001401c33d28573686676808e3de6a72e7ba03b0b201e621174363aa8b00000000b4b4495de3880505d8db940ac32aa1ddc08f46b24aebebe39b019ee36f9f72da542d9749ffff001d0cbe9a03","01000000f097d6224225ecbf6cb4e05639ddd7faf23c7f1ac617a937370cd89400000000389afe728b88bdd46856b0e0d67e7248cbb110e2d11460c3ca8c2258df4da36141309749ffff001d21beb20d","010000001222049e726301b5bd6cab8a0d0b8c081f90a441020d6768cbef49ac000000001cd2dcc33dda5e5e62e31f064abb7760d82f7017c6d13ed6d45fd60fac20ce262f329749ffff001d23aaf8bb","010000006aabbdfeff1a3735cf9eb3365924bd790c094a9ea95067f5442f3664000000009130bbaa75d4f80daf6756bfcf4baac1c4f971785151030c85c898c003ff722c7d349749ffff001d2a7ada0a","01000000d9aeaea8397cb2615ec7cda875d2f4adf2fba8fb85436b300334bc3d000000004bf5b873d79664700d3aae50e04e7e023cad25e0f1daf6f5b91a8264aa0d483e41359749ffff001d25e43baf","010000004fb326eee9207c3b7b8498c0dbca3c1ead3f07c79abfbf6a6c182fc30000000004ab08725f236354dcf5efaaa11de0fc54fe45fe6d4eb48e908adf49a593f866ed369749ffff001d07ac8af7","01000000dd163e638d56a8ca4bdadd876e83a32610396a572b881eef9b33435800000000010626c2ab4a63494d7129d17433242dcf8ddf9745056f4cecd704394e2a8638e5399749ffff001d1ac3a4c6","0100000035d61048662189fbad118473309a9cda83f72f16f78a095d2c7eaaee000000007ea6e5e7dfcc3ec8c6a618671c7f5f4901dd6d46b8e0dc1ae144049742a11891973c9749ffff001d19e243b8","010000007cc020fad82a51b963afff96275ffa172b51c7a41fc66b9bbf701135000000009f9f462b812540b1ded8af7fd2b627ea23961465f8c28a6d4072e6455dc75f4104409749ffff001d2d32104c","010000000dbdb83fb0f56c1a09d6e9363b6564c60bb42e6410ff469c1fff0142000000006e153325f9e7c449aab128037cbd2e92ce9c902815d46f04d53d09624c185caf17449749ffff001d36782eba","01000000f62011226ea2aa48ed5b85240d6af5de07d4d595c17519a9b89bdfc400000000d2733efcd9949b38189bff95b9e41928c78dd510b2aab146f799d5c34d2c5b858c469749ffff001d37b5ca96","010000006378fcab29d5fa77430da6e63433ce53b16183d722e6dc275763daa90000000053a5da8ef0ffb4a8f9b39b8d128e01251e76345823f3f0e57b77413ce9d561059e4b9749ffff001d1a458482","01000000aec1355c8150846f507636d3983e0358ba2cc71b9df6ca344e22ce1100000000014b9b6c88163d7b574387ea1e6c25c50dfc0c95bc78c20c8bf22a6d3d1806d95a519749ffff001d035bcc74","0100000059e0a0df5143687c71eab3f0d0fe91c9483d09d00a284a24fcfedd3c0000000034a741834b81c03d42ae2f90047d41824006548bfa180c822d3fb23b8f66c272f5519749ffff001dc5d14902","0100000030e2eb4c933035a05306498cd97f5a1d1d611d45bbb799862bebe536000000006dd432406f251aab59a89874a41dda064c5f2255d1dd89d86f2c9e5288422ea582569749ffff001d218d9b75","01000000d821202e008d82e3af9aa48d447e74582ff7a9a9c76616021063cc2800000000c26a4d014eeed6b7ee35d556ff109c0fdd40cd89281b24120ce744674da40c9afa599749ffff001d07a06632","01000000b53e9b1d71a3ffcd5690867e3ec35213ecc9f2ae2635ebf34cf97e5c0000000083fd6c92c8dd485d43f78f0d0ffc0ebe5ca21d76efca171883cbd4508c6f83c9a35c9749ffff001d356ed0f2","010000007162e543ffa264d3a67a740f2ac62b454aac39e8fcd11891b583007400000000fc8389ad16ef9c7713b900cf529c5ae4310832f5dd71cb4b0b5db5264a8bad42025f9749ffff001d9b3eb404","010000006de2523dbd121a42133c463a155ca78153c94aee7e454a5be875f44a00000000b72e64f325bd83ba23531fbbf42b7a604e40e689252225daebf735015867cb1bc8619749ffff001d165f7550","01000000d2adbcfa30cf96bc07b11ec543da3bfa256ba7666ff3190013b1be78000000003dcdeda1cc6d4f116b0029deac08667472bf9297fcaa785b73962716d331a7e5ec649749ffff001d1e2ae2a7","010000009a5ed7b99fcbb475c4dd84463743c92e8885166586eddd8750db7734000000006d627a2b72b744121af21aaf4831fb367a99a0c0dd70eab96ac7463a6259838efc699749ffff001d1f7dea36","01000000b50d907285f5b7f144602182a0ac81353aaad7730cd6e55362d32352000000002521f1f3cb6c8b0cde60434042697b767bf9ad5491b174a5b7c75c0a878a8556dd6e9749ffff001d2797f297","010000006b26eb41351e838c11c943d89be894751f2b5a51fba27c9af145171900000000b8d7cfe872f2fc9ee534b8c5a7fd44f857d28f7524dcf586af240dc09f476bc66b749749ffff001d1543d735","01000000575c2a37271ac27c3c3e63cc6934313883561899a83fc62f6669213700000000284515270190fddfe05679cbc8bf3bde4b270e4e6979e0d39a5aefcf24aaa58fbb749749ffff001d44cd0701","01000000e1e7f97cd147c9241c5a411c5dc4978288a3441e9b7670d33649ed850000000055e65645b5cf3efddfa7a7a5e221ded701110771b59993f49f228af63e91180f5e789749ffff001d1a1a81d1","010000006213858c359510db12d51765a56d194453c3cbbc467fd23096f9f29500000000c9d3141603067e325bd7b225de8ce238620b667e11ec3701249433410b890f9aa27a9749ffff001d08c91f0a","01000000bed3877840f53ec14573d3fb47d596e6ffda359de57918bc1c2c17a5000000008ac8964486837f9ebac86cb540c8cb6b07ecb1221194f5602d65b85b9d9d1792857b9749ffff001decfb8c03","01000000aeeebb8055209cc0cfe01e0252c0e6fd228f5195e5ffda4f8f4773a200000000f409892945c1e54ff0bbff781253c2ee240cb683b067b7466b7eb0f22221a89b3a7f9749ffff001d58eeb512","010000000bcc606d2e31797ecbcc17064c5ea9a1cf9bc72d0582ae69d29e74b20000000007277c933e028b481428cef807d371ec9b11f0719ea5491fc21719aa6a6d0cc34d7f9749ffff001d24c9b6ff","010000003fb3172f94f9dd1e0668f7c2febf236fa490407962ca3a5a7cfac70600000000e627f54c66fe92c84122cf588ad69ce0071670841063cbf137590aeeb178319b3d839749ffff001d1948b3cc","010000003412a3d5a7f8758193aff5919a473551d317cd17741e11dc24452480000000009dc2e0d63a3c6786f20d0703a5c203153e2b649492606fba29fb4754026aa1629c869749ffff001d2d62f90a","010000001060b7d31b9c19053039a787bb189d75037a772d87f364255c44415b00000000c9b60bdddac652c3b4a6c4a40ecf8b222519e5ba54a493fe3334e5366bf4b0cdb4879749ffff001d18e8afae","010000005a0aeca67f7e43582c2b0138b2daa0c8dc1bedbb2477cfba2d3f96bf0000000065dabdbdb83e9820e4f666f3634d88308909789f7ae29e730812784a96485e3cd5899749ffff001dc2544c01","01000000c76df87d943c950e7ffa10a88c6c4a2529532688bcc9f95dc5d3da9c00000000b7647d64c5d61f43f0ac2ae3755f783a4739dd8d5266b09a1b7f5d59278d7519e28a9749ffff001d1d78d904","0100000046621290e1527c10f40bddb5321f45b29cbb734fa20d5db952b4c31a0000000095c7594ad5464789226ba4a8819d4db068c5f86ad6cea1e81f1860feb0d58f95558f9749ffff001d08c73c59","01000000049d73b7e6303a92fb3bd7e2f704b0e95f3ab85cadbb64f87811d6290000000088fd8ca9dcea980adb082f1f7b7980f628b1fcbf46d4f04f25b199087f790d2a9e939749ffff001d7b53e60a","010000009bbc6f5de0e604d08f1a1e19f1010f26e87fbf7231a19972ace30f29000000002b2f75a409462c99e575a2388d3af3d151aeb43b29a6605539974b35a6c10745c0939749ffff001d41645800","01000000245a0906bd66e873d9dc886eb266384a5594ea669aa4927812fa44bb00000000670fde08cedd2093545db4ad8922e771ad1c0854f278e962a187b22e0874f8953f949749ffff001d1d72bfda","01000000229480b855349009aa514706f776788e754dc800242eca58edeb448d000000001a3e6d20419487e960c85fd86aa40b3104d61920f0aecbb6308ae3a0fff26fe134959749ffff001df558f503","010000002d1e4706cfacc278230a3f6114b4316e8f8bae8982c0b51ca1e61cc900000000e734fde6a526e91f0109150c96d2a443e0b407d547e85a01d7da1853330180be449a9749ffff001dc9576d18","0100000076136191f42e014e7b13fde3c429339a9ae10ddf7d04b8d0a38383a6000000009cb72202aabdd4952a82d8d4828aed7cedd5034380ad9c659a727c94a0d1f1d78d9a9749ffff001d22869730","01000000eedad068e22dbcfbb7c7aafd26e594a51131b48d119c964e4aa1a7f20000000048dd8b75d62d7cdb7764996e3e0c8f85d4c49d75c812c19b32a56c7a21eaca77a59d9749ffff001d2c8aaa28","01000000a3ac06e408c0fa6b77d165ed90b2ee25598422f39e7cb379a339d00e0000000019d835de6b3349c8a886f9773b153582bb8f63e2e35fd8139aa3abf2510cd4e92fa19749ffff001d0447b67d","010000003d602338549e1c6e214bf399cc4b87cd8fe8cd907e097f5a3f2d1a6700000000be3086d204262db969542976bfe2b03458e4ecbb14e5f26bb38d6e6d86bd1e7ac1a29749ffff001dc1d8da06","010000001ae10484a73ec0c9ffe741f8f75c96c00ae834e96c9b342a4fefbdff0000000093b74f8d6d778b6c64da4ab15f0bcb53e1598304de034e964da1bf82f0e181b090a69749ffff001d36d8c331","010000006c81573bc36a9be8b50cba18daf9bb0f441bbd7c9fe87f8f6c043888000000000797aa25f6e7a7ba416292e54d452772c28377c95be094c83a2f1f15aad4b83a19a79749ffff001dbfb62601","01000000be278df1af6ac9bfd7669b3e31da6055db21f579a8aec766431848d2000000002e4e9728a4260ef15ca183a8f2baa6900c0d538b049c77ee7658d343cbbf2ce93bab9749ffff001d1610989b","01000000dae685668f8c8ecc58a768a38e86ec1511cbbf4e04b53c19a761d3040000000028c9259edee81c860a1b5d7193066f4cef52baad43560797c555d440107b2c68a6ac9749ffff001d050db5ac","0100000035e7a972c2e645cc1cd6d7811909991863d17c035d7c073b7b4ad7c400000000d615c17c49ce14aa0288c8c42e68789cfdab1b56fcd3b93537af7c044bb0d1c586ad9749ffff001db3d54403","010000003268f183d5a2e38272fe6b38fcf3a79e415aca74f1bee2ce308857fb00000000f5455055f51dece4d755345a8bdf26d6cc783964e4fb0cfa603525f2faee090609b19749ffff001d2519e7d3","010000009436511230bf37b74a807e5d7e8ef9050f644649d1e3bd28fd4e5e2c000000007948c9368f0f08bc64a75c332a51dc46997b548aef7f90df03dd0a3b633b1266ceb29749ffff001d2b8e7fd4","010000003aae0977b5ad4c851dfaaff28259e8b6eba5c81e650513e11c9c96ef000000003b08e80fbd5852e4633deb9ee14a45bc2d851feceb58775335994037d9c50711e9b69749ffff001d2eed1b54","01000000361143b789210262c29c456e94952fdd3b557936fbcc4096edc8c7de00000000fae855335a828bd6abe7be248cf3ccae227b65065baca2701ebf7b1a727653a26aba9749ffff001d2d06de1a","010000004ed88fa683922719779d3b8b21903bfa3fc690fa2b08603fcb081fcd00000000a4c4ccacc7a6494187c9cc01dcfb4b794a97d2e10fd54b6e910ba548052f219304bb9749ffff001d42adc401","01000000a0ada90516a5e537f3d4de729a0ff03764f41382022d5fb72e3702840000000066c37a59444e133f082cd8382b3e2c42b1dab6aeeb9cedb5c2aaaa87cba38653febc9749ffff001d2f96b91a","0100000092bde493e69971a18cab7e7f66bfc4255293caab6d9ffcb8e0f3fd0100000000526c7d717ba10d1fe5f38eeaf9aa8c65cb1622c3afa44fbb3ca98456569fedbd37bf9749ffff001d28c47281","01000000b5aa83489fb2e73fbe1c41dd5a21d4981921ff16f8c27a73d39ffe9600000000fce2bf053d32f3d088addff2c35603262875d52738c1de0ae60fc0b2d093c7fc6dc09749ffff001d730ec004","01000000c36339f0461a6acb0b2a9b60877434b3837f7d730787ea5a10cf51c000000000624bf00d5cd2b6a6b26f83600c244ee0e979ef6cab25536e3e9318955d6ac32395c09749ffff001d25308189","01000000dedf73a73210502b007ee1788990ec6d18e0b27838c7a95f978bc48600000000e8834447002e21e8550688afcc427a28178f33c8434311ea004184cd641b884513c49749ffff001d1f8851ed","01000000635800e3932588ba7189f5c0e8310153e143ed95dc1501ad0726874f000000007c03d6e820e2cd92a1cbd8648e3d0806b69c3b59efe0c00fa614e6b5c65404d4b4c79749ffff001d2888310c","01000000179293d3edfb3194052cbf0200061914407925a61d9965337df6afbb00000000f3784dcb7e3c8f0af7b1b93bcc7957563c188d4896f9f08c80674f699ac2ef9704c89749ffff001d41d63f01","01000000b62f4a1fcdcbb9504ba75ba9bb238406cde221b70c0f16f915218f8e0000000029bac09b0e5a663aad7c0b0500080719274d2a6c505f5c9c24854e9b6c139321f2c89749ffff001d1ca6f0f1","01000000fc34b978af76eae9dbff92e9d80d0f788a48b518032b64aed36445d8000000001ec9ce1639ae661c44838fcef0c6ed33f17eb73428926d90cd1ec15e3b6f1967d6c99749ffff001d97651b04","01000000be8afb78130dac39ed9cc58daf5d88ab61f0ce0464f0edb7d8b27ab0000000008d9029ca0221550b3fa6cb3bac2904ba745e4748d758e642ea362304c6da086444cd9749ffff001d1f96fd40","01000000d499e3da44727bbac5b3af403f95d564b8dc09df5fc6016371bf8d7b0000000011eb496f09254753d8352862ee806492294a639af27aca2ef72bb8dcb22cf1172dd19749ffff001d2b970b8c","0100000071d90a663c2e38ba72cac38dbd29587a0140b85fb4994a0de19949c7000000005cb6af39bb87b38f6d19df909b27fccdd2bd688e26d7e4a51110d8a5698e1e665fd39749ffff001d14af86af","010000002af9a7501ed1dfa4baa054f82fb9b76c83d5d2fb4edbaea2df2e3220000000008e4bda0df87967c07a9ec334c30249bf96d9a8d99a59291a3f966ec9e58e9eafbed69749ffff001d1f476298","01000000c5bdc2abfffbe65106d2f537b729e133b46c814a9d70e5565db1821d00000000f446fb50dee9138138664e2525735c88a57b495bcbf8e2be473c1809711796465dd89749ffff001d2cac2107","010000004863974e2eb3a2f72eaefbed4fa29fd7eabdde4432b2eb467079c8010000000004b00348bde668fa05a9008ea3b6758209fdf89588223f7423e7b071a73a4fcf58da9749ffff001d2c626cc7","01000000e980fd00e906dec8d5df4fa05b6ca862a173263610804bf2a826e20b0000000001401274adddede73bdd24fb08ad307c96b95fcc4dc942440f70db3b8f5a0688d5df9749ffff001d31401396","010000001b33a16e9640bcd1a3e75de836b4424f5e396e9c87a49d1fec44c3bd00000000d22ef52eb7bc63093034b2c09f1c3bae51a647a43e6f641e7d6cdca9f0763a59e5e39749ffff001d265dffb0","01000000b41434093d440f7395e848747d8eebfa4aa0821d404793b830a31e340000000024b7252bd50a1e39a6acf6faee8b4fbd1f37572a11622317b233046ca56b9092cde89749ffff001d064e1f36","01000000ebefdd97bc7c0fc4218137ba9d4296c620daa2e892dac0b2ed31f30100000000e4adc80772b0eaed6eb0cb97434b06f0312ec1bd9b23d7b0c5bc440520e777ecbbec9749ffff001d1ea8164c","01000000d4d3b6441c86f349959fcf9b71789daaec8b6a412d80af57b96fb09e000000003b0f489acc5fc10bd8625219b8835d30a50286ff9173a78f767673f98f3744116aef9749ffff001d04a369c0","01000000cc526863a8ac888b9ea2d8274c87713565c66a7efa8ae477f3930b530000000087456f7ad123616433186e7464855d557bf8ef090da7768913830dfb647d327983f29749ffff001d195355ca","01000000bbaaf124fbccd5c3da170fda1e74cdf334a43a540450ccc07cd9cd1c000000001c415dbf2706f387d78b6e8ac467e107a8427a341900f89a7bd010db3ad081af79f59749ffff001d16edec86","0100000080bf386c0bb7e1184cbf4b95629b8307910e7e5fc1215c9da2f26ab40000000001435ffc45e7eb268b51a6e876e33ad8a8a7fd6858d483823298216b221164730cf69749ffff001d73be2801","01000000fd17b8a72bed87002d425afedb49640202943961b0eb3342a3f81e7200000000c1946acca5961cdd9335457207330dda3428dc71f0bafb84fa2d03cb32d56caa41f79749ffff001d1a91320b","01000000532b98b09ee4ca8bdb67d23e08757ea4e2e891b55513a8f8dc248db300000000db722be1b01c05e05cf324c68d76d952c1fd859e8bfcd591343efc6a4727cd1972fd9749ffff001d24b8d2b7","01000000b8be3c9347ad17ca66eff6587c73c87c71d5589966c891fed537b58d0000000073f64e44408b296a1541ee579bb554d24be679568b378c87f85af194b12289a31e029849ffff001d26e25f0e","010000001212817302c7538e81b6123d1a3b91b9fbe47ce5dd5c85fd868ee39200000000f509d031c46aeb566ec492a63089c06c381fd9debfc5520f4e6355e330a80244fe039849ffff001d7e845807","01000000866e598aac72e49ba580a0dabbcd42a34eadf0e47582aab2fc444fed000000001cf03a0823e3451c4d2561f6367b0b231cf2c82e4c0d29c11582b32f877267a2ea059849ffff001d19ac4e7b","01000000c0f34caae49cdae1cc0699f98143037c1669cfbf8e07f1d63a1accc20000000022a4e9988e84d41d842c783b1e8e1a9dbfd385057042ddcd9ff5e452e941bdd3c1079849ffff001dc8299802","01000000987b57188a9ba399e7c38d7182af8ba9175d0fbd81d6a13847c8fb60000000001beb2c5c3ec802330197d614619caa91611763491c51966313685a75ad658d9df6099849ffff001d299932e0","01000000cdfb93a76b6973a953af5e5f58329da5320f644c3bdd18636aac35b800000000ba56f95746f8d0d981d33d89ea85d92ccf4e8536281cb6f9b4b8d926a60172e0a90e9849ffff001d35841372","010000000088b515655e84ee4edf5199484e04a8916246eeaed3329739df12d600000000c92f41dc0004c0b3557569c9599a2212675ef33193bf8ff5292cf6751879e5ea20119849ffff001d33b40370","010000002ecd7d0e838ef7af2311fa969a657e7ba81039c0c819fc4b3390979c000000005bd0868418a126620d1b222635f0c87d8d985fcba7591d6bb8f8b8f8e7324d2bea149849ffff001d201a934f","0100000073fd76cd343a73cc39c0f386212b2ecd31c9524febb777994dd494710000000080a00dcba0a0e37af0244fb8eea648fe976c8088d0ce2a97616ad13f673e2b862f189849ffff001d09363f7b","0100000096329248c74d4c2d6eb26b7762d053d11b61cc535f408c5b057081f0000000002121d7b546f50b7ce6aee5ddec993c68d7995710e4be6809322dd0b4c37624cdf3199849ffff001d1412f3c6","01000000ee5e3d8962368e7151c7a1fbbc97b0df5b3f2e73c2d5166ef663b530000000004429741fd4842f2e8871f04ba0b0762b5703d352af12120164f3dfbc19aa0bdfee1c9849ffff001d02aeb80d","010000005febbe2c27b72b12783d18f2d1aa4b23ff09c82556cd065dffdb7fa900000000074d27f4ce2b315dca8be750b046dbc487ef5e47d661f2f0478882ce676a67924e1d9849ffff001d190cb0b6","01000000c072e8aac027158abefb518a7084d31f0806788c0e40e5056c4802a000000000fbf90f607e8d314c89ece9ecce86cab8b212bdd53b9d513200ec6eb9ed02dfd31f209849ffff001d8ee63d07","010000006b25db5c955fb1e1acee84474d3348b0745f642032379f99a296dd350000000010371bd98ead05c754272fe595cfd6d5e14e370c903fb989685bb3ccb1ff74c77d209849ffff001d2c214a46","010000002092948493fa237994cd20967f7a75a994520fb2707f27fdd4d4949f000000004e29df39a631ebacb75ec54d7f8f5485e70182f6961048fc497777fdcc46644bdb259849ffff001d1e4c06a8","0100000026389ccdadf212185ced16c7d2e4af1dbb6545e6d6578a70e627e45100000000faef241ceef3527997f0b0944a0444bdff3baffc5ddac629ae3a5714803e9b9367299849ffff001d057a3435","01000000642f18ca9c0bf5536907ec1da0e1f156580227e8dc952a09a1a66a8500000000c7e2ec14a6e0cced2620d4e6fb1383bbfc6a44d1678c4c8ab5882f372a0c1293212e9849ffff001d339376d0","010000006f37c4b4a192df16a4c40e90fed43eb11d0727d188077dcb3872ef0e000000002ec5ff344fbb1e33d40ff71a148e023dbfdcc9d6045c20f43637e9ec67e7c63c2d329849ffff001d2daa2aa9","01000000f49c2ea78a60c06cef9e6dd81d79068e93a96328246e9e09b95c3bfd00000000c5ed22a09b9f3ce870fdf4cdd03beec856323f353db6a951ef2fa23e32bb4f2066379849ffff001d3a87f2a7","010000003ec7ccbdcafbe254dabf1805aeaab257da591f658cf4003afb49f58900000000daddb673d8f8de63317e4648d60d1453c4ba54e9ffeb66ed4c5a0bba7976c326fc379849ffff001dea202402","010000003c6a200f6b1c822ba53197966656f527ff427e1f43a8f79ae6810a4000000000cd51d43cb10bb7336ea084021aa44ce9ec072b38197dd1583393395842bf5b87c93b9849ffff001d2adafed9","010000007c6aa87483eee731db292945c9e1439e3ce22b16ffd2c29183035006000000001deac03558e87147dee9bce2e02729004b71fac544db4ab4425d4b43b2b8c269a23e9849ffff001d261ae641","01000000ef49b411379aef48f604d74df53c5fc106b3e20fa532a30324f9488e0000000096f0bfa29b930e883a9fc5b166be5337abedd4fd30f0de39d9bfd5f3e8214fb167449849ffff001d235e0d50","0100000089a1532b8b877f9aa2a9797ff9034683b47f2589e891e277ff26d8cc00000000873436573ad916613caf781073d61df92b8e3646859e55f778bbdcb1b8ffc11f67459849ffff001d2d3acf03","01000000a94c45431ae7ad4888020ee14606738299c2c7cab4d2189fca4cf329000000004055edbfc5a3c85b25fca2170a012ed7776f8edd453eb787a90635d90da0930805469849ffff001db027a301","010000003c60eae96e11842bdcaf6a70254c84fed9226891d5d7737833890e3100000000976677d403fefe4e784e360dd0bf05b9732178f8f510fdf04319a4957cc14bb18c489849ffff001de9c51304","010000005aa4b02b43b4f3c9512e72842ad7ff75407fdca6fdbeace47618acac000000006d683ffbb9f4900634377df4356beff0262d68776fcb3b92121c48b8715edabaca499849ffff001d256bf2b1","010000004c17fa49de1914ef6060f310e18bb4d8fc6371b6bbe6630c39e13e6b00000000e666c2f3076bfc53878fe442fd3aa7bb551ef11990e39517fe5ad294c8813e98d24b9849ffff001d25a81e13","01000000ffa7fc37ab8c2c5a5f03c9417a7be9c06edcc663df1c63ca25f1257800000000933d730585e664fc1c036be97610c072248bdc18a6e7a0834d3da0f827346ce779509849ffff001d270301cd","01000000a63e1b3f3d0f747426c4d832adf03f30fbf422b6a83fd7c2a0eff15000000000890a11d64884ea1256a34f119de9815428a325809fc744473832e30a9fb00b2e01519849ffff001d1a28b300","010000007c0ffe0c159277c3fd08881f4b4d0521f26364618357fdb490689cef000000002098feec9c0b9858b0c4c1ac4b6f9dfd385276f7d58848f2fbf0980db93e014253529849ffff001d332780df","010000005ab3fcc8e38ff0616a3cb2595f693fafc6ec0e847eee722040937c9800000000ea113520aabb4ded1cca838dd2ccadf278a83229ae3a00a0badf7bae87a9d16b3c579849ffff001d03becaeb","01000000de32699c428caa569dfc381db29751ab822446daca9b569d8935ece60000000042f60327105fcd0d7f868dc904a5f9e6b405d9e4989dc88ef9630417de4aa089a65b9849ffff001d1d664d09","01000000b143e27866c616a87ba9f43e0e3e0d66b0540036eb720dd98c078079000000008c3dd378ce61cba43b5134488ca15de8f02b00f4d116dae662060654dd6ac428e6609849ffff001d230e7e0e","010000002623c711c1159a2b218bc9f734a6c7d2478eefdfec0228e008dae682000000006359a77934df18d9d43f3780314b200665ff5b2c5ca335bd5d516dedab3a7d5880629849ffff001df4e46a06","01000000a13a000f3de10e43ffc97028e7819fda5be1a6f8b120c1faca037a5900000000ae61b14ec31b4dcc0e991df745321ba966ed23efd95fa4a100c1d4ce3d36e160d5649849ffff001d39798fae","01000000c686bc0cca205bea4448d2478974eedd606aed8733c0f63a7db2163c000000009c5344215833c024a11f29fe53cccfc40db2d0d894cec1ce3cb8246d74762ee17c679849ffff001d31191148","01000000fab164770c24e8cbbbc24a927b35029cb5e8c59b62c8c4a87c8951a8000000008a9068dab9493091a7901f08d20592a250f82b624e666860f5f5e256f47d8179266a9849ffff001d18fcfaff","01000000fcb12a983da411f957b2b46d7c18339d9ee8c057d143bd384d02295b00000000f338de873b49cd67f662d232f3e701f612f49016f35301adc826e5436d8a274afc6d9849ffff001d1aae0fdd","01000000b19184bcabf052a9d2cd7009ab899fb1ad66583fd5c540a3df31530c0000000000b2b68c989652a58bb8ee56e45691a42db753e2e020dba86c88b000c0e31e2af1729849ffff001d74735404","01000000bd0afe6536cd9aa16694e2e60e7c4fd2c7d1820cf83964f9b23c71fc000000009164dc64434b0f98b4b494f0640c0e5fcf0842ccd3dc3ca7540f922bb853057603739849ffff001d1b189c86","01000000d26daa3a442da31ec5e1af1c7f85c5fc9db9eacd11874f2a886edcbb0000000018d6b691222fbd804e54917ee9d540085f6f230f98905e4ec478b31fee51c34f6e789849ffff001d28f44ffc","0100000016100457fe073dcef576372d0b0b77674678d9b40870966675059be000000000ce5041f5510b81772f9b33f4ae2584d900bc6c585b1d9ff38ba40ef133990de00f7e9849ffff001d021806d0","0100000054ae3c84f250a090bbaa21c38c256f11217b47214068e162fab42dd8000000004d93ae78a9d3d0208f8d196080fb28a786f6bbec205a2d215d6e2aadb75f9423ac7f9849ffff001d016f4b79","010000009e0a3c0a2200002f41891e593efcd3b7ef8168cac1cc2c38c2cd29d10000000089a79f978655ca3c62ee89b4779eb0db3a347a51a70a46f459bbd941d96ab3d215839849ffff001d1ce31391","010000005708c7e882e1f0ff8e0cdb5d69bafbcd88ee75c9fc2cd6d0c2f414e7000000004f5bd484579d07b324709bbec56be3dffb77e34f04d8930d069be3c786d872bfd9869849ffff001d91967511","01000000292a55447baebd74d6059557f7ab448f2b5385554114b4eb7de2440f00000000bc3d3079bba39e202fcf4f752a053aca195050ae2d327593122af26176546d7a25899849ffff001d2987d6f7","01000000a068a9f8a51b94d6e7e84b976bf88d46655fb717a2303a3801f1400d000000000f667f557a4e0308ed80fc386cc7a7e71ca71a470ca576d115d4897f97acf80d1a8c9849ffff001d684c4908","01000000aab604ae7dbae24808b6374a19adb8508ca83d02c4403083a0a7f5330000000053a55f7daf06cb9bd2a8fc2cffe9f6483eafef16bed2749501e27a0bec5b18cedb8c9849ffff001d211a1df1","01000000e57d94943c4b800ce570206ec3adea213a7f8afd32b7078af1f7e58c00000000e8905c08fbb5273c9cf233f21e57a2ca638ec477f2df0985a536174e0190b558838f9849ffff001d26bc3e03","01000000ebdb0f5333a6022ee3aea6e41bd9d517bdc76c852516d4adec677e5b00000000ab587ce8b2d8caf71f33fab74e9983f068d7d91244ba547fa120fca3b0c199194b949849ffff001df99ed50b","010000001a9b6a9c945d6886e91e74e8ae24ce23ee9cc642fd1b6e736cb759da00000000f3ad3dd43f6cfa0cbf07bff94f5b6a16d5bd97b20f52198aac0d174136aa7ea88f959849ffff001d04eddf37","0100000059235500a36c3974224056eeda041cc534a2c38b06906e3ca53b49ba000000000d1b0405d034a53e7f07e8ba063b22e4e3d515bc7abd75bd61f846d3e7f883e6c5999849ffff001d14eb3aca","010000006523e06da0415a0da8362475e5c253a60485195efae076b83a80bcd500000000adba409d0070d55ba2eb4f69a2ee040ca0008106230c7cf3a2e92a31e1e912c22d9b9849ffff001d0ae86703","01000000c367cf758e8f2b3148803d9c581ad61bdfb4a58f7a3c7a7950065b2900000000adfe2895ee7a6037c5503ee24db5423b2c1aa723feec40dbb1fd40945f2b850b3f9c9849ffff001d96c39a03","01000000df073c4c48fdc65f5723c181d483ada089171a0381e40f85704775ca00000000807bccd3b9bfc71977cc6ee00a98cc35f3aac5e75b4ac3ae77ecf9e66669c7eb059e9849ffff001d39d4fccf","01000000b2e5caa9c513652a476251a63d8342f6d6b4cb77368d318e791de00000000000bb2bfb0fc2ccf74517611f018857d03f7d58c770c361c4054fcf3664ce398022559f9849ffff001d086d5597","010000009c54fe86faf5611a78724074fc20688cef8c10849e9a25924c7eeed60000000095a6609dbd768e9f5387f1e6e9a9c9a0bed143c93a22ae28c37a2d344c45b8381da09849ffff001d33eac402","01000000c951282a94dc20d203a370777a5242bd96003f5590317df521e008ad000000007b1dc5614f1f76e1731b1fc276a4066aed1943e46dd4d74f290a0d0abeb345e64aa09849ffff001d62145000","01000000b3dca583042bbab0f0ef14529825958c1e4ed2d371b62bde900e124800000000f6d6c2142f8680fc00eecf88345f9c7a41846722fc16392f57f229270622582899a19849ffff001d36412fe4","01000000f5dd675dc73d3f2c9a054a3cccbf651eeb59b08fdec9f448775dccbe00000000b03078705ead5977863e33ff260ce68f25af62401574b656b3a537ee861e1bfa2ca29849ffff001deb9d1602","010000008c125e4c1a846c7ec110de896328d9298a941d7a67d894001a722bb700000000e5f338d812c6b5473a91642dead1e2bfeb257c47bcaee768f70f6cbe30d3888752a39849ffff001d4e054702","0100000061b68fc915d2b95a8aca79ce4035e1338ef029218e69d3cc8cc062e400000000845c73ef38a4ea105fc741b238fc008272b06fc3fc3fbdfa7fc209504fc227ba50a49849ffff001d1e945d03","0100000047de48ec316967fa02846584905feac04274ff5f6b479d283b016f190000000020df5bc0edd6b379c5d028ecb83d65e046a94f904ec4639034a6d04b196688f665a69849ffff001d35bed612","01000000c581d856abcc582a471086b80d8a71da68f761176c57456eb40b4b9200000000fc6a8e689bcc48ce0d0951b2343ceaba4b754d54013136e00394b0d491355febc5ab9849ffff001d29640b42","01000000d13511f679f4577eab00529c1af83da8bf5842a7932c7ec5b6c80a470000000041832af695ad72f80344984382f06e4335d17077bc551943b243dd4e3aa61d098cae9849ffff001d6f20f006","01000000a96ab402d1cdde3111c39ffdf20f9cfb44f11f5784a316e32912c1210000000064968902cfe30c4424d48a2ff0e62de313742c73c9c7911495e88d879b9ff8ddd4b09849ffff001d1fc71c74","0100000089a30619680c95cebadba6178980266c0fa39f337ff62557d23f1db0000000006881199c74f19e76e1ed17eb6f9cbff224c34c0062ff64361320769bf43bd4f38ab49849ffff001d27eed35a","0100000030b05129f92a01076243c0b59df958e345742d1b62ab38b6325125aa00000000a94aed7f815ff4007e5838a977196bea108fae3048b768f724b7263054b268db49b59849ffff001da645ec02","01000000101cec551094b8156f7ff27e7679606a27cba9231332b2f5977e94e800000000452d4afc4a06e9d38dd46a8ac852b83c4635b53a7c7ef3b17d2b774c710274527db89849ffff001d03586e13","010000009fb7c147ec72774098d918673c053949a4cba0cdea211051f7f406ad000000004b5cfc30142ea2f160c36aab43302eadee17c26dede55ee62756ea0dcda4586861ba9849ffff001d2320c5ee","010000000764ca21c3bb87eef80b02fb787294459c8677a2c95a2939e2f13be30000000022c818cb49e707a5c5bc3f5c70ef35db48522c6009c0d5005966b2ddadf405a7c5c09849ffff001d278283e0","01000000c712296a7e37699912778c6a8731f753149f048311326704ddb37a50000000008c7244188ae5c265c4d053db6aa62a23df6b416a3f405007ef2c860fe85f99751cc29849ffff001d2da7fe2c","01000000a7e58a625bf5c06c486385bfe9aa0d7eee737b15ae148f817e1dc4dc00000000480268760173dc4e2b071a03f5748908ee839bd9504773638a7bf0ec8797d444edc49849ffff001d163cc66d","010000006482149e241680b3115e58368d45bf79e3332b70cbddaa064dff731500000000eb71f5faa7cf8367d7040a0e380151b88ace23ac58a9ee7f131890ed6465dcb601c79849ffff001d306ee1b0","0100000089b2135dbaeb7defdb6a5ee43d21375de8f3d805e3a14ae6773578b6000000008dedf7e7b7a95058bab0b2fed51044f649072ce2cc66e1a145b2adef2a4bdefa34cc9849ffff001d138cfd00","0100000032d1294fe5548e3446b43c6eb3fe70bdb2e9e183daa63019d6e3bcb6000000007bdcebde69e9ca12732d865d725f05a00d9a3b3dbaf8edc95e7ce8bcea16a56fafd09849ffff001d327c403c","01000000eef21fb2ae463f6691048db86db77385f6705c6d0695fafaa340916b000000009cf441bc4103bb5919bb999943ca0d1c07b5998f20f101df02433c1282d513dd73d59849ffff001d213826c2","01000000b10d7023c95fbf17344f10f1bd4ca6f6a1986dba852a4af2cc60fc8800000000f924e68fb9f5271c5e72359b9b2bda932a080b2516dd3917a0a57fef9695f65b58d99849ffff001df2058e10","010000004630a14395605a43811015c0dab5efcfa836fbae10e56d30e4544a0a00000000d4c02392694f2278976170e7190245f71c1316847e3d1161750afdda85c8561f8dd99849ffff001d1bc1078c","01000000adff2b8cf3d862eb45526aa6f066873d3ea99158db7f3b5c76ea18ff00000000870b16cdbe174e01033bed50cacb1e43c8bac6178d5fad62575ba7e507c7aa6241dc9849ffff001d077c4165","01000000ff8e762658255d2e8b3448a2eef964ee469db8c1c39876b4d0cf4c1000000000a8205070e9201a6a3df516985149bc0f11ea4ff716bf4e9d1f6f64769b5180c882de9849ffff001d14d26e73","010000006d74bc8f7161ecc82b81bdcef70b63386e84b5f85b572b64c35daa6f00000000e81ba5dc1fce6723721019363ff009651ba97841ce239ca43213981bde6320ad44e09849ffff001d1b864bab","010000002c3a6d7778d509d408e0529a425710ffec5e31d67440c75795d20cba000000002797f7b98f0e7a4fa193af83720daf06f41a82aa6bdb8b9dd4c661de302e8fc93de39849ffff001d3073fe58","010000000495e7178ad741138d7640adeb727e68b5086ddb52e144805c26822d0000000021acd34e1899c9caf9034c2f4af4dede8e69b746effd0ab5be43e2c7afba5c27d5e69849ffff001d1934a7f1","0100000096e2a25652c93d4e70bcb8ee1493f68846c6ca2ce5818749f38d9c51000000007ae4511a37e126f45f758d5a40850b096abda5893b115b3820fa29e83d10c1859ae99849ffff001d266dc20a","010000002ab565ca25bd9466e20c913616a0de49167b8f6baeb03aa91f6fe08b00000000104e7a813c5b61c59bbb6e2c1710bd455abb76bc281de84456fc86c5c9c4cfef7eeb9849ffff001d18c18dd0","010000001a8124c7c18f4addf54ff5c9ca48787412e1914ac3691e21fa08c2dd00000000c21b73449852a0bb001ee0473fdb168ece586b34cec5cfcf328322369d769a09b5ee9849ffff001d18bbf404","0100000056975d1c228f302820eef58bc0b29d34324f285ece8d188c52b81099000000001ef50e44fc46769f967d667ca16143d11f437dcf8dbaac232861c480bc397f2c19ef9849ffff001d6bffc800","01000000ebf7c537a322e798576ce15fa4771286293fea5bb2d08b7f901875cc0000000015bda5d50041bf5adc7a5142320bd06609bccdd8ee0295bcf86db63722d9566960f09849ffff001d91595706","0100000038d4a0a7b697da7f3a36fd52032c12fc1508be0464730fd74f1be956000000002c31ffe8587457a6fa22ef56321289835fb0258579b6c705f1a5b4549f49aafdc6f09849ffff001d33478301","0100000054a2bcbbe498f30f39df301ed7f2276d4cab32b31dabfb0fd007c8e50000000050aff1d8d78b6f5ab71239c7125e035b1bcacd34fd4e80c92f9758b97ff1d8f4bff19849ffff001d09584171","010000004b8a983ebcde85502f21ecbbcf903ad8ef967887d8aaaf68d5dd09b300000000d6b56711179ee6f5007ebaf48763fbf3174d4a03160079fe5305fe5d7898c8fe3ff79849ffff001dd6d4ba1a","010000007fb038615200a95ee0a64b63bdfe3a8a560536947cf08ff31b977a3f00000000400176c25b78ce4ecb6ba25e60746a030a6de17a98488256da1daa3e770c8cc08ff79849ffff001d05e4913b","01000000fb914ee7531c977f109da26d1f3091fde2fee5bffafb325d4cbfebad00000000452281b97a649d34372e4e7db7127fccbb3635935c9856c7ef6b5f499cc0aa7854f99849ffff001d1eb0ee07","010000005aa512b9b1cf2b8ee883ce2da9afe2e7b6cf4b79a7df82fa580cf7650000000045e1c1668520cc09a6cd22ae026b4981f0ad7f883e4722c98f15f754aa681dc9b8fa9849ffff001d245ddf50","01000000cdc775f5723d4b5844f54274285da90ac4296866e47d64b3a58546ce000000008338ad6db81aba4902c7de47bee2dec2276272d33ed7c8bc3f002e28f5675adc29fd9849ffff001d1a01f55f","010000002c64c019687eeed8083335b00fd54b88982db946ee398f9ae8624f6e0000000065257928bab42721da14f7a63a950eb33ec3334de7d8f98a4542214ef39b52ce56019949ffff001d02298d53","010000007aafdf5d17f12511b934e1451a27ea68310e44384c30df815541a003000000007084675b4bb00754aa64088311e57ed26ee3da37e8866d17d248c1a4374c805302069949ffff001d2990d453","010000000db06a212d9d3d6364c14939fc2dd44cb3dfdd5804950797e1304b7800000000638a0eb57ed0d4451707a96e10098cbcae1065a9f7948a03618d3e0f803b9f50f60a9949ffff001d39ae9aee","0100000024de86ffcefba26d0b9f443d461d63eca21581c651ca5ba0c609ed4f0000000000ad9e8c220330c29d0896f52111ee4a60a9fa9b95c6e6bf9b8225e58577572b740d9949ffff001d1b2124b0","010000000eb10c8a15fd09c9b0bd186994b3de13c4115f53c07e61fad637cb61000000006c15040ba93e9232297ce6b19ac1111ca2d1399e17ae24fbbe8b78938623c686d50d9949ffff001dcb3bb500","010000003a9c6d62c66b8c70a91b7eee69898b32ad14a7a66f95b7ea36d94c2d00000000133f764165c14beb5b285c53d18fb5e2ba81ec3962a3b39f976ea207fb8d59fcab109949ffff001d3db25f0b","010000004471c0544539c6c245b36a7527b2b41cb97cf58180555b12ab60d9af00000000dc70968d3131bf541790e556656a8786c9bb011496d00bcfc6492d5f7aa0b1a587139949ffff001d34e32cf6","0100000082d1de3ad475d1e2f3fcf6dc66b443a2a9bf18745b92cd747888d509000000001965ad96b0c28b9527b11eac740068d8901f00eada7e813ae93904ca2edfab62d8179949ffff001d91802014","01000000e92ed5ad589c1c6fec82e4dda540cf6d718b94b7bca1f6997119901500000000af7ad523e85922f727dde750aac52982ac8314ff3752e03e00131378edabcbd6da189949ffff001d18689c93","01000000449d89f0d0291f7670ad26ccc8714ce9edaefd2d233c7dc289a2c54a00000000a1a056d9ef36bc049e3e37ae2381c0ccf2c56fd86c9aafdda82939a808a006539e1a9949ffff001d395c092f","010000004aa21b26c0a764e54055a01844de984118f47b10ebb66f4d9540ceb9000000005409bf777ef497177a5783f688fb0568bc2b18502ffc8c1b2082f47d5e7d0322061d9949ffff001d21915c61","01000000c9d9c579f382b68d0555f105604ca0b5c18ba0e474ad21670d5bed5c0000000092d6c8dbb2620d08cd90aac9a5e2a39b59c113ff33baf9045e2362a1baab5901f6209949ffff001d2951ac2b","010000005e5d26d6d072637e1f3d3a16cf2e7b6a16841b60c104012cd199e38900000000f1a2ba3422291afecc6688ebfdcf4627e3f6da7b93cdcfd43da1273a27023c61ef269949ffff001d0179d83b","01000000bed1db116427d3b3f3f81d56b0390d4fbae34de78480420543e53c2d0000000045113e576d3173a77bca6b60847f8f3ac2ec42f53efd6f281a74ad9246237e7873299949ffff001d27c1a328","010000007d80fc06d5bd2a8d38c728f728a9fa19a4e61b9e98e0ea1bd96434a6000000000b26537a951a21042c53a7ed2c352a6514eeea9dd7c036be326a056ccd3c39d72f2b9949ffff001d253016ff","01000000f07a17e7f827acb751bcc2d2a538dd7ec5aaa122a63a14dfb0fe405a00000000c749a406fc8ca4f517af3bb90c11948316d93a4412413077efb5168c937f9c9eff2e9949ffff001d15843d68","01000000408d408cd8e0b880940c9d2ee6d322c99b29e223ea8c98fdf275dd1f0000000034ad6b7157161069d11ac9d02b88826d6146db30c858ef9bd6fb8be5f6e5da28b8339949ffff001d2029fa42","01000000423c8bafe5e533d80030ce7ba1281196472002f2ca12f659f03ca2d900000000f1c7e300de62cea57b2b352341be96b5b66234e4cb2bb40b5b53fed32eec859b93349949ffff001d25f52703","010000003a4a9a2dd536f5552605c5cac63491dbb7e2f157267e535143f5c954000000006cf91d52e95b58d391379f09403a7302676fbcea78f061bf5d76d0b6c9642e2e1a359949ffff001d17ce7d02","01000000b6406acd23528234ffbde4c32f69741122de8e29c87c243bca9295cf0000000053629ee138e2ae11c40d5ff10c9609a61d3f4a59c4868f39ac890df8752bfe5f01369949ffff001d260d9283","010000008ca21f0b9f0234e9ae262dd94f19408382bfce46339b005884434ec9000000006b90ff9c070aecb537fc55db105575ba105634a640b7340a4c2ca65936ece235f93b9949ffff001d38218540","01000000760127ec113ab7e551f3d2191e9fb036a5d36876edfdde3bd4b2357c0000000068886318e7edc2b3bb06c0a9d14c691f855f006e5021e6586a52d5ef18e268624e3d9949ffff001d4697b805","0100000066df5e4dbbebf7978bd2c6f2f189e395e549ba84cf28d133486dc450000000005fc211ccf9f426d906021b96af1b40a615d304ee26a76e2d5a148cea764b9d1723409949ffff001d31f33573","0100000018f7dc213d60bae2ea107b747adc54970e4fae8bf048428e94645a01000000001d54fb3cadc1bf975e037c6989f7778af8e2cf290ba4a540c465f12483d966ae0d429949ffff001daf2e1308","01000000b497fba78cd0ec06bee8cb754660c7cfb76739db426d36a1c413aedb000000000660a8e8f032a8cdcdbaefe14b3521799d12da6cd8a2cd3bc4fb09e966cbfb8285429949ffff001d03a18a9b","0100000035c91d4c11d4f2e4b7bedb91444d0ed7cf965b6087d8eff3cbbc6cd100000000596ae347597d0496d51255d8cdf11211cec3b8c5fd5fdf4b124d506256febbf88b489949ffff001d097a0a30","010000005076b87b50b04bfef4054f425641eb58a969accf1c006f2101ee53d200000000f90106a553933f7a010124c36076a65104969b00ce3041ab627a6cb5d8fe0e2fc74c9949ffff001d3558998b","0100000098753ae4ce73a121c967224b6fcddd474fbdea42453db27d407eca3800000000d34d87e4aa2603cc98c94ee0650201e5ec715113f93d9c2f6868819fb6a3d8877a529949ffff001d27c89290","010000009258ac8a7eb329b89887b8c8b2eaadc01450810c3d3a9c2c653d1a89000000002442fcb2d00e08dc48e0297cbc8f72983d11c202e49653272156016e86baaaa5a7559949ffff001d04e560ba","01000000c7a8821052f107de29626475d5894778d7e36db81a194bfaa1bff21a0000000046096972e133fde97dd0d210b3441df6270fcf6b7ce05937cfcf0594ec8ead1637579949ffff001d26bf1b74","01000000028e9ad3c96e209896e57d88b7d3b566ea876293dc6018825d15c11a00000000ce929cda5cb83563750464e8ec47f3d256f013cac6b38c447a1f134b8e7ac4a81d589949ffff001d37722b04","010000000a70e5d7639a0ed71eafe25dc3c071b25a2314c362ce42c4af60454400000000925876378f5d7f175ced9f73fc75efad09cfa8e98c3dc0953de456c3d9aaac67805b9949ffff001d3963a446","0100000033b16df8e6d90409a7fd7a96f485a74002ef0eb4e056b17356efbaa2000000002bd5853f866254edf676021789951f85da019b187b9e1d2ccf31221ba4bd5fb01b5f9949ffff001d284ec8d9","01000000a6f159dfb20784e31b9f4c6ad125a2a972a359f26fcbe189e34733020000000017192fa57074535e9b0cf1424a2c593a2664dc06dfde21c275392f6857506e0ab6649949ffff001d3168c545","010000005f352c59ad1a779b59ab8d314ac8e51259ca00ead3c11f2b625ef42c000000002d1225132b7cf061b11d16e4b3a04cddcf8548031305a884fdf36a056bdefa5311669949ffff001d02720fe6","01000000ee3e9342d4f13ac016a00a6f0cec0481c6bd414fc848a13b72917d0b00000000d6371163d4779c42682a7cf5a8614a8eaaca36f293a7fed3b98a621a6b909561b2689949ffff001d6c82730c","010000001114bc72db589d96f0039b8a0a768cae8e65ad4552d5789ad3a6764a00000000f7aaa3b20d54f2ad2908bee9218f7e767c9c2528acee1a99f9e8bc5f301e2d9ddd689949ffff001d7984cd00","010000002af071953f680d9a31dd5f9c7757c68a0b4a86bba230b0644290360900000000e8f08477849a30c4727f7ed1c37a9a094e362698e9cddc862495f2589a45b1949f6b9949ffff001d16560835","01000000aecd7363b8957d5fc4e8ac0e7fda264127d194d351f11c79ea10da6b000000001965caaba6cd974493da1caf61a762a65b414125a5ae828601fa0231bf60f937fb6e9949ffff001d075281e8","01000000e5f04313f0fad2f48a114a599bf5290372ee25b2b4245a55d13d97e50000000054dc40ac33b244a9ddac03b02dbcddcb815970ea31991bf5ba018ba8d61a115f1a749949ffff001d15991570","01000000c1383bf9046868dca336a60d63d4e3d604023ba962b03a56688adce4000000002b26978eac5bde474223e831e9ee3a057d2e79ebea2fae37a3b2329c1d7c64cc09769949ffff001d1edd5bff","010000000c058040f93e12519e8306a84461324ea417aee635a3d283d605bbd300000000d79fca123a89fca83bfb9c84f7d49a94f5d8f43ccddcf2295d14dfa3af469757a8789949ffff001d33a2c42e","010000007b2170d2d8627201da9dce8d2cbad3f66b81d5fca4fdf8dd9c92573a000000003b766f04c8c22ed141878355d50d71ae53e477e1506acb05681a58367c9779ae887b9949ffff001d2c5d4131","01000000ed64e81736779a8527b781c72387081ebe53f28c9b9fc58bf3227b3f00000000019500b110485f3443bbe95e80dd47c1d6e3378ba4ad64fcbdf2d540c0fae538767e9949ffff001df96d3c07","01000000404cea97980bc6f99dcd06b03b1e5f4a655e392760b3f684d9f708ac0000000055e525c7ba854abca78ff0cadd59ba06685010cfc9fe6c8d109581105c9c09a9e17e9949ffff001d274bacbd","01000000ab5fc6824295bfbe5ef8992d70191759820d8dec4c3a4229c20da1a3000000001240e78c7df068cdb3d1e147d03a5aafede484e1a2570c00777e74368b61c6ab187f9949ffff001d52e17600","01000000e753d6ea4082b1cd6aa39cc635810d8405f16b1453d97c4f784a2f2c0000000063cca1180e21aaf205e13351ad9bfd920b30a6b0a1771e00e972ff70b3c77fc906819949ffff001d27fe3ac0","0100000048c60c5eaea1526c627b7df56be10682e2520a90bb4112678d4f6c230000000072cfb1fffac4cc1852b69990279ef5607fd89189e7b05e1fd1a4cb3a2315ec7a48869949ffff001d1a6c3ab1","010000005da48fd8009e1b639a8540053cc6f365e17d2ec9415ffe5a5393302600000000448f47c53556ec1628dff81656377e84e6d1d8ab32da668ed8b80d6bc173f2fa148a9949ffff001d3753c665","010000000d4b38ea80b01e40dfc0536f0a6207b8546d63bf55c922def88eb45700000000c492006a665f19daedebaba27751125801cf2720942d71621d0c83a2471c0c8ab78f9949ffff001d089c4a1c","01000000568b916af731c3147084fd93882d0c2c28aa985beb3826466fb70f5c000000008d48c16eb54034cfe2c816a14cffe6568d0f2e249d7efc652b663c7bfcfa458285919949ffff001d36e5e9d1","010000003d4c9d8c890a91af4551d6ebe1e36b7790eac0e8f6ade0d283564746000000000ebf0aa7ec281215a698d71419f4a95778ad1f4dc07433332e0e70c3f6dd605a60959949ffff001d239da3a2","0100000063c3e7ef4df6b6e09f1d78e50c49f996430c3d5a217b48a8d1836911000000002d52fa7813eb8e78053f80aa419e1167793169893c5780c5e33a84fa9cd544a2019a9949ffff001d2aaad79b","01000000e7819632bb1bc8a6e0945c13bae81853c5ae5491fb040671416f625e000000005e39d4a7152307f7be9312cded6c8511e8c45a5244a37c7d45f8cd9252ab626c849d9949ffff001d05d140db","0100000011fa651d9433353895e30ec3845948e04eb98562e24c2265926dffcc00000000f00c4af80b52cad75982bc35d5ef7c71502e1908e1a6e9454be21309e8a44a8c37a39949ffff001d30d84535","0100000059d56301a78d04b339811208bd3e5fb2f78cb3fcd6b27fb89d23b27a00000000ff4b2d65cb44636235de6e231e0a125539440666a9ad27744dfb1d31a83145ae6da89949ffff001d52b87e19","01000000b6d3fda0178385dc542d934135c37cd958903c7f2624b72982a56512000000007e886dcefeb96e0b3157842f02004d57d20e5bbe8911832b817b1a7bfb8838afeca89949ffff001d2b6a8116","010000006da71a25119f261af41461b47545763cc2900c82c550c7790797872500000000b987002a558f4b563fd48ce858fa3abde4ddaacd4b8624c5486824e2d9b088e37aaa9949ffff001dd2494d07","01000000520a8801b33db00f979c530eb5d2977c611bc043d705d64ddae38c6c000000007945ef5a3b29905b3b877b057775ec215c60e8449687e2cb83fa09f5dc99a28799aa9949ffff001d19ceafa2","01000000b9965b8352ec3c50f8889f5b294fd31374767c6cac9b94e3e5361e380000000075a0a006b1249e7dca4bbee5049904929f950f036bd4573a0341cb858c18193d5ead9949ffff001d28aa994d","0100000049107c37b13e5078dae6a3870d1b553004e22fe8559fc44bb8df71a200000000f7a3f9e4ed1eab68d1011a0a285fbe99290c7bd220cbd13c1c47f3a403e61d26f4af9949ffff001d2b817417","010000005889714042b7d27b4001ebcc53476584d680d66ecf4063c0016d7a5300000000b6bf7c570033cb54337fa6ab246b103c962f477fed1513887db2934a215c6ddbf6b39949ffff001d16ba9fc0","01000000c553b8d6dba6ccf94cd6e12beae5e42a479abb524e1858107e0598aa000000008bc2ccb1f5b0004f91a7ed41a4cd38870926e318f982895d2e2bffc79e8dfbaf1eb79949ffff001d2e28c0fe","010000001416cd1e5b049d3e4b3ec4e9c53ec91efacbc643d4626b019bc557280000000092251d7a733a2abdae53ac2df94e7e763a81f6c0c9ddd876e2e13b651027e86339bc9949ffff001d20f5a8e6","01000000381fbbfb4a09909ad97106a5f0185996f304b16376eaa8d32af4f6ba000000007b47894cabb2e2a2a82bd11712cefd8502fcfdb78ca259611a4e8683760b906928be9949ffff001d08565b46","01000000cb8d31a966c52126a0b2e557fbc5e0512bd0618735ebf31f8275cab700000000821973b3d1c8f07d8175f1a49de1ba5de5b4e6c5ef37fefb4c2830071d0c0ce9dac09949ffff001da4fb160d","01000000fc33ee9c05b22d1a2880f4d60290aaeb7a9f10080cd97435cb1bf7ec0000000070b2a411bd565a51fb7ee7619314f917853e225a77eede2b31135c85ad0fa0c1acc19949ffff001d1072bd01","01000000007ae90ef47191da5f22a8054de22fd4ee97a3120f33250a3d2df148000000004676bb5ae9c1da27ced011be48ca4884568eda76a5419959c8d9621d0b92328ed4c29949ffff001d019b587f","010000009b030e6d788a09ec292bc0914f178f2852d3606d332d7908a6733eba0000000072e966e5d138135d53de61b4d9a61f32c10ed695d205bf27084f33fb1d1f169bacc59949ffff001d094d8f9d","01000000753c9ca75fdb2ea92f1f6eac98fe44f55a78519c67927a337ff2c0b100000000a01850b96dd2a6d1a11007fa6165baefed6d7165942e983ef2eabe4b73666f7728ce9949ffff001da2415a12","010000009418fbe87c30e0ab871a51278ebb4316da58d55a69048fbe88fa4be20000000076082f1b7df1be02a952a036bfe8370bf1f07ba1e4a05b2429410cab76e5dd308bcf9949ffff001d29ece841","010000007847cb4deb243354c16314bedd82cf45d22cd8ecc8ff136b40ee47bc00000000a160ab9da52fb5a41c75f6426db4c887ca7c21f6f26cc6b8e810d03d7cfd032991d19949ffff001d15eedf3b","0100000078c5a7711917b8a0996fb5aeff872db17a353bb40f994f54e4e86f1800000000cd23a7f5c24f3d0663769e24caa858e6efbaf3cf18a7e62d63c902e044ccb80830d59949ffff001d17c0b814","010000000e79b0ca6bc8552babc562ace61997f000c225312ba28d66eadd590d0000000099c8811ea3d8af2cefbaccc981f19c7479b725d617e5d13bb00fcd980b427365cfd69949ffff001d21230e52","01000000144c438ed0d5b4e613b31c65423feb8c48dc093b773691e040c95585000000009d8ebbf0acb177ecdda7371e0fb20bc311d966c4f8497b9415f8046cd906ea6658d89949ffff001d297107d1","01000000051a39c434f299531ff5128bb590369a60180d5e13fc5aea4eefd5fc000000008d44fc0697864496b99a8987e8fdfcde77b0190d8ccaabab99d99f076dd664bad1d99949ffff001d16b6cd30","0100000025fdc63226a0645303b4b2aa172ad2e59fbb635de3b4a2d38e69300e0000000025980f9fb99e0bf5fe4c627dba003a5a7206c1d4c1c531ab283f3a3a03f638c842dc9949ffff001d335bec23","01000000904951fef8c273f7b594171a084d51dc0dd20dc5346c92ece2c172ed0000000005ea02235c79633f91c53ef9f84019d16932298ab2ef5270c390cfd304f6322b67de9949ffff001d1755fec5","0100000021a06106f13b4f0112a63e77fae3a48ffe10716ff3cdfb35371032990000000015327dc99375fc1fdc02e15394369daa6e23ad4dc27e7c1c4af21606add5b068dadf9949ffff001dda844400","01000000c4f58ebbc902596cf39bb3276fa0a1e54cda314ecdb3eab071f1d454000000004f7b2cc6301d13ed9070b7a06975ba645ac3b23701819e24cb755d4ef38c15219be39949ffff001d17610cce","01000000ca92310ea5763bfd15fb5a438a88ec68d20baead58288f658203196700000000524c8831fd608fbad088623d446f4ebfbe1e706ca5b1d67ca537980839c4ad5248e99949ffff001d03d08d50","01000000628dce63d1d312f2ab5a2815a1b0106e65c457a28c2eb1df15da433c000000000656ad016612787937336273d9a2f649601def7b1178e6eb561d4a79a77e158e6cee9949ffff001dbf711913","01000000fbb669fa5b5bd88307b842568617908e81dc2ee4c914e7607a3dcdfd00000000313402d9028cae4e81ce1f9ee7f97fe2a1595485977974caa242c5d38c2d1f9bf4ee9949ffff001d171d764e","0100000052df1ff74876f2de37db341e12f932768f2a18dcc09dd024a1e676aa00000000cc07817ab589551d698ba7eb2a6efd6670d6951792ad52e2bd5832bf2f4930ecb5f19949ffff001d4045c601","01000000235246c075854c708bda643683e129bae766705f51a132d737f2ab89000000004c0b151a83df1ad1bdf65ccd251396cf83eac77dd67a14dd76f5d5abb78a98be46f59949ffff001d325075be","01000000eae9f131aa98ca0fb5fd4b35396eb97e4c6dcb9906b6118fe9b3701b000000006eab9803db76e30125b7e12e23c7bbcdce4a7adc3586804bcdd402f23e65863201f79949ffff001d2cbfe8be","0100000035c7d4ad4108b45c17ec0147591aa88d9949ef98ba02f256f181298e00000000191020d2e1d45876a8e534ed05150650e2a77b03291ba4fd93c4f9d7dcaf0c958cf79949ffff001d013f8001","01000000522c78b84a4872cbf232db2bccf63d0e624093c7b015ea5a8dc62447000000006110beef030dbce10f5b524833da1e37340bb511fe7184e367e5c2049e0de70b6df99949ffff001d16c372a0","0100000068a055c50b17fe4f2bb6b48501f405aafcd76154900200e7c0f2b89000000000c46eb01e28a026cee14b05a18aec5e29164cb6e3c4cf7b9574195993e2cd3e4e5efb9949ffff001d22803d04","01000000cfdcf012411c14634abcc9e1e6cbb235e81f6962d358a55453b4adf5000000005c20f0d363cb0ff2bfbda8695f6cf81d691e7d693fd940b0ad95be7457383dd658fd9949ffff001d23632f68","01000000a0ffe355f2404df3f5cef54879b9f17f9a74dce8defcd902a0ec112a000000007d17d3d57feb9b7348f59e0a1b1f3a43a03156e485e6a7b138bb24019c360d9abbfe9949ffff001dd5ec3a05","01000000cd562438188f44c16bc4dcfb577b7fb41b1b39043e76a298f5c88e7700000000f1eb9899d8f3d1e7c24f0579047a5ec3ba07e0bcf2a7de34bb3f53e04ac3feb1fb029a49ffff001d30ad728c","010000008b8046934fb418eb002aa1edfbb9eac3adabfa47b978e59eeea416f700000000908646f56d99bbb38dd27c1e35cab7f67746ef466b5390ebd790b73df166db4cac039a49ffff001dd6fddc03","0100000068a91d4d328e5b1d31660bc724e257d2975b2b15b202beb5893a874c00000000c64674efff5adc0a45d23a1ca61349bcce18639e37c0c6fbb376a37344c914054d089a49ffff001d3315c88a","0100000030cd0c1d1a60245976bad4ab1cafbfd3298145e442c78f15477819ee0000000095f11369c10492512a1e3a9b3e69b293b77202d4caef0bd42f5e73dff045e619b40c9a49ffff001d240eebbd","01000000467b0268a012746a95a6603e97897ec0ac888618bc3c929c1b36bd5100000000df537219779054a6c3b160972fd8f0924a3b053ff20423a50786e4a12592433a2e119a49ffff001d38f67b1b","01000000ca411a14f1ae01f5585f412fbe45a3547a851f909fe9fa6728836f8d00000000120a5e409a63b8c22abe60e418e2bbc7b8935b37a730391982bd319cf7764f00ff119a49ffff001ddbbc1e01","010000005e6983e5487ba3f2bcb7a8fc3f5010f585800f9d7114be5799000525000000001831b8c23b22c8da4ef6c319f84302e8af7c735cda2c0b473b080ea3dd26bf7e9e149a49ffff001d32faa960","010000009bb46b4cf16f8250e55716c7947c5de57ae2ecd0586a6b38e8ae5f7a00000000432c8a8869bd03df7c21316a9314261b71124b6e0256adcdc91a6f08e5790251d2169a49ffff001d3886f0ea","01000000a5814e4a432330f099a7174043eb7861ab03d648a3ef90c1e822f7a000000000d8b67aeeb1e91ba6595570c73f7ff663b94e34e645323bccee18df87c27a2b8f7b1c9a49ffff001d099cbd44","010000003836f6a70bc0fa63915fb1236386e2c7b40d880e64dadd4ed594c4a000000000129ff26ad4bcf65f099126f05c8d89fd96698dfb5498cd98563d36b3ff87554569219a49ffff001d2ddf2398","010000001c1c3accb25df5653ca55f051225351060f54c070bedeaa1a336340d0000000011581a5ad581f799bf5cf6e4cecb6d47edf96b3936351b549a3f26922b29b9819d269a49ffff001d31deac33","0100000077f6b98d1b44c2f43a7c636c1bf7159e674563ffecccb102bec3b1d2000000006e108a8337ddcada9891ba9ebc8efc6ac073e37dd2c1b10409b6e03809ba5c3b712c9a49ffff001d3a5d56a9","01000000c4d732091b0f9aa9f007741108e7cb2124681ee5d9a44a33b5b388d30000000061876661a712c2d22e8d217414122e08cb006ccd618798e81d06e70a273304d255319a49ffff001d13b4e7f5","01000000bafa3dc8a2d0a2ffb5c3a882b6db1f05b34ebae9684dbd6cf5183b5b0000000091eed339af22d3a5d0eac94350adb2fd340b2144f40a63d598807c43a9dcfd7b89369a49ffff001d297e469e","0100000007dcc948250bc914e7e0334942a953df347efef8efa57b94a315118100000000a47c31bc8803db5fe5afe43cb5fac062d7c198a8357e15a1dcf5e509170e47b18f389a49ffff001d2a8d5c1a","010000009d423b07513f79099ec56f0b4805a686d2cac9e8f43d7df7e317ae0200000000d91d284e416521112ebfac94ddb5ae0393ea50e2e1a94ce4a3e248effc2bf609763b9a49ffff001dfdbed705","010000007ca5f58fc4c8711670ef32302bd95266be8c8f598b02be7f9ee60185000000007980bec0f664fcdd10a64c0b24b55e980e83c20a0de3f556a49ec98251fdb1842b3c9a49ffff001d3826081e","01000000511b109899df58b60e1f7ed7dcf329a70872123806a9041f94e8746e00000000ad7c1732f67a374a6a76d4766b4a5d43d7a411a7661a9db47cef79a46b3e1d9f88409a49ffff001d17c3b10c","01000000277816e78a549431255c432dadb669421a51062daa408cdff11f2157000000008ac52299229527e557f10cb968a0fca44cf6ee9b06bf0c2be5829d3b5abeb8cc68429a49ffff001d36b38507","01000000dc90b67870c7fe96da4619d2eca1fd810d91f5bdf982c4ae26de87b0000000000fe1590b6c1a32eecdd52e25b47d3cd5e146e06e610b58d6cd7e62133355059c98429a49ffff001dc4856100","01000000dc8b41e9a8a30bf78b02407ee4ba0828dbce7a228e1dd7273dac5b4f00000000b74f46b7f5f4f674f110cc1a386204c519b34f86e9e36b686f8e6631ade25eaa85449a49ffff001d2574e87f","0100000009ad1ed7829d384b33f203c45a496fc4f5a5d71823184ba279dd8fcb00000000e96ca6ca6b70b84b401398a3046ac4c5a15f775c376c0bab7ef22271ac94284311489a49ffff001d28b19f91","01000000c6bb1e44c47423b6c6d8a1a09e0f024fb1826bafd1ce675e70a5098a00000000816223eb60c6ca40088405a56140d71bc8a38d4b896b3f092b23c00607ebd758a04a9a49ffff001d207a7b76","01000000ad24bebf24775bc5ddc612817a2e520b36588a202699089fbf5b16c500000000517db161dfd2db9e5a686f5fc4856ec951341e19aa71a3d7b65567c7f0c2b725264d9a49ffff001de7004e08","010000008945d26475f95a01d9f6bca062ce528c2884355133ec00a9ef8e5c650000000092cebc5367f7c714d9bfa014234a63f267aa730696e4a7b763f4fd23093a711bb34e9a49ffff001d65e2a007","01000000f0b228f0705afd029acdc9c7134b1b135cbc3e074e1050dd7454bfc000000000eecc3213d2de908d1439685945cdb1cf1e87c52f39380a5e58b1633abcf136e7c84f9a49ffff001d1c12a8cc","010000009357fbb442ddeee9a7a6031ecc7648d25496381601ff0533fb71fbf400000000bc608071dbba3f4acfeae15c0398143740d0228b05ce01f5bbf9af122e7ed82d51549a49ffff001d185e0580","0100000015380bc999caf55f8a2f6fcaf84f019786ee44175b1171b591785efe000000009326a529e5d97f0d2227d2fceba27932394b9b7a7b484a3802ca7b40e50b6ae7b4559a49ffff001d3e785f05","01000000f60f59a67bd2e56d4bb170171c6f5b264f610bcc51c59a6521ec58b100000000e702e53e00a82919ed7f0bc4b076aafcea186d0d48cf34c558c26f218203a71657589a49ffff001d170ea4ee","010000006611c2029e34524729306b4528212d10bb1d71b231107e3a05e25bcf0000000075a6e8005f9da648811ce38f5117a2e3db2b70b26d8fc21633a90872826e0c3fbe5a9a49ffff001d2d89277f","01000000669b270b7bb13822e18181494f1bd8ab96fb0f076ed855bbe08a5fd200000000572ee0a4f4ba0b6cf483466a73304bbd3f695413910b13a59c5ad729462d5d84155c9a49ffff001d24a5c005","01000000e8125ff0bf24bdc3fcc58d307724f46880ebfce9767211feceec7fa800000000925607bb4639bc16469776c1ee2bae70711581003841f315d52331f8956111d784609a49ffff001d1db35b0b","0100000036d61093e2cf36b5ee02d630349977ca6776b0bca964b07005503f01000000007b7462ccdc8b3da7472d2e60b284fdfd38bf18c68aebf5135f796417af10e360d2619a49ffff001d2712e928","01000000b6895107cdee87dc1423779ef3819e286840862fd6034f2f125156c800000000bae0b4f6649dd17b0094ef4bef5f94dc8563503dcdfb38eb67b7606b686968db8a669a49ffff001d2bca2341","01000000cffc6e0b6d618b501b818d8909fdb4646a8633af5e5d20626fbc52c6000000004f31c525392a8ceade0e39dbcea00ea1c2629db7ae6b567799d3eca9336fa1ca34679a49ffff001d15415702","010000009a68376e190e75643335f325548feb01db817d0aec36a4e27bd54d94000000001b69012be5d51b0891f21d19410b570515ce4cbd14a670bbba0fdcdb4828f0132a6b9a49ffff001d15069e08","010000008194ad260d2a186b51309c3dd905e9b9ab6fec0a14048080cf5c4f58000000004124ed11d17057abd11edd7fe7536b2d77af0957d62ee3f1815856ffc274c921c2719a49ffff001d007838e2","010000004ef173b18be388d0eb210b964954c6308605099aab4b76b6b6865acb00000000f7f3cc259ab91131de53f7ca4690c918c99d1b7ebb3806c02af7b93275667f1a7c739a49ffff001d15a625d9","010000006a5e5c2f37465d1d35106b189f2560af2f840602582df889f9c009c2000000008646235eeff4e3e396857442d42b29484c48048294e544719f8d256318b41a3b1a749a49ffff001d3eafda01","01000000b56c7b45790ed39b3ca2501dc9b6cf62db3118b07538b3ef92e15770000000000f9bf5567a0a33893b9ec94ae9c7e1b7225b7d0d452f3c60626997df2c0b6cb4fb749a49ffff001d088aa3dd","010000009efa7cc27ce453ae74b12ffcbf22d85d0c0058d86cefd229c40ccdd7000000003d23e69606c0dadeaa4f650563528998c9c5259b820fd9f000f36a40f2671e087b779a49ffff001d1dbb9da8","01000000118a0ee65eb41abd1fd27e8134fec1e5769de75c98a863094830471200000000f2ee0e192ba55cb62b8e14e53fd88336548f6ad43cc9f9e7919bc7700468b33806789a49ffff001d9b890c02","010000002c21b25cb4988527fc53f16a6955189e9bb09e724740621b973334060000000018a404435ededf4f9e82ab1a84b95951c763113d22a66ffdacd2aad01ef9b97af17c9a49ffff001d05c6d0ef","010000009320d953aa7f266eee39b13f33e0c3d291b3acfd0edc79a91bc16388000000008839c8324c9e30274a5a8a8d94daf4a0bcfb5058306dc02935d79cb85950d02685809a49ffff001d5c24d306","01000000bc469c3d7dfbb9a0be9b1d74d6d3e8befc736cf25cd22f67ff16873b00000000d6975d4cd7b390ff46f6ae3a7c4e147817f7c15919cfd9f4ac71fa50d08ef969e1819a49ffff001d22654c52","01000000efcf852b4a3e9ccf2c5f88ef55cf0dabc1bb8e2af9f272fb9874d4240000000010a286afabb1aaf7fc9a5ddab2c0f071505e548e1e9cd19ca53254af6b4aa303a0869a49ffff001d33df340e","01000000d9fb8a4e7fcb92178254c39602180d5318a29d90fa56530f11989efa00000000deae4694e9749984ed58d1dba387ef6ea29a2feec123b4e41c496abbe78ab8aa2c8c9a49ffff001d14c4ba9f","0100000010d5aeee7d0865e42e7a5ed56d9cf14a2e030afdd7d157a633d11884000000004d01ec8aa9eab70f2cec1c621b292aa3b44e73cd3c39719fc65bbae0d491b80dda919a49ffff001d186bc11d","01000000f67bc7436c54088c5c665b6bd43a0bbbb72f3804842b576d333809ef00000000572deaed6197459941eb4438c1aae2a983ea9282db899df0a42e5d0c609319ccf3959a49ffff001d724c8a13","01000000c3cfe70de5c0a3123baf677901a7dda8149ca8075867109d8b0232ae00000000761101d912508ac093c3d157e6646a318419b789e7df8a0389b48aa9e8fe197e12999a49ffff001d2f8ffecc","01000000b859109280d1b594342d165c0cb3bee2e874b361f5dc776e2e2bebd000000000bb2207d788a5e7f1e74fea443cd350c7ba8cd6e220743385f4f72d7172ea818be09c9a49ffff001d279bd4a6","01000000e93a4e30186af6baaf0d5587904634207b6e75df0d49cbea4e9e576200000000a813bbb78bed7fc66ff81a9b11e4e40e963c5e6d8702d0c03ae5e7630aed7b415c9f9a49ffff001d269504bd","010000009b6db3d9036a21219ce7fe7ae3b10942fc1857881ac21bcf26bb65380000000041612cf64b5e8af0324b0762831585c32f8189d302bc8b07458f94580de74038e2a19a49ffff001d32f483ba","010000002c9d8f23c0bb9051fd74daf3b6c9b30bdf2c2457582502e3347448c5000000000605f861ef222f3bfac96d14a532e8951a9bbf39fb847411da24b8fc87705a6f48a59a49ffff001d3700ae01","010000001feb8a04f240639c3a913d75008a30ab2450cbb407c5541598ba1bfe00000000eb9980094624869bb0beaf67f0d8e9b0814b1af6d74ca96ce0b4a4dc77bf5109bda99a49ffff001d2114e5e1","010000005328f443ab4ced6aa1f69cb9030cab322c675169e5c349cb758fd59700000000a619a2ec3a093e82a689e29c0de89e19ca34517d11adc1442d1c585c2e90191691aa9a49ffff001d5727df03","01000000612784d3df90a11eefa7bdd364830a950abf7c99653f52eabe6a15550000000072ce71c4fd4d95e5ead634da9d41791184137f4bd4cba7f4b1011e1089201c08d3ae9a49ffff001dc61f2506","01000000ad8231934d70c52cc5a1422ec65e9b34919c7c6066a1af47d8bf2b550000000045137836be955371321ce9e389fe4eb3f751f1f96a0c4a7614a96ec0f62823acf9ae9a49ffff001d23218100","01000000245163d6b09020df504b48d0bdd1fd5ae3b19e950f2cfa32e3ab286e000000008b5c6ece54fcb8786385e1ca5a340ba59c34d3a9806483d6152443418fe58b7079b09a49ffff001d3a0ddf66","01000000cdbfd83d877b38df56f01e81f680b229ea3ce79d18e8ad010f7402c000000000178f323cfa183faff7965aa1d0eb5b9668db495ce70aa53623116f65681074bc2eb49a49ffff001d2af2fc10","010000005014daef1cbf6abb362d770028ebff5c10a4a21cec6a54180b8645db00000000e5f02a1611fbdeced4da0e47280e86776f7579c3982df625341b8464b2654df708b69a49ffff001d2e963acb","010000009c53b11e0e1f0d38906a6e8463862dd9941221035c6f4fdd2aba22cb0000000095b047be4c36e8b1a837967ab97839d6def76bc1948895c860a24f85ee3c754e48ba9a49ffff001da648cc11","01000000cb7482a001c4e0eb5befb98ea1e7024d517b07d8108c547eb572a7ba000000003ffba3445f539cc6b8988fcfe31676d4510e59b1f30cf7c886bead531978f84259bb9a49ffff001d03ba4703","0100000063ddadf64661fbd94412230ed133aaaff0143aa016e94d57e6635ab500000000227bf532e2098b8a29679d672fe216f849f0dc8a80d0a12933aedaaae951b701d5bc9a49ffff001df9c40706","010000005adc29a6a9624ef3c1c92f59d6611345ea7b0853ab573a582fb000280000000002e5b78f325f642632ad5cc06b9754bb28e00ed0687619b4e26c5e3948302d14f0bf9a49ffff001d37151336","01000000ba7221cde910f936240c34434aee758fc3aa3951ed308e935e9c6512000000002f401c4e41af2a80a9a06620876b214b46f66915774210b852110ffd373fab4861c39a49ffff001d08261302","01000000067aec3e8291d610ca6e053a5cc0591cddf153d58eb4b9464657f941000000004b253baf0d914750fd93a41b5e8314ff13f80fd32e927a9175d7300fd404a6d1c3c49a49ffff001d173c1551","01000000608f41312025141eacf9f7b860e5d3f95a9cdd816e7586942d1499e7000000000b632294ac0a395b9a71bd8dbe74aea9cde9f72f794120721627ff89e540878621c99a49ffff001d2de18f4b","01000000894cd50e740738e06b0277bb2f94b9ed1a9dd8bdcf614e8a5ff60f94000000009195a7c56f6cccd4418cc77db64279bbea8a6b650ece8d4476c58600366c7ac326cb9a49ffff001d07c1b609","01000000630a1b02656f9c5181c3ac1a25c84438bdc4559890e2dd95eefbff690000000009674c19990fb3845e15ea1e69eaa274ed3122d4631b0f0e314b177c0b470dc324cf9a49ffff001d1c7ddfdd","010000006d3deef909ea2dbe6444d59ca1449c57fd2c9893c3d7d18f08d84742000000007bb79458fbc2a1b94cff6aed1c333a19ea90d14797ce17e51a096a7f9b20f74b53d29a49ffff001d29685755","010000008f9b68fe9436a4cc27083f9f370b9aa1b89c880b6fb180bd136a9e1900000000fa0d21d9db9ecc33ab3cc5300ece168786ef512097c38c02c963404486d5e37b5ad69a49ffff001d234f626d","0100000093c285e600dae2694678ad599abf92ee341ea0e5269033a55304df6600000000c584ccd90c8722290fbc8dd18b95e7a5334953afb8f264b4e4d21a9a839c59f712d89a49ffff001d2dd66963","01000000cd3d60867f08dc94cc4300f283094a90a6f7fed1458511d64f32e033000000004f02e39856aeb2548fd5617b7b220c376504cf9f04f3a46484585e533aadc82b91da9a49ffff001d01783d14","01000000e3f7d2717573a304f7396d19b3b1ad83cf849214e108f62f74c3f70d000000001ee01f1c6abc3093194f28e55acbb78ee69235f79a3cecd1c777c4fb8de484c614dd9a49ffff001d19d38df6","01000000f5353520a16ac52a27744d32be3822491e9254a0534a70ac7c94e33100000000e5a4376618e86ef206ec00de8d6f7d56ba278ff4b1ff42d1f35e1bf299c445799ce19a49ffff001d2d53b92e","010000002ea7ef940a3f297b1eae49801afca0ad6ecf2b0714b639364384a8b500000000a492f60efcd78ad4abda295f6359bce8a0b8b185e8721f09249207a14ef38a304be49a49ffff001d2c043e99","010000004047474265c67258712871b131543154e93b95725059185843320f42000000000bd541e9f73b8fd78739883388eb8182f5f3d881dc30bb9b2407a00047b77c1bfde69a49ffff001d1da8304a","010000003dd60847207a6b5f1ca40f38a4d5277aa62553afe398c89b9568f58800000000798feae942f45ba89ddc78f912007502fe0b3a6a6c6742848fbd99156012f97ab3ea9a49ffff001d14795da2","01000000ddfe51caf98c03c2d14e85754b73d945a19ba95f9b3cc4728f59f965000000005b74e182447d16461ad86dabdc7495c82bf72d95dd9ed3664d040e01e1b651557bed9a49ffff001d2fd928f8","01000000a19750c25ac4276eb2b419b486ef2e72e613a7f0ba82ec0847a7a7bf00000000fb837ac2b879f10c8e876e0c750e2310b5c88ea3a3322bc6931c7563384d88b9c3f19a49ffff001d2f0b22a9","01000000562dcdcbb883c63af205ae146ada1f9b51ba6624f4167451d48f516500000000a37c6517b4f67a401fadbb46f0c981fe3973b7a60cb859179cc212a9e69b0ba161f29a49ffff001d9347fc00","010000003e02f907c557746bb4abfbb17357eee6efdd44545cf442e3a0e4b4c300000000b72c0af2d14b7651a2573ef2ec66f40e729ae644b5f72d6541d4d7722cb67228a8f39a49ffff001d19e9ef57","01000000d81b5e0092172b37fd98f7b3b0e547158d77fdb66128545231c9ff320000000038d8e0424d448ed75443d5e306710f611a066f0689e146e19e542616068ffadf07f89a49ffff001d33bce690","01000000b310fe789f02bda7012ccfd8a4054ab970050120ae0e070c20a72efe0000000045aa59f5ab59d89b19d1e851bf8c2060f772bb79f9b145aad715a4b2c39c305bccfb9a49ffff001d34a26ac8","010000002558dcb8354af304a672a01cbd40a1e3e2b79ad233b2a275c1ae5ad900000000574be18ab4e64daf676b9660d3b015bedec89cd46745ccd885f8393a0015ea765cfd9a49ffff001d1a50660d","01000000bdec1ad26ccf333643b87b10d1e8e08f8719fdebf818a0500c10737a000000008803b2e040e1520d262ec74952bed464c7553e0cb84ebc5c478778b51845a5cde3ff9a49ffff001d385e607f","0100000096bc824291a1406cb8924905737498dde3e0a20bef66b40d47fe7135000000000b76778d332d04940f03b2294ce5fea62d8cd4c0146d50b844f9b7f210b6b6107a019b49ffff001d26507469","010000002d3d125d7eb43b0fb46b82694c1a4927aca33d0a1529f044962bdc8c0000000047a4f71c920448abceb621202d8fe6bdbee93e8d97b21e58b3c0aa98d8b9ddcffc039b49ffff001d2c3741b5","010000000ec11dd51621e9ed51084d1bc1bdae11a5887d03c07e956d523cde010000000069de7f195e3fd9d801cefc9b3b319d96f859d8fdb227df25b7d3604ebdcfca1bdc059b49ffff001dd9b3a603","01000000718f7c251129837b1341f4b7c1e02c690c79f704ccd451bd3dd03394000000001158090ff44a7f44ed5d0370f10688bfdd75b2caf2b7b55acd8fd9726b691f2a16069b49ffff001d4ac9f000","010000007f651e7dc6696d65b749221cf98c7cad979b90ab8d9226109160a60300000000c0421df61f0a7b779480e61952088dd0d0afc3d88631313f4d66a05e7d48b99e0a089b49ffff001d21ec2fe3","01000000074806f0f901aeb8acbd425fb6977085bf5f10e5f47ae70109046e84000000008ae7bdc16f341b786878f4560e308260b2e63f49b72700a501f21a760ae65df76f0c9b49ffff001d405e8b14","01000000cda9fd83e6999f64171391366c8279fe4b01d61671a1697de73eacaa00000000dc5e10850670e2fac014ec63beb2bc45771d6fc2444ddf3c9640843b1b85c549c90c9b49ffff001d36465bbc","0100000091861e66efa445b99f58374008898a300ff0cafb5c6fe15d0954036b00000000711e65fb785bb4b30351bc7102f847c327bfc8d843b80a2e6db522604ffbe3af1e0f9b49ffff001d1cc4cc44","010000001dcb062f39d3328b481f9dd6673c3f22d812924988f7d4765973ae570000000047cf831de1377c387fe60f86f73a37555e9ded6fec53e1ac7bcde995a7b74a4fa9149b49ffff001d253407c6","0100000096cb2a9f32daaceb4dc21a0531eb5119a45ffb5b1a75c6488cb956bb000000006399682527b52dcaede70120cfc33b1c0aac250b5ce733882a17c1c8064bf2f33a199b49ffff001d28172260","01000000964704409b205e1ae742356bca913e29b5145104877de7fb97784ff90000000076d8368349f1e301583f7232ee57a1802217376577ac93487751e9dfa9677777f11a9b49ffff001d2e964403","01000000420d1b6dc703d421a1a7094bd27477e9e2d698a8ef4420d960efe63f00000000ab292f4fa71d272ed5718498e37b071fc861d13d5a49d14db58ab271e1176454b41e9b49ffff001d2721d8a6","01000000a484ff5f0ea8cf1a16240c07c7b9bddf007c61ddbb37d1d58d62d25500000000896c32a6d4f2d5f40dd097739138b28b1bd1fcb4299dc001be44786a51110acfaa249b49ffff001d04662e37","01000000c169069c233831734a6a47b1191cf26dcf46393ebeb05474172ed28e0000000023426520552514bb65089146ca72d4bb808e931138661f52836b193d2d7dcedb81259b49ffff001db73d7003","010000002dda182671764383f133823ac855ad26be4438573e78c1085298e3a70000000086397d4414de9f1f1da5e9710382b7de6106bb984911d726393a40bc0d244c103a289b49ffff001d183bd3a6","01000000f87703c9c881545189e660f7f54d71ed415ffa04c45b20586d24ef7f000000004cecae3cbc78d1df91c97080abb4eae9948bab652df6b9454bc423491b99dba3142c9b49ffff001d146735d9","010000005974dcbfad6be42e574a635a49a43ea0ee293a3a343a4ea843122d1200000000d3a8be6950cbc99b4680b4ae0fa37a7c672f9e8da5d7a9e648fa6b7b473e5d723a2e9b49ffff001d413d6605","01000000babde90d19449cdc03175b46a5934a78f9a681f96ab523bbaa83eabd00000000f58b4340153103a694cecb845ac083149edaab41fbf50c375d15bd31ad1ff01eea309b49ffff001d1a1293f1","01000000bad61c3bd1408fea89d7d81f3b8a639c83e2342b26300f1ee632d16d00000000d5ab644595f78038774e154a21e6bd7264678f93020644ab32e4117e2c9938f4dd369b49ffff001d23abad83","0100000032f48cce3d8c3491ddbbfd69a5cae48c6accb014e333c8efc07199640000000047fff37f9ee5a3b7523047b6e659be90629637bc5b1dd5763f4f4f3ded7f25b9393c9b49ffff001d20399a04","0100000031858b60bd5567357e2be9d31fc72fd6b634b628ebfc6f5f18e636bc00000000ddbcf9e9dc3549d1deba3aeb1447b22d8e652d4807dfe33984a3ae9539fe922af73e9b49ffff001d061c80a5","010000006310e9662701de10a0233de9888e0ca0ef6ae1fc4f117c59c773c8b700000000325e05b2e53c8e90a2200f8fb113fcdba07f5c7a0e2471b1d2acdc571994aabdcc429b49ffff001d06fb36c5","010000005345935d4a6bd4d8e5a6da080d2275b9866ef47484e37279fe44bf86000000006f3fb80d0f67531fccb8c2bd7b2be0b001bdc0aeb48359ac8c58530ed92d59db63439b49ffff001d8cb23102","01000000b61ddbb15458bd38b22b054bb68d68e0d3c87385a35f043a9c5860f40000000081aa9b58a3b39ec39ae6d622c67abb6c947061de2bb0dbebdba7ac96156603d379449b49ffff001d1517d204","010000001beef518bea9d88c7a006c5cfa9181dbca019ccff8fdfa2bb8da546f00000000a57ac0aa0212887cbd69af7e33008bbd1a7ad2ce45e67f2afc2ea47d308f0f07c9449b49ffff001d0857b1d1","01000000ed0c480662d521173c42ccd9041e5cd13e09d5a4fdf46554570017b50000000081e27791a4d9b004a9b1e4afafe73c1b060255926978db8ad4ca524cff251fdfc3469b49ffff001d368203f8","01000000a964496db6de7f1aff7aff07ad9dcd6960c70c652e1350d447f4f4e40000000074fb5b582434b241e0342fb45f6f6e335128e65e4c6b350ec1fdd6df6408e216164c9b49ffff001d1dcd9986","0100000075f66645a2709da2c64990d3bf86c4e1d085fb58f86a0ba23ca0ca6400000000643f972034d12cde18ab4315a7f86a9c78d8456e4a8849201706ad38e20e89c5574c9b49ffff001d8e7c8300","0100000094d74ce4194b85d492013497b0b7afdc4441d9811bbcfc03a9a4b866000000000706b81c29be3c1e86cf140e0db322f6f8969e7ea14fa542caa41ca043a093be684f9b49ffff001d75ae3e0f","01000000f6b03df50e2bf67059ed6c46ac26539d7d1e284a98605ee3cf3acd9200000000732c328fcb4a493d511d7bf5a03d812ee709f7e153b9a7f1d26fae6aa82f76c267509b49ffff001d1f673912","010000000debff7da400e78a0b612d053ca64f3bd7bd6ee5498f91c6521f4d0900000000c8a0c824ec709b4ea513a818090d65e28d05645aadf187f390a0958f56a1be6c0b529b49ffff001d30c3db90","01000000df498cebc23ce7789a590b0f4de54ba6fe24841f393b91c618f741ae00000000c2fa3370614f536941fa46167d82186af7d0a3e06b5ea632bac134b1c367aa23dc569b49ffff001d03542900","010000001f4ca169085a14ca4ea6b95d700a796eea0dcc4bbc4eb89fbb9acbf4000000007df1a413064950eb307b6e6fb5a44e274933639997c20cb69554d94d9efc16ba095c9b49ffff001d32963028","0100000038e4362e96a94681f91915010ab80913ce3573d12b803435fd24ea6500000000e3ef456926a5219c706a29a4899718416b1bf4ad15ec33a753d8213f36eb548073619b49ffff001d221f9192","01000000d8479b0a9a12c7349719fa9dfc8736c686dbdbe256b812338d959ffd00000000f6382bf01cea231743c206cb87ac8ba983c2fbd147dbfadf1604f1ed19254e95c0629b49ffff001d864ba505","0100000025e6ad3aa6a2b3c7e270578c61452f4616461d68c09968d7183844fa00000000f37748b353076169f7d1f70ac4a28ab7e92d41a34a10eac6a06af063100f9eb29d659b49ffff001d2e2ca8ce","01000000e8af8792163af76d32f1406bee088bc948959537b443c53900cf1e2b00000000ea79a99b54f3b1b8c0bc538a24eed7a0b1bdd88e77b4b1ceb2e79298359eeaa11c6a9b49ffff001d11143512","010000000c31d04047d8304da5d706e34a271e7f35087f0cf8936d2fe93a499400000000c9c4f3c6f36911b7b24347eaae8583df86825310da67554c4741ab92227ade682f6b9b49ffff001d35625d82","010000000d98c3e45a9ca546dd5beb78d2d2e1901dc2b5445ccf10f61b0b3afc000000002f72fbc01844584b40ecbb7eba79272bee26d26a3a19bb6b7ae5e89b23738a7cf26d9b49ffff001d28cbe8dd","010000002adc83ee8e563a4e567647d499ec7b0edf2c1e15f301bf81966b2b6b00000000d7f1aae08f1b421a01c32196a6202ab0bc45869918c206f45427904c7fc1a82f2b739b49ffff001d1cc743d4","01000000bff4a1afb47e5e26185c4df65f511bf299aa773e615bad944d4d31b8000000002570c5a51dac7f3e561228ba1e5aa36e6ad94837f83c6861f6d5cfc73915a9ca80769b49ffff001d19cb7aee","0100000070f60ebafa5c490b199f903040d4745410890fd106a55779bc168a8300000000ba1563d45121fab606c623a6c5ad4925092a75d7e46f31592ae535e057bc7383507b9b49ffff001d35d889b4","010000006ee2a224eddada47f7ae281c317384d94c93c1caa31bdb4069eb09210000000060fb5fc3409d2d4df504d107f0c401c7bfa48bb1b470503566e01f843a5f56f6207e9b49ffff001d2ec0f51a","01000000a21b814b79442c14c92ffd7b7d6498f59d5cf8c66d2cd22e2d3a44580000000052eed151e2f296f12c164d68ee84b1dbbad6d8b11b44eecd761e6a52cdb23cfd05819b49ffff001d17cf8f34","01000000992e301c6503888b8b635e4b4ada9c11b8818eda9d425abc113ab36200000000c4821ab214be8ac1206843c639be67c29eb86624f41f17c8f853e6f375380a417a839b49ffff001d2bc4293d","01000000efc1586d62f151fa7bea2d6a4a119551897b7704fdaf9144bbf0cb5000000000eefd30031c72869588596519e6b05f993456349f2d7ad1f101058636cb43cb7a5b889b49ffff001d2af475e4","0100000057ac7806755cd154251f13f42f67a0119ba6a3f3eda297215890bed60000000044e37b6e8e189bce5947470ad9bb0a5eab217c8205ce7dfd92d02046d07b7ec2138a9b49ffff001d3800c996","01000000f008d9ecce27fbbb16f80dd0941975d2ee626d2a8d1b6b251f0a4a1f000000009ebaec7a97555b36ee2a0cbf3eb68e15c03b6737f0a75ebf4d52ea4eefe9c985bb8d9b49ffff001d188a491e","01000000fa1ac109868f8c325f09bfc47800290291b80da90e663e1770a53e5200000000fb9e2be7eb6965e1596a6c70be0cdd996531cb76e25c39ce16b494a06ada22abea919b49ffff001d01dacc66","010000000a8f117fc30bdb2258f918aeaf9b399fca1f223f481c5c8b7e966a460000000075bbd6a8f59f7c7de157d39b7516def83b371451a43aa1fd54f915ef3814df532d939b49ffff001d6aaa8205","010000007205c19ad4453fb2240eb0b23261694da603a8c89b6aa63444ee6548000000008019380842f2d095fcb2dca86e923c123a0e67bb6e6388e90b6e0f31770b6a56ff939b49ffff001d76fff703","0100000096796d7e1f164f5d8e65f04157c8fd4852325e3bfd76759c6f4b6f63000000006da0111be4cc9876708660e00bfd99d2fdb6a820f520873852b3ee57af3ec7ba97949b49ffff001d274746cd","010000009718c6dff8e31edad3f048986a46cf9fc7f3e4e6cb89b5ff7a9597f00000000020b0ebb60fd1a87e4dbce69ecb37e04c6711452c2754141ff94c3643183f5a2d86969b49ffff001d2d83cfc3","010000009144c22f55e664b044cc013c37e1ad781b6b5a5bbf1b2de11d12b34400000000eefa86b5dd93cb82935e5380f6bfc08de06f2da2c6ee4f48c1281ebd3e68af5fcf979b49ffff001d15052f27","01000000ff8374539c4ea19ff4e0cf3e2cbb0c6f9138383b6ca568f5f9b1c640000000008f0061914f999d5902f312d4f0ecf3998b3204a463fe4fe24fe5e9aa76ed6ae5249c9b49ffff001d248e3ea7","01000000f8b1bd1a354f61d4d53ac8105e6ad6a82f591e5edb1af503fd5f6df20000000042a0a4c5fc819fb37c0679f9e193da75c0ac932b917424a138d17969d65c3cb9059e9b49ffff001daa49d107","010000006e52cedeedd081370ce311ba6c1d613f9f09aaf0e7eeb950d8036eb100000000ea318e0cb8a1064f33ffb679749593dc9e923f8ef4df2031d7ab64eb9ee894ae26a29b49ffff001d29e63dce","010000000ab8ecae8c41ec8820ca424e8a6145e782a933cc4f7aa9251d6939540000000015a6e1e208578afbfb31df267e411144c5961f76d6157fd54020df1a18d0965ff9a29b49ffff001dd4ab8203","010000004df2e1bcf05d6ce6816c81041514adbd627820f816da760e91917e9900000000411513cf43467700c69a3030521f44bb061a853e84beaff6add73cf6d6426111caa39b49ffff001d03820316","01000000c3c1ba55aab2df87d6a9169f4c07dff17c1193fd7b87e2256c9783a3000000007b09c45778487000c4404146a72f0f7719557960fba00d5a4e8b2f66725b3cbb9ea79b49ffff001d01d44b28","01000000733405f831539ebb5e34c3f3d6ff4eb0c39b67622d666dab76ba052a00000000d32609e2f61fa31d84e72d88a27cde061e89b6a2ffc2ba45812b837f77396dba14a99b49ffff001d21c944cb","0100000085078bdb702d41a2de389a1e743eedc9c04055141eec8a0fc6a80c8600000000012a9b05ba6389e7a726344f3de8fc17631af3f93b925bdd0f3a3e9b8a2a84977fab9b49ffff001d25a63bee","010000002b8a351f4ec4ccea3c82910d62a72465426e7ae78e7afee18da240db0000000079002c12bab8abde64ee413e1fc9f7d76e850efb52fc9dfd4478fba04f53c70946af9b49ffff001d1425494b","01000000c69823f742c396a33d57506256aa2f4100d54eef074a4c752b128b34000000001d87bd26823924cd13f8a9a266c9b3775e7cb9f9eafe42b12dfa0654ce1993bcb9b19b49ffff001d2004f31c","010000009ef9918da6d647f8b8c1ef2e22caab356881ae9fae844018952a8d86000000001a1d0f0d0bdb673c9a9dbf8281e0de603917e49fe5424c1477a4a5171ff87e75fab39b49ffff001d1ac3b101","0100000053e9b4f87458d200c38ee5eb33fa98b4e314174550910fb8bf2e299c00000000a8155de5fef2931839dd5cf7a2cfe9b93becceb222fe7e3bfe9dcb800de553c7d0b79b49ffff001d25812fcf","01000000573e96e0550ed20e103514a04ea50eb03116209a1fb5a4ea0f291a43000000000cd7d7328c5095dd42e3dd7dbe0b155e855cec0138f2dd994042c6e5d4b3308134b99b49ffff001d39739398","010000001f97f08d4dabb14fbbfca7b0c4690660d809a40d5c4eadbbe558d7ea00000000fcbacd0410830bda56f3b9231014eda90ad232f5f311ebb72d26700232c2e8ff62bd9b49ffff001d224c7f9c","01000000699f68402e046a1403b109207249d097fc11ed38df705e51339327fc0000000022bd9ebb83beaf1d647671b162b1345cb0d02a34fb549006298595b9866c93e5b6c29b49ffff001d17ec7322","010000006eee16f4dcd51404945bb1e8848f90dd45f19233d041cec3e8e1ca9500000000e9098f0888bd3520eed8a99574436f4488ff1bbb18219a6642f39490bac75b6977c89b49ffff001d311e9e73","01000000f0cc360ab6e50a7b70b41f25fbb860a7dc4c6da1e1c20d52f76b517f00000000a9ef732225980c90c0bb24f55f34f40394be3d5da077cb7cb25a0ea2ca937e94bcc99b49ffff001dd43a8e05","01000000173584dc0544081da1f415eac69bc504045ae667b474e0b37f395b710000000005c83d61abaea2de83558e0c3af5e094fa31f340e032c0e5e4aff9e89f41348235cc9b49ffff001d3877184b","010000006803c7269881c4f53c60899c57a0688107eaa8c44497e46341d43c6d0000000029d451c703bfedf98ae00628df8b6581409307dffd46f4a83597df0eb4c4313d84cd9b49ffff001d1a309550","01000000f7542288b54c2fe1e2a56b175a2656211102afb34f04de0c1035e5c60000000089e3daa2cb60959cb93851f8dda78d384f4499c220a98282127ada92a0abe5268fcf9b49ffff001d1a692b08","01000000f19e3e4d82db93292a07cdbb76a4d084cc008b257e9f0d98080bb4c50000000090df7a111f42077185f45543a3086d81a81c038c1b88e78a7e41892e60e4a0fd9ed29b49ffff001d0402820c","010000001c6ec8536e11950c485640ba67d42897e9493963c13595d189996174000000008258082a2ba577ca2e7421760e606ad9119640f47705b7219a1aa250412f1a07a1d39b49ffff001d29229da2","01000000bb63c609008b7a859eba0653485c9ac1d95f40bcbf3e40346273c5fb000000005c46c3e5c3b783e60f42a56c3b3f908acd9506dd6ae3d5320c8c57776f9dd4630fd79b49ffff001d1cd3de23","010000000880e001a3047967ad3813c53865a59ad60b9919a60cf4d01b9a078600000000ad5b92c61c2e836258d49171bcbbba376767856cbdbeef48ad2cd03ee5999e4373da9b49ffff001d1d52cdf1","0100000098223b628a905e3749f680f3651cc9d7dfb23caba6f9049d8bb0e1580000000087e79099a77b079b18c85f2f8943b0eb8941dabc1976769e42e1e651a268625a39dd9b49ffff001d36dd06bf","0100000028a331b35876ec25d5e71accae64c3659c1895ed6b8242194946123c000000009cda7f9c8add2523d4a5e4c7b413de9eccc9a41519f1512faa79649ddf50e55c80e29b49ffff001d2fd0fa2f","010000008681494c615e7c16e0d8b66b2bdb4bb7546d516994a5585652b53e9f000000006395576c42679f5cb918091881af098ff13054f115449900c4565f43d76182111fe69b49ffff001d1682cd97","01000000dfcbf10c56d641a1bea8b65e5b5860abed4e369e311ace2020440a1f00000000317e44cb38936b14ecab25dd99e35962dbb0f44763bc0dc380b830e79d6098150ae89b49ffff001d2aefa2d8","01000000e4c6885fff1a8b6d6491902f3c31b428a10c7b840da4b69d53d55845000000008dcaf638b592156863072539f7bd1dc558b16ed9d3d0538211c4482b452656a1b6ea9b49ffff001d1629b9d6","01000000c09ebe8db8d96c4a810ecf8e8f66b2e30c23e3b1f3d7dc643ffa1d9e00000000408edc277466ad097e7171b627823c44d8b074ae24c7bd27976c5cd1a9ff930fcfec9b49ffff001d2e04ac12","010000002127262f0ab6fce79e26171ffd70e1b81e9391bdc19ee0515b1f3d4a0000000099ea6989d45cc900ebd605f96e3e14836f0791770917360eb3ba5c7a83dc52248ced9b49ffff001dfb177d03","01000000b5cb00475c5bfa8e22d4649b2cf11efa5a446844ad6268c5697f9ea100000000bc0e2b81875af510e51e812aa5510f3379e6ed15a01b86db7e7c21e7c71a3f6e91f09b49ffff001d31c4337b","01000000b97844529796fabcd05dbe470e0a91912c2c756f30576362c1b81ed7000000005defd7f160e3449ee9d477803a535365d678871d75b9a6399af76718517ebc4fc8f59b49ffff001d19805249","01000000553c8d8abb14e4b1a9d9063faf159cb2004b5f12a402d786b2347a8d00000000d36571c5230b7434b000723540c138fb683cee08d0e2dba6f4d5f4eb373081213cf99b49ffff001d2a437624","010000003275f71d64bf643db729acb6f312caa1778de0a42a6317d05cd45ae6000000000385cac867144f19d23683b31de88d9ddbbe57de1f2a0d4982ed15bfbe05762c18fd9b49ffff001d00e8b2e6","01000000131c2d6d853eccb7341bebcb1c951c70228470e61b35e376a4d9b7010000000032ff82c2fd09f3bbb6ad56c9384493f1f3016314bbcd5f2167dbbf28d5d55ee0cdfe9b49ffff001d0966d72c","01000000b784231b7bb6f2a8b8410ce2d3046157a78c432151b43ba3df51b45a000000005fedad47acdcea1a3b7affa178bb3696dedff4f4224b9da0863e43e0fd71ca50bb029c49ffff001d30175a52","0100000066da2635b604ffb559dc4b4c5eab40e173fdfe0944dd631f39927fbe00000000b9971047bbeb640e4b8e153a09c56eacb5cf81faeb9ec89005d5da54b071105561039c49ffff001d4dc0e902","01000000925ad6f4a36104e612d095a629466e605e383ec89d56610bd35f2ec9000000005f94b2297c3d85de8dcc7d89ef0aaec8c2df06608857a35d129b0a9bd21fc9b737059c49ffff001d295e5488","010000006360388f9add99c78a33461547ba418c54b10354d68e3560f910c62f000000004fc90f91efd02ed832798aee6113bef7bfb067355ecd2d01788759e9e158403b390a9c49ffff001d00ff7c28","010000004a9452fdaa1e56c693ff05ca992a499a12d7398c93c22ee738190ae50000000060f60d8a1eb3fd72fd0957ce020561cbbcb3e2e3affdd9cfe216c82b15e5261c2d0c9c49ffff001d00f2bdf3","01000000c28b659519f56f6c70ab8f0e4bba732005f2372ddf8e096006d81e840000000088607b7c2cc59d7c2c9663502df361c611695e24a40136d6f8adb734f93516e8ea0d9c49ffff001de5248f06","0100000070f833e6ac164057a86c439b48a0f1cd1cb9b263f1f62a20091d811800000000f832a5ace0436ff7c519b904ec8b87ff535dccd09b52b84f4e75e8411d75223464129c49ffff001d3345e867","0100000069dc1e077d2f47a8cf0114f882343eb7d6c600d1e220561559113b3c000000005a079f348f48730ea12dc592c8bed7f6be653524f84f4b8bb046dc9205fffb9b1b159c49ffff001d09236f14","01000000091b69304227e82124e8b55ada1758d7f241fe37332e8c9d4cf1445b000000001abd1622c7571622234390f61b98758ff6312fff6dc757e40990d1020206929a51199c49ffff001d138dfa10","010000005b8a5cf03f3fa1ddc490a4296c3fec1eb184508617d83d6b687437170000000018ea183ca7632bc7e3ad988aeccd9abdec8720460b7f934d0546b9d9c43395b499199c49ffff001d23f103b6","010000003232fde2dd92bc84ecc69f84e313ff9d353f60be25f78faa538fa6cf000000006b85d82eff12dc480bab741b89b7e31cd0f6563db0b3235e4f87a878d1dfdaa5b01a9c49ffff001dd55e1f05","01000000acf09b90288a0c172ffaa4b2cb62c420beed200671ece00dc5ead6f70000000036f8343b90480c1301bda381ccf5f1c2d15369a43c38007d6d2da5297c9c0d80ce1b9c49ffff001d04d90016","010000005689b0780ff08ec687465febaf6f5cad8ce72d155716b0c968ddc4e4000000005c45da03236a98a701cb960cbfc053206fc54cd14c2742b8140ec636d535b682dd219c49ffff001d371aee2d","01000000f1ee2eb422c383e61a07b05707d0d227ffa0c59fa7600cbb399ac1e4000000005052f93543d37f7dd54c6a4fa36b0306a4a7988f1494c78093b48c2caff1d70a18249c49ffff001d1c01fed5","010000004ca1773f243d5d673ec1c20792b26fcc162b7acf7d5d7d22e0c4fc9800000000dbc0019081802d47f8538d6f167a8711864d291f5244d5176e8e3c4ebe1783dfca269c49ffff001d130f150b","010000004365cb17d20c0c4e3d08840074e797d61f670a13225644f0ecd93eaf000000009a147dcb9604906b7181c3f1d599cb1336abc4a73f7b8cf7aa152d63873ee74d9a279c49ffff001d3977f0ea","010000006dc3b3ba2536b326e71f81641d38661b538e0871eba824c210c5f6a10000000047e3ab86ef1d2e16cf752e70651f7ee0da8adda42aa039fdcfe84584edfbe69b42299c49ffff001d3014e34f","01000000e87e4d84b87ccd61d109da67a80284fc4b542bcf43eba50c33c500f9000000005ecc99d76e967b5fa34c8b0aca7435a50bd0d77cfc2c6f30f07727d02897b5c3b22b9c49ffff001d20f9fdcf","010000009bf1cc7d1a970160650233901a4eb21c3ae67043f45d6b2f46cb53230000000090811c72cd5d671a715deec281c7c36e62aa3c98367072c4adfd7ec9c73e9999b72f9c49ffff001d3688ad73","01000000426bf80a8342c1168460521ab933ee7b58f0e89c5f002979178d3fa9000000006abd98e9d1ce23b3499c86e107c822c5129667f453cbdf19cca86f846deaabb86a339c49ffff001d32de009f","01000000f969823676756aa44752bb35ea5aab37bb670ef4fa258bfe72081b940000000091a46b5e32de2acfd9992dcfe5f08be03071834493e84eb310872e9f519f2f6320359c49ffff001d374abc4f","01000000014f2f106d074b6406c4884a32e5b5d8da292ed922db0cbdf727a9f200000000ac24a97922a588fc412be63327a4ea18684882b3823547218de7ff0bc864c75956359c49ffff001d25be6a00","01000000c2a4ef9d50796e93fc7c04f8d69709069eb5790d09b71aa4728dc8a9000000007228d8d7fcb3715f028115a7b0697a56abf570d87d95ba44137f5350b806b37710389c49ffff001d46b1c20c","01000000094e94e9a1619ab8084f981276fb7b78f6b9c842de3ea6f8abfcd7cd00000000cdfdf51e74907f9f62da73f501188bd9d18fe42ff392e701e3868fc2f2c08f0ab43a9c49ffff001d058b3772","01000000e58bcdf72a6aeaf6673d60b936e92004e82f06a8520eefb054dccc05000000005d03434a0fdd878d27002d9366f2c12cbfd1fce65563b28984fb758c55c2ec783b3c9c49ffff001db00ffb04","0100000080fad78fdb09258bbd85adb9df6bf9f845b35b33da7813f7b55d5bb0000000004089dfff6844bb27b1539cbbfb5f541b3771d306a397d3d9aaa06f23786428cfa23c9c49ffff001d37c7c5eb","0100000019125ba1b97b320df3f1d2a05f55193329f651f1b7bc35a5f69c74c300000000d644bf9ef2302e0b924428f65c684f22a26fb41445d3b914362e6275acf7567c6d409c49ffff001d1d75ba8b","01000000601bd9d7c0f86119901df4e3d5ea047f05900571b4fe96797e4a77d300000000185f5158b40f67f9b6d988e22cd88dbb69be8f4aa634e0dbb921429db92c23d352429c49ffff001db3b62709","01000000767b3e109f0790790bf9fb96f1a4bd585fe98f996cf3a4d3564799ce0000000004b9dd9ab7b55427f39f9296c075d7898d7317f08968732214e2dc092691cadef8449c49ffff001d2a8ddd99","01000000104909c2be40d1e0d4654b9e365a8c58ff4875b39a0bb17ddee4caf100000000a3935e3de6aa47920d264dc1ed6270c7dab1e280214414e17623492f62db2c5911479c49ffff001d3574522b","01000000b3c272246bff5878dbd83406d681905afe02e352761c9fdc6f4559e800000000df1c09fd0ec0a44fa5355cf3c33bdc7d588f4864aeed4fb892edfc8a3f7af119a1479c49ffff001d76e01e02","0100000015b1cc185cd4d340ce40e5d4d37ca6866f26ffd5f91eb3189331fd9f00000000da4dac090e604d500dcf0a90837e9450cd0a4e58cb8afb5e363a1e221832c1cbbf4a9c49ffff001d039a8e7f","01000000f35c5f88a7c4d5942e7e88e74d668c29cb5992f4cba2492ef45d9b9e00000000e672d1b75239b891280606ffa79e4a7e030e29530b4b80af6f3d6fa609e05418464d9c49ffff001d1df930c2","01000000f41a13bff0cec852a776a41969f5fcc0bdd7c6136cadfdd7fd8c758c000000005a8901bd72af24e72ad21b75fe2fda640b6bf3d4843ffbb952345b62d09925cb99509c49ffff001d2641ecfb","01000000a9c98e967edb345e46b82c5139ddab65526c0dec8a418a89552e298300000000289af2f8d69ff0a1b8e038d8e8bdc843af7c2af0b19b95fe8cc514747b797f9e9c559c49ffff001d3a068764","010000003b6cb94471d31095152eff30ac8e3e53af35b0189071098fe15343d400000000e98bf25093e0d99a12c78dc2cce661d3c6b88fabff669a8bd8aa50454df2c3631e5a9c49ffff001d1890da9d","0100000006f1383b55dbcdc1a4b403e07d38806aa0b74bedc7bed8e8e749fd2100000000dc386339a951fa897a98b7b0e2567832f6d70edb60cc59623a3f5ef8a95eb97a515a9c49ffff001d5e03a200","01000000a46f289089a0079e192aeeb20c97a0f62b6f06ceee5e56cc8beb179200000000e327c39720e69bb7e652bfbf9e9651cf8fca38c288074955d66e94bb0e4f6a523e5f9c49ffff001d3603f0ab","01000000c76669fd1c723eafbb13b56ca9cde093969be5eabd86a492070a71810000000046c60b118de2d08c1bc8fb63d9e149db528369b0c2251a10427dc62cb635d02ca4619c49ffff001d2cbf9531","010000008d7893cf7947397cbc02eca5b6e07443d1ce36cd0dc9b9c0dbdbfb0f0000000090351fa94e1769dd572522336babd6536aa47e0baf0f7c5182da55e0c50c265622689c49ffff001d07bd54c0","0100000097d8065203e0e6876fdaa3b5b8bdfe625f653c574c81ac6bbd83fb62000000002f6a50ee1317ccc24d769d8c627c6702239b755363e24601c71b873bd803bc6d516a9c49ffff001d37d2dbe6","010000007905c4485b405686d4d7c7502f5f4ba062a189ac2a78acaad805a78300000000cf262001a3b96ef4401543c965a72863996c829a33e612fcf2c0e49c63adb8c2d16f9c49ffff001d056ddee0","010000007957767041d530552d71057cd58b7cb8ea7c72994f1c4523b8a4af8800000000eb9d0a527b38dd9715c91deb67c37564fe849a7fc741189afc4c34d9f1de48394b759c49ffff001d366c44ca","01000000cd9c9bbcd9de5003eb011dfeca521d9451314ec565b986b16547f78c00000000f46d005a607175506be684d08308abdcdc0ff056a5cbe6bc1a3716282b3b99e67d789c49ffff001d1d59a8ab","01000000558f81535bd33bfe835609a83399029f70d7fb15da9439e8c1bff84d00000000ad85bcc63634c75cf1551a2c07546344ba077443bb986a06d793a6a371878eae2c7e9c49ffff001d1d77028a","01000000b58e52f592830401bdacbd727c470b27bdd8d22f6a527ed6d41e37130000000091b7a0a4b79f460b3f24ac8af4938fd2e498ff39e11fdbc6575d63cdca6d69201b849c49ffff001d31bf080a","01000000b55e287ff00f070447f8ee253299453f8aed1328d7b143bcada6cda200000000259b10938c42a0c8aa4db18cd4eac1674998a7438be3381024331adc937596201e869c49ffff001d0291fe0f","01000000d8508fe25d992b096e3207b5937cf242afcedf27d64d94480fdfe6ee00000000817d8a5f0c2b496caaf3b21af6da695aaf34108ccf605e458e93041c56ea9e94b2879c49ffff001d2f516f06","01000000bf6393072bd490fa488bd13658a29e261515f2342972ff01224fac460000000035b4dd07a4d28a6339e83644858354e591ef4f70a87ab7e8e79a7489acbfd50566899c49ffff001d4b4a6607","01000000d7479e5a458849113b6bc0eb06fe4a2c74a536bacec6cedcd2b7cfe2000000008fbd9e02bfb359c640f95c5c3df8e8dd6ba0f78c24f21c3c233a45886d2543073e8b9c49ffff001dab737709","0100000051a8b87192272d899450613807d309d9a83c93cf1cf1abb05a24dec8000000003f75cdb7e8fee9fb4c25e3d5b581f418f72f62992a8e92d793e0245a0469c1e6898b9c49ffff001d1b36d524","010000008b3e67408bfb73d7dd0adf3aefa33dfdd615014b5cc70446c45bffdd00000000d613b900d92e4c9e9bfe541e2afb51875e6ae1f459ee1fa0a592dfa0311090791f8e9c49ffff001d145b7023","010000000cdf13ae9908d9dc744903a3b997325fb4c4a406b00b5b284b3be0c500000000ad4f73a94ccccb9bfad416f257e63c1f7c4492caa7e151d252aa6b10825ceec0eb929c49ffff001d2f3b1f0c","01000000abae246943c57c6d275ed8b600dffc0d0cf137bc5054db75042499ec00000000aa226c1f606ef58e37832c3ac7977d99ded8b1b3350a266bea19d3f80cc582f6f6949c49ffff001d02bd0380","01000000c7e03826c73cfd272940795e7afa47fb6882c1b3e4822c72b0ecb2ab000000000ff8d1bac59a48b115b2c75aacdbc59667be1917a2d42f7441ed2494b687cdf2ac9a9c49ffff001d3294c130","01000000cf71682f72d412a761c3133f6af8ff98f8c2040ef9a6bc82bc6aff970000000008cde413d9937788b6680895a3907c28b05fc0c8b5063928992429b92d38edd4939c9c49ffff001dd39e6208","01000000e57b2d8e063b6092112cc190a05455c340c96a21c0d2e48b44249b5f00000000f8d04d5e490df481e11fa3a850922bf6e90d951cd678712e7244d95c506e77c74f9f9c49ffff001d077962ba","01000000fd7426a82d6d01b1f78ac5049d77f0947a37ac2a1c9fdb5300d725b500000000516fe408deef221b7d57733032612028c3e3380e9f0c427874c243ca34dad74355a19c49ffff001d008da9e1","01000000694142fd26c048ec95e6be750ffed4de1ea903abf718368f8299b71400000000ddf397c2329b7c0e11abb493e05f37888a152de3f5c3479471a4158deea824d927a69c49ffff001d59e39616","010000000596e801fb44b9438e9867f0605e8f89cb771fb1410e3e458498e7de00000000aef0b0bfb77348f5f78977d95574d8f651431566610f84c480bb880f7eee6896b0a69c49ffff001d2ccbb439","010000007a7b1cb6000c3a2a832907d3d25e8b23ac268ae7c340682ee66957ed00000000fe6c5b09b03059e1dd076c1932173a0005aa21d0ea929ed4675ebfa8747d74cae9aa9c49ffff001d01b903b3","010000008ed641415c1ee0256d63beb588f8790cc12d83ec331d024faca48ba100000000a58c0bea0f1daeaeb0a486fadb3846ca73f667a937eabc97b303084eeafd5916caad9c49ffff001d394b29a8","010000009d184e08b947c93d8504d56a2095a65b7c1d3700c901f336c3a79d6300000000137f89690b77e32ddfdeee33f8b0fcde78768bb3a869e8c1b6e3d6b54e07f111a8ae9c49ffff001d59e92c04","01000000f120637fd4a5805b2ad78ff7b2c2791c859e0a09f2ecca429062c3090000000047305e2d37dd72d455d0b2851c17ac0e385d93f9877142a699c3082d398154011cb09c49ffff001d02cfe17b","010000005755240b7e88474822e46eb9085d6283aa96fd37726f807c0a80c3c300000000041ea2ec8fab3ba12b6b277c3a38d970ce2f9744b477f0f4f6998ae39224344fa9b19c49ffff001d2b6e6db1","010000008599f22bac0b91fd0ad6c7bbeed82ceb7660a448126eda4af4db7b590000000063938e3b314cfbfa860de181a463fd919c3b75c8c328f4dff4aed88fd770b841dcb49c49ffff001d2dececfa","010000007a406ce11b4900eedd7523b4026b67caf88a3be0cf54b2d76a0b23d5000000009f2c39da75a179c610441db6d59d431d5ae41d3e133d18609815dd217e8e0fe4c7b79c49ffff001d262beddf","010000000cb8e0799b49514d9c28827c58e951835e3a500940daba1421292fff000000004a416696e19e9965a5fb59a9ecb0ad2627e4a2dd0adde0b4c9b5d3f11fe0bea3acb99c49ffff001d39c8645b","01000000ff0fb601552ee69c0ff18933a11981d6c225e13cf6b1aaccd5a4c05400000000faf7c6bd5eb029dc2ae00ba4d7bb3f7742c3bc6e9ffd14a97c98d8be3366fe5fccbe9c49ffff001d37adfbc6","01000000ff25b374d8c81452ae964611441da7a240eff2f27c4cc68c6d1bd0dd00000000c1da8171fdd8253247137a8b9ec613238e4de34672de70c70125fab38bbcd43de6c09c49ffff001d115a5e08","01000000a787377175bfc8c266c58dd7b4f8204ec0fe1751f1216e7e990ee61a00000000a00632b40da7ef43ba021ad3fcf3871cee8a97bb04ae4f71e208eda6773bf6fabdc29c49ffff001d1b17c381","01000000ef26e3f5237fe0a6ce69ffd639086e87efec6480ab5b303743dd140c000000000a9b40921185b312ec06f13712a5ed4e448e7be16b6db01507123cc6b046330ceac49c49ffff001d19c1e531","010000003220e7f7ea900f81e57d17306e1438af26639a52f3d3ce001c3bbf4100000000cd161a5372f505aed801f95598a7d3aec87a9b3903539c4b37472c0b721828ea07c99c49ffff001d7925580a","010000006d88538bdb91e6c2b86fadfba36d80a5dcea3d8f3ab0882d83a01d09000000001728a3128e6a6c163cebebed0503b51b777526691502b0eebe16cf1d7cb18c0987ca9c49ffff001d1db4a239","010000007fbfbc4f95a3e1d5927781eb92aba1e610a4e5ba30d4660dd7a397c0000000005532551041ae43391987453f695730d155ea4866c47294cd48df514b21a464b9cdcf9c49ffff001d03e86443","01000000932f7f63eaca14e4e47a6871b0063d33e06bf28e8a00d3d3232fddf2000000009fb01c821d3efcba90d98fc107d6933a86401ed65e7bc6b510cabe0ace7552f97fd19c49ffff001d1d82f324","01000000fe5b80998d4137b108599e905d2e075e7690f216c2ee8ded1a8cbee000000000d42cb10aceb723b9500db51ccc6c64dc908410ec799e8fd4efadd6b387a93f61b0d59c49ffff001d8b51ae14","0100000027262b7efaa311414fd02f02d4d2d4b6a96b029419c345f4ae25d96700000000c36aaa4561fe4c48fd2e96749563b46ce16246076f455279b382d717dafe2f9fead59c49ffff001d215d5263","01000000847888f3aae78488a3ec062dc65d497923711b26bf41c7d79fe7f979000000006c9f101338b436bf18309a525e2fce33fc2fb31816a889f6b88a5ac9e555cb8191d99c49ffff001d040a0ba9","0100000029584b6c1f44a252b5e3cd3d6752b23a18276901c5f8bd3c50bf498a00000000dd7005a1c4f86bb9f9622963d1f203f7040b88cb16feafc62378cd3f35445c8df3d99c49ffff001d2f12e000","01000000f28468e4b73258e8335e4e188fa95e90b00659d3c019d84888f672a500000000114a16fc8f93052b8f67e81f38f99c330970ae37ddd1baba50ff40238451c2c28cdc9c49ffff001d20c08541","010000000f6fcedaf73d4354989bf7ce0572294cbf71ac78cffd92af17b5e0ac00000000c4885e9a5600ea82f9eff478b7053ac6f2f71e43ffc62d6bb6a08788ae7453e933df9c49ffff001d260ac250","01000000095aa4e68baf35aa9a7c93203b4a6bf88407b49067e600dc498a894a00000000609a4ba3dccbfd3ccaaf9e3d9067fc8521812ede0369f25de3677c7da18b1635afe19c49ffff001d02d6049d","0100000088fe918d52d17136e99726493bcf91f3248be3ce1139769edf8cf4a000000000d14f02de51cfa2878fad1fb12520cbb26f2382c4e2674fdbecb76f0413d381b09be59c49ffff001d160c349d","010000007a4c1f09d9525717f2fef38022f94401f886918825b4f062eb3cea200000000091176796e6a2a1ed9dfb077b1554bc4091cd5699126514596f24b5fc54895d15e3e79c49ffff001db9a2b909","0100000014da2b30c83eb0fc30708976106077cfb0030cba1db3843182512947000000005aae7c07fabcc4b0c094360656d52c53bda16307021f02dc6d7921ebc2bbd31000e89c49ffff001de9797e00","0100000035bbb86acafe3ed235d9d337df6e29aa8ef85d8d60bbb33fd3cc0ba30000000043eb52843299a4826b90830c7e35203847cf447e3086a368d3257d602c443b869ee99c49ffff001d016ab493","010000000556e24c0fa5518271ed6c190eca218f3aac9d730178f82d0d6ff61600000000412e675b87870ad3e4a469d01e9ecb413ac1ad3634b7771f80b34324ceba13f990ec9c49ffff001d199eb6fc","01000000c57212432be2f50a46edbe11bd66e010479ecad3c38f744af19364c10000000099acb0629c275678d4f22fc71627d15a869823e1d45b49671e23673d14d4c44fe6f19c49ffff001d051775f5","010000003fd818928ce7dd034f34c19380cf5fa51e11933659d67d4d79ef61b100000000355fd6a715832f510066e34f6cbdfe67dc99790d9665a17c0ccde117db92d55561f89c49ffff001d30831c07","010000005f0f2dcc42e0bdcbe3de2ee0daf9d890b7e4c4aa678e5245ef2b322c00000000fb0e97de4cd219774ae2eeeb9422389fd99e5c5df0185475a5f38d9bb6d6fcaf8afe9c49ffff001d01832dff","0100000078e7fb61d077487143aceb5409e14db5e263a518fcf96e76caa31f6d00000000765956d5d2f6679878f4ceb36762472cdef40fd081eeb33c251e222e50c2d850be039d49ffff001d055a4869","010000001ed8341cc3048a0832d7bacf9ba7ed9a94be6a68726a5aa16613745900000000c24eff98a3ec01418b3fe1958fb1035934d2a5ba9ce2f5847074089c1d31c88939089d49ffff001d08f86874","01000000276c25c0a20d655ebfd03d4574f61664bb70ebbd4b26a160f610191e00000000c754d33ec7f0b8824dcdb450bc031b7f4815dadd9038cdb0bff57e71d71b6bef6a0b9d49ffff001d1f47dabe","010000006754ae8d93f21db76a3feeb3f71afcc4b1abab9308c09239849e188200000000236b212bb77dbf1f7036671bc6445fbadbdd738e2ca5aa519dde7aae1ed26e93260c9d49ffff001dae271703","010000003ec75d06651ab6a2aa76e8a9d2080af74be87feadbec506674d0432e00000000401a2a817c76482a19585f2e15ae99ff9d4fc9eb87684f7acf46cfd78077f6705a119d49ffff001d1726ce01","010000007730238fd3dbdc653dfe99f4e06104aece1e86750c256ac88f71e1af00000000a5a60a91cdbc712c053ef2c8dca6c19310a131913a65e122bf5b3b562ef1e28e10179d49ffff001d38ed9797","010000006e7610975b6953dfd7ead614eca6a4f0bbdcfbb4819de871f800b022000000009cfd9579044d3a82cf40aa77fa6d0f65b5013435add9640164672b5faaea973d73189d49ffff001d5ff67303","010000006c8e34583030413dc59ecf6b16f417c3a55c99e6717779162fbf316800000000cf9cb1830f1e33194f15c13ee13d066ab186d32bd78d566029657931630b8fe10e1a9d49ffff001d34297a65","01000000e317d38cca4fa2f0a6e8d19bfddaf0a6ec6206b06cd9a6a06d1ba94d0000000051678710f83344120c10c61205bd9851b703f13872680cd7ff9514c7cb029a95571f9d49ffff001d03aec766","01000000006a657aef3d367672ea5cf82d7bb15d05d0dbf06480f675181bf6fa000000002cc41773165978567376dbcb2e371351a8ee077c71356be373411faa6b65461e8e249d49ffff001d1eb6eac3","01000000bcab7afa2ae3b42fcf0a9981c6320b51565098973f31a2f3c050c323000000003586ac81dc9638cdb38535381b95b1148adb4f39bbcf5e0241d9506163c375c51b289d49ffff001d283156aa","0100000045ad81a6f39efb497ac980d65faecf882cd237f72fa87ee5bae8d32b00000000ad3be531e0654799907d8649bef2f817a8a5a9cef000ee1c957e71ebe03dac984c2a9d49ffff001da9778805","010000002a583017bcf4ec0f8160df8ff01a4d24ae04cba8f6735a49d3d63ea000000000fac42d0e5e31356a3583301ad09199486277c79c0caca4f82ba9db9a2d7e9eeb2f2c9d49ffff001d1d47d804","010000001848c798144b4665945c0fa1f9f3d9ca6c4a4715af315b6620072345000000002787d967b11f337fcb55d456ab4d755168c2f0b83e5e6d78630c6916a0f1f324f82d9d49ffff001d1da07cc6","0100000037f82ee4efc520894703cdb64738612f4c821af83e7959ed55830d83000000005820f2b32d0d167117a6c14b06fd50b1d948c3c4c6d4b09a2a25112e7d74f328d0319d49ffff001d787c880f","010000003358f5b8b8b91ee9137b908384461e517253ebc7635e4e6ed3e3f53000000000bd9fc6da778b8acce67a08163a5385e97b9af30c55e9caa6751c49d4a0e6222dfc329d49ffff001d53444805","01000000db9c3f314e60fcbd0c31513828b4c5e784c28e1d3f653d9e4005cc5200000000ec5733589bceb81afba2954ee156a47a274dea38fa9cb190403c3479aa7d82402a339d49ffff001d2b1d0967","01000000b280326a166276d6e9e0863ba7ed816f72f6e39c26b16a00e7f833e2000000006b6a51e8ce9e01ef4634b1729a6ee69372a5753e6e23ab624470898e78f791f672379d49ffff001d28202614","010000007f056feaea4cdaea6e573d4f2f3766d92cb183d601c9572954b252170000000003dfea085e92ed0a3e8babc5ebf9816559ace2b253b85d54a13aeccdb77b181bf8389d49ffff001d30558b42","0100000014e935ef4791b29a9f7c01f0c74ae977e657a2909e9f88ba4c1d6707000000009f9b8a19359c77fa9e9a465b5d7ecd65a93adc0e1de4241b42a60a4a66aee38f5e3d9d49ffff001db8a7ae14","01000000ef3541ead4ca632939ed7573ce9433650a369ddcb4c13fae28b0a1d300000000a560925c741069620038004d08f77d49798303dfb0c0855425661fd10d4326de703e9d49ffff001d36a1f4cc","01000000baa6b50c1905f511acefa0f5c81702fbd3dadad2c70354efe484c5990000000046d0608dfb34f5051b4c73254234a0a26dac4a760b94678ea4d0158ef047493aad439d49ffff001d2cf70caf","01000000752b5e91f391eabc6e79ad5e6270a3c5599dc4426fb9dcd5efb6a0b100000000288f82a8e2f442f80b1f679adf67a9fec56716a8277a72c665ec6207a7e0b4d143449d49ffff001d6fd43d02","0100000092fb98d25b016ffca83b1113480414e4c5bffa93bb66ea972a4c720600000000f89fedc65fa7a36fa8929549243a5d2af3b5ac3b3293c2b40731bb57c9e9ca4845469d49ffff001d188153a6","01000000c957a25ac7a4bd1ea07dc5690806b1f5ff81ee73046c0d90951616520000000037d5906bf389582832886cb72105c42b5242adac8cfb7e215cfe1fbfbd88c2b8d44b9d49ffff001d1db543a5","01000000db47b4dee5275ff3206a8394f1a5502e293093b7c72f9fe47e497027000000001046adbf00c1001f3cf68f42d0d5fa246129f4b4f01e0489e6a1d8af466d05e3a24f9d49ffff001d1d9a15bf","01000000d436e8b84b726c1e8a4d963c78ec4958e9eb44055d6ffa8e91087730000000007394ef921f87122d83d84fcf35da040308e7a6ee7f77f570522c4dc327a033a849529d49ffff001d21ba326f","01000000ff3c2e903cba8613337fb80f2fa555112f3870d84d1b001da5b14e3200000000e2319a2e2c5eb5e3467068b50edbae385f760c0143fcda2f40c68d942f0eb9b1c3529d49ffff001dd5ecbd01","01000000e0d2b06eeaa91f421763ebde805457bb2cd395c4684d274a68a4178500000000431a16254bf9de79d71d6e88079c425594a6082e778c1fa890ee8c95fde4b40d29539d49ffff001d66e30702","0100000056fa1bb0a4b5fb533b2beb5f6fe484ca44485a451ff949525c27492a00000000e606aaedfd898097e595756e82bde45178fd72a829e2f66e9f90cd424a24fb01c0569d49ffff001d2d661600","01000000ff9a4a80902d57cede9f0317ff5af29e17ca0ea85025e0d60e26783000000000432f2a5c9813f43d7a04eeea458b71269e3c1aba0cba738a6e2589bf9b3e89ebd8599d49ffff001d270fd30d","01000000ea0d71406a138fae26aa9210edb8566b4c8428463483ca308a8171c500000000707f424b6975620222e82de15332d9120cdebc68bf646e23883768d941fb4aadd45e9d49ffff001d02ecd05d","0100000001cb216e93e2754c89496ed29bc349649095a15a3ca21f7089f32aa600000000bfbed95c39f912d915b78ae7132964edc4d547b007556d59774bd8bf1a897b0b96609d49ffff001d0ef48707","010000006fd570ac1f2d0d7d02c24a3c6cef42758ca8895db2e2236fd5f0a4a8000000002e180b8650d6f909ee04ed7d26642ad90660985d3f038630f0f3a209052a4f6d59629d49ffff001d25b912fd","01000000f7472a7e7e85d93aff046e15590e1be6af2063f7ed5cda03cc062f150000000098995e62a8bf6f744792a1de6054eb74ecf782539dd744a2ddfa6d93a2441d1de7649d49ffff001d318f400a","01000000bca259b9f74eddbb9f7c52b1f2f3e1fab89db761ce23c26c27b42cf1000000005cdcb15af727e2231c3b4f6ff4e77e447b912ba812c79620062269a34c5459162d689d49ffff001d217a5033","0100000077b36dea246e3bf1d36a4f970298704651e034bcf3c001b807ec96a9000000003a0503fda942beb6cbcda087cd1efcfcb1928527a8e352dab2d8efaff6853f30be6c9d49ffff001d33776fc8","01000000bce3c0d929b12740642dac690ddf51fc0c10f8e8935a50d66598d75f00000000828c2f5a3bcefc777ab47450970f1609b0acc2e86537b49d591ec6b73fc9dae69a6f9d49ffff001d2e0b830b","01000000808c7c525ab48376027790f392067ed6e20c5675681f4cad304065c2000000007a33c450b29b44bb6442ea7b0ad98771ea4acdd6a9d59427edfd49ceade633c145719d49ffff001d38c82c80","0100000025879e4f4ea7ef3b51a3ea919a7f9c99c3cbb329cc06cabfa3fc6be300000000d49eda484749016cddc2947fd83ffd7e334f7bc111ff945c011c08b233d50187f2749d49ffff001d07e47da1","010000000e2d0657ec207c2e9d69782514c0ec2f7aefede2dc1ecc54c09499810000000090e0583519131b63c5bd1e56496a61e6ce70d0f9db5bdeb2b2f2b8227e75985757779d49ffff001d08615f57","01000000855851831fd636b87db2efb4253a11377b0c488d93fc8b1cbb606de2000000009d36f55db51396d7c304870f1457112268740089c4b6906bc56425293e6a39ee01799d49ffff001d2f8b5725","010000004db59a3b869ddfd150742ad226be1bd3e259035cdc3fa71a150b7d2f0000000086ba07346a07147491488e511910bd4efe26020939a7da563487d7504fae22f0557b9d49ffff001d043ba90a","01000000a61bc0ad2bf54ecb972471e8e275a3e9e4acdc74b718bf5bb1b6ee1700000000730b35258957ccb68f51ce49ef57767246abb6c4a4cb4c08410c1046791ab6c62c7c9d49ffff001d30ac21db","010000006b8e1d228aa4d4df01072ad44e7b39c503c33e29cd8d84983359b9d200000000fdaf16790546a90b3c40a04fd89e4d28a0ccdb437f1dd44e8c1f3aa3ee67d9a8747e9d49ffff001d2ef6d6d3","01000000e63d45c3b2fdeaa38fc363f6cb94c7907893db33e838ad5effe77c260000000040d5de98d906089f86d409f323ce5fda3f2e106034aab75ba2b84c6d45c5e7a06d829d49ffff001d2802ebb5","01000000a4af2dcdaa31761ffda181ab3f8d4b038c748f3bdf22f29126d088f1000000004b6b777894401d7ef26b0e1719458eacf0c770b57a6bd187d84d0b43927dc7491b869d49ffff001d87475609","01000000a4b8f99b060bd6b011517cd9f8b2375c425c57199c0baa4978d522f8000000008d82176f18336a97429eb8473e5e2ad54b3cdfd1dfd393f867a662d79d851cd1ed869d49ffff001d09450f85","0100000032f05b9449139610baa3120954bf54972d9e895a2b9fead4025674ed00000000046273faa8b8f6bd16817e6d654f30bb52bd8c4e9f70f33137a1631a2cb877350f8a9d49ffff001d33900d79","01000000fa6300204ccdaf8a486d56c71c26630e3bf6a94e7cabdbcec836d8920000000025032ebde3ec3b0f72d792d03647ad9704179d2aa9b26ef4f477c55fedc7e1fe238a9d49ffff001dbd783200","01000000c354e32115349912d3dfb0296fe7fcb97a47840a74743b26c65ab93100000000f1c61db8db75efdb488a123d28afc5a635fc93b8f355b7eed516f0a2247bc278b58d9d49ffff001d19a3512d","01000000a02c65db0b2e0497131fb97711434c4ce089bf8a03f112901d37624800000000b5764519f9edacf2ae30d1a05d278689e42e7e031e3bf1bc26fac115f5162a6a088f9d49ffff001d67406b05","0100000096ca6f12aa5cefb4e8be50d2dec5363ef5f82adea894b2712580321400000000931780c7698b8458bc0685d0776a3f7657b33544777313ef113a2dc04844e379d1939d49ffff001d33e6d151","01000000ff169366e040f1906fcbd3bc6d6d57fb67d8f7b740044bdaebdb45390000000088f32fba4e46d7c99e7e989144b2c4b92c672e099812e1e10c751cc7eb370dde09949d49ffff001d8a5d7400","0100000058166e21ac169b561e0a466a417d7f162c5d0d3eb12db2d60800850d000000006465e5924e1673733e5d5643108226e6cadadfc1933369966dcb76d22406a15167969d49ffff001d2fcf308f","0100000060bbe035d90b739c64877fd57889e95955c076a976b982fe71fa313100000000bcf4822961fab2c016985f775d1892efd5f2e38b50678c6f4aa390e90fb3918614999d49ffff001ddac1a40a","010000009697e5dcfadb463ae4e494e41620cb9cb5338b56c5a15b831949901100000000771e2b8f74954f7970900788caa158cfe4c41834f959c7e423b81fc27be0dff6ed999d49ffff001d0ee6a103","010000008d0fe86a0a9555b43e9dbbfe4599684d65a96911ebe21c9945e5fe6f00000000a7355e4c07edeaf215ec9f3533ac45522f0b796c85b0d8c5363172ee92f3e8923b9c9d49ffff001d26661a4f","01000000c7116713d734973d210893b1bdbe0e47aa4fe54667e87b3a6650014600000000b24082fc646a223b9baa732f593be036e4297687d724246ce0fc531e99e90fb1a4a19d49ffff001d37ec4fe6","0100000099473f248e43a19f6ecefe17c6d13df1a34655366eea26d2221ba718000000001e611566c15a0c3721de124068515df52adad85565815f87bafffe04e5b4ccb5a9a69d49ffff001d2cb2a030","010000008a30fe7fef6d26c60fe173a26e95f806c47c2d6c3fd0e23cf425e00d00000000ba08175d26af3abafdcc888e10c5d1377a6030dc74bcd2aab822d6c2244a6f3945a79d49ffff001d0ef57c01","010000009596608dae4518f25202c18084c824bb996a77e60124d2caa774dfae000000003ea4075a788e61b9523d991c6f3090530d226420a6d3d5ce201342d703660557e7a79d49ffff001d411aa802","010000009c0d3960240b1fe20dd1b6f2243c7246eea3af16ae5f5ae9e7fc70cf00000000159cc66dd261545195b15a58fe04ef270a50e2bbf5bdee6be9167a46076746d182a99d49ffff001d2e095735","01000000dbdceba053bb5f06ce5a0b2fcf9e514e594f7a83a2bf0019b9dd7e6c00000000e8259af05d4ef8fd4474fb7e9bdda6acc0fee82099aaa16e7537d3a8f6f0e03befab9d49ffff001d04652c92","01000000ac360d38ad2c49a2f767ff6bb55c7299f7699253318c03991ef41b0b000000006a2798b8cf526c7e6d6ca079cee1d8f52583af3f655aae16c8bad82c5dc5cf1ab1af9d49ffff001d2962ece3","0100000033512d974cd9933461f7184c13d25550946ad712fc81f5854a3c30c6000000005bdadcf382bff8693d11883484487f99633747a13246930576b7bbcbbc82161c59b19d49ffff001d30b7ba76","0100000023564a7248dd27240cae82403737c5649f0a0ca561b4a5d898d91cc100000000b82a0cc220f04f278adb3ae1a4f9bc35b95e8dd5c15f1c8f8c8c29ede1fc9328f8b49d49ffff001d0296a480","01000000a0ae980857aa321e1b6228ea3724eeced553b500e1172836aeee82be00000000eca54530c7a93909d5826246b1d23daf35591b46574f51a9375a4459eebcaa7e21b99d49ffff001d6ee37b13","01000000da8ea4c94b90b8eb4f1f7ed5949096ff81ba425ae7580bef387cff7200000000746e8f21c0624307abf5471cd11b9dceaeb299083e0e9c7ce29ffa52260e7abf9bba9d49ffff001d2031f2f6","01000000460a95a3960dd460e37537a3e44538cfaa55400f5636e0262e758d6300000000fda3f716f63ff02a13284b03f493c85d1455a784c0ec5bdddc5c485443d4245fa9c09d49ffff001d2924df50","010000001d72ffab5758708de2d3333fe6420c58ac910c4e16c6c474c088a4cc00000000987a98a197471fe5b9256c7882201f280ca0a6b55f9c2f3261a2675dd3cdc25534c59d49ffff001d38ee5462","0100000095e973bfae9fc353a372397a2bd2da1699740f70c8f0ecc72376a13300000000c1d6cd221adaef6941a2575649cebb31899d19bfa333cc865d2442366d2094a561c59d49ffff001d53664b00","01000000ca9bf79122450ad8b975af57ceda4925bcddca3bcc6f33e6aebeeec800000000730de1a9755af7c373776bdd15b2e9bd13c784b4f6553fa744dca78d3425c62bbac69d49ffff001deac31b07","0100000064a11b3489bbb488be248e84e57bc2d4f8cf33dd4ddb017ba30f239c00000000ca603f9063f217a5cc567222a4a4c3bc187a7f1d7ea2b02046195b8b565d134e99ca9d49ffff001d30b271ca","010000005d12bdd477fba8977f283c4045acc5c83d6e9788b05a0b6c79506b16000000005ea95ad0b4936b9334c243ac3e91104fb17bcc441b866d6e9095c9d912104e5fb7cc9d49ffff001d04bcf472","01000000c1369426c224f33f3a9385e9288d6c994bc6817d83de903dcd42a9a500000000a10c69aaf01e97b8f9cae61604f19d8b6020716227c7fc1fec2b8bb923611aedf4cf9d49ffff001d4f2e950e","010000003b3c98425394aa91be3b625cb96df5686667dc6ec67b32887b738d8b0000000039097e05dd6c5ec0c3520efd8de7b3e4eee439e93e118eef6de0e97b6a81576982d29d49ffff001d2c639349","010000008afed99065977929913399cabf301361ed380501315d12c16c872ceb000000003686995c4c14025560a08603f2d46abb67838a09200a91c01eb9a63d04e279da29d59d49ffff001d0725c8c9","0100000018e3dc049d96ca3f9a2174dea756c103ddb3883aedc95032dfa8f263000000001c98c30e8b66752d886d99c8a61fc7139bce28c2e232ebf3398108731db9c11e77d89d49ffff001d32cac50d","0100000014f710d3e51432c86dff89d67ce08f260b7e10e3f56a9b83ab81c36700000000baa23b0f8a525decd5a504ceade0d8edb90ca2651a2e4554fa2f8de12ac9adbd12db9d49ffff001d1a0e0254","010000009b7f7077f17703f843072d7ca9e438b9ab74daca8b2d164e057d832e00000000132ed481cdcfc31659d26264b425203dc600b19d6c32e077943afb93a8b18d14a3dc9d49ffff001d1b1809fb","010000004fe283e8d31706574868de38a2505798581323128ab4a9b5486d8cf9000000009d7e6fa05d2be510909a24e92f3acf3c9a9747e563264a6d2695468fe944f859e1dd9d49ffff001dd8ef2e05","01000000fa41fc10917c2e903c32ad7f77181741ec9e223ac1315f399003170800000000163effeebb6aba958537d9f546ac30ff9a1af025aa76a4df90a0b4f5cbe3212035e09d49ffff001d2150602f","01000000696b052a7fa851166ad0162b851fd784b78e62b88d09fea259aa281000000000d1824eace394b4b246454cf591be53672be3c5c255f52f648c19f8639b9e657a65e29d49ffff001d0323fa32","010000009d282a1eec9b465056effa2cc022cbb4da6ffe4fd085bd127f7fde8a00000000a9ee4fa1ddd0183d333a05de33ab74c406c5b8a291235c242707a70da070e55b5ce69d49ffff001d96471a12","01000000d3c8722169216d52e963364701eb60ac40f287953ed5c0dedb468fbd00000000a6d4cf4293d27b6dea295c0f3c3b0dc1de8fcf8dd2d081c7ebec2b37f2f41ed4d3e69d49ffff001d1541f8c3","01000000b4e208db358b22dd9d4cf1b409a99a8457491e6d120d47671d192199000000001f9ad392360a88510e3e0c65031d3a73cd440b5bd5723c83c8ae680d2581ef42cde89d49ffff001d24de459b","010000003a01ca4f58ff6f725dc86ffd938037f7dbff1e45069fc9cc4a87179400000000db141e92e89bbfdc60d58a7d04637906d47ad8664ca71ab465240e6ad04f886bc6ea9d49ffff001d21c3e507","01000000bdfab5e5a5e8be78f810e052664445d221fcfab1460a04a554a7445800000000c86ff24aae82d80366930756c864d161b88a7d91ea5a93390028cfca1d5653fe0aec9d49ffff001d0049462d","0100000082a1774c718543fb65c95dab9e70ab077e95825ebd865d13573ddcf80000000094da7468fe64540e58ea62f4b8cd03e8ec24d97ec0938f4f47db183fe906f5924bf09d49ffff001d331c781d","01000000de5d5080aa77a07d3f8529fe2fc6afc97ed6da39651c14ad073f60c200000000843882bdc89697f0815b07739a1afd07035b36452f1d84be57d29f63fc402bf422f39d49ffff001d0043b386","01000000b3836b53fb4bba125dd550f07d1799f70e1527035ef7c288ee179a0c000000002a7166545d0fefb34f6762679274141e955e6a08b7a6cc389f0a8872f129578a34f79d49ffff001d15ae7d60","010000000a8768703dadfe777066bceebca4b5893f64fa8ecf8e4ca72a850a7800000000101e972dc955ddb4768bff11991796332af3d2b2fa83c7c9c85d7dee278f09d4d2fc9d49ffff001d2efdc963","0100000090fce0591f105348338bd21796e1b1ca1a565bbf049b735bda43faa0000000000cab34519f5e3c6d37a1d02abec34573239064d19f50d7b82e181bb35b0de1f0a4fd9d49ffff001d8aaa0502","010000007ac7865f56a821c4846ae19cb9eb94ca59c001e95e5963ca250f6b69000000002101c0fec4d36e6a5b481d107c61d5b0057b04aaea65c23c3c62c66226eb94b771ff9d49ffff001d19c90ac6","0100000064e5ee5437f791404c3d7d8caeb0709d2a3ec89003c8308652791e6400000000d76c5a9cb67aab80d535147d42175a71ea1fc5cd34b19e722f5ea2df9f5f8df54e039e49ffff001d34edb60f","01000000dc74b3a75749ccbd0052def523a2a7d7e5413907685c33f9bd4d356c00000000af79ad37eddec07c9e06606de771e5b25f39cb9332ec60d6fe079b08fa90aad5cc039e49ffff001d226965ea","01000000a08777b51f553c5a4423375900537f25ed8e182cd1c26f6716f6e9e30000000046e19865ea1b2b6d33103831005734755a89e7b1e13b0f9b0947df65978b84bc86089e49ffff001d2ed31f61","0100000086dc7e126b925729ab1f426c58fc99ace510a0049c1cf8be532fefb600000000770a54fad862cd4b46ee9362f3fe0b31398f71c779285dd251296cd565727ac4b4099e49ffff001de41fde02","01000000228d702c6d052cc105326d9a6f55289f748533b798b81c63ab951ee7000000007a634236f7f87d34d62cf98479ccb53be0e035885b366298a416f4afabe1517ace0b9e49ffff001d1abb39ae","01000000679d50d3a0897b1fe72c4c6dc2747fb9fce783327e4249a52d4e2ce6000000007960d75ebfedd44616e65c17698001eceb2482fc99782b822d17ef606d013fbc2e0e9e49ffff001d240ae8ce","01000000c3f553107180c5b7829951b170a5979c9fb41e1a6e52dafb8e4839ff000000001d73d34d59cd5de04eea2049c40c53012c5671718490624108e5c3a1c36829a19e0f9e49ffff001d234a062e","010000006cd76a4852a93892950a811f81eac01aecbc0c202d7529db54edc934000000009aa9cc549ccffa17131edaaa8c8f8b8cadd902905e28f20919447781a1928b3559149e49ffff001d049779d9","01000000ca51ad9149027cf8b6118d964a1596860a5442ad47f9d6874fa7c6aa0000000083338b458cf64e7169d77f951cc3b4de30896ada27e29482d8c050dc552840c548179e49ffff001d2a5bef1e","010000009b84035cc471dd55428fa0427601a3d1c72bc8b9a7ba368011b936af00000000e2c9a851184d3da84f637f6abf2d074540fe26ca06031d2ef4b54861c9e4fc7ec6189e49ffff001d3aa3bd03","01000000a90d234619b825d369c467d8f3dc8d1bb80897a5c49769bc0a14bfeb000000005bdeef46ed20839f9c49fd3c9b45318683588e12b7085b33e7899194ff950c88831a9e49ffff001d34cd655d","01000000b7fbca87766addf9ba3cf6ea63e2a18dd5017032d4e4325cefec783000000000bfe50b29633881a3d7e350547b41149e41215b3694c7602027cf1124093625f3f81d9e49ffff001d26aa14b9","01000000e436ed3c67a73ff04a214b355f6549ed7ba7fb9c63c9b97c20255d1f000000009ba37d0ee6f4b879fab9f625a966343cea5d021126af2d5f4b93cfc87a381753eb219e49ffff001d2bddf1ca","010000002ee2312663feebdfc0875f2eacfd45da5128aa3be71d1a764224b6ca000000004ecf5e8672359e73d3b019eb77ca8530ed3d37d56eb43559f0178fa7c1733ddf48229e49ffff001d41035901","01000000a9ae993f0a0a53aa8d22886512583d97e0eb1bd625bbb6a793222a9f00000000cc02857b04bf83a236cda948ede962c681e4f2700e4adda52324035b2ba507d174269e49ffff001d32f6320a","01000000923a8ce63c03eaf3e64f81fb19c5182aa01a88356e1baba5e0dcac4300000000672647346f52f49e815ac78b88680924c8269fae3ffcbfbc0609ce4146642fa5062b9e49ffff001d1c38b219","01000000dc5b60a78bad7e78ba0a6246b5e3a9bdd1cde3a0ec73a8b2559ac8c900000000d45dd0dcf3db865e5872219dbf3d891706b62e7e4af66a2fdc2d7fd63a95cfb1782f9e49ffff001d366b0cac","01000000357668e37123090f3ec608e964f52c80e2afc935fef6ff57611dda7300000000714f3e780c0171925e2c5102de2a7b21140033e4281809f0cc9c3cc10315925d1b329e49ffff001d07623b47","01000000a8b61c42a07a0f4c3e1bc781e11d0a6d86b54d8809265ff1f3babea500000000ac6bd507e308e8d16a038124e46cd03887aeba9f61260f36872c5018a13a88d8a6329e49ffff001d56b80902","010000009f0327c5e507df6243d7bab977f16f7a9367e63d23899c1e4aeec6f90000000096c664eedcca7daa04f8d239c17ae37bcd1e6a21d2ed067aca91c20e0c847919fc339e49ffff001d2ce8ec90","01000000c387af919afac0a38c7821b2362b2710d4a100e57dadeb4d2226521d000000009d95167da2a5666163a1908188d67d6e88c52ea575b0d4a35ec0cc35e312ef6886399e49ffff001d6b250e0e","01000000f8092ca21f76f42b33dc4ba9ee394037266939de96c0d28e89a1c76c00000000fdf2a13a08d78fed8d04f7ded7c3737b2ad9e111db53fc0c094ce9de0557f68b023a9e49ffff001d276b305e","01000000c306ff8fd84d28ee50f750de9b1cd0251ff4bf73f0380f659ec73273000000007e6454a9382d0367f7cf4b3c59b941c07119ea965be94e260e72d63aae2e37350d3e9e49ffff001d331d8cca","01000000e7067bdcf78984bad96be1035a28684ea3a60b8d456911c6bf4194b900000000948c842e2fbddc49d2ede50b4142140c271e6447bf8b98ba4316941f30345f0ca8409e49ffff001d90d4090c","01000000921ed2e841b9229675fe3ec0092db5521944e5404f44e622876ca25800000000c0ea30c4b3baf3bc0bc40cb0596389271e08cc690bcb9ae41cd92e079205b7a607429e49ffff001d36fca2ea","010000005ae44393cac6635546925141f9482f4bfef2a7234a464693410aa97e000000004a9d46197a38c589800c956707323ad23c7d051048fce2fbfbea8b37268b6d9537489e49ffff001d2ec7661a","01000000e636b40a8f114796f4f676e45c907ada4da69fbd44016e8f8bd302c300000000876e7433b45e37ae832ba24941c6e85511c1149e691d14a3cf64977ccfcb4a28be4c9e49ffff001d34eabe1c","010000002fa811a6cae1ea64a69ab0437e2679c6a5a8ccc54c2111d69bc5d8ab00000000cce30b83e8613d86952abac58ecd824533f4decdf74b2a1f5e5c0c3339d2ea2f824e9e49ffff001d49788808","010000007a4738313f8af1884af8a74daa738578527f7eeb5773d1d78fad334300000000ebcb2aa8d8b40269747fe35bfa095a12fda809cef7e5c97a67d3fe0bab82f0999a4f9e49ffff001d04c3fa15","010000004672cf9526c2ce15432b6044e48e3ada0bd1194269fa96995e18bf2a00000000a87a6fd33bc7d630c72a208313ea796720bbd79a1b8e53985f52771d7548f9e621519e49ffff001d08795507","01000000c8953632f24c7e2b4b0d35fa31412f14a970565935ab719285b78b7300000000183359f87a56bd37f182f3c792ccd3ccefe17141ead01c68f2deaaac8d24e34d16539e49ffff001d1af5e9b2","0100000061bd0142b5e0fdd8972b150529e2409c35a9f18cf467881e999bcf050000000068d52c6cd799c65013cb764aa6896dd11d3358c2f18fccb910346277abe6fac115589e49ffff001d13fa9e17","0100000070acc839d29667a3fe7223438a695024bc6445a523d6e3a8d7a74cd500000000728d8c0dcd3ba2eb797eaaacdb686c6e22e2933bd15ae7989a01e482c1dfe405ed589e49ffff001d0822564e","010000006b684acc4fcc5747cdfcc3c7d7c730364a3801607bc69e9f0fc9671800000000904153bf7f50d25c5c37e2dd37d0a12b92f9b4bcb5a85368fa2497b89b0d6f85c45b9e49ffff001d2910843e","010000002cba11cca7170e1da742fcfb83d15c091bac17a79c089e944dda904a00000000b7404d6a9c451a9f527a7fbeb54839c2bca2eac7b138cdd700be19d733efa0fc82609e49ffff001df6633903","010000006109a97ed3f56ea9baef763fd47c58466b3e9fc8d6d2a5950a446a4f00000000401a8516efae3ed86edfc733a1c151d0430891b0fcef63646f69ae1170e6b91ce3609e49ffff001d37442d99","01000000ddc66d63545ba54fc9e31254decf222ab0f6c37dd1103da144d6c6d600000000f200c560b70cb6b2777abb7c36bee28aa9e9893780e8066455f962783fbbc17a08649e49ffff001d02d074ea","010000005b3fcb9898e98ff2e726b7c2218dba492de96730de26af4176ba24740000000023a90da5ea4e8bf3c5d9508d07bb6c361e4352474639095be037a4a3acb19317e3689e49ffff001d2d5de426","0100000052839feb23f5b6566458870df8a0ad084bbbfe767d784bf2dab99995000000007e4c64a8ff37dbdc9af6b6281971ff4bfe68e1ce8158d2fdcde2cb85a5d2c1a2606d9e49ffff001d640b2215","01000000bdc853af79d3210a72ac79c3d87b46e3363e6589d8642a136a8ad7f000000000daaabd7874ce4365700c285465b59743ff68924aadba0cdfad047e0bbcee641c666d9e49ffff001d1a19e152","01000000c59a9ef255980e59d19f5322ff6f8cfa1bfa2cb829e8b7fc630b2b26000000007a36df3c86b5b53f7bc5144aec37ba5743953d99a4b82884655c8ce81c1523c3e06f9e49ffff001d1a36a7c2","010000004cb50e7f916fb7a9b3c1316664200706be2ab9ce96b40a04a1206a330000000039fb352f246ad36249cdda242c9ee329486e02547b81f1f5fd904d94265d69624f759e49ffff001d1b8d97d6","0100000073cc68d97d862b5aa08da6f2734ddd7344cd65f0f72a986e4bb229910000000034bf84d3505bf1da38c64796ef8a7eafd1c1edab05fd9fd367ff3a7456e886b368789e49ffff001d05fbe62f","01000000eb5d3ca42a4618e87df776c71ac9a45c4bce0cef5224d4932ce0e3b800000000c375a2118e941895cb3cdfe96bbf4b19ecbadd74d9911e0d21ac746a792927522b7a9e49ffff001d601c7f08","01000000288bf85f04f6e0757ccb6126c50a70dc415ce38bdab366e1529a89a400000000042c4a310707c1ea98588c9e6a0c628d4d22bf5a8afeece0125abdaa747de703fd7d9e49ffff001d0529ded9","010000008f210df96b2a65c38de397fe15e6fec03d5151a0bc9cd419f793dbd900000000f56603400e3535dbb1b2523d3569b311b165e0ccdd760417470177d62ec3c6aa717e9e49ffff001d4075cc01","010000002c3f91fe479a887d3b78d50f8c9095fb7a2421c70360b19b19fce2d300000000de8993291497c312cb0fd23dfe01bcec9cc20b27769a3c5908d9a83de78225b6d1839e49ffff001d088a74c8","0100000086dc031a847dc79c36b9426a42816685edf4878d4f38d2519a8b3a0c00000000486086f51230e44be8edcb47d665bc4b70305fb47e990ceca7eeed6d618ee1c8e3869e49ffff001d41bf500e","010000007c75b9bc487af29eae21b0f4bbced3924b86df8c2dd485072dbda3b9000000004020c7b56d46af42240da096f3728c00fd8724dfb69104bdd92bd84c39011fadac889e49ffff001d2d71face","010000000a7ff87b6b76b3cc639690ae4dd4efa1f79534cd60e2e0089b071245000000004ef29fbf7039f3bdc37a9792eba4a093af36d0005d59e1d37c3c824fe286b2de2b8b9e49ffff001d027786ef","010000002324be987f4bd6a827d73dfd87d47a78bb00fddd3ac652ce087d8b4a00000000adc326959de7ee931f87b2522618f17ae0dbc209609a568343cf118e658a1e8a3e909e49ffff001d1d0e7110","010000009e07e838102e3be1c52df465a83415257eee19846dff47d00b93b52100000000699865d1004e0895b9f41e2ae2bed463f054acc0294bbcbe150d112bac7233754f949e49ffff001d3923c855","0100000073d9c1a2671201ea6a2c3d3fd97e11fba62a527f0cc8a93e52d0612b00000000d9af14500f6b32977d169652f4d43edbed8e636398d54468eb59fb4df1ecad9360969e49ffff001d34d56a09","01000000cb891532a3e9a0fd7792f5c9786c3a31e537151a7b367e565f01c96e000000005187d19129b2a55a2bd7e7c2b1ad75cee2d49b45eb19cf65636b1c922e671b268e979e49ffff001d2888cd92","010000009a836454b6c903b97440b6e50e7f5c1a5b2101204b0d04d433122f8400000000a4dbdbd586c18690f569f5067a47632c455ce6083eff51af5a8c586d09ec33d772989e49ffff001db8487e03","01000000cf533f7da468dc84b01fb3640e5301a323b60e3767e52da0d7fc2b9b000000001f489b62232de80aaf03bc049eb614e8d0952829acbc51056be9b3183180393a42999e49ffff001d23b43326","01000000d09ebcc16f8dd15e63baa57416ea89785961798eafdebd3f78043da9000000000c0255d0919b87dbe4281df947d092c4c65afb1bee8c58d2a50c37f8a516cbe5279b9e49ffff001d007e6d36","010000004b3774458f76f632a9b6b196416b7ba59224fdccf1e5114877e0a87c00000000e38c0adc91f1bbbe6fc2ac0666186ba7e31cf90ef51f7507edab53da8374b30c399b9e49ffff001d112f1e00","0100000020809e53fb40bfc309060b65a61915438213a7f6923a0bfc938a7b5e00000000486a8ad671710d23962edc7a567b19981fbcc4bf9441fe0e0dce471689bf4246c09d9e49ffff001d2ecc7f41","0100000040eb019191a99f1f3ef5e04606314d80a635e214ca3347388259ad4000000000f61fefef8ee758b273ee64e1bf5c07485dd74cd065a5ce0d59827e0700cad0d98c9f9e49ffff001d20a92f01","010000009d5982561738a5426ee83d0e810c3328b539f287f60fd3e1533241fa00000000c32a5502456399448c1f2499ad7841844c12012305d67b505f6ae5b2113d02f885a09e49ffff001dc589de03","01000000a0a46c97eed74ca5e78d9a7bef15d4fdf75a84d2eb3f931c38d2da6d0000000004709671ff81e6bb2fef8e6fdfd7ddcdbffc49c51e1249b85916344c3bb881f225a19e49ffff001d36736ca1","0100000018a888a7b66f363d693dc327389b1f1e44ceda5d93da220d329aec390000000063f7e34fc65cf0991004554401ca4ea21467736000e994b765af6139974bceaed9a19e49ffff001d83729401","010000004d9eb019f352e41f606bb459175190067ca8b31ebd74718ef3131a0d00000000555ec907c2b036ae9cca6b3fdd6c7770fb9820907735c43e62398b8ec2e464e1d1a29e49ffff001deb301504","01000000d23abd57f2a40428f0872bd4ff6d7667be445c9641ba5820460ace7d000000009e2e7c446da23e010910c5bcc3cdcbdb088517c7360167db83dbde4b31aa128f8ca69e49ffff001d3813cae9","0100000077d01c575b0b6712a1d2964f78d5cb34cc507e3a330399784f8c086700000000dc41b625e6e688683d9ae203c96de8cf15aa9e18525cbef5bec9bd882ff5a68600a89e49ffff001d2cb2b54e","01000000cd8a23702e87cc6747160f2a45d40b2d30e9ca3c4f3a32e770cea27600000000aa581d691d0facdac6018821f3dd013b77fbb5666e5464f564308649fb310c6a7ea89e49ffff001d23614602","01000000b198fa0de65d7ef10962bd3e08e7376bed88726c312ec6e7c47baf9700000000a536e81a92fe2b5a1dc953967ac0eb99d0af24d380d36fd0a47191c6e95ca1a2cba99e49ffff001d915f5202","010000005806beab9baf405f978d03deb3eae6553303103eb006bf8fa11ea6c9000000006a4b133ed2b4513e52036dafd2ecf85e61f7a92b7a15d87bd037177e9285e5b097ad9e49ffff001d354a95d6","01000000f9ee26e2577d65807e1fb5d2eb0b696812724da2201d3aa9a8d2784d00000000bdb1651f4946d5dcd06685334b1280a214f0ab3af8d0dca56b9a2a29a9bb75096bb09e49ffff001d3a509f98","01000000ecc3f0ba7a3d7ffd051a34512259186f52ee885a6fa7d78f65cd4b280000000032d1d8946549bbaabdfe4b5e14584d6de3836df9d5bf259d0b9fbd78a4f9aea089b59e49ffff001d1e539e4e","010000008c0cac6b6ad3ec27232c91fddcdbc0183a59129fa9e18d90073bc95800000000e5fc7f400b1f7d3b9b36141b7fb2912264b665399f237009f435754a5afb0817cfb89e49ffff001d34c0e51e","010000003245920c6e06fae1d30295d1af409c6e3300b55d61439e2de15a364a0000000072867c7a7d8b03d371d04c11aa0e1c224a5f570e61497f569c9b03ffddd65b8720bd9e49ffff001d3018ccb4","01000000016f478797fdf16336a6e19d322fca1c542e6a3758d71bbb57182e420000000031fd287b90a403e77061132b24193f5d673acc36820fdc182ffdc5ab483fcd23b2c09e49ffff001d9bad700e","01000000b7cb8522b5c678984fa1d137941cd694937f036ac8dc3b7570ffe1d800000000aa45c4d9be55c6b4911cad270bef04a01f053f625368a9e7e9ddf7d515176f116ac29e49ffff001d015665d6","0100000038740801d5a3b28a37649b4fc565facdb026da1518b862569e624594000000009d62f20cfec994f0813af29a0a16d4c23b2d1cd9ecbd57bcd77cc62b6df015f288c29e49ffff001d9e351b00","0100000023e8c8a1ae14b1d0342dc81f459431e04c67b5347ed2ca4d742c2e2d00000000c68e6fb9646af058d22ba4cc0399719aa1adf9cd7838917431a0c23861915d258cc39e49ffff001d930d2704","010000009fac5e5c59a857a714c3009823cecadca56e149482aa44a387dbd4b3000000002b4561f8ef4e11b909190b3ed238b3219c8e3946d98d9451798c3f5f3b56f9e108c59e49ffff001d169767fe","01000000a9b1c6d1770d63ee83ca3a585d0ce8abf7ae7a9f0db808a1d1b502db000000005b3f40be48c3a62f8fc2bf6ed4330701cfc31fa3ded5fefd46625a13efaae767d2c69e49ffff001d2490ea15","01000000902ce4a10b83ed342a97781ffa68de53fd00dc3563b3d2d6f1278970000000009c5971dfe405196464ac1a8965ce51a9158c21649e419932d69284f1806a832c72c99e49ffff001d38f4d007","01000000bb3ff6ec75233000e1c2e3dbd9dd37bb8ab29a842213378ef2e035c500000000c30aae184bc2cf9731c6e31f867de66f49e6a65dcd4b270b8f526862ddb071f72fce9e49ffff001d33cfeccb","0100000050220c8edc4eab25446b7f692fd2b8fa9f103972dc772b64756b68cc000000004ad2a57c75b5eb5161b141c8b92bfdb49ba69eaa6fc3466395afb6e55f93fc0025d09e49ffff001de6fb6d09","01000000c30693f5a31a928453e8128bfa26b4329f1bdfe1c9dec3f4d427b48200000000abeb85308c74fe94f1c754ed40c4118bdf510f478c26e815914dc5a550388814bed29e49ffff001d357a6b75","01000000dc9baedcd34f024e492ee5ae51ac02fd0f2a64b24584b41d29ed9d290000000084cc3062354bdbaafea8a0dfebad0790d37eedef8272d4c4765917dd23c4f32e79d69e49ffff001df4f03006","01000000febc1105b24e084036faba38d23ffdbdac46aad6f808bfd6ad232f33000000005755e505bd1cc41bd7b3d84c4bfb6406d802a66d78f16949294bbc7f45df44371ad89e49ffff001d17989223","01000000c369f32a97ed6a29d751df9992dc664e0ab9b2cba9924a69d708efdc00000000b6b30cabcf5ebfde9efa6d44d32f09d715c01d55d2c7aaccff192ddf0ca6883b4ddd9e49ffff001d1df9303b","0100000002428535c2a644ca09f2d45e27b763242155f924f7225c7b1dc26e90000000006b06389179f68b875e2c2bc075ae92a13417c587cbe25ad677dc962df94aa0d11ae09e49ffff001d2b2a2ce1","010000004ed7f74558c81f02d03b58439bf5be4f1f64cfcb69f0e4b4cc1746f8000000002523ccab90c4258849d492ceb9f7a6cdbe16a7135f440352ac0d49ed43e968c76ce19e49ffff001dd5c02406","010000006669da59bfc40b3ff5ec52c1ff248ab6ea6649c51cb246275cddc6d1000000002281699a4d8c23579a1f3162a7cc7bc6fcab4148d0ab53c3b3bf61d8f1eef10934e69e49ffff001d33c996d4","0100000076dd6f4ea0094c0f438937b0c0b82b01315e3d6e7f5d673e0d41ddc800000000fabf6b6b041bb9e2285d5ce831595ee70deb0e59569f16bcb886c08120d7fc2bd9e89e49ffff001d2b62cf74","01000000b359e75571f17150be6dfc1b972860d2b9bd8d50576fa18ef307dc020000000031773f773865567d5f17a2d4691f38a8b38c9c5f02dd9c0716792dd4bc64163702ec9e49ffff001d24dd2362","0100000023f6efdbc7ef87641606fddafc716463af66cdca10dc25098d5cec78000000000369082618bf0cc9e4b9dc180800a0e5055f568b5a25d71ecfb25084a7ee52f8ecef9e49ffff001d2d261b78","010000008f0a0be2ca4f1f45bb6d73798fb5b9547f0c8c292f0452d0973df2bd000000007b17083bf4d430b84bab56efb9301ab090cae0fe96beb632e628e3b9623b54f35bf49e49ffff001d1fa62700","01000000bd34e621f4378ee2edcc4d0711e3f370c246dd6fc9b9b422a1109dbf00000000302407291afa921116bf93cc9447b4d279dcd5e9115f4b11facb73c82b9f7f885df79e49ffff001d05cfc91d","01000000f145ca7c674a1a5ce4f290fd281e3d4f4e41d2755a1bdfbffcb112f3000000000c8ee53466804b8a3aa0259c221dacb75413b73e8ea6bb80fe91d146d2100b27a2fb9e49ffff001d32fc4bb6","010000008491f71366fd784bb4c56afcf781496210999b1c67c0694a442a51c400000000b73af3203d00cf97dc7e6b4db39f6d1d457e246d82c4641a618893095a7fe356fc009f49ffff001d380af1b4","01000000dd1c24da5d780a655eff8b1392542b839a46a6aa41d378b642294ecd0000000023e5607f821da56809176366ee42969a24e134f468aa23ec43a1287548ac0b02a6069f49ffff001d19d505e3","010000007c90194670d75d5d141a91e94d56aff01d5b90f7490786e9266cdc1a000000001a2971c79fd24f8b00ad92524761d3ede78b37b447e635ff48b2038eb3e40ffcce089f49ffff001d2ea8e421","010000002727d81a0841b59b959a7965e1dea7b031f1a51971b1a468c29a73f3000000005a0e36ae5f873ec02be3ade6260d65fa4c469749e7268175268e7d2052d6dfbf55099f49ffff001d23712502","0100000017c36d25590011653f3609a024728176e901fac21ded6ed6a133b1d300000000c4c8189599d7201496d5bad9903b0bacbc21155932965e7fbb204659cb885f9c8b0b9f49ffff001d3407598a","010000003173adfb17bf7f091996f23892cd834d52e44fc20b2c7babc60f512000000000811fb1d45a97c524f8dda852f74f8caa4cd72c696a35971a398dda7f04a4c3c50a119f49ffff001d06c42b65","01000000d0eb15ea9633e35c6d9aa90b97eec5974de75fc19cf660ea6b17f95f000000006a311fc622d1b16979beceb0c7cd920778d4575b86031989d650dafb95c16ed00f149f49ffff001d08ee9d5f","01000000ea9e193c2073a67bbce40eff7412c288eb89cb39e863b89252d0f515000000009e3b503634ae44740f2d1476fc3f0fd2dc61e53fff3c11db8a7d21093dd89a75e3179f49ffff001d0013d311","010000004259269cf129ff4a82eaf5e9abc06a7bf5e4f9fada8f2e658e13851100000000241f2033317e6f2f80c6d3fe83fa88d14d1f43e224bfcf08fa72cc49002480ae61189f49ffff001db6f25b02","0100000019fba70f325d0de3a274e17fc7f2bca1518a8d972cc831fbc64daa6000000000a4143c33c5d7842e545418d44f0c83368ce965ee368bef6748372c2bebbec808ca189f49ffff001d36361bf6","0100000086998da91c9a6c44d57853309e38b6890df06fee71c737f798e0ac1200000000519cc43a7366359dadfb789ddfee65c8727e6d0d749dccceaf3bf0d251389e87741c9f49ffff001d1d010f0f","01000000ea4c4b5e589191c2d81e0fa3412b463f18b6a1b9f0ae4ad694710b0400000000cfdd03d7b7cea6574dc5de3555e912f022b8e05f56624275c7b6e759994fe84198219f49ffff001d37f89946","010000004fb0dda2f86a7d908a4b86a1e0f783ea48b2de03420d344e7afc99000000000054075b849180fdbc394e7f068410feff03ad2fc4a08e815774bf3a6ef6b1451318269f49ffff001d2826c164","01000000069084d82daaa3c14ff3c9d74309338f53085d769f5772e4a300dcb000000000de730d9859188d61aa70d3293530fb440ad2bbe13e2e2ac548f2d72b258204f683279f49ffff001d30655b6e","0100000051bc9fee90e2b88178571b3ec514ae209b7bbfa9cdd11567c315a139000000001851d68ceb1b2d0ed4341e4dcccc9e1910fce3d59372f3b1a08e6ed837183cb6f0299f49ffff001d02794997","01000000e0d043fd05de2d286a2563ad38adfb3e2b38b1a963c803b354038770000000001234e37acafb9fdfc504e41c064cd0c8642ef3e7b75a10c0163b353261a54f0be22e9f49ffff001d1eed449b","0100000004de1142df6b901e60f14879d1d0fc9118b2ba3c977e646be58e7661000000004037358d8f25ca4ce032d2441a3fa5bf3720e8c906eb608bcf53769ebd271bd130349f49ffff001d040a1c2b","01000000d88d1123c3064bca8776a80005d946ba740123815673439bc53a08a70000000081a0a885b3090a2fcd2247015f98b9c11e6fad1392d9fd9ebdbbab7c063f6f5ead359f49ffff001d1f54ac3a","010000007dfc1fa556def00747ce981a70bd9b858eab18fa502d8f824cabe8230000000085751f9418a9118cfeadd1ffded494c0ad53acf9bc2900e9a808811ba0b43c04cf3a9f49ffff001d37f5a9c6","0100000084b21e43a424ea53f02192bb5b390819ad98f8f998d64c5dff5e005200000000566a238ba22968b14c04be38e89efbe02ac0e2ee5e4d5f9186095e6bb32dd7eed53c9f49ffff001d086aae09","01000000d6d2c539ecab30056339244897540810cd50d41fec76567f2ad2655200000000a7e5355152cd9c66dce50f1a450c376090910bacdabd6df6a1b1238d0a6afd5152419f49ffff001d38980146","01000000897e21ed8d2216a9a29ce185253556f7b91de9e7afd6e8db7f8436bb0000000079690fe3404e09ff65085332a6226000b24c04bcb8d2b5f27c7d60178ceb3c21f9429f49ffff001d2c99d073","01000000b6ca10ad93d2bb017d0f8bde3e29df9ec5073148a2762ba7cc37869e0000000033b1029a8e3b05e9c51a803d2526098f1df71ff314667a071e9bd277181182d6db459f49ffff001d1f15eacb","010000007ce3a976d756b02d2efab85aa4c0a94384932abc0ffe5c8aedf1e5ce00000000c3171dd8201f249b0b4d84c783b81291642a00a444bb6f727b56ea2f5651480a47479f49ffff001d1c262287","01000000251c9a81779e89de2623fc50c09f54d7264f36c7a685e809fe309b0500000000bc7b74da7b049014687f5a06c5c9cbebe9348b7e10e2b81ad3b63d149d148310714c9f49ffff001d15e8a017","01000000520d3ffb34821048ee57f1df7d4732281d99ddaf5a099090a0bab0a20000000088d59c15d11709c9a4dd47f792caa9c8f18189e505ae5e319e8f68a62889a6c439519f49ffff001d06fb2d21","01000000aec6b6dd6b47b9ba5b14b24d652239562a4b78c4507627e9ad2497f300000000f6e02f4bd3ec68dc1ab981fb319845ad64a3b5593a16179def2063a668701da84a579f49ffff001d3474fb1f","01000000491622e364781fdbd03a1a8b54a3378fa9ffa5353664cae750693958000000005a6b87ec9c1063df29e2cfe8f98ad9f162a2a1d4e9e79ab762cff675e54f40ac71599f49ffff001d2065f4bb","010000004d0e07ad3341634d95e38724797c395ae377a2852800f933c6a7443c000000003739e0f0e766cf24376d81659344efc8e40f2c1227f233c85faad3d7644598e3d95c9f49ffff001d27006e55","010000003ff8011099b2581bd2d0510b228424348601ad176ec4b4ed42b42d29000000009947588bb44df13c7b05a017dbfaa7618e2c4756adfa913cdea2dfc9681f2d1c87619f49ffff001d36996d29","01000000a2ae3e6483ccdc1cca2b8e57b8268dbd0e0574361cceb304ff2f664e000000001bdc19753767a4ffe2cd495c7a223c0c4bdd9f2bd333a42bfcd2292d4b26d09d5e649f49ffff001d2c516442","01000000c66ca9ff262bef5fce64dc7dcbe366536544e481d7edd29d4e6093fe00000000d8c06c9816f0085b1c40300dd7264168710f2fdac1201e9d2c971edfe6946e7d48679f49ffff001d49d97307","01000000aea8996fe769bd5b01990645d6a88ae04721c450a3cf2b402e51a1b300000000dfc49ace39afb4008bbacba30e6d41f4200a1de9e888e567c8b79b93454ee69ac0679f49ffff001d21f42759","01000000babf23e6998272b5e96819cc16a98680fedd9b5d84c8bd000bcafd0400000000c5021d9c08b4ac3a169b76675513beca201916cfa14897747f039eb4224f3dcbd6699f49ffff001d192c8501","01000000c08687e9d990e92d03b6e34e8b7f1962e79b324a438e722a8c4cbf7a000000004a0d2c96755dc1ccc7cbd78735e0352cb973cd03a7077377594f2f458e723c764b6b9f49ffff001d33fdb8d4","010000002dbe68a619206a134a59644a79b3cde1f0d231cf6f7c29b248102b39000000007e09d5b72286682cadfa9ab568bd0f6686a09952da1b030bf547c2bb2c49c06aa76f9f49ffff001d04b69dc1","0100000017701a60b0f828b6fa2e645e726b8ce97b54cb48174c6dc0e874e5980000000072db98fe359b48eea530eb504b2a935c938474433fd237c2578e7b3118a5b42bc9759f49ffff001d1c7a07f6","01000000f6e304b045733f5c4d354c1e703565f7441db0fcfb422c8738d9c09600000000daf6de2fd8ed63a0f4e061c9915907c46b8c0197956cb546171cdb9ebbd19660ff799f49ffff001d1a99d319","010000008a3fcb78757d8601fe5fbfa201e3d3d2d5234dad28734e7ae989726e0000000063c37c7c53b61aa435f7863b5b7cea51405ee31cdf4232806929313f261dc10f657d9f49ffff001dbc0f6b08","010000005d87bfa1a5c1c5cf1b1adb9b4eb1468834a8a1dacb6c648661b63be7000000002cbab8504218df27ca1aa09900b6e5605e744ee921596c870388563b5b33de96ef7e9f49ffff001d2e426d1a","01000000cdcc430b9b9ac9d2b6e2ae81359c2b4cd6b2dc9372a584fc944c62db00000000b3a08a53dd64cd3c8cbb29dac5cf8aeb5f778c5d78ca1f5917ed17ba58b4d4b62a849f49ffff001d26319f0b","0100000081b2da837777e6ce6f83969d86ecbf9807a68f8be2c93ae10ec87a8f0000000090ee5d332a3ce8b82448ee1eeb0fb6cedbc628d5585fc89030e36479cfb1532567859f49ffff001d157bc080","01000000161b615c04b44939e5408968b262379b912870c32815fba81825e98b00000000cec4d98ac21f347d95f269b6cbadb63c21270a53099e108227291d32afe3af590d8a9f49ffff001d171a5bc7","01000000d26fc1a0e5521babf09f610808d28da225311079e57ca859aa454c70000000002a9e5b92378f8eaed2ab6930581a2deb4bd265cf552f7a899acc5cdc0c5418dfa68e9f49ffff001d20bb09b6","01000000d96afb3f1d2d3fd278b1e48fa25d95dec3999575a6e96cb8476cb1fa00000000966fecf211c6f7dac1b59b55508723419fc19c1cbeb1bed75dcb546033419816ac909f49ffff001d2623e15b","01000000835a567d27c1d7bb876214ddfcdcbb8e47b02db4541ed85a3dffef6200000000c00a7427c67be8e0ab63a60116a99ae3b399a5283043583f51cdce4913d8046ab6949f49ffff001dd9e30309","010000001e1c9f70b6c3c6f6d841d85612e3a3de33e54ed92f6ac163b1bb15e100000000cfa172102b38a148099d731a21774e13eb7b7d7ed8b407789c6b738287bae32edf949f49ffff001d398f0d7a","0100000000625bed338d9856217d9327edeb6ab10252fa803bdc25c38d0ad09400000000a0775b4c990911b477a5be84db5fbf086f8a020ff19f3fecc2633d27c48ccdd35f989f49ffff001d2da46e85","0100000034cc332bc9f1f591b019fd8fa853b483fadad09dabf691d1e7b637210000000002e3336bb712eb01f4bd3d56d19994b1dd54c790b509ae109d4ccff15e031c2eff9e9f49ffff001d90f78020","01000000960044872ae8babe2627621306b3d82b4d1799df3963559169fefd8000000000a497099c70f49b8a7686e295e9461f9508aacf9999f16a200554f2be4303b906a7a09f49ffff001d2804bc60","0100000042e1adf6d4c5dd5e865badbcdb8490ef88fdbb6f3fe9ab94d809d04f00000000d676f381c1b18045d8e2623db92594360893b9f68d1f4f9dab63212dc36116f79ea59f49ffff001d99e23c17","010000009d73a5c1fdae4251a5c6ac00f777d9140f290929d91825386838a893000000004ae71719a17746e94bdbb68bdc06ef3c1093209596277ec1ea8d5789379e67ed56a69f49ffff001d1490ca2c","01000000784b01897e83812f3f4760e30adf767c2d96e75b0d5cadb5fd12821300000000dbb10af084ab79da7794acfeef591ba613b595172f245f7ec2b4ebf00006ded440ab9f49ffff001d25bf2c84","01000000cac9a0796b58eb31791372840a47eea03c22544ef21804151fb24a7300000000bb4f1eb47bd24a4c57af6286e12419eba5861e4683a8bd567ee6743fb34e357448ad9f49ffff001d04704b83","010000007e94e7c967ebbc3a84de57ca9a2827c9ac067d3eeae41b67fba9a8b2000000001d95c595129f3852f0d74ebb73513004bc9abea5a799a0f7dabebfdf46c9fa5d43b29f49ffff001d305c1d6e","010000004d175cf2f2a4a83b327d11fc739d9d7ce7feea563efecd4df5d90e29000000000f046873b42047a512d815c4873ec2fec1c1b2e3abfed6fc6c312dbdf968ac52ecb69f49ffff001d21a28a8a","01000000aca2840759d1fa3cce9ae4d788cf7e864e4b637354b70c6238f59df40000000003deceb9699a5e3ddfd2a60c9d07a1229c8e1a9f13d084359f5207f57eca858cdab89f49ffff001d04e694a2","01000000ec889f0f658588b84eecd35b6a3480ae1a6736c8861f1924164a88db00000000674e44b992a0ccf2e6d0cdece63f7abe8def7564690b1403a808fe9620c89f26c4b99f49ffff001d64664004","01000000d1fe6181ed98745f5af63cd500b5df2be539e1f4133a23f1cc5329dc0000000002fb7fbdeaf8b26a2970eb4d594997c37e68b8d12ba86a2ff755825c6717b35a9ebe9f49ffff001d38c6782f","01000000523225bab9eb49c6fa4aa73b0c2874db4d719dc547abbf88827c0e1400000000aab5d4d2f0fffb469c7c0a43ad667b11d892e94ea40b526ee32bade0f17b676cfdbf9f49ffff001d256a951b","01000000830b2b8482b22a18a3a14561e715dda2dceebd2e96d51ce25c497966000000003098cf08bb177d5c1953a238df3987562d2fab0c483ea1813ce02281f96a647e3ac29f49ffff001d24e1645e","010000006f271650e44d4ddfb8dd381655a39360cf9656e3e1bf0b74360f473a00000000c64fda0c1ad3bc838feccceb4644a38281d936efcd4fe53ebcac04923206260328c79f49ffff001d23949358","01000000d293a61551448a3ecbd2b6a84f6e89e3f8606138a52962aecdec060b0000000054700d30924f6afad73dd5bb130c69c9de1125397f9c08bed2ccf36580af3b3c7fc99f49ffff001d3209e2b1","0100000080fb4fc5c2b2182937805083051c9f8febdbdb6ed4d029c13e47a86a00000000488adcb80684d5dabe3251981b5879eb253473888ea4a4bc60688a9fda4646de98cb9f49ffff001d165fd181","0100000062a3f959f71bf8bd6d50df3f9912e943ced7923b611cc7d74eb325ed000000008ed0a21ce9f5ca62168ea4415bce99f13367ccd70a37ab7a279d20b9cfb51201c9ce9f49ffff001dd3a6b30e","01000000acd8d0fb07b077c2bbf53127de1ef74602d975bf1adf24fa1eadc1e80000000029d9810d8acd98082d21d2b3a2045fd5b3d8fc63232c23001ba41eb490666c1d7dcf9f49ffff001d2c0fc1d3","01000000d795efdd97b5c776aec56a478afe0ee3cede48dcafd21815bfd4131d0000000023273fdd3c23a1f4a6b2f4457f61ba932fce950afd15edc4e23a2f8e3ab09c26d0d19f49ffff001d30a841a2","01000000406355ff77c4e64fe6e25192223f09dd43d62abd1028173bd471318200000000628dcb3ed5ac33196e105d9101b8cfad568ea523a12e805c9bee53b98a3c6d1a8ad59f49ffff001d23c665e0","0100000066f8bbdb4073681a1ffc4f969494541893d0389f61d8d5f82971900b00000000462c331e1fd122c5879738591c77f5c22b3bb172004d1b5d123a9060cfeb6cc498da9f49ffff001d1bd047cd","01000000e8da522fa288ed7df2ee25796f6d76f3d6aa04a41311643f575537c500000000e5a675cfe2aef91e1fdb57e259dbcba9cd9a736f2699bbedf07af89e05d57e2f4bde9f49ffff001d47410412","0100000059da22bd1a0bfcae573efecfc8ebd4d7235bac3989de42a9b352dc8c0000000065e5177c803c2eaaca150c5220c20b856a3048f44fc9eea2111f18d74315d5c906df9f49ffff001d2918d356","0100000040e8097a14c9adcbb52f46652ab727b85e34cf79f43fbba3e38217a300000000b4b4ee7854fc86f79a60392597a8961a558d9f47a92a9e0d809be528811bc4086ee39f49ffff001d1af17e98","01000000be8c2ff503f41468714a5160a20d8dc662d560309e2623935be776bf000000004a4150af06bc4b2408fc320e4aa02fed6a11a39c7fc48b2b5cac874b9559f91035e49f49ffff001d2b683203","010000000acf9e4113cbcd6de113e48412fa7e5700fd1604a155d4534b517cff000000006bd7974de1f889b9faf7056881569103d2b9ee160003be605004061d35e32d28f1e79f49ffff001d334163dc","01000000b4bb21edb6bc34e18ee77ad4e473a7f6b1e0eef06d77c1a2abc0806200000000383b7021a7d4d44853f136472a669ae7b0a85910efe4509ff4341cb0bc1d62bd3eec9f49ffff001d171ff107","010000003125a32bf5ccbde66e1e010f6c0f99e325e9b1dd183dbe819be3bdaa0000000063bd7c461c43836774ae6b0cbccc61594c708a205b80cd9b39274c1a6cf8c6296def9f49ffff001d1941dff7","010000006acac8fe52c044233426df406774564acab59b9bd37c774f662118ce00000000dea44756d70ae1ee0500b2680ecfe94395208371e50c4f606392b7defc438c206af59f49ffff001d24c036f3","010000001ee38e4f5a32526fecfe27b768f110d54d0ae6a04b9652f318ed04d60000000077801786537ab6acf178e548b2557c937a14b67c07cca4271fcdcfee43436d1ddef79f49ffff001d07372853","010000007ea193007ba31fe0d8a28188248aedf26a4aeaa6b148bbab03bb09ce000000002af9f0507a077e08b774f4190fdcbd7c98ec8edebc62a2713d473b07f8a0dd177afa9f49ffff001d0ad10800","01000000515e518a391417476b00eb1d90ecba7c5214b44d29e781e87ce97d7000000000f0ab5d36b68993d9ac918f9cfcfd7653eb13d89efbfde6b554733e6713078c3b26fd9f49ffff001d166369eb","010000002d295a816030ade21a1314d30bc46940a29014d9bb3784fec8aae00a00000000606f824271ad49bac4fc625555989efd593e5f076c9987a65dc832ab94085c3e8102a049ffff001d379b0900","010000002606970788218a3b18cb2384ddd9006a1ff1a3d6b30a12cab7bbbb1e00000000bcc2ee8ffbe63eaa4b8542575181c2f8b7f50543050f4543d5043c10728295c46a04a049ffff001df9050f09","010000007971bc489b720c464ef0f8be8ad7bf6980e6c69bd2e34c80f42357790000000086126c839b65000ba3aed0396cf609fb8657429bd4730fccab29b22293c65279bc04a049ffff001d1c2974a5","0100000044e2161f10761296404883ae7093b4982f7aa35162f73de1457d510c000000007f9a16a13596da73f8232fa20040387ca6e1e97b3b226e14fa36c58a28ab7ef2f505a049ffff001d2a672382","01000000cfd6c1bc95dd4e86d3eee3c5ebcc5337925fed37405dda20d906e1a5000000001bd142f835c45c78bc05086745aa4853d279555fea497eaf1d1b089468a6caf33409a049ffff001d35e121fb","01000000c4662dff1632aa926cadefeac58e13146fdcc15b1850efc6103e261500000000abf099c2cee2e4f3973a4ee7eac361f0ce4cf625ff82e805d42445af891f9069250da049ffff001ddd9c2613","01000000dcab4273bbc0701ce5bd738770a185bf4aea1feff809577f9402056400000000d622c9a9b4fbe7f72460c0f7e81d2d46f6aa47d11450e01fbf9ce36a3710be42810ea049ffff001d3634fa44","0100000010693320b4b4692c22d67b56197f8b043fab114db6edb62e52c8eba4000000006720e76f3fbda5c7c45bde29aacf48109736883c4a7e2f2e1b9342f973df4e0ce910a049ffff001d2a650e30","0100000087ae7af13903a20aaea3924263473cfe24b786ba4e0094cf02aaeec40000000070be83327fe41d5b1a0393c47b0c086433e6fd76361896ef274061dd53a17524df12a049ffff001d30e52864","01000000cd1ba463dd903953e249221750f4d34e85a1feaf378c2cda95de2c8b000000008c30bccc39b3c2ee7ef145212b7355995fa8902f2fe27f25cfa62e3e01949999bb18a049ffff001d2ab73b50","010000002e849b2aa87681a764dc0eed4de79e2696db5ddb4aeac71d9f3e6fbb00000000d16c415b9b36fcf748611ae0a4525275102438e4c1f16b4b24deaa4394c2c402371ca049ffff001d037c8637","01000000bb87b66c0ce37e13c90e8cd8294288ee00f2e7433bcb1d68c0b3ab3b00000000a6640147e9d155efdf3388174c0ced94bccc19be6321e4ffc23fc36c1aef476a3e1fa049ffff001d2d6f93a3","010000006861cb79b3915e33505545a1e20e44d95ccc90a5dd8b5153d580378000000000fcf3d93f5396c0353cd42fe853db43fc625f785bcefc73e0be2f05bc239d7899e521a049ffff001d3868000a","01000000a9ba654293ec414f533a9d52ee39dff7d5de9216c324f81efa819243000000005a06aea1d48eafd53f6c91e7e51813f63b2740233a13e2e039893ad6f622e9128925a049ffff001dde319102","01000000013e52e4dec9a771b2a2fedb06d3d7596478da274e9d0837705e6aea000000005ca086929f7311fd908dfd1381a7dfd2704eaab704284756ab9dea9701dd33ac5226a049ffff001d50b95903","010000002578f553066b45ec82ccc3fb8a35b03d9f5d149646019aa36ca2065f000000001fcff5c159eba463ed4ce7f633869b9f821266afdd3e3cb1fe1809eac8cb99ba9327a049ffff001d2d4537b3","0100000080812e4e0a0711b1347fd3840313f683181ea5ef567d103e14398834000000008528c4160e479e13680dedb28a19eb4cde9b8d58a7d14b75b3c8147096a1267be528a049ffff001d35b0008e","01000000e85221f81c39670aa70b68fea3618b04dc6c4543f52f04cd6734f97400000000184011ba3fa610b9bc7c9f1bd4df19d6abf5e33b8848b5b7b044519492ed306d1b2ba049ffff001d2ba7a0fd","010000004f2c401f9e50bd5b975db5b368ebb5b849aaa23be34792c019bb76420000000008824353bb8ba03e27af02fa7b6f19fbd3fe3bb1a9733b51f9b5669876bb20f6e92ca049ffff001d1995c73a","01000000a35bf6b9df44f2bd14e0d2ddc84c25ae513feb3cebb78356e6f3439000000000c40569d41adf85c2db6a0cfa7571fbf8ffbf2759880628d31a190c975783775dbb31a049ffff001d257745a8","010000002c8c47afdae82b2eebe0e4558190dc835ada8bf7305c32711a82d3e800000000a4b3c120fd11629cf318ae670a073a9a51ade857eb8531a06134fb985cf35b325e37a049ffff001d57cc0e18","01000000a877fadcf7609c98397547983e09bad6349cd63e3e5fea17d0175468000000008e329caa4a26140e79b9998202fc42a982c75b5f8fe86e636ab37ce52e788b807c37a049ffff001d0648f2ee","0100000056cd4d5ac3f11ef908c56d19bc0b16dfb7a92d61b857604195c5283c000000007cffbb99a7e4e75fce4ca3097d7f8fbc5f943dd8cd1a9dd7cc180ae399995bae583aa049ffff001d055f8689","01000000a57c13c192a13e550c167d794cc8151c91f45c584481ef6b6a8ae85700000000054d5788ffcd698e0362be90adc52acd20ed7f87ff84b3a22908155cc614e0ae703ba049ffff001d16a0b804","0100000094b8bc83fd9f9cd533835c3a95f29bcca4a7c3eaa72fa35d2646e6d0000000009d7cd2530d1e35530504b2ab03e558e7c6d8ba2afae4d2472cbab68ed8f70d7bf33ba049ffff001da2570e02","01000000c0905f08238bd7997b4854b32d5e35e452b12f8f6cb350dca9767d1c00000000ca76e834131330a51401ff5925fd54847442170b8f725c008048e946d500f17afc3ba049ffff001d24c20ad4","010000000aa5beb4996fb0e34244fa2af371a239faabe1776a6e7e592fc427320000000008683efbb444c3df72db688884744ae67a769c3f222dbaacfe00148e909fb4161140a049ffff001d1560b7ac","010000002aa860b001a3554b1e583d6c5154e63afc06a417cf542bd6f70654140000000046a1a8eb4e4058aabebdc0d545dc7218e76601bc5f19befc2c0d7e47e7593123f045a049ffff001d2f102964","010000006261ff6a75ccb5af13df6addac7db478ed1f508860bcaa64f7214fc700000000c1823688212535cca8e4889902f9983485af2bf932d06a843fdce4fe52478d1c5947a049ffff001d0f3c4306","0100000079084d9123f66aea111c152f7c79998a838ef09c609784f212e0eafb000000003ad1146d3aaf17d26279fa7ae3e824888d99162f56c5642bf18b7304f8f2133cdb4aa049ffff001d224255a7","010000009cf76be3e690dd8bb117e4b686322a94950b557f2a01a1cd5f0b45ec0000000006adc3a83b2c6a31e288b8a3d2d138d849a6670d69a0489cea020ca74d9b6dc6814da049ffff001d212bac45","01000000573fac305575f7ae413e377f8e65b92692e32337da75973a53d52f9d0000000004d36acb8976cce67cb4c030a85ca5eb36f88b26fc97e503866a1207e7996d756a52a049ffff001d1b2cfda7","01000000a36d738c236f6225dcebd2eebdb5552dde2c300a675782345c73d15e0000000020b60faeba9684671a73460bdf49a1cc04757b3069613ae01538735a6cf675a71454a049ffff001d28131604","0100000009de1f2b1c35460bb9476ddb5c4ea5b8be97d70ef331b39c786cf268000000007b39ecbc068cb8d9d917814350fae4e9c8f6e286fe661dc2562d56d11567794d1c58a049ffff001d1aa925ea","0100000053b53974f8d091a2bad306b4e9a26affbcbad7637a8904c899bb61af0000000045775181ebefcff4ed00d5c1d5f462166403778e8dea6013ab74738d3c909d6ec659a049ffff001d37dae738","01000000f8d5c467224751df6650b644b2f51bac26b19ad00ebf418c5bac623500000000b5219a2fc26fb0b82965daf1e95f5df8deff7aaee3bee6fae3a212b6b94f6c63775ba049ffff001d356ec34e","01000000c9a0d7dd86ff4312053712d8553bae326df93972fbd1a91bf705f42700000000161f1f273da903b297d1155ab61988cf3a5f59361359c5b7efb283400a47c8889260a049ffff001d1d2caa23","01000000ecfc1e3be90d75de4a0ef0285803b6433f056056c7e447bdc316622100000000a9137e82fe209868462f2508871ab47a66b80ba21da28620fb8b5d4908bb079dd264a049ffff001d1dd9b3ff","010000002e2c0f9ff94f299f61bd68560a984f0e7cf817cbd67fd20182e0d20a00000000d3be58aaf2d7f9fecf40de432527b3bec91540282641eca26a66642873b772508c69a049ffff001d181ff7b5","010000002a2a99c33c7f28dd38b4965f4fe4e2c8f3c83415a14d5758356030cc000000004330fcbed00ffd6642843a41bce9ca9836ce1315e6621abf9a21988d57f7be6a8f6aa049ffff001d858d2b04","0100000008ec1bd3727e4423cd1a6d36291d141676c75d8e7838d1386bf13c0800000000ad1e2b52b44a74c6c2eecea81a2f491b5986e26221a37836ef0e54f86bca1124c96ea049ffff001d35f6fe1b","0100000011c383007e418d15a971783612474b7deaa9e6359fbe56f499aabce800000000da2d2fd035f99ad6da6a21a780c5140e25d9a43c2c4bc69427055ac45a08d0e22172a049ffff001d291ef805","01000000e834390d1a1289164dcd34a59baebae9b0dc4fa48be8b1b0d4cd139700000000db3a3fb08837c8f1463dbc50bff90a0f589bc01603c6856bb92a7bd0f929ea949975a049ffff001df51b2910","01000000dcd8c8acea03e9bd2ed07a227a9d0b86045d94fd4e4a86685bab0d6d00000000676c97e41731495472825c9b57b07bb37d902ee318a863a966d553b3202fc2fc9378a049ffff001d00751945","0100000041bf02215961640e0ad7040bc6c63edb55be2a244688b18032dd59d3000000003bd89ba18267b6c5773e732807d94aa1e9c6ec04a3d6e821cd1ec7c7fd5e4e22ca7ba049ffff001d1518b658","01000000ed911a042945fb72f9159e1f5648b3d4a1c5dfb2406091b92f8f98c400000000bafa0d6157c7b9ccd26add5312eddbed67d8e68111499c72b9842d25e36abcfcc47ca049ffff001d54470804","01000000a3ccc34389dda5da34ec2083e1a2acccfee1dcb8a573c4e31897857100000000093b577b9ba0e83787fc87f41f5f9bb3db057bb33271d16aab972bb768247f73877ea049ffff001d04932fb7","01000000dc4009d6ddcfd98ffa1dfb166afc2c6830a7729d782cf3b7aed34e48000000003a1544a41ff6fe62ea6c03b1c97a7ebb7a70d283780e4ccc17f4dd38c0b372327e81a049ffff001d36fd47b4","01000000b939104c0db76782fa1292bdb450c8125f732a2d33fc07af6c89efb400000000029cc774e1cad2178d8e3ec4ec60390ecec237bab0ce3a74bd1f04a610491bbc9a84a049ffff001d5691120f","0100000067d9babe3f395ce40a539b8ad9e30fe66637edc461099d41d5b909eb000000008c0db2b954e921c598c82621d20fd01f163d1468f1786f6a9773e26a725af776ee85a049ffff001d2cfc43fc","01000000d33adb9494c65fb35d3462fc65ecc4fa7b2192f0710ee561191f416b000000003e0fa19038b2e2ed69eb7be8aef45c503e0976089cef4e2ba6beb3489cef141fec8aa049ffff001d16a43890","01000000774f8d53548fae51c344eb932da5cf168449658e692bc5fe1198bbf100000000d086beb144c8b41bfdf6284a31f9f31df04058d76dd28ed3152b33370e3ffcd10f8da049ffff001d28e628c8","0100000073c5318c58db42d66e2073530481bf2372a7dfbc3b144bc96250861900000000d56008704a5a366916abf97df6ed92c4044345744d055e4ab3d5d202a524d270478ea049ffff001d2385207d","010000004caabaad3f71c9d303520beca4ec2215fabef56cd58cd3ebdf76b30100000000ce423243bf378cfe1c9079f5989ce202d83b8994ff54e3ac48dfb95a2d0c106e9e8fa049ffff001dc624ed05","0100000092a4603184f5cf5dc51ece60909522bd4eac596cb6516dcfdccbe8c600000000d625091e3253eb69b45103af748ce2d328db6ca1a82454ac7de7f5ce8c7f20f71290a049ffff001d1fbcfc87","0100000075f1826255ce3054ff6024c4199b815b9d870b379f601ee8a89ce59d000000000c0b0ae1ba33dc48df5fc76416a8886e2b4c49bc1365e0aae08c48b9f4b6998c2594a049ffff001d0970848b","0100000080b75032ddaaa94b8f484a33d45081251bb2a5562b71617f3ed0b78e00000000f84387ab1f95d976348781cb6cc0a4950504606b80a6b7b2d9568aff342a6d32af96a049ffff001d29d41876","01000000102f9060540769959e12f62e9f6d6d5ee10b62afbd4f367d0bc0c13d000000003dd312a2de79fa82e5030ff56421cca415f9fd22cff7ec055519c1ffcaa7b5b2d398a049ffff001d291fd18e","010000008834f1a40b4acbdbcfee84435481f55d731bda83668a2009cd4723a6000000004fa95445d90dbb07a1198172fa0503e4a2b544c645b68afbe647e6b9c013e57c369ba049ffff001d2e97e972","01000000500b297cacb9cf30a214381a5e517830281ee668b4ebf2ca78d55867000000007d42a215351e2756aaf3467362d37d9412f01106620532cad4eb7afbe4379f32689ca049ffff001d4a26a105","0100000053051877e51334a5488377d5922bf4c0dd4f8e43ae1f6f70329603df0000000002a6c2581b47c38ae9944b26baf329f6ca43e7e496f2f1a6c9f047faafc7168e689fa049ffff001d275569b6","01000000606003b9dbaa2196a66326e6666afa1ea55e0a16cb130143be8057fc00000000ee3661af323bf201a3e2a15f7da6c3e208a90185c26cb9e5782038556772d5ef53a2a049ffff001d1e64b604","01000000b65ff8819e91afc94f1830f2c7867817b9c1dc756f04e41ba2291d42000000004823b5217088b94b31df644ad25687545fe60b06638a0019c3daa4a9f2f19c69f0a2a049ffff001da064b902","010000009f11e110824dad738f2fb341fb8ccef4768506ce61cda7007e6a545200000000c7785e8726da6a56f987fba769feb19ddb109cb053eeb5170900b782a83fb1de51ada049ffff001d23a88331","01000000ae28335dfb45f7d1c03d375b858872e47b1faea7e50f853e74f1dd6400000000925150b8bcab3867f3a8224f8e52ad888d8d67d04734f1552001856b7cd3c99cc5ada049ffff001d95f98702","01000000aa0f815a2de68cd0e03a0d1485260a100d57293f5addac32a1e77a0a00000000d55219a74c785c59ed2050d5766352e4ed536c27ae300e913e7cab99fc602e0c34afa049ffff001d19121107","010000007528e97e94bddf6f6113899e783352fc24cd9f6050a6e4b0c53754b60000000030c233763802c9b647ef9bbb11df440cd0169418f6d955437a5aec060702aa4b16b3a049ffff001d01ec7238","010000001c0e226fc5e52e2e16957cf6b73b888452f28522088b27584329802a0000000024d28ee03ba87835ea86e692ffcf3e7ec785268da4923f818c1e8a050eb6e46442b3a049ffff001dbee23f00","01000000b31e9315eb8a5791f8247999e704bd5e5ac000fed5fcf3b4fa85deef00000000a3389378b31df6b2a932dba31f23828f4b657c131ef5a2850268b49a6b27f7dbdbb7a049ffff001d26a2287e","01000000f7346706e2ab506548bdc0cad305d5d206d0c67e011269b9d1c781b7000000002af4b81e7390ba7bf1feec1c49606de7d61152e46a66341fd25148e53b13bee1c2bca049ffff001d99ee5e13","010000004b953cf767e53a05afbe50e8adb43345c35dd6f340c00473f0a07dc50000000050581a7636c38ff1536c0a95a87035934600d2434f4909fb3340a08c9e4e1a870abea049ffff001d165606a5","01000000b2a6daaace389bdb7319137b52c8b87efcac3f718947a9ff7c20729f000000000223b3991e7d7b3a03fd00ff402394768809b25c6db3b79e97b36dc7b2b3fd1cebbfa049ffff001d245dad0d","01000000b2ca6537f631d6b5bcacd6b108fe7b39946ec9fbe667d8344f1e99790000000094b885355df8ad7d8d6557c0026d0d2bd5395bb1d6a32a5b66637b544ee8bed356c4a049ffff001d3304c5b4","010000008c6d87157f4ac220e7944e0da6c66b756e27a1010b080ef14fb2508000000000bca91a4d786e7b81acd9e34462a1150685f4821a70298c5be3706c141b791c3d58c6a049ffff001de773310a","010000009097ae27076f2058537a61b0697f1e4e56536d00ddfc3561dc870df6000000002c75c27254b1da85c5d84d73e3195f06bc3ff98c986f8b72a9bf0e43e368e5c51bc9a049ffff001d1bda5abb","01000000ed401badbad21667c2272f1ac1e3ef8f486827804be4cd28038d0a3d000000003d203657f34953703b03d1dbbeb0d28570edcfa54526e2532f923f0c073e2f46b1cba049ffff001d1a426ab2","010000006cf2618e4f922fd7ae05fd29ffe28d19fb050a160ee96b1a43c7d8eb0000000026e609e33c26a98e9b762f17afcac6fbe93b97beaf88692d3efe4f84e939205833cda049ffff001d03615f7b","0100000033dcaa256909542d97751d980b2abab90f33ed5913262304856c895900000000017fa1a8c254388eaf0107bdf3552e33fd68dcc5f4a9f42d19e13cb3f1fe4f9a0ccfa049ffff001d385f6d88","0100000031c794cdf110baffd28aee88f6de79d7cecc374b703750ed89b98339000000003b93887167d7d541ee3a0ad747bcb5261d65e9646c1bbfc29a1b30bf65aced6104d1a049ffff001d1a252195","01000000a668477da8872db5e8d929d642124179314e5d5e44fba7845f888976000000007ebbe22513f133aef358ff0ad76141f2555e4ddad4b1730e5ec000c02049c81353d4a049ffff001d064b57de","010000005262b915e2f083e43efdad382251ca560a4ccf0591bf862b25a8210d0000000001574524a51c218547fc76458aa88962db69689c152419207533a29725916275cfd7a049ffff001d075c24c4","010000009fb74c2ae41c35f417d9b1891fec8490ce635542fce5e04a5302af8e0000000074a08f138ef9b92253308edbdf4ab2bef86eb83dd897ed40b12d0b175e6b034862daa049ffff001d3a609853","010000000ab25cc4947e99293d68b6481ac6da65b0c626c88cbda826bce360e10000000026e032462f8252d1e1cacff587f7c7d4fcf6241f9042c9d101479bfe4806f9316adba049ffff001df9d55a04","0100000047cb39cbdae72e693e7289fb61995eae6b4ec1ab63376df2c41cd021000000006757e594cf8b7c0a8fe90021c7cd0c7893c8a52c6df40d643132543e90a9044529e0a049ffff001d1e403094","010000002d8c0871b5d220ea62be2f6c961591c814c12078f2785a2005136567000000004af0e8ad73a488a336bc98aebaa536eb917d45a94b01d79c57406d0f0c3a0f82efe1a049ffff001d800a6a07","0100000089efb4cb96b687cbefb45c4e15771fcc9e6a3f83b58e69e5bb2263700000000013743413a57d56e7d855c3cf3d039a6b92a6752a8f3f432fe7f1d989217aefd6bde3a049ffff001d05cde18e","0100000036bfec5a7582a2cd6d6f5deb13436ba783054898a69108b2ab91a5a60000000008aaa2f3245cd850719dfe4416207596dd6e2222b63dbd3332277ac11cb73a5813e9a049ffff001d2bbd7ee9","01000000c62fb6a16b8fad6bc75a446fba7316fbcc48706eb9c9c932405c2b0b000000000224467d6d490017163dd8d021b341e4833cd4e01e24121eb2d75c6d5e100ccd3feda049ffff001d6a913214","01000000078e36a7fa86a85cbcd2bec78198ffe1ff40c74ce829041adecf9a970000000099123bee313e9c27c05df5d90de7414622660c6785a48b381e4f4d37c148c1be01efa049ffff001d0018ba65","01000000216a4188d02b9cfeb368118453b3d3c1045fac5a82b1209133a73b9400000000eb78ba10daa7639cae7db1be90fc1404089c9390daec7168bc12c47d360ae5c404f4a049ffff001d245a0fe4","010000003cfaba76ec460575b65a5991e3e7ca29e7d31e9d73482a40fb80a6b2000000002de30aa29833428387c36dd2e06fbe02b0099b17b178a1ebc8d2f1db62e8855320f9a049ffff001d2499d9c6","01000000faece5b2525b927a6d862e79036ba0241ebfb52d1eb4d44eb10ba9c9000000003a6a50b488e676205b7ae3e5df3d07d98a951ef7fe8d7dc82f1fa620fc83685a4bfba049ffff001d19d629c1","01000000309d39ab87009cef5f296de358cdb589b059bdaad6f1f0be854f99790000000006a15cc302fe5f8aa28bd808723a4b09fa8c03b1678349404e08506197309e6952fda049ffff001d89c76b08","010000007df677f45a572fd40bc1fd6c043980116cd26c4feb91c4e75be0b5040000000029aab05792be7970f5b2bf37d0d2ca2f1b4cca14eccb80688888b502165b020817fea049ffff001dbc15f702","010000000f6bb18dd056c7e5c28d56f93f1e17515bb47293abf3d3dda0fc3951000000007564b3eed31d3ecf04fdaa88f49f7907a9558df64c78f81b12b3f77b212fc83f45fea049ffff001d66a5b200","01000000ec6992e0d1f47b47b0c5499a5294f6d25290dba74a25ac3c5c0a90a700000000807a0b49735b3564e308bfdb994c951d2dd3e70b9780e79be96bc069ef9be5aec1ffa049ffff001d27bbf205","01000000f9ae20ff83978c890d1502d3e686b263786924a81adf1cb7483d386b000000006a4864f7471e698f68bd98f67d074c9f2a0f2b79bf38ebe0ba4af6adf00c5d51a500a149ffff001d083eda6d","0100000058a7ccd2a716ff29b44241e999b34c5b79cecb02843cf253c757a5cc00000000e73c50181e74a729adb04dbf4821bb938a18edf191269eb79fabcab73e82f7b8f203a149ffff001d242dbb79","010000001f872bb5f6d84efab0465b05bef058decf0c25f9e4b27f01ba9be1d00000000046402f8abfa90d85d7b18bfbb0385bee6e40565cfaee74215a4e9a694ae1ad21e804a149ffff001d7656ed03","0100000015708de547c5a46d6fda7871e853583e705334469c79a8da4cf4acfa00000000a439ca52fbdd09cc9d50c51474a5ec01990b52e45c8f30a9b75f2963aadc4dd10d08a149ffff001d1a1e47f8","0100000065e1c2c2eaac86507444f906610e1cf7e00f746731c745728487911600000000348087ba3da1f726bd3d400ceb162954b527e4eb5b5814e88b05d599266cb893460ca149ffff001d1de92a50","01000000837016ee05c81c5e9fee94d58209fc0679450804a438a74526745c2200000000dc8b054c461731632f6f89ad42c2086d131105001669f4d0c15c49dbdebe503efd0da149ffff001d6b757807","01000000ebbf884bdf144bd8da73350b6b6eb226bd36f4009935240457265d9e000000002ef3d8364bf0b59d681661320ed0c19d51c7df44181d2fa8afffe7ccda78bbcf9110a149ffff001d16aaa67d","01000000eed221e3df31594621963e176d21c7b9af5a9e5189d26b8e6a3d6e3800000000c74383f62fba1dbfea4c321f1aa57b5455b610c2700ffd3b0f0ac40170c1decc4c12a149ffff001d29fa269d","01000000be733832c3da78e41655b07526273731c0d2542864b3bd25fb2442990000000033e7090e743dd41d9b9deaa420888f99f9a74140c9ac0dfa6e639f438e286aa40113a149ffff001d7f7a9801","01000000f76a0e33b41a3a9fe87343d6c1a37a127a3c481b5a267100e64ee03e00000000032fb4e09dd1dc2f9f1702c360c0181c53bba2f5a9cea03643d4df5b06f98fa61115a149ffff001d175c6707","010000007a4b303107b5fa19fa57e5a85b5f65282dbfd9555cd61d9efeae30db00000000675d5a1283ae9211807b0e0dad1e142de9f8fb7c59e0222d7791e4a02b357b6aa215a149ffff001d13444002","0100000002df4ac3c20a20e2c9963119792c2bc9b79f4c10d703d3a676b29c0b00000000611bf2a79a3d75744938544501ca5b9fa1dd2edc8e6f61f0e29b816842c658ec011aa149ffff001d20fa3be1","0100000054e6de0f93a240a1963cf4ee509bb9e5842059c4a4ea7973123508fc0000000012649e1c410114712ef08824a5c1f8d89d77f9244a4ce9a9ea998910a9f5cfd37d1ca149ffff001d3b3fd70b","0100000015c06adc26e6a3619d9d3262d4af286442f4f991995c3430072e37370000000076449ade972358c0f547ef669ffa593066a56c989b36e19e3132cd390c79c89c2e1da149ffff001d1aa06939","01000000944bb801c604dda3d51758f292afdca8d973288434c8fe4bf0b5982d000000008a7d204ffe05282b05f280459401b59be41b089cefc911f4fb5641f90309d942b929a149ffff001d1b8d847f","01000000c2c38774c33ffaf688f5a9184b02909fc54b843c39a0423c095f0725000000000b98101300aac640b6fdf78542076c1be81b68ead5a9a14f93e15fdc2528c021dc2ba149ffff001d1aece423","01000000d7b1e90c05142a4cdb7fa009e88ce66dac9ae11fdef59c9d109709980000000064fa640de5e5f841110f4ef465f4306fa3cf537721684d363d2523a1ef9857d70d2ea149ffff001da8d1aa08","01000000dcffff3ceb20dbfdec203311b301ca51dd77920b2a488dfaf7e5dff700000000c2be32e3d8da8abfaed89de548c74b1a0c414f7c3a8721fdd35d4aac2d825eaa7830a149ffff001d29116980","01000000f7854fc9d9bb587b9f4153f1d4a5f9694f2f211b082d0a127963a477000000002c52243d33e1d64d15211f31445f79cb8775b58d7bc3c919bff06e3858a563b83436a149ffff001d243d4ef8","010000005b1ffa8ed7a058b6b5b062d222ab0ee0c1afe7df6b136867e3f200170000000083fccc31906128a8a8b385535f88956d05f7b756e93bd6870fab03e2be76fbae383aa149ffff001d17ff8578","0100000023f6bbed502b3852cf772326e1280ce3958626cdb6a2b222e363e54a00000000c5f9425cefcade990f4417281d5bda218ad48c9eef705282901def7c451654d1ed3ca149ffff001d018fa0f2","010000008ea8a699da61242bbcf3df6696b19393fd20baec5732c840385a87ac00000000300a09080ef6516e5babd986680b4d52797e2560f05c405ee8bba2cb3df069f9ec3ea149ffff001d01e0e4e1","01000000e7138e9216baeb1ac40f2c62106da421e7c4dfe92e8520b9510ba896000000005797dcd9c94eaaf79c8dd89c78da026035a4298a6af56c0d8540e4f805fae5df1443a149ffff001d22bc2b47","01000000b9f0ab49351ff2a1d5c312e2d5d4090480b1f06d698002ce8ec2e4ab000000008ccd84ca27dd388340e95dbf98fe5064dc331e6dfb9c4af9da571480fd55f340b448a149ffff001d28ebd9c8","010000000c9451392c050b8e79b5c9666c18815420c01c80a8272959d9264089000000000870f038751a5fbc7aa9d688c9bfb14a10a1c3c79b86ead1a89a778ee077c339f44da149ffff001d3911d40d","01000000dd8bc83ba79aa605af45f89b214760db9672d931b1addc48c8a8b63d00000000b240cd6adb9a3c641ea64c448d7bb9cc4f0907ef16940e8ba744734417b3ca02624ea149ffff001d9c549101","01000000d3ee55906e63348930b7b54cf97a5ab157f9db928357d571f6c8340b00000000554c7bb15795b16b6ad25fc8ce6e09440fd0a3430f7007a2933b9cd2d840afe7c04fa149ffff001d30d57063","01000000a1b952170754f3e62b31d9235eabd5e00836d3c6aefa4d452d0846fd0000000045ba6f07672ebd49471e03d8f8069b033352a8335f1147798f1601e6c2415ab35453a149ffff001d09162000","010000003578e018dffb8116b53e83e5cb03a7a24667938a56dff78debe732b500000000e1d7e4cee5cb8a2004607d6d30a957cbdebde54fce6e362d255cee8508722031bf57a149ffff001d17f8601f","01000000314fb914cf0dba0f3ea60639f7eb53ca1321b1b5a46ea86a1d62cd6600000000a556ee1ca146302a660541a970efaee6651da0ef3af83a32c225dae1879a1b439159a149ffff001d0146143f","010000001d8face7a23ef60b775ed0d6d8fe3b54919846a3c55b87b35b567f3d00000000fec7d689bafcc558e3d949abeae236959ee100c1e14443a2d8150b6ea4af6394c45ba149ffff001d35e3814e","01000000e8521900a04cd28e24f5e29f6121747cbe4a2f4ff09ca5f8880b761000000000858276ece0b84d08f50eeb6ec8415a200bde1acb179822734c25e651f36a40e1595da149ffff001d9000d704","0100000017a99dca235435700345d5c46506e7849137b611c1c6f55ca76709cf00000000639e095a4ee778cf74501b6cfb36c1849843174de881a6900a79ba1d867caf21ff5ea149ffff001d01f88403","010000005a74d97022363bfa52f8b7be786883cc0684721160aa7c98dcfcb2f900000000f540f6ac4ed5ecaca18a4d98cf668b056899fe1f8ebd556d4840c628cd0249107c61a149ffff001dad17c40b","0100000007428ff011115ca7489767608459a48de09a67f9449f127d9ee9f372000000003b9cf0295947c4300655bb0d3f38e1a171e00530962f8457f91b657646176a450264a149ffff001d0795b0d8","0100000007e98c455d88562b7d7218a3c2f089002bb4e85aed1081df2d855826000000006df25068899edd14fbe0e16593f2689de1e1478d3f4357f2f0d08b88c51af4de8468a149ffff001d60dfa915","0100000021d38b68080358dde1d9ad50f29ff671e10ef6f3f8cfe07baa5fbfbe00000000f20b63a0cb230cbcdc66304945285e5d5aca9965668094c81310a1d92fd0b2d66e69a149ffff001d316dafbd","0100000060ac5a4320058c76ec04258e15dd3366138e242ca7547a6b4cfcc14100000000123af2a6f9757f7344be6bc2b9ba70373b2546facdce709a4a316d6b2c89b766216ca149ffff001d9f8de108","01000000a6a5d0991db8c8e5090114b01c24b3021830d8fd12563dbaf8d6bd5200000000e86aa5bab3c5b7a826c359c213569bced0b413aa98675be77579b758d78bf4c4386ca149ffff001d012a3439","010000002473cf7ba88bdca1126f4571688b936eda57869bb009dbb71a5a0e8700000000018f056845060dfece7b502e06ddd6b4c046aa5a4b84cb832cdf443f00d856d01e71a149ffff001d305f6f9d","01000000154d99dbc77e633e08efe15c187274c8d2e34e91fc8f89d015f9df37000000003812b01e5db45daf8b3e6b2eaf509d91a4c0125a19c22d74801c9346a6facd28a375a149ffff001d2fa1137b","010000000c733c950d79fd74a81c786ceb53a2c80be9b8a4eec31f2b0146e6dc0000000099b83d7e9d586dbb1337e21082964ccf36ad0b45198749bf83ab6c337076317bff76a149ffff001d2261ef5a","01000000d12d58dd228c906a2ae70f97cd17a221ef12b660a7362f69ac4bae7e000000005192a382266223429ce7f266c3a40d8b5d09c511b0aebf7529113e64459e0d43347aa149ffff001d2df5adb6","0100000070704dabebe7ec6ff3a0c795df6fab623575178ae7593ce129d8077a000000004d783bdd927c015fa9beffc2db75ae835ae8ef0eec26a02e6e3409c46f393bf4017ea149ffff001d3bbda308","01000000f21ae6b21ffdf510792b6ee04e729976a9b01c2a67b3df9976fc31fa00000000aba558b636d8851376f923087a2c3e36c4492208af71d7b5e1b37760e99e2e02457ea149ffff001d2ddc5ea0","01000000181a16841e1236e688546de42b490780c707e28d421cd5a6427ca23300000000bd805ca726c7b346d70ac10d05099e6184ce498f227cf580dc11dc16b180ae45fe81a149ffff001d1c0aad0f","01000000853bb5f822e32308e2bf17c31eb9df41e183496396c79481c0ee449200000000062be0ae390f31022b2720d2c6a8b0d55959465515c51d175c3621f087d4c82a5d82a149ffff001d1d697744","01000000ff261fdc9d69b06276f03ae7cc08f01a3d314d6ba22466524dd5ba3900000000fda61355d2a98ba8bd677ed5f048d04dadc0a83d37f471039b7a912526125a79da86a149ffff001d296e2a72","01000000de5850dffef58b71c274ec4b7512ce77e2c7d54f48a73eaf279be8e600000000872013855caf92cd2e7f6c75b3d4621c77a0f1aabd8e3f294eac19127422eff0b78ba149ffff001d1ba00b91","010000002341cb9e8106874b78cbbcfe6328135778dd6ff49578c77fc84d8d970000000099caf23b95624acb6f31a3583f879966dca08ab1b24766e62aaeaf10805d8b0d288fa149ffff001d14b45687","010000005edca4fcad10710fcd76c13f6bb9d5ad07243eff49bd76cad76369fb0000000045c39cc0d0706a37a008979aa9907bc35fd48b760bbe25af5f51d745e97796b1bc94a149ffff001d29122d5a","01000000cb4ab68d220c0a73fed718b5180912edb08f38afeed08598cd72befe00000000d9da63f7ff5215e12fc372432cabd8116a6a92d8b27a1b99cfb779d59be756b19c95a149ffff001da5b89503","01000000d03c87eb440330a7b50127aa2a55b6755e3e195b8d1ebdce074a239f0000000064d4989bbcf21141b2cef9935a04df6711e097866a84350eb69f90c79ef12ad5b297a149ffff001d15ac59b3","010000008a904b6cea544a4e9be961d875fe0aca457d840ed74be2259df5504c000000002dee93aabc3df99611c39ae5438af69f141db128796cbb0a2c393ce754433d88789aa149ffff001d1e6fb13d","0100000013db546854c0241a6e0869ce7a6fb388fecc9c7a9c613657b008558e0000000076f1efdca96bc50575c7928429704457a192dd5ab07409ddf492acbcc82354c5d59da149ffff001d1c500134","01000000286155b0a1241a371d70ea719ddb96d4927662e2e4df5eb6371b40ae00000000e4f8c7a6ccc5977c49f7514cdb587dc89b7d01e3194f635de81f869553f251c57ca0a149ffff001d46659c0c","01000000d2f2d6ef0f83170552e439e43be4609cb7a81667486b9db0539d8f4900000000a7d438393b4da70a3781e7e2ff77e42ec08fd388165e1503077eac338c1b4ffe7fa3a149ffff001d21ca757f","010000009158a3c1383b11f646a3886f6a4e283d9076d2ce5f260ba5564a9e5e00000000c6765d83219d35bb008563b4808dea7852322eddd925ac699eefd4bf32800cffe7a5a149ffff001db70fdc05","01000000a3ebbea6fc883572f350fbb610fcc9f2857b781c1053599801aa22260000000036602b9593aaacfecb5dac624c61f83aa7f69e45e861b5de59f7f54eb40d4a9af2a7a149ffff001d1ece76a3","010000006eed57cf8e1e643a3e3b1667bf861afc143f802848b0c7e947e47ed400000000936f969d74cefbb8414fff9c26cd7fa3d83b1344c380e47893abeac709794ffe54a9a149ffff001d7b214003","010000006fca3de36b992c3e19d6a1a0590c8e8f8b2056a247b45672f2214e93000000003388fdde7d25bbb79b64cb8f231ae9e28b7b002e334ead9113a8181a653760a7dbaaa149ffff001d3764eecf","0100000014d8dcf3f1effd291331f7ee8a54e65779c77688ce6a1c9f708bb8d0000000001fc977a1a369fc1389ca6397386a068a4c7105edf97819d86be9b44a122cc1cb86b0a149ffff001d375d10d4","0100000066f31962d83000f63f4c3962a17afb76998c6c56f2424d87398254a8000000005290a5be1c4176db2dffcd5ede32f9b8550934af8fa97196936534f7961379fe40b2a149ffff001d3b9bbb05","01000000189e14de74dd3139c76c2908e9667ce4132b6f953eb45d7e7598f2b200000000e5f2bfa71eb6fb5494d8fc6abb89063a2d47b30cd998f90f045919b0f8359c9204b5a149ffff001d09635a93","0100000044d729b3dc61112c02a6124990a2e3726cfe12526b8b7b15ff2a256d00000000ac8ca0db24f4c3f83ae6c9d22bb4c316de6394335aff8b63b09f4aa5e6f24ee682b8a149ffff001d015b6c79","0100000030fcd9fd7e0a3451c3be4fffaeb0079011d9f3e597d87ad27a13a090000000004e5caf5022de6a6fa5cfc39bc9fc9ef09622a558e095a2c64bcaff69d9dc03e75cbda149ffff001d1def03d2","010000007cb46bb15ad677ccf44210be0e242d70a7a2880b1f975f0c73e672990000000083b64f3abc1a7d5de5327487ccbb11ca299af956d6c013b48fed8714f5f8baf0cbc0a149ffff001d2f341394","01000000b27bfa7af3ce7f2c2b1e5a9b20bd71765fa9c4f5c8d2d1bf498740c1000000009af982d59017dc7e8d520f0c84eb569d95e51f082d65c13db1fcfd4bae36613eaac4a149ffff001d27f6840d","0100000018312a2fbeab9acb3105ec7d18a9a6d88f234f467c8a503a29412398000000002d04d5ccd07ed44d6826bc0cd3e05ca72c15de15cad111fcd982cd0025fc797f68caa149ffff001d20366cca","010000002cdde08e32bc9f5e050d4adf1cc55aa46c7017c7b38a3fdf9ef1ad080000000077736412752e4b751021f290f5f11b4c4cd56f0ce08b892cc9ba2ae542321c79e2cca149ffff001d3761347d","010000009879711b9bbb99f13de5bd0b4c6ff649e6c86dcfc627b322a45bf73600000000949cf4fbd07b4c11042dce7d68420fb86f6067f5ed8f45396c910b9832c197fd3fcda149ffff001d5f492301","0100000006fd1458b43f5bc4535d0ca8e5cbd53211e45c0202bb66219632ef5b00000000f74966e621f39a57706e1db4d95dd948220c553eb21ab6fb4111cf718b97216919cfa149ffff001d32e3b94c","01000000ce5a6526d8fb05d59c6df11c880e8cda1aa27cad5518d78ceafaeaf2000000004bdde2b59b38537873874008e4fa1ba04e96a72a47b08d43d74791ee19444cd750d2a149ffff001d29e71685","0100000042ec0255644db332132fc7c4786d44578fafe7157bbe8a588c8fa03700000000d284f4b9dfe46e5f718f1dfe02d4ea89b17d822fda4be19a23d7829ebc869f9a2cd5a149ffff001d1cfe0f93","010000004b74e77ca3a7de6b178d0b5edadeacf683360a0b8fb76ef7df22e3d7000000000e33e80e24d4c2c08c4e23994f5c1bf6308f86c2d63fc3a34e30c5dd1716c0ec2bd8a149ffff001d23fffbd8","01000000d2b9db2da738e21c42d4779dd30214ff8ab8cc46454eccc9b4200bed000000003706181b3731036528f72291b3189d52ea94e86d8e74cfd5ea7dc2d9b31de41572d8a149ffff001d75429600","010000000f7ad899694317aa605af84494d1d9baa274a54ae7e385b02b03933d00000000e579201bbbff4e123350df7344ee6c9ba1b649a328a7660da1e69116c9ce2bdf62daa149ffff001d19cb9d5a","01000000eba85462adedf41a5929e18ed2507d919b838ec6fb34cbb7f9042ccb000000002e653e9d9147ebab6ebfc4c360b8b728fc110e4f1f928701de3af0eb93275b4644dea149ffff001d21ed2aad","010000007d9bf83a808944b979e33341969dc2832dea6329b9ace088b5e1eef7000000001b8e63a74cac94318b93eb6065144487bf0156ecc21493ac3001b5d424264c483ce1a149ffff001d33ce4ab0","01000000944b1a60a03ccf563fad3d92f899eb1c91b185c6c8312a2343e9568e000000008f16b3928b65d91e670a9e7dc29ea18fb0478012af08bf6750dada6278737f7c6fe2a149ffff001d9d0fa005","01000000f1a91f28208d3a1d37e95b6677c88721d3cf416fc7d73db396386b1500000000b3b3d2f6223333fce41b1588f3e9feaa00424509dce536017108a86a30d03f0c87e5a149ffff001d257d3f04","01000000f9fe2a3cb774096a089c5ed3687a90d66524ddecd1e0ebb1f6ce49b000000000f0da12ea6b2f7b87d6eb5b6c299b661e3f12bf8e5565b1ffe7fe487b0663f080e6eaa149ffff001d1fba0a72","01000000f35ea9df70cfe9b0e1778e076ad60d63c2227e6c604350c647154c8d00000000979249998a9e23a048248c14f80eb00b48757a34bc1fe6753c21ce9e305b129352eca149ffff001d09081f62","01000000b38ac6a4bb4390e538b4363d9be5fcb90c8b85965106dec4a74ab041000000004197b631cd5585d7a285238e27c010d0e7b16ebe2f4300beb16862d92bb4392a56f1a149ffff001d3f4e6f18","01000000f4b8ea2848c7cb1432d32916dd26880e730d993ed472fbb1b512995c00000000031eeb54edcfca54319c1c729e543a68d97652e01e385811e470983e5340867c8ff1a149ffff001d2ab2de49","0100000087c3e6c9ed6c241d8e7a82f6576168f7a5d3fe1501efab3a6f7bcc6d00000000736638d850a4d4ab2e1255bc73299b0c31df19301fc0a55bd8375a573247053f2af3a149ffff001d5c199307","01000000e0def8976e9a6e231648e4a17fa8c6715aaa36b71a098317e5ba24fb0000000019ff52761f6a59e2b98099a119d6192eb71659df9f953a0ff5b22515c1dec38b6ef7a149ffff001d36f00715","010000007bce3772fa911ef8b93b0a374a8477de9413ce5384de9b5f56bebe200000000026faa601857028f3ebf67ceda2d0c7348dcb5b5dc58f826282197f166975df7e94fca149ffff001d009a4f8b","010000004afd187441c481b2fb98dc075894e61c51e340136425ae840ba0820500000000b77488dd74b14d13aa6a82fa816da9b266f3b762db65fa60ef53fee4408414f07801a249ffff001d2ed8b168","01000000ac201d7fca3a0213c4470d601fbfb3646f78d557ca86f206a672274400000000c8212230a662bcbc89209199c29227b0b7351812db7dcaedfb8e6eac1a6a3b37de05a249ffff001d3942f241","010000004cc5c4ad23044fc840a7d4e47e8e4e350a83f0ce73b46811f175326b000000006e30dcc3095a6e15d84642813c5beca26263d9a95dc37410518ab7aa87abcfaf8f0aa249ffff001d1a36a3f0","0100000039c9f3ee0fa1e62f172b9171f8cae9fca96ce3cc969b27215b711f2e00000000b7d055f866041ed76929f4431110bfd4787f78b8dac56b2049a86306477b5cade90ea249ffff001d22ef31b0","0100000088f92c72f2f63ac2b301470d09564242975515f8f217181aea348ed500000000c22eecd9e89ac8688a019e2a2723b05106ea673e376a3c437271f8097a28d75cf10fa249ffff001d7fa96903","010000001b887da197edeb3f15b5d464af308ba746f4b5d3783a507919003a5d00000000fda95be64920f7cc5703f7541e4dda3145969813f14f7a4fdbd5657f41668500fd11a249ffff001d37ea4286","0100000003767ab7e85380721823dc92c1bb2d5f68c08ae7884cd4e17a457e420000000035a7ed4cddbbfd2a21853cb7c2e059285a02f3bf48d5c47cbe876bf3124eb87d6117a249ffff001d26baf52b","01000000beb34a9db643f56ca0f0dcdcabb8b715e35f5f20f5212ec7442e032f000000008f896238cbcc0b1d6582b10220a1d816319d9328c4eb78831fba843bd391325fee1ca249ffff001d06406805","010000007fccd555973ce4917aeed0dcf1c63d54653bb5a1661223c67fb5eee2000000003a00a7ba77bf8b9d2037450c11f99a6f73d72c1702dff0d73382be44a374de336322a249ffff001d04126cb7","01000000a64c94c40406be2d93d7af9b3ec3d297f8156df08d8c22ae78a89f92000000002bd40c032d858d52bd936ea4396793160647d834604b039473f79b37cc12e4640627a249ffff001d31b0a689","01000000c9866f979b4601eddb27f89099f87340fe75bf18a77d9cc56b4fd53300000000bef9761ffc444a1d31e643d8bbc6ede3a5abc4e68bc9cdbdea0f7bc196637afd8929a249ffff001d0638062d","01000000099f86facbf3a91a85ff1e4e739ed8df4176182caa7602810061691100000000059fc195b1093c45fa29f02f325f3d73457e187ac6bd4073f028a76935671bead92ca249ffff001d23588319","01000000bc09dfa092534568c44adb508e0d1f20180c106e8c4872fd24779a11000000000dc33beb4e114960d3df602914de90a9fc8ff69e68d3174d5e5f00dfb35d641db032a249ffff001d23c7e095","01000000d5041c244afd07fd98b97dc9c18ed9c9120c6bfaeccd0b61ed676dda00000000f81cf3a22f18e811175f410500f4a81856fe0a1626a989aa7d5393e55f4f1106de34a249ffff001d2d248466","01000000009c8d191d95f041e0a4b967a1a6779f75424cea1665c03a32259dd1000000007f2cca755b868a7fcb234d05a09bb48f81d1ddac6b8f9912e50f57549d5931f96536a249ffff001d58960102","01000000fceb166d494db7d59dd6a02d1e4336c6459f596a8ce35d3f9f5e15fa00000000e2e04f8b9bf7edffeb48863abad428a3e6e6ecc3da3ab65a0310eedada6daf61a436a249ffff001dac660f01","010000005fa98f22de846e1b510d1c7a9a697bb772303d170d98ab621ef4ed1800000000a1c34cefa15c0654e9d03fb760bc422d78792cb64a1fd8627d748abf36fa09663437a249ffff001d02a84893","010000005b7e335bf7d32c92dd8ddea50eca6874a3bdfa35445b466b465fcc9e00000000a02c806b54fda6960a73d9bdc1489002f5156775b27e99251acb3107ce67c065e33ca249ffff001d31c95fe1","01000000efbfe0ae86696d859fa05ab70c588199b6437220a8f6f6f4ede6e8840000000068c21fd717df9db71a0ce900cc0e2b030e535e1a289a69380bf4275dc62fde987342a249ffff001d2aeeaa12","010000009661cef9b3c232008801ff1c86afd43e31f14769267677c7d43c011300000000b6c8ef2bd8f76ffcee86f97b4377b17e234eeadcb03ec9a280b117c0be182c930148a249ffff001d1851f8ab","010000003c6415f8bd6d97104b0c5168459e9ad05c9e5e92a1275bf0c667425c00000000c122b3fb2cce0f05a4af83b39a162b8f5c65480319de07cb693020fb418ec78b1d4ba249ffff001d2b71250d","010000006d85ab8142ba21dc0035299cfae273605ad596247f80c3e880b7af72000000006331cee6932cec6e81779bcc05876c440369248ae3140bef94f4172a44097ba7804ca249ffff001d33f4db46","010000000ed06c9c488fe72909e42e076b703378a97e83445745515fb4821a6000000000721f037235344f54b110f221b13e69c877f43c914eb5b671c6b7446abeb865389b51a249ffff001d1656e937","01000000ec6ff10ccbfcaba3ba00d6fe2dd8eb5fa8a4ab2009b1e1433999dba00000000088461e12f7a6c2c203a177ed3a935e29492a12441b1bb1cc41b66cc1ac8951d4fc56a249ffff001d1428271a","01000000af583a761e662d3542b1d52364b89e51153f589d00e873acfc0010ac00000000b5b2ad606e582b55614fabbd7576eb7154dc6c298f677e2231a4af4fe70eb8be975aa249ffff001d1a7b49e5","01000000d093ae8302aaab916f024e5faa55bad35ce3b18d6b4b4a1e1de65656000000006af032d145f01be1142f76f6cde2ea57138e1abcb1a05cc86735cbe9ba9a04eb2f5fa249ffff001d2629b083","0100000032baa946b9c44f25aaa0670ea74718c9bbd2a0f1e427eaadabd97a33000000000c4721fc74c9d0c93a5b047870789d5764e0aee1f504dca40c13d9d9b84e437e2b62a249ffff001d2d63bbca","010000000961cd77ed4c7bca22f48f208c25a12d234b540a8f6a88e221f2a0fa00000000544aac5d8e88ba74ee538b5517b9602b3f2925258a92e00f116098ff176af6347363a249ffff001d349d1cfe","010000004513b38a473925f5eb41866c4abd7704297b1fe4ae6055191439377700000000153060d5f7fca678b090b105a8575c9db6535ae289af5f7f8b1c9b3e185e02c68163a249ffff001d6f080600","01000000ae2a41c5e8a80461802831851650ba0559d0c224c1093e5374f42edf0000000092fc030e4638fe42891d9cadb43da472f78889d47a018a1fe24422f5f491c73e6064a249ffff001de6a95602","01000000413229186fb2df4590fffee947504c0647015aac7dd3952977e670fc00000000c37584b09280ee1c8362d0ca3af23ff83a66d07b088473d1d5c3c8ba9b62aebc5066a249ffff001d2c4c49e5","0100000092beddaed8ba39577d4a35d58efcc61234b517e428618a9b8f9fb6d30000000021feadb7906b4b5be6fe5f340d9894f3cbbaa6ca3087f570814e9c587a09d7c60368a249ffff001d3a146b66","01000000e1e57f2335249c51472d69333e1af698a23bff430f01cbb8577d114700000000fc74a1bbe60748db45bd65179cf7e84f7fdf551592542f7de30abc72b263b85c816aa249ffff001d47cd000c","010000008eb9d6586e314764254232897e93634a97c096daf81ee1d148e1077700000000ca41e334e809011c1b39c3096860f0588c1cb843fc0ef4cf8a933da99098982db46ca249ffff001d38a9afae","010000006d7161c746e85aa171aaf33b67f283c24228ece37f3939cbefd7a12800000000c7db38a80740272f55a5814e9eae9306d5e762b962c0e6800d98c05359780e0b0d72a249ffff001d00ae596d","010000006c0f2b5f4bb575e8061ede19084778b46d46ea89a2a4a4c335b63b5200000000fd5b6481273e5956c11d3e1f6647dfc783347d80a4c87ad0e790d08ebc500d00db74a249ffff001d176b3e47","010000008673a10993b8a90c92a1c3579e4104b8a7468369ebf92de694b1390c0000000054a6443b2a85fb32c0e3544dd28f715919e67f0589b7f60cecb9a94b8e61fee59576a249ffff001d1e157c81","0100000078c30b50f423eaa892bc497e9314af296566f0e2e134e0e2686a993400000000808039d038d7de9335143bcfd1ecfaf60fd1adc6a938afcd829dd22a4e97361e3f7aa249ffff001d2748983e","010000006172d3a7b5dc33249e197c29fbf7b0827212f8d9551eec417bc23c84000000006890d8dbaa19ca3382f005fe0f2405c3143dd38894a755042a3886268c80c701e67da249ffff001d0985021b","010000003e67c1a9b88201f50b42caad5a3d2df8933d55b094569acfb68f2940000000008e8baf95ec63e6735ce810988127c693ca1ed83bfda1d7ff370524e07ebd98510682a249ffff001d2b7daab9","01000000866654efcf9d622cf348af4b135b5b343442cc3c6c3a31a1719e8fb4000000004a61e560b1c368dcb75613eccea4289452f5892a46a2e0bc54f278340593e3a40887a249ffff001d1c8131a5","01000000d716f099ef9404e05f0a58e5acb5392199ccc15f0d25a904d6d8fd9e00000000bb9b95ee00769aeb85d3e77a734e4c9dcf3e6e1a0cd3a4e14531dfe6a5a853620389a249ffff001d23a9e7e8","01000000bada5252e4c3ddb4598122772d232daafd902b701f2917dc75be182300000000a4c93facf43a83b13612037b63d3889ece855d25c3ccd095609dcd7117f2c09d778ea249ffff001d1c086b84","0100000021880bb769dca89c018b583b8927628af69710f0f99b8b4d1b48bfb00000000067106875d8806215cc341d1198b7c773b0edce472986e59845ed120f42ae6ab42c93a249ffff001d2720397d","01000000ab5cdb14037cf80c80fe913d3e4c20837a5fab039d62db5ebf99b59a000000001c65cafa971f57a907af7a2440c56bb9ff6235136bb010658e57435a536363047494a249ffff001d08370cf6","010000000313104c46a4d5dfec21d4474431c17f744742d5f5e39d5c6b54bb980000000027a94cd6a81058178f5d60ac3924a140885e76f9d0dda233a98648e49bba19d2c199a249ffff001d39d7e366","010000000a027377b527fa83de83ab141bb975c5e673283904e872c2aa4c77720000000021e6ac50620aa4d1c58d95586a767cdcec3cbefd6547b9dd8f2df23fe93fe4918b9ea249ffff001d3a0f5781","0100000041bc40c4e1c3ea3ec78baa3cc51a53941d895ef14262b4019a7a865600000000240cb82122a04e8b55afd1bd8bd1f9b6ca860625570c31587fab1f96707e41713da3a249ffff001d26cbb01e","0100000061bcde87fd1afe1cf7e40e0cb4c980a1e2d1f7d56bfa4ef1fedb57d000000000cf1f429da22267dbc4859ad8b373630e7f700ccb85aa5a86b8f7871406c110fdbea3a249ffff001d210dd701","0100000075607f9db5b162754942c86f74a3c0be31a8b22228d47e6d2d9a69c10000000088495964f1fa71c95ebc0e8b619678d8fbede6e937a72b921c7d128881e32c2967a6a249ffff001d056b0f0e","01000000a6744bb62d3fd4c38dae5c1ee8133ed606a054610ada239f8ba76b1b000000007e2e086023cff453fa4668b505c2471c890461336867a6b54b31b487b00db7102fa8a249ffff001dd1277d08","01000000c1664c888234da803f330692cd1188671df67680379428483e002b0f00000000bd7726ca361a4529c9aab874a18d4f92252e20edeb6991c07fecc7a2c626d9300fa9a249ffff001d15af15f8","010000005ebf533b54577bb3ce13d31e305e612dc9c14afdd78f79172740c61100000000072085b9cc68eb1b2b6b5082cf78fdcf0475ae6a773f483f0e662d6bdc18bb189baba249ffff001d17e4603c","010000004ba40790bd0dd0ac86597978151dc8984e6c4b9bc1710121aaec94da00000000bf77c1da5323206eabc03dad3f7cbb535dbfc4d071a62d604bfd8c57738334164bada249ffff001d23428b11","010000009b28eef4be53473d8fa9f61a8511dc3a7661114734b8e8453a644f220000000016271c93a145b124f404f47fae20cc63635a6b098690ba0b35c658769fc3bbe670b2a249ffff001d065e0cbc","0100000066478b4cc98ffdb217dfb491b19a59e5a9b06040c91a9ce3f58084a800000000d5c8bb750417e6f67bbee51f2e16fef0b7259960c0d472a13d405ff09a25bb9809b5a249ffff001d01879465","0100000032d7829e7dbb5b8c65fcd060d1d83f0b85c34682d066b09b1f80cc76000000004a6e913883d5f10afbc210a9c445fc9ec4cf199ef8d98d3d3b85ec8cabf6d4fdc0b8a249ffff001d066ab262","010000006ae084cfbbd59aefabcddd26f950279b8e2c31e6c83e1d46f8d5b5180000000016d7db7fc73142e1207c98b3cdb9b2eac072286346f04979dca40a02e4308cd88fbda249ffff001d1eb2fde7","010000008aca69f7e9e6e11cbe64ea1d633a57543cbe9a70b3c6eddcfc0780b4000000005b6d689d3a12a75084a9cadf43ab71ba669c40a973dbbd2816c92a030058ae4008c1a249ffff001d03a2d52e","010000004cc0606de732a47ceec13cd61548a1d016bba96dedf1b4360eae7ae3000000008b68168dbeb8ab2ceb6867269284970b30164d77b8e8f25bad63d1f9cc007e976ec6a249ffff001d29f2b835","01000000dc8ef74d9992144e89de14c616f528bd3ae269d00e61bc7e72aa0a6600000000bc46db0423dc863f86798bb159f4d7565ebd7d5f037c7218e72f3bc481156ac135c7a249ffff001d99c31f03","01000000dbdb5bd6ba35b6e2bb5645c15ecb0e041033f9bd7ef8763d512ebe83000000003d42227783b9d9cafa7369e2cd08fc339593e9d447aae0e2fc8556977a3b9e37aecaa249ffff001d1409761d","0100000051a6442c9d8502f648bcbcb695e2d413bbb1cb62a6ac7495038fdd5d00000000632e312b4e1a6486138c0f6078b0fbc78a1d338f7bed8900a35de7c117cb03404acea249ffff001d05870485","0100000043b54232abaa7a2161360a4eb0406dc3cced62a8224a729ba73fbb250000000052172ef3eb60630cd2a8b40504e55045ebecdb7a92d4f9c786478bef0d18ea4c4bd0a249ffff001d1c5b1af5","0100000070a755ccb0211a98151d33443ed21d4e9179522c659c590a15c191d300000000a4c23e5e4da27c686bfd343c087df2dcf2516b7800ab309c7fa12623a688702a0ed4a249ffff001d1c0bef7f","010000009ddf57710e2b0f5062cea5a669e2739a17564b2c89c5af8845b1c9b3000000000eccb2946d402400c5f55ea7cb677867b02ac457f7ad535bb57c4d7d24f5ca9d0ad5a249ffff001de0175301","0100000077e8b9f9611f060b79c788cb7e13b5968c8f30306d8c03a5854709b30000000067f18a3d154ebed6edb5495355bd3eb1483f0ddace1bf60b84c967d9c3ac3def66d7a249ffff001d2dcca863","010000002c70192b872230c3de34ce4bef16fd51201143c4e4d1d1d0a5cd648f0000000063a211dd6f42441e2e01fcb281cdb2269c13ca69fd879d3a46a88c9e7ed122e91fdba249ffff001d3479af55","01000000550ce1dade628ba1dd1ab1615ae525b90838a7262229075a8abbfaba00000000d567d09b0da537b3e938351fb6ebabd1e7b51018ca85b12b0e642c686a2269776bdda249ffff001d147fa1e3","01000000eb0700f049bb64e5844be467fdc771de01cdc2f63386553b52ac2e0e00000000c5e946f87d9f64a0dda9e84f54d9a486fa07c67ba0e7619dc5f7227572be0ce67fe2a249ffff001d047ab802","01000000ad9bc07285ed383e3f8280c3790cadb4fbf3c0454f9df3c1f259e7f200000000120b9dc47c7c1e4f4ab2c714a7d822ba32eb572e6411988c2d3748eae0c56fce89e6a249ffff001d37eb7892","010000006c916567c8c84173c201e99bee4ccdbf0f9a6b66ae715dfa00b9241300000000fda479b3071fb4ce8b8153a26161ef6d6dffce1c42d00135c3c8da017c526e2bcce8a249ffff001d2afac893","01000000add3c7f6cb8e5de0e9f7f3f0349981227a517ab4c72d50693bb09c60000000007702e2df44384fd83eed6b991a103b4b2c8ea4828de91762d483a99589552fd34beaa249ffff001d34ab16b0","010000000477eb7e75c50ee4923d4a3c18ded3f5361a640c23c3e7125f2a92c30000000020bb1eb007e127fb74795cab57108efad0644158e0b67ffcdc090b40674b6d0100eda249ffff001d2500a6ba","0100000057ba61f3cdf6b343a15572522a3eab89dc9cd76719d410c33cfc9e4e000000004dd1c6fd37c02d79578087fcf20c623c658425e9676437db636edc704756f5e56df0a249ffff001d2193b3df","010000004ca677f2fcee20550a2578adb598f1ff4a1acf9e950317b4882cf0b60000000034128fcf5dc8bb1a1a0b817af073b65bbad5276f745273d750983bdbebe2129e8ff2a249ffff001d56ecd802","0100000034d7da80670abbc25fb11e7e153d1526a8cabe83205412c4758bdbe500000000145363d6ba8ea7107507a93dd9e823846d4e6ba8141984c69455a72145bb4b5f62f3a249ffff001d2fd82464","01000000351e1fcda3235638e422fcc6c3b3a3faf8aa9586f2353c32d5001739000000002cecc8604916c210510da8e1d7087fcfa03c5910c7a9d7712fcea49adb541db4b5f4a249ffff001daedf4105","01000000b0dd4843719ffe772162493410db978964e50a80b8c5bb79b257498c00000000d39dba54996a3c81f0ce5849ec4dec6fa5793c1c3207b1cd06b8fefef8995a6384f6a249ffff001d021a2ba7","0100000048addf60d275b503d11c2e0d21683585b8586328f6a72bb58aedfd9600000000fe82e82e32d82f65ec03a2b7f93f76feebf2b0d5be8c79ee70b61f34ff4b0cfb5bf8a249ffff001d3628148d","010000003f727587549547019e5d74a3ce55a3842e852899b192424b2150663200000000612ec673eb3e6b1b48b0cb8410bc379afa8d47416fb42cef8a500fa3e56bbad6aefaa249ffff001d539f300b","01000000d91778d0556b71ffc7e730f83db4ee84df23383f9f3b5845b549e5b4000000008de6ebc1a0a3822fd364baefb7d4b221e8c9c5a4a2684c2026e401bbe973c0da2efba249ffff001daf0d5202","0100000002973e0a325d5dfcdd96d89e28bf5a51821d323e639ea817aa646e07000000005211b7fa46c745087d06d00678a47e83e9edd93110822bad677b6225f636879627fda249ffff001d165ed4f8","01000000e74ad479620d7e03911d1319ac72307091fe6d600946aa19c68cecdb000000002183e9f7b7a311d28053d7ef89fc4b361030b8902ba2203bf3ec4594eb3febb8e402a349ffff001d160becac","01000000cf2752c850804b59a334aac16f5b7511829281243e63335a7bed34c50000000046509f1a97582db1edaa865737cb3ff09315dc8a52943e27c74fc3a1c88b85fd2304a349ffff001d59a7e705","01000000c1dd25451622c8b2e08049c3993c1c78a2c5103dbb10048ae32f89f400000000b52a1994930ee957a3740f651f8d5e1df44fab372f67c675f222c621acecb7d24806a349ffff001d345c5610","010000007e8dea5a0b8cf887e10495abdd83899694c1c6be140df2538be5ffce0000000007b795a6d18598f1881e03c2e2007695056ffbc66428dae26cc9a80d7f90eef6520ba349ffff001d0521f70e","0100000017178e0d7721c416e7cc7ad22b651f5a6ea00bf699c431d5a8cbde72000000009d73182fb8f380c99d8254e89e0ee5a9fa85171dfbe59944538d7d178b75a661760fa349ffff001d1f6f94e6","0100000010d7f27b3bc434ea3c0edd18f56765208e399e183b2d8119b3883b5b000000002c212f6c618865445042d92770f952aa87e263948636a3c13f8b15c89e73e3e68511a349ffff001d99b7ac02","01000000ef0a5cffa690be2e1fd83d950b80bd4a76942f0084ff5b85370798660000000069c18230ab338935cbee13eeb3f4f8019ba59321da2149b56076f8c38dccbaf60c12a349ffff001d2a4b760d","01000000d8972497db27abb39c03ac49db45a70a9821edc045797bd5b2e43d4b00000000e4c2f80c9c309786e6e9a8397372e8249ebd3e90bf769424d64ec102a7ebcad56412a349ffff001dd1934b01","01000000987700b7f711c29477a317e5c6ba923b032c6010c5d368cd694e24b900000000dc9624043958000f130ee77c17cec2ea56aa27b7647215f4f4dec96a420496935b17a349ffff001d149175fb","0100000041ff7eb5f70ec5c53365a2850f0fe591c875d5535a09a661478bd2b2000000000ea3013d80dd24425c204957ea7889cfb60d167d777f4891affe3086b6e4e9f5e819a349ffff001d20783069","010000004aed2a5108a569d33eed7e032a37f1f8fc170db5b977a28c75895bd000000000a955b153b6821cca80155d14bd579ffe326d8c72d72dc4c6a6f84c3fdbea20ae3c1ba349ffff001d355b7d15","01000000968bc2d347d0ea7c5ea8999a8b738d77c18719657e4fe1ede6c6a4d90000000021a982d6383771b9beb846c1a0b2393c17c398141dedf098907b993c2823e9a5b91fa349ffff001d2941d34a","01000000fa6945164d3fdf6f194a4ef3864c96e2226fec1f9534da702f6a316b00000000ce7272bd51f461fda7251ba0fec475d8fc59167a795d976daad79998a332dcb6d424a349ffff001d2c4d65d4","01000000a08d6b690927ab009ce8343f3e0e6dcca1a5ac48d04914184919f9ff00000000c1f3861d092e229ce52283e1b26a34c34d160b9cb5bea6d70c33bc8e502b6d8fec28a349ffff001d04930b84","0100000085f3910fbade1d81ed5470a4181fcd11a3f0b3909198ac40b7e9ead100000000876c81874e112d4751e5362a6f01db739d1824f71eb3dad7c491955828f180615d2da349ffff001d0579cd7f","010000009994e213571ae1d54c9519b10de88b932e038fe3687b647ac438f628000000007e1ac8a374bac15e690fff2b7f9159575b4bf31f70bf345cc7d81f35d368ae042731a349ffff001d25b22f35","01000000f771300aae7041c27d22e6bf011a7e4b48e44f3552651b1fabe6f13400000000e6de2efa5a3a4f2342ab583fa6e82d7a7949f8b0bb1cfe23cc416d9e2f916f3af434a349ffff001d2c7a7700","01000000bb842c0213f81b4122fa02750a45857368a9ff84f035f3a47b6309b70000000090672371868ad5a628dff909b04d23ba4b5820ea448c167a7cb5a795d893ae7bce35a349ffff001d1877b54c","01000000483468b0d9a9065fced7f8ee967d6c5693de4dc7c758e88a473cf429000000006637b043cb93f85b30c23e18db58716b2f07537a5b1b95f8576c26431781acbe583ba349ffff001d170449aa","010000008d4ee569766d3efecec3f2d1670de1aae51f985292b71bc947cc71900000000075f35e4c62d97501c684070fb8195bb72980fd12c7021a2b8a7250d5d610e2b9bb41a349ffff001d04a1f912","01000000d3efecc049f5e87844b7fb5d8832a65850bd9dcaad1d18a4125e376000000000fa3a9d5716372f63a3b1585b70ee43ddaf5c451dede1d2215ca437e7430dc9a62f43a349ffff001d0103ebeb","010000006c36c964013eb8a412e82c55e271d214aff90832b3854f66d8996077000000008a284c7f59f43dadf23caf60702f2edf64951b7b54552724ddb66184d9ddaa615645a349ffff001d19567a8e","0100000046ac86737bedcbe4520937482fe0e76f8807226882adbe2da534e1f400000000a5ac6029dc2b4d22b1747631b644f23fa135c98edd6cb1d2d2ea10622f352e1e044ba349ffff001d321fcb23","010000002c6e2d8ab67d707081979e0162376938fd9d0661a10f36bd9e44ac6d0000000026903ae626598c43029983e0dab9eb12500e69cb3573c90f4198073d92cbbcc8414da349ffff001d192375a3","01000000997a24904b427633a965a1b365ba672569b38bcfb5b3ddb4de23c18200000000139216f34809611eae64930c501d83fead0aae9a409ed4beee1d4d82ef6a8949224fa349ffff001d2ec24141","01000000017eee030747c2eb8b1958365bbaf54b2307b36e4360cffbf25f260500000000d85cac89972dd50b25ebcfb35ab9c3535528ea68bdf5129dc6bb59e99949da4d8d53a349ffff001d07ef1db0","01000000fc4017b61cd1614371699b40fd55b606f2c0ede4d2aa3e7d2b8664df0000000076c478ad85e16454040852621431b38c1d02e0599e1452d6c5a1d71def5423743e56a349ffff001d2050832f","010000007413b713862eb627b1a1979c0ceec0942ea7df41bb69d0965fe41938000000001fc685f0674829c92525a0ec2a497660eb5309c714fcb6987f8ca5e686dcf3df3e59a349ffff001d15cee30c","01000000c99c1ef70064f38a5858e3c99c6469b684cf9963710835f1e31144fd00000000bc2fb440ab0a29d5bf50f00c491cb79d3bb773a995cead9f5e0a86660fc2cc755659a349ffff001d04d56679","01000000d6cc09ded0e95ed6af727902de728ef2994ebe755aff1a150c8bbe08000000008e42994e755461d99402c9ea95ce5e6978e672b1b849eb12d07cc99fc3a6fe16105fa349ffff001d2a9e0843","01000000c1b83b934feaf86960126f29932fd139ebfd921e5e0df590bfaa4a9d00000000a69178adff89615132a45eddcf1d725828992461000376b2fccabafa55ebc83c9f5fa349ffff001d75d39302","01000000dc8ac3b586e7384a28a66095745d92739ed0ab19a7c7a94a8747a99c00000000527b970a6507e5de6d580f2b3b7f78c291822f1dc21ec81e6e51b81ad55f2560de60a349ffff001d378084d6","010000000ff7abbf42186640e8a0b3aeb8bb3944202da901bc025810d3ec6e7d000000002314becc9a548992a7fb4c3c56295cccb92e08d335f52bc60ba8d0b70a76071fb062a349ffff001d5466d804","0100000082c89c00e500a628c12b4fa66504d9dec36f0fa030f8745f53a194dc00000000b58f4edf8bb1b5a08f7a2cc999a1b006804526039b0dd3ca7101954483e274e63d63a349ffff001d146a02eb","010000005502f3ddf83618033947e860f008909bc2b021b42aecc1ab8b90b4310000000012a1b75739c40aceab42f6c0ac605c1608b806bbbc225e59d792e0b598fddba43969a349ffff001d02606fa7","01000000c03afea963a88ae4679b24baf72065b1fde50d2c6f10367ea95f7c9b0000000034f1def300f7b1c69f13387dc0b8476d109ade06379fb3c3a1cbd9adc0754970866aa349ffff001d331029c3","010000002406ff3ea6c3e39217ef6b765ec1cb5fbde45d7c1aaf0299defeb264000000000da4ab471b734b1642387a13f0294036c48866eca7283b8d22fbb97a4c491cc7b36ea349ffff001d0061131b","010000000597cee1856357d00aedad2d3ba0b79cd69d92c185273d8937cc8b4e000000005b3c024e83476967db87ea1c7810b571302c722008ce2da6ac2b15e3c22575826070a349ffff001d1ee33806","010000003310f68bbbfb188aa8ae55b83385d0f618a5bf7883091123345fa3840000000031e31b4e2c5007896be83a2b991374beda55d6bd2238a3f2c20a8a1609dea74b6474a349ffff001d243e7e2b","0100000003b0c0d34a4865bd51868ddfa68f5a92a3f46517d6d2e4dd70043a85000000008f5c65d98709ad72251a5ad29ed764625f039930888bc5a78e13467288773023be78a349ffff001d4fa94b15","0100000052e32dbd98db7f5088e617fe3744122b2b5daa37c251dfba45b692d300000000de729f3203ed7ddb38ab07a1701e88bdb6394d290ca93894c5d3309fa65c3031c079a349ffff001d1d2ea912","01000000591ea37fe991baa9cc91113d521f3e9a09df70f1698794a38ed0ad6e000000007fcbbb9d8b2240858fdf0f6041d4364494984dbdacbd5fb22b0c863883c78d70437fa349ffff001d2774d739","01000000532f619df04d9e231de8332f686211644e14d5b633dbd51f06af57010000000003346c4abc896dad424ca63b7958f785a0eaa0f055acb924278c8f4a1855a6785f81a349ffff001d19222c93","01000000f5b7dae5fd6420929ba867771c1db26dcf967a22b228e0d7da6c054f00000000d5b2995c08babd8ab7cc5c68b3a5cbc14c524bd74f0280dc0c197b1d7df3e7d32587a349ffff001d2f371d4b","010000008c705d705b476996adfb5521824d8e077760d252c039a22ebb47ee5f000000003c43902ac18dbb2bb9113ede309518e94a84cd7e25f0417e535f61400e8c02deff8aa349ffff001dede9860d","01000000654efa4a1a84e1537961ac1ccba9a2ec50644ff104bd04f4790edaaf0000000017e9ab9568bb270ee62302e56f1b6e6c5d6c89d3a77dadd2b30873115e983f8ed18ba349ffff001da15f6d03","01000000fe814b05a8b25cbb02cf2f8ff4c6bf6206efd6be66479bf4ab3d74d000000000cc561ce4a05404524da68377d5b8264e6c24dbbc47b8f6df2f314c2eff2ab9dc518ca349ffff001d2144ff57","01000000316da8d71f0c33a2cc5910103989f72785aa4427ec63a5e173230dfd000000002b4314be055ae1bdf200b7d40a02ea2bdfa38d6583d23d4c7082852ac6d8e1b92092a349ffff001d1d98c322","010000002f55735449eb905df7757d297899d65633631a2f2a34fb00fd2219ff00000000bd8765635f2d6b22765b9e2fae9a60baa40d7ec4b3dda9e357f4bafe878ee7fbb394a349ffff001d316da172","010000002d8e79fa6b8f9c4f6592aff571d573b5327c40037c3c2f948d78135c00000000931b38ffd19fded6ff7ffded31b4f2db1fce6bce29f18fdca1e14a1ba67770827097a349ffff001d3781a983","01000000bf9c394246842ad1955a2b6c6a5e7ac2a1133619f269b89f52e6749f00000000f9d348e0c26ae10913d33fbe35b19611c0226f0df246a5f05890b2a441b4da0afc9ca349ffff001d21352b3e","01000000733ebcc3c3bc5fe2adec156a4f11d4c1911a133b08bec13413f9877e000000001658b837aac8335ccfd73aa6cd2ef752bcf97bd5250827d6ece7d62ddd18349be8a1a349ffff001d2df1bb28","01000000f8758fbdc47fca10b637887c0fec9f07da0c507aec7949e5f64a86b100000000ae81b1cb62bb92a6f455953aa38f78a06b8e6c457b2b8d7ca7711e7dbd512ed150a6a349ffff001d30f0098b","01000000902431a9f1694aca1791be5cf83690fb856084687e12cf1e3a32d2180000000042e37f773ba2ac4b50fb9175aa3a09c8227df71198c5ccb5877caa524759df9888a9a349ffff001d15454bb5","010000001de8ac405110c2f5a65e237fd4731782a457f2b3406efa15a5778828000000004dfc2ebcfe2b33049d0eac14a5ea671b67687bf91d76aa77dd6b0b6098b0cd2800aba349ffff001d9085e103","010000007b4dd85bbb4f0f3c9ba9224ae787b17f4dd34cc5adedf8d1920c98880000000039ad958fd2cc8168124f72e3bf40a0342e90ae53356db58dab8131af6cebafe314ada349ffff001d15142e93","01000000e6a9641603b731c843924267326ae07429699a2ce8edb3db1a18a95f00000000ba5a1d1d7d8a2f0cc3bb7552cf8b8312adde9b19879c394907348ba77cf62109d6b0a349ffff001d046faeea","0100000042a2978f0d0c175d5eb90b5506f389342e7d67ea71bc257ba591bdfe00000000e926f01b1dcffabcf053656ff30fc27419a872f858e4b4cfa0a1aaf133d40586cdb2a349ffff001d191c0586","010000005eef61a04ec1220b114345e972aaed2706010abeeaca544a11ca740100000000f8fcd42e9df89f253c00abfce78ca5bd001a7e6fce4f810fd447bbaccc27238107b6a349ffff001d2bed4f90","01000000f471ca988641adfa11df4a53ef091c02c4d5befbd9285917e224799200000000c91c067c172ecc950e40aa3ce09d641f8b0bbafef7f4f68fd6d72d1300f94189b9bba349ffff001d1b14b6fc","01000000c8eaec69ceaed4cb5d4db662269546db543147e99332e5cb3b73923a000000000bb2b353f67f12722e2761966bb05520ef91467dd4f749caa6f58555bb34dbec30bea349ffff001d15ab7c97","01000000d1860575e53ae9399e6be50116ec5bf3a0059f1b80a4bb6ca79fe90200000000f3240b7079511189767bb5bcbade73e2d8ffe510d9b554be1253c9861d888a28f9c0a349ffff001d3831e4cd","010000002822942ed4aba2e674c72780e402e30aaec622ca7ebd642f2194ce6a000000000347d14d73a333f044e21ced122a8ec073808d96d4bd25e67accc8ad3e90c179fec5a349ffff001d02f73b97","010000009184adc0f4f21fb30c27a256ceb0db518d3f729fac3b1ad9f4dd57ba0000000091fa5e4c364aa7bd059db06fd7dcc81198fdbd4f9d1e19e3825912c5f98cfe0aa9c9a349ffff001d090d8870","010000005155c1994c86829b466b54b38c462baf85beeb8a37ad4ccfb1efb8e1000000005cccb30fa987168127822e5ad4ba56d964aed8d00abf29d8410aa09e5fbcbbf86acea349ffff001d37c9191b","010000006b77fb38d79a168eb736e389de5bbdd959c368f373d5f5622e20e1710000000000453221ef38abd93b33b04b48a73863c0af08c15b5a9594a11f59f7591b6010c2d3a349ffff001d19be0b13","01000000a956c58548bc506189b63901cb7f915331bae1b737c96d3972acb80400000000500a9216e34d3de1120aa3f72d586b3bb305e567e9bcd32d393a24e316d45dbb47d7a349ffff001d30d806c5","0100000082a7eb161faf5df3b1610e00469637e48d0cb3a5a19afdaded238fbb000000004fe68e33eed075f971c7fb3e2ff72513f347e51e0b5a142a83da459d72a620686bdaa349ffff001d214eff02","010000002e8667f066378d17bc5889f813e7c62b35223aff71a5068f487366ed00000000062b346530606a88603b2b99e0d96a9d89e1471e426cd6d0b96f5af8f84c437d43dca349ffff001d08f37a8e","0100000070313b2230b5b1dbf315ee2b8d42a8f3233825c3c5122ad734616eba00000000f6c28135366dce1ba29a3d35d284089466af7ef35b2ab38518bc519293e783b399e1a349ffff001d23117003","0100000061d2f8ff81d3a1909d28252007f6251ea0fbb576a257e595e7eca70c00000000577248d81492de444b6b93783ff4da76ab3581e156d8e5900a3c67db81e0b0fb31e4a349ffff001d00fbad52","01000000c8dfd3f3de8e7503e6b3c894029a616f73baa463035444e12c801e7b00000000bba28cbe1dd7be06c5ae8a31765ae9ea852455fcc0489ec0ebf0d4858233875d1eeaa349ffff001d0250ea30","01000000789c451da0a1a9ea43402a39cc6a93ed592a0d65df3ba007b38c8d3c00000000379a5804a9150b5b3f46f691c17e8f070c8a619318e8b6f388a16f91e23b3d003feca349ffff001d29a12db9","0100000062f22a8f5a0eb0be6e133620406c1d054174297906cf14f7fb450d1d000000003927e6f11e766c6577cdfbfaac74e0072e158f003fe537d5576832d68e40210221f0a349ffff001d38081d40","01000000884ead15e58e76254a250a8a7731cbcf033e5fa5be66c70043d8767e0000000046f8dd6f38c8ce97323d50712941a14ef10bbfe528cafb2bbdf3316fc0a70c863cf5a349ffff001d15a8736d","01000000f9de242a35d7263a1d8f1eb3e9b979a60fd1dbfd134cc89cb5df2c6e000000004b2aafd31b102dbee492ec527d2cfc5e6b3b15cd0b980f03b7421f24054be09ce6f9a349ffff001d2f149e5a","010000002eca49ab67d0c52757e834ab829b91c19900eefca94d8908cca7ecea00000000cb915feed600107e1fed9c2204cb72a0cde0e7cd3c0573242c55b902b549a511e1fca349ffff001d20ee7c15","01000000c3d92501712e0b3444cb5bddc78fe183b7f85e3659cf7bb15bbf6aef00000000f90beeafa40ff38494ccdfca69a14edd3b790741792af4aeae4800252934531e7c00a449ffff001d33aba1c0","01000000cdccf4e3e3fec0662f50caac58d803b0a9721c00c3728aef2351b8e60000000032ad27596e018b395c62841524bb6c0e56b4e440a50b131e283647ebb55754daf302a449ffff001d5e80f908","010000003097aba5d25c0b6e1441ba5ccd99532d0dd6266ff3ad1c1e0fcb8e9c00000000fd2c0a9063f8a99462eeae545fcabbca94481f6a01ae4dc7e96b822d8bf458157804a449ffff001d14928388","0100000023d031c7454da480251e67588944f2dbea1aba7f5d48bc384b766dbd0000000084c262fa72ee316e362248aa7ec5a1860ce48b3e96f5541a01d6720fde90d559dd06a449ffff001d08b70a9d","0100000013e8ca115b03f0cd1b1853f469d329c92a54c36dbdb3758454274f2e00000000832afb0138a450539fb6799494facb9e9add67d640fd2e339b911807128d16e65c0aa449ffff001d2b868cce","010000001935255675022d055b282da900e525926e97657c9fbf3d6fe1cd95c10000000092918f68fa9aad94b29a71c97a88b56f3ee72aeaefefad1eada15fe9cfaf2202880ca449ffff001d398fe27c","010000003822ebae18944b4dc2599083dc0bc9153147cb252be76308d97c1da400000000b02ed5782ca93effe0d3095f4415f86ed8d0047bc838e08d58b00f4b91a5e7c65d11a449ffff001d1ba4f7e2","010000008b4fefe62e362232c1fa7c4c5703e5773a91491c0f9ae46fc107a510000000000fba04e8656c63b2cae89833a1c56712b6ca1d345dd51ff949abeea4b9b775619b17a449ffff001d244f54d3","01000000e967104a9e64d279e4a6012545bc658177e206e6867501173038acc8000000002bfb3978f42349f73c91d9e1af55d97266cbd0ed316140a94dfc0f9676946b0d2f1aa449ffff001ddad75a0a","01000000cf33fe4dfce20955ba23b4f0fe136fcb10479e1a4bc0e1774690c71d00000000fa0c04118bfb1a35cd7537fe0759678e4decbeecd77ccb3232a87d64dd42bec8c51da449ffff001d310b72cb","01000000615cc30075cbbfe620aa87001fde8ab5ce8b134d6017e0c1eaa55a8500000000250d3c35de0dd8f006d985276ec829d427762eab2a5f5c8848840abbd953873aaf1ea449ffff001d97ee9303","010000003aa4b68155f275949d14bbe239316f45be4a25ff8202729318f5f6a700000000f4c294e89aae2774051b08aebd07c8d01ed443fa08261aaad6700250ef728095fa21a449ffff001d00b17fb7","010000005a67e793f682a9181a84c770516d8dddb63b2ff4bcef8545f44445b70000000020269f4750da589e4c4ef66f2aeb8176932f94dde7760ade5c1c27c1773cfa4e7724a449ffff001d94f9fa0b","01000000661534d456ab381a2bece46941278d576f8be790fea18f1c66fe1782000000008d6f84ea9e02ab26c55991c4af31e5c61409780a359bdf7354e428083e8801572925a449ffff001d18803707","01000000983c261ccbffcdfa59de9e49b1b7bdecabda6739a2cd973e80e9de8400000000071a62fedf86189453098641b622f3f34216d7912e99a49f882eb8d54997df1a5125a449ffff001d290a7600","01000000b48e4a9c92a40a6e20857cea213b37c8fcba4f9955415752ccec0c560000000064d9ab8a649b9b1f516531941cf204c6104d55ea9cc97d71bd5257363abd7f335329a449ffff001d219e9a7e","01000000e1fc21ee7abfa0e50d1afb80cdb5987e72abe39003b2996d79d32e6600000000765e3fbe8207789a78a878a4359f50826a6dfb597cc1952e540e3bf8cdce01fa352ca449ffff001d06f25fa2","010000005fc54dfe48124f384bfa83e67c90b142f2f717676dd5409422d7955c000000003b6164e6518ae604c78088589bb3185bffa5e5f94b09ace6dd763461b88d938ae82da449ffff001d061d2213","010000008eaab16d40bb4945cd3b34e395508e9595b58aa7c71c534f1a71198200000000b822d2654caaa0082578ddf536c4372c3925a7e46d725f0a6667018777ee57cd8031a449ffff001dd998800e","010000000706450dbabe82a73879b53594a122befa14923d7f596af9f86cc0d900000000e9f0df29a12f0508a0fa56121b440b5b4277553391bf6d8ed6814d51e9f5e77eb431a449ffff001d21f94c78","01000000ffc73522bf430f390b7233163f084c910587b1e56c3837c496d6ed12000000003fdd1e156c278b17614781d5e81b075b261b96c928556922fadaeb3690b6e8378f34a449ffff001d373b0189","01000000dec22a856277ebe99f21a4b4b14f3620595a16616a7ddca765e467cd00000000ddb6e597ae086b58cbe6db1ef4ef527b3560a983fa4e6ffabbf635f722daae217e37a449ffff001d346a7e69","01000000f812f4c438007de325b46917a43859ae807050989f0bbb32ee58e89f00000000d155575ad5c915db0a574a482216168402478780705f676a3eff44bf260544cc953ca449ffff001d2c118148","010000000121352884226c5fa187e8f3cf3ebb2de3819919cca61c37af89da70000000009727e7f4dc9a782e33351699a97298589f265b0dea2beb52c9b8655908e41f404640a449ffff001d2bd051a8","0100000049afc99bc726f55f89eb5e3e4892bcb26c4f172bd4ce5ad7c7beadb200000000eaf302e1bcc78aa5b82be66fd6bd2269d7a776ddeb839d37c441e9cef0ee77790243a449ffff001d078daad5","01000000f8456cfdcce05b05380f3118db07bce9c91867ecb114b48b1b3c1fa400000000277f707d51919d5544492f5d0b29bff629de87d899f1688eea00c2042c2b1b741e44a449ffff001de15c2305","0100000017eddfc8bcdd787bfaa42b35bfcbd51cd2460d9e3aa4986e1caf004a000000007a6dd1afe0e11a9cc94e332ea6cff1e4b9a72ecebe691b7763c1cab8e806f23b1245a449ffff001d22a1384e","01000000e726ce68bef16485838628abe95d8a39bcb0b51ecf77de5bfac7c954000000001c28fe4074f67390d81078658d2beeba2ac0bbed023724162be859675a9b3c9dd145a449ffff001d8dd3eb02","010000005dfa5e91ad6468ba4b0bad906853626c965630b22d70f9fc1be6e8e600000000a7f1ef247ab4b46f5c36f17df4520c299ca8c54a496c80f55d15ed230175a007b749a449ffff001d077222ea","010000000960ef7e99aab8c9036aba9131f4b4899dfd899c83932956bdda6dcc00000000cc220493867eaf165dbc47e4eb5848236c71f473e073b6f3f99eb6232efabd456c4ca449ffff001d5c58eb0c","010000007a8f5997c482b1cd3bc2e06af2ac6ff9137e0af28cefd61a148968cf0000000088bf1c9ac8fdb140b17be57192622b1d3d58b7ecf93f10775f5f8a07e018853e9f4da449ffff001d7508d405","01000000ef27dcf30a21d446d9a1174556700f011d2ee148d3a0fe9aea2d9f060000000035ba45c6fc7751180bb54783c9d4f84e2fd747ff2da7eced645ca4ea1f3e01d8f44da449ffff001d174b2cf9","010000005f5eca54b15b5c8687f8bf0181f8cec2bcb8e3a8278a05ba99116d980000000056356e284aca5e63f1c5171264cfe7d4a8a41769dff64a72cff3c71afacc1b086d50a449ffff001d2fd51794","01000000aeae0ee24bbabf14ed30db684135965f3cd14bbca6cd3deb343ed25900000000b0916b2515c25c604fa268a4dc9251f3cfc8163c81fe0be28e59e44e9f29551d3055a449ffff001d1bfef659","01000000e025421331e91b2b6293be91c27605ccfd8c0cae84b4d127177f1da500000000be430fd3583fb5e479c1b20c7959a5516286fac01bdbaa5cfc7e99b3d8f220ddfd5aa449ffff001d234011b7","01000000431ef7a13a82d2b22f0f1719812697449146cc4466bff41e7c0528c00000000022c30d3f89a21cc2e6015930f0f1154cd9ba4fa02ffa50f083017cb2e5ea9019145da449ffff001d185f5408","010000007394af1a3079f485a2974cffff9668d307fc28898d26fc49c0fc349c00000000933bbb36f4c192a9a1bb75dda0b7b7e01417bebbccb1c03e9809b72bd1f91d1dc760a449ffff001d2ec718c7","01000000f50bdd0fb5cb432e21d9e60082a34c2040bf6bf1d1a16d787efca5d0000000003a0cfec3df7393c405682236c55b385dcddffdb698c4711d970a474c9a4991ec7e64a449ffff001d13fb9474","0100000075310efb29dd4cdf9e000bd895958d019d364b971c8c9b71be4865de000000001e0f77bdf8eafbac338f7bf917e3248ea7986cb4a3b2b6482543bbf0e45d73dbfb67a449ffff001d18cd3b8e","0100000006dcb13d5eb0f63a69c795abc286c7cee3d2b18e66a7281dbfa169bb00000000b3e6a92776034c3f6b95c106f73a9ae056c5fb930138d2968c94e84d922a3f3edb6da449ffff001d361d15ce","0100000099ac6b55cac6af325d36a37d1861475db80da629fc61c32c86aeea9700000000208d74c69635bd43c0123a287ccd526a472c82bff967ef72ff32500e200655b18a73a449ffff001d05ff13b2","01000000cbee8276fea1f847c11aa407c96c3fa358626d5a657a15aadb2d25aa00000000117c2b48b2272b826335aa4420fabc19fb0a56b4d2980a9ad36e0777a63ec72d5a76a449ffff001d0431dc5a","01000000edfaec960c4cd90b37f2d03bffe89287a1f4fad14c24f83769a4339e0000000050f3881e4094d26c37fd3f542de88166ebe3881b0551b8ee86b4de6d109b63a4ce79a449ffff001d3738044f","010000007ae6f63020dd3c29812ad534db2cb5279195588754d419f1aefcd00200000000052e0feca5bb5040cd3a4a8466aa2fbd14b845dcb282030295379ba8fa024ef7bf7ca449ffff001d0335d277","010000007606166e8e94dace5dc2f4476fdd67870ecfad6c351c99824f7789ae000000000b2bd127cab7b712b78d1f93f3a9851b140ac8c478f0763506e06ad932045246fd81a449ffff001d2012c2d8","01000000f445739d3c48ff50cb06cdaf7d03efb90af1f0780d11c5a4ec40d4db00000000a533e1ebced577e070b49e4288617b9a3e0f245434d9fbb64b7a76dfbacf9f6a5686a449ffff001d066607de","0100000003e38004696b1915f8ea7f6e220f3b501e1dda765e466dc99f152aa60000000005b221bc77e6957ecb9d9e7307cd52ddaace85e6e962590e2187648d1b09f34f3f88a449ffff001d08268aaa","010000006cce77cbdb480e25cec9f24903e8598a56e22ca084e362ef668674ae00000000621d6644ec5a000f7e93cdfcd1270bef040e34acfd9bb5845bc06f75c50561a5358ba449ffff001d1cc3d966","01000000f99d6e0d773fe2ad93fc79d86e224c2550c4e8dfae349bc10d5aa61500000000327ab87dfe2b251bfb57ec5a671e995311629f118da1d8fa003c19fe81b768bba390a449ffff001d018a0491","01000000b9fb3a0a8d4d5dd9f4c68fac1b952a3b9808c9d2295be6ed7e9309e100000000aae47c1d5fa368cb905b431c2c2af3b7a439d2812b881deba5b34d2905bc76968793a449ffff001d2794c4f8","0100000023d1f23fb1a283b125dbfd31e2d4792eff28bb2976e54958fbfbf23200000000212075bb1b087afc56e9347df847e03a5dac72aac07966a3d396eb1f59ea150a3a96a449ffff001defaac908","010000004e5349d59f80a6e71e2d60fc804219a6b9ca7972c7cf82e39616d20d00000000966464d35339419d0e783a1e85ef14301217d2e8c62793ed6ad841ece292fbce5299a449ffff001d20aef750","01000000af91cdea28273abff426007f1ff331607db0f2070a153897558773c90000000040882e24f26dc08bf7cbd6a945125cfbb5cb722e759d1fbdca526583cb0338bf979ba449ffff001d28627f12","0100000073612aeb3c92322a2e8550dc8db2bc7ff32dd7bd5fb79697530af763000000003eca78fe9d925d5efc3ad67e9621a788e76324fb0a3903f43ffed44797ebff69229ea449ffff001d314591f0","01000000f9ebbe42b92cbe9b3c21e22d99948f77a2b12fa898b15dbd88121d38000000001712417ad00bd9dae9e1505bb56661a424a54c045bed2b457fbaa38091f4999561a0a449ffff001d1c028efe","01000000e244b043e43d2a5869f9c10c89ecc23bbe7b0dcdb562319af759b64d000000005e389634f632e5de4c3c1f9a156333c833086377768a1c1ed8aa90f0ece4a3291ba1a449ffff001d5efd5803","010000000b562276c703f30c76df9af21c06c4b353ac0c9c081812edd84affa1000000004f2e10e39a21a406ef92825cdc2beab64206b66bad9a4e31bebf9610fc6d3e64d3a4a449ffff001d1e23d775","0100000069139329d249ab884dd2cc314b2a38def372f08f03d7fdd08187f5db0000000021504ac99abf584ef694345a4fcedf1bef1f94574dbb25d9db634749a09aab7a56a8a449ffff001d293a14e3","0100000043bdf89ea8f481e7ab41bbca835c13a2ead857e91f9a3e9162cb830b0000000028372544a095d080ff7a4b6fadddbd5bbda0312c79530cf3ad0fb5ac8513abae17aca449ffff001d282a73ea","01000000f163698fd932a4fc0adeb67a40dfd88702f26278634c4a3864b61c93000000002df6293a341157e33fabd6893f7de42871eaf2c986b0ff0bcab11b6b929d78aba3b0a449ffff001d20667667","01000000b6f9d43fc78a7fa5f5ae952447af1b89cec1bbb3b4077cdcafd1689e00000000de8b328086f2e40fef3dbfd8f9d9b1c4bf4b2419252db5ad85896a5742cae7f8d0b2a449ffff001d1ae8bdf4","010000005dde69c2dccb90c1c07a4f3826b88f25e326cbba058808eb45fb0c0c00000000d78af885994eb85b825078c01c707e78e7cd2e910b443bb1e176ca1abc646f3433b5a449ffff001d1c91dc5c","01000000075aaa1b66fed7ccfd6c4260eaa1940ddea0aaf79602ab4585fabd0f00000000d896caa10916eab1789fd9017a0d828d7a9ebd13c70b1a7bc8408c069b86e518f9b9a449ffff001d3a10a381","0100000052523980c5b5ad1ebb5ad7e37d8fee88bb4fdcea657d2e217a4c4b0700000000e724fdcb272439a0545931a2722525dcd42e42f4eca47092876de4c6c09147d6c1bba449ffff001dfe619608","010000003f70528f48b0225b5ba63f73e2c55d0af457236e2d8af4d73200908b000000000d4af7a509dd23d55c90faf3054075a44b831a789cdf5525daaf6b253e2c4f1418bda449ffff001d040112e2","0100000003dc3a23b64e4df1f2847075101091eff78e6db3bf5bbcef9ddb8f5f00000000a35406c9ebcca7ad96d8450c3d7374b9e819fc74f212d8cbb1d474ef13b1eada43c3a449ffff001d08ccbc23","01000000a0942133fc387fb7b79baa0a00d6c2feaca5b1208a1eeae18972dc0e00000000ae9698557784f50e5ea4b49489686447d699841f0662a960105d0e2a5c02929443c4a449ffff001dc5a6c704","0100000080370d3fec8a09d059068863aec3f788dae4c0fa0405c89ce261a26f00000000538f96d5f19e3f4601b6710c46707cd538d1068d64754318dc6e507b4c3d0e6177c7a449ffff001d309b2d86","010000001573a74e72bee3da2dbf95915cbea3e04dafa4958091ce838506552c0000000089ece2f062934d9be6610bd7afb0953b8733c38a20f8bfaea2160e12c791c8bec2c9a449ffff001d146fd106","01000000cba81879348b4d74cbda59add03988f940f3276125a8817945ee88de00000000c4985487a811bed6ffa0ecae87498edf54ea581da187bd33aa79edabf26c016a39cba449ffff001d04e5fd64","0100000040c8366410647d0051721aacaf212773dc8307b00441dbc3ebd6164900000000c05d59e50c6fdd949a9c927d1a669ba4052c0bad6ab7724bbf857cbf812c4e2690cda449ffff001d331ef306","01000000fc461619a5d67b3026b7e0639acab2576c8bbdad3e86e62d0b852c1300000000ad1c764ccc89c22bfba3d394906a535dcc5d2153d7fab1b74d721a50145d3ef7a3d0a449ffff001d2c8c7dd4","01000000d988dafeac367cd79fc8f017632136f000ff8f03f8ba1923d9e186160000000039aca27c280ad595e0a5772a145e7be5f9686dd3123c6a1849d98584173ab81b94d5a449ffff001d300768fc","010000008705de795caf364628a3d9c7ba9e137a6c636ccebf622c455387d89800000000aee1d83d90933f543119cb0772206e29f70bab5ce70ec7d4a21def0bf3f5419f14daa449ffff001d24975e47","01000000c9544fe13e15ffa7464c08e87bcd2a15622a5732882bda5aede8808a00000000518cdeb818d58fc37c0c66358fcda81dd007ba90365f9af1c1a8b2dafdb0e487a2dba449ffff001d6abf7d06","0100000026939d26df34de8683675d9c43d65f9f0c5c8a10fd9ad2f706798b6600000000d9b39f1e6e26dc58159cbbe00927e03652c235733c8c52555b119b23e1c2790a4ddfa449ffff001d25ed576d","01000000cf25146b2fb00a6585c8a4f9a0b7b607c7f9153f64271fa34ad9b2770000000035daaa051f908cd1178bfc53813af230f3c0c4ee1152d9a508cd936ecb4ba52b53e2a449ffff001d07f1e6cd","010000003606b529b009ebb0138a24a799852b0f46e5f25e4b046e264e027f9f0000000090424b02ffe3cd8771205ee05748079aee672aab108c8f612626713d7776bcf525e8a449ffff001d26e9c3bd","010000005d58db317210d50730b9f3b803e05775a1001dbb1cf136237cd3466000000000ca717de1d676ccd295c770b47c3e5bc0e142d0d68a921d11e4e861ae618e5fdd79e9a449ffff001d023a091c","01000000c3ce7f76d0350fb875326be66af7b8f534abf03ffd4e92a9a931e0c400000000e355a092056f98851ad0d8bed9feb93ba5657aa064b9cd157757cf9c109569e1f5eaa449ffff001d20b6bbb3","01000000d913e3518ad0b92fa673f7f573d4aae4859e9d7556a404131d971053000000002e32385096bac2fa42f9499178ebfaa75a99078a908dcdc777ad42234da87e7371eba449ffff001daabae701","01000000651ac7aff6292e5da71bda963d3b0c3714c9351ca406a1742427b64600000000f954ca9820d4430e237b0ee44c7dbfb8048f796f2580f10b20ea1d495418221ab3eea449ffff001d3a422686","0100000041fb0d62065cbc1c6d3075df5c326aeaee89533f2058e423c0b1581d00000000a895a92071a90eb23b0a017fab2d3da4df77a2e5c8e4915e35c6f54c95f8eb6e26f1a449ffff001d19cd581b","01000000de1ba66a6cd3c43ae6d2210ced557bed0993f61f1c332f3fe0da9bc20000000048f7d79cac93be6683bc67466f1906fd889b6907d26c13448f92232b9968a75c5ef4a449ffff001d37fbabf7","01000000c6c61b00eede5a9aa2e96087dda94382b24c1ebd4444856f6fd1621c00000000c86032b5d42616e1b82e093f624bb7a04c4c3f57f1b73a4313d90d479496712eb7f9a449ffff001d00aa119c","010000006f7701ddfa87db21e25ad4e0d5f929d339af81e5fabcdcc15ad6fab700000000c5b31494cd0a98cca9f1a68b96f30a63c11a05c1a98479a06fc8ad87a6c9d8f74dfda449ffff001d002c7706","01000000424540579849129d6d154711ab0080a0688919cc80c2964524e5a5ba00000000b7e92259cc45f93f4ebd57dc6a485f7b6597c5e151c7611ca795e59e24516b70c101a549ffff001d213205f2","010000004daf97c8523f3cb39ac3ee701365b907b82eabd4e3343ab87a2d8e10000000004878e35cb673a6af928b5af049b81d2902144c7e47e89f1d011fc595f3f79521a903a549ffff001d1a5d4751","010000000c56b389505b89d9a5e73d3b97031f1e668d78c153a4f1f99ad2ca930000000080c3afda349b37342d1c5de26584d94f50ceabcfbcbb3ced568c0a59e0c1e295d808a549ffff001d08f15b68","01000000d86591fae9fa580ebef7442f4dec3a0734955015eede89725184fa9b00000000544fed9acd80adb59b09c54a549d561703655fc477e64c735b6b52f1c2b741f76b0da549ffff001d2aeedcc0","01000000e3bde09fbd1059fdda7613abee15000195bd995a2d5c34accfac623700000000b01d8f6a272d644d5f4f8d3d2ecdd728ad310cdb5cc80b0b3b7ef80791c6d8dc7111a549ffff001d34703723","01000000886081abd7b68938675b6cebbef14a92db1bed68a45860f23d7b929c000000007f461ae0a0cd346b820ae8e05242b7eddc496f869878d1575a3153475654f99dbd12a549ffff001d53c66e05","0100000060d7a220cdef2a30cd46061131afb51b87bbf663d0467c27631d08d9000000002e64dd7ccc893aaf06049af92847e4c7b4e9f902b41ddc83dfbb2d5b2e7c6b54fa16a549ffff001d031dd5d9","010000000b99b92a92e71fe7de601fca5a729a6b619610fe96bc867cab2d16fc000000004ec84405640c1e6f982ebeb78dd77c9b69257a024ea2a80a43d3ab4b58223b779b1ba549ffff001d142d7d33","01000000b533b3de6fff2905be205a07bb019532e6f5ecb93f0d3f7572ae9f82000000003e59351970048a6d0cc1e4ee95e5305a71d9f7f148b36e8774dad91dae17bfa8a820a549ffff001d1481aa25","01000000c7d14174ef5bfcc18c584949cda366df1fa9d3e1192f22b54e5592d7000000008b41051de4e32e7dca27a6932597125a6f81e4f63ea1f27ba4d336432044491f9f21a549ffff001d6eb59004","01000000a5f4d9bba6ef111acacc69301dacb033793a9a3d0e0512f98cab7393000000005130fd59b2c212e7f8fe51a0d794672d75631bdde74c9cd90ec0cbecb645b07d6325a549ffff001d2dc57c4b","01000000577cc0d081dde6f1fc927f9b3929611dffe29a854b19a21076a59fe800000000384627017f1fc46483190b0fec5c9e6f9f8053e7f2f4c0e6ccb85a47a4fa2ae94e27a549ffff001d4beacb07","01000000be4481f72cf67add18306ced9f0a061025f5b5680be40d72f842194e00000000b8dae07cfbd211ede9c4c07df427953e92c9834b559247656501f654363a4b68cf2aa549ffff001d0763b30b","01000000f56e91ce795e79d17bf14f597b97ae41f76f5dff0c989d8898acd97c000000009885b29b8beb79b76380f8ff58151349e4a23a6059e0995e3f1a434b11e8ec45c52ea549ffff001d06252cae","01000000bb0c61ad759da0e4ee41eddedda9af6e989c8a29ca240d9652b37bf100000000967bb0a1e4a71998e5fe1b3c735489d8b69f0d485b3c2435083351d9bcd7f5570d33a549ffff001d23297df4","01000000c95286a951a775fc12f7ddd779ae90bd8867856da8a0c9053800ab070000000068389b9a4d13e1e841d942f3de0fe971774f9f94e78b880a7afbccc125262d8d6a36a549ffff001d25489731","01000000abf0e0e1c59b4a5613c6d5a48afdda16a246f81566ea49f15c18aed900000000503d6b79695e363c3e654465cddf6ad0e3598c46b362cc5232617b248f430abef13aa549ffff001d090cd390","01000000d599d63113714c3d96dc508e15879e8ae8eccb74b497b2be370211d8000000001c863157048cf6f3644667aed1eb5493a67d2d562bbb9ce35ccd21fea825702e3a3fa549ffff001d08f3fb81","01000000f7ad4f3089ef657485e56bfd3dc6b3dafc35f119682817ed6500f11e000000005909ccb056c483d28c2055561479c9d4e721066975a800805531b9b1f16735186742a549ffff001deb61800c","01000000ba396e837f9c0bae5b0515b81704c6a2f92ae307c99b20249be4d5e000000000bf9fec5350add3c27557c22c94e8f6136af43cbbd56c58934bde45b70c42dd85e042a549ffff001d2778517c","01000000fc58eb3de9230bad2148a7e093694f452de938e547e97825283568a3000000000010859b86a12126571e150d7d478cb91e8266f3305af1be41bac6dbbb371654ac4ba549ffff001d22508c28","010000007e51abad8253000f239c0d537ab2ed8ff668504f185f99eb7c3276ba00000000e6851220bfe11a9935a6806318ab8bb8c18bb900a53580d92ddd650401863bc46a4da549ffff001d17614654","01000000cd0b956de9c1686a41c11c396fba0f32d8a0328a5f78611fd6c13dad00000000090ad395aa8ae80c036b9f88efec9a265a9608830e610abad38b970282f025638c4fa549ffff001d14adef9e","01000000b3939edbc8d3e07f1b0472fb8c7fe3c277cc545bd2a1903adf844c2500000000db75deca9e66400104d494bc4b4c40e442c99d5965546605464ea0563d9bbed14652a549ffff001d0c157207","010000002773c2838801b2f885f6bc878b8d8494a3bcaac646c1f2a76346d9890000000088447baa2010e60968f2317ec9ae8545b11f4c20d1d9da0e8e3c6f9d2d04ea40c654a549ffff001d145f7be8","0100000042a0e54aaeeaa83c2d9caf9ce682184a1396e7dbea8afe5f5f2c4ea800000000641d63ce7ba403bf3daff9c990555b38c27805908671b16187294caf30ee79423f56a549ffff001d253cf903","010000006aa2777287dcf42e15ff25e3afa077a72afab88491113cc05452dd4400000000cbe51451cb30fd455005b736f844c2600298509c54185c63e9ce26ea0a234028ff57a549ffff001d2e1a7360","010000000fc919cd0c494d2003ce5583cf43225752044bc997bfbdccfbd98bf10000000049996e798795716e4582087524c2abae65c4ce52717cd139e9bab609cfb4fcafe25ca549ffff001d22cb17ef","01000000afa44d03f19f370643d8c9a473ee1f28d2d24b710d63086be92786be00000000467182a331fe70f7ac6b06eaa5df62c1996f29702bd6f7602851d09c3ce351038361a549ffff001d39ec82cb","01000000e9d5bae97127f1e9a05f085135cbb9bf090616766a85ea543f0f2f0400000000213b827f3cfff727bbc03cdb7d87c163d161420a00023a0a554fa2a5787bc0449f63a549ffff001d35448474","01000000878db58a738b89ae8baf68472f0c607f8ef9b986c126e4a653c3c4fa000000000ee2cd113a19fe79de457b141494d5dea110bf6b25d58c8470404b312aed50309665a549ffff001d52a3c603","010000001ea7fc154d3099fdf3a681e0edc69544e9ee13474bba5546623be7e600000000dd503864e530f67dc078f5ffe9499feb00e74a51f6113a92d2b9727846ac53608e67a549ffff001d25e9c45c","010000005063ba3ce7b4d65498e66bccae51d8451bf65a985d22a091322d222b00000000dd4802add589b490e84ac5ca0d88a2adb6aea73efdb4fa2bfb0bae05ccf19f582b69a549ffff001d6b34b104","010000000b40c920bfb7b7c49c0c7d0b48b09f3bc673d60ffe9679445e1b35a700000000bb71771aceded49e4c6036aab8dfedeee0ed3fc1b9642241c669f7e510bdc64e596ca549ffff001ddcc3e60c","01000000b775c8d807a13ce1b309466aa663ee63d33ef546e20fc6928ed2ba83000000007736bacbe004c3bf2cf677fe22351d9522cdf3a63d916253f176a8c27c7e5e54716da549ffff001d09c0c4b1","01000000e6d47621ce0fc933bf05c7da9e0d181c5134848b08ffaafcf92b503500000000dae664f0607fb2891525e15dc4e5e4a54207cee617465c6fb3ff6026313a860aa274a549ffff001d2788ca1f","01000000bf11a14b2b4d704c5e4546220c3156cf0273ed1781ef8636b1fa335d00000000746588548672daff710dc7ebd3b989c2c0bb368c7133102e2f2c9394bda866401476a549ffff001d22a17945","01000000c978e42c418aa5c9e1e1cb306ae84cd951fada02d88a364db1d069b600000000726a129feac0bfdd91f1579ce84083c8ad38e2ce2f5b2cd47163f00dd0331082707ba549ffff001d1b7b8370","010000004732fbc1128701a9f9c70af0a4ec40fcdd9ba96fbbc506e32ec5660f00000000e285745765952616ce9f75fa13fef6171fd8fad73ab3565de8b02f6b067f01b8ec7da549ffff001df435780a","010000007d209324227a6c764998226f43cb276a8f2370b45373c7634ac8ada500000000f968f384530dc22b3c24ea819a2f81214eb7c215f6726da0117d3ead7a0e55996180a549ffff001d2363e661","01000000d367c50efccf97729dcc170230642bd9bbedbcedc0c6b66e64abf520000000002d9601b0a215a1289ae974d959b522c450104e83c5a4b69a38fb634bd806117a9683a549ffff001d09066e49","010000003949bc459671aa5cb4826f6929fc39ec32b1d3b6cf9ff0d1dec781e30000000026977ab38bcc749adec815d2df693548aa0387ce5d2e760596018c1f3d26d4491587a549ffff001d1dc08087","01000000107276bdbd03b16a30270ed42f4224440776bb1369e06ca65ae5225d000000002a46cdad3788ae5ac9e3495911098d09122625f145fb3c9a2821d33e8249c17d7689a549ffff001d00164511","01000000888e5e41eec9e18faf41e506b7606f56b35093a15ad9eba326d150b800000000e15cdeb831348555e3c8ff496a6a8e742aeabe3280231d3788fe0feb3211f0c3318ba549ffff001d00240e25","010000004173f070897d5d37e85a55302c109eba1014c0cf7cd30133e7450a76000000007d3d3727a356a1fdccc5c55f891a368cfd95377900640f6d305ac8d239297cdc028fa549ffff001d262603c7","01000000f87cec042b03d5c6079f9e8fbfc763a66ac852a2a58e1132ecfca793000000002b04402ce0503d430474ccca373af29b838b5641d9c7056067726f38b24079955991a549ffff001d354aa408","01000000d122903a92f6ba263e3f21f72bfded2b3357f151e6ab602f2cd4bc99000000004b3ab10a2ae6d1ded9335e4b0b93744b3d5901590830fe3c3d860ef64413f3a5ad92a549ffff001d042ac913","0100000084a36558986c95f373f4e9403f9e4df4351227037524b961424bebed000000000d44c652e090b1fad133a1d90a8c0ed95512b566f9433267b62ee11005373c53c794a549ffff001d08bcef30","010000003812f9f071b9a06458a6cbf6cdbd59eec636d6045ecc84c142ed104e00000000d5152ba9927c4180a663355c358eab2bd6db3ea89342d2ac00d8a3d712836beb0d97a549ffff001d358e24fc","01000000f37381f0ce17dcb0d1e31b0aa5626c80f88c669df09963ec0f97b2e200000000aefcbbcd7114ba0e9b14b5441a46a55e36b37d695d7d12a93a287101e583f6cec398a549ffff001d337eb2cc","010000006a34f6ea3345aa7f100b5bbc748d7153869f8c1ab808ab28734b99e40000000061631171579f4f35472421d247154a2604dcb55eecf565bcb3cf95ae06e92fd70f9aa549ffff001d25ac6bc6","01000000c7e617f9e8282aa81b413db60226607e7c6ba3ecbd5982ac9438fb650000000081215786972c8ab44e2a29491f8f035ddb3a1081ef0e1cd276e79ea55807c8d99d9da549ffff001d18fb782c","010000001d4f7848491cba1e17376c9ab93889eaec9b54a704ac8e72d5d0147300000000c0715619e20dc961f816f27c8b095e49620dd006bfe0e7933dc7d31576a07b8166a0a549ffff001d32bb6bb1","01000000be006337dbd98a77d4b45b7242c8d660ee30ea135bdc5b70ebd02374000000003ab22b606e436a14e9a79b805b665699bf486263cbbb77532240328a58378dd7eea2a549ffff001d1bef2eb2","01000000fd8e1d7f234a0961f007134c9fbcd27f6f1e5fdadd214cd1cbf6b33c0000000006714071634d97dc98ee72cd3d373c0e446b21c61560ef7a76eaf4262a1d151788a8a549ffff001d31a23ba1","01000000cdb53dfd0f4a47611da1c16ca93bd97f1ece5dbfe507314ce377a4d300000000962261e092117349a4cb9d58ce59bb7f77f82ac3db89e62b813074a1e9aef66b30aea549ffff001d219208a3","0100000005d93a58d443c23d9ad7f0bdbe70edf1a768d77af9cd2fc8f8c35dd800000000d22a8debbf946bc6b1be9e66593d0ac48c4c0df72b8bbbb89afd01dcf4b89a1e7eb0a549ffff001d05ed80f1","0100000069aced60d14908aa3b404765bab55a23292fc0f3ee9bcd6ff561d2ad00000000b7bcdcb1277a4ebbaf7c850e7954a6cc7419ddd73d225f2a023879f6bdc1b642efb6a549ffff001d062de40e","01000000dcc74a2ccf6dcd6bed06be48478c5aaa73ef2a7e66fe38c588740ef700000000d3b019fac2e2660f20d3692f776dd747bdb55ea9470cca6da77d494f965bb3de8cb9a549ffff001d2e53c555","01000000e81203b81f69127fabbb73114e8001f6b8e5302c0afd739c5928f7f4000000006e5725d91dfa73fd68547ed5c5958a34c4f9f3270fdf8217b9c87944f40dccc499bea549ffff001d1b0090b7","01000000c3804d8566990270c13d6402fb1ca0b90b4cff60cf0e6a2a28bb862a00000000ae2b39c4c647801e5d8775943181bce3071677c77936ab80f8c7e21cb24b08b362c3a549ffff001d1b802245","01000000678ae06bac3d7781bf0ebab59bceaa9330e6e1ddb73278dfeb6787fc0000000005ab65ecdf39fdf7491b6a56214b16c5f87b00ce1a7b1ec0d674a46b873d7fe0e7c4a549ffff001d29d22b85","01000000cdd66675c04f0dd1729e8413bcd1378a2382cc1e1ab29fb10f2ac86b00000000b061b2da403bd647ab754a9e4ad0031f680a26a8d54ad175a10c355fd128c3b5fdc9a549ffff001d1902ae89","0100000085132116a581294ebf624b82c14afa8e51a5f6cb249f7f3042e382eb000000001befdd30cf14e0b19f49519ca11a6f1726a21ff6a83fe21b5235b937075e7e27becfa549ffff001d3189efd3","01000000e0eefef4b6db52a6be8af56d0ea417880cc7aa0df9cfbb6b6f92c789000000000874763944c20daf83691b110b5768877959bc200d6834e20a8a9bddc87435af7cd5a549ffff001d1b73d3b0","0100000005166c3fc9521f3c12b30c04175f3066d1e1065468ce5b1abdf23f4200000000d1a61b3d29733e4c55bdce63de3bded7c7cec4d371336fac56e49228c1bc62996ed7a549ffff001d3171ff3d","0100000028b0722a27739fcc0f51332c1a20a7bb02da681da4acc9b76e97c42600000000596ce096d3eaf81b7afde89dec9961131e7998b1aa763ea5a6014baf755dba9848dca549ffff001d2e425dba","010000001954fb34cc06537ba7b85a72c8292b44f01316764d7d27512d8885e30000000072ab6182898ff6e4fb51fd1a646f64ab10ab2f97084d09e3287aaf6341c8b7ae62e1a549ffff001d1b6d83c6","010000007477072d2741e8c250565a6d3031df6357f0ba7f50a13df1fba364be00000000bc654b13eb50e258018c599838a70ab04ab6b6f6961fa16fc9f9e82c1dde84ac5ae4a549ffff001d2af8aae1","01000000c7a7dcface2eff28e826f4020e8be67afdeb32b43401e8a8f97e816000000000e2cd07f0aa96ea093969746355b5576a544d1f235739281aabafd356cb105bbc8ee5a549ffff001d41c20805","010000003f4ef30536d68717420ea2fc92d8916154ab5f1aff184caa81dbe29400000000c2fbc0dd4d354c94399f7a1da3b8f7833abc109ae50f201c0f452e26a513ff4150eaa549ffff001d34c326bd","0100000019c966dd8a7cf2b99cc3357e9f5c0ce3f2cfd0824c63bdc1dc61f174000000001116dfd0c6b137d0028503ec240c87091e692a926e635d53ef3bdbfd4651c40f9deca549ffff001d3681c603","0100000015a70b7200602b79410b51a49129a101a13e0b202d2f1ff8a5fba05d000000001544513139dfbcbeafda7775cebf0399422aa921e4c49e56eef9092c032c399534eea549ffff001d20803658","01000000b402284747d2bd2be4c88cd12cc0e34a24207b3e3e6b68e27bcb9dc800000000e18725495cbb926643be8b220ba674387c27fec4d8c2d28ee4c82a4f6de3718e35f1a549ffff001d3667255e","01000000e08dd089f1443497debef21467dec8f5c766be34c34d48c541b859af0000000078fe558a38ecc4fc49648484e9e4cf8f7da2a9dc0942d627698e1d80539a8e8c7df5a549ffff001d26bd23ec","01000000c4d1a89347a19f2057dd7a458f1d8d111359fe9d147fb3d14ac74cfd000000001a0591f93a11b1967293e6c8da8d2352d992b27dfe39233e08633f4611de46aaadf9a549ffff001d038760d7","0100000025e7b43f01e540a99c4b978646a8cbe960a01b35a916425add4b2c4200000000bf2cf10ab5f5158e0caab2f99d433edda2a94c5018dca123b4bfa78635c8fd23dbfba549ffff001d02a6a908","0100000094eef318e02ef8c8587795eb278a7024ce2abe7e67a68ee560b8ae0a00000000d504315c6b2b0f59c5610c3f1092d831cfd7bef4f70a3b14274832d2b89bf8adcfffa549ffff001d1f5d805c","010000002eaa40201609c33f782b90711116083053a215ad2b04f5fa3450f57700000000356cd737c5718de57951ed5bb560833ee52bb3e72e059f0b5c12dbfa62b5c255a403a649ffff001d34b95b3a","01000000f03e3b6d5e8ea8f954e6b9e82aa7eb8fca3417dd894cbd9a5c60770c00000000930a1c1f0d049b77c014b8a32d73025119b85315b90b26b1886e5befcd74bff79e05a649ffff001d2bbcdb30","0100000099c2a30e4a9b0d1953535529c80520daed35c4da8b8c7d3e30ed2aa4000000003a6ce3d49aeea98bf0bdade0f4f4a54406428eff4ce3a5208967b1353437e502de0aa649ffff001d3a8807e9","0100000025bc2b7e1a18b02edb35fd12f92e7bc7998c0818677246ff5f37d5a800000000a6752c350fb768147cf5c1b0fda87b4460b99e809dff937f23e39dcde5394e883e0da649ffff001d254f5443","010000003596c7428df7e43c08b365040f2c7c6f22882471013a62a2588073d800000000badb7dba1b93af32b652569dfe1c5f54b481c5ebd9f984d01c3fe59c4a63cdf6bb12a649ffff001d3206dd99","01000000fff2c7df56cf9cdc55dbe46e44d761d9d116ffe857e65d3451adf23900000000af8292a7287ab419dd622877cdfcaae5e2b7efdae8329ecb6ad69ce2222591823116a649ffff001d24e2100a","010000009760e8ed49906298948f0823a3f7cb7bf2b3d91aa4d15bb0ef85c3200000000077d4491b297b58c097c2ad1c868f776ae70436660e229760ff48b43c0e2de5487618a649ffff001d31d268a4","0100000076bc9d8b5210b61c65c16563543721cc59ee94b5666369b576aeaa770000000032069a4876c33230022e7f0cf0a98f292ee0eb706b8c61731f29ae849fc76cab281ea649ffff001d2fbd6231","0100000046f5ad2745f90ba9917e5bd321c297a8aee663b3906f97206d6e6815000000002dd4c5424bfc691bb36d85acf332fc430261461c635aefcabc99b42cbae5e26c8420a649ffff001d092cac42","0100000029204f7b9eadbdd9f705d45e61e392742c0145e06701a2dbb1458746000000006a9dbdf6e8e004f0adbf7d75e7263fb422f0d13b4fdcbd1b0e49de4bb379a1eb0622a649ffff001d37423bf0","0100000072d6a52cb5e628399eb6ea691630fe36d81621d2705ce0e9673833dd000000005733e0c221c70ac18f3f41d30de2b926a3921a85bc8f446ddaffb6bb46815ac98927a649ffff001d380ad7af","0100000009b34141222485cbd8178c48918bfd4dfc3458fcbab38bf3d49acae8000000007b08943566162c370b9e44f0c380946da28b197b8903769f3c9efef523c980e67829a649ffff001d28aa7846","01000000419d16be789412c0376804c8b3d4ca5043da319daa14d457f68df29800000000c16d0588eb1686cc2535a1498c84dded7dbe39f5a6e9328fa8c061bbbe50ee5f9b2ea649ffff001d26e49eb1","01000000a806065310ad7e562f4fe750761abda850f8584d263c883f7f55ac580000000039033eaac3b80c6aa220583745107b7d80958b5d475f1d16e0d24efd3b6a8fb98630a649ffff001d8420ad07","01000000c611ba97fa0d2072aeb6545a29b6f6868483201283980cc5f8d006f400000000ffb6f1fbb0e0673d980848af3daede6f7af9c18c56578b2e08a3121266f2f8759531a649ffff001d38d8ae16","010000002a38b36aa2d5a2684e99ff6f01fd1908761a662b7745bdec61da7251000000006d982ea37c46acef6ce7e8abe5ea33d8877febd722c825e84ae9fe9c6ccd5e818c36a649ffff001d3a38def4","01000000284da2d60dd1583f03db57fc4681d7debebee69f0b3bd592becde90900000000a26a9c37db9904fb4ac63763fd3a56465a568422a2334543a18a2043108546fd4e3aa649ffff001d17c3f044","010000003ca4bd71225ecea347970e80f11e1ba52cebc1daf4368b984dea8e8f00000000ba5c645a4dd03191519d9a95cff29d596c96d5b212306e5eafef8ea4eb2a81a5653fa649ffff001d01fad3ad","01000000e173d76de5affd4a972b84d93844350d34c1e7f5d140a95f4f48982a00000000780fbe6a12aecb9a7eb5e0e9f0291e7571561921c8150a81a153c934784c239a5945a649ffff001d1a4f56ff","0100000079475aace9a8206438ff6109a1b84f5d13d02c5572d60c3e5405f533000000005a841b5cdcbdef4d1887c7750dd8eb964c0951af8407931df9d9271c0324f2038049a649ffff001d3fcbc810","01000000066fbf54b2719b62d3477ec2f6a704035469c333c6c4cb5bf47dec2400000000fda787f3cde48f86b3c0c42123965e232b0caab115bfb01092447697456172cfa249a649ffff001d04ed2dfe","0100000091e30873e7d19a5e55dd22aefbd374d94837bb01e486bc56aa36ccd40000000055904d322059be2a7d0c9552c8f30b3229317869f23004261785319e32c76334b54ba649ffff001d397e7771","01000000a0016cf1b625bf1482148ac48fe6acb86136c38d2a14e8fa22d94460000000000ae39e1e952fa1861f08ff0fc793b8603ebf342c12878fa017d677ba98ccfba1a34da649ffff001d00950bbc","010000002c85f99f8c918a32010d42a18d01a9504967ea975cb7a23547e6730a00000000baaadf15eb554b53ab4fea47c9a91102907c78330cfa0f4479618a1095ef07dfd54da649ffff001d64dd3d00","010000002f77d2deba39aa1aa959d875acda1c1316518d35a197f4b067995c68000000000805f0bab547714ddfb782aba7e76bfdd53007d405648d4a4276efb5bbc5fac2b352a649ffff001d2e40abed","01000000f7284dd3fc200adb62ff2eb8c9b63b1ad9b3bf057bf6fefc8f13e40800000000c7c6eb0e4039d00d8b3cf98b8d5793be7e0c4ba61976e2207390e99c2de29269d657a649ffff001d1e9d5db8","01000000109c26c522fba88cc784ccbf0500c6055b6c74098dea77b1322fb337000000009a118e81f4b7244096a9ad3d939e41842b105bffab2462f56ccb5848931faf095c5aa649ffff001d00acff06","01000000319514b3faee06feef0fffbead03ad7d9b4a82193a42d16efd821bd600000000c4804ce59fbcb74b6f292efbe215fefeb2c00cadc09ffe1dcef2a8c12c450c8d755ca649ffff001d0054b751","01000000346dad4fa46dc7f073dfb0495b76f76c71febd4ccda1436619a194f100000000147608f3e3b766adc307b7e1cac6232056c738a68e70939dea2fd74ea2a632623d61a649ffff001d33381927","010000007554e9435e655a16b221a9a2b783e22898aae0d1e0c0e8915e1f3fff0000000074bc3eab75fa22402d8be84777b1a01492f3b8b2a2b13cb89dac01db0fa2e6f55264a649ffff001d395c2e84","0100000074a0ea117abdc5c60acbb8ff803ba24ebb39666a1ed110bfd6ec0f100000000038cb0e644ac212f65bbd35257ab833195d5272705b94ddbea70452df197d6e5f3068a649ffff001d097a0337","010000005b9696e5ec95df322a594a5b9072d504c998e2aae396ed1ea899b12000000000b851a4ce1679e76f985e3b45743e97e2bcc915cbd58e6f6f64beb46bf1dfac9d126ea649ffff001d0290acb8","0100000056fc1381566b4a3e42c9e05cb9e84b5e5a1afbff67a7436b4c8e840e00000000399122ef7d682645c45e3674442f11d65439a4c5957c19462e72df5afc514ec39573a649ffff001d2c461c17","010000009de5d046063a0e3d2bd9494aabe95ec50d435b34a0c5142c5c36d73700000000ad071bba73ba59302770e8557929d6c5cd0fd0da4bb2c9aea04a5d8716110253bb78a649ffff001d249cb752","010000004434618ebc7e0b76717c93f42665253ae1b520e47692481397ec004500000000623d2593c43710e3ed16530ecc1b308b89a080df0cacd4f1a6d935e895408efdce7ba649ffff001d398f3337","0100000041b91237e7ef0fd03b066776b2835d20298396cb497770573a7cdfe200000000f75c29ba2e18e351deb571079aeab158d4f5b7df6af66cbaa733ee0557dcb3ef237fa649ffff001d1e66f5e2","01000000391929c4a27ebd9cd3f710de8d6da346f90d7925e3b3432f1ebe81ff000000000d4ed6e51edac7a7034f5a4949f738fd867fce7dfa5092baf6561f72b540f9c47680a649ffff001d14c89c44","010000005b4502b54891cb9bf49af8b5bb74abbc5d62caa90a66472b4b8a96a800000000bd0893bcfacc0ef6a6eff5cc24b17caf48e588951ba1aecdf71a7bc7d983db76d684a649ffff001d186a474a","01000000a878c0c8efc6cd8c6e8bc734ba3e7b33d2353726fe953879b6ab97b5000000005bf9bfcf5e03a7506c0f2ac8614c1fa075d852da2de753bc1e51b6bb7e166d271787a649ffff001d369f3400","01000000c1dbab60cf6b14f0e4fc312b82cc22a01ff540c6c42829a4294ea014000000000e43a5fa526d3a136af95fd0c5734989c348de76c8485b139abef52a4735c1d1bf8ba649ffff001d2f17ba1d","010000005dab27ad1b3097ddc8450cd1aa1c310fe16d44ac001e4e2fd0727bf500000000617dc7241975884d1868e33c8a03accbbd73c7d3eb54ba0516775d4368b0bb98478fa649ffff001d2d56f25a","010000007035470e2c6c063ea939763a69f342153705a9c66a6a838085ad13b00000000097a24f553bd7d78257be739ccff768fb116c27f3331079d4232779ab921f3cd97f93a649ffff001d2bebc7f1","010000000012c588d28f14b15f4283e3d7ade693a3f993e64d8d65f979689a940000000078ce4e1f5f9e9b8b4ae4321f7ba5d6dff186fbb0706d06b3e39a61674d6883cbfe98a649ffff001d031e254e","01000000b05a09985df1129b5d250075b762d58fa1f09dcc4a139ecf8052964d00000000dc1e17e807bfab930ab52bbf80de436fbb6c737a5f267a6dc3d87e474a48a2f25f9da649ffff001d2b446846","0100000060925933cbb6e4d0b336a60711bc242dc92f41c6057de59d8ef9054d000000005ca0b58ffdd7f02b7b9fba6539994c202ff5fb69020854ee54ca8698cf65934aeba1a649ffff001d26d82b65","010000003296325fcabffbd5214988095df8e60cc682156addc526e4e15a3d690000000000573882d8acc906394a301cc44791a554daa066ba4caf8e7aaf90c08a153a0eeda3a649ffff001d1649993b","01000000478b5e4d0a12c9a2f166878af22437f8066ff3e6e080979a73b1abfa000000001830b95a9dd4bb30d8f9924ebdb43296b45b1f3debd8f98e2ee78047ba3f321ec1a8a649ffff001d0780bf26","01000000730422e386ba8cee044a123cf9a089f50728da64ef51669691fbf2ac000000007c869c9005059464445f1e461a17acda4ec00fa27e4b4c09d14a8f407e2a1644a6aea649ffff001d26251463","01000000f852bb45c35e3c6257a47d714c8f25f3fee3a4bf355226af7633ed3900000000730ec84cf94a4613341cd47dbc08ae9a06d099e6b80c34cca6f3764d31bd5d8f3bb2a649ffff001d341d080c","01000000dfbb355eaacc87219d4f4acbe8fb7bb71389255c39ab8a2555063d060000000073a28fefdd8f6ade4972d1e856f100bba7d4abf85e09cdf553a8249a16e55b58e2b5a649ffff001d8df18902","01000000782fda708e0707e5329a08ef6e55b382bd287bcf17819edb34b05f56000000009cce7154c27e4a71bd5fcabd81ca026f2fa8f7ec031400ae87810966e174887726b6a649ffff001df1ddf600","01000000ef50bd32bfa722ca5511ececce0050b0ed8ceee137a109fc44225b5600000000c59a30783a4b5e5819e9998e31f6a3376dd6b2fd9e979b143f2c29e4192bd2dae1b7a649ffff001d08139100","01000000aac202ba54d9ebc34da72a23b94a17cf886f74a94c3e12edb1560f5c00000000d7e76c1a7f3b2a1d6185523775ab57e24686b762f5fb36754352abb5bac76f6fa1bca649ffff001d342f1d54","010000003d56faf482435a384c94be178bbdfdd6439bf4544574fdbd9f01725400000000344037c5673deef9b97bb67d488111099184f21690e80781981a5c3f51a41a9629c0a649ffff001d3654f8a1","0100000056cc2f807cab3114c728a72ae30504a87c49f8c8299e27ad13470584000000001d30356d3a36817248902ff054bada7c61eccd94ffb4521ae1ab32931f7b5a31efc2a649ffff001d23dc49b0","01000000475ce65791b876bbfcdee016f65722c15f02d516c06de39bd687a39500000000ad44e63f91c074c8b641809409417ef52dc9d427b45e0dd4260273b637510ee5b6c4a649ffff001d076dba65","01000000bc5c11b81ee518a1a7bdcccad7dae3a685ea440183224589d4b378ef00000000d0ac3edfa20b49e524e219d972c166f59f7de90dccddc410512fd8cfe0e0830d7ac7a649ffff001d319602e6","010000006d2d069394c187d59709ee56a0b5effa7e6adef4b844595da8a5d4a4000000005abece8e36dbcf40ce8c82538304a80a16c43ee839e288da148a893a4693512472cca649ffff001d33dc682d","0100000058c361cb08f26a316dd2519b18b33a58f6da6149d75791d70fb4d25d000000006e9436f44b8a615a07c312f4d8db9d214235948a7b4df157505fbc425f3824e0d5d1a649ffff001d2f3ff737","01000000b23a26a6e441a2d4d734522f3fc6601dc292afb4a7718e595ce8a3cf00000000f4e6f950b07b634b4d50b427c47f38baa720c1ac70fe066bcfdab0ec272d07eadcd5a649ffff001d06cc9d62","010000008725d167ad526140441a0098379e354a76a4eb144dd035be47c4a44100000000f747bcc2e0b2fe0f4c795ef456f4dfb9bb61f88aa8ebf120a7600a4782802ccf51d7a649ffff001d1b9a1d2d","0100000045e0714b7877be7d2e0fefee65d6765e4be371ba84a4b734241d2e1e00000000f2d96d990c6e2d2a7302721a05edb8e859ab33567bf7336db8f4d2f687a6913be7dca649ffff001d011fd4ba","01000000505eda17701bddd74d34b78f94749ba3e68e3d1ec6bf04fb126c894f00000000042a409ab9b885e02f4fc55594a2f40c7123644e92ab276b6b1d572fe2f9739163dea649ffff001d026efdef","010000002c9002c19358e1e1cdff94a473af64a6c03b9b886060a6758a44643700000000b465c075731d6e0622e92e7d540bc709ede56c47da4a4a16e60360eb7026069025e0a649ffff001d2ea5ec06","010000008e1c16066f13c8d66c7f987325d969c161edc1c0acc6ada2aaa1158700000000f45f3f376c0ae8cacfb55bc05dddeb798f2a154095af49fe4e6f54503f24ee347ee1a649ffff001d2acb9aab","01000000c84fab60371d6d474f1896d956e7db5aff73d96bce66e751cd7f705e000000006c40f9e1a9aa62f95eef098dc4925c9c811565b1608e5eefeeb4c280bc304ba238e4a649ffff001d32ba23d2","01000000de60d3631b67dc6d6ed47193248def9d671fdf6201b840e789bb0cf1000000001321167dcdfcaa299e61bffe4bdbb6b9bb9d689beb9d5e2518fd7ace2bc1878e99e5a649ffff001d1c21c66d","0100000023e9e8dc99636099925a41384d46ce98ee9f246fe239394fc93fd2c400000000e6e0cfe71ec4133d57508912c7f9b7ea6a733aecfddbbf40dcebf7db7fef6f8892e6a649ffff001d632a2704","01000000a740645df0e288d8e6c1bd0a963f19ce4c3b73cb6247d052cb48b6aa00000000eb80e8c403d2917d223202a6a44416f46a484f501d92dba540403f754eff020fc9e8a649ffff001d33ab3dcf","010000002a6de218d649adf075420b24e8c7038ab5ddfdfcb5a69015fc09e66100000000570110b1029a84095fe248c7080c0e9ae1a30a84575aa7ea3e00fa4076568a2a81eca649ffff001d299c3b50","01000000f49c1c6e6743377667177b4c0b334ef1e24877407b2dcee1fef3184d00000000c9cf5db0787fe6169f877f5cfec0460d34f010eeb6e6433ad0fda7e891cc757c90eca649ffff001d6b432300","010000001573f290d499fd549c0a8e54734ec2afc8cacf4486f2b3f45cbeee9f00000000d9fe0f25c374292ea54196751fe89aebbb09937fc3457db99ec4dfb260c77f51f8eea649ffff001d350812f8","01000000b0bb837fdf745e1e6dd383e1c667dfcfb627a421e58c9bc53d4a100300000000799a13633903d31c47bd0be21c5c473d5c93ea6e70a8e16051e51c7068ed6f5391f2a649ffff001d04cafac0","0100000070b80404e3ba2756befff55f70efbc2dd82512d48fe9cd50912a7e76000000001c7f87980dc513a165a91bc6546096259d3f453f14c7b30c708722b3825198f8bef6a649ffff001d22a450eb","0100000046dac5757921c7700045ca3fd314ead26429d7e08fd4641dffe2410900000000b14698b8114ee270c5e759735e0a9351d8b75666d918db5d281b52a70edaa3a86ffaa649ffff001d02e5a08e","0100000004c3236a0c81f47efca8b9a84d09c0a9a90ffe9245fdf36ac47f7be900000000aae8dd1c2c2dc4677c5a6a038a860e23ed7f1070d976a194a2b4f75e29f87792fdfca649ffff001d33be10d2","0100000019c9edc3951108d035c8c3926f723b71aa0eadef15ebd3aee04b8b8a0000000047cf7fd293462f87a20de2a925b1d6f5f143bb09974562fd5cf780922b3d2dc5e2fea649ffff001d0610e8c5","01000000e9f17e474311dc8a04179560f15666c54fddcc3ed8ae9cc2a52b725300000000850c906a3b055ccb5f90901ee6108ad3667662ecbe791e6da072b93adf7134762500a749ffff001d2689eba8","01000000e97984385ac3cc83ffa46b86d63e3d03ae97faed5cc750b4d66e20730000000046eb7e30251932764101185fa79252050186615c96a6e06c849bfc31afb8e7eb1802a749ffff001d0803d42b","010000003cfb74752ef5492b4dc90317ca5476f74bfbc9797d5395acf4c11b3f00000000c7de593c321ae20088a5bd141d83170463cc4f494007ef7af7048f23ce6abfd1c603a749ffff001d189e2a16","010000003f9e2a5bfc77b82dd727d8609724866f4e955c2f74a4e74fa005e21200000000f9d96d6adea2f6cdab6775c45a3c35600f2d857078948e22152809718b72c29b0a06a749ffff001d016b30e6","01000000f106d5a4b27e1fb153e64b8c41fbdb91443eb4ad5993271403d7365000000000ab023dba7bee1dea00d189f763faabecc609008bf9672516fb57445ed11acf7bfa06a749ffff001d27c18004","010000005e2fb11101c8d5ee607eb72fc0c9079e984a168d3ea367d3455ae4ae000000001be65b702580cfa27149c916b77bde653729c2ea6dbf4f6a5cc2226dc261f390800ba749ffff001d22bfdf72","010000000d5a8454ee9680a040979e58700218b2282a2f5e582056c47546b37f0000000028148dd96e604ddef99514ea333f59dca99c2cdbb3640b16a176d0ee3870ecb5cd0ca749ffff001d76ed4e06","01000000c2f289c18e4165e119257b5de34e51dfca6b03ccd9f1f7b595a9e3e700000000c221d00fda2a5439e38196b425ba43922d7c2cd2b9c2f665977334861d163b4ef20ca749ffff001d3a4e24ca","01000000b391681e3bab67604bf331cd206613adc445b9610c9396fb1fd82563000000002bed81b3252cf59d798bb2b2f4281b07293f3540aaa15457e29164c57a7fd744c20ea749ffff001d22d4b005","01000000dcf7ac54a9d96ce02fe87173818ca624bcf2c16c4c894f616c1f4092000000005f86e98017bb82cd7c207a6bc923af9c121aab970cab788152af555c4be8e88d3712a749ffff001d34f38321","0100000079a432fd0227cc3d587888817bb2d8f8875a9c123b6a2a1314edda430000000090461b3168257304e62a78696fbee1f24d9503ec4dce43999b99da541318ca1eb915a749ffff001dfd083a0e","01000000d7bc497fd0002758a9974002482f7fc18d593fb02314785a3ae96aa4000000002bb7ffc892a6d384708983b1312dda7c0fe40c808a080db7181295acaa1f3ade5b17a749ffff001d394606a9","010000000eec555af12170cea028ab683dd4526297573594ce4cc5d9ef3eb8b10000000096303de63ebb921ab5a14b05e08638f3f8c99b8892a324e7ed31d02879750105a81da749ffff001d294d406e","010000005c7c01d309f75b0557a633a34b7aee89fa14b51660d06a2a7729f15b000000007236c7975a2e5c2594c786aac77009ffdb4d17ac1c9f59c513cec9b9e7e3f5468c22a749ffff001d31d1a7b3","01000000f8a6af4e0c4f08e65afcc55110b84df9b3766451fcbe363fdf8e904200000000545d9d04af4245b7a8dc821654666f24822c22abfaf693581cdae7d58514f3ed7b24a749ffff001d0041b492","0100000073c0f8c8dbd2c3718cbd887442b9db0586fcf93d9f0e92859370b1fe00000000884c131ccba147a72b3bef58d10e4692829ec833ad87421dca4bb7f9c57cf4808328a749ffff001d2daab3ed","01000000b625579d135965b9fff7f9534af20e2f37fd1c39e54b62df679bde2f00000000768ac6f5fd28502d9b3ba211aafed4ea886ba8436f35ab66088ddcb5aec2cd75592aa749ffff001d1d3acd19","01000000e3962e64f94b4775c82bc122c6b7dbd1c01f4b7e273927e2b34ad24c000000004b0427f8c000ca9005fba5ec8dfa61da47a5c3c889f9c296bd103799844e4b8b882ca749ffff001d038acb08","01000000ef70050d8f133edb1bdc3db5350ddc1988f7daaa3a1a4579c6aa189b000000004dd4ee092bb7733d456dcdb3bcedf3107e69ac5f1f294339e5b0c0be44327b055d30a749ffff001d2886f9f3","01000000cd8f43045c3b6474c24239fda42ce0db8b1a68c420e03cd3273e4a0f00000000e522758a02dc32bacf2db6d95b031f8ccc05a5f966ba069d84697267de0dd5058a32a749ffff001d348acff3","010000003f7c03320286424ae67eec1b8c79a408f46e72b5025d4c593f04ba1200000000e2d31cf894b335295ec815ae61d9fabfa9e5a25d404c34fbdf5cc6c93c6a54294735a749ffff001d148d3b2d","01000000729c488398ad4377039c4bd95f9acca4f6338f3e69d61eb09419083b00000000aecd57a9fc3223fed2ef63480ec95b5c65253dbf75dd2f54f7b5c0b25d806397d236a749ffff001d6c81a305","01000000b68c91b763cb92162da884ae8a6ff01bcff5b044a7cdc1723d44327800000000d80fcafdce1e3692f160ce38aea342c2c8855c0b959c5f1e23dbf4a6381ccf6a8b39a749ffff001d01875d17","01000000e666a0e4273e8c2faae653c387dc9f5e0178dc827f8abfab2e000c6700000000b17c48da3440bd9641b1d29ecb65d575df9d7e8c9617baf3a34ea35f4461e06b193ca749ffff001d16c9391a","01000000c294d21ace17d30fece740407c87a98128064ba358ceab825f5bb6c200000000419fdf9f62c5054733b7ada16dc1ed8047b46bac560b2f68662bec696f2f5dfdd540a749ffff001d2a5f0ac0","010000008db03848f54dc301e8568781ac8eee7f71d2f93c1f7a57f9c9dfd954000000000747eaa4ac01a5960beeb1bad8339f330ef1d8d8f4476516655dce041d2f3ac91c43a749ffff001d03915b35","0100000072bec2a13295871d5075183c696f9deb4c54dee806b457c098b081a2000000003b09ea1f291e22776954c7ee09e4ec0aa81cbd41bc971604815ccd7524fa261ae046a749ffff001d31ac329d","01000000e100314761aad8680a68b778b95bc25043bef9e9110199522cf6d34f0000000035b40645312004a42aee8e8809ad73eabbf8357149613050f2e2e20da6cc43a90d4ba749ffff001d322fcd39","01000000f34e796016fc9b13c11050c43bc52c1c61e3c9c5d48792350fdd5c0000000000a10928f56c7d49e9c6e5a7925b3b874322826258ff0a1fa0b2ced6af895d21fe054da749ffff001dbd87a409","01000000d29794f1d250411d6059024f251c3326474f33d09a695559eba486f1000000004681b2a370d332dcedcfa280943a599edea9e693445cf401206424b60a851dbc684fa749ffff001d6843a709","01000000b84f7d66b060b3d24b23590f920d4b13433721215be5f4d676ecab4100000000ab42093ca102cc34dd0414f29402d3fb6393a8f0435cddca516c8fad7ccc3608fb4fa749ffff001d1be38201","0100000029dd8588f73d08e6854d2de65414d692896678917364808704e584b7000000008a71e5c01cdc33044cbf1be2bfb72815d1955da2ff0a89d18cbd03baba6cf98ea452a749ffff001de54a1502","01000000bf156c4857756cc6f13dc09e7ffdc9c6843b6351806b9b20191727bb00000000863cb58a58a97e02ebbff824528eb1598c3dd75d3e7fe33b57d5d64b29f119e5f952a749ffff001d9a815501","0100000068bc4596ea4e6b6d3c586c23e0911cd16e90c97af997126420c061da0000000017c0e2fc39d63f191a3c5e0e2e70d1150c869b90582a1c94aae0c1f0e740c2a34453a749ffff001d06dd23ee","01000000d115f07b4550e4bdb7fb4a18a2c306f69fa14d5a7533ab520123fd9e000000005434e959809f43a467efd46c5d18144fc26cd7b5d4ac9d40d27db23b49eedf084e55a749ffff001d2994a6ea","0100000038c8cf5311a3fc6a97877144a11101528ef250e1582eb32b07c4d5ea0000000048561897d9bad2d9ff6ae1b63659cbde208c3bb9530fc7dae933bbdfed6520485e58a749ffff001d1ef6f395","01000000eeeb08e7ded1ebc362b699c197b46d817de9215b2bfb085459533cd200000000158c64b7b91828b7c22064ab70bdb8b4229ec3233a5dcc6d1522cf3f0e8d531e6d5ea749ffff001d2f95c0b6","0100000066d97cc9616448538fa2a26161de365000511e0f9b2c8ffe7570b34f00000000929c499992e57e2dcd7426b1abf1beab52e1f85e549f61781c127eea53f38d29ba5fa749ffff001d25ff586f","01000000bcc252f426817e9b53e87ece8d4d02add333eefb3dfe96db956e8d92000000003bbf3a3e293a73e434cd684bcefbd275dbbebabc103cf1b6dc90241fc236ab7c9264a749ffff001d2f6c86ee","01000000ae56262b3857d77f7c14838d48d9ceb1f6a1bfc54a765319a3a091a500000000a0992ed47e94ad86c77f5bf739852c73392e26d548725e21bdd24dfa3c60059b2566a749ffff001d1b846fa0","01000000a195614070e0aa4c1822100c156d9f30dfde35b9d9a46c3c72f2f69000000000dae712a77fa0182b248bad01bd937c87935a60b611d2e7ee865371be0c441039156ca749ffff001d3133030f","010000008a14c1c8e0db3c0246d6228668bc468294be69c72b051399b526345d00000000723954c3916f4e0994e50a0019fefc137585a3dfdedcae2e51363c99f78871fb4e6ca749ffff001dfe0e4001","01000000a8da4e8810aa77009078eebfc7f5305f6d4d6095e3e12ea3af104d310000000056ff706b921f414e62fcadd86ba4f46b4a6d83b5ad8c34e2c82b136608a288fe2c71a749ffff001d0443af5d","010000009e6527fe17653786ed00b8323c24889b797494050143c866b3b494f3000000005285b82fb1e7c5eb8d657fab67ed473457dccfbed555366e563d9fb251a2842a7b72a749ffff001d7f1a8d03","010000001befb2b8b62052efc24533e2ed0d38fa8a2506b80281f100cc32f07000000000222655a8afe5e632b2c6a7e58f2115cc2a203616b5f6156d427ae08c631de8522b73a749ffff001d0173e601","01000000b5011380127959aced20593216bee9630a94f3d3b72569a10d33b0cd000000001c945bb2113f33b49963ab0c3b671c2766c0c9b4e8bf68fc0dcd32826e7cc1f4e675a749ffff001d2dd0588b","0100000070686b1de92ce01d682713b8d154c5eac696fc51f92e2c16a7befaf1000000002215adf541507f7806fe8b019c85cf4eee7b9a2f2ef853314aa9c02f14ac2ec0f378a749ffff001d021e6d6b","0100000081b383f3b1434747b1864530dde4da4ff5f093c66f5e70758ec9afcf000000005831e26bfa88b61f611e1f52e91d971d226f087e9663341b3dc39bd5d16548f0e57ca749ffff001d1e4cadbc","01000000f21211f059c6edcbd55838c8fa3f553e4af8174a8673a3092db946cb00000000b7c4e6ef9baa2912f7892b58ed2ad45f8c8787964038f2e953a2ba5439097bb27b7fa749ffff001d29578edd","010000005c1ef3cc45b2f22ee4c687b04efcdd93e9f3dfcdb4e105c7dd8733170000000072de8cfb03749c6671dea6f154b050a494627f7d3d9029d705780ced98d69aa28283a749ffff001d36d4fc33","01000000ed2aff9ade3dfdf4e233c9b3b909be6c24fd59961fb1be320ab1bb070000000013da8e8cafc11a96ca9a010c8a02c85960d22f7cec8672c4df513b223f14a2818886a749ffff001d39a59102","010000008750eaacbde2a06c35859f84e0fbff2250dceb72c679a6b4b90ce5b400000000c7baec155a292445b0edbd498ff9c5cddcb230a4f19c98d7a1ea6c85882742bca687a749ffff001d4e676505","01000000750540a0eca0025a8351401834e544962387f188328dd04e1b8f39b9000000006fc18bce5adadeb161c3ec22ef47235b15b80da387bf739dac3015e0c7a61b33c589a749ffff001d18e25cbc","0100000080e3a5d7ce2dc9a0277d881d24e9ddcbd44e908ef4be2184572026da00000000137d7a013632e6f91a62d539dd45dd13863f9be64cd25b009109e207d802ea58428ea749ffff001d00fff8c7","01000000a36ab5e3d5a22ea0d197d6c87eaeaa5dbcdbbacf0db743071595d8c8000000002555315ff4d68f1ec81658b6ae2f0cfb0abfc080b3ea283e01a30821e4a89c66ec92a749ffff001d331c4ef5","01000000e73977f579361b5130dc3312373b54e2fd3f9416f30765b4b01e648000000000722d4707ac20af112b04f2d640a8d385c9aa1fbd527a830fab34f6488df0df9d1d97a749ffff001dd4da3512","010000001cc71ad62d1e2f87a05dfdba687f776f0e12d79d4be84c9ba1c214f100000000416a27b7decb00743a743a63430f18f43285c62ad2bff8bf8e207a3da37ea8d7f39ba749ffff001d6ffcf614","010000009564202a3190bb48599cd06e4698042ed4c76d98f550445993adc7f800000000a6ffd3bc5972707b070a84ab5b167e41bc32a15543af32ca1bbb3cc3a547a4d53aa2a749ffff001d03b0c223","01000000cf734261c68acc1eb898525ffd68a9a844b06c4a45e689eb698ea53d00000000d59b8bdc1d58866d5a715050340ddedbdbb1cd7f9de4893af3bf759c0024026df1a7a749ffff001d1b3e25e5","010000004ddfaa6c3a9649b8e95955e2a2ad96d39c90a2a1d236292be815939d00000000d34c0ece612ad8f0ac7d5dfbd8d7cb246897241d82d1fd8b19d926837e37ba3457aca749ffff001dabf7b112","01000000e00f1443139288905be8c05367fed4e179d3666b43bfe654d2a2878d00000000fe53fe7c9921a6572949657c12569fc4f89e24e811a9f05c03d094f473b2bb3b69ada749ffff001d14178f82","0100000055a5d5a8929053655b719691c1c2a08544b3afe2a01d08084d1380b70000000011273f9c0e058ca8e0603cf8810086f3b2a907b87767d5fff6b7f57f8b05e44c38afa749ffff001d7b0e7f05","01000000d662aeadfbef0460280d2275e0e069525e7b44a699d4ba323ba1c0af00000000ea69337666fd7a661d857af9bf5e3f4d8b7c70361fcca203d51437fed3ec51a2a7b0a749ffff001d2e10b59e","01000000aaca0b15c0793c49d73745b850db13a2f6dbb5b9cca39397c44c7359000000002a2a90f32ce33c56a660072ec44aacdb52d596504de3a0881c22a2aae2ce2eff78b3a749ffff001d38fccf85","0100000097ac29817a9014349d97dd97a3208d2d120120895d2f38ba1ab3b2a800000000fe28f5fc7586832baadd56143b96257214e288efb102ffb79d01659eb98d28d42fb8a749ffff001d6b0b0214","01000000365a75154363c4b6c760edfff4a7f210a1188293ce898ee241a6293e00000000069b2cf447afc97b36c0093e19f3919a03b1231a40711eabbb5828bfd379fc82e5b8a749ffff001d2550af72","010000005e78e16733a7c9c448d2d34582351881814862d4e7a89c8c3b9e0b7c00000000499145ca785d1a63638fa1d6548f591327abf5e5babb01e8f5421d6236c49557d7bba749ffff001d267c2b47","01000000c85a1ebb2abc85740d62aac9ee603c00cf17199d5a6d78c86428761500000000f49749565b956895b9d003d77076d203940f26d51a80f03f27370ec079fae72d67c0a749ffff001d2068541a","010000009d182fadcbe1008a0e1f285a2019fffc0109437b658e6ab384fac3b4000000009ba68f16874c1722d43888be5e5dca77c519358a0baa3e9c38f57a86ee3eb83531c3a749ffff001d4eaafc0b","010000004d22a2eec5f29807b185661641b7bf3d2b0160dce8a7a6f4d03768cb00000000f5bd6a200392c6746615fc249c79617c1792d36cbb2fed9f9b58b5822505494709c4a749ffff001d22bc2f37","01000000ef3e5b037208aa7797eb7bac06cfea3f60d4e449ae8a36de4a4040d000000000ce1f236c441664aba57431b00b522775b93d3113cdcab38ff3207ab8dbb24f0732c6a749ffff001d18534118","010000001cc07ed722c8a2fb155e1fdabb8bd7376376b1bb4eaf8e13e6cf7f5000000000aa44070513017e55334cdde976be605c3718cd1bbef6f88df8fd4d32906beb9fe6c6a749ffff001df2b7d602","0100000013e7a49951440d8f130b03f8d264f3c52991572b5cebe2eba3ab2c83000000007817316667cf169920bd037941303da740b65136c36e4830ca9900abde4e9fcf05c9a749ffff001d2296b867","0100000077d90d367347984f59077498ed2f87ed5427bdfd3993014e68656b0b00000000bf2d94b5afb24d395df9feafbea3deb6211184b7176309d5eacd3586c469b78a5dcca749ffff001d14352446","010000002675f0c1c4fc527719459cd8865599736d0092e05cbff4fbf257ded90000000087cd99e9acd7053e7da34bedff4a726ac7321ca3d071db8103c3e4b641c2c62f2bd1a749ffff001d160f3a44","010000007185bb365b4e744057238f428a44cca245a00907d28da7f6533d074000000000035b611a3b63f54f60653aa9e91d483221495f8df28323faecba182cb9fd9469d3d3a749ffff001d2c17e38b","01000000a88257e26c8b6bca81aad66f85256517a601714d6dad68938d1c5e1c00000000a27120a0c7798a74a2dacb27fc79e369dd9950f5b1b201fd0e8287c794ad28fdd2d9a749ffff001d35939e9f","01000000a8a9b8ce91d9341a1cefc4c27d82d62bee26f6c0217d1d301e8697ed0000000052afcc28557116b34d166f9260aaab4c1b589ed9bbbafeeb8155f0bb75a78b7240dba749ffff001de7e5cd06","01000000514db3a1ac11c323c41a443422f3032e4b1a1a71badb44ac22a4c8cd00000000c8541506b27b51174e7157a46aa49c89f1a04e9458093e331556de2bb87c568172dca749ffff001d00663fdd","01000000010ea7829f9dfbd901707da81a097be51171815b5580f8c866892011000000006b55adf56a16f595f1fa4a1a1a103523e8dc1c9ac57418c3e7d7f51df6d9ce85a3e1a749ffff001d2c2c641f","01000000f364da26625d05baa79a9b9376fac9501a19b9d3eaa8fbf7ac0ca9ab000000007265e97b4b240b0a3f1fe71111298f468e0315c6365d20544d0fd764237136a784e2a749ffff001db6e61004","010000006ac2726c7424172319ff2b630812e17f5525636bb00f9893de8ec396000000003c718373e5f68e32314c0a42fb51f01de49b11b1d9f3038fa7c5c0f3dd0aa5501be3a749ffff001d2fb2f940","010000009beeed9f7c06ab58eb7084a1132a823e6bcd48b60b0b2143df4aae4b0000000008490a0e5ba698ebc6a0841a0c2806f7b3acba69b8ce4a58dd735c07c57579e9e9e5a749ffff001d35893fe6","0100000057addd56d4ffd5e5c2e28bd271beb2b6d24f714bc8115a7248a82c51000000004c47a22946d24413799afc5c5cb6ff7dfd1c74460878514320c8d5f09a574b6568eaa749ffff001d18e2ec59","01000000a34b6bfd62eb680e26525c4bdca8c24f27f351855b3a77979747494200000000ec837fb46001695ddcb610aad3046b65de55a371437dd1f9937d192a1e813e3efbeda749ffff001d03f7d40d","01000000ec4e70ba9b75f7ac2eb2db834fb2949369e8c423337f0b76b99b6b05000000009b8f08cd0e0280c43b828bec6e6b86c24274c63160c7fed3c9b6867438a39a0090efa749ffff001de872a106","01000000be0e820f48eb0a1e1a4b64e522d50b396cdb9f898c28b736af27ec7b00000000ade95d31e74c5f85d6a7ccc1e6bc87fef1352c95a555e80206c722c55faa1cfc80f2a749ffff001d156a7a0e","01000000c300ab8b147c7792994375e70c33168391cfd78db6a627926d0fb5a900000000da3f1c08e2d6ffe82fb99ffab4fc969ad014e7dabbd37cccc697cb573b39b939c9f2a749ffff001d0893788f","0100000095d2a57a16f2fe5376c5cb75d080c5402c2a41406fe44bea26a1506900000000f2fb3181d77fa323352024e4bb1a334657afebefa313164db829cabe4780dc40dbf7a749ffff001d14ed6f2f","010000006343d8ce376143be5dd27f457a72ab90c01a16c174725f0b830c6512000000001dd5ba9b959eff44cd6d19fe5432cf187da209f7cbdfa91881bc20804ec5d4ae2efca749ffff001d15295a61","010000001e0498f5dab1b1e5486f9581c3d13c59158062781e779bedd4b51b2100000000343c739a2cb57606f54e7df6e8b6b9547792a84bc289e5bb453d6e5024f48e4c74fea749ffff001d33482344","0100000073d350a267295d32b6a525186c208190031e729496d8c683de379cac000000006457abc6c8ae1d1d928738f94eea39e266fad63d1e1fa9eee6384eb28eaccba2a103a849ffff001d30868698","010000006161a6a87a5717734dc61e2dd95fe288f3cc55ba76ef6a054e84cc5d00000000b084de40b08d7bdc3f86cf7b6c7a685be18b482bfe6bb4a74fc25f211b7b2b74bd08a849ffff001d13d2e335","0100000004a419f5e10684cd57e60584d85a94de5f680ae7b202517b8964d9de000000005c362f106e6f17009fe6547fee092de7894bb7c635dc4666e53e6c4382e66636320aa849ffff001d19951b77","0100000015bfae904a03183ba71550e6e03c2a88ece960fd92818e2f74ca1adc00000000ba494937680bf2780c6046a704544fc567e929d41f68c1589fc964ba761a61b4c70ca849ffff001d25206bb5","010000000b0fd92920cf2a1a1c3a487f667ddc94ab4bcf3259d67fa2fd2f51820000000016af86f1573074eaa600dbf75dbbe7dfe26ec64de40250c307c57c50b0a58629af10a849ffff001d25e67a3c","010000005cb6b6de2ba0c702abcf9aaa545364b2d8cb445c46736b87a24bfb81000000005da98168decb15a09673a0aa04ba9b5ac7ce7b4d545d1938eab8955837e8e25b0111a849ffff001d53750600","01000000ef43c29650df5f4bea76dd2c0ab94765aee17742f4e671be6979a8fb00000000a6389e4f3e2a74aab55ca40511cc59d6fb4f7a11adf1bb18106b199b4500250f5c15a849ffff001d1469fcef","01000000bfc5b969b5b6cdad4605bb997e6df0b413e71ab8d6dedb527f46f05b00000000685f6357c46baf50a69600fe72d2bfeffffbf457538e1c2273e625e327dd1718f316a849ffff001d06c4fc94","010000001fd6cdeb9209d46d8bf34432293ba1ccd3f8f9b819e07005e4347eab0000000068a1841aeb56b8b34b52a3987525790815c838052e0cce93627e5fbd20afddee901aa849ffff001d5e438011","01000000599887ce476c46530e375692376681fa0e126ee4783456ec2c65d0af00000000e05059eb430d6a04d9b77bc7201f72a87477ed749a78cb06105d2696565a4852751ca849ffff001d1d813423","010000009ecc5e3f44e5a453fdf317300b0205f55b2efc17d85776d5244f9b4a0000000078b4317fed12471b780d4192f8d9c5f20fac2d6fed4e8d8c89ec717f9ee92b6ae31ea849ffff001dcfd2880b","010000009675f5b29b94a53a07e01efc34bd8ad1d3d021897e7de60e2d2514ed00000000b955108245ece521b99baaa70f3147642736662bf9482fb42e6757f97a5556c03521a849ffff001d159ed314","01000000afffed989ac27a88917e881af03dfb0a4f9c362bb5366075ffb4ed9a000000005ac8c4f126c9fdad19a60cd814f65e83e1e71e09a52878fc26bb3f3952e09dc01b25a849ffff001d26c90fcf","01000000269ca21adcc2b2f916f62d06ebd620448e9e2c072856c5dd8109b0bc00000000812430d6d06f2f666d9c0b22b04039aa23df7d7d79e34faaac37e758be2632268b29a849ffff001d502fc70b","01000000a93305d61243b7fa38d48fc24e5354e76ee3b9db559a7069958cbbe00000000016bf7b5a3a774ccb6b7aa1fa3eaf69b3a6919bd47f03d18a36bb172a0a5dd681472aa849ffff001d23798863","010000007066e6328b2162daaa245bfd0ec838bf998a6b03867e1529be9a59170000000042a00181ed3c873f7c4046dab4a40832f2359711b54fcf1ee6d6990102f57653412ca849ffff001dea8a4707","01000000ebb8e63a0d08c7ab4cd8aa1d0b3d44d35d2debe0df4ecdcb3c7edcf400000000054d0b68ccd245c9a55660805d2e88e29dda55681a627b553235e1ea6a873655a92fa849ffff001d08420283","01000000df3f8f396a766beab23b15d6e22ab5014d36dc4f38d72ceb2644e26a00000000b7fb87e0841a326d19c77ec4d8dcd124e4192e45859771be96170e493a87f96eb731a849ffff001d08d6865d","01000000fcead761a9828ee1a86a770d2bcfd38089a909849f898ddb74983cc900000000aa7dfa5e317db90648bf83134f9eb6577403860d99e1520aa0db2f3790dfc73a9833a849ffff001d078aeeb5","010000007a7202a482f5e659c6622b1c26b6447ab86bf24cfa3b734fc8024df90000000057a0d279e12d91cd777bc3199ecc8a9c28b5edf832aef9b5aacf5c98a738db8c0734a849ffff001da6e8b301","010000005d0675cdeec83a3c56d596b3ba2c2beed5ce182de3638af8059ed53d00000000523caa2a5e9b908c3a3ff84f73b0be0aafb663325f0f95367a7c8f514a983527e035a849ffff001d05742fc6","01000000cd26435bc5722e3e32022bc8fe26cd256be8252046e1dc03c2396aed000000005a3fd0c496bc6fe6368a7c3a8a09873b069b23be9b95c64dae7a167811e1c9147a38a849ffff001db3667a0c","01000000f8013cd5b26f272524670e315fb7d018d0d2b18371105084ee98aa8000000000a114a3b5118a081bc45021d571c353a005eedaf856320ccc1a7fa1eb998f3b4d0f3ca849ffff001d23218c91","010000009889a2aa7097fa3a8a3469878d7881f859b022ff3599607969de22e90000000098f49d4062da6b5d99353411605cd7ca4b017d3201429e3cc88e322c45afb4a0cf3fa849ffff001d07c6769f","0100000026c16edc06f2196502badd2358678bd843c947a07fa5b76d1b838d3d000000006b5984dfc21e51e44fa2a3b9df656b3d56a13e554e7ed058338bd0e93ff3bb94af43a849ffff001d09c11df7","0100000056b5de84632973b7e562419c8c6af0c69bb0cb4536c7ad18727a3af900000000eb689c19b1cb0ef347db7328814bc6f92340ade86ddd3751765017e8b1e5c86cc646a849ffff001d336ef064","0100000013800c31d2ec7df578aceadeea5b60d2f94d2a63c9f8acf0e8b2ecba0000000077eac30ed555419a7f339530851601f8c5c7cc6962f9bf4393c0aa881d2fa1e87849a849ffff001d16ed19da","0100000015e3575d2a0963e094d0a909f096f2a7c309b55092e305fc96e0121900000000ceac6e0cea427171ee7204cc26adf686b15705b3eae90cf0131d5333ff637402f04ea849ffff001d05ffc5a4","0100000003459fe2aac4aa63eddb67d7e2d6505add6b2bd74e267c290b482a2b000000007ee74582a855b88791bc4cc9897403809f5f06f31ffe2db4807005ad4c7c6dcd0b52a849ffff001d02ed32fa","01000000382611ec001c1d0700a0fd5fde9fe476ec70eb2df81037d685027de7000000009dd63b651ecb1d4cc08e257bfc2fbc6a6346accf5793955abea1a31ced1fa12b3454a849ffff001d1a2f77e9","01000000389f150cb4ba481683e6b182427f09bf33a7050c02cf9103d800063c00000000b0ef8a56916cee451a38aa46e23e416c457e4295edda6dc138661ec6fd8e049a6f57a849ffff001d3623b456","01000000bb05560212e4516a2407893eee4e52a4d8bcd4d2f5357f5bc51c0e4e00000000af1d060807056b95d5242af28e5931e458fe668168facb53f95ca680780a1088295da849ffff001d38931a19","010000000ccb59cf0389d3bf3e94340b29a30aded0929a39e7d19f133cba1a3e00000000381b286de394b55709c53d5d2149ea4259c75770b18b5a19e1a1a77a72a1d14a6d60a849ffff001d31474eb4","0100000099fa0c3d8bd4f33f8b7582c56de091cd3827862e429cee2005fc49ad000000006bb81eaf8cc01107e999661016fb82a02d77551c24d37d78a63a7ca3e9cf56e98264a849ffff001d653dca08","010000003be8dbc3eb4cf50030baab58de0b811aca1208bca4bb2283919a41ae00000000ec89378c678c8f1a34bb703bc8ca611492cd0a278911805d3da38a77e8ea7f5c0b66a849ffff001d27935227","01000000c1a61921adff2196e2858fc977600dc28374e4323878a99f2768d15300000000b1586cd2653bafd281ed5d45ee2f1ce25618d71b1e0a7a458d82fcd857738f179469a849ffff001d262a513b","01000000fd749332af6e8a1d09ee70e93054209bba8ea414885aab90f4af62e900000000fa150165bba5850888c2dfd2720fe9841397d8fd3d36919693174978bc129b0ed46ba849ffff001d1facaca9","01000000c0c033ec69c4d792f083900b6f78f4b1576726d99e687d574b8cc0690000000007a502461d75000dd6865b52bbaa89550d2bf3c84371f3e61f1a727ab77b543f6b6ea849ffff001de544720c","01000000502a98bb12425322cfaa4400a3ad88d8d299493dd730778890aa76c000000000ba205e688c448f0ef456b73f03cc5865fd77f31f00c946fbd3bce7abeb2e89705970a849ffff001d1e9fcd43","01000000154f8cfcf4df4f9656af4cc908e8980106fedd1f4a6e140618462ae200000000b319335e85a03047d0b3eddaf2c599cf5f9cf3ae61d1b2a3f5ca5ca98817733a0273a849ffff001d1a891619","01000000b735021d31da86a4e34d5016bf5b44546dd8e3b653e8c3d51923ce9500000000860e4d4c0cdf703ce6b3c3248844f88458f532d67279b66d515e2fa86f96cd3f6877a849ffff001d07e496a8","010000000bf38ea218c0bccf9dd0f8c445cdb09b2eecd1ac3d6cf18f5c74158e0000000049829d3af259c2cd7b5576cb39b6b8c77a9efedfc5a9f24fde02253c25b393c76f7ca849ffff001d29b4dc36","01000000d01da378f6c4262063b74a520f0adac1e31201304ff80154c6916fdb00000000821d8428198c6f023ce2f35a7823e61fb39bb05f22b30040cbe1b00049aeb6952b7fa849ffff001d16b2c110","01000000aa686d0f52ce71d592688c0d8c3e29bedbf0fb47f3ccfac19d1ecb8900000000d93debd371a6ce359dfad338ed6f86f5d35b033538c7541db5b10a49b03ebe8b8080a849ffff001d2bfd769f","010000001c23f12965cc4f88d95479ea4ad5162889ed58c25a79943b9e9edb200000000064dfc71ebd250f3fc25a81685b46d48c0cce57ff19c9c36d3b177837f58d349bd884a849ffff001d18058587","010000006d01f64ca0c46b4bdb8a6d2abdc7d79250aa5c78570dd1753d135ae100000000fe42de6ef5497ffe9beccc9065c3a6b19a925a45ebcb828187b45bdbad8e5cc0408aa849ffff001d03cb148f","010000002bc5ea5eda00957064af678cbb2700b75d439f9e3bb9f26e2858a29a00000000549ca4482eb8b5fa016d884d17b4442e3c77887c61b654806ed3e4b4e8e5d7f2d58ea849ffff001d244afbc3","01000000070b0bb473365fb69459f42304480ac014626e1d0d95c6db3d8c592d000000005c11c0277a673d84299eb120e7eee526df19555d30496bb00e596e9b5559fe63ce91a849ffff001d4ccc5d0e","01000000c6ca1f35e23f3693ff09bf002e7ac03cd6d6afa5f24b5e5cc981ebcd00000000e84249e2dc8df57db52bfa333141a0f5ba24e1a5fe6b2a8b74aacc71a06da3fe4793a849ffff001d3813e36c","010000000e5bd4ef09c8a325bc4ae86dd1612c449c0f85c35253245a94a92e6b00000000d25e7d98b642a3a60ee3ff9154e17ad9bb7e439e45250c261a78d10afb027594f795a849ffff001d2db84898","01000000d5296a8f8a96d0ae0d9503c80385ca5312cbe0310a66efe710eeaca900000000ce7800642cb63f2537dad44b7ba85653663d0a3cea1431c16d667e1a04c7c2deef99a849ffff001d15f46d8d","01000000c81a8ccef62b5b9f8e928f38d0c807985a4a09467bd911adbd9a59c20000000054ea8ace9106007513dfc6c668da8c07bc92bf2852745c0a7800c9b7f01b0a9d8e9da849ffff001d9c9d9511","01000000fb7d422c7a4e4455361f5129715e681bd0089acc32aaf7afb374a60100000000c1c684ef3b87a0873159c783f4777460ecc8af6d10aa627b1ae45f908bae33ad539fa849ffff001d35fc5c52","01000000abd263824691923b62aaff72a8c878255f14bd4fd7a9e4c24bd6f816000000007cfc703c928c2529b6066fd4c76b34974add24e133750c0718d1d5aa64f8bcb2e1a3a849ffff001d384c2f31","01000000134f72e7b1d1c6e120467af4bc6013cb26913a6e7ec0d897a26488ac000000007a7699e8f69f35ee222e2f4db733ebb92c85333da870e43f72e00020b3638f8db4a9a849ffff001d335b382b","010000006665afd71a19b1490f5fadb88671b71607a7dcd9180d2824612a116800000000e05a9792675be30b226f1cc9287442de22261d828ee96897f4d504ef7e8edf9c94aca849ffff001d359c6e6a","01000000af8d938e027f9b768f81d7565d9e84e80458483359af06235fd088d1000000006ec1be18da41e2a75a905578c4968f3bea994f15d2940b9333f49265a9e8058bf3b1a849ffff001d1a99fe39","01000000c83f2dca885587c6cf172fbaad2d7535a02fe6de9195bc26a8bc1992000000008834b6c28f8cbf91b940568db30a2cd5cc8b5edd7d6ab2fdc6be9511b2523b0b68b4a849ffff001d093fb992","010000005ef30eb90e24a61bdc14871944e16b64dfe6d20c76474c3afca3877f00000000420ef84f061dcd19b649322a85604d3539bc98b6bf660c6d91c84283f26c97cabcb7a849ffff001d37802ffd","01000000887610d475c3d8bec3064986e3d2643f3136aea4ae807d1a9b74c2c30000000083674b01fa93f7cd1e8c1808dffe515b491a4c611299984fc95300f051c4187afcbaa849ffff001d303cd1fe","0100000037133eb6a7e5d45e9bebc6d439f7d093086f7006e8b9fda8a016338e00000000dee4957632980b7a337c5cae79b218ffede3c5a953b99f00a0d6e28db9dd2fa299bba849ffff001dcdf3a802","01000000c15e64b3d101f1030e735606913c5a707cffe0f379beec0a1066707f000000001f23b8c1f83f138176f6e7ff315dfd85920b9bb5f0cb7533fb0f2cf4952b199252bda849ffff001d274b299b","010000004b5220025104a6d38ded52ecdd01b9158afc42fd42a4378adb59826a0000000025a58a30540bec7eea21f32fc97ce57c2831f681d06a1e06301874b99f86f4a89fbea849ffff001d30db464f","0100000008e5d2c4377f577f24e38a690e2fa56323f4393070f74472fa60f3720000000056d6e199204207a8da29103dbea1de6cacdcfe3ed788389b30d77da4c4d89d38c9c3a849ffff001d3333fe1b","01000000771066e430a34ddab385f5ae28fba2169ed7e1ee0038ec747b180c48000000008590d72bdc61630e1bd33ca3399c5d61b7f026c25484ce438ae0213d55f313cb5bcaa849ffff001d26e8db0f","01000000e9835ac0c1a78203956ba3416670e074320c20c347329d87e8cc4f2200000000886d59161a28cdddb6b4ae4689b3f7649cbfc04cbd1c74d635ec3dbcaf20e3e6cecfa849ffff001d23225a9c","0100000087322763ae81f2edd52d451946c25ffbe8466398e719411d1104605200000000cff5b7c303266d202a5db5ec4ea8d4f48d5950cd32b059e6c5f0a4cdb550a267fbd2a849ffff001d1ec56496","010000002a44a1c5956a2664164a0fd9bce7170de44312357bec9662c581064e0000000007118b623d2bd9f1ecb453441098996f044d1f3c02eda0c6924d7412815919bb5cd8a849ffff001d3610af0e","01000000b3a70f2e328eaf2c590709cc35fa506e531f54204536830f8610afcf00000000ac95677b20337bd073d38847166d8e4169672922b11e651d0e26032e000feae3e9d9a849ffff001d23ccdfd1","01000000ed2d2069c4ed63f2a4bcdc44129741623c732768be5e39a7b43c39210000000047f96217d7557be565f6496641da762cb31e1f570562062ce832c417187449927edda849ffff001d0680da40","01000000c23163e70962c021af1a5ae355911b8185d99d48207a24b40b49ed540000000096e18c3989ff981e4eda477354ef779af768d2e098fa9b5ccad60626afc952ee1fdfa849ffff001d34b1a997","010000004058466aeb17c621e1fee73db020aa054d9075c16438a97c271efe2f0000000032883eef5c06022d913af1e32bbbbd1f76441fd7ed786cc4d7d43f6de3c09e1a19e1a849ffff001d3463f471","01000000caf19f015133eedac15d8a90201897c38be014165126f4775a5b60130000000056b58e1234c075378330219c670be3bd9435945480a5310e48b09094a95b320305e7a849ffff001d327b9cba","0100000074e703b1c7fe3908a0caf14ddc0f3867980c82c05e96d4032b10b4ce000000001664e1e4769c39b1750cf65a882a0bbc1204e6d11993b1cd679d51735a706df0ffeaa849ffff001d295bbe78","0100000061b8fe21d967fb83b6edd69db3c37b76224b513efc77e43e2870686b00000000fd488417a88e864b926c5b949922d85ac421cad4d8fd4f7a9baf4ae90c2ca8deafeda849ffff001d00546e3c","01000000900a26bafd4f3299ac267d41acc3290ea93a3e33fe79ad873b08cb3b0000000002dace8abe319a447a8db37ef19103e77f9d22b131fed6cb010aeb062add6bbac3efa849ffff001d2cdcdb4d","010000004ec3e98497c6e3af3275046ddb93b7b9909b4abf4c2e292007bf003b000000008f94ef8257bf58133f29ea6df8f517e67cb3b3a7f2d871b87a91b38965db4b49e0f2a849ffff001d1a6580cf","01000000348c163e7f1bad9a10c783581b1f4c334f882afa4162513a59e5012300000000dd82ef4ac97f3e5c5bdf33d16e024adc570889c81227af616b700e32889b9155cef4a849ffff001d2f6b371a","010000007d70cfb87544b38de60780ae7482ee4dce664f781b03dfbcac6783f3000000003419adbc0cacaf5bbfb06f6d9c23f671f7edad9ea0de0bac491e4a4f82cc21d09bf7a849ffff001d32e07373","01000000784f2bc6246a6270827da95087aa3e737ec66b3a9c6b65340873a310000000008176d39db474b79d4b48398df22d17e77595d7c4f0d4d2d316a04172e0da383100faa849ffff001d36fa73b4","01000000b17c0c5b12f8f15eeb86bde35fa9e0ffcdff56507c9ffe68f606ca6f00000000bd26de3a03b365cdf8257419799b2d735641725c832f35200272282c7e2c417abdfba849ffff001d1b71b7a1","0100000067f0bb796c0552b73e3a015cd6bf2234870104edf08e39104ae1266b000000004a3fbd906590bc825a59c5b1aac49cdb83fbdde50852778b1c1661d15c8c1b432cfea849ffff001dc7a9a90b","01000000d8144d1d6685652bb03becec390c9c17803315836390ed841c814cef00000000303c94531d5d9eec401f894eac2f4a48c10ac6996ecb33fadb0f580e394c4890f0ffa849ffff001d25f84d22","010000003312fcee0a72593ef2ae9a36042dfe77135fccc1f7adf4f3302c630c00000000d6057aee122fd4588ba9a95ec8e8d3de2770f36df3a53518aab61639e50cba630705a949ffff001d1ec4b017","010000008b954b165275eb803ee9f124a93a2de51d31153e86e587f7db8f3d1000000000420394c91f4b15d4097401f8b5b05a65d0778f589a2d90710b8c15f4703ab2c48109a949ffff001d03c57427","01000000f881165eb1d3e4a37451d45cc8f97a173be46a3b440d6a288347949900000000559642d65d8cc077a081c985c8cb02ab94fd1e5c6ceec1002ca2346254d2b5284d0fa949ffff001d093d6536","0100000048e27cd974a00e973ef853f7e3326b06b70ef894d8dd1adc663bb89b00000000324171a519ffca53a6010a98318743ca75880a3b970e7d8cbcfd6a07255e50eba413a949ffff001d2cea0e28","01000000ae6e854ad892e59b929744b6d99a2c6e7376c70d83b124de28534b4000000000e8513f0d0ba3de39727d0cd72accddcca365d7f7b55e899b979f4c5d175c179bbc19a949ffff001d1cfd6e48","01000000e0b4c9d034265d74687c90e0757b1134fb3ea930e637efde89574a520000000069b0c823a1138d8e0e8597fac2ed191a20074f8062adb95c7f65c1c35c3735d06c1fa949ffff001d37b82a69","01000000cf241d78868263dae16ea9938c148334035d8a0eb6ea17c95564a9c5000000002254450f92b2167644031c3ddf2b551689f3f68fcc79da9927220b71546024a14522a949ffff001d07c0f960","01000000230d7061707f6b4872d65e36f764bd6fa81a39775b3f850c670238a200000000168101766ecedd33f2e71b8f0228b9cbc91010e759e5f2ce9be54aa7e0aaeee17b24a949ffff001d2e4a247e","010000009973ef93dfe07e6eff38bc96d46a1516d24ef7dcadd415f4276002a1000000000edbc09e9afa93d399ab0cc47d45f883317681983a1d8280e7f1a5a2bde01e4e6d29a949ffff001d22cfc64e","01000000c3250ef2a5c88bd1a04df39bdeb2f0b257a6b5327620cdb3f1320d8500000000e602335e4a67062ef5e63c7ec1aa7a48eb79e8fda740745f6607d17453aab814d62ba949ffff001d26d9c9d5","010000006e12dbeb6dcd2001ecddd54891b2f00952b53f0ccb4c41001eb48e6100000000d8fd48e9d678f804cf84c479e06bfa4e0496f73c2d256c1966447f55d882b99d0a30a949ffff001d05a90746","01000000d56487f81b94e2e5ac6558d03326dabcc5dfe9b9a14078e2b049384e0000000022f630b0cc8b96e737eefcac98ff325ad51266597949d9ae4f19d302fc1599da5332a949ffff001d28630729","01000000280fbd28984b3878ea8181eb75c544c07c75b1f076c70a53950d1d790000000063380c99e30b2f9e8bacf000db460b4e0c6bb7362242d36241d2a645deaa09162436a949ffff001d3a809116","01000000585d6a372627231a05890c0bbc71dab067c24c5aeda2b9ff59410a1400000000be7a6807a034d4b9b4e9e806d54fa170c66233dc9ba348597f919efa80b7ddec9939a949ffff001d1aac8cc3","01000000373c08bec2c502478994f3f5fa4b04e4d205a3d72609f51a35d809050000000017ccd7348eca597020c15bd332315bb6eac99b05ca954cb3ebbbb1d9f89f1a08833ea949ffff001d14e432de","0100000014eea1501f9b834a7ba804e8e3114b183121ced6f26be638f551b73e00000000d7fbedfe7723035d0ec30e8402664c0c497c4975ed02c59230a40996f82ea2496a40a949ffff001d286d2834","01000000d8563a8bc7864108193b620fb428ab15c43428317bea75a7bc040d5d00000000f856ed961e42394d876037067db7e3968b8563b57fd53efdbc2df69b14257c594442a949ffff001df6331f08","01000000c4b4a9a6505553b30a28771a095107072d5c21399c4288bfd1ab129200000000fa02ab7bfa99a56f62c5bd5d799dfde3ae96d0fb04adef6c23e491fc949acbf6fa45a949ffff001d1d6e98ba","010000001d035652068c748903e763a36938a1fd535ec9eeb0bbd3f6169d8d2900000000de3a5e5636c17f8d94a27968b49820f76622a0198f2833374538da1d6bf8b4d6ee49a949ffff001d1fdfcea4","0100000029c8ce483b7da75f0922c829a563f31195a7f985afee236242632981000000008f921448f3be5502d505b801be69d3b183c0509ad10ef026efa3ae7637b85718c84ea949ffff001d2e12b753","01000000490035bb5130c82702278d07a0353bd2374fe2b6dddcd4d412029218000000005b8dbc8ba864f93c91dd2572ff90c87b7ad3eb73cb056b6e18a0fe6d46cb656a7651a949ffff001d0984a1c1","010000006b21583f47483230b7e72c5b90a08a4554ea55ff118cae47e68e8d67000000003bbf851d0f9d5756d53177bf4f621326a8823148b85bdd4efa2198dd0d647ffd2454a949ffff001d2cfad40c","010000002ec1fa3286e2159b26d608bc45664719e8e85d7b17ad6f605088f46900000000280d5f7c53a20615c1dee5a639ef52fe629b4660a59d361c2ed47b33e0cd5ed47854a949ffff001d07ee357a","01000000dd72d1e3627932b4e6e429b38101c526c31b10dfc1a7f8c68c2523d800000000b9f172510a1b420637054abc6d3cd86e1d2411c12f381b9fa9197ca3a288ab1ed155a949ffff001d14854925","01000000b3cced3fabee722f4160438609f2a6f9068ca7489ef31ecdb493e75d00000000d357eb9034dd4a66a3e021c74748e2eba060a09a7d20a710d2840be0f8f66dec6f5ba949ffff001d28d1650a","010000008cd4f233db03076200db05f43df976d628f29ee2f4efb28ac629f74400000000b0118613b0b474b8f31b6f93927959f92a8389c8b969dde7a7418f8468efa3ce2d5ea949ffff001d239b4f43","0100000063fc88a16ca71ee89020ce77bf0969079290c38b0d024c38e5d46b08000000009bc3fee46270a387f6b4fe85233663bb2b336b460b033df8b28bac45fa1b66c51160a949ffff001d3a1ce709","010000005b7420792b4a650856a9f235d845ddaee9dd376cb6f619c5055dbbcb00000000d819c323730f131b374c8a9787f0fa7c3adf68fec29389094d276b9bc9bc21366462a949ffff001d34b3f13f","01000000210b49348ed71ff0893e2b17e6ea13c0eb13c8c37eb8848b54165e42000000004c86ad9a8cb5a06e22829eec7be3c5b44976ba594a287f29c75207d59a4e1158f967a949ffff001d0206a934","010000007c1ca45233f2df247b82b1244aad49dd48710a9a54836d5c779e59b10000000085688021702fa5f1e0ed1b812495d696af48f380da8f24995c3e82fb9ade33ebcd68a949ffff001da6e02501","01000000eec36558f95f279d3b8be3371846032e0a487654cd46e3e50637df5700000000056b4bd7acb06665869a5d288d2594d39e6407d49d5bf9d78eb9b8c6b10cfaa7bd6ba949ffff001d34fc81bf","010000001273d58671c863af5cb3b8603eaa44d0999597fe973d23cce3d49001000000008266c5ebb5635c2b57bb61a00b0bdb879c3f64f916e1e0438f8a501fc7d9ee6c8f71a949ffff001d323dba7c","01000000b123a3dc8dfdbcceb30cf614aa18e4b97d73735cdc9a5cb9da79c90800000000eae39f095f60e34d88d66178471c265bc47fc7067ea62d079df00405baa9dc896a76a949ffff001d031f974f","01000000a51f4dd2fcd3e696b867180dc811cbdde082d249121231cb0046756c000000002d498db1a70dd8b2dce6b08a8274aadce7085fde1591f25bc7d15088432323575579a949ffff001d2ad68036","01000000a965d7eddea595131c446915587f42fd7fec40bbfc3610466dcb259500000000e3203a0e9ccc304798e92f1153cc7ded796757a0097e3e1eadaaab9eb1deb98c2c7ea949ffff001d34c26460","0100000026e971ab1ecc9db267306e14b8ba72d02b6f4fa63cc1a1589a491ab800000000a249114954b9380a2dadddf1c9b9da244e9a317fd87e85609a124c1a191b8149767fa949ffff001d084d7de4","0100000047577237c20e536fffaa86d11918e981480b60c407ac2f1d9926cee20000000016dd0b6c4f02c5dabe356f204bdd4066cd4b63f4e5d4e09070506fb5f2e093122a83a949ffff001d28c3992a","0100000016c8315279d43124e52387e19b7b6ad022fe517a3b02e891f73df118000000004348d3a2bd5006d3312d1e5f8f616ab159d91369995ba0253edbc3037c6faaaee588a949ffff001d2c90f111","01000000f719744056c2b78ede8e2eb750c363142983f7ce396fbd273401f1e800000000d68bf963f8e85c3eb3cbdf16dc4d42d78e59ffc1b1ee642a622e345e992551d4d98aa949ffff001d1983b3cb","0100000074b22fa109595144fa5d5b10fbef74a4a0145a50d6b651964be8c7a7000000000590510d419db45e01116a4df71f340b9ce2eed2ce31cf274b60416d4eadc7ec938ea949ffff001d89691c06","01000000a11183858c92aa5048f59a4e49430f648dff73f64cb318f2bc4d293700000000aa6e6813236a916829e014654fac46d872c726295f124c5bc0453f5fe3e6f9af048fa949ffff001dcb299800","010000009c92ad1c3672538ecccfe00bf856cf307e3b8801c8b5f82422e363b100000000977ca9d666e27133c9a9788963fb77c3983e232e65a4ca9f2de23114216ed1574790a949ffff001d1a93637c","010000000efcdf794db62026386e03ef832e811d38e3d01f66f948822fafa6090000000073292a24cd8fcd6d5222a3b6c997dcb0af7873aad680b01062604b722a5c78516e92a949ffff001d1d3c7e57","01000000b3e00bd0ff7d7834cf27bedceb8a6dc54c50a7ff5f240840640663f600000000e81ba9aeda190a571654e68546c142f9bb4906be05a0665fcf4b8af385b33d005d94a949ffff001d22266147","0100000044caa993de62c389914791c4d980083ca1cf61809a95f91bb7057e5700000000a13af4c0c198c8fbd9ab5dd9d483ba87b2b5a0899b1cd31127a14f399fb932683299a949ffff001d32086285","0100000030c8deb80c08c1172421baf7b35b1ccc3aeb8db0efe4a19ce8c9780100000000397e95198b6bf5598bc5fa66761346c7e1ad0e67d2c1ecf53b53fbd2137b3b3b299ca949ffff001d2e891aed","01000000836224fc75e03ec21718c2bc8d4835b4e7e34294df5f8214f1cefe26000000004a719b44fac13c0e6002afec71c923b637864290975d2a54aef9a78a16e990fe9ea1a949ffff001d1b0119a4","01000000b94ebee49de05aea8db8a8101243f68094c8b9448e047bbc622f846500000000c57747942fa47b52e282f593727bb98514a20c3d8b90edf1a1e2427cca52fe1e66a5a949ffff001d2b471f18","010000006f79c63a2c034672760ddb1680c535ef44c2540380b843bf0c4a1e9100000000f28719f05d2331b365ab02dacaf256bf4f6d5f5240429643fc6d0c9563e26c9016a8a949ffff001d33d40cf9","01000000e8297ea9d970dbfb4bccf87c701ecf78df18ba165b9620c453f0092500000000255dff8277dc2d7adc05ea4b4fc662bdf87ef617fb403a0fb203254cb0c47c9410aca949ffff001d311ee85e","01000000e3391f0b410faca1f8213781f3d57f93ef5f5ec1716debeb1f95f79800000000dbc96faccb8fc139b0e06cc177da00e0be757ed508bed3832ebe83c4e58b148d19b1a949ffff001d153c82e0","01000000e503d5aab404dd9ad6076cf3afd31e4365be6a067e8fb5a5321b88ac00000000e05300ae7ae591ee8927d2793422c57b363c3dfae6b01dfe514729dcec190b0d0eb7a949ffff001d31551a70","010000001019a3e8b5f87968d4cc86d0f9d37b63049361655898fc3dfc2efa4000000000b8e082250e3845e3c7a616d60bf9c5a6163799e35797155b073c6b5fc2b2bbceb3baa949ffff001d33015555","01000000c272051aea05ec3afedfcf26c1311b4387c1291a763db34d206e753600000000d320bb14bbe17f8383b198a53380600412e786054847eef323d3cbfd7fe9f50b17bca949ffff001d384bbb6c","01000000c5ca5904aabc6055603ceb3de3e70c10c34656ac12fc0e039c102c32000000004f0040c16a538a94bc6145cd06467bdb3c61bd94fc41235da88eeaf80b732a02e9c1a949ffff001d37e58e6b","0100000096e8bbca4f736b54893606809686a81520e3700bd17a2f8db7d78641000000001920b6b5b78b007f92227095663ec59ecfca0c49d6e583a8780c9eb1063b874d53c5a949ffff001d3a573a26","010000005a304439e21f0d6680c5ea3b127241b52e829880f0391d2abbbc0b1900000000b8a03e71a243cb5c435108d664348f6d4ee51140e205307b3b69618898e1b18ff9caa949ffff001d18f29f33","01000000d8b9a2921ccd0d3168d94dd3b49ae11f9b71bbceccb3601e98edc42200000000fb4a7dad6dee04607dc1c3d4517655ecb854e9858ac1ec4c4cd87437e46cef168fcfa949ffff001d2b8232ba","010000001e84f1e4b7811afb57424ac6e727ed1b829682c71dcfa0508062f3df0000000029319277904053b203c7083c14a785cdbccbc3bd9ee0f12c9377f54817afb72993d3a949ffff001d219168ec","01000000f5ff8e002144e741d849453cafc49b4978975f9d7cbb2cff925e5b88000000003109cc3406f076e0c69b36fa9665756fe7ddd54c7cfb55be5cbaac6ca41cb3c5bcd6a949ffff001d1978d8bb","010000009ccdf6dd172f23f9886b3e3b9d284b2dc57caf3ae3cd7f492471ce2f00000000982305e941efd97a1a3004584f66526ca29ce1e0c09626fc1a808e2a3ec70ceb05daa949ffff001d09bf29a9","01000000eb9d0e44d3216aaf3e6bf0590dedc9d792d397b5ad4dd3fc8450eace000000006026569d2b6ee74fae1393203406cdfe5864423b4bc07913a57191d4078c85c5e0dba949ffff001d184729d1","0100000071c4499fe69aa3001f7ef62aaae9d32e94824924f8d01a2ff11d254500000000418e8875bc5cf8b12b78ec3d1e8faa0260b4409f8eb8b50a9185494e88a9aa262ddda949ffff001d93611005","010000007e7ef2a24580698814243ed0fc2199e6b78f16f12b164b5395daf23200000000c6543e38d9a4689ec9da7d9c761ddd770147bad6d82cb39c2c832190e4667b984be1a949ffff001d04956529","01000000028ecf0b5146aa2929950a22c84907afff2c5c04a0520b7cd9653408000000007ee45c1039e6ff115dbe3f5a30b7192272bd89408e89206af708d3891633094008e7a949ffff001d1b2ee6e0","01000000c4880f85d0da95763567309fbd5355f1a745593d4427ba9c851a8e9c000000004c241494848b4f125cdc849c012df32b203bc30ecb04a5b5e5e5a88f775926b0b6e8a949ffff001d31c769ac","010000001e61370356bca27e354a70238eb74adc6cbf92e58c6a882834968e0900000000dd646a2a1a248c2349b613b8ddedb5445c74ba0e4b9486d3a7f860acdf26f5f696eda949ffff001d291d4000","0100000058f2b09d4de39add5d57b9de7986d3fd8c67a2358894316c9b94fca6000000005cf3caf3e6a238f15069f2f5b7a39516b8740139c55a28a9766be733fa1043fdb3f2a949ffff001d217433a2","01000000a07e71ee97ba813d3db5f07ad00e61ff3f4afe6c8fd089b6c940a93600000000c4ca68178a88912b850512a6ed7f5102d8b586e35c1ce4da9ed0692a98a2190e17f5a949ffff001d2c3bf94c","010000008d24116b57c5e4cc831ecf01bb28e787a184e4275e76fc3084c0569500000000b1c0c7c3f867ba6efc43e367ceedc156717d44691a97f59ae5b2eb6b5e81478dc4faa949ffff001d3558e860","01000000ae067de981c19890a2093608ef7c0e67991ba2b7a6c28ad7431ac87d00000000c79f7c9bb2309043d5b482a056b8919d93c32591915c76f346d54d81b556ada862fea949ffff001dd9630f0f","0100000045a003a0c2875515a368fd3546294fa7abe9b2144899d605ffb6f38300000000523d2a563cf9c1137035ad43d4aea99bb4ccd22fde22f12fce6412ece547178b7700aa49ffff001d34907045","0100000070224e73f1419fff08ea8a0cee729c545ff24961b1c601e994be39a400000000781c62fa21c276ea0870e1063ad0dc320c3bd96255db05c34ebfcb1b16449545e006aa49ffff001d2d8bf298","010000007233f5681c5b02336b7b3f402c6b25b51df51877accbcef3387d72f5000000001ea03f90b72ea443f615cab68373cbbf370cfc9db0da568cbbc25d737966d2713c07aa49ffff001d5d6ffb00","01000000f276df0070ac15520aca7c4f8055d3e66536172b633da216b5412c50000000004e19aae91e14c589e3ec4712c2427b75f46853cc2edb4422ae326834f454b9e5e20aaa49ffff001d263a5615","010000002ebba90cd1e6e7cf11d8d785f839b26bcf891e8c1279f9286dfa873f000000003cb18b77dc59cc5a03ea0a88e8b445c5435bc9f073f9ade7874671d9c2a3f517c60eaa49ffff001d1c907ec2","01000000462d7821c112be11b5a5de7532633bda01de58a4f6644a6bd114859b00000000c18da560c7c562cfd9e6e415cab17134ee0119d2f59e1f13701818d96b02be71b710aa49ffff001d144ec87f","01000000b637052a97247d1c6348ff9bacf0c05db61938e525a40246087be887000000008ffa9b9188fa89a3d98c76b60afabd282cb61d786eb64896107d51c3a16a6eac4f16aa49ffff001d37c07bd9","01000000c69be780609cf1075633d81d07e8d949ef302a0065d11ef46cd2f2cd00000000f2f362b6aed2ceb359637cda5ce05f20661e3638b1c27752450c8f1cecb0dfa8ae17aa49ffff001d891c9e05","01000000101daa1faa5d14dd4073754e101c290d209fe4bbf3783126e426ea5800000000d75aba03bab91f8f7756344412517254caa17f006af56aec49571fdae7e4ba50481baa49ffff001debacb911","010000006ea0579edf4defcb4addb390913616063e79e15e709a8c8f28f1664b000000008312fe6129c47e1598469a23ed24e45f7af47d1610f76b1cfa4265e0e77310db1a1caa49ffff001d27c115a8","0100000082428cf36949a62bdd2fa8e8d65097c655dbd8f3facf1ddf55773b7b000000000b43afe0b336b2ff895bcdc1f2afd37620980354386fe8ec6baf250fde0b2d075d1faa49ffff001d17752a76","0100000003d467866a84755b0dc7d449fc790e7b95e9e7557d220139ea5a215c00000000703869bb846db1e455b3ee0d0028d6939c3c01da59ef9b3cfd51ff345421e0496724aa49ffff001d2d7a1202","01000000535e15d3fb469d6df513d1f42d9240b8ab4faeb47d6f30a8a7d99293000000003cbe4f91e77dcc14def222c8004a2b10f0802b361ce5a37ec57e870d1adcb2154728aa49ffff001d337c6fae","01000000f1b963d6018c90a8906603ed1642ffdf3a891dae42cacec97137f18a00000000c39ece6e2cfd03a1cdbdc6a1c947e887dea8d0288f8e9855d16faa5cf31a437d542aaa49ffff001d2413ab94","01000000b02c6bf86a27d5cb036099af319d2421aab8f9bd02d43ff32d615f3d00000000825d42238de4932b12f239f1892655305f04dd40279318864280a3ad4f86db45522caa49ffff001d234cab01","01000000d0e5135997c09a5bafa44af1936343f44ab88d17455da71c8d67bc1d00000000cb493fa7b12d6bdaebb7d3d8e8b510e9d405a228d3383d0d29b845ff6a0568906f2eaa49ffff001d23d2cf1a","0100000077418fdf595af8c57cb315860b110c4b58625768e08687ad8b0cd7dd00000000d1a602b2b2ca44dfd5d1936b664f51f9f35d4427dfd36c3950d5562af4cba0b33930aa49ffff001db0085805","010000005c39ce099071c33170f2bd245193f1b100ec09ad9e6f63cc8cb5a6fd0000000001d68b06cca5918d72944e70ab1250d0d6d626c15e1aa4de35c455053f203257c031aa49ffff001d33057d1a","0100000099d5a065f14b6aaff267e9389163ccc65b8081adff943a08006ab1c200000000a05aeb1843ff1af3229e28a7cbbc3ad24f1975c9b25f471e6b04d8311f66d55e6036aa49ffff001d38170f6b","010000001e078779cdd96a3acfabbe05567e830f1a501ea6932c3f9dc531374900000000f547920b6d410a00c01ec2c2b8c2af6ee15e73172da2c892f45a4d129e74c691843aaa49ffff001d1d8b48a4","010000004c7ad0ca1847cfe3b7a9aabee2a057eaa9ec963611a55b26b151c1a70000000067722671c7c6bee0bfc692b4c04bb5ba8785514345a3365de630a88000962c77963eaa49ffff001d2b9d7aad","01000000f31cd00fd769416a065a95150ad7683db35c8be9b03099d642fe62840000000085b53a66e68cfb38c4998bbd4f26ae5a52faf46d891c10b148e5933f504b3e3ac341aa49ffff001d29689389","010000007afceba9daa016dd285b1d0fe09cd22f7d624e97462c4cc4a0a09767000000000a9a75ef384cf61501961a141ccd3003c5c8e2a92ffb78c227c251f80658c5fefb45aa49ffff001d2d27ce92","010000007625e2f424072771bf50aeb7c1cbaec5bd321e8ec36feae552a078d200000000f027545adc1f37547776ae624da6378d4e0c944bea94e459743b3a013c82992f704baa49ffff001d324c7e0c","01000000c7c4e703b7c0909a588edee5846c646cf3ccf248afebfe62e40408a700000000e2aa85d6acb96bd40ffacbedfe3642215ce9abd9d0428e456d3b00b844703757eb4baa49ffff001da011cc01","01000000a5b27ba395caa72d410346d72e2d10853fef790d273262fb79c0f0dd00000000de94c19d903adcdab23fd40c68c54b985ebf0d2a2614c90a48853a0678e628d8eb4eaa49ffff001d19c06eae","01000000f3a0e10c6afb01c48e340a96f87a1e526ab713f6e0df6ba8a9bbc707000000001c64667f46289387dca5dfa23c6bd3671c509675ac48d1fc5644eca5e300e19fba50aa49ffff001d22ac4c19","01000000356a921d0afb50e03c721ec3454026427b84e3ededbbfcd0f1727790000000000adad038998d35c9f0faec9f55dcc722f8abd0596d814ee6e1580694476841fac453aa49ffff001d1d9a9cc8","01000000b688ab8589ad6e8d8571093d55d16ab6fd120656c34e83d7a65fbe8900000000b99e19ff95129b70c9a92bc5d36aadd187bb71b6a6642303d0d7d42b6ffdb0883259aa49ffff001d16a50cc3","01000000dcbdce9412834ff1a9010510d51aa5a4dc67be267dcc04fcb50fd33a00000000d96ed0150e9404ea8da50a444906a1e79f3fffd2af4f3ddbca77f566f0c388e9265daa49ffff001d123f6e10","01000000daef7a43232ec3e1fbf7a5127846227d7a6f7362c795936d7ded22e40000000021d04c0a3bd6fbae658ebe4d0c9ed7f0ccd07ad05c338a45c488818b018e804af75daa49ffff001d26aaa73d","010000004c93a432dba5450ee332dd4de0e955b1e292dd3ec0277ecc32c6ed370000000091d70445bb8069db750a4b534d0e67272867d7ac8eef7f74d862a33cf95dbc704f62aa49ffff001d1569a542","010000004917142bdee187c42184fd61ef26faccb52cd1ec2ae5f16ce12412fd00000000bd93a74eac7977de45e105bc81921a305916247d485856f6cfb58d17951cd9586a66aa49ffff001d05c908b6","01000000953c62fb5c40d370e55d1294c3196a2a3eed509728437805020dd369000000007c1457028e4603273d6700d19c51d3ffb1fc71774190b6c3e12a09fcc8f59c7cac68aa49ffff001d27763488","0100000090150b24066f8f9561ee29eaff1409877362b7907043105750d6cb7d000000003547dc4964606bd3e226901826b49783dcf884aed15c70f8b55360ae02c49077346caa49ffff001d3117a9b4","010000005e989b193a76f28025be880df930a7829867f5d9a0dfe8b8fcd4508e0000000097d26d1549e8b0bc91edefadeec727642dcf0e79fcb5c66e2a951bcfb07e8821f16daa49ffff001d029b4bf4","01000000b4b8c9fdfcd50035d037e7a72d95cb0db545eda0e8e31b7da4d6ffdc000000004027529a8ec1403d8c654dc8ff1ed1b2b1419d01d0953dcfc850165ef1f2dca26e70aa49ffff001d27c1ac6d","0100000035469a1bea056b39c4bf0d70933e7e62430a2d4622fa66ee9cbc07a0000000004f1a1c9f72b7da7b548c5e5cceb6de3255a5e530af11cc2ee36113ea311ff1a0cc72aa49ffff001d483bd009","01000000a470f66bd7c1fb63d00f1187d1741aba9d0c6cbf6fe0dafeeef1676b000000009713027ef407bb3e57d2a30c718b04a248d29ae221f117420d49b9b7d0fb7e6f8e74aa49ffff001d27c2d9cf","01000000eb69cc3abe46bea5e549b81da3016555e14efffb5cf6c13b7a222b9e000000003272db6bcdb1c02113c6e82ff1d5e0ca6e37ef2512314c02102155f3347b92eb4978aa49ffff001d294212ba","01000000885701dfb8e1de06896627244e91f651a2ae1ba800321b3a75ab2644000000005fd3872388192653c1baded784afab6e83a18edbb163996ac74910e21890f3c3dd7baa49ffff001d243465ee","010000005615ed62dc17fada3426535879d8ae190bc5df5b7cbfefddf1bf25b2000000009f5fbd77677bc6a9244fb04a40026082ee28ae299bb1bfd48d4600e3fbf33571ae7eaa49ffff001d33939a1a","01000000f49eb7df7158eb543edfb18f627148476a67925604d4ebb52edba6230000000051345720fb78efae3aa27f73c335f45531b2fe48219e18f6836b61eb7ca01b4e2880aa49ffff001d040db45c","01000000bdabeac68ad70f678bf9695fd494b25226b89a204992100880362e860000000077563d44af7465ed3e55519d4e648e0707efa5d30f354446ab34b1a3b18455e8d982aa49ffff001d1ebfb955","0100000024a97573c4e892632800626cd6bc737a745af64a30ecb1b19fa5955700000000884c74a998897e7e29d4328a5498a9aae138c12926a87ce8c2e34525b18cdbaf5887aa49ffff001d28d6484c","01000000b839e6b27768e7bc5d617784186d8e41885ffc7a6e0419bb37304e070000000089cf8b56dbd53541d937f3985c703c213aac8b8eace3805fb8091ee35afb9ab2f089aa49ffff001d01f29d2c","010000002b62af2e8761fd2ebf33610a3f0124e10dc1e3cadf1f04935a8b7530000000005de0d35b42d6d37704edfe5c447dc41730828e175a7ca3eda49873c8ca59c20d9c8faa49ffff001d17b0c4aa","01000000bc8dc426fca62976d8a33451ac800b1be06b8fc4d56dab2be8d4a30700000000faf57f531de1ddaca6e8b35f4f9591162ce7d15de47d2af7fb728d5f24016e935c93aa49ffff001d24991da1","01000000d806232c5687ab4cdd71e7b464cfe9e9319ef26633046c5a1eb989b800000000bbf8236cdbbdc514312ec323fc46cd4d903fadb2e8dd41c52fd5eddae32d84078696aa49ffff001d1b3cdffd","010000003d940c16283f67d3d22218eb55216d1d8c3afa11a0b5e54e024b9b0000000000bd67a250897c592e1d75a6c3ad95e63ad439584165ac6e5ca5cf261f62411087de98aa49ffff001d6927b909","0100000002abffd8da7b81dd5d0547996dc76c1a932970545956393524d84c4800000000962c9247155a42b17bfbdf5dbeaefc6e068ca5ebef4f76098bd6f2563ad41496539caa49ffff001d254b4593","010000001212a07c5f87d1b1b1217a1a6d344d73de6e90e763e83634ad2c667a0000000021afb305e45070bca8b7dc1df972f81bec821777cb72ae51a367aa6ff5cf463a77a1aa49ffff001d347d07d6","010000006b8e61d04ce94984d8ff13a2f83831b6b902db9ee1a119d026982b9200000000086e4c32735335f71d40b97442e0e202c9aa05660f5d88493dc5b649cd7deb2ba7a4aa49ffff001d055c56dc","01000000b111cc31be002b9f773f59da696763f507047716158c7b5f1ddaa58d0000000003a8b66d167d29c7e239bb5745cd992233b553985321bf87d9546ed418304ae4cea6aa49ffff001d16e29834","010000004a52f3a7056f5cfbc1e291666065f2517a8fe2dd18d5d537b7e95ab00000000023c81e3490cff71db6ec40d480806974407850e0f28981f68b2fa979500dce4c55a8aa49ffff001d38734f21","010000000941daf63e6c1d947541d448e9999211eb2c01aff1ee8372ef637052000000000cbc47d2bfb5db0da8e24b78c9d6949bc97098fc669946c405ae7cfd7321449958acaa49ffff001d8dc41306","01000000523e6fe639c8f2df9d955f04fc825d8655ae05d618e65fe70c1d2c0b00000000088e0f28f6d5cfe659dd58e7acb00d145dfa70c8b40576dea194351183bc334f8cadaa49ffff001d256c1c32","0100000074aaf02228b2b5cfe76c6338134768dcffd9bf78cf68278251d58c0000000000ba4c997cc9017021bcd5adad30afd9915e33d12e3ec3121fa786cf714ea16f0816b0aa49ffff001d26e0279f","01000000db5438c745659c88170baa5ca6b636474fcbbb9037830709c27a7f9600000000bd9c12779ad47eddf98f60664a1330c5587e020c89168a4efd014a085ed19e3a45b6aa49ffff001d1f8f7444","01000000ebfde6ff7d0b30bffd427dd4043ad95cf7650e0a87f84865322f68de0000000083220e81ab3c3f094d5cedabfd48be282fbcc81fdb54430300232e59ce37afb949b8aa49ffff001d06148ee0","01000000ef2e137d1fae016a0ebdff4f07d95b97de641f1282c8520181064550000000003dbece1c67009dd90d337dd71d72744bd08f1293b4a7c2b1ba779d349e0961c636baaa49ffff001d2abf3209","010000009b19dbead8f87f840d25ceaf4475f32623c00e339603b21ca7a8fe66000000001254908dcb2207da6ba475d2564f2ecc43ac1acfab93f3ea0579dc4eb6dbdb0f7fbdaa49ffff001d328c3944","010000005b30a6436f1712f44904982fc3814b69f667707a28010d72c5926d0c00000000eda057b5c87355807d1729ede6453a7fe5a8953e9176fb94bc4bb803f36b4cf414c0aa49ffff001d70c26c0c","01000000bf7272a1308b99e6d2dc0edce28e387b297c65d0f1ed9b3797b48c820000000031576966e85a9c0ea91491ab9f2a8063ee5f070fb849cb0c1f0bacd0d833e5de7ec3aa49ffff001d294576d6","01000000a5c53012e155a9ecc2137266a0bb219cabd7c4c6d1bd03237979bbdb00000000c88c36fad7b1d811221a7297eb02687bd34854221728f82e230812a90328694340c5aa49ffff001d07b9110e","0100000015c6c4794f23b07986c1c85aa7ca5fb1216ab486bb829acb04affc550000000040eae70dff040897b7ddd89eb38b8316cb83a4d113c1bf6fb01dd191abb7abd74bc7aa49ffff001d25191e1b","01000000f580f72bb40d59eb2e4232117cf6bcd134e00f8d1f4087f755cc8d190000000029ed390805874ad984c3367fefbf3715ff1b426a102eac977f131e9eaeea89837cc8aa49ffff001dda3ad304","01000000409d73cb8348d977562e8af1b96ee700aadb9d22708101aa671475590000000021bc2fe835512ce4969433edf26923f443e7832c0c89ed637c32d64cf2f17a3b5bc9aa49ffff001da7d21604","010000004ae3382426073c845299654f2d32fd39bfe63cff84c7109652efddb300000000905453f49e51197b5562195c9d5f5655b15c00ca58566794b10e23a0be4726e619cdaa49ffff001d044ce6b4","01000000816f9547a28c9782abdd217bdc0efcaa68b3a45ea985e97dec0edd1900000000e77e7390cc2e22abe7403c06665ef60a0e0335f2246e71b560f6216c3d62995517cfaa49ffff001d1851fccc","010000000a2deb84b140c663d259d14bbc64bf79f440ef479596aaeb2131bf9b0000000006429b65da3315f4aede4024eccdb3297f1a0074324b3c678d735602edbdc834b3d0aa49ffff001dd9631101","0100000060da864b96db501d7bb69e42a941c5708f3b656535a92da7c1ccc38b00000000e93adba2314c70b1ca0c1a0c7db7ba8c14d6c167304da93270d4d7087fd021be11d2aa49ffff001d382f86cf","01000000aaa1549de5bb5ddcb5d13492d6935bce4ae7a5a004349e465ae120b6000000009614e7e8b7248ce2e4d4a170274e9d4058b71308553e10b9740b815878e25d1511d4aa49ffff001d38b7d088","0100000012ee6c2e758589e5a354f7c20f50cc75745751c2be81526f6f6bc754000000008d2d0dbfedf143e7db2a72ea8e1b957c9b475e161513fcc1702c44bdd70415d586d9aa49ffff001d1ac54daf","0100000061d95db6165de184473c1df44206f71c29b88948d1577249b09c092d000000006020f1f37fcbdb1c2df2d9d94eb59e087d1e81f91fb0b840b8cf7adaece232d1cfdeaa49ffff001d269b20f2","010000002e632b5b3bdadef48857af765979adec30edc81d7ae5d1cdf2ad9b5a00000000a5ae8cb1bc218e33cc9898bd71249ed67e4b227244b763b076be31742414ac6fb3e1aa49ffff001d3a083062","0100000086bcc2dc95defc7705e2a092eb46a30185562eca75823d474d8d3d44000000000fdf05c56bc0fa7ad53405ac50042804897d42afb58b5dd31d0f18c7bde040d3c9e4aa49ffff001d064c3cde","01000000f784fbc957ac1af415192a8f2086e5c3e38de1007e74043c82eb557700000000487f5ee59fdec64ab1f91bab05d300daa7b3318b0780e42d9ab0addcc1dedf6812eaaa49ffff001d08be4bc1","0100000053a040cae8b6763711928cc3530adb55b300e784af1e93dc109b4cbb0000000003a3d3ce802fb6ef13767db5b4e2205cd805e3334fdccdffbe099f80d960b7e746ecaa49ffff001d39ba2697","01000000cd87b2fde48ceafda5d0e4c9cab75e684a64545b70ef45c3b2731fd2000000008fef2f2ca2698e674cf42819cc654f54bf04b684028f4fa5a872b6884fe0170febf1aa49ffff001d07444189","0100000070e71294075c43ec6a509eeac04a92d5c6627475fab8d0940e9fe7a200000000d8028c5d030d2447781fe94a6e5d94959476af98d61acb433d36006b735e8ba339f3aa49ffff001d04c67066","01000000e52dddfd9e91982a47c13d1403e98b4586141ff8f45b9cfc4f857df4000000007df62c488c9b4fdf5575fbb79149167ec9dae2506c1d1979698b9ebda067fb3e81f8aa49ffff001d31417ee0","010000006c73b3e2dca18e4427781adf9431dbd12b0ad2490e39e24a9f2cf49f000000002ab64e7c4b917febe9cdfc5c7ab68dd1b9d4f72ba44a21f16168c9e5e26a7af764feaa49ffff001d13c4c1e3","0100000024c3e4cb28a5a5cf4894e9fcacbd03bbd123fbebc1570d1d574a174500000000f59696b4f6b3c4a63b969ec51a4ed853664395704bfde2cd362b59ae306f550a6703ab49ffff001d34623398","010000007191d88089a9d60495e69062f005b75cc9ad8ebc6981e8ce1531013f000000000e681d4a656ff87b2f356f2c9c49e33bf5dfcf02d37acd246805a759efe72f35ec07ab49ffff001d05116247","01000000b448731554fbe76ccf535bba4e7efd213a3828b803ac9d017d6bea2800000000673187bae41a81e52c8d11e321763860f02bc0e64626ac3f6bf1d9e0044658279a09ab49ffff001d01e62201","010000004889bfb80785b8462240585ecffa7e338d11c769be821e45b3e0323e00000000142f8ebe410bec2cf57f0a0bf49d033bd5cc3b6c4c805f9d2eca5c3f4252bac5ca0dab49ffff001d24561700","010000009781d3ad611964f1f1614e10e7918c9aa435ff028365ab8775c8348300000000517f2ebc381c809d9a7604190f7d8b46ab351e70624002294462ab3e1800ac4e4413ab49ffff001d04dc2762","01000000db47aa2e327349bd98b755668092e3ab9553dd05aaf85b7c8d9a96f100000000fef75c638f0825d5c2147c1b4b5b94a8dbe4ab53c049cc043eb134c6a06e1be21318ab49ffff001d028658a6","0100000041cf33494fb55168ce66d926befdc284a28d791a8d5ebdb5fd648e2100000000a7ee215314074ece789a807804316777170b2ae1b4b20052ca9637fa05f46b39f81bab49ffff001d2e7a4668","01000000736d75f81ddbc1d09cd03365fb7f01a8a27362a9cb8de154a073dcd30000000067989ebaae5997f96666c701f749b157b513e06fde7c16b07fb16a556368bdc0c31cab49ffff001d7679f302","0100000043b254b4f28c79510b3fd7a4cd018d6f60cffd724e60a9e904406f9400000000f6822c1c11ec0d8940763f058ce8b16f057db88936a09e52ff37c7e17af835e8ff1eab49ffff001d03d4b733","01000000e0284c691261d566fca96b44d52802a890dd1012c99ab1dc78f3f59f000000002b48ee9dc0bde185b8982f863d45c0af6c7b4918331b60ce0b83533a4940b6c7b721ab49ffff001d18f32938","01000000393953cca814f1e8406dfa93087936eb7cabb7ecae01402e7d24d109000000006b1f38d70f72c0c6c368a1c31cfbe4938c9c80f9e4f9271cc75205886be6aa0de627ab49ffff001d341aba80","01000000a3b74718cbe5a0ad3f8fbe7ded5e4516793d03bb3aad1d1186f6ca3d0000000030615c3e5666eb09d0086b94ccbf084a64cff986cd741cc364edd55e40b3c6b5e329ab49ffff001d383205dd","01000000a4ae00b85b90dc6821ad3dd94d7b1975b975ab36a142af6df724a2ba000000006efb76156d40b2843cba35f66f96f8c1e49caa322d546258846dcc8a6d63de912f2cab49ffff001d331069a0","01000000cc729851d0d5bd8b33f59e8fbe8920697644e604e41a8283b4893be500000000e6299dd0e131a8b4202a7599abef7c5070ed16d17f1f10463b0f4a6d9a011e6aa431ab49ffff001d2079dc56","010000000a33bda51b12fe16168bf5e738e8f51d1150ad09be112bf4fc0b8f830000000056b75788f6d2d76f8cbe3ce3b68835e0c6ce01085a0552c67d49e3eeccfc5a033933ab49ffff001d19163587","010000009e15e3cb5e27de75fbf6913dfdcbc67585e1804f0f3af0bbf8f9831300000000aa28208213b680c97a3d07a826b259c6801a65303533032efad17dabcc8f6c4d7536ab49ffff001d1634c2c7","010000000bdca3b5bc97e9b192fde59538b74b35fe7826883f22c64e00ccf89700000000a1c131f42e00f15be74a503a3f53a929a887b6412b93d866ed435b5f8f0428b95f37ab49ffff001d4640bc03","010000000b2c6b906084d63cbe084f14e115f37d137a07afb3252d0d32dca3f800000000c7d288a4710d629bbf7d374981bcbbc7f07c30fa7761a1e8c769048db1deb0bb7b38ab49ffff001d2b11553b","01000000601565e2924b36d8d4a342cba0378794e97234c17032a792ab33f72c000000005c0e5926f924df43ff77ac994a9b8a83c3a885530b4b2e43eb707ba93f6ef20d3939ab49ffff001d5674b701","01000000e2fa537a2808f20b789215921422682d679e64c95435ead4f75c77c40000000062bc50a344a70cdbfc2e5f494b30621e41c2f993a4773cc0d15e03067e40c6a4b83dab49ffff001d32b5d49e","01000000647bdbfc2cd7e2846d78c042f825ab54e5e1cc5033b4c90da690044700000000919b9eed21f73dbc478f6745f4cd8cf9fb26e511fc442d81b38bea5aecf1558a3b41ab49ffff001d8e8bff10","01000000561b96afb2687aa30a9a512b561ff923a1a49c7f59e309810dff1ec3000000001fe6a30e2bdbd5903302933a52b0f6733bdd21b3bcc4e7d215129d1fbb3c6f0dae42ab49ffff001d295b187b","0100000014485ad46b501909f67485ba8eead9ecb0d117e2f5a67a043f58df74000000006d2b550dbad928c745c83dc25f6c9da0315ce5103eb68ce551f6ca89b5f203541847ab49ffff001d19d42d2d","01000000c7593e08f5e70f8221f1e6b2aeff2bb863e325f7cdcf88a1ffa0260100000000d8a91acbe95912a9971959a2f5f17eafbf446ca578d60c47b0e2a3eb5512cd83d548ab49ffff001d37444b44","010000003a296308308bcf32d001e1acaedb6c21d1665b15b678df6f7f49f042000000006156af466d57156297bd225b5de395c7d2ab88aa6f6bdd9d2ecaf9f494678962654cab49ffff001d15bf4954","0100000002ec6b4a9615fc7b224b402220e69bbf3434c79d7833349ddb0a701200000000fe8d4646680ea3512229bbdd3fb8fccc444c64f975506fc4944deb59a8cb60b5ca4dab49ffff001d14bc11e5","01000000a8e0cb8ab99b57cb33bec7b42828a329b6a834e3400e69ef6efda4d600000000f451eea8fda840d4a9c60259b907f02905b6fc0958d43381adef8265b71da2a0fd52ab49ffff001d02cc50e0","0100000024ccdc33dd98f7eea3289de5329337d9a554d5874f1707dad5f0730c00000000b335adea1c386e4bf0f0ad2d2c152de563b139705a1b3a14625a9d023369807e1b56ab49ffff001d280a07ab","01000000e89d6cc069400a777d174f73671caa1b64c9cb3ae1ddce6ff1b5e86c000000003f1c50903a3412071dca8f1cb73822b7c7c3eea68c21aeddefb044ef3512fa67315aab49ffff001d5f7f2f06","0100000013b2dcf14dcdc07278eee82d34c2387713af974ab8bef6777590634c0000000034963f4f2bc0ac7c18bbffe5a8e0b73d43a3995bae8a95e62e1a5e4876483760f85aab49ffff001d1eb8d154","01000000df186fe666b7ea8553f6589fcb1095c2e20768ffee9ac51230be9989000000009d4bf3b8cd5ce9d99ff94510dd32354145d3f559849bef49dca29bf63ae8d83cf45cab49ffff001d13e7a28c","01000000d5936298703415812f4be85b4c765df993cb7644edfd3545c16e588400000000b5fd87dbde722f962ea9d721cec4703704425563bdf6b49a32c1b503b14bff495161ab49ffff001d15866ff9","01000000dfcae99c4434c07c2035e45b9648e7322a80c8f10b5ac6781d8b2c79000000008127aa488096d9352de20b7ec2bfb2f3362a21a63aca88abbffecf8dc8a8d89bb263ab49ffff001d0242a126","010000007494c6a19abddf6a74f6263a5c65dd26d14c2de3bd2ae39b96a957160000000055db03d9cdaea5af5d2b42e1799eb06d19607fea55f443b9eb2472d4f3e17108f468ab49ffff001d1d3d8609","0100000040af645b9686eadc277733105d567add2bc8b58bde55d0c52b5165db0000000022fcb9599961bcee920c732a659dd25cfac9ca016454a6cda2243a4f31e1ad0f196dab49ffff001d16739a6c","01000000cebfee97a832183a5ff5cc1bfa31642c99ae26cae5673f2ced283b73000000008bd6ed4d65212716f235e569c73fe4f788fefbfbd17f843d5474542e22a559655372ab49ffff001d1d761d10","010000006d4f7cc58e97b705f4b7618878e03b709f149fd2590565cb3d2e1b53000000009abb4f6feacfff02cceaece4dfd0f2d97939a9242574be2cc64c689389181b917f77ab49ffff001d19d081ff","01000000f7cf0c15d52a621f359c1f81dad0313854ee1b71db8928602cdaa1cf0000000039aa0b9e54ca4a5489a3cf1f7f5b9ca73ef79564f818c85c9d8c4463410c8230b07bab49ffff001db10d890f","010000000159e3352eff3a69f980451ba8b1cb7e5683e49d71bcfa63feaf0a8300000000894893cf9463fce590b7835ac026c91793d976b6dfe68ac29a5ff0ea1b6bb266167cab49ffff001d32f88a2f","010000008b6c3bb1786578241826302bc84fc439ac040ab1ef0d2106b4aa436e0000000045df376c892c7454d94201191588e2dbfffd4fed9963597644e095d51050108d1581ab49ffff001d00e395c0","0100000072a54d709f4a7ec4ae825f455022ddb8fde3b7ad4e731adb4691d52a00000000035308ad5e8715c80ac62bbaf5323cd2a0b41ab891ec7f0026aa473de3883d95fd83ab49ffff001d2d005730","0100000025df06d0aef465b5a5b9490853e552f7ee30a5153fcf4aea1c601b730000000057662af0bb60da2aa44f860ca02f7a29d97a6a197cf05fa4cdae0cde4b35a6932c86ab49ffff001d068b254d","01000000a27db6eaa1288b49064d035129d4bfe1459f87d976b0292cdfd40ff60000000069199bf941372f16db7fc07aad3356683c1265bad27f5e1a195a5a3ea1eb8fd2758aab49ffff001d3929e114","01000000bc58615ba4cfd8972d10192e01a4af14965c1580a81d98f32aca65c80000000048eaebd5fd70e8dc501709c40c669c6cb3e3537c641ea5db132f23057d16d56c298bab49ffff001d1b2b4575","010000007495184a35dd9d06aef8ce6ea21c28f1e35142e704420ee5e7260e4300000000c944d1aa7ca4e12cc4a8a2f483b0fe2e3aa93ae4e24898e6ac8d121fc0956ca3ec8eab49ffff001d211b432c","01000000d931c38f64d1e4870adcf27df188dc944ab96193c5e1948bd06a59090000000037a696a78b9a909e25823d1ab3f400efcdfeeb8a1dd7f41e773bf8569e9f916bec91ab49ffff001d84638904","01000000eebf32d639cdacb880ac9a15b5516573170c2dde54c2f18374a437f100000000f3f23547c77f44462aaea00827df7999c2719c8ffef840e9d0227835cf60888d5392ab49ffff001d037b8887","010000005674042e9da9f2185d04d556ad6bd5038cadce50154a8a2b8bf31b9f000000007ddafa6b5eb3037ba910f512d10de2415d28d3c166a3680f4fbba2c01232168da895ab49ffff001d03acbe18","01000000098977ab9a7f07ce65f53837fa28971dc520e4532198c504e8dc282000000000cd1b28942bdc18127793bdaefd9ddbf00342ea7244aa41741a8f2fa45afc6b10fd97ab49ffff001d25b34e20","010000002c7e18d292f102bf3c0ade844e2481348e1c387da64e1aa6068e6b85000000006d2e033b48e5228e3bba2441a09fb7a93194725e64e552e2f9e97a5163e932c0d19cab49ffff001d05176b4e","01000000a387ab392286ce40454439539088f5c33105672dee48f9e5ba7ca0db000000003331f03ed2dcd2079c4b000c8bda174930b981bce1f68c602a2da515cd71528ebd9eab49ffff001d283b02f4","01000000d0bd1a4d9f6f6fa7da6d2ae055187777042e9de4acde05f1fae48cfd000000004115caab8f0c3e816081d00d7b7995b45332255eebc33f85c15f06c50f78aedfb4a2ab49ffff001d14104b24","01000000fe646d1696f91676f0ed6e101b6082863a58b1bf8775b324eea8b55800000000015263ea87c86085c8b4955a5fd1105ac1829cf72ceb7c0b483f5a1182ce83497aa4ab49ffff001d23bbb323","010000001ea314855a98a483b0002af535c0ff6322d7af631f8ff266815108270000000018abb3a8d7947fa14ba7c2307f1616321246eea4ee0a7a8bdf6a4af9a172710a6ba8ab49ffff001d2e369c4b","010000008ba98366ef5307318aba692b5e932d701f0cf3c80f9555f3e2d6998100000000693c6c0596c43c022eb0a5fb7b5fc472ab4ae81b3bc89052d3702c2048d4a6a90cabab49ffff001d20d37fa2","010000002f5b2a96904eba87b5dc6f85e1620b38bf2bee05af6856e902facd74000000006ffe00de60b0c6024a39348bb87b1c8249ce28be1c0940579625dec765406a84b7afab49ffff001d179e4833","01000000e9c777148ebbccb382b7e70e4f0903b8c6165a096dd625e323db5be5000000000e42810ddaf9a4ceed24f9f6645ebc40fea4740252e6023feec071587ba3c6800db5ab49ffff001d1ca7d1e2","010000000d84a390f6c47f756549875576b1afdd4f515f3742eae2a40d932a1800000000bcf91f6e71b100f7cf97dca4237ee22870d7b6828ea787d4c0ec6200de752d01cfbaab49ffff001d13af9c54","0100000033ff7ea8e5d0cf751e278c031f9dc8c43ec20555c4be34a5f362f821000000006e15f757302819cff5535aca1ac00ed51599e414a53a10d8a864ff5883e6395daabcab49ffff001d8d4cad02","010000009d06fe7b783294f9828104883be97fd89be6a2b138a2a68170b5825f00000000ba5c4a444cc67c0c1a1c9be96657cd18c71dc6124310bab22f4cbf0681afeccb45bfab49ffff001d1958ef1e","01000000fc6d536d2dedbdd6404acd80665fb6c42b55df94170149ea8f2de8260000000024d86fb5da9f8b4e3150e37950803e97da1098974fd72160724266b6c88d368665c2ab49ffff001d28139a13","010000005dba698baebbaeef24755e65501e048df2821b48de9c3900e1fdfbec00000000e60b9564ea165dfbbe9caa364d4fb4ba3e10abc9963a5ef22e1b26ab7880553266c5ab49ffff001d043a7706","0100000090e15c1055e044dcca1d8d71752c2e39271c5c48b5a47e386b69121f000000004efdca68a9236c50b1fadf5d077894c70a74522119424d50bb6f61105198bd9562c8ab49ffff001d179809d5","010000002742fe48d1c3463e4726a6d1be3376ad5156aa0e9939d3fe04b8306d0000000066d5de20c901285869073b0098a75c0fda6b7876fdf3e043c438cd28cc1d92ff90caab49ffff001d05a7cfe8","010000008a2c9bf145b84d39c3e2ebb025c9252f5736a22b2c13b1a2e07000ae0000000030602cd00f58258de03519924f8d531630018c949e40c253806be48008fe5fa298cdab49ffff001d1f285599","01000000b626a8ac3b137005944c0ab850eddbc549ef5637eaddca3a2a4d0777000000007bd40d257a820a8cbe4c7a23fc8217f50c9d8b8c37c3125f137dfedf8373ff171ad2ab49ffff001d24e0d381","01000000d7eb72d9276c610a09ba192dfada90a82a6c3060da049a798c2ac57000000000677d74a215b820599a516ffc85bb7e7a09c319d2687ba5eafd7dd3936973709abdd3ab49ffff001d2fcc60d1","0100000066ae2c6b0a0612cdcd710da1f27ea94087d23357be4f6d2bdbd658e700000000e962f421b7920c0e19c28cfff029fcaf669dcc0536c09098a2f48cf6df19abe978d7ab49ffff001d2fb087a5","01000000434bc1ef150f47da78d363f858c0c72bd17fbf43464f22f19660da4e0000000002a0969a550ec79dbd502e3e5955591f350357c077baca98bfa2066d7740ebedcbd9ab49ffff001d36fa95a6","01000000ba605540fe70045de8f36d8ad2689649db9c5297a0419b367f84a79d000000001b4e55122b071efc39242b245c862c04e4802666b975337974d70b7f83fc5173bddcab49ffff001d01b968a7","0100000075ae7a7438430fbecb1022bd27bb5e2e623227352f7aa2a5e76b545300000000184ac0e25e8c3cf690191d822f3e45f22aa3712be80f9c00fb3467d8a6bc31373fddab49ffff001d2ab6d301","01000000d09bb5b4b00660a1a4c4861f768cdf689b65b18a71c6bd744a223d5500000000d69ab2dc7f582c063a7bb3419b97b6c8ffd3ac6596a229b9cebf5e1130da2229d3deab49ffff001d2d67d351","0100000042f3d6b4856d28cd6b8fbd43c7ace94d5465d4f470414e620d8cff38000000008eb812dfe1e53fb90d388cd4a952e701a780cbeb21887fd7450eba701fc324e227e1ab49ffff001d23426272","01000000bf97a1fc58a6a969b620f19f49b68eebdf829e376d9cb068c2fc5c6c000000004de3e1f08754986777160fddd99b52b7e48a9661c5645511e43712bbee0f98a534e7ab49ffff001d03027f17","01000000869809e94c438ebb7777f13cf278a2996399138bd8f87febd1ea6e38000000000cafa3d0ca37ecc464454b5b33d8e458b8a0c88b1f4b9c21b42b3a80fbde434812e9ab49ffff001d2e5249f2","010000008ef755f05e6481c78f923a96cd1b9b5735d82cd4ce130083d9e9413a000000004ed57a985b30f530d6f5170c5e8c95557132aa6c4ef87ad2dd091932dc870f32fcebab49ffff001d36a37f0c","0100000003a9c953569cc5c07a9fec1139de24e8dc35504c9c5a98c5ab6ad30f000000001e69b8ea9769a5957bcfb4d5595de923ea02676b1e0ea1fae203382ccf50f49012f1ab49ffff001d331700a2","010000001e66555f5afc89b956644e6c73aa6f5e6f947c31664df938e270d5270000000074a57b1e3170dc9292c6dcf3915fdc3c64b91fa1e79063a02b91b1650eda2fce55f6ab49ffff001d06c871eb","010000005050da5c593cb0fbbbf75a85184ad8c2007d1820c2b7dcb689845692000000008e96e133bd01441988d06c644cdd2a336f6d09501eea81dd632747c2be75cda9a4f9ab49ffff001d080c03be","01000000d519c5b27c415180f3be7f5d8c97f36c4e9d9b8e61b3bd483804171e0000000051b6aef3f962f8dff87d422366fd8f51a2f969ae74fb33df4ecd5058bb662378b3feab49ffff001d351b7a79","01000000882ab1b034917e37af8837b60559b607da48f9e5ebf5d406029fda7f0000000032c7a1742d30148388666e8cec7b8f9ed30638ef4e0ccad5edb182d7160644cf6f01ac49ffff001d04efb77d","010000000138042bcfa99cf439a214c1682fc6926e9525e7b6a3ac0cba5e7f700000000020a608f05ae3431e61c0d53bab34bea876854a2ab400ec9c336f9e3c04d96a891a07ac49ffff001d1a357111","0100000053873e3f93edfba74505e2ec4666266396085d6c1eed5092cac2dc6500000000ea0be7782928bf999069592751e203eda03a4e47764425258ed454cb498ab7e6f108ac49ffff001d37e6860e","0100000034e34a4172050b6ca26f3545a619d111dee4c901ff4eb12baa8d21d900000000b6e9ae6108913bc0734522674e86f150d9861db6f703f14d859d27041964cfeebc0aac49ffff001dce4ac208","010000002f9fcda4ebc01dc1f5f4c74e21bb42ee5923fc3432d00a9d20c73c1e000000008d208e1986d34ea8b0d07e4bac9947cba18204b841c3803baf1ea7443aa4a939630eac49ffff001d23ba63d4","010000005f4c9695887c7ad34bba2a07b3cb63307d7cbff1acc306a8d7ebc84c00000000e08d4cadbbb0dc3f25816d8ea70c44c801b47a1dca34092f37de5ca3f3a8916d7a0eac49ffff001da2994300","010000008d7fc376157a5dfb50606fc12be065c79dba00b4f4c11698eb8b8d10000000001049ce0742e9e36f7bf9c2e42d5887f6ecca50718f5ce08dcfdc9304ab2b7d5c9a10ac49ffff001d39a71ca5","01000000b711058f708a5a125317a0c3fa37434be5928fcf8a11ba5e6375df74000000000fd45211813e4b5c527c76ccc73f5da6e65fbb0571d7d4f30c0a0ba22e40478dee14ac49ffff001d3640170a","01000000246cc7a12cfb22b893704f6055f13cf5c5e25a620116c1d8e8e0bae90000000028ec32332c81bdfde11a587d13fef3841630931152745894b10f33192832f0488416ac49ffff001d395cb4ae","01000000e8587f951650676027a93af52a0c9ead7380a21180b452152a67ad6200000000b890df24fc921192f4eb2f427c1cabd014f269b27622ca485863b8bb98996625e61bac49ffff001d1400cf4c","01000000acf399c39840b5da1f7dce9bc5513e113a72d2a3ebc816d476475a080000000064f85a308edccbb262bb75ad9e91e729a8946faefae729acf6563c770418f0bc4f1eac49ffff001d144d2d38","010000008c10273eb1e0921b554f9f4566ec40a3a4b30c7d82abe53ebddfc6da0000000016e6f38daa422bafaddcd4ddd865bb3fd1c24d5d3df51a165a1a946837578153a822ac49ffff001d24ef67ac","010000004638e85cd4abb5e674c5659caf55ec90715a42539a301ac3b3ff285b0000000036633c8fafcf5e78081a87b7c88d4983587f70cb652f4ad5324f6f11da6890dce822ac49ffff001d9cd64d00","01000000ef39ebd3c4b94e2c93f3f90227e16b847bd3d3f35224a1f21498d41600000000d76f56ffebdaa4c53903a860833acf9f78ca1d0f8863ada5ed89b6647bff5a5b0e26ac49ffff001d0490e7f1","01000000347958efa213800af272631b9f6fb82dbe146966f9e351a18a09c10b000000002778f9b8581a531cbb6b31e69b928940553f94cd2f461447f1ac3c3f68d7a2be692bac49ffff001d2ae742b8","01000000cf5276da88f89e4ecdb6d5724f5387f238270c930dafaa0b06606e84000000008448a9491aca100adcc7627a23b246a6071e6c82ae99fcb1e408cf87f0c7338bba30ac49ffff001d1d579ea3","010000007404b0784c31eedde3a6445ef8c3d63a30119042459be8d213a00fe400000000bac6157aab8ff85c476822f44c120f1f02255e0260ceb474138b131b141255626b34ac49ffff001d118e210e","010000000795eea38e995ecce980f6a7ffa96d8f9896781ea404ebf756d5a44c0000000023123a6005a370a457ac1f93572c65052d371abce8567aa6cf78948b94d6a2a15a35ac49ffff001d2eec015a","010000001f5a9421763ec7b145430169639da39dec67d70f93ac40d9c2a0484700000000fe18915205a102f5cd42e911a2279802046db803eaff9dc79a36ade9dfc1fa4e5d38ac49ffff001d1a3e5c88","01000000c0f3ad6d3463344902ab283264393c0128cff38ad124ccaba627eba300000000d371e60dbc47883327d64850a7d52684c49d143036a97cf4d761ac7170003a65ea3eac49ffff001d15968ddb","0100000004ad475da6812e8766004bc6d6ec400cdcd58644472f2590a4a34542000000001bf9b24f01f311bf41074afb2784552290d19f15b4cdd64c3810cc8c1052a9943e41ac49ffff001d31fba244","01000000445e3323f87e91468e47faf83ca69a542bf40687fe4ae0ddb8beee4500000000216ffefa90f787fbe7ad8a78bf54d263d3a974c71b140c83689d1a9b0b221fd8c945ac49ffff001d2fb14cd6","010000000c131a717347f7fac4e5b053ae9b0c9797a99b176354ea17de3077e700000000b3bca406f59d961803f1dc98c29cacd5ea8f3df7e1bf5733d5a030c6fc7a43662047ac49ffff001d4e9fcd04","01000000c8ce02002171a22b5b752e48e6a47a5bb9196c515ca94dc2cf5f34d30000000034a8d699fcd3d3ba6a0e7b7d7c7d3128945ecb778b719e332ca79bd5d12432b05b48ac49ffff001d5ee16301","01000000ec7267effad6edfbe6c29f15278f2262daae3c528798f6a1701057a7000000008a1aeaecd67fc25ec799384f14b81bd20b8bcd00371a941703882776fa4f15844b4aac49ffff001d3a3b3885","01000000b28c9814b8fd5deb3327f8a80d44595bc4aa0bf23565b6aa556e7f2b000000009ccf25e10fa4bfbb55bb4c53e6fc137196401bcef2333cadd50e09021e2be6dd054fac49ffff001d170859ab","0100000013d33d18a8a792bf017e030d60f3adaa49587e68e96c6f389f73ca930000000068d4436aba2c69552194b148f2b783b742ae64570f65dd383a1494f8285e4ab71c51ac49ffff001d37842e8f","0100000046f6a17f88fbd48cba6df0a1f033da72fef9977b72e30e7fd2d62de0000000006847b7c8ce346f8532c2b355ff410a5988b6d9c58eef41b849a98e91cb808892a251ac49ffff001d4e985301","01000000d3fe496ff45f5e36bdc12f925a676c5d94957ddeffa4d60699ec77dd00000000ff5df9a4bedbe029db69177ccdbacf553d17da717c69ce0eed17dac11b273900a954ac49ffff001d22c71344","01000000907e4f8cf6846e4db5ec48e822a26577c3b616db7d7d862b0459bc89000000002563e518065286e10ab10142c0bd29f19b44dc2e37704a91d9381a718fdbbfea9656ac49ffff001d2916090e","0100000012c03b272de195d479f2dbef95f7bae01f50ae7e5ddb55982337565e000000009d1e3d6dc07d62f303e218272ffcbe49206fdf4436a0deb5263fecc6ca7d77f43a59ac49ffff001d0265de2e","010000004fed3f12d2be30cdddca2392549dc2d325c1602f98fec06207f29383000000004964a0f6eac17ca3d994fe004031521a5658f6eb14fc8e0f089e751ab842a63b385eac49ffff001d39336617","010000003c0ae7f8c388296c9a5ba4d259e7d6ae91f8ad353517006e6032a4e500000000190b2b4e8678385df10ece4015abb43d20cc4ec95ac89996a221e84eb5f16e97fa60ac49ffff001d02994abe","0100000046e85db797fcf876fc6cd404ed1a98554cdab7b9947f425a004cbcdb0000000014a6b35b588560a7e8ca7fa422431d737c4bb8c5dae23b23b7bc968c1135fa8d7b65ac49ffff001d38cc52ff","01000000c2f1f73546567364c0c7eda1105aa14073496efea955e01a83953fce000000002b33a1d74c509208df766f5d1b334aca7f729bcbf834e3fed74875c5cff3d582b76aac49ffff001d149aa68a","010000008c7e23e0ccce8ae368c4edc98ef726ec4ff26c0f70a3fd571beff92a0000000067b6b905f499649dedfe3d211230799dfb9dcd3a6fd988c4f27f991b42a9ee435b6dac49ffff001d0449d0d8","010000008e107d792403bf96ec8adb5f71fbac8d155b4cc89d611981f44f771000000000c50701ea27be2e48c4810f1d6f879ea79abbe362df14cf5a4acf7aad483eb9b12570ac49ffff001d2c9fba7a","01000000abf89e569867d1ebea0c24a3903ab19da5a51c65fdda796c17f942c200000000795299a35e9b174cd5d1b1f34644ecaabf100403cd62be0916f330a13cf42fb08a73ac49ffff001d39cd0a19","01000000ebfaa2cf7b852ef33580f8f005590cb2c2819b253704ed7a5d15fbae00000000d85f23552e79d59da8be690b26ef02517c0b810cd04f377a8be9b855f4200a053b76ac49ffff001d25e21619","01000000738f136a8d8ea62e8de4ddd77abd6c8073b22c589eee387e42461aee000000004670d7636b5e714158f9b28c688a29388d16063ef5a4f307102bce535b9dec648f7bac49ffff001d2e44fe75","0100000099321aadd7f518534595ad08473e35f31a330adc537934d22c29da9200000000b1d5d07259acbfc004df28d40ea996fb7b76e2b460d946983fca455ccca5de81f07fac49ffff001d24be588f","0100000083847b881148d527b36aedcca4f8641437eea503265d802d9eb19fd30000000091befd863d0fd796e1ddddaf41fa8b73c89e1907ed01f155880ebf9fdac7d0833686ac49ffff001d37769e90","01000000911cd80ec14bf036c076b711a093eb7a968d1f7586c2fdbd873214cb000000005bc4800806d1243a4165bb54ae020c92c4247d981e807eeffa92e9d5062318ec8a86ac49ffff001d38231f01","01000000eb257ea456ea3ebf018f052d12be7219680a363b7410fbfdcfd49746000000000213deb0d43002df052af1c9ee0640bef5ee3ab187963979f0a44ffbbc10cd0c4589ac49ffff001d17d02661","0100000017fe85ac44aa7bc471792a00f319a44397d7504a2f793996fb1c46c500000000b837a32fff3da09a1f643501e7a126dcb0e9474a888294df5691557461d903f7f98bac49ffff001d1f3c7a58","01000000eeb23f99278d2491d6dff86ceeecff9db5238648ee677fd104280126000000000195ee6d42dd13b76bb3afdb4d3c7700277f81244f3e23f38f148d3e9e5de396998fac49ffff001d215a4cd6","01000000a9c726cc86ede3f37f63db783b8fcc5f93038aac7ee904533b968341000000007081582c044e1ca89a561c41144ad755351a78e6a18b1709b4caf32380fa1579a792ac49ffff001de159fb0e","01000000e1868c061ca6b97fa69cfe55756846a3eca87d0403af96207a06b2510000000018bcf87501f2d0eb7183daea6b5f9561e33f0f98ff611933151f8ca7eb0ac06a0493ac49ffff001daca37d01","010000006f015afad8cbd6041292cb7af0cbb9a117914e62bec3416f4b259d7c00000000ad6fa70f8a9e68d44e9042c80a626aa238fa0aa7642d9ea8dffe334fcce3fea05693ac49ffff001d210a412a","01000000ef6410c907c5afb5c77605f134ed5393d9bb669d5dbcb42cebc273000000000010d4b6e7aa736a5da89462a1ba6f9ad489d3e1fde4f40d760e0997b36e9b07107696ac49ffff001d32570f61","0100000057e4f97a8767d9388d92a51f30902c2c75fc5222c77ad817cfe67e4e000000006d4c2bd5373c17647ea650774f7cfaf78c718f55ad5cae7d0b81fd6a5552d345d998ac49ffff001d39978613","01000000bdf98ff38c3980cf6d53086436fbb108c8221d3786e758c6416d6dc1000000008e93e55b38d8e19439777952ced9b873afd70ed0283bad7132775e374e8688c47e9aac49ffff001d1f18c559","01000000a8ccdae7ee6cb0b1583466eb2c2bb9ada3bf9df64b1ccf35bdead18a00000000ebf8916d80250b1149f3c51d60dd843053df99668f15f42dcaeca3a2f59e09b86ca0ac49ffff001d30160703","01000000d676968bcdd3a1e506496eb2a3ea43203b92c39aadecdb2b3e8df5550000000018e4b725ec496e9ec0dc102dc34d916d7897d8808579c0fb74fb532c16eea61062a6ac49ffff001d01bf8047","010000009693f13b6e67db7e9318673552e32b96738ef82a00e32f5f0ed803cd000000009f7c11bedca6e308bf443e170a6f4ba0e6b9baa84923ff1ef677b788e7482445dfa9ac49ffff001d22c20fb5","01000000b21549bce35b122e1db793d2e83e5f44480ea727ef0de5e7402e890a00000000d36c457e94991f393357234ba00df616281303a5b2cbff074f984a4e0923db2491abac49ffff001d25c668f4","010000004505184890e89bea25d3692193240a6f511b6b3bb1e293a39a19d7b9000000003084f75c7eb49d178b3a3e35531beeff52f023902f56d213fa0984193bf1d9b1f9b0ac49ffff001d25778228","01000000bc0e889b894c94ec041d0f19e066b01696705ead6e3371427278643f00000000d17ab6898024f4d0ad1450211dc799eb4a928c19d12c721cce6651cf975bde44d5b5ac49ffff001d2637089d","010000008c0748b68aa0797b6e3961b95e1c1a426f8af8abb99689db0de1b2a8000000009cf61aeaa58825c7a2224443d0691552eea28404beb71b77f0d2cc403b9de83719b9ac49ffff001d28885855","01000000a79ab1347d178d5c003d2d19225037d537118cd3a0e04d42035c9a4200000000a5fed8f5057c98987bc5143685a6b5318330adbaf144620fc23854379a6945f306bdac49ffff001d36ef3426","01000000d65cc4cb2c15f17a5014b597eb8bd03b8b6f69bba8e3ebe33f03dad20000000034ac01abb2b5051ab68d4b119421b6648664745c2ae67cf930cb563fe775050d6fc2ac49ffff001d34d1f20a","01000000b42254b4908505906e9b79bea5b7fc59072529b5a681acbb385497680000000030461e6ed3fdbac665db6106320c34d68c1eec49b2b64bd57013e9771bdf673e19c8ac49ffff001d18612883","01000000df2548227ba99849d480513828c70daf34543a5bc9542904104657ad000000008308815a819d96f58fdbed9c8dbad6483cf357fb6b0429c69aab652f36e9253e3acaac49ffff001dda729808","010000006751f185555c5cdd8c1cb0527f9d98f49832d35266472f4986e2cf7a00000000127a4acc9523b94a526db47b4df9154d82ef24a3f1ad245535493b7c00f8f25418cdac49ffff001d337e3104","010000004bbf2991f2e945268dfd769c3a1bea9684f261f25926e3f45a91ee5a00000000337e4ed4e7ed207b6598c0a2cf7741ff6e25e8c4c5351bb0a789ba5cd95bc5abb5d0ac49ffff001d1a65ce44","010000008c341177dd24df8ef0a16eca3153dac48aa8b705ec058cdea14d2883000000001bd7357434b0852523af8e9d143c85925a329350eef7034f5a5ef11d32c9b8c270d4ac49ffff001d04c01283","010000003afaf1bfed4fbde8048ddaf539e9c17ec324ec700f8c5bb5742d8a9c00000000fee097f44e4753641895f3b79c7684b9025ffd8cb52189741322ca3b24efe573e5d9ac49ffff001d2a28f4e8","010000009ffbe252c5e8c5968af18199861232f7bd628c437ada66f226471e0f00000000c738890670b6ab1f13f460381c673e297700c6dea8b9b561510248d06abc61af27dcac49ffff001d384c1198","0100000000b432b2b79bc765ab195b54533d09a5c750f573854ba68a0f0faa46000000001c75bc2308bd8dc8fd94e1593ae8e0ecb6852b06896652ae4e36701dbca0902834e0ac49ffff001d29d75473","0100000085aa3a75ce2977e823201093ed3931b4e975a2e6232f28042e53fa7d00000000d369f9dee781505669a1a18de915b5544945465add6ffc5f2a3039d29b850130d2e2ac49ffff001d23aa09ac","01000000ec8c4389cc51d07314e4f2fec504a346267c35af3452cd2a48827f20000000006562fb970994b1dce81f579d117aaa3f5b9c3818e440905de6716602fa99ebfaf9e6ac49ffff001d00773469","0100000032dcfaa32d1d4aa7e56d74374d52a4cb1c3f4153915647ee4dc54c3900000000268b5d95d822c3373cd277aa21954845a1be9ab3536a5399843b816ae5a869f250e9ac49ffff001d2e764015","01000000b15ebffba29576f848a103b4abebc2127a4597455c2ad69feda73aa100000000a3aac76256fc972bf17442c0465b3cde9984d0cd034543a30948f5c23024c856eeecac49ffff001d3613faee","01000000a1409bd3dd9504b06ab05048e32e53ce28808abe2474849d7500600700000000778348c084780a4f32900efb5d967cbc8b5950fd3b35f868b2b0d13a4e5a17dbf9eeac49ffff001d35eb99da","010000004496f07c9718e9f26547fd77d58eb99505460bdbf6af861d1c2557b10000000029c4fe972e82ed6618e28f5b6eeb46de11b192871946c354069f9a891d64e5d414f0ac49ffff001de2c16e04","01000000aba33941e9c2e346841b9ce4c4932fec375b16467e095065eef14b9500000000ed4964df64974d0144c832698a38eff17044d33d67837c5eac836a409ece7995baf3ac49ffff001d193dc3b3","010000000705b942837cf0f76c730ef1a0e7d9fce13eb562493f588b2107d5aa00000000e52b5f881612e6574fb2bf56415c1942960979329b7cc4b96efd30e8787121ab6ff5ac49ffff001d2e7279ab","010000008d3d1ac356c236551856f6331abbb4ef35a51fd69ad39f6c0dda4e000000000017a07dd599206ca8efa4c320b1160794451de9462346f26a51a767979775e74f06f7ac49ffff001d1bffd339","01000000aedaf47c7f147d98c815eb003cb5bc55192400c26b089a100a1e9def000000000ed2736a0c0fea6137b73aedee24760ca7e25586f46c9747a84979a842ca03174dfcac49ffff001d2da619c8","0100000064ea5b150a772fa646a0ca570dbb5479400f9c5c8dda27548da1a7d100000000d85ec10d190a4a305832fae98aa605463b7aa3c4fdc894f1bc1598aa509d8b965e01ad49ffff001d08fa4422","010000003fafd767276b98c777313eb2f98f06a306560a3b9b90a6375d3b5ab6000000005f000c1845332a571c0c28e5d14816eca2b65890b7a3fdb844fad890ac9d8bc80202ad49ffff001d260f9002","01000000b10049b3397f9f89e711b44c8c57bddad524015f816b100f132b0dc900000000328da3ae6ffc1498d99606c0c742638c7674374e291318d80ff8f945f4381353a406ad49ffff001d25e50b5a","0100000067bffc1d4fd19bb37216969a3e203ad6d0ffa7420d0d7b06d2a424030000000092e18bbd0c0554f9fbd27a7cd3151d7414e81b74f0fdd99569a6ac5ef9f5218a660cad49ffff001d34a4a004","01000000605935ec9f2df4ec54161fc7697a367fba035f3134eab0510fa49d8c00000000f9226b58ffe4ef2052168fc5d2d1a2f58e188f0dbcd846195208ad13b4c98d108810ad49ffff001d3297025a","01000000fe89ebf5e666b15d15e7e13a1bbc709504cf47c280575ac9a36bb38d000000008611df6e2c7375e2a06448c1ca99f48e231e022e8b0a76f06a59b8599d6d613cdd10ad49ffff001df2034001","0100000074f552684014a065a68d3e0fffd954b6c572be9e5a3c898831e1b4d100000000f42b618701e0aac9398bae8ed5eb662f7322ef9a19a1350b037effee0665cfaba215ad49ffff001d2087e864","01000000bef78f337d8f4ba66cf4ad0974e60d08d634d776d34a067d1e390801000000009f1527e10eec99b98df7cc4428cecb038729d51fefcfa4da01a2601c703192575e19ad49ffff001d1eed908b","01000000c632f89f1b6fe5ea7d15180add916568b67e8c4d2b9a83994c5120140000000026e4dc4a576c9395cc14c2c8f7283a765e708c1d8de5499d1f49ff024a1ddff4911cad49ffff001d2f271806","010000004f1a2820beb755e3774f6f8b79ca5bfe604c9adba8bb538a39e23280000000009da5f7fa1c310cedff0c5352662f0bb46b0734cba45797a824985220eec75e48f620ad49ffff001d2b51a7b8","01000000c2192b703bed1538f4c364007a645a431e1c1359f78730e1e3e63785000000007fddbfc7d089a7ff4aeb563e4e3fe2dc055264f853005f2618ce4ec82e2cc87a0423ad49ffff001d1a7d8efe","0100000033c077ecf534fafb7bccb6897022e570e08ff56d5f00a920b4c21be0000000007942696ebaff66dff3827aa66430188b04b7ec45dc442d3fec990a70be72deef9623ad49ffff001d2ce5b302","01000000bbd2bc7a201a136c6e89f21df2cb1c4f8d19e0c7280335683995b2dc000000001e37c9e6158672938354f4e8d3e5eac18a08f55de6baea69a2847e5e2201df4c0026ad49ffff001d01fcef94","01000000e3c62485bd6dd1a652dd8ec1dc0fbd51ea3b7d35ff64d00b661dbe5900000000cc58722fa5ef7c515e21cfa3a170410533e6e8cce5fd75ec8714866c3b1b339de126ad49ffff001d5f4aac03","010000008127a1522c1c00c2fa4e4694073c780d3668b218c1bc0dd429560a0c00000000a9d121f6a5a3c3b07607cb953345a21729cc8dc7f6a503e1b97634097995bbf8fa28ad49ffff001da0dab208","01000000718ff9c07d6e24cc159bc23b57be68c447a6df4d77e0ea3864afab0800000000f7ce97bb726f14f000ecb89c1646a2c1a6d725273394185f5fcf5925091fe44b052aad49ffff001dd03c2705","010000001d90c5eade26f62f06e354a13240c23d0357706755dab369ff4bb0ba00000000752ad83ce61e3511cbf1e21a1d0df264d6d7f30ad0857c65e0977025b7b9c699e02aad49ffff001d15573ecb","01000000cc1063a05801bd58e0a032237c2c1e7b26ac48b58830373db55202ef00000000515130216810945f2187eb0b4978623d86dfe9952e07013fe0d4371fc7ab49b1d330ad49ffff001d31dd1311","01000000e97332c637b7e3a8152a84a53bbec463451684cc7dd949a18d4cc2e400000000ab186aa431df92c5df493f24ccb1640345ae2d48e9a27d0216a065153f19d788c636ad49ffff001d37f4773e","0100000066f287ad553e10d5cf59d02018ac4ba9050664c5fc2cb3fa20acd75e00000000f5349435bef76a94bdba2ea73497e49140d16533f2c6c4ec0eb41f83aca9f6739c39ad49ffff001d31685059","0100000079086e4677f800bd1f8cdde557e798d4bb237e5da26f5de8a6a1941200000000f5cea84bdafaae170dbf8c8aa401b819e02bc97e9e7488951a87fb33efabac94053dad49ffff001d161282b6","01000000b6e6f7c7cf18418d3994515879293e12c9e8080e822c799dea176227000000006cc2bfc6cfdede0b4c20155a552a01169e3aa9287553006a98c1bef7c609259f6d41ad49ffff001d1ec81286","01000000cc60f177633ec7559f4b460b40510c5b6426f70e8c4cffdfebfc0d67000000008209a658f3758e693e73d711692829852f381e71e50ebae9d1cb1969be9959181b45ad49ffff001d2867946f","010000001b6d9cc8c18cbdcbf67676f8fb0b36055c7e72cf14180cf600876fce0000000066988f1a334142f10db2ad7d253987577adba610ee24827c197e2658cf598484ad48ad49ffff001d13d807f8","01000000aab26ddfc99fa3310bc71e618a04a30f265ef0725787e7e9efc0807600000000c351c4a2f3c391b0b7010d09f8a24a3e19ce81d904076c4a699bfb82bb93393c444cad49ffff001d164c89c3","01000000d16436d2ddea2d3bd0e2a75c5c229fe92f9341a7247aabbdb3bd7dcc0000000085f66f5c34964b7c27074c82503df4a24921092f6a63c1795eb10036002696d50b52ad49ffff001d38c95c01","010000006f6ee5e6fc0ae847082cc09c29c745205e3d23d93b29921bf8a9d581000000004067645758013c6e467682403c7ea4868bc9cd85ac800cf04ffe17e4424d76674c52ad49ffff001d88dcf100","01000000020d4ab1c19e0ec7bf673ac3a69cf4e3b9155cec0631e0ee19e9c87b000000005e20a1c95e64a1ae9d77dd453ed6f4c340a250c8585f2a9635e664629b1cab339b55ad49ffff001d26b96c47","01000000b02c0bb5decc69fb7ada70904aba9d834e61db11edfcbaddbc570f9e000000008758e3a70408a9d518c5e1c056a270a330ef217f36e14e5fac0e60fcdd7e9d746758ad49ffff001d5ea04004","010000004e012eb9055dfce955a99dcbfea4f0bfea0a02426ef1d2aa6bdc7c190000000086215965e5825f796802d91552ad83d843b1c505439ca805a792ed9a24ce291cb259ad49ffff001d040653a4","01000000a2b5c020d08544ddd31bb35efdc62aa62b72efbd3194b656289dc7e800000000df926e5fb3e29d3ad85bc2b952f9c8b3c63e1b4ea397a3e206b507d6bbf80a9ded5ead49ffff001d2076f210","01000000170ecd09169afe24fe0efc13995c7f0f88a842b8f0bed34612d48bb70000000063c83b8ca28dc4954670381e54f6b9332521cb50052aa7ed115b875c1ca81f1aab62ad49ffff001d054298e0","01000000e40d6f09cc055bb91510308aadc6b5bb5877a394ae6f92de4920d8a600000000d68e9456ccd14d87df8b4870d0459bba23589d5b615b5128d16221c774a48f061c67ad49ffff001d37faf8bc","0100000029cd2994dd3b6edb4e823dce9d8eea2b6bf89a4085de7d100124286b000000007392ac5b16d87f89506440ab3e320803a839b2e37a79f31e3fe954d1831561c8496aad49ffff001d394d887a","0100000058fcd2e9b0b383af4640fb883d3bf1c8b7342b61b7b77eae1f36b0520000000008069ce247526de37c6ed1d272d8c114b73571b220ced3b1743dc209e8c425b76f6ead49ffff001d21b95389","01000000e94ca47607e65da7935b003157ffe326f533de95213c3b50734d19fa00000000758325e1e9492ea4aced47e2409932bbe8b8f5a860697711aa601621947f7406df70ad49ffff001d5831f10b","010000003c284acf503c6a41f0a65e6695551ff2b670859f1928b0c5cccd1c390000000042689984162ec16f9e2d7499f8af5ee5fea3c5b560584d72dc36dcd2c59b6184df71ad49ffff001d222f15a9","01000000f9ac7764522901113dddc2a05bec91a7ac4dbbe7cec574a71fdbab7a00000000761e1aa49b7e0c7917752571181dab9ba74450d64c63ef5640b0cf134515184c4e73ad49ffff001d0bb39005","010000008c9f3e448082f71e3502a97c9bd16ba5db2cbc608db92c179424e1c6000000007912ea557339de807cbdb68738ae1e80d99badde6ce5c11d3438f2c9dd23026b1a75ad49ffff001d3a37b9a4","010000000cd24623ad0150ecbb82d8edf42c053f0f5a44f78939bbf9518095f500000000fe482bde5397a37e6f4e2d559428c759a877606ff627ee09b69955bda851718fc677ad49ffff001d13a4cdca","01000000247e44859e31cb3d9d6090d56829014bb059338139cb7e121a6d244e0000000046499a05bc9d29f85a6da2a5cc3f48bfc285f5d014288fe9345f5bd650fa13c2aa7dad49ffff001d33a5b212","01000000e643b6454015621801ec569405ee31c167ea4be72d4b04f0b6e63cfc00000000bafcbced203ab833ed664d20c559bc48a918e7f991940026dfd5792b58e120dd7c7fad49ffff001d214358e3","01000000dea2d92dd20ed429fe49622dc567ad0368c7011f54c03d5b56a2f7b60000000025f7af6e97b8cbb495720dc78a8878f85bd7e8298b0437ce22527c4cfcd66c5f7081ad49ffff001d1b76c023","0100000037f8d86abf9fad5b533105b64068625fac05028d3b83f22d1f8d48a00000000095fd001bc81a83dbbdd1d22fec4d5ebcc025a37fb7e32cde4de1ac7b9b17ac902486ad49ffff001d33c3f90d","010000007893385e779bc9c930ecb9aa1ff5f28da5895d480524255060862624000000004b8d5bc76e80d89ed54ce6c136a8d6f5a9be72124860846c6ffb9c798f1088207d88ad49ffff001d3649ba57","0100000061f2a7076eefa18c11e8815c502e543402ea0171585cf5868ef1e80500000000bc78328b5bcdb49282c746ed7521c6021e65413084672441972997ab41d83e0e7d8ead49ffff001d0045d927","01000000588c1e89742ca01ecf8cb519433d39cee44bc20e91224201b0dd58ce00000000ece4122dd669a8091ffdf97204fcc33442fd134719f4d9e2d6340300119ab4568893ad49ffff001d32ce2d25","0100000011672224f31f18843419e1f227b26c9771b14621baf7265b57e811ca000000001ab8a9b2e72ae803ce2c9f23402665d8faa1ac2ae8ee76f0dd57878dc50c20f0f794ad49ffff001d1affcee3","01000000b96120f36b8e9c3926dcfca06ab10f25dabe11504867a27439c0ffde000000009cdd200c33e79a4e6c8aa8a0fef7da73667468fbe502f8e6e16989e6052e3a94f199ad49ffff001d04e9c03e","01000000f7a2bd2539fad56844977c5234a9da8aed9dc3ac84f8981b7b69e453000000005f78bec83c6694f5e8d036f19cf8bb258b723073c8161f2237fdddd230f0f1e1c69bad49ffff001d2486ae27","01000000c15484d9fceb7eaf9b293fbcda5a272637981b4559b59ddd6ecad1a200000000937dc0264951e452d10676836e5f66f59dafff417174f132f1309e16b61bd8cedd9dad49ffff001d1b1ac3bf","01000000eec74dfadc132ab9f86a2540218f3410737d1b240d6ff29860aa3ed00000000068e4194faee3f63ef57f09b0e620f0271b7c9ae08dd0bc2734a37d58d3705aa699a1ad49ffff001d168704cf","0100000058614874962beed67ab97610e165b36cd0a9b2f9fcab95157d7beef7000000003f5b762b340edfcab016493c9a77e554a2d7eda332d6753886c8ab86f957fe3c82a5ad49ffff001d27592878","01000000ab2ab2f2243834df5bdcdacf42faaf9dabddc211210fabee0ea150db00000000c518c7874c55f90d9baaaa27b7b6120fc6f5005864e2a0fd8a9fffdf7ce296378fabad49ffff001d0560b24d","0100000056968b6a4cbe2a329d2217c9952a3e868ec64c587f1042f13043a83200000000c69a89c8aa57fdb3bac59085c937046533a8b3b4cc8fdbceefd5d23bef7751000bafad49ffff001d2c8ae2ec","0100000083fbd6ea814ff159c3520e7b6e106ce7762d9d479d0224fc0b002329000000000116d8224257c1ef178babccfb0917f5fee100537262e096e87b1c2a6d27c6e25db0ad49ffff001d06d76a06","01000000490048ec350a43e5fa1205e6c7cb4dc23ad677d9d372bb893779ff2900000000565051aa9474729cf73d5670102303fa8194841a4dfe422cec054c3ce3c57ce8aab4ad49ffff001d24b3cf91","01000000bfb3b09a265d0bc8da6c516e9c8e86345c03175553f72e8780c5864e000000006b37e64e7724dc9d7ffb72e0970cc2dde84b3a41ac502e0050b196e4a15b04efeab7ad49ffff001d05dcfe79","01000000beff592842ca1d92ce65a10b94ec6a41c4c0d7c66c3a0aa2375ba6ef00000000b472f6189b229d5673c1f17140e4ef641be7f1a4f1e02ac1a98616efd932814835baad49ffff001d2b0709b2","010000008fb266d166cf23fa99404a717aa08abc089af96069ea844f8848762d00000000194b1f6fbfa9541b007a49bd30a745418356ef71015884feb3b69a9e671688ae39bead49ffff001d20668367","0100000046f4052c2fada6b5e24d4e929ad652174989e0937e95ffe128d54900000000002b80bc12e772cdb91d99895fccb9cd9c77274988f4aa79e78198dbc856e67a2309c0ad49ffff001d0378e794","01000000d886907dc80f5df86707600bf68c1bb85e6eae8f0355703a19ca1c1d000000008accf0657d8301e399de09ede2ea121052929c9ec009600d989bf6c6ef7e9cb618c0ad49ffff001df1210500","01000000585578b679440cf2932c523406a5ca1ca01791e4e582ddfa7ea03a1c00000000af5f38e04e32b21156cff84cc1cec51967efd740a212b5240815ec7d171ff51b96c1ad49ffff001db2c73d02","01000000bb37e8f1faebc20387d501cc98ba9b0198c136899a8723ebd569ab66000000006da5d59345f469166f34ebfdbba58a2b87b345e822f5227af1a2c48cdaba14c5ecc4ad49ffff001d32a95625","01000000a2ba9ca1fc134bc579e5b9624ee29f1591e58b11af8a627d5b49994e00000000c1cb5da2275ebb801907a5864930f7e1be7a1c5eabd3161b65ad12cf1f62a122bfc8ad49ffff001d2edf2f55","01000000fd59274c3bee8aedb110fdf071a64eeb29c2ec8d828190d548d07c9a000000001c7e79c125d5e545050f13fc45620020ea11c3b640e66636084e773423719faf91ccad49ffff001d22965d3a","010000009b52de9cba89197965276089333d71bd84c7d557362ae09b9391b1d5000000002c5221cc7467c55ab7e3e851cb80081fa82f0f018fd3de9fd0e18211ccf5888f22d1ad49ffff001d13e0ae46","01000000714eb47b40fec1ac2032adb7140a0c9842190bceb616733864b9bc1100000000abb5010de4eb9c6843d9807bbe245d08ce3c8006f9b81bc14b258b412eb9209b59d3ad49ffff001d19434161","0100000028d86e6f70b8dc9fefeba5e950c72fc8e46189d9ef6ed9a79690a361000000003e411a6942e3ba624869e4f7772ec787f7d0654f6905ef3f7b01f4a240cfe5830ed9ad49ffff001d097263a6","01000000841287a35f1f8d24832f948580cd54deea7bd34c929365e8b05d4dcf000000003ce68edfe0aab42db8a38ceab8969672791b9d0f40f62ee4895fd57333dc3a9f35daad49ffff001d4b90b604","010000008dc2e088b667a9438ced76ac56b858ffc53e991c0bf26d61cad632b000000000b0023d41c0a8cb3e370e50622b58d241819cd390e8ea7fe20ab2cd5eb258566e0adbad49ffff001d21164e43","010000008c1a26ad381194c33fc1a1b1cd28d7df670c6ef228ce4673dc14b9b4000000003c4c670069d523eacd83596cdfc02a35bcf352158cad7a470c61e1a9f63bd4435ddfad49ffff001d32231335","01000000c2144aa9b7d799d0939607152a1b4308ceec701ae28049a91c0b776e000000007988eca59fc9bbe7c3c6e770142890f96f15e9a8844cd730f41c3924259d2a702fe4ad49ffff001d099c7a64","0100000026286bbe2a59a190fd5ca3b4094cbf640b82889ff6d4b294426a5455000000003589761a0d195d82ccee841b95f24de9de3b8cb7cf28d1594ee37c08a1e96758e1e5ad49ffff001d29815b61","010000006a2da734a31abdb20dc3fd0c54f062b92d25f6718332284c5440591a000000001c272c53b6ea58e816b4c1652ba05a706f6e8de2bcd2b21be908041de325f4e86feaad49ffff001d38e21e8d","010000008b7f89233a3486a98e0edb8f987906224413258a698f39b30428091d0000000078362865b22e32f1d1ec99a7a9646b603fc86c12064340660b9940052d3d94ef9aedad49ffff001d32fbc6ec","010000006562cb62fc130c34b82e6241034c6b553a8090c192fdcc27ec5c6bf600000000ed01228d6754a2ee38a624ad70b729bf6d29898c1d8ef485dbf423768c6457f29bf1ad49ffff001d35d6a51e","010000000fd4c84f6212433f2dbd2a2f47f7cc4ed50a13c82900c9d6bc6c8ca000000000d7c94fbcce5f14eb9e69e80369721f0b532bfa6b93c0e05e79e059b10632a449e4f5ad49ffff001d2c77721c","01000000c8c64dc2321adf4eef48630286dae35d350fb4a0616dc155ae3b4f48000000007c0b34a819abb49c3aa4279ec1f7fff7faa06e1810c38b3aeeafa8e298287766ecfbad49ffff001d278189b3","0100000070e627319a8de10747c5ba3ff79c3e451b052e8c82e30a8125d6522300000000ebd53afea1ec4cbdeee3d54c57c2fc0fa58fe96942a465230cc4c2515e03270b9bfead49ffff001d123ecd0a","0100000098d795bc36b15685e58ebf63fba13b688db650b07d053fefcbda7819000000003109bca21bee103ed0c29bf839932090dd407d40ab3260d6d2d4ffbf2fa4dbcb3501ae49ffff001d3683f1fc","01000000ca7ee2386129fd4dd731df9ccdc6b7906c02f5ce8f8ed53ad1a72d7f00000000072e2dae56c2dc487add212cc51dd0dfdc866e20adff3308766f38eeb083d43ff606ae49ffff001d3127f3e8","0100000043c9c7761a54863daf4a7ea4db18453e13a6e4920eacea69f578d33500000000a92f59feeb3a3dec937476fda9e0b1a0ae85fdd62ebfd7e018b628fd0dbb5e73dc0bae49ffff001d0182ee72","01000000e0f1ef55edd278097b13a0885e4b89f585991005c9268bfda409c94c000000007de88a0140928ce3635ddff2a03990ef52f923798ea96ce37a9cb030a2883ad3810dae49ffff001ded329206","01000000021d4c6156a4de907ab6f2fb1548f261df43fa4b2c06cda349717c46000000008f5b29b719d653f88c3389cc7685c578c474edea984befa2bf684bebc2cc3e52b911ae49ffff001d312f57d4","01000000f7805e2bb63c4490b984dd32bce9e12be53206697033cb4362027f03000000003945a12305dc83aadc67a7c621848da37ecb74e6ecacbc88daffdbfaab6575f17514ae49ffff001d64e57d0d","010000002e5802f97040e7951095bd8e7433ab05059feb0f9661ef91001e0d5e00000000201981206294ba3bbb1adf23caf3abdce47ce1d0e6c513ab9fc51369239161275e17ae49ffff001d03661be2","010000008aed79e0539ff83ffd814ac3cfd08a0823b93c0fc948a5a2f4a49ddd00000000aa472603cbb384b335dc019165381ea57731ff6077f64a00a8fae6c07df9aa960d1aae49ffff001d16c9d303","01000000b43c5eba7c4191c13eead8a9084326c00329b54f85d1116aab6280db000000005451f910c74929b55975b1e0da1334101dda4b0d1e857f451af8a31d10063a9ca81cae49ffff001d43478e0a","0100000034bb48a6b8405d8a4eca68bea979adfa1f8ea0426482645d338ee64400000000c4f973631ba5cef49675e0cb4af303011ec77427a3de59f1cfd631175d4efb87141dae49ffff001d35f28b9e","0100000095fb3a27bf0cbd29b078d1562013cef3ec196e097c90d5ae86291a2c000000000a76d4bd38e41f81dcb10b714de8dca5a237035b2a03309809e9f6bf24a36ef0cc21ae49ffff001dfee1b70e","01000000170bc19da5d0cb6bbbbaadba68610f66b1488cd686730729e5da782100000000faf94fe29ff92a55ceeada4d08fabc377ea78d179b2f8c1b9c17c91427b1d1315522ae49ffff001d0888a057","01000000a7fbcad95a081dc657464a5d26512e74fa52c8e6adff4532e53572920000000038226b909d4c44404dff9f0d5d16066477b4e9db86d3c573a3857837ce9dd631b025ae49ffff001d63f99a10","01000000191704371601e0ca5510536f9d4a2d8f7d2ea50ac8dd0dd02697e93c000000001976dd4e356332f08ed659ebb72ee02abaf791a58ac6e69a2aa12ff24ee7d77c1a26ae49ffff001de37fb001","01000000a88a55ca27affe7f05963e95203b33de35be91d084202a09e1eecc42000000004ebd8db7b00f1c2781d76569e5850cc4bdc919ca66633f6130cdf011a6648a439d26ae49ffff001d2bb4ae49","0100000036764588c930d4c83c4aca27426b281b69ca3adab3a92fbc5076ea7d00000000b5e2824584d46a209a36f4f50d8da8e8fed84502518a8e2e01d2c505c72f5d32332bae49ffff001d208bc658","0100000039f5b718508c76290fc2bb4c7d0194b52baa31b445e9ce969c151a6f00000000c7eef0e80cb43c8c18af7f387704b2efd27fbdabe54c6f49c21fb3163eae1b76372dae49ffff001d38d35829","01000000795d676569d8e687568bbb23f50edb381eb51094a4b4760d8410fc5c000000002c8239bed76c284518db8a6691897ecff4075ea5af0c1e4b4c31a4ed1b91b102b32dae49ffff001d5fc75100","0100000004e5046d8640af8ba1dc5737dda0b64c4a4ee8ac4a8c7b87eceed29000000000f376efaecef86c71bf84dd7d1f42d9b798604582d9387c0bd220ca16910502bb5830ae49ffff001d13c587f5","01000000271ea802875ec37e99f65e661f5754927e631abc6c4930e39213a61a000000002e3dd4ebbe7607b39c1c0a475b051debd6937c8bc09a8da23bbce781fb4d0557a033ae49ffff001d2091e8ee","010000009515aa5ed641c0f6e27c273500c27077aca96bff4a3c381db4d78138000000002d2863bbb8136526f49220d02914063e4e4bdb2718af65e18dd591cd5d9d2deae633ae49ffff001dd1439700","01000000748988acf42a90538cb9cd6b887a5db490057e0f7b3c01eded3cc5ec00000000519cb8e2e8a371b20684a8e10ac4f5015e0b4604176e4d8e408fc62bd7f1f5e3df35ae49ffff001d0764371a","01000000685cf59f3186d8862dafe64d9c23cdf4f6858ece21523ef144cbdd0600000000c87240b4df4bd4ed17023ebf94000c1420589c29f717ac93fc029a3397dc84d1453bae49ffff001d330fabe9","01000000688b2b9f7b8ebfdf526713d9947421bb66242bb2299643578715cad7000000005fcb28bd4b9116da566f0aaec360572c5386968d8b4ec5165c7d44f441b280a8a03fae49ffff001d40489311","01000000320bd6e6b7ce02a7682b32f473c14fb8d61e9e0593580a14044a41b000000000a0e785f16b71f85227bbb861d6c9c3d7cdafdeb36923128a1e3dd5a15e212b3da240ae49ffff001d2251c939","0100000037e054267da59ae17fb70199eb7f34ee8046b337e4cd716df2912c560000000098227a9dc35b6c2d0b38aa7b21e5bb5b62bf5230800112e0159da596b92fc56c7143ae49ffff001d22309c15","0100000053fee8db885fb3bc1e66891c4d834802bbaf94c204c18afffd10b5120000000061b029c805a68a4c23870593f487245c16876313afb27cf8afd3531704b2ad595a49ae49ffff001d1cc5e221","01000000fdf699136cb0372b89eef96a88bbd81011c813f8d668fe3347ad77040000000096bfcb20fdc983d0e68274a9e81dd57a1c36ea18569accd755640e70611d7bb8e24dae49ffff001d3605dc8a","01000000d73e66d87df6c33dee99b3c52f94dce561d0f434f7c98868e6d249190000000006d7e564effb2cf1253c4d47f5e06d162dc49a53b02a85d11583a079af395471fe50ae49ffff001d00018b3c","010000005cfc1125920d9a1194f035fee5bd401e528a1952e4abf2243fa26ca50000000049665e83faf1b227bc0dbc98ad4a659a1e84d57983a5e997c9fa0eaf73ae88ddca52ae49ffff001d038c5e90","01000000d873faebaf029d72393da101fc8d02fd1c4a7ed11b20887fe14e77de0000000038ed2e6ef4cd53004f0049faae682b557a0754c59db2a0f92b24f28eae2831b7c255ae49ffff001db012360c","01000000a8764e97e91f959909d53c311f5e9de2eb93e00b0b55a86b533b9eb100000000bd5a9f74f0ae5442c80089c0daf221a98b22050f00b0f636e4d9666fcf3a2dc91357ae49ffff001d30cf9803","01000000dd5b04c74cd3bdff63ee77bc6709a55bd2f502655c78f0f095903ea000000000a2826326645a5dec36bd5807ffdfe294b8c63863f71b6ee65b0959b4abc460a8da5bae49ffff001d0448f856","01000000eb44dbb0586c17c05b0843822b1b6d2199647f9b60d032be5c4ede190000000013a75830586ea6e101df0e678e7ad11c7e4a55b88c00d67ad4a26fe03008981a4f5fae49ffff001d14ea7de0","010000002ca78f2b8987a4aacd80e5e4bddb13e662f7523d400796d3aa87927400000000ca2c05216ac9cf056927afd2f227e591a090899b482070a8f27ed368d5a9cf7e7763ae49ffff001d01b57839","01000000c9ce2a2b0f387dbe3a3658247f49dc147ddd270e83c7b56f4d1c142c00000000d5611c99fb559aca8d340824fff8a53d23a886daabbf41459b2b5977d1fcd05d6c64ae49ffff001d7478bf03","01000000a48294de43e92a44a8ae25ac1e8b0170f6fa6951316d110d8d40682b000000001b0b54e3656108cfa990b1bd9af7c18a88d3887255fda9964ec42f64694ee0033e72ae49ffff001d2bd9e20b","0100000093e24660b173f28545eb5d6b0ef12ee0c431d20dd1b2f9ed608846e200000000012767bfe34cd293326ae794e7a04cfaeabad264e501d75d1500e003e0b353033275ae49ffff001da07ffb0c","01000000f30ea5ec27605d7cb3cdfab063529fa3ada2f84d697e7b5ffde0c74d00000000c4f2aaa8aad7229aec3da907760eb51b4e5e00934b477ff146106c344e603e838f77ae49ffff001d1a159371","01000000297d21dbe4a6611d80e56562911924edde8bb0d058fb50f1531489df00000000b53355136a2b1f436d2c312e465ba221d05e2d3c5844a4106aef7622ac5481f1f77aae49ffff001d1e460cea","01000000a9da432167dafd144eec8132591e1653678b9897313bd617228405d20000000048b614cf433585962cc62f2b4e9a4c672a0f6effd86000d7f9dc9f2687d0c629b67fae49ffff001d3a46ca54","01000000790925b3d5a82fa4867993d4376540b12de4485af3f1ab42302b298500000000336dd6c1dccdc62a1ffad377aeb0bc6483ebd87a1349e43ddf915c878f6e67e4ff80ae49ffff001d012bb322","01000000e7de9bb268e4a257baec1b2d8c78ad89c46a39e93ac28e0a34535fd700000000f0c53e21883f9e5c0256ea0a5b530b927602ead2684b11327f66f468c27bedb3f283ae49ffff001d2dec8f20","01000000567a6cbc9f7174abc524a6cf69ae12e7eb51b076f156d6366c164b000000000051b2e357e62c36e2f1badda492027d1cbaf552c97f6eef6ee536d5ad58610c627d88ae49ffff001d355513c6","010000001fe2ab56073fe90ad619ac99803244c04ddff78fabd12acc2c6e222f000000004415f57797d1782c654f1c933e3cf530e2489a26061e405cb43b517ca3f90a59d189ae49ffff001d3927ae06","010000003d98645829a6acbc5e8478c72175e23ab072ad40859243bc6b3bac93000000000589f1f38de739b3a4eeed7ad1351c54be3954493217190c2ecb487986fe98d50a8cae49ffff001d37deaede","0100000056781bfce0b1b38070fc0f7341f660ffb4a32565c5b5b5cd4efaad96000000002766380f0d74c984f2bbc9d7bfc4563101721b5af0dee53fc6547312cc2b4fc0e08dae49ffff001d18d80a2b","01000000ac88875fe86b02ea021035329fe006d6e7472730d8f82d0abfb3069e000000003cbd78bcddf83f8ede2e75fda347a67732b320b01c2376376d21557eaaa6f024898fae49ffff001d14ec8891","01000000c4a65290139717618603d18dbe9e25d0cecb9d8e99255eb7261862db000000009a53109559b655c039805a14508053f62500e7985a7b1869f7184acd6cdf8b5eda91ae49ffff001dfb1eb40c","01000000bb54d7bcaebbad47bcc048c945d6a155099a8cbef792615cc2240f1a00000000a4aaf10d2d1455d554f5d93e77257796acf58dce8fb2992b098ded7b21b321831795ae49ffff001d30300d91","01000000ed326f47d2cfdfa9969c0c10d5662970067b70e5ba9b45688611a35300000000063638b8edb7fbafb0d041f2acc0f3562789fb6c37db7a2d2119f04d77acbea14c97ae49ffff001d3464ffc3","01000000ab7e794a4fe317550e84da0bc8602f6b4b2d276653ea80b23fa240bb000000001f363cd9bf1b2f34a9bdc21f3ce5f809eefe1572cb1ae8fee9031c28f4180dd7eb9aae49ffff001d1633cf92","010000007f52992b5b2e0d7147e95d9812875ac77a9bd7e6e3c744e413cf014d0000000077e6952c417020409034543aa79c05243da5e932dc20ef494a74ab6dd9aae37d469cae49ffff001d7669f907","01000000d661c68b60446b6a6ce2f415f0c98228fe26c4255caf665b44c778f800000000dd010016a70de66a58393114ff0daa2a3b4a89da750c86b6f638cf09f04c7509759dae49ffff001d0214a946","01000000f923d011953d09596d841f1c6b0fe087ef088f537ca7c436036f53d100000000adc053ca3b900582748f01ab61d1ec43bfac409570510f06a86ccaecb68af4834da2ae49ffff001d220fb28e","01000000ffba15e6ddd117a44785a37906e183282324541803937e4448824cd700000000129c2d1b4ba2a6b5bc98d298d14d15fcf4afb334ee003f1795a1c29b7863d4380ca8ae49ffff001d3583f9a6","01000000a73f635b3c6ceeec80b08ea4c9ba905289eb35f1866d07d076e557340000000062187e1a67047be79388ff1663fd451643b67ceddb9ba193f67c8f0781b20467f7aaae49ffff001d18465fbe","0100000069422c46225b4ef8a46712479fc9dc83e96bf8b9a58fbf0237349dc100000000b5d7f7ce614f43b10f88383fcf613e7355e016cedb6092e98e44c01231c1cec0dbaaae49ffff001d33b99500","01000000c3e5c7210bd73911ed02cfaa03916405400aeb93f984392239836359000000002b3930cc1e4b0d49486450e242beb4accd478eb744d083a8ba3dd34b269b232ddeadae49ffff001d0481474d","010000001919ebfb794a6a277d2b7e961ab244e9f70c1ab6fae33795368ece38000000003bce8b1362e2d9f4c1aae3de1d6f8c63a463d81de1c904df65a977fa492ef23d86b3ae49ffff001d213377c9","01000000a216b273b8e9ae75ec94f4dbcddd72c59da04f4fda000842f61845050000000052fefb7697ba9076cc8257a432dc811fe83ba1c2e4d20b4ad355a749983481a098b8ae49ffff001d308a8c5e","0100000081ecc8b931b86d70a604b9b5d5fa83457a71a68579d539d1204a6d0d00000000e6efd14574d9c10a6d2329b2a68d4f38345afbb75a187ccfbd2310a56f1a8e0951bcae49ffff001d2c6c951a","01000000ead368c39b4821f8ae972247ec59e641599f83ce560891715dff8134000000009e7ad7e9205ddf923c95e96213098561b01480198313717662e7f9f804ca5842b8c1ae49ffff001d08fa6dc7","01000000f81dd259b712fd6a3af413bb5ec8256dd0b088498db03c2c901e03a600000000086a64631b82c6d5cf44a320d67f8101fd8e5ff7ae734cee1b235891fa9e8501ddc4ae49ffff001d151341c1","01000000ac33ba200ae098f2dcf6e7e2ea0595b31ff5342d9ea696ed08b68d3200000000467263a15e3bdbfc91aae578d10d0592f84ad5c93f4573ff23a1d613b23a0f27f9c6ae49ffff001d1a1a4884","01000000596d8aafaaa4c911885427ff455f956f12a3477d3c36e4c9fde2f055000000005cbaa69ca324daeb4fd5fc7671697c37e9b662de308de3a6a8f5c839400ba0433accae49ffff001d39d18086","01000000282450a11672e33a57d155f66c73362570922b01a853084a30d85bf100000000f6b9dfaa2c3ce1bd67cb4a0d0193adac3464b99b02e5041480cd15c3754a7f09ded1ae49ffff001d226d8566","010000004c03a91a054a73ff33f7640e07e046bebff1ee7da29ae5d8bbd1790700000000e31eab288ea0624ce047c4b1c911ddbed200edcbdcd0876c8230362228ca9e2a52d4ae49ffff001d1ee917b6","01000000bbb24c07110ce02d859f41270e6eaba3578847db10b502485f41f1a3000000001395d34325c1107973926bd41f9c919d6a414510fa07dabee39d71811b39c9034bd6ae49ffff001d2340754c","0100000054ab80996ab8788ce30181ce4611e4150e84e18745d5def61e36e7eb000000009d62460c4c88da9e811097b73429bb521a09752c4e466f2fb5eb9bd6e5e9e10bc0d7ae49ffff001d027915ef","01000000f7971f6fa74a75317d7233add989876efed93be609e590d1e2566c0000000000e89c4d435c0271e0de5b936bd3ec0ed1f2941e4e6a73fa38aebeb5673625010a85dbae49ffff001d204d75e5","0100000081fee1d42b75b4ea8d0d50d2936b42ada4a514218a13869d295a31e4000000003853c18ca936881fdba9656e33481052877a09f0cb1914d98671c6bb4a02824f02e0ae49ffff001d1685c33d","010000005aa794c7cc3ce0fee645519964ce9c3b2572a2d12834951675e7c36f00000000814221bc186c6b3dbd6a850462bb640f89a40816576e9591937cfd367ebd88049fe2ae49ffff001d47914b03","01000000995f02a0fd49b299adc71491cd3f3525dfdcb9033bc7b0d87bc9b302000000001f0d8e72e85de39c25da99eae6160ad2b2eaa5d833f8b29c9ea1cc4dcecefa285ee4ae49ffff001d18f78668","010000002bd267f255809a00df96f14e7b3a914af9989be000d38e45ed0c445e00000000b592496ce33b81c076fe424766ff485f27e7429f5b3f6c792615880313e91b6023e9ae49ffff001d31c66652","01000000dd6e9f309760538bae6f2bf9e177e8d3b45dd566aac26c442d8ff9e900000000560385bf9565b36a337dc94d2a5a2e0ccc8f1fcc41e0fb32ce608d4edd9ed020b4edae49ffff001d23c38ca7","010000004f126e2efc1ec903c46198c56d5e5c4cb4c56bdf943c96e166309f4200000000eea0955582278d0c2d11062098cc2c9c02adbd3588d392a9975fa1c4310af87c9cf1ae49ffff001d80188f14","01000000d2157eb9e3bcc834fd78e5898407f08fd5aec9aabd71763ce16cc15d000000008872cf2f895988f7b4938a268b6e7f0abe5de9bda5e925c18ad30f638355fe31bcf3ae49ffff001d316b8944","01000000add0d2db047b40a9d142b18e064c6c4785d5812fe3f81faaadb5f4c400000000c093f7248835075897a0c29e57ddb1a9ed8710b96173db8ede844253e3d24e488df7ae49ffff001d368fdcb7","01000000a6c1b5032af5d45112e8ec2c0e612e7b7ecde7e11bcce85dac9a6db3000000003d3efcf748aba390f480041bb8443679b832fb28ed80c3dc10a89bccee8252de94f9ae49ffff001d12a0a807","010000005d99c860959d69d544f444b657cf9fa30b8d509fcee05ee919f65e0700000000b6e85dcb9baa31d0c0ae2394d719a387bd744c2b1eacc3380bfa7679cadc797313fbae49ffff001d06c90fe1","01000000618580001e875a2525ab6f00c7e832927916b522637391f88db5c7a900000000e828c1aed04ffad23c26acade1a1030e3c961c5dad8b91f828d1fe3c99c3e5a96500af49ffff001d376b4f69","010000000f0a7a14256a35ed4dbe90126be8d5ff87a8cd3cf073c7e77dd9d2ef00000000cd0a1a0bd9c0b2c3febb5e6f68a829787ece1592f6d2e9022daae43206625f02f703af49ffff001d07f4bb16","010000000af73a8ba8d0786ccbb7c5b7aea76d082c301020981f28c6039098f500000000d39b9909d85a511332c8fbc3c362691f0da9450236930fef8f1f966dbe7c25f71f0aaf49ffff001d30553121","0100000092b84c498d8eb237fb1214b2daa6b7d6a51e739d01a8d831143113dc00000000e64f8339c3f656e029161c878d9d8cdd40ff3db094a708369b5eb01c97564a12d20eaf49ffff001d1904e9e2","010000003eb03f95a05cba1f89f54e247a6d3af7d9bd9a7a3d9e5a3f5b15531c0000000057050b5a17bc55d67960f0909fee1014b2953635bd479722c3f56bb3b5725c41b311af49ffff001d2355b860","01000000f67ad29a6b8c35665dc167d2f5b08cf6e8f58a1e106b085eda07611e00000000680a6f99cd56b79ef302e1889cc18bca3da8f7a95b3f1bae31897fd0b497bb024715af49ffff001d24455d2d","01000000254baf5e882214b4b858ab175ba60ad2d531f37860e26a0f9b159f9900000000c2b2e4a480a7947a600dce446800b31c0b0bee53e5c4659a131738c08d5cb5fe491aaf49ffff001d1e1dcf28","0100000045cc9965cea005fbbb54f268d13638aa156bc5e6b9564ae8e620649a00000000004a812360d7ffbd01c3e2781a85a8d58205fa89aaf8a7ee9d80aa1eb2f0da011b20af49ffff001d36498741","0100000011eb88fdfdf50131a462cde1610ae2f2c93f1390cbb497df1bf0010d000000002965766ed2322755a359a9bcddbad784d36015354b178f04aba51475ce7c4195ae25af49ffff001d13eefcf7","010000000fd6cd7e6d75288dd492c2da78970a4203b775378171dcc29ec29e700000000094ee91d24020f2fa440f163a9ce15649410b761fefed839db173d301f3a642b82a2aaf49ffff001d2aeb4824","01000000bccbb08b19677b8b5797d3f7732545f17325cdc76672fe4eb8ef6b7c0000000021c4d4007e9e3522bb37cbaca611033c7deb07795d053accb0a1a81be7ee2d7a082faf49ffff001d38414126","01000000ce26f22774bbe6f32cea7212732940e4e13b7b0519663b356fac686400000000038c8ca5c6d75b14e041928535bb1164ecf859914f7a3025dc31ab07aef81f0aec32af49ffff001d281f4072","01000000bd832893847a42aa4e27f4dd5adb76ba034da1b8d4fbeceb79d3bda800000000611244585197449a415fbfcd1d0eb29cfc8fefa8a51a7e298191311ad8e52fc4e936af49ffff001d08ad9779","01000000f4ee39a06357abfea40f0ed97ee00bda7679fbd45fa1432fee3af66a000000005f1d9f562c30377e722fce0cb5e5465d4148f7b3eedac1259bf3c08c5340484d7239af49ffff001d20f7c9f7","010000007f1beda0950ad95662ac29f143b86c014dee4f38392cddfec8ad6357000000003de272f4f91caf00a8a6928bbf7c3d81f808e4704647619118d5d709e77ba0ba0d3eaf49ffff001d29bdef00","010000009c2e3e330da93f197ee2bd59e2f09caf64689a332e2fe39b139f601900000000c6187cc21968d139b388ed02cc288c87a3e6a53486332aeccef2c4d2d1900b33a443af49ffff001d2c5a0c92","0100000038d06298b57969747204a50ca695c6aaf0dcf44ecd37d9988c146bb0000000003a25f5514a9c7f1b5d033e59412619b9e484c6a4273ebf7da20c990cd8e06d441a47af49ffff001d21f444b7","01000000c66c036c98946992cd1a7686bbb61863c150136b633e828a1720b24400000000fa62aaf7c7400fabbf5fa5375e370ed47e6fca08f70c79deec884f7dd199fcd78e49af49ffff001d1397ffb6","01000000d8b962812fbad52d448395a83b77ae2be65792aa08774c4646a52177000000008a56441386b688f2d89e1aaf33452dea403a17cc30378f0e1d3f5842344f1ddc1f4faf49ffff001d250dccdf","01000000c416e36049e0db2ec8bee84a6c20cd368fa9f0a0671e9be45d7f8c570000000034166d68ea02c4064238d7abc30b244e424e180b9e730dcd1a848de14282e5b0b350af49ffff001d20752cd7","0100000010ff6dcf3b3998ee7fc04963a5ffcdc954372bbaa7d989111a4776240000000057961deb395c122453473d698361c80a0a40eb79348cd0bcb9bee327fa3b2b150851af49ffff001d38e92301","01000000df4d01327ebb4126ac3925a9f45ae28b2ce0764650009c88ae76acbd00000000e415b19dcc42f5ebb48220518147f0a8b40851643c724caf200e51635ebdf329fb55af49ffff001d2707d30a","0100000028fb7fb1bc8d4aeb0db8dec85ec9bc1d7b2d2701dcac5facbd94fa1f00000000d20f913e59297066fd81a035274b0c9846f196bfbf4d930fc9a787a273dcca7a2e56af49ffff001d99315900","01000000d378233c8f45d762297702a50de005a9074e732fa9928234e922f9c600000000e2a5e01b6c729285afde49e650fdf506128d95bb0537e9e2673d821df20ee1087459af49ffff001d37e915a2","01000000c74b07555b2193a5bc7ef1b2f92e320cefa7cd73465789e0b16fabc4000000000b3f98a28c686b88251af3ce37c132208893881e24d1fda6e265242266f60990145caf49ffff001d040f23fa","010000004e3f441485d8fb22d076992bcf458565a468424cf0a6e6b16a08274f000000001a1118751b559091ff85e82d13b6c9f0f7b697b9a67e637b07885372180a13943462af49ffff001d16f45188","010000003e787ce0a654c4aa1a0c6e22536df3d50e75c332fddb9288b65ace2e000000002881339a7978ad3d38ba3f4dc60729885523ad4894986370cec72a7307e1a405d263af49ffff001d658e0001","01000000f33ade622025c70ff3fb761435dc36af8797806d579d1ef0558fa5ae00000000cfdd13e52137d7e9f4ced2aab16caa9636a8aaa0e4d8b5299978971e131b4d7e7e65af49ffff001d02a14684","01000000c3aff31bbe8562bb6c7b40019be3f413172faed29b5d52e488da068d00000000b938ac50f3b75058a7982b4e5ebd3a6cf301e23c9c1db2a0acabf2b6a7c358cd3168af49ffff001dc6a25a00","01000000bc0f0903018342423f5b9c472eea2855854000b58582b5021925039100000000a08157980fe7130c49b0f3ce97ab88c0842dcd2d776f900d37b29179153f17c87967af49ffff001d21d73281","01000000de3a195f13a45f5fe61a613ad512a26c6076c0390186de44557a3320000000003241035d6a0f404e947d4c7cbd4640669e539d386678f967f6244fea192eae6a756aaf49ffff001d20767ed5","0100000048e2333b9be042f39e9ab2f0e7cef0fc11aa8467fac631cde2bea40200000000de252a2d2fba113742d2831b5ee508cd535f33247b392d831230bbc21d0d27ee676faf49ffff001d090af0a0","0100000000765277f72991d110db99e069f535d4a16989c9eac9666c840e608c000000007545de65f0e6f050330dedab29fbabe2dfe25e796cfa17b3b3f631cee56bedaa4f74af49ffff001d2b1755ea","010000003ce18fc8bcca74a9532ed13b0dc3ebf6e730a3a1235261d820cc264900000000432556234b92cc59eb42b34a7c9539eafb466cce80344b5894dfb85aedb4bc1d7576af49ffff001d237fb4dd","0100000081e8a48e20414efb75aaf696521a872b70d691a9cc974f3a072a4827000000007ec56b135f2883e63c1589d04b5200b112d57671254b2d706fbd21ed698a7426b07aaf49ffff001d3a6f85d3","010000005894f14e43b58c588cf3d614ac5e16103f0f60b3cb970ccd197b9768000000008e872bf9c718eff370150c5c59a960e1eb4939d6f91b1b8003b475adbb90254c057faf49ffff001d38630d81","01000000714b8e87a8d23de154d39b3bc468a32aa6b4cd2c81e16d461f4d5e5d000000003ed275a5491626b1edf971daefaafe94667aea3479e5282549dece483b8294698484af49ffff001d22a81357","01000000bcbc002815e6aceec82544aba273e206a754637a643df8150161142a000000000fba51476bc7c421149c4d9f0642820437cf4e0509fb97cfc50ab896d83e98780988af49ffff001d2d0f76d9","01000000c43399217d7f2a2a2378010383a7cd4144743b14d7efaffb112761d6000000000e1d80f314da52304da8fb9dcb229bf589742c4859a2d8528d3a038b6e0ffd779e8baf49ffff001d22df82aa","010000006ddb29ef0abafe5a5808c808eb2e943ec7fef9917f2a71ec9b9bb65f0000000008308bef98b1514d73c1768cf306e6845663d828d6f7a562d9d39ed76a250d606e8eaf49ffff001d38a2fe77","01000000798523c547a35251bdf9b821e49f6c621431a8e115d1d5af1c1d91600000000003470184b0c97272a242201e99e3df5b11aedcac37beeac9c7f2d32fc17367af0190af49ffff001d268458c8","010000008fbeab386d751efa62720b690f2caf91bb12f044766158f7cf0c2087000000005df7cc30a70e01e04dd9d4d44dabe44a854965e72215e46485a515d8d34d48ccdc91af49ffff001d2c9d24b7","01000000713445ca83b584e8415c44770e1c1523d1e879d8f18a1a38f2c895ae0000000084611ff7d926f1c7d197f263ef4badfaec7a09db31c63c7bbb8021f7fda344901b94af49ffff001d03a6133f","010000007f50b65c94edace59601ae77246d3a45870af4a0d56f9356dcc98e77000000000572aa62718d94348e1554c94494f589e70ed394dfaa412d162ebee3ac50ddb87e97af49ffff001d2fdf08c6","0100000063faf376371d5d201ecd5eef40367cafaf60d87e447b13d5ffc490cb0000000016749dbd84ca67fe9a661a6c5df41a527a367769c5bea769c6ecbc1dfea7a5e45799af49ffff001d39edb5a9","010000009e7124f53cca9374c8943bbcf4fc3b7e145431c330e8d81acf12781e00000000fd3814e43d5c80c1eb3fd56dd932ac637b9143dad269d71108c054fa6b985e50b59aaf49ffff001dd169e602","0100000095e1cb3dd691b2381b2cbabf7ea75c047e4b850be40919fc463893bf0000000094be3fdb58628ccf85b7c2e3402a77120bbe8d4dbe70f97da21fb5f108189506cf9baf49ffff001d31dbaca7","010000006d847b5102211359ef7870238e0ece41a13db73c9a09762c1167156b00000000883764c9c3d2167d009050c27543cb5841cff86241b250e0b0e65a5aa7c8065f9d9daf49ffff001d2b61b102","010000004bb8a2bc5366ca0ad2f549611eb3ad147795d18637249274b32cbabd00000000ecf77a9ec3acd27575943d67f3eb052bf832d36a3a1ae42fecb623912e7969cd369faf49ffff001d30850c07","0100000008cfef9675169cba05383b7157eeecbd033a5da15bae67be023217f0000000009c7e7defe4682ebd703c4146637236a0ba40e1205114e60a4b3439cb667af533b7a5af49ffff001d364a29ef","01000000302827e72065a5159eed6d979bdca27acb19538eeb37bff248b7720900000000717de47131f395a2326eda7c619a48e28e507ebebdc162eba380c0d26cfbaddf76a8af49ffff001dc3bd5c0b","01000000e88e44b5f9d6776c7a76ac6d9d70cfc113e9f97c8d48bd67079a14fb000000002bef7dd4a55baf8131e9128c3df3baad93dbbeb700d2976d005efc078fea5cabfba8af49ffff001d1e28c9c7","0100000060b7a1d99992cf4dd7e1d0f83ec1a21e5963cd2773a49d2f05c2310600000000f83a0fa2ac75d8a2f000da7abf85a2f0aa354d4e02c067939cc52c3dd4cddd5fb5abaf49ffff001d278b10fd","010000004dcc220314908624eb53b196bb1ee8e4d466c673d8310a62c6e4779e00000000179c1306e4606513a63034ddd12a42f6b45aae5f1c93403d36ac9558b5e8ab48abaeaf49ffff001d7d584f0e","01000000c95c05da648b02c1b299d95e01dd2b1ec9308b5f34e691f09994aef300000000d509d061a8b66970d0b93a35be6041331348d7b92bf0f8b1d8b91f059c5a0065dab1af49ffff001d39a3c2c4","01000000729ef44a058130ef41fd6a45ff82e44d46fba5549f85689a6adf523e000000005332d3322b605f274e86a30fb494f4f406efe9faf796260d5fe6fcbd89f9678fe8b6af49ffff001d020767be","0100000045ea41c4f3143519a256b278588afc69f5b92b8241206cf2028ac68f000000003be1034894d479383cd3c68f11f0dea46ed329313f97ed86e119fe38d69abb1810b9af49ffff001d3a5ea2b7","010000000647664f3e81e67246615d00388d543dd1bc02f9875fbc36cc7f50cb00000000d903c70a675ad86e29013d9c285f74802fd47efffa06f5ad4214cf302cf104cb20bcaf49ffff001d2510a482","01000000054e9e30780eee4855d24db08f52fa477b73b2c7120fdcdf10d999d000000000b5f44ff5e3039418e9b4ad195afc00b65cb6e944eb15bc86f31420c8aee12329d3bdaf49ffff001d1a1127b9","01000000f4806c262cd66be04761d5d67f14a0d6d3ee3f04dd0c04f85125566d000000008c1627234a453ceba92dabcd7840401cd04aad07739d8816379c42e8f3d240cabec0af49ffff001d380d789e","0100000082f050cd286302e49a1587765461f7cd14375a5858467556eae3a3b800000000035e9b633e9a7a66a1efc8a2e8f46537220dfd688aec4b399aef90727381de9449c4af49ffff001d21ccb715","01000000cf175529cc08912f97904e81ed55d03aa7642fa3de1b8289c0204458000000005b8e5b212589bf6da90d7dab5ba8b27c30e54ce1793e1572ee5103df161aa41e68c7af49ffff001d1740190d","01000000c02271e66d9cf4770291c7b113f2ed9724ff333b333b80443a5b7d5e00000000b8601342d54a862ac1d116b32a38f98c68369cf3493d61132f910336df70329e0fc8af49ffff001d375be9ee","01000000fcaa965bb8cd9b2160dbc22d0231e0fc7b68699f2900bff73eb6678900000000f218a4e4aa38752d75735c11fbf0abe3878a960802c5eac35c3870bbc7c33e82c0cdaf49ffff001d243126d6","01000000859ff974106291ef7e3d8fca14884e0ba17bfd048a80ed86570d5923000000006d7a9c4cdbba3b41c39452e5905d4c471dac740efbd671caa76bf714f1a1342711d0af49ffff001d2bce2bc3","01000000c4dc5a8553007624c28eb82b83f97fc23cb52f43935091594d01564e000000005e82a1a71d071b6882f4c50c01ea69b1b235ec1d53e7a90135a1c02c6a522fdb46d0af49ffff001d56969700","01000000c79607861eaf20af5cb86c61e8ec07307d71c3e79d10e32c4d1cfeae00000000064805a7985037c50b626a5d8b9cbd17a3fba7d3828c8a1a271f9039bd916d934dd2af49ffff001d157aec10","0100000046827015cfd726a06e29113a68bd733d799d6f75a431948cfb74d11100000000a2118c7235394fd72c481a926a9cc7407636e42a683a7fb45df282c0c316f0b48fd6af49ffff001d23bd4587","0100000074925ab83d7c80cfbdae1321687830f4118c3074d6fb3d8175d8fe980000000081872e7282a2c8b29ec78f9703d1d2f044173c5fe6e90337588ef12b746b83e87adcaf49ffff001d3a77bbcb","01000000ed6fc96b70c6153d68a1707a415a7098c601fc68621b406570a4ed0f00000000e8b702bb3a56b07834c66170f24d8458c3ac440fc4171fcfdf0fcfd64b47f8681ee0af49ffff001d2a6b31d5","01000000befff8cfb646c0f20fb9bcdaf16ea20116031093d7367ac2c34cfd0700000000fe59cc831d9362ab6997c4407ad7202b1e9e6ab814817d744a191ee037d834c2e7e2af49ffff001d349ce749","01000000ebb15522dc1133b9afdc3ed84714a5ac8b574de80d567af643eec29e000000003780a4132559d36e96118d49026f51426f13aa8ccdd4bcce07a4855a7db4f6ee25e8af49ffff001d35fa6d76","01000000d6edb518d1a73958f92bbdb460009b2374c8957665f91ee9b88bee7700000000ff3dc2a997b28e1628639559474db57a890c89c676e3b5d20085aa9dda4a1332caebaf49ffff001d145d5fc1","01000000441bfac54f89a3a3b5f7f4e27a073bc6383e38681ea74253c65c788f00000000ccfde2362ed6bcfecc6131dc8a7dc10743d98cda1747599b21f78337aae5c51412f0af49ffff001d15192993","010000009e4b76b6f17488b2291990f5e16ad033ad0ccf5f89f6ad1fc3c68e74000000007aa790d49239f2c2456443b1f3ef5121351e02400473064b4f37cfc1fc2ef3e06ff3af49ffff001d2cc9f273","010000002bd391589c1bcfbc46461b8effe87dd9b317930a97af8528f2e1a4a8000000000eaefb10964db6b54940daeada0295c6152e60009f6e3cd7fae6dc36bd2d49df5af4af49ffff001dd813a103","01000000eb531105f2a7d6411b4b18d3e37e5d123b3483bdba9ed4f6a019a11b00000000f7cf8472e9c2fac2b5d2125bebbc40e2cdc2b03106808e0168e1a3cd89726095b9f6af49ffff001d18d0a0fc","01000000d616ee339ad7873baf59972757a0eda4e4498d6d7b202f49bb9d207300000000f5646abc4e01d6f94be955b561e4b976e41a9aa107f927704da1320d806963a8aaf7af49ffff001d9c90ba03","010000000e812a967a7e9768f9aeeab2fb869d30290a5a33fd4af1ceae21058a000000005b8e6c8ea73840c8483bcc598393db277ee17c107d74f88368e226e28ca92463aef8af49ffff001d14465a47","0100000078155b7f9c05a815dab71606891d106b74d21574ca1c22712dabc2310000000002e3cf8670d85c5bd9ccc5469ce300cab0ffcd395cab0b81a90a0b288095345abcfbaf49ffff001d341e9d06","0100000022e0298017e09118c1b637f12c192088297590f76810d11f75a8df6700000000c1d4e2225b6da0f8e05b7346a62d53b9d975f6db83dc85586b7300f554aab1d8f1fdaf49ffff001d04164c07","01000000cb54cce3cb560c7b1fd4fb7373e9546eae4d55d54343af6c538accbc00000000fc0eb3b6d58a81737cca8446756b9535660112cd1722d395982b04d317dab4c741ffaf49ffff001dad3e6805","01000000dd1d91c3fe3bd644cd6d8504aa27b1cebc97553effc229acc6cdf131000000004d45d843899376cb803f30883c733aa8548befc416d2345b4a2cca29bb849bba8402b049ffff001d17955716","010000002bfc0d376e060cb0802bb777d1239dbdd044ffee0276abdf8add24d600000000c1791eee9614f1108702ed2f577aa713782518cdc82992f407d1786202f9bf075505b049ffff001d198f6b87","0100000050269d4f49390e44cd7bfcececa2b4f6578a00262aa5726992601c590000000050980ff9e35e82ddfebe60f433ff33b8f714a819b3ff3413168029ad7db0b594500bb049ffff001d2aa78223","01000000a0d4ea3416518af0b238fef847274fc768cd39d0dc44a0ea5ec0c2dd000000007edfbf7974109f1fd628f17dfefd4915f217e0ec06e0c74e45049d36850abca4bc0eb049ffff001d27d0031e","01000000c7f093333e515f6105a40bddb5c5352b8c63bbf75d49fc3f1de0154d0000000099c15d11b2a732ef2a82cfda6c9463943f2f39c7c670f80657369babc86f0d0cc012b049ffff001d1a95c501","01000000a26a36ee8fb8028da013e3f85cdeb89303c5da9b882a39b0804edea300000000539c222738ff77beff7441fd2ace056466a5726daa867e1160415253bc0989113011b049ffff001d1709492b","01000000a30a52ae53a104a3a5862219f01c034c761b8b6f5458fc7ca7129b4100000000c1008c4542703fe12f596e98150b83898f2857869a6d4dbd58ee4b6b9d1d4c693d13b049ffff001d58dcff07","010000006eae16cb3510b35e14d3554b41f7b755eccdec570cf50aa52f9d89d100000000c59690bf4cee8cdf4ed2d1e8c0a8bb7f50960002e4b7f207b86edac76faa3abb1c17b049ffff001d37c3cd2a","0100000087ed0dd8f58866ed3ade804be0ae930cf16afb378d8f12b3fdf19c2000000000e265056a0ab22ab34037aec61f2b5897050d071233f4e29e0f343111ad2e5c16e71ab049ffff001d36fb3bf8","01000000fc9c60d3f54e0ddfa250d05a1a0fb5615db93c813d5d158c9d927b5a00000000fc3f900f206710d5c778ce0a17bba11aafbe21938a230987fb75f74c70ef43be7c1fb049ffff001d313771f8","01000000250b238212031e092b400d378d8545163ff86afbf8242d1eca9a79cf00000000233e82e6c43947f75003a7d2650a322ce04ffa81228bf02ca0c8b21d2b9c84990723b049ffff001d18b9e553","010000007f7eb2f905be3be1f25f6b88d72ceb20a20f145241c5c78f34239be600000000fb090981dab5eda9e4be08f8a049207199fe04e148bcbfd6fcd90518dc30ab17e626b049ffff001d3a3d1a81","010000009c5215acd31501f5d878a89420fe0de4061de05f105ea873890a24d700000000f94c2630e688df0e4c6ddb6e07ad75b1fbc3062ce758c391e2499b9cea2ae378f928b049ffff001d2ce67d69","01000000bbc1af9294556c8c5a3963401fddea008f937404c14413683f7d169600000000d5beb8c2f79477eb33aaa7748b25dcbcb3fb2fda0a587c1a3a1eb1c4df5d3a4f5c2eb049ffff001d3a7bb174","01000000b64cc13ce6b29c5daf3eeef192fd53facdede9a2018a76054d1338b400000000c1e70e888d9cf23c7bb78e746d58d433b2cddc62b2c1557df419dc441d354b26d92eb049ffff001d4fb5e101","01000000d8e9cc88490221d13b38849d1781855f6629d55f94144646fb1fd48d000000001e8b52b1966bab8876f0135af71169df76ba5da5c32e13791162d1b2a5d6e01d3933b049ffff001d69523602","01000000037a34d9e73d13892e6b35ce32b55a246974b7d9a896e8c173f3476d0000000033345688b5b7dd34b8acfc0b9934fb0ad85052b3cbbcf99f5262e480ab75a814c632b049ffff001d01dee7b6","010000004162fa0bad087ca4e8299e26d2d0d49c4a4d3793254fee68de9c3afd000000001a9196bd7af6b700677e487da0686ce520ce52957725058eca3803597daa6a518f35b049ffff001d232ce34c","010000009705d59fb252ea91d9a56567d519de80df6d1a4e6c7f01ba4bdbdbb800000000e8bf86800435066afadd2aa1d46411bd09742343aa9fde8b3b73dea229a2ffab8d38b049ffff001d2fcd3779","0100000042289ea29a23960c9224bfad9589fe6cbd685faa5ff2810cb7115bbd0000000056cdbfc1648a53e5df4c36ddaccd731fd5a56dcf82046aadf3279087f0672c74bd3ab049ffff001d3163b911","01000000da46a7dabb893b5254ce9460e41a562d331763c3d6bb35d47fe422290000000022d5810628a51708b76b525aed60701b462277d2d934e1c13bdd6cdccbfbb8f2193eb049ffff001d014772f5","01000000c0a22f2befab9bdfd28b3a4522804428817780c62131493d81de3d60000000005c596eafb8ae26916a7a4ac228cba9692a1641826767eee27d995e65104acc574343b049ffff001d5f142b03","010000001d63ce887f7c6a37ba033fc466e4c5b98eb42e3e50670b1fc02c6f05000000003de65764f7e596e5230e10f24f34e2b2d4c1154ccc39f04f7e506d99dbbe8d010e44b049ffff001d14cbda46","01000000cab2c8d786d82d89fb61d3eca1e8f2741bc721f9c05ba3c8f30d598d0000000042672c98d2fdc3e0324e4e03706617922e12b4265aaf2fb9693b63e034ed1479354ab049ffff001d281316fb","01000000b38bb766c501ea72f69b01eee10fb4ca2ad9bb404e791cc4199dc97e0000000098a49c972244384b06633c7cdc30d1985cd2552411d3884dc1be35d3ff2c50f17c4bb049ffff001d1451a304","01000000784b7b76f5468b80799122fc043a1b4dd4120795c295e5031ee955fc0000000087166bcd1c1d23d9173748c30173774586da79d924e50897126f0f136571f225bc4eb049ffff001d1b176860","01000000ba5419a7d16cd4d03e86f9c4dcf5a5ec6d719ed14ab1d56e9f535b5b00000000d7280e83b52d4fad686fdec3712db2ad701d5fbbce70ef521da7a84e8559f5045153b049ffff001d8510b310","010000006cd351ff80a627fdc2f4c9ac85ba1fde7f80c8ab6e4fbc8017d6bf98000000005588a1de129641cf33cab7459767c744dd6607beb097984dbcae315f8dd42281c754b049ffff001d30165bd3","010000002f3431f2fbaa70dddd1a687fade44f461aa7c99f36f9d28853e50f2200000000dea5caff23d776519ad0e77d0b7922ce28220ec3b91d1b370eb1bfa6333e32ace158b049ffff001d39ca65a7","01000000ef6cc0c397c8e6427bbd4d71cf5f2e96aa1dea49b5774cdfe5bc61e00000000067c1621e675972a7fb57b7a833698aa01a69dbacdacff5862c43214a0b622596b55bb049ffff001d760b730d","010000007285d9f03478f22faaeb958289ed3f592f23c341de4b0e9c00da484c00000000f25a6085d831b86f823b4988efb61447069d07b5ac29a14ca231c9f03ac44164985db049ffff001d00cbe417","010000009ba83cfe164046dfed8869d7662bcf7157b9fa5a7000a3476a75cc9a0000000030e3302d184821d2c6ffdb1fd6bf86800f266d28aaa1925b1ee68c147733f9e4ad5fb049ffff001d06d33c40","01000000980d60d4778ecc9899ba14fa21cc5d0c4c5ce7c0ff763cfb3d1345ea00000000bdf2e5c5347e1518329d34afa06c414ce92372d199e894d295e1cd6a40fd8cb48161b049ffff001dd2b68308","01000000915afa65bb9af7a6a0dc10fb4aa7736ead8a7f339e959bd0e6afb9e3000000000250a73b4740e6b4ea375e34574115cf39c93ed9fd5886c433504dbd796be5389362b049ffff001da3626e02","01000000a1a56762d0d6745067b0bfdfbd3224631d063cf85bcb4ea62f811efd000000007ce758828e46936958ef383a536f37da666190f563f374a3aac0218d21f489952f65b049ffff001d24526385","01000000969ee24e6f28f04d78be4b0b4070b4556bc9819d0072ba0a6ae073de00000000d7f92df31d5a1ec11a1eb6a126a469a82651b7e1ed813bffae6ad623a8fb8c49bf66b049ffff001d33b13994","010000007243192a9f5ba9f553b9627e0b6056507973a94fbcbb1b1ad5d1607600000000ccf68a2022615bfec3edc3aeef3e1f96c7bbf7dd9361585e59a1b0b466670795e66cb049ffff001d1c54c13c","010000008b1030e20db7bdea1954b8e22ba3677b59fe76cf0c475623b6171cbe000000009ccecdd19c5c161fc0cfdd03e97089c52144853a536a9c40a76223bc8c88c77fca6fb049ffff001d2913e524","01000000cfc0f6b1dea58897e54551309248fa51a0c0e56841027dce08645dd500000000a9476088b085576b2c296cfef02f2623a504ab5e54fd044364be8323f3d8343a7873b049ffff001d1f3e5414","01000000ff18aea716aef6d6e6a4941a95bd3095ac04243cd4201c968903f66b0000000070b3fe5c8d425ddbc61efdeb010859ee1dde96c13b9d0f237dcf2d22c6a5e4c02674b049ffff001dee0e4c02","010000003672e7d5d2da92c349d5d460e248de563d79d3a8df5695a3efecfca700000000e20514a925a0d7f88e75cc1090717790b4d99e473c0370e92b1384b1a62999be3a78b049ffff001d67d40c14","0100000059b697f92fb98438906ffec4f590dde788b605f56c294e7d37424449000000005252c46accc6327aaef4bff2f4078567b66337e00032ed1554a6c8a0eb3e1bec5278b049ffff001d7aee7600","01000000172d35d832b24b1c8635f70124d96fb606330160f26cb04ecf5f210700000000cb1905094eac29eccf296a149bd01b26638206432d5512dda46cadb4add2b10a0b79b049ffff001d40d4f602","01000000bea8c70489c05151fce715c6f1938980efae3b68fd5a602455c97bd100000000090f2f14b20b692d079db1d64729b0ed7e618c4e5915a20d9768f7ea7777375ede7ab049ffff001d30205907","01000000418e4b90f50ced6c7970d5b02ae3b697824950e2de744ce15b26334d00000000f330db0206cc3e9a2c3c3a6d19ba06716b676f6491df3a9b7fa44b0234fd290df07db049ffff001d36cc2512","010000009b59b587e4abbc282c43334b004ee4a51f517bb3a1f34fe7096bd4aa00000000c11877459322b40c3e1b3f5756dd62253aa48d24af8561278b5d22985d5bf7b90d83b049ffff001d242be9a8","010000000a49fb19d7c0ed7727b459b6572585da75f5f16b2464f7f882d1804d00000000431ea193a08e63a508fed0c246179dc8317cd300e83c99c73ee531b460e5dd5f5f87b049ffff001d1d0887ee","010000004ff7abda4ce0ffbbde0948641b044c8e0a8cdff14fd53ded775acf370000000088fbe4d4f0825bd99402d2e612a0a3db67c8155679e42910d395d295cd85c989558ab049ffff001d2ea63363","0100000020aabbeeb6f13e124c19c5a01b26e331317b3d81d0f28d83f5ed3f9200000000434e9d87a50f69b5fc5344d971b22a361075ff3dc71fb0b987836c19590eef62698eb049ffff001d2ef077a1","010000008d0f79b21300a27a4687b2feb2967adfd60ab4326e7f0445258f4232000000006ff530db2b0f474fdf5418bdc9f1f06539f62883abcbf10c027dcb8f8102df5a2291b049ffff001d15aea41c","010000008d978d7f7f33dcaf01fafd24ee59da516ee7322937c8f673434ca86b00000000b8e5c5df9e7f6935554fd3a61eb655f20624c0709cfd30d19d9c46e0a4a7fa392a95b049ffff001d15d1a5cd","01000000b41b20f5aed7dd6b95fa376c224f1b339f82192605aa76669df6314b00000000e685bb094ed287fe99e7af9984c49c82b763763f6676c7098ea82a30ee37867c5595b049ffff001d065d6c00","01000000924b7041daacefe0cd0b5fef27103dbad20a99c996e830255414dd090000000040ad4e42fe93e0006521ea63f6fe3a9fa5114286859f36c0e2232b7bb67ed36d1e99b049ffff001d210a377f","01000000b49cdf94b08b75bbee223b195202c4a56cf3bee3d30c69af08b88947000000000c252d3bd0aa93243cd50a6b70e569599f05c49870901cedbd87ffcc6e8ed0e2699bb049ffff001d399f3281","01000000bd35166c3c4dfe643a8b9afb5f640085ece97ad8abbfed31a703583700000000720a33800613a64ba7757efb2aa1659b5afdf8247e2395503a28c4c79e557b87c49fb049ffff001d075c5a69","010000008932e94548d99f66d942064cbdc5e667d7327103f26321124ab21000000000004498e9b7493047f495dafbbd8e360fe1972e7eeaf7c52fb48bbaa1d13cec8a9f6ea4b049ffff001d259c38d6","01000000fb9eca4cc0c8de5fd52eecbdafed7354f5d3c0005f127d05439ac4ec0000000063db427a861fa51cd09d0e2c87c907c1a929bcfdabe40718c7ef5ac40c9d917127a8b049ffff001da3a2d90e","01000000bb8a81bfcd537dd505166bb16b22a14fbd7ac8d37596b813b36d82de00000000e0477bd929bd919b3cabf87b79606bbbc48ff2f7e4a676f85e575022a54967ed1fabb049ffff001d29e11a96","01000000522db9cc51da24e96ee2d9334a5844e15579fbcb088bb356c56c4b8000000000478adf8dbdbf97717ddb049d38628178b0fa4578495f32b7ecfddaebe2aa46dce3acb049ffff001d32f61e12","010000005868ad10593ead72125234b707249a6c1ad5837d6005c1f9b6f5d5ab000000005d257c72b4b5cc6823288d0f7e7e505ad45b0b4740c1105eb9d7e2cf4663b124c2b2b049ffff001da91f1f18","01000000ebdcb3139eb1333acc42df22ef1f7c73be94ecfaa7d4c1361b2fa0e6000000003c219f8850b7e339ebbec37ef818d23ac911c485f91954ad4967175d982703e75ab3b049ffff001d2482fa57","01000000b85dfa071ef658f2fccc39d5e8d70092b355df69d0832ac081433d8f0000000017f3e75986993b40aa0c31f01c0cd70e7bd903d918733323dff99115aa82be1f7fb8b049ffff001d157b1c66","01000000d6aa8ecc17918fa59fdb4b3c647567dc1574ebb529212a3a2c93fecc0000000085c8f94d5e2bf14c2fd5d9d3f4972e89322b6a66a3c59869b64796129a21868febbab049ffff001db1f93505","01000000ba9c804e7a8130a336366214d993f35e1ea1f248beb5fbc50fe4914d00000000ad2c53d68a12a75b4a5ac5921df3f0a4a16e4625afa8d7447fb80b40a33888cbb8bdb049ffff001d1c0c8969","01000000a6b32d2955716a17fb445f1c57240ca9d4461950be2adf1904fd6ebd000000008fc54917d453376065d7c826f8c1af783f724a97701eb24bc4bc93a94bd5a5b4b8c1b049ffff001df220c301","01000000dca33a242b684a2c7026ffdcf8dfa69ddad7f7e33d647ed2f1131fe700000000fef69956d35e647573f96d8bb36dea5f6b5ba52e25e6708c27465c4314585e0afbbfb049ffff001d18a6e153","010000002556126d77debde04e353e50dd74718f5d59cd466078d464794d2f3b0000000045e1289501d0bd79f7acfcb1b4d9fc4808b0724b4ba4d3f376fdf95d1a3c9b62e4c1b049ffff001d2e3aaf57","01000000635c9ab8f1ad5214a8fdaa8dba4b98a1e9214c325378429713a5053e000000008bc3b5cb32b72c9e43179b5ede365e1ff6a7c760fded2e906276b6eb05dd29f59dc4b049ffff001d21203519","01000000821f72dc7afa9777478dcacccb7723b8918c0195664975cb0ad4386400000000e0f4ba5055cdf2c8d9b36ed6fe7f8882b0cdc9e8a887530478fe8ee434f91466a0c6b049ffff001d08e5ece3","0100000052af630b41c47b8b18de9b82e9316d287fee7b8e7a2b814463d11956000000001606df27561a80c544816d93104c2a553bc6148e849045b11b665cb50a787316b5c9b049ffff001d2b21629f","010000008eb42b4857083559489b5884dfce1171ad6b969c268c6ac764fb15bf00000000a29f7ee44bd13a82bfd33aee6c1869123daaa9c2b082e7fd41eddf128db163dd11cfb049ffff001d36299037","010000001510b279cebece31c3cf002706221dd65cefff68f2cf2389bb9ead5f0000000057d4ad587435ba2aba7f342f6c690aba92074b00ddf546f8fd190f8009397cee2ad3b049ffff001d13f50051","01000000180d6d9c57694e45f1a3d550e2c222844d66b9742ffd098812e98db5000000002c8517d8b849773e5002e4a6fb975f116d5c915050a24f5fcb7e1515518d50b251d7b049ffff001d1947f6d0","01000000c5289eaa8a61f4a7c5d5b6380d5ac4616fd902a3d440400739ae7140000000000b3fd9756986960bd1b23443be31df6c8f0fa6814d7e3b7d1ba6ccffa1716d78ccdbb049ffff001d30a23562","01000000fe781d2d1c746504c6405ea1b42891419d391f86830f2639cc143b9700000000034f25ba7eb3a0d245335166ae87cbcd600e428f5553d71f9649d2baa878399a09e1b049ffff001d2148e71f","01000000c6462bb21d9ea7e724b78f7b591ad98046e2c8d3159825016860a1980000000038f340c190d7de9913519d83c24f1b3be3bf5e555025c57de1b1627a49a183d52ee3b049ffff001d3a7aab6e","0100000075ec267529fc6ca8ded5415e18b810e6d779740b1ae5d86dc5502c8100000000cf14067a4cca2152336cab75a1d4cb7e529ee0205229452e27d654e3d1aa0774b0e6b049ffff001d05682d45","01000000de09e75932c4466fe70b98095ab89304afa3f1c7101f213ef132afd400000000f029cfb26c96bba8f975c7c424ffb7196c3e9d7b03b704c9c0457503cc28248e94e7b049ffff001d15db8103","010000002ea8bac11bc34bfb9b983f96f75102aef33fdcf49133fb6e9c40ede000000000bfd64db970d95b8b63fc69bf14748b348de4bab24a3295e8239b1af831691c3dc6e9b049ffff001d359f5d03","0100000052bf6deb312a31f9711200fc7b1cf1082de14aed16a533bf3f4acb2d0000000094acf020152b9f572e61dd0488e38a827e301f7783cff8254d4609e8313ba3c802ebb049ffff001d24838eaa","010000007b64c90b76a28d1efc4f2f8204feb92c58f825b9cdc21e093c0eafbc000000009cf2a1d9360877215d213330235ed22690e57761666f7c40ae09fc71d51bba078fefb049ffff001d33f57ea5","010000006b0285682d0e7ba8dd2759ec64b3a1f4754c32b7574c6e79780e1c0c000000005a36806c0b329788c43297f34f88abe951cfb88058ca866a3009df5d056b00cf28f2b049ffff001d21debe55","01000000aba17fb63e471dbdb16bdd8ad79a969d9b74733c8857ef5291c2f713000000008e7b932490c9cc7aa3f77c3c2ad641dacaf11ccd486b0e51f48698670553e8c5bef7b049ffff001d1b3c0d1d","01000000b28d88feba9a3d5eea7dbf74978709d5cd91a89b1004b47f5965c092000000002e06357e35257f841ac8eccd6ba9e6b8764fe41277f6db076ed1803d388e236e5af9b049ffff001d55a09606","010000007228b8f5e89d33d5a81264280b927df137c44337cb5da839cf465fb000000000e40e7bd2f38db80282de87027ab7e2f3d4761c368fa89d5a8b562e76f0a356d339fab049ffff001d00944976","01000000eb3e1439bd0dfac5ec95987868fcb592f71dd3a7a0fdab6ad7b56a8a00000000c0b99d7aaf2c75aac3ef288b05687e55c069b055d3ef07ec82cd1f6fbd645cc9c5fab049ffff001dbce1c100","01000000dc8f437c74f789388d9b10e9a2d94ebf74a4ab82f972721f64288a8500000000594c3d9dea421d91526be74a21f7ae700796d34c6dd76042462c250a4c0a49cae7fbb049ffff001d05bf7304","01000000dc224b8e24eca440a8af59e35941b3a3d298817e72635ba6923dd1c400000000e1a2721649cf1178c24abf38cf92356f7f425d021df7ce1a3f96eade429b9bb054fcb049ffff001dc2fb0801","01000000cff46b5223951bda50619570d2a64d9bdfb6447488ac90a578c2c72400000000b3bc9ed4df7a878925d825a25aa5cc4da677f4e3d3a45cb9b9e93515c52e98b1e6ffb049ffff001d1a0ae530","010000006ef9ab8f456028bdf9e76730cb58f3b2c305fbc2b22c30d27bc2dbe600000000cdd15050c9b4e0d92caf2fa892b59a8fbeef00be672ef9c8fd54ce8db3d0e290a302b149ffff001d2afe785d","01000000a4500747a327b0d2d086e4208563510e2fce3dd0ce848f49a9d0ab2900000000eed2dd178c959ff3e30aa3c908684fc5082217df07a4d1cd3d63a251c219d812e805b149ffff001d1bc05c4c","0100000008a9ee13af36642199cf6884651d0d49379b3344152f603effd8176c00000000ff93e0eabff4c712a957f95fc60793f91f35acacc97b6779bc133d4d870eeeffc506b149ffff001d2628bc01","01000000d095c812ffd0dc177904009ee59c88abf25a6410d936c4f74b6ff328000000006a59acbf069f35ecceb2d9b8071d919fdd21660d966c9e7f391798b6bf66cb168807b149ffff001d3a8416ac","01000000a1bada90333c6beb971b7756f66b489afc8e66f3a911c7f96c11324c0000000019521d64df2bb594babde6e64e87deec5adfd7eb3ca5f22e5aec2a1b2a05843f150ab149ffff001d13888e14","010000005013c5d531f77c5b6f1193d924373d78778cde1ef021299b75300eb000000000d4de3f2a53ba9cafbb211f0efcb563ff7aadf8d67af3852ad140c4e556914813190eb149ffff001d32110f5e","01000000655229bebc3b3e0718af54ed1ae56181c4beadea8ad2e2486ea85c69000000004c64b480b50253068c21f5e880195da78ad1c6fa72c0ab6914c2df3f08acb318b20eb149ffff001db0cf4001","01000000ad9d647bc29f5247674816d921e22065c1e628800cb4d2ed2404f42a00000000353b1b2c9b7cd41a89c3f5ceaf1138c16fd3142a0da4a77cd44b630391c4251aa610b149ffff001d073b9e0c","0100000035d2e4199d63ec60f4154f3c060e3be22a0338b541c38fa1b317e870000000002a8ccf7901d283127d7306dce0208ce615602c4b55c92c8ccbc122e3f89438713614b149ffff001d02202102","01000000d8bd3888b8a44fed0d661fddc105b1df4a0f570e118afc20ba07ad2d00000000b157fcfe82d51ad661dd507b9c6873b853373bed16207d2aeda41dff64bb9a6ba518b149ffff001d2268b539","01000000012942ebf37d1cdad741e2d016bab6509e44bf716ce4d302dd49625c0000000010743f506ba21edb438b04a636bf5f82ccc1af491368fa8a5b4756bb82348c46e51ab149ffff001d16bc5ef6","01000000c4ca9aa7b23e198fc41b656b1ad0e5ecd154327784359bff3fcd752100000000c663aa4b4c0794ce529ab256deea54cbdb3788ac47007f13fe59888d15f373d7ac1cb149ffff001d18b821d4","010000000d7086f773cac1f6e2df3a785dfb7123f79fd15e13eee12a9c66d9c9000000005da61d26d2845bb1e9ebe3c4195d1c1b47c484455c72b3e9ec1b9a4c75d686238d22b149ffff001d07b2062b","010000004641a5fb1ccfb981aa0b012ca8ae30bd2702330d6eca183e75f47ac900000000f70acf23b16d831374cce4137a8bb99993abfa26343f48a978ce275c043b00636d26b149ffff001d20b4beca","010000001376f63ce784eb7f1a8c787a5bf21529f9ecbe567b8788478dac883400000000832c038b5937fa1ef93448ee0c0e05dd6caa8f1680d15f478dd653246d1434c9c12bb149ffff001d206acc11","01000000d1df1ae119c1d3b23edbf8df67099c3ef7807b5a0400bf5225d84e5a0000000022ed83d1de8b90966e8478d24521733c26082112ab819e6e4cbf1b3cc39ba4e41230b149ffff001d1c7e505f","01000000764a34649d85258ec27d2b9e904fe4dbaed2f436a4519ace3f15bd86000000005d2d66da0cc63899175114a24b89312f0c74277844da09ae6564e640499e29916530b149ffff001df70ecb00","0100000070a30663b541cbf7e24db7cf23e8a1c205a223e966a035d9116f8934000000008431ebad25819f7badcf22f32aee7920e5af21208d4804487ae5baca35632f44cd31b149ffff001d26c12928","01000000e30dad863be555b24f594076873dfbc19ac5673a983bb44a59677fd500000000ee0b8154bca36a5353030de263bd77359eb80cffdaf7b262ed7ae28962080a880d36b149ffff001d09500802","0100000069d9df9c982f4aefa481a57a63b48ac4cc628c10c342931a733314b200000000ec5a0eb2f61008d409d91ec9c76cc1c32ef9181d9aaf01e83d0e796c0f1cd8c18035b149ffff001d1837a7bb","0100000083b8b53e14abb1f74f67da5a524177135089a0e980c3504316a6ed7b000000003a365b66294ff6f16e25050cb79bb50613f85e2ef479aaa0cd87c5e675e848ce4739b149ffff001d84a80912","01000000a10849019ccbc2e3bc4a0a6b135a3b6577e56c71486a2c4d5b90d74100000000827ce7909256b9cbe2fdc2d90343d27ca100d2778b3a5774566f25c13d6ec1f52b3ab149ffff001d23429000","0100000051202af69788dbba55c10f5c8270eaf8efabb4d3acdbfc49f5281c7900000000d1e75a6d3b43351b66f251cdf074f558ba5f7b11f3624eb6d8381e3d2faee6391f3fb149ffff001d03a8774b","01000000fd71db4a9832444ba642b5b51268132ca04e8137742240447cbdd31b00000000bf0734aa08d09fc51924a7bb54c15610740ca738777728123992b1d79d5f673d2443b149ffff001d26666613","010000006bc53ab591d5ecdb3f229b15da576569581f3e0d8ad02dfb8b0aa60200000000009b1c81aaa6a1dd5fc500f9c20d2612c95ce6963ac3d0b550698057cf52c1eedc46b149ffff001d2afbb4a4","010000005ddc46425632ff587b69e3d4e1f7da21cbbcd67aa61369ebe60b632f00000000aaace172f4c7cbab2056417fd91d01ab92306dc804075551c0fdd5d63be1fb6d104bb149ffff001d20b1c07d","0100000008df7c8ffa590f49f5316eb1713879ccb696d3f5e3d4d8a9eb85017d00000000cc094215dce04d39fa1dec87657036489ee2c657ee07f1b2c54bbb443ab0f289964eb149ffff001d39be7562","0100000081a5ab109457d35247a17730c94924b3baf4e371e9ff3afa987b97be00000000372d60234492fa5ae81b0f7901911390d02f68662a75db044ec54732879c7e609d51b149ffff001d1bc7c38b","01000000f18f15ea27bd41c439055cef128cd3ae04a3dc3c26afbf1d03f559510000000048d77c4d9d4c648ff0c23436390e1cb94715dfde126ea9c8423f189c9796a18ffb54b149ffff001df092480d","010000000a5f8127fb7cb0d4c832b6a98799e474d4d476f364efb22dc5dabe0d00000000bc21d9eb3c91ca23508a3e545c9e4b846a29ad1c8af0659d82a4b85240be41dcd556b149ffff001d24a74f0e","01000000ba4df08ad53c8ea0a01dd6f4756582531066c28b64c40b575cb9631600000000022f6c29f372c379185d587d0ec75666a8f5f65bd01727db9c33d688ceba9e3e1b59b149ffff001d189187f4","01000000570d59d87af5c682fe6a0c19ac4a61def854edc68be73888eee608c500000000537e512181e0b4db33cccb97ce41baa8233ecf8f807d81fac93ffbf6fc19a257795bb149ffff001d00755ee2","0100000050cd1c858c6063c19c77344732ca10ff399ce525ed4e67e6141d728d00000000079e48ba34ac17be218285a0ac0d85b3532cf9b284db7512e13ecb7de1e5f9f68b5eb149ffff001d082f18e8","01000000d4935221465844dbe92445ed7fa45b87d7c08184a1e7965a6c16723700000000b0efd47888bdacf908c52e5a75ba7d99fca1846b85b18d10b9f4bc5ee4cb9b52d460b149ffff001d021f0ef0","010000002af39d85329d791a7445cb7838a9b13bd69d1d7f3f5ce382b001230e0000000046ba525d757de69a3e58ae5a680bc01eda37afde960e13860c5352412b5586a2a561b149ffff001d27f9fb02","01000000296891367720cadb25a57de45c2a56463f186e01a1c63d5596d3e26700000000e13814a3ccea3cc0c6e9c0ab77fe899c2be72b1fca8cfdbcd5ff7235988306734064b149ffff001d07d4fced","01000000a89de1cb589db7db3714324a10a49f33cc2b9ae847e5c66b9250ec4200000000cb7a83abe36ede0cc772633fb392a65b33be1a4248e370aa173f1354c060220b7168b149ffff001d2518ce80","01000000195d0855865cc1b7789dd9b31d1d5356d2e9446e434953a1feaad9e00000000041963e5044ab032e117e3745c880fa72d0bd00d7bf967b5e2cdb2b9a4c3a6266ba6ab149ffff001d1720f768","01000000114ff25e1237e554139ef739554510f14d96b2590f6b2389606ff98600000000ba046c28d75c4fa3706a9d5345d2219f52953cfefff1a5426f5ac3a23b01c39cff6eb149ffff001d2d82aefe","01000000c0ea4de281a5a31bea0d9b5ce3e833fd3f89b3895784cc8f5343625b00000000e1036d29f3cd11826b0123f9ef38895d3d843b830960755d6cc27d2e22c21673216fb149ffff001ddb590400","0100000090924169b07aca3cf99ee3392838f6a511ec8ed76681b47bcbff647e00000000b007db23bf1fad01bd6ff25c03b5226d3d3daabb143cfa67c69d5a23d852034e2974b149ffff001d38925e90","01000000e2764d0089858c7a3af7dff3f09ee7617a864dc2947cd7726a50650800000000fbb2c95800ea261ec8de34b87435acf4afe80213d08fafecbb74ee1c5ee115836676b149ffff001d67f94d03","01000000f944774b2f0462decc10da8e8e1678ee94a0f729ce5866ad000c086900000000e11e707e3569c40025f1719764e3c5d948ad2b5ac37b9283c9e0a033bd682d712c78b149ffff001db1b9f606","010000000d6e885207960cfb26a2314d0cc6be1944a660c50e00abae2086c1280000000095e63d66cd093591856748859ae240c80638e434dcd775834c0b431ebe99aefa3279b149ffff001d0317e92f","01000000243bc361815049391547ce9a21f941e915dd59a3f321d7790d5e6d17000000003fbd491e69bbda4df1e7c8d447ffa5c387ba6088d9c06a2b443d53522f0b9db05a7db149ffff001d378b0878","010000006c2757efb5a86d0a9679e65d9017b46de5c4a0f5b5eb516c3a1281ce0000000019e17715fa422b4783413fb59cf1d90f9b5e2c6edf685b53450427d954e36cb77280b149ffff001d0689f9c6","01000000185ad94196a4fda482b308f97629216b8862badd123df8518c9546e7000000001b50b22be0fa6d031a3c5cf8a04e573abc6ca0390b90cd928d0ce738c75696bf5286b149ffff001d16307d20","010000009acda233bfb2abff1effd051f91e06ec4bd3c19710122b89705fcdb000000000f5f8dd0447ad584b9e0d90cbdff7481553ea79f985289f45d6dd19cfd9efb05dc98bb149ffff001d13951391","01000000313693091143ae94fc6b058ec7025181887466ce6997adf6b8016da6000000007b15584336bcc15453a053438f979d8c9fe91eb029a9df39cc0a5b2e2b4b1d5fd88db149ffff001d1b555885","010000000589890e25364b6fe04c71b6db963f43fd15179fa9ea94ae0be0b25f000000002b33fcbb4a2b55a94100f53be3d7b6781c4ccb8e47e8ec98d9dea3377ffbcbb9a592b149ffff001d0376aedf","010000001c08abe579f75839b60be68cd0cb31a4d9a310c16bc5b2d91c69208c00000000f159d8096467ffe925ad3bed06ea0cbb6611e3c2a69d3979df842ff98a80c7545694b149ffff001da5327902","01000000d423e1271159a683806968730eb3290eac200b703481e8e2648467b300000000c11f2b0a83e2c081651736a210151984e1a4a4f1b3c89c9bf4e2448e78a305939694b149ffff001d31f3f800","01000000181bc7c4316a5feb6ac4caafe5a3c320ccfbb4c9ded74cb4527ec20b00000000ecd778a6bb3da04963038b3c914ce90133cd6de35d0b0656581d3b1855982569d897b149ffff001d21c8b877","01000000f25310cf064e9671ff3522491f9806799c6f461d8ca6f3af2853994100000000a4c79a7f526dbf74d124fada846377ec1004720fb21f25710432f04ec3f732dbcb9ab149ffff001d180dcddd","01000000caf12b0f3ac89b529e07231c437335e5a5c85680db0a3c8b96f4ae4c00000000114a5bd5eeaeaa6e5f714ce9aea3a4d89d70e22626958c626e2fe085cbcb7740d29bb149ffff001dabeefe03","0100000048d5603850cf4b66300bc47f374b4924153786d0507abde0ce519046000000002468b1a681641d834140e05a35e63f8a1127fabbb205769d798b5a29b0498824bc9cb149ffff001d66956701","01000000393fd81bfc4dae252bcc0cae651d64a0fd3b75e7f14b7eeb6367a9f3000000004507259a753845e45efbc67bc4923490c8ba5b2b2ef9e25248864cc63db3fb37a99eb149ffff001d3a52742b","0100000054d3b72fe8e121ead6d3dd46dcd724bc0072f867bbad1a139f999708000000000f823e9db2672dc458493d282aef468cef61724c75f0ed915a3884723507f8544b9fb149ffff001d4d2d4002","01000000230715126780b81bf1ca474f64a0335629ad9ec383b06980e919824c00000000a6354c52b431349d4357dde49c85c741a987291d6f72c256da081a5cf6640ff462a4b149ffff001d32cfd6dd","010000007f3868f0c3d8a30e6da2676f9d79fdbc4a175c0bcde5118e2fd73fa200000000302f0dfe5e007231f8e4eb15f1278d5f951cdf8316aa2777919acb5bb56f154bfaa5b149ffff001d366d6ca7","010000008be070e0e8cf9203c9c17232c7e31eb2888107fa57778da9ab3c9b24000000009fdc2ffc688afa526fecc1c2e42f7a4d22d76288dcbee4f81d1224b0a903c1d2c8a8b149ffff001d04b037a6","0100000045a4c0a9b319dd3b4970213386b1c3409bc1e8dab7c5389005b808b200000000edac8f68220e5d861ee70ec73dc9ecfe51c76c8578983de967396f68a55547e31cadb149ffff001d2caf150c","0100000030d3f3f5fcadc01de499e3cf85fb5fa59cd2b78a7e41b8866ca04d0000000000abe818d20e918670fe421ab91b98e1770c89e38adfdf1e20ee05ef12dcdf024919b0b149ffff001d31d8714c","01000000c05161431a2af64c78ef281e16b116cae099612bc4e442e53eea818d00000000a26b840ef8f2f28a81947c5d7f338f5dd59182c25ad78ff008d2159e93f6262a71b5b149ffff001d24c9323d","0100000047fcad79e078a20ab046194abbf9f45ee34f54ee47cf0695753a470f000000002d806285fc13c5c9a8232667e1660868d1fec0a330e2d653aa8fd6e74c9ccf6550bab149ffff001d35cd75da","0100000047e307c397a97817a0e8cacc0a636251edfc68c4dd2c2194a178c85000000000c9e423006c0d4f4dca7577d7ca09e9098d3a5da84089966a7f889af9d4c69cda0fbdb149ffff001da3d8cb01","01000000fb73ba0ce1568ec9f8c2a0abeac2fffedaffe97b086040c0787c0b1900000000508978e6f38fccdc45d1cf5cefc81818199960878f505066235071c8b8431ac6ecbfb149ffff001d3884b920","0100000057fbb97097a1bbde9090aa6d64f7ea848f7eb730dabfcb4bc12847ea00000000acb9e9ae7d7ce1c485a65e853faea19fda130db8eb5b7fca1d7a65f38cee014bb1c1b149ffff001d3a68ff1a","01000000ae79e9763f0e85907d3864560d224bee04814d671d0723949aacb70a000000003aa9afc9ec79eb88531ccb01e72e0e444616d74b2ad638ed04d623292fc3d4d41cc4b149ffff001d29181682","01000000fc09ffbf5341528b9616e379171dabd5f0964935acbf37d57c7a0a580000000098b74c14524a35ea7a15b127f531a6825e46e18f99589d7cac885a77ef008d6fe9c8b149ffff001d1c874759","0100000029298ceae56cc91ebaeede03948316447bf19b7167d8aefc3943e6b5000000006e6366aac15b9d2d777652b05e47f4bfd695fbfdceb302c6905bdf12aa937b24afceb149ffff001d1481a48f","0100000049a8e593459a53981d5395b57a8979e644e5f3bc02934930d8b96bb400000000e7e0e65f38aacdb04da6e5f760ea68bef0e6f6a966d3d4140dee28b321f02683f8d4b149ffff001d9e734104","0100000078536372154d0699b2d62b590da82902d15f5e1586133af0ce4cc57f0000000058713daee3013dd84c9ad7aafcad3e8f64897efa9f141983ba029b9a6cb2c3d13bd3b149ffff001d2dada1e2","01000000a0a432e912142f774bf9e15d9d2e91e2aa499e22f8b3d8a0fc1573b10000000002b6d40f7b85d92265f57c16ec0b45640e64765e1c5c7a8b5205f71225e88777cad6b149ffff001d1dcdbead","010000004117a665c28bf85ef9d7b96ead5b4030bfe358c069a9706c1db2bd5300000000d5a9966b6be5f769984ee88b0aa22c0d64f4c763c0b0fd7dd745bb0674801a8127d8b149ffff001daef76006","0100000008f2ba2228ba4593387e57cdc4508ed7fd52f1db6b361c269ccfd5f400000000a9db478a78e6ecb49c9fc11c618f4b7852043b448f7ce214efeaa775e8e4a85e04dcb149ffff001d382988bf","0100000000bd292e98136fd72137fe6684fde18cb85e1509ee82edab9b60a0f200000000087533ff2cb595636d000a3ef62547f389c1d121aacd3700db815d0cdc2df2105be1b149ffff001d1ed854af","0100000066041c1eed11e0ee9cc03786a50402ce14234b3fd1168abf13cc802200000000e4db2646cd15b0ccf3d95e8778772da44d93f523bb87197b37b8c9a6aecd6667b5e5b149ffff001d32072a60","0100000047be07efc507fa4894a5ffbd1c3fb5917a35515e607151dc6f534b0000000000845f5b9f6a1f2e456ba795261c8dacd6c46e2c01f2df939097c6282a6778133197e9b149ffff001d313364e9","01000000f176a83fc2f36dfbb6b9a48aa78f8aa52be8dd9d702647a6a6f526c3000000002efe058877bab9614cc4b9cb4e7db5ca7db890c3ccf537395b98aac3e7906741b2eab149ffff001df53ae201","0100000099517140651357654df9ae6f78fe32ecb49f1f5d035f4bfdbf9430ad000000005cf5c80d013693b3b7a440dbc5fb3694f3edd4c4d59e5bf2aa0c62b3e759818dd3eeb149ffff001d34e4ee94","01000000b776b23b9017bfbf319aefd40b2e5011634ab7600ca7841c1da3b30c0000000008f1dcbe69fec383572a3bb1c5fb2dccc10f1bc7049320a3bb732d58cad297e377f3b149ffff001d1bfccc9b","0100000022e95634e398122fd9cf09ae0d09e3bf10b04e82ab16af2ecba11b6f000000004cb4083ccd702726aad620eb11c81ae24bb4549eb9f6292d38706e5dd7b6923e5af6b149ffff001d158e930f","0100000028e2325379a93cf9a8a37bcc0af1a12d5abb907670a71c34b4cacbd900000000c5ed14a22946cdc3af0362a89815b6e7a1663916c814e367079d111b8ca4be7dcaf6b149ffff001db42de201","0100000009e083cdc77239f28ef7dd98f9c9ba05ecc1efda9dc26dc4697e40770000000099cc8d3c1e0dbc7c63a51e9ef02f70e38610532b6f2e8f80f3bfc1659e651b1525fab149ffff001d0949ba60","0100000038953fa4f032821517e8cfc84936e1f1f39a75be6ecf51fb0f88b7f300000000eb03cdf8afb4b2d1cc07b0da3e6621256a27ab9863454e40d464b2a8b4cb76d16efeb149ffff001d3a9133f5","01000000dd3da123364ddf803c0070e1e2e6bc846d96709a53e5f5c94a6679ac00000000ba8b082dd8bb982750597f03efff439be255479022e735bd0677b075c04947f1b703b249ffff001d06d3622f","0100000092707c4f3d2582797a5f5dbe41c12cd7c2309933c2e61b30140a332f00000000e1c4554d5cfa69d474cc61ff6f3900b7dfdea95c549066ed2a4416aada50c51c5909b249ffff001d153d3f51","01000000fb2946738ea3414d77cfe0709d020cd4938ff72152d585757c8d4b9300000000d372f3418d855305432523e9b642ce0773fc0ded981a97fc9705b73a3f63b4b2c90cb249ffff001d22cc4a16","01000000a4523ef332ad5686f421f10bc62898aae40c5c8c748e2728609b2e3d000000007134c774fbda5979b086efa630c843fdee29ce2e0c74ca21520cd889e10894e92510b249ffff001d07d7bb0d","0100000023a4ff1f0182b49db76a8f607b6bd13801b2229b6715dd13257a46ed00000000cb3a0a4b4ef389af630295936cbd9e1e8e8fccbb82a5d6d31e5d1bae07f392e61411b249ffff001d2df19c96","01000000c960f64c3eda612f04af7ff38b27a9cc6c20bd91515e6a2a9b55d83000000000427abe72c512a005f65956a2de8982149fe92d88af88d8f332c0b7e66c03dd2ee213b249ffff001d2bd51f49","01000000cd8cc81df9c3a4bdeee04bf1f421bd0c6691a6746d29a8b0bdfed7d700000000fecbbd7f761a16c706788b5da9986bc9c15747f11f2a8adf0dcfe9c27afc80017715b249ffff001d81ac6506","0100000054b19b56ad070a7e164c59da7b498919e2d5b309666648acafbd2c1600000000466c34a4bb0cbdfb1460a5d059edb9fd41d1d6f5bd964a9f3f423f5bde28e1a77118b249ffff001d34e7bef2","010000003684ad6046eca421f84d39b81c7480a8bafbe5f88167b9b32074c73200000000cfab0dd209598d03a72c05eb1e41dac78f07d8475c4662204c309347c5425ed9cb1cb249ffff001d32062f55","0100000070ce2a0c56bb40d7b008774dae7d763371b49fe930f5570ec72cc2960000000078da8057b14b01d4286eb2f920ff63a9918b6726086989dd9eb700d4a01cfac2ec1db249ffff001dc7244905","01000000104fdf07cd5d97190919ca06d4e5bc1a119e9e3a45400f43fc160dbc0000000001935652b14eea6a2623646e0279eb456e0f887479ac3eb7e6e601878447875a1f20b249ffff001d22705fca","01000000aa93f7b158550b0f22f8abf02a694ced32424fc09ef31fd2cf3b1c02000000008f300d29deea21cbcabd987a3c904693734ecd949cada1a2f51fe2fe86c7f7b97e21b249ffff001d2abe0d43","01000000c1baa8586e713157b9baed7177d5b916fa50af1d17b0eba31fee76b700000000ba58d325d20a4b93795840bb62e697e81970988b8605f93c3ffbb7056fb409724225b249ffff001d325ed03e","010000005ef620e61decd96dbdc3655790be487efb708e16832b6aa956b9fd58000000002ef37f47dafbef148a6c43b6b8b5318451e79b5a00e851b67c2a917bd90009677b27b249ffff001dd0f16a01","010000008f3e9e56294a00dc5f54e14bdfab0194ff4fc977a4928948e61aaaf300000000f2b4acb984af536481bc719310032151e637a72590e8702e46212ac01821681b7629b249ffff001d27d9be4d","01000000afb631d9119dca1a1b272bc37c73febe83a1d63952e9685bde4127b0000000001cc38236a711d2466da8b992f1629fae1ab7e1667a5d54f680c3562a5fb9ef7aad29b249ffff001d66226f00","0100000041ae15ec1e77507a5158e2d31c6f1a13dc2e557990056791afe052bd00000000bf7825570555374992f37e27697ed6dfd5f286a5c49324e7b612ee99ae5fa386b32bb249ffff001d50149404","0100000053b2b07474615370f2cdf1c15949bc69b2184a29c545b302c073101e00000000ab999689d5fd200c5b55080f4875408a229a44e9aa196fa7a3eadaf73179bf521e2fb249ffff001d14d0d702","010000000e3a220ac26f0d6bc4ab0e90df6234176a2dfc7378dad18cd6f51ba900000000396fb5a8639e4bbbfb04f0437858a566d634c138f18523041c0362a4a5f596ba3033b249ffff001d26f5767f","010000007707f6502fbff8cdebf7965607f88b0b6a5122071e0c963597c3a896000000003ea43a924712f2cc122e056c048001a35a4b6a2720ee0fccdc68449a15ecf5562036b249ffff001d1c700e7e","010000007afce5e3b624913acdc018aab507bd0706aff18174290ad16af2d0c6000000009c1468ffcff2980837eda3c937ef290c84a77e91053800fc83ec3a8473b8862da237b249ffff001d08ac9ace","01000000bb97b3e55547c16c56c81deb7545df07403e86e1bef14224791d39ca0000000041943b8f164a8ee281ef5b8bd68e5a91e3e1745424dff3b58107b1382e73d158d03bb249ffff001d2879c42f","01000000071cb9a7e8894e3c30c822f31ec409dab0093d4bf98d79d8abf099ea00000000c44bec60954b27f51aaac58cf29fa6bf3fb56f957b6693f9a30ddd5f72947415663fb249ffff001d003b8e0e","01000000b06ca87ca32874c72d788afd6a0c2554fd49c17adaa87e55ee8934d8000000008653db9e1d6afa4e079a3bb0da278a38e2a668656e0d4fc35d0762c3dc4a8d88ef40b249ffff001d1fbe5307","0100000023455568464bdcb059ab006c27355af3a524cf9ef4f136f97557b266000000003a101c2ef74b113d9425ca7686169f5f38b2d5df4fda11f28a72c61cfa2916722643b249ffff001d1fbedefc","01000000330be27df5654a91e317a14bb58493687b20d54e3b97d6e7a897916400000000687fb4c2b04c8da99538aba52ea8a08658508b98e4601423efff4cb4c4a0abcf1047b249ffff001dfa7bd712","0100000040a959ccd9f9ce21ed00cd3657f10bba01776b199b0903a749e6fdec000000009e377c68a349554d7b783fc4367c65a9830f6ae2662281f7780f2bf2e7d932464647b249ffff001d4e32fe00","01000000d9badfcd568e85e57d5f4848d1582a2c0161220ce4fd663baae73dfd0000000064f83fb41f1787ba854bed973084fb21dd0c5c720ac86a84dfe91b58adc7b642ef49b249ffff001d3a67bfc4","010000000118a781943dd81e67b077f009e015535dd956cccf204a46a5ac6f0700000000f3a5581592ae4f8d6a81950a8da1ba8d4b5b875aa9bc6f3405d874a90df496c3b64fb249ffff001d352126ef","010000003f09976be998eb10bdcec7bedb5e2f2c6112f909cd1db9025e3499730000000003574b14e7772a15427dfa869cfff2784042d32f2356ed9e9b4cc22c3f9bcc8b1951b249ffff001d3831f927","01000000c61c97f4e252f76685c4c8b7f1dbcc4661050075c680450762eb6361000000000c2bcbd62a744a004b2dd039e6553ee2bf83b5d19618ef90de2a7fca7e8bee497e52b249ffff001d8adea105","0100000004d9addf3a16090c4ec4941cb3733bf92e346846b4628144fa4ddd16000000004e6dbfde95fec88f406cfe130fe0ae31f76bffd4bf71f15d6e5b73dc604aa8fe2855b249ffff001d39ec9048","01000000c1af81c15e87b5e779adb0de6676df9b3b3059dfbfe732d79545720f00000000b370b71ad192b0eeb71efbd6b63c9179e5c88f9172be6bef00de682d13cda49d6a5ab249ffff001d388717d6","010000000f0379199c0e06c70acb672c8caf1f4447c70a1df25d6858c9891064000000006605023f4d4e932ef43f3e9bbcfb4a9f378f9b6b7a441a35df4c68cd49a99b79c85eb249ffff001d3734867a","01000000cc71168ff8a10d27800ee5e34830be566d447c5576c38e3dfd40af6a00000000777cc9600f0bafaf57c00b6264c632621f6fe9793b9a6b46a5b20f026063866c6861b249ffff001d2285d56f","01000000a6b21b06d4717be53b650b43f251d17349bb8621ea59d997a90d4e5b00000000a803909892dbe864df8d5b81810e9197aab9b6f5aa0e41e6fedf70a781246458d665b249ffff001d14b9186b","01000000ed3f21d17f95fcbcf52a16911a0493a0555af01af022f0f37e1b0a9000000000407a41078b8ddbc9589ab131fd405d1ee3ba001cd66fb9c62b05a69ca098b4968568b249ffff001d26738e61","0100000027aa8365c21880e11d4ab25e42e11917405352179b04c7fc6024a88a00000000256e3ddfd5e6e13b903a17eb89b91dbf37d09f6e44239d988a75a5d5226ea310c36cb249ffff001d08238066","01000000c6e376f35ce261e7ae85ef160aecafe71a7d3130707e182195e64dad000000004ea77e0fecd89159ea35019c7832b5fe86ef7510ec9b7bc6bd23785df62602934670b249ffff001d0b073d0e","01000000ff181fcfa83dd960d125016923c08926681241560ffa51be272e01bb00000000c2c049d7b75c391d60a3dbf6801fb45822c499944d9dcae97168252c0e4d880cb672b249ffff001d36a4248c","0100000089a7da36e23b0548ff584b8d1d3b383d1c61b181cdffa7c8a0a68b1a00000000186da1b62ce919d4c85e10373c3e23e3f4e52cb47d375465d786e4589b1acb62a877b249ffff001d19d162bc","010000004f3e0bc6fbb561e5159ed22032567d1db3b0b88835afcbe6d6225fd800000000cc128a369490819041f76b74546af403966ef90b4a52e419f279f2fcdc171f101b7cb249ffff001d2598b70f","01000000c07cc2bf6456a5e86476a16ce874d849352ac67a9c6e39c71764c14900000000e1257dfdc36c6e3a9537ee36c3c155ee201ef5a53e2ebe5bc27750f090eb4d63ac80b249ffff001d2769baba","010000006260ef88643e48d6f4c738185c9473de32ce25370731154fba3b2ddf000000004d0a871fcba63ebbb271b1f6f6d5b3c15e0763fc05fd1f575ba60d474c3ae68d0586b249ffff001d1cdc6e90","01000000115cc4168839b595bd49acf5fa5fdfda7f4b49e3c6a3bad6710fa19d00000000bf4671b198d7db1e94cbddc78a271c4e0e2a78174fafecc7bc7e176ba2aac74a1d8bb249ffff001d2de9ac74","01000000c6467d4a414f69a4baf293bbd3745aa212777cd6911cfc128ea7766a00000000a48dadd32b949ce3be9a5236e052f77882b5ddcc2cc02e5035fbdab0e35c7758f78db249ffff001d0563ed95","010000005121cd74271e2fa0087a7c94f9960d0459b9026c9d15592973cb8722000000006bfbaaed8b05d508b966e37dfa0bbba621e0b4c83d7555aac7ab2e197642d65eda93b249ffff001d09a16059","010000005d4b94138d70979ef1b366414d4db72b41f744a7890cc1f11abd3da600000000f4b7d42b1eef4a5795103a308fa79da4b762dd4d7e2e2a5862b5ff79affa463ec696b249ffff001d2491b592","01000000829461a13be854d7113cf20a558ddc3a9963ec323ec46001ef11a15a00000000f7aa8fe8436443411064ad31cfa49a6ef84068940ba122a1324f133d78b0be162999b249ffff001dfa54d405","01000000ef9be984e558acb1f5907e3ba36cf1a9561c872a3a2631334db9a37200000000bf73658f7bfdb55811d18efd567c993ef824d04d7d191576d4ce9bff6cb59520589cb249ffff001d3216dc62","0100000001c9ce4f6798de945176ff24a43c3bcc50f99e02f97972e554027f76000000009144fe54f87002691960cf1c4589405c09204d89459f6a429688ee1a8074b034169eb249ffff001d8fa32a01","01000000424508e87ac1a3bc01a337e21d7c3deae6733476eec2deed6e9654fa00000000c9462713055c1aa9bc9e62ff1f1774e242d3d72534e65f7247f23c20660880e1309fb249ffff001d242939ef","01000000fb668fe7a84a6ae33490b4ebb2872c3cb22118d78f52ff08adab92270000000042ad5deb55d8e782e5e52b597b9a581958e72d878941e1fe9b244be0dcf05f3733a5b249ffff001d0417649a","010000004c48fe93753eabed5eb04c1826f0dd181c68a51630a6cc46f1e0e97f00000000a936451cfcd1665c0ba61e490564c0581d30011701e8732fab2e6bb5e784a994daa9b249ffff001d01196688","010000001973be26c278e875b4ef4b184e9acd40bc63c26b0978dd3eb629320e000000006e86dd235e058d7379a7e2361ffc03e8a3888724fc5f92d621471f6484cd025c7aacb249ffff001d268cf41e","01000000da5fcabd9c1881bafd10e9a0aeae478b55c8ac656b16a99570a0d10200000000e740b0fc5195125ecf572b8dd59ed41d693a0680842bad679ea5f990f3bdd63481afb249ffff001d38ec649e","0100000052d75d84445078e3ec5198bb25048bedab792a02b4f13fc0582a971900000000e1562c6888b43c98d7260e64980a464998d2ac4d58486cd03e003189d8e1e2e805b1b249ffff001d063dae42","01000000efba17c6605620bb20d8b22b93bac5d1685b19a4792bd0cef7ec673300000000b8d4300ade3209b608b29fe0b5d9061a673b0dc1bde0db4db817ae93f98219185fb4b249ffff001d3a65f4b1","01000000bcbb2d44d9754867625c83fe4aa146141180bbed1976d0820a32e75900000000cf52c6e720046895ade4829e515557ad584b3d6e7a9105aa838e77173ae562202eb6b249ffff001d37497474","0100000042e9f7ef569b2c3c9ef38db43e129ab4082d326370f77562319b787900000000083d8067034566cb2e2a790c6df08a5ef6716fc049783f69456501fde5f1c95503b7b249ffff001d52952801","01000000407efaf1b47fd94a19d312d5e77d00f23fc86052ec41b66aaf88d14c000000004eaaf17bce84e8d200dcbd7204951c3a534b4868172bae1e7e74bc87792a0eec1fb8b249ffff001d9218c200","010000002e26183a3e7f5642219fa02496c4b2ee85c85e183f037dbdf15004b600000000f3eb400ad9ac04210b6e722c6bcde9582c3c23901878859944191ea254e9141575bab249ffff001d28bae508","010000007e0f8967b6eff390f4e440ef0e51ba49cf68f4f2c9d13b04a76d1b090000000012904a7bad5b65bee3783d51952f20791c615c7f4bc46cf841b9f0ab56ca5a9111bdb249ffff001d14198a9d","010000005dabdadf0645f4e79fb22e25ecf29fed9acfecb4b6384fafcb10163c0000000017b8c8c9734590197a49e5d8287deea13a04ea9365ba45ce50f3bd1ad900ad3f54c1b249ffff001d20f0ecf7","0100000040f15e5728e77c8c2133c8203ebb3bcf6a221cabcacd68725e8743c7000000007d92a35d19af9e1ca13f009201f095a80c00554750c7700b0f602ba81bd02d60b3c2b249ffff001d15100cdd","0100000025555d4cb95e6c3c0688537cf4af3c9b6d2532d56275a4417266cecf00000000152ba1cb067fa65a6db959624bf91417290df15700e37b5af2d29ccc81a0668f92c4b249ffff001d336b8786","010000007197984a225c171cec3e166c6b9f5d444c064f9feec8de61deac9c310000000010933a45d1ee93ea1c5a8f9e78f832efc5b3dc8e6789afba3b17af8b4bbef26432c8b249ffff001d2d4043df","0100000042d31343fd67ac0d36cf5b6f728fa64ad31425aa78806e782c8c948b000000008997edfca59a77ab07e8856408f669b53b86bebf1346c480427c5109e89d2fbdf7cdb249ffff001d212f695a","0100000016f76e75e9df0f54745969a883b072277a752253d90df3c2c29cf9740000000046475e0822e9fbf8a9137f650bfdfee6f43771f92b7e4f0974746943c8ee074761d2b249ffff001d021cf55b","010000007e291ee6b4f96d286fdac1da7eea50d4d74b064bfdaeb635814d64c200000000ded866a39dab4b0bd43c13a52ebc4f13e701045dc5228b2970c3e8a7aa313c6fb9d4b249ffff001d1da41d2a","010000008c63f0fafa28faa80c150ef0f2ccbfa136f97e796b2f2b01a611287e0000000067d1a829498d631321f534bc2dcaa80090d5560efe4ef39bf0f66b6e944c353695d6b249ffff001d038a245c","01000000feef085f2d1c86007a41f3d3976679ef9c91e5bf81dc769aac8699ee00000000f160c2d4c24c238c2b3dc684c0baca60bf22b8ef9557b80cece79ca11b11d325e1d9b249ffff001d174e730c","01000000740cbb4d16421bca03f1bfecb3eb3377850115e1d5a39ef2e1c5c35f000000008a6a0797aca1ea06fe3d8b6f5520f52cbf539c5cb0f81f564948f27ce1ada6f223ddb249ffff001d1c1d1573","0100000011cf7280ff898f650f70538dd20dc48ca6bdeb87f9b77e2b9a73cc5c0000000061525acdfd0a504e8461838eb9ae786eba4bd4df2e09beae8efba4514314f45a70e0b249ffff001d306252b9","0100000029c6abd32709e6b3c4ea6b2b338fb771957fb4f3827a4836d61e389e00000000118f0fb0fe72337195ff31769161a254df0e0661285bf1f0265031e0f782db50dce5b249ffff001d1a55fcbb","01000000175efbcda1931663c8bffd6ce31d1a7e17b6c8e96a74e33c40527c92000000004053d6a4b55faa44b9432b2695b9e29e2da41ea0832bd160568e3a822abd601884ebb249ffff001d17623cf4","01000000515cd707388e7764c16f739a9896974ff5c61d77f4b14c5590c57e4800000000fb22541cd107fc78ecb00dac2a7eabe1fca958018073c1b64e33ab920e56bc49e4efb249ffff001d2af51951","01000000af6bc9292144dd35a8516398776ea0eaeec14489d538bfd5f3fd12c100000000853253216c89e116b023f803c2df70855ac2510976636d5c4ceaa1df4e7c266b49f1b249ffff001d98180e02","01000000a92f9cfbb4473ea2ad75ebb4e7db4d6fc6e7611bf4d3f6edcea08ad300000000acb7166f34f40ab6c8d14a6bb0cf4b65b31387d794f09a2717cc4f11a8f2bb1f3af3b249ffff001da4830b05","01000000550757fbb629c91ddcf9b3c6b3a05ee555394eb52b8fdb4ba84cdf6b00000000b9c37e605f25e78366daaf7034b663a3ae49af663f336dd7651e4f64ddf459d5ebf4b249ffff001d59941308","010000003e060cbe5ad36065a9807c7cc06a86028b4ad9f12e78893b12472e72000000003cb6b568095a61662022479ee6fd46e47c7b57116c3a5835f3a4b94da319368e0ff6b249ffff001d1b070639","0100000081538aa96ea717e0d2cd1e7dbf0746066dd0773b2f27060d356b219f00000000595f96a82ba1501c790734322cb02d3e46ab8a445d6494872b7cbd7761e20dfe88fbb249ffff001d305c4227","010000008b9a47954c48d51f91d7225a34a1f4cdef90c37aa698a777447701a800000000781380689eae5924e8e557820f44f8f92802a8d5d3fea126cda24f790e88f948d8fbb249ffff001dd9e66100","01000000e6b0488b18f790f07c6035dc55a8095a9a3b0973525a97bee2b407ec00000000559b63645dba4fb621cbab7ce33a197fae48a393c1d29cd855a42e489385782b1401b349ffff001d0664a8a9","010000003c663af0578182c6472515f09d2ebd0c6465fb10fb1711b1a4853bd400000000d652b30d3b4e445650249bcce947a916fdbfec496e12d7c6c68dfc398db9f3933604b349ffff001d2bd03c3f","010000008ce38542fa48c96ec5301cf768db27b13ac710109e27fa88ed10012300000000d24bb7a9f24a96de82476ca2e4fb641fa81668d31841352cfcf1ff8052d9a16dc005b349ffff001d60620302","01000000b0543d0d3a22a67cf381789d4095f86e878bdb454c6b4808e319b4a900000000d2d90de15b9273486f25530471e7958d491e1066ed345aad41ca906685d48228bc07b349ffff001d31276ed6","01000000d596b00e622305f3022a480010509461d8c18c1cadbfc9a99338b38100000000132928ff4e475ffef40b714738edbb4c91d7b63c3617e22b1156451bb70386243e0cb349ffff001d38966a50","010000001dd458df0ff2ec4b07d86265bfe7cf2289abab7e9dfa32796c4b1b180000000057fd8b9a355b7e442f801460f9f87db893ef5b1f4054a818e29e107295fe6368420fb349ffff001d36d65dbc","0100000040d2353e6a0ef0c2c4315f089ed9dc85c1b7a125c0cf6296075572ac000000003fc74c5bd63e3ec15b32fd4a0096c09afefd54210e20034ec965477a0404a9f64d13b349ffff001d1efcefcf","01000000923eb623ce1a1a02ea94d1453e467e9d5b9d59f059ece838d7ca41a600000000d16d08acbf82797e99a3c5c6494959fdef3b9bfcca85188d01b4e1b969286001f915b349ffff001d14c07dbb","01000000a3882a37c40f379a51fe052818c0860587a58790004bd245ede5a3ee00000000f1543cf521500d0870c934928b95041d5b75f75ee42b9d88eac62c6fb6a9e4796018b349ffff001d1fb92fbf","010000007b6573d5bd9cf745cb324e0955d62ef894b4e3c5ab6f47374100b2f20000000057d79805b02cf06b5a23c6b43ae243cf1e2bb7d1b0d8a0479d2f8f0f4437265cb21db349ffff001d140590af","01000000b159bf2b462904fc10fc6974e9756e245c1c311ecf2be9d9f16351c200000000b9d7e2f69b2aa4fe79f70556b979464f63b6bf2126b0094824074c7312afe5c2c122b349ffff001d1b126eaa","010000003b6836778eaa834a18e174e746764649031f5e520d489714277d945000000000e21b910a0f3f9c22137570f9977e0529754fd8c83a0d31546f33d2ed949418584126b349ffff001d350e380c","01000000ff8d3891a76b9918820c6c2f962ebdca56014c70d01af18c25ba3f7000000000ce08faabc451ad648d9894a421a023423851337a1b8488f153c4953f2b8711dbd727b349ffff001d50d2f405","01000000d37137df06d5e8d61d3cc84a4105fa260b707cf7f084a2ed416f49da000000000c55d002609f5364f83f6e22754379199789ae241032cb2a989f05086d7b7d613c2ab349ffff001d73080b06","01000000ada1c254c9c1fd7a42ec3a81c43fdd19c74e299592e6beb5560ec98b00000000dce834a5d8cb2df16a04ee7a72fc5b5d8428a2f057d84ffd8844e29db3ed49cb742ab349ffff001d1a44da91","01000000343a3754d2d0626893e6e3b7f76d556e0b955206bbfb7658569c9faa000000002e38a9bb15d8ba338190bee44a610bd8b7707762bc30f9d431d70e127aa49ad64f2db349ffff001d59ff8c00","010000006e2864806162918ad3c4ae616556753c7cae4a806deabf98b97dc72a00000000e3017a6c04a968fee7fab25b9f7b6ff5b7610c8361a6932f6f30e19991e02711692db349ffff001d02c3fceb","010000007ac3135250073a76c25bd0cf7407e3f080513a73622424383cc877a90000000078844a8c600ba3217cf73d8bb4520931a73df00fbac6764a143648cf20a6329c7030b349ffff001d233f604d","010000006267ba26953a58e1e7733a4aae3b81dfc72addbb766615eeba95716b0000000062736ae5e9cd4c5f6a408e54e48888a6d2a256595bd986293206f5be55658cc0d836b349ffff001d38565977","0100000063efee2f46c90213b0db8c1a1ad0497f46a34cef4528e1c42badaef8000000008078ed71b5540b13881669779b6e16be96e19f3d5fa62ac008774993632af2c69c3ab349ffff001d3591f416","01000000e8fccbf0d4047df291cdb1f08a4d7f31687537aaed114e2580a48576000000005675ffb1a48f03b80cbd3c9a1b5c1961b07a5432d97b79b34fe25dc240bd667eca3db349ffff001d2c325c84","010000004f9cc57a786a88fbacb1e51538dacdef1213c10de63c9d2efe82ad9700000000e857ba0ed1a2215f8137c818b0149bb4457e6e0849b09508e1e86b860fb90eb3083eb349ffff001d142ad800","01000000cc9b01a38b4e84409081da223767f825d7135b174269f75ce5bbd13f000000009cf20e2c0d4bc76f28a596aff99807fb083fc90143c84c8502cffecbcc9575c64843b349ffff001d00881ee4","01000000d64cc5856cc67297ef16d2d211a2aa1396135da81563378ecb43466000000000efec0e959f3537d347eae36c83908bdbfed6157705cbe1e3987c5e29e24b7b0fa944b349ffff001d26d0273f","0100000025639a12765643dd8846192b2515d80e188401b2f27aaa9f04b7640b0000000047bba5148e111ca8837701dc31c716b471027b37e906865a3ff83a3351c3c3e74448b349ffff001d30f28a33","01000000795e5636d7a0bf2d223660ebaf6383582b391e61386a179499e330b6000000005667d7d77c77d2561ff92aa034ef0adc81860b2ceb856f5164dee4e471f93a6ccc49b349ffff001d06a30403","0100000018fcce719ee8ff7c2cb565c5347d20b086e7071e30a7de4a05464eab00000000e886ac8f0a0e14d9a7284bedea46d7b095dd62684dbe7402fa5fd609659e15db5c4eb349ffff001d1decc346","01000000e83b8493d97d517a491c5db0a04f5ecd1f92a093f32da6edb60ce817000000001d3d0b5fe85abd1bc51c35f15e5bfba06cf5d8098b106705480f8f40b9baef5d2350b349ffff001d2fad51c6","0100000008309711c324ae06c3aba140705570b11a02748417bd553eab86f09500000000170dd5bd42cbbcd81c0dfc05bd7f93bbec8dfe0157ab2f7382f9078a4acdcaa61452b349ffff001d1819fe78","010000005594b6d8f1c5c6a51f2e927d83fa107444fed67c279459f11d46087100000000b828d03bbb5305b0085759f4f654972411aa9595030b2839d38a16fb585f4b3e3e57b349ffff001d277f2031","0100000078a8397da6bf0af577e916f46dab3e2f7a8f630e4f35caccf471773f0000000025e5b9e9e14fa9fce6ad1d28749158586c7005b1ca67f670b7e2dd8382d508d82a58b349ffff001d97a09203","01000000e84ec8ba4f248e30d8beb626a21a56409f6872a2ada91a2c7aebc8bb0000000060f6078268c10bd2747bbfa1ce51c0927cc6c6612138ef571c8defaba30a63a65759b349ffff001d09b91a3f","01000000e7eac80631b0f1a1c77cef865f34a9a781f12d808c681953981970510000000092175213a877ffc99bfe280171375d597f5fa992239c44a54f549378afedd18b0b5db349ffff001d187de678","01000000fdb21eacdbcdd9dfbdc842f604415113efd8406a55c4b25d7b8a0aa50000000090c51118cd64936a735aa6782d83dc9ab0f47f1fc3d5100c7ee53b2717f06f2b195fb349ffff001d1e7e290d","01000000127fa87671fcb742320e2f1ed7e2de3f74cc79948738a95912b1333900000000c2c58deb3eee55ad121d465e690f78b651694aa5f2d8477d4a86b1dcd0987ef70461b349ffff001d14cfd3ed","01000000864c9e975c885b5dd36343aad8019bb89f52f65fd26593120d90f19f000000003f06a98a62b6c717fbb680715f683edf31e885f97bb3a547bc7b19cf474c31520b66b349ffff001d22d12e28","0100000099daa2e5f00da6e6f8255b82681a6806183ee232b615cfde580ef1ca00000000fba00c1ba94660dc3be390f90a41bff97a2d4e91f0f2ce8cb0b5615ed158f56f5b69b349ffff001d3884cbce","010000009bf28bd278b39b75d4765257548f90661d4304af4d8fd89a3a6106e8000000006f5a69e81aacc4ef4a00aa94ca7edf1e385f9e479f57cd3a714a8cd281e6a2e8ec6ab349ffff001d2c2b0476","01000000c79d770db81538fadf39f6188d63c3b0354c6c9b0da29e6cf490c12400000000f08e9d46cdbc64a7ae3d49b67a797eae5a654672f79fb9640cc794c082a9b32bbf70b349ffff001d2f8e5eff","01000000c12074b076059805c27abdaab77899f77d1aa17022732adde18de3d9000000008baf512dc8e679060d0d7d46d9907d212d3caa44620c9e691b848595f00656056376b349ffff001d318461ed","01000000ca4379b6efd1ad157e634c22f0a504a9a37f56cbf83ecd79f725bd51000000007e40fa7901fc31476cc6054b052454c4f063c92df4a7433b0fc12fa1c684fb7fda77b349ffff001d2dbf3461","0100000027323e695d1b44995c1f66d58f85f836bed976652019cb95812df05c00000000bf873f510252455cf9e1c78d6a984649e62c8d8ba3c7d9d19674bffe10512a4d9a78b349ffff001db05f7700","010000001cb528f00758eb4c95d587a39d9e0c7bd0dd8dc6b3a0b3daacae92f500000000b2e427cc7a9b7651d450561855e21b124861aee0ec4ab5791bceac68848f1d8a317ab349ffff001dcaba2a07","010000000ae3481dbccf2aeb274bb1219bed6f5eab2c2a6bf3e7b49db8ab80400000000098b956fc566710fb520fe1ecc9a5de382fab029cfe750e4973e2b54997f373d57d7ab349ffff001d2a8cf529","01000000db45864dd63960b2656894a21399d08617f470cb8d18586cc920e243000000003a2c235354e6f7eaf850f3853e68430a50b93d17ed9b50e37e8bd086696ba025177fb349ffff001d375e4514","01000000731137df22785ba271a52bef798f210957f883e6c5f7d1741f9128f20000000079392654e6df6769496a99b778ff3f2ed6ed49d3f8e234c83d981a0a655a597b4784b349ffff001df16a5703","010000009047e513aa3741a88fbb157bb4c55adc0d2130bdcd86932b30c4342b00000000ca874b0dbcebb504e5974e926ea6ddc43bd74fd37d9076b239301e6c99d55290e184b349ffff001d1a5243cd","01000000088be9a1a11f2a759141aeee853a3adf0329c49c93c32b9a3ed19a34000000008ab748c1872648904201347309ec89a619e81e6e1c57f4e3c20980a2b5ad59182785b349ffff001dec3df700","0100000030bf7b9a20d33f8d9bea102dfab830f207cf0a6bd5437dafc6de1341000000004841d4cc4a25d265824afae9672ed73bbbb6c199778727bab6340989520335301986b349ffff001d82496504","0100000035799cf9a0687eace0886c419baa118e269cf88cb2bf49c3cbf6a80200000000d07ea42c4d34f7337ddfe6e2b17510d1bd37a3d15134bb48842371d0470fc826cb88b349ffff001d032e9337","01000000cc96dc3101a3ced5d58786d8ba66975197b90df1a51ddeb00678646200000000158398ff009b83225fb5e80b628eccb80b0441a06600d0a34fc112ac45673717048db349ffff001d2a374401","01000000bcfc8d355284bd1cd962d9ee1bd469c0808ed563fd5240ddc5f3ef6c000000000f279085142b75c1e313a6371d586831939cc059c07d6ae1c463d864387fff8ac891b349ffff001d33c7b58a","0100000090e4c400e9490ec28c68b6d1ee720f8f3e9f6d7bbfac3c2f48d0de6200000000c14a56281cda351155bcf995fd88b174270dc54a65aaa2ad30dc7eda31af7f16fd94b349ffff001d07b02b8f","01000000bd290c6a8ec73371ca3eed069aec1695a3ebed3923f20bd9fe1e0782000000008cef65b02e0698e13a9404b6bc19638b76f5563c9ec26232492f50a1bdead9a18196b349ffff001d246bf9af","0100000014b7a739fe4bde7c16002bd3e1654a603e531dc3e97ec9482feac1d1000000004d6c13c8e3543f10598eab7d8bdbdc241c79749f27ad82456b07b62b3d5cc216ac9ab349ffff001d38b3ba52","01000000818b81c1e7ab50aa190c7edd483e2745854bf8c07ce8080432c038bb00000000a26c518812486917db5ed5469141ed1e55c8f7f0a31c414e41c01711d4b3c5a2ce9ab349ffff001dba1e6b00","010000009fcc3290820076a7358d6507bb505ee4d035bdc241da01b4f0db6e9500000000924e0000da06b76413671dce98f4df213ac08f2a5b6c724eba99e90b3c1ddbe77c9fb349ffff001d1abc096b","01000000e37537db63783b91838ee0d1c92214368cdc0982026ca43971ca842900000000bfd9217701832f4228855bfa35cef9196adbeb73b9bbeb473147c9ad72357a91a4a3b349ffff001d36b09687","010000001bab207a0a47a4f873ed7afac489fdb0f63db05f0ef570ba49ad5297000000004fdeda23246f4ec9a589bb99a1e4d285ec36ec674ebb1c57a919dc7e6be06f6892a5b349ffff001d2b099c15","01000000d296e500cb2de699401170f02ec910335a516016e8988e7f139fbdc200000000c8380d82cac580f10e82e9b2247fc806ee434b58cf8bf21fa5652e0e29063f99e5a7b349ffff001d021ab29a","010000007a3705cbc992e8c3b66c9bac9ab0cbf1951f88b746a8c9d0abdfb4ab00000000554b3f3e1eb7786f5a9f0c0b04fb14511de4aeaa5f94ce65dec97ffae34cc49756acb349ffff001d024cf63e","01000000cdcfb30b0f334338a5c9e1a08264c10a967ae0718e5b1bc1e53e537f00000000c1a81ebc41b2a7d3e1d930eee1c111e5d46ac3fcb6b0a4d11b04657324981be095b1b349ffff001d38593ced","010000000ffa32fe05c9ad072a97d589301f35759eddd9e0bc5f1018f535b461000000006324ccdbafa112524b318ebd2a6ab062424bda266f41f56f96fb1a302382fb5f86b2b349ffff001d2d9e5404","01000000e8f6a70b4724d718387c234a4471009c68d4192252b50ce4a19d85d0000000009854b5b2fa4556a1ab633866afccd06d84a34ff9d053e997747db7760ae990ba54b4b349ffff001d352e2fb8","010000008b86f47d81caa285691925cbb375dff09f1be5c0b808f35d94b9cd2a00000000a61e3aee7177817e19ea0fd61dbcbd72a81bb90e64c59d7d0c08ca700beaebdb79b7b349ffff001d230e5177","01000000a1690c05bff45dbf06fd1312f92f56677c0247546fab8982426ac0c000000000a3fe6c02e93ee11bfe2287b750fd5aaf39decd0b6708425cebde554cc0ef078657bbb349ffff001d2a83debc","0100000047d2c1c9f881dad52e3019acc3fdd1a1895feaeac6e9b3c3d6e2b63700000000583c32729f31e34a41fb0e524b8d31e6999025971f690c536e40519ebf6dade3f7beb349ffff001d02e58235","01000000b45eb8cc75b3d649212947b3ba583fc53f0a47de441245710eb70093000000007c53a90adefec33d67f021ae11946ca20b1f6acff886944cf3e53b2bd1fec150ccc3b349ffff001d3292fbd4","01000000510d87ce419315194b2eac485ac97489a4cfec90cddb50b7285966c30000000018c0674143e98acca7fcf569843acbe428474bf448213414b3e9af9f72a5f81cb9c5b349ffff001d24d59b84","0100000068fdcec0e7ab2015de90b5b4ade0fd5c934237742fdec69155adb2a4000000008f985d55da42c44b46965cd96aed4387d8aaf8ec414191c84207275fea013abf4ec8b349ffff001d02b19f66","010000003535163951e0d10496016c551c49790914ee28e3641cde34b244dc0f00000000e68a83e58334e9537a508695efff6d6146c54780309f1146d08680b87ae5cdf265ccb349ffff001d270bfbf8","0100000023749bf7fe48795188c37986f36fee666ad8cf57b69c68004216db33000000000af6b36f96cc56dde408fee3813bff94bc374fc4fb31e64e7dd2a47a176466a031d1b349ffff001d36ad2a53","010000005de0fb422e68b469c5b45659d9745c6183c4467421435d00f30516b5000000003a16e41060eead3fc48ef1016246721278967885c70115f4cfbd93d46cbb2c3a20d5b349ffff001d1bf7a695","01000000aef277c0201fb6c6245fc0edf229c7bf6ad0560a1818d8a1471e6e1c000000006b175f5756d1884061b214bc8f54284c6b08f30346ce2fd335b2f2c8545fd6de94d9b349ffff001d38dc0f01","01000000cb76bbb5c478f2b1423c939dcda0b5d64f98159d4ac98101d87bcdfb00000000e3778a21654e648828a334af216ebbec3672a78c7bf17c77601cdae7613d5db1cdd9b349ffff001d53aecf00","01000000291b1b1dfb4a10a046d274ff2108b871183c5b0cca209632255fef9000000000aafb15c15f0b018acc7c1c336b3fcc8a8ff8f78b7098d32b889716e48bf784b291ddb349ffff001d1884d241","01000000eb616972160b51c32ed86822d3259ff17ed0dbb720fab9e3993da9d300000000d4d444b9cd77a9789d3a8b16467c7fb041cb43a6656882e882ba21bfc7456cc831dfb349ffff001d2e5f691f","01000000f3b82daf96fdf8a171c6d12a5f34ee7d34eb921a99c56308fe2bf67700000000f51aa45ca323ab97cbdfa94ba9f00d252445df6bdc3c2e79ee6029cd3ef213079ee4b349ffff001d00bdf8e9","010000004715e9c9bd039a6077305343e4fafe06f663203ec3b817c6a128f65500000000c88a0e4f2662f17d526505292a93eb3f8efb23060dcf182a44206d7bdf06b052ece6b349ffff001d1c5b7f07","01000000ead6eeebe6349a82869ff271a498ad5d7a187c5c99d17c4e431c5b4f000000009be10776f677f3211ea275c2c07d37b81345ff62d0a3b1f1da2a96cb1f761d0acdebb349ffff001d1892a222","01000000e204291667ab676ba356295bd13d60f897416a75424f89515573f41600000000256a6a93d3a4c4121d0ae16a27dd6547fb7191994d4a6c14c32a8d43acdb0c9064f0b349ffff001d2091aa2a","010000001d4a4ba8f85ecd4036873d4205c234eb5684b995a7cb8aac21e091790000000052eb8fb2d5bc6575dde1a1f2e863f5e8688b03d2d00afaca45833d0d316b56927bf4b349ffff001d74d4f905","01000000797d1b69d3d45654b479288f86124665e4cfd63ecbd1dcebdc213daf000000005067f9aadf3985de83213547bbdf7f5bae95ea6b06643b5e20f10b43344bc9f001f6b349ffff001d1d355a7f","01000000b81311b63a29c0917cfbcec020dfae03b5a29ddaf53c1c9f1705326d00000000a6472b8ae5cc4da60d017306d6fa5cdb75006a5dc582381a61d90ce01e5ac6fc1afbb349ffff001d250da59a","01000000ca0fdf60403318d1855e5d478dabdb8960bd4c214ddf568f96b791f70000000023039b2f46f7400535de20544b946eb5096f810864c62662430a775b835129220cfdb349ffff001d1a7f06a3","010000007747dd67e023f8fca5f113bed8b61fa0ae3fe9f77eae882346ff0c8f000000004f46b73b331e76392a064b178ffcf22c7c61ae6c8077b392de7edc4561fd775fd200b449ffff001d3a3dabda","01000000be4e84eb50d2c9ba8a499f43ed5ec6cfccf472294547a95296cfd6ff00000000bddb8203dff2c783e67c437c2cad8533cb98cd35025afb2bbb98039c1fc841fd8204b449ffff001d3a3e990f","01000000fd362c4ccb58b01284b93dded0ea985e8004493cb645cb5b4e6324f40000000032018fc78b0d1c4f35ec659c8e7cb052d9cde70176e6fae4c4198fb48f391787c304b449ffff001d2f6a8145","01000000fe1c6f7abac9a39987f5e6299d257a5043cd259030dcacba493a169d000000002374b0e4b3abe56c36ffcf7d3eed97fe51f98ac1dbc940b14b10aacd36e39d1f7609b449ffff001de01f2313","0100000072b4124ec2413d17e9d5e1b9e01583251bf7c9a75635f937fee9ef5b00000000c546c6f8fe4e42611e398326df74cf66fdbe97ea070256d836f65397db8578643d0ab449ffff001d3695b96b","010000002351d7b0adf0fe053d6557b3ab31d29843cb2be9c5bd76ef84e4bdd90000000009525dd5a79c78adc74c6e2c6fb6c4411df2ab5bf3d10fb692081eaccacf13c9390eb449ffff001d2ff20a5c","01000000f78a650e70b8a3ba2bab688b6b819e545c869c8aefa9b9fc9c143f7c000000003c9fb50477af3b1380b22cb125a5593ae0e9b444944b2ad88731d4a0b8d99795c111b449ffff001d86874901","01000000fb57de18b1078e2fe6663532ed1a18308f880dc46075924bf7f461b900000000d7f98b69a90706f514ce97b01d1b5896f5a40cb6866ac044ffd80958eca3c4d6fe12b449ffff001d03dd57bf","01000000d72c33a123ad98115c9bb84b5b4cf8c15842a3fc20b9a84f95c03df000000000f7bdf12e1c9fdbfc4a4a7211fee64166ee29942bc73eb6c203b0b033e01a9dbe1a17b449ffff001d32e3d22d","0100000007dc9a7efd1abd15d51f308c91122a96a3e9aece78c15905d6300f39000000001e12fc0323542ca10a3d54489cf0c88c8b325baba32b7656abf9e5a068a37a43451bb449ffff001d214baecc","01000000a678dc8e9343d70e1231cd1377dee3334a54e35239f211d8c84bd5e300000000a8599a069aa3e3eaa7c75f5943619a243e678cdf2e95e101974bd5dcc3b23756951db449ffff001d3339cbcb","01000000c165fedebdf062df9e3cb0c5f3b4f3094a66e31db95a923c17f9a28c000000002b7a5d62125ae2904e119474b019a41e78e64cec56be17060102c0c787262b210420b449ffff001ddf61a405","010000002f8db59a8d2141dec485e46806e4349e700a4dcca5a0389f00fbee7f000000003ab683b5b3ce2684647f4bbe06354c1d8a15546387dd66348c6a917be2ce96f51621b449ffff001d282d3dec","010000001aec3628ecfd01861b64d3fc85e174eb487b996918f42f39e2deccd700000000dac874108ca86ac45c1f802810c01adc994510451309d32064206242ca06f678d922b449ffff001d2de363d4","01000000aa2227e07a0d4cccf4a788c05473a989180133c6236c31e2c1c7e64c00000000bd6362455c5b33b7eeae21bebd5f1b619de8d5ad32236309328988df907d7c333027b449ffff001d347e176a","01000000b505fffe07234f87357e5f37c04d5310c5cb876ce845b1bb3d5dbd39000000001a391ace602a476a0f4854bf3ca17ceba6cf73f1540d6bcab58369ce3e2c0654c52ab449ffff001d2bb0461d","01000000a58a1e5d9595f9bb65d673e84f038a90fd2416167e1061ddb411cc9b000000003eeae0a733081b91ed83267035c6d809dcd3d6f09e59348aa0aaac6198ccccef782eb449ffff001d1884cd14","01000000f6f61b61d8899920ecdad30007a8616f7164a31cabf6aac4a54e6e33000000002a6c862d951d421879b70617196ac7c82289541beef9b33c1f5ddec8a827137c4634b449ffff001d059aabeb","010000002da9da01cbbc1bcd8b01ade29e590e89fcbed511f9ca75861063020500000000a4bb88178087d0bbb4a702b29d00b42b34386355c45dfe51db813473c57a371f2638b449ffff001d16217079","010000007c1324e0654fd267df0f378ddf322a7c49e60c25bf76d388ac39ab5a00000000eed48b0c0e2dd1036ff065567d783b3d3c8064930b55cee82c2ea614fce76d7e9e39b449ffff001d58400a07","01000000b55e8a750de4b9d0fcee2d4b9f28ea85faa41561f61360089032e32600000000d44819439e464e2725c6980e65748decd7dd8d573f58de210b076b3276a2a61a1e3bb449ffff001d39507ddd","010000003eca271ce93fbfce284f2c612af74224c94236928928989148d19f3e00000000415870e1d2e749eeeda1be3979711f4fd7c94c1bab6e62743aea17418a1e7459bb3fb449ffff001d24c7f292","010000003ad2e162baeb948677dbc7f5061322a58824ab9245f9438f2e0561df00000000f0440bea9d70d58e9b0174885f72bcd4c6933cf31845e6518767ead53f1bee10be42b449ffff001ddc15410c","010000002ad60f8871a573b7e13e0b37accce534688bc91e043161d709ae112200000000fb27fbff2ce6542774052a3f0c2803546e4b426ac898e452b6cf74c3932900f85143b449ffff001d1cd287a2","01000000b144d8f6c4ec8f13d6807b7644f3d3cf2a584c4227167947b06d5b090000000075c27203f0d0881c9d2a74639e253860b424e6d4831fede84ab202be550513a2c943b449ffff001d6cdac201","01000000f1894ec8050413e3ec20f0443e6daeac8269badbe3434831d6cbad3600000000b2040c416ef9a9818b9a9ee5f8e9969492f87a78feaebb1436697fc4b0897d7c7b47b449ffff001d3704f945","0100000090569a5f72ed498ff41348348f7dd179d817e4d41f5a40d5edc92a83000000004c48666ad7bf59d09bc52710d82a5d238fe8825bd099fc5b82530cf7bc6283f12b49b449ffff001d34d34bbc","010000007b578cc5e2cf72400b1b06fe7dcd4fd7db17ca75d7d66f02e0ec2852000000002f54969f52fef368f4869202bb20cf06fc7df5e2fba86853fd76305e59ec3d4c9c4ab449ffff001d39d86488","01000000d3b78ee4e84b2806acb1a961121154a741e93665daf99999e4c54d9000000000b0b8e833afff6f07843a2babe2e307b9b8f09379318d11310931aea0670bc260404db449ffff001d2ab5cc10","010000002cb028768a35e745d8379f171091a9affdb9816f75df07b48b4b72a800000000a948bf4d05d34adc482bce41e3fc5291abb02e86278bd365b73d0c92fa3d19d7d350b449ffff001d246cc6d0","0100000026c793f8e08bb78bcdffc9f812b5d99c4741d8af8811bf19714f2d3c000000008f05850d277293e7c3c59e462964bd42af43583f9e7308268d1f4f7501420d38a954b449ffff001d616ea70f","01000000969bf4e3cc877bee2c0b7973b8a4f188e1115bc201405249701daa29000000007a7d1be8d4432a6b2f0d4c71a9fa832945a50efba3d543a2b69b3dfd13f5919d1655b449ffff001d18d1bf6c","010000007593e0ba667c912be3fe95136476d12628ff37bb7690957d236cfafd00000000077fbdcd2c45d70e16c86750892cde23707c3d29c5972fc4ab0b1be4bbe2eeaa0858b449ffff001d25fe6435","01000000c8e5c19630324a9d795e8013d4f845520e81a59fccc4bd0b890a0c8d00000000ed42c14a245747570f9f40cd9c1d035a3a79a9932a10106e01dd2e55eab1a29bab5bb449ffff001d63b8dc11","010000008cf24d57cfebb9753c87d7872a6a70966a17503be003197b313aa7fc00000000c96f1cd0bce17285c55ffa9d102656c580478609cd01b7a2bd672d4d22a8c7ff795cb449ffff001d1683228d","0100000091579b1d989425e69ef2b4b581a1aa7b34c7891b16756fac4cb6f15c00000000458107debe6dc9d02cab48f89fb0a3029c61fb200a3f23e9379751be582b4c877560b449ffff001d36919875","010000006736b95900163e2c4ef997e94b4ccc69ef97651765b18b558a01bf9d000000008309296ec7f0d48be00e4deacf7abbce2c10032359ae45822de6adc827f74e2dda63b449ffff001d01f682c2","010000005353837a94fb276a7aa910afcf822dff77374ff6e28e5a6ea016e109000000008cdc4999606b921f29a77f74c955f18c979ae8288ee2453fe8d6e506f6ed92ee9f65b449ffff001d31eb66b8","01000000d5b6567787f186011bcbbf139ac3cd75e6cd01bd05283249dff5432a00000000fe65d66d012763193c6a2ed42836dc3c6b54fdd3add0e009761da931e5e235ecca68b449ffff001d0390568d","010000006e8a757725655d157e74712cd614a2c1f27191dc216a10049dfce624000000007c0489966550ba40f2b4084b75f99afdc12ca733bee90ee00bae5949de2de0ac326eb449ffff001db0e3ba03","01000000074fad26934e5b9053545b5aa4a6a812260691dc95741e796df4836e0000000055404437d341935b5dc3193656b19b28ebc0249f240d7c6e86bc00ee520ee1195c6eb449ffff001d04f8c2ba","01000000ab1369ee8b829d952069746bea231f1136678ec30116390f0d6731670000000093624de53e57380b77f25c56f82a6ada76611d04074a8cc19aef6fe4d82acf7c8470b449ffff001dc11c770a","0100000088b2b15a51aa2e3b0252083ff8b271e1b679e147bf24c630d18b941b00000000cdd0485ea8a6250231a65a4a434263ea1aec174e1250316529c3ca7a200e6cc1f571b449ffff001d3514b059","01000000e2b38693cf4e68dbc7f2b19117b701e2b26051653ccb2c026d5713e4000000007d47dfa554dfa94b435dc01a87e39f1a91e1f12d6435e9a5abd9d59f86189e110274b449ffff001d372c738b","010000006685d3c9d894eeadd70fab82c2242f9a6cabec11dbc52ed3f61ae7b800000000e71ffd69a989dd4ef3fdaf07a2debc66a7d25d6779834cf4a68d27f5026bcf7f1f77b449ffff001da39fa90c","010000007453e60690cf60568d749d6e7075d98dfd1118eb532c1085018d9c3c00000000821ce826d1600f80ed6675a4e6fb6cf2962c3dbbdcd2b37c5bf40a02cfeac362d279b449ffff001d2466d5a5","010000001a7074ef65120bbca87201b5e4badb540fdc567cb33c4f51497db39400000000ae177a78856593166d33c59f44a8f782be5d07932bcbf49129d8dc7cc1bb32ecc27ab449ffff001d79d59500","0100000036a1b3d06521fe6f91fcc78fc9c2b204fa1872a1cd689283437b303a00000000056fd13f1d36821ed51a41a04b6333d1fd56a61e5e37dd5286da21ee2d4a5bd18a7bb449ffff001d27106803","01000000bb77a507452623811ee63198d688e10ff6225d3d34ed379b5ac8716800000000e8ccbfdf24ff2ced8d5164d9f8ad6ffb5c2bff85b183d1aa1db66d1c6a8bff98f57bb449ffff001d2379a3be","010000007d903597337d20acd04de5cc41183a3340b68c8c99dfd5a2494858b000000000617a07a295f44f1f01dde669683b49027e68a0f1948d688108a5a8a26bddc38a9f80b449ffff001d2c5cc2c6","010000002aa5027bed33f9d76fd7b48ea23617d72a81d9d2c2a6711e5d6e318e000000004609fc11d7a812df1c24b0629b47eb561b7987a7cbb22f07c0c3494995d8a7c91d82b449ffff001d34c842d2","010000004e8bbae20e29e8ac1a6c243fd59f6d2b937ab6c2237f5431e2505f81000000008d8ce112f6e50d117b236497ab2bd6f8c2f345498ad1f9fce850ba438f41f57d6385b449ffff001d1b226e08","010000001283cc76093c5fad1b49966754a4e5ee2bbfc2fdd7d38881087d7ac400000000336154ec95333d2c610519e0d7f9e21984e82c200687708b81b48d7a34b5453b618bb449ffff001d17706105","0100000085a710d4ae562d9b69b4908ea9df5c93abe3069f39b83a99808f09800000000094bf612bbc60b86303f5d5a5a23fe049f5096f2b5dc1e5b2523a6c4b449140c57a8db449ffff001d19f55148","010000005163596e1011be5a3e360b223a2fedbbf0915cbbcd3c0f291d5c98b2000000008be81704c0bb4b1dcc922d1103b54ad6e18236cbeadb35a713c11521acdf60c67090b449ffff001d1f914d01","01000000b5c799b570b0415d02f184ad724562c3e00c4d037ca81ca30ed22eff00000000e60288953258e25e2515f450e8acc8529cccbb2560290c33499a5453ee86f2dac795b449ffff001d23dfde83","0100000085c105214b3f7b7bde3582de5e4a7f96d4b02ba36ae1a23ab975b4d4000000007cefb763f5133c753caa1b8cf9741649d12491f6306f1b53cafea7ee1c15da18fb97b449ffff001d1d3b225c","01000000d8d6c91a4716fc1e2c2e5c7cf32eafec86ef4787dbf5f3e934ca98e00000000018a9607e86b1201fe0c3449bfddb9b9dc008de2be66a34332c5ca4be68832b03c49ab449ffff001d186c8d59","010000007d22137a519a53359450c3d322f2240335acf36a86b301bce52cde9c00000000cca9d10eeb8cb4b4354812592660c45776085c94b7eaeb0f99df415b882e0122399eb449ffff001d27d3c1f9","0100000031d7b769ccd1febb330146c0bdd1cebcfa0d3fa760848fa531000b8300000000d136127dbc38e12b378025dc30c78065d0c48b04fb897d1f46068d01b018f4f0a9a3b449ffff001d014c338a","01000000700ace25c97d9223932da03351ddb6c19b8650245815d658aa1e2efe000000009685347f0fc7ff07884c7dbab8115481f175bc77cabe37ab51befac2d6daf370aaa8b449ffff001d03edd88f","01000000b7bb0aca185af873895775de009c411da28f11e6820f28d48b27984200000000ebf497d9915f800831f6ca32e77242027c72c16705c8986a9f8de85552ebaef5f1acb449ffff001d02edbf9b","01000000cc535b5c19e89238fe8feafb59d8de48f7eaff6432f06ff6f33c958a00000000806b41b43e005bc14bcabfddd8c11414ff5562823efc63bca2b1f871b387bc0cc7aeb449ffff001d318cd424","0100000037533d44e276ae0be05bfe7482c98c983f42f9c1dc35c1fd4ec3de6900000000bddbaea85f8e8c3bff55d6c3a15bddf47bc358ef5767108774d79afbf90eb551b6b1b449ffff001d07675a57","0100000065eb8c6a43a21bf16ec2ea0524901a8c0e3f5f20c6990ba0b2968d3900000000bebbb269a240e4a061d51a46ff1aada50d8824cba9599d4c093b5e71427282636db2b449ffff001d34fad502","010000000a51912f83090e147f4cd0de8ee740674a5e03d439ec800106657c6900000000ea93248ceb0af458bea1fe58d0258c10ec960ad7c1d0a4ad57ee6821bfa146435ab6b449ffff001d354531cb","01000000c3c23a7dfd908d2be628c4c9a208c3fde6c2fb7f9f011db85d03b60f00000000947ecdcd3cf5202f9b4c6df059174240e514d84a2b1456b06dc145488efec63db8b8b449ffff001d055415c4","010000007881b23d3b7163dc0d842b7024206e90f5634786fcbcc25b57fca24500000000f6a96a80591c92bcc906e2bbc27dd9f046c35207e515525b0727edeec3cd35e07bbbb449ffff001d23c1e301","01000000840c3b0c5526f127c5ae6c706935867a6f8858810d01c1d05fd60a5a000000009e67db0b1c76dac4dad4e1c18bd3b96883e5e690cdc323129e9ba03855b4622b20bcb449ffff001d5620f602","01000000a3dcf93a7cf921eb87766eae57a2df7c35743894671016d6b6bd7de30000000095f1ffe6aa07d108bf69c2f42e303d76d24695415c5b35fe705f29786e1c9920bebcb449ffff001d7d637a02","01000000a0c39f86995c2cb286f8a73b1d107d0c8daf8cfadaf3a6166faed1630000000090c45771a54e2f3d2136dbaddb07d443c75fa313a9e03be5e7f38470d9f4efa9e1bfb449ffff001d145eb371","01000000e17e55c9be37fd1ed2a387e0d574d058d2024da3c772b73385a9f8a000000000b24da18e70a4f01e69268c58ce120b7d5ef4f699c697397315dfd90ffb7b67baefc2b449ffff001db028bd06","010000005d4ba97023193091c0974c6e327c8a6837aa2866f1f1fbb6ae61c7b50000000087c5625268e2f6646d252e564b4b339eb436097fdbcbf4619595f10a4e5a8bf6e1c5b449ffff001d274aa61c","010000008af85247635c0652f542280f7fb98254eb0f0d7980b7fa7226e9c177000000009b8e5d16501a65c1fc639c0ef5451f7ed67d8f25e12d7870744436c5bab5177d42c9b449ffff001d21ddcf7d","01000000e43498d9bf34a3ee0594a475613ad836d94dae9787f5671458ae41dd00000000516377c4c14b685a0eb066350678a0b6781d474ee7bb26529b0722951fb7439e7ccdb449ffff001d3a93c4d4","01000000be20ec711f91f5f0696e4c7653dbb916f2a0839bad1ab0a1c82c64ae000000005bbaaff327f736060ca8fb20967a859a1789e7c3549479f56cb3f418d35e36f2daceb449ffff001d9c1e9806","010000007839581ea8b90605ef36fa686607c841c2f39ea7f66b707d1a44e75a000000003c9615220db24ed669991900d00e2d749f3e001cfbc62bf9bbd98eaf727b88b121d0b449ffff001d18f92fb0","01000000b18436193b6003fe69a7013472f36e4dbc746b3dfbe1e288b0933185000000000b26843be00fb324ddd6ed945b15fab3b49c4257f44eec75bde77a6d43b54ad054d3b449ffff001d383b32db","01000000580adf8b06cf1591f08ff969ec5558fbae6f527afb7dcf0ea83317ca000000008e0201ced0dbd69d71839b5b4e278c23204f6d1e1b92cd1c56fe1f14393b272437d9b449ffff001d1552f0b9","01000000c79fa107ac9cedf41d3d27c552b21a1b4aee7d1435a414662ff0082c00000000af2ebcfbb9bf11cdc3899a098e8664dcf68534f841190a9f6e7747130454fec386e8b449ffff001ddf081105","0100000040c4629df1b5564136e2408856e2fb67f72b238ff00acce8fa1c12ff00000000810c1b56d026bfce8822abc3270d60223ffc84c5065b93ad3b8b0a2fcf3ce220d4dab449ffff001d2f111268","010000008b1c071fd301e992fbe7dd9d75fc321057cff8a6d763545e0fcb7db200000000dfb6e89e4aec8343f6be7374a75e1509fb857dc3601aa0525df7c7c22b1f7bc598e0b449ffff001d33a8bef0","01000000823275deb60ce69eaa42fa822dc5c1efb67f812a78c05f23e5bf2ac2000000002ea2a7d200431a9677d178dfb955760ec693ee68bac67a00a25fe359182475e4b3e5b449ffff001d92e2b807","010000008c0ed5eb0ee73270555b53e41acc7b5218ab30332ffe0dd54973ca4b00000000abcd9b7448cdbdc6867681fc3cace78121f0d1cc2e2a260130b5d48f6820b842d6e5b449ffff001d203b1a0f","010000008eb8d8228093db51ad05eb8f8232f4fb3feb70b04513ef568af2f878000000001e58396446341ff6c4aa035ddb064f6cf65f8e80bd5fda95e78f3152b13c9d86b0ebb449ffff001d39b85b89","010000003cc296ef2542f6a7412ed2361ee0e86f87550bc2ceee1bc232c805aa000000008b092c02ef124c9292227c28555b259e7a2cbe668488001a4a44b095a4e36e92a0edb449ffff001d04fc296b","0100000001a7e55de15811bf8a3d23e02763dab57674ebf359ff10d8d31edc1b000000009649a07b6aa6298dc43631602eed1a71250cb55177a1423a2621c0939ada97ff8ef1b449ffff001d23807b6e","010000003d6b1345dc1e11d0bf0cba72d17f0d800824d8bf208f2cd6bf7f19b8000000006179e23625d08b824e36e4fec05164253c17f3ccf80e1780210dfcf6ea6f708008f6b449ffff001d208fb92b","0100000096865852ac07c70fcec4948fe780a830299c3c0aebadc104ab0255d400000000ec06158ee245bced4ea2f20b1e48e72e19f5f141d8baa508bcdc3dd87f5e8a4aeefab449ffff001d13dc20b6","01000000a67e4b05e0f9e9be99d3ad559ee5418e77261086d09ded9f366f6b1e0000000013469923bad6d6767330727b83c15e70675543246eff18fb155b8d60a13dbe913afdb449ffff001dcf6d1505","0100000091cbf95c85701bf73c737f3c773b278612fbd9f4ec747f33a51cb27d00000000d6633db197896d5de688a6671e1e0f19c232b5d427a20482a866ca1461716d5e0dffb449ffff001d052a6a98","01000000028d62a92d10ea89f7cd794d770f29d498520fba1e08d0cc20a9738f00000000e33003e121b2ceb619c0e12a15b63bd660c1ae07c3f7d7cf8c49a7164c21210ab904b549ffff001d1a8308af","010000008c6c89d6d11e0e10123b93f771b63b9f5dd026c5fd298128cb17862700000000129fc9f68caff5840cfcc028d09ff58b3343549124eee7363a00d4993b1b5ad81807b549ffff001d08c98618","010000003998862334b2be0e594a2013065d8b57ca8d66a81f8394c0d3cba40300000000059e350f8cbd6ad334b13c1126a7275b3ed4c1306cbde5cafbe30bf265eea8ae4d15b549ffff001d31fc7900","01000000d876ab2b745aedf891df4531a5f27d9cce1474eb90cf4e97e627629e0000000020de30aa33f1373793417a0fc37aa9b32b95ad1e0c1ae35cfecb5e63cdc61e41d20bb549ffff001d1f8e19fb","01000000bc830de3d6432be9c23b9244d1f8ed40709295f67c451c2975a82be1000000007f88fa8f96936e0390e63f39f3947c6f9f13dad8ebba70ead1f3f4e2dc9ec18b3b0db549ffff001d6349a506","010000009ff2ce4122b6ec9e1b6ebcc46ec2a4ea129fa86ef7bb48a11784d5c0000000004e48bd2fe15f9d5ffc2354517f912cf1c59b81d40eea6dd713de8ca408b112cdc711b549ffff001d3922c127","010000005d27a2ae753e22802ddb8817cb78a83c906256ef61164ed9b03c1f6200000000a8b3b925d6b94ea70a5f6d3686655b1330a4e413e8d1c8949bbf3c41d9b68b4d4712b549ffff001dc1d54200","01000000c38c341fa11f947b781132ed9126cd0f95a3a6995957cd6376e7a25000000000e62662039d6f3d771d7afe83fa6f55b8779265c89fcb10250245a0dbf7bb443e1916b549ffff001d363c2139","01000000b02023d8eff9eda4e4972c7710b1b3e5ba29ff02332d55494048c21b0000000006d3b2e646cc7365ad8a3f9efb1052c10eda639c1c08a7b8a4076bf019cd9f047918b549ffff001d52b85e0b","010000008627149262366312cd753f1e83188c1ba98d074d9adedd11cfcf617f00000000a9add55bd514e3cacfe87deae6e0a08bbd1d08bd526a9957117da058a5b7c2b5d31ab549ffff001d7f77b509","0100000066a7dd91addd81082e1ac23588c1fb9c2bb40fd9a273bd3d1cfcaae5000000008c28d82510ad811d45926876a7b404828254354f95c155fdab68d09c17a333b4fb1bb549ffff001d2346f749","01000000d797323d5daecacabdb33c9d642e797d6bf365d4745be609948b58fe00000000f38fd1f5dc4d0fde7a6cc60726bce7c3b239e0056f6f9f398528f7fc1fbbb69dd11db549ffff001d35a446d3","01000000b6b2d9abc710725108366e75477ab4a8d1a16340579934c48d63ec1500000000df651e7143773ed4641a3bb2688e8e0503682ff8b353907a0fc07a600c283e51fe20b549ffff001d0039bd69","01000000db4eee25cefb012b6f81a7e498aaae7ae05f903e5e6fd4e6b71848d0000000005f2c88c4816404d019733d26bb06a0d10ff12d8588a3a0aceaef30ea05a76713d323b549ffff001d03c1d0fb","01000000e23c47d9af739a9a1ce0543b8d5ceec4451c86a0804b21b7cb9001f0000000003b379c66be5c6aab73963553ebd952ab2447703fd7c445365c958a15b0e7b18d7f25b549ffff001d0360d75a","01000000bea1e4cea1ac1925f74e8a1e305ae9222a55e5dfac407bb7a89b5beb000000003bc6780c2becb69ce0b96665f6fcbfcccc8b730478d1bad622ef3260115850f69828b549ffff001d18d26aaa","0100000003ed7a025509a3adb53e6c7045e58e888070739452478d96945acf34000000008c0a6be51880eab89d44f7d052a33abf7164e15130f9a3b6911558c56c262fa26b2eb549ffff001d340666f7","010000002d862f5f0209f7a1b7e820c29523111c63bc159045f443d233c8022e00000000591108d011ca224edb4c764cbd03286004ca7947d68511cbb0ff2aa8cfd48889ad32b549ffff001d3013b11d","0100000042cf0c95c9f21fde8dccf985cdfa607fb8f428d08d93319ef76163ad0000000098657a7106a7787e4e9907fbc09ef3fa478e373628a2214a8d0fc9ac0293e84eb136b549ffff001d2dc8d425","0100000013856c4fe61a6b3455fc04e83f224c5fdb6b9232a3bddf696ac1d63d00000000300bd5c04fcb3a16687a9ad71ed6c936b7be3fac9cd19933672a5bcc5e3136df9e3bb549ffff001d2fdac9c0","010000005468a5a0d46d9f698a39d5f9af5125d1526b594eaabcf59995cefeac00000000107ceaafd30361eac35504f6f02a5113d3e71af6c650faaeacdab7691be753c93140b549ffff001d2c73d297","01000000898e7432e4f5f6567e352645973a9303ea626a040c9071dce294a07600000000f38cd0d26033b5aea1dc40f713de96f92ab724b225c7cf4f96e2b931761f814f4c43b549ffff001d374a5262","0100000035aaa9c4c5508e87b99d4b31f6e7948326a7312e4b1af65a63cfa47100000000e363377727f81b7e10904fd2ba7463f8859ddf2816ef81727a5bff946337579efe48b549ffff001d36898f0c","01000000c9eb2441eeacfa71950520780bf2df58c734cc05cfc35c4aff5007eb00000000e4f5bb8fd9569381b9ed3410c13345a49bb556c4fc586108ba1736e3bbc6f073234cb549ffff001d26ee6115","01000000db3d8666d15088e6fec2826a0e027f3471beca46e039690658b4570a00000000dbeb0f396c3831349ef884b410d0ae3b228715944c086aed831cc656a0c27b0cea4cb549ffff001d2de76500","01000000aa63bda84687c4e10cfb3f14a81af698f7c992dfb4b04d1875f947cf000000009139ee16107a30872ffd50db3c39b743d313dd5f1b6e0d35018f0e19e547af37a850b549ffff001d1ad784fc","01000000cb3acf1a8d069207cd64b9e44cda82c3b7fdb4811b70f9f8c28983fa0000000085ccedd1cf4622f1a49fc824478d397de86e7733ba57341070dbd63cb27b09aed75bb549ffff001d1474a32b","0100000010b8b2305d563b79ab99c19b66912339e1652f575a72d7ae4bacc4300000000021efcc39616305b8b588b673162a2a50c2b1094fa004fd22ee57e8b5536f612f575fb549ffff001d20df1c6a","01000000b14f6acf6cb0577513272f9ca46225681b211c3f2387ad8d4e6443c2000000000aa401975939730b2d095c1f54a4bdeee314701d04036b7464013abbb9d19ab7c164b549ffff001d2828ef13","010000005efc1d6d176fcd8922e74d7598684e48f284abb855451fe457db44c700000000ba1e4fa0d8910da1eee34e3a35a5b6be568b8e1493e2756298e45d11baad7ea72067b549ffff001d8281e403","010000001a18648b27462ac952378c06fde8e9020c065d334c1a2506d55e9729000000005c1d16e0f04c9e6c3027c7915225d0936964dfc84ef1c01d7aabe38dbd96bd55056ab549ffff001d3063d249","01000000bd7cd756f00550603aa1dfa1851a1b461d1271cc2357a24d7ef1cbe70000000076e3e756fd33cfb5c034ec61915950208b94acbe8844f7b0059fb5b8994cb6c1226cb549ffff001d16765391","0100000036c58f2ba965c61f74590f0c97fb9f5092887e6b34e21e8ee940409a00000000fc004326c5a432d55deef7a951a931e67f2cb4dbb5a125d5e7b6f4f0612bf41aec70b549ffff001d366f9a0c","0100000077fea06a2211ac58016f4a8fe127d5fd2fcc436f9d718921aa6624e200000000ff7f98579c1755073c2fb12c61dd1c773435b6d9c6e4523386940272cf2bbb880e73b549ffff001d3469ea53","010000006b644c4c308adcbb4eeb763e8e52501100c3fb493d16552204fee2db000000009d321be9244ae95d51a26357234a7998217d982ceac358ba26b436eae8e688fbaa76b549ffff001d2916ef5e","01000000e32fa09d9b6f305e072232671acafb013feac8fd8f31313e9a9adff50000000049d1d260f900c63dc192e34782723a38d932b84fe426e6d3f36d29fb4001bf04d378b549ffff001d2c80bbbe","010000007ae7985d388823423d23d86ce49ab69b97d13f4e9d45038b068aaaed0000000041d1be38c7896586d00fcf6939520c89b85c340225666bdf76114a545a72b051d17eb549ffff001d2ed43246","0100000071142d8419313c5c453975a651a1ed80593b780144c4a73f5c8fa550000000008753ed3952bec5e16691ae57f87ec6f54b58596db08f927a9cd8fc1fa4d8b9d59783b549ffff001d087dce2d","01000000f927a6d20b773eeba16ccdab003567d0e11de19beb54a4b3c7ddb8b8000000001bf1067c37552b46b4df8ffa2280e3fd1f011370da4611ebb2c60796d5e45dc28f83b549ffff001d7e07e500","01000000b0f4f962275855ad3dd5f1bc29ffa551f6eada860537bf211af5076a000000007d5bf167d6b67d44e35f4a2acb263ab43ce3e1d57f1beefb3d1752044d2acbf6ef85b549ffff001dd714d709","010000008a16dd4dfe0fc99c63a9ad58b82a326141afb4c19f636bc9ef36dc5e00000000c08cf55d62cb06b91dafb9343dce736d0f2ca7c892c8368475396fff912584789789b549ffff001d1732616f","010000007fb55900898c42f6602254b6ea4cf3b6099e468307ba544da7de1cf4000000004ba55661af04040bc3491f5b09f973bc1e438d52698eeeaa89beb315bb5f1c5d788bb549ffff001d2361b2f9","0100000057628a91186d86d55a4222f023bd20ea7625746050d4e992ffe7f11500000000e6995ad4fef9f54a2506c286ff36761c86c3dac21b0150fc49f50d8dfca7b48c9a8fb549ffff001d076e42db","01000000f92f791b4a8de52bc39f54dd6f566bcffdb3511df041eba1c1056c9800000000bf473b70d3d469d5c172e25292c0ae13aa40c11cc4ffdff6e0d430c24bef3e0f9a92b549ffff001d23892f18","010000000458405d37a4f0769a82e7c6483302b98630d6d2b53fa5a1b171f64600000000ff50ac1cb782243196521095dccf25d01110d8eb7532527c15b2f638549eaab45995b549ffff001d0371c0bf","01000000cfa3c31687301003846d135bf0b71f0a44c5a8864b5205b226bc552800000000ccedc988a1b22d218c10f50a150b93754bd6edca492d2df2c7f2852a7686ea8bda97b549ffff001d3100832a","01000000abfe51c9b87fa5e05f26a32dc08c688b734f4c8e38ef4eed732eb02b000000009ebb967881a6df6c76b80ad7a46c77f509e98e43e5f85ca2dee8f139669cfd3be19db549ffff001d2672c7e5","0100000096d99c4e8625890dd02c2cc5b9b4fd65df66b4b1f6d29dc5376797a1000000001dee4f8e4510e799aaa51bb4bb9b572e172a3821986343482303a27413ac79d5a29fb549ffff001d3984ff31","010000009c920b66a79dabd64065bb1368d1ac96dd8cc90a74f8fe8d9e8c103200000000037ff53931397a6eaba705875a03dfcf61e0fd60c9df6d4e36dbcd70c1bfe2e46aa4b549ffff001d045e82fc","01000000d94dfe6e950fbd2c8e1f2636d0b571c38cc24a46883db6eee2c53ba7000000000f8e46fcd917c0e0443fae021346b890fe1134cb380edbe9a48dcd5530258155c5a6b549ffff001d7ebd7a0b","01000000cd386be6ccbc760d6eb181c09f96f155e9e409f431dc7bb2725b2e1600000000ac847ba0de760c8892549c2ffc2e97055437b6218a9d5d58c05e83cd22ed5129d5a7b549ffff001d08b2f9a2","0100000018140d7d99f6651b4a5a3bbbbbb6e9f7e5bf17d3fdd7a80ef74b606a000000009175a0c14777d20fb0549e702845edc336373bc372e03c8405aa34ea8b6a01419eb0b549ffff001d270381df","01000000faf2d402b387649455a723c726456fad4428ad4258cfcfa249892a0f00000000e192c56459b5736cbd7de4fe8a721490ec52b5c3efd7516682f027455425a9ceb4b2b549ffff001d69c63709","01000000879d17f216b4ef4a21a91300192d5ac82fbdd33d4723a11531989e85000000001d9470598fbc41ef05a69c9ad0d514a01e97ba7266259e737c99720e9fc04f16d8b6b549ffff001d02cfd26a","01000000458643de1b2aa68306ab170271f2d1694e03d53f1a9c0cc907288ec3000000002a09a032bc154c0ce6e2c7ede864abd8c667c988c8db247e493ae48fec800254d6b7b549ffff001d6c860104","01000000f688ebde25e028efc3a784e1aaa455a94389adce7af23586f8938432000000001f0ba9a4bd33e9c0ea346c382d9ff6ebff6ed8a3bc8c18312a709bf29d48c916d3b9b549ffff001d299df580","01000000e9b969bcfab3486e508c5b32717f48890313fca0eda0f3b103e80b30000000008d5db3ab9239eb4c9ffc8f702edc71a726e24b06d501948613ec25eeab9a37ba95beb549ffff001d27cf677c","010000007ea6bee11d65fcc99a18e3a91030d96ac365c8fd2435e880ec05f2d100000000600bb7fa1c92be0985cbaed95a263b0b850994e35dc9b02c37ba5f7387bb1f58b7c1b549ffff001d17f7339e","01000000e556f05617534ffcb7c6c892c4466bbf13353223f6974ddb31b188e200000000d1ced67a4add349faaf234980de934df9c30137c9fc7f6e4284c6db4f47d079d29c4b549ffff001d2a6dbd5b","010000008bdeb5f57c62793229e60aabc841a68ca0887335726b2d54a586097d000000001f450e785fce4107f5265252ae0626a50c1e2a6587fc27b0944ce0b0d1d3a37733c6b549ffff001df6cf6109","010000006cfb0bffd4bec6b169a99070e67d10b94724e10195383e31b569a85d000000007cbf2931a7ba846b57d14699571240896620e3f27ded5d11c0610286fade67ddd8c8b549ffff001d28482813","01000000336716e5266a40eb6cec27e064d17ca9464553f99bba92f0772a11d200000000a9d2a0d1c92a99dee490596ed8157c0376b4ca083110fce5f1e31d41c1cd600fcac9b549ffff001dbeaa2e04","0100000004dde7f73ea71c198871c82d43a231364cb5ffc710d7156283651fde00000000dec4068587007c564f2ab9227ec0a9e38b780955c8198e8e0ef6da0435906fe3bccdb549ffff001d3a2977ef","010000000f68157ab9f4abff47cf05b41baf0c4bca767460c53cf1d91ff0755e00000000f3a4110081b20ec7f2daa8698062f6bb2f0af2cfa6e51ec73e9e590b737a63f25cd0b549ffff001d14f40e51","0100000037746c63a2fc4cbe360b578abdcb800061ef1760042888bda4ce270e00000000a41650dc61f8243166f47d0232ea200490794cfbcca8e206fcde4aa018577b971dd1b549ffff001de3dc2703","01000000fe71a157aadd489bf3453a3e9905dd262b62732204e62c575510c06c000000001a88191b967d0aff1316a7d7057078cd8094abd1773fc007774f9d79da6193c2bad4b549ffff001d79f90d09","0100000024c51ad365419fb1d0bc8867fe6848f7f87c7b7fa578aeff76db6c2e00000000ea5f47b37743e4f4491569f35909f76fc579efe04d1b389503ffc5d91b4f5006aad5b549ffff001d234f4227","010000009a25149ea4046e0e64f45e6c8bb3ddfdc138f0d5e1762c63d56ea14f00000000d60c496bc44dad9598debb3445d644635a72906ff56cc26923a12f083ce31a8a62d8b549ffff001d20004a15","010000009f156567367b558d95726264dfc7ae77a46f7b69762d8876bdc9defc00000000fce645645ef8eabfe9410a7b90c866883c7a27f9ad0f926c1664d4dbb3dee5ceedddb549ffff001d22738872","010000007b64c18b9bc83254fe2c275f3185525a71053bae215b1f9d6fc05f0c000000004ea4a8682806b703108d485f82a693d9479266437b4afcd7cd818df4004e757dcce0b549ffff001d19dc6916","01000000b86592f5d8242d970876719c85e8f8b5ce13eb76f1e5839c378ad28800000000c216d5f5758acffb333a3db280d23d57baefe24ec40debfc83b78378548d9bfe6ee7b549ffff001d358d5c48","01000000f94e7540c2bf3b541e567851c520cbb83288caee04dad6e08f0c21a200000000433507fffdd504f25f4dfe14fb7205ba2eb959cf407d0aa9759c431b79d2c2921aecb549ffff001d245946cb","01000000fe1eb62e7c02a8d5d16f24c4ab7f7adf1677db218689ac9723f56f2b00000000f18b40d4af11ad0171c0f49f7925db3065ac4df6f5885718ce3bbe6fa3b225e73feeb549ffff001d2151325e","010000009999987e0d01e0012205ad06232069ea65330ef585591090e91b9147000000007048dc62c473dd9649997361ed170898b090e36e5a2eb7584c43f8e4ae7673d131f2b549ffff001d2d3a2e47","01000000e2f9208a05b8529cb8c1f327a9683df02a2639172e427e1c42c48896000000008c252a7a8e8888985f8646c692c8ae5f99b701010098f61e7bbd63fdc537373a56f4b549ffff001de8d4c705","01000000017e2079f5a664602e8d35d2778e76c1a4f28e8a1fafbea06f9d9af4000000002556725dd20b5fcfe26579600a6fa50683aa48692bfa8e28ce41f80d3467edf52af8b549ffff001d1584a714","0100000050a3380880e289d79f0a04e245c86856c6847d7a56d6a5e5eeb77a6100000000c9b0de72c16948f9f2df09c5bd7d18ccfdd5e71a6e0f898a62c56c006a87baadc3fbb549ffff001d048bcd12","01000000f2ddc65e16c074e10419158dc8d86c94aa1ad9db2a372c81e0bb8bd200000000ba386c4565c3b3f1cb09ff219b187023a3fb44128d3d93995d44157bc936b4b1ea01b649ffff001d09ba8653","010000002a8c0b3ec96c6491c7bf4a80edab5c7e1e932ee1ed0bbe4d13003188000000007e8a4ac919728f097cc77d38d15aa8ecf750ef2fca809a50f63f36705f805a15d103b649ffff001d2121ef36","010000002ae0f5744108a6d1b06b96ed6fbd0b87f6f3b8e9a3ab1d96c513be0d0000000098dcec4b33636f9eb8dbc8baad30b324a5988d148dde3ae12a069c3ae63c76ce1207b649ffff001d18846f90","01000000ec60cb01a688d098a626bd5a9e2fb05288aa30eb1954fab99bdcbdee00000000ac094eed2a0540a20db695f92f52c8ef351218c97b873a9f38e86069db0dd7213c08b649ffff001d35beca04","010000005d4d67a7586b8f7208849aaabe6056bf22d7e5c64cf43ad957af364300000000b4dfc9c78283fe8fe39f3634c5dd37dc9caec03dfecd29288dcd031de3d68195770ab649ffff001d17f1be65","01000000e33e48e41b89643660c27273cf83aaa95934e3c3a55dfde7d84ab811000000000acb34e11a4a2732ba9177a3821887ba890af155ab4478994222fb4b961bd77d320fb649ffff001d227eff24","01000000c9079a0adfc802d56e0801d82d08c6325b24686a10d480a16b195c8500000000b1e9980c5cdc9cb2f2237444ac3468518ea8db4083efb2b294bcd99e436506c51413b649ffff001d32d60f88","010000003e6e48525f1a833758d28e7c0a23a34a1af209246bf1c217b7fe1cd700000000f6e6ac5b6451e8ab5f9df1a2c044416626870c94f470195e39a30e0a1a965a682915b649ffff001d14873b8b","01000000a03b1d1a3e78ddeb5b61d4f06d8837cf745b35e1bcd5454d562bc29a00000000463d86a6300f26ea537cca811dbd6a9f7c75daba34b5a99e87c7fe1e62075e52a41ab649ffff001d3067b8ca","01000000c8fc6e8852b8837f4c901353c1bdba2bf15be269c834ec9e65e4f2fc000000004962e588a88964f7ee24053ae259f25b379251f0a5133c30398383e008f9b7d0231eb649ffff001d1a1bbc7f","01000000ac4f8f4a7bef9e418bcb1e16b5859294c74f916b5cbbad9c8e5fe07600000000f5d74574b0bc8ebf0e0b03cf4152a75402d207425bfef2064d9653633746c51ef822b649ffff001d2a7b4c6d","0100000020805dea68001a6612f7d78201e06e62c7cc91cb81bea37ac4006fe3000000004ba327f0d3517290bf073d2c57d492a8acafadf809101a3b91e3c73334b75e44b628b649ffff001d2363b98d","01000000f13f22cdd222686793a7c12dc0833f31d406363dc4bc0be01510328300000000f7ed7281f0525dc23bb6f4d3da514e15ee25e20c737456c40e4cae08cf7c81cb952db649ffff001d1cb63082","01000000ca8bf9428e8b4e84866188042b2c8cc4a03805a5cbdd83234b467f49000000007942b8adfccae7f2e03861282c2b0a961c6d7be832f9159787c7ac0e774f00c5ab30b649ffff001d30dd4599","010000004685ebcae89dd41f11014e19bfee12b06ee0545ecd7d1948ed8d1cef00000000de3ad1c1b7d23fdee684db7e5d4b6f77a137f2bdff123180504f685284cdfedcac35b649ffff001d195da855","01000000e679301cbbc3e2bd6cbad0a78c9d9d432b2b585a112a9b22571dc87b000000006dcf25857a683eb1b6d20665981e6a4a0e4ff650936d2fd139a163acfa7656445f3ab649ffff001d00ce4a0e","01000000dcbf6d9835804226841c30343865a62ed35bcb2c571919e25e74529a000000009002d5b9d91b97038e16d6759598a26bc3821ad84819cf940a1d260a1a71d7780a3bb649ffff001dfc9eae01","0100000032a260674f5feacf7c66a817044d863d8f17ab22e9c9f280a3a1f2c600000000a7a90d45cf92ad38a72c3ed29fa210ab3ee800c094540fe116e6fc901fe3c7a2c63db649ffff001dc5e34a0b","010000009f425915fe9764ffcc8ff9a5977560fdcfee2dac830f17cf0fb1e6c6000000002a95bfa2038d8c37dc38eabd2202414f9d714a1ea39dfa1bd9e783261bc2d5405140b649ffff001d22fad5d3","01000000d37a661798a7d2369f437411b27e6c3597bc9a967d302f37cc71c26a00000000981023213873c1fbd9a40914357fd0eb958e233a386c373048900ce7295cf4f62342b649ffff001d1e318aec","0100000066df311102756db2d9ec01786efa6b908b9ec563ae94920a6c8235bb00000000d7b529373f08dc3d90d6711d7e19fe08e13a6e7b7124783ffe30e180854167c66a46b649ffff001d1ea09d3d","01000000655734c48e1279732a5ebc6941f5ecec2a66b9fbfd5d5ba55fe62895000000000fb333ac507ddf5df073a5e5cc6189211ceee113094f48e7da1dd362ee6df7d6b74bb649ffff001d05b70001","010000003cc4f289ff6e19e7ddba318de1d56a0468ac2ae71f574a54e7a2465400000000c1c263958b1625038fc5291525ebe3159e705a5cfdea7bc8f0aae9dcba3ff7ef1f4eb649ffff001d3564f902","0100000011850e111189ddb84abcd977a1ca1be6ea2afff4bdc3e36537e9e32000000000509977819b78dc84e2b3c5dca836aff1173108f1fcf506ede27b805bca785f092a4fb649ffff001d21f8afae","01000000d829c21dfe9ddb4935ebb6259a01802eaf144a9a3aea46eb34499be200000000893ab1ecf1da18d3940e53bfba4b37af071362f787a24b8fa9f21a0718353bab6554b649ffff001d0048699e","010000007611f563cc68a3754d8ac377e55c67b793d19a31dd6d6dff578d87b000000000e62799dacf91d1123f6a3379aad697773bfa5cbf09b8f9d54cd7250e9c580818c055b649ffff001d3467d114","01000000d112aa7d63d459b8b9ebfe9d015245a087d262f1ce66cde6725fc3db00000000b09e44eb3928e2a90e99e1cfbbeb9144165ec9d8eeca212760ffa43f2e584e8aad58b649ffff001d08052047","0100000056640579e7343fd586837e30954010f2867d592fb540d20e9f016d3300000000c149ea82cdcb386812bbaa2142b9e79e8074557cbec2d0f78fe6eec3cb2c80a35a5ab649ffff001dab3fbd01","0100000078a1df66ef749cb201f5a5028daa21f62273d85fce64f90fecab22910000000038215de954f1bae918c70556eab1ead005343373bf126f50ec9a20aedc5a3913d45db649ffff001d25e2a2bd","01000000c554aaa617683af6906962b244df113a83d33cba07c9b28a631c56b300000000e42bf3f6a5649b00646f6d1cbdafabd731c544546b0781ab3097ef5518863511b05fb649ffff001d3209db07","01000000b6351104363e90ea6a95b2dc27824c5eaae4fb5b3aa8edb67b61556400000000338b0717df9660c51d22b842fbf39985d2ecb694647b5381b37a1195c9ca863c1f62b649ffff001d04859d06","0100000087a44cb97e99bedb123ff5003c6bceff223170b5ba282ddb1c5eeb1700000000ad5d79cd1fd249869c834d0ac8c21a7f917af5c5c5d4c025e335a149d3b007466865b649ffff001d35b24523","010000009f97a78e3f21e52c569aa973596c1bc67f14361d8cde4a4b15b800da0000000099c09458764079fa3c7951a1743a4dd700d1833d998212e9e89b440925e507632167b649ffff001d190758da","010000006d121213f041c43399026ba806ca5cf844bd86911bab3bea192ecf9e00000000650cebf1d06a79d9e50ab86ac6b62b4ded2afec5bc2b85657860778d2b6b90db7269b649ffff001d1e3fc147","010000000896ecffb0d91974d56dd24c48c52986f4b2a4ddb64bbe9a6411ed0c0000000021b4bd20e931378c425fe4be03f015cfdfc161f387ef309bd642f85b412c95fc4d6db649ffff001d22600d51","01000000163a8b84fbe439f3f379482a992570b8f8cfc23ef14c52f56cc3a0a300000000e00f10edc83dc88487211f0e3bdb28bf1afaf1201ea1b4189776db9fc85951d8086fb649ffff001d8ce4fc01","010000008a5974a37645a194fa3976dd19b7fdc8575b4f948a436dfc714cc4b5000000006f81591d0d02ff9327864bdfc4bbd43b2cfe14cb481d455d03e058f9cc103f314770b649ffff001d357e01c8","0100000042eba6be3ed60aeb91c76657d1cb7a35d16631751980138c10955b54000000007dd509a1ed02dbb2968d8212fd5c5c6ba533c96b0efab907829f39307665ef3a7d74b649ffff001d55d89714","0100000013c9a7a3fce10d15f7e599c83aad7cdcfb11e4b808c0cc5af2fc149c000000001e0fa3966fe3f611497b0e1a78df4d29c3ac6e7ac458aa7d80843671274e85baac74b649ffff001d2b64c756","0100000016ac04287d1ba5e595a09f7b55285209deac81f79fcee0537989b9990000000086397eee1e8db69b1d64293bb4d851b97dd6d8abf8cc391ede8f2a4e8f0ef428fa78b649ffff001d32b5d112","01000000614c8493033aa65c0a3fb5dff9fff37b92f0323f3e9aa00880440a9c0000000016126f83beaad2893ec320ff30657b2de0f6f679870c0a5a20159f7bf926ad78187ab649ffff001d33e5e0e8","01000000ccf84f769370829eedf0d35f61e555d4cab2f2a608d1c90f8ba0041700000000a6f3b379841ac6b627d6075dfe67c7b9fbaa53f3c45350221df3d5fea9f048044a7db649ffff001dc9e14608","0100000028b6c0041d169e7e6ef486175685b076d106c9f2ed2cf3954435d78300000000282f9aaa106314b4d8e7bb78a708f035493377d5e36f22f0f27de55e9efc0352467eb649ffff001d289dd3a2","01000000aeac4822548d23534b4df76215d2d6a7029a7769aa67cbdf0ff85c390000000084680ca48ff187629eabfcdf3dbffda7428ed5b3a7d97bd9364f6a4169a660490e82b649ffff001d0721c307","010000000a088aa3b645f019f9ca2ae0dbcfc8da49bf38dddbed4b8f05c9f56700000000dd800ddfc860d513ef9d75a81d9557da0ae694b7bdd03f5159bfc6f5a883e29c1e84b649ffff001d2183e899","01000000600ea8c8f649e8c1ac801d2d612ca775e1016b6b52fd9469ae99f1c000000000a3b756c39c1f804ea0a1e88ec2e2a156969bcea4d3a4abfc1f704a66be15aac9cf85b649ffff001d202968b3","010000001305abf617eb63eace31751fc30c0febba1d69ba0069005a690decd6000000003e497491f7d954fb24525e9a4dc2ad8115dbbf352ac6101ca1c878e965b619006d8ab649ffff001d2d883d41","0100000061fcf0013c5d4a038d2ccdd45d3dd779b57eba81ac7820d47c0105200000000013a43163d4543c495bd7725e5a413af85374f11f58aab3ae0fb400a3baffa1f07990b649ffff001d1f2a9acd","0100000053ed603cafe6c250c22ba1c9133fc5bd19743d6022b7a9a2767f1fc300000000f3d4d25c7cd2294ccce79fb941660239e719d1469fb0bc295fa4e63ccd30b5f71693b649ffff001d030c1b83","01000000a7c16b8c8b487b2aff47cf46d22efa6593bc2cfe2247149a2ed8766d00000000a0ed4ea288904bbfb3c13eb48f4ae887da8e36a75dc37e6ce462ba084c0b547fdc94b649ffff001d2db548fb","01000000940f177c2b007d8abadd2d8479123404bde35a04d156a71d59f201ee00000000f6a2bc7e4632fdab33b5dca370376f5822baf8228be724ed7751bf6100257c80409ab649ffff001d3a5e4123","0100000044a7bab72faf8de033a279f6f9115f5c923094e312829852cac1359b00000000b8deec2d242764c1fb46146c5a436064db6da04ced636edc615216159db138e0789fb649ffff001d32feb680","010000003af74cded5fa7ec182f0535dca7a9a095eb4ab85cc1aed58929ddf7400000000986da9f7a56db86de951222339d9702bacef7a5a91ee6dfbd82df266582772dc61a2b649ffff001d152ca51d","010000005337e7b4f8988bc3298bd8a8ba4c71b5655f6ea440d58e0e2ae6af7d0000000088bac0fb7b01e20ae04071022297237a33af7211fbc356be39e0f1a00ab050aaaba7b649ffff001d18426220","0100000052b4cf644cd945ad9e9842fe45260232303d8ba98780d49377806b3d00000000b192548292a668454765961fe09e37470787c955013cd22bf516fb2cc6ac822b9dabb649ffff001d2a5ae99c","01000000191456ac55d5ec8c7519c0db715b2b82bb9f6ea86b24b5b281e901f500000000171bea128f864c3fd04c56a7aa64f6f55474c25f59a7c71d0f8bb06c06a633a81eafb649ffff001d2236f62d","0100000047e8767195b4aba9629af6cf4af63ef1db06430bfac568bea2e14db7000000002c037ded1691cb6ab1ac2d09eb7505a41ee264aa5a38dce470c8e76ee9bfadd4f3b1b649ffff001d360d7344","0100000060a448dba669f0c23a08a382c3e31c81a5f8bf25ec8fdec8ec00676f0000000074b5a3e737200cdc6306c1ae7c3f90d328654615ef92521851b5c830228600a73cb7b649ffff001d1a8eb24b","010000009015e94844dc646bc331cbdc7367977da12d8fefcf6263cda4667caf00000000d513a37395c4e4d9a28744385920440cf1b17307c30b4acda0e1def08ec71f0f85b7b649ffff001dd3f0ef00","010000000268527da3f93ef5776feb8769c6a60fcc28823a37b53c99192673b10000000051e32a8d70530088451eff2adec6f39047b989ab80b023388f35dc0420af3d9d41bbb649ffff001d3e3a3b05","01000000a6b70ec79848b0a7b147bd3874b88d0098aaa5d9c3c883cfddea7af7000000001fd66b91745de1e736e1540857c1feb0276d675f357e703be6ff735640e970eea9bcb649ffff001d178039e7","010000009f617853be348f47312cd3784536138b04df0f57f8f2dcde4e1f28eb00000000a6b0e0536819be6d8b571adbc48c841a301dec523aa6bbdc01baf300dc9e30d9fabeb649ffff001d29ecfdfd","0100000030cf36a0cc92d2220fa01f9da92d28d77af9ca583bb0672663cbdf95000000006a0914e5ec791250f3c86a83dd8b53772baf188d35de2068ccc537aa51d2728962c2b649ffff001d39d18f51","010000004a892d6ab3d1e2e09f0a426e631bc041fcede6466157d4e253a42ddc00000000f72ed224b9231d1ac7feccb7b42897f6e09fa3bff33cd4fff256b7e496a80f4374c8b649ffff001d30a18f07","0100000071fce38a4054146201bc5c1ec53beb1c676c7a8addceb697c98f9c0d000000009a18c673dcbff563762151b849ae21cf0eb12c3b90bca93b3118b1b277d25e972ccbb649ffff001d09be2dcf","01000000b9d8f3a98e1dc0bd46889bbaadcc2427829a9244bab770521e242e200000000017a17038472bbe6bd29020a49be7e7af55a2a4ff84dceeb306a7170739ed255b83ccb649ffff001dad446206","01000000b67eee91e06c27762b1c67b656d3c1fae9451ca2e84614a764334e9400000000f8548a35261940d7b8650c6abc9827527ac27f38e8c5ebe4037e0366b2344ecd52cfb649ffff001d378e6ea2","01000000983236c64cab3d7b91c61b2ec447810a3950238d0a5382d8e895edbc0000000013ab16804d3cfd1bd88bb6fac184121b624e4be6cd9dcf56b99ce7352b07febc0fd1b649ffff001d21443334","0100000055de0ab91a7914033c9e1f96ba33af4f0d2badbef855cd270c75befe000000001707fd57c6fb94dea03a889e0cdcd00c07d554814d0b2aee75ca08b96197eaeee7d4b649ffff001d1a3f0769","01000000e46b37d1b6312848f2eb6918baed6b7fdf8d680460f28e35cae9bd1b000000008a5dc4fce19abf9c0d1a532077ac8a0cfb9a4f079e3f743f05750ad3f061af9550d9b649ffff001d08f751b6","010000002f4334807bbb73553010a139ddd2eab8c8cbd1273643ed321235333c000000002e9f173dfe752af1a85e3503f45d53c24cfe8012ccc0b8505698f6534b5e1ddee1ddb649ffff001d287a7a85","01000000aae28f791f4bbfcb2ee9540e23da7d91b90fbdc6c04c57e9a02d2cd4000000005f48b3a6ffced9ff284bb3583638188f4cfdac14dd6cfe8918459ee7296b368b74dfb649ffff001d337631e8","01000000d6c243697e43dcf1aa4ec1135481e9c85388bec2a4264fe5809db9c900000000390e7b2e43bb286ed22447ea2fde905a2fe096bcfe79461084332e011607b60a96e1b649ffff001d32b7dd9c","01000000f06f3677601438e336e3f2aa658f0c2d0836e3e591391981472e85b400000000b0bd464f445db36c8bdb987c1a20a65846ed60adf8601a3486e9963d87e7c4a9dee4b649ffff001d02e533da","01000000f237f10ba0f401e16d410d5ca9cf1c6bd558347bc2462a0b6d0e185f000000006f17f45260d1dfdfac11a0a7e638aa56cc3ca55f433f08c6076bf5f31dca7b7a83e7b649ffff001d05b43236","0100000059630260756a69a4960b9017d03fd11ffe93f8e0047a56a5e12930a7000000004fe38fb09506f679e6a1a0b0233ac1beedf02f0650adcf7023503e72375e810db9ebb649ffff001d1f9fa8fb","0100000066670468cf4c9074da7e9642526f8bbb46db1a0cc8d3d025b119e006000000002b3c90cc51a5022fba5a806a4f7feeb7e060bc393755e921812d271464cbe3d423f1b649ffff001d207f463c","01000000f6348f616b20cb6f900f8e882abceeacf0960e3e1d88cfd06b96fe0f00000000215c469c80636a1135cee2d19fc12a32a8a03b26e1d0ac2046ca9f66d7ed670136f3b649ffff001d28b5a2a1","010000003e04e65ab0942b527694da244250bd345caff63b4bb761cb8b7f7d4b00000000d6ce7ebecbc3abad09997fab79997b96342e395c07f28ce78f1dfc3c88b9443c7bf6b649ffff001d249d1b6c","010000009cf2e0ec7a79866f428c77212f475651263314dc1046e7e318e8a52900000000335758cbba49aed2c2248a2e2aa875265b63abe170734144f900643468aa47fbaef7b649ffff001d193c4405","01000000f8cf1e8bbc7929dbb8448ae1346277f3f341f718c546847c92dc015e00000000d28e8732fc0605a0bf426c95d565457c89fdd8479fdbf1f97d15178fd9f1f3b25dfbb649ffff001d225e9cd2","010000002de8578be78e86293703c748205871ea47b6570b6923ea2ef316bc3b0000000079e877c145a9a2a24e45b92b776bd86d0c859a5c056e9dd8847ace5e0b4f07f71cffb649ffff001d342f6973","010000001fe01b87efd484ceb6baf58d0877e33c0adceba7924ca1e779ea2cc000000000532c9104a0b0ef228d6a14aec037dc67edb0d5a03c1b5340f13e756b2ef36e0de1ffb649ffff001d72a0e002","01000000854b76d5dee8ffc4188b0e51adef331ce8ed188790a72f953195551500000000cea82736d55808327c5939156e637deea5d150eb7b6371e460e045551e7e0fd4b603b749ffff001d1d08c513","01000000713652e11b0531f3583539be9537103f57d977dfe44993fddf68ec9e00000000e4b360eb792ac8246eae77635d9e6af04cbd2f1e8fe75a12ab37c44ea4d13e962905b749ffff001d2286f4df","01000000d03d772feedbf1d3cecd4dc2547b2038ee1987c013a20de171d232840000000026326ce081f65b6e40e75d3987e58d1337e3576a79f3c674a630175b34289da41e09b749ffff001d33864787","01000000b9c8fd6573419c332f3f45759c24aa492fb0ed4e55680ba17882871a000000005d40194e46aef8d33c6f60676b7dc8981cef4c6e276bae1e1509235e5b162d92f90cb749ffff001d31833028","01000000cc321f1d1431b4cfbc862b2a2d9f2f5b884c397a6a57c2a773daca14000000008de04854b6909e7bd7f674d9fa848cd488cf778ac3e74160c4c03b492d2ea8c64310b749ffff001d24ff6a8b","01000000c5a1e67aa978e53833645ec40d98362ac6e3adf9400835c9c6eb67c9000000008d4449595065cf1fa100052161469b2ffda18028b1d24ad6252b262df0142716f011b749ffff001d2d6962ee","01000000cd205ba7f846920b58c3f922ca02ef8c22e4bec7a5c0f0a3c48bc0e900000000415be6dafff930c8f97eb2f5e3a5af73eb747659b729a242fd62037e84d9f2cbcd13b749ffff001dfc428504","0100000057f95dec136f5a42d3d81950695699e4fc336202475f06e6b1462b3400000000b9a086137aa86a56ca8c3473018c47da99d3ab6081d7ba2916b98c004cb1669cd316b749ffff001d2109fbe7","010000009b780e9321380846c044b83431252cdfa9b1708bc0c72f16611b3b2e00000000262fed64260ffc53e470fb65e3961e5a235c65bf3b8967038bd0fff6c763adc8031bb749ffff001d3a2391c3","010000005e14ea15557ecf055f7fad3a9da8da2b94dc75a58805e5186430bb6200000000eaf260724a9c47c98510210a132324cf7084517e8349432561a40a275c98f5b95420b749ffff001d305c46c9","01000000513a9c6815557e5c35dcdde8b7a5bc4703ce2da4004ca55049d3c73f00000000bb4add9ff03d60b7f9c9daff8c26cf3c4ef3044d4feece10dd40da5ee93e2b9f1223b749ffff001d5407c106","01000000d0d9fa8c1b88aac14efcc5b827699c998bf420a75b559e7163eea43200000000147e09e35060f334e974e6a975221bcba84b8ba761095006bb93d6fb793e457fde23b749ffff001d27fcb4ba","01000000f27cd103178e158095f0eac0effd1ad97b1a0cc172a9a928b9e07077000000005bca17dc99844328c6e552342bfbc6a68079401a14addc6fe1a7869d43a828107324b749ffff001d56d24c02","010000005e6c74d90a4312d0964197047dc50acff64404409d14be20b941c4c800000000a45f9cbb175edbe36894a181f4cebe72b53908d3d23f5eb8da42ecdc76f3af382c25b749ffff001d21f07a28","0100000037c2f1e31f1998a8d4c6cc14268ec0e60e0b8ccec117269255231f3a000000004cdd5fd41ccb1905f0095ceee40d54e21ae5dec5714b456a9c648d3dc638ebd87f28b749ffff001d1f8e8f3f","010000009f41817756bda2cfacac298088ef86ed4511b65824b6ab025897630700000000a84d6e92ab2362aab8bf30ab5d63d26e3b77eab205cf3504a144d8df907804e9922bb749ffff001d1ec7ecaa","01000000b9ad7619218da88759ce5e15ca31f150f4a0fddf118d5827ee77c164000000009a18cab1ce5659aef58b8b870b500029905fc2a43367e1999a9379d2a240a6241030b749ffff001d2e2af46d","010000007285718ae70dabe793b0235b517794633f7f832b065c1dbc261e5cea00000000cf4755adb8ef837821e8b861294da71394ea887ea0e9b5cc4c2804ecc2908cdab535b749ffff001d1a858672","01000000292b03c6ce4d8e478186640c5f0f2aade58c80781cf78889467360ed0000000044d126c4102e030663d547e17c2896f2d1cb15705774fe6b7b8666999e705c47de36b749ffff001d77a0c403","01000000a127aaba139877fcf6062f8a381acd0560682b8b16490561e1bf8af300000000922eb04065591c81a815a51d239cdf82611be749d2388dbb11f24b6852a10131013ab749ffff001d357c8714","01000000aa635ef5502b5449fac70e1085d9f5a40d18b60ddb999c47b592edbb000000004cb13dc8e0805049e76f75edeb2bbb5dce7a053e36ee267692222f8bdff04dae4f3db749ffff001d053e0741","01000000814c057b9078f6f3f4f6e10fd9ab02e8cca7669626a6b3285a9f3f5b000000004d77f9121665bbba4cfb2bffe86a477172a4953b29dcde95d0c485af4f33d1be923fb749ffff001d18039993","010000005168c2a08b5eaba3ca3e32ce306929552f9b5d5b0c23b019b19677ba000000000e6e22ab7d743a1d098da5431f34c06fe26a46d463549190740bdd5bb87a6b0af342b749ffff001d366025c1","0100000052437871510aab4206364ccfd600006572409ab7061aedac61f8cd7000000000a0dfd4293178286adf918188341b360ed7ac81daf4929f6b583fdb4935647fcd1a45b749ffff001dba4ddf09","01000000dabe5176482cca7d2e0a3079ef6d84071a291bc1c6f273a415156195000000007c556a940b147d9d1b5f2ff95713ed81e1c58a64f77fabd2b8b95faa4fb4f222b445b749ffff001d010dd8d7","01000000b67469362b5b3bbf8bdb87223cb4e625f0cce596135bf9f32b29d702000000007c1d3f170b4a18a61a846b13555e57490017e01692f557227b3c79b898bcef30b14ab749ffff001d3855df33","0100000037511e587d2ac27d46eb862ea45b233ed91acf6c7d69b81ce030770a000000004c26edce0758a45d127694ee6223d2c7f7beabdd24dbcebd6923d1269170c70f874eb749ffff001d314f1b1a","010000009b7d5f8db9af8eb29b3ea50e5e8896f37dcaebc3e59829184968ce3500000000bd3804efd42be9bb9d26825beca05d7db7eb9ca6ef92f0df30377b53de8a2c963053b749ffff001d2146900a","01000000c9b454d2873fe097c135d953c8f26086da2b3e5a3ca06e4c06fba17100000000d2b58c2a8c9ef863d414cb45f888bf4d61af517cda80b5cd9ee6b44ed428748f4758b749ffff001d36bfa409","010000003f84d63327e3f92b25fa86a5028252d97d61a65f9b434c41086a2ed700000000d8b5a1931d85d20f295cd72ae4dd659bf21cdb161968dd30d3bce5c7b83a1826d45bb749ffff001d1869060d","010000006b2f8203892e3ec502dbf5411ea640c3db4b3bb86eafbe3f8b792da7000000001c869d3f761fab2b10816387b75ee1d7368140d3bb525c9c149ee76992b8499c3762b749ffff001d2dc9e2dd","01000000b494552629441cf484cb4b2c5221d4b9c15ad7baa93eb5ee3d2d014f0000000019c652190158afe2819c19259acf04ed22ac47ae3976c20d9521172a3924b0633f65b749ffff001d38c90a7e","010000002c96637ba95890863726c6153e3d94ac9c10d68ae02604005fbba4aa0000000084f6ee9d04e39385a2d6610b97a99158e207bad4ea91b57513efff81b4b89b0dfc67b749ffff001d60bbac01","01000000eab2b4c80e6114ebe9ff78e00429a00a41b69a92f09a8f7700900ecf000000000d8607f866a697ff17a1e5262b9cfdb3b3101a3efb72ea19a68b6ffcc72db211666ab749ffff001d1a43e851","01000000c0049ac37c6636117fb31a32786e53fbdfd9e721896a6d23604cc63f00000000feb3287036e9e6b32746fe3babca8349c70904c4ada54952d56112c7ab83e47c196fb749ffff001d1d501a82","010000000b90a912aac95e1157a5b0aaecbee299b8673fc11320093e46a0eb9c000000008e98a937c1e47edaafb5e83cabf71568d7d182daa301fa2d4071c2fa7a35c005b273b749ffff001d0040eb20","0100000078e6c4bbc509467fde54ce12cb764f4b2e5ac8918fb726ca2779bb1a00000000d1bf0cb3815fde67bf305314245b1d53b56a0ab5be0752bf2905ceedd101031d9d76b749ffff001d298fc792","0100000099aa15cca1eb58892c51ac47edb7929f2e4cac27ecee34dd7ba8b78f00000000f3d017fa4ea8ef7378b5379be6012c03d822fa01afbbc6244a17a2ef6d889df34477b749ffff001d3fbe6d02","01000000b40cba2d949b7605b63faa45fcc558ecadde387a3cbcc39b4e4793c100000000accc4adad36eda1ec3e3290368da619bd6e8a79af29a7cb7583e869926d142092f78b749ffff001d1f972083","0100000098733091a83565290e38835cd96123286a4cce9b30e72865c620c71200000000f216bb8662f5b8482669f7bb705b4b49ae2e5f963163f59c9519548efd7e9949bf78b749ffff001d6dc8f401","010000009e16d5ad802afb532e64f3d689f84efec30bbc238ece31a644c26a1b000000003f7a360376e47f71c7dc0303fb0620fd37ab85d57d71f41a2945ba162c4653ec977cb749ffff001d20943613","0100000021f055e071a0bdd44486b9a9db977134ef4b55a08eb69d7ae67b751b000000007b5c3e14cc2774c40ee2e81a907b7de2b281da5c96148ad0b88c974433ac6022c57db749ffff001d2c2cd105","010000001918d1a77a6d97baba4d7819cee8ca476a46740e0266130727513f3300000000bbe4ab101fae9966cd3cfbbc1d766368a3071f7b88a4f3ea8e732bd1e0976a8b097eb749ffff001d2d87268b","01000000b1584fece0d5d657421ae41c9b5078028ddc848d0b66fa791c15f93300000000778ae7e635ba0f044f0fa12b1e801033df333d1136262f278e8e57e07fe40285c481b749ffff001d34037084","0100000069d6c99294156889592238c10c29eb0d29ac22056b6af1a203cc2359000000004d37a254e3e96e9289dbb738dd320f78bcbb783d8758b70e3aad2f8ce2cb1019b286b749ffff001d264dcbae","01000000d211104a72c0d8e0f79b9a106620c6e640f69a6cba4f6ccd7fdad7fa0000000055ed0c456a9ba86c5fd87d509948c00755c1e4ec6c1ed58542c430da796fed19978cb749ffff001d2fd4c566","0100000004a514d8124a1cacb784c1ba18438a17d2cd9c5369c81195b83e407200000000c6af2758f361a86091bb0baa7e12954f0ba021cb51043733462828ee6031f14c9f8eb749ffff001d164e8dce","01000000ea9a3b388e079e764f05d33106977ba71230adebb1da58dffdf65e01000000007af5ae2c85a87456cdfa74b207a85da010053f6ee2f94d0059dab65e3c4607341a94b749ffff001d1f70f3dc","01000000234cf43aa2647a119f4755ba8407dc5864d18a1f0a7998eb493f4c0900000000f369039385097642ea611b75963d5309162fb6d90855bbda87b33a1bfe0a7b466094b749ffff001dd88ecc00","010000003b6f19992c0e79e81735159d86775f2151488cc41a78ba723927e66a000000006a9261e56296925a9e3a35b1da00da78a875747aba082830b6c1b8e8487719439a99b749ffff001d1b073f40","010000001e80bbdda44b9fc926f251dbd2eb8524182ff6362b1bf44b9e3f5c33000000004090aae24183ab9c69f08f035b49af86240c87052802018877a7277cd775fdabdb9fb749ffff001d35dcdbe0","010000002fee435c9d325ca832ce8ff6e4e391934e51c0428d8bec72a5861d25000000008a1a260b13aeff43d015d115ea2209c58402680861093bb4896dd9ecf96d1af4cea2b749ffff001df25d490d","01000000bb1c33cb1aa4f5cc6eb6da0314fe18dc412a06998da3d5fc63082b9000000000103adffe62d742d1bfb4be418b64a96b66cb186e6df4bdab7cb6ef0e259d66a3d7a3b749ffff001d2c433c84","010000000176b0bfd8015eb9d7c46c419beb2a7b9239daf8cc4e21d097cd9fa200000000acdaac82af724f96ca95123e632f4da4c37c97314c8b73598bdcbb7ad37e084990a5b749ffff001d1ef0e4f0","01000000ec1aca8138b25c121c14737c05a70d3272ad5349240725a428a17ca8000000007a6ea6f579a3a6776c6ea37d1ab1f65be4e822c9aaac82d245b6880fc6f517414ca8b749ffff001d03731f64","01000000bf0ae5597dac97878f273aa5946f769135a03ef25834baac8b4445fe00000000fdd31d6b5780024024d303d9b5639a5f14509a4cae113430e5e511ce3d96a22ef4a9b749ffff001da1c40704","01000000e481b19337b344fc24eecfa9df7de8fd0296391b8005989880e79c99000000001ec6a78e6362d31390c5c56180162cbd1eb6acb340f38840c8dd9ef4b5cede2bcfabb749ffff001d15a6f472","010000006e59aaf7774d1b1a5060501890fc35dd7c02b093ee154aeb93c06c95000000006d8849ad22831cb6f407d383a6835a335324c4d5d36277ca951f9de50ced86b07cafb749ffff001d6d67ed11","01000000b7b2bc28b2cbd38fd791312d33da3b4533c9edfb926688773f7312bf000000002094a94b4f007f3d0effc8c124fdc667999c16d819a05739f0c3a2ea1f65638fb1afb749ffff001d36aeea50","010000006a5ff3a513e86ddb8e6bd0cd684edc1f111a15baf31735cf081ec35f000000002ad2565f675988dd1bc66086aaf07520851c3c4af65c816922c675b58df759bd4bb1b749ffff001d26933332","01000000dc9bb76d428261a571f43ff906c153e688db6c526711ad791d91d7350000000088c20c61f3925764292e9c552138bab9a16b6a36907626c53374b08e243e81096bb5b749ffff001d38d3a216","010000008cdcb43ab6c96a41b354783edfdb08993b659ccf8305f216b21d54e300000000d2ad10b59cbe747c2e80dd11ad09bc267fb93e332947ac31a4adc2b21c897547efb9b749ffff001d1640e24c","01000000642bbf5d6a194f92006e309d8ea62fd51ef55fe176bd189232accd130000000047b4372b8b6d29479171ef5a8f2195189ef2c3089a7fe8e1ff46ca5c9af522c33bbeb749ffff001d27df619f","010000009985063610a81d46067698fef8b62daae743c3da9d6436d59c5282e600000000725136b08ccf90f533fb922d801e9ed9c1d486bc6c84cd7b8b564fe3345599d0bfc0b749ffff001d02578bc5","01000000f13d3eb61d5c01840ce60c063edb86a66e7805670f0bc00514b22a020000000008438abb7225560fe5cf85a4c02956665a02cc3d6bda57d1a4f7bd91dcc0f064c5c4b749ffff001d2c516ee7","01000000e0bb2ce041b8ffcc5fb14b3338614a3c15531f8b7f91e4a6a74183db000000002e2504384b8db208c4bcafca047b83bd1f785b5e65cba58cb02fd82be7de188e5ec7b749ffff001d09a57a39","01000000b8cd05d75a920da3405b5853c186104f9c00739a06fd4908c01d7c4800000000083d44340739dd0946355a776a15fb52158912aba19bef10dd041882ba73df5efdccb749ffff001d37ec931a","01000000d5be1113c2a56d320073bcf0f7d8166ed1a39e8caaaa4a1272121ce000000000b457758b8920a6287089082925aa4363d11f16579363e1b33b8bd8f4b678a7ca04cfb749ffff001d862f6903","01000000d00be9db189f1d6b4e17247d6e6c6897755682c0125f0be7094bbbcb000000006e42127585834ac2bc9c631c48430d4cd6f62d7cab587c3769b2c686c2ffe426ddd2b749ffff001d31ed658b","01000000d5040f5707696a1d90a7f86b35911046888c7291594db4928f3e5e28000000007e0fb8cc2679126ac093645b25ce04d8560c43db0b3e0d42c89bc989f81b291380d9b749ffff001d3334c25e","0100000067b3e16a8d240a337ec3573cfad6d8b81ec7fb7a1e9930683a9fa8a3000000003462c981bd05ac94fdb1c2d13788251013a9d9d0076df34bc78e06eb6b848b1315dbb749ffff001d09b7ca06","01000000ad60e8209375d10684c285b289f795f0737996491fce266f42ed161d000000004629b8d07d6959047e2b3336424246ac43203153522aa1a757575ab839b717dc8ae0b749ffff001d2e3c85c1","01000000158734e1cbb5e13ee958998c370a4b2dc6855af32eed99612eee47660000000010cd1a96dcfe470922d7350266fcdba59b75c5a0b1aa4b950b5740acbac424dbcde1b749ffff001dc6ff1305","01000000a4de9aad9c6e3aaf157f3e81bdec4d89513ec33073e3f55db23c29ee00000000a66165ad6a5204350eeeee9992b13935015821ccc1c7442cc992babf37c1f0bd6ee6b749ffff001d058af474","01000000adc1aae7f30999d5a1d073e74cad75827a83eedd9a96f6e753fbb6ab00000000974b39dd29eeb1bfd30c1286a2fab013f44d03ac33acb1215c53d529670a82b3bae9b749ffff001d09727c47","0100000098038af038542ac92fb507c1d3ea6033b7d5bc35c0018d10d45b9a7000000000e050b1404342009b8f0c84a0e6ee82af286c47e509e939ab61a4d54197157035c7efb749ffff001d23665f34","01000000947c3f6872a1c55396661dc65bc077246dec96ec796bb5860b46e0de000000003bd490ceb6b105ff76a1a442eebba442c8d1f1154385bb072422c0c798b29987d3f3b749ffff001d14d768d1","0100000013a663be4323ee6f9caf4008036a42711356e5cde7da306a6df81d0200000000cda2d6bd186a38e01338ccc8a7173f507ac0503e5633ed283544dedc23ec9023d6f8b749ffff001d28ae54f4","010000002df27fd80eaa5eb8a157aefa579c2812ef42081977a80b6fa5b406e800000000ac352c2f1d7c0b7c1cf1719c68457e7680a327e14439f2ce2ea13313cf322ecda1fdb749ffff001d37ea6371","010000000d6cc3d84570b20eb6312a82009ec6b4eeaf1fa60b568ab051a1f24600000000acd5d3ba78abe53efe93da1a8042624224229f5b9d7423544b9b4265bb801c030cffb749ffff001d165164bc","0100000011c0325e208dcb6cb2f80601f4a0ba7db499af510bdf21550f232c4800000000b204b99cab4425b1318a425c251c6b338f80baa3af940949f16b787b330333451703b849ffff001d742f7e02","010000006ba416e76509a7aa0967601da515e15c9914bcf5442dcd903e81149c0000000036951cc8f5cae760ef71b5163f0fc976fd8b1c2ffc1dd041249da20afd00fd927e03b849ffff001d148bc201","01000000a04b53ba72122dc4848049cdd5877a90a0d27f8a178bb29f6736c582000000007154d719f2e574263fab36235212aca07040f96f99c5f8b2f368d265b7135aa6db03b849ffff001d11bbc401","01000000241fdb1b32c612e10711fa45b83de106c5b196c4df8d77fa58ffa99f000000009106254df16924a58414927746070114631a4ca04e1b5b82c4a7888bea51d7dcf804b849ffff001d387abb77","0100000044efa0622939da13a887324fd3c87344adaa101088237049870202b6000000006a374c8cf7c7911df8159cb7ac6330e7e9ce9efe5f3ffd524bcc9dd56d15e03b1709b849ffff001d6d678a10","010000009f37532460f6d2f5ad0a34d2e09f2b4d75ddd48a0089a0434a87716100000000ccf110d85ce20fe24cdc159af748c6555c37a0ccb56c6ac7394b3f0f6cde8d0d9709b849ffff001d413f0602","010000009cc991cbe666caca898df25242d741ef9cce1fc97c594172bf495b87000000009941870e4dd39d617d97ede0ee7cadf46732a7f8913fea1645e2c1e8f901fd0ada0ab849ffff001d35e51f75","010000006ad648c60c6870e1d31d1ee0d5d6d3877f70c4d3ccbb156fa803f3800000000082bdfa0b5043f08db6e58b7bcc7e5ab95e26df9c0c9620e15bdf1c8de6ff561cb40db849ffff001d3a2ff2b4","01000000e8c9221311a77d2a2d4a0616a3550aeb66a2357cf95c6ef95035bcec0000000074a1339dcd88a1b0569dfc4667f99874388c6b7f76a3c3108c3ce0c58cc232fbd612b849ffff001d29217a8d","0100000050898ca36cf25cd397aca59995725f34e3e344f193429b73fe2162e500000000146cfb70301c0d30295b3e3f32a66e59e502d3f58f517d2ef6df1a1495974f79f814b849ffff001df2996f0a","01000000fe895686f7b3018c9118f384c3f3888bf086551039a25a02004684ca000000003536c2dca146695f14e8b1186aacd2639cf29a8baa02c12d21488c706379c6dcec18b849ffff001d2461dcf7","0100000051b117bf42fe058d997e2eb3cfe8df2a139798d4900e97f0ff51c26f00000000f5a2cdd51fcee89faa2b8825c9b85f8fa6600d48942b50d6f47b76ea266f4c9e0a1db849ffff001d06ad9c05","010000002749afb49b3f1ab3c5a50c1a1a0797715b30cb1e0a01385318b29862000000006cb3da360f1cb8ef2e7fa2c22d48af78c2006a1c10e80d44190a5d50f72e08e77322b849ffff001d240d324c","01000000bda33f3882b74174dbb9dad142131dea1b4fd4b2b4d63f2d7e5deead00000000259fea5a17ff8d8975d62e06ec8033a27808570b99be9b446ea34bc70a497e8d4125b849ffff001d3e58b50d","01000000116543532c8038c2d2c6d4203f89aff4bcdcba45c40684596955552a00000000f3077ccf372dbdb16e29017d68d9a3805bde82d4b7e1f2f34a301be5d07b36a11528b849ffff001d374a07c6","01000000559615610ea1b2e567504e043c163853ab3b243fe1690773fdb19cc100000000a32a96fc078312dc24f82f09d4aa55069420b331818d9f40b9a263aba48dada3bf29b849ffff001d1c81b487","01000000abd78e7a58906bbac8d4d5e3b14fc0ced61e4714e6a32bca9ebb07fa0000000020aa7d9c19a50255ebe3a0db9a5f4d68a56d66b5f803e4ebe6a26c6e435361087d2fb849ffff001d163d8a65","01000000bf3517f22e8dd36f5b2b1203679326259c9d2b9a3caa1fa9aa547c1200000000e408d7ab560983e9e8b2ae314b39e94817a4af53090755d128fa03148100105feb30b849ffff001d1025af05","0100000046268150ca784673a0f9ed86fa7508957c26076af9c1dcf5ad7168690000000076f454705b69a8d69940769c4a075ba1acafc3f73f064f2a762271bd4794fa5ffc31b849ffff001d1df2f850","01000000e62844f35d23d67d1ab2cc3acbcc35c48ab5d3dfac488af64f16a64c000000008d9cbd23c6968ebe1acba77b42da073a4a74c66f793980b56d782caadac9ac7eec36b849ffff001d388a1bb9","010000002a42e6ebc6239f146ddf4d6c3b6ec05fcb13a406d0ed7cdd4a85a5440000000084db6fdfdecd0c94ad17b15353dede0fad689b186dee79daaa521ded0a229dc21e37b849ffff001d041cc100","010000007153d219f1d1a6a8ff35e4154ac6a6dc82b35454ce5640f5ffdb65ba0000000036e06e7859309028f381f06263a25641ead53d3f9e5ec178501b2bcbbc93fc58db39b849ffff001d687c340b","010000000f9cfad3beafca772c5502305057dfa211174c43301563ff8289ee8900000000bc9fd329d7cb535f24f344817de0847b8c59cde90f5cded7dd9640ccc900b770353ab849ffff001d54843800","01000000d99b1e8b83f38615e863a8aaca1e371fb5fc77b2dd99a2bb92bb15c400000000544f54713470347043aade11a82c884959bb6c8dc659eedf9818c0fa3eb2fd57383bb849ffff001d397e6201","010000008fe41c62a311e7bfbcdec32b2b2988cd1b7f5b87c07c1676dbfde110000000004be9c6e92643f6a34af681f55691a884ad00c8b4dc511ad4277b8d1a1ee23fdbb63cb849ffff001d160d8738","01000000a2eeee0edf719a0f558b800a3559d577005d520c7dbcafc86f6b28ba000000003d138e7934b644e2ce813754eafc640edd82846f318856482a1db0b5e65f9ef10c41b849ffff001de7819311","010000007df611c19964d724f4c6f9cb51f25d0df03ff95fd4a13e2a7819b5350000000037187edf8f055b0e2621339a70fb2b2cbab371afa6a4a7025694d45634f5ee3ad042b849ffff001d07f0cb7a","0100000019a9fb2074bae67ba73706218fce403df38deb1e2ac91400c870a6320000000087d073f431d5a1e174b701caef9abdc8f6575b613358b9df1509d33bde56e3cf2245b849ffff001d054a8fdb","010000000a7610c525de8b9a9a0670d9bba4b39d2634d6987c38e27590225b4000000000ee1bfabda3f8cf75346a6ab524cb3c0aab991a137e7ef7436988e7ab349732e4d749b849ffff001d2b753041","01000000bfa302a116108465cd38daee088e104227fc3b7dca5dbede674e481d00000000173978bd24be7d9ccc2634d61e3419f3b16f78a9aae4932c4d2e7055bcdbd6265c4bb849ffff001d1d0f9bc8","01000000b99bf475a95e1881e3c2a498d7422d52187b1684f7c1757f7fb711b90000000006243f7b84390cf56eca1374ab1e3d5ffbc2994ac2e45f028c8106bec4a6707fa24db849ffff001d36ba75b8","01000000237a574aa48d80862f155fdbb9d63232022f3d7d1c12e5d3b7e0e1d200000000ac895564bbcbceec80e645d4cfb4c152109a914725aa276c01b5829549cedef54850b849ffff001d1d5892b6","010000006f9cfa5f07f9682ba497703d1bd9940f560342e31c1b675b14138a8200000000a65d3771958cb47e6fdbab313975c8117c71463c32e9f30d678d72dddd54e3544c52b849ffff001d21c78baa","0100000038ab4bc4b5845ac5328a079865e5dfd6f249092fcb756366d296b90a0000000096275f124400b0c570b4be60fd02d2db24ff77a8395346f6d871fa036f443e884b54b849ffff001d00661808","01000000995c7a205bea7144ff9feea0ea78ff49ad0374231a20a006fb76982100000000cc2df80a5629908d26f6be888c6bffa0c24ce5f11d44465ceb077953a41e72efc354b849ffff001d2f2cd06b","01000000778688153d55ce1d37867f643db7ef03859b8b82a19d2c9eb2e87b9d000000006a85583a5ecb17820e2b2f736e4cdb9c75a85b1ea881b9a63c81686eab6a8e6b595bb849ffff001d297527da","01000000d2585e16481c44a3802bdf385822fc89d025bd595c80096f6fef313500000000df6dd6e13e79a01edaf39c95841b5a3495bf84a1db6261c3b46aa05c083d4ec95e5db849ffff001d3fdf8203","01000000da10b6eee4d505f3dc08305c5a9fd3fa76b4093570587d43a20f0290000000004dd38d37f6aa021bc70f980ce32d85dbc3d5bd47b63f5652e1fd132089181de3c15db849ffff001d4b9a5001","01000000b294ead6c16c593bcf59fad94d32f2fdee3bb408575de3b7f88c3970000000009ee981daebb8cd02452c23b599d53398c67663b59fffc9d23392e46d1ced939a8e5eb849ffff001d4c98d903","01000000df667864915bd5f132083b0866f396f74a791c05e2e73c01893d65e900000000a78af10208dce5beac9f4f6ffe0e68846c87007dbaa0aaaa5834cf208b801d56b664b849ffff001d14a3544c","01000000f5880b4dd2a4c1f6d9b53f9315f89bcc092a711cf05843bb25847e42000000009f788c974e44b18cafd381cb8a0031057bae9c9d9d1969439f716af802e2e8cb5269b849ffff001d0018d774","010000009593889fe71bf21b8d0f14c9f49f203e36e414c9147b1ae92b56b5ca0000000093959e7dff714411268a0ab57523fdc4e52691c729e4a9262da118eb82aceea93f6cb849ffff001d2abbc875","01000000fa6ab491fe9310c489b36d7c053c9d288d4031843cab67ce9989998b00000000f0569ec589b54d8d07c77ebd42fd9cf34189fce4dcebb93a1e7f9965c760e5a8d370b849ffff001d2a99d6f0","010000004f1fc8261869e4cd21e5a2dab237cddff52d76c797f1e6bac94352de00000000aa59ca9b54acc7f3e59a37eaef527ff83442fcafbb0fee1c0c13a4562ae9cecfca74b849ffff001dabbe0209","01000000d7047179d053077b9dbb5667c1235c8ba342c7f383b0f371d89ca27b00000000e84dc913b55c64db6fe94dd9219036939755fea428261bb2d1d5ee5829493ab8af77b849ffff001d3457a691","01000000eb71c4a87f53cad9b55d132e83d3b7791d7aa1fd0d9a2cec8285b2f50000000046268bb623d13766674a21cf1f4dba4b4ae46e4402759026f4f08b53c2cd76c5407cb849ffff001d2c2db411","01000000bbb6a0207b3cd5d69df7a7641db66974d7b57b46c9e8ca5506f083d400000000389039b145f541faeacceba74f4c26f493b86ac7322ed1e22472be8a85af2b2a1582b849ffff001d0038c6a8","01000000c27230634e5c2f6a04180c621787e7e1368200bc6b1fb61a6e187c4b00000000b4eab5abcad1386ec5c64c3d7a0bc4fdc68fa58e5a9527098bea54f7eee364b25186b849ffff001d09ad8af2","010000009aaff60e347aa484b7b3bb98441459fb225ae315e7a573aaf8155b640000000070fd9954e0e2c305148635b1a28fa1955f0f292d78fcd37c89c98b53b2e88bd98088b849ffff001d08d9d10f","01000000228dbe216ec8a306d3e346d3719b65f63d0ab8d8f7a4ce0f7d54122600000000cd398404dc77c2922e12129e6855ff7d45778a2ec90d910c46b7f023e630479dd58db849ffff001d1f8ee75e","010000004951a377e2e5b87fba3300db75c5e28b57e7770acc98fee98b907e19000000003b7aabd322a0b277128d5cd6a44a602295e54b16f18487ba82b1c73ca921bc8b2993b849ffff001d337380cd","01000000969a2d45a7304025b319f88801bf0a37239ffc7375f39144789cb126000000005cae96bc08b01943900b07ca6883e5e32ac515c8a451d4d990227e261530517bcf96b849ffff001d032ba959","010000004db2b0ac8ac6aa95dbcd6010f3d14658a29d72a092489b9bccdc32050000000061a5b2b6071ddb31d73551a14da234d89e69a87bba687168c39f7e10a1b495025898b849ffff001d07195d07","0100000022a00f8dab8615f478e321799cc7961fa7c3ce12864fae8194cb42a80000000092a7cf6c75dd1e63d4b0fb62c61c64263394fcfb3debdfe29da0b7560b2e49ebf29db849ffff001d3a388c65","01000000f6e7e8c705bb90b0722e27e3e73888ca6768462b492c3bb6ab3d9f65000000003c8ff2fa4a05428ecfea7aade1268bf09aa7a977ccdc0dd52ab6b94ded3b2c68909fb849ffff001d26d0e507","01000000bf232fb167dc0ab3902375bf8234be037c317f0ce509aeb0994ba7a300000000d7a13d28fbbf054f20cea9f483f5acb8d802f178e7590119b1af3989db6b898b9ba2b849ffff001d085b03e8","010000000c397a546f4613ed2f5c8bbf3a210e5886928ec390ea2b8b53b75f10000000007f5c98b14e9986f1f248c01ad93bf2b39b6fbbcc9456c8ab59ca1a86874ce3d0fba2b849ffff001dc44d9101","010000003c6bba7f048456aaa4e4cece19e1fbdb366f0b8a9d23b9b1756f82e3000000004519feb96e0bd089f8c9b4cd03f9c16e548c1117e2985531d7bbff86507795d961a6b849ffff001d1bf39c4a","01000000db4112c2e78217a97e7d1da79e97f1653372eef414a63c24457024ca000000003f1baa1963c19e70f5d0bbb62c558f76dbc517ffb5333a34f8326391881ac1d332a7b849ffff001dbacd4e03","01000000e702cc22f8642eab543053d7b87be13edee47d09e01280ff2073ee2a000000006ff584a56676ce3e78cdef4080894f0d69cc91a63620ae6d684d8eeabd3ead3a12a8b849ffff001d31426543","010000007da404846568c92fac61df2b65fcdeff043f3f111cc670fb49a94943000000007a904f38d89d4af2071938ef290826a93c2565386b70575f29f9a1b7cb773d0b0aaab849ffff001d196004cc","010000009378a75d9c41b945bf077ad62082186b34ab2659e1e3d330a9a0b92900000000af81811337396471ea8e017363e15137f38dae5b78e2550e5098efb66321af8178acb849ffff001d058ed959","01000000c32277c8533112e59a08caf5cdd27966128ca538f54c84fd457651f600000000a1c7eeed853dde825c9fed1d389767116f8b789a21a458bb322fe3b605f87dcc99afb849ffff001d669ab506","01000000ca2d5990a826a7fb76664d89b29c77e8e5f6b41b30240dbb937d09be00000000c05241b76cacc2edb06b6b31dc5c40eb72c85e12f33e2f56a447ac494ffd67bcb6b0b849ffff001d39b08ee0","010000008fe68e23ef5c72fdfc0f0ce00d815a9dc9a8fff0ddf57afcc73bb80f000000002b2b0e1fe76f7eddbdab744e39719997a303d8eebf1a0f80b7857f54abc9563bc7b5b849ffff001d36d4a75d","010000009171cf85a4da13603eff0c1fb3366e62b6ee1165cb892e0bd1be385e000000003347064c2b2404540d95cf30616757b024bc2df6944c20cd8e9ea478589471a346b7b849ffff001dd2cfba06","01000000a5f52777b7aef703f57b4e42f97befe64284f92883f8c00bcd7e25e2000000002a42c110d7b3743511970766c91e09a6817eaf07ade8e12331effe893589dc16f1b7b849ffff001d2ed949bc","01000000b4203892a2beb4abb864e3e0d5288d28245b620711359c171403760f00000000d3b99d96063049fbab22aa94ed180582329f372c1d4b4a2befeff272ff38f8e9f8bab849ffff001d2a138cd9","0100000036fca1255cd6afbd53efeac3bf54a638730b9d841b6b9184c8637d3d0000000049442611977ee76cd457cbcdf06e68fb2ffed538abde6d9851fc5942f3ebd837d6beb849ffff001d1a42d323","01000000c5cbe90ff15cf6e9a64d2c09d70a40b55ee59555eb965d484324e81b00000000087ae0fe02cb2c0f7c7d989c2ad6797534dab9689a34c64f8282c0f09d2aad9dd1c3b849ffff001d29b3e777","01000000ae8704759705b0e6848c9e4238ad2ad442a22642e78e217b23b736b50000000052f7476bf72a81d42b895466920de38e7d99696c777a02a813cf760063db3b24e9c7b849ffff001d21db3153","01000000d88023139722bdf06edc49fca9aa48e72fa2d6834e493b8f761b7cd100000000be6e86461311fa3256e694d7743221dd43f33976272c60bdb8a3d4da44202f23bac8b849ffff001d66c11202","010000001f796e5b759199b3f55beb0795d8429446ceeb0b97ba6da9de526fd3000000003c679f0cf48ddb8e5982e12e1ee393535d30de62532016d88ef0e98f1f47cd9d93ccb849ffff001d33c9e90a","01000000fbbd9e5c44c88cbce13638324ac1cc6a0f9e1fb7341e42d7ad1ff47b000000006c57ab026e1c488f0a9eaf6e72f5b8dd2544c6f961e59166ea824c80e2efd26016cdb849ffff001d6272bd00","01000000f56794467797922fe98c4dcd14dfbfe09e4492b596d0e99b97233348000000004907c3639e54365270ba404bf8420537f537bc5e76d416406a694fb5571457d5afceb849ffff001d272096ba","010000006d75530ce540268bdc3afffd6b60d0fc0e52fd9194b4485cde6775cc0000000032dd13e1e390205d13827e265c2e1196f034d3d4608ec05b0dd47b5a484379a1c7d0b849ffff001d38d088b7","01000000afefbaac6ec03ae2a11d36f744461a8b9dd90086db793480873cd648000000000cc393994b40bf579a5600cad5f8e2911852815d5a3626084f5c6dfe1491b81fced6b849ffff001d3a607222","010000003d6cf6a1820de692094ed85a3e36abe7945a0166a422f51c895248a40000000068d1cc3bf7e7df31293392f34ca087769183202936078466129532d27563b630aadab849ffff001d1d0ff971","01000000dd1251119afc5888c34dfdf38df17abfeeca5bc55c67c8c01e77d61000000000d84f9baf2a04490b094020605a55e2a7c5d94fffeb94e6a4a0bfaf44356e161c30ddb849ffff001d375c1908","01000000ffd0076c24f89050788384a99853d457e8502fe923f83993cabea64300000000e7233f954d26e49c410b90891dc18eb7d0c8ef86d82e130b121483cff596437098e2b849ffff001d095fb6fe","010000009c0345f8700fb4da0fbc898a0ce491454a67c77ca3cb9fb5b1845e66000000002d51ac9c19d1d8bcbf051e792d1c81557ce24d3f56d4695f157876f4c653b9bad5e4b849ffff001da726e00a","0100000089c92a276e824b73b5152b521742567acb40ebe7cb20bb5e590bc4d100000000d08fd7a333250f7895d7424275adfd43360e6dc954fca91244b51dec5a62893d4fe5b849ffff001d30b73afa","01000000d34bb6887f77a4800058f324b45963c7a283c4d1f27ef199f5f9093d00000000c8d966a94fbc7e5b59cd66aaafad097723174befebfa9d2baf43d710eb49a9c896e8b849ffff001d2024edf8","01000000b8e2dec5a241d45577f54ffad1b0ac3bcf013dab2a1e9d3fad6c203f0000000039b087617000efdb416a87bb350e0248448dbcce86c4a7fddda0be2e805e14e22debb849ffff001d1f130c49","01000000aba9b1ddb14d31c411adb8e24f1cb84518741ecdfb2cc1eea74cee5f00000000897a2f2d22b777a637e35d40cd284bdee7e60e19838a2b932f11e3c7d72a2327b7eeb849ffff001d3db5c903","010000005af1f58bee8061b1c771598ab50c415ef5caa78ec1f1742ecb66c4d6000000009daad6f051398668651331fef5e7565baa9682581c6e8cadac9d7cef9fd5687767f0b849ffff001d2f3d9b59","01000000414221ecffb1031de7f1de19eb0ae0036200e68feed872043cecd28e000000001940dd983b5ce956e58a023497bcf8a13c8cad32c0049aa4a74c1a5d2daf47ff5ef5b849ffff001d383db1fe","01000000cbb82692c84ed9396e8f6e18e0ee097cbe58785445accdd5acb4c481000000001fc088c20bd0c4ea140f2b5c921a14dc4c6ad154058f09dca735110badd8abeb8ff7b849ffff001d0e910f09","010000007f3a13dcd298e4fb17ee551e80377520fee708243297d8fdb47d882d000000007aeed0da1026df4834a80c7dec2780ee009140e0dc646f9ccad4aae7c2769ecb3cf9b849ffff001d5b879504","01000000c6f48d9d30dbcfb6dfab9190ce1e0843f1c5a96f6c4563dc09ceca8a000000009d5635dfc87751ea493c9477c3fc64a10cb0a5c6e2691718ee29658a24d4486674fab849ffff001d9778fb05","010000007d0933d39590ab7fa334dfd8f53a3683e232ecfd51183baf371e55ba00000000d6a0fc1b07f9d2201de96ad463636ffae56cd45cf633f505740ae3cb5ffbf4b0fcfab849ffff001d141697e1","0100000059913b36c1320bfdce30d30d465c7a5b2a1e27ba68f998b9bbeb46ff000000006f430db311ee9ebd7b09337919f67ba366c8554fec6d984feb1bf65ebc858e00a8feb849ffff001d09c0adb4","01000000734e1ff502b319d306cd4e0e7740a28f7affa31319063c6e84c9a89f00000000378ee67dd7f0d2278dff4813fdebb8330b843237c2e061589c4f1d6198f86838b800b949ffff001d13dede0c","010000002bd4084c459b4edbfa84fc44869ddc58bc611af805df89f7d82cc20e00000000b82c6718c2e16210b8e68962a5a5be190a635cf0e3471b6b22fdc4825e00ac666705b949ffff001d1ed20373","0100000081fc89a641256a7c46b305053ecce95ddab0432b52660fa8e4233a8000000000d5f601af2758e66281d41274806abd9c3f1651a177df18f3968ff47d447bafb8ed09b949ffff001d08f4a870","010000004d0293984b437ec311921da5fece4222a7b4e28bcf97ed8ab447e540000000006817ff83719ab7d68e431e7ce374b597e977d2352527ae0a620b9ce81e5cc430c10bb949ffff001d346fb805","010000009f7c34015f1c24a058b7a2a64e0b2c77cff47e71ee18c9e2a22e98a800000000cf4473434b5a366f4ba20095d6b7d238b93761f23d4ee19653cd2f3ee21b2f1cce0cb949ffff001d262ae4c2","01000000f2b208d8df1f304c35891b56c0a83a7a7280853fe68f985e44098fc4000000006d2152a8107ac7207765b29e3fccad687da367a5337e1ba739237730796eb06a3c0eb949ffff001d5434e306","0100000023e1b84dc5c690f66b95b978786ebbe6bdb1acef65e911352e18f11100000000ee23d3b9cab0b897615ff3768a6727da6d880ba8554912551c31b06afe77dfd07f0fb949ffff001db28f5305","01000000d28be6410bdaeba651b5064bac7e09b3044819d8dc7200cb863394db00000000937009499dd8ef183618a90700bef1fccbe71cd5d6fc3c816180963af503c9bdfc0fb949ffff001d36a3fcdf","01000000de32cde92cfe257a854ded37cfcd0197b973abe8118e82407c1031f10000000025c5e6181bb1775fa594b76cdae92addd6c83168aac75656f6506f82a0cf7782b814b949ffff001d07cc8eae","010000006d72a6de21e6b87bbb92bec040df3234f320240c83cb6033d095b990000000000b3ae93b51e833791c81c8bddd617834bb704e30c875dbe74cde46e83ce1dd98f819b949ffff001d02581e1d","01000000cac8542240e48809fc80bc5f4d34e375702a30a826aaa188ca03b21400000000f73929ecc16505f87da2a615f3dbd1e93f529a5cbdc713646a5b03c1f5b4d7bb631fb949ffff001d3232d7e8","01000000142675e7a3f746921a57e2f737a9a62e3f9fd7084de1ec77124388a50000000001b4f303e53effee09daeadcb70cedc637d9eaa67658b4249cb9b5b8c8379ac21224b949ffff001d08fed88d","010000005d1a1d86bb7c6f96466d14253fce9a415a937f34a1a40a981afd63a000000000f4a88bd371a0d7395e822b2c4886944b6538855ea9dbb80b32925fa6af31edc9a124b949ffff001d65cb4602","01000000b148d98f341aa433574e33aaee1d0d20d97088e62064b7827ecd1844000000001c924d1bd31109ba78296c641923572b60b0e9aad23984468a469b44272e488e7428b949ffff001d2a7b4174","01000000b1f10c560e66c5b7e5521aacdddc3fcda9136a68d5b809a3b60ff29400000000c1007569c6de5b3c85665ed55ad5654755e8f0ab8b41c9115f8425a9acc50b1cac2db949ffff001d19100291","010000008a41aeb41889bde07d63772c16b3042fdf4af97b958ac5cb71f000c1000000000274ae0cdec520ac3bb7fa7f47149da983458b4495384c54ba05297c380ee4d78f30b949ffff001d359d6e12","0100000037e61a870b6cd8cc501ba07c98ad8ab729a34871bda1a829339dc84a00000000aeeb23397a33d86257af931e5ea2c70e602b4ccaab3b649668ec750ae133ff1d2b31b949ffff001d11407c02","010000009d27ca37353b78c784b12bfb13192f8d25b84e171b3772c3ddfaaa7a00000000b1f21674ea332bde88d795d055922833fd63a50a418c17b501240bf8a99ff47d3834b949ffff001d06f33e57","010000007d35e0984a2651800ab4bac8a06c329ff779f2c62842043ccad7f9b700000000d8cb36f90df9848c1765a91a7e13d149b9ecf828ffa80b776852bd2569eb7f080335b949ffff001d3acc1a02","01000000dec93f3d2102a7000f6264f6de7aa9b0425d7c0a724df22f201b893d00000000ab24f446da6a41096878e3359bfa610472f7e1151a288b46550a7d3de464d7af873ab949ffff001d2542a7bb","01000000177046e3a61c3efb75218ffcc0335e21e232581510ece8b7cc12631d00000000c8ee660c69f31cd39e60d11ed413b3d66bf79a1d9a4db9c75e13b9ce67f4dd2b4a3eb949ffff001d03d7d9e0","01000000416e8ee90fc42049fa4b631ade2961b944068073257322764af73bac000000007d34691f575aab5457a58e38b365b661ddfe1121e21d2d06bb6a976024c1073cd243b949ffff001d1a108c10","01000000af7926b6e2709e476672d63b4f402be6a0be0ab808258e415aac1f21000000009d19a93ac3d623c7e97df77f4fcc82b754bd1f173e5e4140cbf335a1a3c9128bbb48b949ffff001d24bcb9b6","010000003f8d0e7fcfca85e47f90698a07e17e179d71c1730e5ae45a9ba3e4f70000000000fda4097bd856d778c2b2bf57613be26c658f0d31f86bfb7ce03a9d36e116983e4db949ffff001d4c780502","0100000088b0739aa917744c41461b0c4b04b3bd4825901062ae7eaa087cbac400000000812ba63234fbca61b3230ea8740fa186e9f16536b67a3f1409e00f64323081c1894db949ffff001d2dd286ec","01000000287e34a84021326459980e81625c76afd4b91eeb17bed57ecb05f71700000000ff8117749508cc8e4e2a262db4ad81f2efc45e15ded19eb8ea7e21415dff5376df50b949ffff001d0543e6bb","010000007f114cb5cf39ed79fa0915d8113a7ba0fe5772d49fc5ad7ec111fa9f00000000235ffc7570a1ed93c343f6ce0fdd2c5af9faa05f92d65787a4de6d6ea7f6f91b4a52b949ffff001d1c886043","01000000f7c408b4004e88c2bb2573580273d981e642e1ce933bb699fc6981bb000000002dc3219a9337950f988f8ecb80519769beef14f3ba6177b2244946d1817a622b8a54b949ffff001d36cef20a","0100000082eae89f40813dacfe9aabbf2dd6e6163913c68ef4d494a3fec5117700000000a4a406c9c34ec6a311948e38fe1c2f4e6ea0059cbc2a04143347e213be5c50debe55b949ffff001d5e005a03","01000000c8ac6b1ec688ff648a5e64299f51a72b890f23ceb7836053380d3604000000006a9f7f22149ef3fd0866a9a410586819e9631485325dfe36a74bc046c7d111eab557b949ffff001d1fd01b9a","0100000099702707cfa18383955953445274aef7aaf1643409278f6d5089cf320000000066917a06e272fedba9cdc1fdeb114d113703f04419260f4ab8d359456404c741c85cb949ffff001d21aa0389","0100000043c94170800b3153f1dedbe1f89e76ddf23099935c5e4d33929d0aa900000000c398a2163794d5d6e53fe4d3282745af3fab6c83e2cc6a82e3f5309a93d5294a2760b949ffff001d187f4b14","010000002575bf1040355e8e038ef8b67035e0b4269c265a22204b327f65f72600000000818a74913d1acb787486c08454fb3440fe3d09ac1c25168daba924165bc4274b0e62b949ffff001d2750892b","01000000b1107873ea2dde34096884c7f0fdecfea12b0e3a2726697e757d3260000000005e9b3b7bdb1cfc000f33890d2ad91d067af33260197821102223b2cf247ac124d263b949ffff001d2c09b2e8","01000000d9f8742c25b37b626f0b5000a1b0535104afa1172742bf96d484081800000000a0ceb80102f5273e492feaf035f8cf730100ad9256444112eff92b1d169dff832967b949ffff001d3275a8c1","010000009598bf1f115c41fd72d8d748688174a5632d61c4967f5d23c16833c2000000002c89edc30fa5829739a76738674824b3029f29e585d14ad04530ca03d14873f6c46bb949ffff001d3983cc9b","01000000d11f4030d47fd2d0a68b1165108398538faa3a6238729a6ce81f0bf400000000cfb000d92d36e02fe445042518c1e5574c7a2790d5aa34ceed0307892cc915b82f6db949ffff001d31ddfd87","010000004b49b0a4e1fbf81c92d7f2fa0daf3e1b1394cd575ae63c08e9e6fff20000000022792f80bdd1fe1153004d9ea04e5b7d3be32124e24c4e3b2cf09aa6406bf5a21c6eb949ffff001d45cbec03","010000007a205db3425259d23b95622e21ada614beb3cf4ba78739c8d86fa6dc000000004b43f7028ce5ef6311890586cceb5c52283d99978c2e7349ddfbd30beed8da6b0f73b949ffff001d1ba012b8","01000000bbe668b937264ec8c35921277c495d1eed28b359322b4986bd5fbb9400000000e2aa70b47e59edf6566d5144e1ea8283c3130502894aa4b71cbb2e42b6a5aed76d73b949ffff001da30b6d00","010000000bae0b4164e3127867094ba845f1496d5d2af2f6d03091a5211a576f00000000f412bc571959c415e43d933fae79ac67c616c6464006e3bb2690370942501815d777b949ffff001d1e21acb4","0100000090139b56aa83cec61b23a2d3f0d9469b9d1fd79ff1f47311a39c913400000000e7844bfe29334e3668089d732206d7fb300c33615111d57100486f72fdcc5df83279b949ffff001d046778a1","0100000052c1449326646a3a5097728e1d575fd3f48d5e048abcff03ea8f0f6d000000000f2569a00e6e62495e0619dc5c4b39f6ada90b3d45ff83a1f1eaa215f05f211b217eb949ffff001dcc2bd814","010000005533cdd97db849ddd2ae62874d5dabe053089bf5ab03064c11898b8a0000000064767e88e46fce63b340c3648b8e392cb8f8b6b10259b9439db00b38a8e8c5d95c7fb949ffff001d39538948","01000000df5b3c1d0a5fec0bacb67aef307ae011f1a8933a22573a65472864650000000006d4ebda9fa5756aa2788d1c2d5d9d8c9f935ac64e1ffd2dab708b1451151d6c817fb949ffff001d5bc48e00","010000008026eda7fd6f184bd1f483fafa054937412a417a9221d5b6dd1c18fe00000000228a44c3d9e51e18d0b5843ce1fd92c71b40f1ede57bbeae171321c6ff61b00e0381b949ffff001d33c33017","010000005ea668d807bb7f0cd9d39e7990e436793ad2df7213bb96f342a63bd30000000099af34dea703c96214077eb5953cb00003d584fa4285b45066dd7449bc623cf84084b949ffff001d32496980","0100000083a9ec529edd31a993fabb2ae3504afb9fd458ecc3aeeef9b5ebd18e00000000f163c13fe5e68773aa69da417573dc6eb209f5e7f78a6b09182295b753c110a81b87b949ffff001dca1e840b","0100000070fff74d8d52762073bb21f9bf2f492344714a225319326bf065b0e000000000e95a75022171910530adec8bc57f290c6d22547c7cf313dca275fed2cfb29c355c88b949ffff001d11081d06","01000000c5cfe3d8c6e188ec4b93d5b212ee9ca536bfce916ba8808acfbc738700000000e0e8372016c557d3c41316af7d35bd6197697725a76ef060287b708895c6f9bf9c89b949ffff001d3209fb8d","01000000e3a2cdb6fed25be9fe05a798af0426549d888a49c5a7e1afef9532f1000000005cd96266b069bbd8b439ee976c9fb2cea79b85e2ee050ecb9b7eb7ef4cd5ab37758cb949ffff001d08a90371","0100000043e86f306bea56748b8afccbf85e8184efc05769996c44cc396ced1f00000000db0b970df91e0b7c3e3f978006011b8386b0ee1c51bfbe457298290a32873aec5790b949ffff001d164e412f","010000006988a699e4a8d54b2edf186eece34bc1742fade18773076ecb7ceab10000000057d1767c8575b0fb168c581d11a5cc150621e95fb15753e8664d3f5a1a750e6ee592b949ffff001d39c07c94","0100000054484cbfa3708ec4808da274a71f09f8bb514f4d85c4ddc50fe399cf000000003a3acae397072f319f62027ff9424d2a57b6379234cf94a6892784a5d11ea537f594b949ffff001d6bc3bf08","010000002f9a365faa5f27c8487fbeda825c646a099b06e4518a7c2a892d88c300000000721466306f6cd265a9d48a6bf4d600afda0b536528cde59396770dc130dcca928a97b949ffff001d068db9e0","01000000dd0cf9093041dcd6cd9ce396b029fe7fcdb15a5e5ac79b80e201ce0c0000000023d831e608147fb9cb1130c4dd012eb1f01c37c6933da8de05777508d5d8655bc69ab949ffff001d14cb68e0","0100000006dd07e6542962820db0632afa890b1059ae73663a82102771b12cd4000000002234d02edd56a81f148b900014a5820eb23a94c8074f06a5b6e76cee74c3f26fd99ab949ffff001df58b2d00","010000003c86eca70821b30aaeb0c2b63b552232124fda6891a0b973a858dc1a00000000f289fd87b88eb832e15161bd958eb9d552eb9885410297e0bc7c9dfb72b83dfdd99fb949ffff001d2b5e3c1c","010000008ea503d23bc71edf9fdaadd923387c0443a1797b4304c38ba01edfef00000000aa1577e6150133b5c184fc9072e39f784475f1cb11c443daba2a6d2860f207dc59a2b949ffff001d1c274a10","010000000a35d54ac6722b1924d150ba5641586eb23c4fe3a04c9ba88ffb2326000000007945d2db01b3a7bc218f8f2401ac89c7333e425c3d962e812f519ccf7edf3602fda6b949ffff001d0935085c","01000000dcac2f02dc42243296f044cc88607e0c5266a6efbadb617cc2a36c6600000000a23b1e0f8a764f5dfe0148588d642e5155b6f74f4e07d9f60f1dea484d19916180acb949ffff001d21b7be34","010000009bcac64b2bd24b090ef393e5d879a275dda82b5960e2bbe92e3bf19600000000741ca9374b187c8f0140eba4f31119f808659a91f0caed01dbcc1f197a2f01f7e6b0b949ffff001d1532c45a","01000000db89f39add5db65432c58c7781cc7a5683e34ecdb27135fa7c062ce6000000000b22d67acb059d03d0a28c8f4d219cd1b59b9e40550def1eae8953da0b6a06907cb2b949ffff001d1ff38416","01000000d39e17661102fc5e46990382a48dae71916bd4ee126ddf8e14c90207000000005936eb5e7031a1134325d41f4378eb01ce0fcddf96ed29712aebb56a65b6bed7fdb7b949ffff001d22a0686c","01000000dafa30cb7d98d43ca026e1627ecfd1590e616b3702a91aa72427f81c000000005d63b261497f03261eae37dce3f3c9e5419d71d76f67a6608de3288817216fe1d4bcb949ffff001d2c7ca4a1","010000005b164812c03d2c30af2eae9e1ca91331a091ba9a5376ebf637426fd7000000000da9b7ea435cdda458c9f2b52ee314ba4186bd43fcec35f3fa8d55c21ba470abddc1b949ffff001d177ec43e","01000000a12b0cfa2657e346913167bb399b488ce6653fc58543af0d33e144b80000000053a0c67d4d4b607a5305e4815586194e2870ff01af6bc5e76f87319c8c77af5022c3b949ffff001d391a305a","01000000cb3f05bb04c9951c9b76115f2b69d6164c55591a3866e4deef4b9b5a0000000006fbaff8dfca626bdc5dfff60f6198fb4d96d9f82fbccdef3e1361f017b215055ac8b949ffff001d28e074cc","01000000659216cb53aa91274b195915e78671f4cc6109b4339241928c1c7ee500000000ff922aae752c7e5f949548b88c359cca517eeb166356549ffe57fbf53455d3f6b1c9b949ffff001d15f795c5","010000005670d67ca40f68e51167e1b767b7c355d3367eb3c63ae254446adb560000000062ac16125454e57e69dabdd7d43e433bc5fef0cae2a19ff76e9e764755808f15dbcfb949ffff001d29a3d601","010000001bc4cdea76badea59e9172c53787776f821b85979e136a93d73a31730000000087fa928ad4de63c6c3bc0ad6c215d0bd0df28218ffd8cbbfb041096f32572aca0bd4b949ffff001d2c31b907","01000000372459ff4d2f8f6e511a92fce27a7f5a3d71bbc1142dddb1f0fb041900000000f6051d7dcf946d87e09fc4b4b2628bc4845fbfd5fd9d9080902f28dbb929e7f089d6b949ffff001d037e7527","010000005e75d211914cde865232350b9f1489cafad94b4c41e94e07ed3d7493000000002a1a0fe14d086c2da3565e6d9e585ac55695c3bda4b3da6a93cb5cf37fa510c559dab949ffff001d215e35d4","01000000325b55cc0dfc264f9dea8ae680443ee29f3d6003e77d6eb08b5706d200000000d245fb179224cc87bd1b12f364e1ee77147a02449aacdc4c166cb47ab1f98144cddbb949ffff001d08bab9b4","010000009bcdf8f6fcc83691d7c50a50026d00b9365472129e7138baf474cc60000000009e8731b33ba75e83154a0a6c71e2fb48deb0faf51f8531a2f16294753a86fb7dc9e1b949ffff001d1aff4509","010000002c57f5dd2a479f8d8cdcb0f66a4113450fc6b1026fc99d85346183ad0000000086d279103432ebce33dad5172dd25a8be1b208f2a3873b665980cef0ce78fc2417e6b949ffff001df01be813","0100000041958b1fb8910a5f6fe5a829c8f37b7edf842f58a09c7da27b91c6a7000000006dfa5857a857ab3b448365a301220b177e6764e22a48632cf21fd9f5750816dd25e6b949ffff001d08c5a297","010000002f23b63c41369912ae643228bca2b656fce7fc948eaa14cc7723e41400000000f057b6f1e206dc6ac22ae00d6d48757862bb0d78da09b14ac6bf263bf418155debe8b949ffff001d2200e361","010000009dd2a89793c21d2c902d0247aa2be18bd442291308a4e2a19c4c88cf0000000016683a3daba1e074031d51d94cc2071674fd20dcf1d3a91f19689e2eeed15cdaa8ecb949ffff001d18ac5449","010000006acbe477165f79d965dba88cde884a93bd6c5223845d0500c119818700000000ccec1baaab0d2ad42800eb4b04407af047f4d640367e844139321229c1bbb9b85bf0b949ffff001d13a1cd14","010000009006aaaa2e3995285cf5da148086cc0cebb7f6093db404bac895c553000000004e4927161a8a16d0b0309e77cfd9bb3dd03877b0ae00a19bb3a2f86448e67a76b4f2b949ffff001dea6d830b","0100000096f3165a1847cb88434a8607c180b70fa0fafecf2e7097a07bbb35f70000000002a63c4ee56baa74b7f2262327a6992094613593cac94d933df0bb60ed932474f1f2b949ffff001d2e8d08cc","01000000175655f8a424df3af16032fdc398996e5926a24344d54061010643fb00000000358a88fcf09421e8fe13e7c810845834156ed46cd294134429116140c852c091f7f5b949ffff001d21469bce","01000000d6ec72f71e75e407ede87a4873bfb7faf53a632aecaf6c0d266288ae00000000d50ac247576e2d207aa055597027cc3e99d6963212dfcdb996d5bea8e21762afaaf7b949ffff001d36e3d160","01000000ba3fe12c4abb2f7ab39a1b75d031f428e98eb135c3ba66eefb689893000000005848b6680896ba035a6f693537194f3f0d90008afeb8c89e3eea3ec204d9313863f9b949ffff001d1d8aa085","010000003e3927903ac81e75feb65631fd3cd824d2a419f5277ee4d2ef46310d000000001247d266745f4498b72a6fa312dcd05b869aad1dd129ee3d56868880f541e18030fcb949ffff001d15005794","010000007ba021b12114ef1ea5b0c13cb9b6b0a5a2a625563ac2e46f71f4fe5200000000b4e7e3dd83bd40fbf0e68cd1ab9da4810910f1bd8f7ff14e3d7046091e26ceda1fffb949ffff001d17b8105b","01000000aaee096a09ce66761cc97b26ac2ff287ec98d03c17cda017945d71750000000076d8f1a91828182054031dc0ec804c4b268fb368bcc68ff6c223518fc4ba5bee2404ba49ffff001d21d43da9","01000000dc9a4060941a086de91bddfa4bf64a0e4310346a9467cb27ab1ee57f00000000a0a9f4b37157bf4fcd318ed8b67c5e6714ff5bd2becaacd065a0c014a94cbf59b909ba49ffff001d2b637aef","010000009c7f8dac2e2e240610cc62df5f2dd7305155a2f8e4cfd794e6af4e9b000000004ae150d5ddd641ae57b821233324f04e14229268505673dfbebd8bb42a792663f10bba49ffff001d55b81d04","01000000103abacf572eac2c3a118dd80482b761621febcc0db96ef2000aebfe00000000add7f3b47f4eb8c583635c6b322594fd1fd00273e14ee653b28ba84a379f988ed00dba49ffff001d2b0256c6","0100000076c276a860564c06183df7026d6bec23edc9394b2aa6234546d44d4200000000123cda6234814e30b533b83a0e2e75924b8af73df91f473388ba2c196194c77cfa10ba49ffff001d1a01a895","0100000005c5d6b6d8314a58ba7b3a1b07894cffb74259840622e982e7acebbd00000000e39e31797b61ba2cf929b04e32b68ac9fb9807ef9d63b249d6e816b3f8d4872a2d12ba49ffff001d87f7cc05","010000004b91cd1d63f1031d489b85bb5abe77fef8b656dd7eb024afc9cd56ab00000000c64073f291ed67017e906f2f199de02cc0e938938890bd53b040e93d81e060b3aa16ba49ffff001d1f4efb9d","0100000067658eea63889f72b3cef0ac1514742d826662f3b895744f5d496f7a0000000039d235c5f072a232cfdf7be75789f02123d821271463684eadaab48e0b1b0a57e219ba49ffff001d2cb0c17b","01000000fc839db1cf98733ff64bbc96691b56549e7fd7396087ab8d1a7e64dc000000003c623092d3d4924c776858c76fc6bdf7b5dd5bf5137ea77f93408f75ae5f109bf61fba49ffff001d2f0c7491","01000000be0bd0e859b5e0903b1d0471ec3278db87865962f46f12ef8891fb6f00000000a64325459d0940bb0a23218ca2d79c1407486d74a6b7f593e13c819fd23bbaadf725ba49ffff001d03afbce5","010000007207472973dbd332f475f58294da919ea8490e5c4a4c9e234c9b3303000000007ac02ae239aae0d1901a1ae90717edee9407bc557ff8640647ea51cf4f8ad61b2b28ba49ffff001d062ccb24","01000000ff7cea2e89320d79390b277b79735100698930eb2f73b75fa35acec100000000fba7f084fcb7144aa6dfa5a8e0c35a9469bf502f96ff785077878d2b7b45fd176a2cba49ffff001d27819fa0","01000000daccd1622ae5874e72e093569016f3ec23f845249548320df40951a500000000cd20ed61665749d1513b3e02b14aa6fd5158f44d0baa7161b4c55f82d9f625a7af2eba49ffff001d01b07f39","01000000ac921053796f9b740189a8e1522d27c9bb454eb832624a27f763d67200000000e89c51dfbd91cc00078c2d83a7632891a5fe3782000f14a6139f06ed6545f761a431ba49ffff001d165d5277","01000000f9f6f6a5363361ab6b387a0547cf5bfd098926ac468a0dfcdb28248200000000c27eceffc66681927f32f7a941aac14e9b8915e9380e48ce9cfae53854d09f79f136ba49ffff001d2de62804","01000000ec32dbc02ab500765e14a7c6485a22bd91109217a6c4241c389047d7000000000552270b6e920b5ebb7f280e0d57b5c682a5f23f18d7c5f5d679e4475fd22a8d973aba49ffff001d0930c939","01000000482c7152fc2e032acad0db585a4ad4cd23c7e97eaf9692dc2188322a00000000ec45326b2f3f8d5175bf81e9ecaafa9e43006cc301c22f944d07e06f571e09b1e23eba49ffff001d365fb871","010000009afdeb7756a384963d7fcac3cc48eac9498c251161aa60fe90069a2f000000001b5285c966f27bde4e19a04b805a98716facf4465c089ebf0a93fe16356d4f423c40ba49ffff001d1fe4ffa9","0100000034f0388a81373c1ebe792a0d5757f37e91755669b4afbd2d3f2aded10000000007a0ecfe95aa6f159fc062a50f6b90e5983960245993c474395a36d242f01f0b5343ba49ffff001d2ff442ec","0100000032946042e857086315dc759abdc0c16c083fa8add15829618c455bc600000000e79bf60b02703c54e5c32124248bb45deb7ecae6ce094f6d3101000204d1ee588245ba49ffff001d099ae62b","01000000ba8df37056a9ce3fa9e9e315659a2bddf9b4bd1a901b20364757a00c00000000e3d4d3472e2078616c4fd0574f33ae0a7fd8ad701351906bd3013b2d1c03e04f9048ba49ffff001d2c20f726","01000000f87540ff2b453e3fc9ba9d06585797f73e4dc2e2725427ceeab17d920000000068f21828d87870b3b9036c179699b01da0a170b66498cfff70236ac2e3475510784eba49ffff001d1cab32a0","01000000f47f7317f77e9aefa217f915287f37357c0c7304f4aa9ed4647193540000000057c5c9a84633059e459a545632250f6ebbd3b94e507aba5b13cebf6fe505bfd3ea51ba49ffff001d36167b94","0100000083efbb061312fc37974948252e921b95be3940b6a3ce251300f9168a000000000c2177abe8eebb530e3b7d5010d7b2a9ac192d3ec2abd38680263af2fbb624cfbe54ba49ffff001d3162e112","01000000350026c1bbe7c87927ac36195a63bce56adf748cd3d8c1038b35e714000000003c1da1cbeca528528bcf8b7e109a89665b83ebc7749c981db382a960fac82c29dc56ba49ffff001d3e3f2e0a","01000000449bcb642b0e44d6504cb7a90871a3b758db0b618ab7106c3bdd404600000000097af7d98c1f949515197c593f22f25e25c2e89968f2ff49edf3973e2de05c312857ba49ffff001d2a0befad","010000001044860ae3bd9c79d92ad77aa318d07844d107497e4482f96546ae33000000002cfd7c90b0f0b1238f2e46b31aa8af42a9c049013f197c2a2b20739b3f14964f0a5aba49ffff001d253864fd","01000000da3f258c81560f61380656680e63d12a1e6e6b12ad9af41fae514f1f000000007de5ab9b3313d0044ed783c06cae7f69e06075aa9b7b1045646f1321e7fb3b2d195dba49ffff001d7b021706","010000004dbff535b4c4d85e8f7bd5f4b4de26d9fbbf4e557962a08e0c51172f000000007f2608fce9a2426d7042338de61687c4451bed2570dd0e2fd5a929cb725aded77d5dba49ffff001d19b976b0","01000000c625b1ce981f7104dff19cced6ebf7aa3930064d6c48553d4748dbdd00000000e28cc760f49354603a8df0f81deab53366fcc8ef87dbb87b769759a982f65be2e060ba49ffff001d03505602","0100000063a1794321207ea357804af444ec59a18210563f3c4da60b663027e20000000061c37354fe4e16bc29bd8efe6abdedae6e62c509c7ce0fd0315f64334036c42ad162ba49ffff001d07d86b94","010000006484caefa774bd57092c2a3a304da1dca013452da61d10f1959f427d0000000070e17844e0a04a567342a114caf913af53f0650d3968b9fa004afd82b7b8f6061e64ba49ffff001d1e8b4106","01000000d1c9187d775f4c41cd4f6b18571c8f14d8fc12644c895903ac1e9c1a000000007961081f2b073d4c62e63dfd3e95b680eef5d1632047ff1baa080a1a01c29a147564ba49ffff001d1ba9afd7","01000000646e0a2debe353017877b235afbdd0eb8c43e1986deecd99d3ce69e600000000c7861d0297daa95b033e940017993b1b416b30f84b0ecabb1964b676d0cd2d22b867ba49ffff001d1aaac9b1","01000000c19cc2f43db9583904d3c3b4ad720762a4a5be7b10cbf8d512e0d70100000000c4cab184009193d2cf607ffbed2094364951db052083c01a5cbcda318df03644076dba49ffff001d1a379614","01000000428572dc6d22400137a158b30cd4babbf95792f9eff3f4ec48ec3ce400000000ea80bcd9d7151d81b28841b943130369c3e478ff8b3407fa21b309a4b00d8f92bb6dba49ffff001d24450a5a","01000000ecbf6018099dfc36b0972aea8b6680897603e48cdcbdbc08f7cc699300000000a595e38ffdc242de53604125ddd2aef2997c126457011850d3cc56f4add4fe8aaf73ba49ffff001d349aea29","01000000e7dff85d0570fa46a299e9bdf410015e1106a6ee6706df7fcf021def00000000a0aebd0d5574013212db844c4c4ece4904e6d0f49ebd8d49381c7be6b416dffd2376ba49ffff001d2aa5ab06","0100000001c67436c202a46540f9b54a99d016e81de2122b1d2ead31995ad5b500000000552dc49f1d8c24c0ec2e9ee4fb11925131813ce453fbbe94c91b1d50e1741d39ef77ba49ffff001d209b6541","01000000e8d94127f99ef55a09155749b8c21f320939c9bad7e0304c39a7c016000000007126094df5c4fd2110af033cf97f4981fa38201771c897204be4f53434915d3d447dba49ffff001d07b7b024","010000008b0f45b67803b56b28bcb0578c3e9f210be43b9d3fcb0d6842b7b45a00000000a83b83555500e6cbe5a505532d675c6d4365635cbd008444c7da14e6ed9a0fd76b82ba49ffff001d38f15f59","01000000b0aecd8925e16e448ab06bb3bacc3abb094ac634e028acf681efedbe000000002707216a939759477559a888f633ef91ffd905f82141417a510546f7acf3466a1f84ba49ffff001d01c27bb1","0100000084eb7cd9137140c8668fac3e908a8e55dd30b0947b1230dbf7ea3236000000003e4e2fc0f2e1004cd7a95e63c0faa84a426b5756dc8bd72d8a2b252913bbd76b7b87ba49ffff001dcd326c10","010000009895168816a1cee81adc9e5ede90ea94bfd146b9314945f75aada4e60000000004f1f13697ba3680402722d9f7ddc7e0232df132428698aa7ab9de050129d871d487ba49ffff001d1b5f3898","0100000051ea06d745685945b3b03ae877ba4b35938e49b5c8c9722a57ddbbe00000000095e1c4aa5229e8cd190d5b74f8821dac1c4fe4239b359ba346bacb1c4083f48a7e89ba49ffff001d93d76602","0100000028ae189cc7fe9a6042fc99ed01b226636061332b992dc74b4b76261300000000bc137f8010627973b9c52ce5c480f2ff02f5fa738877030aa0d35857ee82252c558cba49ffff001d02e7d8d5","010000008b5cc6a1b84fdc17268e43c061e7b9a56cb381f61872bd10cc896a3100000000107b216cc56bc1d0ccfdbaa8485ab09321da3db33c9dfeebbcd0b4b6fda892befc8dba49ffff001d29445860","01000000bbdfc9946babf86aa6932c571824b079cf45baa8eb8ad724b3c0b17100000000aceee18d8e36bb60003c75025c5564f6e3f173c98b08cb6896d828b693464b18d38eba49ffff001d1b8fe700","010000008f671b1a4d8102c399879e4cfbc466908f3a15d4d75f17dadd897674000000005e83ccbc232cd76ecd64dd9aba32da8ef76fa1b9b46f70ffe65ad532fd265c55aa93ba49ffff001d19bfbdd7","01000000f44469d3e63a86e0af51b984d7dc3f71496b68b79bc8da33c1aa4da1000000006389ddce84dbcc94d416d7903f0f30d17901ba6897bd8cd8bea2218085bb3e883395ba49ffff001d34405a02","01000000be5e8b81d8666f1e36d9c82b5b713174056d91ffe7609e413f484d350000000093b1e231795bf9959b305be67ff9bd45b9ef7db4b25fe0c027c4cee31a5f7dd16b98ba49ffff001d339f2f59","010000006f86e931a1486dee3ae9df1cd23858d83ecd718a2f3f7cfa35cb41c00000000002bb98bd1e209d85d3c7ad1055706b46a2908087c1d6215341eca76015af1183369bba49ffff001d2837d5ca","01000000bce78c410a644d6ceaba63970ec070958f3c5a8711986034ca8ab0d40000000042508f86f461e0d260d9eb703c764dd949299a312d74623aa231c60d29a85c86af9eba49ffff001d02584193","01000000a69546e2be51c32f979adac021893625b51be1f838e5f892085fba360000000033189ac18d77be8e8b38d6010962dbd5c03ec8fb6e2e8f5c032cee3ef625dc56dda2ba49ffff001d3a931261","010000009b9f2941bf87e2d69e9b00ab6145931299f7fbedaa2c1a35df1ffa51000000008d27c2c0279cfcd22ca909a9dcae26881422c2ad8af6e16313d853a3f8ce903e40a8ba49ffff001d15c23ae6","0100000021408e99de7fe1a5a7d41bfcc0ff41259f3be3318dca6d75e07762fc0000000002be0ad075e70cdc89cb0ac86b57eae42cec30cc934f51decb7abea15604c837edacba49ffff001d207b7224","01000000f038841d06b7a3efadb4715d490eaae93a211c62469ec7a438d108ae00000000f8dbd6c0e67041fab9fe178b7cb3fa66a0fb7d4314589700f6473e0f563f03f1b5aeba49ffff001d097d8128","010000008bf9c8041dbc3bb48afed0802f04ced80e758a6c50af339ff405f58b00000000a47b5b4b1cb92f0c686d3b74c8ee944ccaea635e9a9e338b6bb2949be1e19c58d3b2ba49ffff001d345ecd05","01000000f43b3dc6603e8d68cda0d94067acb25de8528e00657ea2e3ca38cbe100000000f1e5fd1d623e8755cc9c75f5c4cf500b5ba4a7fc5524d7614f19d5492877547cccb5ba49ffff001d2ad0e0c2","0100000002e719f68c4a98c38c3be90caa3e14685f7b2e45a504afd4c57a488a00000000a0908afba31fe19c14024fb54d69d203ea9d9d7883ac3be326b56f5e97d9b2ee97b8ba49ffff001d480d8801","0100000087915c62a1e86b09a10e0c29be34683ccf9210ceb1cf8ef1082ae44a00000000ccbb0c3f20c6236bcca74934e57af67769ea3f8fe99395ea3918d58fd2707ca283b8ba49ffff001d50412001","01000000d60a3b8445e07c40e502adc711e2bd63de65db2c8f06bef59dc4c613000000004fdb562d2d0952ed83852c482fe6fb5f4899f03442ee780a23cf489537011ace68baba49ffff001d35956475","010000000a3a8bde512efef006916ad629e31552fd436f2af31eb7bfc1138a180000000023113a1040f4812dcf80e666cd362ad8de37634f680b2d92c68d59f584a5d39fd1beba49ffff001d37196586","0100000003fefe21437bc7801ca61f48d9811719a3c14d2143473770f20fa0c200000000b05730dd76a804182cf937f45131bcd495059b67c3e6424739bf0fb490592f958cc0ba49ffff001d2817e95e","01000000c09ef3055ab0fbee8e8b1972058e89ad84fab57b8d895005e11871c8000000009a523fa8c207d894565dc9bc20de3ccec3a924fc3a67099fbf84c9e9d7560363f2c4ba49ffff001d06579db3","01000000243ac0251decdefeceeec484661bcfde1c0d2dc9cb606105c426640c00000000b73b25d37fee19de0b7b2ad07627a1e256253d27978c0efe3deef1721fac26cc64c6ba49ffff001d3361ca88","010000000c8db8ed31dacf6d070b709dc984110f7b2b2c21e03dd766e98bf6020000000077e3360d4e34990ac7273e2ea2d4f91cb1db46ef2bae571ed89a992a9f519faf2ec9ba49ffff001d08b92e82","01000000b16555b7c0ac9e6a5fc0c27a0a6cb05e553aa7917db214ba381595f900000000e62ce80ce7040454bb2c7150674a3a25e6b16644f2881bd0e1b4402aca0e53e34eccba49ffff001d24f57b64","01000000bc0b17d864aa32a24761a7f083c8f40d295cbbc632decccaed9e714400000000310f86de599b4b19784b86902e7eaa5e7247c76deb8d435903997738a59b846fa8ccba49ffff001d00536700","010000002589990cd535c3ac441c61e602ad0367b8682e929fa92364bcde547b00000000b35b7e152d418435131cec2f1185310e091e7c8fb2c91d57f0a9d8d1126657f9f9ceba49ffff001d1de9566f","0100000026830bf04efb4d142c50152ea1484ace71464e54f377cefdacff81030000000006a576f7365ed08be2b976c16dfdfad29fbb7c3e2117fe1b10673433c44346dde1d0ba49ffff001d1b8bef36","010000004d2958624c403b84641ffec3a8916b4c41b0857f6282af3782485e10000000004f9ce1974a51b017fe4a6b4c55e80d28a726250a27fda1fb6d026b9aa10e9debb0d2ba49ffff001d1e093413","01000000a5eb226ad1770623f22d2460876bd073224e6ee1ea44d6603a4649a20000000037c0257631d79de6a19528b879f6ae37bc8d37b7b1ccabc0652db3a17502ad31dad6ba49ffff001d362730de","010000001ec5c569c2892804393f8c5c89958d9c7272a62504f0b2e0d17b0d6c00000000346cb0a33eb6042078b8a77c8efbb786ad5a290630afe0720dc6d1cc624b866bb3dbba49ffff001d069375d6","01000000e92f9b00c4906549c0dfc5b4b7e6377dac676f6f0edeaa9b60d21da70000000079d2b815a6ea43c1044f9c326c36d9accb75446ab705e0df9ae493a5387a9ebe8fddba49ffff001d21657a11","01000000933efacb1e9767f71fdb4028813ac13bbd30f149575efc8fcd6771df000000006d9356f5a6969d41b1fb29e0c812b56f009d98658ac1a9f86de704580b78b72cf3dfba49ffff001d2d7db005","01000000b57d69cb22149d6e53047368eead7e0dcc33ac373cf18c05f374d9be000000002da340dcf4ec7c54fb68c4b54e864d51cfaedbab26ae4a47d621766a0a5c0b135ce1ba49ffff001d33bbfa12","01000000e090487a983bbe5fb3a92acd2e066cb777749aab8f5d525abf5d8276000000005613b21cadf40e9cc5702677997831737224802ad58dfe761ce3458acc62479181e4ba49ffff001d34522115","010000002953115033ef4f6f3ed50d48033fbf4ced59e199846d8664b6024b89000000006339ab40ced19b26455bbc022991e834db9108fd481168d65ae4c7b5a52bbf1e27e9ba49ffff001dae28a514","010000006a30cdf9aacc6758c0bdaade0eac0c1edd6841290bbb56cb2cf4b2aa000000000a5b13cac22f00e1578886e0ebaec5c4911a597ba884a9b8b6ace69b6f638421a5e9ba49ffff001d04168927","01000000a7439909e2ac2c8e58dd37ad78020c9628ff005a42016fdafa9d2c33000000005d04c299d2533a2cc1356bb5db0daa1a88d088466d494d7ff964a90541553ea7f3ebba49ffff001d025ca995","01000000059c72227b594dc049bd02ded0dd10b03f43aa954085cd8835089b7a0000000069f7a0cac301649943cc017704f5e4aaa100ffcdc6b10874aefb9d15ef90c96cdbecba49ffff001d77b10304","010000001d777cf39e123a34ac871d98ff0f8d126a1906110110c8cfe68e1cbf000000007eeaa61c75c99de1cebf05f8ebbc5c359fcc14534b6d55312a005361e9624860f7f0ba49ffff001d1b0e5f3b","010000001f87fa9e4f3e159125a371bf60fb1d69aff4a25649d6c0d6ed301d7f000000001a1b59558072b8087a17f47bfeb30ae007a94f8943ab40c397295de730aa1ed5e0f2ba49ffff001d8162e605","01000000f7f7184c25c5a091b4bc3d93f8235926a208eca3c196cbd59791e22d0000000066a1d8a6cf0c076d44e7a83d871b09609ef213a9c155170abbc2bb1509d743869af6ba49ffff001d316eb8da","01000000df166ad7826103944cc35d8994a298dfdde3833fa0ede3b395e77a97000000006f494baa0e11e996b642ff98bb157f9f43bdb50259db668b42e63cf62bd57fa30bf8ba49ffff001d3a41211d","01000000d48798c447d5eaccd4f789a86e261c3987aecc2b036ac735d398e0a2000000004d1952d6bec0cfaab9944519415126089a40cee3de904aafaafbe05d040a7e2748f8ba49ffff001da1b77b00","0100000023770b1e11d2fd56bda9a5aac2cee75542b830bde220eceb2a4a98c5000000001ac9a47a2f18cb171224b9e9ff0a8ee540dfd9eb3e8b3934ea5b4cc440dd57dd0cfeba49ffff001d08670682","01000000461c8471182256d5f335aadee8f46da15d1dca6eac97270ac80628a90000000043197d98f3a11c1d08e5787dbd763dec6f0344e6dbbb05432ef36a875c1332260d03bb49ffff001d1782c0a2","01000000f42e80dbfbf2c7c8326894e67952860b646f17129133150ade564e3a00000000ef6ace06eb2b1ecb5341508de7be2ce563997ba836c45689fc8de1c0c6bf05a77c06bb49ffff001d24d3ce41","010000006ecec2ba4dd58bc8034f123f68d1d8f1c58d3d672e62137fa2739d5a000000008921c8935ede2dc04fabef1bbb6ba765888d0ba73a3ede7aa423422f3b64771ecc0bbb49ffff001d34e9b2d2","01000000c93be2bc5b08e824fbc81ff0200e8543b5d1d25c0f0fddadd8d94b6b000000005fabf1dece2a61e2f4cc2fff0878380bfac538330b075fce5abc300867670ab5e80bbb49ffff001d6e8a3400","010000002e78f0268208f014c656650680df814e5329f309f0811d21450b968d00000000a7239f05ad34f47aa4effe4eff3462a1e91ca766869c5c06c0c98d27cf06908e8010bb49ffff001d385b63ae","010000007165837c379b2f7ce19ff673871a36ddfd9ecbb7d0af6aa36bcb4c0400000000a87cbda70eba5cdb52adc00ad5b385514bd347caaca6bdcaae4452466a0801da6811bb49ffff001d3a16e903","010000009a22c762fcdf83d32b42af4679ba4bfb87c324158f534a49cbb783dc000000006cbfa01e72f360e3ee251d4362d23a4d312faf578c63a3b2974a8b214f44144d2916bb49ffff001d21f47569","010000003af08265825784228157f8761c47de696f402f556ce5f075c816c066000000001d9f790093eea527bb108a519cc234a153aad1fb98bfe363d378a3a8881d45261b17bb49ffff001df0a83402","010000001167bd8c762870ef0c0f966e85c1399fb4dae39a4026af9c61da620500000000401f7e9693ba83f8e62733d48175c55f59bc36858fd07f76671b90b5dcc32037ef18bb49ffff001d2dc883a6","01000000d561043da7bfce31210cbbc7d6eba78cd0e013788a4c8b5990ebb95e00000000db3de35c14e63a9a2809547ac10fc11bd5a65a3ffd74d59fc37b813a31e27add041cbb49ffff001d2c65b1ec","010000004ff48ba1ea72d687507db3e8645e4ff9d65091e6c543012200f2684c00000000c35d1caae6f5645244038cde454c20396a563b78e8c27d9f427cd68a6b8a16051721bb49ffff001d340c0d6e","01000000d8f508b89ebe06756f558a1f0e96b02fc6aeb570324f81f03772f16a0000000045aa2230ec0ab27ceff500ed989908351b998c11b5272b38e26dc09490eea17f7f23bb49ffff001d1aa0b594","01000000e863bda6cb31b2b059a55bc1c18dd85d0a4e38698576d4557961506800000000bfb789cbb630f5e0578b9464a7713d388b313ad5c38f6547726e25dee989405e7928bb49ffff001d36acf76d","01000000dc9b1ff1e3b35d917b67f99b7cbe2ea2bca2bf490793a5fa192de9d2000000007bb8cc42a885389a5c983e4844a05e75d0683de6181379d90ed92966adf181e0382abb49ffff001d1591d5e2","0100000085ad1fb4d185f49a888b399e99223a9b2d7aee69bb3eb1f33285ed7500000000d36527344e9af2b7019b83f790c503b20f691dd7364987d4fa76d17294b58d1a4030bb49ffff001d3a18ca91","01000000c68d85bb824bc7ba6c0f88ed2161e727615f21cb918c97076d99400300000000b3f1d30bb46a05232c6eef019e1cc8a121418d35bde909945907ec0008dbc9412032bb49ffff001da58c6e09","010000008b2a8e7cd295d642071856a7698d6d3140840373b54a977c20cfc52500000000989d689df7dd5d34d5f1ba2937d79bf8c9370e0b5ef9d255f40d8fd87030e63fc232bb49ffff001d2120f402","010000003c65d355630c4a96abd99a16c5238d7dd80299b1d4274d1e428a7e71000000001b9f89d09c989d17f98943e1127aa82fa7e98f34beabf0f44a84f84e1c08fda2b936bb49ffff001d22a4462b","01000000576d8059ed8fba0cdc662261f89f49b0b4ca49a2ede32afbbf0eb8ca00000000212203085f446f24df82e08985bf8c1d42f5c9c81abc15f6a0166daa706cc8d07c39bb49ffff001d34732441","0100000089d6714975c64253a4a60ee586e66704ec4ddb4fb1556c4f539fe1c5000000005a175c40c0f3ffbf332e7cafdc5e2ac2948d480842b4db952c75b66383578e213a3cbb49ffff001d8772720d","010000009c830c21fc72c5e89178950b13b5fd1e58cb6723de8e12906092650300000000fa310b47ce80c61d716175a9f01314d5778152cd73ef87f7751927fa4257e28fdc3cbb49ffff001d215869c6","0100000039dc25d307cb8d09400ea6ad1475387db9b4792c7070e7757bafe1f30000000018256bb0bd10daab5e27dde84a74323233fb7eb941960d2e7ebefbbe841d8ee9c542bb49ffff001d1fd89609","01000000661a54c6160339d1d4b7ed72b1398532e09e6d10e65e00a5d6292b91000000002471e8d1f811d65fc5c164466d3854d204669d692636b0651117107ea48089ee1545bb49ffff001de26b3506","010000007248d465decd0660d7ed683c2bfe886a1a721c3c8b13962d31d1ec22000000003c14ac34c34700391fa3ba24dbe596ba287131ed55bc45692e6b26f8f5a91b088d45bb49ffff001d2cec06b4","01000000d7bd12d3311e8ec52e448cf4322ac285e22e6d06eca142e85af33c3a0000000099b23ee06354350a69de2949292e8cd4c1bd572ce35fb649cc077320055d548ba34abb49ffff001d29e6ef84","0100000006844e993a82ce076428d9847c3c18f74bc4549c6e391f2e5757455200000000ac4eb5f9b150bf5dcfe992abfe32557b0c9949542ffe9b1639ba8245391bf86a034fbb49ffff001d38e7d067","010000001c42517e0233f54c0e057e67627b38766dd13907f02210b654e7caf700000000cff71fbb13105436216aaa7b5f73ccc7900b8d31aed90ef70c5101e87e5d25e5c451bb49ffff001d335345bc","010000006bf42c51a57a8790dc54de576ed63fd0cd13e20b7cc7bcddff13030300000000a5d00af305e679c6bae7e81dde4e327fc23fa60e524f3fbc01fa27584fda79944055bb49ffff001d37cf6d67","010000005f22dedfab422d6197c6afd5c00e3d175124637622eb49e3766ce5f7000000001f4c1fb23659c6ef5799fc05fe39d39cbe4bec9b8da4379bf1826db24c296f089e5abb49ffff001d33d50db8","010000000508f11698d56d290377cfea8cb2f8bf01aea695f47d57e8b277be540000000081da09b2e0f1b5eba85148eadf49826eb642ef2bb8efeb3576fc2a4a01db1d213860bb49ffff001d33ca9eca","01000000228129dbbbeebbf3b34ee641dceee30525e76d0e5faa38faa1abf98d00000000462157a5fc391bc3333fef277f27874e360f92c4acba13624e0c4fdd40a3a31f4164bb49ffff001d2995db08","01000000a36fa8290e1616d3c417da5d849e7c1cc3056ad2ce54e5336d307a7500000000382ded7a55b66644068f11a1698af26d5ba995c4a0d25201f352d8ca8093c22d6c64bb49ffff001d04ee6ee1","01000000dec64bed7837e1a23abd78e3717c931778444821ffaf84e242c0f4cb00000000eff65fc5186beb45d28664ee31774188a73fb807e6c553e135d66975dffe4e06b269bb49ffff001d36d38669","01000000095a55b26394c5c1fbd3d782a4e907f3b03a81fe0d99000c3016b69e00000000cde8373252a37340863ef8c322942191833849d0096da0e915b6371220710b06a76cbb49ffff001d36dc56a7","01000000f4057c7941ee5b425326c5bfef5f438f9c3db2288b64f071cd24edbb000000009f1fd0fb800d05290274fb650b778ab8c862c1a09a7279d40a257af67af0b1f67c70bb49ffff001d1b66044c","01000000bb897486b9109bf2bfa1ae4a7d5deea985b3649f8f255fab909e983900000000dc7d4897c896a168a2935f6f1ac03bfc2e66e47d457700a2b749748a8feef2c42276bb49ffff001d3339da15","010000002ed203fdcdad451f97f8278a2d205fd1fc0ae067fe2d620685e0dbb2000000000ea5d867a5b95e3085f402bec432c52f79b19e59127bdd7afd0ea0200e7f5006cb7abb49ffff001d1c0ae869","01000000dbc3b16869f2222b071192abdfed5934b4b6ed90716703306b5d3eee00000000f99ba3ca18e7580314ebd51a061dbac8843ce0521dffb04115c0d2fbbeb733f36a7ebb49ffff001d023bc83d","0100000078aebedddb4b6b2575bd862b36734d030d6e63c16e33601dc7dc2b7f00000000aecdb5aae78599bc60423164d71fb40163835bcb8df009174400e86dfc55652cab7ebb49ffff001dcfa89f00","01000000b670737d4230f78693014a1bda82b4c02133797f991ba0e389e8edfa00000000de7ed99f0560f2f3688bde3d592e14925db27e12ec71ca67ead979051c0a3ecd2281bb49ffff001dd3cfaf05","0100000048925eb236d3165222e1b772ca11a38ae4a01e8bd30eb07c9d50f590000000004321a26cae0cfdd4d2f9846db82668f6ad9e011078079d7d6354bc39811a95171882bb49ffff001d02e1224c","01000000384b01cb1b0c97e80a5c33eb59d9c5ade42e1ea20b3f19922d06218d00000000192dc4d2e743b50a153d989659cbfcf6e05ace9e20f2e3a3ae1cc168fe0ec26dbe83bb49ffff001d2bcdb01a","01000000140c790c6d8764594164ac4d84ff71ca22add7483f9e0b2053f5570a00000000d6a4f870c85c1d99eb8c8a0ef253305329eadeeb41e37ceca03ce66531eb06238489bb49ffff001d338aa001","01000000e0e3ecf9565fe81e3f225fcf98ac16f00a8ec7e322251aab4c855b400000000076d1dbc07a75efd24f9b25200c9f6c38f1eff54ce676c29293e42db3d1802b7b558ebb49ffff001d15ea30a0","01000000eb8385b1624234674de7692efb9038e9a8368290a1a7ab8371a7c4cc000000003a0aa13daf9d82be37ea78053b1d9f6f7c9ac0c8bc15d9238757d1bd74d90172a291bb49ffff001d084bd5cf","01000000e5e16000cf93fca273824ef9e9a1856db91afc461b8c8ca159d487f900000000eb629e364f10e558bb89effc702b3d28c35a764dcb2cdcc02c1451fde9b8288b3b93bb49ffff001d0951d48d","01000000c4025dce17b0c9390712bc2c905c606dab4b097323843d01da1368ce0000000025d36b00affd2658c10329243c70c3215486be27bd1bcd657d0a21b9dbcebab05a95bb49ffff001d01d37151","01000000a8da019290f097587eaaefd809f024b57419a50716b65f1fa8ad1af100000000cd8b1b74ea0e7a918768b1af3557a80ff415986f9fec93d0e3e49d13343b865ac296bb49ffff001d06aed34b","010000001db0bc89a518b326f7470aae17ab657b7b3fcb0b8bcac7a4cd7781f900000000da71a63bd0ab04abee560a0ffcca08a266edc4397942cab83122e29e17f737023a9bbb49ffff001d081586df","010000003b7f53c0e0b276e71a63549680f490fa8955ebda5723bc2d5b8e55390000000033f95fef514c1836a0cdcc5a886e2535071c59c78887eed74ac29bc3bfda1507419ebb49ffff001d5c60a20e","01000000697747632ecfd9bbacb2d7bf9ab01e3363514e316269721f404dfb7f000000009e5b15a0c3aec841edcb4d20112561410c447cca81d6e8c7f75bb2b518ddfa65d39ebb49ffff001d045874e1","01000000c6d85a117f34a7f35eb0c7be737952312bc1a7e9ed3316c2d662fcb7000000003952ea4c57bb67574ab334d90d4a14ed5d04ad2a1b430504d19785c1c8bca259e6a2bb49ffff001d27b33103","010000006a5fb4ff3932568738e13456dd234066800f53d7d8aa7775c9da42b4000000002a7b6c515fbac99ac5b806914d6aaa3bf5a408db87593349e1a64565d0c2dc63d1a4bb49ffff001d025710ba","01000000ebd14d8701a1b10585fcc9e3e88f364d75a4232f608db025fc2570f800000000734cdd009750aa27e908cbb1518be642d3ff708f3ee09527692efbb6bd80eb0b1aa7bb49ffff001d33bc969c","01000000229ddd472e3333c2d9b2491dd9c7d50886ddc7f10a1d5dbcf54c8259000000000c236bc6642200a981e2044fa90f1b8d5926e4d7363a05c05baa0ff2162fde2d86acbb49ffff001d01f6ca21","01000000c9df5dca61b63cc7b11107281171fd67c36aaf188ec6923b0996d3e600000000e98ebc8a54529521ea2c3ab1fbd1f163d9de02d6aeebd20a878bd6909596f802eaadbb49ffff001d22b98128","01000000e6d9b12ac7b4ceac003301b077a870500e2940a0d59210317eaaf226000000007b31ed247946df8f617f06e4325cd7b45682a27a5d6a0cb2bd5240ab4f6c718577b3bb49ffff001d2a02c04e","01000000b04c72bf89e0f65151427fd6785d741b250b82d66e97acf8a7b8ef9700000000b2f53089c088f6b28f86b66c26990d1c7eb4f80224294da5fcb6ee8dab71bbed5ab6bb49ffff001d1b554f5a","01000000b6a4d02cd0ede4ae6f7e819c535388ca755b2d074a2748f2ed2962fc0000000088b62e03ca4d52c91357081b0fb099a9fd10ba9bfdbc6c8a83c0b2ed3cbc8c4c00b8bb49ffff001de876ec07","01000000aae75a60652347ff6ea790b12da5bb4217f521448def9995da8f44c900000000eb7895bda5025cbd91c658e2e043ba63f99943b37b31e02cf3e87b496cd7702e37bcbb49ffff001d01c62fab","01000000f8badbe77c7ca74f63007adef50d602fcbfe186d962a2f4cdeb8d9e0000000002f0050de07d530d4a2b39091e8d5ce384756aa3a4075a685919ce57a18ab6c8d2fbfbb49ffff001d1a211eb6","01000000ce30bf68356b67cbae1af1aaf47798f9700cda9e64a7531167a96bd900000000590f8b66f9df578cff86459221d4b2019245874ffb0ac5ffeec006eb628809a19fbfbb49ffff001de4c6d401","0100000069ab2306648728575404bbc714d96b6d4d1798306be0c709368c685d000000008156baac8852067095958270b6b633facc1fb0c9430076ef4f859b346021a84765c1bb49ffff001d27958caf","0100000097e9fdec93782169ffc4cad1cfdda162e0fdf06fd772e8c9f9f3995100000000cac6191db581c018ef538f049d635782f8c46687ab187606b9baa0cfd12a8c5b05c4bb49ffff001d328afdf5","0100000074b742361f125a3bc6ad0e85befc68785e3027a43063c1cfdf508ad50000000089d0f3429001dc202599777bc29a126af4296c6099584486d5a65a0a4b767dff6dc9bb49ffff001d23920089","010000009fa8e21042d4bb3895191d41669775cb7eda5e0975a635614a27924c00000000eecaab100383d11ddd60d5d699d9a85cda8e67c2c1b3e3f747a6e4cafd429b90d1ccbb49ffff001d20da617c","01000000bff322f81e4d7e0734cc244819cd78dc8edac435f90399cb81c5ae950000000072381bb512d79a0941a0c9789175e12edeb61228f4b2c3f52555a060e818b9618ccebb49ffff001d058f8f03","01000000d21a6ead7e1cb8afc0c18c4dbcdaf90f8e6b16a8511b335cde9cde9c0000000027f8eca1553e7074811d968002c61a3115d25e54dd127d56d5aa1feed23ac4f89ccfbb49ffff001da8e6ad04","010000008098cb0ae3fe3e55d39c02a129799040a2872353a01b443ac1c3dd5a00000000dd0a7b4ee4550efc739ffff2f88a469c40193efb3c79b2d2e793625975b8bf7d55d2bb49ffff001d37485b60","01000000c666a984c022f81179ae791e3531dfdc684ea97193efbd7635cdbd1200000000276e4473b564a79b0101e82d4f9babb0da9dc3a865cfef0aad8db52b81d39e5133d8bb49ffff001d19dc61d3","010000003054386740bc143f80c529a5a97542d846bf58faa0029a2cb671a9f100000000b51477c8413eb62b432fe9d078864053e5f01d65ad4e88a8421f4c146cbf8bc9d7dbbb49ffff001d2416f480","01000000bca50e8bbab2e1a20184353cec24a0279b2c1d3d557dd2e874bc0be100000000a4cbe06cbeeae96bf9a0df4ee39102b076e5da2760f5979708f8bf23bd21ccd5c8ddbb49ffff001d183f70b5","010000003b0797fa7cec9a5aaa664b2822565789a2bdd8a06a52036caaaa08cb00000000bfedcc226605504bfc8be345a8af736ca3e96193149b72d1303c8b842ddb3d1de8e0bb49ffff001d2a0492f6","01000000ed6ae4d8d68bff6ace8b63756827f8e657897111868578d1e839803400000000427be4f47f25a25d8ff125033f88ad4b21867b40f112bec4a00b41f1e9384d2594e5bb49ffff001d1a100c9b","0100000022eae9f70113a898a205a67ac1ecd6422071a97a634b599bfc57de8700000000de175b8fd620b9f30cba7a3e42c8ae1b9be6faef6ba250ba41567b8e1ce2454a59e6bb49ffff001d0eb37b03","01000000ae687b9c2c47d81a0f0f42ee20d96b4b68b6111e59939413aa6f8abb00000000179d83b05156fd182cfb73f8b4d672e49c3056197fa0f177b8e06d332660e8a370e9bb49ffff001d19a9da0e","01000000c2d89b374da069fcd1da873d306b48d9da05ba28cdddd98e6a07522f00000000db3cfa5e2e7b2c1b69e521bbacb33c998dfbd0bf13ca0bd5ff09e3bf37408ee2a6ebbb49ffff001d245ab066","01000000301ec0266536ca59309589abec02691ab206afcfe4cdf346caa6268e000000005fa6f22b355993946abb1726b4145a4d1d75e3ed2a618506bd4221f85a61f525d6eebb49ffff001d2920b2f8","01000000cc07210c33f62e395b0aa8027cf227d11a361cd85e6de8e751ceaca70000000079ea6fe63fdcaa78eb927fc4e00b5bfbd18cd2f33581adea46f41109a8e66dbb46efbb49ffff001de0adfa01","0100000082aa8599a12c7e821bfaad314f8aca7a1809adaa4e4244b2fd05b66c000000004caabdd9c48e7363a68702c2427fb9afdb6e7e9ea8c4058771d9d87154958ea1f9f0bb49ffff001df1cd8d05","010000008ba95ba12c025508e05b69a75d1bf4363cc8066cbca3980bc3cdfc8800000000361d0996319f9ea1cd82b78594411b7808251c8a9a7be6f06ba32773db978c4213f2bb49ffff001d329fd4e7","010000008ab3e538042c3581bd15fdebe1017bc66e6f7015882c4c53252c56540000000014f10fcc6fc414029f0a98f47adf37d84879da168407744e455304af4324b1ddf7ffbb49ffff001d1785e1e5","01000000035e35442d9f65397b2caee12e9c05cd7d5b7bbcd52dbecd84f6826100000000fc7b0d78e6b86ee0fb5974c0c517603d5397d6fe60eba1d411e78674f793a199ea01bc49ffff001d2a784c27","01000000598baa9798dd59b342ca89174d27ece10d8bb5d9d66b9ac66b08015400000000c9768b09c16d5ab72c7cd5a2b3be15fdf53693e8fe55c707822ea1e106c0b899a704bc49ffff001d223c3944","0100000010a86f1fe51d3d63799309e9b7705337b685a0e368fb72f5532d2b0f000000004b9f58c0f341949d63588e0a18fa6492ef5f88983e9bb77cb008acd266a414e4cf07bc49ffff001d20a0aa7e","01000000992236d7fb93f1135ae55c77ac0ba7ec8bef62146f9c073f85bbea700000000013c359275dc0202fee0ba1274bc3f9e50f60d5d5a74b327e36b92db33cfed70f5c0bbc49ffff001d052e8172","01000000da308cef4eac0d18e1dfe53b4f5bcaeefbc8d783faa9137238ac887900000000ba91e32acc805f61ae596706bc8ebde105dd9229acd4627353bbcb3d3dfdf1fe0f10bc49ffff001d21c200d1","01000000aed7bbbbe2119e01902b19f817fa0f37a547d5618cbabb944f6da465000000005f20cd7daa2dbf827c78c95dfe56c5efec3a904a4be460c7c78234705f2c61614112bc49ffff001db25bc00b","01000000c404d0b76fc3210c113dc9fb9fb4a1effc59492656f4b2911e8122aa00000000ac8dba44aa26b87bc9d17e8cf593907e7d11cecc8007071a566befcfd4a6a52fe514bc49ffff001d2a9f5f76","01000000c3252f801fd316c670ca000363f3c99937bd4439ae57ba5398065dc900000000a19c9254ce84a28a7891ec4984495ab4af23dc2874c5c25307ac2b6ccf84e3eb7818bc49ffff001d264dcb40","0100000056c9a93071746dca8a4bfc5c6f4cdec4dabdd5fad192bdbc7295cd10000000009f824207acb837bf4fc214b8eaf2c822da698f5b774852b51becc5edc106b4a54b1ebc49ffff001d289c28ed","01000000269c5d8c68b57597b3640e3d956004ba2f1441f13e05f271cc3550620000000034691c400ad8b2444461945a956a56a44777f56f4bdf58ba209908c155a579580624bc49ffff001d028d314f","010000002ee97e330ac5d8e4bd256ae1c4e3476802741c50f95682540666abb800000000dd52585355b8e1b11965eb9e42607f0fcf2d7abb05ce4f72e71af0a557e34ee6cf23bc49ffff001db7f94900","0100000004666e02cde3cd23cda0a855309dd70dc1f11cea43f93064be42023400000000f753b093d9379233892bd734cc5903933428865a16f631fe683747808a735eae3626bc49ffff001d23962294","01000000c5ae2db5bfc69b495cd25b8f97c44ad2face025420744366418a455100000000fca7b3518536515ecbdca4e15125a13ca3372ebff54135e8dfb000e20fef0e063c29bc49ffff001d0099d804","01000000006c73e8bbc56c914629e6cf4841f6f04f86114255713fbf57ad87e500000000378e156300f3cd6c13f0efded372c59c4ea652e0b57ef01c5434003c274e25d7ab2bbc49ffff001d27df9755","01000000bfcb07d7a0b12cd25498a47293ce75627790a1f9b38f6330fb3f2406000000005e01b701398dd0d06457c982000246303c47bd0eedb11be2391922904123f8a0162ebc49ffff001d1572147f","010000007d56fde83c262ec04c1608487f1c8b812adb9163a6cb88be5a06ab3b000000003456b9d9b44618a02d9627d05d8920e0a41af86d930565ca4af658801e47f9660a32bc49ffff001d2ba430ad","010000009d1c55c0fce9b95941502475ad7eaa27b6fa4d99dc331f4e2ee81543000000005318e80f11b7e96cd843f4c43233f56e6a65f804c601c98379d3de0980ba991a3034bc49ffff001d6cad3005","0100000013c39fe49b4ed99bc125f8536242a44e5313a483645968ec73574b6a0000000003ca9f5e030a33ed380c1239071421054d6dd0bc28e77f0086233da0f93969d6b636bc49ffff001d37d020bb","010000000e9c2fe93bd9c7a478b3b8e165d02c3bea31aabe10c6d643d7793f5f00000000af0caf0ec6b54db2ee105a4916e4f36b141b6bc40d1cda69dfa4aa82531f247da239bc49ffff001d1ec69398","01000000be027df70e4f7c036233e084c734949b81b9e6a224cc0b06f2b5e91d000000008cf91a4901b402662a4ffb516f108caaf28a3901679ab154069bb3cf9e844034c23bbc49ffff001d6be5dd0b","01000000ad211bdcf7335efbd4df5556bf7f18927c387b5b634d584644163c7300000000df7c6d74bcf76b679298e4c352d1496936d99f91c48108d11109adce426b18edb93dbc49ffff001d1ec02ba6","01000000567763b346d7eea9f995ccbf6b98b383ea6658817a2e52c76f497fa700000000b42e2ec1302eae6913b3b93cb5e215821ce98f1876f260c6e30398694b2691a20e3fbc49ffff001d05ffc401","010000009193a7940f8e242630cf1b91eb2f47a316defd269e5a266498ae639500000000ad93c8c77885036ecd89458b12637dc5ca180b8d02ddc3d119e440ceba8a7f660f41bc49ffff001d2ebe0ea5","01000000892a1f7ab8e27c138be8b2fc1588cb6fa5ad1730ca147737358d069000000000b51d85138f84c375783a02bf0bb3c8d85fda4700e8c19bf1f58472d249fc5f59de43bc49ffff001d36b6af53","010000001d9470cd3cfcc7c64b2702b733d67b6735c306d86866fb62c95d1b4b00000000ebd67f84bc56d1e8209abc2347ba2b377170188ccd8b86e86420e7caf5f6eea3bf48bc49ffff001d2a613b82","010000001577efd45b2c26f614d6089eafab971643d59838119bb0e0074359d300000000132523550982a6afad07bc79e6c3ddc0afb673bb3f865522d87eb8693fff76af0e4bbc49ffff001d27ace71d","01000000aa15adc2a9b9a33e75879f0277e76ca6fd80165b32a0ef96368fe72d000000005b4b57f831d7d7e024fc0fc8a7de3ab46283cc22640de24e40e54ddd509eeb96774cbc49ffff001d2fe38ef7","01000000c9c6a18774af2343a389988560b815f394932932918db55a2f80023e00000000236a75329235db76323f353499f94a1903145b9318a823d0b4b673d6636f6c15c84ebc49ffff001d36b1dd8f","01000000e8bf5036b69e5f93447c5b058bba76223cfdaab8ddd5d1b48430f342000000007f949cba9b3860953e06cbc92fdf0b898003c03815b9ac7f96aba062edf4db856050bc49ffff001d2ac82b09","010000007a6212e8374674ae40f9fa8aca1bd07dca3db3b6266ad8a491ba4a6c0000000005448165ced748f214ef9b859eb1b4ba46c1499a83ff0d5a2dc8a7086d5fc0960753bc49ffff001d212569f6","01000000e4e5023df8fbed1a599fb3af5251331fc39d9394ec08e4ebb8a4a49400000000335137802d54e2535cea23d3d278a1ee02d26facbc64384cae5cbf64100f42bed455bc49ffff001d0831d5eb","01000000e13b5115f1345c9a43a681d3e59f2d5890945eef49defb3deda5003900000000e3249dd61071d94f51ca73f1a42d012bd0fb91ffb6f6eb5baabb42554e4b2ee5dc58bc49ffff001dcde06804","010000004e82a229facca73fd71113758ceedf63beebbf8d07538d4322c291e40000000043633138773d5c5deb0635cfb0de2ba51d40110f12e11052dd87297959a3fe652c59bc49ffff001db81fbc00","010000002119818cd81f49e10c3342b2c50413ec4cca55de8c79d882f6fe8774000000003f02bf5f475af477040d52b77767ae0b99c55120b676ed66f6c6d2fb0eb1b1eb925abc49ffff001d34923cca","010000009951e4769e180568a2d166d1f8db6c1ed7d73ca82d7abfc66c27af1900000000bde53f68caaf9403f967bd48f3b6421d29ec36e4e7fe81f0edf36049afa7b81b5a5ebc49ffff001d203d7c03","01000000d23fd251c45ccaac25de917269c70a964f3278bd64f0d6584fd8522500000000d38da6a264bd79c29e49e12b482b459ed2c7c63730d7d19c8ae24debfb49079f8e60bc49ffff001d2828fb40","010000004308e6782b3ab181a2a8936c8a9a003dde76a225f2a63cf8e0f4f323000000004c4e043d35a6547608e5306ae2a0340ef863ba0d38e37906326600b6da786464e861bc49ffff001d38a0d0e4","0100000026831c81ab3d053223c86125f23a4064c82edd638cde8e0008342e7e0000000066344395571047f3df3941dc3a08c72c7de3515d1c6fbb3d304b7b1da29f2fb7bf64bc49ffff001d2ec81b07","010000008eef32b091e24965d024612fce519f19787a40574bd471fb4c3aeee200000000de078fa7bd2491abab7d7a1a87ea850ef79e60d01713f810d5d009189f64474d2568bc49ffff001d5d683302","010000005997fcde922ee0705c2085dcfc8cf1001ae4998ef493ae4407ded55b00000000864a66411015ac12a078a6d8270e4e4f7b0ed2928d71add6f3f9b71db257f3e91669bc49ffff001d2cf352a1","01000000954ef46f78c585bdc451a7f0d1f76a358f312d8652674918c1b09b6c00000000e04722c483015e38652727d3953086b8f96c7f169e00985173a123718acbd524b76abc49ffff001d3423a7b4","0100000041d36aa8bf073321034da361a21358bde3fd9edb46d998b621d65b0a0000000030834e505c2a6b3b1f0b034f26103273a01e1e3c09049f7a1631f443f3978e4c2470bc49ffff001d2d313f73","01000000a0f212fad005e5bfe2e4f043d77df0036196c16887c2ebe6392abe560000000021421f55d8b979741a6d7391a8467771571e30d1013373a58a452646aa74dccb3371bc49ffff001d67352304","01000000ee8d27bce8c753ad529d1a4591179fee2d704a94d4d14cc6913a359e0000000052efff67303ca507575cab73890186367a2209305751b928f283fd74378558a87f74bc49ffff001d36fd7bef","01000000d1bc6853ba76171d6981e1ed248dbb4e33515a556d950f47ab67fdfe000000002ba36a3420123c683e68151b1e8d5c990dc56ad22d821d6667d8c80844aa8fb60178bc49ffff001d087f0b64","01000000b6e3283c06cc264fc22d2c201e7fbd69b31b8f3c65e71d6396800b2d0000000073ac533e5d9537dff0de4ff2b9a7bf000224a696f7e8af7641772bfd41aadc8f4d7cbc49ffff001d2754550b","010000006caf5d8424fc845125d7bd145d0a788b70be83a18ff545b549217a270000000005da1b4ab5942f351af8a85fbcea45eb6b55a2dd3ab69dd5b494b0aadb6a7a3fb581bc49ffff001d13aed1fb","010000007885479f3ac714c5a8b2527c38f53e9b4525721c122e982416bed08f00000000dec87f7678241f11b871e66b3cddc3aba96dc0f98e40a03b886275896228b07a3286bc49ffff001d1644f0fa","01000000f5fb4b84e9fd92f4b8adfd92be450b0a71cf7ea4eb97ccfef20ca1ac0000000002187eda587d4befb3d847d02e1e5208b732c8e800b276a12856cdcf78017624dd87bc49ffff001d2c7a488c","010000008994ff2dadd69d7bcdd398e18292a2fc1995f0462651a3e27e29b595000000000856873ff1283acd16af6b3818caecd0f85276e904b3fc200c58b0091b0e83f4f989bc49ffff001d3163630b","0100000016e824d304c6a3cab0fbc533ad37b5c97cfe97dc00340a9e1bb549c100000000ccb3d669f8ea90dd68a3136ea78aa85073ee624722409f998d071f10d2b03ae1ed8bbc49ffff001d2207c966","010000002b6025c38169cd82b1dedaad6ce8d336512182ffda3512199de7ea7a0000000005fc36b7b997595565bf8104c9776729355d21e6e9f9a73d6c28de594bff943f6791bc49ffff001d22100ecb","01000000fdaca465c626e240657783a917ae08319c99e477cf35ba5c7a73d02e000000009c1cc427559ef26b6bafe17b760b9db543b1b63bb7ef49c34fdbe87bf004ac46d795bc49ffff001d15d85243","01000000f92b0af2a2c9cedad262cdac6eb251ca4ca33692915e2edd6bd41a3b0000000007eec71712459a61078745ce6aef979ee83db7f6f903d16e675a603b61f504097f98bc49ffff001d71900e0e","010000000ced87e8671e81302ad3845b1c05f6bc81bd91006d3f859c08c720b100000000f36e3ce27ba67c98be18313c3504e38a273b0151cd6f64ad5169cc2827d8df7cc499bc49ffff001d046ca241","01000000cae0ad2c7d31c5ed199f3606d6f9cd22cd12d49768e2c3cd7ebfd2ce00000000078c378cdef3547f0fc50c7926be2115ee94a065afa15ebacbafbbff3f6e11dfb29fbc49ffff001d1afabe8a","010000005d09de297465de193a3478d9a815d44e19cf0407685491e4318bc60e00000000fdd229c32feb7527d8d6b5f54729e804244732b69300ba06a9c132a965df7a9c16a2bc49ffff001d06e0dce4","010000006ddf1f348c2eef5bd9af6ad6fa066f90ab96fb51b65ef99601a44291000000000874b78c8e0b07f983abde8579d414e3280b6b27c51b28bad77983d7c280ab3724a3bc49ffff001d80d91a04","0100000023116db59f2082106fae995cf303653dd409ea22ae2dfeebd00191c70000000044e6f30a73ab0efccda281fa647ad4fad8a6c6985b9ca0a37fb100221a74ec7a20a4bc49ffff001d18f5fa4c","0100000063bec9f74156261f581c633ac1d4e3555bb87a4bd36115273919312e00000000346dd2a227acebd5d7c368e8e3ef6bb17d7685875dc3adb0a5b00777969fadd9dda5bc49ffff001d04f72a76","01000000cbd36f8044f2359c115a822cbbfb4ce474c9c0f9ca0927ffd2414817000000000cbb1e403ae3c31b5d4d43569c6be3dbd6d3f257d9276061f3e485a7db0fc43f16aabc49ffff001d36b804f1","01000000a56cf14965deaa7f80643e0bf87e45b5a7883d3e28ca244cfe428c0700000000538f3edf725383c987ac1c321acbbd05082d886e8b41e9efeb8667a5aebf2bad4facbc49ffff001d35afb72e","01000000459217fcf27361a682c61e384a6f8accd2d54d165267a8076d706b0e0000000067236b30fb0135114a34333ee1a264552bed7c50356dcee629bfffd4f818e53c47adbc49ffff001dfec8e805","0100000035cd3c0d90f1e12c6e5008071f01fbafa73792a0d0b217da035f0ee300000000e915861ce071e1fd350de3d7f3649c257020541b69b13f4661ddd92053c9dc1a3eaebc49ffff001df2c65902","01000000f3b1f249365f5f00d90f4521a5b5ea87b30d8d0dff8f54969393b31300000000aa32fb4fdfe5cff74ee099a4d5662cd62467c3362b933b431b207110b3437d8ee1b0bc49ffff001d225dab8b","010000000cfe87b567ca1c9e135cdba2002be7be1d3442c5b69d6a3257ff771000000000ef696ba8cfdce2021d7835da7432f29755378764596a736e50a4900bc09aeefdbab4bc49ffff001d2024712f","01000000e7f7429c50b895f62db4765eeeb0b29bec94e2ec7b4adff20dab7dd20000000037ea65cf6d83a255524a169e502405fbb7212ec633454d205af020084c35d54a38b8bc49ffff001df35bab12","01000000fef28af3485d01d6bf2a12a9053cefa1ae40abbd19c0cd18afffa63200000000b7ef8ae3a98920fd189bb148aa20049a4f9531776fd3d670d7c53006d1f9e43a71babc49ffff001d2c6e0905","01000000b3a4dd8eb256b85e25b68d7c354785a385d3c50e3f54e1492747e8ed000000006279d3688634c91670c9c237c1fce71e8d874e96643bd2d5e2e3db68c4407636e6bebc49ffff001df6a47d17","010000006d4e038dc60cc97e8fc0d996783236502292058c4e2217b0f6b4c4c1000000004968ac66d64257da826ef93bc5f58a482adf42bae90bbf1aada781ab433b0d2e08bfbc49ffff001d7af27e00","01000000698eca88026b319e608975ce3d89938d10fe622e0921f6d6b29306f4000000006c856319742a1da76599a86b29ab0a605e2bd830f5019c699e00984d1ece1dd9efbfbc49ffff001d18bfd401","01000000c86c5722f755a2dd5498257f07f54068cb7bdb5a84699ecc78cb4496000000007a4d47cae9687c66785c843c6a88aaffbfb808a43f8deb09d7940b23527366bbbbc5bc49ffff001d15388a8e","01000000a3f6e2047673414eb5566d05009731ac87a262c28f8607752b810ef600000000787393c41445a7f9b89e10b684a4a039a1fb5e23b3ce8fee1ee82e76056ac6dcc8c9bc49ffff001d1a714476","01000000db7e994f73faa70545deb4bed8493193b20f4925de5e16d57ae3911f00000000e3fdcc2869cdbd0d175a14ab4601c1f80471b694585a8d1eb446bee88694361abbccbc49ffff001d305adc24","01000000ddc8cedd71cd8b33c7f4e0f6ae410cedd2a4369a62b48e123f033d2800000000858188257ad2aefe610886a4e2f9ef5516753cee044f269c4905ccd156fb14f2e0d0bc49ffff001d23e22c49","01000000493d2bbd537e94af77701f891a240b5f8a32e7621441414ca656786b000000008c31318d67c6e155372d8bd050b3eb2dd70c71e19448051e3f8476f6ac27df09f6d2bc49ffff001d3a133440","01000000f9c1b4920b90114a951c4d945831c1bb601f198a2fe2d14303097f10000000000546674a0113cbba4c72f81d6104dec36e597b9bca2c67e5cc52fd47ff21378629d8bc49ffff001d245e1802","01000000d74eaa4dce5678fb13f6985c311cc21c4faab1b7875593f62a928cd50000000017aa483a0fc06fcaaf950fa7c67e2852043d59507ecdafd0de955d4863c0560e8bdbbc49ffff001d3505deb0","010000008737f475c126f6e3cdb22e7432f645022cddb382b3052bca6925baac000000001340ec3eccac17966d082b243c012d4f431f581433da4b84b83e103ec83738e38ddbbc49ffff001d0d004a01","01000000cb7e3e8c6a4afa80d454f6302b75c0f1f9567381c78851b70d721e9b00000000e692f5cbd5e1f7309a1f27336026051172cbc7b68fd5e280a791230a324c2e6809dfbc49ffff001d39af97bb","01000000d7a9c8474b9f7ca2e5bc6fa459bc99a7a6004808b3356cf198a0c3740000000081997cff30b9894f866c1e446ceeb4e76775b4cd9e5b201148b202eca478bfe542e4bc49ffff001d06dc7d34","01000000c1c4479d0514a6992d51f7d854147c4ce8f2b3ce841fc47ee84f291400000000e1bd9e888ea2cfb3aa6ace533c6994dd8f1e560d880a1fb25761aebc0904ea838ae6bc49ffff001d0823fdfb","010000001e17190d539ffae1a2490a6fb1f2753d40680e7cb58ef402ec90546000000000ca59b28b2a67e5da051252907c10fcf05a3187df5c154b00bbc29f2fdaca92772cecbc49ffff001d365ddd7a","0100000027d546559d4d80f2bc36b330011915a66c26cd707a0a60def3ca0a46000000004b6f6cead1bd6adcb6c316ae36828a022ad284629467304adad998b26cc282e137f1bc49ffff001d31f97d50","010000009d32e5e9b10b0a4c0605aeea64587a26814ff7560cac7ea87a150e4b00000000d13f06e4a2e443329657f0755e71f9c4af807beec0ae5506adebfe3e2cf8558fa9f7bc49ffff001d0832905a","0100000054cd071f5995ebb8142bc4d3c0b9e893f2f4c139c0fde9117437034600000000936667305f89fe2ea60f06056f1e31944afa9c4125745e7a06dc9c17d9078ac90bfdbc49ffff001d338d0a4e","01000000f9b923c337961643475f9fff67710d2be778c4bdae0598a1c6415b74000000001151db89b7dba8f204e8115cb290864f8ecd56da99831fc6fb64056ad96f1bcc5bffbc49ffff001d2014963a","01000000b89554b65730edd1a4c83c99b10722902e3359934ae28e5d1b5f5b5000000000d31b8a1924ee641da5fade6cbdda68a4bacd83ea2309520766423db713a1c3d1a003bd49ffff001d2db626f1","01000000d200d48378a37e7cd9cbfb548f75064cba955bf8a331e241a971bffb00000000ed80fba0c3aadebfd8e397ca4ac4e3e78d49cf4ac545adfefcdbec78e9ec38074d07bd49ffff001da289fd09","010000008381eb2a5fc53f9363dceafebe850ea50855adbeff924f4fcc4831be00000000abf40f8297c0c4909f651e77070163b623a43bccc35fc8bfbc2dddba856d4f576707bd49ffff001d3773b6be","0100000004036ba06c4e3c29b1eb5294a78294cd13732f7172459364e7582ce7000000006287e54a87b57b607869d720e16979f67bc6448eea50b96591c8c466c53923010f09bd49ffff001da9b08d09","0100000025dee9302abf4c82f2602c5758b3450cafcaad9d8b2404912a69e1be0000000053851473ebc3006c3259de5dd9d5f5e98bf991c17fd8d5b976e2e47b982546488a0bbd49ffff001d087c8f9a","010000008708872f2a4cbaf1ff8f2cc67137fc5698ee5ac63632cfc4c402da3700000000d9852d253d00137882dbd9251e545270b01f3130e5b7ac891fe0aa905691df3bd40dbd49ffff001d04971f62","010000007f8be5d1e8887b21bcb40df01f4850f4a08f4fcce9f28df01c9280900000000064fef1cf11070fcfa615179c227213fe35163a5f9e5526050edcc2eb9422ec882411bd49ffff001d2397b123","01000000f6e8cc4f2ccd11f15f6f0a4829e4575ac3ded4a24890a4098d01928a000000005bb87e93db761e6978a6a83703391590f423c8c39bf0277bbf1e0da4cd7c29ff2b11bd49ffff001d3ee86200","01000000643123ebe72507eeb0c4cb9ea6a7c112c35c6be0fb4783a5b0f1043b0000000031213dc082496fbfac37515e64f97756eb8e2aaf865d0fd952b17f3936f8cdb1a212bd49ffff001d36a4efb5","0100000046660380dd401b18f33dac04e8d54018c09f679ed9bc0c3be8463b76000000002376e6d04ed9c628c2060bf35bb43ac77a35c76b8c292f3bb48a72dc52c63ae93418bd49ffff001d02b01c98","01000000de36f550ea0d3b5e68e08ff3283ee65486a4aebf1af2074d9d000dd700000000a023ea7b680daea9596a7fd027a05b3886783b0a402f44a537b87aaa160a1e4eab1cbd49ffff001d182b2fc5","010000008f8cf3e9dec148f680551949131b8b4924fb4105aff913d5e008beba00000000bec0161cbd0946921f743dd3789c456aff74052d5b07585e12b9d16216d17b008f20bd49ffff001d3092d34c","0100000076fe88e05b76e7fac70282b51e9440f267134f8b5c43492caabc1683000000001a19bd2de1f5b41ea20e030a3964fef815aece5ae68bae8b73e0b6c9e3d63d796624bd49ffff001d20fb9ef7","010000002660446cafa27b46e77d682310dc794ed5c8588b748270baa607d67a00000000f728995705783253ce9e2e92d8e97a085e45f2188aab3b1708ec9a6dc863b1a22826bd49ffff001def73eb06","010000002650e644e904769244435157b9c816c9ebd8409f3062eae33376b1be00000000bbbec3d47b8400b3ac9b166a6705db25b0528be20e652e5c52d2ff96181725d56a27bd49ffff001d2336a809","01000000851c04775c07f940f7acc9edabcdf6a5caf265749ba2618af0f8265e00000000691c79864e0636552be2b295e67e615ffc0d1033b4a988f24965e737da6680026e2abd49ffff001d1e14ecff","0100000002d23cbe0933c70bbdd969723ef678f06fbb1f8de3cb367130e48499000000003bbee6b5398ad2b535dd4c4c14046c96b98467a905b912ce7d0ef74579ac446d6c2cbd49ffff001d25231af1","01000000f060cf37e56895bad2b99ad592aaa7c937828404e462c297a567442b00000000477664eef8370ef164af32dbd689fc9cafe44e5488717370a78d720018cecaa1ca2ebd49ffff001d0913a215","010000000fba6724196d73234d1970d3af2984cfad36bdf2bea876e1052084570000000081c0abad0013866aa96f88bceb2944697bc63e29a027550c4510c7380afe9c60bf34bd49ffff001d2d080f55","010000000553a21b9cda457ecb42518897c26fdbbe654494f5fd853caedea2b700000000f70558c3562ff7207b52158e2b965caf7d485ecfbce9116c749ca02d9f21dd138936bd49ffff001d16994c1d","0100000034d957d9a1283447ca290a38bf3993a4f1a5df886155f48a25e477c6000000000190a205f50b7ac5d33e47e34f5691ab469a86d7d04546b26504fa1c0227cae4bd3abd49ffff001d2a43ec3e","01000000041b2e7dfc14798039c0a788e1d1297e1b0075712ecfd5b9a38c350900000000c561a9f30b048c5cbe6351b50eca759839aa17960b4e79c2dad5ed90d68d41feb73fbd49ffff001dc65b2419","010000004904c2b6a5e69c396d7b66a2d42df4444498b276b744cc10dbb64f4900000000eb003c90b4d23c575f6d74c76d18234958be766edd428b167e5aba1eb604eed87743bd49ffff001d09194415","0100000018a7b3117d186dec82cf870b51b8b0950ebfe7000632b82c3924bfb100000000d60f37be95739faa1c00420ed7162eb9aac07e2f1a7bf0e0085a4e77c573059bc846bd49ffff001d2fcdfd78","01000000449e604be2fa80432f03f432f30c9d6c38047dcde0142199d59d32b200000000eff1090ceece3e92a520ded89a2d1124a8e7dbb63419f79c6ab3bfd10c49eb3de547bd49ffff001d17469006","01000000547bb39def44f31720bbb252e682bdad21ee8a051c3b8566617a525e000000001ef1928898525023dad839c3ac0b9313e38a6af19a9f288f8e63d17a92b824fc5b4cbd49ffff001d3082bdb0","01000000af7673e814d0bf127a07edeba389098fb39fdc57ecfc0bb849ec56240000000077690a2d2fad5d583e556a27136f9b9e82bd80f08023c34d93151025d9a167efe24dbd49ffff001d3804cd78","010000005e704f8fa4732db055d3d3a7b09e023d600bd9997721ccc391a9074d0000000059ebb6f87f1d20c656f1bdafa39d9fee2a2d7fbc6f38e0594424c28c633e7c180e52bd49ffff001d1c1a9c0e","01000000ad51bbb53d3bce6da42f5bdaf89827e9b7ea02ea0bc3c8b0d2e64f35000000003ff3c5e60dd31fd4f7de619392f39ad7767d3dcd17a348b16722e8aa5da54614c753bd49ffff001d010a962b","010000003827d7421e5dc021c4e236083346887097e34d43c9e7422476305f7000000000f2b1c75a466a7ce4cb4fc3346b5a31568a9b8e3b972806a844b3bc1589cfdce48855bd49ffff001dffa2b009","010000001499f2fb3ada1b79358a0daa1adcf7db3e2267c49f2153482f7fbea800000000b1ab68e611446f89ccc382b6f0a367c1ca3275ad6f896f9b58a72cc45213e217e256bd49ffff001d350ef2fa","01000000a479c36eca11b8644b4a01f8b93281aacf8450da33c522b5b1bc950f00000000deabca79c36e32797ef542aabccdf4fbf6663de751e6168a687ddab74e2f22d7ad59bd49ffff001d032c1355","010000006342e9b39e686a0539f645076e1a504027703e166aea8060969a75fd00000000b2c2c4307300952d48ddcd922cc4ff7df6a0e9ab353ec0b60939b0583d23b0098a5fbd49ffff001d2af484d6","01000000746d8654979e957daf93877f3c2a9234f7ea30f88459ea10f4beb69f00000000c85da7a251d1f13805a4fea59153b846a002f57e7a7d8f89d4f07478a3df335e3f60bd49ffff001d7852ab02","01000000facf299456e1e5d2867cbd4d6d0506feef3bf9764c9472ff03bb930100000000a8ef3e2eed5147ab75e3339cff148e01c91e3aad716ced51fc38b1600f5707827460bd49ffff001decb09a02","0100000037e785345a4654b708f3bbc7c10e6302a8c0259313103b9cfd595f950000000052a86e10af5bd6775bc9e04907c4c386aaa46c3dbd0f378c9216bb7e0dc4cb044e62bd49ffff001d034d6bd6","0100000077c087f9786cc99516cea404f698842070831a9e7f874d93e6b1f6ea00000000d9f4be6e4401e4ad9229c08737b347153629c441b7a218eb2e31afaa747c7ece7663bd49ffff001d1270c406","010000002ba87ee954d8e052c16002345c53b72b614ce2a4c9db81cf6bd024fc0000000029c12ee109c1f7a11eb32af7a3c8b81b6e111161aa4032ce08fa3a58554b247a1c64bd49ffff001d528be600","010000004b2f32d1dc6f9c0d49ad9b1a6310f3a74a8f061b3fea774d5177643f000000009cf14de361daacaf434bdc7f287f516ead47b9d85d8a4a409ededd38add087188c65bd49ffff001d34c34e13","010000002c2417fbfa1584fb9269cc8b62b7546058b1141c19042016c705fb3e0000000038f452c190e5ba2703c6e65ce467e0d757e6dc486fe8da610ea2efc41db1b0cb2e66bd49ffff001db6a14c04","01000000b97ba8d470c3228c2a6f274325c3887703511329eb2604eb93594bc20000000078678b04d226d6ec8248d8e0f46ae3b6fa9e781a904cc0b1583a10307f1538adc067bd49ffff001d14ab82c2","01000000771d589bc4f2d3dcaa121064b28496a6ebe6916434fc53847f07827600000000ce822bda5fedb4cf332d9f1d88816fbf80a5e108cdf86fd91a7cec6d51ad7efa9968bd49ffff001d22582701","01000000cb0ab481509f43496ec26523979321faa50516f1014e1c3a0621a12c00000000e82b3c3e1a1c68d5de8d94f781fb613a8d703d487d28ef21aeaa7d2f61bcb1adcb69bd49ffff001d1f7da491","01000000e5c7b4bfcd632349a9b3a65983d339df8452ae14d558be949a29be9000000000c0524a1ce7d77f7e07e6526b4f7785113f36006415bfb951a2cc1fce432d48fdf869bd49ffff001dc68c3c02","01000000ecc800967d2bdb355cc0123dc3cc582b7871eb0cea1a9e4e6305397e000000008fb491053cc26a87bd3c5b3f924f3b071abebafaebb6390fe5a2c6c62c13227fbc6ebd49ffff001d2d935757","01000000e7a7655748650707220c8b51340a356b64d2119b3f30e6bb49b64c02000000001111153f3f15137cec03bba7250baa2649291e0971688563b62dc846a2151de10c71bd49ffff001d14834d27","0100000028bcf2ecd316484ce458ba2256db6352e1761cfcc0802ec4c150f19500000000c1d2896b2907768a84348e58bdde8087248bf1167c891d4059eed313425f77d75676bd49ffff001d0896780e","0100000075d4edc6d8b93cba609a4d67f0864f81795651082851e853e6e9346a000000002288f072bb82a10ab06dd6d22de0e807003cf84ca2d1f8d75de4dfa39d8758a8e876bd49ffff001d2ed3a2e5","0100000076045e0c89a0d26440572de6a813b3504c2e5a796f1d744b7658c84b000000004ed9790b826ae275d10fe6d3c2b3c49fccddabe83057bbebcccc81f7481726bfc479bd49ffff001df538c307","010000005ff6fe04021d34eb27225fa13727608afb4751fa0dfa2f79e18132f1000000007c488c1128e942bd453499635052b1e0c6ffaca999ba865c35025ca382fa58f6427bbd49ffff001d1e6e18b1","0100000015e922229df6aa6f05071b47989825cc3d7bd892e0f0fb6790f8c23500000000c0f9ff6db862a40c4b5c24d8b3d9b76874d83300d4305cab671e4d59b7a05a77a47bbd49ffff001de9984903","01000000aaca7bdf36c5ceab0e46da1d6e7ee327add6f48cb5c01f9476fba7f9000000009ae3e0b67c7056001e1f253943e39187377e383c2a808532ffd606d1ff90bc9a6c7cbd49ffff001d00bd9203","010000006e1f7e476dd7bb8e47b6cb7c8f78569ebb851df7be2ec8bc01abd6a300000000eae0a5882d7fe676a57ebeba136dbf037aeb0466d8059d35cc72e8ea96920de75e7dbd49ffff001d16aba80a","010000005ff3cc28173f06184f8fd64f52ff39619248964682f881022f3f611600000000e1bc821f86f9a3c53ce7db27a46ef7f3fd4e5e2e6277c1bb3daae338f0dbff059d81bd49ffff001d278486d0","010000002f4c1c2626fed6fa3f24a80a610bb1d3bc6697bf5761bc25e88f30de000000006beb036252cedba5474884e3d38a30844140b73edd5b943fe6f38c3031ed7c1bcb86bd49ffff001d1db171af","010000003d707df61a80fc5ece7382165c1e89951fb562bbe3a0f26cd547fc5d00000000033626542548979a16b69bda76555f1c552167a375c266e6d111fad40e30f225ba88bd49ffff001d2b6fdb85","01000000bc8741b8f13bf373c59ac328c7993b389a10ab2297939dc09a9b4a30000000008b915bf6ec38951664fb6c5a0694fb0e3df55d64457f6ef96c3c4a96cff624087489bd49ffff001dd3b40e05","01000000fbc968ae5ef59cfa4bed3fb715faebe9becf4d0631654fad4aabc31f0000000044abd41bbaf6f9984d2d2931615c454931a2888ef04984e259102b6434186add5c8cbd49ffff001d06428f77","01000000158d1673a404d72f1e90e635c2ed7623fc6681703c1601e75be3bab800000000d00f3522a61f578a680213f7455f0f89285f02fe0d5c4762d647bb73f0e882989091bd49ffff001d281410ac","010000004b628342d0668df2fb750ea8447f8b8a7120b35c204dc8f98cf4ca9c00000000c333eee454fcda6a46c048b939db368919ca7b1fdb0f6ff6f6e6d76b31961a998e95bd49ffff001d3574cc65","01000000b6cb456ab9df70ece66d81079afcdeb08c54c4c1d8c0f67cb8a9fc84000000005a56dd1e7f6c8de0b3424e294dbc08e80984f83b7d43558466a48e43c3a57f04a397bd49ffff001d04f37511","010000003e83af704e7a7d91a19eb6a96c488f139d4ab18387b07f79df0443fb000000006f42d63da8b5be8806dc3b005d3903425c97b327df6d8e116cec24c654c428bd6c9cbd49ffff001d01d17516","01000000e906fadcfd93acd509286376ce19c06a0f1fee9cd81f8d2d0220f31200000000219c3fae6d8dc3dfe40e4d7ee984c7820273538b35b753004eb3ed1865c334fd769ebd49ffff001d2928aba8","01000000cb6e283838f18c2f23ad691f8dbcd065bc8f9776011d5adc13a5b05c000000007db1530500b9de5cf4c87d0bc8bf28a8b5d7f73965e3162a9d2f5e2fd4284240b0a1bd49ffff001d309d28ee","01000000f3891e0fb56bc5b1f6440c510aae07d6b29ceb46457f8dbcf2f3427f000000003ce88eb6bcc9d5ac43f4e2dc5dbbcef905df10dde34fabd0f395667ee6e244ed4aa5bd49ffff001d15117f7b","01000000336c4d648ddbca092bc2b4901ecc8075ff6d398abe334ee79e41316800000000aec92d46cc65aa1eaf1e9cfebd4debbdbddd5fe39341bfda593adc644115a9f437abbd49ffff001d148ed69c","01000000a744cabbfafd5f7287f2493858f22e64df8db247483cb5ad892cedf0000000007288f2a484e6d5cb6ce4261c2d8878682a8e83d1956fa5157675239e46444dab87aebd49ffff001d2bd98670","01000000beec242cdfa0b552cebc2de6ac244c5c7f0b9abf7177d1bf68caadb9000000000e94506624bf253c55f81927d5a2472eeed4070877843de7bd5986f193d63e74a7b1bd49ffff001d33020ce8","01000000b1a3626c649cd11d3106a81086ee5b3f3032bb2189dcea3361ad4ce300000000f9e36a8745df1e9626050cdeed445113aa2ad959321bf5ed7261413cf008dea181b3bd49ffff001d2971e832","01000000df763dd6d5c3c9c12650c76d89889628055454e7a7c43055c8f36d97000000008059030a329f5e79ab8ea79efd71f338136661cdcbb2f52c57283ddf258470b257b5bd49ffff001d2c5e5207","0100000004f1be50ba72f17d307b42430d3facb284d093e51bfc2a68d71d89c800000000c4532a7430419e3fb3456f28f1d0624c6c457e71b45266f34b5fab6b1bfe90eb44b9bd49ffff001d28c2e991","01000000af09438265d9122eb23b2692ec95ef7ae977a9e4d36c5daa2282ac4c00000000f9ec8dac165bce944383d1035a59eb88acfc0d5d2320ca76d61477ad9a1a2dbe5ebcbd49ffff001d39902f30","0100000099d1dbeafb51113c6a803815ad600b479edb616f830fb55e375106a500000000810367095ddf7d0d60ff3167132ec6e63b43d36f54adb32b8612d0ae56031d3d30bfbd49ffff001d37c0fc9a","010000001a41b20aa08fe26c88a2cd25facbc24d79c60c5e603fec4bf6c24d88000000009ccc82e3f767ef79753ecef048da6fa6a52e3070081d2c4e98dbbbfabb689ec106c1bd49ffff001d1d871cd0","01000000b4aa7340c9c2cdebbaf7d90ec1c6df402ce31b1b42305a09fcd7ec2a00000000ae4375cec1ec644459a72de18738d7cddcd964cfa2304872a01fe972345cb0d26ec5bd49ffff001d13c1b996","010000001670976b591995c2b3f4afd2764f4b64d5fcfd2eb4ae3442a329942700000000c0acac6c698063a5c21c2b95883571970a93d95201b26ba946bd411b00dec106d5c7bd49ffff001db5a79a09","01000000f7842053fe4b7261d7b63e068ebd78411ba70e2bd484c2e2d6fdd5ab0000000048c445b15f4e108733bba83d2ac0704ec441f5eea01ac83652d903b04ff593253bc9bd49ffff001d000df272","01000000d252545e9ae70f66a22310afc43b798eb3ee3a4916e80caf288c7ede00000000ac60387b725177a887a3a7a68df116c296d50c331460be61ac2d7ed95df922b93bcabd49ffff001d69f59f03","01000000413afc32a3c03ea28c78547e7c2221b642d1ec01601689a1875a45e600000000d4ab1298fe94b61cef0528a8000d653d1a778775dbecde879ecbbfaa30b79d726bcabd49ffff001d0f3f5402","01000000cbb249fc75f1eed133a6ebf00114fdce5047f7b22754bd6df2b7b9c600000000e638f2c6e8313d9107de3fbed214a9e95852a8dc11b489603c4449789baf8994c1cebd49ffff001d28154a8f","01000000fee2f572eecc2b1d6dec874acef8b86e3213e739e82046c49eb6aaa200000000279234bf5d071e81a8db189e70a0393d6a37b96d503431a1200d8e8e60982cc9f2d0bd49ffff001dfebd3008","010000005a191307527cadf83d67be28844aab8c74b9bcde01e1b01d51b68d7f000000003a2a4bf07e0600851600ecb356de59d52079af588f5b6dcaf5f5fb74006f6a1d18d2bd49ffff001d2fa91b7f","010000000130a8cc2cc7ffdc4cdc3b28e4a1c9d205ef727b049d80090d43a768000000005658184d81161656cce91e7c31e21090a0b90d2ec166320964002fb786b691fbbad4bd49ffff001d6fe7e409","01000000018790fa8f01c9569b0f0aba93c814dca623c9779d9d5b17a3e422a400000000a304fb95bbcabf0fb26c47be74e01a67c6e047d71e6cc3a4d71d23c618b63fd747d7bd49ffff001d2be9bd17","0100000065cacd7761c9b5c3c17a66183864137023061b35c713663e7da3369b000000001ac98e96f218f2a16e4af30bb6b035a7a753539316bf0d8983e4e5daef6e7445fadcbd49ffff001d2e128e4a","010000001b04ef797abee02f36f31ae44057bc515ca609973597c45546da55ae000000002456246a4eaf9bf384366cd62cc6e89006bee71228d10151cf4a8e0880d36a1434dfbd49ffff001d2c94a9bb","010000004447063750a9960784a900e1c55fe65781e80d468e2b730191ff23e600000000a8d0fb1cbc09429c83cdc7f00be1d3a13e7ae1bd4210743f422a6ef3be4f91e915e0bd49ffff001d3d07bc05","01000000e2561944d98fcfb85e1f654df76f1903d52f0c73e29766dbf572b2cb00000000ca845f8d4671f1da1acf6b20a7280ba025dcbec57b0a679574154e1953e8b94687e1bd49ffff001d013ed9d6","01000000fd87d2d3653e316b3d0c8b2175133ddb8419fd1259770588ad0d88ab00000000c9516110c1a2de5ca8da8210d09a375a9b7819bb7f71833441ffe67ec92d473f77e6bd49ffff001d2af36694","0100000005fee1e4a48262611d30e5a36ba1ba7a4093660fc3eb10082993339700000000ce172242a6321a3e67fccf06274c18c766aa3cf45f5a4813ed00300ef6714b9508ecbd49ffff001d381ed79b","01000000082dbe364ed5c291bb01bfea9337a1b775bf9dbba79cdd35d5d63e90000000007b1a7d44365a847e4dff780786ea2075af4f56c9106bc08f6983267c063fbaf4e0eebd49ffff001d4618ef0e","01000000e1d70ea75e229f074ede85eb20fb2caf144d2251711137889e9d677d000000005a48e49f8d05bb708330b48dcde021f0c6b942883b35242d95554609e2caab03ddf1bd49ffff001d152efc80","01000000f8c2e6de244013f2ed76994a5a7364cd8e53be976aad7f993ca72ae300000000497add2e573601b0502598a3b7243ceac450da4ca1de1c20cf72eab2e2010be29ef5bd49ffff001d2a3de1cf","01000000f5d14d34b468519b8a03f51bbda838e51dbc07e842683cb314b7eb110000000027c962673e5f22ebf84e61c1a86b81631daaa6075ad6d4adb2b6d78bc73e9c64fff8bd49ffff001d45b9990d","01000000d0f0db56f751348154d130aa60d1454326e60007594e7a671e322eb2000000009d88cf2a285aeb6d21f6161072b383ce375af71a4c2c2d46186fab1ac5fdb35262fbbd49ffff001d623c6803","01000000a19a4fcc54fe9a1dd48ea392dabd3687e00398098c8c6db9defc3779000000007e8033e097f5fc762b3b9861f16f1ece97772125dba8db60652742c5b9808e4742fcbd49ffff001d3efba903","01000000e8678c9fbd166df9325c47e5a0b221b5768275e1bb403fae71079fde00000000b08381fd98afcec3bd8cb31a3cf2ee75396bd79e5caf23768bb0f17ca7ed977c0300be49ffff001decfb8b13","01000000ee23298afe24bb218db5a3f16f051c48a44a1d1079dbe7cc78a856a5000000002467c7d1e4e64b3b0344cbeca79096cdcd4ef07cdf2ab2a651804352b7d01275a600be49ffff001d2d153d27","01000000ef5e2d8d21a46cfd68a1a0a4bcdddeaa8390b0e5f0bffedfad7d62cf0000000091db23b7571b42094fbd5fa644dfec64ad3bc99045a62114e21767317c5676e96804be49ffff001d1e378ce1","01000000c6f73e4b2c6262d509cc08e1a0a2770072bb12a10d1047314d6b3b4e00000000d081f5e8c222ec57bda9462805d779d8c2154fe001340669bd67a6d05aecc25d0205be49ffff001d51d84202","0100000078e537c43da1212074c44305bd5b8ab1ed3cbbba9869161614dfb1f0000000004440d9a8dbd9f1cd8ca59239cb2dc335a6a1b0dc331bed0472872150090389778308be49ffff001d2189fac7","010000003a244855a2baca67da72c345d85a4f3c584aef4346c177b5a5b63944000000000e1fb66d8cce27885cdbe579190e4171bcf0bcf6861851235219d76063d583328208be49ffff001dc2c23f01","01000000f2dd2b4660598d6017e792a9a01b5d7b37da9e370e75b459909ee18500000000db9d5060fbbbfef2eff7959c2dc1a31c650722f96584e595f29c2f67496c84a4070cbe49ffff001d2a2118fb","01000000d964655ac889016cbaa1089eded64d83a1baf28abfca3649c17671ec00000000c8aa6500fa726e9f9c68c1149ea51102290e8fb5f5f8af974b773a459325fdb5710ebe49ffff001d082734a3","010000003742ddbe1ffef366a78b8b0a5edf4c28e42e009e8952f64f9dfd0c1d000000008c0da6df0fda9f9a9991c5b2bcea639308f28f0fde9da17ffa80ceb0b4803f1dd10ebe49ffff001d0209cf00","01000000cb41c470c8ad7d6a86ae22c392a4f21799b426affead649e545d3ae000000000752a20744db99ee45c26f95601cb976b18ce9157c380fc570108f35c0e1ef3932f11be49ffff001d22b2494f","01000000bdd1f3d63dfe337ecbeefdbccf3f7f430b421b35aaf3c9650ed2808300000000609cfb99aa9da562d260148c1325823b988a31884a77738807bf000a8af3ba6d0b15be49ffff001d2217f262","0100000011999193c8067f4c5a32f9c8d0e4e90a1f7cab0d558f058a6780c3e10000000061b599b3c64d87537e00091ae6933d0af59df63fda3fbfa2e33b59ed609886964018be49ffff001d24ec1e7b","0100000085987ae27a2fc9353c26729525609d69200eba2b43d7bbaefcfa99070000000057908abf02cfa69f30af5741457d4aab88c383ee257ff3be1fc97ae98c827de40c1abe49ffff001d30167a04","0100000068e8b66cae4fe5eb7617367b64badbfda126d975b2ff38e92a9c006600000000901784a4a3d65ba261577a77683ba7ad7251e7b6f5267ebbd8033912ffc949fd351fbe49ffff001d03239396","0100000000027aadffda0a046e2bc8bd60ba80ed52330b89e47eea71c94cbf5000000000b33f37ead6d142c891001719c8ee53b661a3d62e2f20101af7c754ef6bc0fb3a3522be49ffff001d2a83d766","010000004a64899ec8cb08e5870c3202b86ee4ce2209233517b937ac1533b21000000000181f850b9d66a2ebe1a922d94b345a786fc4e5275f594fcfeb2b581d0b961d250725be49ffff001da6a44306","01000000c29e933a0be076b6023ebd7938a49fcd1bae2d7aa5efae72031c117c00000000cab1aea5e10ae8f42a0846be085ffb4cc3f2a23486b0feedb643b281ca27e95ca726be49ffff001d32e600b8","010000009c6e910922d93ea51672835534679c4e0284ff348f83d2871904b0e800000000de71214c75d4a0de9cced6b55963e609a680060a849935615c0fa4f4d8e15946ae28be49ffff001d3796acab","01000000cd7e59dcea61a495a7583443e37d7138b00718217e4582fb4534a26d00000000dee99e323d9bb7710aca7fc495fc35adaac7cbb04dbe29c73538a59e2f0b0a4eed2bbe49ffff001d3a5ab492","01000000da4c08864307516f481f97c74f50339f91e89a7f1d5f465608775b3c00000000f3d87759eadbad583ffa832d120c913e01048c1df08e56cb317b4eea10f550943930be49ffff001d2199becc","01000000bbd540df22d06b9040718bb93563bdfe9ded15f513868a6413cdf71c000000006b65a93f0a64e2a13e260062582eb1fe7c69d0306f11678b6f22c2cca0a045768c34be49ffff001d2dedd593","01000000cf1f2c459f743e185c05ecf80d758396351eee934954a23aaa059a1400000000bb63853d56e932846bcee09ac1e9563304a47a35ac20d36e90b956568744bd8a8a35be49ffff001da83a9102","0100000034c62164e2e9953def0a3a641962fbd7d6626a29f62ee9f2fea868f900000000868fbb265f7d206f2a164ef34cc7fb2f0621b097df80ba9a7960ebb56b87d856a838be49ffff001d1d5b58d4","010000007035bf732477477633aaa76366682ccd0cdd12433bccd699c3bde5b50000000026ad436860121bd0f1f5074ac713fdede5985d8608ceb89b71c5dd9ea7f2b7ca2e39be49ffff001dfceda600","0100000041e3fa85cc2fecb7a3b7329f38064dfd055be1df6acaf9500356f400000000001c7ff7742d83f8237e96f88bc19f4a0d0ebaa793afe07530a5b19b4b202eaaf7b539be49ffff001d4a634f04","01000000894fcb7e46a30024a83e8e37e8bd39d0f41ca01337757172a255600c00000000dc3d5b7e9839eaddacf4f8837c244b9a43991530639f6b774d4567d6d450d47d463bbe49ffff001d22fa6461","01000000c33e0ef5cc2234b866a7977e592b13ccf5438bf394c88581bc4caef5000000006a73ca44a7b51203966dc7092a0b779e20b80139437c944af3478a1cbf773a0bfe3fbe49ffff001dcfde370a","0100000048434e8a7d76dd781d72bfddd5fd10ff56a4d2d438f13067060a70a1000000006e3cadc5629464baff73e62f92f4847d30042daa8acd3792c31cdbf0ad62b47a0541be49ffff001d1770e063","01000000cbb5d3287f5125dff632a021592286f6bd9c1906842d47b6add7f24d00000000692e8d7069a90cfccbb62bc547f792434962aef4e87943bb291a1ac8d599ce168846be49ffff001d2510d35d","01000000d3faa11fd36c5a6b0d1a0ef2fb9d993546d8285be42267e437f7a4a200000000afd9a25bc36c52e3629da1c28e6d9da0b3a6bb2ae0eeaf1bbc10f66bba4a67cde94bbe49ffff001d27cc3ce9","010000002019a6cc93648058a94a3462ed0b067642e07002c060f8bbbfef8df6000000009bf92d888b900643c931368933fa093da3af026503242c6732dbcdbe2ed1b8dd3350be49ffff001d1d63f2d9","010000009737ec06c4b4a9c6535b1dfb7e4f07025acadd71e0f83ac8d4d231d4000000009c17e96856c039cc266c257b1c08f6ad3ee59a3c2441660c0f9e9f182d7dd39e7d52be49ffff001d09509127","01000000ee59c94d1b17782382a92f34498a19daf0aa03b1e0ea050a550a2132000000007427454d0da567e36bbc3b524a9b061cdd656e4c6a20667f9fce76b081b93dfc1f55be49ffff001d85c4c303","01000000a3281fa2c037cf0dc11e56cb535678d3e702fb609f65894f3da7360e0000000053d78859375f2f416e9be4d92e09ec4314904c56179db954b2ded2bab6d4205aa356be49ffff001d04b697e5","01000000319d842db6982103d69486feb58733ed69a64f007222955131386c0e000000000234b49dda7625e83aa69405a9400ddde12e4170b96f9f58125570e8fa6af49a4b58be49ffff001d2dd0064f","01000000d61ee6af38b4e16377b16601ba4af42bbf0822ffc442e6e7c44195ad00000000966ba47834be537b455c7ec7d87d7b3fa053ca70c68cde9cf52aad7ca87aca49c35dbe49ffff001d66c3821b","01000000d571fc631e0464daa302be484eb5a5bb5f387ed9b228a77aff8d1f8400000000c71f45251408bbe663840e82c0db65f2179773ec14d74dc397c9863f072680d3235ebe49ffff001d372a2532","010000000d71b9e4f9fef694b2c04403ac41d5d15d235f540e2660291d1d37610000000073327d48925e31350111a2b6b0b4666e4267604299552276eaa0e288cf972d574262be49ffff001d209a1e55","0100000097ddefcc1bacf8f278feedb2ab83600528afd707d26e81d38fd98388000000006e301ddc4e280750cc458ec911fc0e10f911efe04ef9bb06101f721778ec0fc73364be49ffff001d044e9418","01000000403a5676c482ff4de88b02b576d489de35a7ace3d9c2a514ce5519eb0000000070c32c6130d605fd62e5af6a1ef7c2cd28885e47ff2728722f4c7a3b234199fd2c67be49ffff001d0139f26c","01000000817c49c2db20d8c2a7c5a7187a4493e0943140c40f997907bd4c90410000000015b2015d80955caec1a073f8d2049fff4e324149d1095874dabd8a28630b75bb176abe49ffff001dcd863e0b","01000000aef096c8ed8010a75d61ffc36c22dadfe1e1e1e4619718e549d02aaa0000000041bfee82616f4295b48c211ea7ad5629ffbda0d5cb104ee3b89d64790f99808cb26bbe49ffff001d1c2c472e","01000000475a88c6e1b40c65a08aa52a852567c27a2357b41df290f422da78cd000000009b2da062e786d42d9231674f3b72543f08e6a78e16115e02143d864c8f28ee7b376ebe49ffff001d34f6620a","01000000a279a8db1ac4867ef375ec1743abb049216104a7ece09f4aa3280fff00000000771067b2ff675f7ce998fab73721613eb8f0f629d0ae520f5c7028fb64ade772d273be49ffff001d097c94c6","01000000f3ccb354e0a35c7390916ce1cba8b8f7f8a4d61cd8825cbde5cdef1500000000b99d0f5186780e0f4d5da642cb08bf3e83830d9efd09e6d076d6c8d08d44d706d975be49ffff001d308caae4","01000000e55c88799a18d176fdd8b23f9c21ac45efb4c9a6fb65d5317a57929700000000db595de1eda7f77b4156bd7d8eb2fa7e83b7c1e5596fdbe1a3ae2e92ef22f1b7f579be49ffff001d3358d632","010000007adf23ea0971831ffeb3840585edaf2aa3d82fe60f8d0d59e2113a4300000000ba36ce0362ad2c79cb12b25c4bbb5201b07daecdfb092479bd9b2979f5e07328e77abe49ffff001dec5a0406","01000000562b98eb556931bcba4ecba54e803223c855e47bb52c99a9dcf9293800000000fb05c379135affeec51e7cd8c9433490b2bb74308865c0baf44d5cd4866f5d5fc87dbe49ffff001d8db01b0e","010000007f092cec00d8e1523b588367ac9e508b19b794f0c94d562d9586a7010000000032321f6494387f10f9abc2b33b70b5bc68d8775620c2d98b8b3de1e07843ba46427fbe49ffff001d366b62de","010000004c5ae1da8c2f193ff3cf5f7465e13032c67b1f817e29bffa12c5f97a0000000057387291ae156233d8b89bf6f267619d1e6575ce4cf85260bc0d4c960f18c4a4ef80be49ffff001d00168b80","010000000d3ca8da86d12aa66ea7603cb2965b1ad63ce4545e721a9077fbc69d00000000ad3ffa0a7f6928f38778ddb31fd0251c796a36915b69fb6968d6b13470915d4c6784be49ffff001d32380da0","0100000073b3ddfeb3561331b3f819e81c402246f18e7dde917a112e9ca0c05400000000acb26f55e2a0258fcfff3b803e4336bf4db2696f465fec12ed583abde5834e229188be49ffff001d1f066e55","010000008f54cdca91dfe4e6d8dfffe1ad65a3c4432cfd7dc04c75f27198227b00000000c7a1fccfa95ef5e0e49a5b35a527e4672a982b0ad63c8286a95cec2b7c74f3e0a78abe49ffff001d0590ec9e","01000000250613f05ad4797b3cbb5d43e9e17ed4838f80c2afa1b6fce30d96d4000000008d346b2fbaf8ffd8ef4c3ca88b714df1c515114160116f29f69bfba9452f15a2478cbe49ffff001dd9636b09","0100000012cb03bd3fa8944d02f7111bde108bfa8de056efb0664b7e1822a1db00000000f77d8f665c3402bee3589926c032c866251f5701cc1d2abc5532d79708d0a93e1b8dbe49ffff001d07a6b62a","010000001cadf772461490f85039493cd224c86b5a6ea8bdcae8590765ad8c2d0000000063686c5e71843139b1786011d6c2c7912089baddca66ea169d5da4a49432ee64ae90be49ffff001d26e14be8","01000000ae0c5adce4d1d20d353348d6bb966c35c314a751d408fb463d256dac00000000d0fb5691c5dae7d17d5eb8d462ed8de53f043c7838d158c7c9e29a81aefac0fe1a95be49ffff001d388b4de6","01000000f27670c3121d9862638b217d852b9747fa20d57c030dfebd3fc6949a0000000085c8cbfb20fde681511d41f826a288213ce51c00294ed59ebad9946ab160042d7e97be49ffff001d09462ff6","010000008b3a35d647340bd66755bfa0f39192243c45901b216db19dae94830300000000eb3cce932516d1eadda64117c7992eea9915aea75ccb38efc9d6e567044a705e289cbe49ffff001d362bb810","01000000e1f4639fb1b5188c12fb8ae994159457b71d20cf8c0dd8a6a5001e9200000000d56da526bbd24b2961fa341371f6d096e1aa09f10ea7c069071b2dc500def8eb2a9ebe49ffff001d146f4314","010000007db275557ddafdd9c20d977c6ffac77c17db56c2adcb863b893d87f6000000005c9108e8798e8608353723634f38df6c0f6e9855a76fbed8d48ec5337c3273c4e7a0be49ffff001d1b625f7c","010000005b5558f6f975e9fc67bbae799e0f06e97aba6140389c6753048671d7000000006f9d6c3dcf0b360411c4d815b1ca840834693ab563e7b9ad079d4b2a4dca6f371ca5be49ffff001d2c8adc59","010000002930c915bf55e1d00de9871791e1574144b91e57f532314b1886970c000000002e63c6486b4e7df13818de68697b1d543f9782adcdd3259c23efa21d9fded49708abbe49ffff001d304a1509","0100000072442f699488422eb34a5ed43e145b2d0c9e89646d0f781779a21f4b0000000011f99e8738dae7cbe5541322b9499e9373f81634ff9feb35febffd336448d13a65aebe49ffff001d28472773","010000001e20592ab09ba71d572a38d8e0e7726c5898737d44ef35249e4c80fc000000004c5acd098127bcde33bdacf67c9483439f11ba660ac650e4aad2526ef34bef0ea4b2be49ffff001d28cc0238","010000004265f3869bc4282d5a586ebec33f2c7acbd9cc5eddc40063a29bce7800000000310867f18ec5f159668e41bff43aa79f99673a3a686c49293395ebc0d0e612beb4b6be49ffff001d228a2751","01000000e43bef12a823e382fc3ac60b9a68b3eb88dfc1e92ec152f4a8c1ec8e000000001942a0006b152d8da9471bdf48fff8f907a6dc8596bdaba2ddf5cfc1650511cefab9be49ffff001d23de0d64","0100000057b7cce9a8a8410a27438997df87fb8ddd30d142fa0a3dd4c666009700000000ed0f36ed9699f0b06e76063378e22619c60f2efd8c905d0036c837e1256d3adf4fbbbe49ffff001dde7ecc01","0100000077b73f228ae32ec8865e49e43570448f69b545f560e29bc0cb8781ab00000000752afe7bf05c26865e7bf0a9d596e4a704a193545ccfcbd4c03dc73eef007648e2bebe49ffff001d1e45f642","01000000c614abda333e33d69063bddbda0730b6d52bf7e2f85e34868d433dd1000000003d5e018d48fadf1bccaf0f4688756e4898ee530dbe3d7cbbbcdf4b3bc8df7b5d41bfbe49ffff001dc9d1fc02","0100000002543538daf762eb18ebeb08904bdc1d3ce28440c8ddec830df45d1c000000008ae297de05e984d1996272864c04fced55b427ff6c1b2aea078fb4d12a87bbddc7c0be49ffff001d29ad7f17","0100000087d99c769103b694c18060b1afe0171088c137b1e54a108bfe3104ca000000002f7cd5f7f217e2c8a62c5a07f363f3b5d93e44f22b38b58ff05204a87cc2ac3f96c2be49ffff001d2d6a51d1","01000000ac9bb041637814e98879a12a31b6d8478edef69e75f0a0e6993675970000000003f1f6dd60be319b8ec2ab4f72628c76c7b245a152d8306e7fa3797757505d39bcc5be49ffff001d1dd6b631","0100000069f5e215908f1d1b8266615cf8ba74c0c60b730928e7b1384e99392400000000c6ca956cc53c91d039b454ebfa5f18621802a1b0e7433adc8e34b74ee012e594b4cabe49ffff001db4a8e415","01000000604fa1250f0c3a3e1f3bba809bfe9ebcb401a19bab902ffa279e5b1b00000000b0f439902a504df9832e6243716a03e06ba3bc9d9fc9168f97bab3d33942fe2fd0cbbe49ffff001d01a944a7","0100000030090bcc7d610a723f7d7611f37025c45026bbbeea2796b5937b3dc4000000005b33d715067a6f66315dbe5af11d8a80fa121dade818785da36b770e1206ca4f67cebe49ffff001dc1c7120d","01000000f3ef0df55bd1bfbd99e8b8782a41a2f956cb08b3be4230dad5ffdcf300000000697c5b0b991184fa1faa8b7100166b4203bea34f9fb552dac8ed1271c50d8b4e8cd0be49ffff001d399e3e6e","01000000c83028e93f571404407fed50b78dfa9d9e84bcfce3f8aa4b42492a3e0000000008e94e168a114c4ada00a75651abee386a7a45691e8bd40db9c1313548747c6de1d3be49ffff001d2d9ee057","01000000f870df9109e5ba3c920ffce34ae6f0a4e5e6ad3aa7482b452698ffa300000000de423bc0d4c223530183ebca8aed55d73cca9a8e02f4db550b5a5a731050e29c16d5be49ffff001d2b350106","0100000094090cdcc101518e626de182ed9704e13cb0bc48dd15d4a572bab8ca00000000a0a4b91840b0f3fa22aaec3bf65bb29af01e6e178132016d82bf290526a54033d3d5be49ffff001d3b700903","010000009f7064bee51d120fb43cc4e3c88c83e61133624d31798f00498ce20a000000001bb02221f00d1cf0eb8f14d1bd42671a58f51b77370fb3265f4cb4e4fd1bebede2d7be49ffff001d3668cfc7","01000000bc9fb2739956fea0b9febe102ac2cba18e7593d33d23486449d6512b00000000c6bf96a72bca762e915dabf5ba236145402fb419d65e54d50efa324b3cec506db1d9be49ffff001dde762d0a","010000008bfc49316f9c7c2b198e0ba6ab81724f2cfd7c1ec1e373dfea12065000000000a5fe1dec2d430a2bb20b06067487251542ed9f4a517e2b23fe6bc36c3e0174b363dabe49ffff001d200fdee0","01000000614e928f8311cd1ff951d7c698cf721e0fcdf903139004939dd510bd00000000f56e11bdd84c02cfc55b56e4c2b9428522648b2bf98c629d5c0eabace80d239d55e0be49ffff001d22e9d960","0100000032df64936e55ba768fa303cede975d66f766257a5de91777483e782f000000001180c5cc8407442da10b76d6f6c483acfabc5449d14c35aa0165dced151de389fbe4be49ffff001d221899f9","01000000798bddaf961bf54de4f79269a8cc151778974b01082d162ca1b3c6a10000000070c98f7ce8ed1225c2479ec325a97c4246347b7074d530d22c1f39dc76fc6fd088eabe49ffff001d22f1aebb","010000001759833b4561cf28b66dcbbe9f15dbc93dc8bc834d001964a1ddc9570000000088603c41fcb0f9d94acd7e0432c804c6c604f598777b6c5ba5f2151dab084abaf7edbe49ffff001d036703f4","010000008ab06979633b11b7afbbda314e80d86ffd314757ea2494cc1665c04000000000805a9f5753dbd7c8101c9e55d6098272770a60e835437177aa3e0603c75ab82b12f3be49ffff001d279c7b95","01000000338b50cf480bfc594d9bd81ab81683cd90b013823db1e525a17258da000000003579dbff0f4d6ef11faa78781f034af9a6fcd3ceceb75b2ad0e93c80924876aea9f4be49ffff001d7bd0a403","010000003bbfdb56ab2cd0f7376ecaca577ce3840b8dbc28333a0491e52897bd00000000f2dfd181a7a58b661f62f76fdfe6f9fc1c1b450814b9ba73ac88f26e8fa423ae92f7be49ffff001d2458bf00","0100000082eca9b70aeb6ec7c4233dc51e1184e1dea7528b6d10a43eb35f3c0c000000001004e6edcd61632811e66a43dc8fb882420a811d240760653d3b0b7745cafb832bfcbe49ffff001d0438bf02","0100000097726241f74a90fe923c0c4a9242952634d18f50d4c61c4d4c9862090000000007d85bfe2b90abfc3c6c939d1ff33226d3e35222ea794a243c2995e53f27a50953fdbe49ffff001d3411f902","01000000df6a9faeceb7fc3f7773a55f3ea7477bf1494b2b6a40f1d99e96aa2400000000e7bf85ec7dd71021ac2f16a4912e3f84bbd4eabe51787bb3e030cec24110c6a200febe49ffff001d079563b5","01000000f90e88e443b9362771da41427f7f9cf2ca122fb9ae1bd7cfd8c94a09000000003de04458cb6dd99cd9deec85f1e645a209a68bc7a7effee0552bff9650ac25848effbe49ffff001d0237b107","01000000740810fb64d3c5abd32addc3a24e28a0dd3a2877f97466ddfc80a5f900000000c7599061343f8348b759eebd57b0018770b1e1340436dec615f95d3dffedaa337e05bf49ffff001d006f6de5","0100000012d5ea463bfd2ae664198198de43e2b74dd55c2f50d47911a4bd78c400000000107269dfea6a3098c21f219d1ff4f9bbe7abdc3c4dd70f4cb0be53e0520a36db5407bf49ffff001d2c0d3db5","0100000082254c044844085de215b32e519f542fbd786f26ea7b7eb857b9d9d60000000005392bb2dab064ec9d815e4ad2adf3990d4a15951441ae6e06982c3f7cbf64826407bf49ffff001d13feb600","01000000f6bee4b93a1e7a9230e0b342deebf962f72154afa9a3e106fb304bf300000000e1bec29f1ae4f75324686090cf1f80e0285f13b9ab21272acf517b417a0d44180c0dbf49ffff001d07e61dca","0100000066537339ec47562dffc2113b4abc53f79483b995125e1370c8027fb60000000017cc79692d159e5190f92199023bdd5024d0c1115e85b8f217240f03a0c6e73eb90fbf49ffff001d2b6f524b","01000000049f12eaeafd7010b5d8c154d7efe65e0165e3278397ce562b46a524000000008f72df23cab7210bc4d23b444bf4b1982b5e2303750f1a54e64a7bb044405eb5c711bf49ffff001da7468304","010000000592c81fc0ddbac30db87f33b63ce15d734e2ba8be1bc3eb87bee22f000000000f34674eeaa76ddb9fe46361e708d7a32a608cbc728d6dd5fe6544fb85842f508712bf49ffff001d204772b8","010000006015f9831dc3fb6548f5bbb3273658f0be239a62be23605fb5bccb6600000000b5b64ae98f8dca42ed78daabb104dcc11a69b5b96323c54072ba408dd7487180f017bf49ffff001d1d086368","01000000c6b7717b295e9a33f026607f776b6d2e127d868639b17fab39bc354000000000dd4af08e630f609dddd36f4ca8b6f47b4194ed5399fad2ff2269c0a6add467eb841abf49ffff001d1d4efc82","01000000b7bd0eaa0a868a1f373d8e36118edcabda1fc2844a4a0aa1c1fdfb2b00000000df19c04ba1314b48343ba5eb5ad5d27864a806235daea1557255a4dbab4a22d2a120bf49ffff001d060764a4","010000006377f2264f2e61ea72e109c3ee786c210e00c3087f71e9985d16a9440000000078bb98d395d52dd9576b0b955b845bcee9226564c4767207fd8151356f567640b124bf49ffff001d198e4cf5","01000000f3ba340ea238f4feb5cdb0ed5fe48f46f210bf6825f666cbbba18d3e000000009ac164b1419e1019c3a1a0650e970f7a3f1521adb4efb34dd21cf63141ce9e854327bf49ffff001d06a6803e","0100000080994f85559e1dd15915df833c50bc66226992d9a5698553defc610400000000857650cf9b3586fb03a5b8729675239011d8bfe5826bbffeb791b425326370d3a029bf49ffff001d17970da9","01000000c7ef5e55d5097d6d2eca965bdf4bc96b15e7df45f2c82b384569cad900000000330d5997c41d439ace7ff549a6a7557e941b6c071b67d0a1b04c717fa1ce9e54a72ebf49ffff001d26461b27","010000001b3de8340a3bd82413f6ac4b05b8f925cbdb7ee556b3526df6ac7a070000000082a25f56cddc8cbd7c57cef3d5c78ad1cd36bec6d3add1fc2affca14adf76e01dd2ebf49ffff001d64ffb600","010000007d23f6314fa0eabaea97e7388350a161481edf4fb15700980efc463400000000c35fa32539a4e3dd7a27f1dbdaf4c2b3959a090dfda40e9607bca7f4c452e7d5f533bf49ffff001d03cd26fe","01000000777706a4c4a59fa4f2d9ef352585d04da1ad968d41393efaaf95c849000000006bb15cbf59a933cb8b82c55527f6a6081591e76f7412b1ef7b4295e6ce15adec4136bf49ffff001d19080c69","01000000608fa450a7102edec644b7d56418183f0ae6c5d848e592a21ee45e3d000000006306debd012bffa090a97f4543ce792dd1a349f5e9298c0ed90616562bc34592033abf49ffff001d28e26c7e","01000000ce10e79bcccbdc63de80b519677be3b2e7ca775717fea68a987c100900000000997f1ef547c02b7e823f225860eb6c6e7f5793a2b1fd3c74caba25c043cd24c9c63fbf49ffff001d35e3646d","01000000b7b06651dcee266d8d6497e85732c7bb96e7ad0ae8150e793d15511700000000c9cf53c8400896b84c90c4c382c4994d95bb44b231cc5b31ddfaf088115f12f29a41bf49ffff001d1c4dcd9d","01000000bb2e6ffff331f855e20f052dde7ae6edc9ebf5a29ff506c62555bc35000000006ceab497101ea697a7e002e9febae0e7bfd2a594ee7594331119b3bcd684c8231e45bf49ffff001d15bf5c17","01000000ceb6d9b12f89740c98d4559fca8153651259d76dd92219bd646778160000000043b91b8df968365857bf655ba5732021d3a463f260c2d219420ff427415694f48048bf49ffff001d276cce08","010000004adf7342586cccf9ab1bd78e11d424833c04f3132bdfb770ad72e3bb00000000d0400aa6f1e0de17b3a29a646fbeeea11a5a761063f90ea59f5bd7bba8ce40fcb94abf49ffff001d3598390f","010000007c9a7d95afebfcaeb02c1b34609287fc56387d4f79fbd5548f89bad4000000004f047f92dc74eb0b36b47697a8b38e0df836f8d44204f1be0ef1273cf6351271dc4cbf49ffff001dde5eb205","01000000c5141212e11b0653ad869f2182f741341004855e48232d9a754ef4cb000000009826ec9b1ba1273ed95988e2b3d89cceb2a84959848ba1c8abd3ad7091cbfa8e374dbf49ffff001d2d8d81de","010000001f032b04fac7efad73f23296ba66c3a4d964bcce1bb1443cb5660736000000008be7f5744e42a5bcbe63b7b40d733c93ae1f0a9279eb779133e2bb7da0a52ddbf051bf49ffff001d326aa6dc","01000000724255ce9cc9fa8610d106c46a266a955de342ea62efdd0ebaa6be7f0000000065a21a3ec4725bacce9e83570cb3f344f45a68b483002b0b8ad16aec4499aab37052bf49ffff001d1a1cee00","01000000f79fdd613b7cdf546a6a7152c2df2a772288862f53021bb8b12dfde100000000006534bfd638e1a32fd77378d5aa4aa0e7343403a097981256716377e9998abc8057bf49ffff001d2d9496d1","0100000016d29b77954da267bf7d8f00e51137a43dbf0358399cccb82196022c00000000773013846723bbd1b07a2c943688a538127a474e5dd4a5fe00ebd088f1af638deb59bf49ffff001d39a1c66d","01000000a4d9bef9d24a69f3437a842005332eca54738a7e227cf0294d675f5600000000c61fcf78570f53133087a12d02361bb6f05393dbb845085abfa8860b8d5b5ea7d75bbf49ffff001dda132308","0100000085ebda11d63a20786d853a29ba80aa1f8be0df7c1cffc421c3c37a7e00000000c574e517f6c3880bac80fa7e0b691afa1b0bdb6ae36a2dd93e28facb9872d573ff5cbf49ffff001d01712cf7","01000000f19d7b4d98b002b70fd0d9574eea3c6b0b39b34fee5319fac2c05c6700000000172c80a6ccb98128cabf40d205d155d9db571c90e9b1d35e59c3e35aa36dfcaf345fbf49ffff001d062c7f18","01000000d6484a6c239f203cc44d79f4b296a890e3e715c1696d2a48125646ce00000000ef7f7432af748b1f8a118690e1bab8dd8dca1e0d940211dcf74a70d94efbe1ac2b61bf49ffff001d2a29bcd0","01000000e6383d6acccd88081fbc4118eac9e6acce0713b74ee04d81b6940cbd000000005bedc23698476ae92b6737686bb52babbb3d34e261c9d5bc94fdabed25f0933fad65bf49ffff001d077b201a","01000000d2684b78cd8916e792f5ecf0ac13a22c9327723645bfd069ee470a2b0000000035eb777e04525bbd2af7a598fabb7b9d5b6325327f7d34df2ff51ce21a4e0a193a67bf49ffff001dc0fea408","0100000097154540e05ecc88fcc7cddb1ec661ecd7b71b81fe4cfa25d1463a030000000001a17d0005cdde1fc17611f495efa54ca38cf54c41094a796d64c787714ce5a31e68bf49ffff001d311fd533","01000000606f5fba3409eed53c954012d8225b47e65a91bab7d1811ab121aaa2000000004d85000f6ca921e86371cf03c3a3798a5c172530524d69dc872a2db048fae7d3a469bf49ffff001d318f76dc","010000005810bf4caeb32f5a83dd2d187ff4c47826e1293ccaf82c5f94d3b52b0000000031bc03285d5100297caff3b5cf41c45b316f8c74c8492b45e1afbe4557e26f802a6fbf49ffff001d13f09826","0100000037c0e6fa0141419d0d0c68633a3d97501230369233a3f9d40e6a949800000000e40955b1dc81585046fbe6ee5e4b96e0102ebb17698811ff7fe79c6e1c2dc5060874bf49ffff001d3421902e","010000002c07d6849f1241f7222e5c319153e54fad38b86e8aff4d75a8b15b64000000007c1adfe246d0bd038da8bb30ec2bc4ea8c92c11e844f9b844574d7c285569040d378bf49ffff001d33fcd912","0100000027d22f0d29aadaf603ba299257d5f929edb23302e7b17490f64971d7000000000dd442defcfc715610529cac483bbc654e012fdb1366c7df7e086af35cfadfb1d97abf49ffff001d213d1c92","01000000a0f3cd9c946d7333119d51718d79157c1040643671549434f47d195800000000cba76bfe74f65297315e60fcdb01e75d25159d2f0afd158102c20570d44b19f0ad80bf49ffff001d16d0777d","0100000063c2edc3fbaa5b1c403d1e787779e8cd94b87e97679223e3304e64450000000061f5dc3b273a2b5f4f896dc48f82f7b1fcf6886a8aba67c4d3de662230fc7b43c983bf49ffff001d1805143b","01000000fce5039c6865deebd39713428b56e264515591968950ca3e7424b78000000000fb2b00c11e54adb65b8aa4eb9c9cdec576231e49e6ae58d4f6a0dc37bacde6465188bf49ffff001d1b2099bb","010000008ddae01fdec0685adde64663099ad7c0f8a9723d1f6e801fbbae5e5e00000000207d7c4ba6edde21fbe5585004d1e264df698ae768674e2c522b4f4a2d8902c99d8bbf49ffff001d1780c2ea","01000000c64d909b27f359ddc9cc5b09321d732a5ecde248704342721d6393b200000000adf1eb19965286c323fcc533a56cdfd73e37ac452fd19ca08f7336e7946ae32b4b8ebf49ffff001d1ed3fc88","010000003b7ee8c9b00be97fe66e83743577ead359c79826a2b619cb580215c800000000921fbfd2b9cf2d35bcd66d7fe0982b3459df5673e883c06a4c2e4208caeed5726c90bf49ffff001d38f3dd7e","0100000014c112c64285a548482f2606f34fa2eff14e650301853eaabfdb8afb0000000017aba95fc280e944b473a0bfe4ea488a1fb2cc6bcae724fa0d1b0e64f5c457305f94bf49ffff001d2f438ae8","0100000018b7f716f7dfb9c0691cc13c645498fd20f7ae21a33ba247c3aa27fc00000000f42ec68707a8e915004f42820ab710ecf6bf578a6c790e874f7e20bc45417908c197bf49ffff001d1e67fc32","01000000e1f305dbd15b4c6751f3514bb4bc606bb246da9649a7f7d0b516f0d0000000004ba06fb62447c612575dc3aa6a24d18d460063cc348e8a07f769d89ac201a985ff9cbf49ffff001d47db3f1a","01000000e34ed06dec8dfdcb73a5c71c098c8d849b3fc54fc19f16f460f6e3f7000000007b176a43d968cba72383d858a45f0475a79d8936fa945f550c518135c430aa5e3b9dbf49ffff001d6b341701","01000000001516974441ea925a49e153f3afc046af787fd8534243379e48c7ee000000009de3f036cdae53ad11c4ee87499b00f8820e66bb249a3a5dd06fd0b6eee219e0b19dbf49ffff001d27391d28","010000005ced53a506bcc4bdf8f8e4d7031a8c5088feecc826383866ecfc589d0000000041bf0d681df7754b5cd7f53df365bc8eb0ab97570eddc621564c4f9e0fdbb865b09ebf49ffff001dc8120506","010000002433b0647a4c9c30c7d36961e2fc3892a1887058d3c555c90d835a6f00000000bd01c90b94dbcf3a3a5010cf8ffb10c38d5532d96fa0a85f64b20d1ed53a26a44da1bf49ffff001d32991539","01000000d272aaf40e306b5c3606a7fe7f79d7f783a1d81d0b97cdd6e0ea3b9d00000000bdc736d7b7a1033f3a21e3f93443da0b0a6a951e078bd8ad5039a3f1a58b0d66f1a1bf49ffff001d99bc6002","01000000972fd75068380810e74d8c709b3d451421ed32023ee6f3db89a9b9b1000000005ae8d8400ddfe26b39aa63f84e96e4c2909d040546ba7735534497b0440f948af8a3bf49ffff001d055c0d2b","010000008fba5933fa1a26166f481bf045f5d1e72f2e53285522be4e3cd3855700000000d20e2ca819e6070fae391efdee5d7710646281030851a5a99e0b481ca2867a859ba7bf49ffff001d2650e122","0100000009a43b3841605a5f9e10c3f0ee69e48995c4ed14be107ec9c7e5b37400000000d8f9030cc8abaa4e43477e144ac0519daf415ac1364ffc10c64020266418ac2724aabf49ffff001d246f942a","01000000cbf228b2508fc79dc3a05c70f84c02e59dfd2b17d604737503b4857b0000000046a157aede45626b5cf14a1804dcd6023ffd50de234348c1a444261eb5aa5a1ec1acbf49ffff001d2788d6e0","01000000fc8684d6eaed9ca166b7a240822d92bc4ce08fc4bfc5303c2cc2acca00000000a00fa78da6cda903b1e2feccf3b7ae37c668d5b5a47e6698c94427b52d694c5744aebf49ffff001d00a02a02","01000000f38e866c53002dd8130316d5dc4c9209e32fe5dc6ee3b60ac93f12510000000075417ce2a9280ac9762938af5d5cb7f8ac325ef32ff71b647d9f9627b3c73efc23b1bf49ffff001d208c42b4","0100000032dc1737e5f2e513f184abf1fe2a2b480583022e24d55dad9f5f2f2b000000009305cafe0b5a06aeebd03f4b25b377756ee5c5cd8c475caecd2ad87726744f1b09b6bf49ffff001d33c79a3b","01000000385c6a1fd68a7337d87aa89df832d7feca4feac5bae9c933b0e25703000000003c49afbe997d799be48ec24c10bdadf3e97e1bde896ab8a5d9831b08af76c35420b9bf49ffff001de8d04704","0100000040504be14022ad4640dcfc05aa0a12289e542a584ecdd85613f1bac100000000ed238e87fe0230d114587a47b480241861490935dddb0fa669e53c76d34a7ca0dab9bf49ffff001dcd29c602","0100000034ffe6e809914f1f08d619c7d4ce9e4d5accfe5d89d2aafe86d1a13a00000000183733d8088ba89e1fe496eeed0925ed3c38105e393e99bc7ff96da56a976654d7bbbf49ffff001d2f44e71f","010000003e7f48af2f1dc458edec0ced7f5e26ad27939ad0b33666241353ac7c00000000376537b6f83d50c85434603f16c5a1387476e4a9d902bd74dbfe2478cb7db78f9cbdbf49ffff001de6b21307","01000000bedb196421363f0641c70caee78076dc24bb6dfc5dac00bebf795467000000005689a7da573a9953de9cbe3f81a5d066e772090a5de36d23506897cb8a866b3504bebf49ffff001d1f6e172a","01000000c177b108f0b33b892a44e0521bd423c19b09e76482f0a68c8fc1841e000000000d0297a81cea60b983cb9e845706d51fb37269accd11d0f7c0a4d1223522b89120c0bf49ffff001d159a22e6","01000000bc9946c1a8abaae0ecdf669b3b5ef020b786f4b12e3f6d408a98df37000000009d7541972771e926d3051f0671db4b9d628779e455f8ead65373af60bdfc301ac1c1bf49ffff001d991bb606","0100000091ee160e5dafbc39aeb5e27acf37f38eb3be5801cd30837043cd24ec00000000f2606fc296fd090d96e262d03523645380f9eebf2aca2290f6aa883e470b92cdf1c5bf49ffff001d34c0be36","010000003be0d3be0e8ec97d774c312705f63f13d06cb9980fa0695b23f7bf2300000000273cf28a3f9e91c7ac4159f723c81da42ecaf0018cc8706d83a2d491cae978b2a6cbbf49ffff001d1a1f421e","01000000700fe4985f960ec71e5c0aaecc0f1f1bf92eebe77fb9614d280f83aa00000000f43ebc18ca0b0ab6f046012751ce92076d06b9b503d4303e5ad86c29a8c97ca598d1bf49ffff001d1bd02825","010000004bf3bb2d036baf2b81bbd53f5a0a1a0969caf95c346670f8f956733d000000005f5351a5687c15ed690d46f9476a5b949eef1620d7c76329e693823b444f5af286d6bf49ffff001d2c2e447c","01000000035e299b4e842ec5a05d46f29b83193b06758b4567681135439ee61e0000000019f5564a0677a66ebaefabc0f303856b99e2db92ea0891384fbeab7b6dc19c8f84d8bf49ffff001d17d0ca8a","01000000b4dd9d77e709e0f90115895095ea1d7ab5c3c30c41c65b7c432e36f200000000695cde1dfa8699d778919a97f3f33c0533052615e83e62ea5106a909d35421dc59dabf49ffff001d3a825e81","01000000eb2f878f840268019586b050454ba608f0fc9042fa3d6463be98415100000000c8d26883c030f1021380027d9a969ae5cd3218684a56819e13a49829d38d5b3589debf49ffff001d31bb0130","01000000c3d0e30b24b0da757792d0697bfd3c1aa57a95dbe34e39a4c2e277b20000000079bd0a720747a826aeb68a5964d5bf077d87a921c8426474aa5bfc0b251b6e018ae0bf49ffff001d020f6087","01000000011eed808bc12332b60d66b678c0870c21493da8857d2b504edf6ba9000000009256bd8020ac04b8d2da834fae46c6c45a6011e8ed7d77c4f93bd2d27c0ef03bece6bf49ffff001d01d2d793","01000000dd7b811798867bb0d160881573b0bddbafd2f084de41eb0c3908cb7d00000000ee28be78cb03fbd880b6efb48bed27c9fd146f6d708dc0983c4404d34d2c5e5ffde8bf49ffff001d3203faa1","0100000000460e650eb638cda77cbfd239c185659b194e53a1118291e562043800000000865132f82529048078048ba6b011849d447f4282a6c4d526b83c8be7af8f4d8f6eeabf49ffff001d034a0801","01000000d2dfb0a5f111b954bbb16d33e23b7c1ec054a1f551ba18145d977c54000000001f0ddfe16abcc2dce7237dcc909f9ec93f80c031d89fb59e7bc6939b930a6fd7d9eebf49ffff001d21f7d12a","0100000027cd2e993638130009e7f6f8083c52238fb6b2b6e525c08f9799767c00000000aa0fbcb4870aa0259d892ebaf968dde8741182f67fec7f7b8c38dbf1d413abe670f0bf49ffff001d08e8e68f","010000001c3a903f58b5da2079d247576ad80fef98737cbc679c529177b183a70000000090928f6d51ca435ff6e0235cdb4102f2d9361a2e085d1c589308fa273c92b1aeddf1bf49ffff001dacc08108","0100000060df029db8ca04e2a96f2d3a1ed0231bb67fbe9ea099e90ac958b59800000000d50c6d895556575c913aa43c7f4436ec5e1dbcb03fff8ae0296eb030062d838110f3bf49ffff001d2bd84e09","01000000cf38b2089d39d8446aadfd6300f6213b8ac4be19ff5c12ab711e7d4c000000007d4b05b85436c13b7c83d0e35190a9620382a71682355c6993da002169d845c031f8bf49ffff001d1c0af1d4","01000000be525b576900672b75747d2a3207c42d75ee4818c280985b2dfdfed70000000026a1221792ab1f239107983e2f5fa134e597c3d7abaa821391134a38f44431a89efbbf49ffff001d6911100e","010000004f258d677429ea282b0c081f03d7ad7bfac4b979e43c7c8c964f37bc000000003f4e47b2905f1fd926de9d9d7c39b025686832ea534ca62336097462af310ece0ffdbf49ffff001d31f28f35","01000000edd816415d0dc38fbd145601a938aadcefdc34692ad25223b5a36c5400000000130b50daf2dc0a0cc5e7f5ec32f12e4e3658e739772185a771b0561d1b1bab4d0500c049ffff001d078f2087","01000000d7432a1e8e1f3b7b9d31f47d450e7b0900938027c8e28b48185c660f00000000a15131cd973b0870cfe55b9b6455f3fe3f1369ed5f22b0ca6e1c0b5b966401fd7b04c049ffff001d138f93a9","010000008dcae420399aa53c07ac0f85cc305a2657d69702c33d09c88a463b0b00000000028b08ab1fb505d459240c5d68f397608e13cf2da1628dfa123701ca8c5a3d310105c049ffff001dd5dcca02","010000006f36a925597f830db5c066295606b5fcdbb44f59fadc0671400d53c60000000013a0ee9b8c364d70bfd8a163b3849532256fa2bea1618ab614e411f77ce055283e0ac049ffff001d1389827f","010000001d45e1bcce263cefd650494277271118a8120d06c0923840d75c829a00000000501357b5e19aacca4838dd38f340cd2423b99807a9c3233992c15d1f4b81dce9b10dc049ffff001d3e21eb03","010000003ebdeeb6f181cb916df247ee794a2d1a8a562433b5a3ee4a21ce97cd000000003a3250ce957aa44ff2b1477b62cb1b51a46171ab83ffc04147fe1a2cd3b79bfa9b0fc049ffff001d09573601","0100000044700bed99992d0af5c6e961b1e79c697e02de444693d1a90549b68a00000000609988dd970f416b7a392707309846e4344d35720b3ffe5d93e50ad1a4461d924510c049ffff001d1e559f41","01000000f84a137859cea538b79804e746654b38e0d98efaa92e957c7fc60ae300000000ef21ccc02cf67811619126cd29546b5127eaf1e83c8233fdeb919633836f54600215c049ffff001d1635601d","01000000718ab69bf1298d6c7dec5718d67ce929843bd63a02796fe0917b5e180000000061a4e99d3eb7845eb38aa812a2c9edcea314f05aa6534fc95acdff831a10625fe01ac049ffff001d28a7bd43","0100000078da98f54f6c5920b815f660fa131fd0b81d50b6927dae8b21b5db7b0000000094c7534e7d183a5d29b1f9c55e1756f27e15cc3510666d836597c05cf0955d160820c049ffff001d30a0526d","01000000954f508c3f547e427cff8c244fc69d709ab5706c0c5801142a478e09000000003104b469a905765b98879bcc9dc37014ccdead3757ad4f6ba230340a2c1cbf6df023c049ffff001d9dd1a614","010000004fd0b29449ab73f7c4aed2b9402702bf0e7575641d87b97c13c4e6b0000000006f8fb4e5ac102344ee5e0ca3520c3c5fded27f1c6a05cbe3c87e3aaed5d9740a4428c049ffff001db0315715","010000004e05dc2e275051f30c2999087c389c11a185837ef0d47b7d6736a1c800000000fdf92171c298c578e925d72e1804435dffbaa305ef0d11eb5ba168e417b6b8f1ed28c049ffff001d15ec835a","010000006258aa0dfe2bd7d844a5524e3dfc4748741f47e6f0369a66b74a597000000000e3f74e06fd0aaa0ac28dfcebf7a5454db67e9127cd213b7fe8408ca85353a391392ac049ffff001d25961555","01000000b5dd4b08a806b1231ba6ad2d1ef1ec0c9e387b27c6a48b47795e0d3100000000f63abdb70c0c865c8943bfd1a94491460652e99920d0a580f75ccabbdaefbf25a72dc049ffff001d3916c5a3","01000000cf317d521b52c7abd92248d38d206017421821e0c7a97171a3ad0b49000000004626ab2084de691bae3abc0861d2ccb87a881b29be2c187636d73ca1d3ccf67db232c049ffff001d035f5b90","01000000ef8d4f02ed2d8aeb7f7f3076b8e08c58a3ef646c5d1efc46106f4aa00000000097b22aa3c0de8fcd16e6bdea8dbfdaa50feab6cdc8e7de069362e82b4d7e18ecd034c049ffff001d1bb0765b","0100000031475c1dc07b792da255bdb0a5d9df5a96f978ee8209aeb98297f372000000004b5574edcc159d69aae86227e10bb28ef2c953fd2a6edb969bbefe7157c371d76b38c049ffff001d25d89e40","01000000aa0fb6dddffa575d45f059f95b8654c1c2a7ebae7a88c86b6bbeaeaa000000008253a00642e4c771e6ee2ab9786a14a9c45fe728b98d142931b8a99f5b1891497f3dc049ffff001d29b7b2bc","0100000036f541fb4b00eab030eda55395f2a429e905910eea38d535e627f3a20000000050570bf9c59fb76eb3f9c08a178d9c938d7b3097e1afbce7d9a39e1053ffca2dcc3ec049ffff001db19b7303","0100000026728e758bad11a4c0e392409ca8183e7a6611adaef7c76660ee517a000000009227a7d5e08bb153cc1c61525fa60f4280ec854da1dee7fc76b21776d11fb619a43fc049ffff001d1e9aff96","010000000d475b807333a6a51eda3aa7abe58aa0eb3129deaf519b54ab1a874100000000f51cdde8027c14bcb7f98fb65ed53fe3f050cd3dd11320244e4cc1fc6e54fd836241c049ffff001d24d3f4f5","01000000b9baa038616c90a16799b9bc08a14c39edd91af2219d5577fdb2bec300000000bb498902b610ee6676e9ad1ab4230a918678bbd92e4585c66253d543df3fa56fa642c049ffff001d85ad5905","010000007f3e72a99042e81456d906a0f52accb89f72d6e463eca8d7fe546e5b0000000054b09ea65673c39e93e0aa3ad4212e8d497e49c58a4c03a51cfe049d886eea258d44c049ffff001d1b102313","01000000262abafc12ed53fc2643e1dec42b35c1f4a81d41dc67da14c4410ef900000000f3060346de644db81679d62b3e2da5d723f74b249e9095528f208fe61b2ba8cdf246c049ffff001d3072c65d","01000000c1878931ab334ae1477a5d78d53e2be1bff52362d22749e9df650ac700000000a524c2f6d5ecd54fc05d92670f4856cb17298961f411fed0db73bdd694b0484da649c049ffff001d2ee7707b","010000008d26ad338806bbc763f124fcd258ad036b946668731d0ea120e58981000000004ba63d983b9eee051bacc880d34d8b46e9e4f86b5d4c7d7822d4026743fafc0f594cc049ffff001d01dc1856","010000009991cf3cf9b71ba5a6080fe0ff0e912eaf1e3b22dbd82b3611ec2a1e000000000e8c2afaa3bb495dd5d80acecf2a672484d1b51f2ff86ad5e0e3d03cf59f0f825a51c049ffff001d1ac8db3a","01000000a6ea53c1952c07dd419d110c0c026487ec6d562940bfbfe2c5782c2b000000007cc5f0b3a4ff897b33648e40ea83a02474a80130c583eab3b88a8a7049ef59f81157c049ffff001d00f576ce","01000000923a88103ec92cebb65d7c1e40f87093431e2c0050d47cb661c23dfa0000000011f41d84c700780629f064e8294b6067346694b0156a9b76ba22bfde6c67515c865ac049ffff001d084db26a","010000009acdf1ccaa1992763f45439f5d4a38ac9cb0284875b995df74525308000000003180d5f767b308f27d9c3b44ad5ee9815ecd4bafd30815bd57481a54614abf7a235dc049ffff001d009072b8","0100000002c119556772539c6727513a430b02a76eca7a8ec50b9fe58a7baacc0000000048776e8f7c82ebb162957d5eb4896e5a8c47bca7ea843cbbd812dd2fb7ff225cd05ec049ffff001d09478a6c","0100000043d7eb074650e58042f452aa919921c84329e4f31758ef6eded7aacf00000000864baefa55362ff83f164929a88b14e9681350752ce743f6add530fdbcd1d3080564c049ffff001d2a6a584d","010000004f6c2d1628925b8ce9a27f96ed153eaa5c121d5b6dc9577e9f10e71e00000000f93a2fe0257e85e8f36d051f611a4da8e5cedae6da0ff52fb646bf1827e57eaed369c049ffff001d175caae8","01000000161b27e488bdf4214d42740f03ab1844517bc95a9085bbb999d47aeb00000000b50ffb17e5fae2616dad68ec6e7c3d61e5cdcc6e78c0f2364f498c13807b3280a96bc049ffff001d84bd920a","01000000041a2cc80089cb67cf08978568c50046487e210d01caad08a7c459e0000000006b0478bbd740cc4b45fca85629135bf18402cc3233e77a5d10389028721bc2598f6ec049ffff001d8b20a703","01000000b53ac4e453925b6a2903df2a6ca50555c527611fce8c008aa03fce4200000000e111739a759ff57cf7105c5849ecd7108c8e7cf19c20ed4d7d56d6a75ca99bc7066fc049ffff001d39dbdcc3","0100000027543f730ca6957d7cdf25441b94ce3333cd2b972b6c7188ec313708000000002d50238693be8a7b978e6db9bf943dcfb73d95059023e865f42dd05a31003a7adc70c049ffff001d059acb38","010000000c03feba78c271b2fe4cd25a041f5bdfd657c9216007350b7acd0ef50000000038f99ea74a1d5e6c54ffcf98ce9114f70891e86ced7c55633ee1665a66cab53dbe72c049ffff001d370cd292","0100000013e8e9c94fb3fe6c90acccacf98df0dd12aeda4736eefe235c6ff695000000000571dc589366263a032cae527556e3c3fc3dcd8728337fd1caef85c8f181badae574c049ffff001d260b4faf","010000003fe86266305a7150ad70269bb0ea67ca949f202d32ed2e34e217cd930000000068d7678ef12f996fefa072cf0674fdf3c610fa42c67ad5b3b799bc3963a8dde1aa76c049ffff001d3583d129","01000000e783215f820349bc9225dc29dc16231d9c7b67cd898df9c2b52fd3d900000000e92918f12ec20599c5d2bf1118e81b38450af352414b3e495b7a4e10abccf0438a7ac049ffff001d250741c3","01000000801e463345abbbb6f41e4d6f0d7d1798d45ce9c853338723704f56b100000000f2affc9404ae848673bcbf49ba09d491aa9fa1648b1f75f4a7fe6ef53bb32c290b7cc049ffff001d21a2246c","010000008570b3e0184effbd2864e266c33a4f60fdb86c7859d2a9851b3cc971000000001dd1e8d4518fde59f505876d186e5593d67914cfd7ca1ef793a971a71fde56426c7dc049ffff001d24fe7f04","010000009aa297907d53d9e3ee4fce8dcd58dbe0850c4721f76c0bc2746d1d5500000000acc222f0c57a38a283b780b0c8c675ac2102bcf3a57e794142d7fbefad3c4bf10d7ec049ffff001d1bf87f70","0100000082ee2b1e4fe3ef26914179122e64a753e469b310dc2148feb10bb205000000008ab96d991164dba718f199a79a67fc2c9b603814d549ed7c330987e9f60216520184c049ffff001d046a8887","010000003c695c990ae05ae8446ab9bae4a203bc3efe0f965b879d5e703f6b6000000000884e489c7ba18843699d877af99e41bb90dd713a67314ee11e88bc12cb6595720f89c049ffff001d33dcb57c","010000002ff50b36bd282cba9e8252340e2fae40d3ce4a098b4f541ea86cf61400000000f55388b90095af05a2adcb94a72dc8a1de89456417177b42a49c8c99194fd1cdf08ac049ffff001d07f5c9ab","010000004a1bf8021b0ab3c3708fe3fa5c0c3afbb1b36c120650323d7460bac5000000008fa934273116e852766c310312fc52b34fce283d4491fb598e11c5bad2dce1c7378fc049ffff001d1dc33597","01000000164da6cf20d35c84e0b95d525d1f1c574b21508e5913361d2dc5bbd10000000054f616058a9db173c18ac914f979e9a8a7b0123c82876cce8f6f9b8a21da874cff90c049ffff001d36154d21","010000006c539742478a95a358ded80309929261de86d81156d0da5a90e443ff000000008999681dc61202247fbf68d1eb9a936b51e95505578afb892611ba7dca1616de8f93c049ffff001d195c53bc","01000000340059e7b33b71ef924e3391708bef4fa520e34ceebf4072e46e3d9900000000f772cafbd9b0aaff06395212b5d0a6bd9446eeafaa09e586ec082ab445c93d55be98c049ffff001d21e76c4c","01000000aad546132f80a8a1d61a2d65665db6d3fafbbf6a8577d59da03183ab00000000fb026e6bb54175793dcf4f4eba12dddd33644d033db6c069632c13c73ac32ad68d9ac049ffff001d1f8cd5df","0100000016be75dd155e0b8b34469494fc19ad05ad812e274d59f06e5b4be62600000000e6ce9e43a625f01b29220dbb79f1a8554895110836b9a88dd44d3b42356a76a6b89fc049ffff001d2c053803","01000000f664554da8813a489f14800b43bd4ae48db4a1e8398a20de3e3855e0000000008573b3d71dedc7240892dd9476ef8791c962f4d85499ef0ef65f4537cb0887d100a5c049ffff001d2b41b67c","01000000f47aaaaaf430e9c3b8d500c9443d389a82b13b90d6b2671e6bbe3dc500000000066ea618a081d8aad3c99478ea609689db7c51cfa81b0d6175134af28765527648a7c049ffff001d1db25763","01000000ee02db6145712a24db693f30bf08b359be8563a1b56ed717c50bc9b700000000edc5571f28f059e18b2bc3b56cb2c43acf52ec898b80d9559efa66aeb951fd62e9a9c049ffff001d37b14538","0100000094f5d0d3c41a87a692adf21b6a854027f2b656a5d9de67fc00f9bd2000000000637feee7fab4f3516a751a6f8d6a22e7579bf7ee9af64fdfc3f8a18a4553f0c73eaec049ffff001d178a0d30","010000004bc12cb428037f493115b7fd6181a7b2c70651a5926f5ee94dcd9eaf00000000353f1eaab5ef5c56b96deaabaecbfa0eb0e7eb7850b78deb80406cbfabd6b7f82bb3c049ffff001d034083d3","010000006cc28c1dc6703a10f111c80b5095ade808cae502c7cfe9d150888e2300000000b82cf15dd1bd56a36dfebad1a1f14e9b9969aecb9432b4f1c76c57b6eeb2f685e0b4c049ffff001d2a564ebb","0100000005e7894a21378fb060e5dbd91ffd9bfb5f7cf95f072f51e302f9313e000000000610baaa699b7ae07b404d123062728df863456cbe8c80ec88e1cdc6bd62b0e845b9c049ffff001d8f7ee10b","010000004eff48a118ca6fc4e3b3f3fd3196f250f963c1500c6f482383822a5000000000b06debb8cd5bfa80955bacd0ff227c56af65fe7d898e6bd0ec594ce8639f9109a7b9c049ffff001d150aa5ad","0100000077178e739dc4967907ff118f2e9ccdfa485039e8b2c24477fba4fbb7000000007e5cb94116da5b66707eff487f9688030bb7fc62eb2f2d74cf7e577f3fd56c2e2ebec049ffff001d355bd21a","010000007f000e25ad66a7d0a9fc463a1bea62146e3ccc5928c74b2072180fd900000000b1e53d145d1b29bfb2de12167d7bf0f80740924a6749b0aa824faa264ebfc81b9fc3c049ffff001d1447972b","0100000024634f5d76060de87103d42dd9745f5344bcafaaddefac5afb185c5f00000000084614a15cf6b39a9e81f001185b5324018f46337c1961ae829acd5c169c5822e5c7c049ffff001d303552dd","01000000a7229d0b64b2ef753c3a2377f21ffa7466da705522aec9d8f423ce9b000000001a48c6838ee908a4ed9c633083cc92d07537c582b2c25f506c030a22ac1a793baacdc049ffff001d3797292c","010000009a6e03856e402bc0a3d3f2c56f55cf604f1dcf9ed2ecd57b5ee710c100000000a6c6317ae0e16bdd8f3283d20cd4d2f72412ea1f88427e8fdf74be8403d33665afd1c049ffff001d05b1b176","010000003bb1d4ae76db9bfa81172c0c37b9cd747d6ba7aca89a14dee3493d900000000005886e24e5a121e657dcd0198e1128cae84e9a8a174ed062521ce55eea751a2717d7c049ffff001d285697cf","01000000b1f363b55d2ccd2bb4426683c544f1bc07ca7817bf1b1b49cfbbe4260000000043d8c89f61b7d45f0c1526864bb442dadb653a1f9f75cdc218a3991de07b66c641dac049ffff001d654e830d","01000000e50c39030662a9826a8a9afab9b03bcf1c827ce45e619e2db3195ea400000000d8e9480b1833715a6406fccc964010998f7c4793185a9db04f1a0ac1ca91da43acdac049ffff001d3401e071","01000000692e5426a50092d026a5929ad23afa8748c8a08c2207e2fb082c71f200000000fdc32bc45987118cb95a6664e97d89e427dbe30b23b62ea6e309c42325f153a310dfc049ffff001d265dd4b8","01000000bf8241173de6b31b6a83a6b18f3e98366365ede871a31c4c637e489800000000eba6d5023ceb4b482eab970c15dfee9f91b820357069b73496dbd4f4e75fb61b14e4c049ffff001d38414606","0100000049f0831b47ef0d1f00b44aef146003abe2fa6df990c30894adeb485600000000ca12845c2a3375bb3a8f025eed969679dde425b96f453bf16d9660d326ac10d6a0e4c049ffff001d27985901","01000000af0dc895f0a811c9f3be5b8520b6b56d07149e74b4e2537f0bfebdab00000000d9bbe77dd100c9e99a08dcadb65c848eb4e59ef65ab2af78f1fca5afb62e12bebfe7c049ffff001d1a512bd9","01000000aadbcb5da7f7e5a84f2f429c32836e98b4a1483ecfc9f2eb3e5216cb000000002563c00166ea76a38ba7999da2b67d95ebc764c64415364374845d8a6a5237a6aeedc049ffff001d1ee0377a","010000008433b6b178e83e5ece0d9659a610e89a9084ecb2e2ed90eed694a18500000000089001d4a2fd72d75e458e9d34ad7e94f0d81d80376b709bdae9a3caf20baf269feec049ffff001dee9c1303","010000006aa674608d64e550e33ef177c69e6e855bd8eb1423d9e35f478e9004000000003c14a914249fff8b3a78544fb4f2935ca24a1626e71befb0d6e87c23c6a2b64a17f0c049ffff001d45538801","01000000e165729f0c151418689c204a9bb5d19d0673b07f9e4d525d29488ed300000000d468b4e1912df1a9864980bb3d012f6e96453c5ec5ae60e60bc69fd118d402a569f2c049ffff001df128f009","010000009edde0374a74c9c9e17ffd633c3c8ae6964832d46397852b79336bac0000000029007c1611ff82ff8974afebca10a82d053ddc5c549c76931876687d20decd6cf9f2c049ffff001d09954fe4","01000000ccaf562dada26fdd2da450a481d1733561be872a4099a75c256e00f800000000591dbf0dd29a7c60441a5d119e0d26feb88a5aff243cb4278787bb7a435730412ef4c049ffff001d6a9bc304","01000000981ae948faaf5f5c00195b361880fa9f11bb35d784f9cf1a60f28bf70000000063a9c6af90065eeb8005c1b2a647dd152dbe9d3644cc8e4e7452c354b7d38c74aff6c049ffff001d1b8ac7ef","01000000454b5f6cbe93bd9a7f0602b672ac103e3a5afd81d5fd2cfa13c2e00500000000880772228e9a4d550f942f132d09d30044b44d0d88acab17b34c93441fb12a6db2f9c049ffff001d2050f338","01000000d14301cca1c0f1bcb6da78d487982f1f82588b57aad3ec8affd36b3900000000a25d3de5758ba4a94070c69490e9d8d3d66508f98ad3b80ddc7f893bdf5f30b40afdc049ffff001dc909db0d","01000000162b3b2ff61fc0b26f02cb7dcc073ff8913304decdb007443e56aaec0000000041ccfac89063a944214f5905fb91644b89e4310bfa66a0362d75d9739144ddf996fec049ffff001d17b09340","01000000b7989f27c780673083271e12c95e8e7bd5391ba04d9cbd8af5f3304d00000000f169bdcc0b2c4e81ed75e3d5e4897b67ebbc57b6532543df760dd151e600e7fb8403c149ffff001d34d805fd","01000000ff88d65f64f605cd2b8a8e6207b63695db49be144404ada1dc5c7b2000000000379d040d46c8ccd047da979fe946da23ef032e28a4c089d90949ce55d73efbfe2708c149ffff001d18d05d01","01000000b8285a8abdeb6bab8cd9a4c6a4fe769d8880f031de2e70ffce80d98700000000beaa74ace8bb93436570ab3603b91a9333536ebdc9c814a0442c9370aa7f332e170ac149ffff001d25f57daa","0100000078829cb81ce0dd5e6441db6ed30349340b3a00104609613dd1310ca900000000b3b52a9ecaa2f96a866f3aeb29c7019f3bc91195910f7743d6d260dbcb7c650e630dc149ffff001d02f2b8a8","01000000a1660e0885d7064ac5e617d126f45f5c997b9967ab8ddbcfd279d7a800000000ac94ff7fbed201248a1e3a9685b47c59a2bf9b256030412b3ce005c084fe6984f711c149ffff001d36943273","01000000ce5bc6fba616788bb3240faf5e425bf5427efd52466208d60db58002000000006d6588862d91c7246f4fee5a95a71fb2db3d83d1e1c394c58a06c51bd252702cdb13c149ffff001d2d804dfb","01000000f3b418bc915c32fe90c221b2a1133f96d403d84b2e6900221911e04b000000003b8600c4102d1662d8a9317717f0f167a14d25aeeebc346388f8d60f2cf711134c15c149ffff001d0402a001","01000000b3c58d5e210118aadf8dfeed1858743da8da9904b3ecf7c8a67b0311000000005bc39d673648eeaa86b6ad21bbd632f657882d78426876bfac8bddad4008c8ce0f19c149ffff001d09ae43c9","01000000f2e235107159d11139678015c3a5de91ddce035deec7ce722e4e51b50000000012f3779f076aa2aab5afcfc15fc74307cd336527c78bf2d128ae1e49cd60c790fc1ac149ffff001d295c3314","0100000086f0837084da29364fa43005b60daf2b5f46743075978b6b238072b0000000005a69e459249bf8d729da7785d28cf2ce429b4f4b8d7326c8ba57ef36cdbc44e32b20c149ffff001d21b39c7d","010000003d395b32990192ae0803ee1b0525df5ad87d3a69bff7242c4ce443a200000000aba427e76a0d0d8bf6f579454df446efcd03b8c66502ab8a753442f1b3a199feb925c149ffff001d2387b099","0100000033c2364f14288fb38d55b9067d4e1c73811183d07a63119c776f09a800000000355d9fd638d083c82ba37c371f8bf50e618b5ba82b0fd260ab82dd98da614439652ac149ffff001d388ad019","01000000b35822951061be57138780f73ad3b1475469f64c3722ce3fb31ce8ef00000000ee105d0a9e15566697d333e399b43b658a61373f297a91406438636dc52a9c64182ec149ffff001d1fa60931","01000000d3a7d64e80f88028d9856509f6828e62d73116acc1726daaf3c162e800000000d7f843f5f8bc62840826f92fe1fb0ae17efa9281b9a986ee1974f9f5b76b8d20b82fc149ffff001d28a8c65e","01000000d76ac8ffcfe514f856a33f54181f51d504529d6f4c71d8fdeabda3a200000000bec6a4d71daf283d3f653e7bbb121729e6f1d77cf03bdfe48c98f00f01296b391736c149ffff001d30876937","01000000d270de475d937079c7753dfceb999b91710624501abf7f0a0365cadb000000000d65126e058e4eb1d491464fd2da7ad3c3c9505908309b9773cb0579c20f4e56d836c149ffff001dfc69c502","0100000066d9164126f654774c6be9730b161e6b754ee2877cd18debebdf07be0000000046b8ddbb19381d3fe79174a869ceae75f7312330a297e1b042ae90bcad4deec8123ac149ffff001d0055d63e","010000006125bd567cda55adaf46ea1ac89cefaa57d9db179d1a7b5a3e35bb5000000000979a7222ae5072d36b9aa4b985f3abeab293cf2d8081a251b0fa1bbd74d77185753cc149ffff001d07988bd2","010000003cf583d303f3fd1f9b1e3a89703279e0ad617fe2d969638d0c41e765000000007ea8d15ccac7beaddedeaee80df566a6af79e3f1ef2a2a58607af7898919ad3c2a41c149ffff001d1f8bda4d","01000000f7fef407e5b0fb392654a9620fc8164d99384e08d1510e2bb4f9914a00000000c574b1f641fcdbc721e251f0deffa67b6b1393f3191370c56868df0d21ae0b575741c149ffff001dc8aaa900","0100000091fb6144dd6735803b73cd1b5c0c09f60ae1a30e5aaa2ab2ba49516b0000000030529b364108510249092d91b4e22877ea97428f6149d341e1cab5d5f3f1c5be8942c149ffff001d06970592","01000000d8e69e3b21b2c5b935194a3d05e8d7f1f1f907947fa365f7acc1770c000000001557f9e20803bc99017147c1c4fad9352ada70a908ef007c4ce86289269ee2265046c149ffff001d09382211","01000000963c007cb92576c602a525cf54356628288d84ae09d3db81eb8c7027000000000f7257e8afd58434523675bd27037b01f9379c3f96e440cff88700679d5e2380fb46c149ffff001df354a501","01000000265c2cdab6c79399005d3660abac9592c7394dc7d3082ac8e45cb2a400000000ed2b2cb422a6c09c010e26bff08109dc7f8ed90a440333b24e7c3e30f9f5d2752048c149ffff001d2c02a104","01000000c64229052938ed44a4ff58bc43d443afed1b0121dd03fc8715467ad700000000a136bdb10883bb10c660a2ab457e173ec6860aaf7824a5483bb4ddcd31a1e97d9d4ac149ffff001d270c230c","0100000061ff12a2853d452c13828dd65c72fc29b4da9041423cc86079f22b120000000053bf3571d625fc9a8301a4e25f7180a3ff30612232f1c5a52d0482a563af6992f94ec149ffff001d1c0b8133","0100000090bb5b62f17ef40a32e5bb914ad3d054db6eeaba2c748f8bd985b2f000000000f0bdbabb65589d9fe3cd3f9f8a5e92502d87c6474ee36469a22d753934a411abd552c149ffff001d342fbabb","01000000b497b3667729a262bf17532faa23cfce66cf7657ab0d13ba85c1de0d000000007ad48f6b2dd6981b02a536ecbff1090bb5e4e319d24cd995b28033f1c36f955ff754c149ffff001d26ab1327","010000000f8516905286e4bef8b86eab5993ac2c460c46ba9fd86e659270c08e00000000fcb817e0cdf24f633aad85eeeeaa12b08dd7e5503679587f3a7a1e334f06efda465bc149ffff001d02ec59ad","0100000067cdbdd99083b08d188c353223426be3d089708261a29b87173f105900000000e9db813353d2788de0d174764c792d2cdde887b6e7187c014aaa34fa2cdf2883db5dc149ffff001d27a4dcdd","0100000065067b26aba7af4d5c709545e6bce9216cc3fe2db00e55c83f11a7b900000000691831dba584ebef23d8d360a5c7052e0dd64eb50941fe480f279ef2520e11202e5fc149ffff001d1436eb05","01000000c6732d4bec992ebfc694e98e8f9eb49baea1288f0c71ff8d4532ba4600000000e9388aee0029308617e6b240f411200e3b21cbd0d4f8e75e0c520414396b749ff061c149ffff001d05f51801","01000000c68cb70235807070bfcc93a3faf77f6f48e250621897656b8c4c5c98000000002e7c9ee9fb61a427bc0c18238d87966430a1ce3991731972cc94b620a25d11e0c463c149ffff001d3296c851","0100000050f8544ad4e5ca5f7f48dc45540c5cb0756775c72526d5c61426d45a00000000321321f8022f761f5e7e21a953023cab0670ee86a6d8bfdc276943d74cec43f3b368c149ffff001d18745ece","01000000bddf2418b4c58299f9517c735d5faa6531a1efdad61480f34cd8a294000000009be74cf4ae69bdb9667a638d78085a1b67a6db01ff80f281e22709af9278a415736ec149ffff001d010c1762","0100000008317c98c1171a5a4e575396f88b9d57c27deae8c5f4553b16ab877600000000cf76d03b63d48b64176a2e92c31d8193c3e5b40a2c0ae55f95e8464ec5f64a13b271c149ffff001dcd28950c","010000006bc5dd016f6e46448b07a86825b5561270edd214941cad694adf21850000000041cbb608cc90b339b36cb42886842188fe87a06b867d181a68d7c12043e768cb5172c149ffff001d051aa58c","01000000d4f1816083801f368be187d994be54d5890c37d7a9d5d97dbecd90030000000053e3e87073461d1e232d5872de122d31da495b2addce90333735bae20b37933c6a72c149ffff001d90074c00","01000000244c86842959db7b0875325ade1311e706d0c8cf4fdb938dec62466500000000a7042ae9195188a6ed7a68906c4bae6be59e31cc1d9b63df9751c20c8d4efeacc373c149ffff001d0846e257","01000000f1fbbaa88e313b311e501bd243eb32079a067246278bb4704fa5f0c5000000005abf14f56d967184f81829f1f18f78a91bfd4108acd87d5f1cc7f181118653035474c149ffff001de8771902","010000000aa2bd164da2286cc06de179eaca9dd3f724406f02f11a2a39bd9f550000000050963c9e5dc1643472dd395f639c8309828f6a1a8a8888812e32d4e7e3290f594676c149ffff001d06c66956","01000000aa14d9fda1c7487c54e46a74c50d6f67afdedba70107b2ded9f27b2700000000a901136c4d0b20769bc0f1bb9f7b8ed13b8ad75c4c9103de5fff3edd8f5729f49a78c149ffff001d46db4309","010000001594eb0d50470e76cb849d7ac11cc644c09379f13985a444b74f90f600000000bf82c5a69d59e04750aeee407b57b466ccbc1077b904ea8ef71efdac87365485e579c149ffff001d166e7c63","010000006e30b45228b139e7e4d604e03201c6bcb249e41b6580108e57513007000000005e969d600ecc61ce9a39fcedb774a4635c614110036e65c802ab4cc3c7debdd1377ec149ffff001d25bb8f9c","0100000026dfd156fd9164fc90dc2ab8cf6cbb397d4b15c0a711898d165baf7b000000003d44b8b94734fb0b9fe96e530cc0957ac54bc62c1ce0134b7fde4a1dd051e3d28980c149ffff001d05315c5f","01000000af6b7c70f488b8d186ea438e5dda93fc1c5c2ff2a76431b390ab8d2400000000ef654b161235e4298b8c11ed13f37eafee7ea2a7cefa14af5b5f6b8b6f75b8d90b84c149ffff001d281bfa80","010000006a327d792ba0c166df0f16efea42c1cdf8890f54fb5b604cf7dae8440000000020ad0e588fcd297b6fbd9fe2d769f2b86a2a0e5d48a812d365d6f0c47b2a58ede885c149ffff001d2f3c994a","01000000f928ab8058e94f39ee0406f7777885be59b15a7ad6e7446e593b88d6000000004f3133dc11e6ca92cbd0ba66e3794405a6e887a0ed2e8e2177be899a1c394089fc89c149ffff001d38af54c1","0100000076a8d7d04658782e5577ab14ee08bad31aa599ebd6629be84099256300000000cc7785f1ef88c88eaaa6063dc947048268ab36e36d30653f674f4027018612b4f28cc149ffff001d3932773d","01000000dc158ac89164ca6dc76625fd9ba55cc3c4a8acb46442041923e047b100000000bb7b63e3f69960e3ce2f3e91e4ad254d617c146f371098fe3f23c153597d56520890c149ffff001d3748d35d","0100000037c4b71bb54605e43cf60ccc5423be5e35391e0bbcdc20f2f625b8ec000000001309351fc1da33b1a4c637c419dd893f134a5cc76a5f38acdffb9afbebd68c804891c149ffff001d15365802","0100000097982f78c42f860939e67c07b8696f3c5bdd4b0a4dc14d51eb99995800000000b51f91b00a23d6f242454268bc4ec0590c18e302e8763cbed1c44554bdcfbdd5bd95c149ffff001d1b1421f3","010000001428755c2a2e3df0f4128c8a56d340953ca52de42780c5cadeb1d32100000000507a987f54db28052a0baa63f1cb2dd48260c7fc4f45ba5c1f2900a24d6935a87596c149ffff001da36c1103","010000007f8eb5fd7175f6e02e8138d49a6fcbdc7836a12d4f0891f9955ad621000000008aea871a3273eb2d2484135bc5957bf1603380c6f56f5dde69179b042b7d4e455097c149ffff001d341dcb01","010000003adf43bde17ce0d062825b127e9e76f48d7380f22693fb978f7ea12f0000000064221252f67b1c45004ea9a8ade8f8f67438b464d1529f477b53db899a1ad2616b99c149ffff001d1e96171f","0100000082c9c8e5d1789d5710ce807dfd69b293821cdcdd81af7a252a8d7a8800000000f8eaf41cf240d94156f33dbf22746a07d688d3c0c91cac0e7e30c24eb4d65c2ffa9ec149ffff001d06054c14","01000000e991904b9de7bcb11f5416a576f9aa7edea9e85befbcb28d7da89dfa000000000977a435201194c20010393e3b807703a0b04dd648b8b08f94aeb925e9e62b5e1e9fc149ffff001d9da85500","01000000d5fcfede5914e8d0f09ecb6fc3d4f0ad9800c2c5ae4654d2877c291d00000000b3d8216afdb0b691572ab2a7569096f27f96b2b45544c471328cb5e47b9693475fa4c149ffff001d2e06f67e","010000000dbd862c497f3f6cb0721315a64c0ddd00c3edb6944a6b5899664ab2000000004e3ab2d376314f3e236a0d50d5044afd6bebb8302535e65e52561d7afb156f555fa8c149ffff001d167fe544","010000000c7df018718086ecf677ebe88d73af0e21ca1cd454457c838e66593300000000efc8bd99e48c587a86f2fbb79eda192930894b0389534d6da66076d4cf6c8a05f9a8c149ffff001dce4e1203","01000000fbd20a83dece4a7656714b474d7a2e8b2c212b444f0b9b64d5002b07000000002e2ba8e1ad7fc58755cbe952879430dc16567f7897ac0a7b042aab34e56357d114acc149ffff001d324ba3b4","010000005b011e2a7fa6b2766b8534ad2ef8489e48fdf70db0fa2088a4eaed6500000000b2968ecae8736648d16d93d595a53a454e31ad9c6b0f8d9b8a329ead1146fb9352aec149ffff001d38f46879","01000000495e9910a53c2fd962af9fa7b493520fdbb1c5222615d5ac3e5eddbe000000008e4e207deb359838f3569124cb70568e0b79f16e9ef30ffd732698a4f78392d377b2c149ffff001d37fab5bc","01000000386cd9f5894084691fd1d89db5170ecd9a818eb7fc9b30ea2f3a28ac00000000dc4d3e652501977739a5202ff3d562398499207356025a3d921499a2d9c3e8771ab5c149ffff001d2332c5f4","010000009c73cf3bbc257a04ffe6297f1d7f086ed90ffa11eda6a2512d31626f00000000d612c8dfcea8669d5c262dc45a73375f89722e1d3d28edb8e5507518b9d4b5ea7cb6c149ffff001d0614731b","0100000082208b27065ac57107ce2ccd99f10680e31022bfaf00240d1723918f000000008ad22367655f3ce546bd25447b995242018cbab2c13de374091bd87c9b082225e6b7c149ffff001d286c9725","01000000838c6dff6ce0e1523e7fa3b7cc588c3eac722bc86e4260f0f1d00a650000000077cc479228d4a69e1fedb866427660f9cc8d7e9ea0d9af92e40f03c82e09ae6cbbbdc149ffff001d39f82bf0","010000008a3f838efd83e15e9da1db8170243984497782e8121c43f04b378b0e00000000a466a3da646af488175ed94b9f7606fb44c7d97faa4405c58237756bae49e901ecc0c149ffff001d25266054","0100000044f3c4c41a9dd0a857d98e70a540d9a74b628158bf634b4a7d83fd8400000000baced9df8999fc2c9e41f4abd9da9123aeaf9601a36ce708fd42832df6f443eb5ec3c149ffff001d1cece579","010000008eb6e515ad036f07b6611ec8c3de64ad2986d558c53513e2d32a870600000000c62daec5475188c91defd4fca050d9083a90352c326b6b671d5ed82a34e6a47c2bc9c149ffff001d28dda589","0100000019cbe95a5a035c211db239debdc9f47694566c435e6098131ff2328400000000d1d0abe7f4a6722704f61efa035be9863006b6c8196eec3e600cf62734ddc4c4edc9c149ffff001d69364a05","01000000ff45c690375c70b54453b4a749e0c59b0234efc6fb3889d26554f9fe000000007fc19acc4690417e36860c9ab776358e6162adc76a7f9f805236e8d8649c6f6353cac149ffff001d2c82f601","01000000cb3299ccfa4ec1607cd2cfd2a69716aea442d7c76d9468048cca49e300000000c35a9d9359797b710a155d0bdab35024ea4f5b8d64d5cdf247dd93fd4253370249cbc149ffff001d01fc1d85","010000001800db39efdb38efb22e21c2d23243772931ac196f9e499f61970ed000000000ddab3e63ea0d03057e71768ecf49261db833ba596a9ba72dde83cd439fcaa18fd5cfc149ffff001d0406fe85","01000000a396164450eb43d2d9f831f1d16546c0872be18d38caa8139590fd59000000006e13c9ba3e11c662eea08884430cc956298316074b223af5cebcefc2874a0f75fdd1c149ffff001d03368281","0100000056e7c21099da8eadd6e299c1de9892202229fcf0d4e54752b6517eb2000000000686f2b4195b69671d9d768db223c2f809ac25489639c003595e097867c7b0cfc3d7c149ffff001d0068b488","010000000f4feacfe138b157d7e19c955d16a1837f26ad021a35fa1c0c8f51ef0000000067d787a99954031a6829a2b1a9df497d5193720796de0ef3fcec2384b74d95794fdcc149ffff001d17dd547a","01000000c41d9a5ade921d87a8f6011b35efb04e94a5380504d796a0ef756aff000000007825eae18bffe3d8411c79630217ce311044fa5a65c3ab5ba328ce8251590241c6ddc149ffff001d39506c06","01000000f9683f576abbe3fff526852b507d612b444f76e7871ee143cef3911e00000000da5143ff5a7ebbe2217edd0a16699b85568d1a2bbb1607f2035c63c6e4c56846c4dfc149ffff001d3352c372","0100000040326d009801b18afed5747170a0863b7f59a72058cd002e4532e53b000000003bc786add5df2c3be2e0d47d73b7801ddfbcf0d93a606817627ddde940234a1683e2c149ffff001d3a1041cc","01000000a68f12705ca40b57509ac8a0a1a32480a31b3cdb9e4dd19bfff998c000000000c52feff876f0633e7980f171b887aed28b45b0f30e89da35df4bdee742117ea997e5c149ffff001d209e0cb6","010000008dc5ed0a324aa36349b33935ba1160e27c776d0ed6763f66239c7c6900000000c924996955e4f763e6088fae50246e4427e658cce6242bad417e8e13bf2fcc1c80e9c149ffff001d350710b5","01000000716af74719e786854b889c39c0ebb58f7aa81c7aac7b5c97c9de24cf00000000e6ae6d4915b848881e31bd02e34f9f444d53cbb4cda80aac72348b3f4225b466b5ebc149ffff001d2e8969a1","01000000c3f0ce87467394d2a9f67387c3a56fd23de7296ecbbdd89e26e9c0d9000000002d923801fdf17610d63f24b2f3ef3a736b94735449fe4267f50640aaa28ed8ae11ecc149ffff001d217b7201","010000002bdc066c65ae81878fa78f5096567b772a7b437fe4d94316a3b68e7d000000001fe1386ebfee0149e0b52738436389e5e28dd365217448ede2c63dc8279b0d1235edc149ffff001dcf553e07","010000002378216209b130d6365f6d0781faccf432cd09cb9891b6f773239d22000000006f9e7c25b2b7a0470dec1b2415dae30148f92a3635d52dd49f958bbfc1259dce27efc149ffff001dbb6adf03","01000000429c78cfef42a1bdf1cb305a7f99f598524a08cde2f5ce471764d9a700000000a6117e02d7e94ca346f049a471ec2fa60227eff7a3f31d953457b0fbe3c1daa573f1c149ffff001d212ec033","010000006faeb002f8753da327df16f00f5872255ca33229a4e1bee5785187d100000000e58c1ac92949bc822ff5323b2152de67d62d9ec6dd3ea1d4c0e15ce10cf42414b5f3c149ffff001d1428ec50","010000002970a3188bbc4c7ed4dda828fcec413368ef614f9351216bd6f0a0bf0000000056b2240a0d244b6480221f7472d8415e2d48d870bb482a41597241c59bf1f2c813f6c149ffff001d04f9b475","01000000fb1e882068bfa50cd949045ad96a1ff85dc68aef715b8dcdc01e711500000000f722d12204de4931ddbebe1185bd3d3eb694a33f899437519cf8c444815df406b6f9c149ffff001d1d598ea8","0100000073b0145377c792ff200f86b42a861c0cd78cf159ccd39f09e36a931c0000000064eb02fb6b585a903c7456dd2076e6106ce6ab4c7fd5025a0d607a48f4cc571da1fdc149ffff001d1c39c7ea","010000006ca60681ee5c10e6b62be1e8d4118d6664d86ac341cb4e3a19087caa00000000275f31f2c2ea37878e9478913960187612efe412af2f2cd212a04f6e5aa2079172ffc149ffff001d263aa45a","01000000c519686da84d5e24ea3db0e72a49f277a2dbce3155e58e618855a2290000000013af09c3c1a719311724783634be30d3e8c8774d0473dc5c25299c92b7228b3bbe02c249ffff001d286edead","01000000f4ddec64293cfe9a069db477bf1395d547466c1201b28e196f15206700000000ccc638b40ce63d831454e113d7644644094b557757abd70894ef35b70a36022aef06c249ffff001d251d5300","01000000d6372a730b9d0f953502148e1922d658b1e0994a07a4322091bb434b00000000bb501c219ab72f571c262a4a3b1422cce07964b0b54f94813a57674266c29d00ba0bc249ffff001d0870d469","01000000cb3b5d2d3bd73c8b77053fbc7174ef94e853257bd2a93fa642c8c7c6000000006eeac777400342be78f28050bab451c4dd5381170dce3a2eaf2627e0ae7146d4e50dc249ffff001d190415b5","0100000083914f2e1d39c837a97f7f13eea40269a876fad2a4c9cdd0b7e91c62000000003a029145b12ac2e152638468470b61c2b572d6c8aa5ace9022d34054eea9323b530ec249ffff001d558e7002","0100000084c4862ab52f3ca0380a8e052f0aa564306b6e01371bc539d9b900ba000000002d15a954afa9e192e0b7373eefe89ece1fc7926c0e8ffb8c4a41accf31a5876e4313c249ffff001d3a91268b","010000005527e784325787da3657ad3ac7ac672dfd91e94fb2f5e2c387094fe30000000080a8909f64ded9861d16b0b9ba0f802ab090001a9fe7a5406935cc30124ca2a42119c249ffff001d01013a8c","01000000af59d09c6ac2702e77de1e630d62b89fb7e20764bea1eb9cb19d69d80000000086e429921e1ab85299ffd7f8c19c3807a6cd2e2b332c7831517e65da09cc47544d1cc249ffff001d35fd5af3","0100000076cd053c6deecce931d3645a8616fe95d179ed77bbdac1b7f63ebef9000000005a9905ac0bb2e3f78b0caca8b31d3eb4a5a2adb803de50f2a7036e3531ac09089e1ec249ffff001d35d5bd08","010000001648d0dd58033c3dd4166dcd9bf9957ed16f9f7574437c0d0a3d4e5a00000000ea214f75f7971f6dc3f23aec246cfd79f94543f2317451511f559e7fe3fb8e379f23c249ffff001d0235f9bf","0100000044f91d261696e007967f37acb6caf38c004dd0ba8173e0357224bbeb00000000e3861af34f9eeb661a1863205a82be8385af903ead539d83a5a5093740dd55910a24c249ffff001d1e728703","01000000e5cb21a15eba6441d54aaecb32e6124b5ac209ff8885436f34b98a2a00000000a861f93081e3676f9e32f56901e6b90d07d5755a4ae0779376b90029bbf457733027c249ffff001db5c26b0e","01000000c253944efbb1646362ab8f3e7b12f2957a852e189740b42609e283b5000000002e411bffc6b0fa09a8ea7171d6b993141bd340f7c023e3210eea590e387bb63f8427c249ffff001d077d9a01","01000000920af6f3877079f5c74de1a68ed9186518fb44eba8a7693f559e17e50000000084d0b359ecd0456ee7006a30f35f9110c7d89eeb53b76397451584446b0089147728c249ffff001d09bac245","01000000990a72f77fe74c92091f0f8996c2c1f65b6ccf7c246f443bd538bb5900000000d319e92d995c299107296dda4db48733e917faa7e36cad85030be022a9d013757628c249ffff001d2bb43700","010000003179b356ba8a935fc851a5ac96b118fbbd505c88bd7ec519533a053b000000005ed80910e01ba55a462a552937b24f7f975739c6f7021a22dd6b4eae5892a5460a29c249ffff001d18010904","01000000d927fc96fb8a814aa737ae69c258a22205004798ea5ac0fedfacfb9400000000b7ff97648b5473d153f78da8c3452de86c46a9efa809e8e02c953e8d9a498c1b7e2ac249ffff001d026ec079","010000002c248d014a80621f4e534d02154e0daa74a25931b1431673d111e072000000002d3de88ad6189a94438db947fbf8090b220d02e11d997c4e070649d6b434573cf22ec249ffff001dcc36fe02","010000005aecbb0663ba02f75af75dededf312728cf62e4f5e98790151e77ee4000000007dc0f7246750844fea758f074d9dc5b5edf8f8632d34a3501c51893d83e6d7607230c249ffff001d0631fc07","01000000869644d0ff4beb18c096f036ef1f34700883919f4d477e2b0f4d5ef70000000028264d8170f06562589a7b0642a3e436af7156b0683eb3892eb06afde3aca743c830c249ffff001d1fb3014e","01000000e9431c861e1c28777d1c2dadb26c78dfffc81475f161688b77580e6700000000739d2f0a79ee2da7460759884a7fb4eb5c4413a613cd47b0174696cbf5ce7db1d735c249ffff001d2676b560","0100000064eca656d1c16b9098c47f18e7bbde1c50e10889bc77e0e989afeea2000000005df1ac979564d81a439c711a884d9829ad3f5da9de472a9b998d35566307cf05ce36c249ffff001d9e854006","010000008c7dfd747c4d8c6a1df73111abb4fd175dcc44227905c4700826a438000000004b260d12494f57106dabee351bd3fce90003bae0f938f75fe9d1b05fb61f9d539039c249ffff001d30d4b473","01000000e74a35562118e85c6a262e5f792440df9a16bf15649b73e4c3201ab5000000003f8015d777b5e45ac9ff4afa46f14dbdd04d6f8bb885d407a03b0907433e8319ee3cc249ffff001d08a621e1","010000002f5399ce72e078b029feb78b154b12ba0422612252c16e446c1e9ec20000000019e59194d1aac700c9c067d827b7929fdf27a5a654511877f3acfd5b9a1bc34ae43dc249ffff001d43c94306","010000007d6e6d4223e51de6bc09053e281ca4311c963eaaf702991e44b948df000000006acc3597b3097bb7fb0c6341575092c9c0b84ca510c0dee47cbc74b9d5bcf9b5fd42c249ffff001d2db05923","010000003ad46a3455777b3793f56c249f34b20cba76cb2e4f9ea17e64d3889c0000000020d61e77ad37637bdd75f892f12c116a477dfc7ad0dd3496266fff2e7842cf815247c249ffff001d2949764e","010000008ef415658df8a3cb566bd1786e4192eb2d799ab800d4ecdbb118116f000000008f7561bc99ecc6b8e76712238bb4cd6cd8d797593a331a3faa034c6480a041afec4dc249ffff001d3474e207","0100000079d768b4ff71facb95cb5aa48e7c67452de27044294bd0f3a492993800000000ef0482ee2f5b2420bb530472c9b5249101a98ca53501366d6d9c60545e884521f152c249ffff001d1ed4de79","01000000aee20840235265f0bf8975c0299c00092fda7dcb387e092f7bdc2f1300000000b036722d39cc415f34d8d9dac0422a61e0d4d337f878487832aeee4a3b07c7b53f54c249ffff001d21f9dad1","01000000b336600808fbac2d130f44a6c987df891658164e309ee8b737ca8c8c000000009677be4145dd5df62aa3ffd53693b157ff38cb4672d67c5f0b0673342e8cdd986a59c249ffff001d3891a175","01000000d5ba06678379d71435d0f7c01a2f4bbcaba4b280c94ca0f1b7384c8c00000000a734b0c844ce1e040570937816d7c8edf32650d1f3800197f0ff083ef1450127a35ec249ffff001d27e1651a","01000000269d56b5e322d073adb3639559f1c82b96ae59bea93f6f417b070e0700000000c55d2b21006d0e71358e91db16bf4d6eb6e2e30c7ee68316edb698b474263be6ba5ec249ffff001d856e9d00","01000000b2d1947d811233c103992271032c801f0e3e7244735443205a41db7a000000006c34ee51dec99e227cf0dc870112bbc7d3f7b672bfbb15e84b5bf711bceb08d43161c249ffff001d170aeec2","010000005c6a97dce35a0e75c17a12be49bee7267c13d1ef3421a022fd9e3f82000000008704e01f5eb8669870a619e4198782ee6f4cca77d08fd2c3c7e066701cfa471a4d62c249ffff001dcb853b04","0100000011741b0c913ef03dab2d0035c9e8fb32f133c41dd7badbf607a15c4d00000000cdb859067dc8985437a6555e7e3aa04d8d500f0bc81ca1a09862f4c3629ad2f9c865c249ffff001d397b212f","010000002405db98ec1a8bf251998b978a0c95270c731acbb26c35a284cbac40000000008e8fbd04e5c505305589625e467a4294df12fe2d14d534b35d80cb2d92aca6138668c249ffff001d00703d32","01000000df639cada4aa5955b0258a9453ebd30e96f8f3df1fa83f71982756040000000033b7f0a304ed8abc40f725fd8b294fec6cd7886be47f5fd38dc443d335487e01af6dc249ffff001d1c11b637","01000000c417b12fbd9c1145e5618fa2570f2716b2c4ce5fbcb9bb770fd200cd00000000f2d7773183298b140f523ce41a184ab8822862ccf1c4407b01ca5244b133de0dc06fc249ffff001d1ec8835f","0100000085708bd769b500981761e086c20c7bf48bd7e083600d334ac63f03520000000034af1dafaeaf8139d36ec25a4684945b940e36d4c15e2c74577c381872391ae06274c249ffff001d17408786","0100000013f5d4414b72a86c549dd41c98453b3c5e789f8ad304f231c2d54d460000000097d4ce476ce3ad2510d60f74b77c3fc5ecfaab2c20a067122bd067ce958c31e03175c249ffff001d280e3803","01000000128b4dd9948762b850ce81bd8cbd8b682d7ef658e410581a3d6949c300000000e3d070ad6e7bc67d4eec65478350412f85b3f6232dfb19f7730fa41ee3a87334fa79c249ffff001d3530de64","010000001c4355ae9cef1f317938ab974a565ffeaba9d55274f4b876afc1d31800000000fc54e42fded1ee3d56328ca51664608586b69101248c8556f49fab1def2d6b22627fc249ffff001d39dd567d","01000000cc5a508df2f7c5e3f82bcad2354d0901ec35e6e08fdc8cb2421703b40000000054308dbd96126f4a4d83da5b77fba7ec8a63b3dfee93aeb744b759eb3cfadd358181c249ffff001dff266909","010000000d18d6f2acac9f77d6a87344e7b5fd17997f3021e43d89265f92539900000000f9dc47bf61529f792c32c07a66ff29ae42cf7dc4e2ee039ccf24481aac5f8e973a83c249ffff001d1a1d5006","01000000d73748c32e9a3b4e34456dcc96cd53403aec48ddd3706835876868b600000000e02c541f24e530761ab9f90f0cc11f8f254831e37ea247e668fea6da147229965a85c249ffff001d218238b5","0100000072606100020f1734bab7067c0901e997d4df6197fb60b4e520b872600000000054304d748d0e57851bf386e3a8e4e31a6085afce5430c64292715a1ba02aefc1a48ac249ffff001d2bd71ca9","010000009b1a3bbc0a34f6a037978e21a7533448c6b0ca794151f7536f8e68c9000000006d43ca4c78988c407824c0026196c81a2e9cfeaa830aa7605f06094927ddec253a8cc249ffff001d2697ca31","0100000074cd0a839213d04a70a5e360bb0bc6b6fb3d7bb4b6a2414e3840fb94000000004c0c0d87c041aa219c341d68e81aa3eb29065b4391f43215e5d01b3774f63ef7668fc249ffff001d171a2740","01000000af084d8f4614f557f24eba9acad4e1370ef3980b702a24eee08edd4c00000000dd7e661672b457b6133b46ee035e776510475fac229b617cf277bf2c00d10290db90c249ffff001dd996be08","010000008dd34d7c92407cb85e61fadc50325da18c6db39e7940381479f1cafe000000002df91c9ac634a0a8fc558200fec0e9933fb92338419df6edaf9b340b3cb289fd8f93c249ffff001d19bf10c9","01000000adac4c99a542b0f9ee0c23b92327472966b18674b6e6021e6409b35c0000000049061f8b166cf2bedf0bc644aafc9553e1679459f5361a698ae5308c83d1f85a1996c249ffff001d1baac153","010000003033faee59d73effe2250928a1c0ea5fedc94cc0c22396339a7973b6000000001e4b715fe8da5ce17fdc3991ca09420e88c0663ef3cb806e071426cb3549e1ca2397c249ffff001d95e0b306","01000000aa7d8d6f045a5d3ac1b5c75a4a7b3fdf7ad3e47b2e89060261ad78cc000000004f5de037b3c8c996effb39c882340c28bbade55c472d1b10f0acd9f1ac32a16bd697c249ffff001d22021351","01000000e08a1d5fec946359148c886d62b978011ce6ad8135cedfbc4cdbba8400000000461cc12b401eacd377b91a09f5080d305590382158580dcccb94ec83db364ee1a899c249ffff001d14777030","01000000d44e7ee6798334783c233567c78bf38c0067c43b0d73b7fd9927a23200000000fdf9a86534e023093b2d0dd7b114d1546823e8e7285199de794e501fae3069aa8899c249ffff001d91150600","01000000086534b36039d88a8c855b7faf87d0dfcefd05efdb742876dff4101b0000000017b1ec9ea69beeb235f5c376c66cb36eed00cc6be32ffcc35e531e7ce954b3401e9ac249ffff001deaebfd01","010000005063526d35a371e8b23bb4296563a1c03a20dbf645e46ce61f34111600000000d9fbab6b64620a1da995b83abcf93e17f1d7585fb0af30983cdb5300da578a521e9cc249ffff001d39e9853c","010000000610ac6df99c1132093f1df55941bd96c12f2f0a144d144dc8e12a310000000094e4fa6a1ca389f5b45aac7cbf7da39502f55e7074f64c93d497f5fe17fcb833879ec249ffff001d359bc464","01000000e6fc4d554d5ca44d8ef227161a08068ae4506e88fc1812a42a8834dd0000000093fbb3314ac1f08728e834c3bb914d517f15f9fecac437472a76bbc989b5ff0028a1c249ffff001d3595782c","01000000facac7323664938783ceb0ebfb969a016ff28b95ccbad19d8335ed88000000000560d7435ff5f53ba5497aa111e2450f8c987dc8612c94555adf5acad92dad5db6a2c249ffff001dfa443806","010000006275b8bab37df776c53e95dbb74cef8a8d3081b8cbc21386d91c312300000000e42d4039701556a086b6c84de716aca0ca8d373c906743e33033960159592cc16fa5c249ffff001df3ff9a0e","01000000bd985476509d28a33a2abc5cfa5471bed0d8d169957c296b2d0a9cca00000000afc62f690352b17cfc7825ccb0e9ec6d5a400af3146416bdbb6d1796800dd93b90aec249ffff001d1fb28e2e","01000000b046bb88de1e2b4e66bcb98985f582f926740db87672b5e014f1b36f00000000d33b163ec7bc1ce3a190661f787279ea070e46776b053aec60fdd9d32127ccfb8bb3c249ffff001d256b0450","01000000def25785a3da4af3858b5d59130552107fb9cdb98d6df296b7cd69bc000000002d93003d77a653ea629e54eacb8ce87b91e49a03a4a2ca9330ea2e4d2cea8d96fab5c249ffff001d072edf5c","01000000e69a5044108743fce355ed7428891400802f15a14ecbbacc411c70ef0000000081a21fc8958b2db121709bd064dbd2117321a60e09d46638dac65c4bae3f7af1aab8c249ffff001d2e1298c7","010000004adc35476297c0c8e7e0076230ce48fd5c7ef21fbeaaa154625111320000000004db691482f0a66ddb1331c9b1fb38d22b8d5824f452652351aedc285fec19b9a3bbc249ffff001da2939a0b","01000000094b4699bfc216c8061818766f3ceea4ba2be4f486e429c6d9065ab900000000347c957a0c0439e82d84125d6c25a208d289528cb0b32c89aaf9fab10187066cd4bbc249ffff001d31e59aeb","0100000001ea65c4969aa37a58105d64e5c40d6452693e7d658801836efe270a0000000024cc784c0f89a45dffc44ac59b3ccf4cb342c9f5f339b2228f1fa024d3575beb6cc2c249ffff001d34e40190","01000000787e46d05476a24bb7eba52c9654f24d5462decc6da19ad3fa56766700000000b1185968dde0b3cc84e476339837c03ffe60aab0e62bc60fcf1a86b49aba11a436c5c249ffff001d20a834b5","010000002114cc06b84aa44d2b1539ce5222860824b9851ccf651bda9a6327f8000000000f51d4465b88cd0ac664289e679dbacbf5201b1cf0e014f73206b3067bd1630625c8c249ffff001d23680cac","010000007673ad83b49b1fe533727cd73653da2557e7688e5de487dbbdfdffad0000000039e38dfcdd2a277a14cd35251de735b80ab3163b1b9719af06f52156365c382367ccc249ffff001d37f85382","01000000613a36c819338fb2437f2f7c3f843f89bd0fa6717be12bb537b0f8b6000000001db01c7b3700284611e668861ba2f2ec7835edaf320371d82dffb35ed528f0142dcfc249ffff001d2d0eb15b","0100000062d4479852c6a84d09a7297d282fee55eac6f3b3f392aebae92793a30000000041d1afb407e27069ad6ded2c9e7d71145ea22897e09d6657370e35f2be43c4da73d4c249ffff001d26badacf","01000000759223dc09e90f469ee1c5158f90c6e042f7b5f4f3581b4aef0c1e2b00000000ac33da04a2f0bde7898f93d8a4d617f8b3e2f23ca69fe2a1be51183e777ff4c0fdd5c249ffff001d248e812f","01000000a3a8d268d35319c041494bfcc63b4f25257d733c4bfede96007fc57300000000276b6570796fb739ae11b78385b069968046b6d84b541514c2ec3b5b740844e1c0d7c249ffff001d34d97e8f","01000000f6ef68f711a40a2c9acc8670c1844649ae5d9be64554a2b350e496bc00000000a39ea5e9a96584a4fdafedf3d12d3741efbdb1b37176d8cca67d727d493c0c8f4dd8c249ffff001d23ce2904","010000009922814835057a03d5e0c6132a4eaa1d1eb921c73a11a844e6c2f10f00000000ae15e858f281b328e49f023784aa26941650b175e90f6b4e7959df4db85f1d0b88dac249ffff001d2c1e9249","01000000b378cd451389d0189874a6e7eaa11205277c18be477f10aeeb9ae58900000000e95ec6b1f1ae2302d17b8a451c7ceb6f4d64c12d243a80b65ed6bff2196b5cb448ddc249ffff001d04a32d53","010000001c60bd4d22d965beb5fcd7e2ee02aeaa21da17aeb5220512de98325600000000abade1586ef6fef59b2b9e940e19a8ede43f8793baa6feb8b404f3e0b18df921b2e2c249ffff001d29160ee3","010000002cb946b66a9f0d90989f2569b0980650774dad5b778584032fae1e1c0000000034887cf07b930f9c345054ff4d68e77074ae1df6ccdaefc0bf2031c85be081214ee4c249ffff001d2065988b","01000000e07bf28758e86a4cf99920e87fb28107a6ee1cf5a0d428e875090c9b00000000d5df254d0f464de6699294c8deed154a2fe79445ef47a0e3ea76501b4bcc86bacfe7c249ffff001da878d912","01000000f2a3736928482620077ef2e4e5334b837bcca5610f9e020ef893cfb500000000b003d77a5c65df3c46fbb2f174167d168fad83cb096ecab95f1c3fe2fe69da5985e8c249ffff001d13c8ddc6","010000007f4b72054e984c153feea4994ce1e71294c290544b27af16bc92121d00000000d04e51ceb8c7602169003eba58acb21c5dd8103171a88f82da3b1f895e86511356eec249ffff001d2f2cf1f1","010000006c01a43365a24bec96411464b4ce5419b01a89df26e23f922aa2375200000000667d106f5de396439500568cb801c050c6bc65a643d03c05f70ac230851565e858f0c249ffff001d32b0d272","010000006eeb196cf6877e99ef72193d31a1e3a8e29f71a0822fe14573311ca3000000000360d473cbdb73c1312cdec55f9fb6c6e1274294d8a334d479fe4968231a1fd385f2c249ffff001d340ebca6","01000000b76df6e05c3b68930ce8c9002fb44f1742cc287b25abd8b8f8d5b9a40000000093dc0218fc369d97abaa7565ac6370f2695020937f708bfa75cf4dcf50ba8307bdf4c249ffff001d07d12a3f","010000002c859294576e95d523edbdeb57ebe84ad89ec7ba54aa956b5ac19c4c0000000084e22cb957ee74b08e3e7aeab3c264cf346ad8e58e4ac97e53b072e53cd53607cbf5c249ffff001da5dfb106","01000000ca4c7f5f31f4eb026aa48b3eace01e5e439cc314ac9e0f3492cd9c5400000000b95f35fc5a9f06d65ccbd54063b71ebe8541ebe52411820b32c81c504dd8420866f7c249ffff001d24f34ef5","01000000a1654306e1fd7138b8d6cb3869f0e8b37a3292a2ea58c26cf802efd000000000d7ac2fb4d175d44b519fe0f9122ba7e99b5947a735ed2a0975bca03208a86367b5f7c249ffff001d5ca7f400","010000003c11ea48656ddd1ed2058532446510f5d97a654f32fcd5f362657a6b000000002ec388f7407a3fc50661bbe9d5d306c2e1660617bbccfca8114f903c9658b5b43cf8c249ffff001ddab99701","0100000099debd4e2ab5f9f180f2c4561d2e9d0981c540b1e1927a8ec8ba42c70000000025ded7b0323d2a43dc5629668e2f88ed11f9147e2d235d1e60616d43b9823a140ef9c249ffff001d04082bd7","01000000f575e6c9cfae409dc6548d1c39e77c7266b31e71a75431e03b799d8900000000f52b8125e208108df4e217af9c75ea2705d3b0a66097c4cbb0684dbd5872a655abfbc249ffff001d11e9420b","01000000c4c0c78c9b21c83697c2046d912022ebfca5be2bb6764142af51b1c40000000006bbdcf475eda2cff58480ca66b2cce2b76a8c06aa89a97ebbaf85d8ac5e8d3434fec249ffff001d39d6a1f4","01000000af6da8f28dd6bca3fa0b87ab0417ce1ce066a9d2ba2280b3ca682a8100000000367f6c63100c9802780c98ab370002720f0100f857976be1afd805446d0090cf9a00c349ffff001d25623739","0100000005513250521cec3d0925c297c1dce9de7fa1038e9e52d797ab38d84c0000000069121e75f0bbeedf57d8eca4dada6cc5ecfe845ea5f1c192d7c5b9f8bf753638f802c349ffff001d159200ce","01000000b999608a252ba156718a827757ab6b043d82724bf10c6d7c0a38a1f800000000d394b41f316071b3c304ecfd3d7033fe2cb7d49ebfd064c2ffd1870702adef46cb05c349ffff001d76577a0f","01000000174b62d65faf1315b137c15ef753c31af677693ee921e9e63d6ad2ac0000000059993ec26d51e169bca01a61f79e6eae9153c6bde49f994a30d585fdb712eb07f907c349ffff001d27c03f22","01000000bd4def5eca3349d1437b37c374331c2f911c99bf1e4be976e7f3c18000000000f14997e1f0f2fa3347254cb0cb26caf5bfe7ddceac5ee402a5e660919b4df901ad0dc349ffff001d31170508","010000007908b39561c3e2369e017088d7393d5f38d0148b0d7a4c08de2fca8100000000fe0db4bdd907451e9c300be4d69d004dad25bed484b843dfa670fe2a88ed0117260fc349ffff001d05bd1cbe","010000003dbcfb2b7155878c9d32871f62b70b6409d38a12de319e01e906bdf9000000001317fb382f521bb49bf0cdf121081a2d75b9ef2c975f26ece7177589b64e29f3a410c349ffff001d1fc3adb8","0100000053ade07c5f28bc03db46580709e73a942eec606ab249f8bb324e9d2b0000000074253ad9f76ac06523a5ada0c415be28eb3bf178425e7130eea3e33275500dec2511c349ffff001d6288be01","010000002a2293aad90454d8d421b97dc831c0ec6f47b9583d14c7adc496c06a000000006fe5b6ba874eb812a93184755493b3d25dfa1c5a8de223622096a193652fde14cf14c349ffff001d33cf3d0d","01000000d716832a29ba5273c874bf976ba804fdaf374a4fce0c4b1cf651832700000000aaf04bf8033939344664458aea95d5095da8eb3c76515579a90618439bcae63a9917c349ffff001dcce0aa04","010000000dcc065949bc1e60ed389970e586fc78a27e8b9e1e9b27a4ff9d801d000000001b894f6420a0dcbeec0f44aee4c44d662c78f76f5bb4ace439fde6df2fb918dbef19c349ffff001df9d66e05","010000007f0bccd7e5db3f84977f36303b7f56fc1e371ac32c977d03f298e4380000000094e2291580055dadb4bccb6167a861748d7facec9f9dfe5f40d579b106d45ee0071ac349ffff001d06587158","01000000e1f7ed0e2dffe79121044ad9bc0a9a08e24943d77f55024b96fde6160000000004a5600f64f8534493aa707946023d3afbafa07f8274023a29ddbcbb74013219ca1fc349ffff001d36784116","01000000bed7cef8c22c9ebc259ea2287ed2448f1dd008b5d80e6be94953506200000000dd842f398337dd5e5009856f5e22995a570b2bd7ce4cc48f3afff68e500de8d30e25c349ffff001d05a0e09a","010000002c6d2d14ed47da6135edb06d1d6c5b1f3f49650d93372f4a0fbd968400000000ae35dd4b7ea28f430d86c90abcdc01679263a425bad9aef63f59b0dcc00a168bf928c349ffff001d2b408aa3","01000000d09e4a9d7b2a63ad857091dd1a09e598a42c506efef38ed134a879e900000000407e8b76c96b44c5ade6d1552e05eef5408ea24009516a80248d7e71bf626bf6e42bc349ffff001d220c56c6","01000000b1d9185d2583107a23483f4b09760eedce10eec90b2f68e66dc7f1d300000000c88535a256affd4bd7ad29853f47e7ac2c2acd936d639717357ed25efdfbfa54442fc349ffff001dea7c0a04","01000000422999bbebe586e2e9c787999444ab672ad4a7d8ae6bcb2b1f2198a80000000087bcfd0fee02150ff1d923acbd7f7be361575acb98e2499d433e3232e3bb04ffd82fc349ffff001d0582611d","01000000a67b45e13b46bf6360b346a85805761a52c2f733f3bf49bec4059e18000000003b00fb96307e620c49c719e6b3409f2e34596d6853dacd166734f42e58a888a71c32c349ffff001d1d1ad1ab","010000000f3848680d17c504da0462ecb0749269d66caed8abd286c84b04cf6c000000002c7f3923d2934a33549f0b3deabb07219385ded539623fa72b39d6f235a8fa94d733c349ffff001de7a7120a","010000001ff2d59cfc7c7769e21c32c33c1acdc94cd2118a90048c2915d9520e000000000eb43fccfeb48ace8bdae08a18736f34523fac27d257f3c1e68578697c3370e93937c349ffff001d23f17d86","01000000b0dbdcbfd92792cbf7a7f03c70622dcd015e3d6c160caba21a8e50170000000092f197478cb741cb894523bb471c03434ff0fb3b16cf5d8ee4fcb1d7c7a53a77c13cc349ffff001d0503d846","01000000820082cc77909cc0fcb6b85dbe93483cdb03c90b244cdebe78ca79190000000021f48241303170781bf9367fdf2bf86564576f3bc8151190d16705615f8596f0fb40c349ffff001d22f98e50","010000007b51a0962604a510d30430c167e7b3714a5e3aa1f2cd3942845fdcb800000000cbdf8e7317126a552512e97f0be9f44eb6e718fa33747e56758aa5967d556ec25a44c349ffff001d086d3912","0100000059ac58c2b6b9e3248ce421422272b31ae1d6f956d6f6ad1949e3d56800000000a33514231fcd1fc73828cdd626946f4e306bd67ee8c5ed99a5c16e453c76df6ff944c349ffff001d2e0a7d00","01000000fed588691337a2b865372987fd192971f95a53ed9a21415dbaa48df00000000014a2de914e47975c97c45cbbee3d5100f1673a72de3319488afcaeb826cfeee58249c349ffff001d18f1e00e","0100000042d38daf4c67850f63d20390645721b70d080c40dc4b00322944f19c000000005b38475fcfafed266f4c269a64180dfe735ca805f647502be7f44f1e3aa9d238ff4bc349ffff001d1a230c7c","010000005db0349b6bce8b0fb4c9b9939010530023f58b2f74cfc326383a7e11000000005dfc280317b9dea5e792bef43a3b6d6157866901b95883c35d96e1844ec09a4e5e4dc349ffff001d24624ca2","01000000dcdbff39275b28a4e03ba74b8ad71ce9be7d5432ca7e122eb7f79412000000003e3aa2cb052795dd0e6fd82116c1444cda4aba44579e3d2b052835f0a3e2bf084052c349ffff001d2ee57f16","01000000c5f96bcb237bd1e7d47db7fe79a4442ffce2bc9921793afd711ca58f0000000070fb8e1cef515d413ec1d52ba6e546b6ac702a04b79ca78ec27937c9b808f9794d52c349ffff001da8059001","01000000598dbca2ccd711450c282b24d50dc070d9e3e4b555e30f2288ee67ca0000000068475b2be30433dd30494712a10fddd6d0ffd9921bf91e1da760d05bd429769b1355c349ffff001d1d826f83","0100000072bc1d87bb4c4a26aa0ae7cefd05407c5c1debe61e558794a513db320000000000b98a72984ac25baefaf8d88903e70026fcbe5850e95ac4388901f16fc591f00959c349ffff001d2735dc2f","010000005b97af9222b25cbec0d9b844b0e3956a44b960614f8fe021551c09ce00000000694d79af2653c789b047fbdcf8e7cdf1acf29f2919f58f05ee3596518b5b7cba875ac349ffff001d3468dcd4","01000000ee8bec44088a701bdd732877fb7981b09ab3e096fbbb9552f8f63d910000000029050b9fc20677112b6a2e8412f15a383d85702c35ffb50a6b4fa91e95f0751d125cc349ffff001d20adb7cf","010000007b381da097543ed1fbe025d33da8ed451a3258140a1fa99d0143dcce00000000f00bdb8c12c8344ee52042eb6582c036fc3fd2bca4a52f105cde1ba2f78115b9b35ec349ffff001d8287650a","01000000966368d0a38377a6ea13b7cf219c62da6d38dff1a1aef2760ea4c7670000000044cabd0419f5e60513ffc09d9aea785e0f28a23daae2b8a132f7e71728a655b4d160c349ffff001d331d0210","010000003176de8265eb0252cd4aa18359100241dca6af233bdcf9c0b344ccb500000000c2c9ab14b1e1b50a2afbf35ee8c038a50cf83938ec8c30632ecdc5689f1b86877361c349ffff001d2b749104","010000008eb573f846c2bd1859fe689bc3e4dcc26e09b260486127493b1906d9000000005f0b83169ed33d8c446c1fe4e3913b8629fe742772eb1eab4a51510a0dcef2858964c349ffff001d23cb2d80","010000007c030e785aea40aec032177705407c7eb785e809a1f15e1caa75a7dc000000003369739ea8857b7ba1d8f0e6d19cc36d5c0542b8727f29a456fd0c7c4713a730166ac349ffff001d353ced45","0100000080209b72b5e74e9bde918abe07078dac4c40ee58b15f2a436805199e000000002ba8b3e4b20d2cf08a864bcff9eb303f95d853e2cfcda81bff4833d3a9debf74a46fc349ffff001d034d97ba","010000003f851e5f5ae5a53ba7a77b1c16075eb98b21558cd04e96fefa2a22da00000000d5113ec88da45d344538da4cf1824c9180c7cb83cbfa7aab4f3fba2f0629fbf9d275c349ffff001d39934ffc","010000006201458bef08fb02c324234c01a7c35fc273d18a05d49b34c4985417000000002dde9d39be45e8e3ba733d8aaab2f3aff2b803043270fd084cb3cb47501d3943d079c349ffff001d1c2a44df","0100000078d4b400c9acb71cd04a129b975d2c7cdb40109a171f4f12cf43b016000000008b26b3372715362022973fbcfcb2baf1d4bd12f763ee8b143f57c313b2016993187bc349ffff001d60683003","010000008d86997caeffb33aad6525568ac4cea5e9d6e2f6c0cad39464b1f19000000000740fdee86c5cb3d61a49511b05c15b6352a2117e85fdccc130f2c80c2cff53994a7fc349ffff001d1b64b34b","010000003812d45df0ee0d25445eb0ccb33607c6ea71f4c948e79e9ced8e66fa00000000627a93fdebbd619104f3d71aafdc16c04db11112c17424f8679763e9a99dd0edf881c349ffff001d2738e153","0100000055b1a0856a9c768ff2c359afc02528367359f29d9cfacd337f9b731000000000d9523b118f13cd5d25c7cca7bc28ff682b3a0d6e9ba258b8dbf16ccd66d77edd6084c349ffff001d2d666a37","010000009a23c4c8645e19779797cadda69b6907d3190a6c477bc24256d80bd60000000049caf0c269cfe57bc80350117b45a04d85986ddbe0f6fc85255ec034131ded34668ac349ffff001d1a78cfc2","010000004d625aa086b08faaa29db970ac5e4fc2557d315b7b1bfe26ae7d895300000000c61f4f182ac470d83e6c8e41542a61e71ecc161a273a3db0e8cd932187a891aadc8cc349ffff001d232d59cb","010000000c272cdc08fec32a055de0d3ab9cce6557b8eb6179a74b78cbcc9dea000000002de7c2eb82df69c59618857c0ca2e8884e0c4a20ec9dfcda2410116b0eb5605c6691c349ffff001d024e017e","01000000302fa136029c5057dd4d133c7d093210350cb4e26f01281a65190375000000001f6c58df42ef62cf51a5b86bb681016235a28a45e1e3aa82f2a207445920faf5f091c349ffff001d1ee9ff00","01000000c0830f2844530ad9febda72342cc1b567839eacde8a1fbf4885159de00000000445f6bd28b82603360ccfa3fea008cda52d202942bf66a8ac0d044cd2d1cfbc48294c349ffff001d894c9208","0100000047e5c4782e61cc40dd97aaaa2ecdf400e7d263448a7773d606d554f500000000a54a3ad4e608b0f98ffba9833c41ea84619ef272e90d25e2fadd7b3291a1b7e84c97c349ffff001d003588da","010000002683f060659d90b34f63a313556b55c7f8aa650da2dcb030bcdff68e00000000c2c728bb257b4080f1f47cd6eb5884bc9730f6df8b057eaf067864a368128c2c8299c349ffff001d14baa721","010000006947caca05912ace5d4a272a50bd0b1f6d373c76ecfb5bd92b0c8ea5000000009a65f09fa9221b6cf60fd7f63f8c69e1368b7957a1b19a12263fcfb9d32b63d8319cc349ffff001d3062255f","0100000059f8c31c92f62a1e037e9d002b4d30988644312c4c9c00dafc8742cd00000000636df4911dda1b66ac2a3ac545422d5f3732fecd99eab552f8f704e33dc4c98064a0c349ffff001d1769aa1c","0100000028f971e1e12b977cf8f83cca258d7b49084b60580ee45f23301aefe90000000023b3cf0492b9b0808e6bcd15e99ca9550a16fa59ce92242eb1b70f94335251fca1a4c349ffff001d1824090c","01000000aba228ba6a6583353f7ab022e72c3b3d00ece2d7b03a06b03c16b45e0000000090b0f5a590bf12a31ccf542cb4207fe2a10dd768439a63fda6497b888271b194d3a8c349ffff001d232c3eba","01000000e7bda2271d93b0fed8bf57c92477e445b0d90a0f42a299ce14335dce00000000dd3efabf94515c4ee4a6a91e18a39c307b191c05c6311b9b0898d5033d0e462dd8adc349ffff001d0618c86b","01000000cc3fdd1b847d5007b7e2b506fde71e70ab606fb6caeba20e3e00332000000000f904156349d7c5e98a2013d1c434c8b3b3e60af1ee9dc6c80715eaaa0019687a43b0c349ffff001d19ba3b5b","0100000030cf1c298da05d2bd2f783b6345ae001003abfb133052089d6d34cf900000000b525248c952eefc4cab0cb6f8b1ae507c74d89eb18b3a870202dedf72f1c5676f8b2c349ffff001ddd12f50a","010000001a44df3bc3e91ef310308b564ba90f2d2d7462d6a180a73ba13abc1c00000000efabf0b38a9ee80c03841fd1c71830ce02d1e521cdc517b1e2fb66835b81dc0320b5c349ffff001d162b8686","01000000116114c9b1d07aaf8f10233518bc1a7f3ca32c8984e40146942d9942000000009469e66a94a4a425558515c31360447b2df886ffda6356b9bbd82b123ead0ac609bac349ffff001d2abbbb9c","01000000fb6bf44bae8812665cc4ed5500682c4c4d334ea16b612a1454c9b57300000000ccc51028a515f49edabf460f192fe29ffbd79fd6d30109b493ae06a04869b16709bfc349ffff001d261a2363","0100000083d4a23d8a4dfea40ee34222bc20fa507947187ee5a12565aa43ef0c000000005b15d6ff281362936ee7448b56ab89d980a55f940cf4c8c752fe1ed14d3f045564c4c349ffff001d38d583cc","01000000acfca93ec3231496b4f7428ae652d8a44283cfb38b5216ea5f5b485e000000000900433b4f95a6a23d15e1c1c58290afba04389d32d3ccaed1ee9b06219dc1c7d1c9c349ffff001d371dd3f3","010000007c98c3ffe417c5ac585c59b699a6d44cc8293378b151240742a12d1300000000355279db60ca6a3fc21d20c82e90b973382b3a354b8b10fed86bc3ca29b9e42929cdc349ffff001d295739e2","01000000ac9a58f429028d0f274a25fe1a5d4a368a0d6c45eb2dc53e33bd73150000000014319346c717b04f8dd3db1a73aa4e487fa2970a65085c60fc01bc7ec59c58ff54cec349ffff001dd607d204","010000002b61f47e7a4a3a4e51d48f662a4609b17be5e621166c24529460e1a500000000639e29202b4b06e043e0fae9c32e902bce93587a5a8ef63c4abafc4adb9b7db05fd0c349ffff001d1fadac1e","01000000639dff71eaaa0326d01749380d985a2f34707e909d1dca91b5f2b1a400000000ca968e8c6ed8020dd1791ce49d549afdf0edd1d2331d87b757a36c040d6dc6d714d6c349ffff001d1b77bf82","01000000e79edc6b47e620efef88b55b1e24102b102899d8b0297009222c616d000000006e168844a228ad64ab06e96868c78ac25df3d96709ae2cddc4a4263349ccb07898dac349ffff001d2363fd19","01000000d2db4d44b2cd40271b60ad47777dee767e795a0c4ef36402dff80b0600000000c3036f859b324e3f1933610d45cb4198fe5d4103dab05dd8bd3e8ff07d064af8c5dcc349ffff001d2901b5a1","01000000e694333927861841696dc35efcab6d8d2c903b26b67377dbb3d9d7fa0000000002b58d919f4529b840bbaad9b1a3f06447a8681935a44e468bfda2307b205374a0e1c349ffff001d00190164","0100000065cfad828f5b05cea907f14a001fa6f0304d69e7d934ab1d742820a70000000078de05cd5a4a55674d97f81376ab909dda7eedfc24bf9dc49fd5f64801ce2ebb6fe4c349ffff001d0677190c","01000000856291adf3c5219b719053edc8cbcfa7100e264ec0764b9193b25b9600000000aa8690a4e463e3e37b412689dc6b1a28027faf985cb7c5a92d714313b0fa8d41f9e4c349ffff001d01005e32","01000000c9428e3fdbe0e2b6ad2becb222be4f45699af6b05b3aae34e953f54800000000388f515b41ed1b46d793b3a63cb18ffcc7e478ae3291421b9e20611df84aab9833e7c349ffff001d05f26b0c","01000000a2b8c447196367ca00db9d57a5f2c52482d172366a0b1766c597c161000000008b66a19552b772a587d3e797386d22c4fdea1de96a0b87b019d91588ef4c12cd2be8c349ffff001d22529b4a","01000000ceda9a8461ea222e1eab1122062308ec8a6b067f8dc33d4d6467f2520000000073ab33d21ec642a9bbdc1ed0eb76a6fd662dacd811b547c9ad37cd671993a426f2e9c349ffff001d30a73f5d","01000000b12ff4700f26114822b892ef4140c680756682f4658dc867211511b600000000c64d7b526896cebdc5554e942bd96d7105faec82f4afdf759733ff8bdda749a088eac349ffff001d5a736002","010000004386989b4b2cf728ca0fe129afe95df80e5248cebf401749b8ec0b4a00000000b1ca56a8654d2221f7b7e656916646fe1b665a51965da691064adaa22749d6a582edc349ffff001d3a31b948","0100000029dd14335c65846356f834e842c4974f472cd6daa37971f33e9b7305000000009a0ed8bc677e15a9ba172680c155637971845f12a6f80eccab43b378d268c75f78efc349ffff001d04ab30de","01000000698b4c54640cf4920b255ab3c00095b4120778a21f714e34c6c203a5000000000a0d8d931453d9d5f98a4f7d86b74684be549e7699a85ceb0e793999b009cbc663f1c349ffff001d2b05a701","01000000a326ec0f26a7175545d779f81d88bb3d11b9e4f6e2dfd1888e59e13c00000000df838bf5fbd064e612bbf7a543addce21624da456f9fcdfc8bcbb0908290e2aea2f2c349ffff001d37c5d516","01000000d8ac582ef2b1824026b71af6f7a7c8ecc8f0a7e774d215a4349b159100000000c72633c92a6986ce2ac2b8a0ed874a3288ebb63d2be1526bf789d785f69eb62d74f5c349ffff001d226fd90d","01000000740b88ccc19a7f09a74bccb24ae5dee460d5b32e637d8c2f52e172d000000000387e81e4fe9a5e0319deea6b71f77ec2df55242b7b5501211801ec530c1bff859efac349ffff001d2fbc8352","010000001068926d851371e427065b59eef831274a9851cfbde232b6d861707200000000b83a96ab3b3e2a5b8b15d2a5eb078af6aa539a852d08eef8ee099d49723afa612efcc349ffff001d39ce1b45","01000000b7aa6a6efcecbf64829eaa48fb79fe14c9c4eab34e966c617253b7920000000009e62a10fe268a2b910aa14245faf5ed39f9409db3a399e677a6f04899e44ead51ffc349ffff001d3a883e82","01000000e310153172ba6f4ee5718d1e2da397186a2f3bb605cb3733c3a18d8500000000c900ed945ef3329eb9ac8db86b215e648ab05f9731f4f7ef277b43a923770046ff04c449ffff001d30aa87d7","01000000740fd010443470eb7bbe612f5a2f0bdb22a63a34c0001b4eff0ce31d00000000e09cf75075ff67169a3c8283c72b6825806530cf89f23f4d0dfcef32082812439107c449ffff001dba1e250e","01000000624edef9e6167fd6b63cb86afa5608a786fa1dffc31eedc498f779ba0000000004b8897d6668d3ea41536b65a48e24a8f82e89a5ccc4c2a42233a99574a11384a309c449ffff001d238d827a","01000000830551bf4ab4057535e9b27b70a6a4903d5a5e46d6f0f10c426f5a8300000000127626946e9f20a8622acd5973e97f93bb9663f334f67abf81f22c0b3651bd64aa0ec449ffff001deb681515","01000000dd703f2abfa7719f3a86d25dac55ae5596ffdc62bc5353fc3fe1f7d20000000078c520517f12f23bbcf16b8d332e3cfcc7888a0f02d1bac095f67d27cb196d7fd90ec449ffff001d093244ac","01000000fdd54250702b4093b2de22819b802aa0a8a86e1d5f57930d8a6a3f3800000000d9d1d928de88f36315f410fda385e51da5225b31deffbf2130188025ed8918185212c449ffff001d25b63126","010000004c093524a7e36a03c9711365a515103c9dbe834ccb32d967d80aa199000000007dd5fe44f90c2b5432af0d03232edf19ff0a09b67430e8a94ab33a7f764ea29c8e14c449ffff001d30f1fda6","01000000680ce1ebb66f0598198a1ab2ee8d4fb8db5dced1e9a871dc1d94ec2f000000008b7dbd0d8c8b3e323034726ff9c43b1a41fdc59222ddb684698e9734f0637ec9c214c449ffff001dab8a9600","010000007f827ae053ec33a4eb322a2051090608c3ded75e9b2218526c600375000000000488b5024b5c6198ab8a142c971b352489f2f7b7288b2b12fccfa2e14df21cd07615c449ffff001db5a91903","010000002e8a517809a7ae8df3001b4053e3e253daa33a2df4e9ba8eb1f48966000000002164a40c2e2fad827a9adc2ff4f5b4f2fe89acb037f08c430dc1f8f998efd1161919c449ffff001d1d962846","01000000e38fc6599a5f71cca7e54fe7069f84ee35fd95dfe2c2b272d882d5ab000000004472fde937095ec8f809789f4f84fbf8cc8abb33af7bcf12690e53d870103548771bc449ffff001d2df157f6","010000007b57d65755d5e2ea122e5e41d0a949d2b9ad6318bad2cba63c56f162000000007254b480fb27d927c17abbec20bd3f95a411ca6e3ada9a0aa757ad9d11032bc92821c449ffff001d227b5ee4","01000000124f7af38282559b5e83670906d849c68d25023003d263b1dbf38a1a0000000055c452d7fce037192b7e87fcdce044fa69d19c9a81bbf321bb448c0b4bb1f3188b23c449ffff001dff934206","0100000094f3e8425212b454098c6ff14df2ef229cb7689234b2c7e2d1901d5e00000000601a1c2169ee6b02247c6834a70ab3c89757400e165c8102d15830550ca1c2a6e225c449ffff001d24c067da","01000000ecf15377947a872a57f38cca40107679b2ff8b4b32bc8d09b382973500000000ccdf8d0fe6a348a7fe9c5012e248954a7fd2e270dd2e3a31c9e91e87ff8a4c020928c449ffff001df587170c","010000006813efaa6d2e60a56c92be39ffa27d04ee681c7940f2e805308651f300000000e1cc143d47bc1b6463b0da90f10188a191f995ec08962a8797268532e06afd442a2ac449ffff001d2cd4536a","010000009f0cc51c19f9621f7a009b843f25dde4854738ec296cf8a4ddfdfeee00000000c9df9e3fafcec69c9df536570af8a179a0aed605215db99cbd6c7a1c394868fc6a2fc449ffff001d37247884","010000005a3f8c1ef3bfbc4a339b45b304389e7308e6ec219e280ac0a8d9561b000000004c28cf3e395dafc8dd0cc2233fda6b6cad5cca2ffd572b4f71ffd5b7e570988bfb30c449ffff001d1fb8c997","010000007421d0febba3c7f7301855d6ab40e03fbe42b91acf30fb7be5ed85f900000000bf8e4c7451bab349cdedc9fa1dedc57f15de8885d7bf8ba78a8760c3327fb4570034c449ffff001dca60cb06","010000007758559e195f2043967f88f76a2586386f973598380489acb28402600000000073fab4fa87d24e72044c3d178857bb5ecbf88fb5950f26477353ca67d6e55c8f0435c449ffff001d540b6803","01000000ea91c4e1cce4a6be90a3956d7688d450e18967942e3b4b2aad6155aa00000000e89c6fa42ba74255948e6b2c050c6eac56edeb93921b31ef20260c4aa0d7ee9e3235c449ffff001d000ddf26","010000004e9defdb88c38c797842084116f1207616b6f1c3f9984f32c32a2b310000000059c1cfe81c8b6f5dcc79ee9840df1a6180f281e3ceff87ddb4008342f59598c2c239c449ffff001d066b5632","01000000fcc76cf678ae8a4cb0ac71c410ad26efab531351cf6f75df53e4e105000000007595f7f86400bdb4e234888386ae2ff915c236218a08d4f27573280352f319b3013cc449ffff001df6ae9a0c","01000000075a2901f0b1b21f6130a2c0dc32ee8f9968438045217843ef53d55d00000000bcbe75dc0fb04d7b62c93584dae7368826a0fdfc675a8163ca2a0c083d6b86619f3dc449ffff001d22f04726","0100000003f11cb7041ecd0846de68ca5bd81f20b9009d4539d9b128066b9d5000000000f862e553ed4fcb13ce4aedaed01e44d3760400dedac692515b9eb0f92bb675e0ee41c449ffff001d04d31105","010000003ec99ea6381eb9fcf5652c8b580bcf81b7b2ab65256ffc874de955bc000000001b16522379eeb636ca5dd48479653f65714d03c46c426fe2567eca248dc04a8a9542c449ffff001d209143b9","01000000fed37dc6c13c27bffe75e236f8aa538454819797a97bbff953a5362100000000dabb123e3b1110c912f3b2896e72602c685dcf439d9d24622f5a5d9220337d032d46c449ffff001d16ecad42","0100000066ff0149b9dabeee76624f1028fd7c7d23434c8321712a59d568867b000000007093a4344e9341dbba4ac24c2211dad9b7bf2f181635f5208227a302e961d7d95f4ac449ffff001d48764816","0100000091299f81edbdf1d12153ef2be8cd536878bcc7f7aeba4821d3812f800000000048717445a860aa0307f68cd8cb40b3da9681a3d1c49badaf2b60290c98dc27c00e4bc449ffff001d0c194b01","0100000066771dc3353421476321d8910ccffaf5ff2e83863645edd411f2061b0000000086e6b0ea5f13656b6f4ede3dbdcad825bf8b20f5ce854af83f00dbf45a270157914bc449ffff001d08218c9f","01000000c6b6b6718cba392b04c97c58173bd541c2a80e25f2c965f3e3624c6b000000005c7159329eeef7540ab49d3eee7d8b6c220cb813ff89f3f690ce354a85ef23db834fc449ffff001d2f2f13b3","01000000558d9e2b9dcb2a9c25fd302ff07a3d2fd5259ca354222a612940869f00000000e09cbbc44dd7f1ae68adb3a4ff3a67074ce4aff62fd9fd2123d1618cc0f39ad06354c449ffff001d074dd0e4","01000000deb778d645219fbcb55ef92bd013acd08de8f92c961f1dfef93bc8e00000000064a912e542b7044509e0aef1adaaf1a07a46a633df41db9f19006dd1a3159e24cc58c449ffff001d1ae6eb99","010000000cf26bfd539664434cc3ec268cd1478ffac8834aeb91057e7064b03e0000000095416af5b993d24c7b97480526f0fc3b70b6e590e08376276e2771e7b8987c54a05ac449ffff001d29d351ca","0100000090a1c8a71618f9c5b2508563250b612d2a20670d95bf3a8f21ada66400000000cb850b7af27344ba3769d336b5d9adb3483f57888fce66b093e32a516df2ab67b05dc449ffff001d53ddbe03","0100000000f19b748f9b9a5adf83711f2890d9f57958e4957bd68e0b7f03760500000000fc5265957702ad35267c2f0e7422ea3bc5f885a693d4cc0e7d6080dca2924a991e5fc449ffff001d1e41b1b9","01000000661b705a546f459e3a3500c079acce52d7aee3e940b3b95cc7c845130000000073120c3ac2e13d9cdd61b278eda317d6a33f3806a0ffa878656d2e3fb22b6750ab61c449ffff001d21065c2d","010000001734b1bfd33b12cecae97d48ebb47ff6147681c42ca8b42252bda84c000000009442da5cc585e7b51556a94a6bbfd6e0115b27c49f1ccfd359767ab5b5598645a863c449ffff001d205be6da","01000000cf65213b67b50d201b3b175e2bf3f3869bfaf52a25b6cde5b1b6076b0000000066f111aa043c5fd26217f07541f7e5bef00ce9b33aff1508a89a1f7e55d748a8b365c449ffff001d9c4b9f04","01000000a3568c093e77cc38969b4ac1756eace1dc691f0750392ded44a0c07d00000000cdc22c8492e0ec175b8997192cf7a7aba81ba7cab77f2410097987f364656caffd67c449ffff001d25cb86ac","0100000083f123cd26d441db612310e36e89c3a903abd212ccd3f7315b1b86eb00000000585f0846b25e4435cfcf7b6fc50e5c83587e9222db999164d76778291f6e37b8e869c449ffff001d7cb69302","01000000223b3ea8938020b7b6d44acad8a45637519b04953c7b5b8b2e3a52a80000000032f71054c884079f838091b2fea170c4b61bb3223e987ec5a84fe9de88e3c137016bc449ffff001d3c5a8804","010000001cf996a535b0d8136475dd9913944873ef56d2944b9f198eb10e255c00000000aef1905cfe64257cbb2fb0cb625af9e026bff8c0b21bad1eb1590c225aa24e1d4c6bc449ffff001d316ea46a","01000000c1da8911d8fd49b75e4cfca4b3bb9ac87737f2ce21ee22e7ae38871d00000000520edb15593d42622b17f7523aefa06de0209ea3e5a15b0c8c9bc74b1870b319c56ec449ffff001d1b20d541","0100000049594b2941ac3053d55e96035bb42c89081999a4e84ad1393a3567ed00000000f97471d389538f4b0f2ec28933c90dd89fd1e58befe85979512a6ba7ecff1e8d4e74c449ffff001d00616de3","01000000a70c6f8ef9c1b5df9bfe18e708c987388605f92baf70eaf084d2516a000000001d6938acf148cbbfb021959fb574de395397440a971e82923d62037eda47ea53b075c449ffff001d3336f500","01000000f7bb2dfbff0beb2e7ddd06fbf4f6e05c97d87b171c7121051e0b4186000000008efcc74f0aa27f0115054ac42cb5c2610b0fa89b7965a2ba0192deb8f50d2cda63a2c449ffff001dc5d1bddf","01000000f2c60ae5a14dca3073474c7a1678de06b2bdccad8f3cd8f1bfd54ed10000000019f3762aadca358ab531cc88afef5d302d4a0d90b4789bedb2357b291a17bff974a6c449ffff001db3e06e10","010000005652d1f8c3295863c9ff6d8135e57ca904dd5b2bbb82e0e6218e1d5200000000ab5f618da8d7f7d3ab087f1cd31b497d152f6da4f8147fddff8ad803ae91d0e193aac449ffff001d0c29f915","010000000caeba595af0188b7155f17a0698e94ce951e3b4e6e08a6370609e20000000001722b0e652fe651f1963f6d3513f354f0e6faa30c43da63b4f977027f2f805d6cab2c449ffff001d503db817","0100000005a15da1018fb7085c0494cf80a7f6c01c5bfc48daedcb9ba4e04ded000000007b2b892cb027084c58a07f1ee4933eb46d9630b31f1398190aaff240b373e93262b5c449ffff001d3f7e210a","0100000029b4724c544d624d93ddaaedbb53df3aae5a618ff70b68f9618955da000000008771cd1a794aea37b7f98859adef278d02a88bf49d3d4b27e9b5a61566d5cc1feac8c449ffff001db1cb5256","0100000077c56ca94c7fab140bd4479807526796cdf3175d295f74bea50def79000000000251da722c5f52282293c547c56b65073b7c0786fd7a1e0e323dfd5a89106b50e8cbc449ffff001d3d546b02","01000000b413a9e6bec91364e1f993ed9ce85f3a54a84d3933dfc09ddf04f3240000000076495f1862e170c8c6ccb3cfe5b53df743ad67d55382a3cb9a0b8bc75ee105225eccc449ffff001d16140102","0100000022c791089ba6743a53f70f861ad16be8b484298dd5a4159ecc286b3600000000ef0c46f5bb15dae9539e9976d6de39b86f3da0e3a93c5131cdb4bca89a997381efd6c449ffff001d5db67107","01000000219bfa52960aee92b1e9bbf7a63d99473f931be68fff8fd14f59d71500000000b838d94097aba7a3548fcafc853fbe9e0c341e1180740f0870899326c29a25e2f3dec449ffff001d825bbb21","01000000937fe3ff929a4d2c7f20c68668bdc8bb9d1f2ed5826a8f37dca01c980000000069fd61546d0d649dae82a586dc275484808dc53290d6aa30a57a7eb232827736e5e1c449ffff001d002a1010","01000000279156409f31dd692b695bb40a58b5b9d433623301e8f581a3a601ff00000000c70858ced4bfbe1f231d2563f4353050bbf6b66e41a179b6bfaa17525d6e478daee4c449ffff001d6e00b206","010000000fa68efbd55566fd92e055c8455d565dfa19c4aba836a76cbfdcdce1000000001d93992c3d3c934c9e783010db806434dcb142af9b00fdf02eb65d5aecbf46e1c3fdc449ffff001db37f666d","010000000143cde5dbbf79db28cc65beb40c4801787415ff8e3bdb69e7f15ce100000000192db1cdd54b8e7a420dd95e9aa4d1290aa0d97bb9c765a7e633148d5e1c733a27fec449ffff001da8707900","01000000f2369b1e37d501e7b198561a15da1051d8ebe68f1af038deb3d5c7090000000075177b83a9694551980c80771ba09e61342f0270e67796bb80fcd060176df8ccdffec449ffff001d3eea5403","01000000038753657c24bd218923722390071884c42c516bb67a7b8c9eef963400000000cfb6430dadd2f871c65cb232d6b6b9bfad109c8bd96d77fb34c8ab7a98dd75c0ec27c549ffff001d3ebc98cd","010000005b40af80b3dc75cad7692bbc97383e609810d718857de3ebf098091d000000006395c73810691fea87a954e651f31ed8d4cd93a68e92353698904b5a37e4e8871340c549ffff001db5d8955f","01000000efd85e5eac38229936b1d8f254e5686e45d32a7328f99a81bcabec2f00000000ddaba09ccbe24a1c6c2266245d94a8db99180a75715e0e289a9579f2f5aacf5fb042c549ffff001dfbd4870e","01000000077d148449bb876173962466156d1e607673f76d1ab238ea2d787eda00000000b725a1088ff538af775b45f8274488d591ee5505258d0725c21d085041756f613656c549ffff001d377edd34","01000000d5bc8cb936b33c87b8b70bfd7cc245b90689a582050f1b9d7ea3265d00000000ce7206508d9038caec2dca2f988eb9cad5b9e9f83e59e3eb8668f9fd4a4f96c30b5ac549ffff001de14d930a","0100000047cb88c7b5571507257bc1da1c114323638c1bd15bb2b29eba2fe0ac00000000e097d2aeb4aa6e07cab5ef565eee54bef8502e5d6566d231b117569137e0699f5b8cc549ffff001d639296bc","01000000a45c7e641f5247854eda681a06cefc9af1e1c52250736a593c43ac81000000005b7da57986143f558c3dde874db853bc3f480d7a528e9309488a17488113f2be0390c549ffff001d2ceb6c8e","01000000837e4d0effa5bf36d7b374c110ca27253b2ebc441e7db1e69983d977000000001eda170ee91bc68928712d866387169154b8f10a7afff660212953cbe083881f5395c549ffff001d00b48fa9","01000000a9b5b15b1b7d7ed8feefc20192912e278d21d3207dd36852d802f61e00000000131bf4d4c5358cdfd33eece7cf8d2f480d1f56c20403f1fbf9d314609db2fb38da9ac549ffff001d316b840f","01000000b133fcd99218daab1477d907ad39df1783fc902191da3ab3fa5ecfc500000000e28b2e14e8aa0d4396979c36887ac5bda0e4fe16a3e971c1e6ff249cdf45223dc99bc549ffff001d12099904","010000001d4a03011ffa7f588057f1f4c2e42d2cd4e3bb4502957860059afc0e00000000cafc7ff6417ca8d373ca8def2a1a64e028388496fddd0c3ce522fd35aa32ca1e189ec549ffff001d4716d20b","0100000019f24b42b400f7a64ab7567476fff3e50a373c0677873c7e874ba54c00000000b34ec81ee88f35c7211919e464f210c0134cbbd818b1338f5fdf471959bb4bf360a0c549ffff001d02fd78b7","01000000eae6f11f442dfc8ba644022d2a9a73ce92b9e465e372bf1b17af29ae0000000014206b73e896eca2484ae23db527959cc6b8b25e3417c6360b615fc8fc87394022a3c549ffff001d58f7df0b","0100000020f03996ec3a3affabbb6b6cf8db4157606bdf8577c2203bad3938300000000069c80c62a30a8140026ba5407bdbf9a22c324432d4af2f5c6269d5d25da08b407fa5c549ffff001d2866f5d7","010000007ce83c0baa3ca99774e2cc1709a93ed28b902b2be0e0becccf4c8487000000003fbad8b583807adf563f4413e0edfb73a541768641ca8eff90e64be2b788a1b27ba5c549ffff001db8e91e00","0100000053e2399995c2a229e68dc24d870f9fc105ba7aeb223cb2b4ba699a7600000000f5909fa74c24bc7b0694995f0e24661e5d75c79e2e6b6c9b63700626a141864cfda9c549ffff001d23098774","01000000df7205cb355b467a62d60a48ebb1c32a03445423716a83b08cca26c8000000005ac2da86202556c49d231cd63cf6aee6ac44a9ac79bcaee682a359751e81482e4bacc549ffff001d03a9d4a8","010000009bc6ee228ac506ca6215c21da5bfb2f73247f2bf8a34a8c1805a457800000000b8d1d57fe37d854a047d327c1f7aa964a46818d0f233f730b0a427339a3e3e4f46aec549ffff001d2c318709","0100000079f984ad5cdfbd230f3f994ddbfa256146ca5ad86379a6e0fd74e1eb0000000004689d3c6187b5840f850e51f4c5fc5799b13cc6c3d0f60553920b4353931eaa6caec549ffff001d32fda66d","01000000f3f8fdb2e1af29b16b31b983996cf357e19964caae6ced38d87a828f00000000c4056d5a4f2fe65fcfc71b1f700dcc81a9ad6f29fc8b463a776f05d053a767a41fafc549ffff001d65778a01","01000000223bb468501b981c53b81f2940afee7c91325819340e07842a1204b600000000890bd1a803578d5332d23acf689041101b8544f65cd11b9b3a5b3a82cb03a9d4eab2c549ffff001d1f0fc93e","01000000602494949bc82e89e5ef8d93cb5646437bb436f9900c624d8954ac9500000000a866474094a2f27fa52023fa5b639810584808060a627a76bfe14554f7150dede4b8c549ffff001d18e159ad","010000009997764c7440cdd824de9872541f49b87ab4e9cc45af545890eb0feb000000006b0ecdef1912214cb751ee9a853707965fe3004a8bff673bf2e5b0cc7584daabddbdc549ffff001d1eebe0c2","0100000047c4b858f13f4b13c3b1019eb8ee7d2ef88bf0e5894c0052053d31a500000000b6e97057a92603f4348e2749595c7d81fcf4de9cb6bce10e5d87fb4506192a1f17c1c549ffff001d1c97b47f","01000000ce5ac6229f89295489796a5649f790fb478d60e6cfd05369a57099990000000050efc621220c74935a77eb562985ca9502969e7b111e3406a9d911386bdd84c3f8c5c549ffff001d312da649","0100000062036c4e7d157ad4858dd129838706952dbb11421a36b04b7921603a0000000003bf96ed900ee57c054a1d6ce491e6514fbbd1ef9910ab991471634d2761664361c6c549ffff001dcc2b6703","01000000d610e7af176c02b70362fb8eca575881f0ff4b10bb756b1199e8c657000000002203ecf1a4283bc58928178c6a271bfe57d475d424c53ce77327ffe992848ae00ac9c549ffff001d0d94470a","010000003b7f1bfab2ddf651ce4a64d5ab2dfc4842c210e9df21e405e9f6db0b000000000327f1d0e6514405b0f66bc591d82b78a78236c8ba8bdd34b06fd522f0a721dcbfcbc549ffff001d00c30241","01000000ce0685823f00c8b3e56fec98064ff101cf13140c57b2e6c5bb1df74c0000000030fcae2338869f49a5c89a6f689c728b5200391064e6f20d3fd3e55f07093d2261cdc549ffff001d243fbbfc","01000000644bf5c9bb7b47f204a6d062f9b755d67af3ddcbb3f113ece0242d680000000049e2763ad82abad45298702570d4dc104d60ace5ce90d24a7cafebf676d587f5c1cec549ffff001ddc357d06","0100000070979819b366b9f166666601cad50722566a14bac89562de215bf78d00000000e54e3daca41343a7da5e0feef0fd94ecc917d904bad0201bc4d2ee4c12abaaeafcd1c549ffff001dd7b23c0d","01000000687ec3e05ccfeb7df95ad9bbbe437191953f605e4c37a6d16f209a5b000000009fa378628c967d782984ffa6a11da75ef87ce90de881d6f12c815e1e4d117c5ce3d2c549ffff001d147c787f","01000000441fdeec71ac89d1084a9c58e105c077852cfcfe215d95002015d8ba0000000043150f8bc9c1aa95dac66a23dea16d9689cd8898fed08d9a501555f37195c20c5fd5c549ffff001d386d3940","01000000fa3e95c815d0bf60602407b2f12d05c4198a4220e019dafc4aa78bd600000000fce61665f3471686de597dafb8d1af3b8f7b89074900541c8bbdf30755b8de507cd9c549ffff001d0622cddd","010000009abbd55077a0e2a32d30254c8662531ce0e62d7bc6b719e620cdeb9600000000727fc0a60bb4bcda57cc0a1776567049e25623883f6c4c299d74d7f35e4950f618dfc549ffff001d013ddf93","01000000c0725903bc6e9199924b5f78d8dc8e6fb9cd9c4c3ccb93ee89fdecf200000000639da67f3e676e6b22012cac1680ec4bcf71ec389a8962e2878da0781d315e07b2e0c549ffff001d38b679c4","010000005d6257009568f5539eebfe7309e02933099fb5628191371c77e59c7d00000000f0c951c2f47839b5faceb75fa93b274b2979ce5801b7edebe000d3ef277ada5544e6c549ffff001d2f3df5d5","01000000c6e34deee2fdcbb8ce87fae737fe24f4270b60c79fd040990882382c000000007b2444da416dadded754431ed1edb2220719678dea59fbf5a344b78d57718e4d1de9c549ffff001d14bc88e5","01000000bc7a2af785c6f1f301f87d16eec61a108f3aa64d582b0d8f63aa871300000000ea5bbc248925f6d78a35c4844102b71a5aba0ea7646db97ecce6336476f7838cebeac549ffff001d1dcc7217","01000000dd1ba483a4084116a89f50cbddff28a1b28cd47e428e2b68be8897eb00000000bf056fc1038ceebf01b468be48624ce978e7e80e885d855a8570bab5e8720e2e6cefc549ffff001d19ecd906","01000000a7e44fa62490cba819a3284309d5ef546eddf3f37ae2c2c780dbbc6e0000000055f33bbc4a14121254a1f5320f72f68b1acf2319da9c13d1822b4de36c3b7adb1cf3c549ffff001d179a6173","01000000c87f597ef5b51505d01be28e439f7ad8dd335380f164c4c967d40f4d00000000150d96372e65733a8d5327acb9a3bd26dd8279df265f27a59f5ec83536c5c205d6f7c549ffff001d3095cb8e","01000000c5d5adcef83b3b7e968ceb5b40e7bdba9b30b8e1d55be588546bbdea00000000f1761739bca991620eea849cbed426e4a68f232725ee87f2da90a8dafd97d93308fbc549ffff001d0536694f","0100000033026a2b60a2e47cd388de83f217140709ac84c3d61e9083672e3d16000000006201dc98fcf52766bde0c7437c04ebec691228292b773c9df15c60d95f4ec7c552fec549ffff001d38e00798","01000000cc147c7175bb7b14f7b8aaa89d533b6fffabfd2e0e620fd4f400fddf000000008932a6ab8251ee2549fc5e547237200c8359024adc8221a9aa88118d65149fdd9f03c649ffff001d1bb63e2d","0100000027953d6043aaefe182daa6656d406d1ce7260b406cc9992ec54972ff000000000573351b018bef67b1ccb107a0deb1468e2258819d17499dbc6a7b29317c0d376505c649ffff001d153c6af3","01000000498ef5aa9e0f84d34fc4dfd6f3a840e40080d57902149ed8c022efcd0000000076e6a6ccdaa758efffd2e1284f8847239d345b612a435acaebb5d5d54a14aac1e506c649ffff001d2ea1de01","010000003740a9ecb1dc001324c41c74d29b34003e07f54b763de145da50f41f00000000b6a185307d4dd4231338be0044e8119122acf5be085f153b4e979eb5e0fa02c8a607c649ffff001d061fbe6d","01000000552e79af0dd710d496d0671334ee1fbb32e714bfd159051fdd2bde5500000000ca94c3767b74936bdc116f17d1bd56f0de9ba92f2d1437426508ae97e38cb0e13a0ac649ffff001de5a6600b","0100000086c5f4e1cee9584bcdf5479ab8dd909951cb14800fe42c48cdb42c5200000000102e2456f44a5d30130f30bdbe8989fb624d56a011abb90cdd2320bed1dfeb767b0dc649ffff001d1b9d70b2","01000000f180c46fb6a277477c9e73262776cc175f1157b03592c41d6b707c4200000000b91ccb352855dd40b13b7cf6782d669226096d87a5a420de0093f8351ed33c6c5c0fc649ffff001d4b73a702","010000006330f32dbb6c60f9887466f14c631f84f28d143d76debb0ffbed058f000000007bff0eba689d9258116568c8c0dc12f9e368fce4d8e8ba1426cc7616ec92fefd8812c649ffff001d13ef74b3","01000000636c78e3f08ffd061c3bf49d69803198767ad58d38e1acafeee59810000000006674eeb36578913ef9f06a0e195729c9fcf2da59d3d5d93ebeca1648565d28c9e614c649ffff001d2b300f30","01000000deaf426fa6204b5a160498c13e9c884ca0deeeebd4d83af5bbe6ba8c00000000f97c7f54a075d3bc0af0ef20a4eff5e1443705aed2ca9672b27600819902044cc714c649ffff001dc2074d00","01000000f514459ba0b39cc00b6974e7784b878b82f99cb877d262935d25f7fe00000000598851dddb7bfc728ae36147d4c6a1d2843df2107e3c350eee43bc6892fa742fe717c649ffff001d2578263d","01000000c086ef3011e0bfbd627dce127cfe7297988ac8266793a0d4e0e3440f0000000044d3d4f9bb8d088eb312be2a3c80f7df91b98d2d4dade2cc7a38c148ae03277d031bc649ffff001d341e288a","0100000097e1cd203d548b762cf0a41c115fdb9b06bc09f0b0127d6c5ea4c10b0000000040600e3f9fc8145556b0c0fd3411412a3b277d07a6422939d8704106e37b1424b51dc649ffff001dc8d4e60b","0100000094bba456e8ab9f7870b0081a0af8cf8a1023707b499ebf7b35436133000000009b24d528be4415e7822afdad727b023ffff16cd88e023efde5ff072cba0d254c661ec649ffff001d050cfb14","010000002d3e626de526f3e0008dc9e2ef24fc6cce25f3eef9135bc155faca9300000000e3b837a67a24882526d1181dcabecab963333796d62eee551290ccffe47c50852d22c649ffff001d2a409829","01000000249ad98302fc4cf26508a1d48ff64d69e75919195ca2da94a65b27a500000000c7319b9f10a4a519ad596848ad12dfbc2c6d8d165967084e1d5b6f9a420d1e1b3423c649ffff001df5a8fe04","010000008c0aa9da54aaa74e808cf285d0d9af52c2c4531682916cd16c454b6b0000000067d8c21296ed16e964dc43b0b57c8770ead5e95130da5ae37aa28a77a62c717f1424c649ffff001d05882122","01000000f739ec217280b2f016acc229c2a0a651fd8deccda120b8f65354fc70000000003f43dc406908caaad30804d9ceac0bc1862873fd1e12e67245f5f3f55ea415b07827c649ffff001d267d37fb","010000008fb8bd26f20c1fd8abd3db05268496802e61aa4eb20526530b6446f100000000c21de4d4a48a3e5c21b8c1c740ec5fb5ed22205c816e8cdc9722c8656f8af7266d2bc649ffff001d1366e110","01000000486a8cacd320c494c0f48121314242fddb8f4ddab6819b276abc73d9000000004b3987ab7ef6e2bcc88d6e8d5d4694273cf098e443e6af0af30caa6d28408ce4a82bc649ffff001d30750423","010000009004a91bd265f32ac7f2aa54da6c92bbd41e00e3f2bbe276df6b66e900000000b13ea82a2a60fddf211727e410322d3870e3f4eda9461bde286e9e68723b665a502cc649ffff001d28d3c203","01000000de84282d2ed0815acba206403fdb2d74d635e3cfb7d523e20be6a0ca00000000993b33e07cf1a11bd574642d468bc7876eda8e2351db76bb21e6ba1e745f04f52a2dc649ffff001d7481ca04","010000001d81a2ec4c316c51790cc861c7cb34b737744fd9670aa1f39786b56000000000b1513dfecaf26db7b14b883c4d99be0ec8f4adcd04642c7f0aadb37395aa7b6ba72ec649ffff001df8828c01","010000001edf46e5e16ab2b821a084dd1115f3d0d7cae6f23258de8b8977612d00000000fa4e7248aa356f91f197668e9c8d7ce145e4552777d88942ab8052b1d045231f082fc649ffff001d280169e6","010000007486e2a6cdb8d2cb2c43fe14844546623e12983ec6c87638fdeb9b2200000000ce715949d731896bf092bb54e7241850ab3aea70ac925b16eaee81899839e28e1835c649ffff001d3974abeb","0100000070760c60ab9bfd7907e7efb66f8dbd011f29e922a2cd58a7e344652700000000653db2a6e4c2cece1afe26beb02b001af496140f37bac77c1407617cba40ebc51938c649ffff001d5d10b510","01000000357c3901d25e71b517d474463427287f44c3803e8580e7395e7f054d000000009e1e37651217c74d9e7adbe62f7a2fdd4d83844090a282a1aaaa5ef9666080ada839c649ffff001d266e471b","010000000e9b6641adbc78200856a88d241e5f89ac3fd2f814d99137b869d6f4000000004e7736db3ac39c6ced99cc0e9317758fb1d040d5a82d6ce1916a93d9605c361c753dc649ffff001d0d214414","01000000ddf029f09f56cb2c4d03fa6d4230a95c86177df948f5b101c0429fa90000000046a9659a530267a14f8e0759e4f4abee2c5f97b66200d300a8123d1cf8b5f04af43dc649ffff001d17cabe63","01000000ae8b3e9cafd524443bfc913e5e0cbdbf11567b716ca270e080934a8100000000d427f314279b0a4debcc113e603e7fce5f1aad93e31a1d9361d9f7c0e7d8573f3142c649ffff001d339e4812","0100000071e094558919dd01f3fd4c8a9d49631452c6c8b38207d5620cb455cd00000000cdff7e37edf29a5d88cfefbc50c5dbe5eb65e372291d69a80ca4d64cf6dbdecf1543c649ffff001d38f59a87","01000000b3d17fded4aeec629847527146349e710693d75e49f995e36cbcf21a000000000968263eb49278cc8f8d4d48b97781e16e18258b51f84aba8f58d45e2f1b2cf05646c649ffff001d1bad160e","010000007799753aa8c8fdff5039fbd508c8e9d332f02f20a072ef8ff3d9511700000000353e219599b61539812294d205d4b880d7c5290e58c95fe233fed2960b39498e3848c649ffff001d2c1e13bc","01000000ecaeda08673916aafa5f91d5c85871ac2b5646b0a4549eee5cf1b3050000000047e31f00de5d092918cb15148caf649de3c01a9f7ef9c6de40d9e801065b3573144ac649ffff001d282e9f2d","010000006998153fef03d3bf727d4cc459dfe2774d925c50221508b7aae0693a00000000e3d2843edd0831c851caeafdbeaf536d3765f2923d80b27b17c695ff38c161357d4fc649ffff001d29f1e253","0100000072988f46b8c3616b966547d8013f052883cdfca3e882541a5f5fcb26000000000bb6df378bb007eb8ee2e4801d1146a0d4d838c6f3ea18a17ef57ae71de1d32fa24fc649ffff001d6ecf2702","010000009921defb52c28bb04f2a4e4bd6208a87120421df1ad1a9c47c1548870000000024e971b821b9253712af06d23c6f83c3a32856ff6f0a4117a50c1e41921121988d53c649ffff001d1e71ae57","01000000a12268530138b577f2e267c13fd032b858a9dfe0bb61dcd1b1c78a4b00000000990dedd35403fe76f0ef7d923a2dd81c087a3e99cd981dd26d57a391b411e0a7fd57c649ffff001d2b78e0d6","010000000a7a478a62483b6679f52eed3e414d6d8a8892b08d8877f2274c1703000000001b9ecd09ee23223591d59b662091e4f74e2150e04d5c3cbf1fea7cbbe44a12217958c649ffff001d76eacc02","01000000e41a652ed676274a9f8caa55a6996706dcc420a922a1f0fccf4198c7000000009ed288c35560dbea102177d1abfe5b233b1600a963632d22e0260425777413a7cc59c649ffff001d30ccca39","010000006e7ec2f4e432dbd04707dbce054d218afae350a4156077e1d1a0d5560000000074bf549bd581f0bf27ac962de3dff0914f93dc1bcd150a2a03daaaaef73d0660b65cc649ffff001d3640478b","010000008fefa85e90c1f09fecd4b08d4878aceb28a4d4e1ccdb3c06e76e9287000000009b4520c189e63c2ee2a3922b6db36700dbaeb73e01900e5b612f25bea2bd2f88445ec649ffff001d340a9a43","01000000c02a8ddb3225a6498078190767ecd117788af081ec41554161980fa300000000a14bebd9c14d571a3760cb480647f74a056023a8a81a1e5074f44205c1d278ed4d61c649ffff001d1677f0e7","010000005a6d909639eea97327fade84c98980d556610d3725e8db7ac28846e000000000e8933d7412de832393cb4f26753039e40d8dc6874d86c5a44f6ab73c1a5b856dd061c649ffff001dbeb12c02","01000000c185f3d1b8026638286f3119a34f2dff90f7d42ce45914b802bbd18500000000f13f9683ece22f32647cfc01a63fd3dd50f9bf54de1a56ada5ee944802343abdba64c649ffff001d2523c782","01000000674624ca7211d08249912f6beff4ac384663632610445fc74b019b9100000000bd38d9b99908438b50190bf040860ae58cd1866c033e2803328365e49676ca08da67c649ffff001d0f6a6c01","0100000010574316f755b523d51cff5ecc4744c35f680f8d91f73526a66b25f200000000b5df4bedc738082711c3e07c7d6e4271e971d3c8f260ee3819395bc970aee5ff0869c649ffff001d36d27cf8","0100000021cff392e4d37a561db0e39e566f3f8155922c5b255b5d5dd3f5a72700000000c6b446e2e1e4fe9deca3c0a69e7b6e6126405ca97d07257a9b71af24fbf99dceea6ac649ffff001db5842b08","0100000061ac1e144038c96061fc0f49b5776f599c5c63a4638b06feb5cb306c00000000909f4767571f37179927bb9e8b5a878beaaea29da6cb1ca28046bcfa4ad56dbd7b6ec649ffff001d3a82d6cf","010000002e5eca46ed5693c2cc307c8515cb1d13dc836bd7d7768118906e24a30000000070e174b31116112e53952862e78fbef6dcf7ee16ef913dfced91ee56501c3cefda73c649ffff001d316232e5","01000000c2db3f2d86245a471ae6694beeaa33ce72f2f84582fcae6008dfc31700000000f808dcf4170e02a531aa8fe198636ea66fa2eded7b8cf33c639af6b726fda891ed77c649ffff001d2788a335","010000005c41d8d1c6dee8545294922690225ef1ad494ba3c6eabbc0ca6761d90000000048c4c28b0c8d3654a7a5bbeec3fd11c3470c5afee7c7cd5a38810570bcc6bf23457bc649ffff001d25fb6a33","01000000635f5818d258ad5ec340bb6fa88e14e1da1c7bec4e7fa5c14b1260fa0000000088b236440bec3f8b7a3d1e7ad17410ed641f0d6f009e1c9c636cac3f7cd1735b3480c649ffff001d03ee06ed","01000000f853bb1461a695a33f5bec5f7b111040c8980cbaa01124e199a95e390000000073e38f8739589b8a87e8fbcce08ef864a66262e347937da0acf3ecd43fc0b0524484c649ffff001da7059a15","01000000c3d890d807b6d20fc6c179d14480feb9de033069adb27a845c7fa6ce00000000755256a119405b113965c45e22613de25d32e0097a814cab6e240ad5540c88da1685c649ffff001d05c39a7e","0100000089fb218584a3185eea1be0a43ce9e9bd89a50313fd27ce829d4ba48b0000000066e56dc2c510ac2964a166cef587ed031f30fc8734ccc056b2d12c51a2c8a11a328bc649ffff001d06bad515","01000000bae30e5381d477560299eb7f28c56e730510833447888b271b1a8afd000000005f3d0876f89fc0b94b52345565445e469aa9eb101a673498b18eed821c4f065b638dc649ffff001d43f7120a","0100000070428b6c1a5478969167119accf142f3e5b2a3a60cd26ffe6ede49ec000000005a31829a92ff0fb92cffdd1b8751e9088f184bf652b5192ed14a99432badb2883291c649ffff001d1fff6d0e","01000000c062584ce6cb776745f4c31c9609dd1bb202d76c9f1574bdaa3ca51400000000799e4143b7f03f107250e9996ca2b766e9ed7f8d6cbd57f1c9606a2e8748d46a2696c649ffff001de1b70708","01000000dfa6beaabe3497b06354d33925df4ac0d08644a0a272194558ee4d24000000001ed7f7701ba7ceb40f1a2dbb6b39fcb7f45f785f74af60f7cea5424fbbb266723697c649ffff001d1afd844b","0100000053b61435bacfa8cc8772d98ceaffe586d2698cd7c6d267160e0469200000000069750037c75489757edc997d9b91ac74e910eba3008d68c631671a9c27ee0dce789bc649ffff001d22219283","01000000dc51d8c478529efc536cfc1d75dde4659139ab9bfb777be839e77e100000000095a83eb660be23cc506e2d4b766e29b199a50ba73fc22670d3d736cf48739403f79fc649ffff001d374d1d82","01000000bfb0b7f2314750f67c26f3d3676b5a847abe57e487d21455433cce6d00000000432d2ddf18b04b55184bb5877e43a58687cfe284ea0fa8ca0a4fbb025171ffac02a3c649ffff001d1af95c0d","01000000c51c973432239afef8d4aa7224bdb84d96fc337fffd8cfb9fda15f1400000000f864bc769a008eecef7614e173ca119897adab3da3d7fa6cbfb224d59614baab2fa6c649ffff001d9295ee0d","0100000080d73f189298f850f1f66d81de9efdd3f62994ef7cafaeceb34d8ec000000000a86b3e516e58756962d9e2e08894680edc337fe6972e888a9bcd157593a6a22e10a7c649ffff001d1c35d932","0100000063d930249f7556d5018b4ae4fe820630791aecb8bc331efdc40119f600000000e9d675ad2df4b999ccccd576a2952559b00a15026eb5ecd905d32a976d376ec0cba9c649ffff001d35f4e966","01000000fbf44b88548c1d9c028ec9b96a22d3e5d5c3fd734544bbec3b8cdb2700000000d83a1eae3c59b4789b97784db612750605f2cf4a09def7a2bfe49c6a8a78deeb57adc649ffff001d2e5b72b1","01000000c3b87e904f6b057706444d6f8d46acc3ab3366284d66315df5750a2a0000000044579b4922b33fbf0109d1f5048075b8dc3928cffd563b223a69ed14182f77883fb3c649ffff001d2f26fcbe","010000008dd1f4bf792a094ffd1381b1236ef3b5ef06d00a2eee48a426c9047b00000000da93a0217c0a53a69172dbf19480cea8f809d4e26a64a8f5f101eb4213e7f15338b3c649ffff001d6f00bb00","010000006a65b17d61ff935c4e3a83826bde20afc7c8db0e3311862d2daad77000000000b0bdf844b5f1af7a4334d20107292b166a029c3e9e5bd25e1554c346578b4e3f9bb3c649ffff001dc2a3fc01","01000000a5b304176592beddf82e91044064a21f178fdda80057cda6c2fb63d100000000ba2d758ab479805a25f61b2b239236f3f90294186743a1c012242a5500e4cf56dab4c649ffff001d1e44729c","0100000007bfaa803dab1b901e1deeb015170318824936d4ca9bc96879d34dcc000000002ea216aaf3624a0c3a4d7733dfe73ee69519c7e7868e5db880f9959a2ee61de94fb7c649ffff001d1edaae0d","01000000d465cc72c7d5e0e0596c118fc484393c442c4f065b9a39a49e5e035600000000fe73d5fad8676e60fe8aebef2940883a3c65c466c267103d3d03bee73fbfeef3bbb7c649ffff001d377d360a","010000004610b3be2c318ef414462e5bdf17d0257679a18113cba3e1a0d9e241000000008da79c358b483580641b53872a85476fa214bd5bedf10cf8f85a81e9db11bad695b9c649ffff001d1d411efc","0100000019800ac3807621c97c87f26a76483f86e986842366a1d5a9da5a5eb5000000004a463ad437d45b62df83b4622823f70086e8115417235afbf6be15243d5b003b52bdc649ffff001d37297969","01000000964444a877246f6a55654eb9709e5c04e22ffda1fd342c414d2605ca000000007233518212017a5b004ee47dcd01b2ffe33feba3b58a349f78681ff31d02f7c819c1c649ffff001d15a8b3d9","01000000f743b63919519cba1ddfc4270a403fe416cc4867b5e6c81e8514a54500000000d6886acf1869f10098cf3e93eeaa2cabcbde66a08cde45ae96b0f7a680a949d067c3c649ffff001d2e67f3c9","0100000043b42cd526820496a311fc599fd80e4801e8422100ece2519f5d62a900000000c84aca1f840f2a021de58935aac81d71100c8341cb42735e7e2ffdc96e3002338ac5c649ffff001d20178429","01000000c5f05c8fdf3e3370e9476c552060c6807fcd5616fb174dd833fbe3b500000000cef6876e214f11504f9f6e8a7f6c69feb2a2e308e945ee370ffabb17388c15446bc8c649ffff001d285224ce","01000000e37d6e52855d7b72ecd6ea7df2eaf2d9921cc6a5a396199e86512e0200000000615db8a715da18560ee6b1e39a8dd9a3a6a5171f00db91813c150a6b03d724c62fcec649ffff001d26909333","010000008f828922b66a88692e4229cd9779a285487fbbb3da61d4c4afb5c80e000000006d3d85048e1ad468948651f5d418d325f971be0ff41b19a50480ece7b04293bb79d2c649ffff001d0684a5a7","010000007e501bc08929b2b9101268ad94825b2a06118a06e3e2321ff9ed5513000000008240421eec9919470905a8268c03672358291c60a5d86fc236e12ac7ea61dec11ed6c649ffff001d15a3f508","0100000055b79cd8cc36f137a7f907e083c420fa8d8a3047f23ca5582ba017ba0000000080fe4a8a0764ff747509172d0f8f14e3a5540f1432926c4c786d1aba0ffbeb8a90d8c649ffff001d05b0b710","01000000bd81705550e5193389565b9186c04594ef6e2296748ae5030a5ce105000000002326863226510dc057b91c138fad7cd553da90cc4c0d0ce200e2280c79f02ac89fdec649ffff001d1afae1d5","010000001308daffa65eb8ece7d1744a5926e04991623e719efc6876792f410100000000d79b8608380ae5209e22ac9cbd76d16c37dff12063f14f3d4dedb2de08fd651452e4c649ffff001d02fa14f9","01000000416f45da37a2eb66ef10175ed346e09ae787be1b0fedbd8f6596284e0000000004962baa7fdd54c0980029a820452d12ad5083a41e6a5361c4c5a855d1090769abe6c649ffff001d30b35efe","01000000a040062ca016d371ecf17d74af459ad720745fbfdbec9f30d6ffde7900000000f91f3a80c76011467c82da334774a70a4bd99d108ee0a509fe3a519c03533eec93e7c649ffff001ddf00bc03","01000000f7b07c440894df2937a2f68735fb23fe2202076730feed038587ad0700000000265390142a0d300e731da12f1e0e04be3a6aa2981a8eae54eb0659ccc1cfeeb971e7c649ffff001dbee5da00","010000006bf86c14b8646eb81fdf945c43ad6a660bbdb88b9d2f9e01331f624000000000f7c33e73b4e08429813688fafeee6a4d4afd201370d7a11c484be8e7d176bea87fe7c649ffff001d32624200","01000000121ff92c9863150a80a2db29260ea0170f5d657f14fe65ebd69ca780000000007e366a1a6e40c49db5ce72fae9535a938886d583370d947b0ee172df3673057104eac649ffff001d0662608c","010000007eecfa5b6bb8e354dc717fe3b1409b80c7b5a3abcb5794b084169257000000001819e72d4c217f9bd700c313700199f3d84e79ac7c0e20bca14d51b71575993657edc649ffff001d22be5740","010000007968c14a53740d937273399668e457cac7106f53e6cdc31031090ad50000000006a6ad881ef894398b83e379d0b2e5e91c8ed6df17ddc05b9b358c85e8614565c7eec649ffff001d2e28e35b","01000000dfb97f4e123df2c8c24374ad6a2d726e23d94f2868caf321faee1e9d000000001ef2ba2011f5b4db7e791a143817a52319f83ec56db53008fac63298c44a223fb1f3c649ffff001d384d6d50","01000000194c6032d538fe4a9b4a60992356951ec9c93a2ae2ec112c4737b38a0000000045ca9a4195b92173c8f98f266522c3ae7811adaadf78a2a50818965dccd9448754f4c649ffff001d4bd27401","01000000197acc16869a86de6c43f2bfcb96f785053be8b2d6895e0ee431aab40000000022d2e07b3dcd2c5b500dcbb4899695e2a998756466b0a7b508dad768edd5fcf22bf8c649ffff001d1bfb62c5","010000007af5bca065483319474c06f5aef56fd6cfdf69ecfb29b0491223118b00000000a6c56cb11f8067b01402637e26f5368221da9d33cc333ca0d5474fdbd0bfc9e8a8fdc649ffff001d1cca1d21","0100000073b12317368da1b5c7596574250900238b1407521cb3249b421e8f3c000000009e2ab2b73aa898980cee8630ec306085169760fb9ae4625724424188e5dc0b870f00c749ffff001d3753d41e","0100000082bc9107114f7914368647a8423213d633c1215ae4f81cd1fe5aa18d000000000570de56b50f0255546a5f0e86700ce44043df0c9a7b9b0a85f5f2c2700e0c4e3401c749ffff001d8fec8905","01000000cc9776bfaf027bb5212fa324b33a796ef1cbd361196623395a036bdd000000001e389e212490ae332b8a9a107e4d6f3383cc79c201bf8585879bbe115e02c0d7b903c749ffff001d8fe22f0b","01000000fbc68a12a12d0cc2e14743606783811f5500c8b93cb66b1f03dc8e7400000000483f19e42fc7dadf307633b8ce2aaa1f901619e5eaf5049486f3c6998abca9fe5904c749ffff001d33f5d8b4","01000000d2adfed4b5ef5a50802002d2f9fb8f0f1574e35fd8ad89ae185a0b0600000000d60a258d8ea53de230e76cb380135b09c18ff92538dd26b05f62fc6b4f4566735505c749ffff001d7622af04","010000008e89a5658e279fbdb5308866503ae81891add13abce504ee34b53ea200000000a17ba8600f337b5758d90735efccca163e74fbf64fee71d5348973f80b617cb57f06c749ffff001dd30d3a02","0100000060bbbbcddfe1b2146aec40b936c39e6aefe5780b0d1761f1e4d4f487000000005865aea3dff449838fcd351e2ad465de2014e26c5e5280b9fe5d07a6c9c0b8421507c749ffff001d1af4dbd6","01000000d30f073c7c45d01d983eca2d217f81672e7f7a1f84d6f6aecc25ef3b00000000371cf72805caebf7f18fc6b5e03d82b821a8214fd48f936486b4edd84b7c070b7008c749ffff001d1c7cc8e8","01000000d699fe3b96802df6b4f6c23162e3d850b62edb2f77f0de0b75319e2a000000006a756c1c637e41287e35074f87069d684ea9b3ca1719198f94bec6278cc6287f740cc749ffff001d3670b640","010000000cea0b1a656d04b3c0276bc55187fdc315db2094786e8ca03c81b9b300000000e4c806da0426390e6b22c0ef72f6671a49414d2df9fb2fe6bad7912482314f61240ec749ffff001d1ae749b6","01000000d23631a1d56e3e2142cde177376bdf2111668b48ce65034d57068f21000000003106f724b1d2a50f5e3869250b6b0c5713096b263f7c2ce612edf29d951cc38c2a12c749ffff001d31476237","0100000025ef42e2383e5ba2a2d8b8abbfe6fa5da1e5bfce4d887e4199de6e9c000000002e9b4b84051e42d480f8b0f95044c3238d48b1077ce580b5729cf11ec71e2f673c16c749ffff001d29b529c1","01000000ee35153b2730a5d6b346ac20889e65e1c40471efa6cb5df7fdb931e5000000006325ff07df5dd988e1b1325bd0aede90e587a72ab11503a57489f35b9332765bf818c749ffff001d199ec1ad","0100000024646377a7647581d7fa9b5bc86284b35246d1db5e9e22542e1478cc00000000ba53be4075bc97d4924fefdf87d75acd362abf53a1bbffffa35b327f3ac20280471ec749ffff001d1f038a5b","010000004c91729496a52ff8c8fbd3972b50415d468fe3672f39a6572e23890f00000000ffaf020bd9aa716b1e7536f98ef8886892e1425dbb9e16f4639470b6478fdafeda1fc749ffff001d2285702b","01000000599e1e7e42ff030ebe7e52ef422d9939cd2f16deea74601b35c4917900000000b608ed3b86f6d4a862643c18b5915fe8de8ff734d0b5aa063832376b4c8232849423c749ffff001d073aa535","010000005b065faaed4f83ed9baf35bfdac1d64f037ac0fd1dd870f7e85fc9eb000000002158da67c1b4be435e68df8df3c46402469b2d246438b3f442f21e953b78a34d6f29c749ffff001d32179b38","01000000152ecdbbcd2e1479a70f751846fd96c00c9f53d88ab8351b5df66f1500000000068d6f20b8ae4736c63cf3429ceae80ff4a9b53912d245de165cd31060657ac0ad29c749ffff001d81327d02","0100000099e75e18bba78cabb0a185b2a5a8718ab9c920eac081614690e9fc6400000000171685eff8c19a73e9587f418ef8e619c3eedb53ae5353251f5e99cbc03fc0824b2dc749ffff001d18f7741c","01000000de3418716afa013c5c4ae47d55e1e4d644de9e142607766be8bfe155000000008a034633cc26b8f872603a949bd64e2d928da6ed98060f9451c2cb5f90fb9453502fc749ffff001d028f65c7","0100000030a5190a5483919027357d1d2095677dfc564406fb146adc9c234fa1000000003a0426f6590a7e8acd4607b89b068ff9a76df480049f1220112f5a251252d0a89e31c749ffff001d31b3922d","01000000486ffc309c87c4c4b3d666a9b7a30bbb8958a537460560330ed1bbfb0000000090a0184b5606f0184a3eea3ceaac40f7236f091f804d5191fc137f76059dc3769a36c749ffff001d3750081a","01000000d9642ee262d2f3272db0b2532fa9648095d12aa36b98a42d50c5310c00000000b39ec550d9e9cb2a47b82c5c4ddc50ae44347c2aba05b0d9592464b13056fc9aa839c749ffff001d3340cccf","0100000046489796c19a738c5087a0ec71955ef8f7fd5e0c9346808b5c7fe9f50000000030abf5664756028162859a6fd3664a274467c9733e78fa303b455b89a6823e4b313dc749ffff001d070c89d1","01000000880345791538e54286383c9b686ed035951534db064ec9ff0ee27f0b000000001adee5c6bf9b8b0967f4e51286f5678610d51ca4f005331397645d15fd9441193341c749ffff001ddae29e14","010000001d5215f436a8a1efdfeb800f7bde06957322f960c6f178b92f255f1c000000005d785548b6ca7b70d8a62df969e6d7a13f3034670cceb0692bbcf3c44c9cd5b96e42c749ffff001d2786080d","01000000f338bb62f38a30161711d155ff2adefb3643fdd5b2f084af4c6229d5000000005546b3d9171be63b9b30eef65f0286b29eebddb2ca44ffb3ebc2422ad561cc84e242c749ffff001df81bb902","01000000a52fb02f8e0493a06d23357e7b9a71a2a95bc046a4f8a9913abf82cf000000003fd933cc2b333d3cf0be38ecfe9adb7c4f4bb76c8d466044cb8e2c153ff5ad5d0c45c749ffff001d1efcec2f","010000008baf02044b5be9a4431230c5fce64ccc60694c020ad003f15427eb87000000003e6a4937f2d6c8304e270cf68a31fca8fc28eaf35477107f89bdf155137812e2be46c749ffff001d32c4a36d","01000000c73e9e79c2200d6f5cc827c676f063223ef6636ecdf6d1b93dbf8c9f00000000504578ef85300371506e5a9505f68199aa5b6e83f8eced5daa214ebec9b21e23fd48c749ffff001d2c8ae901","010000009f4e9e6e3cd146f80a656aa7b89e65d86146f2a37a08ae23a7fba74c00000000ca780d37e9734499daeb20450598e4f3d60e98f5f270f5f7b08d5ebc7f71befd754dc749ffff001d281faf56","01000000a4f9c73fb5b7619ad98836dc1c97468c67e93e1073682989e8f83338000000007a176007e7da834b8fca13b63683df8aae267cd3c76a100f3ff88679b3668be2f44ec749ffff001d1e2cde03","01000000d9880d3f56a8f5cd3d51f7a705d353f7d2e8bf18f462c3cdc46b079800000000906e9ce6a33bf4b22359f1c92528d9ba1fa83378571b973915eefb4f49468ae82b4fc749ffff001d0995952f","01000000e906c0dc3873e7711dde37a5d99ca60e94f2a46350164fae21107f0500000000c78be4b583eabab957aabb8e6096ac75b32601917c5fb286e436183781f25d731151c749ffff001d05bf4456","01000000d17cf521c5957f521100c9492fe6f838eb5503ba1dae65d854014f8b00000000fa532d2f5408c9f27d90fa0e3449da048c44c69c1777daafb2d18b82ff04e4d7fe52c749ffff001d390c1125","01000000d7871347ea98d22ecac92ecfbf2cd96b9df3316f82f74c5dfa8b7c2900000000cd26805e4870edd9d5fcd5b17e4ecc7aa82e225ef1480041a311ba554f314eecba53c749ffff001dfe9fe303","010000009284f86d70346832e13f61673c0f7ce77c18e9f46cd9997f7c82beb000000000c02f3a9c92f37d1f5ec3083b993db079c94afce581ee6d86392ab4b35986e4920055c749ffff001d25735f04","01000000ee37f9cacd14fbc5c61b558c860bc07bee2422562f904bec8c13ede1000000001c4ad06f52a715e17e9a631e4f9d6d5b36e9af78c12fcd1056843108a83e5549ef56c749ffff001d2eebc605","01000000dd76b6125173aff2b7687d4f22c432516f65dec3304f2bb492917583000000009fb0b5ba55565f0f66a3e0e826d8c0ff5a14654128341030b5ca64363fa4fee54359c749ffff001d2d84bcc9","01000000b11ecfab8e7eac015a8392f16027b9830ee80503b0b119256bff917a00000000639df425ead90743f7aac97755e19649fed17327eed0201fc3bae0ed6da32c0fe65bc749ffff001d3801b112","010000007d02c00ef254a64e68036215d0aff1596d2aef330306992f49ddcb3500000000835fcf529f84ee890068e1394444ed5bc038d3f7868b6c9584794a87f1e804b8285fc749ffff001d1a80eb53","010000005214c3af9d6169b8c65fb76b6c1777c9f9b828741ce0766bc2fde25a000000003a20020cf42c2a8adab1bb066abdab3393554b20dfc10d8a7f8b373a972766f0fe61c749ffff001d38fbb1a6","01000000adf594d721e663ab0562daa730b610fb305ce1c5205cd56b9ffc6a9b0000000019bef12a5bd1acd5bbf49019127bac8451bc752fdc62e18bdca96fc82679d035db65c749ffff001d2f0ef4f1","01000000781a6c3a34369e904962c57e02cbb36dff6654ba698434d278251283000000009b17bd984e03948b8ab0e5c3a52c7e7b55c099a468046c81083d27213ea6e4793c69c749ffff001d016c80e6","0100000049def58cbd670d5fa741bc92a0da99716216c35f1e53cfb6c6309a5c00000000874d2c610da0bd44e6301ec239ab391c591d83805e400b97f5420c67139fec129d6ec749ffff001d005ceb72","010000005517f2af9ed9ad82bbc1949c014767d12071b42020c2087d6c11736300000000f60d17c5531e44493650f79e94d57fada4cb0504a350476e480d2d960f716f5f8d70c749ffff001d02b9421c","01000000474512085aac2e89f3583604118abd1dce71317d10f9660fda4c77400000000068f39728c9e6e897adb5bd8ebd70887b3078dc150923f2ad76ed00d3849e804feb72c749ffff001d0733dd98","0100000021c5ec07db40ea037365583c08763fe1f732e38673652470cc83e23700000000e8f3b08ee47e87657d81244f3818ab324d16f951b2bdf932cc0154165a801d62c177c749ffff001d206bcb17","01000000792a030589e430a73549b23416ad330b12c021e69f2e82e534e966ab0000000096d1e47a62b36cd08dd850882ce25318c52d1ea6558230ee7c45aa7e45ccba87d378c749ffff001ddf4b4905","01000000e475fbf391b5a34b0941e3549c97e53e05b6b66da24aee75138e46fc0000000044cc33b35334f589c85a75563a955a2734825af8059cdc954902e454696a3cc8037dc749ffff001d5a4f570b","01000000abae3bf30a10beb6336820d98f46e681941ab75f67eaaa1307be100e00000000cc73120bfc1c0faf9b3a52b0470c384ed757ef42f9ff010e86069e4a82680356647dc749ffff001d38a610b7","01000000746b62e7d04e3318758b5b7a4d857fa965a2d7f81f0e8f0335ce737600000000fe1a6abd8123e1b6deac11185b399e62d56a5dc7f154b8acb6a8cc0349f20fc1087ec749ffff001d9fdca302","0100000078872c0505d1ec0c78c8fb509bb59a6e4b3df1c07425f228e649592e000000002795d5144f72ed500cc378568cb4e9d542aaf725a6b94dfdcc351c89e9fc95ad7080c749ffff001d18edeefa","010000001ac13ce8fd08cdd2b1d6905670d38c49562fa8debfe21e455dca16fb000000008663a833d71d8eacf1165892c0679a198d2eefd23011d610661fe93ec097a98b4782c749ffff001d22168db7","01000000209f936e6156b101cd731be7b598d858b3fd93d902ad862392d6962e00000000054135f9ff7f1e350d3cf5547de84d20b218abea6e1dd738a61c0e901faf19ebd483c749ffff001d393e0ebf","01000000b97da5442cc11c03b110e1f1e729f3126bbf86dbf15575d8b00fa63200000000a75bf1866e21fc757792d3d586e485a7ecb45a08f0910e64d4bb7bf2dd0024511886c749ffff001d297ba9cb","01000000ecb08adeeccf996820f3379bf01697e98f01a4ed60d8f8ed831a104100000000fb6d1671b8d4e8bdb55a843a3fe50a99ff1491431692cd9227cca25b38e670b26488c749ffff001d3442ed82","010000008cb72e332825b5ab026f4a94c1bbc6d0977d285126c8537d83666e9900000000e94d7bb12f55308d38f468238e7f1bc45ffdb1e27602e5692db0f59a14a558fddb89c749ffff001d334f1107","01000000e0b1c22571d741070fc758bb8f5837ddf12f64b8bd21553eff0a798d0000000008ca1e3182afa15f4d3792d3853190e0575efe0575897fb0236ca91baa1c593ac88bc749ffff001d20f6c012","010000000e62dad93d73ffc2c8d34fdb3dfbaf62dc2381784428a19d2698c706000000003d2ec52e94ff52c831a845e1a7ab039ba580f625ba2e0fc0a39287521d4032ce908cc749ffff001daea3a703","01000000f045f2d041ae0206fee25b1752ae712cfb7b55888f78660029caeaae00000000bb27cf98cb919c0f2975f1e3b0d588a20fd5abb10a761a2af6157288b9ac2303f98cc749ffff001d0268f800","010000001887bb945726390c3980e89310dcd40e3082291b03b5c3405fd9d2c9000000000ad467a37864f886addbabc3316a0e7725b6a803ef3eb8aa5d80b7f2e771bceb8190c749ffff001d095cba11","010000001ff947378ddd4f77722861e62d840654b955ec928c6704419b5f2c26000000005b6fecc319894fd5d0c5cf12623ee2cb58c7b3c7ad26cb5ce297fe039cdfec299d90c749ffff001d09ae3547","01000000bad28df0a172254f3ce36650166b56c0984b72baaee4757cd26495300000000081cf36f3dce7545a3889a37aa1feb89ed17036e315f6f88f0dcef9924f3151b8a996c749ffff001d2eba6ac9","01000000636367d426bac902d4bd102dfe19055b93a7120740b7e5d06a68e0d80000000057812c12ab7b7b2044770d08ffe95a97f24c97a14c3ed42a3e52ad0757ad84cab796c749ffff001dbd650400","01000000519003fee190100c63796d8e5382b3dab9d4a18f1d75a5ee597794e60000000048f8410d9644d4eb769c36b16ddde57826132e4cced558ad7059c7bb436d211cd898c749ffff001d340d0c68","010000002f22915751d679acafe4844bcfb7cccdd743989a1326327fe73c0640000000004fc99e916b90928dfabd1a3d151dad1268acbd76903267e210d8068b99971e8ddd9ec749ffff001d1898f86a","01000000b489ebaf55e8e45bdd34c4e4609b8843d50f958767920237d673f539000000009f477dd1005efdc4fb50ac477205e407d77ac2c4547e5c2aeedd9ce815a73c9352a0c749ffff001d3c8b2c09","0100000020aa852949c31f525cdfa45d1b5adbca54a2502771cbdbb2279422ec000000004243fdee5c4c279db8e8fb6bddba7b29ee9c3ec6a1fa61dbe090a901ee25810456a3c749ffff001d2d27f688","01000000a477bf4050876556cab2badc626e8d30b86b74a800b38d709c041a110000000005fe8111e3943ab22da23286b5e5b05e6257ecc786564d5fa7d8f570a6d942406ca7c749ffff001d01aa64c3","01000000bdfe7051fcfea08e110f755806dc2ea446df80f9b0e0e1b0e80f94df00000000fed77e3029130c4c2dd9479f8f7691b767b4b9090cda2d291020b62fb53ac8b1ddaac749ffff001d340eaaf7","0100000044b5db9c66f1a62caaf189738f58fec67619f002c7445be41c4f7ef70000000080efaf2b38bf9e6669850f6ff0d2ba1ed2ad1e3b6af3f1893153829c597bc38c18acc749ffff001d37f8e505","0100000070be44f5ad8140c5480fd6501638bb939de050db536512d01559457e00000000a4bf1de1cd8616eb49b3614b867cb5c1d088396a8475cf0f19cedbf4895a987216adc749ffff001d081fb171","01000000203e135d4fb7b1245e849650f7f1754088cca4878aa31c0373ec05950000000042141c363596618f66274b63992e3bd5e00abef4a26474a09da0df72b934d7aea7b2c749ffff001d1836771a","01000000bec2abb6e1fd050c5787def925fd5bed40d8e0219d3f605b4808d73b00000000d512dbad5e688802d7082ccf16af9076bb3f8fe2b1b0f279b91735f8f0a0a3ee23b5c749ffff001d0660ba0d","010000008085f893ea7b412652898aaa9ea8d0ca9dc62696c35cadbcce36667300000000231b4facb673f7d0e156dc659a772e2b07a2558696649bf6d62cc03409f277fe41b7c749ffff001d289e848c","01000000a855f84aae07a30eb2cebcebe2280499855ab9869bb4b7303fa63fc30000000055653f56c3b37f4049a770d8337a2c20bec88d9073c47a65c7e08c24eb3a0c0fceb8c749ffff001d1d16a633","01000000f827042d1cef58347ebfacc481a7811c1fc648efba363564e65ff6c900000000c7c1d8c69bfe7b450e5dc751214b0b5399cbfbf7d4ea6d21989a1fb806f5c7f201bbc749ffff001d6e268808","0100000017b2f8687359fbe48b3517c5fb5885d402770b80452724a7da5a98ee000000007d8a2c539d177c38baf8eb13d3fdb7556ca331cb5fa8034bf917ef24e6174739a1bbc749ffff001d15421108","010000002b1ec7ab0affdc013d777e1d6cc5927f84d4ebd9d1c0194a5dd197f00000000039c8cb099d6f53af85c4151fe58cc0d020c91a678fbfc7eb8d4df299a05f5a7b71bdc749ffff001d3639e366","0100000083be5a3de65ded337afac69f392f51edd71e4068555982c23c5f01c3000000005a58af51857cf638ba2cbc98bd534632ae52a337ae2364203cd66a49093adc7d92c0c749ffff001d5ea3d611","01000000fe23f37c51bde3dded24566850aa2be4f7b239fcc9b61c8ea8429f470000000029f666ae4153baca92e6eebb47f53708d9fbf861fc593c991a8cd47eaed04289cec2c749ffff001d16d3defb","01000000a7076e49c90b75783de2e4919a3cc8a8dd5b6eaf6eeb05eede63582600000000d10c9263d73b2e4877547021f16dab5a79bdede76aaf0bf8da1905f9add2b44e29c3c749ffff001d2c9e7003","010000003fc52e17532e22318de0f9ac1891d993ff9ce72f2000a66f1d6228f300000000305fddba6c392cdadbd20513b85769f78875a490ba5ac78a4a7601d6b4ca5062bac6c749ffff001d37e5604a","010000004394d53e206a5c8a5240efb589dc7aa7f1969da238a3a041befe75800000000032882c4fabf96647bdbc546d1680602bd2b3a7feb60045745894d48423afecb121c8c749ffff001d0644abc0","0100000044024bc63493f8d96723cd193bcd8d888b64260061dd1d632e844ae7000000003f3664cda5b0e39b580a9ef37b8e6c718b3894885e69ed0be736d093cc2cdc5e30c8c749ffff001dbb8f0100","01000000c150ad77dae4cc62f083085a1c306233661d98f2cd1176ea2528b3cd000000001d4effb0fb9f9c3002089f5e5c156bd466931e0a1b3c6557ce4aaa0b5da6dfa199ccc749ffff001d3573308f","0100000023b07cc7e334b009ce3b9ee0ac11b98d8d667a231c4bcd878ff384ab00000000e5efba6648efe2196a382230179f06ecd1091e53b15a1df1901aae5ecebd0063a3d1c749ffff001d02bde274","010000002fa379cfad4fdd9927be362da75a7b6782fcf95d185c3883c6aadb960000000025f56b45acb19aa0352ec1b25267f7bb90f24474b51b4b949cf8ae12f39a1c7d44d4c749ffff001d214e6986","01000000a55838f3ed5250e195423f8e87fc83994891aed1a46b398f3fe0310000000000b4a91d3eaa95b2a49cbc688a6a5a67b22a5f1db0af89a7345f5d547fbc7a12bebcd7c749ffff001d23186c70","010000004569ef447ab7408a3eff4664ce78e7b2fc3658947a083157baff58c800000000c1e779d333359ccd46f8e53105d23e5d3fe4478977297c01e97df7ba1925845f59d9c749ffff001d2db45544","0100000006c8020a0e962b6d0562a6f5c8ac74e7241161a890e7a60c99f5a4eb000000003575f1d7439a1bd69fabb4a5ca6cb32685f6a49bf87c4d7e99c94f0dc8fe029f60ddc749ffff001d01f307c3","01000000712dfad154ccb295670caf1cfe59fda8e273f38fafc341290758f06e00000000d2ca41e9bc181474413b0a1c3f5585067ead82dacf7c153a050d4bd22772757ea5ddc749ffff001d4160ed02","0100000092604d129ca9d4e5456cb358c904b9e251ad853235f10f7c147d56af000000003beb6a2ba3ee033a2124e4b41716ec56b504d2213bceb261a602dff1df61004307e0c749ffff001d3531bce8","01000000719e8be4eab8ae36d6114e9f0e3298b7ee14fb242c03df9b154bc23000000000322c17c3d9f2b7b9d2221299bc50c15a45435d89d0fcd4472e0248371930cea9fae5c749ffff001d29d72277","01000000b9b7ac8b649814e9234e68be420a2b149f67295051e7d2a6aa1368d300000000641f07e13c0fc9ab7d3c637e891df02fa2c059f0b12f70e5e67e5312283c5f9e66e9c749ffff001d3a19e8e4","01000000ae20bb382c0e352cb0ea7c7a5357ac9c2f3ec286d9df0484354701f900000000f1fe379d901ec0adb29707cd5d70e0c8ff9b12bfdb456c343512e621483f124042edc749ffff001d2270300c","01000000a771c66343b3a4dd28ca6ff6584b3642ad5cd177cd873edaff0ed2fa0000000016d7f0ab3384a3841352e597e8dc8af30e1f8242741f3191ade8dda1c528f8f0e6f1c749ffff001d2dbb7240","01000000dad23138aafc504fe5c5cd1fd57e005b8428ff537e1490049c3817e0000000001837255419ca3b5c65896c2db0f599a699f1cf00108f6df3dc69da11b0c854cd80f3c749ffff001d3919be51","010000007e9bb4db01e9a8df1d429d8a10d6c6ad07629b3584d11f6806fc7e7c00000000b1ea5b445aafa5fc99b90d34328021ee2571410a25838823663f6885403bdb706bf7c749ffff001d241b0fd0","0100000031768a631ffddbae68d47d600798c0b494f2dfcb5473654a4c95ca4e00000000298da610007ea5df89b5030981b00a8a2bc0ff978f350deeede4e6fbcf4aaea639f9c749ffff001d0892a81a","01000000d957b418b97f2e2b4267c8e350259834a226de38904d6b6571ad37fe00000000ec9d52cc430952148fc5a6205e6b5f4d8dce44821529d3faad6b8938211eb1ddd3fcc749ffff001d0616fe9b","0100000058988b2ec9cada99617b153bcb8b970d11276444ecf83c1590ee4bea0000000028325928a84e5ddfff0c5c94c5fb6cb0311cfcf01bc02ea444cadc94623b56ca48fec749ffff001d3820344b","01000000dbbed4412b47604d30c3dde022a325ed6dd636acfea61f8868a60fc3000000001532d522a59bcec8b8158bec4c8521d4da64e59e6dc910048dbd20b147fb2dd47504c849ffff001d1ee0bb33","01000000344e0ee5c2b5c805091b82127c02efac8472173a9a0f0d18ac2416850000000046fea89a3efb47998997f201a206001e557ea871cc6e29a134e37338952e83703908c849ffff001d1c6c69c4","01000000b4bbf41464882caa79309a793ba66bba3128b673f210ce88b799c3a1000000008854b99ba914af972c5c533c036fdb19394655a46ac943b752a22b001369559c200ac849ffff001d150ba5bb","01000000a72b7ba7ae10f2351f6eb4043d893cb39790cc3cfe004caae803d25a000000006cd6ac65c9d49f443f983be3b835cf751e0e236f922d393184e1e88d6780f73b1e0cc849ffff001d8a79aa09","0100000090aaef55b5377c3f3f4585302d09a1480ded600c0b8772f1bd35a26000000000a7cd90691c5839f90b2862b134c02f9a079eb4109b6977e99a3db006a0cc95e8920cc849ffff001d19c1bff8","010000006b84dfec890b9fd966d61bb03bb58cc8a7f4907b21e378128b33779e000000005509e730b0aca5e303a3e565df75a14b4a132cc05e209de720a8da00c01716e4ed0fc849ffff001d35e2d30c","01000000343988a138b889c909f6627e8b0aad263635b342c0cfcfe336dea3c40000000047da8fbe4287f3efa3e7e65284984dc176a1eaba5d782067d8aaeb9803553868c513c849ffff001d15f92853","010000007c39389e2b037eee4c7016c1c104a77d01446b091da992a6ccefc11800000000530e4a077f77dd82e6851fa85d80859950f6556f399e4844077a1877856021359115c849ffff001d39c01f03","0100000005a30f67ab7cc54e95fdd079f5860b4da0ac3038b7038ef173b801ba0000000004c01b9ff92a8a6a3f05f863fab435a8d01323e681058c21daadf424c05b6c3dd01ac849ffff001d2418f488","01000000742ae27dbc2b9cf4b22bd7c1f07cb19d3979ceb448584eceac62e87500000000f1c9885a37dfab08cfc46fce2b1a4e53bae46da851a609814dedf6e10aa840ab881dc849ffff001d1a4851f2","010000007eae199b422c0e6423b7ba6fbbb622d7453e9c8f19fcc0b8248c7ec4000000003def44e32ae561c5d2b66dbee1a80e7dfde92271d43ce3f3f250b09a64ab59146022c849ffff001d2e40726a","0100000041606707bb1205e7cf2fbacacb02adcb6126bf917db2b577522e974100000000b275ef8c3e9395b5fbfdb49d0d042be4839fcefbdcc826d04b307fe12c65a718c827c849ffff001d238dd144","01000000b28dbc0ac54fb048736611cad40edd1dd68f2a001ad96c0483c6c66100000000071cd25af00ce2dbd3d1cdc2ad0cdd874d42fa6c678238ccd61ee1095a313a553c2ac849ffff001d27caa5ec","010000006be918f11c73770f07492dc650218e505d5e49f5581e51ad700fcfbb000000000ed23980cd48816b32d5b55b12e07ebf3b54c745770c3bfcdbd5fe26e3175b10f32ec849ffff001d028012c6","01000000d75e7b213663342598d7bfb890ce0af597ff05b2ad87b30950d9ec6600000000319d259da4e52c4dd25c4f1549e364cc262a83fbfc860e6a0663612a877832d10135c849ffff001d221f61b1","01000000ed18c89b861d86ce0a2b801513af8476346df4813efe09e4014e04bd0000000071e3e4de3dc7cf43d8515d07cc6f159cbb30e0654a49106bd9d224be891928d19f36c849ffff001d33a1e46f","0100000032cd6a934a010883f4dd9f6365d8a501f4bf2bdd78fdf76343458f5f00000000ad5cd562b8b87fb01de8cdbb432c2d5cab805fff0fb74b184a29e57bd535a8fa743cc849ffff001d215bff6e","01000000f7fba195afab9b3f092125bf49e39519fe8bc6ab5515d46891f62e870000000028a5a6bebd8ab75963944ba014774925bfaa32cbe1e57329fca06009f3113fe52b3fc849ffff001d284d6137","01000000f6ce240d9ca62fb9f8915b91253e1303a97ea5bae9dc243a68c200a10000000068a175eee8ca93dde9be76ab6bbda2080b9f48d1e2e0c5060f8b71ce7874572c1841c849ffff001d3215d2c5","01000000042ec8cee3138d826280c6c1bf15262b8c4a268f7392b6a613811f9b0000000029e2409ee348f4a382622f9fdb1ac01f5eec61e877db4632e74f2463786c79960042c849ffff001d2e11d501","010000005da0e02482bdc8e4db76cea906e126ddcbfbcf25603aa971671438cc0000000043d01d9751dc9d1414958fbf4832090cb8247f62729fadd3fad3cb0503f37d95f045c849ffff001d26c51485","0100000000d9ca346ce990e5f6b9acada14127d53eff27c21e460832e547735c00000000645f2617a886c14be9230509a052d6a278fd07447a9e6cf57dff9f07e1ab69907b4bc849ffff001d178c5e33","0100000026366ead892208b55f84b3cdd48221c854ae8d44cc7707beec36ff0600000000f4b4f41b9e1f71ba0b5512bf738f6b510e87bfc2c4b1316197cd5de8ba4f7f7f5e4fc849ffff001d2703ae60","01000000acfbcdba68e8744c1c28bcd8eeb25213c48b7ff2c6a94f8ba6bffd87000000002ce969efd85f4977eece9f9f172de82b44c18398bfe03c6ae20b91d54c37ce6be352c849ffff001d02e59701","01000000b570a1a53cc1d3bc1be963f999df0af22c3f07a9462fd5197e214d7100000000ec806d5fc5a4f454835423359cd5c49bd8b4732e76f9f86d8367cf5a038bbd6fc855c849ffff001d3c7f8106","010000005475960d3f128f013b67e6460f07de5515988dc38cb6164dcaa2d6ee000000005fcad8d8a9ffeaa933229cfc6ce0b8439a6a3576c02969b2241003d17c2108829958c849ffff001d2ea0d172","010000003163d7d6191a37b6811fd171b9b9223846a0f30fcf70574ead747c59000000005c34b06cf4dff1df2a2dc8e136c7abbc890f10ef82a8ba2638020771e7644f89285dc849ffff001d32b7222c","010000002a6887225e13486a6f03751fd417a4c7cae0b2392da05d3857305b83000000006132eed5fad06159d316bf6226ff6921383ca2a256d3bc6e107861cd13a2fa7da462c849ffff001d28cff00d","01000000367e431b9367265e4e3dfcd81261dfe12533237985af418f6789517000000000ed07cf0634ae0d0386eeeb7e991a9c5afd5e9a7467f033a9092b752417da8214b267c849ffff001d08456d71","01000000e16dc99f562c3df656f2b678b8377984a714a8ac2ab67f4dca6b6f740000000091176e4cd00b38eb1a533d80a2d4a62dde6fecf78f69b06966ee7589a142ffd7126cc849ffff001d179ac256","0100000025431d86f74fb96d5da1d55fab77b63882d7c5b4dea2a3017529db19000000007fbb6caa607683b2e6bf42dad79547ede2e4d8e70497a14a9a056cdccd684b17996ec849ffff001d2668713e","01000000e21a1b9ac6bd2063a51f4edc3d089565f2a4a2d78e4ecf30a93b2eda000000005f7b48e5944ac2ad2ab9ba87137718cc0dc48708e0501445a2a99b35e89758928e70c849ffff001d289876cf","010000002692f5ef6a973a7a6260223738c118b92ee7815403ac1f8220f7a1ab00000000273fdbbf1a34099b3c8d8af06b83e62372f60b4174856a451da2e8071c59cc499773c849ffff001d2ec12909","01000000bd0a3e8ecd2f3144c1ebef0ec4a02ba89b0e4a53f118f0e2f98b60e600000000a6be9096ab3d650ba56892180e07e5d6a50417410b7b6ebb8aca3a266c3d6a921576c849ffff001d0109bdaf","0100000056b089dbc5fbec85e417d419588a2cdeae956e9749d34f2274c8682800000000367a1934d0f82fc7bea09c622b2f7c0d5ed98f9b94b14aa7a2a228dea970124b1d79c849ffff001d143f61c7","01000000362a57c7fd27f6f7c04f557ad28e0f2e90f86921712497fdf9471b8800000000114833c869284f92f3eee730f5cf32e4c824c2c6fa1db8a1d2be6a6245c35772ce79c849ffff001d50bf4603","01000000118e32a9e3cd9f9ad48aa3bbd83650542f303d5b23fe76930c11f0c20000000013a60420deaffbe70d00a1ef957ce42c0bc870617668208ad69f8f60012b9c82cc7bc849ffff001d93a5d403","010000004b1cbff88fa586e9a50bb6045bfe136d07e7e530d3d87d230158cdd100000000366d1b25ee16b3722e9f57b0f162d1524a1575ca2741284d204651e612a84b5b227dc849ffff001d1958d44e","01000000e77bde4b9ffbd3f11b68d211a95a1b99a8f5b2420697d1dd2315a79800000000826c460196ce3702f4daf51dfb485d3b944f7a1a3a71b76035eaa46546c76a9cbc81c849ffff001d24db3395","01000000d5c821197d4f25923fe47207820d9338390d2811a6038831b8c3e2aa0000000040a7a5f5d043ff90064cb63c694cc51be2a8542354314b0733619025fd37e8266987c849ffff001d01ad714c","01000000ca857128a0ee40bad6a78e0e53492487341b7eded54f3d9725c43bda000000002111927110ca6fbb5f01bb73f7dd8db164f19eb9f0a7234c7fb10087c3825d45c189c849ffff001d3679d609","01000000fc363ee931a151657fe10d7382238690eeb70d2f08e626222e481ba500000000718244713db6459652e9802720fe6e9d0917d0ffa476768b53a6f9f86a2bf0de188dc849ffff001d20f31bf1","010000003fccf12abae6d9b0f0e3e40437461dfed97cd80fd08491b29267c9c800000000125fcaef2808396886e49aca9e2816a40b64aef22b6354a05bfe76d318364c710d8fc849ffff001d23d3ca62","01000000390dd657ed8314329c36ceb8a477658b587b3370036487d6d0424b7d000000007e9a3a224f854f29dcce9187fe7d59a20a614d30caa88482fc561210d97142e38e90c849ffff001d17a5e493","010000002351832bd1721887727b7a2cf32660bacde6a4eb5c4f687209a6a77f00000000b9d89a924309d99f3103a84235bb9f43957ce378a2265046865702983063e8c5ae92c849ffff001d3a6d200f","0100000059b67d9a292e8a3536f1c96a85a7a5928ac405205219c8aa0281628300000000f1b5a8ca7b47747fc8c53c2510e8347f3c7b55b7993166cbea09bd3757422ef12a94c849ffff001d2c828bd7","010000008f87e4f09014b9d9495cc37280446464a032fd50466067e452ef4eb8000000005e1b80371d9061e41a4f0e31cec9ab19f50d0a58b138fce4e90da544c42c3bc0239ac849ffff001d24585db6","010000008da57276e2c6b8a42be4ed3119cf9584273c1cf16adf3162bcb104b6000000000f7f48d31c3d8bc5a7a743353cd9af3e29fc87389a204fb0a92ccb5fbc446f445e9bc849ffff001d1671008e","01000000b21bff82e56921d29f80d2aa6327eb5cbf96465f1bbde460d61060e4000000003636a233be517a08b750beedf8583aefd3e5c9ab0d6d89d52f04819f66a22dc5c99ec849ffff001dfcb0cd10","010000001fd8fc6a5003627ffa33b75f0231a9bc03130b2a94245102e4cba8750000000008539f85970bb6da516493dc0f67fa60a8399ee98d1add313a2b0e0e99183f1a47a1c849ffff001d20be3045","01000000895fc2159dc8443090ef2c3becd948676c28dbf82201b5befd48062d00000000adf495ac85096bc1882fd28cfcae9352632d79c5757a519e6c46ab2349afb0bb55a6c849ffff001d324553d2","010000003cc6490d78b9ec73264854df315d6b423d563847c45a74ce14385e2c000000002d4bfa80ed6a345754fc0c7ebc90e19ac8cb58e9c38c82d79c33385c3f08c01d46acc849ffff001d2aab1e1a","0100000041f8c13d3a213a7a442a476964dea41e8388c4011d3026d788968ba600000000d2853baf3857abb009b8bf3fe1bbf1a0840b6882adf8c10dfba3140e3eced35528b2c849ffff001d2d105a29","010000001266f3fa3cb11d93353184a23f91cfc6dc66d77f85776a831dfcc86900000000dc7c1c829912980fee817f22f877c87e3b74948f39671bc890c0ff300de3050a07b5c849ffff001d090321f6","010000003ff439f1783705f596400d136af6557ef389b3fc8c0c24e54dcf88d6000000001f32c60b83b4a56777217e53307ba441fa6d3799f1694a49748edc5ca8af3e0950b8c849ffff001d08325e96","0100000034ed1ffbcd3cb0c8690c19eb35ce666fca5c2df1fec4c8a6f39403b4000000007781a54f0b2ca9eabf597f2453f8d6c6c689f6ce6ebaf66605a675d53ae965af98bcc849ffff001d2054722f","01000000862dc1a2317b104c59da1be32456d58520dfa42fd04c9e5215c167dd00000000c98d63b96e4d493fc1a757e185313b92641e6792efda873dbcba0beaf84e9f711cbec849ffff001d384601c3","010000001e3065d5cb95f650a858bd3d80be9da9deb0b80eda29950cb9e085580000000055c724df9e5564fd685edf1a235d2d8c9f89d73be597f64fd9d58906a48214769ac1c849ffff001d38eb596c","01000000b28cebe4f94d47ea2451c7798069d2b31d37148a84fac98674c4527f00000000c05d45625fa800a82a138b70e0073cd4cc6441ed86205c33c000cf99c711119739c5c849ffff001d35656d05","010000003fa504505423f5007a5d38f6b03bfc974ee609a1eb42d0c9925301a400000000d0d165a1874076545f20f62ff6d5d2c19b370e8fbaf80bd718d15d6d23d7d4fd70cac849ffff001d1a52b78f","010000004ae24235dabb36001df2e569f19f5d1b8e393485ed3c6044ff29efe800000000669f783b8f010590db6bb4e62b21d29425b5b21f6f5c99db174740a557b31e4334ccc849ffff001dce0d0503","010000009261bbacd5df72be4669a10a3ace020af1e63a1bc011b9d955a1f4f9000000008dbb93ebad95a5379013bbcea2023915099b691d01a86987e004968e60bfe0decdcec849ffff001d0ccefe03","010000007ab856b30e029ea9376833622445a8f564cb3673e8fc50e8eb7e0033000000002eba8cb6d0e2f96aff0956117b7bf0cde8822a21184edc18a43ea7f3556535791ed0c849ffff001d333e2cf7","0100000096e7fb26eac2d4530ce949b34dbf67f7a6f7885cee44dbf44c1e170c000000002c923d26ee1b2c3e03071f67a1196e27cd9d949b882b9e0ef6b08c7ad1ead1cc3ad2c849ffff001d1a139803","0100000014e433e85e688c9bb5de6635953138f5f7e7b1bd5c7253661744cfbe00000000c1631d8c8042cc65fa1c4ca015c71fceb527bb619e5d5db7ab44d768a388e3bfbad2c849ffff001d53d7ee00","010000003236d78e39978b7840cc45ca8380e042ba107db6a3dff93a158e608d000000007754c364f10a97c696cd37c042faf99e5408f2435ab26b8872c09da71aa14955b2d4c849ffff001d340cb21f","01000000dfbb4833d1ff49717cdc302536e07237a1a3a896d65abe267b3e89be000000006e2ddda106d79440d216b499d4f4cf6bea7c5140afc3da67404504f5ed93266921d7c849ffff001d001de668","0100000068b1457881d7220565a58db0bdd3a5db49ab09a5a636573b08a813f80000000000a6495bd19b0ae85c1cd9b2aa7121fda22a7e61eaf55ff524b7ff9f14f4cded84d9c849ffff001d093d0730","010000005db6af4fb00ca4b6107e08b89348aafe62d5e27cb03fdd6d1b4bae3b00000000223f46bdb6ee64e6f6cda6259ac1770243e24c58450b9de3d43072830f27dc9404dec849ffff001d38667b18","010000005568d175739c21fa673a7e79b8d3addf32eea93e69193ca5b89d646a000000005f8095f7bba74b6a779905286621dfcd1e98bbb6dd772a9af30f839b01e9a762b1dfc849ffff001d2b85167b","01000000b71bb28f6d1feaf2d09e4956fe1fd6e903d4417c0d8ac4c957e1f68e00000000083761821aad1add1d4e81a1996b1416e7337d22289c7fa1eaad1fe8bea9d321f1e1c849ffff001d26c6f11f","01000000fb94bd4d3f16787af7e4ca828b0d7f93843db4fea36daaec3eb562ed00000000e968dce1f8672f5dcdd23c32c144296dccccf8c7a5fe5ae6a343ad5ccd97551916e6c849ffff001d18c9a5ea","010000006610fd056424badfd9c50707a53bdc297b3ba1a249f77790ebfc1a9100000000b35bcc5e124c0477a57cb3d8b0cb9bec5fccbe87962fa546c0174d80ec71eceeb5e9c849ffff001d228ac8b4","010000001ca85648f7aa1def1cc6315da41d561ef63b66558d75bbcb4f083b47000000000ce188c65f33087e5ac993b80357277392bbdcbb5c5af100c11d77ad5e5e270155efc849ffff001d24ce1822","010000004a42f437ccb47a67c976d3a2253deeda96546cb1130d8cf817d41fa400000000c8bb34b5bed411e8cdf842cd186434c4a5a6f24c250ca3296d72ea8ec6b512b6a1f4c849ffff001d39a47097","0100000048feffe08d6ea390cc5e92e3899ecffb1d12f58bc059547c9023a41300000000d5af7599e003c274ac4daab7bc01aeb88b6227fce30c705289e9d69ce66870dae8f8c849ffff001d31fa5301","01000000018c03db8bcebf9d8d46edcab93f89cc9711621a4c9307a1c354861800000000ba2b13ac590b81b9092c4d35fa815f912c23076a0ca5cf439965b52c7366ae9a30fcc849ffff001d9bb62110","010000007ddc14779ba6e5ba70758dd8fbda768edb5dc755e4efa3961a40ac1100000000038289a0c2b7237488e21f3d324d88a403c5674bc1b38a32a3bda85319759586d7fec849ffff001d32485113","01000000e9290b6674ccc516c6bc301202926c28bbec30e3bc838edf2362b3220000000097d210296ae24a87335e51772552b115da520e3630d9d246bad1394dfc5a4f3dec01c949ffff001d396e9079","0100000044fefeb7e07d0cdfbcda6055f1d2876c9c779fce010c796d26793afd00000000a7f4732c3923791255fdbec2eaeb714930eff8e47146820a7f0092102dee05c85604c949ffff001d3177b7af","0100000066aa2807b0307dd09884817770dbe09f718101516f46e25496b9279500000000179cb0ee1a0ea8f2f02b8085b4f6ceaf2d019243daf395b37174d9097def709d7307c949ffff001d00aa019f","0100000090acc34654c1f5624cfa7f19b58b85313e84d78945751b86b433c0730000000016602fbf6e17527bd3a5ad7fca00b8e608bf54e0d5b054d980a8330c62e7b7f9b109c949ffff001d02102f8d","01000000f06a5574ea506773be7af55f1d62fa9c7b8263fb1aa57f43017998d10000000038efe2562f91452b04ad28ac8cdc7ed496848fa8f005e21d6ae9b677c902900c930ec949ffff001d0632ca3a","010000008495967fa1a7667bc8c6ac0cd767a3a656c4db807fa7405c1f234f5700000000dbf5bff0fd3e82fdb8bc4621a705b855316292d961e53825a3bcb171aa160ee40013c949ffff001d18e9072b","01000000601f0203712727ed0ad6319d3f58fa95a199c800e0607464b9c77a0100000000cb705c02ad7f1f16efb8d2e6b444429c247290bc09a227b603c054d5e540d03c0217c949ffff001d1478d6f4","01000000b6824984f157fe4c7adeb1561d26665b6c8887873ece091b3da8dd06000000009379b6869a947f9b731ec522871aab90221175177c29d7fd5bbac819549a55c59b1bc949ffff001d26ec6612","010000006fbcbab339bef5a4b33573bc75a6c956f6902a948faea67cfb8d3e010000000001d7263cb32c507326b6b8a93be5636845c071eab2de940c6fcebb405e467de5311cc949ffff001d080c1d61","01000000ff81472beaf2e0279622e8cced5f0736f2dc8484cec2c40a17adcb01000000000723edd2bce864af3dc4ec574203ebda696fc98a3d41a30b1adbaec61aa49a81241ec949ffff001d2a205a3f","010000004a4df02b33f27f882b0974e21b557982bc7c1393efcf3d0651bf74a7000000009a47dcc01e7d607a7537962da459682cf745c1b44f2b3109b6e88270440aa9ce5220c949ffff001d328e453e","01000000bad8a149c66e73a21020ba5202e8dde22adbc9b3b6b10d80657cbb1a000000005501fae05ca6732c893af550852d778c7fd0d81be46ab799e0f8419aea96cc2c6622c949ffff001d090f119e","01000000138f1e4538d01fb3951be20de74c32f844ad1cab09e1cea838e4850f00000000c3de123081eaaaeadeea19d52a45847e9e1560f288bf9d3f47a80f686abc92d03427c949ffff001d18658500","010000008ae500fcf804e76101a470369864c56614430b46cb7bb5a6d57f84a80000000046dbe5afce6f97d87b73d70c430932a5e99b970bf24146ec4b010cb2514fbf3dae28c949ffff001d2e535566","01000000d6a5cc319e1c0414b28f7d961141d7ee869e6f79ade9345252e951ad00000000ee46a888aa0b11fa93b0e10c73d2f5e7db4e6f5184803bd7b5466e43fbb1646ff42ac949ffff001d35f603a9","0100000025ada21981641f20453c9fbe6253203b415baf176cf4fcebea3e70b90000000023331d780130d4f74169d663f1ff9b50cecb506da74ac7de8e935f12dcc78cfe542cc949ffff001d0df66905","010000006655f0d7ff6662687876614d63e829a5cb3385cc53c0f3c7c2272fc800000000b1a40b3bbec6bbacfcd5eafc34a6f7f42f1008dd2b64a309e65e855478ca85f9892cc949ffff001d2e95a31a","0100000049adda69a51f1a39fa0e9abd0ebf6c8c4a6b2374ed191dfb66e72b4f000000006ae0351284457892dc40b729fc951139367199852d1f76e154d1841bfd000f138c32c949ffff001d30312980","0100000065e6562463f3d54f4838597ddc702651788d8127221cd8ee2024287d0000000051f90fd295bae5c37a9da2dd5e416f7da3117b9d128d070beff9f62c5b0b9d17bb36c949ffff001d097551da","0100000010d0b622f063c5849e60c5475d9519fe070efbb4c684325091dd13f800000000b24952e63f10fe379f430ce5b7349cad2ac606231d16583c28b6993d57f46ec17b3bc949ffff001d24ccbdd0","010000003684bad742562d0b8cf98da0ec03c9330935eecb0347eae87a9a4bb30000000096c8beb408d33407fc75cb075dc2b38a3b133da2f2745b501a516f688d1714137d3dc949ffff001d23e9dbc6","0100000073a207122da9c4738d3e15cc4c9a530e7405fb37e3fe7375ca3d23dd0000000016253c629f2137f4b7c34a7a2fb59828c429625c2337509aea44c08357ab54a4ec3fc949ffff001d0e270c0a","01000000e7cdd54eebe05cafbd7b3f19e9353bdd35b7c9bda80f97fe16664855000000006b152ca885d1f5b719bc2cd9c6e5788cbea3a239aba49579515068833225138d6941c949ffff001d2d1b8fc5","01000000cd02ce4d6c3ccc24574a0b4df1548f312c6b068b50addf0ca59b4c950000000057122bd84d3e64bcdca7410bc3845a1c8b55a13228de018b0276f0ea939f2ac97e44c949ffff001d00b44a30","010000001540b12dcab1ba51799578e861542ad015769d7241ad46a5b9992b1300000000ccc017a6c87c2b681f9ab093f511b6a38edda4cb8423bf1018e2f8e3634d63d55548c949ffff001d02b64fa4","0100000040c351368d90cdcf5e028235ecb0dff383006e379526a19477cd4bbc000000003157a07683f769ba5eadb45e95ef0ab98ce9feb44a42a189eefac31963a303988548c949ffff001d0a529100","01000000e850a0c1cc1c7428b7950158ec4539b41b67a597507a06dc92ce552000000000ef1ddf0a06db13465790a2448d1dc94b4bbade2278e2004503b7bdf71a785afbf14cc949ffff001d280b8a65","010000007f7f1824348879bc27a00ccb361df93d0f8d314c64761ab244a2f0a4000000002c83c9a5ce55bc609b69018ccd21b905e9451a6679d259d6dd0a9eda4705d7d89050c949ffff001d3281d1fb","010000006202282a4a5d3a6dff5a50a9d772e0b63bee0b712b14b178d15349e000000000fcf58d8a3e0a9a2b888843bc1b87da477c102215241e08ae0583a3b552769e6eb054c949ffff001d21f4a2e2","01000000b072ae50b384fd8cccde8655fd330ca2cb70c76ddb332b75d7c762680000000009849c4820cd45299d82325011794f59e1f8fd6654a590a435b51b9a3c998027e057c949ffff001d3384703f","010000000d1ec0720af1e8b5952b0abd8b7f3561e2462393d84c57631a59584b00000000cca3e0c06ca0559dc0bc6281b07fa9363e05c2962ded25e7616d458514aa362aeb5dc949ffff001d36428fde","010000007f8aa98546979ff30f1d07fc397e3ac3d60a981af0276b04c06f13b600000000f0bd7ce4a7ab4e847300d857d43ff4e55a075b379da92b2d6852820ed273993f795fc949ffff001d78761f07","01000000714366ded3a0a633aeead3efded8ba800635b2e22d23aad6d4cc32d5000000008be3788c9676d672b6dc0c6326bf51318933264fdf9d7a72414728ffb712b7861460c949ffff001d1da9b0b3","01000000bca730dd4a2a990aa9780724ceed7dbee257781d55aa7fd9b43599a80000000096a5d17de2646f66f829093c647fbbc56f516805ad633e52bc582532706a70c0e163c949ffff001d2880c84d","010000002bd9ef2b8d2ac8eb71bb3d3146774381b4fdf9058ad926cf20e93e4b00000000552611b6f2aa7961f79eefa5ea2087336409ca7374aafb8fd5f8ea3782fcb36ab967c949ffff001d36babd02","01000000f5901c3ceced6bc3e4044389826dc1828dd1ea9393becb0ad4df64ed0000000095442be38bd461e6da20d9383b90975454f5dde393ae4eb983031d1edbb9a784946cc949ffff001d173f7b91","01000000c2f82a0f61b8bc84e595420c23c0a1b01de2883f9817dc3ef45c483800000000f4a7940560133ca5041528a6d7767b2bacaf92d250d56ee58612de094fb200e52771c949ffff001d2ba14c6d","01000000acf9e6de6909be6a0e6d96792cddc40823ba57e43fa902904daefb0b00000000608b1d77270111dba7038114a09e2355dd61321b04185ac0c955d388332a6fce2b72c949ffff001d3ea6dc04","010000009abde4247d52b871e04cbbad300ac08cfeccf157614fa549e165849a00000000683644c69c4472fd4bd247ee41f0bc594cef96cb20308330709cb7d46f3784d86f74c949ffff001d2bee991b","0100000029c8deee5b240b6a6cbda993dfa98886e7194157290eb2c1b1225b5f00000000628cbaf99b9a90cd7832ee68e3b688fb38a2ff8884448d64cfeb9c478b525c0b3476c949ffff001d35596112","010000005101d655fd64cf3805545d3b87a7a326849ee7be53d74e2e753b0cc7000000000b0f1c5b9234f6d8da213eb57534f337cf8291079f31930ece5b104d2b8e65168078c949ffff001de9df310b","01000000be45e6ea714874d749607b2cb6f7cbb53c0d6177570bfc9d6c5868d2000000000086570430d4c2748e58e6e8a61d23d2fe99ca8a389e30547ae49aa92cd85a43157cc949ffff001d091d855a","010000004fbc0b92cf7e98989fcd57adc0ed7f38e25d4908930061c760d419b300000000a2cfa4d434676eddddab450f7772cd9bf73151fb294170642055be34d8d70a145e7dc949ffff001d2a65281c","0100000092f07bbaa8cab5c94f5d5c96bfb5cdafe891a7317c1f6161359aa6cf000000007c08515bbec27c9d0952c37e060b75027a125d2861ed8aea4911383f89c964484c83c949ffff001d2d55c2e7","0100000004c642d981b53f3c4384869af85f4c7ca56370a941a264cd61f9e77b00000000a6af8d1a0de597a5d16d02fefaac48f83ccb44c4f0903f236a446e378914e152bf88c949ffff001d2cc0d174","01000000977b387b934f48bbcb9ed91a665299d3cb8212a33a3e40d67798d29100000000d3d7669217e65a2be108ded44ecebc526ffe5e2b446cda848b86bf1f1c7f07bc408cc949ffff001d2ed85a6a","0100000031608096f85924f0cc37c90ae2acc31a6f496d969162c7168365a59100000000dbd8ff98cd3948acb86e4fa7809906a98ade41ad32d54169ef4d54997d3705de1b92c949ffff001d00aecb93","01000000c07afd897c753dde1abb3dc820cd5b91a6ee5377a15972885fb0d2a10000000073a4c3f7a39f1bbf6cbe9f361284747334456ceb8df4442891efcc8db9c75d994d92c949ffff001daeffce00","01000000dbb9c04f95de21c954cdaa407de150da8f1afed4256c3c0e24c64c38000000002942393fe6ff1b1a2c54cc49a2e4a17f15958cc14de4f09a943393e2544089553c95c949ffff001d3eb4920e","01000000064002ef92b741cc262a1120d7599538a1a5b09467c07c1cdfd3b5230000000052261c3541c5f52e1412d6b6b78d9dea0a70c850bfc5d3f61c2632108e8825a63796c949ffff001d2f90e33b","010000002a513edcd439d5d30b787b6cbf0a5648995291a21b593e112a45764800000000a8a95f0f675ae63f6bc849976a5f9288085b1eb57b86a7402f2e1765c1d5f01d3097c949ffff001d8d96ab04","01000000ccd557479bba440d8ea2eb3be76143d1ef408771e396da38d6a9a85a000000003f8b02f41dbc3c56c6921e6989eefbd535bc3ecb77acb70a7eff2e8ec9e9638ecd99c949ffff001d32a5ca74","01000000d7dc610acfa0cb5cd9424b392b7540f839ed5b12902fb744c91e7163000000006d9d7b77e5fc110d35d09d96b188881c7ab86855b2de444a1eb2b73abd99f1c2629cc949ffff001d186441b6","0100000083c3748a8a3d649a5446a8cc5e4a1128e54fe05d32efa468319c81490000000059d1c636422047347b5d8c6ac27a3b924de170845f7052a3de54e3efe17922bbe59fc949ffff001d27245494","01000000d37464c612c1196c429b34515c15059123f1b27ab531fb5f07fa2e3100000000eb88eecd3d8cbf0c9f53a20652f2206e365297492bd7e64cbc1f690fc62fa6e4b1a5c949ffff001d37b90ac4","010000000a5c4e2664c61194d7f99a0cd6f1bafe77e59055328f87446c984988000000006aad6a129ee28cc7da51fe8956be7f825ef0a7d6eba63a5fd868efc1776a763beca5c949ffff001d25907900","01000000b9c014e13995f8a68676e081a5bb4f9b62bcc480bf48e6dd07112f3700000000a339e3a9e682b7937eb4878896c11504a2e633aecfb2dc5a025af22b32a6041bada9c949ffff001d2ecd8b47","01000000a8d60d90d73639919e8f6dd0bc95f78da083b62a9c4e77f792c9ee3300000000c51f605f4de1d3dee8af317d18bf129a15de67ba7c3ab285c1ea0e60104bf95205abc949ffff001daf1b8506","01000000f335039ff5b004350fe11577ca07de76c67535ffd3237956dfeb18bf00000000aebfbbb806d5db9b6447b47e7759b7a8b388173e3185cc7e1d70d5af5079e7584cabc949ffff001d3213ef45","01000000ad6b90b9f2a3bb7a6c3008d79d73331c0b6fb15bc2470a83d626394800000000f8a7a6aa71f2479e41e10e5ef73fff2d49748053b30809a4df53f1684c9c4c1532adc949ffff001d17c4b7e5","01000000637e5cf6f99e29942e778f94d64c86317a85f9ebb258a7d7f59b4de900000000791de56f81a92f03931c448b88d09050bf4608f50fb42819c96701bc1a5ad570a7b0c949ffff001d06c86a30","010000006d1255f73bac07ab02aa75f4914113f5f8b03ce7534958d1462273b30000000089e07d8afb16a26bc2a8d33f205c1f8426427ab9192a635582ad4e856ec80ccb35b4c949ffff001d1a88d8fc","010000006047eda564ec434540c679e6cf32f4b258982e7c31c7f3caee154dbe000000001325f88d388befee11ecee0575903439e2ddd30ac7984aea0ceca271635bfcdfe1b6c949ffff001d37419e24","0100000013f5c360c39daa5305fa10c911d243aa8d775401de5106707c70bb2000000000aecd76f3869960cb2b592f73a6b0e1e2e8da43f5663b10d7b1c42e93615ffa713bb8c949ffff001d17026b4d","01000000d94b7246fd6c6ff1b6d3dcc539fab98a3ed7c04f3813d0ca652e2d82000000003e0d69994caa6cf8f17dc607c8f2100a56ef403cc9a1dab04fa9ae937c54f3403abbc949ffff001ddd6dca0c","0100000070b2f1623ec6fad29b20699a70f9318abfb801899f63c782465e37a90000000068ead34aa121042ead92b5309a4c428ed00792949472339574acd8ff76da483376bdc949ffff001d057ec545","01000000f616397befc282b1704261601a6ef25a01673d7acaa01e799779fd22000000002b79fb84acfc0f766b92319781b523fb3e05e6e832f7e994b427d7dc5a8f51de2cc1c949ffff001d164eb6b5","010000000df716a58cff708abf9ab7db1459b2b63a22f2c5634812213599cfb2000000009e2d71900be4761c55803653ee64396a18bf695fec770a68701cdbd653827861cec2c949ffff001d31a82a62","0100000040cc416a4c3252cb517dd32b5c2addde4f66ee555eb1e3904ef58787000000000824ee776b0a076d5e47c6717970234ace699e27a6624bf7305f8f550295b74971c4c949ffff001d3687f106","01000000d1e01d80c28155396bbfc0c0911e2e7e8adefacf97d951570a0b649d00000000d159a2b55c12dddafcc7278dfaf180268fd46dbb0fc078a39341552269cba1d407c6c949ffff001d37597166","01000000f1d048888bf939de5b6da8a59f2eb42590eda4df59c4724e8356afcd000000000b0a360b1b970ba751752a0b3d4e4226039312e57f430dd30dcfdc9720540149f5c9c949ffff001d09bfed8a","01000000ffe19e041d00b2a5d6570b49d5a2e7e5c91a91ad2827f982d15a715600000000849f6e85c5528faafa0fc8287ed43f59aa69324903612616b0f992b165188b5a5eccc949ffff001d2ad98180","0100000054a4c9c5a7c19e0f80f5699adc4cea36d9791cc64f34e76a52c47cb500000000c331151a39304a671cf31f8cb587f96300f08169b7f1bf03cdfcc9964b43320598d0c949ffff001d35f38023","01000000c2365f302ac18f713f38478ea2638c1615f24ccf1bf84334a4449dc100000000bb0ab05593cd52be825b9f77eae7c994bedfc1b2fb0c062b421bc14a3734dbc612d4c949ffff001d42dd6a07","01000000fbf3ae32b05e81135becf3d766625554cb6f42bf196314e631ce1fa2000000009902ba85900d1efaaa10ac97d731336da73d06c2af2539c4402dc950b37aaf14cad5c949ffff001d20ef0a2a","010000000135fb7a362774468c1576d57f40687d0f4c107cdbaa8111d7e1426b000000007dd48ec31d3c5cbdf25a8d792d95f0bfc9f0393d4f683636f296dffd5cc514f517d9c949ffff001d20d47f17","010000006d1645d65db4ca1a4828d64cde867229a672eb4acb39ba8d7c11f89b0000000065428e84e5ccdd0c879f89a87cc1dee852092d51dddc3b1739c9707470f21e75a3dbc949ffff001dfdfb4800","01000000155fd7e60e214d4ec980ce20d613606d43800d2e3b9b7e1cad25779b00000000f5569bacb7c377bb2c06a964301ed08de1e58065d78c89418089cb66bddda33191ddc949ffff001d1ae03908","01000000753fa542cb1ed0aab21bc3bcc8765e8eae9d1bcfea4e346a2a9a52aa000000006555f15a045cfd34fa703f6d5138c31a787d53289a32c7504bcacca5c0b66a9ff6dfc949ffff001d09424fb3","010000006ec8279d20f472e589426fe25ed1c906c1e0b26abe004d2ed893b2b100000000e3cc8b7545c48090ab2ac5650201bc84b3463577bf7629b099145556ba4ec67fd7dfc949ffff001d19745f00","0100000034358eb92cd36f46bcf6b02d7836726c6ee007d2185abcaf94bd06bd00000000b887771044b485d5291636fddf6950c850a12cedcdc8f8155204871cdfa27ae64ae2c949ffff001d0888a603","010000005a99108c40167efd5096304a6168ff335c9acf7dcf54e4709b965e0f00000000087a49ece69aeb7a9b83108635c31208853b5db3c5ec660f2ab74eb148fd2562f0e2c949ffff001d157e53ed","01000000d8e7fc7f61a7b8eba8f3df2a19a75366820302f161e5ca8f23eefcd100000000012f7eb8a77e1db0365086a7e87196f894e8e3b9f63e490142e3f72acd533d5f65e7c949ffff001d17f94c19","01000000abd92dfeac20e24101816449ec75f1ce2bfa2259c00dcd68cfb3c527000000007b8543728a19e912a15bf03648fa4db9fa8502e84f3ea0521b231e8a9c38656429eac949ffff001d18976b51","01000000358090984c96276e22a1dbbf9f72bdc0a7a9eef1ce79cfddf6a2b780000000001e9dcf77c0fc704e35fe4b068696f324ac2740009a8a8c4c8f8539d065c2e9e60eecc949ffff001d0435e12c","0100000063b658b38472a9f8307f2684ab021f81217a6abaf856127f2b1fbb9b000000000490dd3eee8e05b8fbb848fa246e03512083ea992f43a4d11d5e5750f6b10bcfd7edc949ffff001d07ac1b21","0100000047d4928094e1d3b331b9d301ad2a662b41068a6ed8c63bc3a12d5e5f000000005e69dd732c63681f7cd1ee6f72b3e586b7c3298596e3ec20d61899364ada95a5bdefc949ffff001d0cc14009","010000006cb9368523094561d4c5e8c7fe1277f44a32da86ee27aef7400089e10000000002bd2e900960573723fb1c8909ccf295c6fa72a595f31c8643864c9bebb29a2cc8f0c949ffff001d1b9d3fe5","0100000007762fff2c6054d60557ba835ea5c309f556d6860b891e0b79fb25fb00000000ee1b23923cf3efdf5841bb682f83962daf503a81606fe7c2dc1389d440b785a2bbf5c949ffff001d03483692","0100000090c12a8bb5b86cdd28c6cde3813bbd4a04be8002fa1c03b3f73a197c000000004da70e982f44664de1e3d736979736565b441913ee19ecfa748973ed82ea1aa90efbc949ffff001d00fb7efe","0100000038fd88b7a10618ec661b268b0fb1fbd6ba4bf557be3fd667029e634a0000000002bc88ec51af2b8d7d66f42447ed407d90424e09db025d9332f09b1de94bdda90dfcc949ffff001dd0fd2104","01000000174ece6161180c0b3c50327cb721dc0e9a5e1b1a231ca5574de4acae000000001454c4989289e977d178721aa99ebe0f8fb0bfb0b1a256b7ac0a148e768436a3e1fec949ffff001d3557feb3","010000006f15d314f9344143c802af5bec067f1846b0ac9e63ee4e7fcd3eed4a00000000a3074fc0ef17e6419ba523689fda018ecb1dc9f8aa8178303e0784bb691b66f34401ca49ffff001d2eadf37f","01000000da76309f67e25123dfafb90e677bfefbc290b70da1cc6ba0c7ca7d37000000002c13ac6ca046003bbd83f2ccf8fb95dd9cd9d8d29abe46985431c131b28765314505ca49ffff001d239867e1","01000000ddf8f6e3c3c785f016387befbcc0a825836f2af7412a5e7cd2d3b30700000000247ee0a65f432bf509a28b419c13a8620c761329cc3b40e0010c5f5f9b3d83958708ca49ffff001d2d5c8181","01000000392d3e305587b56e0847e8f253c69460fbf18ac185f736656c418a4200000000a8121ca4d9adc5e4dcd83edb612523f85d50765250703ee771e90e5fb426ff0d150cca49ffff001d1aeb749e","01000000c8368f8dd39c1e19b3dbe644fb9f22345735c25d23ca93407b7519380000000036d8671bd7862aed2339deabbe68cf395b4a3b7a9376d1a5215b574bf23478757e0fca49ffff001d08d182bc","010000002de66cc312b93d37166e573579657381b306b77e1087a7c391061a2800000000ff1fbfffeef773bf9cff1bc294d81e08c311965544f0b33ccfb5aafe5221f783d914ca49ffff001d28e190f1","010000007c2fc9a14eb4f1bd8eac02de9a92de8c7dab971a9b529b11b3614ec10000000058274a8dc51dbc250cbc35b512a849d9abbdc986104cd21e073d4e621a277654341cca49ffff001d1ab2ec13","01000000727872be3ea80e83ba4246eee0a1f6920f552461db1f7d936a3e7f7c000000004d0605eba4de5f343a62aa2fcdbcbf0ddef208a0bc29c03e23ff827f0b6114fa3e1dca49ffff001da8de6205","01000000a4a095d1e9080f07f072fb123767a97676777654ce43a12fb41de339000000005b70a1c9e37fc25ac4ff1aebd84318ed52a099fbe56bf645a32f3b955ee78eaabf1dca49ffff001df299c900","010000007b3108e108b24db9022607d2dd379f886ad00214aa7d5db5695d31120000000068f8c95420c76edcc8759f83d20e453ecc9f8d25f659ca1e7eb2e0f09a1ef9125320ca49ffff001da93ab208","0100000091a2c86b8823f47d8ee4cdadcb1d47d00d5aedfd294bc6758aa15776000000002072c83ba990fffc4cee8aaf40d64ef815f866803597bf949f40da0eedd06c2b0d28ca49ffff001d3642b86a","01000000d119a57fbde18cad30c7f4b866a1b5195adfbcefcd5362bfcbbc6a5b000000002fd1917810a9ba379f7056e3ca67348fc55ec89095ab28274c3968966af3eb2fac2dca49ffff001d396bdd70","01000000fc11822b40ede8726eb8bb7edf68e71cff81c8f82505c0821f5b10a000000000351a39fae8eac5d0a8eb644275407de0968f42fa3b3c418307978c7865b93595a330ca49ffff001d49014806","01000000a5364e5198f5362a11d88be3333f9766b1849c943aebd23f1830957b000000002f127561717b3e26eb8a9a047a81466cb04dcf6a09e7fd9a935078b1e1c043c64a31ca49ffff001d2e357737","01000000136ffe597ab3cf519b4d48bb6f6d67fda50311c8bb89e4abd693e75b00000000836218c9bde5cd37685958a354fdc053ffa0bada3602645b28d800b4dc07a658c533ca49ffff001d03d98834","01000000c14ffffd134b6d969712e8052dfc8fda0a9ef5f04c28d463598939fb000000005040bc64479d2854903b2038922be0aecc16769206e5def77ff0e9e5f69426f0b936ca49ffff001d6ca7ec07","0100000013e06ededc96eb9b173c08178c6379203e04f3ac10145eb8de8728fd00000000d93ca6ea92f02d168d05fd092bae4a112f82cd0e59a572e79228b45dd8b3924e6b37ca49ffff001d29ec1861","01000000bae9273bbc28fc769bdbf51e57b3a5e880ef8762b7bcd8bf2819351900000000eb28c3a6fe08f80a3a2f9534a38edd01a1cc7d431d243be57fa8ec58a710b7ef9e3aca49ffff001d1c8fdc5b","01000000e9596c5c68c0be615ee1c6385360dd5545f66b7d672ba508547035e1000000006d45539994ab60d97ba48cad52f7fb5692e77625e1eb2c21348250dc9e6d5c3cb93cca49ffff001d219826df","0100000083e88e9535a6802c37db1c600941ee100982704488e20a3b4ae7d0b300000000a00d463180ca2e3cadbcb6ddcc38c47ad1bfe28468c86c9f2dc04f67f0181b1d3a3fca49ffff001d361f4505","010000006057988a09654ed19710bb815a068a1d30c315c6d0df87f5ba840531000000000e4cb24cfd646acc95dc54126e956bfcf8662510325ec057e0b36e4b7c99e9830b45ca49ffff001d296e593a","01000000d146846b9e454e65193ce886a78948fe155193110b8075b741fe27f0000000001858fcbf0ec0099a27b17b063a18881f78c7bb4ac5d3a337678b12f4761783fad345ca49ffff001d32a5cf03","01000000aa66562ad3e34d64944743abb5d7f46b93f5cabb5a367a89c8877e8f0000000063d1596dc2159b3cbacd0e4fad46107836e67f2d3da9f473195838a20b7a1df99849ca49ffff001d32368a90","01000000192f9a02b9eb90d173311e7db42ca53ef5bc54581a394a5fc860ab9c000000001ad7c8609a068a1a6c1cc485df66bf1fb12c5b8ed642e82e4a4e2f9499bdc09dec4bca49ffff001d6879770b","01000000ccf9c0250ec7be116fb983f5fc87eeb6a5cbb61f4bfca0b03087f4bc000000002b859c0caf74c84c451e92078a269c73e734755004177b908ca265caac1ffe85254eca49ffff001d034a1d78","010000005cb375baf213771187076bced80fb6b7281f5e33103c7787045f739a00000000a2ad70b42b4978374c3c6d74477b4ecd97a0d3b5c1d12943c894b8981bc6e25d5a52ca49ffff001d36098aaf","01000000f4197e11c76583b31caca1e69f69a0d4e88d4a266c5c35a7862803b300000000c5df090ebede3a2e5fef285a277dd20dcc2052b60788646e13c5ef80fd861fc91e55ca49ffff001d2ced5789","010000002159a7c535372f6dad44c8c08c0b62e6395e88644971c6b3085da1cc000000004c6accc05d2ce60865f6030b742d19613ed1df509eada4282307d7c6d293cba2ca58ca49ffff001dc16d2c12","010000007727914654d9ede211b7269721a35228ac9984f5e0492980875b2c9600000000c823f882c71acb9348cac5f9762750dc7df6079451fc9ab0f3d585d1ae2830fbee58ca49ffff001d20456922","01000000f1bea710881b61eede66d81a1c4cf5c744a32905f425062769a75298000000000c6ae28878494791feca7d9956b6611938d736243f57a579a355c918efbe9605e95aca49ffff001d240df3a7","0100000033190e5971968b1c662f45a912d959a59c4ee82cefa6d01757e9352b000000003892b4341b28abb7f6f1fe9b20306b91f4c581df8dfef58f49dbc7688d6ade68755fca49ffff001d1c04135e","01000000477b093893051ba73440fbf37b1ef0cbada18e5a4c617a1d4e5edae500000000249eb7e6f9a801993cc420a7dc6f2bda9007d45654f2e5825e1122a9a3010cd5ad60ca49ffff001d1d6a7eaa","010000007b0becd3076399a403a7f0a1d8ec8bc393c68563179824cf6971e5db000000004b23714adb410da7582cb3128429df645e39134abb4b743e008bdbfc28108ae60963ca49ffff001d32017cda","01000000e72248f428059a7e96e9a20c256d6ef4ea6b64afe36eeadd76eb51b900000000089eca88392ece386d7a4ac837fea5ebb16a5dfd84f710416db119dff56a0149e867ca49ffff001d2e2c6cd0","01000000a4d426bc51210589b95b9f129389793c8d8897af89965c753adc33920000000090ea68051ec7f1f6e9ebd8a8668409f28b7c88727e4a75593a8ee738373059e5ff6cca49ffff001d24322524","0100000036eae25149d1bf7a1f66a890eb879c6eae2f8b4beaddd2023ad2fddd00000000ca52a35f6dbd33b60c12015908bded08dd79ba8b9870c24c782b7df166026ed1f871ca49ffff001d35ca0e35","010000002519a97a91f9327f6965dea77c503de173cf606b9afb3d0216dc497800000000e75e718c7f2a85ad6af507900c4e3b5998135cd4db3da6662104bd203a7763941b77ca49ffff001d2b5e3c7f","01000000854b3dfad58d9ef557794f5a73a4fbfa4600c9182df82eb4310484a5000000007e5b4ccb11c76d653cde1147ee1cb93111afcc01dc49f7538153d34ac29a47e8867cca49ffff001d22456f05","01000000d0fc9a001c77b117beb99f808e28d36ec838e34aae83e065481a997700000000fb5d97fa74f07347029874a0c1b108542eedef9bcea3750eae70d13547e202c59480ca49ffff001d1cabbe20","01000000245c14700a416b59469e017278594ead3dbe168da7bf0aa515f652ea0000000011c2904f3163acf99a86f9ecc8bd6179480a329ecacf02001d16596a10fff0b91484ca49ffff001d0849f742","01000000f9dfdd1ebc1284f8c5df68410b3bed5093b22990507f8d27fe612b110000000037fd13666a802808abd82d336c9762b2e66071d63ebaa356d9b22f74a7cec8454487ca49ffff001d1d6b6647","01000000dfa73e890f0eee93e7a45ae957d06421c57156533ace41f80ab9e99900000000d0d921a3114f0e52dadbeb790e99f3864e33bad9035c8d625cf3f183d39584b4178cca49ffff001d35226992","01000000409e561f4b4b3c275f8baef4f7874df0f699361c301bd8321116ff5800000000eaa6bc7bdf3b670c1c6e53950d2dbe17054311327fa5f973f7caeaaad34969625f91ca49ffff001d23ecb3a5","01000000c4603ccda2b4c336f93b360204c1ecc82a40392973cc82ac069f080800000000a51f3b974b398efce78942a19fbd378882a95f08b30d1706af4a0b359ba6932dd892ca49ffff001d1d2e6642","01000000e862ee5dddffd9e1a04806a9f18b87e52279239f842f4a6b476c847b00000000f2810723b82ccea071a2b5fa1f7fc8ae8e99b884f8c20dcb711513c5e0a3e8417298ca49ffff001d34057721","010000004abf2cf51a516d9c90eef0772fe9c724fa07269e71d74b9b0811291c000000007109fe3286d4a5ec0ed8124db97da246d64ad8baaf3ceb2016f39317cc68ed24f199ca49ffff001daa78de01","010000007898d818ca420aa91f3996020f62e19022334fffbabee4184196460d000000009955b74b427f28a508da4cf827c128dcc7ac1f4c802f16b2efb0faa009f39d57449bca49ffff001d23158bba","01000000f2ce8809f71bd999e2401e1eb67725a24a11edd2819d77206d47208800000000884b0a5802931a383d4fbd4647d123df6f1b292015a7d8df2390bfa019c472ef359fca49ffff001d064affbd","010000008a54c005300c825b57cf8f09b54d38e5ff554edf46d3ac777b41841a000000009f700c2ff73bb9936d5aff41758439b11147bed730a42af296b808fdae3496cbe2a1ca49ffff001d9d31fa0b","01000000e5f89779e7c2d99e77e3e0ee6aea033829d47eaba54e813dcfee0ecf00000000de471950f1f36a3fc05ac0708bda82e73181c0ae5c0be9309a674b972d05e4aab3a3ca49ffff001d074ce047","0100000023fe8db1915a93500e34c8c3d0f716d5fdfd15ea3ac2dc46991f13e4000000009b665bb98d88d315feb73bead6dbd15f101158d8a95201359733dec63b45500660a4ca49ffff001d7d004c03","01000000e810c472cc3890e6774d06b6cfa5ed7cb8f74e1376cdf32b43890b0c00000000c4375a07719664d549e852b6896c290efb5413ba30c170e5ff53cf0c3fd08ded64a6ca49ffff001d2916889a","0100000077206e196a8c7f449dbf71faf1bfa630c76582b6738570243c817f9a0000000027ccb4cf773d0a6e1f1448065448eccb27cab42601aee8ca7a30595671ce605665aaca49ffff001d26087db8","01000000811e0edd74c1f8c8bc0ab40e72a4c9df598712f9b8991e45afe86c7c00000000330cd98eb48d894443894bea6e346a89e9fdb8827865262d487cfca56ecfd23561acca49ffff001d00883d08","0100000035ba29794f84f24b9b10c43c6a22db2dbc72c4b317a63ec17bbf564600000000ea507811a8d362e26b205ddd4936e27835cf05127205a603876da0d6c674ced173aeca49ffff001d2d88168c","01000000c03765f2c51da9b51345c8b7ff55161095aab3a4c1afe99d0d69d14e0000000000e57b1a5699da019acf7a602332f5465fd5d210f7a47fa3ba0880229387f4b044b1ca49ffff001d2a104a05","01000000ee7c227f8bd23ae7a7a6b440f09897ca9465da9c0dc6475c1ae6a94800000000437864c2d27e278eb67db18ccad3235e0bff3bf65d5b317c110589a1b2c137f9a8b3ca49ffff001d1aad5e48","01000000616ae6fdadb1d736d2452cd4f51e7e0ac44c7304a0c010e0880e7bad00000000ba3f04000897cb2993831b7f648cd31c96c9936414478e664c78d62733b4ce371cb5ca49ffff001d1de72525","010000006360523e3f135557ce368351cad44942029c24dcc9c295b96e2354b70000000065b07749f0be667f3dfce47d4e3370a3228cce3c89f41397792e2afbaf1a9450c8b8ca49ffff001d25a33281","0100000085c7a95e8023159682ab4eeab1c5b323663c435fc40b84cafc82cbb700000000162c8c510e9aa7646079af7c7313f355bce251247aef000bdef324d40375c8bb35bcca49ffff001d631f2c07","01000000e9970e89df0c198a1b3295d6dca8da06d2780fdb9dd2706f518e7833000000005089612930d155841eaa7d72459bd3f01639c9dd1eb73177f0e8ffef77e1b291d1bcca49ffff001d0190ef38","010000008e57d95024d9c7bea2b9c279192b47e569d5901eae12d7747340fba9000000009032f30dc46f8479ebb659398375b014f68b51ee071efe2e31a1d36d76a4515654bfca49ffff001d4ff27205","010000001f2a31b78ca70ed470d39b059a010cc5d0d28906035d785e0368bc4100000000abfd5148f28aba73317c71f48e24a38100b590e643024140387bc8e17f00b849e8c0ca49ffff001d21970c53","0100000010edf5118c14caaa6ad5f6d9e59969081f662abab7f4f6cac82f7f7a00000000f791cad8dbe207078b953f0fbbea1c698a78411b78255d53f0009a701926d169dcc6ca49ffff001d3078a8db","01000000f082b3e13f73031b33eedd4a747c3299a202a52a9a7e8a8c5c164cd40000000033c980e9ac15ff73c13f44713767c23b354269f082345aa7f9c9fae4f883ab5eafcaca49ffff001d1406fb12","010000003f53af26970eb3529b84f992382d4a0115844fa0abc18a10fe8faaaa000000006c12a8cbaecb782e333e45a52147c319235d976f9f04b64b9731e35e2ae0c135b9cbca49ffff001d00a74308","01000000201751f35cc466c6188f48950ebb46a777eb9036a055db9f6b2abf23000000000dae94eded04f981a6412d806b43f74473dc0d5420cab917090249bf95b299ab61d0ca49ffff001d1aac2606","010000005df3e8c0968ab4a6de61d08e6f75e0ec3e76a62b451666b7886ea5b300000000b5b5a5d52d72ef8361ed04803421a82114d3669d1d7eb0624347ca4616c611e29dd2ca49ffff001d27ecab72","01000000f37544184434d5917c4fdd6e1c73246b2392841a9ece54c028b130b800000000e02dfebe74468b53e40e3276555714d9bc1a7123e80d105d58848eea1a50788d46d4ca49ffff001d1a26e706","010000004f65fed1ed6f6bca39309aed8de98640e392bfc2c931596a51bb0bbc000000004b5a6671b8ca4669e070e2df0304ec6b53e135336f3c585844d1b11c5f061aabafd5ca49ffff001d0e4ffc02","0100000041aa2d9f23db54732db65dc3a2bcb636733e65a2061bdef151d36ec70000000043483a8a9cf1f40cb3de2fae70115bbd24eb18fcca726238ac30267365bce1492ad6ca49ffff001df6f84d01","0100000038599e99f5ba3768ffdaaef6099e3080672e2943edac3089d03551e40000000029f7422c3076d5a558931db6159edc4ec17ce5fea6d181cf0d11778d9b3c3bd0f4daca49ffff001d162f64a0","01000000d27a0a57c11dab1532ddf3734d297c275d2ddc10cc15945e4ae1522200000000ea6e6a5d6c5d86427132b89d4fd9414d0e8a484c6652eeab2823c5aeb0059a3df4dbca49ffff001d6e8ce504","0100000098a04f67c6d538f9b4e3df81dcf1f3c3d572776f1ed4ee28bb4dee8f0000000098ed63858000d494d901018dff6ad5edb9f19be7479fd23f66693ce96c0b8d4660ddca49ffff001d012d4d9a","01000000bcf331d97b56440d2b94152d25ddc97d4a2d21a32f7e740a867934be00000000681fb825183cd2ba5c55b974f4db4bfa53ca0a237acb02cae094506f58bfeba9aadeca49ffff001d21f2885f","01000000b65c6d7d0788a8497d307e14c61f749650eb24ceea842e1acfcc496d00000000e9988b474bf77487509620d40fda054da9a88300d3753cfdfedc29eb2021043eaee0ca49ffff001d34209008","01000000471dac58df0841b3be180f9cbd06a48a4bb31e74da3515b1f375b2eb00000000eeeffb194fd5f378208995432904c8582b097bc3f2d32c50ad5a1b385cbb0b5786e2ca49ffff001d07f1e40a","01000000da7c1af53d3443f4a29ff5beb31615c0352ace6450e0d86b493e86fe0000000073ff6ad91e7ab3545d9286b4b2f0b6048ef6b67169fcaa60d3eaa22c8ddba76d47e6ca49ffff001d3feb7c10","01000000dda1f31b9019d1b26cf9394fdffc631e6c5aa5d52dd99a7f0ab09a1a0000000039d0307607d14750dc458b779ed2cf2c035d1c30d9736207d620441c410ce19257e8ca49ffff001d998fb607","01000000a6150b88b1ac0134f6cbde8d1edeedbfb752ec2a3143fc5ebed39030000000009af26368b38232d363246e01f91cf595fc38766858aa9f34a4a0c72e92c325ffd7e8ca49ffff001d165fc501","01000000713320640449251b97d4764a781fe08c2eaf7c271ae8fb662b78a25100000000a6d4c8287633c216c072af5d55203467af25ef5090b457383cd04033c9b3151c14edca49ffff001d26cbeda1","01000000671a9f890d94ee90fffec258c15042a2ea01b277db5a9691d77bf9c9000000002ea2025c117bc586871505573cc131a013097f5516dab1ab8988946c2473592dcef0ca49ffff001d1bd806b3","0100000072a9b55e47201148415b76a23a81a5b383c0bee826a90b865233e42200000000561d5f7eed71582a1ab06e7d8cb5419b0ef1f85db03ca714f3204c90414a457d14f5ca49ffff001dfe9eb508","01000000c3a846593f31b0de52b51803bbe034e75f618c4042a0fa6a1ca988ea000000000097567f71d6c1910e37d849ec1edb73b9e769c10c277197dad76edc827127c505f6ca49ffff001d2bd0666f","0100000052525622c9e462d9a28ebeef09412ddffb7dc3fea5baacd4e6183ae90000000046b12d9c668c5b6f477ed9ff0c6c1f1a4a1b6fa8b3fb041a4df98a7d0267b9828df7ca49ffff001d776a9a07","01000000683e2adb05141c7cea9d77aa33ac11ae66e7dd52b0f630cce973673700000000bf780c614c2da4abd7112fc5f41527b6d7f7d53dbc12e8ad1504e04274e10d75a6f9ca49ffff001d37fe8f97","01000000135f4fb9d90102c4b794ae82685216d7ddadd2e8991ed458a99cebb20000000002ccf2b799733e295757aae20c060b95ec35e2737c71123b80550dbf6766d791cafcca49ffff001d2e936008","010000003432d88983afe97226680a458ec43cead51400063cdcadca0e624ea2000000004d05312838f1817834810a1f85ef8cb87b0f17ea3d8077ec08030ce362514e0077ffca49ffff001d17e7ed73","010000001f293f587e482cd92b2d519bfeb342da404f85e1e6e9a296dcfd3b1c00000000cd0af075c38abb8af2fc7946e9df492df89e61cf7068bd5e180b92cae807a16e2b01cb49ffff001df1f17408","01000000236887d284873c855af09a68ba4a042e566665e63bc3e8c570e1f96600000000ed55528abc69aeb3ad19fe60264fe1f1685d896f858e240009d5cf6f326fffdf9c03cb49ffff001d02f564c9","01000000dce971aff7d58d73e03c16ca994b6686c9af72b9004e42aedb78caf7000000000cb24a4fb44ebbd4bccc3f58e7b551b2a6f5a78a3193529fb6ff405c495860e9ab09cb49ffff001d15a5b506","01000000974b5e9d918b6be8b226d7b5ec1c245af107168ecf29641e20eb0b5d0000000072df3a207a41cbcad2003fb94131467b067e2957115eb9c9748c8581b52c859d550bcb49ffff001d03ec882f","01000000fdd1b1e725f65c0030b9a112c0b825a3bf097b29b5cf0ef467c2c88f00000000ae00f318bda0f740942060e5fb469ec7ca72edd7f68898abe4bd78a79f07c96eca0bcb49ffff001d2ccaf702","010000008e8f0546e10b420de8fe9e89f88bf242d975cc0631055bebe5551d8600000000a5179b864b42ef1f1d2acc1f1565559ecb65eb171a635889be5aba82bd15e6be2d0fcb49ffff001d26336b0f","01000000910f895d9f489b83e37a2ec66099e25302f74701bde9cc744ec35ffd00000000d80c6b85576f3f8f386358ab2e3e427cfaec098fe793cadbd4d81afc7e954a08da14cb49ffff001d1ee0a1b4","01000000ca51768ea8860c3b750344d1e510060108fcc62b8af3b781671832f3000000003930f7c4ebea885726c99336918e2985633fdff85bfd87ed2ef59532d2a8e0fb5c17cb49ffff001d39865e66","010000002b3b5cf2e1ee6166ac0e95f45a6bb2c4c821d2ada171b2c8f1c911b1000000000911f78b740a36594924f63580bdd42aa04f8ad4c09853394af3819c4a6372e21b1dcb49ffff001d2f909776","01000000467e1ab80689eaf696fd89ae1c4b93f1c8033b34e1542424ec88f59b00000000efba9f4e51ee86f0db65c5a35278628e5f8fba4574aaf9256f78f6538d7b83d83b21cb49ffff001d05eed355","010000005fa34a8cc26996a61261e37b05ae51360ad1af19fa0fb0b539535d660000000087c0f43a5dccfd67a0f3dcd463c05388d9dc8504effb60d03dfbd3e86035d7923e23cb49ffff001d2a6a7fa3","01000000af97b33f27585ce1c98242389ab4398773aa9bc2617d08968a6035f4000000005ce56a0ccb8aa46870dcdec68565d91dd643c3c5cff3fc2e10294463b8af9c322425cb49ffff001d37d8fe2b","0100000070472350065de5aad4b3d2758a45b39ce7d99cecb2988d6b5d44dc260000000029697bb0b7816404b8469cd3698032b1b57e272633519053880a07336f7ab5655129cb49ffff001d27ea6699","01000000554a51c298e76dbfe0d41e15c848f33268f2cb2c95f603f157003305000000003aa25527d945f4cf344bfc2bc2b1cadf6fbad64e9e921125a3ddcdae5d704c13062bcb49ffff001d03f72393","0100000084fa64f9d6e07d0844136036fb1e36c52a33c5adb8d1b9dc7faf1844000000002dd0e20e55acd44a53a12890d46160aa03cc3b1bdcd16cecd76422783d1ffbb3042ecb49ffff001d4abf310d","01000000f6b528ac661e57957a310985ae05975f7ef282ab3a8c05e5b607e3d70000000090f0b17fab836dcd094acb8f78dd8ae30595e1e6dbcac7ab8089ff740c635ef1942ecb49ffff001d19c43ee7","010000008dbe5f578ca38b6ed26c0f03809c8d9d032e6cdddffbdeff801d7c07000000007b5c35284a9e68eb1289684bb28d57e98c5cbbfdca48bf6b61a81fbb5e5e49168533cb49ffff001d0852bd4b","0100000046969f2180305aedeba189c7b87d8dc21a7a550f33899a404b85e6df000000003e5b57baa593af11ecf77b5d661bc75b3255be32b43bd90015e6222bf1f80215b738cb49ffff001d040e1d06","01000000b09484fc595e8564845a441b01e4e03cc82c5cae18a628a68ffe3c1e00000000f722abd4cf798617a1a1f2a628b427f91196d0c9a5f951aa3cd853a39ecb19b3da3acb49ffff001d06b14f61","0100000080c1d4581e923f570d6a16fbe14103e260727d9b9ce0b7ef6f34e916000000002423c7d92d65185e4c0542a7709132a98b05741d5070c299a7408ce83967782d333fcb49ffff001d33519387","0100000058eb242e0c283a7e3c5c1e7e08b68273a16e5d34847a875eb4435b3000000000212dd052111c4d03e65bc9f101f78d6d1226c6891a842ab209253f83f66290623e41cb49ffff001d22744774","0100000024af8a5b83f6a5680cd202135dbbcaea1a83cecac286474423958c3c00000000f519c7a18e60a4a694f3134421166edda01fe6eaa1d2832b6114e1122633e0064d46cb49ffff001d3220413b","010000002542771faa1344f36cf4d1d7f5e2fba9e24ffb5131b3d72284d0ee590000000052fef789e3f0219c41fa1eb7de864f62bc58bc6e197b445b4fcb5475ed2e13409c49cb49ffff001d2cdc7469","01000000a3bdfd451ab4d3b2d7ddb239799fcf547b6e58732402af71112915df000000007a40b9e9d05a98bd972b61dbe5f0405aff35bf9eba2dcf77426458b43f5c20f21c4acb49ffff001dd51e7d02","010000006de3866bfa6ef47e8e91fe7581935d2e3f9f65ff240b74422e59cbff000000006bc76a05c48e5e7a0d1d37289f78b3ad76d9e0890df3828e4a06e8da1350f94e1a4bcb49ffff001d36700411","010000000cce8644b4f19b468bb63451ebb8a9a1e051df529c971be85e27e5e80000000036d64b32521fef2cbf2a3e5da61a153f18ef6efa091d322fcd53df1b29d54a18324fcb49ffff001d2a492015","010000006a7293d9850534263ce7485c7348427b8e67c874c994befc2b06be0500000000240789d0a5aaa088f081b1e72ebdca35284cc4082074f6fd4337c356a7c5585e1c54cb49ffff001d35c96d66","010000001c6153cbbe7c9e3a7bc9fc55fc35f7058998d38491249e15c440dea700000000d1ba8ae60b080256f232ef3a3c6f51de2fffb6fe9b8c1cb3cb8252d3c2646708cf59cb49ffff001d25d220fa","010000004e450ba9cd6dc242899d110aee3d647d9d7d99627d45a6bea6e5443e00000000f272dcc861066a2dc1059eb75d17882d8669488eb8629075d690678ebe00c920e45ecb49ffff001d1ec3069b","010000008c8c6e7d6777f8aece4d3a9d8b481ac1c53cd534d878b314e88795b600000000e3429264733f253b89ebb139134ade742db6464964c0aa200a9609661377888ac560cb49ffff001d2ae7ab6f","0100000059c50016959f8f30a45a1425f2fb63e6400200e4d27a953609d667b30000000091ecfe23921040d888691cbf56d972c99e0cae3635126f7992180069a96ae8fd9064cb49ffff001d1e6beabe","01000000ba7842fea127ed8af6c6ae3cbefc322031e800a3f8b9a6e5ab6012b0000000007fff063dcb1a25b51f503181668bef154c73e1da9db1f49c4480df58014ae9050e69cb49ffff001d1be70f7f","01000000506bce5e1948a56eebbff44d81ac53354428c48e27c0ac74abfd551e00000000d3ef7e2ef4bdcfc26ec944d347d990b20e708c16791fb33ea06d65c7df5bc991a66ecb49ffff001d3574979c","01000000e234034f9ac965ec2a7aab638c0c3676b4202efd3d25c887a7f4c598000000005e4d0ee7a5f964c3bf180a361160d1f73856ce76896d2edbf696e38ea3d151fa9c73cb49ffff001d007c0cbc","01000000ac2f25b1f5d40a3d256e637df68b352f7f36218183866c62d874bdab000000007c3c4b8822013f36c915067a97bb717998d598d87567fcc0cc63cff2be0de6377078cb49ffff001d363b82fc","010000006dcd687d58fcaec4ce00638602ba456c3a407cac1f16dbf33deb97570000000028f0b9cdf18520408b53cd695c3f6a03f42a7031e21b76a030eee7fdca7c7b2a337acb49ffff001d1d515693","01000000bf7d15f78f615dfb8c8f1d899ec68c3a099cbbe4bffbdba3fc6b98a900000000a4d92d648220200bb318471e31ae87b25f0ba370830c3779b1255c839397e6de737fcb49ffff001d14a6a837","01000000896002180b27c5ee88ae38b66c3ad6ea7889505e47f754bc5a6e149200000000e86b67c2d22ed739f56a5569a0fd4dbc3e24863aef814634286df83ee5a58222e47fcb49ffff001d1508dd00","01000000f7d1eecddb3b00f3ab12121986c256e18576c0b387a8ad6c460425ca0000000053a860e6546e0970a1e273def1d666e49e5f0e00175a75c48cc0f4d025b691446b82cb49ffff001df1f2da0c","010000006c6a306476c6e5a4c894507d199716679d64fc81deac0b252a7f22a30000000092c3e84d5f51cbf4c4db1798ff20a04f34e15a599b6b008f1ca3394c4996f1cdb283cb49ffff001d1450bc2b","01000000754c6a7af7ce669bfdc635650be5ac77cd4024e8f0453fa632ccdcaa00000000dcabfea1d71281aec267f0a3ef193fad8254a272492fc6b26ca7b2b564738903c886cb49ffff001de8d6590f","0100000083fb14ef6ef69b1598c3a1cd5dc426dcb6cf907907ccb6df3b3f1b2700000000243dc077df3e9386a5edd31677a543fa499bf1f8b96b84389c15dd287613af623d89cb49ffff001d1a30e9ca","010000005e7048a257ec810d6a603f18e5bff7366f4cfb8fd662aee93184a9fb0000000010801e2954668fad34156811ad8373f63598f6938b11660977730f8f226ac4bfeb8acb49ffff001d00f86abe","01000000e972423062a5b8677aa4d39202efd86107081f7829c165ee931e1558000000006f60c6ebd24d41e2717182f59c8daa53b7c8638f44d472d22bc162ef7d035a69ad8dcb49ffff001d03bd6fc2","01000000a0e60db044de5768f9e72359c6b106b8fca6ce1454d5619e1cd46e3700000000a12d76fb963b2b100fe684fa8c8c04ad678d96eeb236a7ef663082c60c107794e991cb49ffff001d243ede87","0100000096330e48b0ac1a76e3ae093737011ad50fa3dbc62b6a2dde52de610d000000008350dbdc225bc83bc7c02b4c1388673c166b0566e3078375764ed05788f3abde4494cb49ffff001d05de2b81","01000000c8a295e28526ecae88ded61b3bb11c9cd83e5f72f575556bd968fc630000000087b7a7d65396bdb1a0f79132ea71d60b75a489798f9432f2cc0d768a38d925c1f696cb49ffff001d04985b1d","0100000046dc151ed03149bc910a42137a097be569f2e4bd37f28d5ad864f5f400000000427abd0409e0b51267fde0fb38702e6fbd406be0689c3bcce964c0621802c91fdf9acb49ffff001d2397aeba","01000000d6a21ad409ccd0635bcfe25f0a08ea7b1ec026d11478cb701c3396a900000000adca2aa091330f1e92e4ddb105645f92ade472dd537563cba5c4bf405d830188869dcb49ffff001d2859b3ed","01000000d4555bf10fbc1379094bedf662a3bf3b0cec5d52cf305a53014a302c0000000027ebe9e90714be80ed0add7bb89ae4e33a2769c3677db6e6f26611cc4f501e9fdba2cb49ffff001d1f8d6519","01000000f1f92202519a9cbcfca1ea5400c2646c2ae58794cd78993db81c670e00000000e2969ccc44929498fd492ce9deb22e11cd87dc657411f7d1df214f457eb103e577a4cb49ffff001d2474f2bd","010000008db7114eb78bf633cfd7fc050aadff3727f1dbb9f14ea62760c7d896000000005aefcc665bdd1a5b33657365f180b180501032e8757e9f9ceabb996c09f2f71518aacb49ffff001d24acc602","01000000a14b72e02b3fffaa95550850b6bb96ae36f3cb83d65bbdcbdeea683e000000000391ea3d36b55e3765d1af20c21950336dd580b84e91c5eeab8eb86d9b8954502daecb49ffff001d018a6046","01000000abb6bfa0c8be5434199fd0eef5bef982ba5b180c8c926dfb1d2c987e00000000f32a1a28381858ee8136f13f804c88721f6a95f37140d9d4989efe98a3a4835830b1cb49ffff001d32eb3405","01000000a03c98308d38d32328936620ceb43885eaed167e104b26c9db84fe4000000000c5160e8797c2937e23cb2f133c7c94c679c7017912ff90ff164da7cd926285146ab2cb49ffff001d29f8e041","01000000105cf01893f88b994d305580694e313d01462054ea3ca99f9a04af65000000001b2e1beb2354e694d9c08f420f24f5883c92d7b3e1e11e18c372a69e37afd2b9cbb4cb49ffff001d1f453304","010000007e995d969d31960a0f4f888735eedd204fb8f571737a84339608f1dc0000000074d1c15d8975f76e7d7884c853eb9d6fada477cdd68630733d07ded58d6e771b88b7cb49ffff001d321b842d","010000000205acac8950c5b48f9c06a919537db5961571546756a703e5b0732100000000472aaf594afb0314635ef70d251dc599d9c462330af659670fc24bcd18ebecf447bacb49ffff001d4bc30e0c","010000004b9c06c8060028b9392436a0c46bd38092c47ec43337e8080b68e6e0000000003a1d9ecf8aab6fce032a985e2350205cc61e8a228f0ba0729ea71ba9e9f6594f7cbccb49ffff001d2d817eed","01000000efcab9c21b9c3f1fd8a1928e5d05c92088c2e4ec5c23ede574943e9c000000002d249f91b835baeb46b62f8d19c3e65315cce26ef20a0142c8505b67d2889df72fbfcb49ffff001d05d6c144","010000006fc9c0dc0e25834547e2bddd807e1fb7bbf620a6c35d4b5d64e1ecb70000000079ce689a6f545d3dcfe8be6d1925b07173a1a8a21fd4dba4158fc6606ae1e5258dc3cb49ffff001d1fdb0560","010000009d018d7281afe4d2c64a42f1542e8ce22018d38eef0d8700ad80f52700000000e2e7365b1e079c10d8575017d184426592455113c08dbfcc8a9219af928b65ab33c6cb49ffff001d2e5990ee","010000007fc868c94a73592858c41cbdcd8c628a97ff6f16408cab451b64f83e000000008cfc7c9597f30fbb384eda821adf2113c3409fa06cc8021b9c45369b6ea33d8b81cbcb49ffff001d0482d577","0100000025621171094c925c293f3ff7924f5ff6677f33abd935813acdfa114900000000242d5aae5a1c21b9a33b86b4244f425046bfa292148d8fb22ce460bc5e65abe8c9d1cb49ffff001d13fe47a1","010000000795de00ec777fc757317e94e671f7120a949f8acb05201063402f5f00000000c64371facfad180f4eb1e4ccbcbd9cf51401d305f6344d66bb22e3b660326a738dd5cb49ffff001d1a7d7442","01000000a19fa58a8c8a165b160ed2de00cbe444585ef40370e7a77d516fe6fc00000000e8359be2cb3e73af31264b3897795ee8477f5fdd37a9b6f9a38befc3542169b953d8cb49ffff001d099e7e8c","0100000007cd694ce7126d21c3b4d64f267a85e5983a7047f4873a01e8b8c66500000000e25a4dd8e0ae7dca523b3f613e8445c75dbff0b07b23d7ad4078283d2c925cce36dacb49ffff001d142d7ea0","0100000034bf3e683477cd7fe00359afc4c257c2d433d6879714aa5f9f2b1db500000000896d4caf76e5c96f319671c037f4b457a98c982d43f4f5abdf87356cee5f4327e8dbcb49ffff001d90f36708","010000004d6e7e752890b7fab0e34f7452af86f076a3a7b2f0235058ae735ebf00000000c2bd4b4ed8fe70b62642ec214c343a7c5940ad7e2a68aef93e388512a81198bce8dccb49ffff001d175a2d03","010000001b152825966ad9ca8d8879a4a1c1202d25f6577fee045415b70a275600000000bb2605280f921fa60e33446f3e8d344f653c0fa3c500abca4343525724b5e338f2decb49ffff001d20dc62b5","010000001a793f339deacabf5b5df8276f5fed2e6790ee407f1c9ce2e35a5d8b000000007d7e50f29adc9517cf5274f8fd3683005264673887286ae31e0b1e404bc6f6044ee2cb49ffff001d096882e9","01000000d235124f7e34f27e8157757a6035f1a0870610b7b86d4071b01e55d8000000006c7d0cdf49b37986b3a2ca76fd766b6b1c17900b59d67ce33cb5892aef0a3f049ee4cb49ffff001d1e71813b","01000000163a481af69cecd387c4403096195b26099a72eeb3771c061d608363000000001aea7fbab535751d0814455e1c8b9b5eb5df611fc92601dddc381b03ed08f51cdee7cb49ffff001d14efcfd7","0100000045f07afe5ce78696905e6d19fe21507d939efcb82d09a6dab739954900000000fe01fbc09aab69cd9d8ba6509776995d79a75be4da1ed926d3b83bd4ffb14f6549ebcb49ffff001d3630e14f","01000000c0b1d98db869a0dc3e5027ff828f9e99dac934d073a17f40f238b9a6000000001c7f227870a1a74fd6ba61fd1daba1ef860e0410574ec2b8ea46fe2939669572deeecb49ffff001d16fe6764","010000009b4bbeb9c25b35c3614d38bb6c858789e6127e8fe895dcabe4bab5740000000063af3eccbdab615051a5d2d5276b1fb22748472b536339142cf658ef81ddd29e69f1cb49ffff001d34ea3723","010000009fb1d4d3cef8e425033ee167e46c81838802dc7f1c30400f8b1d74cd000000007105c2539e50b898bc9d0e2ea4075b2dbf77d86f6ae34177c5d2497b9e098d7ee9f3cb49ffff001d23df7cfb","0100000015d08dbe58e976f29c7ad417398e1649d5607e9afca421b49cee592c000000003ab55a0b0ea16690bfa677559590c47295ea8c481724179c570b1c0b2a4a1f365ff6cb49ffff001d24aa1a3d","01000000009ee16e05ee40335c7f52621c540513da85758fef7e3d8645194ea900000000c78f88636910bb942264ade47d61cdeddd3f9965bea24bec7b42886339b3fa9278f7cb49ffff001d89827105","0100000022b25302e593e4a68468c70434659bd284f8371d97a0377e35d528c60000000056858d1603412a0a7448a9a1f7493dad64de8523b50bd9346c30870c4ead2cbe30facb49ffff001d08680718","01000000b0a17d18f21cba4b8b45f8ba280b662ad112e752556b33fc214e1fea000000000f6b394d1ff9290213fac103d326746f34e56b82858e1a1be2441b136744699090fecb49ffff001d2424afe8","01000000bd0c4f6a09d39c8ab1354d1cdca1326d5224f12ece7975d9b4e4edc7000000009cd83ac82405674d9ce7a06cf7767dda89b4d95e0cc848e133502f74d6c4026af8ffcb49ffff001dad355703","01000000b07ed04792e740704a9a5478abd5cc3a48370873e6064ec25332967d000000007457813e64b96ce6a087e50d9ff46414c851e663439c88b5be4690acec14af4c6200cc49ffff001d226c96df","01000000b2f65be7141b13d0b99a945684e2203cc2763528156af40df11c9097000000008ff33cc578006b280f39575aa20c8c3799c4ec0a4c98129b0c51d6e7bd620b72e303cc49ffff001d35ba8fe3","01000000ae879f24d602bcff1d6e27d0c29fabaaff5018582231f756ca5570910000000024b1f7a5ca3f5fdebec65599b3e311cca1679fdc26c19432e97a0a95280be0c73506cc49ffff001d2e4e1731","0100000051800f556e6eac41de4425c2b55fbe4822e8afe06ce16df18906c11400000000c4175efd392760d4541476579f64dd6b2aa9ce8fca07cbf0f35cd53d1d5e8e3f6109cc49ffff001d0291ee0e","01000000199bd7479b9c95a0b52a758fc9c3a0522be4747cf638b6712e358444000000005d37f4dcfc259e1718beda774006dc50163025abdd5b0f9cb22fb120cf2cbca06d0ccc49ffff001d33649fc1","0100000072c39eb05ab5d3d6b710f3ba35530c4248b7006f2951d9e28df49a5400000000cd51285a2bbbca758ed0839b292cba8797140aa9fae095cbdc35788d025c43b7cc0ccc49ffff001de1a9e601","0100000024d084d45a166970815a2f73084e9ff28b018fd3a64de89a872cdfbb00000000cd217952f319587029b816a981a4a6f2afbbff7bc50bdaf60bb656fc97fc32760c11cc49ffff001d3263b072","01000000d3714f09ed810c3a44ee5b8f20ec4d47a910a883864d41701ba2723200000000f3c28a2b01dd974f54d4c8797362de7b0cd4c0b060a9e06e538cd89d3ab2ff01e913cc49ffff001d2d04964e","010000002d432a4f2c1d3545973d23f036c4722c16cdf300eae883ffca54de6400000000c715e9060e740d711a47eb54b37f3ada606a90c0d19ed6aecd49b57540984d5b3c14cc49ffff001def014b01","01000000cf3a80f8603a0ec8f83c818c06f1fd2661e593be6feb0b3fad19966100000000392c485720003e2de7c90a3252a353c9229a943ef56cbf6d12dd54ead12c5cae6c16cc49ffff001d1c902424","010000008e78d84d0374ab3ee422691369bf76835fc8a9ff8131c82a00dcdb3000000000d09cf05cd5b4e77064d66f574b100708ea07756b68a4cb4168165b085ff9dc8c6f1bcc49ffff001d0b00c018","010000003338df8f947d7c59dd02da889bb9ce9f91ec1e957917eee81856bbdf0000000097a025c1b9acd1adf2bcf3fa8d41a63284e7292a889b13d7d9383c5c62c0a946eb1bcc49ffff001d36411576","01000000e5bd85390d6c8e908779a16f674efb90d20d3f1f6aad0d47a510bfb400000000084b617b3fe08d1fef69e7693c02f65a453dbde5e7dd5c694a1dda3b9470473ccb1dcc49ffff001d095e0030","010000004a3842af5692f7ab1c9a2ec67b73c26ebef2904b09ddd8589c0272d400000000dcae02f931ab3aa00a04a74a17b50bda6fc9d026ad674f08bf5757d7b50b57ffe01fcc49ffff001d2b3b43fe","01000000f0c8c18792ec35a649f8771f8aa617024e508bf0936d634f3b046653000000003c31e1b3d3980c9906d8d748f479ae541764c2e80634faf60f33ac52b17558c91924cc49ffff001d3787da0c","01000000bc153c387c16acfb0ab41dc25a119eb00d326bd145811df24238a730000000000970199223af392db8271fad41ed6306b0e8d883fa032e6dba63d5eed30bbbe0f827cc49ffff001d2c00ed84","0100000072d85d603a9ae884afc0901c5be2b3cc7a7896cea7b9353fc2360fa100000000ecc20e20b05f64e2bfb870b04f838b3dced65a4adfc7bd60866b34113efd8c93d629cc49ffff001d34ce3a79","01000000f8767ecb5c14228dbaa0cb53c6d18fe6f5b7752af6cb53da9eec666a00000000800f143d58ddc6b57d77b9c26ab00e9f57b14c086ec968440c39bb1b03a20112b62bcc49ffff001d2671b105","010000000755d877821b9b18457936bd24d933067573d45fbb61d3636fd09d9e0000000047543348c81a03a67917a9c638fbc8216e823e150542ff3331913585896e3619a12bcc49ffff001d83186700","0100000041139c53fd1a714f2974eadce4bcb1b48481aec3f72cde566da17f110000000082830093eb0f4d675821929ca0d6bf42c5b07f2716a02e30a5fd08e22ea4b64f4b2dcc49ffff001d050853a1","010000002bfb3481e33d649770ef0282a6a45d4c8f5aa4097cbddb609fc3846f000000004ac81e664751736aec4ffcc0b85b7c36c113f8acb7d245fddcc8a010238cb24abb30cc49ffff001d28b1bcfb","010000005ee1f9c893d72048d1774353866a702dec35459269c87940c83f5e7700000000b4d0eed20c1b77c0820f187adc20c18c73252059cd220c0c24177dc0f9adf2d2f933cc49ffff001d00fee584","01000000516954fc00e62cf4d262f76f4a91030593beb7f1b2b6496a783283b5000000000deff5be1971f907800fef884ea711716fab91f22ab9c27ed56b8aa4ac50d8eb0139cc49ffff001d2186ed15","010000009d2d114d1555f66419bd5e20854b3bb350c2f25d06b4de20e85d2fb1000000009ca6fbb8555a21d053ff72c7ee58b5a0dab921654e2f71b0bc0f09ad706f05cb133dcc49ffff001d06dc5301","0100000055a9762f5e30e96f90daf4db778f40f5f86b3444b433e57d7cc2a2ec0000000080a15a95591404ce2915c5699b10e7de2f8c5c311e712d9a77e310eda5f663d6be40cc49ffff001d15cab6f9","0100000050efadb401cf3a5db33509fe28b991b99e59c1eecad62c3b3e1a0b530000000082241ddd6b058efffa7190510a2f27c7f7e2adb46a2ac4ba818a7129208c7d1a5346cc49ffff001d1bb41a69","01000000d8a2469b23b4cea45dedff0e0018fd99515e50383f7d414dd1fd65e600000000e4a11ff2b34bec093b24de3875c86d6f0f9d0ac5a0cecd112ce6c8b72d8a7e13564ccc49ffff001d1ed445b9","01000000410874643726c8820d59b1914e2db63685f1d40dba279d2f634512b300000000418fae823c9a7297f2a4ca36c4b5203ca8acc55f6ef89bc93c9f370aa5acf0906f50cc49ffff001d0825262a","0100000015d95bb2eff6aef8bc03d5d83524e94247992503bbf1f67d1f1ae9d30000000036af3a3b7ead83dddd0d96aee1a32757c5a938cd558bf316ecc17b983ae465976d54cc49ffff001d2b4620e2","010000003593449ed271764f45965ec38e9bf5b866a2f9a05c4137b17b796d3c000000007ce6c8213156ef59313ccbb32ea9a3c4f7a046094325c61920b7e3910025354a3255cc49ffff001d89ac7304","01000000713901187b39754d84950298288fa095120f42641e00417f2b346a44000000003a8f6478212b850196701718da4ef73032973d9e4e2e6c41f61b78c2d17244f3b858cc49ffff001d15b1f243","010000008db065b6850ee0bf037b28c554e33cdeb5566c18775547bbf96ada1800000000442f99d3395ff9d5df24ae0326233a7c62337e17adc515f09cac851a4f2af7f4345ecc49ffff001d295c69f0","01000000666f9f4dd604a23add8bbbf8de21bcef9c22271236764f79d1fb235600000000c55742452abee4f97196f71c521b337cc5657d6a2a7c0de557569a9d108d33d3575ecc49ffff001dd5e98000","0100000081e7fa264474f90564e60011f432553556b8753da929a578f8314e4b00000000e8809ee47689fff6f041c826d10aa92d8e886a0c2e44bcbf1947d5ebcc5404042264cc49ffff001d07a12752","01000000f4ca5bb21f535900c12163fe69e8eebb8b48c32935ea492145233eea00000000d03700890d0a5614ad1b8e7fd05dafa07f673ccde83f6422f184c591bb6d2070fa67cc49ffff001d1e130261","0100000034777d2e3c95acad4b804b4b6a40aba75220bd8cbca7107c5ee7957c00000000033d00a9fd886269e716b0a44df705a1b64c57cdcbdb831e7eb491e8f6ba04347d6acc49ffff001d33f4c2f5","01000000b4f379f3fc64e12538823b56425c9f8ad9d18ea6c858e0ece506c19100000000819d5729358731eaa46e3e668fa9c92eed0aff572f78d03059610ed015ac8a35376bcc49ffff001dbf891003","010000004e72f5ba5d22d04281f07205fc52ec37c542c3b9f9f5e3b1269e04a300000000701454890ebdec4534760de55dbb046555bc4eb7672a56cf26e43a137d495bce0d70cc49ffff001d312bf1e4","01000000161cd24d8e426d4cf576d8b54031091651cab4d757f0a01da84f89c5000000008db96cebb18ae4be52a2ab0ed8e89f9f36ac254bc593c814417b4edbd1be070dc575cc49ffff001d265393bb","010000001174a19abf91dac88c0713b5e26a3b386e61e2ccba2ccd8a806fa7b3000000000c82948092d68026d1bbd21af799565e07c401289b3c2afbc88975ee294bdbf83c78cc49ffff001d016fd60e","010000003163d190702df73f1adc13306474485d87406d4476073420b6441d1200000000fbdd2741bb65f1251ee28e63fd70c7a920bb45590e57117c176632bcb5c6e4e46479cc49ffff001daff5fe05","0100000048bf2a279327518d8c1cfef509844f8eb14ef62ec7a6654521a97c68000000003053b3fd3f2b22ce2c35a278684600fe7ed8f8199ea7cc3143f2d9d4300a62a5367bcc49ffff001d23c1d632","010000000558fdb8d490f56590e836056ab36b575c463952708a7a6627d9cd2b000000003e31e7ac36580c6b296b04814ae1e97809d20aadc1e56d2efc19e0b5be478a943880cc49ffff001d1ea66710","01000000f7193853b5a6d69514b65a820d1aa67be63f7d1845eced74df7de6f800000000dd030b5a30d7b160a217aa1ada7c633add8dc4190865e709c759e56c41be8ad25482cc49ffff001d1e4dcce6","01000000e913671a055bdfde760b3e404a1d667591310135c284b6b9fafb1b1a00000000fe70fe8e97a307d820f9f222333e4cb1e3570b8ca905c5baf5247614a4fe959ac784cc49ffff001d052d115e","0100000040bc7dedaf72b5d76d7c8eb7661e21d1b80bf9274b93f6f757afd6c600000000603b07eb9a046f75469e0fb5dde929ecc118bb7d7814896dc10803d21912e1a36385cc49ffff001d05d47d01","0100000069c28c91c1a7bacb9afb7965e6c6466021e85bf95cbb863818598a89000000008ff8272ca2f5643615dc1da0b54a8dd96075783baad499c7c5619ae501c31416e886cc49ffff001d272929ea","010000003ba06b37ce137c85d7e80c90d6d282a1d59c257fe2594b3c569f91ed000000009d022f82d81ae1dafd6f494d3807d333bd624883c0709b356a933c190a59d8dec389cc49ffff001d36a9947d","0100000097652a587c9bc10295d3bd7ddf17463f3d269064701c88488585782a000000004db7a5c2a2a0f2006fc0cc2f31f49c64d9e821184129f4d82451f859edaf88afad8ccc49ffff001d22c8d1fc","0100000023236d9078dc428c236753a851fb8e1270b1110007ca4b5c7e777091000000007ba255fc5279f1357d93cc825404713ba546e74be2c8d1b9f1ddd4857a303b65968fcc49ffff001d14c58c0e","010000003253a42f253e5fe89d45b7ca953902ebc9f828405173926684bd66cd0000000073fdb7ce86524c867a4d7ad38818141269f8dfd970b138c14918911f8338ec6aa090cc49ffff001d274536ac","01000000cb07824c11a0c2aa468379cd2c7cb58de280ade5e7d8bd0b22e0a31b0000000004c7f666c469c90a1d513bbbb5d4266d2e7961488e99609a4af7e025b6b4ed461594cc49ffff001d099bc904","01000000ad15392295a42479cb5adac53489f3d3745f05a3838d56d3fde9a75700000000bd41c68d09cfaea70499d02bc9959f915b96d1eaa2ffec75e82290af0b3d97681798cc49ffff001d3053511f","01000000426babfb26a31af612efe7a11a2d69f6c2662f836ea3455f3cd11c340000000076fd610871b0c82315a94b81f7f46da325bd3b6f386361ad64ff2d5f853895e70c9ccc49ffff001d2297841a","0100000021127eb52581088b3b61c8697f292f4faf947e5dba613a7f3a15d36200000000a00aefe177b6a458bb77e4aff8c30743b964e2ab87dda348801af7692971ca38fda1cc49ffff001d1df76890","01000000bd7d006ff07074eb1574453080470509f183ea944c47a7e31bfb28600000000067cdd87b05bdd7a99b3485cc5e4611409fd2cecb44107316fefd614a975e372952a3cc49ffff001d2985b405","010000000792aee7f1613a6b2762cfbef6723fa3dfbca474bcc3d050f8a45b0000000000e4483ac133788551dcbc56dcf686cc47719ee0c456a30cf857db9e89cbeafbcc73a5cc49ffff001d63d10d0a","010000005db3b7131aa62ab753dcb5cbac3532e73e72903031c4bb9e044f6ab500000000db41b732ddcd061c49c80b5cc3102896b4116468e2358f056f3df5215b21c53cd1a6cc49ffff001d214b1e6e","01000000a8e6346bfda034fa979a462c29387ad94a7e21651346af9a48ba08a300000000963d625b3155fd80892fc0b74c44200d2164066b0f19b65f2b2a555ff5d6529ab2a8cc49ffff001d8c131d08","010000005f4456a954208593afaa961e0efd6904464fbdca40066171b0fd67dc0000000040486a102bf4c21b2f31b8c0fdc0ecbf40629c31e0a0a065ce0df2f18d55a14392aacc49ffff001d05e1722d","01000000ee67254be204edbcfabddc7c847a48f5be71bfaa4d78bce92338f787000000005793dfbcacb81fa4ba7387ba394e1c3bbc2dd38fce98adcba8c7425d9a0cccead5aacc49ffff001d1e288900","0100000006d93cf5f9b7ac95dd7ca0e45c57a1ec30e807fda84c4fc2e87abb4500000000193584019d5563b917f6b540b7657c0e249960a4510819900f06f21afea02fe341b0cc49ffff001d2fca9e0d","0100000020249335a5b4617de6745ce4fc5ee4ce03d09cddcefb7665ad5e5cd70000000060d2322d637c5cca7c612d182241052762bef613309ffe45e229f954fb02779719b3cc49ffff001d36ab0194","0100000009535383fd77aa9e8437aac7609f4ff0c0d4eafbb2648a28e8a6b64600000000ed382b57abc333f1024f5f6a9b40998649921362f9a1680eec7a67848df19b98cbb5cc49ffff001d082f2a75","01000000bd05c19ecdfa566348f09113324a8c4150fb7a55126b62cc799e881d00000000bd68085d1c09656692dab136981dc3e852a890d87a0de1d8c40d64b6d15c65732ebacc49ffff001d06a83d37","0100000097752f57ac2b95ca48ff98417b41cca50898bbbd2c015b2df2c14284000000005e1297ce570172ab8c21a9fbcaed22df450a12beb0fae24a24e39ab9ce870c15f5bfcc49ffff001d07f40cb9","010000002c6615351b69cefe5024713af4303d8c345349790bccbb565db5c47e0000000092188028db079ff88b97ebc358dd53ab83337a5ad763a896395e439cb5ee54eaccc5cc49ffff001d13e3207a","01000000e344f1c8894d2f2af7225d4a30638cb47d5322bcd28db049638d218d00000000db683b9ec2000d713ed0bec0711dbc39ddb74f89bd2b13e33a58284b3cf370c8f2c7cc49ffff001d01507218","01000000885126dacf96c71b7ed8024226a3a074005c4f089b0a44a71c20d3e7000000002d06804ce2a336bda1c262d187a669e6d2963b8ececee9487ab207b80ab5b3e613cdcc49ffff001d35bf4da7","010000005261866464dbfd0a096b202cdb4e31cadb0f35e9a72037b2e91c67ba000000005b37a4765d8602f5e16c0c3a32a48bf09f59263b61d9b695362150ec551002eefececc49ffff001d2f137e00","010000006e132dc8508440b3a46898f6538d8fc7a88f4bc6740bfc129e947cec00000000ff70f624989a66ed3e72031d536403085f06ecf9c88ea54eaeb8569d1a6acd3d82d4cc49ffff001d392422b4","01000000365f9394e6e5a71a93fdd6e5401d69e298c48d3394a20eb6b63612900000000034774a915f5165464e15a6dccc1d6023210494b52f37819328c0eade201bc27db7d6cc49ffff001d148dfb35","010000002fbd22f13867a04986b33f53d5c66e13be4cfade78e738dec8c3dd2400000000ae7c5c899110a45b7657f9f72786be1767f712bbbfeeeff819d9bd5ac3928e2ef9dacc49ffff001d23f547e1","01000000635759079e5324f2a5e40da713fe315349bddf9c3872d120685d8bb0000000005425b0dd349331acaeac29e46d81bbb434dfce9c761cf9b9fa1d1012ebda2e46dedecc49ffff001d07f405d6","01000000b14c317b0538f3b74b5440bde52f56ac9d8c7e99d7b65221cf8068da00000000a669dd3e68e3c649df37584bfe4f2a1feabdb5f08c0341c29692fa9f28ee1c768fe3cc49ffff001d151a9988","01000000d98cf99b07ceeda3c389a229f08a09d8806e43b795973500d86c42dd000000003347ca9f211abf7a45dcf542468fa5dacaf11f43b468e250346ce0c1f9e632d154e5cc49ffff001d01b0aef8","01000000dbd9386fdb143a0547bc10c086d678d0ac358d2fc4f0857e5d8fd35700000000b31dd1be85dbe5986b6ca6d28b8c6f23e93d9232fbaefed7786739810f167a5a33e9cc49ffff001d2747f411","010000007c0a66b14cd2db4463b68a7dd2b1d540a87fdff41a93dbbd88dfdbb3000000001c6c1bda0c22cb0af5e9ca1be6ffb66a085bdc5ad958551ba4c51105d185fae78eebcc49ffff001d3730af0b","01000000f4abd3d2b1efb2a2357cc95b46136458ae835c53a3c9cd9cacd336f50000000038918c7f6ba89c78c2ab9120b2677efb38d81973368742d4fc4416f28b10e85091f1cc49ffff001d1d689d5e","0100000025c11cc71d1ba9f16fb0044c8e553e885fafcd3f7acb214508ef5776000000000073aa9a929bef075fe27ec7a5ea375143ac134d235c90f132a97c7b95ed275c85f6cc49ffff001d1e8c6f89","01000000713036add0d5458b664a60339098615acc7308bd4f28b0afd151344800000000990442ca94c635bc8fda8fc0de3d83800d0c90ba298cf0cb3c6b814a1f5082cc04f9cc49ffff001d1bec9099","010000009eed9b17292895e09c08bb9086ddb7ba85a94ae98f9a736cfffad1a000000000063bebf18206fe8647f88903b4d1b3e1f9d9600e50a1060215f95bcc5743280c5dfbcc49ffff001d0669e75b","01000000fbf9385ad929ce7dbd2a40cb3f0c2896d607484fba2fa0c9c3d335c7000000001721781aea87aca8fcb3fda2aea1b460e26a0093127d4cd171e133238bfa81d4ddfdcc49ffff001d22bd59bf","0100000001ec9eab0ee1a2dfbd384ff483f5017a54ff3bd4dc7cf1b25038538d000000008d0feb4c9b7b9b86c4c066cc10546eb73f63fe0a7a4be68a09935ea510d4e84cfefdcc49ffff001d59bac801","0100000042138c59bb50a85ed1740d46c6aa1447a521f4be7db3fe95171b9d5700000000bd402f2f6b018fafb5d160ad76cb2ab85f858fe1f8f8a48287f82315ad3f04d97303cd49ffff001d28015b14","01000000d657bf16ce3b54ffbceab0865171bd951f082023da1c997a47d09033000000006a73249e36ba92b8ab87af3d3d6cfd439d30cdc68e93fa317dcd12651a07c03a0a09cd49ffff001d30fccb2c","01000000537c668babf5a5551278d9c3adae5f3e82323760624dddcb790f4a8900000000d5f51469d32e8b411fa27ecda0f5d59abe3d2b632382382762da4518fe2dbd18780bcd49ffff001d32759786","01000000d5822f1c6e89ad1213aae751d4a9c3a7645ec0623f6e8167af220f5a00000000a6fb5e14c6e015a0ad17d27fb86ee31af1d3cdded58c93a7c4208d7a7503928a9a0ecd49ffff001d2d927bb2","01000000b36f79ba1a6c351c240870962cfc58940bf84f78f716f65e63fd5b6900000000076b70da77cb8854cb241eda98303c1434f58f5873605c9685a7e8e34d87f5c19a13cd49ffff001d1cf0f8c4","010000006318cc3220e716bbd9b0f5602731c4abff8360b7d3f5650e9da3f6970000000092c132940fdb1271a0854032d623977168d228a937eb0351658311e9c3c2b8083b19cd49ffff001d3225fca1","01000000b44abc96b60391b969e1de7d456e6f57dff92fb2bb5dcdd14f0a44700000000036fd8560062d7ca75700f632ac70791d991c74d72f8acf39d6de769527c936eb311bcd49ffff001d6eebda07","010000009a19fb465c1ad9795d51cd4c6f05f5bfc582adb9694163a2e15fcec100000000b142d2055b0bcf1fa6d656658c5b9032e642346641c0a60a828a208498e0c14e841bcd49ffff001d3794da6b","01000000f71cd59b17f8707e10141c953f33d853cc01188e06627c4b7ce63ff70000000049634a90f09fd7f8cdd96bdc3c476020cb289699c01fc11f46f5fad41d123057dd20cd49ffff001d296e98c1","01000000b6c2d328e4c7d75c4501223a7ebb2db28ed692c8e7742020cd8c4ed400000000195bf51f9afebe1ffe837092acc5a78e3c251024e0d5b8b6a6874ab9759e2d7ee926cd49ffff001d0965d5dc","01000000acd7f62ba76fec283b017287af79e8712c86e409a8c78d0d148a4f1100000000189e93193bd08ae70c349d97db99d432a9798d2a21e65d9b9c0a2ecfcbf58d446429cd49ffff001ddf47a306","01000000ca01d615549f3477f57ed45e15a82be2f9c0a7bdc4e3a9aad05d667b0000000049e02cf39b619d58ce142a0dba3f27598962c126c47595d09ef58ba18673b368372bcd49ffff001d00617e41","01000000cf31c3e782cbfa44eeb27b2f288be338e4baea6b53bedd86a7f37d60000000006a9578da80b5e869d009d428f3e73b6239815a73fcb4292d015582ee8997214d792ccd49ffff001da0241305","01000000243ab98f3db7b332cf150f3c501a53d7b3649ac0f206cf3d1b1f7b32000000008520435c867f754a36ff80821ef746591ea2ba11e6a9c1a88f948dfd26e75c336e2fcd49ffff001d313aaaa7","01000000f4f487e258f76742c4513122341ce9ab87c601dd3bdf266481d9230a00000000975043f9d4d231f6c8643f67b641831a464228caed69bfb05b0910a6170578bfab31cd49ffff001d380e9daf","01000000d5cb768618e7ed455135f4c3b42a098cd86f5050a8adac2f7e8d0ce300000000c71ecfa0bd2f215d08364b0d60df32061c7ca757f515285afd401a530ba368205c37cd49ffff001d471d5b16","01000000d4f99906d60536967edcf12dbdbcb989425b28e9cfbcd8fc7a1b1e1c00000000520a50a560ef971f60dfafb9bab0795730f205db358ce5b5388f47f16f517072d438cd49ffff001dcf8e5007","01000000ced29a73fcdaf1ba96c4fb4961d9a4544d4c7a6e68694efac4892323000000009d4a0c7244e6715cc7d500ca2afc85a8bcfa379a002a3de41fd4c8296a8c383e373bcd49ffff001d24db2507","0100000079927140296804f9a8af6cd0cab35fb5331a1945d4834de4ce2a6afe00000000bd3e87293db179f83deaef114a38d16ce8ef67099f1de2a51cdb887233a42b97593ecd49ffff001d14cb2aef","01000000450a2a402fd4f8609f9494ec1052bf5b9e1c2dc99c476587e58cd4e300000000be5be169759408877c3a37c4acf34ac2c35e3056e2dca6d68fa428b75161f924f13fcd49ffff001d34371b6d","010000008081dcdefb3e39dce4c5fbf2b0c99f4f454b4c46b673da4229ecf5050000000010db633f63c64add0ced835cd4d57690a978d1346f4f660f2b13eb89e7a071a69244cd49ffff001d2568fb92","010000001dfd2ffead55da1cc950343d23a49c049b395c7b2c90a7a5104259ef000000009122b80b9b34fba588aa504b36c75c8beda6611db334a3e19dd4a552ce298c530f49cd49ffff001d06f9dff2","010000001729020d3fb0020f4ce70ca6a262ae52c491bd0939c6571d74f8268d00000000bf3db160828791c53337a6af57abf9714eed2c95837dcde5cd63307631403849104ecd49ffff001d1c923d18","01000000a91bf0ba0783f9a81020dc9ca80dc3b497fdf9d1f1b3c7b46bb01f9a00000000f518ec338550ae826803acb764dfdcb2db563fc838b874f94a82e2834fa01f8d2153cd49ffff001d18ea35cb","010000004f05283942445b46b81314e41589440b38c73baaa1e78b1e209e1d9b00000000720ae9adf7160e9e48e4e1c0d6363d1c3ef87379565f784c5b0ae0f9ca43d367ad57cd49ffff001d182a812a","01000000b404d695ddd539923652d1689eeb045b8a6133b79ffc77af17b335a500000000b9fc2ff5533c7e3e734c5376ed557acf59d492195676c20b906abfdd52143b38bc59cd49ffff001d64be9603","010000002d0dfee84c351bb64bfeaffa16f54ef9aea098d56163e97a5290fdc800000000324aea5535c46f0844330120daedbefb9be99939ce193fc2840668bfdbbc1b5bd35ccd49ffff001d318ccdda","01000000fdfaef44f76f4aa39ad969b930d568f6fcbbe1d3dc3ac9bbb63d076000000000a5074ed0fd7c3b2f21463f4c3c099119d16bc969b50c8df415a2231a6bcf892d605dcd49ffff001db922e300","01000000b3b18409aa74d6d493298deea0a2b27687cb09470abf738f4b9f731500000000a594ecb6c6c15196dbd1d7507255624624ffd3e37c9de9f1d5474e3eb34b996c2d60cd49ffff001dc224d10a","01000000dac7f07564c23a1b826fd4e25befac3c8116f44c4d3a6cab7f3d240e0000000077ebc7bb346140b8034a4052c7c558c68a2f40ba5feb3a4eab72a5ec78cce7e1e360cd49ffff001dd2eb7901","01000000ec94d6575fbb46d90b6dd10ade143a53ebaab6ff5eb19af7e5b921c300000000f7805613be8fe6af0eb3b5c4e4660652922c5b6acaadd0204762d872f38c0157a361cd49ffff001d30ba6e40","01000000dfad2e48a02bff6021cf0172d789e8b55ae9bc10c35d211d4ab46e47000000000375eaa7212677df9199591bddf57fb9df6b5291fda23ee93f02e8edd8f2221f4e64cd49ffff001d3554d933","01000000018c1217dcce82af684172a4b607f1787ddfe3c023c80690e148c09b00000000aed5b83963e3ab1e60f427eb0e8a11ff97d795256f43e8149a8e45f7592d7323c868cd49ffff001d2a764df8","0100000095497d2996bc5a109140d11cf1e86cb73678999e47b0c84e7f59ef340000000091e2bd1b4cd1c7e5ede96693bebee2bd9697efadd9cbbae6d9ad166b826ffd00cc6acd49ffff001d1a845883","010000005d9f3b245d69a812520721ccd2426fc6841d69db7a6545da2d169396000000002eadec7e5785ea252cb875c6ca720eccb3d0352c0a8474470f37be63895c13e4dd6fcd49ffff001d06539b74","01000000d390f025b7f39c64c3a00e7f25d9059c70522ae22283ad3babed329600000000a0963982b088859a6ab9af14744ed6672ccced578776311d60a9b25479d31507eb6fcd49ffff001dc7dc2300","010000003a615de8b224c25860c33bf49b7b31cfe8ebd2005d5fd35a5bf3121e00000000bfc6aa2f0e05754d85a32e486b43aa25aa91e6b79f32fb037856a15245068e80db72cd49ffff001d309eae3e","010000009acf5624efdc0d106d5b81041f04ce0f9fe63ddb11d358f4289d0d4c000000009b8f34b34fcf289a9993860fd6484f49d5e2ef45fdf336aeb6cdcc6280a815294c76cd49ffff001d03482ab3","010000000d56965f9494424338665f464ad9800169a2cbe761f912f236768b7000000000af2614acf661b2bde719d76a4d24a804d4a518d1321942d782cf77cf9a64bf70317acd49ffff001d1a2437c5","01000000dce8d9593f91c98f6babb0caaf2d0f8e7e0203b862b334e09d611c4c000000002b3fffd6fcbe9a157b9c11120064b390a70abb33a50159c99b7b66a510f78c66477acd49ffff001d84aa0a00","0100000035afb95d07f8a188390bbe694baa41887b8763f1dbf50788bda90ce90000000026c2a1dbbff11e8fd1ced1de1451f4700976cfeea96272bd9e7b98eff579bd2be17dcd49ffff001d22c13d25","010000004061bb00866da240d34216a60c45f638f6806b6aecdc4a9b55a4c8e700000000f48bb6ec060466da19bf245d2720c3f4b8f95e5857f915e6f09414f5f3aa8652d07fcd49ffff001d717e8609","010000004164105aab0c1f4c66fe78dc85f605eb1c8e84483ebd84e97e8a73b900000000661540f92138f8bc7635297f6dea50f214e8b18ce89714e7813ded8da3a2d1284b80cd49ffff001d526b6202","010000008210124acb24e44517578800ff215f9ae1b3f0b8e67ec1f59238795800000000f44412d1128b1ca88dbe374e1c74fb615bc37ca843b15dd80c42b00d2eeb56b0e281cd49ffff001d2f2f2643","01000000378f9e10cb57d8ff4686a4b3db0d472b79e16f5665d17a9e9e000d22000000003002a936e37e58e071a3104d1de456f93424b7c7810933802ba5c6dcdee1f7f48e87cd49ffff001d059e6d01","010000008b8e8732b6647311a58cd186192ea146326906bd3379064fe97a44ee00000000feaf34fc7e52e71e0251afc87522fecc35866f1dd9c7b7f2bbff984c2db31b266c8ccd49ffff001d37382a18","010000000513e5a7f7990670cd03fc43e7c2a9bb13e76b6d846e5047541276810000000072ff00aa17bc69d44d809bea16eda2fc63c7dd26b6499c553b653f0c19bbd61eb18dcd49ffff001d29342232","01000000fe731b7a07b8392e433431cf2ae2d4a3b8e0db776ed680573eb2d42600000000d3d7eac34373044d4248e5c3ee8a69ba528ae99ad8206212a59558c0a94e76fd1392cd49ffff001d387c5d0f","0100000031724a88e4fe1c8440c84c5e175a3f734a9da2437a309df992ed624b00000000c0c8205b0ed4cc8a244718f63f7cf7b24e0cc9f1aeb0f30041ad61bb0909d6883492cd49ffff001df6d85b00","01000000e6b7df6e012b1203fb65688bb1a0456dbec2f64b9a89a6d35dc935a0000000003ca4d763ad18ba60df33954dfb8d292e4f441873a6236be68ae01f1710edb09dbf96cd49ffff001d0206a116","01000000911427c378ce8a23d9b539c1bec605c4b1b58d70043f10785795767a00000000711c68a8e489849bebdab4ba5fdccb511b6afca1a01b79a9c5b07a7fbe8c0617b29acd49ffff001d15a98498","01000000d4a593a888c8de8b6925b4f34001d8157097dcda10cfeee6c60c6e7b00000000953483208019bfb1606de001d8e773bc17f87ac9353340eda21a8e4c10aa1f630da0cd49ffff001d24f3b8a6","01000000ea01cee8de6e59481117b03ed0f69bce1e91d6893b3059b688b0fefa00000000ad650b61c35226778657c4514a4fd9f6da95eeac7b697e790d93b6473d33240635a3cd49ffff001d271ff067","01000000252e9b26778eff240b6dd2f3f597365d92fb3032ce5d7da086dced43000000000e8d6b676bc889603337027c6489dae8ca466bb0cd01883c0eaadce8a3602dd373a7cd49ffff001d03a90468","01000000b0398574bd58f93cdc4d0bbd8e19ab685f72dae92d7114bc00122ab90000000016e66162817bac8418aa1f6ecfb45cb2be00885b2a6774c78595bf21cfbce92feeabcd49ffff001d211d8c51","01000000f12209d4347bb07e6f13baa858cec186465744ee85b0729c611ac63d00000000d978d0a1b15e217da4d2037ce478cec0dc668020dc64affbbe0e6044f5703dfdf2adcd49ffff001d053caa4f","01000000659c2c6a1a5a8b550ab84c9e33573c05001b242ae0263c2cc8ed189900000000e4a28d785ae5d3297ee6eb622fcd2923927494b238317b9bba94aae926ad2ad622b4cd49ffff001d19d29b76","01000000f7e1c6b832b7e0e88ae1f8761ee47b265b551965fa8f7c4ab5f85b4400000000577369aeace7e772a2df1cb80bd859ccc5f1130d00b316cfd5e162d3429e1cd2c9b4cd49ffff001dbdf32e03","01000000c4d9fc02e276b67405cf77268acc7a133138005368ffd075a00a548700000000d51d2fe63b30163947efac8252a5044083df7e95ac8a6e87ae92c0bad42fb982fab7cd49ffff001d37d4c71c","01000000bb3795d88c74eaa0c1e95059d9cc5809a2f29130b5498969c15faf2b0000000092691147c6574ab4c710946d8d215e86bfee8999dd087d8753897245e392776b5db8cd49ffff001d1588e700","01000000d5f027c92562a64b4058170a7dc39f52bc2f0e4ee7b12e341e4c51ed0000000089c1ba75143968a48f896fca277d3bfe285f31c50f9dd94b0ea880801ba980da79bacd49ffff001d29e6e45b","01000000dc5b4fc5306f72ba635fa4ed381f1d7d2e1c33a74b4fd8d712ac171100000000dda1249b2dee999b270971bf740f5e48b10377e89fd27ecbbc4e4076a5c9b9900dc0cd49ffff001d963fb41b","01000000cf2c318e7e0afef1bade3a6a4570b3ffbdfbbfd6e20522301216df4400000000240a3cf8858d9e6b76a493927c0969409581d403b8856f31173194847d5923e3b8c0cd49ffff001d16624d39","01000000381aca81179dbbde554d2f6d4facac07a0c5c3d00f856824b3d42aab00000000df7c76c25559bea1d326ed3177b40c647515342ccbf74ac35d7db0db955a62924dc4cd49ffff001d1e0c5a7c","01000000b3d044d64cb77d4b22d23f14443386cad7639df57cc1bafc1fadebf8000000009164529f18e819be712320ff86a09d6dbdc74fb551fd27f8aa7a5cfc36842e8e3dc6cd49ffff001d27765617","0100000077bfd366a96f31c19204152e0ad001d28c8ca6aa21d55f857a17659c00000000605635b2ef338be74193cfa7fef84e62e4c1e9cdb30a5a621634cdc3346b1f00b3cacd49ffff001defc77413","010000000463e2b9c63cb12b3008e2aafb5c66456a1c782f21efec64a528e5ce00000000d3dbac1259e1f939f882b403a5866d9639e504b63459efdba0f121324536541b36cccd49ffff001d1cd71683","010000002bf470ff1705f602fcb56ffe9f64a9bf008d1cdb1550712603fcd48b000000005983493652a41f0b8741bc4e30a3df3185136ca6460dc501889a5718a8df42843ed0cd49ffff001d27491826","01000000b6cf88de21a7178acadd90311ef80f9d18f2d3093b906761d33e25c200000000b1d256b419ecdf05cf514f0ffa878e7cdb91236d662deb454c80b9b139a69d7cb4d1cd49ffff001d24a0a643","01000000b6eef651b549396bbe8533a607bd68745d9ffc35555df620eada4c1f00000000aec3c542032f8e62adadd39bbd1cae78540aeba147a045b9dbc2cc3194b16d83cad6cd49ffff001d1d415864","010000007364171dcec1b6aeb92d5a6455f6858a7894955f17bfa67f81080ec8000000007c2ec10de16d9e48b94b402fce646832fb155eff9bfb35d8c7d6113b801efec715dbcd49ffff001d34e335c6","01000000af9c4173d4833fd146d6bcb28aa43dee802c3bbeb287421a519a5f4c000000006c8b634424d173b04dc2381f645322bc38e080e93340a9a810415d4cf4ebfdbb82dfcd49ffff001dc7e82613","010000007718dda4593a757f5661981b7163d756f558ed453baaa7f57af679f500000000869ffc78048a848260ec4d64d9c7a1ca867ecf096efdf0ae67a73c311404ced152e0cd49ffff001d3291146f","0100000020de691ea5a55939961496c97c9e93b6097ee3899b7296a6f71a85f400000000cf1fccdb2b0ab3ce7bf1b67fe3de1f0b298fe8eec1767d100ee7b7bd24acebd64de2cd49ffff001d251dee3e","01000000477f694ce3380cd38709e7b2327d1ec488c2d619b60d3d0367282313000000004b4951ffcb6f9f6103e636c8c4611247394e2ac0c89ee824fb625c284763b654b7e3cd49ffff001daa075303","01000000041427192b86ecee28910cd3830b79e9538de1b471346d1b18074a080000000099ba36ad98338019216366b922dcf707776d25d426b01fc7cd359803a2e32883dde7cd49ffff001d2d93600b","01000000eea923140ba45b8ead6f7c688bde2108a6afb21fe454cbd941962e5a00000000d459e1a34e3d9b203bc104b28c57bf7ccf9ab5ca263ff9424d1ca6379c150c756ee8cd49ffff001d2c644afb","0100000080d7c1688b07be8e3376407138536576bac7a64e9bdfcf4165ded3a5000000000a8c08a145bf951b4593ebceed529f6fc28aae3a40d60181c519596fda7c340378e9cd49ffff001da071b402","0100000081e991d140a2ec16e8fe7c0e1246981b3ff84fc443c82a4d3278583100000000a40a054f4ed76ba9449da58760effc30bb10fa0dfd3570021b00daf99360865aeaeacd49ffff001d2681b432","01000000484d7c092a8a08898eca991602f6921fb93ea46c3223cec2bce93541000000007c17910d255803214eabfc00a7670874587b0d74cf3f16627fe3a7da4b20a29426eecd49ffff001d22d4abf8","010000003771887ef07e2632ed3237f4df7fd1903ab4939e830470a04b35520c000000005534cdc9386e1bb0d09682c8f1fc2e6f9107eb1b50bd00378d595a1afabe5704b8f0cd49ffff001d2e16bb58","010000000d394238b5696c978811fd080b4d939bf923c3399f58d02dcfd26f1500000000b50315a3b1dd7e99d9b7ae220376692afa2779dd6f38d4c7372221e233c304755af4cd49ffff001d30eb05d7","01000000f17feb0bae219f0799c6c68e5b6a787303a8476fbce2fbf4ea9d0b7700000000715032bca4386bed2c5ca20a35b7d166b81c6b491779521e6584c02f2e486b0968f9cd49ffff001d34b6e5a1","010000004e3470cbc0a8d3f10d827f72e72246b5046cb8c6634f4bd2f4eff2f900000000b89ae11b2438ef58bbcaef15d4a1289189476377415f1f58bcf6c69e90e8725040fbcd49ffff001d37ce7e47","0100000029aaa56014f3e58e3fdd4ca89bc5182819ebbaf858b53be431325c45000000006aad33c5d378d16941dce18fed690efb168c047c9bd280146a9117cfcbcbf019fefdcd49ffff001d3712cd6d","010000001eef11385e4bf96eaebeeaa127fa71dfbecd8fabf9f2a44a1f09056000000000e50adde0fc9fb7c559a19efd476ade975323765eb6d97430533df55940ae678ec900ce49ffff001d2de11029","010000008d7d2fba99199ca9fd7c36ff7d36e9475955f9bb293a12a81900be3b00000000263c31f3d379ae226b4ecc7b490fd530bbab7212e416eb32f6247cba3dbcf97ef702ce49ffff001d18061571","010000004f148e969f05fcd42b92d44b0fcdb4f4406a86a9e9f0b18c14b2ab3a000000006ba7d76f7974627172849d660c924e17fb53b2bad8afa879acc9002c590ad0c82104ce49ffff001d6652db04","010000009f58386682407a6633439ddbfbd2e0e05ab3ee9a24933d4171dc6d2b00000000d3bc5da2c9558c63bce04767d9b4bbf4fd4cd3d5929aa25ec0f280875b48c4e16b08ce49ffff001d31c9deee","0100000097f9b07a7d912efa3d64c3101f8746a892cc7b5bee2003fcd85f57bc000000007d9659266ac4f61eb4ae267afc195848eaed6acf7e11a9892021d93ea4bc367a730cce49ffff001de7092803","01000000709e9dff79aaf65deb8c29e42bb365921a390f5d5fffaf08e2b913df000000001243b41f19a344a17f10ad136e34e6e0994fb561084cf46ca1c5537434fac687ce0dce49ffff001d30f2b813","010000005311eb280f07d746ac8ffc18f6f3776092a9b921e8db650cae8790d8000000004d87aa3322eeb14c1ad273843a7c020fd814376bee41141b6e2fb112871f3c35de0ece49ffff001dfb3fa305","0100000091f58d16caeffe583bf52e22a64b08bba1f181e65eb0886cb3843e3a00000000d2695fa8414a136eb8aea499a1b4894832795854aefbc5cf92639c2948852663b70fce49ffff001d2d88da5e","01000000a14221b1579da00fe15549ad803596add3fa8a4dfefa613d553d0d7300000000249af0a43b9a8a08c006d38a4f9599d08f88f78314dba61b98e2dd7356f9d6283515ce49ffff001d2139cc85","01000000b3e3b1e272203419a9e6b04157eba46f155f74b5ed86c962314132a8000000004f296bdd7d4dd5d8d328f5fe218068724fa2c350e084e029b811b7b741ce88ec861ace49ffff001d34a3b082","010000006694de85c41540112439e280a23270cf67ffa42c980f85935dee1c3300000000eab3f7808bebb155ffc1db62aa9fc3bd49f2e52d0731687718af46e3dd7ae0bb021ece49ffff001d1821781b","01000000b7add5aef0bbf3319e4375f3f2ae3a30e9fbcadb5881f3d8ee65bb1200000000c52da755b68f181e8f3650406e7fa1d15718e1626c163c965ac0f84c07056f6f1720ce49ffff001dac0ff208","01000000169fdf56cd9395fc8630fb6b71368b93a2bada33ff124142f67d356c0000000066811c1399258a61824cbadb5df4251cd8b1704cb7dff3ae6f63caf24b47c2fecb20ce49ffff001d06f15785","0100000018b3b80ec08d8721c2b059c10f2e25a73a0ef910823698c0cf12f6b5000000004445c312c0c9799f51a105a89e9ea1889f3be6d09de7ab005d0a6f627e7680472b22ce49ffff001d15c98930","01000000435478f24fb4cc5037ae136d98cf030565ba786f7badcd8836de6a4b0000000077a5b851b15f6bd14bbf1dbda88ae5a518d04ace06d6d0c277c01805f75ed53cdc25ce49ffff001d1f65db0f","010000005c6191a4bb8a0c99b28d1830b7cbd4427924218cdf1efa897e655daa0000000077667d914aa76eb755cf4e794d8c33b426bd6a91b31a7006df258187c8a876777227ce49ffff001d033f8f64","0100000089d9fe5a4bdc3c6b5fdb2e2959cb85b2d73dde092d6d8123e82620600000000094b1fae210a39b5d5a925c993e9d4a979381f2404a4e7fe8f515d4d201bc73f8d32cce49ffff001d221db6c6","01000000a9b888ffd980fba1e5f61469614b6ad394ce8f41d76ee985eea600fb000000002db72af06d0320266f83887c4cd467788a6466482df612d527c5c99302cd7cc0bd2ece49ffff001d874cf704","010000005da4603b0c8136f6b44ae23e787258f7645754ff7eb45f9f44de0c8b00000000673e1c38722e84e791c4626b4f4775663f7b720b039b1f4664aabe63f8c811ff882fce49ffff001d007523eb","010000001f3b0780ab0d47e9374282256f9208e2ee78864aaabdb2a6c4dc11c400000000ded11516d5b8f394c1a5b7974eabd379707a15cde371490f35636515025b5bf54832ce49ffff001d2340ac82","01000000c85edeb2f6a23bd37a4e2c078d881503fc7cbda401bfa976d77b97640000000088b7d731bf27f11db64b87755461083b73cdafdfd1b4adf30cf47b282ce1327b4334ce49ffff001d06f4e28d","01000000e59e7f2ba574c2b3f26733af77cbd2452427d8f0284550d08eab723a000000005793087bd3dee491563304d093d48a9f56ac3ca0fd057e3e1d2d2746a914b86b6c3ace49ffff001d13fba8b2"] diff --git a/chain-test/src/test/scala/org/bitcoins/chain/ChainAppConfigTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/ChainAppConfigTest.scala new file mode 100644 index 0000000000..731ba233f0 --- /dev/null +++ b/chain-test/src/test/scala/org/bitcoins/chain/ChainAppConfigTest.scala @@ -0,0 +1,33 @@ +package org.bitcoins.chain + +import org.bitcoins.testkit.util.BitcoinSUnitTest +import org.bitcoins.core.config.TestNet3 +import com.typesafe.config.Config +import com.typesafe.config.ConfigFactory +import org.bitcoins.core.config.RegTest +import org.bitcoins.core.config.MainNet +import org.bitcoins.chain.config.ChainAppConfig + +class ChainAppConfigTest extends BitcoinSUnitTest { + val config = ChainAppConfig() + + it must "be overridable" in { + assert(config.network == RegTest) + + val otherConf = ConfigFactory.parseString("bitcoin-s.network = testnet3") + val withOther: ChainAppConfig = config.withOverrides(otherConf) + assert(withOther.network == TestNet3) + + val mainnetConf = ConfigFactory.parseString("bitcoin-s.network = mainnet") + val mainnet: ChainAppConfig = withOther.withOverrides(mainnetConf) + assert(mainnet.network == MainNet) + } + + it must "be overridable with multiple levels" in { + val testnet = ConfigFactory.parseString("bitcoin-s.network = testnet3") + val mainnet = ConfigFactory.parseString("bitcoin-s.network = mainnet") + val overriden: ChainAppConfig = config.withOverrides(testnet, mainnet) + assert(overriden.network == MainNet) + + } +} diff --git a/chain-test/src/test/scala/org/bitcoins/chain/blockchain/BitcoindChainHandlerViaZmqTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/BitcoindChainHandlerViaZmqTest.scala new file mode 100644 index 0000000000..8316f32e56 --- /dev/null +++ b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/BitcoindChainHandlerViaZmqTest.scala @@ -0,0 +1,51 @@ +package org.bitcoins.chain.blockchain + +import akka.actor.ActorSystem +import org.bitcoins.rpc.util.RpcUtil +import org.bitcoins.testkit.chain.ChainUnitTest +import org.bitcoins.testkit.chain.fixture.BitcoindChainHandlerViaZmq +import org.scalatest.FutureOutcome + +import scala.concurrent.Future + +class BitcoindChainHandlerViaZmqTest extends ChainUnitTest { + + override type FixtureParam = BitcoindChainHandlerViaZmq + + override implicit val system: ActorSystem = ActorSystem("ChainUnitTest") + + override def withFixture(test: OneArgAsyncTest): FutureOutcome = + withBitcoindChainHandlerViaZmq(test) + + behavior of "BitcoindChainHandlerViaZmq" + + it must "peer with bitcoind via zmq and have blockchain info relayed" in { + bitcoindChainHandler: BitcoindChainHandlerViaZmq => + val bitcoind = bitcoindChainHandler.bitcoindRpc + + val chainHandler = bitcoindChainHandler.chainHandler + + val assert1F = chainHandler.getBlockCount + .map(count => assert(count == 0)) + + //mine a block on bitcoind + val generatedF = assert1F.flatMap(_ => bitcoind.generate(1)) + + generatedF.flatMap { headers => + val hash = headers.head + val foundHeaderF: Future[Unit] = { + //test case is totally async since we + //can't monitor processing flow for zmq + //so we just need to await until we + //have fully processed the header + RpcUtil.awaitConditionF(() => + chainHandler.getHeader(hash).map(_.isDefined)) + } + + for { + _ <- foundHeaderF + header <- chainHandler.getHeader(hash) + } yield assert(header.get.hashBE == hash) + } + } +} diff --git a/chain-test/src/test/scala/org/bitcoins/chain/blockchain/BlockchainTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/BlockchainTest.scala new file mode 100644 index 0000000000..ae8f01554b --- /dev/null +++ b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/BlockchainTest.scala @@ -0,0 +1,39 @@ +package org.bitcoins.chain.blockchain + +import akka.actor.ActorSystem +import org.bitcoins.chain.models.BlockHeaderDAO +import org.bitcoins.testkit.chain.{BlockHeaderHelper, ChainUnitTest} +import org.scalatest.FutureOutcome + +class BlockchainTest extends ChainUnitTest { + + override type FixtureParam = BlockHeaderDAO + + override def withFixture(test: OneArgAsyncTest): FutureOutcome = + withBlockHeaderDAO(test) + + override implicit val system: ActorSystem = ActorSystem("BlockchainTest") + + behavior of "Blockchain" + + it must "connect a new header to the current tip of a blockchain" in { + bhDAO: BlockHeaderDAO => + val blockchain = Blockchain.fromHeaders( + headers = Vector(ChainUnitTest.genesisHeaderDb) + ) + + val newHeader = + BlockHeaderHelper.buildNextHeader(ChainUnitTest.genesisHeaderDb) + + val connectTipF = Blockchain.connectTip(header = newHeader.blockHeader, + blockHeaderDAO = bhDAO) + + connectTipF.map { + case BlockchainUpdate.Successful(_, connectedHeader) => + assert(newHeader == connectedHeader) + + case fail: BlockchainUpdate.Failed => + assert(false) + } + } +} diff --git a/chain-test/src/test/scala/org/bitcoins/chain/blockchain/ChainHandlerTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/ChainHandlerTest.scala new file mode 100644 index 0000000000..99b7580a5f --- /dev/null +++ b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/ChainHandlerTest.scala @@ -0,0 +1,139 @@ +package org.bitcoins.chain.blockchain + +import akka.actor.ActorSystem +import org.bitcoins.chain.config.ChainAppConfig +import org.bitcoins.chain.models.BlockHeaderDbHelper +import org.bitcoins.core.protocol.blockchain.BlockHeader +import org.bitcoins.core.util.FileUtil +import org.bitcoins.testkit.chain.fixture.ChainFixtureTag +import org.bitcoins.testkit.chain.{ + BlockHeaderHelper, + ChainTestUtil, + ChainUnitTest +} +import org.scalatest.{Assertion, FutureOutcome} +import play.api.libs.json.Json + +import scala.concurrent.Future + +class ChainHandlerTest extends ChainUnitTest { + + override type FixtureParam = ChainHandler + + override implicit val system = ActorSystem("ChainUnitTest") + + // we're working with mainnet data + override lazy implicit val appConfig: ChainAppConfig = mainnetAppConfig + + override val defaultTag: ChainFixtureTag = ChainFixtureTag.GenisisChainHandler + + override def withFixture(test: OneArgAsyncTest): FutureOutcome = + withChainHandler(test) + + behavior of "ChainHandler" + + it must "process a new valid block header, and then be able to fetch that header" in { + chainHandler: ChainHandler => + val newValidHeader = + BlockHeaderHelper.buildNextHeader(ChainUnitTest.genesisHeaderDb) + val processedHeaderF = + chainHandler.processHeader(newValidHeader.blockHeader) + + val foundHeaderF = + processedHeaderF.flatMap(_.getHeader(newValidHeader.hashBE)) + + foundHeaderF.map(found => assert(found.get == newValidHeader)) + } + + it must "have an in-order seed" in { _ => + val source = FileUtil.getFileAsSource("block_headers.json") + val arrStr = source.getLines.next + source.close() + + import org.bitcoins.rpc.serializers.JsonReaders.BlockHeaderReads + val headersResult = Json.parse(arrStr).validate[Vector[BlockHeader]] + if (headersResult.isError) { + fail(headersResult.toString) + } + + val blockHeaders = headersResult.get + + blockHeaders.reduce[BlockHeader] { + case (prev, next) => + assert(next.previousBlockHashBE == prev.hashBE) + next + } + + succeed + } + + it must "be able to process and fetch real headers from mainnet" in { + chainHandler: ChainHandler => + val source = FileUtil.getFileAsSource("block_headers.json") + val arrStr = source.getLines.next + source.close() + + import org.bitcoins.rpc.serializers.JsonReaders.BlockHeaderReads + val headersResult = Json.parse(arrStr).validate[Vector[BlockHeader]] + if (headersResult.isError) { + fail(headersResult.toString) + } + + val blockHeaders = + headersResult.get.drop( + ChainUnitTest.FIRST_POW_CHANGE - ChainUnitTest.FIRST_BLOCK_HEIGHT) + + val firstBlockHeaderDb = + BlockHeaderDbHelper.fromBlockHeader(ChainUnitTest.FIRST_POW_CHANGE - 2, + ChainTestUtil.blockHeader562462) + + val secondBlockHeaderDb = + BlockHeaderDbHelper.fromBlockHeader(ChainUnitTest.FIRST_POW_CHANGE - 1, + ChainTestUtil.blockHeader562463) + + val thirdBlockHeaderDb = + BlockHeaderDbHelper.fromBlockHeader(ChainUnitTest.FIRST_POW_CHANGE, + ChainTestUtil.blockHeader562464) + + /* + * We need to insert one block before the first POW check because it is used on the next + * POW check. We then need to insert the next to blocks to circumvent a POW check since + * that would require we have an old block in the Blockchain that we don't have. + */ + val firstThreeBlocks = + Vector(firstBlockHeaderDb, secondBlockHeaderDb, thirdBlockHeaderDb) + + val createdF = chainHandler.blockHeaderDAO.createAll(firstThreeBlocks) + + createdF.flatMap { _ => + val processorF = Future.successful(chainHandler) + // Takes way too long to do all blocks + val blockHeadersToTest = blockHeaders.tail + .take( + (2 * chainHandler.chainConfig.chain.difficultyChangeInterval + 1).toInt) + .toList + + processHeaders(processorF = processorF, + remainingHeaders = blockHeadersToTest, + height = ChainUnitTest.FIRST_POW_CHANGE + 1) + } + } + + final def processHeaders( + processorF: Future[ChainHandler], + remainingHeaders: List[BlockHeader], + height: Long): Future[Assertion] = { + remainingHeaders match { + case header :: headersTail => + val newProcessorF = processorF.flatMap(_.processHeader(header)) + val getHeaderF = newProcessorF.flatMap(_.getHeader(header.hashBE)) + val expectedBlockHeaderDb = + BlockHeaderDbHelper.fromBlockHeader(height, header) + val assertionF = + getHeaderF.map(tips => assert(tips.contains(expectedBlockHeaderDb))) + assertionF.flatMap(_ => + processHeaders(newProcessorF, headersTail, height = height + 1)) + case Nil => succeed + } + } +} diff --git a/chain-test/src/test/scala/org/bitcoins/chain/blockchain/sync/ChainSyncTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/sync/ChainSyncTest.scala new file mode 100644 index 0000000000..b69b1ebbcc --- /dev/null +++ b/chain-test/src/test/scala/org/bitcoins/chain/blockchain/sync/ChainSyncTest.scala @@ -0,0 +1,74 @@ +package org.bitcoins.chain.blockchain.sync + +import akka.actor.ActorSystem +import org.bitcoins.chain.api.ChainApi +import org.bitcoins.core.crypto.DoubleSha256DigestBE +import org.bitcoins.testkit.chain.ChainUnitTest +import org.bitcoins.testkit.chain.fixture.BitcoindChainHandlerViaRpc +import org.scalatest.FutureOutcome + +import scala.concurrent.Future + +class ChainSyncTest extends ChainUnitTest { + override type FixtureParam = BitcoindChainHandlerViaRpc + + override implicit val system = ActorSystem( + s"chain-sync-test-${System.currentTimeMillis()}") + + override def withFixture(test: OneArgAsyncTest): FutureOutcome = { + withBitcoindChainHandlerViaRpc(test) + } + + behavior of "ChainSync" + + it must "sync our chain handler when it is not synced with bitcoind" in { + bitcoindWithChainHandler: BitcoindChainHandlerViaRpc => + val bitcoind = bitcoindWithChainHandler.bitcoindRpc + val chainHandler = bitcoindWithChainHandler.chainHandler + //first we need to implement the 'getBestBlockHashFunc' and 'getBlockHeaderFunc' functions + val getBestBlockHashFunc = { () => + bitcoind.getBestBlockHash + } + + val getBlockHeaderFunc = { hash: DoubleSha256DigestBE => + bitcoind.getBlockHeader(hash).map(_.blockHeader) + } + + //let's generate a block on bitcoind + val block1F = bitcoind.generate(1) + val newChainHandlerF: Future[ChainApi] = block1F.flatMap { hashes => + ChainSync.sync(chainHandler = chainHandler, + getBlockHeaderFunc = getBlockHeaderFunc, + getBestBlockHashFunc = getBestBlockHashFunc) + } + + newChainHandlerF.flatMap { chainHandler => + chainHandler.getBlockCount.map(count => assert(count == 1)) + + } + } + + it must "not fail when syncing a chain handler that is synced with it's external data source" in { + bitcoindWithChainHandler: BitcoindChainHandlerViaRpc => + val bitcoind = bitcoindWithChainHandler.bitcoindRpc + val chainHandler = bitcoindWithChainHandler.chainHandler + //first we need to implement the 'getBestBlockHashFunc' and 'getBlockHeaderFunc' functions + val getBestBlockHashFunc = { () => + bitcoind.getBestBlockHash + } + + val getBlockHeaderFunc = { hash: DoubleSha256DigestBE => + bitcoind.getBlockHeader(hash).map(_.blockHeader) + } + + //note we are not generating a block on bitcoind + val newChainHandlerF: Future[ChainApi] = + ChainSync.sync(chainHandler = chainHandler, + getBlockHeaderFunc = getBlockHeaderFunc, + getBestBlockHashFunc = getBestBlockHashFunc) + + newChainHandlerF.flatMap { chainHandler => + chainHandler.getBlockCount.map(count => assert(count == 0)) + } + } +} diff --git a/chain-test/src/test/scala/org/bitcoins/chain/models/BlockHeaderDAOTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/models/BlockHeaderDAOTest.scala new file mode 100644 index 0000000000..f02b4c563b --- /dev/null +++ b/chain-test/src/test/scala/org/bitcoins/chain/models/BlockHeaderDAOTest.scala @@ -0,0 +1,175 @@ +package org.bitcoins.chain.models + +import akka.actor.ActorSystem +import org.bitcoins.testkit.chain.{BlockHeaderHelper, ChainUnitTest} +import org.scalatest.FutureOutcome + +import scala.concurrent.Future + +/** + * Created by chris on 9/8/16. + */ +class BlockHeaderDAOTest extends ChainUnitTest { + + override type FixtureParam = BlockHeaderDAO + + override def withFixture(test: OneArgAsyncTest): FutureOutcome = + withBlockHeaderDAO(test) + + override implicit val system: ActorSystem = ActorSystem("BlockHeaderDAOTest") + + behavior of "BlockHeaderDAO" + + private val genesisHeaderDb = ChainUnitTest.genesisHeaderDb + it should "insert and read the genesis block header back" in { + blockHeaderDAO: BlockHeaderDAO => + val readF = blockHeaderDAO.read(genesisHeaderDb.hashBE) + + val assert1 = readF.map { readHeader => + assert(readHeader.get.blockHeader.hashBE == genesisHeaderDb.hashBE) + } + val read1F = blockHeaderDAO.getAtHeight(0) + + val assert2 = { + read1F.map { headersAtHeight0 => + assert(headersAtHeight0 == List(genesisHeaderDb)) + } + } + + assert1.flatMap(_ => assert2.map(_ => succeed)) + + } + + it must "delete a block header in the database" in { + blockHeaderDAO: BlockHeaderDAO => + val blockHeader = BlockHeaderHelper.buildNextHeader(genesisHeaderDb) + + val createdF = blockHeaderDAO.create(blockHeader) + //delete the header in the db + val deletedF = { + createdF.flatMap { _ => + blockHeaderDAO.delete(blockHeader) + } + } + + deletedF.flatMap { _ => + blockHeaderDAO + .read(blockHeader.blockHeader.hashBE) + .map(opt => assert(opt.isEmpty)) + } + + } + + it must "retrieve the chain tip saved in the database" in { + blockHeaderDAO: BlockHeaderDAO => + val blockHeader = BlockHeaderHelper.buildNextHeader(genesisHeaderDb) + + val createdF = blockHeaderDAO.create(blockHeader) + + val chainTip1F = createdF.flatMap { _ => + blockHeaderDAO.chainTips + } + + val assert1F = chainTip1F.map { tips => + assert(tips.length == 1) + assert(tips.head.blockHeader.hash == blockHeader.blockHeader.hash) + } + + val blockHeader2 = BlockHeaderHelper.buildNextHeader(blockHeader) + + //insert another header and make sure that is the new last header + assert1F.flatMap { _ => + val created2F = blockHeaderDAO.create(blockHeader2) + val chainTip2F = created2F.flatMap(_ => blockHeaderDAO.chainTips) + + chainTip2F.map { tips => + assert(tips.length == 1) + assert(tips.head.blockHeader.hash == blockHeader2.blockHeader.hash) + } + } + + } + + it must "return the genesis block when retrieving block headers from an empty database" in { + blockHeaderDAO: BlockHeaderDAO => + val chainTipsF = blockHeaderDAO.chainTips + chainTipsF.map { tips => + assert(tips.headOption == Some(genesisHeaderDb)) + } + } + + it must "retrieve a block header by height" in { + blockHeaderDAO: BlockHeaderDAO => + val blockHeader = BlockHeaderHelper.buildNextHeader(genesisHeaderDb) + + val createdF = blockHeaderDAO.create(blockHeader) + + val getAtHeightF: Future[Vector[BlockHeaderDb]] = { + createdF.flatMap { _ => + blockHeaderDAO.getAtHeight(1) + } + } + + val assert1F = getAtHeightF.map { + case headers => + assert(headers.head == blockHeader) + assert(headers.head.height == 1) + } + + //create one at height 2 + val blockHeader2 = BlockHeaderHelper.buildNextHeader(blockHeader) + + val created2F = blockHeaderDAO.create(blockHeader2) + + val getAtHeight2F: Future[Vector[BlockHeaderDb]] = { + created2F.flatMap(_ => blockHeaderDAO.getAtHeight(2)) + } + + val assert2F = getAtHeight2F.map { headers => + assert(headers.head == blockHeader2) + } + + assert1F.flatMap(_ => assert2F.map(_ => succeed)) + } + + it must "find the height of the longest chain" in { + blockHeaderDAO: BlockHeaderDAO => + val blockHeader = BlockHeaderHelper.buildNextHeader(genesisHeaderDb) + val createdF = blockHeaderDAO.create(blockHeader) + + val maxHeightF = createdF.flatMap(_ => blockHeaderDAO.maxHeight) + + val blockHeader2 = BlockHeaderHelper.buildNextHeader(blockHeader) + + val created2F = + maxHeightF.flatMap(_ => blockHeaderDAO.create(blockHeader2)) + + val maxHeight2F = created2F.flatMap(_ => blockHeaderDAO.maxHeight) + + maxHeightF.flatMap { h1 => + maxHeight2F.map { h2 => + assert(h1 == 1) + assert(h2 == 2) + + } + } + + } + + it must "find the height of two headers that are competing to be the longest chain" in { + blockHeaderDAO: BlockHeaderDAO => + val blockHeader = BlockHeaderHelper.buildNextHeader(genesisHeaderDb) + val createdF = blockHeaderDAO.create(blockHeader) + + val blockHeader1 = BlockHeaderHelper.buildNextHeader(genesisHeaderDb) + val created2F = createdF.flatMap(_ => blockHeaderDAO.create(blockHeader1)) + + //now make sure they are both at height 1 + val getHeightF = created2F.flatMap(_ => blockHeaderDAO.getAtHeight(1)) + + getHeightF.map { + case headers => + assert(headers == Seq(blockHeader, blockHeader1)) + } + } +} diff --git a/chain-test/src/test/scala/org/bitcoins/chain/pow/BitcoinPowTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/pow/BitcoinPowTest.scala new file mode 100644 index 0000000000..8896c7423b --- /dev/null +++ b/chain-test/src/test/scala/org/bitcoins/chain/pow/BitcoinPowTest.scala @@ -0,0 +1,76 @@ +package org.bitcoins.chain.pow + +import akka.actor.ActorSystem +import org.bitcoins.chain.config.ChainAppConfig +import org.bitcoins.chain.models.BlockHeaderDAO +import org.bitcoins.core.protocol.blockchain.MainNetChainParams +import org.bitcoins.db.AppConfig +import org.bitcoins.testkit.chain.fixture.{ChainFixture, ChainFixtureTag} +import org.bitcoins.testkit.chain.{ChainTestUtil, ChainUnitTest} +import org.scalatest.FutureOutcome + +import scala.concurrent.Future + +class BitcoinPowTest extends ChainUnitTest { + + override type FixtureParam = ChainFixture + + override lazy implicit val appConfig: ChainAppConfig = mainnetAppConfig + + override def withFixture(test: OneArgAsyncTest): FutureOutcome = + withChainFixture(test) + + override implicit val system: ActorSystem = ActorSystem("BitcoinPowTest") + + behavior of "BitcoinPow" + + it must "NOT calculate a POW change when one is not needed" inFixtured { + case ChainFixture.Empty => + val blockHeaderDAO = BlockHeaderDAO(appConfig) + val header1 = ChainTestUtil.ValidPOWChange.blockHeaderDb566494 + val header2 = ChainTestUtil.ValidPOWChange.blockHeaderDb566495 + + val nextWorkF = + Pow.getNetworkWorkRequired(header1, header2.blockHeader, blockHeaderDAO) + + nextWorkF.map(nextWork => assert(nextWork == header1.nBits)) + } + + it must "calculate a pow change as per the bitcoin network" inFixtured { + case ChainFixture.Empty => + val firstBlockDb = ChainTestUtil.ValidPOWChange.blockHeaderDb564480 + val currentTipDb = ChainTestUtil.ValidPOWChange.blockHeaderDb566495 + val expectedNextWork = + ChainTestUtil.ValidPOWChange.blockHeader566496.nBits + val calculatedWorkF = + Pow.calculateNextWorkRequired(currentTipDb, + firstBlockDb, + MainNetChainParams) + + calculatedWorkF.map(calculatedWork => + assert(calculatedWork == expectedNextWork)) + } + + it must "GetNextWorkRequired correctly" taggedAs ChainFixtureTag.PopulatedBlockHeaderDAO inFixtured { + case ChainFixture.PopulatedBlockHeaderDAO(blockHeaderDAO) => + val iterations = 4200 + + // We must start after the first POW change to avoid looking for a block we don't have + val assertionFs = + (ChainUnitTest.FIRST_POW_CHANGE + 1 until ChainUnitTest.FIRST_POW_CHANGE + 1 + iterations) + .map { height => + val blockF = blockHeaderDAO.getAtHeight(height).map(_.head) + val nextBlockF = blockHeaderDAO.getAtHeight(height + 1).map(_.head) + + for { + currentTip <- blockF + nextTip <- nextBlockF + nextNBits <- Pow.getNetworkWorkRequired(currentTip, + nextTip.blockHeader, + blockHeaderDAO) + } yield assert(nextNBits == nextTip.nBits) + } + + Future.sequence(assertionFs).map(_ => succeed) + } +} diff --git a/chain-test/src/test/scala/org/bitcoins/chain/validation/TipValidationTest.scala b/chain-test/src/test/scala/org/bitcoins/chain/validation/TipValidationTest.scala new file mode 100644 index 0000000000..35893cefb5 --- /dev/null +++ b/chain-test/src/test/scala/org/bitcoins/chain/validation/TipValidationTest.scala @@ -0,0 +1,81 @@ +package org.bitcoins.chain.validation + +import akka.actor.ActorSystem +import org.bitcoins.chain.db.ChainDbManagement +import org.bitcoins.chain.models.{ + BlockHeaderDAO, + BlockHeaderDb, + BlockHeaderDbHelper +} +import org.bitcoins.core.protocol.blockchain.BlockHeader +import org.bitcoins.testkit.chain.{ + BlockHeaderHelper, + ChainTestUtil, + ChainUnitTest +} +import org.scalatest.{Assertion, FutureOutcome} + +import scala.concurrent.Future +import org.bitcoins.db.AppConfig +import org.bitcoins.chain.config.ChainAppConfig +import com.typesafe.config.ConfigFactory + +class TipValidationTest extends ChainUnitTest { + + override type FixtureParam = BlockHeaderDAO + + // we're working with mainnet data + override lazy implicit val appConfig: ChainAppConfig = mainnetAppConfig + + override def withFixture(test: OneArgAsyncTest): FutureOutcome = + withBlockHeaderDAO(test) + + override implicit val system: ActorSystem = ActorSystem("TipValidationTest") + + behavior of "TipValidation" + + //blocks 566,092 and 566,093 + val newValidTip = BlockHeaderHelper.header1 + val currentTipDb = BlockHeaderHelper.header2Db + + it must "connect two blocks with that are valid" in { bhDAO => + val newValidTipDb = + BlockHeaderDbHelper.fromBlockHeader(566093, newValidTip) + val expected = TipUpdateResult.Success(newValidTipDb) + + runTest(newValidTip, expected, bhDAO) + } + + it must "fail to connect two blocks that do not reference prev block hash correctly" in { + bhDAO => + val badPrevHash = BlockHeaderHelper.badPrevHash + + val expected = TipUpdateResult.BadPreviousBlockHash(badPrevHash) + + runTest(badPrevHash, expected, bhDAO) + } + + it must "fail to connect two blocks with two different POW requirements at the wrong interval" in { + bhDAO => + val badPOW = BlockHeaderHelper.badNBits + val expected = TipUpdateResult.BadPOW(badPOW) + runTest(badPOW, expected, bhDAO) + } + + it must "fail to connect two blocks with a bad nonce" in { bhDAO => + val badNonce = BlockHeaderHelper.badNonce + val expected = TipUpdateResult.BadNonce(badNonce) + runTest(badNonce, expected, bhDAO) + } + + private def runTest( + header: BlockHeader, + expected: TipUpdateResult, + blockHeaderDAO: BlockHeaderDAO, + currentTipDbDefault: BlockHeaderDb = currentTipDb): Future[Assertion] = { + val checkTipF = + TipValidation.checkNewTip(header, currentTipDbDefault, blockHeaderDAO) + + checkTipF.map(validationResult => assert(validationResult == expected)) + } +} diff --git a/chain/README.md b/chain/README.md new file mode 100644 index 0000000000..ba7c148150 --- /dev/null +++ b/chain/README.md @@ -0,0 +1,17 @@ +### chain + +This is meant to be a stand alone project that process a new block / transaction and stores it. +It also provides a interface to query information related to a blockchain. + +The design goal with this project is to be agnostic of how the project is receiving +the blockchain data, just that it processes and stores it. For instance +you could provide the blockchain data via + +- rpc +- zmq +- p2p +- sattelite + +This project just stores relevant [`block`](../core/src/main/scala/org/bitcoins/core/protocol/blockchain/Block.scala) +and [`transaction`](../core/src/main/scala/org/bitcoins/core/protocol/transaction/Transaction.scala) information and allows +for it to be queried via a api. \ No newline at end of file diff --git a/chain/build.sbt b/chain/build.sbt new file mode 100644 index 0000000000..b7a2b423b2 --- /dev/null +++ b/chain/build.sbt @@ -0,0 +1,3 @@ +coverageMinimum := 90 + +coverageFailOnMinimum := true diff --git a/chain/src/main/resources/chain.conf b/chain/src/main/resources/chain.conf new file mode 100644 index 0000000000..7e9e34aca2 --- /dev/null +++ b/chain/src/main/resources/chain.conf @@ -0,0 +1,5 @@ +bitcoin-s { + database { + name = "chaindb.sqlite" + } +} \ No newline at end of file diff --git a/chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala b/chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala new file mode 100644 index 0000000000..3f1a321528 --- /dev/null +++ b/chain/src/main/scala/org/bitcoins/chain/api/ChainApi.scala @@ -0,0 +1,48 @@ +package org.bitcoins.chain.api + +import org.bitcoins.db._ +import org.bitcoins.chain.models.BlockHeaderDb +import org.bitcoins.core.crypto.DoubleSha256DigestBE +import org.bitcoins.core.protocol.blockchain.BlockHeader + +import scala.concurrent.{ExecutionContext, Future} + +/** + * Entry api to the chain project for adding new things to our blockchain + */ +trait ChainApi { + + def chainConfig: AppConfig + + /** + * Adds a block header to our chain project + * @param header + * @return + */ + def processHeader(header: BlockHeader)( + implicit ec: ExecutionContext): Future[ChainApi] + + /** Process all of the given headers and returns a new [[ChainApi chain api]] + * that contains these headers. This method processes headers in the order + * that they are given. If the headers are out of order, this method will fail + * @param headers + * @return + */ + def processHeaders(headers: Vector[BlockHeader])( + implicit ec: ExecutionContext): Future[ChainApi] = { + headers.foldLeft(Future.successful(this)) { + case (chainF, header) => + chainF.flatMap(_.processHeader(header)) + } + } + + /** Get's a [[org.bitcoins.chain.models.BlockHeaderDb]] from the chain's database */ + def getHeader(hash: DoubleSha256DigestBE): Future[Option[BlockHeaderDb]] + + /** Gets the number of blocks in the database */ + def getBlockCount: Future[Long] + + /** Gets the hash of the block that is what we consider "best" */ + def getBestBlockHash( + implicit ec: ExecutionContext): Future[DoubleSha256DigestBE] +} diff --git a/chain/src/main/scala/org/bitcoins/chain/blockchain/Blockchain.scala b/chain/src/main/scala/org/bitcoins/chain/blockchain/Blockchain.scala new file mode 100644 index 0000000000..cdc786eb59 --- /dev/null +++ b/chain/src/main/scala/org/bitcoins/chain/blockchain/Blockchain.scala @@ -0,0 +1,109 @@ +package org.bitcoins.chain.blockchain + +import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderDb} +import org.bitcoins.chain.validation.{TipUpdateResult, TipValidation} +import org.bitcoins.core.protocol.blockchain.BlockHeader +import org.bitcoins.core.util.BitcoinSLogger + +import scala.concurrent.{ExecutionContext, Future} + +/** + * In memory implementation of a blockchain + * This data structure maintains the state of a + * blockchain in memory, the headers can be accessed + * with [[headers]]. The headers are stored with the most + * recent header at index 0, the second most recent header at index 1 etc + * You can walk the chain by + * {{{ + * headers.map(h => println(h)) + * }}} + * + */ +case class Blockchain(headers: Vector[BlockHeaderDb]) extends BitcoinSLogger { + val tip: BlockHeaderDb = headers.head +} + +object Blockchain extends BitcoinSLogger { + + def fromHeaders(headers: Vector[BlockHeaderDb]): Blockchain = { + Blockchain(headers) + } + + /** + * Attempts to connect the given block header with the given blockchain + * This is done via the companion object for blockchain because + * we query [[BlockHeaderDAO block header dao]] for the chain tips + * We then attempt to connect this block header to all of our current + * chain tips. + * @param header the block header to connect to our chain + * @param blockHeaderDAO where we can find our blockchain + * @param ec + * @return a [[Future future]] that contains a [[BlockchainUpdate update]] indicating + * we [[BlockchainUpdate.Successful successfully]] connected the tip, + * or [[BlockchainUpdate.Failed failed]] to connect to a tip + */ + def connectTip(header: BlockHeader, blockHeaderDAO: BlockHeaderDAO)( + implicit ec: ExecutionContext): Future[BlockchainUpdate] = { + + //get all competing chains we have + val blockchainsF: Future[Vector[Blockchain]] = + blockHeaderDAO.getBlockchains() + + val tipResultF: Future[BlockchainUpdate] = blockchainsF.flatMap { + blockchains => + val nested: Vector[Future[BlockchainUpdate]] = blockchains.map { + blockchain => + val tip = blockchain.tip + logger.info( + s"Attempting to add new tip=${header.hashBE.hex} with prevhash=${header.previousBlockHashBE.hex} to chain with current tips=${tip.hashBE.hex}") + val tipResultF = TipValidation.checkNewTip(newPotentialTip = header, + currentTip = tip, + blockHeaderDAO = + blockHeaderDAO) + + tipResultF.map { tipResult => + tipResult match { + case TipUpdateResult.Success(headerDb) => + val newChain = + Blockchain.fromHeaders(headerDb +: blockchain.headers) + BlockchainUpdate.Successful(newChain, headerDb) + case fail: TipUpdateResult.Failure => + BlockchainUpdate.Failed(blockchain, header, fail) + } + } + } + parseSuccessOrFailure(nested = nested) + } + + tipResultF + } + + /** Takes in a vector of blockchain updates being executed asynchronously, we can only connect one [[BlockHeader header]] + * to a tip successfully, which means _all_ other [[BlockchainUpdate updates]] must fail. This is a helper method + * to find the one [[BlockchainUpdate.Successful successful]] update, or else returns one of the [[BlockchainUpdate.Failed failures]] + * @param nested + * @param ec + * @return + */ + private def parseSuccessOrFailure(nested: Vector[Future[BlockchainUpdate]])( + implicit ec: ExecutionContext): Future[BlockchainUpdate] = { + val successfulTipOptF: Future[Option[BlockchainUpdate]] = { + Future.find(nested) { + case update: BlockchainUpdate => + update.isInstanceOf[BlockchainUpdate.Successful] + } + } + + successfulTipOptF.flatMap { + case Some(update) => Future.successful(update) + case None => + //if we didn't successfully connect a tip, just take the first failure we see + Future + .find(nested) { + case update: BlockchainUpdate => + update.isInstanceOf[BlockchainUpdate.Failed] + } + .map(_.get) + } + } +} diff --git a/chain/src/main/scala/org/bitcoins/chain/blockchain/BlockchainBuilder.scala b/chain/src/main/scala/org/bitcoins/chain/blockchain/BlockchainBuilder.scala new file mode 100644 index 0000000000..43c6495a36 --- /dev/null +++ b/chain/src/main/scala/org/bitcoins/chain/blockchain/BlockchainBuilder.scala @@ -0,0 +1,26 @@ +package org.bitcoins.chain.blockchain + +import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderDb} + +import scala.collection.mutable + +/** + * @inheritdoc + * @param blockHeaderDAO + */ +case class BlockchainBuilder(blockHeaderDAO: BlockHeaderDAO) extends mutable.Builder[BlockHeaderDb, Blockchain] { + private val internal = Vector.newBuilder[BlockHeaderDb] + + + override def result(): Blockchain = { + Blockchain.fromHeaders(internal.result().reverse) + } + + override def +=(blockHeaderDb: BlockHeaderDb): this.type = { + internal.+=(blockHeaderDb) + this + } + + + override def clear(): Unit = internal.clear() +} diff --git a/chain/src/main/scala/org/bitcoins/chain/blockchain/BlockchainUpdate.scala b/chain/src/main/scala/org/bitcoins/chain/blockchain/BlockchainUpdate.scala new file mode 100644 index 0000000000..cea19ea380 --- /dev/null +++ b/chain/src/main/scala/org/bitcoins/chain/blockchain/BlockchainUpdate.scala @@ -0,0 +1,35 @@ +package org.bitcoins.chain.blockchain + +import org.bitcoins.chain.models.BlockHeaderDb +import org.bitcoins.chain.validation.TipUpdateResult +import org.bitcoins.core.protocol.blockchain.BlockHeader + +/** Represents the state of an update to our [[org.bitcoins.chain.blockchain.Blockchain Blockchain]] + * An example of a successful update is receiving a [[BlockHeader BlockHeader]] and successfully + * adding it to our database. + * + * An example of a [[org.bitcoins.chain.blockchain.BlockchainUpdate.Failed Failed]] update + * is when we receive a [[BlockHeader]] that is invalid and because of a + * [[org.bitcoins.chain.validation.TipUpdateResult.Failure TipUpdateFailure]] + * because of [[org.bitcoins.chain.validation.TipUpdateResult.BadPOW BadPOW]] or a + * [[org.bitcoins.chain.validation.TipUpdateResult.BadNonce BadNonce]] etc + */ +sealed abstract class BlockchainUpdate + +object BlockchainUpdate { + + /** The key thing we receive here is [[org.bitcoins.chain.models.BlockHeaderDb BlockHeaderDb]] + * with a height assigned to it this happens after + * calling [[ChainHandler.processHeader() ChainHandler.processHeader]] + */ + case class Successful(blockchain: Blockchain, updatedHeader: BlockHeaderDb) + extends BlockchainUpdate { + def height: Long = updatedHeader.height + } + + case class Failed( + blockchain: Blockchain, + failedHeader: BlockHeader, + tipUpdateFailure: TipUpdateResult.Failure) + extends BlockchainUpdate +} diff --git a/chain/src/main/scala/org/bitcoins/chain/blockchain/ChainHandler.scala b/chain/src/main/scala/org/bitcoins/chain/blockchain/ChainHandler.scala new file mode 100644 index 0000000000..da1deb7fb7 --- /dev/null +++ b/chain/src/main/scala/org/bitcoins/chain/blockchain/ChainHandler.scala @@ -0,0 +1,73 @@ +package org.bitcoins.chain.blockchain + +import org.bitcoins.chain.api.ChainApi +import org.bitcoins.chain.config.ChainAppConfig +import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderDb} +import org.bitcoins.core.crypto.DoubleSha256DigestBE +import org.bitcoins.core.protocol.blockchain.BlockHeader +import org.bitcoins.core.util.BitcoinSLogger + +import scala.concurrent.{ExecutionContext, Future} + +/** + * Chain Handler is meant to be the reference implementation + * of [[ChainApi]], this is the entry point in to the + * chain project. + */ +case class ChainHandler( + blockHeaderDAO: BlockHeaderDAO, + chainConfig: ChainAppConfig) + extends ChainApi + with BitcoinSLogger { + + override def getBlockCount: Future[Long] = { + blockHeaderDAO.maxHeight + } + + override def getHeader( + hash: DoubleSha256DigestBE): Future[Option[BlockHeaderDb]] = { + blockHeaderDAO.findByHash(hash) + } + + override def processHeader(header: BlockHeader)( + implicit ec: ExecutionContext): Future[ChainHandler] = { + + val blockchainUpdateF = Blockchain.connectTip(header, blockHeaderDAO) + + val newHandlerF = blockchainUpdateF.flatMap { + case BlockchainUpdate.Successful(_, updatedHeader) => + //now we have successfully connected the header, we need to insert + //it into the database + val createdF = blockHeaderDAO.create(updatedHeader) + createdF.map(_ => ChainHandler(blockHeaderDAO, chainConfig)) + case BlockchainUpdate.Failed(_, _, reason) => + val errMsg = + s"Failed to add header to chain, header=${header.hashBE.hex} reason=${reason}" + logger.warn(errMsg) + Future.failed(new RuntimeException(errMsg)) + } + + blockchainUpdateF.failed.foreach { err => + logger.error( + s"Failed to connect header=${header.hashBE.hex} err=${err.getMessage}") + + } + + newHandlerF + } + + /** + * @inheritdoc + */ + override def getBestBlockHash( + implicit ec: ExecutionContext): Future[DoubleSha256DigestBE] = { + //naive implementation, this is looking for the tip with the _most_ proof of work + //this does _not_ mean that it is on the chain that has the most work + //TODO: Enhance this in the future to return the "heaviest" header + //https://bitcoin.org/en/glossary/block-chain + blockHeaderDAO.chainTips.map { tips => + val sorted = tips.sortBy(header => header.blockHeader.difficulty) + sorted.head.hashBE + } + } +} diff --git a/chain/src/main/scala/org/bitcoins/chain/blockchain/CheckHeaderResult.scala b/chain/src/main/scala/org/bitcoins/chain/blockchain/CheckHeaderResult.scala new file mode 100644 index 0000000000..0abee548ec --- /dev/null +++ b/chain/src/main/scala/org/bitcoins/chain/blockchain/CheckHeaderResult.scala @@ -0,0 +1,5 @@ +package org.bitcoins.chain.blockchain + +import org.bitcoins.chain.validation.TipUpdateResult + +case class CheckHeaderResult(result: TipUpdateResult, chain: Blockchain) diff --git a/chain/src/main/scala/org/bitcoins/chain/blockchain/sync/ChainSync.scala b/chain/src/main/scala/org/bitcoins/chain/blockchain/sync/ChainSync.scala new file mode 100644 index 0000000000..f0984f9211 --- /dev/null +++ b/chain/src/main/scala/org/bitcoins/chain/blockchain/sync/ChainSync.scala @@ -0,0 +1,124 @@ +package org.bitcoins.chain.blockchain.sync + +import org.bitcoins.chain.api.ChainApi +import org.bitcoins.chain.blockchain.ChainHandler +import org.bitcoins.chain.models.BlockHeaderDb +import org.bitcoins.core.crypto.DoubleSha256DigestBE +import org.bitcoins.core.protocol.blockchain.BlockHeader +import org.bitcoins.core.util.BitcoinSLogger + +import scala.concurrent.{ExecutionContext, Future} + +trait ChainSync extends BitcoinSLogger { + + /** This method checks if our chain handler has the tip of the blockchain as an external source + * If we do not have the same chain, we sync our chain handler until we are at the same best block hash + * @param chainHandler our internal chain handler + * @param getBlockHeaderFunc a function that we can call to retrieve a block + * @param getBestBlockHashFunc a function that can call a third party source (bitcoind, block explorer etc) + * to retrieve what the best block is on the blockchain + * @param ec + * @return + */ + def sync(chainHandler: ChainHandler, + getBlockHeaderFunc: DoubleSha256DigestBE => Future[BlockHeader], + getBestBlockHashFunc: () => Future[DoubleSha256DigestBE])(implicit ec: ExecutionContext): Future[ChainApi] = { + val currentTipsF: Future[Vector[BlockHeaderDb]] = { + chainHandler.blockHeaderDAO.chainTips + } + + //TODO: We are implicitly trusting whatever + // getBestBlockHashFunc returns as the best chain + // and we don't ever even have to have this connect + // with our current best tips + // do we some how want to mitigate against the divergence + // in chains here? + val bestBlockHashF = { + getBestBlockHashFunc() + } + + val updatedChainApi = bestBlockHashF.flatMap { bestBlockHash => + currentTipsF.flatMap { tips => + syncTips(chainApi = chainHandler, + tips = tips, + bestBlockHash = bestBlockHash, + getBlockHeaderFunc = getBlockHeaderFunc) + } + } + + updatedChainApi + + } + + + /** + * Keeps walking backwards on the chain until we match one + * of the tips we have in our chain + * @param chainApi the chain api that represents our current chain state + * @param tips the best block header we know about + * @param bestBlockHash the best block header seen by our third party data source + * @param getBlockHeaderFunc how we can retrieve block headers + * @param ec + * @return + */ + private def syncTips(chainApi: ChainApi, + tips: Vector[BlockHeaderDb], + bestBlockHash: DoubleSha256DigestBE, + getBlockHeaderFunc: DoubleSha256DigestBE => Future[BlockHeader])(implicit ec: ExecutionContext): Future[ChainApi] = { + require(tips.nonEmpty, s"Cannot sync without the genesis block") + + //we need to walk backwards on the chain until we get to one of our tips + + val tipsBH = tips.map(_.blockHeader) + + def loop(lastHeaderF: Future[BlockHeader], accum: List[BlockHeader]): Future[List[BlockHeader]] = { + lastHeaderF.flatMap { lastHeader => + if (tipsBH.contains(lastHeader)) { + //means we have synced back to a block that we know + Future.successful(accum) + } else { + + logger.debug(s"Last header=${lastHeader.hashBE.hex}") + //we don't know this block, so we need to keep walking backwards + //to find a block a we know + val newLastHeaderF = getBlockHeaderFunc(lastHeader.previousBlockHashBE) + + loop(newLastHeaderF,lastHeader +: accum) + } + } + } + + val bestHeaderF = getBlockHeaderFunc(bestBlockHash) + + bestHeaderF.map { bestHeader => + logger.info(s"Best tip from third party=${bestHeader.hashBE.hex} currentTips=${tips.map(_.hashBE.hex)}") + } + + //one sanity check to make sure we aren't _ahead_ of our data source + val hasBlockHashF = chainApi.getHeader(bestBlockHash) + + hasBlockHashF.flatMap { hasBlockHashF: Option[BlockHeaderDb] => + if (hasBlockHashF.isDefined) { + //if we have the best block hash in our + //chainstate already, we don't need to search + //for it again! + Future.successful(chainApi) + } else { + //this represents all headers we have received from our external data source + //and need to process with our chain handler + val headersToSyncF = loop(bestHeaderF, List.empty) + + //now we are going to add them to our chain and return the chain api + headersToSyncF.flatMap { headers => + logger.info(s"Attempting to sync ${headers.length} blockheader to our chainstate") + chainApi.processHeaders(headers.toVector) + } + } + + } + + } +} + + +object ChainSync extends ChainSync \ No newline at end of file diff --git a/chain/src/main/scala/org/bitcoins/chain/config/ChainAppConfig.scala b/chain/src/main/scala/org/bitcoins/chain/config/ChainAppConfig.scala new file mode 100644 index 0000000000..81e3ef176f --- /dev/null +++ b/chain/src/main/scala/org/bitcoins/chain/config/ChainAppConfig.scala @@ -0,0 +1,62 @@ +package org.bitcoins.chain.config + +import com.typesafe.config.Config +import org.bitcoins.chain.db.ChainDbManagement +import org.bitcoins.db._ +import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderDbHelper} +import org.bitcoins.core.util.FutureUtil + +import scala.concurrent.ExecutionContext +import scala.concurrent.Future +import scala.concurrent.Promise +import scala.util.Success +import scala.util.Failure + +case class ChainAppConfig(val confs: Config*) extends AppConfig { + override protected val configOverrides: List[Config] = confs.toList + override protected val moduleConfigName: String = "chain.conf" + override protected type ConfigType = ChainAppConfig + override protected def newConfigOfType( + configs: List[Config]): ChainAppConfig = ChainAppConfig(configs: _*) + + def isInitialized()(implicit ec: ExecutionContext): Future[Boolean] = { + val bhDAO = BlockHeaderDAO(this) + val p = Promise[Boolean]() + val isDefinedOptF = { + bhDAO.read(chain.genesisBlock.blockHeader.hashBE).map(_.isDefined) + } + isDefinedOptF.onComplete { + case Success(bool) => + logger.info(s"Chain project is initialized") + p.success(bool) + case Failure(err) => + logger.info(s"Failed to init chain app err=${err.getMessage}") + p.success(false) + } + + p.future + } + + /** Initializes our chain project if it is needed + * This creates the necessary tables for the chain project + * and inserts preliminary data like the genesis block header + * */ + def initialize(implicit ec: ExecutionContext): Future[Unit] = { + val blockHeaderDAO = BlockHeaderDAO(this) + val isInitF = isInitialized() + isInitF.flatMap { isInit => + if (isInit) { + FutureUtil.unit + } else { + val createdF = ChainDbManagement.createAll()(this, ec) + val genesisHeader = + BlockHeaderDbHelper.fromBlockHeader(height = 0, + bh = + chain.genesisBlock.blockHeader) + val bhCreatedF = + createdF.flatMap(_ => blockHeaderDAO.create(genesisHeader)) + bhCreatedF.flatMap(_ => FutureUtil.unit) + } + } + } +} diff --git a/chain/src/main/scala/org/bitcoins/chain/db/ChainDbManagement.scala b/chain/src/main/scala/org/bitcoins/chain/db/ChainDbManagement.scala new file mode 100644 index 0000000000..05ad18bc9e --- /dev/null +++ b/chain/src/main/scala/org/bitcoins/chain/db/ChainDbManagement.scala @@ -0,0 +1,31 @@ +package org.bitcoins.chain.db + +import org.bitcoins.db._ +import org.bitcoins.chain.models.BlockHeaderTable +import org.bitcoins.db.{DbManagement} +import slick.lifted.TableQuery + +import scala.concurrent.Future + +/** + * Responsible for creating and destroying database + * tables inside of the Chain project. + */ +sealed abstract class ChainDbManagement extends DbManagement { + + private val chainTable: TableQuery[BlockHeaderTable] = + TableQuery[BlockHeaderTable] + + override val allTables = List(chainTable) + + def createHeaderTable(createIfNotExists: Boolean = true)( + implicit config: AppConfig): Future[Unit] = { + createTable(chainTable, createIfNotExists) + } + + def dropHeaderTable()(implicit config: AppConfig): Future[Unit] = { + dropTable(chainTable) + } +} + +object ChainDbManagement extends ChainDbManagement diff --git a/chain/src/main/scala/org/bitcoins/chain/models/BlockHeaderDAO.scala b/chain/src/main/scala/org/bitcoins/chain/models/BlockHeaderDAO.scala new file mode 100644 index 0000000000..27b83d3159 --- /dev/null +++ b/chain/src/main/scala/org/bitcoins/chain/models/BlockHeaderDAO.scala @@ -0,0 +1,196 @@ +package org.bitcoins.chain.models + +import org.bitcoins.chain.blockchain.Blockchain +import org.bitcoins.chain.config.ChainAppConfig +import org.bitcoins.core.crypto.DoubleSha256DigestBE +import org.bitcoins.db._ +import slick.jdbc.SQLiteProfile +import slick.jdbc.SQLiteProfile.api._ + +import scala.annotation.tailrec +import scala.concurrent.{ExecutionContext, Future} + +/** + * This class is responsible for all database access related + * to [[org.bitcoins.core.protocol.blockchain.BlockHeader]]s in + * our chain project + */ +case class BlockHeaderDAO(appConfig: ChainAppConfig)( + implicit override val ec: ExecutionContext) + extends CRUD[BlockHeaderDb, DoubleSha256DigestBE] { + + import org.bitcoins.db.DbCommonsColumnMappers._ + + override val table: TableQuery[BlockHeaderTable] = + TableQuery[BlockHeaderTable] + + /** Creates all of the given [[BlockHeaderDb]] in the database */ + override def createAll( + headers: Vector[BlockHeaderDb]): Future[Vector[BlockHeaderDb]] = { + SlickUtil.createAllNoAutoInc(ts = headers, + database = database, + table = table) + } + + override protected def findAll( + ts: Vector[BlockHeaderDb]): Query[Table[_], BlockHeaderDb, Seq] = { + findByPrimaryKeys(ts.map(_.hashBE)) + } + + def findByHash(hash: DoubleSha256DigestBE): Future[Option[BlockHeaderDb]] = { + val query = findByPrimaryKey(hash).result + database.runVec(query).map(_.headOption) + } + + override def findByPrimaryKeys(hashes: Vector[DoubleSha256DigestBE]): Query[ + Table[_], + BlockHeaderDb, + Seq] = { + table.filter(_.hash.inSet(hashes)) + } + + /** Retrives the ancestor for the given block header at the given height + * @param child + * @param height + * @return + */ + def getAncestorAtHeight( + child: BlockHeaderDb, + height: Long): Future[Option[BlockHeaderDb]] = { + /* + * To avoid making many database reads, we make one database read for all + * possibly useful block headers. + */ + val headersF = getBetweenHeights(from = height, to = child.height - 1) + + /* + * We then bucket sort these headers by height so that any ancestor can be found + * in linear time assuming a bounded number of contentious tips. + */ + val headersByHeight: Array[Vector[BlockHeaderDb]] = + new Array[Vector[BlockHeaderDb]](_length = (child.height - height).toInt) + + /* + * I believe Array's of Objects are instantiated with null, which is evil, + * and so we start by giving each element of the array a Vector.empty. + */ + headersByHeight.indices.foreach(index => + headersByHeight(index) = Vector.empty) + + // Bucket sort + headersF.map { headers => + headers.foreach { header => + val index = (header.height - height).toInt + headersByHeight(index) = headersByHeight(index).:+(header) + } + + // Now that the bucket sort is done, we get rid of mutability + val groupedByHeightHeaders: List[Vector[BlockHeaderDb]] = + headersByHeight.toList + + @tailrec + def loop( + currentHeader: BlockHeaderDb, + headersByDescHeight: List[Vector[BlockHeaderDb]]): Option[ + BlockHeaderDb] = { + if (currentHeader.height == height) { + Some(currentHeader) + } else { + val prevHeaderOpt = headersByDescHeight.headOption.flatMap( + _.find(_.hashBE == currentHeader.previousBlockHashBE)) + + prevHeaderOpt match { + case None => None + case Some(prevHeader) => loop(prevHeader, headersByDescHeight.tail) + } + } + } + + loop(child, groupedByHeightHeaders.reverse) + } + } + + /** Retrieves a [[BlockHeaderDb]] at the given height */ + def getAtHeight(height: Long): Future[Vector[BlockHeaderDb]] = { + val query = getAtHeightQuery(height) + database.runVec(query) + } + + def getAtHeightQuery(height: Long): SQLiteProfile.StreamingProfileAction[ + Seq[BlockHeaderDb], + BlockHeaderDb, + Effect.Read] = { + table.filter(_.height === height).result + } + + /** Gets Block Headers between (inclusive) from and to, could be out of order */ + def getBetweenHeights(from: Long, to: Long): Future[Vector[BlockHeaderDb]] = { + val query = getBetweenHeightsQuery(from, to) + database.runVec(query) + } + + def getBetweenHeightsQuery( + from: Long, + to: Long): SQLiteProfile.StreamingProfileAction[ + Seq[BlockHeaderDb], + BlockHeaderDb, + Effect.Read] = { + table.filter(header => header.height >= from && header.height <= to).result + } + + /** Returns the maximum block height from our database */ + def maxHeight: Future[Long] = { + val query = maxHeightQuery + val result = database.run(query) + result + } + + private def maxHeightQuery: SQLiteProfile.ProfileAction[ + Long, + NoStream, + Effect.Read] = { + val query = table.map(_.height).max.getOrElse(0L).result + query + } + + /** Returns the chainTips in our database. This can be multiple headers if we have + * competing blockchains (fork) */ + def chainTips: Future[Vector[BlockHeaderDb]] = { + logger.debug(s"Getting chaintips from: ${database.config.dbConfig.config}") + val aggregate = { + maxHeightQuery.flatMap { height => + logger.debug(s"Max block height: $height") + val atHeight = getAtHeightQuery(height) + atHeight.map { headers => + logger.debug(s"Headers at $height: $headers") + } + atHeight + } + } + + database.runVec(aggregate) + } + + /** Returns competing blockchains that are contained in our BlockHeaderDAO + * Each chain returns the last [[org.bitcoins.core.protocol.blockchain.ChainParams.difficultyChangeInterval difficutly interval]] + * as defined by the network we are on. For instance, on bitcoin mainnet this will be 2016 block headers. + * If no competing tips are found, we only return one [[Blockchain blockchain]], else we + * return n chains for the number of competing [[chainTips tips]] we have + * @see [[Blockchain]] + * @param ec + * @return + */ + def getBlockchains()( + implicit ec: ExecutionContext): Future[Vector[Blockchain]] = { + val chainTipsF = chainTips + val diffInterval = appConfig.chain.difficultyChangeInterval + chainTipsF.flatMap { tips => + val nestedFuture: Vector[Future[Blockchain]] = tips.map { tip => + val height = Math.max(0, tip.height - diffInterval) + val headersF = getBetweenHeights(from = height, to = tip.height) + headersF.map(headers => Blockchain.fromHeaders(headers.reverse)) + } + Future.sequence(nestedFuture) + } + } +} diff --git a/chain/src/main/scala/org/bitcoins/chain/models/BlockHeaderTable.scala b/chain/src/main/scala/org/bitcoins/chain/models/BlockHeaderTable.scala new file mode 100644 index 0000000000..10a07cfca1 --- /dev/null +++ b/chain/src/main/scala/org/bitcoins/chain/models/BlockHeaderTable.scala @@ -0,0 +1,89 @@ +package org.bitcoins.chain.models + +import org.bitcoins.core.crypto.DoubleSha256DigestBE +import org.bitcoins.core.number.{Int32, UInt32} +import org.bitcoins.core.protocol.blockchain.BlockHeader +import slick.jdbc.SQLiteProfile.api._ + +case class BlockHeaderDb( + height: Long, + hashBE: DoubleSha256DigestBE, + version: Int32, + previousBlockHashBE: DoubleSha256DigestBE, + merkleRootHashBE: DoubleSha256DigestBE, + time: UInt32, + nBits: UInt32, + nonce: UInt32, + hex: String) { + + lazy val blockHeader: BlockHeader = { + val blockHeader = BlockHeader.fromHex(hex) + + require(blockHeader.hashBE == hashBE) + require(blockHeader.previousBlockHashBE == previousBlockHashBE) + require(blockHeader.version == version) + require(blockHeader.nBits == nBits) + require(blockHeader.nonce == nonce) + + blockHeader + } +} + +object BlockHeaderDbHelper { + + def fromBlockHeader(height: Long, bh: BlockHeader): BlockHeaderDb = { + BlockHeaderDb( + height = height, + hashBE = bh.hashBE, + previousBlockHashBE = bh.previousBlockHashBE, + merkleRootHashBE = bh.merkleRootHashBE, + time = bh.time, + nBits = bh.nBits, + nonce = bh.nonce, + version = bh.version, + hex = bh.hex + ) + } +} + +/** A table that stores block headers related to a blockchain */ +class BlockHeaderTable(tag: Tag) + extends Table[BlockHeaderDb](tag, "block_headers") { + import org.bitcoins.db.DbCommonsColumnMappers._ + + def height = column[Long]("height") + + def hash = column[DoubleSha256DigestBE]("hash", O.PrimaryKey) + + def version = column[Int32]("version") + + def previousBlockHash = column[DoubleSha256DigestBE]("previous_block_hash") + + def merkleRootHash = column[DoubleSha256DigestBE]("merkle_root_hash") + + def time = column[UInt32]("time") + + def nBits = column[UInt32]("n_bits") + + def nonce = column[UInt32]("nonce") + + def hex = column[String]("hex") + + /** The sql index for searching based on [[height]] */ + def heightIndex = index("height_index", height) + + def hashIndex = index("hash_index", hash) + + def * = { + (height, + hash, + version, + previousBlockHash, + merkleRootHash, + time, + nBits, + nonce, + hex).<>(BlockHeaderDb.tupled, BlockHeaderDb.unapply) + } + +} diff --git a/chain/src/main/scala/org/bitcoins/chain/pow/Pow.scala b/chain/src/main/scala/org/bitcoins/chain/pow/Pow.scala new file mode 100644 index 0000000000..0dcc5517c7 --- /dev/null +++ b/chain/src/main/scala/org/bitcoins/chain/pow/Pow.scala @@ -0,0 +1,119 @@ +package org.bitcoins.chain.pow + +import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderDb} +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.protocol.blockchain.{BlockHeader, ChainParams} +import org.bitcoins.core.util.{BitcoinSLogger, NumberUtil} + +import scala.concurrent.{ExecutionContext, Future} + +/** + * Implements functions found inside of bitcoin core's + * @see [[https://github.com/bitcoin/bitcoin/blob/35477e9e4e3f0f207ac6fa5764886b15bf9af8d0/src/pow.cpp pow.cpp]] + */ +sealed abstract class Pow extends BitcoinSLogger { + + /** + * Gets the next proof of work requirement for a block + * @see [[https://github.com/bitcoin/bitcoin/blob/35477e9e4e3f0f207ac6fa5764886b15bf9af8d0/src/pow.cpp#L13 Mimics bitcoin core implmentation]] + * @param tip + * @param newPotentialTip + * @return + */ + def getNetworkWorkRequired( + tip: BlockHeaderDb, + newPotentialTip: BlockHeader, + blockHeaderDAO: BlockHeaderDAO)( + implicit ec: ExecutionContext): Future[UInt32] = { + val chainParams = blockHeaderDAO.appConfig.chain + val currentHeight = tip.height + + val powLimit = NumberUtil.targetCompression(bigInteger = + chainParams.powLimit, + isNegative = false) + if ((currentHeight + 1) % chainParams.difficultyChangeInterval != 0) { + if (chainParams.allowMinDifficultyBlocks) { + // Special difficulty rule for testnet: + // If the new block's timestamp is more than 2* 10 minutes + // then allow mining of a min-difficulty block. + if (newPotentialTip.time.toLong > tip.blockHeader.time.toLong + chainParams.powTargetSpacing.toSeconds * 2) { + Future.successful(powLimit) + } else { + // Return the last non-special-min-difficulty-rules-block + + // this is complex to implement and requires walking the + //chain until we find a block header that does not have + //the minimum difficulty rule on testnet + + //TODO: This is not correctly implemented, come back and fix this when BlockHeaderDAO has a predicate to satisfy + Future.successful(powLimit) + } + } else { + Future.successful(tip.blockHeader.nBits) + } + } else { + val firstHeight = currentHeight - (chainParams.difficultyChangeInterval - 1) + + require(firstHeight >= 0, s"We must have our first height be postive, got=${firstHeight}") + + val firstBlockAtIntervalF: Future[Option[BlockHeaderDb]] = { + blockHeaderDAO.getAncestorAtHeight(tip, firstHeight) + } + + firstBlockAtIntervalF.flatMap { + case Some(firstBlock) => + calculateNextWorkRequired(currentTip = tip, firstBlock, chainParams) + case None => + Future.failed( + new IllegalArgumentException( + s"Could not find ancestor for block=${tip.hashBE.hex}")) + } + + } + } + + /** + * Calculate the next proof of work requirement for our blockchain + * @see [[https://github.com/bitcoin/bitcoin/blob/35477e9e4e3f0f207ac6fa5764886b15bf9af8d0/src/pow.cpp#L49 bitcoin core implementation]] + * @param currentTip + * @param firstBlock + * @param chainParams + * @return + */ + def calculateNextWorkRequired( + currentTip: BlockHeaderDb, + firstBlock: BlockHeaderDb, + chainParams: ChainParams): Future[UInt32] = { + if (chainParams.noRetargeting) { + Future.successful(currentTip.nBits) + } else { + var actualTimespan = (currentTip.time - firstBlock.time).toLong + val timespanSeconds = chainParams.powTargetTimeSpan.toSeconds + if (actualTimespan < timespanSeconds / 4) { + actualTimespan = timespanSeconds / 4 + } + + if (actualTimespan > timespanSeconds * 4) { + actualTimespan = timespanSeconds * 4 + } + + val powLimit = chainParams.powLimit + + var bnNew = NumberUtil.targetExpansion(currentTip.nBits).difficulty + + bnNew = bnNew * actualTimespan + + bnNew = bnNew / timespanSeconds + + if (bnNew > powLimit) { + bnNew = powLimit + } + + val newTarget = NumberUtil.targetCompression(bnNew, false) + + Future.successful(newTarget) + } + } +} + +object Pow extends Pow diff --git a/chain/src/main/scala/org/bitcoins/chain/validation/TipUpdateResult.scala b/chain/src/main/scala/org/bitcoins/chain/validation/TipUpdateResult.scala new file mode 100644 index 0000000000..7119ae5b49 --- /dev/null +++ b/chain/src/main/scala/org/bitcoins/chain/validation/TipUpdateResult.scala @@ -0,0 +1,28 @@ +package org.bitcoins.chain.validation + +import org.bitcoins.chain.models.BlockHeaderDb +import org.bitcoins.core.protocol.blockchain.BlockHeader + +/** Represents the result of updating the chain with + * the given header + */ +sealed abstract class TipUpdateResult + +object TipUpdateResult { + + /** Indicates we successfully update the chain tip with this header */ + case class Success(header: BlockHeaderDb) extends TipUpdateResult + + sealed abstract class Failure extends TipUpdateResult { + def header: BlockHeader + } + + /** Means that [[header.previousBlockHashBE]] was incorrect */ + case class BadPreviousBlockHash(header: BlockHeader) extends Failure + + /** Means that [[header.nBits]] was invalid */ + case class BadPOW(header: BlockHeader) extends Failure + + /** Means that [[header.nonce]] was invalid */ + case class BadNonce(header: BlockHeader) extends Failure +} diff --git a/chain/src/main/scala/org/bitcoins/chain/validation/TipValidation.scala b/chain/src/main/scala/org/bitcoins/chain/validation/TipValidation.scala new file mode 100644 index 0000000000..7d9ccaeeb6 --- /dev/null +++ b/chain/src/main/scala/org/bitcoins/chain/validation/TipValidation.scala @@ -0,0 +1,107 @@ +package org.bitcoins.chain.validation + +import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderDb, BlockHeaderDbHelper} +import org.bitcoins.chain.pow.Pow +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.protocol.blockchain.BlockHeader +import org.bitcoins.core.util.{BitcoinSLogger, NumberUtil} + +import scala.concurrent.{ExecutionContext, Future} + +/** + * Responsible for checking if we can connect two + * block headers together on the blockchain. The checks + * things like proof of work difficulty, if it + * references the previous block header correctly etc. + */ +sealed abstract class TipValidation extends BitcoinSLogger { + + /** Checks if the given header can be connected to the current tip + * This is the method where a [[BlockHeader]] is transformed into a + * [[BlockHeaderDb]]. What this really means is that a height is + * assigned to a [[BlockHeader header]] after all these + * validation checks occur + * */ + def checkNewTip( + newPotentialTip: BlockHeader, + currentTip: BlockHeaderDb, + blockHeaderDAO: BlockHeaderDAO)( + implicit ec: ExecutionContext): Future[TipUpdateResult] = { + val header = newPotentialTip + logger.info( + s"Checking header=${header.hashBE.hex} to try to connect to currentTip=${currentTip.hashBE.hex} with height=${currentTip.height}") + + val powCheckF = isBadPow(newPotentialTip = newPotentialTip, + currentTip = currentTip, + blockHeaderDAO = blockHeaderDAO) + + val connectTipResultF: Future[TipUpdateResult] = { + powCheckF.map { expectedWork => + if (header.previousBlockHashBE != currentTip.hashBE) { + logger.warn( + s"Failed to connect tip=${header.hashBE.hex} to current chain") + TipUpdateResult.BadPreviousBlockHash(newPotentialTip) + } else if (header.nBits != expectedWork) { + //https://github.com/bitcoin/bitcoin/blob/eb7daf4d600eeb631427c018a984a77a34aca66e/src/pow.cpp#L19 + TipUpdateResult.BadPOW(newPotentialTip) + } else if (isBadNonce(newPotentialTip)) { + TipUpdateResult.BadNonce(newPotentialTip) + } else { + val headerDb = BlockHeaderDbHelper.fromBlockHeader( + height = currentTip.height + 1, + bh = newPotentialTip + ) + TipUpdateResult.Success(headerDb) + } + } + } + + logTipResult(connectTipResultF, currentTip) + connectTipResultF + } + + /** Logs the result of [[org.bitcoins.chain.validation.TipValidation.checkNewTip() checkNewTip]] */ + private def logTipResult( + connectTipResultF: Future[TipUpdateResult], + currentTip: BlockHeaderDb)(implicit ec: ExecutionContext): Unit = { + connectTipResultF.map { + case TipUpdateResult.Success(tipDb) => + logger.info( + s"Successfully connected ${tipDb.hashBE.hex} with height=${tipDb.height} to block=${currentTip.hashBE.hex} with height=${currentTip.height}") + + case bad: TipUpdateResult.Failure => + logger.warn( + s"Failed to connect ${bad.header.hashBE.hex} to ${currentTip.hashBE.hex} with height=${currentTip.height}, reason=${bad}") + + } + + () + } + + /** Checks if [[header]] hashes to meet the POW requirements for this block (nBits) + * Mimics this + * @see [[https://github.com/bitcoin/bitcoin/blob/eb7daf4d600eeb631427c018a984a77a34aca66e/src/pow.cpp#L74]] + * */ + def isBadNonce(header: BlockHeader): Boolean = { + //convert hash into a big integer + val headerWork = BigInt(1, header.hashBE.bytes.toArray) + if (headerWork <= 0 || NumberUtil.isNBitsOverflow(nBits = header.nBits)) { + true + } else { + headerWork > header.difficulty + } + } + + private def isBadPow( + newPotentialTip: BlockHeader, + currentTip: BlockHeaderDb, + blockHeaderDAO: BlockHeaderDAO)( + implicit ec: ExecutionContext): Future[UInt32] = { + Pow.getNetworkWorkRequired(tip = currentTip, + newPotentialTip = newPotentialTip, + blockHeaderDAO = blockHeaderDAO) + + } +} + +object TipValidation extends TipValidation diff --git a/core-test/src/test/resources/logback-test.xml b/core-test/src/test/resources/logback-test.xml index c3b03af9bb..28d373cb48 100644 --- a/core-test/src/test/resources/logback-test.xml +++ b/core-test/src/test/resources/logback-test.xml @@ -1,23 +1,9 @@ - - - logs/test-application.log - - %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n - - - + - diff --git a/core-test/src/test/scala/org/bitcoins/core/crypto/AesCryptTest.scala b/core-test/src/test/scala/org/bitcoins/core/crypto/AesCryptTest.scala index 6545d8b8cd..527aa3a68b 100644 --- a/core-test/src/test/scala/org/bitcoins/core/crypto/AesCryptTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/crypto/AesCryptTest.scala @@ -10,7 +10,6 @@ class AesCryptTest extends BitcoinSUnitTest { val password = AesPassword("PASSWORD") val badPassword = AesPassword("BAD_PASSWORD") - val emptyPassword = AesPassword("") /** * The test vectors in this test was generated by using @@ -111,26 +110,6 @@ class AesCryptTest extends BitcoinSUnitTest { } - it must "fail when encrypting with an empty password" in { - val encryptE = - AesCrypt.encrypt(plainText = hex"abcdef", password = emptyPassword) - encryptE match { - case Right(_) => fail("Was able to encrypt with an empty password!") - case Left(AesException.EmptyPasswordException) => succeed - case Left(exc) => fail("Failed with unexpected exception", exc) - } - } - - it must "fail when decrypting with an empty password" in { - val encrypted = AesCrypt.encryptExc(plainText = hex"123456789", password) - AesCrypt.decrypt(encrypted, emptyPassword) match { - case Right(_) => fail("Was able to decrypt with an empty password!") - case Left(AesException.EmptyPasswordException) => succeed - case Left(exc) => fail("Failed with unexpected exception", exc) - } - - } - it must "have encryption and decryption symmetry" in { forAll(NumberGenerator.bytevector, StringGenerators.genString.suchThat(_.nonEmpty)) { @@ -155,4 +134,8 @@ class AesCryptTest extends BitcoinSUnitTest { } } } + + it must "fail to create an empty AES password" in { + assertThrows[IllegalArgumentException](AesPassword("")) + } } diff --git a/core-test/src/test/scala/org/bitcoins/core/crypto/bip32/BIP32PathTest.scala b/core-test/src/test/scala/org/bitcoins/core/crypto/bip32/BIP32PathTest.scala index 29ce895dce..f2977e31c6 100644 --- a/core-test/src/test/scala/org/bitcoins/core/crypto/bip32/BIP32PathTest.scala +++ b/core-test/src/test/scala/org/bitcoins/core/crypto/bip32/BIP32PathTest.scala @@ -12,6 +12,7 @@ import org.scalacheck.{Gen, Shrink} import org.scalatest.path import scala.util.{Success, Try} +import org.bitcoins.core.crypto.ExtPrivateKey class BIP32PathTest extends BitcoinSUnitTest { @@ -127,4 +128,67 @@ class BIP32PathTest extends BitcoinSUnitTest { assert(path == BIP32Path.fromString(toString)) } } + + it must "do path diffing" in { + { + val first = BIP32Path.fromString("m/44'/1'") + assert(first.diff(first).contains(BIP32Path.empty)) + } + + { + val first = BIP32Path.fromString("m/44'/0'/0'") + val second = BIP32Path.fromString("m/44'/0'/0'/0/2") + val expected = BIP32Path.fromString("m/0/2") + assert(first.diff(second).contains(expected)) + } + + { + val first = BIP32Path.fromString("m/44'/0'/0'/1") + val second = BIP32Path.fromString("m/44'/0'/0'/1/2") + val expected = BIP32Path.fromString("m/2") + assert(first.diff(second).contains(expected)) + } + + { + val first = BIP32Path.fromString("m/44'/1'") + val second = BIP32Path.fromString("m/44'") + assert(first.diff(second).isEmpty) + } + + { + val first = BIP32Path.fromString("m/44'") + val second = BIP32Path.fromString("m/44'/1'") + val expected = BIP32Path.fromString("m/1'") + assert(first.diff(second).contains(expected)) + } + + { + val first = BIP32Path.fromString("m/44'/1'") + val second = BIP32Path.fromString("m/43'/2'") + assert(first.diff(second).isEmpty) + } + + { + val first = BIP32Path.fromString("m/44'/1/0") + val second = BIP32Path.fromString("m/44'/2/0") + assert(first.diff(second).isEmpty) + } + + } + + it must "do path diffing without altering the result" in { + forAll(HDGenerators.diffableHDPaths, CryptoGenerators.extPrivateKey) { + case ((short, long), xpriv) => + val diffed = short.diff(long) match { + case None => fail(s"$short and $long was not diffable!") + case Some(value) => value + } + + val longDerived = xpriv.deriveChildPrivKey(long) + val diffDerived = + xpriv.deriveChildPrivKey(short).deriveChildPrivKey(diffed) + assert(longDerived == diffDerived) + + } + } } diff --git a/core/src/main/resources/common-logback.xml b/core/src/main/resources/common-logback.xml new file mode 100644 index 0000000000..cd505a8958 --- /dev/null +++ b/core/src/main/resources/common-logback.xml @@ -0,0 +1,54 @@ + + + logs/application.log + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}.%M\(%line\) - %msg%n + + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}.%M\(%line\) - %msg%n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/src/main/scala/org/bitcoins/core/config/NetworkParameters.scala b/core/src/main/scala/org/bitcoins/core/config/NetworkParameters.scala index df8a55e14a..aa7deb2c14 100644 --- a/core/src/main/scala/org/bitcoins/core/config/NetworkParameters.scala +++ b/core/src/main/scala/org/bitcoins/core/config/NetworkParameters.scala @@ -45,12 +45,9 @@ sealed abstract class NetworkParameters { */ def magicBytes: ByteVector - /** In bitcoin, the network recaculates the difficulty for the network every 2016 blocks */ - def difficultyChangeThreshold: Int } sealed abstract class BitcoinNetwork extends NetworkParameters { - override def difficultyChangeThreshold: Int = 2016 override def chainParams: BitcoinChainParams } @@ -74,20 +71,23 @@ sealed abstract class MainNet extends BitcoinNetwork { /** * @inheritdoc */ - override def dnsSeeds: Seq[String] = - Seq("seed.bitcoin.sipa.be", - "dnsseed.bluematt.me", - "dnsseed.bitcoin.dashjr.org", - "seed.bitcoinstats.com", - "bitseed.xf2.org", - "seed.bitcoin.jonasschnelli.ch") + override def dnsSeeds = { + List( + "seed.bitcoin.sipa.be", + "dnsseed.bluematt.me", + "dnsseed.bitcoin.dashjr.org", + "seed.bitcoinstats.com", + "seed.btc.petertodd.org", + "seed.bitcoin.jonasschnelli.ch", + "seed.bitcoin.sprovoost.nl" + ) + } /** * @inheritdoc */ override def magicBytes = ByteVector(0xf9, 0xbe, 0xb4, 0xd9) - override def difficultyChangeThreshold: Int = 2016 } object MainNet extends MainNet @@ -117,7 +117,6 @@ sealed abstract class TestNet3 extends BitcoinNetwork { */ override def magicBytes = ByteVector(0x0b, 0x11, 0x09, 0x07) - override def difficultyChangeThreshold: Int = 2016 } object TestNet3 extends TestNet3 @@ -144,7 +143,6 @@ sealed abstract class RegTest extends BitcoinNetwork { * @inheritdoc */ override def magicBytes = ByteVector(0xfa, 0xbf, 0xb5, 0xda) - override def difficultyChangeThreshold: Int = 2016 } object RegTest extends RegTest diff --git a/core/src/main/scala/org/bitcoins/core/crypto/AesCrypt.scala b/core/src/main/scala/org/bitcoins/core/crypto/AesCrypt.scala index 9f37bf3f0f..bbb3865e9d 100644 --- a/core/src/main/scala/org/bitcoins/core/crypto/AesCrypt.scala +++ b/core/src/main/scala/org/bitcoins/core/crypto/AesCrypt.scala @@ -17,7 +17,12 @@ case class AesSalt( value: ByteVector ) -case class AesPassword(value: String) +/** + * @throws IllegalArgumentException if passed an empty string + */ +case class AesPassword(value: String) { + require(value.nonEmpty, "AES passwords cannot be empty!") +} /** * Provides functionality for encrypting and decrypting with AES diff --git a/core/src/main/scala/org/bitcoins/core/crypto/BIP39Seed.scala b/core/src/main/scala/org/bitcoins/core/crypto/BIP39Seed.scala index 346f3ad15d..6dc0557c91 100644 --- a/core/src/main/scala/org/bitcoins/core/crypto/BIP39Seed.scala +++ b/core/src/main/scala/org/bitcoins/core/crypto/BIP39Seed.scala @@ -31,6 +31,8 @@ object BIP39Seed extends Factory[BIP39Seed] { override def fromBytes(bytes: ByteVector): BIP39Seed = BIP39SeedImpl(bytes) + val EMPTY_PASSWORD = "" + private val ITERATION_COUNT = 2048 private val DERIVED_KEY_LENGTH = 512 @@ -39,7 +41,9 @@ object BIP39Seed extends Factory[BIP39Seed] { * seed from a mnemonic code. An optional password can be supplied. * @param password Defaults to the empty string */ - def fromMnemonic(mnemonic: MnemonicCode, password: String = ""): BIP39Seed = { + def fromMnemonic( + mnemonic: MnemonicCode, + password: String = EMPTY_PASSWORD): BIP39Seed = { val salt = s"mnemonic$password" val words = mnemonic.words.mkString(" ") diff --git a/core/src/main/scala/org/bitcoins/core/crypto/HashDigest.scala b/core/src/main/scala/org/bitcoins/core/crypto/HashDigest.scala index 4b82ff6e34..7902c09c68 100644 --- a/core/src/main/scala/org/bitcoins/core/crypto/HashDigest.scala +++ b/core/src/main/scala/org/bitcoins/core/crypto/HashDigest.scala @@ -68,6 +68,11 @@ object Sha256Digest extends Factory[Sha256Digest] { } override def fromBytes(bytes: ByteVector): Sha256Digest = Sha256DigestImpl(bytes) + + private val e = ByteVector(Array.fill(32)(0.toByte)) + + val empty: Sha256Digest = Sha256Digest.fromBytes(e) + } /** @@ -109,6 +114,9 @@ object DoubleSha256Digest extends Factory[DoubleSha256Digest] { override def fromBytes(bytes: ByteVector): DoubleSha256Digest = DoubleSha256DigestImpl(bytes) + private val e = ByteVector(Array.fill(32)(0.toByte)) + val empty: DoubleSha256Digest = DoubleSha256Digest.fromBytes(e) + } /** The big endian version of [[org.bitcoins.core.crypto.DoubleSha256Digest DoubleSha256Digest]] */ @@ -128,6 +136,7 @@ object DoubleSha256DigestBE extends Factory[DoubleSha256DigestBE] { override def fromBytes(bytes: ByteVector): DoubleSha256DigestBE = DoubleSha256DigestBEImpl(bytes) + val empty: DoubleSha256DigestBE = DoubleSha256Digest.empty.flip } /** diff --git a/core/src/main/scala/org/bitcoins/core/crypto/MnemonicCode.scala b/core/src/main/scala/org/bitcoins/core/crypto/MnemonicCode.scala index 86aa3392d2..be502432f6 100644 --- a/core/src/main/scala/org/bitcoins/core/crypto/MnemonicCode.scala +++ b/core/src/main/scala/org/bitcoins/core/crypto/MnemonicCode.scala @@ -53,7 +53,7 @@ sealed abstract class MnemonicCode { * Returns the entropy initially provided to construct * this mnemonic code */ - private[crypto] def toEntropy: BitVector = { + private[bitcoins] def toEntropy: BitVector = { val entropyWithChecksumBits = toEntropyWithChecksum val lengthNoEntropy = MnemonicCode .getMnemonicCodeInfo(words) diff --git a/core/src/main/scala/org/bitcoins/core/hd/BIP32Path.scala b/core/src/main/scala/org/bitcoins/core/hd/BIP32Path.scala index 8e781c227f..c7a97c61b7 100644 --- a/core/src/main/scala/org/bitcoins/core/hd/BIP32Path.scala +++ b/core/src/main/scala/org/bitcoins/core/hd/BIP32Path.scala @@ -6,6 +6,78 @@ import org.bitcoins.core.number.UInt32 abstract class BIP32Path { def path: Vector[BIP32Node] + /** + * BIP32 paths can be subsets/superset of each other. + * If all elements in a path `p` is included in a path + * `P`, (i.e. `p` is a subset of `P`), `p.diff(P)` + * is the elements from `P` that is not in `p`. + * + * @example + * {{{ + * // equal paths + * m/44'/1' diff m/44'/1' == Some(BIP32Path.empty) + * + * // diffable path + * m/44'/0'/0' diff m/44'/0'/0'/0/2 = Some(m/0/2) + * m/44'/0'/0'/1 diff m/44'/0'/0'/1/2 = Some(m/2) + * + * // this is longer than other + * m/44'/1' diff m/44' == None + * + * // any fields are unequal along the way + * m/44'/1' diff m/43'/2' == None + * m/44'/1'/0 diff m/44'/2'/1 == None + * }}} + */ + def diff(that: BIP32Path): Option[BIP32Path] = { + import that.{path => otherPath} + + if (path.length > otherPath.length) { + None + } else if (path == otherPath) { + Some(BIP32Path.empty) + } else { + val lengthDiff = otherPath.length - path.length + + val extendedPath: Vector[Option[BIP32Node]] = path.map(Some(_)) ++ + Vector.fill[Option[BIP32Node]](lengthDiff)(None) + + val pathsWithIndices = extendedPath + .zip(otherPath) + .zipWithIndex + + val calculatedDiff: Option[BIP32Path] = pathsWithIndices + .foldLeft(Option(BIP32Path.empty)) { + // we encountered an error along the way, return + // none + case (None, _) => None + + // we've reached the end of our path, append + // the element from their path but don't + // include the previous one (as + // that's shared) + case (Some(_), ((None, their), index)) if index == path.length => + Some(BIP32Path(their)) + + // append the next divergent element to + // the acummed value + case (Some(accum), ((None, their), _)) => + Some(BIP32Path(accum.path :+ their)) + + // we've not yet reached the start of diverging + // paths + case (Some(_), ((Some(our), their), _)) if our == their => + Some(BIP32Path(our)) + + // paths are divergent, fail the computation + case (Some(_), ((Some(_), _), _)) => + None + } + + calculatedDiff + } + } + override def toString: String = path .map { diff --git a/core/src/main/scala/org/bitcoins/core/hd/HDAddress.scala b/core/src/main/scala/org/bitcoins/core/hd/HDAddress.scala index fafb9d54e3..4584522f52 100644 --- a/core/src/main/scala/org/bitcoins/core/hd/HDAddress.scala +++ b/core/src/main/scala/org/bitcoins/core/hd/HDAddress.scala @@ -18,7 +18,7 @@ sealed abstract class HDAddress extends BIP32Path { def chain: HDChain def index: Int - def toPath: HDPath[_] = purpose match { + def toPath: HDPath = purpose match { case HDPurposes.Legacy => LegacyHDPath(this) case HDPurposes.SegWit => SegWitHDPath(this) case HDPurposes.NestedSegWit => NestedSegWitHDPath(this) diff --git a/core/src/main/scala/org/bitcoins/core/hd/HDPath.scala b/core/src/main/scala/org/bitcoins/core/hd/HDPath.scala index 116b6c33b4..085ca3a35f 100644 --- a/core/src/main/scala/org/bitcoins/core/hd/HDPath.scala +++ b/core/src/main/scala/org/bitcoins/core/hd/HDPath.scala @@ -1,16 +1,44 @@ package org.bitcoins.core.hd import scala.util.Try -private[bitcoins] trait HDPath[T <: HDPath[T]] extends BIP32Path { +private[bitcoins] trait HDPath extends BIP32Path { + + /** + * This type is to give a cleaner return + * type of `next`. + * + * Consider: + * + * {{{ + * def next: this.type = ??? + * + * val first: SegWitHDPath = ??? + * val second = first.next + * // second is now: + * // first.type (with underlying type org.bitcoins.core.hd.SegWitHDPath) + * }}} + + * {{{ + * def next: NextPath = ??? + * + * // in SegWitHDPath + * override type NextPath = SegWitHDPath + * + * val first: SegWitHDPath = ??? + * val second = first.next + * // second is now: + * // SegWitHDPath + * }}} + */ + protected type NextPath <: HDPath /** * Increments the address index and returns the * new path that can be passed into a * [[org.bitcoins.core.crypto.ExtKey ExtKey]] */ - // TODO check out this cast - def next: T = - HDAddress(chain, account.index + 1).toPath.asInstanceOf[T] + def next: NextPath = + HDAddress(chain, account.index + 1).toPath.asInstanceOf[NextPath] def account: HDAccount = address.account @@ -28,7 +56,7 @@ private[bitcoins] trait HDPath[T <: HDPath[T]] extends BIP32Path { object HDPath { /** Attempts to parse a string into a valid HD path */ - def fromString(string: String): Option[HDPath[_]] = + def fromString(string: String): Option[HDPath] = Try(LegacyHDPath.fromString(string)) .orElse(Try(SegWitHDPath.fromString(string))) .orElse(Try(NestedSegWitHDPath.fromString(string))) diff --git a/core/src/main/scala/org/bitcoins/core/hd/LegacyHDPath.scala b/core/src/main/scala/org/bitcoins/core/hd/LegacyHDPath.scala index cdb126382e..672709c947 100644 --- a/core/src/main/scala/org/bitcoins/core/hd/LegacyHDPath.scala +++ b/core/src/main/scala/org/bitcoins/core/hd/LegacyHDPath.scala @@ -1,6 +1,8 @@ package org.bitcoins.core.hd -sealed abstract class LegacyHDPath extends HDPath[LegacyHDPath] +sealed abstract class LegacyHDPath extends HDPath { + override protected type NextPath = LegacyHDPath +} object LegacyHDPath extends HDPathFactory[LegacyHDPath] { diff --git a/core/src/main/scala/org/bitcoins/core/hd/NestedSegWitHDPath.scala b/core/src/main/scala/org/bitcoins/core/hd/NestedSegWitHDPath.scala index 41cfbc31b2..9accd33361 100644 --- a/core/src/main/scala/org/bitcoins/core/hd/NestedSegWitHDPath.scala +++ b/core/src/main/scala/org/bitcoins/core/hd/NestedSegWitHDPath.scala @@ -1,6 +1,8 @@ package org.bitcoins.core.hd -sealed abstract class NestedSegWitHDPath extends HDPath[NestedSegWitHDPath] +sealed abstract class NestedSegWitHDPath extends HDPath { + override protected type NextPath = NestedSegWitHDPath +} object NestedSegWitHDPath extends HDPathFactory[NestedSegWitHDPath] { diff --git a/core/src/main/scala/org/bitcoins/core/hd/SegWitHDPath.scala b/core/src/main/scala/org/bitcoins/core/hd/SegWitHDPath.scala index 3fcc449925..bbacc8db8b 100644 --- a/core/src/main/scala/org/bitcoins/core/hd/SegWitHDPath.scala +++ b/core/src/main/scala/org/bitcoins/core/hd/SegWitHDPath.scala @@ -1,6 +1,8 @@ package org.bitcoins.core.hd -sealed abstract class SegWitHDPath extends HDPath[SegWitHDPath] +sealed abstract class SegWitHDPath extends HDPath { + override protected type NextPath = SegWitHDPath +} object SegWitHDPath extends HDPathFactory[SegWitHDPath] { diff --git a/core/src/main/scala/org/bitcoins/core/protocol/Address.scala b/core/src/main/scala/org/bitcoins/core/protocol/Address.scala index 3f58cc3581..ec51441f04 100644 --- a/core/src/main/scala/org/bitcoins/core/protocol/Address.scala +++ b/core/src/main/scala/org/bitcoins/core/protocol/Address.scala @@ -17,6 +17,11 @@ sealed abstract class Address { /** The string representation of this address */ def value: String + override def equals(obj: Any): Boolean = obj match { + case addr: Address => value == addr.value + case _: Any => false + } + /** Every address is derived from a [[org.bitcoins.core.crypto.HashDigest HashDigest]] in a * [[org.bitcoins.core.protocol.transaction.TransactionOutput TransactionOutput]] */ def hash: HashDigest diff --git a/core/src/main/scala/org/bitcoins/core/protocol/blockchain/ChainParams.scala b/core/src/main/scala/org/bitcoins/core/protocol/blockchain/ChainParams.scala index c8a07e62bc..139839c929 100644 --- a/core/src/main/scala/org/bitcoins/core/protocol/blockchain/ChainParams.scala +++ b/core/src/main/scala/org/bitcoins/core/protocol/blockchain/ChainParams.scala @@ -3,6 +3,7 @@ package org.bitcoins.core.protocol.blockchain import java.math.BigInteger import java.nio.charset.StandardCharsets +import org.bitcoins.core.config.{BitcoinNetwork, MainNet, NetworkParameters, RegTest, TestNet3} import org.bitcoins.core.consensus.Merkle import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.currency.{CurrencyUnit, Satoshis} @@ -178,6 +179,25 @@ sealed abstract class ChainParams { def difficultyChangeInterval: Long = { powTargetTimeSpan.toSeconds / powTargetSpacing.toSeconds } + + /** + * Whether we should allow minimum difficulty blocks or not + * As an example you can trivially mine blocks on [[RegTestNetChainParams]] and [[TestNetChainParams]] + * but not the [[MainNetChainParams]] + * @return + */ + def allowMinDifficultyBlocks: Boolean + + /** + * Whether this chain supports + * proof of work retargeting or not + * @see [[https://github.com/bitcoin/bitcoin/blob/eb7daf4d600eeb631427c018a984a77a34aca66e/src/consensus/params.h#L72 link]] + * @return + */ + def noRetargeting: Boolean + + /** The [[org.bitcoins.core.config.BitcoinNetwork network]] that corresponds to this chain param */ + def network: NetworkParameters } sealed abstract class BitcoinChainParams extends ChainParams { @@ -200,21 +220,11 @@ sealed abstract class BitcoinChainParams extends ChainParams { /** The best chain should have this amount of work */ def minimumChainWork: BigInteger - /** - * Whether we should allow minimum difficulty blocks or not - * As an example you can trivially mine blocks on [[RegTestNetChainParams]] and [[TestNetChainParams]] - * but not the [[MainNetChainParams]] - * @return - */ - def allowMinDifficultyBlocks: Boolean /** - * Whether this chain supports - * proof of work retargeting or not - * [[https://github.com/bitcoin/bitcoin/blob/eb7daf4d600eeb631427c018a984a77a34aca66e/src/consensus/params.h#L72 link]] - * @return + * @inheritdoc */ - def noRetargeting: Boolean + def network: BitcoinNetwork } /** The Main Network parameters. */ @@ -272,6 +282,11 @@ object MainNetChainParams extends BitcoinChainParams { * [[https://github.com/bitcoin/bitcoin/blob/a083f75ba79d465f15fddba7b00ca02e31bb3d40/src/chainparams.cpp#L76 mainnet pow retargetting]] */ override lazy val noRetargeting: Boolean = false + + /** + * @inheritdoc + */ + override lazy val network: BitcoinNetwork = MainNet } object TestNetChainParams extends BitcoinChainParams { @@ -320,6 +335,11 @@ object TestNetChainParams extends BitcoinChainParams { * [[https://github.com/bitcoin/bitcoin/blob/a083f75ba79d465f15fddba7b00ca02e31bb3d40/src/chainparams.cpp#L193 testnet pow retargetting]] */ override lazy val noRetargeting: Boolean = false + + /** + * @inheritdoc + */ + override lazy val network: BitcoinNetwork = TestNet3 } object RegTestNetChainParams extends BitcoinChainParams { @@ -362,6 +382,11 @@ object RegTestNetChainParams extends BitcoinChainParams { * [[https://github.com/bitcoin/bitcoin/blob/a083f75ba79d465f15fddba7b00ca02e31bb3d40/src/chainparams.cpp#L288 regtest pow retargetting]] */ override lazy val noRetargeting: Boolean = true + + /** + * @inheritdoc + */ + override lazy val network: BitcoinNetwork = RegTest } sealed abstract class Base58Type diff --git a/core/src/main/scala/org/bitcoins/core/script/ScriptType.scala b/core/src/main/scala/org/bitcoins/core/script/ScriptType.scala new file mode 100644 index 0000000000..cac82da3eb --- /dev/null +++ b/core/src/main/scala/org/bitcoins/core/script/ScriptType.scala @@ -0,0 +1,69 @@ +package org.bitcoins.core.script + +/** + * The different Bitcoin Script type variations + * + * @see [[https://github.com/bitcoin/bitcoin/blob/fa6180188b8ab89af97860e6497716405a48bab6/src/script/standard.h#L56 standard.h]] + * and [[https://github.com/bitcoin/bitcoin/blob/03732f8644a449af34f4df1bb3b8915fb15ef22c/src/script/standard.cpp#L27 standarc.cpp]] + * from Bitcoin Core + */ +sealed abstract class ScriptType { + import org.bitcoins.core.script.ScriptType._ + override def toString = this match { + case NONSTANDARD => "nonstandard" + case PUBKEY => "pubkey" + case PUBKEYHASH => "pubkeyhash" + case SCRIPTHASH => "scripthash" + case MULTISIG => "multisig" + case NULLDATA => "nulldata" + case WITNESS_V0_KEYHASH => "witness_v0_keyhash" + case WITNESS_V0_SCRIPTHASH => "witness_v0_scripthash" + case WITNESS_UNKNOWN => "witness_unknown" + } +} + +/** + * The different Bitcoin Script type variations + * + * @see [[https://github.com/bitcoin/bitcoin/blob/fa6180188b8ab89af97860e6497716405a48bab6/src/script/standard.h#L56 standard.h]] + * and [[https://github.com/bitcoin/bitcoin/blob/03732f8644a449af34f4df1bb3b8915fb15ef22c/src/script/standard.cpp#L27 standarc.cpp]] + * from Bitcoin Core + */ +object ScriptType { + private val all: Seq[ScriptType] = Vector(NONSTANDARD, + PUBKEY, + PUBKEYHASH, + SCRIPTHASH, + MULTISIG, + NULLDATA, + WITNESS_V0_KEYHASH, + WITNESS_V0_SCRIPTHASH, + WITNESS_UNKNOWN) + + def fromString(string: String): Option[ScriptType] = + all.find(_.toString == string) + + /** Throws if given string is invalid */ + def fromStringExn(string: String): ScriptType = + fromString(string) + .getOrElse( + throw new IllegalArgumentException( + s"$string is not a valid script type!")) + + final case object NONSTANDARD extends ScriptType + + // ╔ "standard" transaction/script types + // V + final case object PUBKEY extends ScriptType + final case object PUBKEYHASH extends ScriptType + final case object SCRIPTHASH extends ScriptType + final case object MULTISIG extends ScriptType + + /** unspendable OP_RETURN script that carries data */ + final case object NULLDATA extends ScriptType + final case object WITNESS_V0_KEYHASH extends ScriptType + final case object WITNESS_V0_SCRIPTHASH extends ScriptType + + /** Only for Witness versions not already defined */ + final case object WITNESS_UNKNOWN extends ScriptType +} diff --git a/core/src/main/scala/org/bitcoins/core/serializers/RawBitcoinSerializerHelper.scala b/core/src/main/scala/org/bitcoins/core/serializers/RawBitcoinSerializerHelper.scala index 635fbca73e..48a91264e7 100644 --- a/core/src/main/scala/org/bitcoins/core/serializers/RawBitcoinSerializerHelper.scala +++ b/core/src/main/scala/org/bitcoins/core/serializers/RawBitcoinSerializerHelper.scala @@ -49,14 +49,23 @@ sealed abstract class RawSerializerHelper { def writeCmpctSizeUInt[T]( ts: Seq[T], serializer: T => ByteVector): ByteVector = { - val serialized = ts.foldLeft(ByteVector.empty) { - case (accum, t) => - val ser = serializer(t) - accum ++ ser - } + val serialized = write(ts,serializer) val cmpct = CompactSizeUInt(UInt64(ts.size)) cmpct.bytes ++ serialized } + + + /** Serializes a [[Seq]] of [[org.bitcoins.core.protocol.NetworkElement]] to a [[scodec.bits.ByteVector]] */ + def writeNetworkElements[T <: NetworkElement](ts: Seq[T]): ByteVector = { + val f = {t : T => t.bytes} + write(ts, f) + } + + def write[T](ts: Seq[T], serializer: T => ByteVector): ByteVector = { + ts.foldLeft(ByteVector.empty) { case (accum, t) => + accum ++ serializer(t) + } + } } object RawSerializerHelper extends RawSerializerHelper diff --git a/core/src/main/scala/org/bitcoins/core/util/BitcoinSLogger.scala b/core/src/main/scala/org/bitcoins/core/util/BitcoinSLogger.scala index 0d9d9b4035..a1f2113011 100644 --- a/core/src/main/scala/org/bitcoins/core/util/BitcoinSLogger.scala +++ b/core/src/main/scala/org/bitcoins/core/util/BitcoinSLogger.scala @@ -5,10 +5,8 @@ import org.slf4j.{Logger, LoggerFactory} /** * Created by chris on 3/11/16. */ -abstract class BitcoinSLogger { - - def logger: Logger = LoggerFactory.getLogger(this.getClass().toString) - +trait BitcoinSLogger { + lazy val logger: Logger = LoggerFactory.getLogger(getClass) } object BitcoinSLogger extends BitcoinSLogger diff --git a/core/src/main/scala/org/bitcoins/core/util/BitcoinSUtil.scala b/core/src/main/scala/org/bitcoins/core/util/BitcoinSUtil.scala index 6bd1f31cb1..dcf4221535 100644 --- a/core/src/main/scala/org/bitcoins/core/util/BitcoinSUtil.scala +++ b/core/src/main/scala/org/bitcoins/core/util/BitcoinSUtil.scala @@ -1,5 +1,8 @@ package org.bitcoins.core.util +import java.net.InetSocketAddress + +import com.sun.jndi.toolkit.url.Uri import org.bitcoins.core.protocol.NetworkElement import scodec.bits.{BitVector, ByteVector} @@ -101,6 +104,10 @@ trait BitcoinSUtil { h.foldLeft(ByteVector.empty)(_ ++ _.bytes) } + def toInetSocketAddress(string: String): InetSocketAddress = { + val uri = new Uri(string) + new InetSocketAddress(uri.getHost, uri.getPort) + } } object BitcoinSUtil extends BitcoinSUtil diff --git a/core/src/main/scala/org/bitcoins/core/util/EitherUtil.scala b/core/src/main/scala/org/bitcoins/core/util/EitherUtil.scala new file mode 100644 index 0000000000..8c4c08206c --- /dev/null +++ b/core/src/main/scala/org/bitcoins/core/util/EitherUtil.scala @@ -0,0 +1,88 @@ +package org.bitcoins.core.util + +import scala.concurrent.{ExecutionContext, Future} +import scala.util.{Try, Success, Failure} + +/** + * @define liftBiasedFut Given a [[scala.Either Either]] that contains a + * [[scala.concurrent.Future Future[L | R] ]] only on one side, + * transforms it into a future [[scala.Either Either[L, R] ]] + */ +object EitherUtil { + + /** + * Flattens a nested `Either[Foo, Future[Foo, Bar]]` into + * a `Future[Either[Foo, Bar]]`. This is useful for situtations + * where the right hand side of an either is asynchronous. + */ + def flattenFutureE[L, R]( + either: Either[L, Future[Either[L, R]]] + ): Future[Either[L, R]] = { + + def ifLeft(left: L): Future[Either[L, R]] = Future.successful(Left(left)) + def ifRight(rightF: Future[Either[L, R]]): Future[Either[L, R]] = rightF + + either.fold(ifLeft, ifRight) + } + + /** $liftBiasedFut */ + def liftRightBiasedFutureE[L, R]( + either: Either[L, Future[R]] + )(implicit ec: ExecutionContext): Future[Either[L, R]] = + either match { + case Right(fut) => fut.map(Right(_)) + case Left(l) => Future.successful(Left(l)) + } + + /** $liftBiasedFut */ + def listLeftBiasedFutureE[L, R]( + either: Either[Future[L], R] + )(implicit ec: ExecutionContext): Future[Either[L, R]] = + either match { + case Left(fut) => fut.map(Left(_)) + case Right(l) => Future.successful(Right(l)) + } + + object EitherOps { + import scala.language.implicitConversions + implicit def either2EnhancedEither[A, B]( + either: Either[A, B] + ): EnchancedEither[A, B] = EnchancedEither(either) + + implicit def enchancedEither2Either[A, B]( + enhanced: EnchancedEither[A, B]): Either[A, B] = enhanced.underlying + } + + /** The methods here are copied directly from the 2.12 stdlib */ + case class EnchancedEither[A, B]( + private[EitherUtil] val underlying: Either[A, B]) { + + /** The given function is applied if this is a `Right`. + * + * {{{ + * Right(12).map(x => "flower") // Result: Right("flower") + * Left(12).map(x => "flower") // Result: Left(12) + * }}} + */ + def map[B1](f: B => B1): EnchancedEither[A, B1] = underlying match { + case Right(b) => EnchancedEither(Right(f(b))) + case _ => EnchancedEither(this.asInstanceOf[Either[A, B1]]) + } + + /** Binds the given function across `Right`. + * + * @param f The function to bind across `Right`. + */ + def flatMap[A1 >: A, B1](f: B => Either[A1, B1]): EnchancedEither[A1, B1] = + underlying match { + case Right(b) => EnchancedEither(f(b)) + case _ => EnchancedEither(underlying.asInstanceOf[Either[A1, B1]]) + } + + def toTry(implicit ev: A <:< Throwable): Try[B] = underlying match { + case Right(b) => Success(b) + case Left(a) => Failure(a) + } + } + +} diff --git a/core/src/main/scala/org/bitcoins/core/util/FileUtil.scala b/core/src/main/scala/org/bitcoins/core/util/FileUtil.scala new file mode 100644 index 0000000000..0385190a9e --- /dev/null +++ b/core/src/main/scala/org/bitcoins/core/util/FileUtil.scala @@ -0,0 +1,9 @@ +package org.bitcoins.core.util + +object FileUtil { + + /** Returns a BufferedSource for any file on the classpath */ + def getFileAsSource(fileName: String): scala.io.BufferedSource = { + scala.io.Source.fromURL(getClass.getResource(s"/$fileName")) + } +} diff --git a/core/src/main/scala/org/bitcoins/core/util/FutureUtil.scala b/core/src/main/scala/org/bitcoins/core/util/FutureUtil.scala new file mode 100644 index 0000000000..677335566c --- /dev/null +++ b/core/src/main/scala/org/bitcoins/core/util/FutureUtil.scala @@ -0,0 +1,8 @@ +package org.bitcoins.core.util + +import scala.concurrent.Future + +object FutureUtil { + + val unit: Future[Unit] = Future.successful(()) +} diff --git a/core/src/main/scala/org/bitcoins/core/util/NumberUtil.scala b/core/src/main/scala/org/bitcoins/core/util/NumberUtil.scala index 9c1f1790c1..05e1380101 100644 --- a/core/src/main/scala/org/bitcoins/core/util/NumberUtil.scala +++ b/core/src/main/scala/org/bitcoins/core/util/NumberUtil.scala @@ -298,6 +298,30 @@ sealed abstract class NumberUtil extends BitcoinSLogger { targetCompression(difficultyHelper.difficulty, difficultyHelper.isNegative) } + /** + * Implements this check for overflowing for [[org.bitcoins.core.protocol.blockchain.BlockHeader.nBits]] + * @see [[https://github.com/bitcoin/bitcoin/blob/2068f089c8b7b90eb4557d3f67ea0f0ed2059a23/src/arith_uint256.cpp#L220 bitcoin core check]] + * @param nBits + * @return + */ + def isNBitsOverflow(nBits: UInt32): Boolean = { + val noSignificand = nBits.bytes.takeRight(3) + val mantissaBytes = { + val withSignBit = noSignificand + val noSignBit = false +: withSignBit.bits.tail + noSignBit.toByteVector + } + + val nSize: Long = nBits.toLong >>> 24L + + val nWord: UInt32 = UInt32.fromBytes(mantissaBytes) + + nWord != UInt32.zero && ( + nSize > 34 || + (nWord > UInt32(UInt8.max.toInt) && nSize > 33) || + (nWord > UInt32(0xffff) && nSize > 32) + ) + } } object NumberUtil extends NumberUtil diff --git a/core/src/main/scala/org/bitcoins/core/wallet/fee/FeeUnit.scala b/core/src/main/scala/org/bitcoins/core/wallet/fee/FeeUnit.scala index f54e1f1870..d6590d310f 100644 --- a/core/src/main/scala/org/bitcoins/core/wallet/fee/FeeUnit.scala +++ b/core/src/main/scala/org/bitcoins/core/wallet/fee/FeeUnit.scala @@ -21,8 +21,26 @@ sealed abstract class FeeUnit { */ sealed abstract class BitcoinFeeUnit extends FeeUnit -case class SatoshisPerByte(currencyUnit: CurrencyUnit) extends BitcoinFeeUnit +case class SatoshisPerByte(currencyUnit: CurrencyUnit) extends BitcoinFeeUnit { + def toSatPerKb: SatoshisPerKiloByte = { + SatoshisPerKiloByte(currencyUnit.satoshis * Satoshis(Int64(1000))) + } +} +case class SatoshisPerKiloByte(currencyUnit: CurrencyUnit) extends BitcoinFeeUnit { + def toSatPerByte: SatoshisPerByte = { + val conversionOpt = (currencyUnit.toBigDecimal * 0.001).toBigIntExact() + conversionOpt match { + case Some(conversion) => + val sat = Satoshis(Int64(conversion)) + SatoshisPerByte(sat) + + case None => + throw new RuntimeException(s"Failed to convert sat/kb -> sat/byte for ${currencyUnit}") + } + + } +} /** * A 'virtual byte' (also known as virtual size) is a new weight measurement that * was created with segregated witness (BIP141). Now 1 'virtual byte' diff --git a/db-commons/README.md b/db-commons/README.md new file mode 100644 index 0000000000..c4f9410b09 --- /dev/null +++ b/db-commons/README.md @@ -0,0 +1,21 @@ +### db-commons + +This is a project that is meant to contain re-usable database related infrastructure for bitcoin-s. This project is a dependency of [`wallet`](../wallet/) and [`node`](../node). + +The library that bitcoin-s currently uses for database related things is called [`Slick`](http://slick.lightbend.com/doc/3.3.0/). + +The most important file in this project is [`DbConfig`](src/main/scala/org/bitcoins/db/DbConfig.scala). This provides a +common way for databases to be accessed from configuration files. For more information on how Slick configuration files +work please see this [reference](http://slick.lightbend.com/doc/3.3.0/gettingstarted.html#database-configuration). + + +This project expects the following keys for databases + +- mainnetDb +- testnet3Db +- regtestDb +- unittestDb + +This will be read by [`DbConfig`](src/main/scala/org/bitcoins/db/DbConfig.scala) to specify database information related +to a specific project. You can look at the database configuration for the [`node`](../node/src/main/resources/application.conf) project for an example +of how this works. \ No newline at end of file diff --git a/db-commons/src/main/resources/db.conf b/db-commons/src/main/resources/db.conf new file mode 100644 index 0000000000..7e3a6bdd25 --- /dev/null +++ b/db-commons/src/main/resources/db.conf @@ -0,0 +1,17 @@ +bitcoin-s { + database { + dataSourceClass = slick.jdbc.DatabaseUrlDataSource + profile = "slick.jdbc.SQLiteProfile$" + dbPath = ${bitcoin-s.datadir}/${bitcoin-s.network}/ + + # this config key is read by Slick + db { + driver = org.sqlite.JDBC + url = "jdbc:sqlite:"${bitcoin-s.database.dbPath}${bitcoin-s.database.name} + + # as long as we're on SQLite there's no point + # in doing connection pooling + connectionPool = disabled + } + } +} diff --git a/db-commons/src/main/resources/reference.conf b/db-commons/src/main/resources/reference.conf new file mode 100644 index 0000000000..2053250f39 --- /dev/null +++ b/db-commons/src/main/resources/reference.conf @@ -0,0 +1,4 @@ +bitcoin-s { + datadir = ${HOME}/.bitcoin-s + network = regtest # regtest, testnet3, mainnet +} \ No newline at end of file diff --git a/db-commons/src/main/scala/org/bitcoins/db/AppConfig.scala b/db-commons/src/main/scala/org/bitcoins/db/AppConfig.scala new file mode 100644 index 0000000000..31295da891 --- /dev/null +++ b/db-commons/src/main/scala/org/bitcoins/db/AppConfig.scala @@ -0,0 +1,278 @@ +package org.bitcoins.db + +import org.bitcoins.core.config.NetworkParameters +import org.bitcoins.core.protocol.blockchain.ChainParams +import java.nio.file.Path +import java.nio.file.Paths + +import org.bitcoins.core.config.MainNet +import org.bitcoins.core.config.TestNet3 +import org.bitcoins.core.config.RegTest +import com.typesafe.config._ +import org.bitcoins.core.util.BitcoinSLogger +import slick.jdbc.SQLiteProfile +import slick.jdbc.SQLiteProfile.api._ + +import scala.util.Try +import scala.util.Success +import scala.util.Failure +import slick.basic.DatabaseConfig +import org.bitcoins.core.protocol.blockchain.MainNetChainParams +import org.bitcoins.core.protocol.blockchain.TestNetChainParams +import org.bitcoins.core.protocol.blockchain.RegTestNetChainParams +import java.nio.file.Files + +import scala.util.Properties +import scala.util.matching.Regex + +/** + * Everything needed to configure functionality + * of bitcoin-s applications is found in here. + * + * @see [[https://github.com/bitcoin-s/bitcoin-s-core/blob/master/doc/configuration.md `configuration.md`]] + * for more information. + */ +abstract class AppConfig extends BitcoinSLogger { + + /** Sub members of AppConfig should override this type with + * the type of themselves, ensuring `withOverrides` return + * the correct type + */ + protected type ConfigType <: AppConfig + + /** Constructor to make a new instance of this config type */ + protected def newConfigOfType(configOverrides: List[Config]): ConfigType + + /** List of user-provided configs that should + * override defaults + */ + protected val configOverrides: List[Config] = List.empty + + /** + * This method returns a new `AppConfig`, where every + * key under `bitcoin-s` overrides the configuration + * picked up by other means (the `reference.conf` + * provided by bitcoin-s and the `application.conf` + * provided by the user). If you pass in configs with + * overlapping keys (e.g. several configs with the key + * `bitcoin-s.network`), the latter config overrides the + * first. + */ + def withOverrides(config: Config, configs: Config*): ConfigType = { + // the two val assignments below are workarounds + // for awkward name resolution in the block below + val firstOverride = config + + val numOverrides = configs.length + 1 + + if (logger.isDebugEnabled()) { + // force lazy evaluation before we print + // our lines + val oldConfStr = this.config.asReadableJson + + logger.debug(s"Creating AppConfig with $numOverrides override(s) ") + logger.debug(s"Old config:") + logger.debug(oldConfStr) + } + + val newConf = newConfigOfType( + configOverrides = List(firstOverride) ++ configs + ) + + // to avoid non-necessary lazy load + if (logger.isDebugEnabled()) { + // force lazy load before we print + val newConfStr = newConf.config.asReadableJson + + logger.debug("New config:") + logger.debug(newConfStr) + } + + newConf + } + + /** + * Name of module specific + * config file. `wallet.conf`, `node.conf`, + * etc. + */ + protected def moduleConfigName: String + + /** + * The configuration details for connecting/using the database for our projects + * that require datbase connections + */ + lazy val dbConfig: DatabaseConfig[SQLiteProfile] = { + //if we don't pass specific class, non-deterministic + //errors around the loaded configuration depending + //on the state of the default classLoader + //https://github.com/lightbend/config#debugging-your-configuration + val dbConfig = { + Try { + DatabaseConfig.forConfig[SQLiteProfile](path = "database", config) + } match { + case Success(value) => + value + case Failure(exception) => + logger.error(s"Error when loading database from config: $exception") + logger.error(s"Configuration: ${config.asReadableJson}") + throw exception + } + } + + logger.trace(s"Resolved DB config: ${dbConfig.config}") + + val _ = createDbFileIfDNE() + + dbConfig + } + + /** The database we are connecting to */ + lazy val database: Database = { + dbConfig.db + } + + /** The path where our DB is located */ + // todo: what happens when to this if we + // dont use SQLite? + lazy val dbPath: Path = { + val pathStr = config.getString("database.dbPath") + val path = Paths.get(pathStr) + logger.debug(s"DB path: $path") + path + } + + private def createDbFileIfDNE(): Unit = { + //should add a check in here that we are using sqlite + if (!Files.exists(dbPath)) { + logger.debug(s"Creating database directory=$dbPath") + val _ = Files.createDirectories(dbPath) + () + } + } + + /** Chain parameters for the blockchain we're on */ + lazy val chain: ChainParams = { + val networkStr = config.getString("network") + networkStr match { + case "mainnet" => MainNetChainParams + case "testnet3" => TestNetChainParams + case "regtest" => RegTestNetChainParams + case other: String => + throw new IllegalArgumentException( + s"'$other' is not a recognized network! Available options: mainnet, testnet3, regtest") + } + } + + /** The blockchain network we're on */ + lazy val network: NetworkParameters = chain.network + + /** + * The underlying config that we derive the + * rest of the fields in this class from + */ + protected lazy val config: Config = { + val moduleConfig = + ConfigFactory.load(moduleConfigName) + + logger.debug( + s"Module config: ${moduleConfig.getConfig("bitcoin-s").asReadableJson}") + + // `load` tries to resolve substitions, + // `parseResources` does not + val dbConfig = ConfigFactory + .parseResources("db.conf") + + logger.trace( + s"DB config: ${dbConfig.getConfig("bitcoin-s").asReadableJson}") + + val classPathConfig = + ConfigFactory + .load() + + logger.trace( + s"Classpath config: ${classPathConfig.getConfig("bitcoin-s").asReadableJson}") + + // loads reference.conf as well as application.conf, + // if the user has made one + val unresolvedConfig = classPathConfig + .withFallback(moduleConfig) + .withFallback(dbConfig) + + logger.trace(s"Unresolved bitcoin-s config:") + logger.trace(unresolvedConfig.getConfig("bitcoin-s").asReadableJson) + + val withOverrides = + if (configOverrides.nonEmpty) { + val overrides = + configOverrides + // we reverse to make the configs specified last take precedent + .reverse + .reduce(_.withFallback(_)) + + val interestingOverrides = overrides.getConfig("bitcoin-s") + logger.trace(s"User-overrides for bitcoin-s config:") + logger.trace(interestingOverrides.asReadableJson) + + // to make the overrides actually override + // the default setings we have to do it + // in this order + overrides.withFallback(unresolvedConfig) + } else { + unresolvedConfig + } + + val config = withOverrides + .resolve() + .getConfig("bitcoin-s") + + logger.debug(s"Resolved bitcoin-s config:") + logger.debug(config.asReadableJson) + + config + + } + + /** The data directory used by bitcoin-s apps */ + lazy val datadir: Path = { + val basedir = Paths.get(config.getString("datadir")) + val lastDirname = network match { + case MainNet => "mainnet" + case TestNet3 => "testnet3" + case RegTest => "regtest" + } + basedir.resolve(lastDirname) + } + +} + +object AppConfig extends BitcoinSLogger { + + /** + * Matches the default data directory location + * with a network appended, + * both with and without a trailing `/` + */ + private val defaultDatadirRegex: Regex = { + (Properties.userHome + "/.bitcoin-s/(testnet3|mainnet|regtest)/?$").r + } + + /** + * Throws if the encountered datadir is the default one. Useful + * in tests, to make sure you don't blow up important data. + */ + private[bitcoins] def throwIfDefaultDatadir(config: AppConfig): Unit = { + val datadirStr = config.datadir.toString() + AppConfig.defaultDatadirRegex.findFirstMatchIn(datadirStr) match { + case None => () // pass + case Some(_) => + val errMsg = + List( + "It looks like you haven't changed the data directory in your test configuration.", + s"Your data directory is $datadirStr. This would cause tests to potentially", + "overwrite your existing data, which you probably don't want." + ).mkString(" ") + throw new RuntimeException(errMsg) + } + } +} diff --git a/db-commons/src/main/scala/org/bitcoins/db/CRUD.scala b/db-commons/src/main/scala/org/bitcoins/db/CRUD.scala new file mode 100644 index 0000000000..e5d4362b8e --- /dev/null +++ b/db-commons/src/main/scala/org/bitcoins/db/CRUD.scala @@ -0,0 +1,148 @@ +package org.bitcoins.db + +import org.bitcoins.core.util.BitcoinSLogger +import slick.jdbc.SQLiteProfile.api._ + +import scala.concurrent.{ExecutionContext, Future} + +/** + * Created by chris on 9/8/16. + * This is an abstract actor that can be used to implement any sort of + * actor that accesses a Postgres database. It creates + * read, update, upsert, and delete methods for your actor to call. + * You are responsible for the create function. You also need to specify + * the table and the database you are connecting to. + */ +abstract class CRUD[T, PrimaryKeyType] extends BitcoinSLogger { + + def appConfig: AppConfig + implicit val ec: ExecutionContext + + /** The table inside our database we are inserting into */ + val table: TableQuery[_ <: Table[T]] + + /** Binding to the actual database itself, this is what is used to run querys */ + def database: SafeDatabase = SafeDatabase(appConfig) + + /** + * create a record in the database + * + * @param t - the record to be inserted + * @return the inserted record + */ + def create(t: T): Future[T] = createAll(Vector(t)).map(_.head) + + def createAll(ts: Vector[T]): Future[Vector[T]] + + /** + * read a record from the database + * + * @param id - the id of the record to be read + * @return Option[T] - the record if found, else none + */ + def read(id: PrimaryKeyType): Future[Option[T]] = { + val query = findByPrimaryKey(id) + val rows: Future[Seq[T]] = database.run(query.result) + rows.map(_.headOption) + } + + /** Update the corresponding record in the database */ + def update(t: T): Future[T] = { + updateAll(Vector(t)).map { ts => + ts.headOption match { + case Some(updated) => updated + case None => throw UpdateFailedException("Update failed for: " + t) + } + } + } + + /** Updates all of the given ts in the database */ + def updateAll(ts: Vector[T]): Future[Vector[T]] = { + val query = findAll(ts) + val actions = ts.map(t => query.update(t)) + val affectedRows: Future[Vector[Int]] = database.run(DBIO.sequence(actions)) + val updatedTs = findAll(ts) + affectedRows.flatMap { _ => + database.runVec(updatedTs.result) + } + } + + /** + * delete the corresponding record in the database + * + * @param t - the record to be deleted + * @return int - the number of rows affected by the deletion + */ + def delete(t: T): Future[Int] = { + logger.debug("Deleting record: " + t) + val query: Query[Table[_], T, Seq] = find(t) + database.run(query.delete) + } + + /** + * insert the record if it does not exist, update it if it does + * + * @param t - the record to inserted / updated + * @return t - the record that has been inserted / updated + */ + def upsert(t: T): Future[T] = upsertAll(Vector(t)).map(_.head) + + /** Upserts all of the given ts in the database, then returns the upserted values */ + def upsertAll(ts: Vector[T]): Future[Vector[T]] = { + val actions = ts.map(t => table.insertOrUpdate(t)) + val result: Future[Vector[Int]] = database.run(DBIO.sequence(actions)) + val findQueryFuture = result.map(_ => findAll(ts).result) + findQueryFuture.flatMap(database.runVec(_)) + } + + /** + * return all rows that have a certain primary key + * + * @param id + * @return Query object corresponding to the selected rows + */ + protected def findByPrimaryKey(id: PrimaryKeyType): Query[Table[_], T, Seq] = + findByPrimaryKeys(Vector(id)) + + /** Finds the rows that correlate to the given primary keys */ + protected def findByPrimaryKeys( + ids: Vector[PrimaryKeyType]): Query[Table[_], T, Seq] + + /** + * return the row that corresponds with this record + * + * @param t - the row to find + * @return query - the sql query to find this record + */ + protected def find(t: T): Query[Table[_], T, Seq] = findAll(Vector(t)) + + protected def findAll(ts: Vector[T]): Query[Table[_], T, Seq] + +} + +case class SafeDatabase(config: AppConfig) extends BitcoinSLogger { + + import config.database + + /** + * SQLite does not enable foreign keys by default. This query is + * used to enable it. It must be included in all connections to + * the database. + */ + private val foreignKeysPragma = sqlu"PRAGMA foreign_keys = TRUE;" + + def run[R](action: DBIOAction[R, NoStream, _]): Future[R] = { + + val result = database.run[R](foreignKeysPragma >> action) + result + } + + def runVec[R](action: DBIOAction[Seq[R], NoStream, _])( + implicit ec: ExecutionContext): Future[Vector[R]] = { + val result = database.run[Seq[R]](foreignKeysPragma >> action) + result.map(_.toVector) + } +} + +case class UpdateFailedException(message: String) + extends RuntimeException(message) diff --git a/db-commons/src/main/scala/org/bitcoins/db/CRUDAutoInc.scala b/db-commons/src/main/scala/org/bitcoins/db/CRUDAutoInc.scala new file mode 100644 index 0000000000..1c52305921 --- /dev/null +++ b/db-commons/src/main/scala/org/bitcoins/db/CRUDAutoInc.scala @@ -0,0 +1,30 @@ +package org.bitcoins.db + +import slick.dbio.Effect.Write +import slick.jdbc.SQLiteProfile.api._ + +import scala.concurrent.Future + +abstract class CRUDAutoInc[T <: DbRowAutoInc[T]] extends CRUD[T, Long] { + + /** The table inside our database we are inserting into */ + override val table: TableQuery[_ <: TableAutoInc[T]] + + override def createAll(ts: Vector[T]): Future[Vector[T]] = { + val query = table + .returning(table.map(_.id)) + .into((t, id) => t.copyWithId(id = id)) + val actions: Vector[DBIOAction[query.SingleInsertResult, NoStream, Write]] = + ts.map(r => query.+=(r)) + database.runVec(DBIO.sequence(actions)) + } + + override def findByPrimaryKeys(ids: Vector[Long]): Query[Table[_], T, Seq] = { + table.filter(_.id.inSet(ids)) + } + + override def findAll(ts: Vector[T]): Query[Table[_], T, Seq] = { + val ids = ts.filter(_.id.isDefined).map(_.id.get) + findByPrimaryKeys(ids) + } +} diff --git a/db-commons/src/main/scala/org/bitcoins/db/DbCommonsColumnMappers.scala b/db-commons/src/main/scala/org/bitcoins/db/DbCommonsColumnMappers.scala new file mode 100644 index 0000000000..3876240a57 --- /dev/null +++ b/db-commons/src/main/scala/org/bitcoins/db/DbCommonsColumnMappers.scala @@ -0,0 +1,169 @@ +package org.bitcoins.db + +import org.bitcoins.core.crypto._ +import org.bitcoins.core.number.{Int32, UInt32, UInt64} +import org.bitcoins.core.protocol.BitcoinAddress +import org.bitcoins.core.protocol.script.{ScriptPubKey, ScriptWitness} +import org.bitcoins.core.protocol.transaction.{ + TransactionOutPoint, + TransactionOutput +} +import org.bitcoins.core.script.ScriptType +import org.bitcoins.core.serializers.script.RawScriptWitnessParser +import scodec.bits.ByteVector +import slick.jdbc.SQLiteProfile.api._ +import org.bitcoins.core.hd.HDCoinType +import org.bitcoins.core.hd.HDPath +import org.bitcoins.core.hd.HDChainType +import org.bitcoins.core.hd.HDPurpose +import org.bitcoins.core.hd.HDPurposes +import org.bitcoins.core.hd.SegWitHDPath +import slick.jdbc.GetResult + +abstract class DbCommonsColumnMappers { + + /** + * If executing something like this: + * + * {{{ + * sql"SELECT * FROM sqlite_master where type='table'" + * }}} + * + * you end up with something like this: + * {{{ + * /-------+---------------+---------------+----------+----------------------\ + * | 1 | 2 | 3 | 4 | 5 | + * | type | name | tbl_name | rootpage | sql | + * |-------+---------------+---------------+----------+----------------------| + * | table | block_headers | block_headers | 2 | CREATE TABLE "blo... | + * \-------+---------------+---------------+----------+----------------------/ + * }}} + * + * This is most likely an implementation that will break of you try and cast + * the result of a different raw SQL query into a + * [[org.bitcoins.db.SQLiteTableInfo SQLiteTableInfo]]. + */ + implicit val sqliteTableInfoReader: GetResult[SQLiteTableInfo] = + GetResult[SQLiteTableInfo] { row => + row.nextString() // type + row.nextString() // name + val tableName = row.nextString() + row.nextString() // rootpage + val sql = row.nextString() + SQLiteTableInfo(tableName, sql) + + } + + /** Responsible for mapping a [[DoubleSha256Digest]] to a String, and vice versa */ + implicit val doubleSha256DigestMapper: BaseColumnType[DoubleSha256Digest] = + MappedColumnType.base[DoubleSha256Digest, String]( + _.hex, + DoubleSha256Digest.fromHex + ) + + implicit val doubleSha256DigestBEMapper: BaseColumnType[ + DoubleSha256DigestBE] = + MappedColumnType.base[DoubleSha256DigestBE, String]( + _.hex, + DoubleSha256DigestBE.fromHex + ) + + implicit val ecPublicKeyMapper: BaseColumnType[ECPublicKey] = + MappedColumnType.base[ECPublicKey, String](_.hex, ECPublicKey.fromHex) + + implicit val sha256Hash160DigestMapper: BaseColumnType[Sha256Hash160Digest] = + MappedColumnType + .base[Sha256Hash160Digest, String](_.hex, Sha256Hash160Digest.fromHex) + + /** Responsible for mapping a [[UInt32]] to a long in Slick, and vice versa */ + implicit val uInt32Mapper: BaseColumnType[UInt32] = + MappedColumnType.base[UInt32, Long]( + tmap = _.toLong, + tcomap = UInt32(_) + ) + + implicit val int32Mapper: BaseColumnType[Int32] = { + MappedColumnType.base[Int32, Long](tmap = _.toLong, tcomap = Int32(_)) + } + + /** Responsible for mapping a [[TransactionOutput]] to hex in Slick, and vice versa */ + implicit val transactionOutputMapper: BaseColumnType[TransactionOutput] = { + MappedColumnType.base[TransactionOutput, String]( + _.hex, + TransactionOutput(_) + ) + } + + implicit val uint64Mapper: BaseColumnType[UInt64] = { + MappedColumnType.base[UInt64, BigDecimal]( + { u64: UInt64 => + BigDecimal(u64.toBigInt.bigInteger) + }, + //this has the potential to throw + { bigDec: BigDecimal => + UInt64(bigDec.toBigIntExact().get) + } + ) + } + + implicit val transactionOutPointMapper: BaseColumnType[TransactionOutPoint] = { + MappedColumnType + .base[TransactionOutPoint, String](_.hex, TransactionOutPoint(_)) + } + + implicit val scriptPubKeyMapper: BaseColumnType[ScriptPubKey] = { + MappedColumnType.base[ScriptPubKey, String](_.hex, ScriptPubKey(_)) + } + + implicit val scriptWitnessMapper: BaseColumnType[ScriptWitness] = { + MappedColumnType + .base[ScriptWitness, String]( + _.hex, + hex => RawScriptWitnessParser.read(ByteVector.fromValidHex(hex))) + } + + implicit val byteVectorMapper: BaseColumnType[ByteVector] = { + MappedColumnType + .base[ByteVector, String](_.toHex, ByteVector.fromValidHex(_)) + } + + implicit val xpubMapper: BaseColumnType[ExtPublicKey] = { + MappedColumnType + .base[ExtPublicKey, String](_.toString, ExtPublicKey.fromString(_).get) + } + + implicit val hdCoinTypeMapper: BaseColumnType[HDCoinType] = { + MappedColumnType.base[HDCoinType, Int](_.toInt, HDCoinType.fromInt) + } + + implicit val hdPathMappper: BaseColumnType[HDPath] = + MappedColumnType + .base[HDPath, String](_.toString, HDPath.fromString(_).get) // hm rethink .get? + + implicit val segwitPathMappper: BaseColumnType[SegWitHDPath] = + MappedColumnType + .base[SegWitHDPath, String](_.toString, SegWitHDPath.fromString(_)) // hm rethink .get? + + implicit val hdChainTypeMapper: BaseColumnType[HDChainType] = + MappedColumnType.base[HDChainType, Int](_.index, HDChainType.fromInt) + + implicit val hdPurposeMapper: BaseColumnType[HDPurpose] = + MappedColumnType + .base[HDPurpose, Int](_.constant, HDPurposes.fromConstant(_).get) // hm rething .get + + implicit val bitcoinAddressMapper: BaseColumnType[BitcoinAddress] = + MappedColumnType + .base[BitcoinAddress, String](_.value, BitcoinAddress.fromStringExn) + + implicit val scriptTypeMapper: BaseColumnType[ScriptType] = + MappedColumnType + .base[ScriptType, String](_.toString, ScriptType.fromStringExn) + + implicit val aesSaltMapper: BaseColumnType[AesSalt] = + MappedColumnType.base[AesSalt, String]( + _.value.toHex, + hex => AesSalt(ByteVector.fromValidHex(hex))) + +} + +object DbCommonsColumnMappers extends DbCommonsColumnMappers diff --git a/db-commons/src/main/scala/org/bitcoins/db/DbManagement.scala b/db-commons/src/main/scala/org/bitcoins/db/DbManagement.scala new file mode 100644 index 0000000000..5ba21b6ffd --- /dev/null +++ b/db-commons/src/main/scala/org/bitcoins/db/DbManagement.scala @@ -0,0 +1,51 @@ +package org.bitcoins.db + +import org.bitcoins.core.util.BitcoinSLogger +import slick.jdbc.SQLiteProfile.api._ + +import scala.concurrent.{ExecutionContext, Future} + +abstract class DbManagement extends BitcoinSLogger { + def allTables: List[TableQuery[_ <: Table[_]]] + + /** Lists all tables in the given database */ + def listTables(db: Database): Future[Vector[SQLiteTableInfo]] = { + import DbCommonsColumnMappers._ + val query = sql"SELECT * FROM sqlite_master where type='table'" + .as[SQLiteTableInfo] + db.run(query) + } + + def createAll()( + implicit config: AppConfig, + ec: ExecutionContext): Future[List[Unit]] = { + Future.sequence(allTables.map(createTable(_))) + } + + def dropAll()( + implicit config: AppConfig, + ec: ExecutionContext): Future[List[Unit]] = { + Future.sequence(allTables.reverse.map(dropTable(_))) + } + + def createTable( + table: TableQuery[_ <: Table[_]], + createIfNotExists: Boolean = true)( + implicit config: AppConfig): Future[Unit] = { + import config.database + val result = if (createIfNotExists) { + database.run(table.schema.createIfNotExists) + } else { + database.run(table.schema.create) + } + result + } + + def dropTable( + table: TableQuery[_ <: Table[_]] + )(implicit config: AppConfig): Future[Unit] = { + import config.database + val result = database.run(table.schema.dropIfExists) + result + } +} diff --git a/db-commons/src/main/scala/org/bitcoins/db/DbRowAutoInc.scala b/db-commons/src/main/scala/org/bitcoins/db/DbRowAutoInc.scala new file mode 100644 index 0000000000..db8f57dd99 --- /dev/null +++ b/db-commons/src/main/scala/org/bitcoins/db/DbRowAutoInc.scala @@ -0,0 +1,15 @@ +package org.bitcoins.db + +/** This is meant to be coupled with [[CRUDAutoInc]] + * and [[TableAutoInc]] to allow for automatically incrementing an id + * when inserting something into a database. This removes the boiler + * boiler plate from this having to happen every where a [[CRUD]] + * is created + */ +abstract class DbRowAutoInc[T] { + + def id: Option[Long] + + def copyWithId(id: Long): T + +} diff --git a/db-commons/src/main/scala/org/bitcoins/db/SQLiteTableInfo.scala b/db-commons/src/main/scala/org/bitcoins/db/SQLiteTableInfo.scala new file mode 100644 index 0000000000..fb2834f8fd --- /dev/null +++ b/db-commons/src/main/scala/org/bitcoins/db/SQLiteTableInfo.scala @@ -0,0 +1,7 @@ +package org.bitcoins.db + +/** + * @param name The name of the table + * @param sql The SQL executed to create the table + */ +case class SQLiteTableInfo(name: String, sql: String) diff --git a/db-commons/src/main/scala/org/bitcoins/db/SlickUtil.scala b/db-commons/src/main/scala/org/bitcoins/db/SlickUtil.scala new file mode 100644 index 0000000000..c8e1c8ad1d --- /dev/null +++ b/db-commons/src/main/scala/org/bitcoins/db/SlickUtil.scala @@ -0,0 +1,19 @@ +package org.bitcoins.db + +import scala.concurrent.Future +import slick.jdbc.SQLiteProfile.api._ + +sealed abstract class SlickUtil { + + /** Creates rows in a database that are not auto incremented */ + def createAllNoAutoInc[T, U <: Table[T]]( + ts: Vector[T], + database: SafeDatabase, + table: TableQuery[U]): Future[Vector[T]] = { + val actions = ts.map(t => (table += t).andThen(DBIO.successful(t))) + val result = database.run(DBIO.sequence(actions)) + result + } +} + +object SlickUtil extends SlickUtil diff --git a/db-commons/src/main/scala/org/bitcoins/db/TableAutoInc.scala b/db-commons/src/main/scala/org/bitcoins/db/TableAutoInc.scala new file mode 100644 index 0000000000..f7f6993bb3 --- /dev/null +++ b/db-commons/src/main/scala/org/bitcoins/db/TableAutoInc.scala @@ -0,0 +1,17 @@ +package org.bitcoins.db + +import slick.jdbc.SQLiteProfile.api._ + +/** Defines a table that has an auto incremented fields that is named id. + * This is useful for things we want to store that don't have an + * inherent id such as a hash. + * @param tag + * @param tableName + * @tparam T + */ +abstract class TableAutoInc[T](tag: Tag, tableName: String) + extends Table[T](tag, tableName) { + + def id: Rep[Long] = column[Long]("id", O.PrimaryKey, O.AutoInc) + +} diff --git a/db-commons/src/main/scala/org/bitcoins/db/package..scala b/db-commons/src/main/scala/org/bitcoins/db/package..scala new file mode 100644 index 0000000000..917499b51a --- /dev/null +++ b/db-commons/src/main/scala/org/bitcoins/db/package..scala @@ -0,0 +1,16 @@ +package org.bitcoins + +import com.typesafe.config.Config +import com.typesafe.config.ConfigRenderOptions + +package object db { + + implicit class ConfigOps(private val config: Config) extends AnyVal { + + def asReadableJson: String = { + val options = ConfigRenderOptions.concise().setFormatted(true) + config.root().render(options) + } + } + +} diff --git a/doc/README.md b/doc/README.md new file mode 100644 index 0000000000..7df88c8843 --- /dev/null +++ b/doc/README.md @@ -0,0 +1,16 @@ +## Ammonite scripts + +This project contain [Ammonite](https://ammonite.io) scripts that demonstrate +functionality of `bitcoin-s`. + +#### Running them with sbt: + +```bash +$ sbt "doc/run path/to/script.sc" # this is very slow, not recommended +``` + +#### Running them with the [Bloop CLI](https://scalacenter.github.io/bloop/): + +```bash +$ bloop run doc --args path/to/script.sc # much faster than through sbt +``` diff --git a/doc/configuration.md b/doc/configuration.md new file mode 100644 index 0000000000..a357720e85 --- /dev/null +++ b/doc/configuration.md @@ -0,0 +1,40 @@ +# bitcoin-s configuration + +bitcoin-s uses [HOCON](https://github.com/lightbend/config/blob/master/HOCON.md) +to configure various parts of the application the library offers. HOCON is a +superset of JSON, that is, all valid JSON is valid HOCON. + +All configuration for bitcoin-s is under the `bitcoin-s` key. The most interesting +configurable parts right now are `datadir` and `network`. See +[`db-commons/src/main/resources/reference.conf`](../db-commons/src/main/resources/reference.conf) +for more information. In the future there will be separate keys under `bitcoin-s` +for the `wallet`, `chain` and `node` modules. + +If you have a file `application.conf` anywhere on your classpath when using +bitcoin-s, the values there take precedence over the ones found in our +`reference.conf`. + +The resolved configuration gets parsed by +[`AppConfig`](../db-commons/src/main/scala/org/bitcoins/db/AppConfig.scala). +You can call the `.withOverrides` on this to override any value in the +bitcoin-s configuration. An example of this would be: + +```scala +import org.bitcoins.wallet.config.WalletAppConfig +import com.typesafe.config.ConfigFactory + +val myConfig = ConfigFactory.parseString("bitcoin-s.network = testnet3") +val walletConfig = WalletAppConfig.withOverrides(myConfig) +``` + +You can pass as many configs as you'd like into `withOverrides`. If any +keys appear multiple times the last one encountered. takes precedence. + + +## Internal configuration + +Database connections are also configured by using HOCON. This is done in +[`db.conf`](../db-commons/src/main/resources/db.conf) +(as well as [`application.conf`](../testkit/src/main/resources/application.conf) +in `testkit` for running tests). The options exposed here are **not** intended to +be used by users of bitcoin-s, and are internal only. diff --git a/doc/database.md b/doc/database.md new file mode 100644 index 0000000000..dfde689d77 --- /dev/null +++ b/doc/database.md @@ -0,0 +1,13 @@ +## bitcoin-s databases + +### node project + +This contains information related to peer to peer networking and chainstate for the bitcoin-s project. You can see configuration for these databases [here](../node/src/main/resources/reference.conf) + +Database names: + +- `nodedb` - the mainnet database +- `nodedb-testnet3` - the testnet3 database +- `nodedb-regtest` - the regtest database +- `nodedb-unittest` - the database used by unit tests. + diff --git a/zmq/src/test/resources/logback-test.xml b/doc/src/main/resources/logback.xml similarity index 88% rename from zmq/src/test/resources/logback-test.xml rename to doc/src/main/resources/logback.xml index f1ebc8381c..f6d9b39c34 100644 --- a/zmq/src/test/resources/logback-test.xml +++ b/doc/src/main/resources/logback.xml @@ -1,23 +1,22 @@ - - logs/test-application.log - - %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n - - - %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n + + logs/doc.log + + %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n + + + - diff --git a/doc/src/main/scala/TxBuilderExample.scala b/doc/src/main/scala/TxBuilderExample.scala new file mode 100644 index 0000000000..6f01d0e7bf --- /dev/null +++ b/doc/src/main/scala/TxBuilderExample.scala @@ -0,0 +1,157 @@ +import org.bitcoins.core.config.RegTest +import org.bitcoins.core.crypto.ECPrivateKey +import org.bitcoins.core.currency.Satoshis +import org.bitcoins.core.number.{Int32, Int64, UInt32} +import org.bitcoins.core.protocol.script.P2PKHScriptPubKey +import org.bitcoins.core.protocol.transaction.{ + BaseTransaction, + Transaction, + TransactionOutPoint, + TransactionOutput +} +import org.bitcoins.core.script.crypto.HashType +import org.bitcoins.core.wallet.builder.BitcoinTxBuilder +import org.bitcoins.core.wallet.fee.SatoshisPerByte +import org.bitcoins.core.wallet.utxo.BitcoinUTXOSpendingInfo +import org.scalatest.{FlatSpec, MustMatchers} + +import scala.concurrent.ExecutionContext.Implicits.global +import scala.concurrent.Future + +class TxBuilderExample extends FlatSpec with MustMatchers { + + behavior of "TxBuilderExample" + + it must "build a signed tx" in { + + //This is a documented example of how to create a signed bitcoin transaction + //with bitcoin-s. You can run this test case with the following sbt command + + //$ sbt "doc/testOnly *TxBuilderExample -- -z signed" + + //generate a fresh private key that we are going to use in the scriptpubkey + val privKey = ECPrivateKey.freshPrivateKey + + //this is the script that the TxBuilder is going to create a + //script signature that validly spends this scriptPubKey + val creditingSpk = P2PKHScriptPubKey(pubKey = privKey.publicKey) + val amount = Satoshis(Int64(10000)) + + //this is the utxo we are going to be spending + val utxo = + TransactionOutput(currencyUnit = amount, scriptPubKey = creditingSpk) + + //the private key that locks the funds for the script we are spending too + val destinationPrivKey = ECPrivateKey.freshPrivateKey + + //the amount we are sending -- 5000 satoshis -- to the destinationSPK + val destinationAmount = Satoshis(Int64(5000)) + + //the script that corresponds to destination private key, this is what is protecting the money + val destinationSPK = + P2PKHScriptPubKey(pubKey = destinationPrivKey.publicKey) + + //this is where we are sending money too + //we could add more destinations here if we + //wanted to batch transactions + val destinations = { + val destination1 = TransactionOutput(currencyUnit = destinationAmount, + scriptPubKey = destinationSPK) + + List(destination1) + } + + //we have to fabricate a transaction that contains the + //utxo we are trying to spend. If this were a real blockchain + //we would need to reference the utxo set + val creditingTx = BaseTransaction(version = Int32.one, + inputs = List.empty, + outputs = List(utxo), + lockTime = UInt32.zero) + + //this is the information we need from the crediting tx + //to properly "link" it in the transaction we are creating + val outPoint = TransactionOutPoint(creditingTx.txId, UInt32.zero) + + // this contains all the information we need to + // validly sign the utxo above + val utxoSpendingInfo = BitcoinUTXOSpendingInfo(outPoint = outPoint, + output = utxo, + signers = List(privKey), + redeemScriptOpt = None, + scriptWitnessOpt = None, + hashType = + HashType.sigHashAll) + + //all of the utxo spending information, since we are only + //spending one utxo, this is just one element + val utxos: List[BitcoinUTXOSpendingInfo] = List(utxoSpendingInfo) + + //this is how much we are going to pay as a fee to the network + //for this example, we are going to pay 1 satoshi per byte + val feeRate = SatoshisPerByte(Satoshis.one) + + val changePrivKey = ECPrivateKey.freshPrivateKey + val changeSPK = P2PKHScriptPubKey(pubKey = changePrivKey.publicKey) + + // the network we are on, for this example we are using + // the regression test network. This is a network you control + // on your own machine + val networkParams = RegTest + + //yay! Now we have a TxBuilder object that we can use + //to sign the tx. + val txBuilder: Future[BitcoinTxBuilder] = { + BitcoinTxBuilder( + destinations = destinations, + utxos = utxos, + feeRate = feeRate, + changeSPK = changeSPK, + network = networkParams + ) + } + + txBuilder.failed.foreach { case err => println(err.getMessage) } + + //let's finally produce a validly signed tx + //The 'sign' method is going produce a validly signed transaction + //This is going to iterate through each of the 'utxos' and use + //the corresponding 'UTXOSpendingInfo' to produce a validly + //signed input. This tx has a + // + //1 input + //2 outputs (destination and change outputs) + //3 a fee rate of 1 satoshi/byte + val signedTxF: Future[Transaction] = txBuilder.flatMap(_.sign) + + //let's print these things out so you can example them + signedTxF.map { tx => + println("\nInputs:") + tx.inputs.foreach(println) + + println("\nOutputs:") + tx.outputs.foreach(println) + + //here is the fully signed serialized tx that + //you COULD broadcast to a cryptocurrency p2p network + println(s"\nFully signed tx in hex:") + + println(s"${tx.hex}") + } + + //The output from the print statements should read something like this + + //Inputs: + //TransactionInputImpl(TransactionOutPointImpl(DoubleSha256DigestImpl(43c75d1d59e6f13f2ad3baf6e124685ba0919bccdbdf89c362fe2f30fee4bdfc),UInt32Impl(0)),P2PKHScriptSignature(6a4730440220573a7bbbd59192c4bf01b8f1dcafe981d11ab8528fead9d66d702c1b72e5dc76022007946a423073c949e85a4ca3901ab10a2d6b72873a347d2a55ef873016adae8601210356d581971934349333066ed933cdea45ae9c72829ce34d8dd6a758d56967e4cb),UInt32Impl(0)) + // + //Outputs: + //TransactionOutputImpl(SatoshisImpl(Int64Impl(5000)),P2PKHScriptPubKeyImpl(1976a914dbdadae42124c46a00d81181e5d9ab28fbf546ed88ac)) + //TransactionOutputImpl(SatoshisImpl(Int64Impl(4774)),P2PKHScriptPubKeyImpl(1976a914a95eb0d284593f0c8f818f64a55fa6e3852012a688ac)) + // + //Fully signed tx in hex: + //020000000143c75d1d59e6f13f2ad3baf6e124685ba0919bccdbdf89c362fe2f30fee4bdfc000000006a4730440220573a7bbbd59192c4bf01b8f1dcafe981d11ab8528fead9d66d702c1b72e5dc76022007946a423073c949e85a4ca3901ab10a2d6b72873a347d2a55ef873016adae8601210356d581971934349333066ed933cdea45ae9c72829ce34d8dd6a758d56967e4cb000000000288130000000000001976a914dbdadae42124c46a00d81181e5d9ab28fbf546ed88aca6120000000000001976a914a95eb0d284593f0c8f818f64a55fa6e3852012a688ac00000000 + + //remember, you can call .hex on any bitcoin-s data structure to get the hex representation! + } + +} diff --git a/doc/src/main/scala/org/bitcoins/doc/AmmoniteBridge.scala b/doc/src/main/scala/org/bitcoins/doc/AmmoniteBridge.scala new file mode 100644 index 0000000000..3e24cb62fe --- /dev/null +++ b/doc/src/main/scala/org/bitcoins/doc/AmmoniteBridge.scala @@ -0,0 +1,43 @@ +package org.bitcoins.doc +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.Paths +import scala.util.Properties + +object amm extends App { + + /** Gets all files ending with .sc in dir or subdirs */ + def getScripts(dir: Path): Seq[Path] = { + import scala.collection.JavaConverters._ + + Files + .walk(dir) + .iterator() + .asScala + .filter(Files.isRegularFile(_)) + .filter(_.toString.endsWith(".sc")) + .toList + } + + if (args.isEmpty || args.headOption.forall(_.isEmpty)) { + import System.err.{println => printerr} + + printerr("No script name provided!") + printerr() + + val cwd = Paths.get(Properties.userDir) + val scripts = getScripts(cwd) + + if (scripts.nonEmpty) { + printerr("Available scripts:") + scripts.foreach { script => + printerr(s" ${cwd.relativize(script)}") + } + } else { + printerr("No .sc scripts found!") + } + sys.exit(1) + } else { + ammonite.Main.main(args) + } +} diff --git a/doc/src/main/scala/org/bitcoins/doc/chain/sync-chain.sc b/doc/src/main/scala/org/bitcoins/doc/chain/sync-chain.sc new file mode 100644 index 0000000000..050844017b --- /dev/null +++ b/doc/src/main/scala/org/bitcoins/doc/chain/sync-chain.sc @@ -0,0 +1,82 @@ +import org.bitcoins.rpc.config._ + +import akka.actor.ActorSystem +import org.bitcoins.chain.db._ +import org.bitcoins.chain.config._ +import org.bitcoins.chain.blockchain._ +import org.bitcoins.chain.blockchain.sync._ +import org.bitcoins.chain.models._ + +import org.bitcoins.core.protocol.blockchain._ +import org.bitcoins.rpc.client.common._ +import org.bitcoins.testkit.chain._ +import org.bitcoins.wallet._ +import org.bitcoins.wallet.api._ + +import org.slf4j.LoggerFactory + +import scala.collection.JavaConverters._ +import scala.concurrent._ +import scala.concurrent.duration.DurationInt +import scala.util._ + +//the goal for this script is to create a chain and sync it +//to disk after creation + +//we should be able to read this chain on subsequent runs +//assuming we are connected to the same bitcoind instance + +//you can run this script with +//$ sbt "doc/run doc/src/main/scala/org/bitcoins/doc/chain/sync-chain.sc" + + +//boring config stuff +val logger = LoggerFactory.getLogger("org.bitcoins.doc.chain.SyncChain") +val time = System.currentTimeMillis() +implicit val system = ActorSystem(s"sync-chain-${time}") +import system.dispatcher + +//first we are assuming that a bitcoind regtest node is running in +//the background, you can see 'connect_bitcoind.sc' script +//to see how to bind to a local/remote bitcoind node +//This script assumes that you have a bitcoind instance running in the +//background and that you have ~/.bitcoin/bitcoin.conf setup. +//you need to have 'rpcuser' and 'rpcpassword' set in that bitcoin.conf file +//You can pass in an alternative datadir if you wish by construct a new java.io.File() +val bitcoindInstance = BitcoindInstance.fromDatadir() +val rpcCli = new BitcoindRpcClient(bitcoindInstance) + +logger.info(s"Done configuring rpc client") +//next we need to create a way to monitor the chain +val getBestBlockHash = ChainTestUtil.bestBlockHashFnRpc(Future.successful(rpcCli)) + +val getBlockHeader = ChainTestUtil.getBlockHeaderFnRpc(Future.successful(rpcCli)) + +val chainDbConfig = ChainDbConfig.RegTestDbConfig +val chainAppConfig = ChainAppConfig(chainDbConfig) + +logger.info(s"Creating chain tables") +//initialize chain tables in bitcoin-s if they do not exist +val chainProjectInitF = ChainTestUtil.initializeIfNeeded(chainAppConfig) + +val blockHeaderDAO = BlockHeaderDAO(appConfig = chainAppConfig) + +val chainHandler = ChainHandler(blockHeaderDAO, chainAppConfig) + +val syncedChainApiF = chainProjectInitF.flatMap { _ => + logger.info(s"Beginning sync to bitcoin-s chain state") + ChainSync.sync(chainHandler, getBlockHeader, getBestBlockHash) +} + +val syncResultF = syncedChainApiF.flatMap { chainApi => + chainApi.getBlockCount.map(count => logger.info(s"chain api blockcount=${count}")) + + rpcCli.getBlockCount.map(count => logger.info(s"bitcoind blockcount=${count}")) +} + +syncResultF.onComplete { case result => + + logger.info(s"Sync result=${result}") + system.terminate() +} + diff --git a/doc/src/main/scala/org/bitcoins/doc/wallet/create-wallet.sc b/doc/src/main/scala/org/bitcoins/doc/wallet/create-wallet.sc new file mode 100644 index 0000000000..c62dba712b --- /dev/null +++ b/doc/src/main/scala/org/bitcoins/doc/wallet/create-wallet.sc @@ -0,0 +1,232 @@ +import java.io.File + +import org.bitcoins.chain.blockchain.{Blockchain, ChainHandler} +import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderDb, BlockHeaderDbHelper} +import org.bitcoins.core.protocol.blockchain.{Block, RegTestNetChainParams} +import org.bitcoins.wallet.Wallet +import org.bitcoins.wallet.api.InitializeWalletSuccess +import scodec.bits.ByteVector +import akka.actor.ActorSystem +import org.bitcoins.chain.api.ChainApi +import com.typesafe.config.ConfigFactory +import org.bitcoins.chain.db.ChainDbManagement +import org.bitcoins.chain.db.ChainDbConfig +import org.bitcoins.chain.config.ChainAppConfig +import org.bitcoins.chain.blockchain.sync.ChainSync +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.core.crypto.DoubleSha256DigestBE +import org.bitcoins.core.currency._ +import org.bitcoins.core.protocol.transaction._ +import org.bitcoins.core.number._ +import org.bitcoins.rpc.client.common.BitcoindRpcClient +import org.bitcoins.rpc.client.v17.BitcoindV17RpcClient +import org.bitcoins.rpc.config.BitcoindInstance +import org.bitcoins.rpc.util.RpcUtil +import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil +import org.bitcoins.wallet.db.WalletDbManagement +import org.bitcoins.wallet.db.WalletDbConfig +import org.bitcoins.wallet.config.WalletAppConfig + +import org.bitcoins.zmq.ZMQSubscriber +import org.slf4j.LoggerFactory + +import scala.collection.JavaConverters._ +import scala.concurrent._ +import scala.concurrent.duration.DurationInt +import scala.util._ +/** +* This is for example purposes only! + * This shows how to peer a bitcoin-s wallet + * with a bitcoind instance that is relaying + * information about what is happening on the blockchain + * to the bitcoin-s wallet. + * + * This is useful if you want more flexible signing + * procedures in the JVM ecosystem and more + * granular control over your utxos with + * popular databases like postgres, sqlite etc + */ + +//you can run this script with the following command +//$ sbt "doc/run doc/src/main/scala/org/bitcoins/doc/wallet/create-wallet.sc" + +val logger = LoggerFactory.getLogger("org.bitcoins.doc.wallet.CreateWallet") +val time = System.currentTimeMillis() +//boiler plate config +implicit val system = ActorSystem(s"wallet-scala-sheet-${time}") +import system.dispatcher + +val chainDbConfig = ChainDbConfig.RegTestDbConfig +val chainAppConfig = ChainAppConfig(chainDbConfig) +implicit val chainParams = chainAppConfig.chain + +val walletDbConfig = WalletDbConfig.RegTestDbConfig +val walletAppConfig = WalletAppConfig(walletDbConfig) + +val datadir = new File(s"/tmp/bitcoin-${time}/") +val bitcoinConf = new File(datadir.getAbsolutePath + "/bitcoin.conf") + +logger.info(s"bitcoin.conf location=${bitcoinConf.getAbsolutePath}") +datadir.mkdirs() +bitcoinConf.createNewFile() + +val config = BitcoindRpcTestUtil.standardConfig +val _ = BitcoindRpcTestUtil.writeConfigToFile(config,datadir) + +//construct bitcoind +val instance = BitcoindInstance.fromConfig(config = config, datadir) +val bitcoind = new BitcoindRpcClient(instance = instance) + +//start bitcoind, this may take a little while +//generate 101 blocks so we have money in our wallet +val bitcoindF = bitcoind.start().map(_ => bitcoind) + +//create a native chain handler for bitcoin-s +val blockHeaderDAO: BlockHeaderDAO = BlockHeaderDAO(appConfig = chainAppConfig) +val genesisHeader = BlockHeaderDbHelper.fromBlockHeader( + height = 0, + bh = chainAppConfig.chain.genesisBlock.blockHeader) + + +val blockHeaderTableF = { + //drop regtest table if it exists + val dropTableF = ChainDbManagement.dropHeaderTable(chainDbConfig) + + //recreate the table + val createdTableF = dropTableF.flatMap(_ => ChainDbManagement.createHeaderTable(chainDbConfig)) + + createdTableF +} +val createdGenHeaderF = blockHeaderTableF.flatMap(_ => blockHeaderDAO.create(genesisHeader)) + +val chainF = createdGenHeaderF.map(h => Vector(h)) + +val blockchainF = chainF.map(chain => Blockchain(chain)) + +val chainHandlerF = blockchainF.map(blockchain => ChainHandler(blockHeaderDAO, chainAppConfig)) + +val chainApi101BlocksF = sync(chainHandlerF, 101) + +val bitcoinsLogF = chainApi101BlocksF.flatMap { chainApi => + chainApi.getBlockCount.map(count => logger.info(s"bitcoin-s blockcount=${count}")) +} + +val walletF = bitcoinsLogF.flatMap { _ => + //create tables + val dropTablesF = WalletDbManagement.dropAll(walletDbConfig) + val createTablesF = dropTablesF.flatMap(_ => WalletDbManagement.createAll(walletDbConfig)) + createTablesF.flatMap { _ => + Wallet.initialize(walletAppConfig) + .collect{ case success: InitializeWalletSuccess => success.wallet } + } +} + +val bitcoinsAddrF = walletF.flatMap(_.getNewAddress()) + +//send money to our wallet with bitcoind +val amt = Bitcoins.one +val transactionOutputIndexF: Future[(Transaction,Int)] = for { + bitcoind <- bitcoindF + bitcoinsAddr <- bitcoinsAddrF + txid <- bitcoind.sendToAddress(bitcoinsAddr, amt) + tx <- bitcoind.getRawTransactionRaw(txid) +} yield { + logger.info(s"Sending ${amt} to address ${bitcoinsAddr.value}") + val Some((output,index)) = tx.outputs.zipWithIndex.find { case (output,index) => + output.scriptPubKey == bitcoinsAddr.scriptPubKey + } + + (tx,index) +} + +//add the utxo that was just created by bitcoind to our wallet +val addUtxoF = for { + wallet <- walletF + (tx,index) <- transactionOutputIndexF + addUtxo <- wallet.addUtxo(tx,UInt32(index)) +} yield { + logger.info(s"Add utxo result=${addUtxo}") + addUtxo +} + +//bury the utxo with enough proof of work to make it confirmed +val chainApi6BlocksF = for { + addUtxo <- addUtxoF + (tx,_) <- transactionOutputIndexF + chainApi <- sync(chainApi101BlocksF,6) +} yield { + logger.info(s"txid=${tx.txId.flip.hex}") +} + +//check balance & clean everything up +chainApi6BlocksF.onComplete { chainApi => + val balanceF = walletF.flatMap(_.getBalance) + + balanceF.onComplete(balance => logger.info(s"bitcoin-s walllet balance=${balance}")) + + balanceF.flatMap(_ => cleanup()) +} + + + +/** Syncs the give number of blocks to our chain */ +def sync(chainHandlerF: Future[ChainApi], numBlocks: Int)(implicit ec: ExecutionContext): Future[ChainApi] = { + //we need a way to connect bitcoin-s to our running bitcoind, we are going to do this via rpc for now + //we need to implement the 'getBestBlockHashFunc' and 'getBlockHeaderFunc' functions + //to be able to sync our internal bitcoin-s chain with our external bitcoind chain + val getBestBlockHashFunc = { () => + bitcoindF.flatMap(_.getBestBlockHash) + } + + val getBlockHeaderFunc = { hash: DoubleSha256DigestBE => + bitcoindF.flatMap(_.getBlockHeader(hash).map(_.blockHeader)) + } + + + //now that we have bitcoind setup correctly and have rpc linked to + //the bitcoin-s chain project, let's generate some blocks so + //we have money to spend in our bitcoind wallet! + //we need to generate 101 blocks to give us 50 btc to spend + val genBlocksF = chainHandlerF.flatMap { _ => + bitcoindF.flatMap(_.generate(numBlocks)) + } + + //now we need to sync those blocks into bitcoin-s + val chainSyncF = genBlocksF.flatMap { _ => + chainHandlerF.flatMap { ch => + ChainSync.sync( + ch.asInstanceOf[ChainHandler], + getBlockHeaderFunc, + getBestBlockHashFunc) + } + } + + chainSyncF +} + +def cleanup(): Future[Unit] = { + logger.info("Beginning clean up of create wallet script") + val bitcoindStopF = { + bitcoindF.flatMap { bitcoind => + val stopF = bitcoind.stop() + stopF + } + } + datadir.delete() + logger.debug("cleaning up chain, wallet, and system") + val chainCleanupF = ChainDbManagement.dropAll(chainDbConfig) + val walletCleanupF = WalletDbManagement.dropAll(walletDbConfig) + + val doneWithCleanupF = for { + _ <- bitcoindStopF + _ <- chainCleanupF + _ <- walletCleanupF + _ <- system.terminate() + } yield { + logger.info(s"Done cleaning up") + } + + doneWithCleanupF +} + + diff --git a/eclair-rpc-test/src/test/resources/logback-test.xml b/eclair-rpc-test/src/test/resources/logback-test.xml deleted file mode 100644 index c3fce55920..0000000000 --- a/eclair-rpc-test/src/test/resources/logback-test.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - logs/eclair-rpc-test.log - - %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{5}.%M\(%line\) - %msg%n - - - - - - - - - - - - diff --git a/eclair-rpc-test/src/test/scala/org/bitcoins/eclair/rpc/EclairRpcTestUtilTest.scala b/eclair-rpc-test/src/test/scala/org/bitcoins/eclair/rpc/EclairRpcTestUtilTest.scala index 67a0516c12..1aeb7e28eb 100644 --- a/eclair-rpc-test/src/test/scala/org/bitcoins/eclair/rpc/EclairRpcTestUtilTest.scala +++ b/eclair-rpc-test/src/test/scala/org/bitcoins/eclair/rpc/EclairRpcTestUtilTest.scala @@ -12,7 +12,7 @@ class EclairRpcTestUtilTest extends AsyncFlatSpec with BeforeAndAfterAll { private val logger = LoggerFactory.getLogger(getClass) - private implicit val actorSystem: ActorSystem = + implicit private val actorSystem: ActorSystem = ActorSystem("EclairRpcTestUtilTest", BitcoindRpcTestUtil.AKKA_CONFIG) private lazy val bitcoindRpcF = { diff --git a/node-test/src/test/scala/org/bitcoins/node/NetworkMessageTest.scala b/node-test/src/test/scala/org/bitcoins/node/NetworkMessageTest.scala new file mode 100644 index 0000000000..85e521f981 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/NetworkMessageTest.scala @@ -0,0 +1,15 @@ +package org.bitcoins.node + +import org.bitcoins.testkit.node.NodeTestUtil +import org.bitcoins.testkit.util.BitcoinSUnitTest + +/** + * Created by chris on 6/28/16. + */ +class NetworkMessageTest extends BitcoinSUnitTest { + + "NetworkMessage" must "be able to serialize then deserialize a message and get the original hex back" in { + NetworkMessage(NodeTestUtil.rawNetworkMessage).hex must be( + NodeTestUtil.rawNetworkMessage) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/NodeAppConfigTest.scala b/node-test/src/test/scala/org/bitcoins/node/NodeAppConfigTest.scala new file mode 100644 index 0000000000..1bf3d873f8 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/NodeAppConfigTest.scala @@ -0,0 +1,33 @@ +package org.bitcoins.node + +import org.bitcoins.testkit.util.BitcoinSUnitTest +import org.bitcoins.node.config.NodeAppConfig +import org.bitcoins.core.config.TestNet3 +import com.typesafe.config.Config +import com.typesafe.config.ConfigFactory +import org.bitcoins.core.config.RegTest +import org.bitcoins.core.config.MainNet + +class NodeAppConfigTest extends BitcoinSUnitTest { + val config = NodeAppConfig() + + it must "be overridable" in { + assert(config.network == RegTest) + + val otherConf = ConfigFactory.parseString("bitcoin-s.network = testnet3") + val withOther: NodeAppConfig = config.withOverrides(otherConf) + assert(withOther.network == TestNet3) + + val mainnetConf = ConfigFactory.parseString("bitcoin-s.network = mainnet") + val mainnet: NodeAppConfig = withOther.withOverrides(mainnetConf) + assert(mainnet.network == MainNet) + } + + it must "be overridable with multiple levels" in { + val testnet = ConfigFactory.parseString("bitcoin-s.network = testnet3") + val mainnet = ConfigFactory.parseString("bitcoin-s.network = mainnet") + val overriden: NodeAppConfig = config.withOverrides(testnet, mainnet) + assert(overriden.network == MainNet) + + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/SpvNodeTest.scala b/node-test/src/test/scala/org/bitcoins/node/SpvNodeTest.scala new file mode 100644 index 0000000000..cb199414c7 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/SpvNodeTest.scala @@ -0,0 +1,53 @@ +package org.bitcoins.node + +import org.bitcoins.core.crypto.DoubleSha256DigestBE +import org.bitcoins.rpc.util.RpcUtil +import org.bitcoins.testkit.node.NodeUnitTest +import org.bitcoins.testkit.node.fixture.SpvNodeConnectedWithBitcoind +import org.scalatest.FutureOutcome + +import scala.concurrent.Future + +class SpvNodeTest extends NodeUnitTest { + + override type FixtureParam = SpvNodeConnectedWithBitcoind + + override def withFixture(test: OneArgAsyncTest): FutureOutcome = + withSpvNodeConnectedToBitcoind(test) + + behavior of "SpvNode" + + it must "receive notification that a block occurred on the p2p network" in { + spvNodeConnectedWithBitcoind: SpvNodeConnectedWithBitcoind => + val spvNode = spvNodeConnectedWithBitcoind.spvNode + val bitcoind = spvNodeConnectedWithBitcoind.bitcoind + + assert(spvNode.isConnected) + + assert(spvNode.isInitialized) + + val hashF: Future[DoubleSha256DigestBE] = { + bitcoind.generate(1).map(_.head) + } + + //check we have that hash inside of our chain project! + val spvSyncF = for { + _ <- hashF + sync <- spvNode.sync() + } yield sync + + def isSameBestHash(): Future[Boolean] = { + for { + spvBestHash <- spvNode.chainApi.getBestBlockHash + hash <- hashF + } yield spvBestHash == hash + } + + spvSyncF.flatMap { _ => + RpcUtil + .retryUntilSatisfiedF(isSameBestHash) + .map(_ => succeed) + } + + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/headers/NetworkHeaderTest.scala b/node-test/src/test/scala/org/bitcoins/node/headers/NetworkHeaderTest.scala new file mode 100644 index 0000000000..c1b4c8451c --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/headers/NetworkHeaderTest.scala @@ -0,0 +1,33 @@ +package org.bitcoins.node.headers + +import org.bitcoins.core.config.TestNet3 +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.util.{BitcoinSUtil, CryptoUtil} +import org.bitcoins.node.messages.VerAckMessage +import org.bitcoins.testkit.node.NodeTestUtil +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 6/10/16. + */ +class NetworkHeaderTest extends FlatSpec with MustMatchers { + + "MessageHeader" must "must create a message header for a message" in { + val messageHeader = NetworkHeader(TestNet3, NodeTestUtil.versionMessage) + messageHeader.network must be(TestNet3.magicBytes) + messageHeader.commandName must be(NodeTestUtil.versionMessage.commandName) + messageHeader.payloadSize must be( + UInt32(NodeTestUtil.versionMessage.bytes.size)) + messageHeader.checksum must be( + CryptoUtil.doubleSHA256(NodeTestUtil.versionMessage.bytes).bytes.take(4)) + } + + it must "build the correct message header for a verack message" in { + val messageHeader = NetworkHeader(TestNet3, VerAckMessage) + messageHeader.network must be(TestNet3.magicBytes) + messageHeader.commandName must be(VerAckMessage.commandName) + messageHeader.payloadSize must be(UInt32.zero) + BitcoinSUtil.encodeHex(messageHeader.checksum) must be("5df6e0e2") + } + +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/NetworkPayloadTest.scala b/node-test/src/test/scala/org/bitcoins/node/messages/NetworkPayloadTest.scala new file mode 100644 index 0000000000..f5ffad6141 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/NetworkPayloadTest.scala @@ -0,0 +1,18 @@ +package org.bitcoins.node.messages + +import org.bitcoins.node.headers.NetworkHeader +import org.bitcoins.testkit.node.NodeTestUtil +import org.bitcoins.testkit.util.BitcoinSUnitTest + +class NetworkPayloadTest extends BitcoinSUnitTest { + + "NetworkMessage" must "create a payload object from it's network header and the payload bytes" in { + val rawNetworkMessage = NodeTestUtil.rawNetworkMessage + val header = NetworkHeader(rawNetworkMessage.take(48)) + logger.debug("Header: " + header) + val payloadHex = rawNetworkMessage.slice(48, rawNetworkMessage.length) + val payload = NetworkPayload(header, payloadHex) + payload.isInstanceOf[VersionMessage] must be(true) + payload.commandName must be(NetworkPayload.versionCommandName) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/TypeIdentifierTest.scala b/node-test/src/test/scala/org/bitcoins/node/messages/TypeIdentifierTest.scala new file mode 100644 index 0000000000..7855a15122 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/TypeIdentifierTest.scala @@ -0,0 +1,23 @@ +package org.bitcoins.node.messages + +import org.bitcoins.node.messages.TypeIdentifier.{ + MsgBlock, + MsgFilteredBlock, + MsgTx +} +import org.bitcoins.testkit.util.BitcoinSUnitTest + +class TypeIdentifierTest extends BitcoinSUnitTest { + + "MsgTx" must "serialize to 01000000" in { + MsgTx.hex must be("01000000") + } + + "MsgBlock" must "serialize to 02000000" in { + MsgBlock.hex must be("02000000") + } + + "MsgFilteredBlock" must "serialize to 03000000" in { + MsgFilteredBlock.hex must be("03000000") + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterAddMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterAddMessageSpec.scala new file mode 100644 index 0000000000..c050439d8b --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterAddMessageSpec.scala @@ -0,0 +1,16 @@ +package org.bitcoins.node.messages.control + +import org.bitcoins.testkit.gen.ControlMessageGenerator +import org.bitcoins.testkit.util.BitcoinSUnitTest + +/** + * Created by chris on 8/26/16. + */ +class FilterAddMessageSpec extends BitcoinSUnitTest { + + it must "have serialization symmetry" in { + forAll(ControlMessageGenerator.filterAddMessage) { filterAddMsg => + assert(FilterAddMessage(filterAddMsg.hex) == filterAddMsg) + } + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterLoadMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterLoadMessageSpec.scala new file mode 100644 index 0000000000..343e3355ba --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/control/FilterLoadMessageSpec.scala @@ -0,0 +1,13 @@ +package org.bitcoins.node.messages.control + +import org.bitcoins.testkit.gen.ControlMessageGenerator +import org.bitcoins.testkit.util.BitcoinSUnitTest + +class FilterLoadMessageSpec extends BitcoinSUnitTest { + + it must "have serialization symmetry" in { + forAll(ControlMessageGenerator.filterLoadMessage) { filterMsg => + assert(FilterLoadMessage(filterMsg.hex) == filterMsg) + } + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/PingMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/control/PingMessageSpec.scala new file mode 100644 index 0000000000..80b41acd59 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/control/PingMessageSpec.scala @@ -0,0 +1,13 @@ +package org.bitcoins.node.messages.control + +import org.bitcoins.testkit.gen.ControlMessageGenerator +import org.bitcoins.testkit.util.BitcoinSUnitTest + +class PingMessageSpec extends BitcoinSUnitTest { + + it must "have symmetry serialization" in { + forAll(ControlMessageGenerator.pingMessage) { pingMessage => + assert(PingMessage(pingMessage.hex) == pingMessage) + } + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/PongMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/control/PongMessageSpec.scala new file mode 100644 index 0000000000..8264456424 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/control/PongMessageSpec.scala @@ -0,0 +1,13 @@ +package org.bitcoins.node.messages.control + +import org.bitcoins.testkit.gen.ControlMessageGenerator +import org.bitcoins.testkit.util.BitcoinSUnitTest + +class PongMessageSpec extends BitcoinSUnitTest { + + it must "have serialization symmetry" in { + forAll(ControlMessageGenerator.pongMessage) { pongMsg => + assert(PongMessage(pongMsg.hex) == pongMsg) + } + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/RejectMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/control/RejectMessageSpec.scala new file mode 100644 index 0000000000..cd08cc3b9e --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/control/RejectMessageSpec.scala @@ -0,0 +1,13 @@ +package org.bitcoins.node.messages.control + +import org.bitcoins.testkit.gen.ControlMessageGenerator +import org.bitcoins.testkit.util.BitcoinSUnitTest + +class RejectMessageSpec extends BitcoinSUnitTest { + + it must "have serialization symmetry" in { + forAll(ControlMessageGenerator.rejectMessage) { rejectMsg => + assert(RejectMessage(rejectMsg.hex) == rejectMsg) + } + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageSpec.scala new file mode 100644 index 0000000000..5845f9bff4 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageSpec.scala @@ -0,0 +1,14 @@ +package org.bitcoins.node.messages.control + +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.testkit.gen.ControlMessageGenerator +import org.bitcoins.testkit.util.BitcoinSUnitTest + +class VersionMessageSpec extends BitcoinSUnitTest { + + it must "have serialization symmetry" in { + forAll(ControlMessageGenerator.versionMessage) { versionMessage => + assert(VersionMessage(versionMessage.hex) == versionMessage) + } + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageTest.scala b/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageTest.scala new file mode 100644 index 0000000000..ab99c8a44a --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/control/VersionMessageTest.scala @@ -0,0 +1,26 @@ +package org.bitcoins.node.messages.control + +import java.net.InetAddress + +import org.bitcoins.testkit.util.BitcoinSUnitTest +import org.bitcoins.core.config.MainNet +import org.bitcoins.core.number.{Int32, UInt64} +import org.joda.time.DateTime + +class VersionMessageTest extends BitcoinSUnitTest { + + "VersionMessage" must "create a new version message to be sent to another node on the network" in { + val versionMessage = VersionMessage(MainNet, InetAddress.getLocalHost) + versionMessage.addressReceiveServices must be(UnnamedService) + versionMessage.addressReceiveIpAddress must be(InetAddress.getLocalHost) + versionMessage.addressReceivePort must be(MainNet.port) + + versionMessage.addressTransServices must be(NodeNetwork) + versionMessage.addressTransIpAddress must be(InetAddress.getLocalHost) + versionMessage.addressTransPort must be(MainNet.port) + + versionMessage.nonce must be(UInt64.zero) + versionMessage.startHeight must be(Int32.zero) + versionMessage.timestamp.toLong must be(DateTime.now.getMillis +- 1000) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/GetDataMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/data/GetDataMessageSpec.scala new file mode 100644 index 0000000000..3c6d804276 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/data/GetDataMessageSpec.scala @@ -0,0 +1,17 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.testkit.gen.DataMessageGenerator +import org.bitcoins.testkit.util.BitcoinSUnitTest +import org.scalacheck.{Prop, Properties} + +/** + * Created by chris on 7/8/16. + */ +class GetDataMessageSpec extends BitcoinSUnitTest { + + it must "have serialization symmetry" in { + forAll(DataMessageGenerator.getDataMessages) { dataMsg => + assert(GetDataMessage(dataMsg.hex) == dataMsg) + } + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/GetHeadersMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/data/GetHeadersMessageSpec.scala new file mode 100644 index 0000000000..93cda5d5e3 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/data/GetHeadersMessageSpec.scala @@ -0,0 +1,14 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.testkit.gen.DataMessageGenerator +import org.bitcoins.testkit.util.BitcoinSUnitTest + +class GetHeadersMessageSpec extends BitcoinSUnitTest { + + it must "have serialization symmetry" in { + forAll(DataMessageGenerator.getHeaderMessages) { headerMsg => + assert(GetHeadersMessage(headerMsg.hex) == headerMsg) + } + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/HeadersMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/data/HeadersMessageSpec.scala new file mode 100644 index 0000000000..c41014329b --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/data/HeadersMessageSpec.scala @@ -0,0 +1,13 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.testkit.gen.DataMessageGenerator +import org.bitcoins.testkit.util.BitcoinSUnitTest + +class HeadersMessageSpec extends BitcoinSUnitTest { + + it must "have serialization symmetry" in { + forAll(DataMessageGenerator.headersMessage) { headersMsg => + assert(HeadersMessage(headersMsg.hex) == headersMsg) + } + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/InventoryMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/data/InventoryMessageSpec.scala new file mode 100644 index 0000000000..76936e78a3 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/data/InventoryMessageSpec.scala @@ -0,0 +1,16 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.testkit.gen.DataMessageGenerator +import org.bitcoins.testkit.util.BitcoinSUnitTest + +/** + * Created by chris on 7/8/16. + */ +class InventoryMessageSpec extends BitcoinSUnitTest { + + it must " have serialization symmetry" in { + forAll(DataMessageGenerator.inventoryMessages) { invMessage => + assert(InventoryMessage(invMessage.hex) == invMessage) + } + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/InventorySpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/data/InventorySpec.scala new file mode 100644 index 0000000000..757c68b60c --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/data/InventorySpec.scala @@ -0,0 +1,16 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.testkit.gen.DataMessageGenerator +import org.bitcoins.testkit.util.BitcoinSUnitTest + +/** + * Created by chris on 7/8/16. + */ +class InventorySpec extends BitcoinSUnitTest { + + it must "have serialization symmetry" in { + forAll(DataMessageGenerator.inventory) { inventory => + assert(Inventory(inventory.hex) == inventory) + } + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/MerkleBlockMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/data/MerkleBlockMessageSpec.scala new file mode 100644 index 0000000000..971b08c560 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/data/MerkleBlockMessageSpec.scala @@ -0,0 +1,12 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.testkit.gen.DataMessageGenerator +import org.bitcoins.testkit.util.BitcoinSUnitTest + +class MerkleBlockMessageSpec extends BitcoinSUnitTest { + it must "have serialization symmetry" in { + forAll(DataMessageGenerator.merkleBlockMessage) { merkleBlockMsg => + assert(MerkleBlockMessage(merkleBlockMsg.hex) == merkleBlockMsg) + } + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/messages/data/TransactionMessageSpec.scala b/node-test/src/test/scala/org/bitcoins/node/messages/data/TransactionMessageSpec.scala new file mode 100644 index 0000000000..1867fe6dcd --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/messages/data/TransactionMessageSpec.scala @@ -0,0 +1,14 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.testkit.gen.DataMessageGenerator +import org.bitcoins.testkit.util.BitcoinSUnitTest + +class TransactionMessageSpec extends BitcoinSUnitTest { + + it must "have serialization symmetry" in { + forAll(DataMessageGenerator.transactionMessage) { txMsg => + assert(TransactionMessage.fromHex(txMsg.hex) == txMsg) + } + } + +} diff --git a/node-test/src/test/scala/org/bitcoins/node/networking/BlockActorTest.scala b/node-test/src/test/scala/org/bitcoins/node/networking/BlockActorTest.scala new file mode 100644 index 0000000000..81534d8cfb --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/networking/BlockActorTest.scala @@ -0,0 +1,61 @@ +/* +package org.bitcoins.node.networking + +import akka.actor.ActorSystem +import akka.testkit.{ImplicitSender, TestActorRef, TestKit, TestProbe} +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.protocol.blockchain.BlockHeader +import org.bitcoins.core.util.{BitcoinSLogger, BitcoinSUtil} +import org.bitcoins.node.db.UnitTestDbConfig +import org.bitcoins.node.messages.BlockMessage +import org.bitcoins.node.messages.BlockMessage +import org.bitcoins.node.util.TestUtil +import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, FlatSpecLike, MustMatchers} + +import scala.concurrent.duration.DurationInt + +/** + * Created by chris on 7/10/16. + */ +class BlockActorTest + extends TestKit(ActorSystem("BlockActorTest")) + with FlatSpecLike + with MustMatchers + with ImplicitSender + with BeforeAndAfter + with BeforeAndAfterAll + with BitcoinSLogger { + + def blockActor = { + val peerMsgHandler = TestUtil.peer(self) + TestActorRef( + props = BlockActor.props(peerMsgHandler = peerMsgHandler, + dbConfig = TestUtil.dbConfig), + supervisor = self + ) + } + + val blockHash = DoubleSha256Digest.fromHex( + BitcoinSUtil.flipEndianness( + "00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206")) + + "BlockActor" must "be able to send a GetBlocksMessage then receive that block back" in { + blockActor ! blockHash + val blockMsg = expectMsgType[BlockMessage](10.seconds) + blockMsg.block.blockHeader.hash must be(blockHash) + + } + + it must "be able to request a block from it's block header" in { + val blockHeader = BlockHeader( + "0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b672") + blockActor ! blockHeader + val blockMsg = expectMsgType[BlockMessage](10.seconds) + blockMsg.block.blockHeader.hash must be(blockHash) + } + + override def afterAll = { + TestKit.shutdownActorSystem(system) + } +} +*/ diff --git a/node-test/src/test/scala/org/bitcoins/node/networking/ClientTest.scala b/node-test/src/test/scala/org/bitcoins/node/networking/ClientTest.scala new file mode 100644 index 0000000000..d7cbd45c4a --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/networking/ClientTest.scala @@ -0,0 +1,108 @@ +package org.bitcoins.node.networking + +import akka.actor.ActorSystem +import akka.io.Tcp +import akka.testkit.{TestActorRef, TestKit, TestProbe} +import org.bitcoins.chain.config.ChainAppConfig +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.models.Peer +import org.bitcoins.node.networking.peer.PeerMessageReceiver +import org.bitcoins.node.networking.peer.PeerMessageReceiverState.Preconnection +import org.bitcoins.testkit.async.TestAsyncUtil +import org.bitcoins.testkit.node.NodeTestUtil +import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil +import org.scalatest._ + +import scala.concurrent.Future +import scala.concurrent.duration.DurationInt + +/** + * Created by chris on 6/7/16. + */ +class ClientTest + extends AsyncFlatSpec + with MustMatchers + with BeforeAndAfter + with BeforeAndAfterAll + with BitcoinSLogger { + implicit val system = ActorSystem( + s"Client-Test-System-${System.currentTimeMillis()}") + + private val appConfig = NodeTestUtil.nodeAppConfig + + private val chainAppConfig = ChainAppConfig() + + implicit val np = appConfig.network + + val bitcoindRpcF = BitcoindRpcTestUtil.startedBitcoindRpcClient() + + val bitcoindPeerF = bitcoindRpcF.map { bitcoind => + NodeTestUtil.getBitcoindPeer(bitcoind) + } + + val bitcoindRpc2F = BitcoindRpcTestUtil.startedBitcoindRpcClient() + + val bitcoindPeer2F = bitcoindRpcF.map { bitcoind => + NodeTestUtil.getBitcoindPeer(bitcoind) + } + + behavior of "Client" + + it must "establish a tcp connection with a bitcoin node" in { + bitcoindPeerF.flatMap(remote => connectAndDisconnect(remote)) + } + + it must "connect to two nodes" in { + val try1 = + bitcoindPeerF.flatMap(remote => connectAndDisconnect(remote)) + + val try2 = bitcoindPeer2F.flatMap(remote => connectAndDisconnect(remote)) + + try1.flatMap { _ => + try2 + } + } + + /** + * Helper method to connect to the + * remote node and bind our local + * connection to the specified port + * @param remote the remote node on the p2p network we are connecting to + * @param port the port we are binding on our machine + * @return + */ + def connectAndDisconnect(peer: Peer): Future[Assertion] = { + val probe = TestProbe() + val remote = peer.socket + val peerMessageReceiver = + PeerMessageReceiver(state = Preconnection, + nodeAppConfig = appConfig, + chainAppConfig = chainAppConfig) + val client = + TestActorRef(Client.props(peer, peerMessageReceiver), probe.ref) + + client ! Tcp.Connect(remote) + + val isConnectedF = + TestAsyncUtil.retryUntilSatisfied(peerMessageReceiver.isInitialized) + + isConnectedF.flatMap { _ => + //disconnect here + client ! Tcp.Abort + val isDisconnectedF = + TestAsyncUtil.retryUntilSatisfied(peerMessageReceiver.isDisconnected, + duration = 1.seconds) + + isDisconnectedF.map { _ => + succeed + } + } + } + + override def afterAll: Unit = { + bitcoindRpcF.flatMap(_.stop()) + bitcoindRpc2F.flatMap(_.stop()) + TestKit.shutdownActorSystem(system) + } + +} diff --git a/node-test/src/test/scala/org/bitcoins/node/networking/PaymentActorTest.scala b/node-test/src/test/scala/org/bitcoins/node/networking/PaymentActorTest.scala new file mode 100644 index 0000000000..f677e5db66 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/networking/PaymentActorTest.scala @@ -0,0 +1,118 @@ +/* +package org.bitcoins.node.networking + +import akka.actor.ActorSystem +import akka.testkit.{ImplicitSender, TestActorRef, TestKit} +import org.bitcoins.core.crypto.{DoubleSha256Digest, Sha256Hash160Digest} +import org.bitcoins.core.number.{Int32, UInt32} +import org.bitcoins.core.protocol.P2PKHAddress +import org.bitcoins.core.protocol.blockchain.{BlockHeader, MerkleBlock, PartialMerkleTree} +import org.bitcoins.core.protocol.transaction.Transaction +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.messages.data.{Inventory, InventoryMessage, MerkleBlockMessage, TransactionMessage} +import org.bitcoins.node.messages.{MsgBlock, MsgTx} +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.db.UnitTestDbConfig +import org.bitcoins.node.messages.data.{Inventory, InventoryMessage, MerkleBlockMessage, TransactionMessage} +import org.bitcoins.node.messages.{MsgBlock, MsgTx} +import org.bitcoins.node.util.TestUtil +import org.scalatest._ +import scodec.bits.BitVector + +import scala.concurrent.duration.DurationInt + +/** + * Created by chris on 9/1/16. + */ +class PaymentActorTest + extends TestKit(ActorSystem("PaymentActorTest")) + with ImplicitSender + with FlatSpecLike + with MustMatchers + with BeforeAndAfterAll { + + val txId = DoubleSha256Digest.fromHex( + "0d507a29efb362ce93687f524e7e3a668689e335ba20374c93710efdf7597c5f") + + val transaction = Transaction.fromHex( + "0100000001f78d02e5d2e37319a4cec31331babea9f0c6b9efb75060e27cf23997c6e560b3010000006a47304402207f6d19701c0e58bdedbc5073c17ac36e3493326c8c916db7dd224961fa8c8c9f02201ba78149c12a9754f7ceab1bcfe4c6afb8fb5ee38078f47065d316cddaa932b40121023de7008d781aa60ed8b0cdf92ece1d3e6eca2a0fd958d883114129a450ab05f2feffffff02bf9fb700000000001976a914a82d2cefa38fe32eb90c5d31d2063dde716c90df88ac009f2400000000001976a914415a05d63df2c212e1c750a70eba49d6d8af196d88accb210e00") + "PaymentActor" must "monitor an address, then send SuccessfulPayment or FailedPayment message if that address is not paid in the next block" in { + val paymentActor = paymentActorRef + val pubKeyHash = + Sha256Hash160Digest("415a05d63df2c212e1c750a70eba49d6d8af196d") + val addr = P2PKHAddress(pubKeyHash, Constants.networkParameters) + paymentActor ! addr + + //TODO: Remove this thread.sleep call + //wait for connection to be made so we have the right context + Thread.sleep(3000) + //build an inventory message, then send it to the payment actor + val inventory = Inventory(MsgTx, txId) + val txIdInvMsg = InventoryMessage(Seq(inventory)) + paymentActor ! txIdInvMsg + + //now the payment actor switches to waiting for the full transaction + //so send the actor the full transaction + val txMsg = TransactionMessage(transaction) + paymentActor ! txMsg + + //after seeing the tx message, our payment actor waits for a block to be announced on the network + val blockMsg = Inventory( + MsgBlock, + DoubleSha256Digest( + "62862488a791bf863ea840f8b9e4ded91ef5625e73b4f56940d6050000000000")) + val blockInvMsg = InventoryMessage(Seq(blockMsg)) + paymentActor ! blockInvMsg + + val partialMerkleTree = PartialMerkleTree( + transactionCount = UInt32(36), + hashes = List( + DoubleSha256Digest( + "27f706c39b2ea48d9316d85f513080da35329f3629ecf5f22869e191d38f3553"), + DoubleSha256Digest( + "0d507a29efb362ce93687f524e7e3a668689e335ba20374c93710efdf7597c5f"), + DoubleSha256Digest( + "b80117bee395e816a26e807dcb5858403142dcb8d5edfc3eaa6dde700a9198a2"), + DoubleSha256Digest( + "d297f7e4e712967f77f87c65fc698fc6ff8fc0fb056b07ebd459567d0a1c36f8"), + DoubleSha256Digest( + "114b915455ad5cb314e77c648e243f71d9b4895ab96c38cc3c7e27fd151d112b"), + DoubleSha256Digest( + "c83ce4bd870c2d791d73d1ce3fd7b96f61c94d3ce3af270af22938c0d15b683a"), + DoubleSha256Digest( + "ec89457fd619020e11727f01d7f5518b7c3114aaa70376611efe9efd41c5c099") + ), + bits = BitVector.fromValidBin("11011111" + "00000000") + ) + + //after seeing a new block announcement on the network we request a merkle block message from the peer on the network + //this merkle block message is taken from a node on the network + val header = BlockHeader( + version = Int32(805306368), + previousBlockHash = DoubleSha256Digest( + "1d73fa2ffbdf79c2e78e3312066833c4a264a19b958faf450100000000000000"), + merkleRootHash = DoubleSha256Digest( + "9b47cf5d64aa52d7536e2b469891a79ea8488092dc3c2e0ed26dbe9b508cce16"), + time = UInt32(1472661981), + nBits = UInt32(486604799), + nonce = UInt32(4219144207L) + ) + val merkleBlockMsg = MerkleBlockMessage( + merkleBlock = MerkleBlock(blockHeader = header, + txCount = UInt32(36), + partialMerkleTree = partialMerkleTree)) + paymentActor ! merkleBlockMsg + expectMsgType[PaymentActor.SuccessfulPayment](10.seconds) + } + + + def paymentActorRef: TestActorRef[PaymentActor] = { + val peerMsgHandler = TestUtil.peer(self) + val paymentProps = PaymentActor.props( + peerMsgHandler = peerMsgHandler, + dbConfig = TestUtil.dbConfig) + + TestActorRef(paymentProps, self) + } +} +*/ diff --git a/node-test/src/test/scala/org/bitcoins/node/networking/peer/PeerMessageHandlerTest.scala b/node-test/src/test/scala/org/bitcoins/node/networking/peer/PeerMessageHandlerTest.scala new file mode 100644 index 0000000000..95c5564ed4 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/networking/peer/PeerMessageHandlerTest.scala @@ -0,0 +1,207 @@ +package org.bitcoins.node.networking.peer + +import akka.testkit.TestKit +import akka.util.Timeout +import org.bitcoins.testkit.async.TestAsyncUtil +import org.bitcoins.testkit.node.NodeUnitTest +import org.scalatest.FutureOutcome + +import scala.concurrent.duration.DurationInt + +/** + * Created by chris on 7/1/16. + */ +class PeerMessageHandlerTest extends NodeUnitTest { + override type FixtureParam = Unit + override def withFixture(test: OneArgAsyncTest): FutureOutcome = { + test(()) + } + + private implicit val akkaTimeout = Timeout(timeout) + + behavior of "PeerHandler" + + it must "be able to fully initialize a PeerMessageReceiver" in { _ => + val peerHandlerF = buildPeerHandler() + val peerMsgSenderF = peerHandlerF.map(_.peerMsgSender) + val peerMsgRecvF = peerHandlerF.map(_.peerMsgRecv) + + val _ = + bitcoindPeerF.flatMap(p => peerHandlerF.map(_.peerMsgSender.connect())) + + val isConnectedF = TestAsyncUtil.retryUntilSatisfiedF( + () => peerMsgRecvF.map(_.isConnected), + duration = 500.millis + ) + + val hasVersionMsgF = isConnectedF.flatMap { _ => + TestAsyncUtil.retryUntilSatisfiedF( + conditionF = () => peerMsgRecvF.map(_.hasReceivedVersionMsg) + ) + } + + val hasVerackMsg = hasVersionMsgF.flatMap { _ => + TestAsyncUtil.retryUntilSatisfiedF( + conditionF = () => peerMsgRecvF.map(_.hasReceivedVerackMsg) + ) + } + + val isInitF = hasVerackMsg.flatMap { _ => + peerMsgRecvF.map(p => assert(p.isInitialized)) + } + + val disconnectF = isInitF.flatMap { _ => + peerMsgSenderF.map(_.disconnect()) + } + + val isDisconnectedF = disconnectF.flatMap { _ => + TestAsyncUtil.retryUntilSatisfiedF(() => + peerMsgRecvF.map(_.isDisconnected)) + + } + + isDisconnectedF.map(_ => succeed) + } + + /* + "PeerMessageHandler" must "be able to send a GetHeadersMessage then receive a list of headers back" in { + + val hashStart = DoubleSha256Digest.empty + //this is the hash of block 2, so this test will send two blocks + val hashStop = DoubleSha256Digest( + BitcoinSUtil.flipEndianness( + "000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820")) + val getHeadersMessage = + GetHeadersMessage(Constants.version, List(hashStart), hashStop) + + val (peerMsgSender, testProbe) = buildPeerMessageSender() + val socket = peerSocketAddress + val peerHandler = PeerHandler(dbConfig = NodeTestUtil.dbConfig, + peerMsgSender = peerMsgSender, + socket = socket) + + val connected = Await.result(peerHandler.connect(), timeout) + + val _ = peerHandler.getHeaders(getHeadersMsg = getHeadersMessage) + + val headersMsg = expectMsgType[HeadersMessage](timeout) + + headersMsg.commandName must be(NetworkPayload.headersCommandName) + + val firstHeader = headersMsg.headers.head + + firstHeader.hash.hex must be( + BitcoinSUtil.flipEndianness( + "00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206")) + + val secondHeader = headersMsg.headers(1) + secondHeader.hash.hex must be( + BitcoinSUtil.flipEndianness( + "000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820")) + + peerHandler.close() + + } + + it must "send a getblocks message and receive a list of blocks back" in { + val hashStart = DoubleSha256Digest( + "0000000000000000000000000000000000000000000000000000000000000000") + //this is the hash of block 2, so this test will send two blocks + val hashStop = DoubleSha256Digest( + BitcoinSUtil.flipEndianness( + "000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820")) + + val getBlocksMsg = + GetBlocksMessage(Constants.version, Seq(hashStart), hashStop) + + val peerRequest = buildPeerRequest(getBlocksMsg) + + val (peerMsgHandler, probe) = peerMsgHandlerRef + probe.send(peerMsgHandler, peerRequest) + + val invMsg = probe.expectMsgType[InventoryMessage](5.seconds) + + invMsg.inventoryCount must be(CompactSizeUInt(UInt64.one, 1)) + invMsg.inventories.head.hash.hex must be( + BitcoinSUtil.flipEndianness( + "00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206")) + invMsg.inventories.head.typeIdentifier must be(MsgBlock) + peerMsgHandler ! Tcp.Close + probe.expectMsg(Tcp.Closed) + } + + it must "request a full block from another node" in { + //first block on testnet + //https://tbtc.blockr.io/block/info/1 + val blockHash = DoubleSha256Digest( + BitcoinSUtil.flipEndianness( + "00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206")) + val getDataMessage = GetDataMessage(Inventory(MsgBlock, blockHash)) + val peerRequest = buildPeerRequest(getDataMessage) + val (peerMsgHandler, probe) = peerMsgHandlerRef + probe.send(peerMsgHandler, peerRequest) + + val blockMsg = probe.expectMsgType[BlockMessage](5.seconds) + logger.debug("BlockMsg: " + blockMsg) + blockMsg.block.blockHeader.hash must be(blockHash) + + blockMsg.block.transactions.length must be(1) + blockMsg.block.transactions.head.txId must be + (DoubleSha256Digest( + BitcoinSUtil.flipEndianness( + "f0315ffc38709d70ad5647e22048358dd3745f3ce3874223c80a7c92fab0c8ba"))) + peerMsgHandler ! Tcp.Close + probe.expectMsg(Tcp.Closed) + + } + + it must "request a transaction from another node" in { + //this tx is the coinbase tx in the first block on testnet + //https://tbtc.blockr.io/tx/info/f0315ffc38709d70ad5647e22048358dd3745f3ce3874223c80a7c92fab0c8ba + val txId = DoubleSha256Digest( + BitcoinSUtil.flipEndianness( + "a4dd00d23de4f0f96963e16b72afea547bc9ad1d0c1dda5653110eddd83fe0e2")) + val getDataMessage = GetDataMessage(Inventory(MsgTx, txId)) + val peerRequest = buildPeerRequest(getDataMessage) + val (peerMsgHandler, probe) = peerMsgHandlerRef + probe.send(peerMsgHandler, peerRequest) + //we cannot request an arbitrary tx from a node, + //therefore the node responds with a [[NotFoundMessage]] + probe.expectMsgType[NotFoundMessage](5.seconds) + + peerMsgHandler ! Tcp.Close + probe.expectMsg(Tcp.Closed) + } + + it must "send a GetAddressMessage and then receive an AddressMessage back" in { + val (peerMsgHandler, probe) = peerMsgHandlerRef + val peerRequest = buildPeerRequest(GetAddrMessage) + probe.send(peerMsgHandler, peerRequest) + val addrMsg = probe.expectMsgType[AddrMessage](15.seconds) + peerMsgHandler ! Tcp.Close + probe.expectMsg(Tcp.Closed) + } + + it must "send a PingMessage to our peer and receive a PongMessage back" in { + val (peerMsgHandler, probe) = peerMsgHandlerRef + val nonce = UInt64(scala.util.Random.nextLong.abs) + + val peerRequest = buildPeerRequest(PingMessage(nonce)) + + system.scheduler.schedule(2.seconds, + 30.seconds, + peerMsgHandler, + peerRequest)(global, probe.ref) + val pongMessage = probe.expectMsgType[PongMessage](8.seconds) + + pongMessage.nonce must be(nonce) + + peerMsgHandler ! Tcp.Close + probe.expectMsg(Tcp.Closed) + }*/ + + override def afterAll = { + startedBitcoindF.flatMap(_.stop()) + TestKit.shutdownActorSystem(system) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/networking/sync/BlockHeaderSyncActorTest.scala b/node-test/src/test/scala/org/bitcoins/node/networking/sync/BlockHeaderSyncActorTest.scala new file mode 100644 index 0000000000..c160a50e7e --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/networking/sync/BlockHeaderSyncActorTest.scala @@ -0,0 +1,242 @@ +/* +package org.bitcoins.node.networking.sync + +import akka.actor.{ActorSystem, PoisonPill} +import akka.testkit.{ImplicitSender, TestActorRef, TestKit, TestProbe} +import org.bitcoins.core.config.{MainNet, TestNet3} +import org.bitcoins.core.gen.BlockchainElementsGenerator +import org.bitcoins.core.protocol.blockchain.{ + BlockHeader, + MainNetChainParams, + TestNetChainParams +} +import org.bitcoins.node.constant.{Constants, TestConstants} +import org.bitcoins.node.db.NodeDbManagement +import org.bitcoins.node.messages.data.HeadersMessage +import org.bitcoins.node.models.BlockHeaderTable +import org.bitcoins.node.util.TestUtil +import org.scalatest.{ + BeforeAndAfter, + BeforeAndAfterAll, + FlatSpecLike, + MustMatchers +} +import slick.jdbc.PostgresProfile.api._ + +import scala.concurrent.{Await, ExecutionContext} +import scala.concurrent.duration.DurationInt + +/** + * Created by chris on 9/13/16. + */ +class BlockHeaderSyncActorTest + extends TestKit(ActorSystem("BlockHeaderSyncActorSpec")) + with ImplicitSender + with FlatSpecLike + with MustMatchers + with BeforeAndAfter + with BeforeAndAfterAll { + implicit val ec: ExecutionContext = + scala.concurrent.ExecutionContext.Implicits.global + val timeout = 10.seconds + val genesisBlockHash = TestNetChainParams.genesisBlock.blockHeader.hash + + before { + Await.result( + NodeDbManagement.createBlockHeaderTable(TestConstants.dbConfig), + timeout) + } + + "BlockHeaderSyncActor" must "send us an error if we receive two block headers that are not connected" in { + val (b, probe) = blockHeaderSyncActor + val blockHeader1 = BlockchainElementsGenerator.blockHeader.sample.get + val blockHeader2 = BlockchainElementsGenerator.blockHeader.sample.get + val headersMsg = HeadersMessage(List(blockHeader2)) + b ! BlockHeaderSyncActor.StartHeaders(List(blockHeader1)) + b ! headersMsg + val errorMsg = + probe.expectMsgType[BlockHeaderSyncActor.BlockHeadersDoNotConnect] + errorMsg must be( + BlockHeaderSyncActor.BlockHeadersDoNotConnect(blockHeader1.hash, + blockHeader2.hash)) + b ! PoisonPill + } + + it must "sync the first 5 headers on testnet" in { + //genesis block hash is 43497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000 + val genesisBlockHash = TestNetChainParams.genesisBlock.blockHeader.hash + val firstBlockHash = TestUtil.firstFiveTestNetBlockHeaders.head.hash + val secondBlockHash = TestUtil.firstFiveTestNetBlockHeaders(1).hash + val thirdBlockHash = TestUtil.firstFiveTestNetBlockHeaders(2).hash + val fourthBlockHash = TestUtil.firstFiveTestNetBlockHeaders(3).hash + //5th block hash on testnet + val fifthBlockHash = TestUtil.firstFiveTestNetBlockHeaders.last.hash + val (b, probe) = blockHeaderSyncActor + + b ! BlockHeaderSyncActor.GetHeaders(genesisBlockHash, fifthBlockHash) + val headersReply = + probe.expectMsgType[BlockHeaderSyncActor.GetHeadersReply](5.seconds) + //note the hash we started the sync at is not included in the expected blockheaders we recevie from our peer + val expectedHashes = List(firstBlockHash, + secondBlockHash, + thirdBlockHash, + fourthBlockHash, + fifthBlockHash) + val actualHashes = headersReply.headers.map(_.hash) + + actualHashes.size must be(expectedHashes.size) + actualHashes must be(expectedHashes) + b ! PoisonPill + } + + it must "fail to sync with a GetHeaders message if they are not connected" in { + val (b, probe) = blockHeaderSyncActor + val fifthBlockHash = TestUtil.firstFiveTestNetBlockHeaders.last.hash + b ! BlockHeaderSyncActor.GetHeaders(genesisBlockHash, fifthBlockHash) + + val headers = TestUtil.firstFiveTestNetBlockHeaders + .slice(0, 2) ++ TestUtil.firstFiveTestNetBlockHeaders + .slice(3, TestUtil.firstFiveTestNetBlockHeaders.size) + val headersMsgMissingHeader = HeadersMessage(headers) + b ! headersMsgMissingHeader + + probe.expectMsgType[BlockHeaderSyncActor.BlockHeadersDoNotConnect] + b ! PoisonPill + } + + it must "stop syncing when we do not receive 2000 block headers from our peer" in { + val (b, probe) = blockHeaderSyncActor + b ! BlockHeaderSyncActor.StartHeaders( + List(TestNetChainParams.genesisBlock.blockHeader)) + val headersMsg = HeadersMessage(TestUtil.firstFiveTestNetBlockHeaders) + b ! headersMsg + val reply = + probe.expectMsgType[BlockHeaderSyncActor.SuccessfulSyncReply](7.seconds) + reply.lastHeader must be(TestUtil.firstFiveTestNetBlockHeaders.last) + b ! PoisonPill + } + + it must "start syncing at the genesis block when there are no headers in the database" in { + val (b, probe) = blockHeaderSyncActor + b ! BlockHeaderSyncActor.StartAtLastSavedHeader + val lastSavedHeaderReply = + probe.expectMsgType[BlockHeaderSyncActor.StartAtLastSavedHeaderReply] + lastSavedHeaderReply.header must be( + Constants.chainParams.genesisBlock.blockHeader) + b ! PoisonPill + } + + it must "successfully check two block headers if their difficulty is the same" in { + val firstHeader = BlockchainElementsGenerator.blockHeader.sample.get + //note that this header properly references the previous header, but nBits are different + val secondHeader = BlockchainElementsGenerator + .blockHeader(firstHeader.hash, firstHeader.nBits) + .sample + .get + val checkHeaderResult = + BlockHeaderSyncActor.checkHeaders(Some(firstHeader), + List(secondHeader), + 0, + MainNet) + + checkHeaderResult.error.isDefined must be(false) + checkHeaderResult.headers must be(List(secondHeader)) + } + + it must "successfully check the header of ONLY the genesis block" in { + val genesisBlockHeader = MainNetChainParams.genesisBlock.blockHeader + val checkHeaderResult = + BlockHeaderSyncActor.checkHeaders(None, + List(genesisBlockHeader), + 0, + MainNet) + checkHeaderResult.error.isDefined must be(false) + checkHeaderResult.headers must be(List(genesisBlockHeader)) + } + + it must "successfully check a sequence of headers if their is a difficulty change on the 2016 block" in { + val firstHeaders = genValidHeaderChain(2015) + val lastHeader = + BlockchainElementsGenerator.blockHeader(firstHeaders.last.hash).sample.get + val headers = firstHeaders ++ List(lastHeader) + val checkHeaderResult = + BlockHeaderSyncActor.checkHeaders(None, headers, 0, MainNet) + checkHeaderResult.error must be(None) + checkHeaderResult.headers must be(headers) + } + + it must "fail a checkHeader on a sequence of headers if their is a difficulty change on the 2015 or 2017 block" in { + val firstHeaders = genValidHeaderChain(2014) + + val lastHeader = + BlockchainElementsGenerator.blockHeader(firstHeaders.last.hash).sample.get + val headers = firstHeaders ++ List(lastHeader) + val checkHeaderResult = + BlockHeaderSyncActor.checkHeaders(None, headers, 0, MainNet) + checkHeaderResult.error.isDefined must be(true) + checkHeaderResult.headers must be(headers) + + val firstHeaders2 = + BlockchainElementsGenerator.validHeaderChain(2016).sample.get + val lastHeader2 = BlockchainElementsGenerator + .blockHeader(firstHeaders2.last.hash) + .sample + .get + val headers2 = firstHeaders ++ List(lastHeader2) + val checkHeaderResult2 = + BlockHeaderSyncActor.checkHeaders(None, headers2, 0, MainNet) + checkHeaderResult2.error.isDefined must be(true) + checkHeaderResult2.headers must be(headers2) + } + + it must "fail to check two block headers if the network difficulty isn't correct" in { + val firstHeader = BlockchainElementsGenerator.blockHeader.sample.get + //note that this header properly references the previous header, but nBits are different + val secondHeader = + BlockchainElementsGenerator.blockHeader(firstHeader.hash).sample.get + val checkHeaderResult = + BlockHeaderSyncActor.checkHeaders(Some(firstHeader), + List(secondHeader), + 0, + MainNet) + + val errorMsg = checkHeaderResult.error.get + .asInstanceOf[BlockHeaderSyncActor.BlockHeaderDifficultyFailure] + + errorMsg.previousBlockHeader must be(firstHeader) + errorMsg.blockHeader must be(secondHeader) + } + + /** The [[TestActorRef]] for a [[BlockHeaderSyncActor]] we use for testing */ + private def blockHeaderSyncActor: ( + TestActorRef[BlockHeaderSyncActor], + TestProbe) = { + val probe = TestProbe() + + val peerMsgHandler = TestUtil.peer(self) + + val syncActorProps = BlockHeaderSyncActor.props( + peerMsgHandler = peerMsgHandler, + dbConfig = TestConstants.dbConfig, + networkParameters = TestNet3) + val blockHeaderSyncActor: TestActorRef[BlockHeaderSyncActor] = { + TestActorRef(syncActorProps, probe.ref) + } + + (blockHeaderSyncActor, probe) + } + + private def genValidHeaderChain(num: Long): List[BlockHeader] = { + BlockchainElementsGenerator.validHeaderChain(num).sample.get.toList + } + + after { + Await.result(NodeDbManagement.dropBlockHeaderTable(TestConstants.dbConfig), + timeout) + } + + override def afterAll = { + TestKit.shutdownActorSystem(system) + } +} +*/ diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializerTest.scala new file mode 100644 index 0000000000..b1b19bc3ad --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializerTest.scala @@ -0,0 +1,42 @@ +package org.bitcoins.node.serializers.headers + +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.util.BitcoinSUtil +import org.bitcoins.node.messages.NetworkPayload +import org.bitcoins.testkit.node.NodeTestUtil +import org.bitcoins.testkit.util.BitcoinSUnitTest + +class RawNetworkHeaderSerializerTest extends BitcoinSUnitTest { + val hex = "f9beb4d976657261636b000000000000000000005df6e0e2" + "RawMessageHeaderSerializer" must "read hex string into a message header" in { + //this example is from this section in the bitcoin developer reference + //https://bitcoin.org/en/developer-reference#message-headers + + val messageHeader = RawNetworkHeaderSerializer.read(hex) + //this is the mainnet id + BitcoinSUtil.encodeHex(messageHeader.network) must be("f9beb4d9") + + messageHeader.commandName must be("verack") + + messageHeader.payloadSize must be(UInt32.zero) + + BitcoinSUtil.encodeHex(messageHeader.checksum) must be("5df6e0e2") + } + + it must "write an object that was just read and get the original input" in { + val messageHeader = RawNetworkHeaderSerializer.read(hex) + messageHeader.hex must be(hex) + } + + it must "read a network header from a node on the network" in { + val hex = NodeTestUtil.rawNetworkMessage.take(48) + val header = RawNetworkHeaderSerializer.read(hex) + BitcoinSUtil.encodeHex(header.network) must be("0B110907".toLowerCase) + header.commandName.size must be(NetworkPayload.versionCommandName.size) + header.commandName must be(NetworkPayload.versionCommandName) + header.payloadSize must be(UInt32(102)) + BitcoinSUtil.encodeHex(header.checksum) must be("2f6743da") + + } + +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializerTest.scala new file mode 100644 index 0000000000..889000597b --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializerTest.scala @@ -0,0 +1,34 @@ +package org.bitcoins.node.serializers.messages + +import org.bitcoins.node.messages.TypeIdentifier.{ + MsgBlock, + MsgFilteredBlock, + MsgTx +} +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 5/31/16. + */ +class RawTypeIdentifierSerializerTest extends FlatSpec with MustMatchers { + val msgTxHex = "01000000" + val msgBlockHex = "02000000" + val msgFilteredBlockHex = "03000000" + "RawTypeIdentifier" must "read/write a MsgTx" in { + val msg = RawTypeIdentifierSerializer.read(msgTxHex) + msg must be(MsgTx) + RawTypeIdentifierSerializer.write(msg).toHex must be(msgTxHex) + } + + it must "read/write a MsgBlock" in { + val msg = RawTypeIdentifierSerializer.read(msgBlockHex) + msg must be(MsgBlock) + RawTypeIdentifierSerializer.write(msg).toHex must be(msgBlockHex) + } + + it must "read/write a MsgFilteredBlock" in { + val msg = RawTypeIdentifierSerializer.read(msgFilteredBlockHex) + msg must be(MsgFilteredBlock) + RawTypeIdentifierSerializer.write(msg).toHex must be(msgFilteredBlockHex) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializerTest.scala new file mode 100644 index 0000000000..5b64274458 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializerTest.scala @@ -0,0 +1,30 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.protocol.CompactSizeUInt +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 6/3/16. + */ +class RawAddrMessageSerializerTest extends FlatSpec with MustMatchers { + + //from this bitcoin developer guide example + //https://bitcoin.org/en/developer-reference#addr + val addressCount = "01" + val time = "d91f4854" + val services = "0100000000000000" + val address = "00000000000000000000ffffc0000233" + val port = "208d" + val hex = addressCount + time + services + address + port + "RawAddrMessageSerializer" must "read a AddrMessage from a hex string" in { + val addrMessage = RawAddrMessageSerializer.read(hex) + addrMessage.ipCount must be(CompactSizeUInt(UInt64.one, 1)) + addrMessage.addresses.size must be(1) + } + + it must "write a Addr message and get its original hex back" in { + val addrMessage = RawAddrMessageSerializer.read(hex) + RawAddrMessageSerializer.write(addrMessage).toHex must be(hex) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializerTest.scala new file mode 100644 index 0000000000..e67665eb86 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializerTest.scala @@ -0,0 +1,24 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.core.util.BitcoinSUtil +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 8/26/16. + */ +class RawFilterAddMessageSerializerTest extends FlatSpec with MustMatchers { + + //https://bitcoin.org/en/developer-reference#filteradd + val hex = "20" + "fdacf9b3eb077412e7a968d2e4f11b9a9dee312d666187ed77ee7d26af16cb0b" + "RawFilterAddMessageSerializer" must "deserialize a message in the bitcoin developer reference" in { + val filterAddMsg = RawFilterAddMessageSerializer.read(hex) + filterAddMsg.elementSize.hex must be("20") + BitcoinSUtil.encodeHex(filterAddMsg.element) must be( + "fdacf9b3eb077412e7a968d2e4f11b9a9dee312d666187ed77ee7d26af16cb0b") + } + + it must "serialize a filter add message" in { + val filterAddMsg = RawFilterAddMessageSerializer.read(hex) + filterAddMsg.hex must be(hex) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializerTest.scala new file mode 100644 index 0000000000..2cc559124d --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializerTest.scala @@ -0,0 +1,29 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.core.bloom.BloomUpdateNone +import org.bitcoins.core.number.{UInt32, UInt64} +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.BitcoinSUtil +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 7/20/16. + */ +class RawFilterLoadMessageSerializerTest extends FlatSpec with MustMatchers { + + "RawFilterLoadMessageSerializer" must "deserialize and serialize a filter load message" in { + //example from the bitcoin developer reference + //https://bitcoin.org/en/developer-reference#filterload + val hex = "02b50f0b0000000000000000" + + val filterLoadMsg = RawFilterLoadMessageSerializer.read(hex) + filterLoadMsg.bloomFilter.filterSize must be(CompactSizeUInt(UInt64(2))) + BitcoinSUtil.encodeHex(filterLoadMsg.bloomFilter.data) must be("b50f") + filterLoadMsg.bloomFilter.hashFuncs must be(UInt32(11)) + filterLoadMsg.bloomFilter.tweak must be(UInt32.zero) + filterLoadMsg.bloomFilter.flags must be(BloomUpdateNone) + + RawFilterLoadMessageSerializer.write(filterLoadMsg).toHex must be(hex) + + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializerTest.scala new file mode 100644 index 0000000000..9894b75f16 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializerTest.scala @@ -0,0 +1,32 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.core.number.UInt32 +import org.bitcoins.node.messages.control.NodeNetwork +import org.bitcoins.node.messages.control.NodeNetwork +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 6/2/16. + */ +class RawNetworkIpAddressSerializerTest extends FlatSpec with MustMatchers { + + //from this bitcoin developer guide example + //https://bitcoin.org/en/developer-reference#addr + val time = "d91f4854" + val services = "0100000000000000" + val address = "00000000000000000000ffffc0000233" + val port = "208d" + val hex = time + services + address + port + "RawNetworkIpAddressSerializer" must "read a network ip address from a hex string" in { + val ipAddress = RawNetworkIpAddressSerializer.read(hex) + ipAddress.time must be(UInt32(1414012889)) + ipAddress.services must be(NodeNetwork) + ipAddress.address.toString must be("/192.0.2.51") + ipAddress.port must be(8333) + } + + it must "write a network ip address from and get its original hex back" in { + val ipAddress = RawNetworkIpAddressSerializer.read(hex) + RawNetworkIpAddressSerializer.write(ipAddress).toHex must be(hex) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializerTest.scala new file mode 100644 index 0000000000..58781887da --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializerTest.scala @@ -0,0 +1,21 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.node.messages.control.PingMessage +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 6/29/16. + */ +class RawPingMessageSerializerTest extends FlatSpec with MustMatchers { + + "RawPingMessageSerializer" must "read and write a uint64 representing the ping" in { + val hex = "0094102111e2af4d" + RawPingMessageSerializer.read(hex) must be(PingMessage(UInt64(hex))) + } + + it must "write a ping message" in { + val pingMessage = PingMessage(UInt64.zero) + pingMessage.hex must be("0000000000000000") + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializerTest.scala new file mode 100644 index 0000000000..e83158df01 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializerTest.scala @@ -0,0 +1,32 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.BitcoinSUtil +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 8/31/16. + */ +class RawRejectMessageSerializerTest extends FlatSpec with MustMatchers { + + //https://bitcoin.org/en/developer-reference#reject + val hex = "02" + "7478" + "12" + "15" + "6261642d74786e732d696e707574732d7370656e74" + + "394715fcab51093be7bfca5a31005972947baf86a31017939575fb2354222821" + + "RawRejectMessageSerializer" must "read in a reject message example" in { + val rejectMsg = RawRejectMessageSerializer.read(hex) + rejectMsg.messageSize must be(CompactSizeUInt(UInt64(2))) + rejectMsg.message must be("tx") + rejectMsg.code must be(0x12.toChar) + rejectMsg.reasonSize must be(CompactSizeUInt(UInt64(21))) + rejectMsg.reason must be("bad-txns-inputs-spent") + BitcoinSUtil.encodeHex(rejectMsg.extra) must be( + "394715fcab51093be7bfca5a31005972947baf86a31017939575fb2354222821") + } + + it must "read then write a reject message" in { + val rejectMsg = RawRejectMessageSerializer.read(hex) + rejectMsg.hex must be(hex) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializerTest.scala new file mode 100644 index 0000000000..e831b0fa37 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializerTest.scala @@ -0,0 +1,32 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.node.messages.control.{NodeNetwork, UnnamedService} +import org.bitcoins.node.messages.control.{NodeNetwork, UnnamedService} +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 6/2/16. + */ +class RawServiceIdentifierSerializerTest extends FlatSpec with MustMatchers { + + "RawServiceIdentifierSerializer" must "read a unnamed service identfier from a hex string" in { + val hex = "0000000000000000" + RawServiceIdentifierSerializer.read(hex) must be(UnnamedService) + } + it must "read a full node service identifier" in { + val hex = "0100000000000000" + RawServiceIdentifierSerializer.read(hex) must be(NodeNetwork) + } + + it must "write a unnamed service identifier" in { + val hex = "0000000000000000" + val service = RawServiceIdentifierSerializer.read(hex) + RawServiceIdentifierSerializer.write(service).toHex must be(hex) + } + + it must "write a node network service provider" in { + val hex = "0100000000000000" + val service = RawServiceIdentifierSerializer.read(hex) + RawServiceIdentifierSerializer.write(service).toHex must be(hex) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializerTest.scala new file mode 100644 index 0000000000..7fb593d78e --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializerTest.scala @@ -0,0 +1,132 @@ +package org.bitcoins.node.serializers.messages.control + +import java.net.InetSocketAddress + +import org.bitcoins.core.number.{Int32, Int64, UInt64} +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.BitcoinSUtil +import org.bitcoins.node.messages.control.{NodeNetwork, UnnamedService} +import org.bitcoins.node.util.BitcoinSpvNodeUtil +import org.bitcoins.node.versions.{ProtocolVersion, ProtocolVersion70002} +import org.bitcoins.node.messages.control.{NodeNetwork, UnnamedService} +import org.bitcoins.node.util.BitcoinSpvNodeUtil +import org.bitcoins.node.versions.{ + ProtocolVersion, + ProtocolVersion70002, + ProtocolVersion70012 +} +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 6/3/16. + */ +class RawVersionMessageSerializerTest extends FlatSpec with MustMatchers { + + //take from the bitcoin developer reference underneath this seciton + //https://bitcoin.org/en/developer-reference#version + + val protocolVersion = "72110100" + val services = "0100000000000000" + val timestamp = "bc8f5e5400000000" + + val receivingNodesServices = "0100000000000000" + val receivingNodeIpAddress = "00000000000000000000ffffc61b6409" + val receivingNodePort = "208d" + + val transNodeServices = "0100000000000000" + val transNodeIpAddress = "00000000000000000000ffffcb0071c0" + val transNodePort = "208d" + val nonce = "128035cbc97953f8" + + val userAgentSize = "0f" + val userAgent = "2f5361746f7368693a302e392e332f" + val startHeight = "cf050500" + val relay = "01" + + val hex = protocolVersion + services + timestamp + receivingNodesServices + receivingNodeIpAddress + + receivingNodePort + transNodeServices + transNodeIpAddress + transNodePort + nonce + + userAgentSize + userAgent + startHeight + relay + + "RawVersionMessageSerializer" must "read a raw version message from the p2p network" in { + val versionMessage = RawVersionMessageSerializer.read(hex) + versionMessage.version must be(ProtocolVersion(protocolVersion)) + versionMessage.services must be(NodeNetwork) + versionMessage.timestamp must be(Int64(1415483324)) + + versionMessage.addressReceiveServices must be(NodeNetwork) + BitcoinSpvNodeUtil + .writeAddress(versionMessage.addressReceiveIpAddress) + .toHex must be(receivingNodeIpAddress) + versionMessage.addressReceivePort must be(8333) + + versionMessage.addressTransServices must be(NodeNetwork) + BitcoinSpvNodeUtil + .writeAddress(versionMessage.addressTransIpAddress) + .toHex must be(transNodeIpAddress) + versionMessage.addressTransPort must be(8333) + + versionMessage.nonce.toBigInt must be( + BigInt(BitcoinSUtil.decodeHex(nonce).toArray)) + + versionMessage.userAgentSize must be(CompactSizeUInt(UInt64(15), 1)) + versionMessage.userAgent must be("/Satoshi:0.9.3/") + + versionMessage.startHeight must be(Int32(329167)) + versionMessage.relay must be(true) + } + + it must "write a VersionMessage to its original hex format" in { + val versionMessage = RawVersionMessageSerializer.read(hex) + RawVersionMessageSerializer.write(versionMessage).toHex must be(hex) + } + + it must "read a VersionMessage that bitcoins created" in { + //random version message bitcoins created when connecting to a testnet seed + //and sending it a version message + val hex = + "7c1101000000000000000000d805833655010000000000000000000000000000000000000000ffff0a940106479d010000000000000000000000000000000000ffff739259bb479d0000000000000000182f626974636f696e732d7370762d6e6f64652f302e302e310000000000" + val versionMessage = RawVersionMessageSerializer.read(hex) + RawVersionMessageSerializer.write(versionMessage).toHex must be(hex) + } + + it must "read a version message from a full node on the network" in { + val hex = + "721101000100000000000000e0165b5700000000010000000000000000000000000000000000ffffad1f27a8479d010000000000000000000000000000000000ffff00000000479d68dc32a9948d149b102f5361746f7368693a302e31312e322f7f440d0001" + val versionMessage = RawVersionMessageSerializer.read(hex) + versionMessage.version must be(ProtocolVersion70002) + + versionMessage.userAgent must be("/Satoshi:0.11.2/") + versionMessage.relay must be(true) + + versionMessage.hex must be(hex) + } + + it must "read and write a version message generated by our VersionMessageGenerator" in { + + // VersionMessageRequestImpl(ProtocolVersion70002,NodeNetwork,Int64Impl(-4420735367386806222,c2a6649afce74832),UnnamedService, + // 0.0.0.0/0.0.0.0,17057,UnnamedService,0.0.0.0/0.0.0.0,41963,UInt64Impl(9223372036854775809),CompactSizeUIntImpl(86,1), + // NcQHwZ87bRe9y4m6PA7lX2iVA5If1jWjUycykFOQeqB0REj92awaKy0zMRdckvEKq1j97i3Mal3Eo7QxgdjcpV,Int32Impl(-919905282,c92b5bfe),false) + val hex = + "7211010001000000000000003248e7fc9a64a6c2000000000000000000000000000000000000ffff0000000042a1000000000000000000000000000000000000ffff00000000a3eb8000000000000001564e635148775a38376252653979346d365041376c5832695641354966316a576a557963796b464f516571423052456a39326177614b79307a4d5264636b76454b71316a393769334d616c33456f37517867646a637056fe5b2bc900" + val versionMessage = RawVersionMessageSerializer.read(hex) + versionMessage.version must be(ProtocolVersion70002) + versionMessage.services must be(NodeNetwork) + versionMessage.timestamp must be(Int64(-4420735367386806222L)) + versionMessage.addressReceiveIpAddress must be( + new InetSocketAddress(17057).getAddress) + versionMessage.addressReceiveServices must be(UnnamedService) + versionMessage.addressReceivePort must be(17057) + versionMessage.addressTransServices must be(UnnamedService) + versionMessage.addressTransIpAddress must be( + new InetSocketAddress(41963).getAddress) + versionMessage.addressTransPort must be(41963) + versionMessage.nonce must be(UInt64(BigInt("9223372036854775809"))) + versionMessage.userAgentSize must be(CompactSizeUInt(UInt64(86), 1)) + versionMessage.userAgent must be( + "NcQHwZ87bRe9y4m6PA7lX2iVA5If1jWjUycykFOQeqB0REj92awaKy0zMRdckvEKq1j97i3Mal3Eo7QxgdjcpV") + versionMessage.startHeight must be(Int32(-919905282)) + versionMessage.relay must be(false) + versionMessage.hex must be(hex) + } + +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializerTest.scala new file mode 100644 index 0000000000..f9fe9e3b7d --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializerTest.scala @@ -0,0 +1,52 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.BitcoinSUtil +import org.bitcoins.node.messages.GetBlocksMessage +import org.bitcoins.node.versions.ProtocolVersion70001 +import org.bitcoins.node.messages.GetBlocksMessage +import org.bitcoins.node.versions.ProtocolVersion70001 +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 6/1/16. + */ +class RawGetBlocksMessageSerializerTest extends FlatSpec with MustMatchers { + + val hex = "7111010002d39f608a7775b537729884d4e6633bb2105e55a16a14d31b0000000000000000" + + "5c3e6403d40837110a2e8afb602b1c01714bda7ce23bea0a0000000000000000" + + "0000000000000000000000000000000000000000000000000000000000000000" + "RawGetBlocksMessageSerializer" must "read a getblocks message from a hex string" in { + val getBlocksMessage: GetBlocksMessage = + RawGetBlocksMessageSerializer.read(hex) + + getBlocksMessage.protocolVersion must be(ProtocolVersion70001) + + getBlocksMessage.hashCount must be(CompactSizeUInt(UInt64(2), 1)) + + getBlocksMessage.blockHeaderHashes.head must be + (DoubleSha256Digest( + BitcoinSUtil.decodeHex( + "d39f608a7775b537729884d4e6633bb2105e55a16a14d31b0000000000000000"))) + + getBlocksMessage.blockHeaderHashes.tail.head must be + (DoubleSha256Digest( + BitcoinSUtil.decodeHex( + "5c3e6403d40837110a2e8afb602b1c01714bda7ce23bea0a0000000000000000"))) + + getBlocksMessage.stopHash must be( + DoubleSha256Digest(BitcoinSUtil.decodeHex( + "0000000000000000000000000000000000000000000000000000000000000000"))) + + } + + it must "write a getblocks message and get the original hex back" in { + val getBlocksMessage: GetBlocksMessage = + RawGetBlocksMessageSerializer.read(hex) + + RawGetBlocksMessageSerializer.write(getBlocksMessage).toHex must be(hex) + } + +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializerTest.scala new file mode 100644 index 0000000000..379b1df0a9 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializerTest.scala @@ -0,0 +1,41 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.node.messages.TypeIdentifier.MsgTx +import org.bitcoins.node.messages.data.Inventory +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 7/8/16. + */ +class RawGetDataMessageSerializerTest extends FlatSpec with MustMatchers { + + //from bitcoin developer reference + //a getdata message is essentially an inv message + //https://bitcoin.org/en/developer-reference#inv + val hex = "02" + "01000000" + "de55ffd709ac1f5dc509a0925d0b1fc442ca034f224732e429081da1b621f55a" + + "01000000" + "91d36d997037e08018262978766f24b8a055aaf1d872e94ae85e9817b2c68dc7" + + "RawGetDataMessageSerializer" must "read in a data message" in { + val dataMsg = RawGetDataMessageSerializer.read(hex) + dataMsg.inventoryCount must be(CompactSizeUInt(UInt64(2))) + dataMsg.inventories.head must be( + Inventory( + MsgTx, + DoubleSha256Digest( + "de55ffd709ac1f5dc509a0925d0b1fc442ca034f224732e429081da1b621f55a"))) + dataMsg.inventories(1) must be( + Inventory( + MsgTx, + DoubleSha256Digest( + "91d36d997037e08018262978766f24b8a055aaf1d872e94ae85e9817b2c68dc7"))) + + } + + it must "write a GetDataMessage back to the original hex" in { + val dataMsg = RawGetDataMessageSerializer.read(hex) + RawGetDataMessageSerializer.write(dataMsg) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializerTest.scala new file mode 100644 index 0000000000..c26c72f434 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializerTest.scala @@ -0,0 +1,32 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.node.versions.ProtocolVersion70002 +import org.bitcoins.testkit.node.NodeTestUtil +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 6/29/16. + */ +class RawGetHeadersMessageSerializerTest extends FlatSpec with MustMatchers { + val hex = NodeTestUtil.rawGetHeadersMsg + + "RawGetHeadersMessageSerializer" must "read a hex string representing a GetHeaderMessage" in { + val getHeadersMessage = RawGetHeadersMessageSerializer.read(hex) + getHeadersMessage.version must be(ProtocolVersion70002) + getHeadersMessage.hashCount must be(CompactSizeUInt(UInt64(31), 1)) + getHeadersMessage.hashes.length must be(31) + + getHeadersMessage.hashStop must be( + DoubleSha256Digest( + "0000000000000000000000000000000000000000000000000000000000000000")) + } + + it must "write a GetHeaderMessage" in { + val getHeadersMessage = RawGetHeadersMessageSerializer.read(hex) + RawGetHeadersMessageSerializer.write(getHeadersMessage).toHex must be(hex) + } + +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializerTest.scala new file mode 100644 index 0000000000..36b35ba975 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializerTest.scala @@ -0,0 +1,73 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.number.{UInt32, UInt64} +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.{BitcoinSLogger, BitcoinSUtil} +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 7/5/16. + */ +class RawHeadersMessageSerializerTest + extends FlatSpec + with MustMatchers + with BitcoinSLogger { + + //from this example + //https://bitcoin.org/en/developer-reference#headers + val hex = "01" + + "02000000" + + "b6ff0b1b1680a2862a30ca44d346d9e8910d334beb48ca0c0000000000000000" + + "9d10aa52ee949386ca9385695f04ede270dda20810decd12bc9b048aaab31471" + + "24d95a54" + + "30c31b18" + + "fe9f0864" + "00" + "RawHeadersMessageSerializer" must "deserialize a list of block headers" in { + val headersMsg = RawHeadersMessageSerializer.read(hex) + val header = headersMsg.headers.head + headersMsg.count must be(CompactSizeUInt(UInt64.one, 1)) + header.previousBlockHash must be( + DoubleSha256Digest( + "b6ff0b1b1680a2862a30ca44d346d9e8910d334beb48ca0c0000000000000000")) + header.merkleRootHash must be( + DoubleSha256Digest( + "9d10aa52ee949386ca9385695f04ede270dda20810decd12bc9b048aaab31471")) + header.time must be(UInt32(1415239972)) + header.nBits must be(UInt32(BitcoinSUtil.flipEndianness("30c31b18"))) + header.nonce must be(UInt32(BitcoinSUtil.flipEndianness("fe9f0864"))) + } + + it must "read then write a HeaderMessage" in { + val headersMsg = RawHeadersMessageSerializer.read(hex) + RawHeadersMessageSerializer.write(headersMsg).toHex must be(hex) + } + + it must "read the first two block headers from testnet3" in { + val hex = + "020100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b672000100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d2353400" + val headersMsg = RawHeadersMessageSerializer.read(hex) + val first = headersMsg.headers.head + logger.debug("Headers: " + headersMsg.headers) + first.previousBlockHash.hex must be( + BitcoinSUtil.flipEndianness( + "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943")) + first.hash.hex must be( + BitcoinSUtil.flipEndianness( + "00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206")) + first.merkleRootHash.hex must be( + BitcoinSUtil.flipEndianness( + "f0315ffc38709d70ad5647e22048358dd3745f3ce3874223c80a7c92fab0c8ba")) + logger.debug("Second header: " + headersMsg.headers(1)) + val second = headersMsg.headers(1) + second.previousBlockHash.hex must be( + BitcoinSUtil.flipEndianness( + "00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206")) + second.hash.hex must be( + BitcoinSUtil.flipEndianness( + "000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820")) + second.merkleRootHash.hex must be( + BitcoinSUtil.flipEndianness( + "20222eb90f5895556926c112bb5aa0df4ab5abc3107e21a6950aec3b2e3541e2")) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializerTest.scala new file mode 100644 index 0000000000..9b9103de2c --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializerTest.scala @@ -0,0 +1,27 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.protocol.CompactSizeUInt +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 6/1/16. + */ +class RawInventoryMessageSerializerTest extends FlatSpec with MustMatchers { + + //from bitcoin developer reference + //https://bitcoin.org/en/developer-reference#inv + val hex = "0201000000de55ffd709ac1f5dc509a0925d0b1fc442ca034f224732e429081da1b621f55a" + + "0100000091d36d997037e08018262978766f24b8a055aaf1d872e94ae85e9817b2c68dc7" + + "RawInventoryMessageSerializer" must "read a InventoryMessage object from its hex serialization" in { + val inventoryMessage = RawInventoryMessageSerializer.read(hex) + inventoryMessage.inventoryCount must be(CompactSizeUInt(UInt64(2), 1)) + inventoryMessage.inventories.size must be(2) + } + + it must "read and then write an inventory message and get its original hex" in { + val inventoryMessage = RawInventoryMessageSerializer.read(hex) + RawInventoryMessageSerializer.write(inventoryMessage).toHex must be(hex) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializerTest.scala new file mode 100644 index 0000000000..3d541854c3 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializerTest.scala @@ -0,0 +1,30 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.util.BitcoinSUtil +import org.bitcoins.node.messages.TypeIdentifier.MsgTx +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 6/1/16. + */ +class RawInventorySerializerTest extends FlatSpec with MustMatchers { + + //from bitcoin developer reference example section + //https://bitcoin.org/en/developer-reference#inv + val hex = + "01000000de55ffd709ac1f5dc509a0925d0b1fc442ca034f224732e429081da1b621f55a" + "RawInventorySerializer" must "read a inventory object from its hex representation" in { + val inventory = RawInventorySerializer.read(hex) + inventory.typeIdentifier must be(MsgTx) + inventory.hash must be + (DoubleSha256Digest( + BitcoinSUtil.decodeHex( + "de55ffd709ac1f5dc509a0925d0b1fc442ca034f224732e429081da1b621f55a"))) + } + + it must "write a inventory object to its serialized format" in { + val inventory = RawInventorySerializer.read(hex) + RawInventorySerializer.write(inventory).toHex must be(hex) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializerTest.scala new file mode 100644 index 0000000000..802295aabd --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializerTest.scala @@ -0,0 +1,53 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.number.{UInt32, UInt64} +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.BitcoinSUtil +import org.scalatest.{FlatSpec, MustMatchers} +import scodec.bits.BitVector + +/** + * Created by chris on 6/2/16. + */ +class RawMerkleBlockMessageSerializerTest extends FlatSpec with MustMatchers { + + //from bitcoin developer reference + //https://bitcoin.org/en/developer-reference#merkleblock + val hex = "0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc88067010000000000" + + "7f16c5962e8bd963659c793ce370d95f093bc7e367117b3c30c1f8fdd0d97287" + + "76381b4d4c86041b554b85290700000004" + + "3612262624047ee87660be1a707519a443b1c1ce3d248cbfc6c15870f6c5daa2" + + "019f5b01d4195ecbc9398fbf3c3b1fa9bb3183301d7a1fb3bd174fcfa40a2b65" + + "41ed70551dd7e841883ab8f0b16bf04176b7d1480e4f0af9f3d4c3595768d068" + + "20d2a7bc994987302e5b1ac80fc425fe25f8b63169ea78e68fbaaefa59379bbf" + + "011d" + + "RawMerkleBlockMessage" must "read a raw hex string into a merkle block message" in { + val merkleBlockMessage = RawMerkleBlockMessageSerializer.read(hex) + + merkleBlockMessage.merkleBlock.transactionCount must be(UInt32(7)) + merkleBlockMessage.merkleBlock.hashCount must be(CompactSizeUInt(UInt64(4))) + + merkleBlockMessage.merkleBlock.hashes must be( + Seq( + DoubleSha256Digest(BitcoinSUtil.decodeHex( + "3612262624047ee87660be1a707519a443b1c1ce3d248cbfc6c15870f6c5daa2")), + DoubleSha256Digest(BitcoinSUtil.decodeHex( + "019f5b01d4195ecbc9398fbf3c3b1fa9bb3183301d7a1fb3bd174fcfa40a2b65")), + DoubleSha256Digest(BitcoinSUtil.decodeHex( + "41ed70551dd7e841883ab8f0b16bf04176b7d1480e4f0af9f3d4c3595768d068")), + DoubleSha256Digest(BitcoinSUtil.decodeHex( + "20d2a7bc994987302e5b1ac80fc425fe25f8b63169ea78e68fbaaefa59379bbf")) + )) + + merkleBlockMessage.merkleBlock.partialMerkleTree.bits must be( + BitVector.fromValidBin("10111000")) + } + + it must "write a merkle block header message" in { + val merkleBlockMessage = RawMerkleBlockMessageSerializer.read(hex) + + RawMerkleBlockMessageSerializer.write(merkleBlockMessage).toHex must be(hex) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializerTest.scala new file mode 100644 index 0000000000..2714f88c45 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializerTest.scala @@ -0,0 +1,30 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.protocol.CompactSizeUInt +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 6/2/16. + */ +class RawNotFoundMessageSerializerTest extends FlatSpec with MustMatchers { + + //according to the developer reference, the format for inventory messages and + //not found messages are the same + //from bitcoin developer reference + //https://bitcoin.org/en/developer-reference#inv + val hex = "0201000000de55ffd709ac1f5dc509a0925d0b1fc442ca034f224732e429081da1b621f55a" + + "0100000091d36d997037e08018262978766f24b8a055aaf1d872e94ae85e9817b2c68dc7" + + "RawNotFoundMessageSerializer" must "read a not found message from its hex representation" in { + val notFoundMessage = RawNotFoundMessageSerializer.read(hex) + notFoundMessage.inventoryCount must be(CompactSizeUInt(UInt64(2), 1)) + notFoundMessage.inventories.size must be(2) + } + + it must "write a not found message and get its original hex representation back" in { + val notFoundMessage = RawNotFoundMessageSerializer.read(hex) + RawNotFoundMessageSerializer.write(notFoundMessage).toHex must be(hex) + } + +} diff --git a/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializerTest.scala b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializerTest.scala new file mode 100644 index 0000000000..2919d0880f --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializerTest.scala @@ -0,0 +1,26 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.util.BitcoinSUtil +import org.bitcoins.testkit.node.NodeTestUtil +import org.scalatest.{FlatSpec, MustMatchers} + +/** + * Created by chris on 6/2/16. + */ +class RawTransactionMessageSerializerTest extends FlatSpec with MustMatchers { + + "RawTransactionMessageSerializer" must "read a TransactionMessage from a sequence of bytes" in { + val txMessage = + RawTransactionMessageSerializer.read(NodeTestUtil.rawTransaction) + txMessage.transaction.txId.hex must be( + BitcoinSUtil.flipEndianness( + "44e504f5b7649d215be05ad9f09026dee95201244a3b218013c504a6a49a26ff")) + } + + it must "write a TransactionMessage to its hex format" in { + val txMessage = + RawTransactionMessageSerializer.read(NodeTestUtil.rawTransaction) + RawTransactionMessageSerializer.write(txMessage).toHex must be( + NodeTestUtil.rawTransaction) + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/util/BitcoinSpvNodeUtilTest.scala b/node-test/src/test/scala/org/bitcoins/node/util/BitcoinSpvNodeUtilTest.scala new file mode 100644 index 0000000000..c8cb2da7b4 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/util/BitcoinSpvNodeUtilTest.scala @@ -0,0 +1,80 @@ +package org.bitcoins.node.util + +import org.bitcoins.core.config.TestNet3 +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.number.{Int32, UInt32, UInt64} +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.protocol.blockchain.BlockHeader +import org.bitcoins.core.util.{BitcoinSLogger, BitcoinSUtil} +import org.bitcoins.node.NetworkMessage +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.messages.HeadersMessage +import org.bitcoins.node.messages.data.HeadersMessage +import org.bitcoins.node.NetworkMessage +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.messages.HeadersMessage +import org.bitcoins.node.messages.control.VersionMessage +import org.bitcoins.node.messages.data.HeadersMessage +import org.bitcoins.testkit.util.BitcoinSUnitTest + +/** + * Created by chris on 9/6/16. + */ +class BitcoinSpvNodeUtilTest extends BitcoinSUnitTest { + + "BitcoinSpvNodeUtil" must "return the entire byte array if a message is not aligned to a byte frame" in { + val versionMessage = + VersionMessage(TestNet3.dnsSeeds(0), Constants.networkParameters) + val networkMsg = NetworkMessage(Constants.networkParameters, versionMessage) + //remove last byte so the message is not aligned + val bytes = networkMsg.bytes.slice(0, networkMsg.bytes.size - 1) + val (_, unAlignedBytes) = BitcoinSpvNodeUtil.parseIndividualMessages(bytes) + + unAlignedBytes must be(bytes) + } + + it must "block header message that is not aligned with a tcp frame" in { + + val headersMsg = HeadersMessage( + CompactSizeUInt(UInt64(2), 1), + Vector( + BlockHeader( + Int32(315017594), + DoubleSha256Digest( + "177e777f078d2deeaa3ad4b82e78a00ad2f4738c5217f7a36d9cf3bd11e41817"), + DoubleSha256Digest( + "1dcaebebd620823bb344bd18a18276de508910d66b4e3cbb3426a14eced66224"), + UInt32(2845833462L), + UInt32(2626024374L), + UInt32(2637850613L) + ), + BlockHeader( + Int32(1694049746), + DoubleSha256Digest( + "07b6d61809476830bc7ef862a983a7222997df3f639e0d2aa5902a5a48018430"), + DoubleSha256Digest( + "68c65f803b70b72563e86ac3e8e20ad11fbfa2eac3f9fddf4bc624d03a14f084"), + UInt32(202993555), + UInt32(4046619225L), + UInt32(1231236881) + ) + ) + ) + val networkMsg = NetworkMessage(Constants.networkParameters, headersMsg) + //split the network msg at a random index to simulate a tcp frame not being aligned + val randomIndex = scala.util.Random.nextInt().abs % networkMsg.bytes.size + val (firstHalf, secondHalf) = networkMsg.bytes.splitAt(randomIndex) + val (firstHalfParseHeaders, remainingBytes) = + BitcoinSpvNodeUtil.parseIndividualMessages(firstHalf) + firstHalfParseHeaders.isEmpty must be(true) + + val (secondHalfParsedHeaders, _) = + BitcoinSpvNodeUtil.parseIndividualMessages(remainingBytes ++ secondHalf) + val parsedNetworkMsg = secondHalfParsedHeaders.head + val parsedHeadersMsg = parsedNetworkMsg.payload.asInstanceOf[HeadersMessage] + parsedNetworkMsg.header must be(networkMsg.header) + parsedHeadersMsg.headers.head must be(headersMsg.headers.head) + parsedHeadersMsg.headers(1) must be(parsedHeadersMsg.headers(1)) + + } +} diff --git a/node-test/src/test/scala/org/bitcoins/node/versions/ProtocolVersionTest.scala b/node-test/src/test/scala/org/bitcoins/node/versions/ProtocolVersionTest.scala new file mode 100644 index 0000000000..18aaaa15b2 --- /dev/null +++ b/node-test/src/test/scala/org/bitcoins/node/versions/ProtocolVersionTest.scala @@ -0,0 +1,10 @@ +package org.bitcoins.node.versions + +import org.bitcoins.testkit.util.BitcoinSUnitTest + +class ProtocolVersionTest extends BitcoinSUnitTest { + + "ProtocolVersion" must "give us the correct protocol version back from its hex format" in { + ProtocolVersion("72110100") must be(ProtocolVersion70002) + } +} diff --git a/node/LICENSE b/node/LICENSE new file mode 100644 index 0000000000..c267b1bc5c --- /dev/null +++ b/node/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 scalacoin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/node/README.md b/node/README.md new file mode 100644 index 0000000000..aac2a775f4 --- /dev/null +++ b/node/README.md @@ -0,0 +1,16 @@ +# State of the world + +Currently this project is a heavy WIP. The most important files are + +- [`Client`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node/src/main/scala/org/bitcoins/node/networking/Client.scala) - this handles all of the networking code. Currently this uses akka but the plan is to move away from akka in the future for compatability with other JVM based platforms +- [`PeerMessageReceiver`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiver.scala) - this handles messages we receive on the p2p network. The only messages that are currently handled are `VerackMessage` and `VersionMessage`. As this project get's built out this is where we need to add code for calling other subsystems that handle transactions, blocks, peer related information etc. All messages are algebraic data types, so we can easily pattern match on them and implement features in `PeerMessageReceiver.handleControlPayload` and `PeerMessageReceiver.handleDataPayload` +- [`PeerMessageReceiverState`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala) - the states that our peer message receiver can be in. It transitions through these states during the connect/disconnect process with our peer. +- [`PeerMessageSender`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala) - this handles sending messages to our peer on the p2p network. Since we are lite client, we probably won't be sending a lot of messages to peers so this isn't that interesting. +- [`PeerHandler`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node/src/main/scala/org/bitcoins/node/networking/peer/PeerHandler.scala) - this combines a `PeerMessageReceiver` and a `PeerMessageSender` into a pair. +- [`Peer`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node/src/main/scala/org/bitcoins/node/models/Peer.scala) - The low level socket details need to connect to a peer + + +There is still a lot of code commented out on the project, but the unit tests should pass for the ones that are not. Interesting unit tests are + +- [`ClientTest`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node-test/src/test/scala/org/bitcoins/node/networking/ClientTest.scala) - currently tests that we can connect with peers +- [`PeerMessageHandlerTest`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node-test/src/test/scala/org/bitcoins/node/networking/peer/PeerMessageHandlerTest.scala) - tests that we can get our node into the [`PeerMessageReceiverState.Normal`](https://github.com/bitcoin-s/bitcoin-s-core/blob/node/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala#L150) state. This means we can send / receive arbitrary messages from our peer. diff --git a/node/doc/database_setup.md b/node/doc/database_setup.md new file mode 100644 index 0000000000..515002df79 --- /dev/null +++ b/node/doc/database_setup.md @@ -0,0 +1,50 @@ +We use [Slick](http://slick.lightbend.com/) as our library for database bindings in bitcoins-spv-node. Slick offers numerous database bindings such as Postgres, MySQL, DB2 etc. Configuration for databases is specified inside of the [application.conf](https://github.com/bitcoin-s/bitcoin-s-spv-node/blob/master/src/main/resources/application.conf#L14-L63) file inside of src/main/resources. If you want to read more about the different configuration options for Slick the documentation is [here](http://slick.lightbend.com/doc/3.1.1/database.html). + +Currently we have 4 databases that need to be created for using our application: +* bitcoins-spv-node +* bitcoins-spv-node-testnet3 +* bitcoins-spv-node-regtest +* bitcoins-spv-node-unit-test + +Note, that bitcoins-spv-node is for mainnet. Inside our codebase, we have a trait that represents a database binding called [DbConfig](https://github.com/bitcoin-s/bitcoin-s-spv-node/blob/master/src/main/scala/org/bitcoins/spvnode/constant/DbConfig.scala). This is passed around inside of our codebase to specify what database to use. It is best to just use [the configuration inside of Constants](https://github.com/bitcoin-s/bitcoin-s-spv-node/blob/master/src/main/scala/org/bitcoins/spvnode/constant/Constants.scala#L32) instead of passing around the objects inside of DbConfig. This eliminates the chance of having a situation where we have given the wrong database binding for the network we are currently on, for instance giving the TestNet3 database as an arguement when we are on mainnet. + +Here is an example of creating a table in a database. + +```scala +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.models.BlockHeaderTable +import slick.driver.PostgresDriver.api._ +import scala.concurrent.Await +import scala.concurrent.duration.DurationInt +object Main extends App { + override def main(args : Array[String]) = { + val table = TableQuery[BlockHeaderTable] + val db = Constants.database + //creates the table in the database + Await.result(db.run(table.schema.create),3.seconds) + db.close() + } +} +``` + +now if we wanted to drop that same table, we could use this snippet of code: + +```scala +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.models.BlockHeaderTable +import slick.driver.PostgresDriver.api._ +import scala.concurrent.Await +import scala.concurrent.duration.DurationInt +object Main extends App { + override def main(args : Array[String]) = { + val table = TableQuery[BlockHeaderTable] + val db = Constants.database + //drops the table in the database + Await.result(db.run(table.schema.drop),3.seconds) + db.close() + } +} +``` + +If you want to see how a table is actually represented in Slick, you can look at how we model our BlockHeaderTable, which stores all headers on the network, [here](https://github.com/bitcoin-s/bitcoin-s-spv-node/blob/master/src/main/scala/org/bitcoins/spvnode/models/BlockHeaderTable.scala). For documentation on creating schemas for tables in Slick, you can look [here](http://slick.lightbend.com/doc/3.1.1/schemas.html). + diff --git a/node/doc/header_sync.md b/node/doc/header_sync.md new file mode 100644 index 0000000000..2f7888473e --- /dev/null +++ b/node/doc/header_sync.md @@ -0,0 +1,61 @@ +### Syncing for the first time + +To start syncing our block headers, we need to indicate a header to start at. Currently our library only supports syncing from the beginning of time, aka the genesis block. We have some logic inside of our storage mechanisms to handle the case of seeding the database with the genesis header, then each new row added must reference the previous row in the database (thus forming a blockchain). + +Here is some example code to start syncing our spv node with all block headers on the network + +```scala +package org.bitcoins.node + +import akka.actor.ActorRef +import org.bitcoins.core.protocol.blockchain.TestNetChainParams +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.models.BlockHeaderTable +import org.bitcoins.node.networking.sync.BlockHeaderSyncActor +import slick.driver.PostgresDriver.api._ + +import scala.concurrent.Await +import scala.concurrent.duration.DurationInt +/** + * Created by chris on 8/29/16. + */ +object Main extends App { + override def main(args : Array[String]) = { + //creates the 'block_headers' table, if it exists alread you can remove these 4 lines + val table = TableQuery[BlockHeaderTable] + val db = Constants.database + Await.result(Constants.database.run(table.schema.create),3.seconds) + db.close() + + //create a BlockHeaderSyncActor + val blockHeaderSyncActor: ActorRef = BlockHeaderSyncActor(Constants.actorSystem, Constants.dbConfig, Constants.networkParameters) + val genesisBlockHash = TestNetChainParams.genesisBlock.blockHeader.hash + //indicates to start the header sync at the genesis hash + val startHeader = BlockHeaderSyncActor.StartHeaders(Seq(genesisBlockHash)) + //send the block header sync actor a message indicating to start the sync + blockHeaderSyncActor ! startHeader + } +} +``` + +You will start receiving block headers from a node on the peer to peer network, and those headers will be saved in persistent storage, for more information persistent storage read the [database doc](https://github.com/Christewart/bitcoin-s-spv-node/blob/database_documentation/doc/database_setup.md). + +### Syncing after being off for awhile + +Another scenario users can have is that they have powered down their node for awhile, and want to sync all blockheaders from the network to get the current state of the blockchain. You can do this with this code + +```scala +package org.bitcoins.node + +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.networking.sync.BlockHeaderSyncActor +object Main extends App { + override def main(args : Array[String]) = { + val blockHeaderSyncActor = BlockHeaderSyncActor(Constants.actorSystem, Constants.dbConfig, Constants.networkParameters) + blockHeaderSyncActor ! BlockHeaderSyncActor.StartAtLastSavedHeader + } +} +``` + +Once the sync is complete, your actor will receive a [BlockHeaderSyncActor.SuccessfulSyncReply](https://github.com/bitcoin-s/bitcoin-s-spv-node/blob/master/src/main/scala/org/bitcoins/spvnode/networking/sync/BlockHeaderSyncActor.scala#L244) message indicating the sync was successful. + diff --git a/node/project/Build.scala b/node/project/Build.scala new file mode 100644 index 0000000000..750c796d1c --- /dev/null +++ b/node/project/Build.scala @@ -0,0 +1,36 @@ +import sbt._ +import Keys._ +object BitcoinSSpvNodeBuild extends Build { + + val appName = "bitcoins-spv-node" + val appV = "0.0.1" + val scalaV = "2.11.7" + val organization = "org.bitcoins.node" + val slf4jV = "1.7.5" + val logbackV = "1.0.13" + val akkaV = "2.4.7" + val slickV = "3.1.1" +/* val appDependencies = Seq( + "org.scalatest" % "scalatest_2.11" % "2.2.0", + "com.typesafe.akka" %% "akka-actor" % akkaV withSources() withJavadoc(), + "com.typesafe.akka" %% "akka-testkit" % akkaV withSources() withJavadoc(), + "ch.qos.logback" % "logback-classic" % logbackV, + "joda-time" % "joda-time" % "2.9.4", + ("com.typesafe.akka" %% "akka-slf4j" % akkaV withSources() withJavadoc()).exclude("org.slf4j", "slf4j-api"), + "com.typesafe.slick" %% "slick" % slickV withSources() withJavadoc(), + "com.typesafe.slick" %% "slick-hikaricp" % "3.1.1", + "org.postgresql" % "postgresql" % "9.4.1210" + )*/ + + lazy val root = Project(appName, file(".")).settings( + version := appV, + scalaVersion := scalaV, + resolvers += Resolver.sonatypeRepo("releases"), + libraryDependencies ++= appDependencies, + scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature"), + mainClass := Some("org.bitcoins.node.Main"), + parallelExecution in Test := false, + //hints for testOptions config here: http://stackoverflow.com/questions/7237824/how-can-i-get-complete-stacktraces-for-exceptions-thrown-in-tests-when-using-sbt + testOptions in Test += Tests.Argument("-oF") + ) +} diff --git a/node/src/main/resources/application.conf b/node/src/main/resources/application.conf new file mode 100644 index 0000000000..ce9d8020e5 --- /dev/null +++ b/node/src/main/resources/application.conf @@ -0,0 +1,25 @@ +bitcoin-s { + network = regtest +} + +akka { + loglevel = "OFF" + + # Log the complete configuration at INFO level when the actor system is started. + # This is useful when you are uncertain of what configuration is used. + # log-config-on-start = on + + actor { + debug { + # enable function of LoggingReceive, which is to log any received message at + # DEBUG level + receive = on + + # enable DEBUG logging of unhandled messages + unhandled = on + + # enable DEBUG logging of all LoggingFSMs for events, transitions and timers + fsm = on + } + } +} diff --git a/node/src/main/resources/logback.xml b/node/src/main/resources/logback.xml new file mode 100644 index 0000000000..a84a24c11d --- /dev/null +++ b/node/src/main/resources/logback.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/node/src/main/resources/node.conf b/node/src/main/resources/node.conf new file mode 100644 index 0000000000..c8ee57d6e7 --- /dev/null +++ b/node/src/main/resources/node.conf @@ -0,0 +1,5 @@ +bitcoin-s { + database { + name = "nodedb.sqlite" + } +} diff --git a/node/src/main/scala/org/bitcoins/node/Main.scala b/node/src/main/scala/org/bitcoins/node/Main.scala new file mode 100644 index 0000000000..9c99a943d9 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/Main.scala @@ -0,0 +1,55 @@ +package org.bitcoins.node + +import java.net.{InetAddress, InetSocketAddress} + +import org.bitcoins.chain.blockchain.ChainHandler +import org.bitcoins.chain.config.ChainAppConfig +import org.bitcoins.chain.models.{BlockHeaderDAO, BlockHeaderTable} +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.config.NodeAppConfig +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.models.Peer +import org.bitcoins.node.util.NetworkIpAddress +import slick.jdbc.SQLiteProfile.api._ + +import scala.concurrent._ +import scala.concurrent.duration._ +import scala.util.{Failure, Success} + +object Main extends App with BitcoinSLogger { + implicit val system = Constants.actorSystem + import system.dispatcher + + implicit val appconfig = NodeAppConfig() + implicit val chainAppConfig = ChainAppConfig() + logger.info(s"Chain config: ${chainAppConfig.dbConfig.config}") + + val bhDAO = BlockHeaderDAO(chainAppConfig) + val chainApi = ChainHandler(bhDAO, chainAppConfig) + val table = TableQuery[BlockHeaderTable] + + logger.info(s"Creating block header table") + + val chainInitF = chainAppConfig.initialize + Await.result(chainInitF, 3.seconds) + logger.info(s"Creating block header table: done") + + val socket = new InetSocketAddress(InetAddress.getLoopbackAddress, 18333) + val nip = NetworkIpAddress.fromInetSocketAddress(socket) + val peer = Peer(nip) + + logger.info(s"Starting spv node") + val spvNodeF = SpvNode(peer, chainApi).start() + + logger.info(s"Starting SPV node sync") + spvNodeF.map { spvNode => + spvNode.sync().onComplete { + case Failure(exception) => + logger.error(s"Could not sync SPV node!") + exception.printStackTrace() + sys.exit(1) + case Success(_) => + logger.info(s"Started syncing SPV node successfully") + } + } +} diff --git a/node/src/main/scala/org/bitcoins/node/NetworkMessage.scala b/node/src/main/scala/org/bitcoins/node/NetworkMessage.scala new file mode 100644 index 0000000000..023bbd48a0 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/NetworkMessage.scala @@ -0,0 +1,55 @@ +package org.bitcoins.node + +import org.bitcoins.core.config.NetworkParameters +import org.bitcoins.core.protocol.NetworkElement +import org.bitcoins.core.util.Factory +import org.bitcoins.node.headers.NetworkHeader +import org.bitcoins.node.messages.NetworkPayload +import org.bitcoins.node.serializers.RawNetworkMessageSerializer +import org.bitcoins.node.headers.NetworkHeader +import org.bitcoins.node.messages.NetworkPayload +import org.bitcoins.node.serializers.RawNetworkMessageSerializer +import scodec.bits.ByteVector + +/** + * Created by chris on 6/10/16. + * Represents an entire p2p network message in bitcoins + */ +sealed abstract class NetworkMessage extends NetworkElement { + def header: NetworkHeader + def payload: NetworkPayload + override def bytes: ByteVector = RawNetworkMessageSerializer.write(this) +} + +object NetworkMessage extends Factory[NetworkMessage] { + private case class NetworkMessageImpl( + header: NetworkHeader, + payload: NetworkPayload) + extends NetworkMessage + + def fromBytes(bytes: ByteVector): NetworkMessage = + RawNetworkMessageSerializer.read(bytes) + + /** + * Creates a network message from it's [[NetworkHeader]] and [[NetworkPayload]] + * @param header the [[NetworkHeader]] which is being sent across the network + * @param payload the [[NetworkPayload]] which contains the information being sent across the network + * @return + */ + def apply(header: NetworkHeader, payload: NetworkPayload): NetworkMessage = { + NetworkMessageImpl(header, payload) + } + + /** + * Creates a [[NetworkMessage]] out of it's [[NetworkPayload]] + * @param network the [[NetworkParameters]] indicating the network which the message is going to be sent on + * @param payload the payload that needs to be sent across the network + * @return + */ + def apply( + network: NetworkParameters, + payload: NetworkPayload): NetworkMessage = { + val header = NetworkHeader(network, payload) + NetworkMessage(header, payload) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/SpvNode.scala b/node/src/main/scala/org/bitcoins/node/SpvNode.scala new file mode 100644 index 0000000000..e9333ed038 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/SpvNode.scala @@ -0,0 +1,84 @@ +package org.bitcoins.node + +import akka.actor.ActorSystem +import org.bitcoins.chain.api.ChainApi +import org.bitcoins.chain.config.ChainAppConfig +import org.bitcoins.core.crypto.DoubleSha256DigestBE +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.config.NodeAppConfig +import org.bitcoins.node.models.Peer +import org.bitcoins.node.networking.Client +import org.bitcoins.node.networking.peer.{ + PeerMessageReceiver, + PeerMessageSender +} +import org.bitcoins.rpc.util.AsyncUtil + +import scala.concurrent.Future + +case class SpvNode(peer: Peer, chainApi: ChainApi)( + implicit system: ActorSystem, + nodeAppConfig: NodeAppConfig, + chainAppConfig: ChainAppConfig) + extends BitcoinSLogger { + import system.dispatcher + + private val peerMsgRecv = + PeerMessageReceiver.newReceiver(nodeAppConfig, chainAppConfig) + + private val client: Client = + Client(context = system, peer = peer, peerMessageReceiver = peerMsgRecv) + + private val peerMsgSender: PeerMessageSender = { + PeerMessageSender(client, nodeAppConfig.network) + } + + /** Starts our spv node */ + def start(): Future[SpvNode] = { + peerMsgSender.connect() + + val isInitializedF = + AsyncUtil.retryUntilSatisfied(peerMsgRecv.isInitialized) + + isInitializedF.map { _ => + logger.info(s"Our peer=${peer} has been initialized") + } + + isInitializedF.failed.foreach { err => + logger.error(s"Failed to conenct with peer=$peer with err=${err}") + + } + + isInitializedF.map(_ => this) + } + + /** Stops our spv node */ + def stop(): Future[SpvNode] = { + peerMsgSender.disconnect() + + val isStoppedF = AsyncUtil.retryUntilSatisfied(peerMsgRecv.isDisconnected) + + isStoppedF.map(_ => this) + } + + /** Checks if we have a tcp connection with our peer */ + def isConnected: Boolean = peerMsgRecv.isConnected + + /** Checks if we are fully initialized with our peer and have executed the handshake + * This means we can now send arbitrary messages to our peer + * @return + */ + def isInitialized: Boolean = peerMsgRecv.isInitialized + + /** Starts to sync our spv node with our peer + * If our local best block hash is the same as our peers + * we will not sync, otherwise we will keep syncing + * until our best block hashes match up + * @return + */ + def sync(): Future[Unit] = { + chainApi.getBestBlockHash.map { hashBE: DoubleSha256DigestBE => + peerMsgSender.sendGetHeadersMessage(hashBE.flip) + } + } +} diff --git a/node/src/main/scala/org/bitcoins/node/config/NodeAppConfig.scala b/node/src/main/scala/org/bitcoins/node/config/NodeAppConfig.scala new file mode 100644 index 0000000000..2f188c2405 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/config/NodeAppConfig.scala @@ -0,0 +1,13 @@ +package org.bitcoins.node.config + +import com.typesafe.config.Config +import org.bitcoins.db.AppConfig + +case class NodeAppConfig(confs: Config*) extends AppConfig { + override val configOverrides: List[Config] = confs.toList + override protected def moduleConfigName: String = "node.conf" + override protected type ConfigType = NodeAppConfig + override protected def newConfigOfType(configs: List[Config]): NodeAppConfig = + NodeAppConfig(configs: _*) + +} diff --git a/node/src/main/scala/org/bitcoins/node/constant/Constants.scala b/node/src/main/scala/org/bitcoins/node/constant/Constants.scala new file mode 100644 index 0000000000..11b591663f --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/constant/Constants.scala @@ -0,0 +1,43 @@ +package org.bitcoins.node.constant + +import akka.actor.ActorSystem +import org.bitcoins.core.config.{MainNet, NetworkParameters, RegTest, TestNet3} +import org.bitcoins.core.protocol.blockchain.{ + ChainParams, + MainNetChainParams, + RegTestNetChainParams, + TestNetChainParams +} +import org.bitcoins.node.config.NodeAppConfig +import org.bitcoins.node.versions.ProtocolVersion70013 +import slick.jdbc.PostgresProfile.api._ + +import scala.concurrent.duration.DurationInt + +case object Constants { + lazy val actorSystem = ActorSystem("BitcoinSpvNode") + def networkParameters: NetworkParameters = appConfig.network + def version = ProtocolVersion70013 + + def timeout = 5.seconds + def userAgent = "/bitcoins-spv-node/0.0.1" + + /** This is the file where our block headers are stored */ + def blockHeaderFile = new java.io.File("src/main/resources/block_headers.dat") + + lazy val appConfig: NodeAppConfig = NodeAppConfig() + + /** The [[ChainParams]] for the blockchain we are currently connected to */ + def chainParams: ChainParams = networkParameters match { + case MainNet => MainNetChainParams + case TestNet3 => TestNetChainParams + case RegTest => RegTestNetChainParams + } + + /** This is the database we are currently bound to, this + * should be the database that stores information corresponding to the network + * we are currently connected to inside of the [[networkParameters]] function + * @return + */ + def database: Database = appConfig.database +} diff --git a/node/src/main/scala/org/bitcoins/node/db/NodeDbManagement.scala b/node/src/main/scala/org/bitcoins/node/db/NodeDbManagement.scala new file mode 100644 index 0000000000..fde0bdc9af --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/db/NodeDbManagement.scala @@ -0,0 +1,8 @@ +package org.bitcoins.node.db + +import org.bitcoins.db.DbManagement + +object NodeDbManagement extends DbManagement { + + override val allTables = List.empty +} diff --git a/node/src/main/scala/org/bitcoins/node/headers/NetworkHeader.scala b/node/src/main/scala/org/bitcoins/node/headers/NetworkHeader.scala new file mode 100644 index 0000000000..f90f4d18b9 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/headers/NetworkHeader.scala @@ -0,0 +1,102 @@ +package org.bitcoins.node.headers + +import org.bitcoins.core.config.NetworkParameters +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.protocol.NetworkElement +import org.bitcoins.core.util.{CryptoUtil, Factory} +import org.bitcoins.node.messages.NetworkPayload +import org.bitcoins.node.serializers.headers.RawNetworkHeaderSerializer +import org.bitcoins.node.messages.NetworkPayload +import org.bitcoins.node.serializers.headers.RawNetworkHeaderSerializer +import scodec.bits.ByteVector + +/** + * Created by chris on 5/31/16. + * Represents a message header on the peer-to-peer network + * https://bitcoin.org/en/developer-reference#message-headers + */ +sealed trait NetworkHeader extends NetworkElement { + + override def bytes: ByteVector = RawNetworkHeaderSerializer.write(this) + + /** + * Magic bytes indicating the originating network; + * used to seek to next message when stream state is unknown. + * @return + */ + def network: ByteVector + + /** + * ASCII string which identifies what message type is contained in the payload. + * Followed by nulls (0x00) to pad out byte count; for example: version\0\0\0\0\0. + * + * @return + */ + def commandName: String + + /** + * Number of bytes in payload. The current maximum number of bytes (MAX_SIZE) allowed in the payload + * by Bitcoin Core is 32 MiB—messages with a payload size larger than this will be dropped or rejected. + * + * @return + */ + def payloadSize: UInt32 + + /** + * Added in protocol version 209. + * First 4 bytes of SHA256(SHA256(payload)) in internal byte order. + * If payload is empty, as in verack and getaddr messages, + * the checksum is always 0x5df6e0e2 (SHA256(SHA256(""))). + * + * @return + */ + def checksum: ByteVector + +} + +object NetworkHeader extends Factory[NetworkHeader] { + + private case class NetworkHeaderImpl( + network: ByteVector, + commandName: String, + payloadSize: UInt32, + checksum: ByteVector) + extends NetworkHeader { + require(bytes.length == 24, "NetworkHeaders must be 24 bytes") + } + + override def fromBytes(bytes: ByteVector): NetworkHeader = + RawNetworkHeaderSerializer.read(bytes) + + /** + * Creates a [[NetworkHeader]] from all of its individual components + * @param network the [[NetworkParameters]] object indicating what network this header is sent on + * @param commandName the name of the command being sent in the header + * @param payloadSize the size of the payload being sent by this header + * @param checksum the checksum of the payload to ensure that the entire payload was sent + * @return + */ + def apply( + network: ByteVector, + commandName: String, + payloadSize: UInt32, + checksum: ByteVector): NetworkHeader = { + NetworkHeaderImpl(network, commandName, payloadSize, checksum) + } + + /** + * Creates a [[NetworkHeader]] from it's [[NetworkParameters]] and [[NetworkPayload]] + * @param network the [[NetworkParameters]] object that indicates what network the payload needs to be sent on + * @param payload the [[NetworkPayload]] object that needs to be sent on the network + * @return + */ + def apply( + network: NetworkParameters, + payload: NetworkPayload): NetworkHeader = { + val checksum = CryptoUtil.doubleSHA256(payload.bytes) + NetworkHeader(network.magicBytes, + payload.commandName, + UInt32(payload.bytes.size), + checksum.bytes.take(4)) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/NetworkPayload.scala b/node/src/main/scala/org/bitcoins/node/messages/NetworkPayload.scala new file mode 100644 index 0000000000..f804e962af --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/NetworkPayload.scala @@ -0,0 +1,714 @@ +package org.bitcoins.node.messages + +import java.net.InetAddress + +import org.bitcoins.core.bloom.BloomFilter +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.number.{Int32, Int64, UInt64} +import org.bitcoins.core.protocol.blockchain.{Block, BlockHeader, MerkleBlock} +import org.bitcoins.core.protocol.transaction.Transaction +import org.bitcoins.core.protocol.{CompactSizeUInt, NetworkElement} +import org.bitcoins.core.util.BitcoinSUtil +import org.bitcoins.core.wallet.fee.{SatoshisPerByte, SatoshisPerKiloByte} +import org.bitcoins.node.headers.NetworkHeader +import org.bitcoins.node.messages.control.ServiceIdentifier +import org.bitcoins.node.messages.data.Inventory +import org.bitcoins.node.serializers.messages.control._ +import org.bitcoins.node.serializers.messages.data._ +import org.bitcoins.node.util.NetworkIpAddress +import org.bitcoins.node.versions.ProtocolVersion +import scodec.bits.ByteVector + +/** + * Created by chris on 5/31/16. + * Trait that represents a payload for a message on the Bitcoin p2p network + * [[https://bitcoin.org/en/developer-reference#p2p-network]] + */ +sealed trait NetworkPayload extends NetworkElement { + + /** + * ASCII string which identifies what message type is contained in the payload. + * Followed by nulls (0x00) to pad out byte count; for example: version\0\0\0\0\0. + * Command names need to be 12 bytes long + * This is generally used to build a [[org.bitcoins.node.headers.NetworkHeader]] + * @return + */ + def commandName: String +} + +/** + * Represents a data message inside of bitcoin core + * [[https://bitcoin.org/en/developer-reference#data-messages]] + */ +sealed trait DataPayload extends NetworkPayload + +/** + * The block message transmits a single serialized block + * [[https://bitcoin.org/en/developer-reference#block]] + */ +trait BlockMessage extends DataPayload { + + /** + * The block being transmitted inside of this [[BlockMessage]] + * @return + */ + def block: Block + + override def commandName = NetworkPayload.blockCommandName + + override def bytes: ByteVector = RawBlockMessageSerializer.write(this) +} + +/** + * The getblocks message requests an inv message that provides block header hashes + * starting from a particular point in the block chain. + * It allows a peer which has been disconnected or started for the first time to get the data + * it needs to request the blocks it hasn’t seen. + * [[https://bitcoin.org/en/developer-reference#getblocks]] + */ +trait GetBlocksMessage extends DataPayload { + + /** + * The protocol version number; the same as sent in the version message. + * @return + */ + def protocolVersion: ProtocolVersion + + /** + * The number of header hashes provided not including the stop hash. + * There is no limit except that the byte size of the entire message + * must be below the MAX_SIZE limit; typically from 1 to 200 hashes are sent. + * @return + */ + def hashCount: CompactSizeUInt + + /** + * One or more block header hashes (32 bytes each) in internal byte order. + * Hashes should be provided in reverse order of block height, + * so highest-height hashes are listed first and lowest-height hashes are listed last. + * @return + */ + def blockHeaderHashes: Seq[DoubleSha256Digest] + + /** + * The header hash of the last header hash being requested; + * set to all zeroes to request an inv message with all subsequent + * header hashes (a maximum of 500 will be sent as a reply to this message; + * if you need more than 500, you will need to send another getblocks message + * with a higher-height header hash as the first entry in block header hash field). + * @return + */ + def stopHash: DoubleSha256Digest + + override def commandName = NetworkPayload.getBlocksCommandName + + override def bytes: ByteVector = RawGetBlocksMessageSerializer.write(this) +} + +/** + * The getdata message requests one or more data objects from another node. + * The objects are requested by an inventory, + * which the requesting node typically previously received by way of an inv message. + * [[https://bitcoin.org/en/developer-reference#getdata]] + */ +trait GetDataMessage extends DataPayload { + + /** + * The number of inventory enteries + * @return + */ + def inventoryCount: CompactSizeUInt + + /** + * One or more inventory entries up to a maximum of 50,000 entries. + * @return + */ + def inventories: Seq[Inventory] + + override def commandName = NetworkPayload.getDataCommandName + + override def bytes: ByteVector = RawGetDataMessageSerializer.write(this) +} + +/** + * The getheaders message requests a headers message that provides block headers starting + * from a particular point in the block chain. + * It allows a peer which has been disconnected or started for the first time to get the + * headers it hasn’t seen yet. + * @see [[https://bitcoin.org/en/developer-reference#getheaders]] + */ +trait GetHeadersMessage extends DataPayload { + def version: ProtocolVersion + def hashCount: CompactSizeUInt + def hashes: Seq[DoubleSha256Digest] + def hashStop: DoubleSha256Digest + + override def commandName = NetworkPayload.getHeadersCommandName + override def bytes: ByteVector = RawGetHeadersMessageSerializer.write(this) +} + +/** + * The headers message sends one or more block headers to a node + * which previously requested certain headers with a getheaders message. + * [[https://bitcoin.org/en/developer-reference#headers]] + */ +trait HeadersMessage extends DataPayload { + + /** + * Number of block headers up to a maximum of 2,000. + * Note: headers-first sync assumes the sending node + * will send the maximum number of headers whenever possible. + * @return + */ + def count: CompactSizeUInt + + /** + * Block headers: each 80-byte block header is in the format described in the + * block headers section with an additional 0x00 suffixed. + * This 0x00 is called the transaction count, but because the headers message + * doesn’t include any transactions, the transaction count is always zero. + * @return + */ + def headers: Vector[BlockHeader] + + override def commandName = NetworkPayload.headersCommandName + + override def bytes: ByteVector = RawHeadersMessageSerializer.write(this) +} + +/** + * The inv message (inventory message) transmits one or more inventories of objects known to the transmitting peer. + * It can be sent unsolicited to announce new transactions or blocks, + * or it can be sent in reply to a getblocks message or mempool message. + * [[https://bitcoin.org/en/developer-reference#inv]] + */ +trait InventoryMessage extends DataPayload { + + /** + * The number of inventory enteries + * @return + */ + def inventoryCount: CompactSizeUInt + + /** + * One or more inventory entries up to a maximum of 50,000 entries. + * @return + */ + def inventories: Seq[Inventory] + + override def commandName = NetworkPayload.invCommandName + + override def bytes: ByteVector = RawInventoryMessageSerializer.write(this) +} + +/** + * The mempool message requests the TXIDs of transactions that the receiving node has verified + * as valid but which have not yet appeared in a block. + * That is, transactions which are in the receiving node’s memory pool. + * The response to the mempool message is one or more inv messages containing the TXIDs in the usual inventory format. + * [[https://bitcoin.org/en/developer-reference#mempool]] + */ +case object MemPoolMessage extends DataPayload { + override val commandName = NetworkPayload.memPoolCommandName + override val bytes: ByteVector = ByteVector.empty +} + +/** + * The merkleblock message is a reply to a getdata message which requested a + * block using the inventory type MSG_MERKLEBLOCK. + * It is only part of the reply: if any matching transactions are found, + * they will be sent separately as tx messages. + * [[https://bitcoin.org/en/developer-reference#merkleblock]] + */ +trait MerkleBlockMessage extends DataPayload { + + /** The actual [[MerkleBlock]] that this message represents */ + def merkleBlock: MerkleBlock + + override def commandName = NetworkPayload.merkleBlockCommandName + + def bytes: ByteVector = RawMerkleBlockMessageSerializer.write(this) + +} + +/** + * The notfound message is a reply to a getdata message which requested an object the receiving + * node does not have available for relay. (Nodes are not expected to relay historic transactions + * which are no longer in the memory pool or relay set. + * Nodes may also have pruned spent transactions from older blocks, making them unable to send those blocks.) + * [[https://bitcoin.org/en/developer-reference#notfound]] + */ +trait NotFoundMessage extends DataPayload with InventoryMessage { + override def commandName = NetworkPayload.notFoundCommandName + override def bytes: ByteVector = RawNotFoundMessageSerializer.write(this) +} + +/** + * The tx message transmits a single transaction in the raw transaction format. + * It can be sent in a variety of situations; + * [[https://bitcoin.org/en/developer-reference#tx]] + */ +trait TransactionMessage extends DataPayload { + + /** + * The transaction being sent over the wire + * @return + */ + def transaction: Transaction + override def commandName = NetworkPayload.transactionCommandName + override def bytes: ByteVector = RawTransactionMessageSerializer.write(this) +} + +/** + * Represents a control message on this network + * [[https://bitcoin.org/en/developer-reference#control-messages]] + */ +sealed trait ControlPayload extends NetworkPayload + +/** + * The addr (IP address) message relays connection information for peers on the network. + * Each peer which wants to accept incoming connections creates an addr message providing its + * connection information and then sends that message to its peers unsolicited. + * Some of its peers send that information to their peers (also unsolicited), + * some of which further distribute it, allowing decentralized peer discovery for + * any program already on the network. + * [[https://bitcoin.org/en/developer-reference#addr]] + */ +trait AddrMessage extends ControlPayload { + def ipCount: CompactSizeUInt + def addresses: Seq[NetworkIpAddress] + override def commandName = NetworkPayload.addrCommandName + override def bytes: ByteVector = RawAddrMessageSerializer.write(this) +} + +/** + * The feefilter message is a request to the receiving peer to not relay any transaction inv messages + * to the sending peer where the fee rate for the transaction is below the fee rate specified in the + * feefilter message. + * + * feefilter was introduced in Bitcoin Core 0.13.0 following the introduction of mempool limiting in + * Bitcoin Core 0.12.0. Mempool limiting provides protection against attacks and spam transactions + * that have low fee rates and are unlikely to be included in mined blocks. The feefilter messages + * allows a node to inform its peers that it will not accept transactions below a specified fee rate + * into its mempool, and therefore that the peers can skip relaying inv messages for transactions below + * that fee rate to that node. + */ +trait FeeFilterMessage extends ControlPayload { + + /** The raw fee rate, in satoshis per kb. This is what is defined in the p2p message */ + def feeRate: SatoshisPerKiloByte + + def satPerByte: SatoshisPerByte = { + feeRate.toSatPerByte + } + + override def commandName: String = NetworkPayload.feeFilterCommandName + + override def bytes: ByteVector = { + RawFeeFilterMessageSerializer.write(this) + } +} + +/** + * The filteradd message tells the receiving peer to add a single element to a + * previously-set bloom filter, such as a new public key. + * The element is sent directly to the receiving peer; the peer then uses the parameters + * set in the filterload message to add the element to the bloom filter. + * [[https://bitcoin.org/en/developer-reference#filteradd]] + */ +trait FilterAddMessage extends ControlPayload { + + /** + * The number of bytes in the following element field. + * @return + */ + def elementSize: CompactSizeUInt + + /** + * The element to add to the current filter. + * Maximum of 520 bytes, which is the maximum size of an element which can be pushed + * onto the stack in a pubkey or signature script. + * Elements must be sent in the byte order they would use when appearing in a raw transaction; + * for example, hashes should be sent in internal byte order. + * @return + */ + def element: ByteVector + + override def commandName = NetworkPayload.filterAddCommandName + + override def bytes: ByteVector = RawFilterAddMessageSerializer.write(this) +} + +/** + * The filterclear message tells the receiving peer to remove a previously-set bloom filter. + * This also undoes the effect of setting the relay field in the version message to 0, + * allowing unfiltered access to inv messages announcing new transactions. + * [[https://bitcoin.org/en/developer-reference#filterclear]] + */ +case object FilterClearMessage extends ControlPayload { + override val commandName = NetworkPayload.filterClearCommandName + override val bytes: ByteVector = ByteVector.empty +} + +/** + * The filterload message tells the receiving peer to filter all relayed transactions and + * requested merkle blocks through the provided filter. + * This allows clients to receive transactions relevant to their wallet plus a configurable + * rate of false positive transactions which can provide plausible-deniability privacy. + * [[https://bitcoin.org/en/developer-reference#filterload]] + */ +trait FilterLoadMessage extends ControlPayload { + + /** The underlying bloom filter inside of the FilterLoadMessage */ + def bloomFilter: BloomFilter + + override def commandName = NetworkPayload.filterLoadCommandName + + override def bytes: ByteVector = RawFilterLoadMessageSerializer.write(this) +} + +/** + * The getaddr message requests an addr message from the receiving node, + * preferably one with lots of IP addresses of other receiving nodes. + * The transmitting node can use those IP addresses to quickly update its + * database of available nodes rather than waiting for unsolicited addr messages to arrive over time. + * [[https://bitcoin.org/en/developer-reference#getaddr]] + */ +case object GetAddrMessage extends ControlPayload { + override val commandName = NetworkPayload.getAddrCommandName + override val bytes: ByteVector = ByteVector.empty +} + +/** + * The ping message helps confirm that the receiving peer is still connected. + * If a TCP/IP error is encountered when sending the ping message (such as a connection timeout), + * the transmitting node can assume that the receiving node is disconnected. + * The response to a ping message is the pong message. + * [[https://bitcoin.org/en/developer-reference#ping]] + */ +trait PingMessage extends ControlPayload { + + /** + * Random nonce assigned to this ping message. + * The responding pong message will include this nonce + * to identify the ping message to which it is replying. + * @return + */ + def nonce: UInt64 + + override def commandName = NetworkPayload.pingCommandName + + override def bytes: ByteVector = RawPingMessageSerializer.write(this) +} + +/** + * The pong message replies to a ping message, proving to the pinging node that the ponging node is still alive. + * Bitcoin Core will, by default, disconnect from any clients which have not responded + * to a ping message within 20 minutes. + * [[https://bitcoin.org/en/developer-reference#pong]] + */ +trait PongMessage extends ControlPayload { + + /** + * The nonce which is the nonce in the ping message the peer is responding too + * @return + */ + def nonce: UInt64 + + override def commandName = NetworkPayload.pongCommandName + + override def bytes: ByteVector = RawPongMessageSerializer.write(this) + +} + +/** + * The reject message informs the receiving node that one of its previous messages has been rejected. + * [[https://bitcoin.org/en/developer-reference#reject]] + */ +trait RejectMessage extends ControlPayload { + + /** + * The number of bytes in the following message field. + * @return + */ + def messageSize: CompactSizeUInt + + /** + * The type of message rejected as ASCII text without null padding. + * For example: “tx”, “block”, or “version”. + * @return + */ + def message: String + + /** + * The reject message code. + * @return + */ + def code: Char + + /** + * The number of bytes in the following reason field. + * May be 0x00 if a text reason isn’t provided. + * @return + */ + def reasonSize: CompactSizeUInt + + /** + * The reason for the rejection in ASCII text. + * This should not be displayed to the user; it is only for debugging purposes. + * @return + */ + def reason: String + + /** + * Optional additional data provided with the rejection. + * For example, most rejections of tx messages or block messages include + * the hash of the rejected transaction or block header. See the code table below. + * @return + */ + def extra: ByteVector + + override def commandName = NetworkPayload.rejectCommandName + + override def bytes: ByteVector = RawRejectMessageSerializer.write(this) +} + +/** + * The sendheaders message tells the receiving peer to send new block announcements + * using a headers message rather than an inv message. + * There is no payload in a sendheaders message. See the message header section for an example + * of a message without a payload. + * [[https://bitcoin.org/en/developer-reference#sendheaders]] + */ +case object SendHeadersMessage extends ControlPayload { + override def commandName = NetworkPayload.sendHeadersCommandName + override def bytes: ByteVector = ByteVector.empty +} + +/** + * The verack message acknowledges a previously-received version message, + * informing the connecting node that it can begin to send other messages. + * The verack message has no payload; for an example of a message with no payload, + * see the message headers section. + * [[https://bitcoin.org/en/developer-reference#verack]] + */ +case object VerAckMessage extends ControlPayload { + override val commandName = NetworkPayload.verAckCommandName + override val bytes: ByteVector = ByteVector.empty +} + +/** + * The version message provides information about the transmitting node to the + * receiving node at the beginning of a connection. + * Until both peers have exchanged version messages, no other messages will be accepted. + * If a version message is accepted, the receiving node should send a verack message—but + * no node should send a verack message before initializing its half of the connection + * by first sending a version message. + * [[https://bitcoin.org/en/developer-reference#version]] + */ +trait VersionMessage extends ControlPayload { + + /** + * The highest protocol version understood by the transmitting node. See the protocol version section. + * @return + */ + def version: ProtocolVersion + + /** + * The services supported by the transmitting node encoded as a bitfield. See the list of service codes below. + * @return + */ + def services: ServiceIdentifier + + /** + * The current Unix epoch time according to the transmitting node’s clock. + * Because nodes will reject blocks with timestamps more than two hours in the future, + * this field can help other nodes to determine that their clock is wrong. + * @return + */ + def timestamp: Int64 + + /** + * The services supported by the receiving node as perceived by the transmitting node. + * Same format as the ‘services’ field above. + * Bitcoin Core will attempt to provide accurate information. BitcoinJ will, by default, always send 0. + * @return + */ + def addressReceiveServices: ServiceIdentifier + + /** + * The IPv6 address of the receiving node as perceived by the transmitting node in big endian byte order. + * IPv4 addresses can be provided as IPv4-mapped IPv6 addresses. + * Bitcoin Core will attempt to provide accurate information + * BitcoinJ will, by default, always return ::ffff:127.0.0.1 + * This is the network address of the node receiving this message + */ + def addressReceiveIpAddress: InetAddress + + /** + * The port number of the receiving node as perceived by the transmitting node in big endian byte order. + * @return + */ + def addressReceivePort: Int + + /** + * The services supported by the transmitting node. Should be identical to the ‘services’ field above. + * @return + */ + def addressTransServices: ServiceIdentifier + + /** + * The IPv6 address of the transmitting node in big endian byte order. + * IPv4 addresses can be provided as IPv4-mapped IPv6 addresses. + * Set to ::ffff:127.0.0.1 if unknown. + * This is the network address of the node emitting this message + * @return + */ + def addressTransIpAddress: InetAddress + + /** + * The port number of the transmitting node in big endian byte order. + * @return + */ + def addressTransPort: Int + + /** + * A random nonce which can help a node detect a connection to itself. + * If the nonce is 0, the nonce field is ignored. + * If the nonce is anything else, a node should terminate the connection on receipt + * of a version message with a nonce it previously sent. + * @return + */ + def nonce: UInt64 + + /** + * Number of bytes in following user_agent field. If 0x00, no user agent field is sent. + * @return + */ + def userAgentSize: CompactSizeUInt + + /** + * User agent as defined by BIP14. Previously called subVer. + * @return + */ + def userAgent: String + + /** + * The height of the transmitting node’s best block chain or, + * in the case of an SPV client, best block header chain. + * @return + */ + def startHeight: Int32 + + /** + * Transaction relay flag. If 0x00, no inv messages or tx messages announcing new transactions + * should be sent to this client until it sends a filterload message or filterclear message. + * If 0x01, this node wants inv messages and tx messages announcing new transactions. + * @return + */ + def relay: Boolean + + override def commandName = NetworkPayload.versionCommandName + + override def bytes: ByteVector = RawVersionMessageSerializer.write(this) +} + +object NetworkPayload { + val alertCommandName = "alert" + val blockCommandName = "block" + val getBlocksCommandName = "getblocks" + val getHeadersCommandName = "getheaders" + val headersCommandName = "headers" + val invCommandName = "inv" + val getDataCommandName = "getdata" + val memPoolCommandName = "mempool" + val merkleBlockCommandName = "merkleblock" + val notFoundCommandName = "notfound" + val transactionCommandName = "tx" + val addrCommandName = "addr" + val feeFilterCommandName = "feefilter" + val filterAddCommandName = "filteradd" + val filterClearCommandName = "filterclear" + val filterLoadCommandName = "filterload" + val getAddrCommandName = "getaddr" + val pingCommandName = "ping" + val pongCommandName = "pong" + val rejectCommandName = "reject" + val sendHeadersCommandName = "sendheaders" + val verAckCommandName = "verack" + val versionCommandName = "version" + + /** + * Contains all the valid command names with their deserializer on the p2p protocol + * These commands all have the null bytes appended to the end of the string as + * required in [[NetworkHeader]] + * [[https://bitcoin.org/en/developer-reference#message-headers]] + * + * @return + */ + val commandNames: Map[String, ByteVector => NetworkPayload] = Map( + blockCommandName -> { RawBlockMessageSerializer.read(_) }, + getBlocksCommandName -> { RawGetBlocksMessageSerializer.read(_) }, + getHeadersCommandName -> { RawGetHeadersMessageSerializer.read(_) }, + getDataCommandName -> { RawGetDataMessageSerializer.read(_) }, + headersCommandName -> { RawHeadersMessageSerializer.read(_) }, + invCommandName -> { RawInventoryMessageSerializer.read(_) }, + memPoolCommandName -> { _: ByteVector => + MemPoolMessage + }, + merkleBlockCommandName -> { RawMerkleBlockMessageSerializer.read(_) }, + notFoundCommandName -> { RawNotFoundMessageSerializer.read(_) }, + transactionCommandName -> { RawTransactionMessageSerializer.read(_) }, + addrCommandName -> { RawAddrMessageSerializer.read(_) }, + feeFilterCommandName -> { RawFeeFilterMessageSerializer.read(_) }, + filterAddCommandName -> { RawFilterAddMessageSerializer.read(_) }, + filterClearCommandName -> { _: ByteVector => + FilterClearMessage + }, + filterLoadCommandName -> { RawFilterLoadMessageSerializer.read(_) }, + getAddrCommandName -> { _: ByteVector => + GetAddrMessage + }, + pingCommandName -> { RawPingMessageSerializer.read(_) }, + pongCommandName -> { RawPongMessageSerializer.read(_) }, + rejectCommandName -> { _: ByteVector => + ??? + }, + sendHeadersCommandName -> { _: ByteVector => + SendHeadersMessage + }, + verAckCommandName -> { _: ByteVector => + VerAckMessage + }, + versionCommandName -> { RawVersionMessageSerializer.read(_) } + ) + + /** + * Parses a [[NetworkPayload]] from the given bytes using the [[NetworkHeader]] + * to determine what type of [[NetworkPayload]] this is + * @param networkHeader the header for the message on the p2p network + * @param payloadBytes the payload corresponding to the header on the p2p network + * @return + */ + def apply( + networkHeader: NetworkHeader, + payloadBytes: ByteVector): NetworkPayload = { + //the commandName in the network header tells us what payload type this is + val deserializer: ByteVector => NetworkPayload = commandNames( + networkHeader.commandName) + deserializer(payloadBytes) + } + + /** + * Parses a [[NetworkPayload]] from the given hex using the [[NetworkHeader]] + * to determine what type of [[NetworkPayload]] this is + * @param networkHeader the header for the message on the p2p network + * @param payloadHex the hexadecimal representation of the payload + * @return + */ + def apply( + networkHeader: NetworkHeader, + payloadHex: String): NetworkPayload = { + NetworkPayload(networkHeader, BitcoinSUtil.decodeHex(payloadHex)) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/TypeIdentifier.scala b/node/src/main/scala/org/bitcoins/node/messages/TypeIdentifier.scala new file mode 100644 index 0000000000..c985296348 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/TypeIdentifier.scala @@ -0,0 +1,49 @@ +package org.bitcoins.node.messages + +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.protocol.NetworkElement +import org.bitcoins.core.util.Factory +import org.bitcoins.node.serializers.messages.RawTypeIdentifierSerializer +import org.bitcoins.node.serializers.messages.RawTypeIdentifierSerializer +import scodec.bits.ByteVector + +/** + * Created by chris on 5/31/16. + * This indicates the type of the object that has been hashed for an inventory + * https://bitcoin.org/en/developer-reference#data-messages + */ +sealed trait TypeIdentifier extends NetworkElement { + def num: UInt32 + override def bytes: ByteVector = RawTypeIdentifierSerializer.write(this) +} + +sealed trait MsgUnassigned extends TypeIdentifier + +object TypeIdentifier extends Factory[TypeIdentifier] { + + final case object MsgTx extends TypeIdentifier { + override val num = UInt32.one + } + + final case object MsgBlock extends TypeIdentifier { + override val num = UInt32(2) + } + + final case object MsgFilteredBlock extends TypeIdentifier { + override val num = UInt32(3) + } + + private case class MsgUnassignedImpl(num: UInt32) extends MsgUnassigned + + override def fromBytes(bytes: ByteVector): TypeIdentifier = + RawTypeIdentifierSerializer.read(bytes) + + def apply(num: Long): TypeIdentifier = TypeIdentifier(UInt32(num)) + + def apply(uInt32: UInt32): TypeIdentifier = uInt32 match { + case UInt32.one => MsgTx + case _ if (uInt32 == UInt32(2)) => MsgBlock + case _ if (uInt32 == UInt32(3)) => MsgFilteredBlock + case x: UInt32 => MsgUnassignedImpl(x) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/AddrMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/AddrMessage.scala new file mode 100644 index 0000000000..8bd6c3b06e --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/control/AddrMessage.scala @@ -0,0 +1,33 @@ +package org.bitcoins.node.messages.control + +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.AddrMessage +import org.bitcoins.node.serializers.messages.control.RawAddrMessageSerializer +import org.bitcoins.node.util.NetworkIpAddress +import org.bitcoins.node.messages.AddrMessage +import org.bitcoins.node.serializers.messages.control.RawAddrMessageSerializer +import org.bitcoins.node.util.NetworkIpAddress +import scodec.bits.ByteVector + +/** + * Created by chris on 6/3/16. + * The companion object for an AddrMessage + * https://bitcoin.org/en/developer-reference#addr + */ +object AddrMessage extends Factory[AddrMessage] { + + private case class AddrMessageImpl( + ipCount: CompactSizeUInt, + addresses: Seq[NetworkIpAddress]) + extends AddrMessage + + def fromBytes(bytes: ByteVector): AddrMessage = + RawAddrMessageSerializer.read(bytes) + + def apply( + ipCount: CompactSizeUInt, + addresses: Seq[NetworkIpAddress]): AddrMessage = + AddrMessageImpl(ipCount, addresses) + +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/FeeFilterMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/FeeFilterMessage.scala new file mode 100644 index 0000000000..d822a63348 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/control/FeeFilterMessage.scala @@ -0,0 +1,28 @@ +package org.bitcoins.node.messages.control + +import org.bitcoins.core.util.Factory +import org.bitcoins.core.wallet.fee.{SatoshisPerByte, SatoshisPerKiloByte} +import org.bitcoins.node.messages.FeeFilterMessage +import org.bitcoins.node.serializers.messages.control.RawFeeFilterMessageSerializer +import scodec.bits.ByteVector + +object FeeFilterMessage extends Factory[FeeFilterMessage] { + + + private case class FeeFilterMessageImpl(feeRate: SatoshisPerKiloByte) extends FeeFilterMessage + + + override def fromBytes(bytes: ByteVector): FeeFilterMessage = { + RawFeeFilterMessageSerializer.read(bytes) + } + + + def apply(satoshisPerKiloByte: SatoshisPerKiloByte): FeeFilterMessage = { + FeeFilterMessageImpl(satoshisPerKiloByte) + } + + + def apply(satPerByte: SatoshisPerByte): FeeFilterMessage = { + FeeFilterMessage(satPerByte.toSatPerKb) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/FilterAddMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/FilterAddMessage.scala new file mode 100644 index 0000000000..f3090146d8 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/control/FilterAddMessage.scala @@ -0,0 +1,29 @@ +package org.bitcoins.node.messages.control + +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.FilterAddMessage +import org.bitcoins.node.serializers.messages.control.RawFilterAddMessageSerializer +import org.bitcoins.node.messages.FilterAddMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 8/26/16. + * Factory object for a [[FilterAddMessage]] + * [[https://bitcoin.org/en/developer-reference#filteradd]] + */ +object FilterAddMessage extends Factory[FilterAddMessage] { + + private case class FilterAddMessageImpl( + elementSize: CompactSizeUInt, + element: ByteVector) + extends FilterAddMessage + override def fromBytes(bytes: ByteVector): FilterAddMessage = + RawFilterAddMessageSerializer.read(bytes) + + def apply( + elementSize: CompactSizeUInt, + element: ByteVector): FilterAddMessage = { + FilterAddMessageImpl(elementSize, element) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/FilterLoadMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/FilterLoadMessage.scala new file mode 100644 index 0000000000..8724d26739 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/control/FilterLoadMessage.scala @@ -0,0 +1,58 @@ +package org.bitcoins.node.messages.control + +import org.bitcoins.core.bloom.{BloomFilter, BloomFlag} +import org.bitcoins.core.number.{UInt32, UInt64} +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.FilterLoadMessage +import org.bitcoins.node.serializers.messages.control.RawFilterLoadMessageSerializer +import org.bitcoins.node.messages.FilterLoadMessage +import org.bitcoins.node.serializers.messages.control.RawFilterLoadMessageSerializer +import scodec.bits.ByteVector + +/** + * Created by chris on 7/19/16. + * [[https://bitcoin.org/en/developer-reference#filterload]] + */ +object FilterLoadMessage extends Factory[FilterLoadMessage] { + private case class FilterLoadMessageImpl(bloomFilter: BloomFilter) + extends FilterLoadMessage { + require( + bloomFilter.filterSize.num.toLong <= BloomFilter.maxSize.toLong, + "Can only have a maximum of 36,000 bytes in our filter, got: " + bloomFilter.data.size) + require( + bloomFilter.hashFuncs <= BloomFilter.maxHashFuncs, + "Can only have a maximum of 50 hashFuncs inside FilterLoadMessage, got: " + bloomFilter.hashFuncs) + require( + bloomFilter.filterSize.num.toLong == bloomFilter.data.size, + "Filter Size compactSizeUInt and actual filter size were different, " + + "filterSize: " + bloomFilter.filterSize.num + " actual filter size: " + bloomFilter.data.length + ) + } + + override def fromBytes(bytes: ByteVector): FilterLoadMessage = + RawFilterLoadMessageSerializer.read(bytes) + + def apply( + filterSize: CompactSizeUInt, + filter: ByteVector, + hashFuncs: UInt32, + tweak: UInt32, + flags: BloomFlag): FilterLoadMessage = { + val bloomFilter = BloomFilter(filterSize, filter, hashFuncs, tweak, flags) + FilterLoadMessage(bloomFilter) + } + + def apply( + filter: ByteVector, + hashFuncs: UInt32, + tweak: UInt32, + flags: BloomFlag): FilterLoadMessage = { + val filterSize = CompactSizeUInt(UInt64(filter.length)) + FilterLoadMessage(filterSize, filter, hashFuncs, tweak, flags) + } + + def apply(bloomFilter: BloomFilter): FilterLoadMessage = { + FilterLoadMessageImpl(bloomFilter) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/PingMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/PingMessage.scala new file mode 100644 index 0000000000..39d11704fd --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/control/PingMessage.scala @@ -0,0 +1,18 @@ +package org.bitcoins.node.messages.control + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.PingMessage +import org.bitcoins.node.serializers.messages.control.RawPingMessageSerializer +import org.bitcoins.node.messages.PingMessage +import scodec.bits.ByteVector + +object PingMessage extends Factory[PingMessage] { + private case class PingMessageImpl(nonce: UInt64) extends PingMessage + override def fromBytes(bytes: ByteVector): PingMessage = { + val pingMsg = RawPingMessageSerializer.read(bytes) + PingMessageImpl(pingMsg.nonce) + } + + def apply(nonce: UInt64): PingMessage = PingMessageImpl(nonce) +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/PongMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/PongMessage.scala new file mode 100644 index 0000000000..72db18b8a9 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/control/PongMessage.scala @@ -0,0 +1,22 @@ +package org.bitcoins.node.messages.control + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.PongMessage +import org.bitcoins.node.serializers.messages.control.RawPongMessageSerializer +import org.bitcoins.node.messages.PongMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 7/5/16. + */ +object PongMessage extends Factory[PongMessage] { + private case class PongMessageImpl(nonce: UInt64) extends PongMessage + + def fromBytes(bytes: ByteVector): PongMessage = { + val pongMsg = RawPongMessageSerializer.read(bytes) + PongMessageImpl(pongMsg.nonce) + } + + def apply(nonce: UInt64): PongMessage = PongMessageImpl(nonce) +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/RejectMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/RejectMessage.scala new file mode 100644 index 0000000000..521e4a94b2 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/control/RejectMessage.scala @@ -0,0 +1,48 @@ +package org.bitcoins.node.messages.control + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.RejectMessage +import org.bitcoins.node.serializers.messages.control.RawRejectMessageSerializer +import org.bitcoins.node.messages.RejectMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 8/31/16. + * Factory object for + * [[https://bitcoin.org/en/developer-reference#reject]] + */ +object RejectMessage extends Factory[RejectMessage] { + private case class RejectMessageImpl( + messageSize: CompactSizeUInt, + message: String, + code: Char, + reasonSize: CompactSizeUInt, + reason: String, + extra: ByteVector) + extends RejectMessage + + def apply( + messageSize: CompactSizeUInt, + message: String, + code: Char, + reasonSize: CompactSizeUInt, + reason: String, + extra: ByteVector): RejectMessage = { + RejectMessageImpl(messageSize, message, code, reasonSize, reason, extra) + } + + def fromBytes(bytes: ByteVector): RejectMessage = + RawRejectMessageSerializer.read(bytes) + + def apply( + message: String, + code: Char, + reason: String, + extra: ByteVector): RejectMessage = { + val messageSize: CompactSizeUInt = CompactSizeUInt(UInt64(message.size)) + val reasonSize: CompactSizeUInt = CompactSizeUInt(UInt64(reason.size)) + RejectMessage(messageSize, message, code, reasonSize, reason, extra) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/ServiceIdentifier.scala b/node/src/main/scala/org/bitcoins/node/messages/control/ServiceIdentifier.scala new file mode 100644 index 0000000000..dafa4e5617 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/control/ServiceIdentifier.scala @@ -0,0 +1,54 @@ +package org.bitcoins.node.messages.control + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.protocol.NetworkElement +import org.bitcoins.core.util.Factory +import org.bitcoins.node.serializers.messages.control.RawServiceIdentifierSerializer +import scodec.bits.ByteVector + +/** + * Created by chris on 6/2/16. + * Indicates the services that are provided by this spv node + * [[https://bitcoin.org/en/developer-reference#version]] + */ +sealed trait ServiceIdentifier extends NetworkElement { + def num: UInt64 + override def bytes: ByteVector = RawServiceIdentifierSerializer.write(this) +} + +/** + * This node is not a full node. + * It may not be able to provide any data except for the transactions it originates. + */ +case object UnnamedService extends ServiceIdentifier { + override val num = UInt64.zero +} + +/** + * This is a full node and can be asked for full blocks. + * It should implement all protocol features available in its self-reported protocol version. + */ +case object NodeNetwork extends ServiceIdentifier { + override val num = UInt64.one +} + +/** + * Designated type for any service that does not have value of 0 or 1 + */ +sealed trait UnknownService extends ServiceIdentifier + +object ServiceIdentifier extends Factory[ServiceIdentifier] { + + private case class UnknownServiceImpl(num: UInt64) extends UnknownService + + def fromBytes(bytes: ByteVector): ServiceIdentifier = + RawServiceIdentifierSerializer.read(bytes) + + def apply(num: BigInt): ServiceIdentifier = ServiceIdentifier(UInt64(num)) + + def apply(uInt64: UInt64): ServiceIdentifier = uInt64 match { + case UInt64.zero => UnnamedService + case UInt64.one => NodeNetwork + case x: UInt64 => UnknownServiceImpl(x) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/control/VersionMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/control/VersionMessage.scala new file mode 100644 index 0000000000..0d566beae1 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/control/VersionMessage.scala @@ -0,0 +1,120 @@ +package org.bitcoins.node.messages.control + +import java.net.{InetAddress, InetSocketAddress} + +import org.bitcoins.core.config.NetworkParameters +import org.bitcoins.core.number.{Int32, Int64, UInt64} +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.Factory +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.messages.VersionMessage +import org.bitcoins.node.serializers.messages.control.RawVersionMessageSerializer +import org.bitcoins.node.versions.ProtocolVersion +import org.joda.time.DateTime +import scodec.bits.ByteVector + +/** + * Created by chris on 6/3/16. + * Companion object responsible for creating VersionMessages on the p2p network + * https://bitcoin.org/en/developer-reference#version + */ +object VersionMessage extends Factory[VersionMessage] { + + private case class VersionMessageImpl( + version: ProtocolVersion, + services: ServiceIdentifier, + timestamp: Int64, + addressReceiveServices: ServiceIdentifier, + addressReceiveIpAddress: InetAddress, + addressReceivePort: Int, + addressTransServices: ServiceIdentifier, + addressTransIpAddress: InetAddress, + addressTransPort: Int, + nonce: UInt64, + userAgentSize: CompactSizeUInt, + userAgent: String, + startHeight: Int32, + relay: Boolean) + extends VersionMessage + + override def fromBytes(bytes: ByteVector): VersionMessage = + RawVersionMessageSerializer.read(bytes) + + def apply( + version: ProtocolVersion, + services: ServiceIdentifier, + timestamp: Int64, + addressReceiveServices: ServiceIdentifier, + addressReceiveIpAddress: InetAddress, + addressReceivePort: Int, + addressTransServices: ServiceIdentifier, + addressTransIpAddress: InetAddress, + addressTransPort: Int, + nonce: UInt64, + userAgent: String, + startHeight: Int32, + relay: Boolean): VersionMessage = { + val userAgentSize: CompactSizeUInt = + CompactSizeUInt.calculateCompactSizeUInt(ByteVector(userAgent.getBytes)) + VersionMessageImpl( + version = version, + services = services, + timestamp = timestamp, + addressReceiveServices = addressReceiveServices, + addressReceiveIpAddress = addressReceiveIpAddress, + addressReceivePort = addressReceivePort, + addressTransServices = addressTransServices, + addressTransIpAddress = addressTransIpAddress, + addressTransPort = addressTransPort, + nonce = nonce, + userAgentSize = userAgentSize, + userAgent = userAgent, + startHeight = startHeight, + relay = relay + ) + } + + def apply( + network: NetworkParameters, + receivingIpAddress: InetAddress): VersionMessage = { + val transmittingIpAddress = InetAddress.getLocalHost + VersionMessage(network, receivingIpAddress, transmittingIpAddress) + } + + def apply( + network: NetworkParameters, + receivingIpAddress: InetAddress, + transmittingIpAddress: InetAddress): VersionMessage = { + val nonce = UInt64.zero + val userAgent = Constants.userAgent + val startHeight = Int32.zero + val relay = false + VersionMessage( + version = Constants.version, + services = UnnamedService, + timestamp = Int64(DateTime.now.getMillis), + addressReceiveServices = UnnamedService, + addressReceiveIpAddress = receivingIpAddress, + addressReceivePort = network.port, + addressTransServices = NodeNetwork, + addressTransIpAddress = transmittingIpAddress, + addressTransPort = network.port, + nonce = nonce, + userAgent = userAgent, + startHeight = startHeight, + relay = relay + ) + } + + def apply(host: String, network: NetworkParameters): VersionMessage = { + //network.dnsSeeds(0) + val transmittingIpAddress = InetAddress.getByName(host) + VersionMessage(network, transmittingIpAddress) + } + + def apply( + socket: InetSocketAddress, + network: NetworkParameters): VersionMessage = { + VersionMessage(network, socket.getAddress) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/BlockMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/BlockMessage.scala new file mode 100644 index 0000000000..2c4ef497cb --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/data/BlockMessage.scala @@ -0,0 +1,22 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.core.protocol.blockchain.Block +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.BlockMessage +import org.bitcoins.node.serializers.messages.data.RawBlockMessageSerializer +import org.bitcoins.node.messages.BlockMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 7/8/16. + */ +object BlockMessage extends Factory[BlockMessage] { + + private case class BlockMessageImpl(block: Block) extends BlockMessage + + def fromBytes(bytes: ByteVector): BlockMessage = + RawBlockMessageSerializer.read(bytes) + + def apply(block: Block): BlockMessage = BlockMessageImpl(block) + +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/GetBlocksMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/GetBlocksMessage.scala new file mode 100644 index 0000000000..25e0d38b59 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/data/GetBlocksMessage.scala @@ -0,0 +1,47 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.GetBlocksMessage +import org.bitcoins.node.serializers.messages.data.RawGetBlocksMessageSerializer +import org.bitcoins.node.versions.ProtocolVersion +import org.bitcoins.node.messages._ +import org.bitcoins.node.serializers.messages.data.RawGetBlocksMessageSerializer +import org.bitcoins.node.versions.ProtocolVersion +import scodec.bits.ByteVector + +/** + * Created by chris on 6/1/16. + * This is the companion object for the GetBlocks network message on the p2p network + * https://bitcoin.org/en/developer-reference#getblocks + */ +object GetBlocksMessage extends Factory[GetBlocksMessage] { + + private case class GetBlocksMessageImpl( + protocolVersion: ProtocolVersion, + hashCount: CompactSizeUInt, + blockHeaderHashes: Seq[DoubleSha256Digest], + stopHash: DoubleSha256Digest) + extends GetBlocksMessage + + def apply( + version: ProtocolVersion, + hashCount: CompactSizeUInt, + blockHeaderHashes: Seq[DoubleSha256Digest], + stopHash: DoubleSha256Digest): GetBlocksMessage = { + GetBlocksMessageImpl(version, hashCount, blockHeaderHashes, stopHash) + } + + def apply( + version: ProtocolVersion, + blockHeaderHashes: Seq[DoubleSha256Digest], + stopHash: DoubleSha256Digest): GetBlocksMessage = { + val hashCount = CompactSizeUInt(UInt64(blockHeaderHashes.length)) + GetBlocksMessage(version, hashCount, blockHeaderHashes, stopHash) + } + + def fromBytes(bytes: ByteVector): GetBlocksMessage = + RawGetBlocksMessageSerializer.read(bytes) +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/GetDataMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/GetDataMessage.scala new file mode 100644 index 0000000000..f3d0cbd9ac --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/data/GetDataMessage.scala @@ -0,0 +1,37 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.GetDataMessage +import org.bitcoins.node.serializers.messages.data.RawGetDataMessageSerializer +import org.bitcoins.node.messages.GetDataMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 7/8/16. + */ +object GetDataMessage extends Factory[GetDataMessage] { + private case class GetDataMessageImpl( + inventoryCount: CompactSizeUInt, + inventories: Seq[Inventory]) + extends GetDataMessage + + override def fromBytes(bytes: ByteVector): GetDataMessage = { + RawGetDataMessageSerializer.read(bytes) + } + + def apply( + inventoryCount: CompactSizeUInt, + inventories: Seq[Inventory]): GetDataMessage = { + GetDataMessageImpl(inventoryCount, inventories) + } + + def apply(inventories: Seq[Inventory]): GetDataMessage = { + val inventoryCount = CompactSizeUInt(UInt64(inventories.length)) + GetDataMessage(inventoryCount, inventories) + } + + def apply(inventory: Inventory): GetDataMessage = + GetDataMessage(Seq(inventory)) +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/GetHeadersMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/GetHeadersMessage.scala new file mode 100644 index 0000000000..61080685d9 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/data/GetHeadersMessage.scala @@ -0,0 +1,67 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.Factory +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.messages.GetHeadersMessage +import org.bitcoins.node.serializers.messages.data.RawGetHeadersMessageSerializer +import org.bitcoins.node.versions.ProtocolVersion +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.messages.GetHeadersMessage +import org.bitcoins.node.serializers.messages.data.RawGetHeadersMessageSerializer +import org.bitcoins.node.versions.ProtocolVersion +import scodec.bits.ByteVector + +/** + * Created by chris on 6/29/16. + */ +object GetHeadersMessage extends Factory[GetHeadersMessage] { + private case class GetHeadersMessageImpl( + version: ProtocolVersion, + hashCount: CompactSizeUInt, + hashes: Seq[DoubleSha256Digest], + hashStop: DoubleSha256Digest) + extends GetHeadersMessage + + override def fromBytes(bytes: ByteVector): GetHeadersMessage = + RawGetHeadersMessageSerializer.read(bytes) + + def apply( + version: ProtocolVersion, + hashCount: CompactSizeUInt, + hashes: Seq[DoubleSha256Digest], + hashStop: DoubleSha256Digest): GetHeadersMessage = { + GetHeadersMessageImpl(version, hashCount, hashes, hashStop) + } + + def apply( + version: ProtocolVersion, + hashes: Seq[DoubleSha256Digest], + hashStop: DoubleSha256Digest): GetHeadersMessage = { + val hashCount = CompactSizeUInt(UInt64(hashes.length)) + GetHeadersMessage(version, hashCount, hashes, hashStop) + } + + /** Creates a [[GetHeadersMessage]] with the default protocol version in [[Constants]] */ + def apply( + hashes: Seq[DoubleSha256Digest], + hashStop: DoubleSha256Digest): GetHeadersMessage = { + GetHeadersMessage(Constants.version, hashes, hashStop) + } + + /** Creates a [[GetHeadersMessage]] with no hash stop set, this requests all possible blocks + * if we need more than 2000 block headers, we will have to send another [[GetHeadersMessage]] + * [[https://bitcoin.org/en/developer-reference#getheaders]] */ + def apply(hashes: Seq[DoubleSha256Digest]): GetHeadersMessage = { + //The header hash of the last header hash being requested; set to all zeroes to request an inv message with all + //subsequent header hashes (a maximum of 2000 will be sent as a reply to this message + val hashStop = DoubleSha256Digest.empty + GetHeadersMessage(hashes, hashStop) + } + + def apply(hashes: DoubleSha256Digest): GetHeadersMessage = { + GetHeadersMessage(Vector(hashes)) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/HeadersMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/HeadersMessage.scala new file mode 100644 index 0000000000..65cf0541af --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/data/HeadersMessage.scala @@ -0,0 +1,33 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.protocol.blockchain.BlockHeader +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.HeadersMessage +import org.bitcoins.node.serializers.messages.data.RawHeadersMessageSerializer +import org.bitcoins.node.messages.HeadersMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 7/5/16. + */ +object HeadersMessage extends Factory[HeadersMessage] { + private case class HeadersMessageImpl( + count: CompactSizeUInt, + headers: Vector[BlockHeader]) + extends HeadersMessage + + def fromBytes(bytes: ByteVector): HeadersMessage = + RawHeadersMessageSerializer.read(bytes) + + def apply( + count: CompactSizeUInt, + headers: Vector[BlockHeader]): HeadersMessage = + HeadersMessageImpl(count, headers) + + def apply(headers: Vector[BlockHeader]): HeadersMessage = { + val count = CompactSizeUInt(UInt64(headers.length)) + HeadersMessageImpl(count, headers) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/Inventory.scala b/node/src/main/scala/org/bitcoins/node/messages/data/Inventory.scala new file mode 100644 index 0000000000..e6d091735d --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/data/Inventory.scala @@ -0,0 +1,49 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.protocol.NetworkElement +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.TypeIdentifier +import org.bitcoins.node.serializers.messages.data.RawInventorySerializer +import org.bitcoins.node.messages.TypeIdentifier +import org.bitcoins.node.serializers.messages.data.RawInventorySerializer +import scodec.bits.ByteVector + +/** + * Created by chris on 5/31/16. + * These are used as unique identifiers inside the peer-to-peer network + * [[https://bitcoin.org/en/developer-reference#term-inventory]] + */ +trait Inventory extends NetworkElement { + + /** + * The type of object which was hashed + * @return + */ + def typeIdentifier: TypeIdentifier + + /** + * SHA256(SHA256()) hash of the object in internal byte order. + * @return + */ + def hash: DoubleSha256Digest + + override def bytes: ByteVector = RawInventorySerializer.write(this) +} + +object Inventory extends Factory[Inventory] { + + private case class InventoryImpl( + typeIdentifier: TypeIdentifier, + hash: DoubleSha256Digest) + extends Inventory + + override def fromBytes(bytes: ByteVector): Inventory = + RawInventorySerializer.read(bytes) + + def apply( + typeIdentifier: TypeIdentifier, + hash: DoubleSha256Digest): Inventory = { + InventoryImpl(typeIdentifier, hash) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/InventoryMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/InventoryMessage.scala new file mode 100644 index 0000000000..ef4179aab3 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/data/InventoryMessage.scala @@ -0,0 +1,36 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.InventoryMessage +import org.bitcoins.node.serializers.messages.data.RawInventoryMessageSerializer +import org.bitcoins.node.messages.InventoryMessage +import org.bitcoins.node.serializers.messages.data.RawInventoryMessageSerializer +import scodec.bits.ByteVector + +/** + * Created by chris on 6/1/16. + * Creates an scala object that represents the inventory type on the p2p network + * https://bitcoin.org/en/developer-reference#inv + */ +object InventoryMessage extends Factory[InventoryMessage] { + + private case class InventoryMessageImpl( + inventoryCount: CompactSizeUInt, + inventories: Seq[Inventory]) + extends InventoryMessage + override def fromBytes(bytes: ByteVector): InventoryMessage = + RawInventoryMessageSerializer.read(bytes) + + def apply( + inventoryCount: CompactSizeUInt, + inventories: Seq[Inventory]): InventoryMessage = { + InventoryMessageImpl(inventoryCount, inventories) + } + + def apply(inventories: Seq[Inventory]): InventoryMessage = { + val count = CompactSizeUInt(UInt64(inventories.length)) + InventoryMessage(count, inventories) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/MerkleBlockMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/MerkleBlockMessage.scala new file mode 100644 index 0000000000..de8645e883 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/data/MerkleBlockMessage.scala @@ -0,0 +1,26 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.core.protocol.blockchain.MerkleBlock +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.MerkleBlockMessage +import org.bitcoins.node.serializers.messages.data.RawMerkleBlockMessageSerializer +import org.bitcoins.node.messages.MerkleBlockMessage +import org.bitcoins.node.serializers.messages.data.RawMerkleBlockMessageSerializer +import scodec.bits.ByteVector + +/** + * Created by chris on 6/2/16. + * https://bitcoin.org/en/developer-reference#merkleblock + */ +object MerkleBlockMessage extends Factory[MerkleBlockMessage] { + + private case class MerkleBlockMessageImpl(merkleBlock: MerkleBlock) + extends MerkleBlockMessage + + def fromBytes(bytes: ByteVector): MerkleBlockMessage = + RawMerkleBlockMessageSerializer.read(bytes) + + def apply(merkleBlock: MerkleBlock): MerkleBlockMessage = { + MerkleBlockMessageImpl(merkleBlock) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/NotFoundMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/NotFoundMessage.scala new file mode 100644 index 0000000000..f729488e33 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/data/NotFoundMessage.scala @@ -0,0 +1,30 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.NotFoundMessage +import org.bitcoins.node.serializers.messages.data.RawNotFoundMessageSerializer +import org.bitcoins.node.messages.NotFoundMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 6/2/16. + * The companion object factory used to create NotFoundMessages on the p2p network + * https://bitcoin.org/en/developer-reference#notfound + */ +object NotFoundMessage extends Factory[NotFoundMessage] { + + private case class NotFoundMessageImpl( + inventoryCount: CompactSizeUInt, + inventories: Seq[Inventory]) + extends NotFoundMessage + + def fromBytes(bytes: ByteVector): NotFoundMessage = + RawNotFoundMessageSerializer.read(bytes) + + def apply( + inventoryCount: CompactSizeUInt, + inventories: Seq[Inventory]): NotFoundMessage = { + NotFoundMessageImpl(inventoryCount, inventories) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/messages/data/TransactionMessage.scala b/node/src/main/scala/org/bitcoins/node/messages/data/TransactionMessage.scala new file mode 100644 index 0000000000..d9cb044ed4 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/messages/data/TransactionMessage.scala @@ -0,0 +1,26 @@ +package org.bitcoins.node.messages.data + +import org.bitcoins.core.protocol.transaction.Transaction +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.TransactionMessage +import org.bitcoins.node.serializers.messages.data.RawTransactionMessageSerializer +import org.bitcoins.node.messages._ +import org.bitcoins.node.serializers.messages.data.RawTransactionMessageSerializer +import scodec.bits.ByteVector + +/** + * Created by chris on 6/2/16. + * Companion factory object for the TransactionMessage on the p2p network + * https://bitcoin.org/en/developer-reference#tx + */ +object TransactionMessage extends Factory[TransactionMessage] { + + private case class TransactionMessageImpl(transaction: Transaction) + extends TransactionMessage + + def fromBytes(bytes: ByteVector): TransactionMessage = + RawTransactionMessageSerializer.read(bytes) + + def apply(transaction: Transaction): TransactionMessage = + TransactionMessageImpl(transaction) +} diff --git a/node/src/main/scala/org/bitcoins/node/models/ColumnMappers.scala b/node/src/main/scala/org/bitcoins/node/models/ColumnMappers.scala new file mode 100644 index 0000000000..e4e16f0c61 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/models/ColumnMappers.scala @@ -0,0 +1,7 @@ +package org.bitcoins.node.models + +trait ColumnMappers { + import org.bitcoins.db.DbCommonsColumnMappers._ +} + +object ColumnMappers extends ColumnMappers diff --git a/node/src/main/scala/org/bitcoins/node/models/Peer.scala b/node/src/main/scala/org/bitcoins/node/models/Peer.scala new file mode 100644 index 0000000000..ba930ccc34 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/models/Peer.scala @@ -0,0 +1,30 @@ +package org.bitcoins.node.models + +import java.net.InetSocketAddress + +import org.bitcoins.db.DbRowAutoInc +import org.bitcoins.node.util.NetworkIpAddress + +case class Peer(networkIpAddress: NetworkIpAddress, id: Option[Long] = None) + extends DbRowAutoInc[Peer] { + + def socket: InetSocketAddress = + new InetSocketAddress(networkIpAddress.address, networkIpAddress.port) + + override def copyWithId(id: Long): Peer = { + this.copy(id = Some(id)) + } + +} + +object Peer { + + def fromNetworkIpAddress(networkIpAddress: NetworkIpAddress): Peer = { + Peer(networkIpAddress) + } + + def fromSocket(socket: InetSocketAddress): Peer = { + val nip = NetworkIpAddress.fromInetSocketAddress(socket = socket) + fromNetworkIpAddress(nip) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/models/PeerDAO.scala b/node/src/main/scala/org/bitcoins/node/models/PeerDAO.scala new file mode 100644 index 0000000000..24e03b0a47 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/models/PeerDAO.scala @@ -0,0 +1,13 @@ +package org.bitcoins.node.models + +import org.bitcoins.db.{CRUDAutoInc} +import slick.jdbc.SQLiteProfile.api._ + +import org.bitcoins.db.AppConfig +import scala.concurrent.ExecutionContext + +case class PeerDAO(appConfig: AppConfig)( + implicit override val ec: ExecutionContext) + extends CRUDAutoInc[Peer] { + override val table = TableQuery[PeerTable] +} diff --git a/node/src/main/scala/org/bitcoins/node/models/PeerTable.scala b/node/src/main/scala/org/bitcoins/node/models/PeerTable.scala new file mode 100644 index 0000000000..50430c4701 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/models/PeerTable.scala @@ -0,0 +1,10 @@ +package org.bitcoins.node.models + +import org.bitcoins.db.TableAutoInc +import slick.jdbc.PostgresProfile.api._ +import slick.lifted.Tag + +class PeerTable(tag: Tag) extends TableAutoInc[Peer](tag, "peer_table") { + + def * = ??? +} diff --git a/node/src/main/scala/org/bitcoins/node/networking/BlockActor.scala b/node/src/main/scala/org/bitcoins/node/networking/BlockActor.scala new file mode 100644 index 0000000000..bb78575753 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/networking/BlockActor.scala @@ -0,0 +1,53 @@ +package org.bitcoins.node.networking + +import akka.actor.{Actor, ActorContext, ActorRef, Props} +import akka.event.LoggingReceive +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.protocol.blockchain.BlockHeader +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.NetworkMessage +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.messages.data.{GetDataMessage, Inventory} +import org.bitcoins.node.messages.{BlockMessage, TypeIdentifier} + +/** + * Created by chris on 7/10/16. + */ +sealed abstract class BlockActor extends Actor with BitcoinSLogger { + + def peerMsgHandler: ActorRef + + def receive: Receive = LoggingReceive { + case hash: DoubleSha256Digest => + val inv = Inventory(TypeIdentifier.MsgBlock, hash) + val getDataMessage = GetDataMessage(inv) + val networkMessage = + NetworkMessage(Constants.networkParameters, getDataMessage) + peerMsgHandler ! networkMessage + context.become(awaitBlockMsg) + case blockHeader: BlockHeader => + self.forward(blockHeader.hash) + } + + def awaitBlockMsg: Receive = LoggingReceive { + case blockMsg: BlockMessage => + context.parent ! blockMsg + context.stop(self) + } +} + +object BlockActor { + private case class BlockActorImpl( + peerMsgHandler: ActorRef + ) extends BlockActor + + def props(peerMsgHandler: ActorRef): Props = { + Props(classOf[BlockActorImpl], peerMsgHandler) + } + + def apply(peerMsgHandler: ActorRef)( + implicit context: ActorContext): ActorRef = { + context.actorOf(props(peerMsgHandler)) + } + +} diff --git a/node/src/main/scala/org/bitcoins/node/networking/Client.scala b/node/src/main/scala/org/bitcoins/node/networking/Client.scala new file mode 100644 index 0000000000..41a3db7897 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/networking/Client.scala @@ -0,0 +1,243 @@ +package org.bitcoins.node.networking + +import akka.actor.{Actor, ActorRef, ActorRefFactory, Props} +import akka.event.LoggingReceive +import akka.io.{IO, Tcp} +import akka.util.ByteString +import org.bitcoins.core.config.NetworkParameters +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.NetworkMessage +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.messages.NetworkPayload +import org.bitcoins.node.models.Peer +import org.bitcoins.node.networking.peer.PeerMessageReceiver +import org.bitcoins.node.networking.peer.PeerMessageReceiver.NetworkMessageReceived +import org.bitcoins.node.util.BitcoinSpvNodeUtil +import scodec.bits.ByteVector + +/** + * Created by chris on 6/6/16. + * This actor is responsible for creating a connection, + * relaying messages and closing a connection to our peer on + * the p2p network. This is the actor that directly interacts + * with the p2p network. It's responsibly is to deal with low + * level [[Tcp.Message]]. + * + * If the [[Client]] receives a [[NetworkMessage]], from a [[org.bitcoins.node.networking.peer.PeerMessageSender]] + * it serializes the message to it to a [[akka.util.ByteString]] and then sends it to the [[manager]] + * which streams the data to our peer on the bitcoin network. + * + * If the [[Client]] receives a [[Tcp.Received]] message, it means we have received + * a message from our peer on the bitcoin p2p network. This means we try to parse + * the [[ByteString]] into a [[NetworkMessage]]. If we successfully parse the message + * we relay that message to the [[org.bitcoins.node.networking.peer.PeerMessageSender]] + * that created the Client Actor. + * + * In this class you will see a 'unalignedBytes' value passed around in a lot of methods + * This is because we cannot assume that a Bitcoin [[NetworkMessage]] aligns with a tcp packet. + * For instance, a large [[org.bitcoins.node.messages.BlockMessage]] (up to 4MB in size) + * CANNOT fit in a single tcp packet. This means we must cache + * the bytes and wait for the rest of them to be sent. + */ +sealed abstract class ClientActor extends Actor with BitcoinSLogger { + + def peer: Peer + + /** The place we send messages that we successfully parsed from our + * peer on the p2p network. This is mostly likely a [[org.bitcoins.node.networking.peer.PeerMessageSender]] + * + * @return + */ + def peerMsgHandlerReceiver: PeerMessageReceiver + + /** + * The manager is an actor that handles the underlying low level I/O resources (selectors, channels) + * and instantiates workers for specific tasks, such as listening to incoming connections. + */ + def manager: ActorRef = IO(Tcp)(context.system) + + /** + * The parameters for the network we are connected to + * i.e. [[org.bitcoins.core.config.MainNet]] or [[org.bitcoins.core.config.TestNet3]] + * @return + */ + def network: NetworkParameters = Constants.networkParameters + + /** + * This actor signifies the node we are connected to on the p2p network + * This is the context we are in after we received a [[Tcp.Connected]] message + */ + private def awaitNetworkRequest( + peer: ActorRef, + unalignedBytes: ByteVector): Receive = LoggingReceive { + case message: NetworkMessage => sendNetworkMessage(message, peer) + case payload: NetworkPayload => + val networkMsg = NetworkMessage(network, payload) + self.forward(networkMsg) + case message: Tcp.Message => + val newUnalignedBytes = + handleTcpMessage(message, Some(peer), unalignedBytes) + context.become(awaitNetworkRequest(peer, newUnalignedBytes)) + } + + /** This context is responsible for initializing a tcp connection with a peer on the bitcoin p2p network */ + def receive = LoggingReceive { + case cmd: Tcp.Command => + //we only accept a Tcp.Connect/Tcp.Connected + //message to the default receive on this actor + //after receiving Tcp.Connected we switch to the + //'awaitNetworkRequest' context. This is the main + //execution loop for the Client actor + val _ = handleCommand(cmd, None) + + case connected: Tcp.Connected => + val _ = handleEvent(connected, ByteVector.empty) + + case msg: NetworkMessage => + self.forward(msg.payload) + case payload: NetworkPayload => + logger.error( + s"Cannot send a message to our peer when we are not connected! payload=${payload} peer=${peer}") + } + + /** + * Handles boiler plate [[Tcp.Message]] types. + * @param message + * @return the unaligned bytes if we haven't received a full bitcoin p2p message yet + */ + private def handleTcpMessage( + message: Tcp.Message, + peer: Option[ActorRef], + unalignedBytes: ByteVector): ByteVector = { + message match { + case event: Tcp.Event => + handleEvent(event, unalignedBytes) + case command: Tcp.Command => + handleCommand(command, peer) + + unalignedBytes + } + } + + /** + * This function is responsible for handling a [[Tcp.Event]] algebraic data type + * @param event + */ + private def handleEvent( + event: Tcp.Event, + unalignedBytes: ByteVector): ByteVector = { + event match { + case Tcp.Bound(localAddress) => + logger.debug( + s"Actor is now bound to the local address: ${localAddress}") + context.parent ! Tcp.Bound(localAddress) + + unalignedBytes + case Tcp.CommandFailed(command) => + logger.debug(s"Client Command failed: ${command}") + + unalignedBytes + case Tcp.Connected(remote, local) => + logger.debug(s"Tcp connection to: ${remote}") + logger.debug(s"Local: ${local}") + + //this is what registers a actor to send all byte messages to that is + //received from our peer. Since we are using 'self' that means + //our bitcoin peer will send all messages to this actor. + sender ! Tcp.Register(self) + + val _ = peerMsgHandlerReceiver.connect(Client(self, peer)) + + context.become(awaitNetworkRequest(sender, ByteVector.empty)) + + unalignedBytes + case closeCmd @ (Tcp.ConfirmedClosed | Tcp.Closed | Tcp.Aborted | + Tcp.PeerClosed) => + logger.debug(s"Closed command received: ${closeCmd}") + + //tell our peer message handler we are disconnecting + val disconnectT = peerMsgHandlerReceiver.disconnect() + + disconnectT.failed.foreach(err => + logger.error(s"Failed to disconnect=${err}")) + context.stop(self) + unalignedBytes + case Tcp.Received(byteString: ByteString) => + //logger.debug("Received byte string in peerMessageHandler " + BitcoinSUtil.encodeHex(byteString.toArray)) + //logger.debug("Unaligned bytes: " + BitcoinSUtil.encodeHex(unalignedBytes)) + + //we need to aggregate our previous 'unalignedBytes' with the new message + //we just received from our peer to hopefully be able to parse full messages + val bytes: ByteVector = unalignedBytes ++ ByteVector(byteString.toArray) + //logger.debug("Bytes for message parsing: " + BitcoinSUtil.encodeHex(bytes)) + val (messages, newUnalignedBytes) = + BitcoinSpvNodeUtil.parseIndividualMessages(bytes) + + //for the messages we successfully parsed above + //send them to 'context.parent' -- this is the + //PeerMessageHandler that is responsible for + //creating this Client Actor + messages.foreach { m => + val msg = NetworkMessageReceived(m, Client(self, peer)) + peerMsgHandlerReceiver.handleNetworkMessageReceived(msg) + + } + + newUnalignedBytes + } + } + + /** + * This function is responsible for handling a [[Tcp.Command]] algebraic data type + * @param command + */ + private def handleCommand( + command: Tcp.Command, + peer: Option[ActorRef]): Unit = + command match { + case closeCmd @ (Tcp.ConfirmedClose | Tcp.Close | Tcp.Abort) => + peer.map(p => p ! closeCmd) + () + case connectCmd: Tcp.Connect => + manager ! connectCmd + case bind: Tcp.Bind => + manager ! bind + } + + /** + * Sends a network request to our peer on the network + * @param message + * @return + */ + private def sendNetworkMessage( + message: NetworkMessage, + peer: ActorRef): Unit = { + val byteMessage = BitcoinSpvNodeUtil.buildByteString(message.bytes) + peer ! Tcp.Write(byteMessage) + } + +} + +case class Client(actor: ActorRef, peer: Peer) + +object Client { + private case class ClientActorImpl( + peer: Peer, + peerMsgHandlerReceiver: PeerMessageReceiver) + extends ClientActor + + def props(peer: Peer, peerMsgHandlerReceiver: PeerMessageReceiver): Props = + Props(classOf[ClientActorImpl], peer, peerMsgHandlerReceiver) + + def apply( + context: ActorRefFactory, + peer: Peer, + peerMessageReceiver: PeerMessageReceiver): Client = { + val actorRef = context.actorOf( + props(peer = peer, peerMsgHandlerReceiver = peerMessageReceiver), + BitcoinSpvNodeUtil.createActorName(this.getClass)) + + Client(actorRef, peer) + } + +} diff --git a/node/src/main/scala/org/bitcoins/node/networking/PaymentActor.scala b/node/src/main/scala/org/bitcoins/node/networking/PaymentActor.scala new file mode 100644 index 0000000000..c24b37055b --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/networking/PaymentActor.scala @@ -0,0 +1,178 @@ +package org.bitcoins.node.networking + +import akka.actor.{Actor, ActorRef, ActorRefFactory, Props} +import akka.event.LoggingReceive +import akka.io.Tcp +import org.bitcoins.core.bloom.{BloomFilter, BloomUpdateNone} +import org.bitcoins.core.crypto.{DoubleSha256Digest, Sha256Hash160Digest} +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.protocol.Address +import org.bitcoins.core.protocol.blockchain.MerkleBlock +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.NetworkMessage +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.messages._ +import org.bitcoins.node.messages.control.FilterLoadMessage +import org.bitcoins.node.messages.data.{GetDataMessage, Inventory} +import org.bitcoins.node.util.BitcoinSpvNodeUtil + +/** + * Created by chris on 8/30/16. + * Responsible for checking if a payment to a address was made + * Verifying that the transaction that made the payment was included + * inside of a block on the blockchain + * + * 1.) Creates a bloom filter + * 2.) Sends the bloom filter to a node on the network + * 3.) Nodes matches the bloom filter, sends a txid that matched the filter back to us + * 4.) We request the full transaction using a [[GetDataMessage]] + * 5.) We verify the transaction given to us has an output that matches the address we expected a payment to + * 6.) When another block is announced on the network, we send a MsgMerkleBlock + * to our peer on the network to see if the tx was included on that block + * 7.) If it was, send the actor that that requested this message back + */ +sealed abstract class PaymentActor extends Actor with BitcoinSLogger { + + def peerMsgHandler: ActorRef + + def receive = LoggingReceive { + case hash: Sha256Hash160Digest => + paymentToHash(hash) + case address: Address => + self.forward(address.hash) + } + + /** Constructs a bloom filter that matches the given hash, + * then sends that bloom filter to a peer on the network */ + def paymentToHash(hash: Sha256Hash160Digest) = { + val bloomFilter = + BloomFilter(10, 0.0001, UInt32.zero, BloomUpdateNone).insert(hash) + val filterLoadMsg = FilterLoadMessage(bloomFilter) + val bloomFilterNetworkMsg = + NetworkMessage(Constants.networkParameters, filterLoadMsg) + peerMsgHandler ! bloomFilterNetworkMsg + } + + /** Awaits for a [[GetDataMessage]] that requested a transaction. We can also fire off more [[GetDataMessage]] inside of this context */ + def awaitTransactionGetDataMessage( + hash: Sha256Hash160Digest, + peerMessageHandler: ActorRef): Receive = LoggingReceive { + case txMsg: TransactionMessage => + //check to see if any of the outputs on this tx match our hash + val outputs = txMsg.transaction.outputs.filter(o => + o.scriptPubKey.asm.filter(_.bytes == hash.bytes).nonEmpty) + + if (outputs.nonEmpty) { + logger.debug( + "matched transaction inside of awaitTransactionGetDataMsg: " + txMsg.transaction.hex) + logger.debug("Matched txid: " + txMsg.transaction.txId.hex) + logger.debug("Switching to awaitBlockAnnouncement") + context.become( + awaitBlockAnnouncement(hash, + txMsg.transaction.txId, + peerMessageHandler)) + } + //otherwise we do nothing and wait for another transaction message + case invMsg: InventoryMessage => + //txs are broadcast by nodes on the network when they are seen by a node + //filter out the txs we do not care about + val txInventories = + invMsg.inventories.filter(_.typeIdentifier == TypeIdentifier.MsgTx) + handleTransactionInventoryMessages(txInventories, peerMessageHandler) + } + + /** Sends a [[GetDataMessage]] to get the full transaction for a transaction inventory message */ + private def handleTransactionInventoryMessages( + inventory: Seq[Inventory], + peerMessageHandler: ActorRef): Unit = { + for { + txInv <- inventory + inventory = GetDataMessage(txInv) + } yield peerMessageHandler ! inventory + + () + } + + /** This context waits for a block announcement on the network, + * then constructs a [[MerkleBlockMessage]] to check + * if the txid was included in that block */ + def awaitBlockAnnouncement( + hash: Sha256Hash160Digest, + txId: DoubleSha256Digest, + peerMessageHandler: ActorRef): Receive = LoggingReceive { + case invMsg: InventoryMessage => + val blockHashes = + invMsg.inventories + .filter(_.typeIdentifier == TypeIdentifier.MsgBlock) + .map(_.hash) + if (blockHashes.nonEmpty) { + //construct a merkle block message to verify that the txIds was in the block + val merkleBlockInventory = + Inventory(TypeIdentifier.MsgFilteredBlock, blockHashes.head) + val getDataMsg = GetDataMessage(merkleBlockInventory) + val getDataNetworkMessage = + NetworkMessage(Constants.networkParameters, getDataMsg) + peerMessageHandler ! getDataNetworkMessage + logger.debug("Switching to awaitMerkleBlockMessage") + context.become( + awaitMerkleBlockMessage(hash, txId, blockHashes, peerMessageHandler)) + } + //else do nothing and wait for another block announcement + + } + + /** This context waits for a [[MerkleBlockMessage]] from our peer on the network, then checks + * if the given txid is contained inside of the block. If it is included, send a [[PaymentActor.SuccessfulPayment]] + * message back to the actor that created this actor, else send a [[PaymentActor.FailedPayment]] message back to + * the actor that created this actor + * @param hash + * @param txId + * @param blockHashes + * @param peerMessageHandler + * @return + */ + def awaitMerkleBlockMessage( + hash: Sha256Hash160Digest, + txId: DoubleSha256Digest, + blockHashes: Seq[DoubleSha256Digest], + peerMessageHandler: ActorRef): Receive = LoggingReceive { + case merkleBlockMsg: MerkleBlockMessage => + val result = merkleBlockMsg.merkleBlock.partialMerkleTree.extractMatches + .contains(txId) + if (result) { + val successfulPayment = + PaymentActor.SuccessfulPayment(hash, + txId, + blockHashes, + merkleBlockMsg.merkleBlock) + logger.info("Received successful payment: " + successfulPayment) + context.parent ! successfulPayment + } else context.parent ! PaymentActor.FailedPayment(hash) + peerMessageHandler ! Tcp.Close + context.stop(self) + } +} + +object PaymentActor { + private case class PaymentActorImpl(peerMsgHandler: ActorRef) + extends PaymentActor + + def props(peerMsgHandler: ActorRef): Props = + Props(classOf[PaymentActorImpl], peerMsgHandler) + + def apply(peerMsgHandler: ActorRef)( + implicit context: ActorRefFactory): ActorRef = + context.actorOf(props(peerMsgHandler), + BitcoinSpvNodeUtil.createActorName(this.getClass)) + + sealed trait PaymentActorMessage + case class SuccessfulPayment( + hash: Sha256Hash160Digest, + txId: DoubleSha256Digest, + blockHash: Seq[DoubleSha256Digest], + merkleBlock: MerkleBlock) + extends PaymentActorMessage + + case class FailedPayment(hash: Sha256Hash160Digest) + extends PaymentActorMessage +} diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/ControlMessageHandler.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/ControlMessageHandler.scala new file mode 100644 index 0000000000..ded8a1fb12 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/networking/peer/ControlMessageHandler.scala @@ -0,0 +1,36 @@ +package org.bitcoins.node.networking.peer + +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.messages._ + +import scala.concurrent.ExecutionContext + +class ControlMessageHandler()(implicit ec: ExecutionContext) + extends BitcoinSLogger { + + def handleControlPayload( + controlMsg: ControlPayload, + peerMsgSender: PeerMessageSender): Unit = { + controlMsg match { + case _: PingMessage => + () + + case SendHeadersMessage => + //not implemented as of now + () + case _: AddrMessage => + () + case _ @(_: FilterAddMessage | _: FilterLoadMessage | + FilterClearMessage) => + () + case _ @(GetAddrMessage | VerAckMessage | _: VersionMessage | + _: PongMessage) => + () + case _: RejectMessage => + () + + case _: FeeFilterMessage => + () + } + } +} diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/DataMessageHandler.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/DataMessageHandler.scala new file mode 100644 index 0000000000..78360c8847 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/networking/peer/DataMessageHandler.scala @@ -0,0 +1,53 @@ +package org.bitcoins.node.networking.peer + +import org.bitcoins.chain.api.ChainApi +import org.bitcoins.chain.blockchain.ChainHandler +import org.bitcoins.chain.config.ChainAppConfig +import org.bitcoins.chain.models.BlockHeaderDAO +import org.bitcoins.core.util.{BitcoinSLogger, FutureUtil} +import org.bitcoins.node.messages.{ + DataPayload, + HeadersMessage, + InventoryMessage +} + +import scala.concurrent.{ExecutionContext, Future} + +/** This actor is meant to handle a [[org.bitcoins.node.messages.DataPayload]] + * that a peer to sent to us on the p2p network, for instance, if we a receive a + * [[HeadersMessage]] we should store those headers in our database + */ +class DataMessageHandler(appConfig: ChainAppConfig)( + implicit ec: ExecutionContext) + extends BitcoinSLogger { + + private val blockHeaderDAO: BlockHeaderDAO = BlockHeaderDAO(appConfig) + + def handleDataPayload( + payload: DataPayload, + peerMsgSender: PeerMessageSender): Future[Unit] = { + payload match { + case headersMsg: HeadersMessage => + val headers = headersMsg.headers + val chainApi: ChainApi = + ChainHandler(blockHeaderDAO, chainConfig = appConfig) + val chainApiF = chainApi.processHeaders(headers) + + chainApiF.map { _ => + val lastHash = headers.last.hash + peerMsgSender.sendGetHeadersMessage(lastHash) + } + case invMsg: InventoryMessage => + handleInventoryMsg(invMsg = invMsg, peerMsgSender = peerMsgSender) + } + } + + private def handleInventoryMsg( + invMsg: InventoryMessage, + peerMsgSender: PeerMessageSender): Future[Unit] = { + logger.info(s"Received inv=${invMsg}") + + FutureUtil.unit + + } +} diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerHandler.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerHandler.scala new file mode 100644 index 0000000000..9a78d2b86f --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerHandler.scala @@ -0,0 +1,63 @@ +package org.bitcoins.node.networking.peer + +/* +abstract class PeerHandler extends BitcoinSLogger { + implicit val system: ActorSystem + implicit val ec: ExecutionContext = system.dispatcher + implicit val timeout: Timeout + + def socket: InetSocketAddress + + def dbConfig: DbConfig + + def peerMsgSender: PeerMessageSender + + def getHeaders(getHeadersMsg: GetHeadersMessage): Unit = { + sendToPeer(getHeadersMsg) + } + + /** Connects with our peer*/ + def connect(): Future[Unit] = { + pee + } + + /** Checks if we are connected with our peer */ + def isConnected: Boolean = ??? + + /** Closes our connection with our peer */ + def close(): Future[Unit] = { + val closedF = (peerMsgSender.actor ? Tcp.Close).mapTo[Tcp.Closed.type] + + closedF.map(_ => ()) + } + +} + +object PeerHandler { + private case class PeerHandlerImpl( + peerMsgSender: PeerMessageSender, + socket: InetSocketAddress, + dbConfig: DbConfig)( + override implicit val system: ActorSystem, + val timeout: Timeout) + extends PeerHandler + + def apply( + peerMsgSender: PeerMessageSender, + socket: InetSocketAddress, + dbConfig: DbConfig)( + implicit system: ActorSystem, + timeout: Timeout): PeerHandler = { + PeerHandlerImpl(peerMsgSender, socket, dbConfig)(system, timeout) + } + + /* def apply(peer: Peer, dbConfig: DbConfig)(implicit system: ActorSystem, timeout: Timeout): PeerHandler = { + val actorRef = PeerMessageHandler(dbConfig = dbConfig) + PeerHandler(actorRef,peer.socket,dbConfig) + }*/ +} + */ + +case class PeerHandler( + peerMsgRecv: PeerMessageReceiver, + peerMsgSender: PeerMessageSender) diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiver.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiver.scala new file mode 100644 index 0000000000..bce7d5205c --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiver.scala @@ -0,0 +1,244 @@ +package org.bitcoins.node.networking.peer + +import akka.actor.ActorRefFactory +import org.bitcoins.chain.config.ChainAppConfig +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.NetworkMessage +import org.bitcoins.node.config.NodeAppConfig +import org.bitcoins.node.messages._ +import org.bitcoins.node.models.Peer +import org.bitcoins.node.networking.Client +import org.bitcoins.node.networking.peer.PeerMessageReceiverState.{ + Disconnected, + Initializing, + Normal, + Preconnection +} + +import scala.util.{Failure, Success, Try} + +/** + * Responsible for receiving messages from a peer on the + * p2p network. This is called by [[Client]] when doing the p2p + * handshake and during the [[PeerMessageReceiverState.Normal Normal]] + * operations. This is the entry point for handling all received + * [[NetworkMessage]] + */ +class PeerMessageReceiver( + state: PeerMessageReceiverState, + nodeAppConfig: NodeAppConfig, + chainAppConfig: ChainAppConfig)(implicit ref: ActorRefFactory) + extends BitcoinSLogger { + + import ref.dispatcher + + //TODO: Really bad to just modify this internal state + //not async safe at all + private var internalState: PeerMessageReceiverState = state + + /** The peer we are connected to. */ + private var peerOpt: Option[Peer] = None + + /** This method is called when we have received + * a [[akka.io.Tcp.Connected]] message from our peer + * This means we have opened a Tcp connection, + * but have NOT started the handshake + * This method will initiate the handshake + */ + protected[networking] def connect(client: Client): Try[Unit] = { + + internalState match { + case bad @ (_: Initializing | _: Normal | _: Disconnected) => + Failure( + new RuntimeException(s"Cannot call connect when in state=${bad}") + ) + case Preconnection => + peerOpt = Some(client.peer) + + logger.info(s"Connection established with peer=${peerOpt.get}") + + val newState = Preconnection.toInitializing(client) + + val _ = toState(newState) + + logger.debug(s"new state ${internalState}") + logger.debug(s"isConnected=${isConnected}") + val peerMsgSender = PeerMessageSender(client, chainAppConfig.network) + + peerMsgSender.sendVersionMessage() + + Success(()) + } + } + + protected[networking] def disconnect(): Try[Unit] = { + + internalState match { + case bad @ (_: Initializing | _: Disconnected | Preconnection) => + Failure( + new RuntimeException( + s"Cannot disconnect from peer=${peerOpt.get} when in state=${bad}") + ) + + case good: Normal => + logger.debug(s"Disconnected bitcoin peer=${peerOpt.get}") + val newState = Disconnected( + clientConnectP = good.clientConnectP, + clientDisconnectP = good.clientDisconnectP.success(()), + versionMsgP = good.versionMsgP, + verackMsgP = good.verackMsgP + ) + + val _ = toState(newState) + Success(()) + } + } + + def isConnected: Boolean = internalState.isConnected + + def isDisconnected: Boolean = internalState.isDisconnected + + def hasReceivedVersionMsg: Boolean = + internalState.hasReceivedVersionMsg.isCompleted + + def hasReceivedVerackMsg: Boolean = + internalState.hasReceivedVerackMsg.isCompleted + + def isInitialized: Boolean = internalState.isInitialized + + def handleNetworkMessageReceived( + networkMsgRecv: PeerMessageReceiver.NetworkMessageReceived): Unit = { + + //create a way to send a response if we need too + val peerMsgSender = + PeerMessageSender(networkMsgRecv.client, chainAppConfig.network) + + logger.info( + s"Received message=${networkMsgRecv.msg.header.commandName} from peer=${peerOpt + .map(_.socket)} ") + networkMsgRecv.msg.payload match { + case controlPayload: ControlPayload => + handleControlPayload(payload = controlPayload, sender = peerMsgSender) + () + case dataPayload: DataPayload => + handleDataPayload(payload = dataPayload, sender = peerMsgSender) + } + } + + /** + * Handles a [[DataPayload]] message. It checks if the sender is the parent + * actor, it sends it to our peer on the network. If the sender was the + * peer on the network, forward to the actor that spawned our actor + * + * @param payload + * @param sender + */ + private def handleDataPayload( + payload: DataPayload, + sender: PeerMessageSender): Unit = { + val dataMsgHandler = new DataMessageHandler(chainAppConfig) + //else it means we are receiving this data payload from a peer, + //we need to handle it + dataMsgHandler.handleDataPayload(payload, sender) + } + + /** + * Handles control payloads defined here https://bitcoin.org/en/developer-reference#control-messages + * + * @param payload the payload we need to do something with + * @param sender the [[PeerMessageSender]] we can use to initialize an subsequent messages that need to be sent + * @return the requests with the request removed for which the @payload is responding too + */ + private def handleControlPayload( + payload: ControlPayload, + sender: PeerMessageSender): Try[Unit] = { + payload match { + + case versionMsg: VersionMessage => + logger.debug( + s"Received version message from peer=${peerOpt.get} msg=${versionMsg}") + + internalState match { + case bad @ (_: Disconnected | _: Normal | Preconnection) => + Failure( + new RuntimeException( + s"Cannot handle version message while in state=${bad}")) + + case good: Initializing => + internalState = good.withVersionMsg(versionMsg) + + sender.sendVerackMessage() + + //we want peers to just send us headers + //we don't want to have to request them manually + sender.sendHeadersMessage() + + Success(()) + } + + case VerAckMessage => + logger.debug(s"Received verack message from peer=${peerOpt.get}") + + internalState match { + case bad @ (_: Disconnected | _: Normal | Preconnection) => + Failure( + new RuntimeException( + s"Cannot handle version message while in state=${bad}")) + + case good: Initializing => + internalState = good.toNormal(VerAckMessage) + Success(()) + } + + case _: PingMessage => + Success(()) + case SendHeadersMessage => + //not implemented as of now + Success(()) + case _: AddrMessage => + Success(()) + case _ @(_: FilterAddMessage | _: FilterLoadMessage | + FilterClearMessage) => + Success(()) + case _ @(GetAddrMessage | _: PongMessage) => + Success(()) + case _: RejectMessage => + Success(()) + case _: FeeFilterMessage => + Success(()) + } + } + + private def toState(state: PeerMessageReceiverState): Unit = { + internalState = state + } +} + +object PeerMessageReceiver { + + sealed abstract class PeerMessageReceiverMsg { + + /** Who we need to use to send a reply to our peer + * if a response is needed for this message + */ + def client: Client + } + + case class NetworkMessageReceived(msg: NetworkMessage, client: Client) + extends PeerMessageReceiverMsg + + def apply( + state: PeerMessageReceiverState, + nodeAppConfig: NodeAppConfig, + chainAppConfig: ChainAppConfig)( + implicit ref: ActorRefFactory): PeerMessageReceiver = { + new PeerMessageReceiver(state, nodeAppConfig, chainAppConfig)(ref) + } + + def newReceiver(nodeAppConfig: NodeAppConfig, chainAppConfig: ChainAppConfig)( + implicit ref: ActorRefFactory): PeerMessageReceiver = { + new PeerMessageReceiver(state = PeerMessageReceiverState.fresh(), + nodeAppConfig, + chainAppConfig)(ref) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala new file mode 100644 index 0000000000..bca88013ce --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageReceiverState.scala @@ -0,0 +1,181 @@ +package org.bitcoins.node.networking.peer + +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.NetworkMessage +import org.bitcoins.node.messages.{VerAckMessage, VersionMessage} +import org.bitcoins.node.networking.Client + +import scala.concurrent.{Future, Promise} + +sealed abstract class PeerMessageReceiverState extends BitcoinSLogger { + + /** This promise gets completed when we receive a + * [[akka.io.Tcp.Connected]] message from [[Client]] + */ + def clientConnectP: Promise[Client] + + /** The [[org.bitcoins.node.networking.Client]] we are + * connected to. This isn't initiated until the client + * has called [[PeerMessageReceiver.connect()]] + */ + private val clientConnectF: Future[Client] = clientConnectP.future + + /** This promise is completed in the [[PeerMessageReceiver.disconnect()]] + * when a [[Client]] initiates a disconnections from + * our peer on the p2p network + */ + def clientDisconnectP: Promise[Unit] + + private val clientDisconnectF: Future[Unit] = clientDisconnectP.future + + /** If this future is completed, we are + * connected to our client. Note, there is + * no timeout on this future and no guarantee + * that some one has actually initiated + * a connection with a [[Client]] + * @return + */ + def isConnected: Boolean = { + clientConnectF.isCompleted && !clientDisconnectF.isCompleted + } + + def isDisconnected: Boolean = { + clientDisconnectF.isCompleted + } + + def versionMsgP: Promise[VersionMessage] + + /** This future is completed when our peer has sent + * us their [[VersionMessage]] indicating what protocol + * features they support + */ + def hasReceivedVersionMsg: Future[VersionMessage] = { + versionMsgP.future + } + + def verackMsgP: Promise[VerAckMessage.type] + + /** This future completes when we have received a + * [[VerAckMessage]] from our peer. This means our + * peer has accepted our [[VersionMessage]] and is + * willing to connect with us + * @return + */ + def hasReceivedVerackMsg: Future[VerAckMessage.type] = { + verackMsgP.future + } + + /** Indicates we have connected and completed the initial + * handshake that is required to connect to the bitcoin p2p network + * If this is true, we can start sending and receiving normal + * [[NetworkMessage]] with our peer on the network + * @return + */ + def isInitialized: Boolean = { + hasReceivedVersionMsg.isCompleted && hasReceivedVerackMsg.isCompleted + } +} + +object PeerMessageReceiverState { + + /** Represents a [[org.bitcoins.node.networking.peer.PeerMessageReceiverState]] + * where the peer is not connected to the p2p network + */ + final case object Preconnection extends PeerMessageReceiverState { + def clientConnectP: Promise[Client] = Promise[Client]() + + //should this be completed since the client is disconnected??? + def clientDisconnectP: Promise[Unit] = Promise[Unit]() + def versionMsgP: Promise[VersionMessage] = Promise[VersionMessage]() + def verackMsgP: Promise[VerAckMessage.type] = Promise[VerAckMessage.type]() + + /** Converts [[org.bitcoins.node.networking.peer.PeerMessageReceiverState.Preconnection]] to [[Initializing]] */ + def toInitializing(client: Client): Initializing = { + val p = clientConnectP + p.success(client) + Initializing( + clientConnectP = p, + clientDisconnectP = clientDisconnectP, + versionMsgP = versionMsgP, + verackMsgP = verackMsgP + ) + } + } + + /** Means that our [[org.bitcoins.node.networking.peer.PeerMessageReceiver]] + * is still going through the initilization process. This means + * we still need to receive a [[VersionMessage]] or [[VerAckMessage]] + * from our peer on the p2p network + */ + case class Initializing( + clientConnectP: Promise[Client], + clientDisconnectP: Promise[Unit], + versionMsgP: Promise[VersionMessage], + verackMsgP: Promise[VerAckMessage.type] + ) extends PeerMessageReceiverState { + require( + isConnected, + "We cannot have a PeerMessageReceiverState.Initializng if we are not connected") + + /** Helper method to modifing the state of [[org.bitcoins.node.networking.peer.PeerMessageReceiverState.Initializing]] + * when we receive a [[VersionMessage]]. This completes versoinMsgP + * @return + */ + def withVersionMsg(versionMsg: VersionMessage): Initializing = { + PeerMessageReceiverState.Initializing( + clientConnectP = clientConnectP, + clientDisconnectP = clientDisconnectP, + versionMsgP = versionMsgP.success(versionMsg), + verackMsgP = verackMsgP + ) + } + + /** Completes the verack message promise and transitions + * our [[PeerMessageReceiverState]] to [[PeerMessageReceiverState.Normal]] + */ + def toNormal(verAckMessage: VerAckMessage.type): Normal = { + Normal( + clientConnectP = clientConnectP, + clientDisconnectP = clientDisconnectP, + versionMsgP = versionMsgP, + verackMsgP = verackMsgP.success(verAckMessage) + ) + } + } + + /** This represents a [[org.bitcoins.node.networking.peer.PeerMessageReceiverState]] + * where the peer has been fully initialized and is ready to send messages to + * the peer on the network + */ + case class Normal( + clientConnectP: Promise[Client], + clientDisconnectP: Promise[Unit], + versionMsgP: Promise[VersionMessage], + verackMsgP: Promise[VerAckMessage.type] + ) extends PeerMessageReceiverState { + require( + isConnected, + s"We cannot have a PeerMessageReceiverState.Normal if the Peer is not connected") + require( + isInitialized, + s"We cannot have a PeerMessageReceiverState.Normal if the Peer is not initialized") + } + + case class Disconnected( + clientConnectP: Promise[Client], + clientDisconnectP: Promise[Unit], + versionMsgP: Promise[VersionMessage], + verackMsgP: Promise[VerAckMessage.type]) + extends PeerMessageReceiverState { + require( + isDisconnected, + "We cannot be in the disconnected state if a peer is not disconnected") + } + + def fresh(): PeerMessageReceiverState.Preconnection.type = { + PeerMessageReceiverState.Preconnection + } + +} + +object Initializing {} diff --git a/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala new file mode 100644 index 0000000000..407854733d --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/networking/peer/PeerMessageSender.scala @@ -0,0 +1,97 @@ +package org.bitcoins.node.networking.peer + +import akka.actor.ActorRef +import akka.io.Tcp +import org.bitcoins.core.config.NetworkParameters +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.NetworkMessage +import org.bitcoins.node.messages._ +import org.bitcoins.node.messages.control.{PongMessage, VersionMessage} +import org.bitcoins.node.messages.data.GetHeadersMessage +import org.bitcoins.node.models.Peer +import org.bitcoins.node.networking.Client + +/** + * Created by chris on 6/7/16. + * This actor is the middle man between our [[Client]] and higher level actors such as + * [[org.bitcoins.node.networking.BlockActor]]. When it receives a message, it tells [[Client]] to create connection to a peer, + * then it exchanges [[VersionMessage]], [[VerAckMessage]] and [[org.bitcoins.node.messages.PingMessage]]/[[PongMessage]] message + * with our peer on the network. When the Client finally responds to the [[NetworkMessage]] we originally + * sent it sends that [[NetworkMessage]] back to the actor that requested it. + */ +class PeerMessageSender(client: Client)(implicit np: NetworkParameters) + extends BitcoinSLogger { + private val socket = client.peer.socket + + /** Initiates a connection with the given [[Peer]] */ + def connect(): Unit = { + logger.info(s"Attempting to connect to peer=$socket") + (client.actor ! Tcp.Connect(socket)) + } + + def disconnect(): Unit = { + logger.info(s"Disconnecting peer at socket=${socket}") + (client.actor ! Tcp.Close) + } + + /** Sends a [[org.bitcoins.node.messages.VersionMessage VersionMessage]] to our peer */ + def sendVersionMessage(): Unit = { + val versionMsg = VersionMessage(client.peer.socket, np) + sendMsg(versionMsg) + } + + def sendVerackMessage(): Unit = { + val verackMsg = VerAckMessage + sendMsg(verackMsg) + } + + def sendGetHeadersMessage(lastHash: DoubleSha256Digest): Unit = { + val headersMsg = GetHeadersMessage(lastHash) + sendMsg(headersMsg) + } + + def sendHeadersMessage(): Unit = { + val sendHeadersMsg = SendHeadersMessage + sendMsg(sendHeadersMsg) + } + + private def sendMsg(msg: NetworkPayload): Unit = { + logger.debug( + s"PeerMessageSender sending to peer=${socket} msg=${msg.commandName}") + val newtworkMsg = NetworkMessage(np, msg) + client.actor ! newtworkMsg + } +} + +object PeerMessageSender { + + private case class PeerMessageSenderImpl(client: Client)( + implicit np: NetworkParameters) + extends PeerMessageSender(client)(np) + + sealed abstract class PeerMessageHandlerMsg + + /** + * For when we are done with exchanging version and verack messages + * This means we can send normal p2p messages now + */ + case object HandshakeFinished extends PeerMessageHandlerMsg + + case class SendToPeer(msg: NetworkMessage) extends PeerMessageHandlerMsg + + /** Accumulators network messages while we are doing a handshake with our peer + * and caches a peer handler actor so we can send a [[HandshakeFinished]] + * message back to the actor when we are fully connected + * + * @param networkMsgs + * @param peerHandler + */ + case class MessageAccumulator( + networkMsgs: Vector[(ActorRef, NetworkMessage)], + peerHandler: ActorRef) + + def apply(client: Client, np: NetworkParameters): PeerMessageSender = { + PeerMessageSenderImpl(client)(np) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/peer/ConnectedPeerManager.scala b/node/src/main/scala/org/bitcoins/node/peer/ConnectedPeerManager.scala new file mode 100644 index 0000000000..ed6b0684fe --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/peer/ConnectedPeerManager.scala @@ -0,0 +1,32 @@ +package org.bitcoins.node.peer + +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.models.Peer + +/** Manages all peers we have active connections with */ +class ConnectedPeerManager extends BitcoinSLogger { + private var connectedPeers: Vector[Peer] = Vector.empty + + def add(peer: Peer): ConnectedPeerManager = { + logger.debug(s"Adding peer=${peer} to connected peers") + + connectedPeers = connectedPeers.+:(peer) + + this + } + + def delete(peer: Peer): Option[ConnectedPeerManager] = { + val currentPeers = connectedPeers + val newPeers = currentPeers.filterNot(_ == peer) + if (newPeers.length != currentPeers.length) { + connectedPeers = newPeers + Some(this) + } else { + None + } + } + + def empty: ConnectedPeerManager = { + new ConnectedPeerManager + } +} diff --git a/node/src/main/scala/org/bitcoins/node/serializers/RawNetworkMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/RawNetworkMessageSerializer.scala new file mode 100644 index 0000000000..f58721994b --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/RawNetworkMessageSerializer.scala @@ -0,0 +1,28 @@ +package org.bitcoins.node.serializers + +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.node.NetworkMessage +import org.bitcoins.node.headers.NetworkHeader +import org.bitcoins.node.messages.NetworkPayload +import org.bitcoins.node.NetworkMessage +import org.bitcoins.node.headers.NetworkHeader +import scodec.bits.ByteVector + +/** + * Created by chris on 6/11/16. + */ +trait RawNetworkMessageSerializer extends RawBitcoinSerializer[NetworkMessage] { + + def read(bytes: ByteVector): NetworkMessage = { + //first 24 bytes are the header + val header = NetworkHeader(bytes.take(24)) + val payload = NetworkPayload(header, bytes.slice(24, bytes.size)) + NetworkMessage(header, payload) + } + + def write(networkMessage: NetworkMessage): ByteVector = { + networkMessage.header.bytes ++ networkMessage.payload.bytes + } +} + +object RawNetworkMessageSerializer extends RawNetworkMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializer.scala new file mode 100644 index 0000000000..1ae207baed --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/headers/RawNetworkHeaderSerializer.scala @@ -0,0 +1,51 @@ +package org.bitcoins.node.serializers.headers + +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.headers.NetworkHeader +import scodec.bits.ByteVector + +/** + * Created by chris on 5/31/16. + * Reads and writes a message header on the peer-to-peer network + * https://bitcoin.org/en/developer-reference#message-headers + */ +trait RawNetworkHeaderSerializer + extends RawBitcoinSerializer[NetworkHeader] + with BitcoinSLogger { + + /** + * Transforms a sequence of bytes into a message header + * @param bytes the byte representation for a MessageHeader on the peer-to-peer network + * @return the native object for the MessageHeader + */ + def read(bytes: ByteVector): NetworkHeader = { + val network = bytes.take(4) + //.trim removes the null characters appended to the command name + val commandName = bytes.slice(4, 16).toArray.map(_.toChar).mkString.trim + val payloadSize = UInt32(bytes.slice(16, 20).reverse) + val checksum = bytes.slice(20, 24) + NetworkHeader(network, commandName, payloadSize, checksum) + } + + /** + * Takes in a message header and serializes it to hex + * @param messageHeader the message header to be serialized + * @return the hexadecimal representation of the message header + */ + def write(messageHeader: NetworkHeader): ByteVector = { + val network = messageHeader.network + val commandNameNoPadding = messageHeader.commandName.map(_.toByte) + //command name needs to be 12 bytes in size, or 24 chars in hex + val commandName = ByteVector(commandNameNoPadding).padRight(12) + val checksum = messageHeader.checksum + network ++ + commandName ++ + messageHeader.payloadSize.bytes.reverse ++ + checksum + } + +} + +object RawNetworkHeaderSerializer extends RawNetworkHeaderSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializer.scala new file mode 100644 index 0000000000..090ad5acd1 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/RawTypeIdentifierSerializer.scala @@ -0,0 +1,23 @@ +package org.bitcoins.node.serializers.messages + +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.node.messages.TypeIdentifier +import scodec.bits.ByteVector + +/** + * Created by chris on 5/31/16. + * Reads and writes a type identifier on a peer-to-peer network + * https://bitcoin.org/en/developer-reference#data-messages + */ +trait RawTypeIdentifierSerializer extends RawBitcoinSerializer[TypeIdentifier] { + + override def read(bytes: ByteVector): TypeIdentifier = { + TypeIdentifier(UInt32(bytes.reverse)) + } + + override def write(typeIdentifier: TypeIdentifier): ByteVector = { + typeIdentifier.num.bytes.reverse + } +} +object RawTypeIdentifierSerializer extends RawTypeIdentifierSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializer.scala new file mode 100644 index 0000000000..3aa41c6f7f --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawAddrMessageSerializer.scala @@ -0,0 +1,63 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.serializers.{RawBitcoinSerializer, RawSerializerHelper} +import org.bitcoins.node.messages.AddrMessage +import org.bitcoins.node.messages.control.AddrMessage +import org.bitcoins.node.util.NetworkIpAddress +import scodec.bits.ByteVector + +import scala.annotation.tailrec + +/** + * Created by chris on 6/3/16. + * Responsible for the serialization and deserialization of AddrMessages + * https://bitcoin.org/en/developer-reference#addr + */ +trait RawAddrMessageSerializer extends RawBitcoinSerializer[AddrMessage] { + + override def read(bytes: ByteVector): AddrMessage = { + val ipCount = CompactSizeUInt.parseCompactSizeUInt(bytes) + val ipAddressBytes = bytes.slice(ipCount.size.toInt, bytes.size) + val (networkIpAddresses, _) = + parseNetworkIpAddresses(ipCount, ipAddressBytes) + AddrMessage(ipCount, networkIpAddresses) + } + + override def write(addrMessage: AddrMessage): ByteVector = { + addrMessage.ipCount.bytes ++ + RawSerializerHelper.write( + ts = addrMessage.addresses, + serializer = RawNetworkIpAddressSerializer.write) + } + + /** + * Parses ip addresses inside of an AddrMessage + * @param ipCount the number of ip addresses we need to parse from the AddrMessage + * @param bytes the bytes from which we need to parse the ip addresses + * @return the parsed ip addresses and the remaining bytes + */ + private def parseNetworkIpAddresses( + ipCount: CompactSizeUInt, + bytes: ByteVector): (Seq[NetworkIpAddress], ByteVector) = { + @tailrec + def loop( + remainingAddresses: BigInt, + remainingBytes: ByteVector, + accum: List[NetworkIpAddress]): (Seq[NetworkIpAddress], ByteVector) = { + if (remainingAddresses <= 0) (accum.reverse, remainingBytes) + else { + val networkIpAddress = + RawNetworkIpAddressSerializer.read(remainingBytes) + val newRemainingBytes = + remainingBytes.slice(networkIpAddress.size, remainingBytes.size) + loop(remainingAddresses - 1, + newRemainingBytes, + networkIpAddress :: accum) + } + } + loop(ipCount.num.toInt, bytes, List()) + } +} + +object RawAddrMessageSerializer extends RawAddrMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFeeFilterMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFeeFilterMessageSerializer.scala new file mode 100644 index 0000000000..ea924f3eaa --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFeeFilterMessageSerializer.scala @@ -0,0 +1,25 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.core.currency.Satoshis +import org.bitcoins.core.number.Int64 +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.core.wallet.fee.SatoshisPerKiloByte +import org.bitcoins.node.messages.FeeFilterMessage +import org.bitcoins.node.messages.control.FeeFilterMessage +import scodec.bits.ByteVector + +sealed abstract class RawFeeFilterMessageSerializer extends RawBitcoinSerializer[FeeFilterMessage] { + + override def read(bytes: ByteVector): FeeFilterMessage = { + val i64 = Int64.fromBytes(bytes.take(8).reverse) + val sat = Satoshis(i64) + val satPerKb = SatoshisPerKiloByte(sat) + FeeFilterMessage(satPerKb) + } + + override def write(feeFilterMessage: FeeFilterMessage): ByteVector = { + feeFilterMessage.feeRate.currencyUnit.bytes.reverse + } +} + +object RawFeeFilterMessageSerializer extends RawFeeFilterMessageSerializer \ No newline at end of file diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializer.scala new file mode 100644 index 0000000000..d934bc99f8 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterAddMessageSerializer.scala @@ -0,0 +1,30 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.node.messages.FilterAddMessage +import org.bitcoins.node.messages.control.FilterAddMessage +import org.bitcoins.node.messages.FilterAddMessage +import org.bitcoins.node.messages.control.FilterAddMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 8/26/16. + * Responsible for serializing and deserializing a [[FilterAddMessage]] + * [[https://bitcoin.org/en/developer-reference#filteradd]] + */ +trait RawFilterAddMessageSerializer + extends RawBitcoinSerializer[FilterAddMessage] { + + override def read(bytes: ByteVector): FilterAddMessage = { + val elementSize = CompactSizeUInt.parseCompactSizeUInt(bytes) + val element = bytes.slice(elementSize.size.toInt, bytes.size) + FilterAddMessage(elementSize, element) + } + + override def write(filterAddMessage: FilterAddMessage): ByteVector = { + filterAddMessage.elementSize.bytes ++ filterAddMessage.element + } +} + +object RawFilterAddMessageSerializer extends RawFilterAddMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializer.scala new file mode 100644 index 0000000000..228bc287f0 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawFilterLoadMessageSerializer.scala @@ -0,0 +1,27 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.core.serializers.bloom.RawBloomFilterSerializer +import org.bitcoins.node.messages.FilterLoadMessage +import org.bitcoins.node.messages.control.FilterLoadMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 7/19/16. + * Serializes and deserializes a [[FilterLoadMessage]] + * https://bitcoin.org/en/developer-reference#filterload + */ +trait RawFilterLoadMessageSerializer + extends RawBitcoinSerializer[FilterLoadMessage] { + + override def read(bytes: ByteVector): FilterLoadMessage = { + val filter = RawBloomFilterSerializer.read(bytes) + FilterLoadMessage(filter) + } + + override def write(filterLoadMessage: FilterLoadMessage): ByteVector = { + RawBloomFilterSerializer.write(filterLoadMessage.bloomFilter) + } +} + +object RawFilterLoadMessageSerializer extends RawFilterLoadMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializer.scala new file mode 100644 index 0000000000..85830fafcf --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawNetworkIpAddressSerializer.scala @@ -0,0 +1,42 @@ +package org.bitcoins.node.serializers.messages.control + +import java.net.InetAddress + +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.core.util.{BitcoinSLogger, NumberUtil} +import org.bitcoins.node.messages.control.ServiceIdentifier +import org.bitcoins.node.util.{BitcoinSpvNodeUtil, NetworkIpAddress} +import org.bitcoins.node.util.{BitcoinSpvNodeUtil, NetworkIpAddress} +import scodec.bits.ByteVector + +/** + * Created by chris on 6/2/16. + * Responsible for serializing and deserializing network ip address objects on the p2p network + * https://bitcoin.org/en/developer-reference#addr + */ +trait RawNetworkIpAddressSerializer + extends RawBitcoinSerializer[NetworkIpAddress] + with BitcoinSLogger { + + def read(bytes: ByteVector): NetworkIpAddress = { + val time = UInt32(bytes.take(4).reverse) + val services = ServiceIdentifier(bytes.slice(4, 12)) + val ipBytes = bytes.slice(12, 28) + val ipAddress = InetAddress.getByAddress(ipBytes.toArray) + val port = NumberUtil.toLong(bytes.slice(28, 30)).toInt + NetworkIpAddress(time, services, ipAddress, port) + } + + def write(networkIpAddress: NetworkIpAddress): ByteVector = { + val time = networkIpAddress.time.bytes.reverse + val services = networkIpAddress.services.bytes + val ipAddress = BitcoinSpvNodeUtil.writeAddress(networkIpAddress.address) + //uint16s are only 4 hex characters + val port = ByteVector.fromShort(networkIpAddress.port.toShort) + time ++ services ++ ipAddress ++ port + } + +} + +object RawNetworkIpAddressSerializer extends RawNetworkIpAddressSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializer.scala new file mode 100644 index 0000000000..3986e4be9e --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPingMessageSerializer.scala @@ -0,0 +1,26 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.node.messages.PingMessage +import org.bitcoins.node.messages.control.PingMessage +import org.bitcoins.node.messages.PingMessage +import org.bitcoins.node.messages.control.PingMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 6/29/16. + * https://bitcoin.org/en/developer-reference#ping + */ +trait RawPingMessageSerializer extends RawBitcoinSerializer[PingMessage] { + + override def read(bytes: ByteVector): PingMessage = { + val nonce = UInt64(bytes.take(8)) + PingMessage(nonce) + } + + override def write(pingMessage: PingMessage): ByteVector = + pingMessage.nonce.bytes +} + +object RawPingMessageSerializer extends RawPingMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPongMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPongMessageSerializer.scala new file mode 100644 index 0000000000..4894eb926b --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawPongMessageSerializer.scala @@ -0,0 +1,25 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.node.messages.PongMessage +import org.bitcoins.node.messages.control.PongMessage +import org.bitcoins.node.messages.PongMessage +import org.bitcoins.node.messages.control.PongMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 7/5/16. + */ +trait RawPongMessageSerializer extends RawBitcoinSerializer[PongMessage] { + + override def read(bytes: ByteVector): PongMessage = { + PongMessage(UInt64(bytes.take(8))) + } + + override def write(pongMessage: PongMessage): ByteVector = { + pongMessage.nonce.bytes + } +} + +object RawPongMessageSerializer extends RawPongMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializer.scala new file mode 100644 index 0000000000..c0dbc45623 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawRejectMessageSerializer.scala @@ -0,0 +1,51 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.node.messages.RejectMessage +import org.bitcoins.node.messages.control.RejectMessage +import org.bitcoins.node.messages.RejectMessage +import org.bitcoins.node.messages.control.RejectMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 8/31/16. + */ +trait RawRejectMessageSerializer extends RawBitcoinSerializer[RejectMessage] { + + def read(bytes: ByteVector): RejectMessage = { + val messageSize = CompactSizeUInt.parseCompactSizeUInt(bytes) + val message: String = bytes + .slice(messageSize.size.toInt, + messageSize.size.toInt + + messageSize.num.toInt) + .toArray + .map(_.toChar) + .mkString + val code: Char = bytes(messageSize.size.toInt + messageSize.num.toInt).toChar + val reasonSizeStartIndex = messageSize.size.toInt + messageSize.num.toInt + 1 + val reasonSize = CompactSizeUInt.parseCompactSizeUInt( + bytes.slice(reasonSizeStartIndex.toInt, bytes.size)) + val reason = bytes + .slice( + (reasonSizeStartIndex + reasonSize.size).toInt, + (reasonSizeStartIndex + reasonSize.size.toInt + reasonSize.num.toInt)) + .toArray + .map(_.toChar) + .mkString + val extraStartIndex = (reasonSizeStartIndex + reasonSize.size.toInt + reasonSize.num.toInt) + val extra = bytes.slice(extraStartIndex, bytes.size) + RejectMessage(messageSize, message, code, reasonSize, reason, extra) + } + + def write(rejectMessage: RejectMessage): ByteVector = { + rejectMessage.messageSize.bytes ++ + ByteVector(rejectMessage.message.map(_.toByte)) ++ + ByteVector.fromByte(rejectMessage.code.toByte) ++ + rejectMessage.reasonSize.bytes ++ + ByteVector(rejectMessage.reason.map(_.toByte)) ++ + rejectMessage.extra + } +} + +object RawRejectMessageSerializer extends RawRejectMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializer.scala new file mode 100644 index 0000000000..f55681f99d --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawServiceIdentifierSerializer.scala @@ -0,0 +1,30 @@ +package org.bitcoins.node.serializers.messages.control + +import org.bitcoins.core.number.UInt64 +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.node.messages.control.ServiceIdentifier +import org.bitcoins.node.messages.control.ServiceIdentifier +import scodec.bits.ByteVector + +/** + * Created by chris on 6/2/16. + * Responsible for serializing and deserializing the + * service identifier in a network message + * https://bitcoin.org/en/developer-reference#version + */ +trait RawServiceIdentifierSerializer + extends RawBitcoinSerializer[ServiceIdentifier] { + + override def read(bytes: ByteVector): ServiceIdentifier = { + val serviceBytes = bytes.take(8) + //since bitcoin uses big endian for numbers, we need to convert to little endian + ServiceIdentifier(UInt64(serviceBytes.reverse)) + } + + override def write(serviceIdentifier: ServiceIdentifier): ByteVector = { + serviceIdentifier.num.bytes.reverse + } + +} + +object RawServiceIdentifierSerializer extends RawServiceIdentifierSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializer.scala new file mode 100644 index 0000000000..6b50f58ec2 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/control/RawVersionMessageSerializer.scala @@ -0,0 +1,109 @@ +package org.bitcoins.node.serializers.messages.control + +import java.net.InetAddress + +import org.bitcoins.core.number.{Int32, Int64, UInt32, UInt64} +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.messages.VersionMessage +import org.bitcoins.node.messages.control.{ServiceIdentifier, VersionMessage} +import org.bitcoins.node.util.BitcoinSpvNodeUtil +import org.bitcoins.node.versions.ProtocolVersion +import org.bitcoins.node.messages.control.{ServiceIdentifier, VersionMessage} +import org.bitcoins.node.util.BitcoinSpvNodeUtil +import org.bitcoins.node.versions.ProtocolVersion +import scodec.bits.ByteVector + +/** + * Created by chris on 6/2/16. + * Responsible for serialization and deserialization of VersionMessages on the p2p network + * https://bitcoin.org/en/developer-reference#version + */ +trait RawVersionMessageSerializer + extends RawBitcoinSerializer[VersionMessage] + with BitcoinSLogger { + + def read(bytes: ByteVector): VersionMessage = { + val version = ProtocolVersion(bytes.take(4)) + + val services = ServiceIdentifier(bytes.slice(4, 12)) + + val timestamp = Int64(bytes.slice(12, 20).reverse) + + val addressReceiveServices = ServiceIdentifier(bytes.slice(20, 28)) + + val addressReceiveIpAddress = + InetAddress.getByAddress(bytes.slice(28, 44).toArray) + + val addressReceivePort = UInt32(bytes.slice(44, 46)).toInt + + val addressTransServices = ServiceIdentifier(bytes.slice(46, 54)) + + val addressTransIpAddress = + InetAddress.getByAddress(bytes.slice(54, 70).toArray) + + val addressTransPort = UInt32(bytes.slice(70, 72)).toInt + + val nonce = UInt64(bytes.slice(72, 80)) + + val userAgentSize = + CompactSizeUInt.parseCompactSizeUInt(bytes.slice(80, bytes.size)) + + val userAgentBytesStartIndex = 80 + userAgentSize.size.toInt + + val userAgentBytes = bytes.slice( + userAgentBytesStartIndex, + userAgentBytesStartIndex + userAgentSize.num.toInt) + + val userAgent = userAgentBytes.toArray.map(_.toChar).mkString + + val startHeightStartIndex = (userAgentBytesStartIndex + userAgentSize.num.toInt) + + val startHeight = Int32( + bytes.slice(startHeightStartIndex, startHeightStartIndex + 4).reverse) + + val relay = bytes(startHeightStartIndex + 4) != 0 + + VersionMessage( + version = version, + services = services, + timestamp = timestamp, + addressReceiveServices = addressReceiveServices, + addressReceiveIpAddress = addressReceiveIpAddress, + addressReceivePort = addressReceivePort, + addressTransServices = addressTransServices, + addressTransIpAddress = addressTransIpAddress, + addressTransPort = addressTransPort, + nonce = nonce, + userAgent = userAgent, + startHeight = startHeight, + relay = relay + ) + } + + def write(versionMessage: VersionMessage): ByteVector = { + versionMessage.version.bytes ++ + versionMessage.services.bytes ++ + versionMessage.timestamp.bytes.reverse ++ + versionMessage.addressReceiveServices.bytes ++ + BitcoinSpvNodeUtil.writeAddress(versionMessage.addressReceiveIpAddress) ++ + //encode hex returns 8 characters, but we only need the last 4 since port number is a uint16 + //check for precision loss here? + ByteVector.fromShort(versionMessage.addressReceivePort.toShort) ++ + versionMessage.addressTransServices.bytes ++ + BitcoinSpvNodeUtil.writeAddress(versionMessage.addressTransIpAddress) ++ + //encode hex returns 8 characters, but we only need the last 4 since port number is a uint16 + //check for precision loss here? + ByteVector.fromShort(versionMessage.addressTransPort.toShort) ++ + versionMessage.nonce.bytes ++ + versionMessage.userAgentSize.bytes ++ + ByteVector(versionMessage.userAgent.getBytes) ++ + versionMessage.startHeight.bytes.reverse ++ + (if (versionMessage.relay) ByteVector.fromByte(1.toByte) + else ByteVector.fromByte(0.toByte)) + } + +} + +object RawVersionMessageSerializer extends RawVersionMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawBlockMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawBlockMessageSerializer.scala new file mode 100644 index 0000000000..2b852ec0ca --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawBlockMessageSerializer.scala @@ -0,0 +1,24 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.protocol.blockchain.Block +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.node.messages.BlockMessage +import org.bitcoins.node.messages.data.BlockMessage +import org.bitcoins.node.messages.BlockMessage +import org.bitcoins.node.messages.data.BlockMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 7/8/16. + */ +trait RawBlockMessageSerializer extends RawBitcoinSerializer[BlockMessage] { + + def read(bytes: ByteVector): BlockMessage = { + val block = Block.fromBytes(bytes) + BlockMessage(block) + } + + def write(blockMsg: BlockMessage): ByteVector = blockMsg.block.bytes +} + +object RawBlockMessageSerializer extends RawBlockMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializer.scala new file mode 100644 index 0000000000..15413c64e7 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetBlocksMessageSerializer.scala @@ -0,0 +1,73 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.serializers.{RawBitcoinSerializer, RawSerializerHelper} +import org.bitcoins.node.messages.GetBlocksMessage +import org.bitcoins.node.messages.data.GetBlocksMessage +import org.bitcoins.node.versions.ProtocolVersion +import org.bitcoins.node.messages.GetBlocksMessage +import org.bitcoins.node.messages.data.GetBlocksMessage +import org.bitcoins.node.versions.ProtocolVersion +import scodec.bits.ByteVector + +import scala.annotation.tailrec + +/** + * Created by chris on 6/1/16. + * This trait is responsible for the serialization and deserialization of + * getblocks messages in on the p2p network + * https://bitcoin.org/en/developer-reference#getblocks + */ +trait RawGetBlocksMessageSerializer + extends RawBitcoinSerializer[GetBlocksMessage] { + + def read(bytes: ByteVector): GetBlocksMessage = { + val version = ProtocolVersion(bytes.take(4)) + val hashCount = + CompactSizeUInt.parseCompactSizeUInt(bytes.slice(4, bytes.size)) + val blockHeaderStartByte = (hashCount.size + 4).toInt + val blockHeaderBytesStopHash = bytes.slice(blockHeaderStartByte, bytes.size) + val (blockHashHeaders, remainingBytes) = + parseBlockHeaders(blockHeaderBytesStopHash, hashCount) + val stopHash = DoubleSha256Digest(remainingBytes.slice(0, 32)) + GetBlocksMessage(version, hashCount, blockHashHeaders, stopHash) + } + + def write(getBlocksMessage: GetBlocksMessage): ByteVector = { + getBlocksMessage.protocolVersion.bytes ++ + getBlocksMessage.hashCount.bytes ++ + RawSerializerHelper.writeNetworkElements( + getBlocksMessage.blockHeaderHashes) ++ + getBlocksMessage.stopHash.bytes + } + + /** + * Helper function to parse block headers from a sequence of bytes + * Hashes are 32 bytes + * @param bytes the bytes which need to be parsed into BlockHeader hashes + * @param compactSizeUInt the p2p network object used to indicate how many block header hashes there are + * @return the sequence of hashes and the remaining bytes that need to be parsed + */ + private def parseBlockHeaders( + bytes: ByteVector, + compactSizeUInt: CompactSizeUInt): (List[DoubleSha256Digest], ByteVector) = { + @tailrec + def loop( + remainingHeaders: Long, + accum: List[DoubleSha256Digest], + remainingBytes: ByteVector): (List[DoubleSha256Digest], ByteVector) = { + if (remainingHeaders <= 0) (accum.reverse, remainingBytes) + else { + val dsha256 = DoubleSha256Digest(remainingBytes.slice(0, 32)) + val rem = remainingBytes.slice(32, remainingBytes.size) + loop(remainingHeaders = remainingHeaders - 1, + accum = dsha256 :: accum, + remainingBytes = rem) + } + } + loop(compactSizeUInt.num.toInt, List.empty, bytes) + } +} + +object RawGetBlocksMessageSerializer extends RawGetBlocksMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializer.scala new file mode 100644 index 0000000000..aeaeb02a11 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetDataMessageSerializer.scala @@ -0,0 +1,29 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.node.messages.GetDataMessage +import org.bitcoins.node.messages.data.{GetDataMessage, InventoryMessage} +import org.bitcoins.node.messages.data.{GetDataMessage, InventoryMessage} +import scodec.bits.ByteVector + +/** + * Created by chris on 7/8/16. + * https://bitcoin.org/en/developer-reference#getdata + */ +trait RawGetDataMessageSerializer extends RawBitcoinSerializer[GetDataMessage] { + //InventoryMessages & GetDataMessages have the same structure and are serialized the same + //so we can piggy back off of the serialilzers for InventoryMessages + + def read(bytes: ByteVector): GetDataMessage = { + val inv = InventoryMessage(bytes) + GetDataMessage(inv.inventoryCount, inv.inventories) + } + + def write(getDataMessage: GetDataMessage): ByteVector = { + val inv = InventoryMessage(getDataMessage.inventoryCount, + getDataMessage.inventories) + inv.bytes + } +} + +object RawGetDataMessageSerializer extends RawGetDataMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializer.scala new file mode 100644 index 0000000000..d426e0b7a4 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawGetHeadersMessageSerializer.scala @@ -0,0 +1,68 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.serializers.{RawBitcoinSerializer, RawSerializerHelper} +import org.bitcoins.node.messages.GetHeadersMessage +import org.bitcoins.node.messages.data.GetHeadersMessage +import org.bitcoins.node.versions.ProtocolVersion +import org.bitcoins.node.messages.GetHeadersMessage +import org.bitcoins.node.messages.data.GetHeadersMessage +import org.bitcoins.node.versions.ProtocolVersion +import scodec.bits.ByteVector + +import scala.annotation.tailrec + +/** + * Created by chris on 6/29/16. + */ +trait RawGetHeadersMessageSerializer + extends RawBitcoinSerializer[GetHeadersMessage] { + + override def read(bytes: ByteVector): GetHeadersMessage = { + val version = ProtocolVersion(bytes.take(4)) + val hashCount = + CompactSizeUInt.parseCompactSizeUInt(bytes.slice(4, bytes.length)) + val hashesStartIndex = (hashCount.size + 4).toInt + val (hashes, remainingBytes) = + parseHashes(bytes.slice(hashesStartIndex, bytes.length), hashCount) + val hashStop = DoubleSha256Digest(remainingBytes.take(32)) + GetHeadersMessage(version, hashCount, hashes, hashStop) + } + + override def write(getHeadersMessage: GetHeadersMessage): ByteVector = { + getHeadersMessage.version.bytes ++ + getHeadersMessage.hashCount.bytes ++ + RawSerializerHelper.writeNetworkElements(getHeadersMessage.hashes) ++ + getHeadersMessage.hashStop.bytes + } + + /** + * Parses hashes inside of [[GetHeadersMessage]] + * + * @param bytes the bytes which the hashes are parsed from + * @param numHashes the number of hases that need to be parsed + * @return the parsed hases and the remaining bytes in the network message + */ + private def parseHashes( + bytes: ByteVector, + numHashes: CompactSizeUInt): (List[DoubleSha256Digest], ByteVector) = { + @tailrec + def loop( + remainingBytes: ByteVector, + remainingHashes: Long, + accum: List[DoubleSha256Digest]): (List[DoubleSha256Digest], ByteVector) = { + if (remainingHashes <= 0) (accum.reverse, remainingBytes) + else { + val hash = DoubleSha256Digest(remainingBytes.take(32)) + loop(remainingBytes.slice(32, remainingBytes.length), + remainingHashes - 1, + hash :: accum) + } + } + + loop(bytes, numHashes.num.toInt, List.empty) + } +} + +object RawGetHeadersMessageSerializer extends RawGetHeadersMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializer.scala new file mode 100644 index 0000000000..d1311a754b --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawHeadersMessageSerializer.scala @@ -0,0 +1,60 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.protocol.blockchain.BlockHeader +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.node.messages.HeadersMessage +import org.bitcoins.node.messages.data.HeadersMessage +import org.bitcoins.node.messages.HeadersMessage +import org.bitcoins.node.messages.data.HeadersMessage +import scodec.bits.ByteVector + +import scala.annotation.tailrec + +/** + * Created by chris on 7/5/16. + */ +trait RawHeadersMessageSerializer extends RawBitcoinSerializer[HeadersMessage] { + + def read(bytes: ByteVector): HeadersMessage = { + val compactSizeUInt = CompactSizeUInt.parseCompactSizeUInt(bytes) + val headerStartIndex = compactSizeUInt.size.toInt + val headerBytes = bytes.slice(headerStartIndex, bytes.length) + val headers = parseBlockHeaders(headerBytes, compactSizeUInt) + HeadersMessage(compactSizeUInt, headers) + } + + def write(headersMessage: HeadersMessage): ByteVector = { + val z = ByteVector.fromByte(0.toByte) + val headerBytes = headersMessage.headers.foldLeft(ByteVector.empty) { + case (accum, msg) => + accum ++ msg.bytes ++ z + } + headersMessage.count.bytes ++ headerBytes + } + + private def parseBlockHeaders( + bytes: ByteVector, + compactSizeUInt: CompactSizeUInt): Vector[BlockHeader] = { + @tailrec + def loop( + remainingBytes: ByteVector, + remainingHeaders: Long, + accum: List[BlockHeader]): List[BlockHeader] = { + if (remainingHeaders <= 0) accum + //81 is because HeadersMessage appends 0x00 at the end of every block header for some reason + //read https://bitcoin.org/en/developer-reference#headers + else { + require( + remainingBytes.size >= 80, + "We do not have enough bytes for another block header, this probably means a tcp frame was not aligned") + loop(remainingBytes = remainingBytes.slice(81, remainingBytes.length), + remainingHeaders = remainingHeaders - 1, + accum = BlockHeader(remainingBytes.take(80)) :: accum) + } + } + loop(bytes, compactSizeUInt.num.toInt, List.empty).reverse.toVector + } +} + +object RawHeadersMessageSerializer extends RawHeadersMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializer.scala new file mode 100644 index 0000000000..358c1a6bfd --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventoryMessageSerializer.scala @@ -0,0 +1,70 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.core.serializers.{RawBitcoinSerializer, RawSerializerHelper} +import org.bitcoins.node.messages.InventoryMessage +import org.bitcoins.node.messages.data.{Inventory, InventoryMessage} +import org.bitcoins.node.messages.data.{Inventory, InventoryMessage} +import scodec.bits.ByteVector + +import scala.annotation.tailrec + +/** + * Created by chris on 5/31/16. + * Serializes and deserializes inventory objects on the peer-to-peer network + * https://bitcoin.org/en/developer-reference#inv + */ +trait RawInventoryMessageSerializer + extends RawBitcoinSerializer[InventoryMessage] { + + /** + * Transforms a sequence of bytes into a Inventory object + * @param bytes + * @return + */ + override def read(bytes: ByteVector): InventoryMessage = { + val inventoryCount = CompactSizeUInt.parseCompactSizeUInt(bytes) + val inventoryStart = inventoryCount.size.toInt + val remainingBytes = bytes.slice(inventoryStart, bytes.size) + val (inventories, _) = parseInventories(remainingBytes, inventoryCount) + InventoryMessage(inventoryCount, inventories) + } + + /** + * Tranforms an inventory object into a hexadecimal string + * @param inventoryMessage + * @return + */ + override def write(inventoryMessage: InventoryMessage): ByteVector = { + val msgBytes = + RawSerializerHelper.writeNetworkElements(inventoryMessage.inventories) + inventoryMessage.inventoryCount.bytes ++ msgBytes + } + + /** + * Parses the sequence of bytes into a sequence of inventories inside of the inventory message + * @param bytes the bytes that need to be parsed into Inventories + * @param requiredInventories the num of inventories inside this sequence of bytes + * @return the sequence of inventories and the remaining bytes + */ + private def parseInventories( + bytes: ByteVector, + requiredInventories: CompactSizeUInt): (List[Inventory], ByteVector) = { + @tailrec + def loop( + remainingInventories: Long, + remainingBytes: ByteVector, + accum: List[Inventory]): (List[Inventory], ByteVector) = { + if (remainingInventories <= 0) (accum.reverse, remainingBytes) + else { + val inventory = RawInventorySerializer.read(remainingBytes.slice(0, 36)) + loop(remainingInventories - 1, + remainingBytes.slice(36, remainingBytes.size), + inventory :: accum) + } + } + loop(requiredInventories.num.toInt, bytes, List.empty) + } +} + +object RawInventoryMessageSerializer extends RawInventoryMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializer.scala new file mode 100644 index 0000000000..b0539ace82 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawInventorySerializer.scala @@ -0,0 +1,29 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.crypto.DoubleSha256Digest +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.node.messages.TypeIdentifier +import org.bitcoins.node.messages.data.Inventory +import org.bitcoins.node.messages.TypeIdentifier +import org.bitcoins.node.messages.data.Inventory +import scodec.bits.ByteVector + +/** + * Created by chris on 6/1/16. + * Serializes/deserializes a inventory + * https://bitcoin.org/en/developer-reference#term-inventory + */ +trait RawInventorySerializer extends RawBitcoinSerializer[Inventory] { + + override def read(bytes: ByteVector): Inventory = { + val typeIdentifier = TypeIdentifier(bytes.take(4)) + val hash = DoubleSha256Digest(bytes.slice(4, bytes.size)) + Inventory(typeIdentifier, hash) + } + + override def write(inventory: Inventory): ByteVector = { + inventory.typeIdentifier.bytes ++ inventory.hash.bytes + } +} + +object RawInventorySerializer extends RawInventorySerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializer.scala new file mode 100644 index 0000000000..89bc403989 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawMerkleBlockMessageSerializer.scala @@ -0,0 +1,30 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.protocol.blockchain.MerkleBlock +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.messages.MerkleBlockMessage +import org.bitcoins.node.messages.data.MerkleBlockMessage +import org.bitcoins.node.messages.MerkleBlockMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 6/2/16. + * Responsible for serialization and deserialization of MerkleBlockMessages + * https://bitcoin.org/en/developer-reference#merkleblock + */ +trait RawMerkleBlockMessageSerializer + extends RawBitcoinSerializer[MerkleBlockMessage] + with BitcoinSLogger { + + def read(bytes: ByteVector): MerkleBlockMessage = { + val merkleBlock = MerkleBlock(bytes) + MerkleBlockMessage(merkleBlock) + } + + def write(merkleBlockMessage: MerkleBlockMessage): ByteVector = + merkleBlockMessage.merkleBlock.bytes + +} + +object RawMerkleBlockMessageSerializer extends RawMerkleBlockMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializer.scala new file mode 100644 index 0000000000..814554619c --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawNotFoundMessageSerializer.scala @@ -0,0 +1,39 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.node.messages.NotFoundMessage +import org.bitcoins.node.messages.data.{InventoryMessage, NotFoundMessage} +import org.bitcoins.node.messages.NotFoundMessage +import org.bitcoins.node.messages.data.{InventoryMessage, NotFoundMessage} +import scodec.bits.ByteVector + +/** + * Created by chris on 6/2/16. + * Responsible for the serialization and deserialization of a NotFound message on the p2p network + * https://bitcoin.org/en/developer-reference#notfound + */ +trait RawNotFoundMessageSerializer + extends RawBitcoinSerializer[NotFoundMessage] { + + override def read(bytes: ByteVector): NotFoundMessage = { + //this seems funky, but according to the documentation inventory messages + //and NotFoundMessages have the same structure, therefore we can piggy back + //off of the serializer used by InventoryMessage + val inventoryMessage = InventoryMessage(bytes) + NotFoundMessage(inventoryMessage.inventoryCount, + inventoryMessage.inventories) + + } + + override def write(notFoundMessage: NotFoundMessage): ByteVector = { + //Since InventoryMessages and NotFoundMessages have the same format + //we can just create an inventory message then piggy back off of the + //serializer used by inventory message + val inventoryMessage = InventoryMessage(notFoundMessage.inventoryCount, + notFoundMessage.inventories) + inventoryMessage.bytes + } + +} + +object RawNotFoundMessageSerializer extends RawNotFoundMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializer.scala b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializer.scala new file mode 100644 index 0000000000..975b03d03e --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/serializers/messages/data/RawTransactionMessageSerializer.scala @@ -0,0 +1,28 @@ +package org.bitcoins.node.serializers.messages.data + +import org.bitcoins.core.protocol.transaction.Transaction +import org.bitcoins.core.serializers.RawBitcoinSerializer +import org.bitcoins.node.messages.TransactionMessage +import org.bitcoins.node.messages.data.TransactionMessage +import org.bitcoins.node.messages.TransactionMessage +import scodec.bits.ByteVector + +/** + * Created by chris on 6/2/16. + * Responsible for serializing and deserializing TransactionMessage network objects + * https://bitcoin.org/en/developer-reference#tx + */ +trait RawTransactionMessageSerializer + extends RawBitcoinSerializer[TransactionMessage] { + + def read(bytes: ByteVector): TransactionMessage = { + val transaction = Transaction(bytes) + TransactionMessage(transaction) + } + + def write(transactionMessage: TransactionMessage): ByteVector = { + transactionMessage.transaction.bytes + } +} + +object RawTransactionMessageSerializer extends RawTransactionMessageSerializer diff --git a/node/src/main/scala/org/bitcoins/node/store/BlockHeaderStore.scala b/node/src/main/scala/org/bitcoins/node/store/BlockHeaderStore.scala new file mode 100644 index 0000000000..aa7e33be97 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/store/BlockHeaderStore.scala @@ -0,0 +1,52 @@ +package org.bitcoins.node.store + +import java.io.FileOutputStream + +import org.bitcoins.core.protocol.blockchain.BlockHeader +import org.bitcoins.node.constant.Constants +import org.bitcoins.node.constant.Constants + +import scala.io.Source + +/** + * Created by chris on 9/5/16. + */ +trait BlockHeaderStore { + + /** Appends block headers to the given file */ + def append(headers: Seq[BlockHeader], file: java.io.File): Unit = { + printToFile(file) { p => + headers.map(_.hex).foreach(p.println) + } + } + + /** Appends block headers to the default blockheader file */ + def append(headers: Seq[BlockHeader]): Unit = + append(headers, Constants.blockHeaderFile) + + /** Reads block headers from the given file */ + def read(file: java.io.File): Seq[BlockHeader] = + (for { + line <- Source.fromFile(file).getLines() + } yield BlockHeader(line)).toSeq + + /** Reads block headers from the default [[BlockHeader]] file */ + def read: Seq[BlockHeader] = read(Constants.blockHeaderFile) + + /** Returns the last [[BlockHeader]] in the block header store */ + def lastHeader: Option[BlockHeader] = lastHeader(Constants.blockHeaderFile) + + /** Returns the last [[BlockHeader]] in the block header store */ + def lastHeader(file: java.io.File): Option[BlockHeader] = { + val headers = read(file) + if (headers.isEmpty) None else Some(headers.last) + } + + private def printToFile(f: java.io.File)( + op: java.io.PrintWriter => Unit): Unit = { + val p = new java.io.PrintWriter(new FileOutputStream(f, true)) + try { op(p) } finally { p.close() } + } +} + +object BlockHeaderStore extends BlockHeaderStore diff --git a/node/src/main/scala/org/bitcoins/node/util/BitcoinSpvNodeUtil.scala b/node/src/main/scala/org/bitcoins/node/util/BitcoinSpvNodeUtil.scala new file mode 100644 index 0000000000..d2421d445e --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/util/BitcoinSpvNodeUtil.scala @@ -0,0 +1,114 @@ +package org.bitcoins.node.util + +import java.net.InetAddress + +import akka.util.{ByteString, CompactByteString} +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.node.NetworkMessage +import org.bitcoins.node.NetworkMessage +import scodec.bits.ByteVector + +import scala.annotation.tailrec +import scala.util.{Failure, Success, Try} + +/** + * Created by chris on 6/3/16. + */ +trait BitcoinSpvNodeUtil extends BitcoinSLogger { + + /** + * Writes an ip address to the representation that the p2p network requires + * An IPv6 address is in big endian byte order + * An IPv4 address has to be mapped to an IPv6 address + * https://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses + * + * @param iNetAddress + * @return + */ + def writeAddress(iNetAddress: InetAddress): ByteVector = { + if (iNetAddress.getAddress.size == 4) { + //this means we need to convert the IPv4 address to an IPv6 address + //first we have an 80 bit prefix of zeros + val zeroBytes = Array.fill(10)(0.toByte) + //the next 16 bits are ones + val oneBytes = List(0xff.toByte, 0xff.toByte) + + val prefix: ByteVector = ByteVector(zeroBytes) ++ ByteVector(oneBytes) + val addr = prefix ++ ByteVector(iNetAddress.getAddress) + addr + } else { + ByteVector(iNetAddress.getAddress) + } + } + + /** + * Akka sends messages as one byte stream. There is not a 1 to 1 relationship between byte streams received and + * bitcoin protocol messages. This function parses our byte stream into individual network messages + * @param bytes the bytes that need to be parsed into individual messages + * @return the parsed [[NetworkMessage]]'s and the unaligned bytes that did not parse to a message + */ + def parseIndividualMessages( + bytes: ByteVector): (List[NetworkMessage], ByteVector) = { + @tailrec + def loop( + remainingBytes: ByteVector, + accum: List[NetworkMessage]): (List[NetworkMessage], ByteVector) = { + if (remainingBytes.length <= 0) { + (accum.reverse, remainingBytes) + } else { + val messageTry = Try(NetworkMessage(remainingBytes)) + messageTry match { + case Success(message) => + if (message.header.payloadSize.toInt != message.payload.bytes.size) { + //this means our tcp frame was not aligned, therefore put the message back in the + //buffer and wait for the remaining bytes + (accum.reverse, remainingBytes) + } else { + val newRemainingBytes = remainingBytes.slice( + message.bytes.length, + remainingBytes.length) + loop(newRemainingBytes, message :: accum) + } + case Failure(exception) => + logger.debug( + "Failed to parse network message, could be because tcp frame isn't aligned") + logger.debug(exception.getMessage) + //this case means that our TCP frame was not aligned with bitcoin protocol + //return the unaligned bytes so we can apply them to the next tcp frame of bytes we receive + //http://stackoverflow.com/a/37979529/967713 + (accum.reverse, remainingBytes) + } + } + } + val (messages, remainingBytes) = loop(bytes, Nil) + (messages, remainingBytes) + } + + /** + * Wraps our ByteVector into an akka [[ByteString]] object + * @param bytes + * @return + */ + def buildByteString(bytes: ByteVector): ByteString = { + CompactByteString(bytes.toArray) + } + + /** + * Creates a unique actor name for a actor + * @param className + * @return + */ + def createActorName(className: String): String = { + s"${className}-${System.currentTimeMillis()}" + } + + /** + * Creates a unique actor name for a given class + * @param className + * @return + */ + def createActorName(className: Class[_]): String = + createActorName(className.getSimpleName) +} + +object BitcoinSpvNodeUtil extends BitcoinSpvNodeUtil diff --git a/node/src/main/scala/org/bitcoins/node/util/NetworkIpAddress.scala b/node/src/main/scala/org/bitcoins/node/util/NetworkIpAddress.scala new file mode 100644 index 0000000000..0353e3ee92 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/util/NetworkIpAddress.scala @@ -0,0 +1,90 @@ +package org.bitcoins.node.util + +import java.net.{InetAddress, InetSocketAddress} + +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.protocol.NetworkElement +import org.bitcoins.core.util.Factory +import org.bitcoins.node.messages.control.{NodeNetwork, ServiceIdentifier} +import org.bitcoins.node.messages.control.ServiceIdentifier +import org.bitcoins.node.serializers.messages.control.RawNetworkIpAddressSerializer +import scodec.bits.ByteVector + +/** + * Created by chris on 5/31/16. + * Encapsulated network IP address currently uses the following structure + * https://bitcoin.org/en/developer-reference#addr + */ +sealed abstract class NetworkIpAddress extends NetworkElement { + + /** + * Added in protocol version 31402. + * A time in Unix epoch time format. Nodes advertising their own IP address set this to the current time. + * Nodes advertising IP addresses they’ve connected to set this to the last time they connected to that node. + * Other nodes just relaying the IP address should not change the time. + * Nodes can use the time field to avoid relaying old addr messages. + * Malicious nodes may change times or even set them in the future. + * + * @return + */ + def time: UInt32 + + /** + * The services the node advertised in its version message. + * + * @return + */ + def services: ServiceIdentifier + + /** + * IPv6 address in big endian byte order. + * IPv4 addresses can be provided as IPv4-mapped IPv6 addresses + * + * @return + */ + def address: InetAddress + + /** + * Port number in big endian byte order. + * Note that Bitcoin Core will only connect to nodes with non-standard port numbers as + * a last resort for finding peers. This is to prevent anyone from trying to use the + * network to disrupt non-Bitcoin services that run on other ports. + * + * @return + */ + def port: Int + + override def bytes: ByteVector = RawNetworkIpAddressSerializer.write(this) +} + +object NetworkIpAddress extends Factory[NetworkIpAddress] { + private case class NetworkIpAddressImpl( + time: UInt32, + services: ServiceIdentifier, + address: InetAddress, + port: Int) + extends NetworkIpAddress + + def apply( + time: UInt32, + services: ServiceIdentifier, + address: InetAddress, + port: Int): NetworkIpAddress = { + NetworkIpAddressImpl(time, services, address, port) + } + + def fromBytes(bytes: ByteVector): NetworkIpAddress = + RawNetworkIpAddressSerializer.read(bytes) + + def fromInetSocketAddress(socket: InetSocketAddress): NetworkIpAddress = { + //TODO: this might be wrong, read this time documentation above + val timestamp = UInt32(System.currentTimeMillis() / 1000) + + NetworkIpAddress( + time = timestamp, + services = NodeNetwork, + address = socket.getAddress, + port = socket.getPort + ) + } +} diff --git a/node/src/main/scala/org/bitcoins/node/versions/ProtocolVersion.scala b/node/src/main/scala/org/bitcoins/node/versions/ProtocolVersion.scala new file mode 100644 index 0000000000..4ec502c975 --- /dev/null +++ b/node/src/main/scala/org/bitcoins/node/versions/ProtocolVersion.scala @@ -0,0 +1,163 @@ +package org.bitcoins.node.versions + +import org.bitcoins.core.protocol.NetworkElement +import org.bitcoins.core.util.Factory +import scodec.bits.ByteVector + +/** + * Created by chris on 6/1/16. + * The peer to peer network has versions to allow for new operations + * Here are the currently protocol versions in the network + * [[https://bitcoin.org/en/developer-reference#protocol-versions]] + */ +sealed trait ProtocolVersion extends NetworkElement + +object ProtocolVersion extends Factory[ProtocolVersion] { + + val versions: Seq[ProtocolVersion] = List( + ProtocolVersion106, + ProtocolVersion209, + ProtocolVersion311, + ProtocolVersion31402, + ProtocolVersion31800, + ProtocolVersion60000, + ProtocolVersion60001, + ProtocolVersion60002, + ProtocolVersion70001, + ProtocolVersion70002, + ProtocolVersion70012 + ) + + def fromBytes(bytes: ByteVector): ProtocolVersion = { + //TODO: Should we default to the latest protocol version if the bytes don't match??? + versions.find(v => v.bytes == bytes).getOrElse(ProtocolVersion70015) + } +} + +/** + * Added receive IP address fields to version message. + * Bitcoin Core 0.1.6 (Oct 2009) + */ +case object ProtocolVersion106 extends ProtocolVersion { + override val bytes: ByteVector = ByteVector.fromHex("6a000000").get +} + +/** + * Added checksum field to message headers. + * Bitcoin Core 0.2.9 (May 2010) + */ +case object ProtocolVersion209 extends ProtocolVersion { + override val bytes: ByteVector = ByteVector.fromHex("d1000000").get +} + +/** + * Added alert message + * Bitcion Core 0.3.11 (Aug 2010) + */ +case object ProtocolVersion311 extends ProtocolVersion { + override val bytes: ByteVector = ByteVector.fromHex("37010000").get +} + +/** + * Added time field to addr message. + * Bitcoin Core 0.3.15 (Oct 2010) + */ +case object ProtocolVersion31402 extends ProtocolVersion { + override val bytes: ByteVector = ByteVector.fromHex("aa7a0000").get +} + +/** + * Added getheaders message and headers message. + * Bitcoin Core 0.3.18 (Dec 2010) + */ +case object ProtocolVersion31800 extends ProtocolVersion { + override val bytes: ByteVector = ByteVector.fromHex("387c0000").get +} + +/** + * BIP14: Separated protocol version from Bitcoin Core version + * Bitcoin Core 0.6.0 (Mar 2012) + */ +case object ProtocolVersion60000 extends ProtocolVersion { + override val bytes: ByteVector = ByteVector.fromHex("60ea0000").get +} + +/** + * BIP31: Added nonce field to ping message, Added pong message + * Bitcoin Core 0.6.1 (May 2012) + */ +case object ProtocolVersion60001 extends ProtocolVersion { + override val bytes: ByteVector = ByteVector.fromHex("61ea0000").get +} + +/** + * BIP35: Added mempool message. + *• Extended getdata message to allow download of memory pool transactions + * Bitcoin Core 0.7.0 (Sep 2012) + */ +case object ProtocolVersion60002 extends ProtocolVersion { + override val bytes: ByteVector = ByteVector.fromHex("62ea0000").get +} + +/** + * Added notfound message. + * BIP37: + *• Added filterload message. + *• Added filteradd message. + *• Added filterclear message. + *• Added merkleblock message. + *• Added relay field to version message + *• Added MSG_FILTERED_BLOCK inventory type to getdata message. + * Bitcoin Core 0.8.0 (Feb 2013) + */ +case object ProtocolVersion70001 extends ProtocolVersion { + override val bytes: ByteVector = ByteVector.fromHex("71110100").get +} + +/** + * Send multiple inv messages in response to a mempool message if necessary + * BIP61: Add reject message + * Bitcoin Core 0.9.0 (Mar 2014) + */ +case object ProtocolVersion70002 extends ProtocolVersion { + override val bytes: ByteVector = ByteVector.fromHex("72110100").get +} + +/** + * BIP130: Add sendheaders message + * Bitcoin Core 0.12.0 + */ +case object ProtocolVersion70012 extends ProtocolVersion { + override val bytes: ByteVector = ByteVector.fromHex("7c110100").get +} + +/** + * Added feefilter message. + * Removed alert message system. See Alert System Retirement + * Bitcoin Core 0.13.0 (August 2016) + */ +case object ProtocolVersion70013 extends ProtocolVersion { + override val bytes: ByteVector = ByteVector.fromHex("7d110100").get +} + +/** + * BIP152 + * Added sendcmpct, cmpctblock, getblocktxn, blocktxn messages + * Added MSG_CMPCT_BLOCK inventory type to getdata message. + * Bitcoin Core 0.13.0 (August 2016) + */ +case object ProtocolVersion70014 extends ProtocolVersion { + override val bytes: ByteVector = ByteVector.fromHex("7e110100").get +} + +/** + * New banning behavior for invalid compact blocks #9026 in v0.14.0, Backported to v0.13.2 in #9048. + * Bitcoin Core 0.13.2 (January 2017) + */ +case object ProtocolVersion70015 extends ProtocolVersion { + override val bytes: ByteVector = ByteVector.fromHex("7f110100").get +} + + + + diff --git a/project/Deps.scala b/project/Deps.scala index 1eb29e3197..eff3bf040b 100644 --- a/project/Deps.scala +++ b/project/Deps.scala @@ -9,7 +9,7 @@ object Deps { val scalaTest = "3.0.5" val slf4j = "1.7.5" val spray = "1.3.2" - val zeromq = "0.4.3" + val zeromq = "0.5.1" val akkav = "10.1.7" val akkaStreamv = "2.5.21" val playv = "2.7.0" @@ -18,7 +18,14 @@ object Deps { val nativeLoaderV = "2.3.2" val typesafeConfigV = "1.3.3" val ammoniteV = "1.6.2" + val asyncV = "0.9.7" + val jodaV = "2.9.4" + val postgresV = "9.4.1210" + val akkaActorV = akkaStreamv + val slickV = "3.3.0" + val sqliteV = "3.8.11.2" + val uJsonV = "0.7.1" } object Compile { @@ -28,6 +35,7 @@ object Deps { val zeromq = "org.zeromq" % "jeromq" % V.zeromq withSources () withJavadoc () val akkaHttp = "com.typesafe.akka" %% "akka-http" % V.akkav withSources () withJavadoc () val akkaStream = "com.typesafe.akka" %% "akka-stream" % V.akkaStreamv withSources () withJavadoc () + val akkaActor = "com.typesafe.akka" %% "akka-actor" % V.akkaStreamv withSources () withJavadoc () val playJson = "com.typesafe.play" %% "play-json" % V.playv withSources () withJavadoc () val typesafeConfig = "com.typesafe" % "config" % V.typesafeConfigV withSources () withJavadoc () @@ -36,6 +44,18 @@ object Deps { //for loading secp256k1 natively val nativeLoader = "org.scijava" % "native-lib-loader" % V.nativeLoaderV withSources () withJavadoc () val ammonite = "com.lihaoyi" %% "ammonite" % V.ammoniteV cross CrossVersion.full + + //node deps + val joda = "joda-time" % "joda-time" % V.jodaV + + val slick = "com.typesafe.slick" %% "slick" % V.slickV withSources () withJavadoc () + val slickHikari = "com.typesafe.slick" %% "slick-hikaricp" % V.slickV + val sqlite = "org.xerial" % "sqlite-jdbc" % V.sqliteV + val postgres = "org.postgresql" % "postgresql" % V.postgresV + val uJson = "com.lihaoyi" %% "ujson" % V.uJsonV + + val scalacheck = "org.scalacheck" %% "scalacheck" % V.scalacheck withSources () withJavadoc () + val scalaTest = "org.scalatest" %% "scalatest" % V.scalaTest withSources () withJavadoc () } object Test { @@ -44,20 +64,31 @@ object Deps { val bitcoinj = ("org.bitcoinj" % "bitcoinj-core" % "0.14.4" % "test") .exclude("org.slf4j", "slf4j-api") val junitInterface = "com.novocode" % "junit-interface" % V.junitV % "test" withSources () withJavadoc () - val logback = "ch.qos.logback" % "logback-classic" % V.logback % "test" withSources () withJavadoc () - val scalacheck = "org.scalacheck" %% "scalacheck" % V.scalacheck % "test" withSources () withJavadoc () - val scalaTest = "org.scalatest" %% "scalatest" % V.scalaTest % "test" withSources () withJavadoc () + val logback = Compile.logback % "test" + val scalacheck = Compile.scalacheck % "test" + val scalaTest = Compile.scalaTest % "test" val spray = "io.spray" %% "spray-json" % V.spray % "test" withSources () withJavadoc () val akkaHttp = "com.typesafe.akka" %% "akka-http-testkit" % V.akkav % "test" withSources () withJavadoc () val akkaStream = "com.typesafe.akka" %% "akka-stream-testkit" % V.akkaStreamv % "test" withSources () withJavadoc () val ammonite = Compile.ammonite % "test" val playJson = Compile.playJson % "test" + val akkaTestkit = "com.typesafe.akka" %% "akka-testkit" % V.akkaActorV withSources () withJavadoc () } val root = List( Test.ammonite ) + val chain = List( + Compile.slf4j, + Test.ammonite + ) + + val chainTest = List( + Test.ammonite, + Test.logback + ) + val core = List( Compile.bouncycastle, Compile.scodec, @@ -115,6 +146,13 @@ object Deps { Test.ammonite ) + val dbCommons = List( + Compile.slick, + Compile.sqlite, + Compile.slickHikari, + Test.ammonite + ) + val eclairRpc = List( Compile.akkaHttp, Compile.akkaStream, @@ -132,14 +170,47 @@ object Deps { Test.ammonite ) + val node = List( + Compile.akkaActor, + Compile.logback, + Compile.joda, + Compile.slick, + Compile.slickHikari, + Compile.sqlite, + Test.ammonite + ) + + val nodeTest = List( + Test.akkaTestkit, + Test.logback, + Test.scalaTest, + Test.ammonite + ) + val testkit = List( Compile.slf4j, - "org.scalacheck" %% "scalacheck" % V.scalacheck withSources () withJavadoc (), - "org.scalatest" %% "scalatest" % V.scalaTest withSources () withJavadoc (), + Compile.scalacheck, + Compile.scalaTest, Test.ammonite ) val scripts = List( + Compile.ammonite, + Compile.logback + ) + + val wallet = List( + Test.ammonite, + Compile.uJson + ) + + val walletTest = List( + Test.logback, + Test.akkaTestkit, + Test.ammonite + ) + + val doc = List( Compile.ammonite, Compile.logback, Test.scalaTest, diff --git a/project/plugins.sbt b/project/plugins.sbt index 5e4ca2b592..0e585e677a 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -25,3 +25,5 @@ addSbtPlugin("com.geirsson" % "sbt-ci-release" % "1.2.6") // write markdown files with type-checked Scala addSbtPlugin("org.scalameta" % "sbt-mdoc" % "1.3.0") + +addSbtPlugin("io.github.davidmweber" % "flyway-sbt" % "5.2.0") diff --git a/secp256k1jni/natives/linux_64/libsecp256k1.la b/secp256k1jni/natives/linux_64/libsecp256k1.la deleted file mode 120000 index 6036d76b90..0000000000 --- a/secp256k1jni/natives/linux_64/libsecp256k1.la +++ /dev/null @@ -1 +0,0 @@ -../libsecp256k1.la \ No newline at end of file diff --git a/testkit/src/main/resources/application.conf b/testkit/src/main/resources/application.conf new file mode 100644 index 0000000000..49800e5ab0 --- /dev/null +++ b/testkit/src/main/resources/application.conf @@ -0,0 +1,19 @@ +bitcoin-s { + datadir = ${HOME}/.bitcoin-s/.unittest + + database { + db { + # run against a file-based database + # url="jdbc:sqlite:"${dbPath}${dbName} + + # run against an in-memory database + # cache=shared is needed to make it persist across DB connections + # (each query is one connection). DB is wiped on JVM being killed + # with this option set. + url = "jdbc:sqlite:file::memory:?cache=shared" + + connectionPool = disabled + keepAliveConnection = true + } + } +} \ No newline at end of file diff --git a/testkit/src/main/resources/logback-test.xml b/testkit/src/main/resources/logback-test.xml new file mode 100644 index 0000000000..a84a24c11d --- /dev/null +++ b/testkit/src/main/resources/logback-test.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/BlockHeaderHelper.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/BlockHeaderHelper.scala new file mode 100644 index 0000000000..1d14987d97 --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/BlockHeaderHelper.scala @@ -0,0 +1,137 @@ +package org.bitcoins.testkit.chain + +import org.bitcoins.chain.models.{BlockHeaderDb, BlockHeaderDbHelper} +import org.bitcoins.chain.validation.TipValidation +import org.bitcoins.core.crypto.{ + DoubleSha256Digest, + DoubleSha256DigestBE, + ECPrivateKey +} +import org.bitcoins.core.number.{Int32, UInt32} +import org.bitcoins.core.protocol.blockchain.BlockHeader + +import scala.annotation.tailrec + +/** Useful helper methods for getting + * block header related data for + * unit tests. + */ +abstract class BlockHeaderHelper { + + /** + * The previous block to this was [[header2]] + * @see [[https://blockstream.info/block/0000000000000000002339403dedc19ae93f6f3912d364b42f568afa1ba7cfec height #566,093]] + */ + val header1: BlockHeader = { + val hex = + "00000020b45e33a345ad08ad2902cdd4101632fcbec009694b0c2500000000000000000016c99a795d8e0105d86f361341c7858d223fac261718bd608052822c5b4ae3cfd782815c505b2e17a56bb90b" + BlockHeader.fromHex(hex) + } + + val header1Db: BlockHeaderDb = { + BlockHeaderDbHelper.fromBlockHeader(566093, header1) + } + + /** + * The next block is [[header1]] after this block + * 000000000000000000250c4b6909c0befc321610d4cd0229ad08ad45a3335eb4 + * @see [[https://blockstream.info/block/000000000000000000250c4b6909c0befc321610d4cd0229ad08ad45a3335eb4 #566,092]] + */ + val header2: BlockHeader = { + val hex = + "00000020a82ff9c62e69a6cbed277b7f2a9ac9da3c7133a59a6305000000000000000000f6cd5708a6ba38d8501502b5b4e5b93627e8dcc9bd13991894c6e04ade262aa99582815c505b2e17479a751b" + BlockHeader.fromHex(hex) + } + + val header2Db: BlockHeaderDb = { + BlockHeaderDbHelper.fromBlockHeader(566092, header2) + } + + lazy val twoValidHeaders: Vector[BlockHeader] = { + //https://blockstream.info/block/0000000000000000002339403dedc19ae93f6f3912d364b42f568afa1ba7cfec?expand + val headers = Vector(header1, header2) + headers + } + + /** Gives us a block header that has a bad prev hash (can't connect to anything */ + lazy val badPrevHash: BlockHeader = { + BlockHeaderHelper.withPrevhash(bh = header1, + newPrevHash = DoubleSha256DigestBE.empty) + } + + lazy val badNonce: BlockHeader = { + BlockHeaderHelper.withNonce(bh = header1, newNonce = UInt32.zero) + } + + lazy val badNBits: BlockHeader = { + BlockHeaderHelper.withNBits(bh = header1, newNBits = UInt32.zero) + } + + /** Modifies the given block header with the newPrevHash */ + def withPrevhash( + bh: BlockHeader, + newPrevHash: DoubleSha256DigestBE): BlockHeader = { + BlockHeader(version = bh.version, + previousBlockHash = newPrevHash.flip, + merkleRootHash = bh.merkleRootHash, + time = bh.time, + nBits = bh.nBits, + nonce = bh.nonce) + } + + /** Modifies the given block header with the new nonce */ + def withNonce(bh: BlockHeader, newNonce: UInt32): BlockHeader = { + BlockHeader(version = bh.version, + previousBlockHash = bh.previousBlockHash, + merkleRootHash = bh.merkleRootHash, + time = bh.time, + nBits = bh.nBits, + nonce = newNonce) + } + + /** Modifies the given block header with the new nBits */ + def withNBits(bh: BlockHeader, newNBits: UInt32): BlockHeader = { + BlockHeader(version = bh.version, + previousBlockHash = bh.previousBlockHash, + merkleRootHash = bh.merkleRootHash, + time = bh.time, + nBits = newNBits, + nonce = bh.nonce) + } + + /** Buidls a block header on top the given prev header + * The only consensus requirement that this method adheres to + * with the returned [[BlockHeaderDb]] is that + * 1. We reference the [[prevHeader.blockHeader.hash]] correct + * 2. We increment the height of [[prevHeader]] by one + * @param prevHeader + * @return + */ + @tailrec + final def buildNextHeader(prevHeader: BlockHeaderDb): BlockHeaderDb = { + val prevHash = prevHeader.blockHeader.hash + val blockHeader = { + BlockHeader( + version = Int32.one, + previousBlockHash = prevHash, + //get random 32 bytes + merkleRootHash = + DoubleSha256Digest.fromBytes(ECPrivateKey.freshPrivateKey.bytes), + time = prevHeader.time + UInt32.one, + nBits = prevHeader.nBits, + //generate random uint32 for nonce + nonce = + UInt32(Math.abs(scala.util.Random.nextInt() % UInt32.max.toLong)) + ) + } + + //check if header meets pow requirement, if it doesn't generate another + if (TipValidation.isBadNonce(blockHeader)) { + buildNextHeader(prevHeader) + } else { + BlockHeaderDbHelper.fromBlockHeader(prevHeader.height + 1, blockHeader) + } + } +} + +object BlockHeaderHelper extends BlockHeaderHelper diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/ChainTestUtil.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/ChainTestUtil.scala new file mode 100644 index 0000000000..72274ef90c --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/ChainTestUtil.scala @@ -0,0 +1,84 @@ +package org.bitcoins.testkit.chain + +import org.bitcoins.chain.models.{BlockHeaderDb, BlockHeaderDbHelper} +import org.bitcoins.core.crypto +import org.bitcoins.core.crypto.DoubleSha256DigestBE +import org.bitcoins.core.protocol.blockchain.{ + BlockHeader, + MainNetChainParams, + RegTestNetChainParams +} +import org.bitcoins.rpc.client.common.BitcoindRpcClient + +import scala.concurrent.{ExecutionContext, Future} + +sealed abstract class ChainTestUtil { + lazy val regTestChainParams: RegTestNetChainParams.type = + RegTestNetChainParams + lazy val regTestHeader: BlockHeader = + regTestChainParams.genesisBlock.blockHeader + lazy val regTestGenesisHeaderDb: BlockHeaderDb = { + BlockHeaderDbHelper.fromBlockHeader(height = 0, bh = regTestHeader) + } + + lazy val mainnetChainParam: MainNetChainParams.type = MainNetChainParams + + lazy val blockHeader562375 = BlockHeader.fromHex( + "0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c") + + lazy val blockHeader562462 = BlockHeader.fromHex( + "0100000053fb045b4d3ca149faca8e7ea53cdb3168bc58b875e47196b3a6b3f100000000406468307c915485a9c9eabe31cc853e68311176e07e71475c3e26888fb7b7ed30846949ffff001d2b740f74") + + lazy val blockHeader562463 = BlockHeader.fromHex( + "010000003ce6c27ae14022e4b6ea0a5c3633d156e3e3a47509c1adf085371ba300000000f01258747019514aa5c475cddd59a309347280ead98d19d8df8f9f99eb56757938866949ffff001d18bcb4f8") + + lazy val blockHeader562464 = BlockHeader.fromHex( + "010000004bd0b78e90c6b0f361f395535ac170980de0c8214380daefce31fd1100000000282c9db8313817b4835efab229872eae2b8b5011c2e90ed14e57192984da062359896949ffff001d15c6aed8") + + /** Contains block headers where a proof of work change is valid */ + object ValidPOWChange { + + //this is the first block in the 2016 block proof of work difficulty change interval + //https://blockstream.info/block/0000000000000000002567dc317da20ddb0d7ef922fe1f9c2375671654f9006c + lazy val blockHeader564480 = BlockHeader.fromHex( + "000000200cd536b3eb1cd9c028e081f1455006276b293467c3e5170000000000000000007bc1b27489db01c85d38a4bc6d2280611e9804f506d83ad00d2a33ebd663992f76c7725c505b2e174fb90f55") + + lazy val blockHeaderDb564480 = + BlockHeaderDbHelper.fromBlockHeader(564480, blockHeader564480) + + lazy val blockHeader566494 = BlockHeader.fromHex( + "00000020ea2cb07d670ddb7a158e72ddfcfd9e1b9bf4459278bb240000000000000000004fb33054d79de69bb84b4d5c7dd87d80473c416320427a882c72108f7e43fd0c3d3e855c505b2e178f328fe2") + + lazy val blockHeaderDb566494 = + BlockHeaderDbHelper.fromBlockHeader(566594, blockHeader566494) + + lazy val blockHeader566495 = BlockHeader.fromHex( + "000000202164d8c4e5246ab003fdebe36c697b9418aa454ec4190d00000000000000000059134ad5aaad38a0e75946c7d4cb09b3ad45b459070195dd564cde193cf0ef29c33e855c505b2e17f61af734") + + lazy val blockHeaderDb566495 = + BlockHeaderDbHelper.fromBlockHeader(566495, blockHeader566495) + + //https://blockstream.info/block/00000000000000000015fea169c62eb0a1161aba36932ca32bc3785cbb3480bf + lazy val blockHeader566496 = BlockHeader.fromHex( + "000000201b61e8961710991a47ff8187d946d93e4fb33569c09622000000000000000000d0098658f53531e6e67fc9448986b5a8f994da42d746079eabe10f55e561e243103f855c17612e1735c4afdb") + + lazy val blockHeaderDb566496 = + BlockHeaderDbHelper.fromBlockHeader(566496, blockHeader566496) + } + + /** Creates a best block header function for [[org.bitcoins.chain.blockchain.sync.ChainSync.sync() ChainSync.sync]] */ + def bestBlockHashFnRpc(bitcoindF: Future[BitcoindRpcClient])( + implicit ec: ExecutionContext): () => Future[DoubleSha256DigestBE] = { + () => + bitcoindF.flatMap(_.getBestBlockHash) + } + + /** Creates a getBlocKHeader function for [[org.bitcoins.chain.blockchain.sync.ChainSync.sync() ChainSync.sync]] */ + def getBlockHeaderFnRpc(bitcoindF: Future[BitcoindRpcClient])( + implicit ec: ExecutionContext): DoubleSha256DigestBE => Future[ + BlockHeader] = { hash: crypto.DoubleSha256DigestBE => + bitcoindF.flatMap(_.getBlockHeader(hash).map(_.blockHeader)) + } +} + +object ChainTestUtil extends ChainTestUtil diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/ChainUnitTest.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/ChainUnitTest.scala new file mode 100644 index 0000000000..d1987ae346 --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/ChainUnitTest.scala @@ -0,0 +1,419 @@ +package org.bitcoins.testkit.chain + +import java.net.InetSocketAddress + +import akka.actor.ActorSystem +import com.typesafe.config.ConfigFactory +import org.bitcoins.chain.blockchain.ChainHandler +import org.bitcoins.chain.config.ChainAppConfig +import org.bitcoins.chain.db.ChainDbManagement +import org.bitcoins.chain.models.{ + BlockHeaderDAO, + BlockHeaderDb, + BlockHeaderDbHelper +} +import org.bitcoins.core.protocol.blockchain.{Block, BlockHeader, ChainParams} +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.db.AppConfig +import org.bitcoins.rpc.client.common.BitcoindRpcClient +import org.bitcoins.testkit.chain +import org.bitcoins.testkit.chain.fixture._ +import org.bitcoins.testkit.fixtures.BitcoinSFixture +import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil +import org.bitcoins.zmq.ZMQSubscriber +import org.scalatest._ +import play.api.libs.json.{JsError, JsSuccess, Json} +import scodec.bits.ByteVector + +import scala.annotation.tailrec +import scala.concurrent.duration._ +import scala.concurrent.{ExecutionContext, Future} + +trait ChainUnitTest + extends org.scalatest.fixture.AsyncFlatSpec + with BitcoinSFixture + with ChainFixtureHelper + with MustMatchers + with BitcoinSLogger + with BeforeAndAfter + with BeforeAndAfterAll { + + implicit def system: ActorSystem + + val timeout: FiniteDuration = 10.seconds + + implicit lazy val chainParam: ChainParams = appConfig.chain + + implicit lazy val appConfig: ChainAppConfig = ChainAppConfig() + + /** + * Behaves exactly like the default conf, execpt + * network is set to mainnet + */ + lazy val mainnetAppConfig: ChainAppConfig = { + val defaultConfig = ChainAppConfig() + val mainnetConf = ConfigFactory.parseString("bitcoin-s.network = mainnet") + defaultConfig.withOverrides(mainnetConf) + } + + override def beforeAll(): Unit = { + AppConfig.throwIfDefaultDatadir(appConfig) + } + + implicit def ec: ExecutionContext = + system.dispatcher + + /** + * All untagged tests will be given this tag. Override this if you are using + * ChainFixture and the plurality of tests use some fixture other than Empty. + */ + val defaultTag: ChainFixtureTag = ChainFixtureTag.Empty + + def withChainFixture(test: OneArgAsyncTest): FutureOutcome = { + val stringTag = + test.tags.headOption.getOrElse(ChainFixtureTag.defaultTag.name) + + val fixtureTag: ChainFixtureTag = ChainFixtureTag.from(stringTag) + + val fixtureF: Future[ChainFixture] = createFixture(fixtureTag) + + val outcomeF = fixtureF.flatMap(fixture => + test(fixture.asInstanceOf[FixtureParam]).toFuture) + + val fixtureTakeDownF = outcomeF.flatMap { outcome => + val destroyedF = + fixtureF.flatMap(fixture => destroyFixture(fixture)) + + destroyedF.map(_ => outcome) + } + + new FutureOutcome(fixtureTakeDownF) + } + + /** + * This is a wrapper for a tagged test statement that adds a def inFixtured + * to replace the use of in, which only accepts a FixtureParam => Future[Assertion], + * whereas inFixtured accepts a PartialFunction and fails the test if it is not + * defined on the input. + * + * This is nothing more than syntactic sugar. + * + * This functionality is added using language.implicitConversions below + */ + final class SugaryItVerbStringTaggedAs( + itVerbStringTaggedAs: ItVerbStringTaggedAs) { + + def inFixtured( + partialTestFun: PartialFunction[ + FixtureParam, + Future[compatible.Assertion]])( + implicit pos: org.scalactic.source.Position): Unit = { + val testFun: FixtureParam => Future[compatible.Assertion] = { + fixture: FixtureParam => + partialTestFun.applyOrElse[FixtureParam, Future[Assertion]](fixture, { + _: FixtureParam => + Future.successful(fail("Incorrect tag/fixture for this test")) + }) + } + + itVerbStringTaggedAs.in(testFun)(pos) + } + } + + /** + * This is a wrapper for a tagged test statement that adds a def inFixtured + * to replace the use of in, which only accepts a FixtureParam => Future[Assertion], + * whereas inFixtured accepts a PartialFunction and fails the test if it is not + * defined on the input. + * + * This is nothing more than syntactic sugar. + * + * This functionality is added using language.implicitConversions below + */ + final class SugaryItVerbString(itVerbString: ItVerbString) { + + def inFixtured( + partialTestFun: PartialFunction[ + FixtureParam, + Future[compatible.Assertion]])( + implicit pos: org.scalactic.source.Position): Unit = { + val testFun: FixtureParam => Future[compatible.Assertion] = { + fixture: FixtureParam => + partialTestFun.applyOrElse[FixtureParam, Future[Assertion]](fixture, { + _: FixtureParam => + Future.successful(fail("Incorrect tag/fixture for this test")) + }) + } + + itVerbString.in(testFun)(pos) + } + } + + import language.implicitConversions + + implicit def itVerbStringTaggedAsToSugaryItVerbStringTaggedAs( + itVerbStringTaggedAs: ItVerbStringTaggedAs): SugaryItVerbStringTaggedAs = + new SugaryItVerbStringTaggedAs(itVerbStringTaggedAs) + + implicit def itVerbStringToSugaryItVerbString( + itVerbString: ItVerbString): SugaryItVerbString = + new SugaryItVerbString(itVerbString) + + /** + * Fixture that creates a [[org.bitcoins.chain.models.BlockHeaderTable]] + * with one row inserted into it, the [[org.bitcoins.core.protocol.blockchain.RegTestNetChainParams]] + * genesis block + */ + def withBlockHeaderDAO(test: OneArgAsyncTest): FutureOutcome = { + makeFixture(build = () => ChainUnitTest.createBlockHeaderDAO, + destroy = () => ChainUnitTest.destroyHeaderTable)(test) + } + + def withPopulatedBlockHeaderDAO(test: OneArgAsyncTest): FutureOutcome = { + makeFixture(build = () => ChainUnitTest.createPopulatedBlockHeaderDAO, + destroy = () => ChainUnitTest.destroyHeaderTable)(test) + } + + def withChainHandler(test: OneArgAsyncTest): FutureOutcome = { + makeFixture(() => ChainUnitTest.createChainHandler, + () => ChainUnitTest.destroyHeaderTable)(test) + } + + /** Creates and populates BlockHeaderTable with block headers 562375 to 571375 */ + def createPopulatedChainHandler(): Future[ChainHandler] = { + for { + blockHeaderDAO <- ChainUnitTest.createPopulatedBlockHeaderDAO() + } yield ChainHandler(blockHeaderDAO = blockHeaderDAO, appConfig) + } + + def withPopulatedChainHandler(test: OneArgAsyncTest): FutureOutcome = { + makeFixture(() => createPopulatedChainHandler, + () => ChainUnitTest.destroyHeaderTable)(test) + } + + def createChainHandlerWithBitcoindZmq( + bitcoind: BitcoindRpcClient): Future[(ChainHandler, ZMQSubscriber)] = { + val (chainHandler, genesisHeaderF) = + ChainUnitTest.setupHeaderTableWithGenesisHeader() + + val zmqRawBlockUriOpt: Option[InetSocketAddress] = + bitcoind.instance.zmqConfig.rawBlock + + val handleRawBlock: ByteVector => Unit = { bytes: ByteVector => + val block = Block.fromBytes(bytes) + chainHandler.processHeader(block.blockHeader) + + () + } + + val socket = zmqRawBlockUriOpt.get + val zmqSubscriber = + new ZMQSubscriber(socket = socket, + hashTxListener = None, + hashBlockListener = None, + rawTxListener = None, + rawBlockListener = Some(handleRawBlock)) + zmqSubscriber.start() + Thread.sleep(1000) + + genesisHeaderF.map(_ => (chainHandler, zmqSubscriber)) + } + + def createChainApiWithBitcoindRpc( + bitcoind: BitcoindRpcClient): Future[BitcoindChainHandlerViaRpc] = { + val (handler, genesisHeaderF) = + ChainUnitTest.setupHeaderTableWithGenesisHeader() + + genesisHeaderF.map { _ => + chain.fixture.BitcoindChainHandlerViaRpc(bitcoind, handler) + } + + } + + def createBitcoindChainHandlerViaZmq(): Future[BitcoindChainHandlerViaZmq] = { + composeBuildersAndWrap(() => createBitcoind, + createChainHandlerWithBitcoindZmq, + BitcoindChainHandlerViaZmq.apply)() + } + + def destroyBitcoindChainHandlerViaZmq( + bitcoindChainHandler: BitcoindChainHandlerViaZmq): Future[Unit] = { + + //piggy back off of rpc destructor + val rpc = chain.fixture.BitcoindChainHandlerViaRpc( + bitcoindChainHandler.bitcoindRpc, + bitcoindChainHandler.chainHandler) + + destroyBitcoindChainApiViaRpc(rpc).map { _ => + bitcoindChainHandler.zmqSubscriber.stop + } + } + + def destroyBitcoindChainApiViaRpc( + bitcoindChainHandler: BitcoindChainHandlerViaRpc): Future[Unit] = { + val stopBitcoindF = + BitcoindRpcTestUtil.stopServer(bitcoindChainHandler.bitcoindRpc) + val dropTableF = ChainUnitTest.destroyHeaderTable() + stopBitcoindF.flatMap(_ => dropTableF) + } + + /** + * Creates a [[BitcoindRpcClient bitcoind]] that is linked to our [[ChainHandler bitcoin-s chain handler]] + * via a [[org.bitcoins.zmq.ZMQSubscriber zmq]]. This means messages are passed between bitcoin and our chain handler + * with a zmq pub/sub message passing + * @param test the test to be executed with bitcoind and chain handler via zmq + * @param system + * @return + */ + def withBitcoindChainHandlerViaZmq(test: OneArgAsyncTest)( + implicit system: ActorSystem): FutureOutcome = { + val builder: () => Future[BitcoindChainHandlerViaZmq] = + composeBuildersAndWrap(builder = () => createBitcoind, + dependentBuilder = + createChainHandlerWithBitcoindZmq, + wrap = BitcoindChainHandlerViaZmq.apply) + + makeDependentFixture(builder, destroyBitcoindChainHandlerViaZmq)(test) + } + + def withBitcoindChainHandlerViaRpc(test: OneArgAsyncTest)( + implicit system: ActorSystem): FutureOutcome = { + val builder: () => Future[BitcoindChainHandlerViaRpc] = { () => + createBitcoind().flatMap(createChainApiWithBitcoindRpc(_)) + } + + makeDependentFixture(builder, destroyBitcoindChainApiViaRpc)(test) + } + + override def afterAll(): Unit = { + system.terminate() + () + } +} + +object ChainUnitTest extends BitcoinSLogger { + + /** Height of the first block in populated fixtures */ + val FIRST_BLOCK_HEIGHT: Int = 562375 + + val FIRST_POW_CHANGE: Int = (FIRST_BLOCK_HEIGHT / 2016 + 1) * 2016 + + val genesisHeaderDb: BlockHeaderDb = ChainTestUtil.regTestGenesisHeaderDb + + def createChainHandler()( + implicit ec: ExecutionContext, + appConfig: ChainAppConfig): Future[ChainHandler] = { + val (chainHandler, genesisHeaderF) = setupHeaderTableWithGenesisHeader() + genesisHeaderF.map(_ => chainHandler) + } + + def createBlockHeaderDAO()( + implicit ec: ExecutionContext, + appConfig: ChainAppConfig): Future[BlockHeaderDAO] = { + val (chainHandler, genesisHeaderF) = setupHeaderTableWithGenesisHeader() + + genesisHeaderF.map(_ => chainHandler.blockHeaderDAO) + } + + /** Creates and populates BlockHeaderTable with block headers 562375 to 571375 */ + def createPopulatedBlockHeaderDAO()( + implicit appConfig: ChainAppConfig, + ec: ExecutionContext): Future[BlockHeaderDAO] = { + // The height of the first block in the json file + val OFFSET: Int = FIRST_BLOCK_HEIGHT + + val tableSetupF = ChainUnitTest.setupHeaderTable() + + val source = + scala.io.Source.fromURL(getClass.getResource("/block_headers.json")) + val arrStr = source.getLines.next + source.close() + + import org.bitcoins.rpc.serializers.JsonReaders.BlockHeaderReads + val headersResult = Json.parse(arrStr).validate[Vector[BlockHeader]] + + headersResult match { + case err: JsError => + logger.error(s"Failed to parse headers from block_headers.json: $err") + Future.failed(new RuntimeException(err.toString)) + case JsSuccess(headers, _) => + val dbHeaders = headers.zipWithIndex.map { + case (header, height) => + BlockHeaderDbHelper.fromBlockHeader(height + OFFSET, header) + } + + @tailrec + def splitIntoBatches( + batchSize: Int, + dbHeaders: Vector[BlockHeaderDb], + batchesSoFar: Vector[Vector[BlockHeaderDb]]): Vector[ + Vector[BlockHeaderDb]] = { + if (dbHeaders.isEmpty) { + batchesSoFar + } else if (dbHeaders.length < batchSize) { + batchesSoFar.:+(dbHeaders) + } else { + val (batch, nextDbHeaders) = dbHeaders.splitAt(batchSize) + val nextBatchesSoFar = batchesSoFar.:+(batch) + + splitIntoBatches(batchSize, nextDbHeaders, nextBatchesSoFar) + } + } + + val batchedDbHeaders = splitIntoBatches(batchSize = 500, + dbHeaders = dbHeaders, + batchesSoFar = Vector.empty) + + val chainHandler = ChainUnitTest.makeChainHandler() + + val insertedF = tableSetupF.flatMap { _ => + batchedDbHeaders.foldLeft( + Future.successful[Vector[BlockHeaderDb]](Vector.empty)) { + case (fut, batch) => + fut.flatMap(_ => chainHandler.blockHeaderDAO.createAll(batch)) + } + } + + insertedF.map(_ => chainHandler.blockHeaderDAO) + } + } + + def destroyHeaderTable()(implicit appConfig: AppConfig): Future[Unit] = { + ChainDbManagement.dropHeaderTable() + } + + def destroyBitcoind(bitcoind: BitcoindRpcClient)( + implicit system: ActorSystem): Future[Unit] = { + BitcoindRpcTestUtil.stopServer(bitcoind) + } + + /** Creates the [[org.bitcoins.chain.models.BlockHeaderTable]] */ + private def setupHeaderTable()( + implicit appConfig: AppConfig): Future[Unit] = { + ChainDbManagement.createHeaderTable(createIfNotExists = true) + } + + /** Creates the [[org.bitcoins.chain.models.BlockHeaderTable]] and inserts the genesis header */ + def setupHeaderTableWithGenesisHeader()( + implicit ec: ExecutionContext, + appConfig: ChainAppConfig): (ChainHandler, Future[BlockHeaderDb]) = { + val tableSetupF = setupHeaderTable() + + val chainHandler = makeChainHandler() + + val genesisHeaderF = tableSetupF.flatMap { _ => + chainHandler.blockHeaderDAO.create(genesisHeaderDb) + } + + (chainHandler, genesisHeaderF) + } + + def makeChainHandler()( + implicit appConfig: ChainAppConfig, + ec: ExecutionContext): ChainHandler = { + lazy val blockHeaderDAO = BlockHeaderDAO(appConfig) + + ChainHandler(blockHeaderDAO = blockHeaderDAO, appConfig) + } + +} diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/BitcoindChainHandlerViaRpc.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/BitcoindChainHandlerViaRpc.scala new file mode 100644 index 0000000000..3c69cdb5db --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/BitcoindChainHandlerViaRpc.scala @@ -0,0 +1,9 @@ +package org.bitcoins.testkit.chain.fixture + +import org.bitcoins.chain.blockchain.ChainHandler +import org.bitcoins.rpc.client.common.BitcoindRpcClient + +/** Represents a bitcoind instance paired with a chain handler via zmq */ +case class BitcoindChainHandlerViaRpc( + bitcoindRpc: BitcoindRpcClient, + chainHandler: ChainHandler) diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/BitcoindChainHandlerViaZmq.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/BitcoindChainHandlerViaZmq.scala new file mode 100644 index 0000000000..afec4a79ab --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/BitcoindChainHandlerViaZmq.scala @@ -0,0 +1,23 @@ +package org.bitcoins.testkit.chain.fixture + +import org.bitcoins.chain.blockchain.ChainHandler +import org.bitcoins.rpc.client.common.BitcoindRpcClient +import org.bitcoins.testkit.chain.fixture +import org.bitcoins.zmq.ZMQSubscriber + +/** Represents a bitcoind instance paired with a chain handler via zmq */ +case class BitcoindChainHandlerViaZmq( + bitcoindRpc: BitcoindRpcClient, + chainHandler: ChainHandler, + zmqSubscriber: ZMQSubscriber) + +object BitcoindChainHandlerViaZmq { + + def apply( + bitcoindRpc: BitcoindRpcClient, + pair: (ChainHandler, ZMQSubscriber)): BitcoindChainHandlerViaZmq = { + val (chainHandler, zmqSubscriber) = pair + + fixture.BitcoindChainHandlerViaZmq(bitcoindRpc, chainHandler, zmqSubscriber) + } +} diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixture.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixture.scala new file mode 100644 index 0000000000..120bf853d7 --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixture.scala @@ -0,0 +1,31 @@ +package org.bitcoins.testkit.chain.fixture + +import org.bitcoins.chain.blockchain.ChainHandler +import org.bitcoins.chain.models.BlockHeaderDAO + +/** + * This ADT represents all Chain test fixtures. If you set this type to be your + * FixtureParam and override withFixture to be withChainFixutre, then simply tag + * tests to specify which fixture that test should receive and then use inFixutred + * which takes a PartialFunction[ChainFixture, Future[Assertion] ] (i.e. just + * specify the relevant case for your expected fixture) + */ +sealed trait ChainFixture + +object ChainFixture { + case object Empty extends ChainFixture + + case class GenisisBlockHeaderDAO(dao: BlockHeaderDAO) extends ChainFixture + + case class PopulatedBlockHeaderDAO(dao: BlockHeaderDAO) extends ChainFixture + + case class GenisisChainHandler(chainHandler: ChainHandler) + extends ChainFixture + + case class PopulatedChainHandler(chainHandler: ChainHandler) + extends ChainFixture + + case class BitcoindZmqChainHandlerWithBlock( + bitcoindChainHandler: BitcoindChainHandlerViaZmq) + extends ChainFixture +} diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixtureHelper.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixtureHelper.scala new file mode 100644 index 0000000000..46c98b3e4b --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixtureHelper.scala @@ -0,0 +1,48 @@ +package org.bitcoins.testkit.chain.fixture + +import org.bitcoins.testkit.chain.ChainUnitTest +import org.bitcoins.testkit.chain.fixture.ChainFixture.{ + BitcoindZmqChainHandlerWithBlock, + Empty, + GenisisBlockHeaderDAO, + GenisisChainHandler, + PopulatedBlockHeaderDAO, + PopulatedChainHandler +} + +import scala.concurrent.Future + +trait ChainFixtureHelper { this: ChainUnitTest => + + def createFixture(tag: ChainFixtureTag): Future[ChainFixture] = { + tag match { + case ChainFixtureTag.Empty => Future.successful(ChainFixture.Empty) + case ChainFixtureTag.GenisisBlockHeaderDAO => + ChainUnitTest.createBlockHeaderDAO().map(GenisisBlockHeaderDAO.apply) + case ChainFixtureTag.PopulatedBlockHeaderDAO => + ChainUnitTest + .createPopulatedBlockHeaderDAO() + .map(PopulatedBlockHeaderDAO.apply) + case ChainFixtureTag.GenisisChainHandler => + ChainUnitTest.createChainHandler().map(GenisisChainHandler.apply) + case ChainFixtureTag.PopulatedChainHandler => + createPopulatedChainHandler().map( + ChainFixture.PopulatedChainHandler.apply) + case ChainFixtureTag.BitcoindZmqChainHandlerWithBlock => + createBitcoindChainHandlerViaZmq().map( + BitcoindZmqChainHandlerWithBlock.apply) + } + } + + def destroyFixture(fixture: ChainFixture): Future[Any] = { + fixture match { + case Empty => Future.successful(()) + case GenisisBlockHeaderDAO(_) => ChainUnitTest.destroyHeaderTable() + case PopulatedBlockHeaderDAO(_) => ChainUnitTest.destroyHeaderTable() + case GenisisChainHandler(_) => ChainUnitTest.destroyHeaderTable() + case PopulatedChainHandler(_) => ChainUnitTest.destroyHeaderTable() + case BitcoindZmqChainHandlerWithBlock(bitcoindHandler) => + destroyBitcoindChainHandlerViaZmq(bitcoindHandler) + } + } +} diff --git a/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixtureTag.scala b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixtureTag.scala new file mode 100644 index 0000000000..a957ac6e3b --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/chain/fixture/ChainFixtureTag.scala @@ -0,0 +1,45 @@ +package org.bitcoins.testkit.chain.fixture + +import org.scalatest.Tag + +/** + * If a test file uses ChainFixture as its FixtureParam, then + * using these tags will determine which fixture the test will get. + * + * Simply add taggedAs FixtureTag._ to your test before calling inFixtured. + */ +sealed abstract class ChainFixtureTag(name: String) extends Tag(name) + +object ChainFixtureTag { + case object Empty extends ChainFixtureTag("Empty") + + case object GenisisBlockHeaderDAO + extends ChainFixtureTag("GenisisBlockHeaderDAO") + + case object PopulatedBlockHeaderDAO + extends ChainFixtureTag("PopulatedBlockHeaderDAO") + + case object GenisisChainHandler extends ChainFixtureTag("GenisisChainHandler") + + case object PopulatedChainHandler + extends ChainFixtureTag("PopulatedChainHandler") + + case object BitcoindZmqChainHandlerWithBlock + extends ChainFixtureTag("BitcoindZmqChainHandlerWithBlock") + + val defaultTag: ChainFixtureTag = ChainFixtureTag.Empty + + def from(tag: String): ChainFixtureTag = { + tag match { + case Empty.name => Empty + case GenisisBlockHeaderDAO.name => GenisisBlockHeaderDAO + case PopulatedBlockHeaderDAO.name => PopulatedBlockHeaderDAO + case GenisisChainHandler.name => GenisisChainHandler + case PopulatedChainHandler.name => PopulatedChainHandler + case BitcoindZmqChainHandlerWithBlock.name => + BitcoindZmqChainHandlerWithBlock + case _: String => + throw new IllegalArgumentException(s"$tag is not a valid tag") + } + } +} diff --git a/testkit/src/main/scala/org/bitcoins/testkit/core/gen/HDGenerators.scala b/testkit/src/main/scala/org/bitcoins/testkit/core/gen/HDGenerators.scala index f829a52400..9cc0821429 100644 --- a/testkit/src/main/scala/org/bitcoins/testkit/core/gen/HDGenerators.scala +++ b/testkit/src/main/scala/org/bitcoins/testkit/core/gen/HDGenerators.scala @@ -135,12 +135,12 @@ object HDGenerators { accountIndex = accountIndex, chainType = chainType) - def hdPath: Gen[HDPath[_]] = + def hdPath: Gen[HDPath] = Gen.oneOf(legacyHdPath, segwithHdPath, nestedSegwithHdPath) - type HDPathConstructor = Vector[BIP32Node] => Try[HDPath[_]] + type HDPathConstructor = Vector[BIP32Node] => Try[HDPath] - def hdPathWithConstructor: Gen[(HDPath[_], HDPathConstructor)] = + def hdPathWithConstructor: Gen[(HDPath, HDPathConstructor)] = for { path <- hdPath } yield @@ -150,4 +150,21 @@ object HDGenerators { case segwit: SegWitHDPath => (segwit, SegWitHDPath(_)) } + /** + * Generates a pair of paths that can be diffed. + * + * In code, this means that this is always true: + * {{{ + * diffableHDPaths.map { + * case (short. long) => short.diff(long).isDefined + * } + * }}} + * + */ + def diffableHDPaths: Gen[(BIP32Path, BIP32Path)] = { + for { + path <- bip32Path.suchThat(_.path.length > 1) + n <- Gen.chooseNum(0, path.path.length - 1) + } yield (BIP32Path(path.path.dropRight(n)), path) + } } diff --git a/testkit/src/main/scala/org/bitcoins/testkit/fixtures/BitcoinSFixture.scala b/testkit/src/main/scala/org/bitcoins/testkit/fixtures/BitcoinSFixture.scala new file mode 100644 index 0000000000..0c0e5619b2 --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/fixtures/BitcoinSFixture.scala @@ -0,0 +1,131 @@ +package org.bitcoins.testkit.fixtures + +import akka.actor.ActorSystem +import org.bitcoins.rpc.client.common.BitcoindRpcClient +import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil +import org.scalatest._ + +import scala.concurrent.{Future, Promise} +import scala.util.{Failure, Success} + +trait BitcoinSFixture extends fixture.AsyncFlatSpec { + + /** + * Given functions to build and destroy a fixture, returns a OneArgAsyncTest => FutureOutcome + * (this version gives the destroy function access to the fixture) + * + * Example: + * {{{ + * makeDependentFixture(createBitcoindChainHandler, destroyBitcoindChainHandler) + * }}} + */ + def makeDependentFixture[T]( + build: () => Future[T], + destroy: T => Future[Any])(test: OneArgAsyncTest): FutureOutcome = { + val fixtureF = build() + + val outcomeF = fixtureF.flatMap { fixture => + test(fixture.asInstanceOf[FixtureParam]).toFuture + } + + val destroyP = Promise[Unit]() + outcomeF.onComplete { _ => + fixtureF.foreach { fixture => + destroy(fixture).onComplete { + case Success(_) => destroyP.success(()) + case Failure(err) => destroyP.failure(err) + } + } + } + + val outcomeAfterDestroyF = destroyP.future.flatMap(_ => outcomeF) + + new FutureOutcome(outcomeAfterDestroyF) + } + + /** + * Given functions to build and destroy a fixture, returns a OneArgAsyncTest => FutureOutcome + * (this version does not give the destroy function access to the fixture, see makeDependentFixture) + * + * Example: + * {{{ + * makeFixture(createBlockHeaderDAO, destroyBlockHeaderTable) + * }}} + */ + def makeFixture[T](build: () => Future[T], destroy: () => Future[Any])( + test: OneArgAsyncTest): FutureOutcome = { + val outcomeF = build().flatMap { fixture => + test(fixture.asInstanceOf[FixtureParam]).toFuture + } + + val destroyP = Promise[Unit]() + outcomeF.onComplete { _ => + destroy().onComplete { + case Success(_) => destroyP.success(()) + case Failure(err) => destroyP.failure(err) + } + } + + val outcomeAfterDestroyF = destroyP.future.flatMap(_ => outcomeF) + + new FutureOutcome(outcomeAfterDestroyF) + } + + /** + * Given two fixture building methods (one dependent on the other), returns a single + * fixture building method where the fixture is the pair of the two. + * + * Example: + * {{{ + * composeBuilders(createBlockHeaderDAO, createChainHandlerFromBlockHeaderDAO) + * }}} + */ + def composeBuilders[T, U]( + builder: () => Future[T], + dependentBuilder: T => Future[U]): () => Future[(T, U)] = () => { + builder().flatMap { first => + dependentBuilder(first).map { second => + (first, second) + } + } + } + + /** + * Given two fixture building methods (one dependent on the other) and a wrapper + * for their pair type, returns a single fixture building method where the fixture is wrapper. + * + * Example: + * {{{ + * composeBuildersAndWrap( + * createBitcoind, + * createChainHandlerWithBitcoindZmq, + * BitcoindChainHandler.apply) + * }}} + */ + def composeBuildersAndWrap[T, U, C]( + builder: () => Future[T], + dependentBuilder: T => Future[U], + wrap: (T, U) => C): () => Future[C] = () => { + composeBuilders(builder, dependentBuilder)().map { + case (first, second) => wrap(first, second) + } + } + + def createBitcoindWithFunds()( + implicit system: ActorSystem): Future[BitcoindRpcClient] = { + for { + bitcoind <- createBitcoind() + address <- bitcoind.getNewAddress + _ <- bitcoind.generateToAddress(blocks = 101, address) + } yield bitcoind + } + + /** Creates a new bitcoind instance */ + def createBitcoind()( + implicit system: ActorSystem): Future[BitcoindRpcClient] = { + val instance = BitcoindRpcTestUtil.instance() + val bitcoind = new BitcoindRpcClient(instance) + + bitcoind.start().map(_ => bitcoind) + } +} diff --git a/testkit/src/main/scala/org/bitcoins/testkit/fixtures/EmptyFixture.scala b/testkit/src/main/scala/org/bitcoins/testkit/fixtures/EmptyFixture.scala new file mode 100644 index 0000000000..67f5731549 --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/fixtures/EmptyFixture.scala @@ -0,0 +1,11 @@ +package org.bitcoins.testkit.fixtures + +import org.scalatest.FutureOutcome + +trait EmptyFixture extends BitcoinSFixture { + + final override type FixtureParam = Unit + + final override def withFixture(test: OneArgAsyncTest): FutureOutcome = + test(()) +} diff --git a/testkit/src/main/scala/org/bitcoins/testkit/gen/ControlMessageGenerator.scala b/testkit/src/main/scala/org/bitcoins/testkit/gen/ControlMessageGenerator.scala new file mode 100644 index 0000000000..abb7f17910 --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/gen/ControlMessageGenerator.scala @@ -0,0 +1,161 @@ +package org.bitcoins.testkit.gen + +import java.net.{InetAddress, InetSocketAddress} + +import org.bitcoins.core.number.{UInt32, UInt64} +import org.bitcoins.core.protocol.CompactSizeUInt +import org.bitcoins.node.messages._ +import org.bitcoins.node.messages.control._ +import org.bitcoins.node.versions.ProtocolVersion +import org.bitcoins.testkit.core.gen.{ + BloomFilterGenerator, + CryptoGenerators, + NumberGenerator, + StringGenerators +} +import org.scalacheck.Gen +import scodec.bits.ByteVector + +/** + * Created by chris on 6/27/16. + */ +trait ControlMessageGenerator { + + /** + * Generates a random [[VersionMessage]] + * [[https://bitcoin.org/en/developer-reference#version]] + * + * @return + */ + def versionMessage: Gen[VersionMessage] = + for { + version <- protocolVersion + identifier <- serviceIdentifier + timestamp <- NumberGenerator.int64s + addressReceiveServices <- serviceIdentifier + addressReceiveIpAddress <- inetAddress + addressReceivePort <- portNumber + addressTransServices <- serviceIdentifier + addressTransIpAddress <- inetAddress + addressTransPort <- portNumber + nonce <- NumberGenerator.uInt64s + userAgent <- StringGenerators.genString + startHeight <- NumberGenerator.int32s + relay = scala.util.Random.nextInt() % 2 == 0 + } yield + VersionMessage( + version, + identifier, + timestamp, + addressReceiveServices, + addressReceiveIpAddress, + addressReceivePort, + addressTransServices, + addressTransIpAddress, + addressTransPort, + nonce, + userAgent, + startHeight, + relay + ) + + /** + * Generates a [[PingMessage]] + * [[https://bitcoin.org/en/developer-reference#ping]] + * + * @return + */ + def pingMessage: Gen[PingMessage] = + for { + uInt64 <- NumberGenerator.uInt64s + } yield PingMessage(uInt64) + + /** + * Generates a [[PongMessage]] + * [[https://bitcoin.org/en/developer-reference#pong]] + * + * @return + */ + def pongMessage: Gen[PongMessage] = + for { + uInt64 <- NumberGenerator.uInt64s + } yield PongMessage(uInt64) + + /** + * Generates a random [[ProtocolVersion]] + * [[https://bitcoin.org/en/developer-reference#protocol-versions]] + * + * @return + */ + def protocolVersion: Gen[ProtocolVersion] = + for { + randomNum <- Gen.choose(0, ProtocolVersion.versions.length - 1) + } yield ProtocolVersion.versions(randomNum) + + /** + * Generates a [[ServiceIdentifier]] + * [[https://bitcoin.org/en/developer-reference#version]] + * + * @return + */ + def serviceIdentifier: Gen[ServiceIdentifier] = + for { + //service identifiers can only be NodeNetwork or UnnamedService + randomNum <- Gen.choose(0, 1) + } yield ServiceIdentifier(randomNum) + + def inetAddress: Gen[InetAddress] = + for { + socketAddress <- inetSocketAddress + } yield socketAddress.getAddress + + def inetSocketAddress: Gen[InetSocketAddress] = + for { + p <- portNumber + } yield new InetSocketAddress(p) + + def portNumber: Gen[Int] = Gen.choose(0, 65535) + + /** + * Creates a [[FilterLoadMessage]] + * [[https://bitcoin.org/en/developer-reference#filterload]] + * + * @return + */ + def filterLoadMessage: Gen[FilterLoadMessage] = + for { + filter <- NumberGenerator.bytes + hashFuncs <- Gen.choose(0, 50) + tweak <- NumberGenerator.uInt32s + flags <- BloomFilterGenerator.bloomFlag + } yield + FilterLoadMessage(ByteVector(filter), UInt32(hashFuncs), tweak, flags) + + /** + * Creates a [[FilterAddMessage]] + * [[https://bitcoin.org/en/developer-reference#filteradd]] + * + * @return + */ + def filterAddMessage: Gen[FilterAddMessage] = + for { + element <- CryptoGenerators.doubleSha256Digest + elementSize = CompactSizeUInt(UInt64(element.bytes.size)) + } yield FilterAddMessage(elementSize, element.bytes) + + /** + * Creates a [[RejectMessage]] + * [[https://bitcoin.org/en/developer-reference#reject]] + * + * @return + */ + def rejectMessage: Gen[RejectMessage] = + for { + message <- StringGenerators.genString + code <- StringGenerators.strChar + reason <- StringGenerators.genString + extra <- CryptoGenerators.doubleSha256Digest + } yield RejectMessage(message, code, reason, extra.bytes) +} + +object ControlMessageGenerator extends ControlMessageGenerator diff --git a/testkit/src/main/scala/org/bitcoins/testkit/gen/DataMessageGenerator.scala b/testkit/src/main/scala/org/bitcoins/testkit/gen/DataMessageGenerator.scala new file mode 100644 index 0000000000..d3ebf0d72a --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/gen/DataMessageGenerator.scala @@ -0,0 +1,108 @@ +package org.bitcoins.testkit.gen + +import org.bitcoins.core.number.UInt32 +import org.bitcoins.node.messages._ +import org.bitcoins.node.messages.data._ +import org.bitcoins.testkit.core.gen.{ + BlockchainElementsGenerator, + CryptoGenerators, + MerkleGenerator, + TransactionGenerators +} +import org.scalacheck.Gen + +/** + * Created by chris on 6/29/16. + * Responsible for generating random [[DataMessage]] + * [[https://bitcoin.org/en/developer-reference#data-messages]] + */ +trait DataMessageGenerator { + + /** + * Generates a random [[GetHeadersMessage]] + * [[https://bitcoin.org/en/developer-reference#getheaders]] + * + * @return + */ + def getHeaderMessages: Gen[GetHeadersMessage] = + for { + version <- ControlMessageGenerator.protocolVersion + numHashes <- Gen.choose(0, 2000) + hashes <- CryptoGenerators.doubleSha256DigestSeq(numHashes) + hashStop <- CryptoGenerators.doubleSha256Digest + } yield GetHeadersMessage(version, hashes, hashStop) + + def headersMessage: Gen[HeadersMessage] = + for { + randomNum <- Gen.choose(1, 10) + //we have a maximum of 2000 block headers in a HeadersMessage + blockHeaders <- Gen + .listOfN(randomNum, BlockchainElementsGenerator.blockHeader) + .suchThat(_.size <= 10) + } yield HeadersMessage(blockHeaders.toVector) + + /** + * Generates a random [[TypeIdentifier]] + * [[https://bitcoin.org/en/developer-reference#data-messages]] + * + * @return + */ + def typeIdentifier: Gen[TypeIdentifier] = + for { + num <- Gen.choose(1, 3) + } yield TypeIdentifier(UInt32(num)) + + /** + * Generates a random [[Inventory]] + * [[https://bitcoin.org/en/developer-reference#term-inventory]] + * + * @return + */ + def inventory: Gen[Inventory] = + for { + identifier <- typeIdentifier + hash <- CryptoGenerators.doubleSha256Digest + } yield Inventory(identifier, hash) + + /** + * Generates a random [[InventoryMessage]] + * [[https://bitcoin.org/en/developer-reference#inv]] + * @return + */ + def inventoryMessages: Gen[InventoryMessage] = + for { + numInventories <- Gen.choose(0, 500) + inventories <- Gen.listOfN(numInventories, inventory) + } yield InventoryMessage(inventories) + + /** + * Generate a random [[GetDataMessage]] + * [[https://bitcoin.org/en/developer-reference#getdata]] + * @return + */ + def getDataMessages: Gen[GetDataMessage] = + for { + invMsgs <- inventoryMessages + } yield GetDataMessage(invMsgs.inventoryCount, invMsgs.inventories) + + /** + * Generates a random [[MerkleBlockMessage]] + * [[https://bitcoin.org/en/developer-reference#merkleblock]] + * @return + */ + def merkleBlockMessage: Gen[MerkleBlockMessage] = + for { + (merkleBlock, _, _) <- MerkleGenerator.merkleBlockWithInsertedTxIds + } yield MerkleBlockMessage(merkleBlock) + + /** Generates a [[TransactionMessage]] + * [[https://bitcoin.org/en/developer-reference#tx]] + * */ + def transactionMessage: Gen[TransactionMessage] = + for { + tx <- TransactionGenerators.transaction + txMsg = TransactionMessage(tx) + } yield txMsg +} + +object DataMessageGenerator extends DataMessageGenerator diff --git a/testkit/src/main/scala/org/bitcoins/testkit/node/NodeTestUtil.scala b/testkit/src/main/scala/org/bitcoins/testkit/node/NodeTestUtil.scala new file mode 100644 index 0000000000..df829b6faa --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/node/NodeTestUtil.scala @@ -0,0 +1,102 @@ +package org.bitcoins.testkit.node + +import java.net.InetSocketAddress + +import akka.actor.ActorRefFactory +import org.bitcoins.core.protocol.blockchain.BlockHeader +import org.bitcoins.core.protocol.transaction.Transaction +import org.bitcoins.node.NetworkMessage +import org.bitcoins.node.config.NodeAppConfig +import org.bitcoins.node.messages.control.VersionMessage +import org.bitcoins.node.messages.data.GetHeadersMessage +import org.bitcoins.node.models.Peer +import org.bitcoins.node.networking.Client +import org.bitcoins.node.networking.peer.PeerMessageReceiver +import org.bitcoins.node.util.NetworkIpAddress +import org.bitcoins.rpc.client.common.BitcoindRpcClient + +/** + * Created by chris on 6/2/16. + */ +abstract class NodeTestUtil { + + //txid on testnet 44e504f5b7649d215be05ad9f09026dee95201244a3b218013c504a6a49a26ff + //this tx has multiple inputs and outputs + def rawTransaction = + "01000000" + + "02df80e3e6eba7dcd4650281d3c13f140dafbb823a7227a78eb6ee9f6cedd040011b0000006a473044022040f91c48f4011bf2e2edb6621bfa8fb802241de939cb86f1872c99c580ef0fe402204fc27388bc525e1b655b5f5b35f9d601d28602432dd5672f29e0a47f5b8bbb26012102c114f376c98d12a0540c3a81ab99bb1c5234245c05e8239d09f48229f9ebf011ffffffff" + + "df80e3e6eba7dcd4650281d3c13f140dafbb823a7227a78eb6ee9f6cedd04001340000006b483045022100cf317c320d078c5b884c44e7488825dab5bcdf3f88c66314ac925770cd8773a7022033fde60d33cc2842ea73fce5d9cf4f8da6fadf414a75b7085efdcd300407f438012102605c23537b27b80157c770cd23e066cd11db3800d3066a38b9b592fc08ae9c70ffffffff" + + "02c02b00000000000017a914b0b06365c482eb4eabe6e0630029fb8328ea098487e81c0000000000001976a914938da2b50fd6d8acdfa20e30df0e7d8092f0bc7588ac00000000" + def transaction = Transaction(rawTransaction) + + /** + * Random version message bitcoins created when connecting to a testnet seed + * This does not include the header + * @return + */ + def rawVersionMessage = + "7c1101000000000000000000d805833655010000000000000000000000000000000000000000ffff0a940106479d010000000000000000000000000000000000ffff739259bb479d0000000000000000182f626974636f696e732d7370762d6e6f64652f302e302e310000000000" + def versionMessage = VersionMessage(rawVersionMessage) + + /** + * This is a raw network message indicating the version a node is using on the p2p network + * This has BOTH the header and the payload + * @return + */ + def rawNetworkMessage = + "0b11090776657273696f6e0000000000660000002f6743da721101000100000000000000e0165b5700000000010000000000000000000000000000000000ffffad1f27a8479d010000000000000000000000000000000000ffff00000000479d68dc32a9948d149b102f5361746f7368693a302e31312e322f7f440d0001" + def networkMessage = NetworkMessage(rawNetworkMessage) + + /** + * This is a get headers message taken from wireshark off of a node that sent the message + * @return + */ + def rawGetHeadersMsg = + "721101001f693a1ceb6eabcd03f7f7e22a763efec0f4fd1618a50558283b23600000000000e933b17e7f39aa00f24cabbae1e618ecbfbd70a3ecc4f63072dc790000000000e53160d1edccfd7feed401233c274fbc229f7f0d2b6152735344ec0000000000110274616c7161a8aca8390e1a472f22de7470368e5066f20d050000000000008f98d517947a765069f976de05f910a65743fbac59a430aaf30d350000000000572b328dc2155a853157bebcc616fc82fd6996cb348d6a3cd929c500000000007d2c3eca25e06b684132325c85673675b928c3d0ee2eec553c01000000000000a5e239f5b4c6998078e71a065bd71216583e88bf80a93d170253460000000000b6c926f4cb309d2d87f40d4790905f3f29cd05f3ea26854e060700000000000032668e2de62f181cdeabad351318008288993b3db3e411216aad70000000000079f9e80a6ffe62ab13daa65e6410c8d36d513e198fc161b90cd1d40000000000bbf6a01b2faeb102d177ab03131263166790548181ff3cb04308000000000000b90ef011e62cd6c259939ac4ad372c5f395718a93ade933fd5503b0000000000f346a56f2fa278919c40cdde7ea424058543ce2237f6c9df174e2300000000002fd1795f0dbbc70f7a41d369d4b89c56bf1c6cf2c43ef8f8ed00000000000000643a31c93787ab66b51a4ccfc2ce867d855f4ad64b2a3136e1a12d00000000001323867c8b11027eac79e0cc71fce91f24b1066c6423e69ec409000000000000d1eb1916bab3839da423f1e5aa1c271204bd5564bac6fefd498e0f0000000000a4dcf02c42a71b5b10433917dda89a0d34984a065c0b05a52d03000000000000c57477df9128ef4f71366c4a89e432445d94b0c2b02e7a9ccb060000000000004c45281d6afa17835d264cc8ba181b8c51501247c128d644e2000000000000005c6d201f400a544250bae463ff28f47d53f32d97ae27b5b73b5f580000000000b1def34939f027654943457d69e104304c9798c0af837a7e1f1500000000000069164c8213a0d6b38fe1d9a2c63bcfb5808b65f6e50376726a120000000000002893d0fdafe84e3670a31b22ba80edfb841746462417bad024ac5e0000000000063015920d27befb9ff25f9a1989cda07e4ce62fa9ac8ec0f5b401000000000040a936762fbde4b51bea3ad59dfe202f16dd220761235172960c000000000000332d487a5cc80c00296c43c5bec6b6b1a41a499ce2efd6b6d8514b00000000009400a26083d0551175374c45746488d1c9eaea8d891e69f2e57c5712000000005d62facd94114f5ee55ab6e6797a5c6a8d0e0626b9200ffdf647f15c0000000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea3309000000000000000000000000000000000000000000000000000000000000000000000000" + def getHeadersMsg = GetHeadersMessage(rawGetHeadersMsg) + + /** These are the first 5 block headers on testnet, this does NOT include the genesis block header */ + lazy val firstFiveTestNetBlockHeaders: List[BlockHeader] = { + List( + BlockHeader( + "0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b672"), + BlockHeader( + "0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d23534"), + BlockHeader( + "0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b6"), + BlockHeader( + "0100000010befdc16d281e40ecec65b7c9976ddc8fd9bc9752da5827276e898b000000004c976d5776dda2da30d96ee810cd97d23ba852414990d64c4c720f977e651f2daae7494dffff001d02a97640"), + BlockHeader( + "01000000dde5b648f594fdd2ec1c4083762dd13b197bb1381e74b1fff90a5d8b00000000b3c6c6c1118c3b6abaa17c5aa74ee279089ad34dc3cec3640522737541cb016818e8494dffff001d02da84c0") + ) + } + + def nodeAppConfig: NodeAppConfig = NodeAppConfig() + + def client(peer: Peer, peerMsgReceiver: PeerMessageReceiver)( + implicit ref: ActorRefFactory): Client = { + Client.apply(ref, peer, peerMsgReceiver) + } + + /** Helper method to get the [[java.net.InetSocketAddress]] + * we need to connect to to make a p2p connection with bitcoind + * @param bitcoindRpcClient + * @return + */ + def getBitcoindSocketAddress( + bitcoindRpcClient: BitcoindRpcClient): InetSocketAddress = { + val instance = bitcoindRpcClient.instance + new InetSocketAddress(instance.uri.getHost, instance.p2pPort) + } + + /** Gets the [[Peer]] that + * corresponds to [[org.bitcoins.rpc.client.common.BitcoindRpcClient]] */ + def getBitcoindPeer(bitcoindRpcClient: BitcoindRpcClient): Peer = { + val socket = getBitcoindSocketAddress(bitcoindRpcClient) + val networkIpAddress = NetworkIpAddress.fromInetSocketAddress(socket) + Peer.fromNetworkIpAddress(networkIpAddress) + } + +} + +object NodeTestUtil extends NodeTestUtil diff --git a/testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala b/testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala new file mode 100644 index 0000000000..b280271d7f --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/node/NodeUnitTest.scala @@ -0,0 +1,167 @@ +package org.bitcoins.testkit.node + +import java.net.InetSocketAddress + +import akka.actor.ActorSystem +import org.bitcoins.chain.config.ChainAppConfig +import org.bitcoins.core.config.NetworkParameters +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.db.AppConfig +import org.bitcoins.node.SpvNode +import org.bitcoins.node.config.NodeAppConfig +import org.bitcoins.node.models.Peer +import org.bitcoins.node.networking.peer.{ + PeerHandler, + PeerMessageReceiver, + PeerMessageSender +} +import org.bitcoins.node.util.NetworkIpAddress +import org.bitcoins.rpc.client.common.BitcoindRpcClient +import org.bitcoins.testkit.chain.ChainUnitTest +import org.bitcoins.testkit.fixtures.BitcoinSFixture +import org.bitcoins.testkit.node.fixture.SpvNodeConnectedWithBitcoind +import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil +import org.scalatest.{ + BeforeAndAfter, + BeforeAndAfterAll, + FutureOutcome, + MustMatchers +} + +import scala.concurrent.duration._ +import scala.concurrent.{ExecutionContext, Future} + +trait NodeUnitTest + extends BitcoinSFixture + with MustMatchers + with BitcoinSLogger + with BeforeAndAfter + with BeforeAndAfterAll { + + override def beforeAll(): Unit = { + AppConfig.throwIfDefaultDatadir(nodeAppConfig) + } + + override def afterAll(): Unit = { + system.terminate() + () + } + + implicit lazy val system: ActorSystem = { + ActorSystem(s"${getClass.getSimpleName}-${System.currentTimeMillis}") + } + + implicit lazy val ec: ExecutionContext = + system.dispatcher + + val timeout: FiniteDuration = 10.seconds + + implicit lazy val nodeAppConfig: NodeAppConfig = NodeAppConfig() + implicit lazy val chainAppConfig: ChainAppConfig = ChainAppConfig() + implicit val np: NetworkParameters = nodeAppConfig.network + + lazy val startedBitcoindF = BitcoindRpcTestUtil.startedBitcoindRpcClient() + + lazy val bitcoindPeerF = startedBitcoindF.map(NodeTestUtil.getBitcoindPeer) + + def buildPeerMessageReceiver(): PeerMessageReceiver = { + val receiver = + PeerMessageReceiver.newReceiver(nodeAppConfig, chainAppConfig) + receiver + } + + def buildPeerHandler(): Future[PeerHandler] = { + bitcoindPeerF.map { peer => + val peerMsgReceiver = buildPeerMessageReceiver() + //the problem here is the 'self', this needs to be an ordinary peer message handler + //that can handle the handshake + val peerMsgSender: PeerMessageSender = { + val client = NodeTestUtil.client(peer, peerMsgReceiver) + PeerMessageSender(client, np) + } + + PeerHandler(peerMsgReceiver, peerMsgSender) + } + + } + + def peerSocketAddress( + bitcoindRpcClient: BitcoindRpcClient): InetSocketAddress = { + NodeTestUtil.getBitcoindSocketAddress(bitcoindRpcClient) + } + + def createPeer(bitcoind: BitcoindRpcClient): Peer = { + val socket = peerSocketAddress(bitcoind) + val nip = NetworkIpAddress.fromInetSocketAddress(socket) + Peer(id = None, networkIpAddress = nip) + } + + def createSpvNode(bitcoind: BitcoindRpcClient): Future[SpvNode] = { + val chainApiF = ChainUnitTest.createChainHandler() + val peer = createPeer(bitcoind) + for { + chainApi <- chainApiF + } yield SpvNode(peer = peer, chainApi = chainApi) + } + + def withSpvNode(test: OneArgAsyncTest)( + implicit system: ActorSystem): FutureOutcome = { + + val spvBuilder: () => Future[SpvNode] = { () => + val bitcoindF = createBitcoind() + bitcoindF.flatMap { bitcoind => + createSpvNode(bitcoind).flatMap(_.start()) + } + } + + makeDependentFixture( + build = spvBuilder, + destroy = NodeUnitTest.destroySpvNode + )(test) + } + + def withSpvNodeConnectedToBitcoind(test: OneArgAsyncTest)( + implicit system: ActorSystem): FutureOutcome = { + val spvWithBitcoindBuilder: () => Future[SpvNodeConnectedWithBitcoind] = { + () => + val bitcoindF = createBitcoind() + bitcoindF.flatMap { bitcoind => + val startedSpv = createSpvNode(bitcoind).flatMap(_.start()) + + startedSpv.map(spv => SpvNodeConnectedWithBitcoind(spv, bitcoind)) + } + } + + makeDependentFixture( + build = spvWithBitcoindBuilder, + destroy = NodeUnitTest.destorySpvNodeConnectedWithBitcoind + )(test) + } + +} + +object NodeUnitTest { + + def destroySpvNode(spvNode: SpvNode)( + implicit appConfig: NodeAppConfig, + ec: ExecutionContext): Future[Unit] = { + val stopF = spvNode.stop() + stopF.flatMap(_ => ChainUnitTest.destroyHeaderTable()) + } + + def destorySpvNodeConnectedWithBitcoind( + spvNodeConnectedWithBitcoind: SpvNodeConnectedWithBitcoind)( + implicit system: ActorSystem, + appConfig: NodeAppConfig): Future[Unit] = { + import system.dispatcher + val spvNode = spvNodeConnectedWithBitcoind.spvNode + val bitcoind = spvNodeConnectedWithBitcoind.bitcoind + val spvNodeDestroyF = destroySpvNode(spvNode) + val bitcoindDestroyF = ChainUnitTest.destroyBitcoind(bitcoind) + + for { + _ <- spvNodeDestroyF + _ <- bitcoindDestroyF + } yield () + } +} diff --git a/testkit/src/main/scala/org/bitcoins/testkit/node/fixture/NodeFixture.scala b/testkit/src/main/scala/org/bitcoins/testkit/node/fixture/NodeFixture.scala new file mode 100644 index 0000000000..3b3425c973 --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/node/fixture/NodeFixture.scala @@ -0,0 +1,11 @@ +package org.bitcoins.testkit.node.fixture + +sealed trait NodeFixture + +object NodeFixture { + + /** Gives us a fixture that has a spv node connected with the bitcoind instance */ + case class SpvNodeConnectedWithBitcoindFixture( + spvNodeConnectedWithBitcoind: SpvNodeConnectedWithBitcoind) + extends NodeFixture +} diff --git a/testkit/src/main/scala/org/bitcoins/testkit/node/fixture/SpvNodeConnectedWithBitcoind.scala b/testkit/src/main/scala/org/bitcoins/testkit/node/fixture/SpvNodeConnectedWithBitcoind.scala new file mode 100644 index 0000000000..cc995a7dfb --- /dev/null +++ b/testkit/src/main/scala/org/bitcoins/testkit/node/fixture/SpvNodeConnectedWithBitcoind.scala @@ -0,0 +1,9 @@ +package org.bitcoins.testkit.node.fixture + +import org.bitcoins.node.SpvNode +import org.bitcoins.rpc.client.common.BitcoindRpcClient + +/** Gives us a fixture that has a spv node connected with the bitcoind instance */ +case class SpvNodeConnectedWithBitcoind( + spvNode: SpvNode, + bitcoind: BitcoindRpcClient) diff --git a/testkit/src/main/scala/org/bitcoins/testkit/rpc/BitcoindRpcTestUtil.scala b/testkit/src/main/scala/org/bitcoins/testkit/rpc/BitcoindRpcTestUtil.scala index e4f522fe73..2546f0125b 100644 --- a/testkit/src/main/scala/org/bitcoins/testkit/rpc/BitcoindRpcTestUtil.scala +++ b/testkit/src/main/scala/org/bitcoins/testkit/rpc/BitcoindRpcTestUtil.scala @@ -5,6 +5,7 @@ import java.nio.file.Paths import akka.actor.ActorSystem import akka.stream.ActorMaterializer + import org.bitcoins.core.config.RegTest import org.bitcoins.core.crypto.{ DoubleSha256Digest, @@ -75,6 +76,12 @@ trait BitcoindRpcTestUtil extends BitcoinSLogger { } } + def tmpDir(): File = { + val f = Paths.get(Properties.tmpDir, randomDirName).toFile + f.mkdirs() + f + } + /** * Standard config used for testing purposes */ @@ -94,48 +101,24 @@ trait BitcoindRpcTestUtil extends BitcoinSLogger { val pass = randomDirName val username = "random_user_name" val conf = s""" - |regtest=1 - |daemon=1 - |server=1 - | - |rpcuser=$username - |rpcpassword=$pass - |rpcport=${rpcUri.getPort} - |port=${uri.getPort} - |debug=1 - |walletbroadcast=1 - |txindex=${if (pruneMode) 0 else 1 /* pruning and txindex are not compatible */} - |zmqpubhashtx=tcp://127.0.0.1:$zmqPort - |zmqpubhashblock=tcp://127.0.0.1:$zmqPort - |zmqpubrawtx=tcp://127.0.0.1:$zmqPort - |zmqpubrawblock=tcp://127.0.0.1:$zmqPort - |prune=${if (pruneMode) 1 else 0} + |regtest=1 + |daemon=1 + |server=1 + | + |rpcuser=$username + |rpcpassword=$pass + |rpcport=${rpcUri.getPort} + |port=${uri.getPort} + |debug=1 + |walletbroadcast=1 + |txindex=${if (pruneMode) 0 else 1 /* pruning and txindex are not compatible */} + |zmqpubhashtx=tcp://127.0.0.1:$zmqPort + |zmqpubhashblock=tcp://127.0.0.1:$zmqPort + |zmqpubrawtx=tcp://127.0.0.1:$zmqPort + |zmqpubrawblock=tcp://127.0.0.1:$zmqPort + |prune=${if (pruneMode) 1 else 0} """.stripMargin - BitcoindConfig(conf) - } - - /** - * Writes the config to the data directory within it, it it doesn't - * exist. Returns the written file. Assumes the config has a datadir. - */ - def writeConfigToFile(config: BitcoindConfig): Path = { - - val confStr = config.lines.mkString("\n") - - val datadir = config.datadir - .getOrElse( - throw new IllegalArgumentException( - "Provided bitcoind config does not have datadir field!")) - .toPath - - val confFile = datadir.resolve("bitcoin.conf") - - Files.createDirectories(datadir) - if (!Files.exists(confFile)) { - Files.write(confFile, confStr.getBytes) - } - - confFile + BitcoindConfig(config = conf, datadir = BitcoindRpcTestUtil.tmpDir()) } /** @@ -151,15 +134,8 @@ trait BitcoindRpcTestUtil extends BitcoinSLogger { ): Path = { val conf = config(uri, rpcUri, zmqPort, pruneMode) - val configWithDatadir = - if (conf.datadir.isDefined) { - conf - } else { - val tempDir = Paths.get(Properties.tmpDir, randomDirName) - conf.withOption("datadir", tempDir.toString) - } - - val written = writeConfigToFile(configWithDatadir) + val datadir = conf.datadir + val written = BitcoindConfig.writeConfigToFile(conf, datadir) logger.debug(s"Wrote conf to ${written}") written } diff --git a/testkit/src/main/scala/org/bitcoins/testkit/util/BitcoinSUnitTest.scala b/testkit/src/main/scala/org/bitcoins/testkit/util/BitcoinSUnitTest.scala index 497f136661..6115d61098 100644 --- a/testkit/src/main/scala/org/bitcoins/testkit/util/BitcoinSUnitTest.scala +++ b/testkit/src/main/scala/org/bitcoins/testkit/util/BitcoinSUnitTest.scala @@ -1,7 +1,5 @@ package org.bitcoins.testkit.util -import java.math.BigInteger - import org.scalactic.anyvals.PosInt import org.scalatest.prop.PropertyChecks import org.scalatest.{FlatSpec, MustMatchers} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/EncryptedMnemonicTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/EncryptedMnemonicTest.scala new file mode 100644 index 0000000000..5106467491 --- /dev/null +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/EncryptedMnemonicTest.scala @@ -0,0 +1,45 @@ +package org.bitcoins.wallet + +import org.bitcoins.core.crypto.{AesPassword, MnemonicCode} +import org.bitcoins.testkit.core.gen.CryptoGenerators +import org.bitcoins.testkit.util.BitcoinSUnitTest + +import scala.util.{Failure, Success} + +class EncryptedMnemonicTest extends BitcoinSUnitTest { + behavior of "EncryptedMnemonic" + + it must "fail to decrypt with a bad password" in { + val password = AesPassword("good") + val badPassword = AesPassword("bad") + + def getMnemonic(): MnemonicCode = + CryptoGenerators.mnemonicCode.sample.getOrElse(getMnemonic()) + + val mnemonic = getMnemonic() + val encrypted = EncryptedMnemonicHelper.encrypt(mnemonic, password) match { + case Success(value) => value + case Failure(exception) => fail(exception) + } + + val decrypted = encrypted.toMnemonic(badPassword) + + assert(decrypted.isFailure) + + } + + it must "have encryption/decryption symmetry" in { + forAll(CryptoGenerators.mnemonicCode, CryptoGenerators.aesPassword) { + (code, password) => + val encrypted = EncryptedMnemonicHelper.encrypt(code, password) match { + case Success(e) => e + case Failure(exception) => fail(exception) + } + val decrypted = encrypted.toMnemonic(password) match { + case Success(clear) => clear + case Failure(exc) => fail(exc) + } + assert(decrypted == code) + } + } +} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/WalletAppConfigTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletAppConfigTest.scala new file mode 100644 index 0000000000..ea24515366 --- /dev/null +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletAppConfigTest.scala @@ -0,0 +1,34 @@ +package org.bitcoins.wallet + +import org.bitcoins.testkit.util.BitcoinSUnitTest +import org.bitcoins.node.config.NodeAppConfig +import org.bitcoins.core.config.TestNet3 +import com.typesafe.config.Config +import com.typesafe.config.ConfigFactory +import org.bitcoins.core.config.RegTest +import org.bitcoins.core.config.MainNet +import org.bitcoins.wallet.config.WalletAppConfig + +class WalletAppConfigTest extends BitcoinSUnitTest { + val config = WalletAppConfig() + + it must "be overridable" in { + assert(config.network == RegTest) + + val otherConf = ConfigFactory.parseString("bitcoin-s.network = testnet3") + val withOther: WalletAppConfig = config.withOverrides(otherConf) + assert(withOther.network == TestNet3) + + val mainnetConf = ConfigFactory.parseString("bitcoin-s.network = mainnet") + val mainnet: WalletAppConfig = withOther.withOverrides(mainnetConf) + assert(mainnet.network == MainNet) + } + + it must "be overridable with multiple levels" in { + val testnet = ConfigFactory.parseString("bitcoin-s.network = testnet3") + val mainnet = ConfigFactory.parseString("bitcoin-s.network = mainnet") + val overriden: WalletAppConfig = config.withOverrides(testnet, mainnet) + assert(overriden.network == MainNet) + + } +} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/WalletIntegrationTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletIntegrationTest.scala new file mode 100644 index 0000000000..bbde0d2ed9 --- /dev/null +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletIntegrationTest.scala @@ -0,0 +1,77 @@ +package org.bitcoins.wallet + +import org.bitcoins.core.currency._ +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.wallet.fee.SatoshisPerByte +import org.bitcoins.testkit.rpc.BitcoindRpcTestUtil +import org.bitcoins.wallet.api.{AddUtxoError, AddUtxoSuccess, WalletApi} +import org.bitcoins.wallet.util.BitcoinSWalletTest +import org.scalatest.FutureOutcome + +import scala.concurrent.Future + +class WalletIntegrationTest extends BitcoinSWalletTest { + + override type FixtureParam = WalletWithBitcoind + + override def withFixture(test: OneArgAsyncTest): FutureOutcome = + withNewWalletAndBitcoind(test) + + behavior of "Wallet - integration test" + + val feeRate = SatoshisPerByte(Satoshis.one) + + it should ("create an address, receive funds to it from bitcoind, import the" + + " UTXO and construct a valid, signed transaction that's" + + " broadcast and confirmed by bitcoind") in { walletWithBitcoind => + val WalletWithBitcoind(wallet, bitcoind) = walletWithBitcoind + val valueFromBitcoind = Bitcoins.one + + val addUtxoF: Future[Unit] = for { + addr <- wallet.getNewAddress() + + txid <- bitcoind.sendToAddress(addr, valueFromBitcoind) + _ <- bitcoind.generate(6) + tx <- bitcoind.getRawTransaction(txid) + + addUtxoRes <- { + val voutOpt = tx.vout.find { rpcOut => + val addressesOpt = rpcOut.scriptPubKey.addresses + addressesOpt.exists(_.contains(addr)) + } + + val vout = voutOpt.getOrElse( + throw new IllegalArgumentException( + "Could not find ouput that spent to our address!")) + + wallet.addUtxo(tx.hex, UInt32(vout.n)) + } + } yield { + addUtxoRes match { + case err: AddUtxoError => fail(err) + case AddUtxoSuccess(w: WalletApi) => () // continue test + } + } + + for { + _ <- addUtxoF + + utxos <- wallet.listUtxos() + _ = assert(utxos.nonEmpty) + + balance <- wallet.getBalance() + _ = assert(balance > Bitcoins.zero) + + addressFromBitcoind <- bitcoind.getNewAddress + signedTx <- wallet.sendToAddress(addressFromBitcoind, + Bitcoins(0.5), + feeRate) + + txid <- bitcoind.sendRawTransaction(signedTx) + _ <- bitcoind.generate(1) + tx <- bitcoind.getRawTransaction(txid) + } yield { + assert(tx.confirmations.exists(_ > 0)) + } + } +} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/WalletStorageTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletStorageTest.scala new file mode 100644 index 0000000000..df6daf5037 --- /dev/null +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletStorageTest.scala @@ -0,0 +1,102 @@ +package org.bitcoins.wallet + +import org.bitcoins.wallet.util.BitcoinSWalletTest +import org.scalatest.FutureOutcome +import org.bitcoins.testkit.fixtures.EmptyFixture +import org.bitcoins.testkit.core.gen.CryptoGenerators +import javassist.bytecode.Mnemonic +import org.bitcoins.core.crypto.MnemonicCode +import org.bitcoins.core.crypto.AesPassword +import scala.util.Success +import java.nio.file.Files +import akka.compat.Future +import akka.compat.Future +import scala.concurrent.Future +import scala.collection.JavaConverters._ +import java.nio.file.Path +import org.scalatest.BeforeAndAfterEach +import java.nio.file.Paths +import org.bitcoins.wallet.ReadMnemonicError.DecryptionError +import java.{util => ju} +import org.bitcoins.wallet.ReadMnemonicError.JsonParsingError + +class WalletStorageTest + extends BitcoinSWalletTest + with BeforeAndAfterEach + with EmptyFixture { + + val datadir = appConfig.datadir + + override def beforeEach(): Unit = { + Files + .walk(datadir) + .iterator() + .asScala + .filter((p: Path) => p != datadir) + .foreach(Files.delete(_)) + } + + behavior of "WalletStorage" + + val passphrase = AesPassword("this_is_secret") + val badPassphrase = AesPassword("this_is_also_secret") + + def getMnemonic: MnemonicCode = + CryptoGenerators.mnemonicCode.sample.getOrElse(getMnemonic) + + def getAndWriteMnemonic(): MnemonicCode = { + val mnemonic = getMnemonic + val Success(encrypted) = + EncryptedMnemonicHelper.encrypt(mnemonic, passphrase) + + val _ = + WalletStorage.writeMnemonicToDisk(encrypted) + + mnemonic + } + + it must "write and read a mnemonic to disk" in { _ => + val writtenMnemonic = getAndWriteMnemonic() + val read = + WalletStorage.decryptMnemonicFromDisk(passphrase) + + read match { + case ReadMnemonicSuccess(readMnemonic) => + assert(writtenMnemonic == readMnemonic) + case err: ReadMnemonicError => fail(err.toString) + } + } + + it must "fail to read a mnemonic with bad password" in { _ => + val writtenMnemonic = getAndWriteMnemonic() + val read = WalletStorage.decryptMnemonicFromDisk(badPassphrase) + + read match { + case ReadMnemonicSuccess(mnemonic) => + fail("Wrote and read with different passwords") + case DecryptionError => succeed + case err: ReadMnemonicError => fail(err.toString) + } + } + + it must "fail to read a mnemonic that has bad JSON in it" in { _ => + val badJson = + """ + | { + | "iv":"ba7722683dad8067df8d069ee04530cc", + | "cipherText":, + | "salt":"2b7e7d718139518070a87fbbda03ea33cdcda83b555020e9344774e6e7d08af2" + | } + """.stripMargin + Files.write(datadir.resolve(WalletStorage.ENCRYPTED_SEED_FILE_NAME), + badJson.getBytes()) + + val read = + WalletStorage.decryptMnemonicFromDisk(passphrase) + + read match { + case JsonParsingError(_) => succeed + case res: ReadMnemonicResult => fail(res.toString()) + } + } +} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/WalletUnitTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletUnitTest.scala new file mode 100644 index 0000000000..e948c3f085 --- /dev/null +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/WalletUnitTest.scala @@ -0,0 +1,72 @@ +package org.bitcoins.wallet + +import org.bitcoins.wallet.api.UnlockedWalletApi +import org.bitcoins.wallet.util.BitcoinSWalletTest +import org.scalatest.FutureOutcome +import org.bitcoins.wallet.api.UnlockWalletError.BadPassword +import org.bitcoins.wallet.api.UnlockWalletError.JsonParsingError +import org.bitcoins.wallet.api.UnlockWalletSuccess +import org.bitcoins.core.crypto.AesPassword +import org.bitcoins.wallet.api.UnlockWalletError.MnemonicNotFound + +class WalletUnitTest extends BitcoinSWalletTest { + + override type FixtureParam = UnlockedWalletApi + + override def withFixture(test: OneArgAsyncTest): FutureOutcome = + withNewWallet(test) + + behavior of "Wallet - unit test" + + it should "create a new wallet" in { wallet: UnlockedWalletApi => + for { + accounts <- wallet.listAccounts() + addresses <- wallet.listAddresses() + } yield { + assert(accounts.length == 1) + assert(addresses.isEmpty) + } + } + + // eventually this test should NOT succeed, as BIP44 + // requires a limit to addresses being generated when + // they haven't received any funds + it should "generate addresses" in { wallet: UnlockedWalletApi => + for { + addr <- wallet.getNewAddress() + otherAddr <- wallet.getNewAddress() + allAddrs <- wallet.listAddresses() + } yield { + assert(allAddrs.length == 2) + assert(allAddrs.exists(_.address == addr)) + assert(allAddrs.exists(_.address == otherAddr)) + } + } + + it should "lock and unlock the wallet" in { wallet: UnlockedWalletApi => + val passphrase = wallet.passphrase + val locked = wallet.lock() + val unlocked = wallet.unlock(passphrase) match { + case MnemonicNotFound => fail(MnemonicNotFound) + case BadPassword => fail(BadPassword) + case JsonParsingError(message) => fail(message) + case UnlockWalletSuccess(unlockedWalletApi) => unlockedWalletApi + } + + assert(wallet.mnemonicCode == unlocked.mnemonicCode) + } + + it should "fail to unlock the wallet with a bad password" in { + wallet: UnlockedWalletApi => + val badpassphrase = AesPassword("bad") + val locked = wallet.lock() + wallet.unlock(badpassphrase) match { + case MnemonicNotFound => fail(MnemonicNotFound) + case BadPassword => succeed + case JsonParsingError(message) => fail(message) + case UnlockWalletSuccess(_) => + fail("Unlocked wallet with bad password!") + } + } + +} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/AccountDAOFixture.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/AccountDAOFixture.scala new file mode 100644 index 0000000000..7f69506af7 --- /dev/null +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/AccountDAOFixture.scala @@ -0,0 +1,25 @@ +package org.bitcoins.wallet.fixtures + +import org.bitcoins.wallet.db.WalletDbManagement +import org.bitcoins.wallet.models.AccountDAO +import org.bitcoins.wallet.util.BitcoinSWalletTest +import org.scalatest._ + +import scala.concurrent.Future + +trait AccountDAOFixture extends fixture.AsyncFlatSpec with BitcoinSWalletTest { + override final type FixtureParam = AccountDAO + + override final def withFixture(test: OneArgAsyncTest): FutureOutcome = + makeDependentFixture(createAccountTable, dropAccountTable)(test) + + private def dropAccountTable(accountDAO: AccountDAO): Future[Unit] = { + WalletDbManagement.dropTable(accountDAO.table) + } + + private def createAccountTable(): Future[AccountDAO] = { + val dao = AccountDAO() + WalletDbManagement.createTable(dao.table).map(_ => dao) + } + +} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/AddressDAOFixture.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/AddressDAOFixture.scala new file mode 100644 index 0000000000..935bb7daf1 --- /dev/null +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/AddressDAOFixture.scala @@ -0,0 +1,46 @@ +package org.bitcoins.wallet.fixtures + +import scala.concurrent.Future + +import org.bitcoins.wallet.db.WalletDbManagement +import org.bitcoins.wallet.models.{AccountDAO, AddressDAO} +import org.bitcoins.wallet.util.BitcoinSWalletTest +import org.scalatest._ + +/** + * This fixture has a tuple of DAOs, because + * addresses require an account to be valid + */ +trait AddressDAOFixture extends fixture.AsyncFlatSpec with BitcoinSWalletTest { + + override final type FixtureParam = (AccountDAO, AddressDAO) + + override final def withFixture(test: OneArgAsyncTest): FutureOutcome = + makeDependentFixture(createTables, dropTables)(test) + + private def dropTables(daos: FixtureParam): Future[Unit] = { + val (account, address) = daos + val dropAccountF = WalletDbManagement.dropTable(account.table) + val dropAddressF = WalletDbManagement.dropTable(address.table) + for { + _ <- dropAccountF + _ <- dropAddressF + } yield () + + } + + private def createTables(): Future[FixtureParam] = { + val accountDAO = AccountDAO() + val addressDAO = AddressDAO() + + val createAccountF = + WalletDbManagement.createTable(accountDAO.table) + val createTableF = + WalletDbManagement.createTable(addressDAO.table) + for { + _ <- createAccountF + _ <- createTableF + } yield (accountDAO, addressDAO) + } + +} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/DAOFixture.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/DAOFixture.scala new file mode 100644 index 0000000000..52ab19d401 --- /dev/null +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/DAOFixture.scala @@ -0,0 +1,42 @@ +package org.bitcoins.wallet.fixtures + +import org.bitcoins.wallet.db.WalletDbManagement +import org.bitcoins.wallet.util.BitcoinSWalletTest +import org.scalatest._ +import slick.jdbc.SQLiteProfile.api._ + +import scala.language.reflectiveCalls +import scala.concurrent.{Await, Future} + +private[fixtures] trait DAOFixture + extends fixture.AsyncFlatSpec + with BeforeAndAfterAll + with BitcoinSWalletTest { this: Suite => + import DAOFixture.HasTable + + private[fixtures] val daoAccumulator = + Vector.newBuilder[HasTable] + + override def beforeAll(): Unit = { + val tables = daoAccumulator.result() + + val dropTablesF = + Future.sequence( + tables.map((dao: HasTable) => WalletDbManagement.dropTable(dao.table))) + + val createTablesF = + dropTablesF.flatMap { _ => + Future.sequence(tables.map((dao: HasTable) => + WalletDbManagement.createTable(dao.table))) + } + + Await.result(createTablesF, timeout) + + super.beforeAll() + } + +} +private[fixtures] object DAOFixture { + + type HasTable = { def table[T <: Table[_]]: TableQuery[T] } +} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/UtxoDAOFixture.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/UtxoDAOFixture.scala new file mode 100644 index 0000000000..6bc84b40d8 --- /dev/null +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/fixtures/UtxoDAOFixture.scala @@ -0,0 +1,26 @@ +package org.bitcoins.wallet.fixtures + +import org.bitcoins.wallet.db.WalletDbManagement +import org.bitcoins.wallet.models.UTXOSpendingInfoDAO +import org.bitcoins.wallet.util.BitcoinSWalletTest +import org.scalatest._ + +import scala.concurrent.Future + +trait UtxoDAOFixture extends fixture.AsyncFlatSpec with BitcoinSWalletTest { + + override final type FixtureParam = UTXOSpendingInfoDAO + + override final def withFixture(test: OneArgAsyncTest): FutureOutcome = + makeDependentFixture(createUtxoTable, dropUtxoTable)(test) + + private def dropUtxoTable(utxoDAO: FixtureParam): Future[Unit] = { + WalletDbManagement.dropTable(utxoDAO.table) + } + + private def createUtxoTable(): Future[UTXOSpendingInfoDAO] = { + val dao = UTXOSpendingInfoDAO() + WalletDbManagement.createTable(dao.table).map(_ => dao) + } + +} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/models/AccountDAOTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/models/AccountDAOTest.scala new file mode 100644 index 0000000000..59e9a7e310 --- /dev/null +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/models/AccountDAOTest.scala @@ -0,0 +1,23 @@ +package org.bitcoins.wallet.models + +import org.bitcoins.testkit.core.gen.CryptoGenerators +import org.bitcoins.wallet.fixtures.AccountDAOFixture +import org.bitcoins.wallet.util.{BitcoinSWalletTest, WalletTestUtil} + +class AccountDAOTest extends BitcoinSWalletTest with AccountDAOFixture { + + it should "insert and read an account into the database" in { accountDAO => + for { + created <- { + val account = WalletTestUtil.firstAccount + + val xpub = CryptoGenerators.extPublicKey.sample.get + + val accountDb = AccountDb(xpub, account) + accountDAO.create(accountDb) + } + found <- accountDAO.read( + (created.hdAccount.coin, created.hdAccount.index)) + } yield assert(found.contains(created)) + } +} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/models/AddressDAOTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/models/AddressDAOTest.scala new file mode 100644 index 0000000000..2414eb7b92 --- /dev/null +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/models/AddressDAOTest.scala @@ -0,0 +1,71 @@ +package org.bitcoins.wallet.models + +import java.sql.SQLException + +import org.bitcoins.core.config.RegTest +import org.bitcoins.core.crypto.ECPublicKey +import org.bitcoins.core.protocol.P2SHAddress +import org.bitcoins.core.script.ScriptType +import org.bitcoins.core.util.CryptoUtil +import org.bitcoins.wallet.fixtures.AddressDAOFixture +import org.bitcoins.wallet.util.{BitcoinSWalletTest, WalletTestUtil} +import org.bitcoins.core.hd.HDChainType +import org.bitcoins.core.hd.SegWitHDPath +import org.bitcoins.wallet.Wallet +import org.bitcoins.core.protocol.script.WitnessScriptPubKeyV0 +import org.bitcoins.core.protocol.script.P2WPKHWitnessSPKV0 +import org.bitcoins.core.protocol.script.ScriptPubKey +import org.bitcoins.core.protocol.Bech32Address +import org.bitcoins.core.protocol.script.P2WPKHWitnessV0 + +class AddressDAOTest extends BitcoinSWalletTest with AddressDAOFixture { + + // todo: do this with an actual working address + // todo: with script witness + redeem script + private def getAddressDb(account: AccountDb): AddressDb = { + val path = SegWitHDPath(WalletTestUtil.hdCoinType, + chainType = HDChainType.External, + accountIndex = account.hdAccount.index, + addressIndex = 0) + val pubkey: ECPublicKey = ECPublicKey.freshPublicKey + val hashedPubkey = CryptoUtil.sha256Hash160(pubkey.bytes) + val wspk = P2WPKHWitnessSPKV0(pubkey) + val scriptWitness = P2WPKHWitnessV0(pubkey) + val address = Bech32Address.apply(wspk, WalletTestUtil.networkParam) + + SegWitAddressDb(path = path, + ecPublicKey = pubkey, + hashedPubkey, + address, + scriptWitness) + } + + behavior of "AddressDAO" + + it should "fail to insert and read an address into the database without a corresponding account" in { + daos => + val (_, addressDAO) = daos + val readF = { + val addressDb = getAddressDb(WalletTestUtil.firstAccountDb) + addressDAO.create(addressDb) + } + + recoverToSucceededIf[SQLException](readF) + } + + it should "insert and read an address into the database with a corresponding account" in { + daos => + val (accountDAO, addressDAO) = daos + for { + createdAccount <- { + val account = WalletTestUtil.firstAccountDb + accountDAO.create(account) + } + createdAddress <- { + val addressDb = getAddressDb(createdAccount) + addressDAO.create(addressDb) + } + readAddress <- addressDAO.read(createdAddress.address) + } yield assert(readAddress.contains(createdAddress)) + } +} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/models/UTXOSpendingInfoDAOTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/models/UTXOSpendingInfoDAOTest.scala new file mode 100644 index 0000000000..e7943f0b59 --- /dev/null +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/models/UTXOSpendingInfoDAOTest.scala @@ -0,0 +1,41 @@ +package org.bitcoins.wallet.models + +import org.bitcoins.core.currency.Bitcoins +import org.bitcoins.core.protocol.transaction.{ + TransactionOutPoint, + TransactionOutput +} +import org.bitcoins.wallet.fixtures.UtxoDAOFixture +import org.bitcoins.wallet.util.{BitcoinSWalletTest, WalletTestUtil} + +class UTXOSpendingInfoDAOTest extends BitcoinSWalletTest with UtxoDAOFixture { + behavior of "UTXOSpendingInfoDAO" + + it should "insert a segwit UTXO and read it" in { utxoDAO => + val outpoint = + TransactionOutPoint(WalletTestUtil.sampleTxid, WalletTestUtil.sampleVout) + val output = TransactionOutput(Bitcoins.one, WalletTestUtil.sampleSPK) + val scriptWitness = WalletTestUtil.sampleScriptWitness + val privkeyPath = WalletTestUtil.sampleSegwitPath + val utxo = + SegWitUTOXSpendingInfodb( + id = None, + outPoint = outpoint, + output = output, + privKeyPath = privkeyPath, + scriptWitness = scriptWitness) // todo test this properly + + for { + created <- utxoDAO.create(utxo) + read <- utxoDAO.read(created.id.get) + } yield assert(read.contains(created)) + } + + it should "insert a legacy UTXO and read it" ignore { _ => + ??? + } + + it should "insert a nested segwit UTXO and read it" ignore { _ => + ??? + } +} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/util/BitcoinSWalletTest.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/util/BitcoinSWalletTest.scala new file mode 100644 index 0000000000..a17e89dc84 --- /dev/null +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/util/BitcoinSWalletTest.scala @@ -0,0 +1,98 @@ +package org.bitcoins.wallet.util + +import akka.actor.ActorSystem +import akka.testkit.TestKit +import org.bitcoins.core.config.RegTest +import org.bitcoins.core.crypto.MnemonicCode +import org.bitcoins.core.protocol.blockchain.ChainParams +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.rpc.client.common.BitcoindRpcClient +import org.bitcoins.testkit.fixtures.BitcoinSFixture +import org.bitcoins.wallet.Wallet +import org.bitcoins.wallet.api.{ + InitializeWalletError, + InitializeWalletSuccess, + UnlockedWalletApi +} +import org.bitcoins.wallet.config.WalletAppConfig +import org.bitcoins.wallet.db.{WalletDbManagement} +import org.scalatest._ + +import scala.concurrent.duration.{DurationInt, FiniteDuration} +import scala.concurrent.{ExecutionContext, Future} +import org.bitcoins.db.AppConfig + +trait BitcoinSWalletTest + extends fixture.AsyncFlatSpec + with BitcoinSFixture + with BeforeAndAfterAll + with BitcoinSLogger { + implicit val actorSystem: ActorSystem = ActorSystem(getClass.getSimpleName) + implicit val ec: ExecutionContext = actorSystem.dispatcher + + protected lazy val chainParams: ChainParams = WalletTestUtil.chainParams + protected implicit lazy val appConfig: WalletAppConfig = WalletAppConfig() + + /** Timeout for async operations */ + protected val timeout: FiniteDuration = 10.seconds + + protected val networkParam: RegTest.type = WalletTestUtil.networkParam + + override protected def afterAll(): Unit = { + TestKit.shutdownActorSystem(actorSystem) + } + + override def beforeAll(): Unit = { + AppConfig.throwIfDefaultDatadir(appConfig) + } + + def destroyWallet(wallet: UnlockedWalletApi): Future[Unit] = + WalletDbManagement.dropAll().map(_ => ()) + + def createNewWallet(): Future[UnlockedWalletApi] = { + + for { + _ <- WalletDbManagement.createAll() + wallet <- Wallet.initialize().map { + case InitializeWalletSuccess(wallet) => wallet + case err: InitializeWalletError => fail(err) + } + } yield wallet + } + + def withNewWallet(test: OneArgAsyncTest): FutureOutcome = + makeDependentFixture(build = createNewWallet, destroy = destroyWallet)(test) + + case class WalletWithBitcoind( + wallet: UnlockedWalletApi, + bitcoind: BitcoindRpcClient) + + def createWalletWithBitcoind( + wallet: UnlockedWalletApi): Future[WalletWithBitcoind] = { + val bitcoindF = createBitcoindWithFunds() + bitcoindF.map(WalletWithBitcoind(wallet, _)) + } + + def destroyWalletWithBitcoind( + walletWithBitcoind: WalletWithBitcoind): Future[Unit] = { + val WalletWithBitcoind(wallet, bitcoind) = walletWithBitcoind + val stopF = bitcoind.stop() + val destroyWalletF = destroyWallet(wallet) + for { + _ <- stopF + _ <- destroyWalletF + } yield () + } + + def withNewWalletAndBitcoind(test: OneArgAsyncTest): FutureOutcome = { + val builder: () => Future[WalletWithBitcoind] = composeBuildersAndWrap( + createNewWallet, + createWalletWithBitcoind, + (_: UnlockedWalletApi, walletWithBitcoind: WalletWithBitcoind) => + walletWithBitcoind + ) + + makeDependentFixture(builder, destroy = destroyWalletWithBitcoind)(test) + } + +} diff --git a/wallet-test/src/test/scala/org/bitcoins/wallet/util/WalletTestUtil.scala b/wallet-test/src/test/scala/org/bitcoins/wallet/util/WalletTestUtil.scala new file mode 100644 index 0000000000..4f901bc1bc --- /dev/null +++ b/wallet-test/src/test/scala/org/bitcoins/wallet/util/WalletTestUtil.scala @@ -0,0 +1,63 @@ +package org.bitcoins.wallet.util + +import org.bitcoins.core.config.RegTest +import org.bitcoins.core.crypto._ +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.protocol.blockchain.{ + ChainParams, + RegTestNetChainParams +} +import org.bitcoins.core.protocol.script.ScriptPubKey +import org.bitcoins.testkit.core.gen.CryptoGenerators +import org.bitcoins.wallet.models.AccountDb +import org.bitcoins.wallet.HDUtil +import scodec.bits.HexStringSyntax +import org.bitcoins.core.hd._ +import org.bitcoins.core.protocol.script.ScriptWitness +import org.bitcoins.core.protocol.script.P2WPKHWitnessV0 + +object WalletTestUtil { + + val chainParams: ChainParams = RegTestNetChainParams + val networkParam: RegTest.type = RegTest + + val hdCoinType: HDCoinType = HDCoinType.Testnet + + /** + * Useful if you want wallet test runs + * To use the same key values each time + */ + val sampleMnemonic = + MnemonicCode.fromWords( + Vector("portion", + "uniform", + "owner", + "crime", + "duty", + "floor", + "sketch", + "stumble", + "outer", + "south", + "relax", + "car")) + + lazy val sampleSegwitPath = + SegWitHDPath(hdCoinType, + accountIndex = 0, + HDChainType.External, + addressIndex = 0) + + def freshXpub: ExtPublicKey = + CryptoGenerators.extPublicKey.sample.getOrElse(freshXpub) + + val firstAccount = HDAccount(HDCoin(HDPurposes.SegWit, hdCoinType), 0) + def firstAccountDb = AccountDb(freshXpub, firstAccount) + + lazy val sampleTxid: DoubleSha256Digest = DoubleSha256Digest( + hex"a910523c0b6752fbcb9c24303b4e068c505825d074a45d1c787122efb4649215") + lazy val sampleVout: UInt32 = UInt32.zero + lazy val sampleSPK: ScriptPubKey = + ScriptPubKey.fromAsmBytes(hex"001401b2ac67587e4b603bb3ad709a8102c30113892d") + lazy val sampleScriptWitness: ScriptWitness = P2WPKHWitnessV0(freshXpub.key) +} diff --git a/wallet/README.md b/wallet/README.md new file mode 100644 index 0000000000..2ab5269073 --- /dev/null +++ b/wallet/README.md @@ -0,0 +1,44 @@ +### wallet + +This is meant to be a stand alone project that can be used as a cold storage wallet _and_ hot wallet. + +#### Features + +- utxo storage +- key storage +- key generation +- coin selection +- transaction building +- fee calculation + +#### Design choices + +- Private key material is just stored once, as the mnemonic code used to initialize the + wallet +- Addresses we hand out to users are stored with their + [BIP44/BIP49/BIP84 paths](../core/src/main/scala/org/bitcoins/core/hd/HDPath.scala) + and script types, so that everything we need for spending the money sent to an address + is derivable. + +#### Mnemonic encryption + +The mnemonic seed to the Bitcoin-S wallet is written to disk, encrypted. The file name is +`$HOME/.bitcoin-s/$NETWORK/encrypted_bitcoin-s_seed.json`. We store it in a JSON object +that looks like this: + +```json +{ + "iv": "initializationVector", + "cipherText": "encryptedCipherText", + "salt": "saltUsedInEncryption" +} +``` + +The parts that's relevant to this part of the wallet is `WalletStorage.scala` (where we handle +the actual reading from and writing to disk), `EncryptedMnemonic.scala` (where we convert an +encrypted mnemonic to a cleartext mnemonic) and `AesCrypt.scala` (where do the actual +encryption/decryption). + +We use AES encryption for this, block cipher mode and PKCS5 padding. The wallet password is fed +into the PBKDF2 key stretching function, using SHA512 as the HMAC function. This happens in +`PBKDF2.scala`. diff --git a/wallet/src/main/resources/wallet.conf b/wallet/src/main/resources/wallet.conf new file mode 100644 index 0000000000..bf755e8785 --- /dev/null +++ b/wallet/src/main/resources/wallet.conf @@ -0,0 +1,5 @@ +bitcoin-s { + database { + name = "walletdb.sqlite" + } +} \ No newline at end of file diff --git a/wallet/src/main/scala/org/bitcoins/wallet/EncryptedMnemonic.scala b/wallet/src/main/scala/org/bitcoins/wallet/EncryptedMnemonic.scala new file mode 100644 index 0000000000..a29ab4ab32 --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/EncryptedMnemonic.scala @@ -0,0 +1,41 @@ +package org.bitcoins.wallet + +import java.nio.charset.StandardCharsets + +import org.bitcoins.core.crypto.{ + AesCrypt, + AesEncryptedData, + AesPassword, + MnemonicCode +} +import scodec.bits.ByteVector + +import scala.util.Try + +case class EncryptedMnemonic(value: AesEncryptedData) { + import org.bitcoins.core.util.EitherUtil.EitherOps._ + + def toMnemonic(passphrase: AesPassword): Try[MnemonicCode] = { + AesCrypt.decrypt(value, passphrase).toTry.map { decrypted => + val wordsStr = new String(decrypted.toArray, StandardCharsets.UTF_8) + val wordsVec = wordsStr.split(" ").toVector + MnemonicCode.fromWords(wordsVec) + } + } +} + +object EncryptedMnemonicHelper { + import org.bitcoins.core.util.EitherUtil.EitherOps._ + + def encrypt( + mnemonicCode: MnemonicCode, + passphrase: AesPassword): Try[EncryptedMnemonic] = { + val wordsStr = mnemonicCode.words.mkString(" ") + val Right(clearText) = ByteVector.encodeUtf8(wordsStr) + + AesCrypt + .encrypt(clearText, passphrase) + .toTry + .map(EncryptedMnemonic(_)) + } +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/HDUtil.scala b/wallet/src/main/scala/org/bitcoins/wallet/HDUtil.scala new file mode 100644 index 0000000000..46c2cd37e8 --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/HDUtil.scala @@ -0,0 +1,78 @@ +package org.bitcoins.wallet + +import org.bitcoins.core.hd._ +import org.bitcoins.core.crypto._ +import org.bitcoins.core.config._ +import org.bitcoins.db.AppConfig + +private[wallet] object HDUtil { + + /** Gets the xpriv version required for the given HD purpose */ + def getXprivVersion(hdPurpose: HDPurpose)( + implicit config: AppConfig): ExtKeyPrivVersion = { + import config.network + import org.bitcoins.core.hd.HDPurposes._ + import ExtKeyVersion._ + + (hdPurpose, network) match { + case (SegWit, MainNet) => SegWitMainNetPriv + case (SegWit, TestNet3 | RegTest) => SegWitTestNet3Priv + case (NestedSegWit, MainNet) => NestedSegWitMainNetPriv + case (NestedSegWit, TestNet3 | RegTest) => NestedSegWitTestNet3Priv + case (Legacy, MainNet) => LegacyMainNetPriv + case (Legacy, TestNet3 | RegTest) => LegacyTestNet3Priv + case (unknown: HDPurpose, _) => + throw new IllegalArgumentException(s"Got unknown HD purpose $unknown") + } + } + + /** Gets the xpub version required for the given HD purpose */ + def getXpubVersion(hdPurpose: HDPurpose)( + implicit config: AppConfig): ExtKeyPubVersion = { + import config.network + import org.bitcoins.core.hd.HDPurposes._ + import ExtKeyVersion._ + + (hdPurpose, network) match { + case (SegWit, MainNet) => SegWitMainNetPub + case (SegWit, TestNet3 | RegTest) => SegWitTestNet3Pub + case (NestedSegWit, MainNet) => NestedSegWitMainNetPub + case (NestedSegWit, TestNet3 | RegTest) => NestedSegWitTestNet3Pub + case (Legacy, MainNet) => LegacyMainNetPub + case (Legacy, TestNet3 | RegTest) => LegacyTestNet3Pub + case (unknown: HDPurpose, _) => + throw new IllegalArgumentException(s"Got unknown HD purpose $unknown") + } + } + + /** Gets the matching xpriv version to this xpub version */ + def getMatchingExtKeyVersion(version: ExtKeyPubVersion): ExtKeyPrivVersion = { + import ExtKeyVersion._ + version match { + case LegacyMainNetPub => LegacyMainNetPriv + case LegacyTestNet3Pub => LegacyTestNet3Priv + case NestedSegWitMainNetPub => NestedSegWitMainNetPriv + case NestedSegWitTestNet3Pub => NestedSegWitTestNet3Priv + case SegWitMainNetPub => SegWitMainNetPriv + case SegWitTestNet3Pub => SegWitTestNet3Priv + } + } + + /** Gets the matching xpub version to this xpriv version */ + def getMatchingExtKeyVersion(version: ExtKeyPrivVersion): ExtKeyPubVersion = { + import ExtKeyVersion._ + version match { + case LegacyMainNetPriv => LegacyMainNetPub + case LegacyTestNet3Priv => LegacyTestNet3Pub + case NestedSegWitMainNetPriv => NestedSegWitMainNetPub + case NestedSegWitTestNet3Priv => NestedSegWitTestNet3Pub + case SegWitMainNetPriv => SegWitMainNetPub + case SegWitTestNet3Priv => SegWitTestNet3Pub + } + } + + def getCoinType(network: NetworkParameters): HDCoinType = network match { + case MainNet => HDCoinType.Bitcoin + case TestNet3 | RegTest => HDCoinType.Testnet + } +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/LockedWallet.scala b/wallet/src/main/scala/org/bitcoins/wallet/LockedWallet.scala new file mode 100644 index 0000000000..df6f6756f3 --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/LockedWallet.scala @@ -0,0 +1,271 @@ +package org.bitcoins.wallet + +import org.bitcoins.core.crypto._ +import org.bitcoins.core.hd._ +import org.bitcoins.core.currency._ +import org.bitcoins.core.protocol.blockchain._ +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.protocol.BitcoinAddress +import org.bitcoins.core.protocol.script.ScriptPubKey +import org.bitcoins.core.protocol.transaction.{ + Transaction, + TransactionOutPoint, + TransactionOutput +} +import org.bitcoins.core.util.{BitcoinSLogger, EitherUtil} +import org.bitcoins.wallet.api.AddUtxoError.{AddressNotFound, BadSPK} +import org.bitcoins.wallet.api._ +import org.bitcoins.wallet.models._ + +import scala.concurrent.Future +import scala.util.Success +import scala.util.Failure +import org.bitcoins.db.AppConfig +import scala.concurrent.ExecutionContext +import org.bitcoins.wallet.ReadMnemonicError.DecryptionError +import org.bitcoins.wallet.ReadMnemonicError.JsonParsingError + +abstract class LockedWallet extends LockedWalletApi with BitcoinSLogger { + + protected val addressDAO: AddressDAO = AddressDAO() + protected val accountDAO: AccountDAO = AccountDAO() + protected val utxoDAO: UTXOSpendingInfoDAO = UTXOSpendingInfoDAO() + + override def getBalance(): Future[CurrencyUnit] = listUtxos().map { utxos => + utxos.map(_.value).fold(0.bitcoin)(_ + _) + } + + /** The default HD coin */ + private lazy val DEFAULT_HD_COIN: HDCoin = { + val coinType = chainParams match { + case MainNetChainParams => HDCoinType.Bitcoin + case RegTestNetChainParams | TestNetChainParams => HDCoinType.Testnet + } + HDCoin(Wallet.DEFAULT_HD_PURPOSE, coinType) + } + + /** + * @inheritdoc + */ + override def unlock(passphrase: AesPassword): UnlockWalletResult = { + logger.debug(s"Trying to unlock wallet") + val result = WalletStorage.decryptMnemonicFromDisk(passphrase) + result match { + case DecryptionError => + logger.error(s"Bad password for unlocking wallet!") + UnlockWalletError.BadPassword + case JsonParsingError(message) => + logger.error(s"JSON parsing error when unlocking wallet: $message") + UnlockWalletError.JsonParsingError(message) + case ReadMnemonicError.NotFoundError => + logger.error(s"Encrypted mnemonic not found when unlocking the wallet!") + UnlockWalletError.MnemonicNotFound + + case ReadMnemonicSuccess(mnemonic) => + logger.debug(s"Successfully uunlocked wallet") + UnlockWalletSuccess(Wallet(mnemonic)) + } + } + + override def listAccounts(): Future[Vector[AccountDb]] = + accountDAO.findAll() + + override def listAddresses(): Future[Vector[AddressDb]] = + addressDAO.findAll() + + /** + * Tries to convert the provided spk to an address, and then checks if we have + * it in our address table + */ + private def findAddress( + spk: ScriptPubKey): Future[Either[AddUtxoError, AddressDb]] = + BitcoinAddress.fromScriptPubKey(spk, networkParameters) match { + case Success(address) => + addressDAO.findAddress(address).map { + case Some(addrDb) => Right(addrDb) + case None => Left(AddressNotFound) + } + case Failure(_) => Future.successful(Left(BadSPK)) + } + + private def writeUtxo( + output: TransactionOutput, + outPoint: TransactionOutPoint, + addressDb: AddressDb): Future[UTXOSpendingInfoDb] = { + + val utxo: UTXOSpendingInfoDb = addressDb match { + case segwitAddr: SegWitAddressDb => + SegWitUTOXSpendingInfodb( + id = None, + outPoint = outPoint, + output = output, + privKeyPath = segwitAddr.path, + scriptWitness = segwitAddr.witnessScript + ) + case otherAddr @ (_: LegacyAddressDb | _: NestedSegWitAddressDb) => + throw new IllegalArgumentException( + s"Bad utxo $otherAddr. Note: Only Segwit is implemented") + } + + utxoDAO.create(utxo).map { written => + val writtenOut = written.outPoint + logger.info( + s"Successfully inserted UTXO ${writtenOut.txId.hex}:${writtenOut.vout.toInt} into DB") + logger.info(s"UTXO details: ${written.output}") + written + } + } + + /** + * @inheritdoc + */ + override def addUtxo( + transaction: Transaction, + vout: UInt32): Future[AddUtxoResult] = { + import AddUtxoError._ + import org.bitcoins.core.util.EitherUtil.EitherOps._ + + logger.info(s"Adding UTXO to wallet: ${transaction.txId.hex}:${vout.toInt}") + + // first check: does the provided vout exist in the tx? + val voutIndexOutOfBounds: Boolean = { + val voutLength = transaction.outputs.length + val outOfBunds = voutLength <= vout.toInt + + if (outOfBunds) + logger.error( + s"TX with TXID ${transaction.txId.hex} only has $voutLength, got request to add vout ${vout.toInt}!") + outOfBunds + } + + if (voutIndexOutOfBounds) { + Future.successful(VoutIndexOutOfBounds) + } else { + + val output = transaction.outputs(vout.toInt) + val outPoint = TransactionOutPoint(transaction.txId, vout) + + // second check: do we have an address associated with the provided + // output in our DB? + val addressDbEitherF: Future[Either[AddUtxoError, AddressDb]] = + findAddress(output.scriptPubKey) + + // insert the UTXO into the DB + addressDbEitherF.flatMap { addressDbE => + val biasedE: Either[AddUtxoError, Future[UTXOSpendingInfoDb]] = for { + addressDb <- addressDbE + } yield writeUtxo(output, outPoint, addressDb) + + EitherUtil.liftRightBiasedFutureE(biasedE) + } map { + case Right(_) => AddUtxoSuccess(this) + case Left(e) => e + } + } + } + + /** + * @inheritdoc + */ + // override def updateUtxo: Future[WalletApi] = ??? + + override def listUtxos(): Future[Vector[UTXOSpendingInfoDb]] = + utxoDAO.findAllUTXOs() + + /** + * @param account Account to generate address from + * @param chainType What chain do we generate from? Internal change vs. external + */ + private def getNewAddressHelper( + account: AccountDb, + chainType: HDChainType + ): Future[BitcoinAddress] = { + + val accountIndex = account.hdAccount.index + + val lastAddrOptF = chainType match { + case HDChainType.External => + addressDAO.findMostRecentExternal(accountIndex) + case HDChainType.Change => + addressDAO.findMostRecentChange(accountIndex) + } + + lastAddrOptF.flatMap { lastAddrOpt => + val addrPath: HDPath = lastAddrOpt match { + case Some(addr) => + addr.path.next + case None => + val account = HDAccount(DEFAULT_HD_COIN, accountIndex) + val chain = account.toChain(chainType) + val address = HDAddress(chain, 0) + address.toPath + } + + val addressDb = + addrPath match { + case segwitPath: SegWitHDPath => + val pathDiff = account.hdAccount.diff(segwitPath) match { + case Some(value) => value + case None => + throw new RuntimeException( + s"Could not diff ${account.hdAccount} and $segwitPath") + } + + val pubkey = account.xpub.deriveChildPubKey(pathDiff) match { + case Failure(exception) => throw exception + case Success(value) => value.key + } + + AddressDbHelper + .getP2WPKHAddress(pubkey, segwitPath, networkParameters) + case _: HDPath => + throw new IllegalArgumentException( + "P2PKH and nested segwit P2PKH not yet implemented") + } + val writeF = addressDAO.create(addressDb) + writeF.foreach { written => + logger.info( + s"Got ${chainType} address ${written.address} at key path ${written.path} with pubkey ${written.ecPublicKey}") + } + + writeF.map(_.address) + } + } + + /** + * right now only generates P2WPKH addresses + * + * @inheritdoc + */ + override def getNewAddress(account: AccountDb): Future[BitcoinAddress] = { + getNewAddressHelper(account, HDChainType.External) + } + + /** Generates a new change address */ + override protected[wallet] def getNewChangeAddress( + account: AccountDb): Future[BitcoinAddress] = { + getNewAddressHelper(account, HDChainType.Change) + } + + /** @inheritdoc */ + override protected[wallet] def getDefaultAccount(): Future[AccountDb] = { + for { + account <- accountDAO.read((DEFAULT_HD_COIN, 0)) + } yield + account.getOrElse( + throw new RuntimeException( + s"Could not find account with ${DEFAULT_HD_COIN.purpose.constant} " + + s"purpose field and ${DEFAULT_HD_COIN.coinType.toInt} coin field")) + } + +} + +object LockedWallet { + private case class LockedWalletImpl()( + implicit val ec: ExecutionContext, + val walletConfig: AppConfig) + extends LockedWallet + + def apply()(implicit ec: ExecutionContext, config: AppConfig): LockedWallet = + LockedWalletImpl() +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/Wallet.scala b/wallet/src/main/scala/org/bitcoins/wallet/Wallet.scala new file mode 100644 index 0000000000..07af071cc2 --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/Wallet.scala @@ -0,0 +1,201 @@ +package org.bitcoins.wallet + +import org.bitcoins.core.config.BitcoinNetwork +import org.bitcoins.core.crypto._ +import org.bitcoins.core.currency._ +import org.bitcoins.core.protocol.BitcoinAddress +import org.bitcoins.core.protocol.transaction._ +import org.bitcoins.core.util.{BitcoinSLogger, EitherUtil} +import org.bitcoins.core.wallet.builder.BitcoinTxBuilder +import org.bitcoins.core.wallet.fee.FeeUnit +import org.bitcoins.core.wallet.utxo.BitcoinUTXOSpendingInfo +import org.bitcoins.wallet.api._ +import org.bitcoins.wallet.models._ +import scodec.bits.BitVector + +import scala.concurrent.{ExecutionContext, Future} +import scala.util.{Failure, Success, Try} +import org.bitcoins.core.hd._ +import org.bitcoins.db.AppConfig + +sealed abstract class Wallet + extends LockedWallet + with UnlockedWalletApi + with BitcoinSLogger { + + /** + * @inheritdoc + */ + override def lock(): LockedWalletApi = { + logger.debug(s"Locking wallet") + val encryptedT = EncryptedMnemonicHelper.encrypt(mnemonicCode, passphrase) + val encrypted = encryptedT match { + case Failure(exception) => + throw new RuntimeException(s"Could not encrypt mnemonic: $exception") + case Success(value) => value + } + + WalletStorage.writeMnemonicToDisk(encrypted) + logger.debug("Locked wallet") + LockedWallet() + } + + override def sendToAddress( + address: BitcoinAddress, + amount: CurrencyUnit, + feeRate: FeeUnit, + fromAccount: AccountDb): Future[Transaction] = { + logger.info(s"Sending $amount to $address at feerate $feeRate") + for { + change <- getNewChangeAddress(fromAccount) + walletUtxos <- listUtxos() + txBuilder <- { + val destinations: Seq[TransactionOutput] = List( + TransactionOutput(amount, address.scriptPubKey)) + + // currencly just grabs one utxos, throws if can't find big enough + // todo: implement coin selection + val utxos: List[BitcoinUTXOSpendingInfo] = + List( + walletUtxos + .find(_.value >= amount) + .get + .toUTXOSpendingInfo(fromAccount, seed)) + + logger.info(s"Spending UTXOs: ${utxos + .map { utxo => + import utxo.outPoint + s"${outPoint.txId.hex}:${outPoint.vout.toInt}" + } + .mkString(", ")}") + + utxos.zipWithIndex.foreach { + case (utxo, index) => + logger.info(s"UTXO $index details: ${utxo.output}") + } + + networkParameters match { + case b: BitcoinNetwork => + BitcoinTxBuilder(destinations = destinations, + utxos = utxos, + feeRate = feeRate, + changeSPK = change.scriptPubKey, + network = b) + } + + } + signed <- txBuilder.sign + /* todo: add change output to UTXO DB + _ <- { + val changeVout = ??? + addUtxo(signed, changeVout) + } */ + } yield { + signed + } + } + +} + +// todo: create multiple wallets, need to maintain multiple databases +object Wallet extends CreateWalletApi with BitcoinSLogger { + + // The default HD purpose of the bitcoin-s wallet. Can be + // one of segwit, nested segwit or legacy. Hard coded for + // now, could be make configurable in the future + private[wallet] val DEFAULT_HD_PURPOSE: HDPurpose = HDPurposes.SegWit + + private case class WalletImpl( + mnemonicCode: MnemonicCode + )( + implicit override val walletConfig: AppConfig, + override val ec: ExecutionContext) + extends Wallet { + + // todo: until we've figured out a better schem + override val passphrase: AesPassword = Wallet.badPassphrase + } + + def apply(mnemonicCode: MnemonicCode)( + implicit config: AppConfig, + ec: ExecutionContext): Wallet = + WalletImpl(mnemonicCode) + + // todo figure out how to handle password part of wallet + val badPassphrase = AesPassword("changeMe") + + // todo fix signature + override def initializeWithEntropy(entropy: BitVector)( + implicit config: AppConfig, + ec: ExecutionContext): Future[InitializeWalletResult] = { + import org.bitcoins.core.util.EitherUtil.EitherOps._ + + logger.info(s"Initializing wallet on chain ${config.network}") + + val mnemonicT = Try(MnemonicCode.fromEntropy(entropy)) + val mnemonicE: Either[InitializeWalletError, MnemonicCode] = + mnemonicT match { + case Success(mnemonic) => + logger.trace(s"Created mnemonic from entropy") + Right(mnemonic) + case Failure(err) => + logger.error(s"Could not create mnemonic from entropy! $err") + Left(InitializeWalletError.BadEntropy) + + } + + val encryptedMnemonicE: Either[InitializeWalletError, EncryptedMnemonic] = + mnemonicE.flatMap { mnemonic => + val encryptedT = EncryptedMnemonicHelper + .encrypt(mnemonic, badPassphrase) + + val encryptedE: Either[Throwable, EncryptedMnemonic] = + encryptedT match { + case Failure(exception) => Left(exception) + case Success(value) => Right(value) + } + + encryptedE.left + .map { err => + logger.error(s"Encryption error when encrypting mnemonic: $err") + InitializeWalletError.EncryptionError(err) + } + } + + val biasedFinalEither: Either[InitializeWalletError, Future[WalletImpl]] = + for { + mnemonic <- mnemonicE + encrypted <- encryptedMnemonicE + } yield { + val wallet = WalletImpl(mnemonic) + val coin = + HDCoin(DEFAULT_HD_PURPOSE, HDUtil.getCoinType(config.network)) + val account = HDAccount(coin, 0) + val xpriv = wallet.xprivForPurpose(DEFAULT_HD_PURPOSE) + + // safe since we're deriving from a priv + val xpub = xpriv.deriveChildPubKey(account).get + val accountDb = AccountDb(xpub, account) + + val mnemonicPath = + WalletStorage.writeMnemonicToDisk(encrypted) + logger.debug(s"Saved encrypted wallet mnemonic to $mnemonicPath") + + for { + _ <- wallet.accountDAO + .create(accountDb) + .map(_ => logger.trace(s"Saved account to DB")) + } yield wallet + } + + val finalEither: Future[Either[InitializeWalletError, WalletImpl]] = + EitherUtil.liftRightBiasedFutureE(biasedFinalEither) + + finalEither.map { + case Right(wallet) => + logger.debug(s"Successfully initialized wallet") + InitializeWalletSuccess(wallet) + case Left(err) => err + } + } +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/WalletStorage.scala b/wallet/src/main/scala/org/bitcoins/wallet/WalletStorage.scala new file mode 100644 index 0000000000..87a8aea236 --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/WalletStorage.scala @@ -0,0 +1,229 @@ +package org.bitcoins.wallet + +import scala.collection.JavaConverters._ +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.core.crypto.AesPassword +import java.nio.file.Files +import org.bitcoins.core.crypto.MnemonicCode +import scodec.bits.ByteVector +import org.bitcoins.core.crypto.AesEncryptedData +import org.bitcoins.core.crypto.AesSalt +import scala.util.Failure +import scala.util.Success +import java.nio.file.Paths +import java.nio.file.Path +import scala.util.Try +import org.bitcoins.db.AppConfig + +// what do we do if seed exists? error if they aren't equal? +object WalletStorage extends BitcoinSLogger { + + private[wallet] val ENCRYPTED_SEED_FILE_NAME: String = + "encrypted_bitcoin-s_seed.json" + + private object MnemonicJsonKeys { + val IV = "iv" + val CIPHER_TEXT = "cipherText" + val SALT = "salt" + } + + /** + * Writes the encrypted mnemonic to disk. + * If we encounter a file in the place we're about + * to write to, we move it to a backup location + * with the current epoch timestamp as part of + * the file name. + */ + def writeMnemonicToDisk(mnemonic: EncryptedMnemonic)( + implicit config: AppConfig): Path = { + import mnemonic.{value => encrypted} + + val jsObject = { + import MnemonicJsonKeys._ + ujson.Obj( + IV -> encrypted.iv.toHex, + CIPHER_TEXT -> encrypted.cipherText.toHex, + SALT -> encrypted.salt.value.toHex + ) + } + + val path = config.datadir.resolve(ENCRYPTED_SEED_FILE_NAME) + + logger.debug(s"Writing mnemonic to $path") + + val writtenJs = ujson.write(jsObject) + + def writeJsToDisk() = { + val writtenPath = Files.write(path, writtenJs.getBytes()) + logger.trace(s"Wrote encrypted mnemonic to $path") + + writtenPath + } + + val foundMnemonicOpt: Option[EncryptedMnemonic] = + readEncryptedMnemonicFromDisk() match { + case Left(_) => + None + case Right(mnemonic) => Some(mnemonic) + } + + foundMnemonicOpt match { + case None => + logger.trace(s"$path does not exist") + writeJsToDisk() + case Some(found) => + logger.trace(s"$path already exists") + if (found == mnemonic) { + logger.trace(s"Found and provided mnemonics are the same, skipping") + path + } else { + logger.warn( + s"Found mnemonic on disk is not the same as mnemonic we're about to write") + + val bakPath = { + val epoch = System.currentTimeMillis.toString + Paths.get(s"${path.toString()}-$epoch.bak") + } + + logger.trace(s"Moving file to $bakPath") + Files.move(path, bakPath) + + logger.warn(s"Moved $path to $bakPath") + writeJsToDisk() + } + } + } + + /** Reads the raw encrypted mnemonic from disk, + * performing no decryption + */ + private def readEncryptedMnemonicFromDisk()( + implicit config: AppConfig): Either[ + ReadMnemonicError, + EncryptedMnemonic] = { + + val path = { + config.datadir.resolve(ENCRYPTED_SEED_FILE_NAME) + } + + val jsonE: Either[ReadMnemonicError, ujson.Value] = { + if (Files.isRegularFile(path)) { + val rawJson = Files.readAllLines(path).asScala.mkString("\n") + logger.debug(s"Read raw encrypted mnemonic from $path") + + Try { + ujson.read(rawJson) + } match { + case Failure(ujson.ParseException(clue, _, _, _)) => + Left(ReadMnemonicError.JsonParsingError(clue)) + case Failure(exception) => throw exception + + case Success(value) => + logger.debug(s"Parsed $path into valid json") + Right(value) + } + } else { + logger.error(s"Encrypted mnemonic not found at $path") + Left(ReadMnemonicError.NotFoundError) + } + } + + import org.bitcoins.core.util.EitherUtil.EitherOps._ + import MnemonicJsonKeys._ + import ReadMnemonicError._ + + val readJsonTupleEither: Either[ + ReadMnemonicError, + (String, String, String)] = jsonE.flatMap { json => + Try { + val ivString = json(IV).str + val cipherTextString = json(CIPHER_TEXT).str + val rawSaltString = json(SALT).str + (ivString, cipherTextString, rawSaltString) + } match { + case Success(value) => Right(value) + case Failure(value: ujson.Value.InvalidData) => + logger.error(s"Error when parsing JSON file $path: ${value.msg}") + Left(JsonParsingError(value.msg)) + case Failure(exception) => throw exception + } + } + + val encryptedEither: Either[ReadMnemonicError, EncryptedMnemonic] = + readJsonTupleEither.flatMap { + case (rawIv, rawCipherText, rawSalt) => + val encryptedOpt = for { + iv <- ByteVector.fromHex(rawIv) + cipherText <- ByteVector.fromHex(rawCipherText) + rawSalt <- ByteVector.fromHex(rawSalt) + salt = AesSalt(rawSalt) + } yield { + logger.debug(s"Parsed contents of $path into an EncryptedMnemonic") + EncryptedMnemonic(AesEncryptedData(cipherText, iv, salt)) + } + encryptedOpt + .map(Right(_)) + .getOrElse( + Left(JsonParsingError("JSON contents was not hex strings"))) + } + encryptedEither + } + + /** + * Reads the wallet mmemonic from disk and tries to parse and + * decrypt it + */ + def decryptMnemonicFromDisk(passphrase: AesPassword)( + implicit + config: AppConfig): ReadMnemonicResult = { + val encryptedEither = readEncryptedMnemonicFromDisk() + + import org.bitcoins.core.util.EitherUtil.EitherOps._ + val decryptedEither: Either[ReadMnemonicError, MnemonicCode] = + encryptedEither.flatMap { encrypted => + encrypted.toMnemonic(passphrase) match { + case Failure(exc) => + logger.error(s"Error when decrypting $encrypted: $exc") + Left(ReadMnemonicError.DecryptionError) + case Success(value) => + logger.debug(s"Decrypted $encrypted successfully") + Right(value) + } + } + + decryptedEither match { + case Left(value) => value + case Right(value) => ReadMnemonicSuccess(value) + } + } +} + +/** + * Represents the result of reading + * an encrypted mnemonic from disk + */ +sealed trait ReadMnemonicResult + +/** Represents the success case */ +case class ReadMnemonicSuccess(mnemonic: MnemonicCode) + extends ReadMnemonicResult + +sealed trait ReadMnemonicError extends ReadMnemonicResult + +object ReadMnemonicError { + + /** + * Something went wrong while decrypting the mnemonic. + * Most likely the passphrase was bad + */ + case object DecryptionError extends ReadMnemonicError + + /** + * Something went wrong while parsing the encrypted + * mnemonic into valid JSON + */ + case class JsonParsingError(message: String) extends ReadMnemonicError + + /** The encrypted mnemonic was not found on disk */ + case object NotFoundError extends ReadMnemonicError +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/api/AddUtxoResult.scala b/wallet/src/main/scala/org/bitcoins/wallet/api/AddUtxoResult.scala new file mode 100644 index 0000000000..691206d039 --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/api/AddUtxoResult.scala @@ -0,0 +1,34 @@ +package org.bitcoins.wallet.api + +sealed trait AddUtxoResult { + def flatMap(f: AddUtxoResult => AddUtxoResult) = ??? + def map(success: AddUtxoSuccess => AddUtxoResult) = ??? +} + +case class AddUtxoSuccess(walletApi: WalletApi) extends AddUtxoResult + +/** Represents an error that might occur when adding an UTXO to the wallet */ +sealed trait AddUtxoError extends Error with AddUtxoResult + +object AddUtxoError { + + /** + * The provided vout index does not exist in the given transaction + */ + final case object VoutIndexOutOfBounds + extends Error("VoutIndexOutOfBounds") + with AddUtxoError + + /** + * We could not convert the found ScriptPubKey into an address + */ + final case object BadSPK extends Error("BadScriptPubKey") with AddUtxoError + + /** + * The address associated with the provided UTXO could not be found + * in our DB of addresses + */ + final case object AddressNotFound + extends Error("AddressNotFound") + with AddUtxoError +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/api/CreateWalletApi.scala b/wallet/src/main/scala/org/bitcoins/wallet/api/CreateWalletApi.scala new file mode 100644 index 0000000000..41e2a652cd --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/api/CreateWalletApi.scala @@ -0,0 +1,53 @@ +package org.bitcoins.wallet.api + +import org.bitcoins.core.crypto.MnemonicCode +import scodec.bits.BitVector + +import scala.concurrent.{ExecutionContext, Future} +import org.bitcoins.db.AppConfig + +/** + * @define initialize + * Initializes the wallet, generating a wallet seed. + * This seed should be displayed to the user, so they + * can write it down. They should also be prompted + * to confirm at least parts of the code. + * + * + * @define initializeWithEnt + * Initializes the with a user-provided seed, + * generating a wallet seed. + * This seed should be displayed to the user, so they + * can write it down. They should also be prompted + * to confirm at least parts of the code. + */ +trait CreateWalletApi { + + private def initializeInternal()( + implicit executionContext: ExecutionContext, + appConfig: AppConfig): Future[InitializeWalletResult] = + initializeWithEntropy(entropy = MnemonicCode.getEntropy256Bits) + + /** + * $initialize + */ + final def initialize()( + implicit executionContext: ExecutionContext, + appConfig: AppConfig): Future[InitializeWalletResult] = + initializeInternal() + + /** + * $initializeWithEnt + */ + def initializeWithEntropy(entropy: BitVector)( + implicit config: AppConfig, + executionContext: ExecutionContext): Future[InitializeWalletResult] + + // todo: scaladoc + final def initializeWithMnemonic(mnemonicCode: MnemonicCode)( + implicit config: AppConfig, + executionContext: ExecutionContext): Future[InitializeWalletResult] = { + val entropy = mnemonicCode.toEntropy + initializeWithEntropy(entropy) + } +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/api/InitializeWalletResult.scala b/wallet/src/main/scala/org/bitcoins/wallet/api/InitializeWalletResult.scala new file mode 100644 index 0000000000..e53025f6c8 --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/api/InitializeWalletResult.scala @@ -0,0 +1,31 @@ +package org.bitcoins.wallet.api + +sealed trait InitializeWalletResult + +final case class InitializeWalletSuccess(wallet: UnlockedWalletApi) + extends InitializeWalletResult + +sealed trait InitializeWalletError extends Error with InitializeWalletResult + +object InitializeWalletError { + // todo add explanation of what good/bad entropy is + final case object BadEntropy + extends Error("Bad Entropy") + with InitializeWalletError + + final case class EncryptionError(underlying: Throwable) + extends Error(underlying) + with InitializeWalletError + + /** + * Wallet data was found in the + * specified data directory. + * + * @note `bitcoin-s` only supports one wallet + * per network at the moment. + */ + final case object WalletAlreadyExists + extends Error("Wallet already exists") + with InitializeWalletError + +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/api/UnlockWalletResult.scala b/wallet/src/main/scala/org/bitcoins/wallet/api/UnlockWalletResult.scala new file mode 100644 index 0000000000..d93b21930a --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/api/UnlockWalletResult.scala @@ -0,0 +1,23 @@ +package org.bitcoins.wallet.api + +sealed trait UnlockWalletResult + +final case class UnlockWalletSuccess(unlockedWalletApi: UnlockedWalletApi) + extends UnlockWalletResult + +sealed trait UnlockWalletError extends Error with UnlockWalletResult + +object UnlockWalletError { + + final case object MnemonicNotFound + extends Error("Mnemonic nout found") + with UnlockWalletResult + + final case object BadPassword + extends Error("Bad password for unlocking wallet!") + with UnlockWalletError + + final case class JsonParsingError(message: String) + extends Error(message) + with UnlockWalletError +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/api/WalletApi.scala b/wallet/src/main/scala/org/bitcoins/wallet/api/WalletApi.scala new file mode 100644 index 0000000000..4e02ae9542 --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/api/WalletApi.scala @@ -0,0 +1,174 @@ +package org.bitcoins.wallet.api + +import org.bitcoins.core.config.NetworkParameters +import org.bitcoins.core.crypto._ +import org.bitcoins.core.currency.CurrencyUnit +import org.bitcoins.core.hd.HDPurpose +import org.bitcoins.core.number.UInt32 +import org.bitcoins.core.protocol.BitcoinAddress +import org.bitcoins.core.protocol.blockchain.ChainParams +import org.bitcoins.core.protocol.transaction.Transaction +import org.bitcoins.core.wallet.fee.FeeUnit +import org.bitcoins.wallet.HDUtil +import org.bitcoins.wallet.models.{AccountDb, AddressDb, UTXOSpendingInfoDb} + +import scala.concurrent.Future +import scala.concurrent.ExecutionContext +import org.bitcoins.db.AppConfig + +/** + * API for the wallet project. + * + * This wallet API is BIP344 compliant. + * + * @see [[https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki BIP44]] + */ +sealed trait WalletApi { + + implicit val walletConfig: AppConfig + implicit val ec: ExecutionContext + + def chainParams: ChainParams = walletConfig.chain + + def networkParameters: NetworkParameters = walletConfig.network +} + +/** + * API for a locked wallet + */ +trait LockedWalletApi extends WalletApi { + + /** + * Adds the provided UTXO to the wallet, making it + * available for spending. + */ + def addUtxo(transaction: Transaction, vout: UInt32): Future[AddUtxoResult] + + /** Sums up the value of all UTXOs in the wallet */ + // noinspection AccessorLikeMethodIsEmptyParen + // async calls have side effects :-) + def getBalance(): Future[CurrencyUnit] + + /** + * If a UTXO is spent outside of the wallet, we + * need to remove it from the database so it won't be + * attempted spent again by us. + */ + // def updateUtxo: Future[WalletApi] + + def listUtxos(): Future[Vector[UTXOSpendingInfoDb]] + + def listAddresses(): Future[Vector[AddressDb]] + + /** + * Gets a new external address from the specified + * account. Calling this method multiple + * times will return the same address, until it has + * received funds. + */ + def getNewAddress(account: AccountDb): Future[BitcoinAddress] + + /** + * Gets a new external address from the default account. + * Calling this method multiple + * times will return the same address, until it has + * received funds. + */ + def getNewAddress(): Future[BitcoinAddress] = { + for { + account <- getDefaultAccount() + address <- getNewAddress(account) + } yield address + } + + /** Generates a new change address */ + protected[wallet] def getNewChangeAddress( + account: AccountDb): Future[BitcoinAddress] + + /** Generates a new change address for the default account */ + final protected[wallet] def getNewChangeAddress(): Future[BitcoinAddress] = { + for { + account <- getDefaultAccount + address <- getNewChangeAddress(account) + + } yield address + } + + /** + * Fetches the default account from the DB + */ + protected[wallet] def getDefaultAccount(): Future[AccountDb] + + /** + * Unlocks the wallet with the provided passphrase, + * making it possible to send transactions. + */ + def unlock(passphrase: AesPassword): UnlockWalletResult + + def listAccounts(): Future[Vector[AccountDb]] + + /** + * Tries to create a new accoun in this wallet. Fails if the + * most recent account has no transaction history, as per + * BIP44 + * + * @see [[https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account BIP44 account section]] + */ + // def createNewAccount: Future[Try[WalletApi]] + +} + +trait UnlockedWalletApi extends LockedWalletApi { + + def mnemonicCode: MnemonicCode + + /** The wallet seed */ + lazy val seed: BIP39Seed = BIP39Seed.fromMnemonic(mnemonicCode) + + // TODO: come back to how to handle this + def passphrase: AesPassword + + /** Derives the relevant xpriv for the given HD purpose */ + private[wallet] def xprivForPurpose(purpose: HDPurpose): ExtPrivateKey = { + val seed = BIP39Seed.fromMnemonic(mnemonicCode, BIP39Seed.EMPTY_PASSWORD) // todo think more about this + + val privVersion = HDUtil.getXprivVersion(purpose) + seed.toExtPrivateKey(privVersion) + } + + /** + * Locks the wallet. After this operation is called, + * all sensitive material in the wallet should be + * encrypted and unaccessible + */ + def lock(): LockedWalletApi + + /** + * + * Sends money from the specified account + * + * todo: add error handling to signature + */ + def sendToAddress( + address: BitcoinAddress, + amount: CurrencyUnit, + feeRate: FeeUnit, + fromAccount: AccountDb): Future[Transaction] + + /** + * Sends money from the default account + * + * todo: add error handling to signature + */ + def sendToAddress( + address: BitcoinAddress, + amount: CurrencyUnit, + feeRate: FeeUnit + ): Future[Transaction] = { + for { + account <- getDefaultAccount() + tx <- sendToAddress(address, amount, feeRate, account) + } yield tx + } + +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/config/WalletAppConfig.scala b/wallet/src/main/scala/org/bitcoins/wallet/config/WalletAppConfig.scala new file mode 100644 index 0000000000..b7a5f8f720 --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/config/WalletAppConfig.scala @@ -0,0 +1,12 @@ +package org.bitcoins.wallet.config + +import com.typesafe.config.Config +import org.bitcoins.db.AppConfig + +case class WalletAppConfig(conf: Config*) extends AppConfig { + override val configOverrides: List[Config] = conf.toList + override def moduleConfigName: String = "wallet.conf" + override type ConfigType = WalletAppConfig + override def newConfigOfType(configs: List[Config]): WalletAppConfig = + WalletAppConfig(configs: _*) +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/db/WalletDbManagement.scala b/wallet/src/main/scala/org/bitcoins/wallet/db/WalletDbManagement.scala new file mode 100644 index 0000000000..74694cebe8 --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/db/WalletDbManagement.scala @@ -0,0 +1,21 @@ +package org.bitcoins.wallet.db + +import org.bitcoins.db.DbManagement +import org.bitcoins.wallet.models.{ + AccountTable, + AddressTable, + UTXOSpendingInfoTable +} +import slick.jdbc.SQLiteProfile.api._ + +sealed abstract class WalletDbManagement extends DbManagement { + private val accountTable = TableQuery[AccountTable] + private val addressTable = TableQuery[AddressTable] + private val utxoDAO = TableQuery[UTXOSpendingInfoTable] + + override val allTables: List[TableQuery[_ <: Table[_]]] = + List(accountTable, addressTable, utxoDAO) + +} + +object WalletDbManagement extends WalletDbManagement diff --git a/wallet/src/main/scala/org/bitcoins/wallet/models/AccountDAO.scala b/wallet/src/main/scala/org/bitcoins/wallet/models/AccountDAO.scala new file mode 100644 index 0000000000..0da65b93c3 --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/models/AccountDAO.scala @@ -0,0 +1,46 @@ +package org.bitcoins.wallet.models + +import org.bitcoins.core.hd._ +import org.bitcoins.wallet.config._ +import slick.jdbc.SQLiteProfile.api._ + +import scala.concurrent.{Future} +import org.bitcoins.db.CRUD +import org.bitcoins.db.SlickUtil +import org.bitcoins.db.AppConfig +import scala.concurrent.ExecutionContext + +case class AccountDAO()(implicit val ec: ExecutionContext) + extends CRUD[AccountDb, (HDCoin, Int)] { + + import org.bitcoins.db.DbCommonsColumnMappers._ + + override def appConfig: WalletAppConfig = WalletAppConfig() + + override val table: TableQuery[AccountTable] = TableQuery[AccountTable] + + override def createAll(ts: Vector[AccountDb]): Future[Vector[AccountDb]] = + SlickUtil.createAllNoAutoInc(ts, database, table) + + override protected def findByPrimaryKeys( + ids: Vector[(HDCoin, Int)]): Query[Table[_], AccountDb, Seq] = ??? + + override def findByPrimaryKey( + id: (HDCoin, Int)): Query[Table[_], AccountDb, Seq] = { + val (coin, index) = id + table + .filter(_.coinType === coin.coinType) + .filter(_.purpose === coin.purpose) + .filter(_.index === index) + } + + override def findAll( + accounts: Vector[AccountDb]): Query[Table[_], AccountDb, Seq] = + findByPrimaryKeys( + accounts.map(acc => (acc.hdAccount.coin, acc.hdAccount.index))) + + def findAll(): Future[Vector[AccountDb]] = { + val query = table.result + database.run(query).map(_.toVector) + } +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/models/AccountTable.scala b/wallet/src/main/scala/org/bitcoins/wallet/models/AccountTable.scala new file mode 100644 index 0000000000..05c07bfcd6 --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/models/AccountTable.scala @@ -0,0 +1,50 @@ +package org.bitcoins.wallet.models + +import org.bitcoins.core.crypto.ExtPublicKey +import org.bitcoins.core.hd._ +import slick.jdbc.SQLiteProfile.api._ +import slick.lifted.{PrimaryKey, ProvenShape} +import org.bitcoins.core.crypto._ + +import org.bitcoins.wallet.HDUtil + +case class AccountDb(xpub: ExtPublicKey, hdAccount: HDAccount) { + def xpubVersion: ExtKeyPubVersion = xpub.version + + def xprivVersion: ExtKeyPrivVersion = + HDUtil.getMatchingExtKeyVersion(xpubVersion) + +} + +class AccountTable(tag: Tag) extends Table[AccountDb](tag, "wallet_accounts") { + + import org.bitcoins.db.DbCommonsColumnMappers._ + + def purpose: Rep[HDPurpose] = column[HDPurpose]("hd_purpose") + + def xpub: Rep[ExtPublicKey] = column[ExtPublicKey]("xpub") + + def coinType: Rep[HDCoinType] = column[HDCoinType]("coin") + + def index: Rep[Int] = column[Int]("account_index") + + private type AccountTuple = (HDPurpose, ExtPublicKey, HDCoinType, Int) + + private val fromTuple: AccountTuple => AccountDb = { + case (purpose, pub, coin, index) => + AccountDb(pub, HDAccount(HDCoin(purpose, coin), index)) + } + + private val toTuple: AccountDb => Option[AccountTuple] = account => + Some( + (account.hdAccount.purpose, + account.xpub, + account.hdAccount.coin.coinType, + account.hdAccount.index)) + + def * : ProvenShape[AccountDb] = + (purpose, xpub, coinType, index) <> (fromTuple, toTuple) + + def primaryKey: PrimaryKey = + primaryKey("pk_account", (coinType, index)) +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/models/AddressDAO.scala b/wallet/src/main/scala/org/bitcoins/wallet/models/AddressDAO.scala new file mode 100644 index 0000000000..251737b6ea --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/models/AddressDAO.scala @@ -0,0 +1,70 @@ +package org.bitcoins.wallet.models + +import org.bitcoins.core.protocol.BitcoinAddress +import org.bitcoins.db.{CRUD, SlickUtil} +import slick.dbio.Effect +import slick.jdbc.SQLiteProfile.api._ +import slick.lifted.TableQuery +import slick.sql.SqlAction + +import scala.concurrent.{ExecutionContext, Future} +import org.bitcoins.core.hd.HDChainType +import org.bitcoins.db.AppConfig +import org.bitcoins.wallet.config.WalletAppConfig + +case class AddressDAO()( + implicit val ec: ExecutionContext +) extends CRUD[AddressDb, BitcoinAddress] { + import org.bitcoins.db.DbCommonsColumnMappers._ + + override def appConfig: WalletAppConfig = WalletAppConfig() + + override val table: TableQuery[AddressTable] = TableQuery[AddressTable] + + override def createAll(ts: Vector[AddressDb]): Future[Vector[AddressDb]] = + SlickUtil.createAllNoAutoInc(ts, database, table) + + /** Finds the rows that correlate to the given primary keys */ + override def findByPrimaryKeys( + addresses: Vector[BitcoinAddress]): Query[Table[_], AddressDb, Seq] = + table.filter(_.address.inSet(addresses)) + + override def findAll(ts: Vector[AddressDb]): Query[Table[_], AddressDb, Seq] = + findByPrimaryKeys(ts.map(_.address)) + + def findAddress(addr: BitcoinAddress): Future[Option[AddressDb]] = { + val query = findByPrimaryKey(addr).result + database.run(query).map(_.headOption) + } + + def findAll(): Future[Vector[AddressDb]] = { + val query = table.result + database.run(query).map(_.toVector) + } + + private def addressesForAccountQuery( + accountIndex: Int): Query[AddressTable, AddressDb, Seq] = + table.filter(_.accountIndex === accountIndex) + + def findMostRecentChange(accountIndex: Int): Future[Option[AddressDb]] = { + val query = findMostRecentForChain(accountIndex, HDChainType.Change) + + database.run(query) + } + + private def findMostRecentForChain( + accountIndex: Int, + chain: HDChainType): SqlAction[Option[AddressDb], NoStream, Effect.Read] = { + addressesForAccountQuery(accountIndex) + .filter(_.accountChainType === chain) + .sortBy(_.addressIndex.desc) + .take(1) + .result + .headOption + } + + def findMostRecentExternal(accountIndex: Int): Future[Option[AddressDb]] = { + val query = findMostRecentForChain(accountIndex, HDChainType.External) + database.run(query) + } +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/models/AddressTable.scala b/wallet/src/main/scala/org/bitcoins/wallet/models/AddressTable.scala new file mode 100644 index 0000000000..ab9cc5032e --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/models/AddressTable.scala @@ -0,0 +1,205 @@ +package org.bitcoins.wallet.models + +import org.bitcoins.core.config.NetworkParameters +import org.bitcoins.core.hd._ +import org.bitcoins.core.crypto.{ECPublicKey, Sha256Hash160Digest} +import org.bitcoins.core.protocol.script.{ + P2WPKHWitnessSPKV0, + P2WPKHWitnessV0, + ScriptWitness +} +import org.bitcoins.core.protocol.{Bech32Address, BitcoinAddress} +import org.bitcoins.core.script.ScriptType +import slick.jdbc.SQLiteProfile.api._ +import slick.lifted.ProvenShape +import org.bitcoins.core.protocol.P2SHAddress +import org.bitcoins.core.protocol.P2PKHAddress + +sealed trait AddressDb { + protected type PathType <: HDPath + + def path: PathType + def ecPublicKey: ECPublicKey + def hashedPubKey: Sha256Hash160Digest + def address: BitcoinAddress + def scriptType: ScriptType + def witnessScriptOpt: Option[ScriptWitness] +} + +/** Segwit P2PKH */ +case class SegWitAddressDb( + path: SegWitHDPath, + ecPublicKey: ECPublicKey, + hashedPubKey: Sha256Hash160Digest, + address: Bech32Address, + witnessScript: ScriptWitness +) extends AddressDb { + override type PathType = SegWitHDPath + + override val scriptType = ScriptType.WITNESS_V0_KEYHASH + override val witnessScriptOpt = Some(witnessScript) +} + +/** Segwit P2PKH-in-P2SH */ +case class NestedSegWitAddressDb( + path: NestedSegWitHDPath, + ecPublicKey: ECPublicKey, + hashedPubKey: Sha256Hash160Digest, + address: P2SHAddress +) extends AddressDb { + override type PathType = NestedSegWitHDPath + + override val scriptType = ScriptType.SCRIPTHASH + override val witnessScriptOpt = None +} + +/** P2PKH */ +case class LegacyAddressDb( + path: LegacyHDPath, + ecPublicKey: ECPublicKey, + hashedPubKey: Sha256Hash160Digest, + address: P2PKHAddress +) extends AddressDb { + override type PathType = LegacyHDPath + + override val scriptType = ScriptType.PUBKEYHASH + override val witnessScriptOpt = None +} +// todo: make ADT for different addresses in DB, seeing as they have different fields +// todo: indicate whether or not address has been spent to + +object AddressDbHelper { + + /** Get a Segwit pay-to-pubkeyhash address */ + def getP2WPKHAddress( + pub: ECPublicKey, + path: SegWitHDPath, + np: NetworkParameters): SegWitAddressDb = { + + val witnessSpk = P2WPKHWitnessSPKV0(pub) + val scriptWitness = P2WPKHWitnessV0(pub) + val addr = Bech32Address(witnessSpk, np) + SegWitAddressDb( + path = path, + ecPublicKey = pub, + hashedPubKey = witnessSpk.pubKeyHash, + address = addr, + witnessScript = scriptWitness + ) + } +} + +/** + * todo: this needs design rework. + * todo: https://github.com/bitcoin-s/bitcoin-s-core/pull/391#discussion_r274188334 + */ +class AddressTable(tag: Tag) extends Table[AddressDb](tag, "addresses") { + import org.bitcoins.db.DbCommonsColumnMappers._ + + def purpose: Rep[HDPurpose] = column[HDPurpose]("hd_purpose") + + def accountIndex: Rep[Int] = column[Int]("account_index") + + def accountCoin: Rep[HDCoinType] = column[HDCoinType]("hd_coin") + + def accountChainType: Rep[HDChainType] = + column[HDChainType]("hd_chain_type") + + def addressIndex: Rep[Int] = column[Int]("address_index") + + def address: Rep[BitcoinAddress] = + column[BitcoinAddress]("address", O.PrimaryKey) + + def ecPublicKey: Rep[ECPublicKey] = column[ECPublicKey]("pubkey") + + def hashedPubKey: Rep[Sha256Hash160Digest] = + column[Sha256Hash160Digest]("hashed_pubkey") + + def scriptType: Rep[ScriptType] = column[ScriptType]("script_type") + + def scriptWitness: Rep[Option[ScriptWitness]] = + column[Option[ScriptWitness]]("script_witness") + + private type AddressTuple = ( + HDPurpose, + Int, + HDCoinType, + HDChainType, + BitcoinAddress, + Option[ScriptWitness], + Int, + ECPublicKey, + Sha256Hash160Digest, + ScriptType) + + private val fromTuple: AddressTuple => AddressDb = { + case ( + purpose, + accountIndex, + accountCoin, + accountChain, + address, + scriptWitnessOpt, + addressIndex, + pubKey, + hashedPubKey, + scriptType @ _ // what should we do about this? scriptType is inferrable from purpose + ) => + (purpose, address, scriptWitnessOpt) match { + case (HDPurposes.SegWit, + bechAddr: Bech32Address, + Some(scriptWitness)) => + val path = + SegWitHDPath(coinType = accountCoin, + accountIndex = accountIndex, + chainType = accountChain, + addressIndex = addressIndex) + + SegWitAddressDb(path, + ecPublicKey = pubKey, + hashedPubKey = hashedPubKey, + address = bechAddr, + witnessScript = scriptWitness) + case (purpose: HDPurpose, address: BitcoinAddress, scriptWitnessOpt) => + throw new IllegalArgumentException( + s"Got invalid combination of HD purpose, address and script witness: $purpose, $address, $scriptWitnessOpt" + + s"Note: Currently only segwit addreses are implemented") + } + } + + private val toTuple: AddressDb => Option[AddressTuple] = { + case SegWitAddressDb(path, pubKey, hashedPubKey, address, scriptWitness) => + Some( + (path.purpose, + path.account.index, + path.coin.coinType, + path.chain.chainType, + address, + Some(scriptWitness), + path.address.index, + pubKey, + hashedPubKey, + ScriptType.WITNESS_V0_KEYHASH)) + case other => throw new RuntimeException(s"$other is not implemented yet") + + } + + override def * : ProvenShape[AddressDb] = + (purpose, + accountIndex, + accountCoin, + accountChainType, + address, + scriptWitness, + addressIndex, + ecPublicKey, + hashedPubKey, + scriptType) <> (fromTuple, toTuple) + + val accounts = TableQuery[AccountTable] + + // for some reason adding a type annotation here causes compile error + def fk = + foreignKey("fk_account", (accountCoin, accountIndex), accounts)( + accountTable => (accountTable.coinType, accountTable.index)) +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/models/UTXOSpendingInfoDAO.scala b/wallet/src/main/scala/org/bitcoins/wallet/models/UTXOSpendingInfoDAO.scala new file mode 100644 index 0000000000..99af848be3 --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/models/UTXOSpendingInfoDAO.scala @@ -0,0 +1,21 @@ +package org.bitcoins.wallet.models + +import org.bitcoins.db.CRUDAutoInc +import org.bitcoins.wallet.config._ +import slick.jdbc.SQLiteProfile.api._ + +import scala.concurrent.Future +import scala.concurrent.ExecutionContext +import org.bitcoins.db.AppConfig + +case class UTXOSpendingInfoDAO()(implicit val ec: ExecutionContext) + extends CRUDAutoInc[UTXOSpendingInfoDb] { + + override def appConfig: WalletAppConfig = WalletAppConfig() + + /** The table inside our database we are inserting into */ + override val table = TableQuery[UTXOSpendingInfoTable] + + def findAllUTXOs(): Future[Vector[UTXOSpendingInfoDb]] = + database.run(table.result).map(_.toVector) +} diff --git a/wallet/src/main/scala/org/bitcoins/wallet/models/UTXOSpendingInfoTable.scala b/wallet/src/main/scala/org/bitcoins/wallet/models/UTXOSpendingInfoTable.scala new file mode 100644 index 0000000000..dd194b4965 --- /dev/null +++ b/wallet/src/main/scala/org/bitcoins/wallet/models/UTXOSpendingInfoTable.scala @@ -0,0 +1,146 @@ +package org.bitcoins.wallet.models + +import org.bitcoins.core.crypto.Sign +import org.bitcoins.core.currency.CurrencyUnit +import org.bitcoins.core.protocol.script.{ScriptPubKey, ScriptWitness} +import org.bitcoins.core.protocol.transaction.{ + TransactionOutPoint, + TransactionOutput +} +import org.bitcoins.core.script.crypto.HashType +import org.bitcoins.core.wallet.utxo.BitcoinUTXOSpendingInfo +import org.bitcoins.db.{DbRowAutoInc, TableAutoInc} +import slick.jdbc.SQLiteProfile.api._ +import slick.lifted.ProvenShape +import org.bitcoins.core.hd.HDPath + +import org.bitcoins.core.hd.SegWitHDPath +import org.bitcoins.core.crypto.BIP39Seed +import org.bitcoins.core.util.BitcoinSLogger +import org.bitcoins.core.hd.LegacyHDPath +import org.bitcoins.core.hd.NestedSegWitHDPath + +case class SegWitUTOXSpendingInfodb( + id: Option[Long], + outPoint: TransactionOutPoint, + output: TransactionOutput, + privKeyPath: SegWitHDPath, + scriptWitness: ScriptWitness +) extends UTXOSpendingInfoDb { + override def redeemScriptOpt: Option[ScriptPubKey] = None + override def scriptWitnessOpt: Option[ScriptWitness] = Some(scriptWitness) + + override type PathType = SegWitHDPath + + override def copyWithId(id: Long): SegWitUTOXSpendingInfodb = + copy(id = Some(id)) +} + +// TODO add case for nested segwit +// and legacy +sealed trait UTXOSpendingInfoDb + extends DbRowAutoInc[UTXOSpendingInfoDb] + with BitcoinSLogger { + + protected type PathType <: HDPath + + def id: Option[Long] + def outPoint: TransactionOutPoint + def output: TransactionOutput + def privKeyPath: PathType + def redeemScriptOpt: Option[ScriptPubKey] + def scriptWitnessOpt: Option[ScriptWitness] + + val hashType: HashType = HashType.sigHashAll + + def value: CurrencyUnit = output.value + + def toUTXOSpendingInfo( + account: AccountDb, + walletSeed: BIP39Seed): BitcoinUTXOSpendingInfo = { + + val rootXpriv = walletSeed.toExtPrivateKey(account.xprivVersion) + val xprivAtPath = rootXpriv.deriveChildPrivKey(privKeyPath) + val privKey = xprivAtPath.key + val pubAtPath = privKey.publicKey + + val sign: Sign = Sign(privKey.signFunction, pubAtPath) + + logger.info({ + val shortStr = s"${outPoint.txId.hex}:${outPoint.vout.toInt}" + val detailsStr = + s"scriptPubKey=${output.scriptPubKey}, amount=${output.value}, keyPath=${privKeyPath}, pubKey=${pubAtPath}" + s"Converting DB UTXO $shortStr ($detailsStr) to spending info" + }) + + BitcoinUTXOSpendingInfo(outPoint, + output, + List(sign), + redeemScriptOpt, + scriptWitnessOpt, + hashType) + } + +} + +case class UTXOSpendingInfoTable(tag: Tag) + extends TableAutoInc[UTXOSpendingInfoDb](tag, "utxos") { + import org.bitcoins.db.DbCommonsColumnMappers._ + + def outPoint: Rep[TransactionOutPoint] = + column[TransactionOutPoint]("tx_outpoint") + + def output: Rep[TransactionOutput] = + column[TransactionOutput]("tx_output") + + def privKeyPath: Rep[HDPath] = column[HDPath]("hd_privkey_path") + + def redeemScriptOpt: Rep[Option[ScriptPubKey]] = + column[Option[ScriptPubKey]]("nullable_redeem_script") + + def scriptWitnessOpt: Rep[Option[ScriptWitness]] = + column[Option[ScriptWitness]]("script_witness") + + private type UTXOTuple = ( + Option[Long], + TransactionOutPoint, + TransactionOutput, + HDPath, + Option[ScriptPubKey], + Option[ScriptWitness]) + + private val fromTuple: UTXOTuple => UTXOSpendingInfoDb = { + case (id, + outpoint, + output, + path: SegWitHDPath, + None, + Some(scriptWitness)) => + SegWitUTOXSpendingInfodb(id, outpoint, output, path, scriptWitness) + .asInstanceOf[UTXOSpendingInfoDb] + + case (id, + outpoint, + output, + path @ (_: LegacyHDPath | _: NestedSegWitHDPath), + spkOpt, + swOpt) => + throw new IllegalArgumentException( + "Could not construct UtxoSpendingInfoDb from bad tuple:" + + s" ($id, $outpoint, $output, $path, $spkOpt, $swOpt) . Note: Only Segwit is implemented") + + } + + private val toTuple: UTXOSpendingInfoDb => Option[UTXOTuple] = + utxo => + Some( + (utxo.id, + utxo.outPoint, + utxo.output, + utxo.privKeyPath, + utxo.redeemScriptOpt, + utxo.scriptWitnessOpt)) + + def * : ProvenShape[UTXOSpendingInfoDb] = + (id.?, outPoint, output, privKeyPath, redeemScriptOpt, scriptWitnessOpt) <> (fromTuple, toTuple) +} diff --git a/zmq/src/main/scala/org/bitcoins/zmq/ZMQSubscriber.scala b/zmq/src/main/scala/org/bitcoins/zmq/ZMQSubscriber.scala index 8209909a74..6f9831ad5c 100644 --- a/zmq/src/main/scala/org/bitcoins/zmq/ZMQSubscriber.scala +++ b/zmq/src/main/scala/org/bitcoins/zmq/ZMQSubscriber.scala @@ -3,7 +3,7 @@ package org.bitcoins.zmq import java.net.InetSocketAddress import org.bitcoins.core.util.BitcoinSLogger -import org.zeromq.{ZMQ, ZMsg} +import org.zeromq.{SocketType, ZMQ, ZMQException, ZMsg} import scodec.bits.ByteVector /** @@ -19,22 +19,26 @@ import scodec.bits.ByteVector * @param rawBlockListener */ class ZMQSubscriber( - socket: InetSocketAddress, - hashTxListener: Option[ByteVector => Unit], - hashBlockListener: Option[ByteVector => Unit], - rawTxListener: Option[ByteVector => Unit], - rawBlockListener: Option[ByteVector => Unit]) { - private val logger = BitcoinSLogger.logger + socket: InetSocketAddress, + hashTxListener: Option[ByteVector => Unit], + hashBlockListener: Option[ByteVector => Unit], + rawTxListener: Option[ByteVector => Unit], + rawBlockListener: Option[ByteVector => Unit]) + extends BitcoinSLogger { private var running = true private val context = ZMQ.context(1) - private val subscriber = context.socket(ZMQ.SUB) + private val subscriber: ZMQ.Socket = context.socket(SocketType.SUB) + + + private val uri = socket.getHostString + ":" + socket.getPort private case object SubscriberRunnable extends Runnable { override def run(): Unit = { - + logger.info(s"ZmqSubscriber connecting to uri=${uri}") + subscriber.setLinger(2000) val isConnected = subscriber.connect(uri) if (isConnected) { @@ -58,16 +62,26 @@ class ZMQSubscriber( logger.debug("subscribed to raw block stream from zmq") } - while (running) { - val zmsg = ZMsg.recvMsg(subscriber, ZMQ.NOBLOCK) - if (zmsg != null) { - val notificationTypeStr = zmsg.pop().getString(ZMQ.CHARSET) - val body = zmsg.pop().getData - processMsg(notificationTypeStr, body) - } else { - Thread.sleep(1) + while (running && !subscriberThread.isInterrupted) { + try { + val zmsg = ZMsg.recvMsg(subscriber, ZMQ.NOBLOCK) + if (zmsg != null) { + val notificationTypeStr = zmsg.pop().getString(ZMQ.CHARSET) + val body = zmsg.pop().getData + processMsg(notificationTypeStr, body) + } else { + Thread.sleep(100) + } + } catch { + case e: ZMQException if e.getErrorCode == ZMQ.Error.ETERM.getCode => + context.term() + logger.info(s"Done terminating zmq context msg=${e.getMessage}") + case e: Exception => + context.term() + logger.info(s"Done terminating zmq context msg=${e.getMessage}") } } + logger.info(s"Terminated") } else { logger.error(s"Failed to connect to zmq socket ${uri}") throw new RuntimeException(s"Failed to connect to zmq socket ${uri}") @@ -77,7 +91,7 @@ class ZMQSubscriber( } private val subscriberThread = new Thread(SubscriberRunnable) - subscriberThread.setName("ZMQSubscriber-thread") + subscriberThread.setName(s"ZMQSubscriber-thread-${System.currentTimeMillis()}") subscriberThread.setDaemon(true) def start(): Unit = { @@ -89,13 +103,17 @@ class ZMQSubscriber( * Stops running the zmq subscriber and cleans up after zmq * http://zguide.zeromq.org/java:psenvsub */ - def stop: Unit = { + def stop(): Unit = { + logger.info(s"Stopping zmq") //i think this could technically not work, because currently we are blocking //on Zmsg.recvMsg in our while loop. If we don't get another message we won't //be able toe evaluate the while loop again. Moving forward with this for now. running = false subscriber.close() + logger.info("Attempting to terminate context") context.term() + logger.info(s"Done with closing zmq") + () } /**