diff options
| author | Patrick Lodder <[email protected]> | 2021-06-02 23:45:02 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-06-02 23:45:02 +0200 |
| commit | 8fcbf8cfe55638e8970c5c76608123797f5140e6 (patch) | |
| tree | e440a18b5bb2c86b3620ec295356255cb365dc38 | |
| parent | Merge pull request #2210 from rnicoll/1.21-block-subsidy (diff) | |
| parent | Remove default Signet (diff) | |
| download | discoin-8fcbf8cfe55638e8970c5c76608123797f5140e6.tar.xz discoin-8fcbf8cfe55638e8970c5c76608123797f5140e6.zip | |
Merge pull request #1828 from rnicoll/1.21-dev-scrypt-algo
Scrypt algorithm
44 files changed, 1249 insertions, 401 deletions
diff --git a/ci/test/00_setup_env.sh b/ci/test/00_setup_env.sh index 72e29141a..d4e9d3cbe 100755 --- a/ci/test/00_setup_env.sh +++ b/ci/test/00_setup_env.sh @@ -65,7 +65,7 @@ export BASE_OUTDIR=${BASE_OUTDIR:-$BASE_SCRATCH_DIR/out/$HOST} export BASE_BUILD_DIR=${BASE_BUILD_DIR:-$BASE_SCRATCH_DIR/build} export PREVIOUS_RELEASES_DIR=${PREVIOUS_RELEASES_DIR:-$BASE_ROOT_DIR/releases/$HOST} export SDK_URL=${SDK_URL:-https://bitcoincore.org/depends-sources/sdks} -export DOCKER_PACKAGES=${DOCKER_PACKAGES:-build-essential libtool autotools-dev automake pkg-config bsdmainutils curl ca-certificates ccache python3 rsync git procps} +export DOCKER_PACKAGES=${DOCKER_PACKAGES:-build-essential libtool autotools-dev automake pkg-config bsdmainutils curl ca-certificates ccache python3 python3-dev rsync git procps} export GOAL=${GOAL:-install} export DIR_QA_ASSETS=${DIR_QA_ASSETS:-${BASE_SCRATCH_DIR}/qa-assets} export PATH=${BASE_ROOT_DIR}/ci/retry:$PATH diff --git a/ci/test/00_setup_env_i686_centos.sh b/ci/test/00_setup_env_i686_centos.sh index e58003ab1..d7c10e01d 100644 --- a/ci/test/00_setup_env_i686_centos.sh +++ b/ci/test/00_setup_env_i686_centos.sh @@ -9,7 +9,7 @@ export LC_ALL=C.UTF-8 export HOST=i686-pc-linux-gnu export CONTAINER_NAME=ci_i686_centos_7 export DOCKER_NAME_TAG=centos:7 -export DOCKER_PACKAGES="gcc-c++ glibc-devel.x86_64 libstdc++-devel.x86_64 glibc-devel.i686 libstdc++-devel.i686 ccache libtool make git python3 python36-zmq which patch lbzip2 dash" +export DOCKER_PACKAGES="gcc-c++ glibc-devel.x86_64 libstdc++-devel.x86_64 glibc-devel.i686 libstdc++-devel.i686 ccache libtool make git python3 python3-distutils python36-zmq which patch lbzip2 dash" export GOAL="install" export BITCOIN_CONFIG="--enable-zmq --with-gui=qt5 --enable-reduce-exports --with-boost-process" export CONFIG_SHELL="/bin/dash" diff --git a/ci/test/00_setup_env_native_qt5.sh b/ci/test/00_setup_env_native_qt5.sh index 866866229..1fcb3c255 100644 --- a/ci/test/00_setup_env_native_qt5.sh +++ b/ci/test/00_setup_env_native_qt5.sh @@ -8,7 +8,7 @@ export LC_ALL=C.UTF-8 export CONTAINER_NAME=ci_native_qt5 export DOCKER_NAME_TAG=ubuntu:18.04 # Check that bionic can compile our c++17 and run our functional tests in python3 -export PACKAGES="python3-zmq qtbase5-dev qttools5-dev-tools libdbus-1-dev libharfbuzz-dev" +export PACKAGES="python3-zmq python3-distutils qtbase5-dev qttools5-dev-tools libdbus-1-dev libharfbuzz-dev" export DEP_OPTS="NO_QT=1 NO_UPNP=1 DEBUG=1 ALLOW_HOST_PACKAGES=1" export TEST_RUNNER_EXTRA="--previous-releases --coverage --extended --exclude feature_dbcrash" # Run extended tests so that coverage does not fail, but exclude the very slow dbcrash export RUN_SECURITY_TESTS="true" diff --git a/ci/test/05_before_script.sh b/ci/test/05_before_script.sh index 2a8b61b20..9f1a4bbcf 100755 --- a/ci/test/05_before_script.sh +++ b/ci/test/05_before_script.sh @@ -15,6 +15,8 @@ fi DOCKER_EXEC mkdir -p ${DEPENDS_DIR}/SDKs ${DEPENDS_DIR}/sdk-sources +DOCKER_EXEC test/functional/install-deps.sh + OSX_SDK_BASENAME="Xcode-${XCODE_VERSION}-${XCODE_BUILD_ID}-extracted-SDK-with-libcxx-headers.tar.gz" OSX_SDK_PATH="${DEPENDS_DIR}/sdk-sources/${OSX_SDK_BASENAME}" diff --git a/configure.ac b/configure.ac index 4179ac9b4..fbd6f8610 100644 --- a/configure.ac +++ b/configure.ac @@ -252,6 +252,12 @@ AC_ARG_ENABLE([zmq], [use_zmq=$enableval], [use_zmq=yes]) +AC_ARG_ENABLE([sse2], + [AS_HELP_STRING([--enable-sse2], + [enable SSE2 instructions in the scrypt library. (default is disabled)])], + [use_sse2=$enableval], + [use_sse2=no]) + AC_ARG_WITH([libmultiprocess], [AS_HELP_STRING([--with-libmultiprocess=yes|no|auto], [Build with libmultiprocess library. (default: auto, i.e. detect with pkg-config)])], @@ -1588,6 +1594,16 @@ else BUILD_TEST="" fi +AC_MSG_CHECKING([whether to enable sse2 instructions]) +if test x$use_sse2 != xno; then + AC_MSG_RESULT(yes) + AC_DEFINE([USE_SSE2],[1],[Define if SSE2 support should be compiled in]) + use_sse2=yes + CPPFLAGS="$CPPFLAGS -DUSE_SSE2=1" +else + AC_MSG_RESULT(no) +fi + AC_MSG_CHECKING([whether to reduce exports]) if test x$use_reduce_exports = xyes; then AC_MSG_RESULT([yes]) @@ -1611,6 +1627,7 @@ AM_CONDITIONAL([ENABLE_QT],[test x$bitcoin_enable_qt = xyes]) AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes]) AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes]) AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes]) +AM_CONDITIONAL([USE_SSE2], [test x$use_sse2 = xyes]) AM_CONDITIONAL([USE_LCOV],[test x$use_lcov = xyes]) AM_CONDITIONAL([USE_LIBEVENT],[test x$use_libevent = xyes]) AM_CONDITIONAL([GLIBC_BACK_COMPAT],[test x$use_glibc_compat = xyes]) @@ -1673,6 +1690,7 @@ AC_SUBST(LIBTOOL_APP_LDFLAGS) AC_SUBST(USE_SQLITE) AC_SUBST(USE_UPNP) AC_SUBST(USE_QRCODE) +AC_SUBST(USE_SSE2) AC_SUBST(BOOST_LIBS) AC_SUBST(SQLITE_LIBS) AC_SUBST(TESTDEFS) @@ -1762,6 +1780,7 @@ echo " with bench = $use_bench" echo " with upnp = $use_upnp" echo " use asm = $use_asm" echo " sanitizers = $use_sanitizers" +echo " scrypt sse2 = $use_sse2" echo " debug enabled = $enable_debug" echo " gprof enabled = $enable_gprof" echo " werror = $enable_werror" diff --git a/src/Makefile.am b/src/Makefile.am index 8e8ce6646..16f7b5627 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -410,6 +410,9 @@ crypto_libbitcoin_crypto_base_a_SOURCES = \ crypto/poly1305.cpp \ crypto/ripemd160.cpp \ crypto/ripemd160.h \ + crypto/scrypt.cpp \ + crypto/scrypt-sse2.cpp \ + crypto/scrypt.h \ crypto/sha1.cpp \ crypto/sha1.h \ crypto/sha256.cpp \ @@ -672,7 +675,7 @@ if GLIBC_BACK_COMPAT endif libbitcoinconsensus_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(RELDFLAGS) -libbitcoinconsensus_la_LIBADD = $(LIBSECP256K1) +libbitcoinconsensus_la_LIBADD = $(LIBSECP256K1) $(CRYPTO_LIBS) libbitcoinconsensus_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/obj -I$(srcdir)/secp256k1/include -DBUILD_BITCOIN_INTERNAL libbitcoinconsensus_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) diff --git a/src/Makefile.bench.include b/src/Makefile.bench.include index 1bdfa9525..b8e0ec3a1 100644 --- a/src/Makefile.bench.include +++ b/src/Makefile.bench.include @@ -7,7 +7,7 @@ BENCH_SRCDIR = bench BENCH_BINARY = bench/bench_dogecoin$(EXEEXT) RAW_BENCH_FILES = \ - bench/data/block413567.raw + bench/data/block41385.raw GENERATED_BENCH_FILES = $(RAW_BENCH_FILES:.raw=.raw.h) bench_bench_dogecoin_SOURCES = \ @@ -81,7 +81,7 @@ CLEAN_BITCOIN_BENCH = bench/*.gcda bench/*.gcno $(GENERATED_BENCH_FILES) CLEANFILES += $(CLEAN_BITCOIN_BENCH) -bench/data.cpp: bench/data/block413567.raw.h +bench/data.cpp: bench/data/block41385.raw.h dogecoin_bench: $(BENCH_BINARY) diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 31738769f..461417987 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -266,6 +266,7 @@ BITCOIN_TESTS =\ test/script_tests.cpp \ test/script_standard_tests.cpp \ test/scriptnum_tests.cpp \ + test/scrypt_tests.cpp \ test/serialize_tests.cpp \ test/settings_tests.cpp \ test/sighash_tests.cpp \ diff --git a/src/bench/checkblock.cpp b/src/bench/checkblock.cpp index a9f3f5f84..aa7e5865b 100644 --- a/src/bench/checkblock.cpp +++ b/src/bench/checkblock.cpp @@ -16,21 +16,21 @@ static void DeserializeBlockTest(benchmark::Bench& bench) { - CDataStream stream(benchmark::data::block413567, SER_NETWORK, PROTOCOL_VERSION); + CDataStream stream(benchmark::data::block41385, SER_NETWORK, PROTOCOL_VERSION); char a = '\0'; stream.write(&a, 1); // Prevent compaction bench.unit("block").run([&] { CBlock block; stream >> block; - bool rewound = stream.Rewind(benchmark::data::block413567.size()); + bool rewound = stream.Rewind(benchmark::data::block41385.size()); assert(rewound); }); } static void DeserializeAndCheckBlockTest(benchmark::Bench& bench) { - CDataStream stream(benchmark::data::block413567, SER_NETWORK, PROTOCOL_VERSION); + CDataStream stream(benchmark::data::block41385, SER_NETWORK, PROTOCOL_VERSION); char a = '\0'; stream.write(&a, 1); // Prevent compaction @@ -40,7 +40,7 @@ static void DeserializeAndCheckBlockTest(benchmark::Bench& bench) bench.unit("block").run([&] { CBlock block; // Note that CBlock caches its checked state, so we need to recreate it here stream >> block; - bool rewound = stream.Rewind(benchmark::data::block413567.size()); + bool rewound = stream.Rewind(benchmark::data::block41385.size()); assert(rewound); BlockValidationState validationState; diff --git a/src/bench/data.cpp b/src/bench/data.cpp index 0ae4c7cad..2280b3914 100644 --- a/src/bench/data.cpp +++ b/src/bench/data.cpp @@ -7,8 +7,8 @@ namespace benchmark { namespace data { -#include <bench/data/block413567.raw.h> -const std::vector<uint8_t> block413567{block413567_raw, block413567_raw + sizeof(block413567_raw) / sizeof(block413567_raw[0])}; +#include <bench/data/block41385.raw.h> +const std::vector<uint8_t> block41385{block41385_raw, block41385_raw + sizeof(block41385_raw) / sizeof(block41385_raw[0])}; } // namespace data } // namespace benchmark diff --git a/src/bench/data.h b/src/bench/data.h index 5f13d766e..3f985e575 100644 --- a/src/bench/data.h +++ b/src/bench/data.h @@ -11,7 +11,7 @@ namespace benchmark { namespace data { -extern const std::vector<uint8_t> block413567; +extern const std::vector<uint8_t> block41385; } // namespace data } // namespace benchmark diff --git a/src/bench/data/block413567.raw b/src/bench/data/block413567.raw Binary files differdeleted file mode 100644 index 67d2d5d38..000000000 --- a/src/bench/data/block413567.raw +++ /dev/null diff --git a/src/bench/data/block41385.raw b/src/bench/data/block41385.raw Binary files differnew file mode 100644 index 000000000..328f7e9af --- /dev/null +++ b/src/bench/data/block41385.raw diff --git a/src/bench/rpc_blockchain.cpp b/src/bench/rpc_blockchain.cpp index 4b45264a3..5b08c30ed 100644 --- a/src/bench/rpc_blockchain.cpp +++ b/src/bench/rpc_blockchain.cpp @@ -13,7 +13,7 @@ static void BlockToJsonVerbose(benchmark::Bench& bench) { - CDataStream stream(benchmark::data::block413567, SER_NETWORK, PROTOCOL_VERSION); + CDataStream stream(benchmark::data::block41385, SER_NETWORK, PROTOCOL_VERSION); char a = '\0'; stream.write(&a, 1); // Prevent compaction diff --git a/src/chain.h b/src/chain.h index 43e8a39f3..1f4eaae7e 100644 --- a/src/chain.h +++ b/src/chain.h @@ -243,6 +243,11 @@ public: * Does not imply the transactions are still stored on disk. (IsBlockPruned might return true) */ bool HaveTxsDownloaded() const { return nChainTx != 0; } + + uint256 GetBlockPoWHash() const + { + return GetBlockHeader().GetPoWHash(); + } int64_t GetBlockTime() const { diff --git a/src/chainparams.cpp b/src/chainparams.cpp index f6b8324a6..dd3e4a5a7 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -44,7 +44,7 @@ static CBlock CreateGenesisBlock(const char* pszTimestamp, const CScript& genesi * transaction cannot be spent since it did not originally exist in the * database. * - * CBlock(hash=000000000019d6, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=4a5e1e, nTime=1231006505, nBits=1d00ffff, nNonce=2083236893, vtx=1) + * CBlock(hash=000000000019d6, ver=1, hashPrevBlock=00000000000000, hashMerkleRoot=4a5e1e, nTime=1386325540, nBits=1e0ffff0, nNonce=99943, vtx=1) * CTransaction(hash=4a5e1e, ver=1, vin.size=1, vout.size=1, nLockTime=0) * CTxIn(COutPoint(000000, -1), coinbase 04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73) * CTxOut(nValue=50.00000000, scriptPubKey=0x5F1DF16B2B704C8A578D0B) @@ -52,8 +52,8 @@ static CBlock CreateGenesisBlock(const char* pszTimestamp, const CScript& genesi */ static CBlock CreateGenesisBlock(uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount& genesisReward) { - const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks"; - const CScript genesisOutputScript = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG; + const char* pszTimestamp = "Nintondo"; + const CScript genesisOutputScript = CScript() << ParseHex("040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9") << OP_CHECKSIG; return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward); } @@ -113,25 +113,18 @@ public: m_assumed_blockchain_size = 350; m_assumed_chain_state_size = 6; - genesis = CreateGenesisBlock(1386325540, 1930484355, 0x1d00ffff, 1, 88 * COIN); + genesis = CreateGenesisBlock(1386325540, 99943, 0x1e0ffff0, 1, 88 * COIN); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("0x000000007610a818e726d4f943b5936e750de86c142a5f59606456c945350ec3")); - assert(genesis.hashMerkleRoot == uint256S("0x13abc7dbaf8e00e9e128cb4977e3a9d15ea5d4ff249dd625ee607f6023cdb3df")); + assert(consensus.hashGenesisBlock == uint256S("0x1a91e3dace36e2be3bf030a65679fe821aa1d6ef92e7c9902eb318182c355691")); + assert(genesis.hashMerkleRoot == uint256S("0x5b2a3f53f605d62c53e62932dac6925e3d74afa5a4b459745c36d42d0ed26a69")); // Note that of those which support the service bits prefix, most only support a subset of // possible options. // This is fine at runtime as we'll fall back to using them as an addrfetch if they don't support the // service bits we want, but we should get them updated to support all service bits wanted by any // release ASAP to avoid it where possible. - vSeeds.emplace_back("seed.bitcoin.sipa.be"); // Pieter Wuille, only supports x1, x5, x9, and xd - vSeeds.emplace_back("dnsseed.bluematt.me"); // Matt Corallo, only supports x9 - vSeeds.emplace_back("dnsseed.bitcoin.dashjr.org"); // Luke Dashjr - vSeeds.emplace_back("seed.bitcoinstats.com"); // Christian Decker, supports x1 - xf - vSeeds.emplace_back("seed.bitcoin.jonasschnelli.ch"); // Jonas Schnelli, only supports x1, x5, x9, and xd - vSeeds.emplace_back("seed.btc.petertodd.org"); // Peter Todd, only supports x1, x5, x9, and xd - vSeeds.emplace_back("seed.bitcoin.sprovoost.nl"); // Sjors Provoost - vSeeds.emplace_back("dnsseed.emzy.de"); // Stephan Oeste - vSeeds.emplace_back("seed.bitcoin.wiz.biz"); // Jason Maurice + vSeeds.emplace_back("seed.multidoge.org"); + vSeeds.emplace_back("seed2.multidoge.org"); base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,30); base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,22); @@ -232,19 +225,15 @@ public: m_assumed_blockchain_size = 40; m_assumed_chain_state_size = 2; - // Dogecoin: Note timestamp is tweaked for SHA256 interim mining, will need correcting for Scrypt - genesis = CreateGenesisBlock(1391503288, 1182687315, 0x1d00ffff, 1, 88 * COIN); + genesis = CreateGenesisBlock(1391503289, 997879, 0x1e0ffff0, 1, 88 * COIN); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("0x00000000543fd974f37140a6192f890d744f220bd82ae428dbe684c7588347ad")); - assert(genesis.hashMerkleRoot == uint256S("0x13abc7dbaf8e00e9e128cb4977e3a9d15ea5d4ff249dd625ee607f6023cdb3df")); + assert(consensus.hashGenesisBlock == uint256S("0xbb0a78264637406b6360aad926284d544d7049f45189db5664f3c4d07350559e")); + assert(genesis.hashMerkleRoot == uint256S("0x5b2a3f53f605d62c53e62932dac6925e3d74afa5a4b459745c36d42d0ed26a69")); vFixedSeeds.clear(); vSeeds.clear(); // nodes with support for servicebits filtering should be at the top - vSeeds.emplace_back("testnet-seed.bitcoin.jonasschnelli.ch"); - vSeeds.emplace_back("seed.tbtc.petertodd.org"); - vSeeds.emplace_back("seed.testnet.bitcoin.sprovoost.nl"); - vSeeds.emplace_back("testnet-seed.bluematt.me"); // Just a static list of stable node(s), only supports x9 + vSeeds.emplace_back("testseed.jrn.me.uk", true); base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,113); base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,196); @@ -299,40 +288,27 @@ public: vSeeds.clear(); if (!args.IsArgSet("-signetchallenge")) { - bin = ParseHex("512103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430210359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c452ae"); - vSeeds.emplace_back("178.128.221.177"); - vSeeds.emplace_back("2a01:7c8:d005:390::5"); - vSeeds.emplace_back("v7ajjeirttkbnt32wpy3c6w3emwnfr3fkla7hpxcfokr3ysd3kqtzmqd.onion:38333"); - - consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000000000000019fd16269a"); - consensus.defaultAssumeValid = uint256S("0x0000002a1de0f46379358c1fd09906f7ac59adf3712323ed90eb59e4c183c020"); // 9434 - m_assumed_blockchain_size = 1; - m_assumed_chain_state_size = 0; - chainTxData = ChainTxData{ - // Data from RPC: getchaintxstats 4096 0000002a1de0f46379358c1fd09906f7ac59adf3712323ed90eb59e4c183c020 - /* nTime */ 1603986000, - /* nTxCount */ 9582, - /* dTxRate */ 0.00159272030651341, - }; + // Dogecoin: Use OP_FALSE as challenge, as we have no default Signet + bin = ParseHex("50"); } else { const auto signet_challenge = args.GetArgs("-signetchallenge"); if (signet_challenge.size() != 1) { throw std::runtime_error(strprintf("%s: -signetchallenge cannot be multiple values.", __func__)); } bin = ParseHex(signet_challenge[0]); - - consensus.nMinimumChainWork = uint256{}; - consensus.defaultAssumeValid = uint256{}; - m_assumed_blockchain_size = 0; - m_assumed_chain_state_size = 0; - chainTxData = ChainTxData{ - 0, - 0, - 0, - }; LogPrintf("Signet with challenge %s\n", signet_challenge[0]); } + consensus.nMinimumChainWork = uint256{}; + consensus.defaultAssumeValid = uint256{}; + m_assumed_blockchain_size = 0; + m_assumed_chain_state_size = 0; + chainTxData = ChainTxData{ + 0, + 0, + 0, + }; + if (args.IsArgSet("-signetseednode")) { vSeeds = args.GetArgs("-signetseednode"); } @@ -356,7 +332,7 @@ public: consensus.nRuleChangeActivationThreshold = 1900; // 95% of 2000 consensus.nMinerConfirmationWindow = 2000; // nPowTargetTimespan / nPowTargetSpacing consensus.MinBIP9WarningHeight = 0; - consensus.powLimit = uint256S("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + consensus.powLimit = uint256S("0x0000f77ae0000000000000000000000000000000000000000000000000000000"); consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 1199145601; // January 1, 2008 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = 1230767999; // December 31, 2008 @@ -378,10 +354,10 @@ public: nDefaultPort = 55556; nPruneAfterHeight = 1000; - genesis = CreateGenesisBlock(1598918400, 52613770, 0x1e0377ae, 1, 50 * COIN); + genesis = CreateGenesisBlock(1622364566, 81621, 0x1f00f77a, 1, 50 * COIN); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("0x00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6")); - assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")); + assert(consensus.hashGenesisBlock == uint256S("0xf21a2c00a3b58b3f1b245de5e30955c00784040a3e7042edb0d2eedd1fd085a5")); + assert(genesis.hashMerkleRoot == uint256S("0xb60e6a649c2c43248d6d8da2fb19daa337511fabfe3875f382adb686474fc021")); vFixedSeeds.clear(); @@ -426,7 +402,7 @@ public: consensus.fPowAllowMinDifficultyBlocks = true; consensus.fPowNoRetargeting = true; consensus.nRuleChangeActivationThreshold = 108; // 75% for testchains - consensus.nMinerConfirmationWindow = 144; // Faster than normal for regtest (144 instead of 2016) + consensus.nMinerConfirmationWindow = 144; // Faster than normal for regtest (144 instead of 10080) consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 0; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; @@ -454,8 +430,8 @@ public: genesis = CreateGenesisBlock(1296688602, 2, 0x207fffff, 1, 88 * COIN); consensus.hashGenesisBlock = genesis.GetHash(); - assert(consensus.hashGenesisBlock == uint256S("0x4ebcb24a7efa4e2050e74d6c95f1ee318ed2b4df2b6f28b0d6b8318cb43762e8")); - assert(genesis.hashMerkleRoot == uint256S("0x13abc7dbaf8e00e9e128cb4977e3a9d15ea5d4ff249dd625ee607f6023cdb3df")); + assert(consensus.hashGenesisBlock == uint256S("0x3d2160a3b5dc4a9d62e7e66a295f70313ac808440ef7400d6c0772171ce973a5")); + assert(genesis.hashMerkleRoot == uint256S("0x5b2a3f53f605d62c53e62932dac6925e3d74afa5a4b459745c36d42d0ed26a69")); vFixedSeeds.clear(); //!< Regtest mode doesn't have any fixed seeds. vSeeds.clear(); //!< Regtest mode doesn't have any DNS seeds. @@ -467,7 +443,7 @@ public: checkpointData = { { - {0, uint256S("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")}, + {0, uint256S("3d2160a3b5dc4a9d62e7e66a295f70313ac808440ef7400d6c0772171ce973a5")}, } }; diff --git a/src/crypto/scrypt-sse2.cpp b/src/crypto/scrypt-sse2.cpp new file mode 100644 index 000000000..c4f26aa30 --- /dev/null +++ b/src/crypto/scrypt-sse2.cpp @@ -0,0 +1,140 @@ +/* + * Copyright 2009 Colin Percival, 2011 ArtForz, 2012-2013 pooler + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file was originally written by Colin Percival as part of the Tarsnap + * online backup system. + */ + +#if defined(USE_SSE2) + +#include <crypto/scrypt.h> + +#include <stdlib.h> +#include <stdint.h> +#include <string.h> + +#include <emmintrin.h> + +static inline void xor_salsa8_sse2(__m128i B[4], const __m128i Bx[4]) +{ + __m128i X0, X1, X2, X3; + __m128i T; + int i; + + X0 = B[0] = _mm_xor_si128(B[0], Bx[0]); + X1 = B[1] = _mm_xor_si128(B[1], Bx[1]); + X2 = B[2] = _mm_xor_si128(B[2], Bx[2]); + X3 = B[3] = _mm_xor_si128(B[3], Bx[3]); + + for (i = 0; i < 8; i += 2) { + /* Operate on "columns". */ + T = _mm_add_epi32(X0, X3); + X1 = _mm_xor_si128(X1, _mm_slli_epi32(T, 7)); + X1 = _mm_xor_si128(X1, _mm_srli_epi32(T, 25)); + T = _mm_add_epi32(X1, X0); + X2 = _mm_xor_si128(X2, _mm_slli_epi32(T, 9)); + X2 = _mm_xor_si128(X2, _mm_srli_epi32(T, 23)); + T = _mm_add_epi32(X2, X1); + X3 = _mm_xor_si128(X3, _mm_slli_epi32(T, 13)); + X3 = _mm_xor_si128(X3, _mm_srli_epi32(T, 19)); + T = _mm_add_epi32(X3, X2); + X0 = _mm_xor_si128(X0, _mm_slli_epi32(T, 18)); + X0 = _mm_xor_si128(X0, _mm_srli_epi32(T, 14)); + + /* Rearrange data. */ + X1 = _mm_shuffle_epi32(X1, 0x93); + X2 = _mm_shuffle_epi32(X2, 0x4E); + X3 = _mm_shuffle_epi32(X3, 0x39); + + /* Operate on "rows". */ + T = _mm_add_epi32(X0, X1); + X3 = _mm_xor_si128(X3, _mm_slli_epi32(T, 7)); + X3 = _mm_xor_si128(X3, _mm_srli_epi32(T, 25)); + T = _mm_add_epi32(X3, X0); + X2 = _mm_xor_si128(X2, _mm_slli_epi32(T, 9)); + X2 = _mm_xor_si128(X2, _mm_srli_epi32(T, 23)); + T = _mm_add_epi32(X2, X3); + X1 = _mm_xor_si128(X1, _mm_slli_epi32(T, 13)); + X1 = _mm_xor_si128(X1, _mm_srli_epi32(T, 19)); + T = _mm_add_epi32(X1, X2); + X0 = _mm_xor_si128(X0, _mm_slli_epi32(T, 18)); + X0 = _mm_xor_si128(X0, _mm_srli_epi32(T, 14)); + + /* Rearrange data. */ + X1 = _mm_shuffle_epi32(X1, 0x39); + X2 = _mm_shuffle_epi32(X2, 0x4E); + X3 = _mm_shuffle_epi32(X3, 0x93); + } + + B[0] = _mm_add_epi32(B[0], X0); + B[1] = _mm_add_epi32(B[1], X1); + B[2] = _mm_add_epi32(B[2], X2); + B[3] = _mm_add_epi32(B[3], X3); +} + +void scrypt_1024_1_1_256_sp_sse2(const char *input, char *output, char *scratchpad) +{ + uint8_t B[128]; + union { + __m128i i128[8]; + uint32_t u32[32]; + } X; + __m128i *V; + uint32_t i, j, k; + + V = (__m128i *)(((uintptr_t)(scratchpad) + 63) & ~ (uintptr_t)(63)); + + PBKDF2_SHA256((const uint8_t *)input, 80, (const uint8_t *)input, 80, 1, B, 128); + + for (k = 0; k < 2; k++) { + for (i = 0; i < 16; i++) { + X.u32[k * 16 + i] = le32dec(&B[(k * 16 + (i * 5 % 16)) * 4]); + } + } + + for (i = 0; i < 1024; i++) { + for (k = 0; k < 8; k++) + V[i * 8 + k] = X.i128[k]; + xor_salsa8_sse2(&X.i128[0], &X.i128[4]); + xor_salsa8_sse2(&X.i128[4], &X.i128[0]); + } + for (i = 0; i < 1024; i++) { + j = 8 * (X.u32[16] & 1023); + for (k = 0; k < 8; k++) + X.i128[k] = _mm_xor_si128(X.i128[k], V[j + k]); + xor_salsa8_sse2(&X.i128[0], &X.i128[4]); + xor_salsa8_sse2(&X.i128[4], &X.i128[0]); + } + + for (k = 0; k < 2; k++) { + for (i = 0; i < 16; i++) { + le32enc(&B[(k * 16 + (i * 5 % 16)) * 4], X.u32[k * 16 + i]); + } + } + + PBKDF2_SHA256((const uint8_t *)input, 80, B, 128, 1, (uint8_t *)output, 32); +} + +#endif // USE_SSE2 diff --git a/src/crypto/scrypt.cpp b/src/crypto/scrypt.cpp new file mode 100644 index 000000000..3bdd9d6cb --- /dev/null +++ b/src/crypto/scrypt.cpp @@ -0,0 +1,576 @@ +/* + * Copyright 2009 Colin Percival, 2011 ArtForz, 2012-2013 pooler + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * This file was originally written by Colin Percival as part of the Tarsnap + * online backup system. + */ + +#include <crypto/scrypt.h> + +#include <stdlib.h> +#include <stdint.h> +#include <string.h> + +#if defined(USE_SSE2) && !defined(USE_SSE2_ALWAYS) +#ifdef _MSC_VER +// MSVC 64bit is unable to use inline asm +#include <intrin.h> +#else +// GCC Linux or i686-w64-mingw32 +#include <cpuid.h> +#endif +#endif +#ifndef __FreeBSD__ +static inline uint32_t be32dec(const void *pp) +{ + const uint8_t *p = (uint8_t const *)pp; + return ((uint32_t)(p[3]) + ((uint32_t)(p[2]) << 8) + + ((uint32_t)(p[1]) << 16) + ((uint32_t)(p[0]) << 24)); +} + +static inline void be32enc(void *pp, uint32_t x) +{ + uint8_t *p = (uint8_t *)pp; + p[3] = x & 0xff; + p[2] = (x >> 8) & 0xff; + p[1] = (x >> 16) & 0xff; + p[0] = (x >> 24) & 0xff; +} + +#endif + +typedef struct SHA256_CTXContext { + uint32_t total[2]; + uint32_t state[8]; + uint8_t buffer[64]; +} SHA256_CTX; + +#define GET_UINT32(n, b, i) \ + { \ + (n) = ((uint32_t)(b)[(i)] << 24) \ + | ((uint32_t)(b)[(i) + 1] << 16) \ + | ((uint32_t)(b)[(i) + 2] << 8) \ + | ((uint32_t)(b)[(i) + 3]); \ + } + +#define PUT_UINT32(n, b, i) \ + { \ + (b)[(i)] = (uint8_t)((n) >> 24); \ + (b)[(i) + 1] = (uint8_t)((n) >> 16); \ + (b)[(i) + 2] = (uint8_t)((n) >> 8); \ + (b)[(i) + 3] = (uint8_t)((n)); \ + } + +#define SHR(x, n) ((x & 0xFFFFFFFF) >> n) +#define ROTR(x, n) (SHR(x, n) | (x << (32 - n))) +#define S0(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3)) +#define S1(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10)) +#define S2(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22)) +#define S3(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25)) +#define F0(x, y, z) ((x & y) | (z & (x | y))) +#define F1(x, y, z) (z ^ (x & (y ^ z))) +#define R(t) (W[t] = S1(W[t - 2]) + W[t - 7] + S0(W[t - 15]) + W[t - 16]) + +#define P(a, b, c, d, e, f, g, h, x, K) \ + { \ + temp1 = h + S3(e) + F1(e, f, g) + K + x; \ + temp2 = S2(a) + F0(a, b, c); \ + d += temp1; \ + h = temp1 + temp2; \ + } + +static void +SHA256_Init(SHA256_CTX* ctx) +{ + ctx->total[0] = 0; + ctx->total[1] = 0; + + ctx->state[0] = 0x6A09E667; + ctx->state[1] = 0xBB67AE85; + ctx->state[2] = 0x3C6EF372; + ctx->state[3] = 0xA54FF53A; + ctx->state[4] = 0x510E527F; + ctx->state[5] = 0x9B05688C; + ctx->state[6] = 0x1F83D9AB; + ctx->state[7] = 0x5BE0CD19; +} + +static void +SHA256_Process(SHA256_CTX* ctx, uint8_t data[64]) +{ + uint32_t temp1, temp2, W[64]; + uint32_t A, B, C, D, E, F, G, H; + + GET_UINT32(W[0], data, 0); + GET_UINT32(W[1], data, 4); + GET_UINT32(W[2], data, 8); + GET_UINT32(W[3], data, 12); + GET_UINT32(W[4], data, 16); + GET_UINT32(W[5], data, 20); + GET_UINT32(W[6], data, 24); + GET_UINT32(W[7], data, 28); + GET_UINT32(W[8], data, 32); + GET_UINT32(W[9], data, 36); + GET_UINT32(W[10], data, 40); + GET_UINT32(W[11], data, 44); + GET_UINT32(W[12], data, 48); + GET_UINT32(W[13], data, 52); + GET_UINT32(W[14], data, 56); + GET_UINT32(W[15], data, 60); + + A = ctx->state[0]; + B = ctx->state[1]; + C = ctx->state[2]; + D = ctx->state[3]; + E = ctx->state[4]; + F = ctx->state[5]; + G = ctx->state[6]; + H = ctx->state[7]; + + P(A, B, C, D, E, F, G, H, W[0], 0x428A2F98); + P(H, A, B, C, D, E, F, G, W[1], 0x71374491); + P(G, H, A, B, C, D, E, F, W[2], 0xB5C0FBCF); + P(F, G, H, A, B, C, D, E, W[3], 0xE9B5DBA5); + P(E, F, G, H, A, B, C, D, W[4], 0x3956C25B); + P(D, E, F, G, H, A, B, C, W[5], 0x59F111F1); + P(C, D, E, F, G, H, A, B, W[6], 0x923F82A4); + P(B, C, D, E, F, G, H, A, W[7], 0xAB1C5ED5); + P(A, B, C, D, E, F, G, H, W[8], 0xD807AA98); + P(H, A, B, C, D, E, F, G, W[9], 0x12835B01); + P(G, H, A, B, C, D, E, F, W[10], 0x243185BE); + P(F, G, H, A, B, C, D, E, W[11], 0x550C7DC3); + P(E, F, G, H, A, B, C, D, W[12], 0x72BE5D74); + P(D, E, F, G, H, A, B, C, W[13], 0x80DEB1FE); + P(C, D, E, F, G, H, A, B, W[14], 0x9BDC06A7); + P(B, C, D, E, F, G, H, A, W[15], 0xC19BF174); + P(A, B, C, D, E, F, G, H, R(16), 0xE49B69C1); + P(H, A, B, C, D, E, F, G, R(17), 0xEFBE4786); + P(G, H, A, B, C, D, E, F, R(18), 0x0FC19DC6); + P(F, G, H, A, B, C, D, E, R(19), 0x240CA1CC); + P(E, F, G, H, A, B, C, D, R(20), 0x2DE92C6F); + P(D, E, F, G, H, A, B, C, R(21), 0x4A7484AA); + P(C, D, E, F, G, H, A, B, R(22), 0x5CB0A9DC); + P(B, C, D, E, F, G, H, A, R(23), 0x76F988DA); + P(A, B, C, D, E, F, G, H, R(24), 0x983E5152); + P(H, A, B, C, D, E, F, G, R(25), 0xA831C66D); + P(G, H, A, B, C, D, E, F, R(26), 0xB00327C8); + P(F, G, H, A, B, C, D, E, R(27), 0xBF597FC7); + P(E, F, G, H, A, B, C, D, R(28), 0xC6E00BF3); + P(D, E, F, G, H, A, B, C, R(29), 0xD5A79147); + P(C, D, E, F, G, H, A, B, R(30), 0x06CA6351); + P(B, C, D, E, F, G, H, A, R(31), 0x14292967); + P(A, B, C, D, E, F, G, H, R(32), 0x27B70A85); + P(H, A, B, C, D, E, F, G, R(33), 0x2E1B2138); + P(G, H, A, B, C, D, E, F, R(34), 0x4D2C6DFC); + P(F, G, H, A, B, C, D, E, R(35), 0x53380D13); + P(E, F, G, H, A, B, C, D, R(36), 0x650A7354); + P(D, E, F, G, H, A, B, C, R(37), 0x766A0ABB); + P(C, D, E, F, G, H, A, B, R(38), 0x81C2C92E); + P(B, C, D, E, F, G, H, A, R(39), 0x92722C85); + P(A, B, C, D, E, F, G, H, R(40), 0xA2BFE8A1); + P(H, A, B, C, D, E, F, G, R(41), 0xA81A664B); + P(G, H, A, B, C, D, E, F, R(42), 0xC24B8B70); + P(F, G, H, A, B, C, D, E, R(43), 0xC76C51A3); + P(E, F, G, H, A, B, C, D, R(44), 0xD192E819); + P(D, E, F, G, H, A, B, C, R(45), 0xD6990624); + P(C, D, E, F, G, H, A, B, R(46), 0xF40E3585); + P(B, C, D, E, F, G, H, A, R(47), 0x106AA070); + P(A, B, C, D, E, F, G, H, R(48), 0x19A4C116); + P(H, A, B, C, D, E, F, G, R(49), 0x1E376C08); + P(G, H, A, B, C, D, E, F, R(50), 0x2748774C); + P(F, G, H, A, B, C, D, E, R(51), 0x34B0BCB5); + P(E, F, G, H, A, B, C, D, R(52), 0x391C0CB3); + P(D, E, F, G, H, A, B, C, R(53), 0x4ED8AA4A); + P(C, D, E, F, G, H, A, B, R(54), 0x5B9CCA4F); + P(B, C, D, E, F, G, H, A, R(55), 0x682E6FF3); + P(A, B, C, D, E, F, G, H, R(56), 0x748F82EE); + P(H, A, B, C, D, E, F, G, R(57), 0x78A5636F); + P(G, H, A, B, C, D, E, F, R(58), 0x84C87814); + P(F, G, H, A, B, C, D, E, R(59), 0x8CC70208); + P(E, F, G, H, A, B, C, D, R(60), 0x90BEFFFA); + P(D, E, F, G, H, A, B, C, R(61), 0xA4506CEB); + P(C, D, E, F, G, H, A, B, R(62), 0xBEF9A3F7); + P(B, C, D, E, F, G, H, A, R(63), 0xC67178F2); + + ctx->state[0] += A; + ctx->state[1] += B; + ctx->state[2] += C; + ctx->state[3] += D; + ctx->state[4] += E; + ctx->state[5] += F; + ctx->state[6] += G; + ctx->state[7] += H; +} + +static void +SHA256_Update(SHA256_CTX* ctx, uint8_t* input, uint32_t length) +{ + uint32_t left, fill; + + if (!length) + return; + + left = ctx->total[0] & 0x3F; + fill = 64 - left; + + ctx->total[0] += length; + ctx->total[0] &= 0xFFFFFFFF; + + if (ctx->total[0] < length) + ctx->total[1]++; + + if (left && length >= fill) { + memcpy((void*)(ctx->buffer + left), + (void*)input, fill); + SHA256_Process(ctx, ctx->buffer); + length -= fill; + input += fill; + left = 0; + } + + while (length >= 64) { + SHA256_Process(ctx, input); + length -= 64; + input += 64; + } + + if (length) { + memcpy((void*)(ctx->buffer + left), + (void*)input, length); + } +} + +static void +SHA256_Final(SHA256_CTX* ctx, uint8_t digest[32]) +{ + uint32_t last, padn; + uint32_t high, low; + uint8_t msglen[8]; + + high = (ctx->total[0] >> 29) + | (ctx->total[1] << 3); + low = (ctx->total[0] << 3); + + PUT_UINT32(high, msglen, 0); + PUT_UINT32(low, msglen, 4); + + last = ctx->total[0] & 0x3F; + padn = (last < 56) ? (56 - last) : (120 - last); + + uint8_t sha256_padding[64]; + memset(sha256_padding, 0, 64); + memset(sha256_padding, 0x80, 1); + + SHA256_Update(ctx, sha256_padding, padn); + SHA256_Update(ctx, msglen, 8); + + PUT_UINT32(ctx->state[0], digest, 0); + PUT_UINT32(ctx->state[1], digest, 4); + PUT_UINT32(ctx->state[2], digest, 8); + PUT_UINT32(ctx->state[3], digest, 12); + PUT_UINT32(ctx->state[4], digest, 16); + PUT_UINT32(ctx->state[5], digest, 20); + PUT_UINT32(ctx->state[6], digest, 24); + PUT_UINT32(ctx->state[7], digest, 28); +} + +typedef struct HMAC_SHA256Context { + SHA256_CTX ictx; + SHA256_CTX octx; +} HMAC_SHA256_CTX; + +/* Initialize an HMAC-SHA256 operation with the given key. */ +static void +HMAC_SHA256_Init(HMAC_SHA256_CTX *ctx, const void *_K, size_t Klen) +{ + unsigned char pad[64]; + unsigned char khash[32]; + const unsigned char *K = (const unsigned char *)_K; + size_t i; + + /* If Klen > 64, the key is really SHA256(K). */ + if (Klen > 64) { + SHA256_Init(&ctx->ictx); + SHA256_Update(&ctx->ictx, (uint8_t*)K, Klen); + SHA256_Final(&ctx->ictx, (uint8_t*)khash); + K = khash; + Klen = 32; + } + + /* Inner SHA256 operation is SHA256(K xor [block of 0x36] || data). */ + SHA256_Init(&ctx->ictx); + memset(pad, 0x36, 64); + for (i = 0; i < Klen; i++) + pad[i] ^= K[i]; + SHA256_Update(&ctx->ictx, pad, 64); + + /* Outer SHA256 operation is SHA256(K xor [block of 0x5c] || hash). */ + SHA256_Init(&ctx->octx); + memset(pad, 0x5c, 64); + for (i = 0; i < Klen; i++) + pad[i] ^= K[i]; + SHA256_Update(&ctx->octx, pad, 64); + + /* Clean the stack. */ + memset(khash, 0, 32); +} + +/* Add bytes to the HMAC-SHA256 operation. */ +static void +HMAC_SHA256_Update(HMAC_SHA256_CTX *ctx, const void *in, size_t len) +{ + /* Feed data to the inner SHA256 operation. */ + SHA256_Update(&ctx->ictx, (uint8_t*)in, len); +} + +/* Finish an HMAC-SHA256 operation. */ +static void +HMAC_SHA256_Final(unsigned char digest[32], HMAC_SHA256_CTX *ctx) +{ + unsigned char ihash[32]; + + /* Finish the inner SHA256 operation. */ + SHA256_Final(&ctx->ictx, ihash); + + /* Feed the inner hash to the outer SHA256 operation. */ + SHA256_Update(&ctx->octx, ihash, 32); + + /* Finish the outer SHA256 operation. */ + SHA256_Final(&ctx->octx, digest); + + /* Clean the stack. */ + memset(ihash, 0, 32); +} + +/** + * PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, c, buf, dkLen): + * Compute PBKDF2(passwd, salt, c, dkLen) using HMAC-SHA256 as the PRF, and + * write the output to buf. The value dkLen must be at most 32 * (2^32 - 1). + */ +void +PBKDF2_SHA256(const uint8_t *passwd, size_t passwdlen, const uint8_t *salt, + size_t saltlen, uint64_t c, uint8_t *buf, size_t dkLen) +{ + HMAC_SHA256_CTX PShctx, hctx; + size_t i; + uint8_t ivec[4]; + uint8_t U[32]; + uint8_t T[32]; + uint64_t j; + int k; + size_t clen; + + /* Compute HMAC state after processing P and S. */ + HMAC_SHA256_Init(&PShctx, passwd, passwdlen); + HMAC_SHA256_Update(&PShctx, salt, saltlen); + + /* Iterate through the blocks. */ + for (i = 0; i * 32 < dkLen; i++) { + /* Generate INT(i + 1). */ + be32enc(ivec, (uint32_t)(i + 1)); + + /* Compute U_1 = PRF(P, S || INT(i)). */ + memcpy(&hctx, &PShctx, sizeof(HMAC_SHA256_CTX)); + HMAC_SHA256_Update(&hctx, ivec, 4); + HMAC_SHA256_Final(U, &hctx); + + /* T_i = U_1 ... */ + memcpy(T, U, 32); + + for (j = 2; j <= c; j++) { + /* Compute U_j. */ + HMAC_SHA256_Init(&hctx, passwd, passwdlen); + HMAC_SHA256_Update(&hctx, U, 32); + HMAC_SHA256_Final(U, &hctx); + + /* ... xor U_j ... */ + for (k = 0; k < 32; k++) + T[k] ^= U[k]; + } + + /* Copy as many bytes as necessary into buf. */ + clen = dkLen - i * 32; + if (clen > 32) + clen = 32; + memcpy(&buf[i * 32], T, clen); + } + + /* Clean PShctx, since we never called _Final on it. */ + memset(&PShctx, 0, sizeof(HMAC_SHA256_CTX)); +} + +#define ROTL(a, b) (((a) << (b)) | ((a) >> (32 - (b)))) + +static inline void xor_salsa8(uint32_t B[16], const uint32_t Bx[16]) +{ + uint32_t x00,x01,x02,x03,x04,x05,x06,x07,x08,x09,x10,x11,x12,x13,x14,x15; + int i; + + x00 = (B[ 0] ^= Bx[ 0]); + x01 = (B[ 1] ^= Bx[ 1]); + x02 = (B[ 2] ^= Bx[ 2]); + x03 = (B[ 3] ^= Bx[ 3]); + x04 = (B[ 4] ^= Bx[ 4]); + x05 = (B[ 5] ^= Bx[ 5]); + x06 = (B[ 6] ^= Bx[ 6]); + x07 = (B[ 7] ^= Bx[ 7]); + x08 = (B[ 8] ^= Bx[ 8]); + x09 = (B[ 9] ^= Bx[ 9]); + x10 = (B[10] ^= Bx[10]); + x11 = (B[11] ^= Bx[11]); + x12 = (B[12] ^= Bx[12]); + x13 = (B[13] ^= Bx[13]); + x14 = (B[14] ^= Bx[14]); + x15 = (B[15] ^= Bx[15]); + for (i = 0; i < 8; i += 2) { + /* Operate on columns. */ + x04 ^= ROTL(x00 + x12, 7); x09 ^= ROTL(x05 + x01, 7); + x14 ^= ROTL(x10 + x06, 7); x03 ^= ROTL(x15 + x11, 7); + + x08 ^= ROTL(x04 + x00, 9); x13 ^= ROTL(x09 + x05, 9); + x02 ^= ROTL(x14 + x10, 9); x07 ^= ROTL(x03 + x15, 9); + + x12 ^= ROTL(x08 + x04, 13); x01 ^= ROTL(x13 + x09, 13); + x06 ^= ROTL(x02 + x14, 13); x11 ^= ROTL(x07 + x03, 13); + + x00 ^= ROTL(x12 + x08, 18); x05 ^= ROTL(x01 + x13, 18); + x10 ^= ROTL(x06 + x02, 18); x15 ^= ROTL(x11 + x07, 18); + + /* Operate on rows. */ + x01 ^= ROTL(x00 + x03, 7); x06 ^= ROTL(x05 + x04, 7); + x11 ^= ROTL(x10 + x09, 7); x12 ^= ROTL(x15 + x14, 7); + + x02 ^= ROTL(x01 + x00, 9); x07 ^= ROTL(x06 + x05, 9); + x08 ^= ROTL(x11 + x10, 9); x13 ^= ROTL(x12 + x15, 9); + + x03 ^= ROTL(x02 + x01, 13); x04 ^= ROTL(x07 + x06, 13); + x09 ^= ROTL(x08 + x11, 13); x14 ^= ROTL(x13 + x12, 13); + + x00 ^= ROTL(x03 + x02, 18); x05 ^= ROTL(x04 + x07, 18); + x10 ^= ROTL(x09 + x08, 18); x15 ^= ROTL(x14 + x13, 18); + } + B[ 0] += x00; + B[ 1] += x01; + B[ 2] += x02; + B[ 3] += x03; + B[ 4] += x04; + B[ 5] += x05; + B[ 6] += x06; + B[ 7] += x07; + B[ 8] += x08; + B[ 9] += x09; + B[10] += x10; + B[11] += x11; + B[12] += x12; + B[13] += x13; + B[14] += x14; + B[15] += x15; +} + +void scrypt_1024_1_1_256_sp_generic(const char *input, char *output, char *scratchpad) +{ + uint8_t B[128]; + uint32_t X[32]; + uint32_t *V; + uint32_t i, j, k; + + V = (uint32_t *)(((uintptr_t)(scratchpad) + 63) & ~ (uintptr_t)(63)); + + PBKDF2_SHA256((const uint8_t *)input, 80, (const uint8_t *)input, 80, 1, B, 128); + + for (k = 0; k < 32; k++) + X[k] = le32dec(&B[4 * k]); + + for (i = 0; i < 1024; i++) { + memcpy(&V[i * 32], X, 128); + xor_salsa8(&X[0], &X[16]); + xor_salsa8(&X[16], &X[0]); + } + for (i = 0; i < 1024; i++) { + j = 32 * (X[16] & 1023); + for (k = 0; k < 32; k++) + X[k] ^= V[j + k]; + xor_salsa8(&X[0], &X[16]); + xor_salsa8(&X[16], &X[0]); + } + + for (k = 0; k < 32; k++) + le32enc(&B[4 * k], X[k]); + + PBKDF2_SHA256((const uint8_t *)input, 80, B, 128, 1, (uint8_t *)output, 32); +} + +#if defined(USE_SSE2) +// By default, set to generic scrypt function. This will prevent crash in case when scrypt_detect_sse2() wasn't called +void (*scrypt_1024_1_1_256_sp_detected)(const char *input, char *output, char *scratchpad) = &scrypt_1024_1_1_256_sp_generic; + +std::string scrypt_detect_sse2() +{ + std::string ret; +#if defined(USE_SSE2_ALWAYS) + ret = "scrypt: using scrypt-sse2 as built."; +#else // USE_SSE2_ALWAYS + // 32bit x86 Linux or Windows, detect cpuid features + unsigned int cpuid_edx=0; +#if defined(_MSC_VER) + // MSVC + int x86cpuid[4]; + __cpuid(x86cpuid, 1); + cpuid_edx = (unsigned int)buffer[3]; +#else // _MSC_VER + // Linux or i686-w64-mingw32 (gcc-4.6.3) + unsigned int eax, ebx, ecx; + __get_cpuid(1, &eax, &ebx, &ecx, &cpuid_edx); +#endif // _MSC_VER + + if (cpuid_edx & 1<<26) + { + scrypt_1024_1_1_256_sp_detected = &scrypt_1024_1_1_256_sp_sse2; + ret = "scrypt: using scrypt-sse2 as detected"; + } + else + { + scrypt_1024_1_1_256_sp_detected = &scrypt_1024_1_1_256_sp_generic; + ret = "scrypt: using scrypt-generic, SSE2 unavailable"; + } +#endif // USE_SSE2_ALWAYS + return ret; +} +#endif + +void scrypt_1024_1_1_256(const char *input, char *output) +{ + char scratchpad[SCRYPT_SCRATCHPAD_SIZE]; + scrypt_1024_1_1_256_sp(input, output, scratchpad); +} + +void SHA256(unsigned char* input, int len, unsigned char* output) +{ + SHA256_CTX ctx; + SHA256_Init(&ctx); + SHA256_Update(&ctx, (uint8_t*)input, len); + SHA256_Final(&ctx, (uint8_t*)output); +} + diff --git a/src/crypto/scrypt.h b/src/crypto/scrypt.h new file mode 100644 index 000000000..6ba31aee6 --- /dev/null +++ b/src/crypto/scrypt.h @@ -0,0 +1,49 @@ +#ifndef BITCOIN_CRYPTO_SCRYPT_H +#define BITCOIN_CRYPTO_SCRYPT_H + +#include <stdlib.h> +#include <stdint.h> + +static const int SCRYPT_SCRATCHPAD_SIZE = 131072 + 63; + +void scrypt_1024_1_1_256(const char *input, char *output); +void scrypt_1024_1_1_256_sp_generic(const char *input, char *output, char *scratchpad); + +#if defined(USE_SSE2) +#include <string> +#if defined(_M_X64) || defined(__x86_64__) || defined(_M_AMD64) || (defined(MAC_OSX) && defined(__i386__)) +#define USE_SSE2_ALWAYS 1 +#define scrypt_1024_1_1_256_sp(input, output, scratchpad) scrypt_1024_1_1_256_sp_sse2((input), (output), (scratchpad)) +#else +#define scrypt_1024_1_1_256_sp(input, output, scratchpad) scrypt_1024_1_1_256_sp_detected((input), (output), (scratchpad)) +#endif + +std::string scrypt_detect_sse2(); +void scrypt_1024_1_1_256_sp_sse2(const char *input, char *output, char *scratchpad); +extern void (*scrypt_1024_1_1_256_sp_detected)(const char *input, char *output, char *scratchpad); +#else +#define scrypt_1024_1_1_256_sp(input, output, scratchpad) scrypt_1024_1_1_256_sp_generic((input), (output), (scratchpad)) +#endif + +void +PBKDF2_SHA256(const uint8_t *passwd, size_t passwdlen, const uint8_t *salt, + size_t saltlen, uint64_t c, uint8_t *buf, size_t dkLen); + +#ifndef __FreeBSD__ +static inline uint32_t le32dec(const void *pp) +{ + const uint8_t *p = (uint8_t const *)pp; + return ((uint32_t)(p[0]) + ((uint32_t)(p[1]) << 8) + + ((uint32_t)(p[2]) << 16) + ((uint32_t)(p[3]) << 24)); +} + +static inline void le32enc(void *pp, uint32_t x) +{ + uint8_t *p = (uint8_t *)pp; + p[0] = x & 0xff; + p[1] = (x >> 8) & 0xff; + p[2] = (x >> 16) & 0xff; + p[3] = (x >> 24) & 0xff; +} +#endif +#endif // BITCOIN_CRYPTO_SCRYPT_H diff --git a/src/init.cpp b/src/init.cpp index 097c645f1..36b82c243 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -85,7 +85,12 @@ #include <zmq/zmqrpc.h> #endif +#ifdef USE_SSE2 +#include <crypto/scrypt.h> +#endif + static bool fFeeEstimatesInitialized = false; + static const bool DEFAULT_PROXYRANDOMIZE = true; static const bool DEFAULT_REST_ENABLE = false; static const bool DEFAULT_STOPAFTERBLOCKIMPORT = false; @@ -968,6 +973,10 @@ bool AppInitParameterInteraction(const ArgsManager& args) // on the command line or in this network's section of the config file. std::string network = args.GetChainName(); if (network == CBaseChainParams::SIGNET) { + // Dogecoin: Signet requires a challenge, but we can't halt when constructing the chainparams as they're constructed even if not used. + if (!args.IsArgSet("-signetchallenge")) { + return InitError(_("-signetchallenge must be specified when using -signet on Dogecoin as no default Signet is available.")); + } LogPrintf("Signet derived magic (message start): %s\n", HexStr(chainparams.MessageStart())); } bilingual_str errors; @@ -1370,6 +1379,11 @@ bool AppInitMain(const util::Ref& context, NodeContext& node, interfaces::BlockA if (!AppInitServers(context, node)) return InitError(_("Unable to start HTTP server. See debug log for details.")); } + +#if defined(USE_SSE2) + std::string sse2detect = scrypt_detect_sse2(); + LogPrintf("%s\n", sse2detect); +#endif // ********************************************************* Step 5: verify wallet database integrity for (const auto& client : node.chain_clients) { diff --git a/src/net_processing.cpp b/src/net_processing.cpp index cbb448649..d2a0e6d91 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -2469,6 +2469,8 @@ void PeerManager::ProcessMessage(CNode& pfrom, const std::string& msg_type, CDat AddTimeData(pfrom.addr, nTimeOffset); // If the peer is old enough to have the old alert system, send it the final alert. + // TODO: Decide if we need to reintroduce alerts to Dogecoin + // https://github.com/dogecoin/dogecoin/issues/2231 if (greatest_common_version <= 70012) { CDataStream finalAlert(ParseHex("60010000000000000000000000ffffff7f00000000ffffff7ffeffff7f01ffffff7f00000000ffffff7f00ffffff7f002f555247454e543a20416c657274206b657920636f6d70726f6d697365642c2075706772616465207265717569726564004630440220653febd6410f470f6bae11cad19c48413becb1ac2c17f908fd0fd53bdc3abd5202206d0e9c96fe88d4a0f01ed9dedae2b6f9e00da94cad0fecaae66ecf689bf71b50"), SER_NETWORK, PROTOCOL_VERSION); m_connman.PushMessage(&pfrom, CNetMsgMaker(greatest_common_version).Make("alert", finalAlert)); diff --git a/src/primitives/block.cpp b/src/primitives/block.cpp index 50a30cb51..1aeabb3d5 100644 --- a/src/primitives/block.cpp +++ b/src/primitives/block.cpp @@ -7,12 +7,21 @@ #include <hash.h> #include <tinyformat.h> +#include <crypto/common.h> +#include <crypto/scrypt.h> uint256 CBlockHeader::GetHash() const { return SerializeHash(*this); } +uint256 CBlockHeader::GetPoWHash() const +{ + uint256 thash; + scrypt_1024_1_1_256((char*)&nVersion, (char*)&thash); + return thash; +} + std::string CBlock::ToString() const { std::stringstream s; diff --git a/src/primitives/block.h b/src/primitives/block.h index fd8fc8b86..20642d744 100644 --- a/src/primitives/block.h +++ b/src/primitives/block.h @@ -52,6 +52,8 @@ public: uint256 GetHash() const; + uint256 GetPoWHash() const; + int64_t GetBlockTime() const { return (int64_t)nTime; diff --git a/src/qt/test/rpcnestedtests.cpp b/src/qt/test/rpcnestedtests.cpp index a82adc251..b952d87e1 100644 --- a/src/qt/test/rpcnestedtests.cpp +++ b/src/qt/test/rpcnestedtests.cpp @@ -69,7 +69,7 @@ void RPCNestedTests::rpcNestedTests() QVERIFY(result == result2); RPCConsole::RPCExecuteCommandLine(*node, result, "getblock(getbestblockhash())[tx][0]", &filtered); - QVERIFY(result == "13abc7dbaf8e00e9e128cb4977e3a9d15ea5d4ff249dd625ee607f6023cdb3df"); + QVERIFY(result == "5b2a3f53f605d62c53e62932dac6925e3d74afa5a4b459745c36d42d0ed26a69"); QVERIFY(filtered == "getblock(getbestblockhash())[tx][0]"); RPCConsole::RPCParseCommandLine(nullptr, result, "importprivkey", false, &filtered); diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 6522c0d73..74e1c469b 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -116,7 +116,7 @@ static bool GenerateBlock(ChainstateManager& chainman, CBlock& block, uint64_t& CChainParams chainparams(Params()); - while (max_tries > 0 && block.nNonce < std::numeric_limits<uint32_t>::max() && !CheckProofOfWork(block.GetHash(), block.nBits, chainparams.GetConsensus()) && !ShutdownRequested()) { + while (max_tries > 0 && block.nNonce < std::numeric_limits<uint32_t>::max() && !CheckProofOfWork(block.GetPoWHash(), block.nBits, chainparams.GetConsensus()) && !ShutdownRequested()) { ++block.nNonce; --max_tries; } diff --git a/src/rpc/rawtransaction_util.cpp b/src/rpc/rawtransaction_util.cpp index f004ecc20..b6b5b55f5 100644 --- a/src/rpc/rawtransaction_util.cpp +++ b/src/rpc/rawtransaction_util.cpp @@ -115,7 +115,7 @@ CMutableTransaction ConstructTransaction(const UniValue& inputs_in, const UniVal } else { CTxDestination destination = DecodeDestination(name_); if (!IsValidDestination(destination)) { - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Bitcoin address: ") + name_); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, std::string("Invalid Dogecoin address: ") + name_); } if (!destinations.insert(destination).second) { diff --git a/src/test/blockencodings_tests.cpp b/src/test/blockencodings_tests.cpp index 14cf1a4a7..fb3158b07 100644 --- a/src/test/blockencodings_tests.cpp +++ b/src/test/blockencodings_tests.cpp @@ -44,7 +44,7 @@ static CBlock BuildBlockTestCase() { bool mutated; block.hashMerkleRoot = BlockMerkleRoot(block, &mutated); assert(!mutated); - while (!CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus())) ++block.nNonce; + while (!CheckProofOfWork(block.GetPoWHash(), block.nBits, Params().GetConsensus())) ++block.nNonce; return block; } @@ -275,7 +275,7 @@ BOOST_AUTO_TEST_CASE(EmptyBlockRoundTripTest) bool mutated; block.hashMerkleRoot = BlockMerkleRoot(block, &mutated); assert(!mutated); - while (!CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus())) ++block.nNonce; + while (!CheckProofOfWork(block.GetPoWHash(), block.nBits, Params().GetConsensus())) ++block.nNonce; // Test simple header round-trip with only coinbase { diff --git a/src/test/blockfilter_index_tests.cpp b/src/test/blockfilter_index_tests.cpp index 753c1bb5f..8b76d30ac 100644 --- a/src/test/blockfilter_index_tests.cpp +++ b/src/test/blockfilter_index_tests.cpp @@ -82,7 +82,7 @@ CBlock BuildChainTestingSetup::CreateBlock(const CBlockIndex* prev, unsigned int extraNonce = 0; IncrementExtraNonce(&block, prev, extraNonce); - while (!CheckProofOfWork(block.GetHash(), block.nBits, chainparams.GetConsensus())) ++block.nNonce; + while (!CheckProofOfWork(block.GetPoWHash(), block.nBits, chainparams.GetConsensus())) ++block.nNonce; return block; } diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index 2a342fe70..3eefab9ef 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -51,34 +51,34 @@ constexpr static struct { unsigned char extranonce; unsigned int nonce; } blockinfo[] = { - {4, 0xa4a3e223}, {2, 0x15c32f9e}, {1, 0x0375b547}, {1, 0x7004a8a5}, - {2, 0xce440296}, {2, 0x52cfe198}, {1, 0x77a72cd0}, {2, 0xbb5d6f84}, - {2, 0x83f30c2c}, {1, 0x48a73d5b}, {1, 0xef7dcd01}, {2, 0x6809c6c4}, - {2, 0x0883ab3c}, {1, 0x087bbbe2}, {2, 0x2104a814}, {2, 0xdffb6daa}, - {1, 0xee8a0a08}, {2, 0xba4237c1}, {1, 0xa70349dc}, {1, 0x344722bb}, - {3, 0xd6294733}, {2, 0xec9f5c94}, {2, 0xca2fbc28}, {1, 0x6ba4f406}, - {2, 0x015d4532}, {1, 0x6e119b7c}, {2, 0x43e8f314}, {2, 0x27962f38}, - {2, 0xb571b51b}, {2, 0xb36bee23}, {2, 0xd17924a8}, {2, 0x6bc212d9}, - {1, 0x630d4948}, {2, 0x9a4c4ebb}, {2, 0x554be537}, {1, 0xd63ddfc7}, - {2, 0xa10acc11}, {1, 0x759a8363}, {2, 0xfb73090d}, {1, 0xe82c6a34}, - {1, 0xe33e92d7}, {3, 0x658ef5cb}, {2, 0xba32ff22}, {5, 0x0227a10c}, - {1, 0xa9a70155}, {5, 0xd096d809}, {1, 0x37176174}, {1, 0x830b8d0f}, - {1, 0xc6e3910e}, {2, 0x823f3ca8}, {1, 0x99850849}, {1, 0x7521fb81}, - {1, 0xaacaabab}, {1, 0xd645a2eb}, {5, 0x7aea1781}, {5, 0x9d6e4b78}, - {1, 0x4ce90fd8}, {1, 0xabdc832d}, {6, 0x4a34f32a}, {2, 0xf2524c1c}, - {2, 0x1bbeb08a}, {1, 0xad47f480}, {1, 0x9f026aeb}, {1, 0x15a95049}, - {2, 0xd1cb95b2}, {2, 0xf84bbda5}, {1, 0x0fa62cd1}, {1, 0xe05f9169}, - {1, 0x78d194a9}, {5, 0x3e38147b}, {5, 0x737ba0d4}, {1, 0x63378e10}, - {1, 0x6d5f91cf}, {2, 0x88612eb8}, {2, 0xe9639484}, {1, 0xb7fabc9d}, - {2, 0x19b01592}, {1, 0x5a90dd31}, {2, 0x5bd7e028}, {2, 0x94d00323}, - {1, 0xa9b9c01a}, {1, 0x3a40de61}, {1, 0x56e7eec7}, {5, 0x859f7ef6}, - {1, 0xfd8e5630}, {1, 0x2b0c9f7f}, {1, 0xba700e26}, {1, 0x7170a408}, - {1, 0x70de86a8}, {1, 0x74d64cd5}, {1, 0x49e738a1}, {2, 0x6910b602}, - {0, 0x643c565f}, {1, 0x54264b3f}, {2, 0x97ea6396}, {2, 0x55174459}, - {2, 0x03e8779a}, {1, 0x98f34d8f}, {1, 0xc07b2b07}, {1, 0xdfe29668}, - {1, 0x3141c7c1}, {1, 0xb3b595f4}, {1, 0x735abf08}, {5, 0x623bfbce}, - {2, 0xd351e722}, {1, 0xf4ca48c9}, {1, 0x5b19c670}, {1, 0xa164bf0e}, - {2, 0xbbbeb305}, {2, 0xfe1c810a}, + {4, 0x127fad2d}, {2, 0x335d1b8f}, {1, 0x33d47094}, {2, 0x0b09ec28}, + {1, 0x06cf723b}, {2, 0x039202bc}, {1, 0x0a2c9d46}, {2, 0x6225cb92}, + {2, 0x6ea1513e}, {1, 0x4401bef3}, {1, 0x04d3a1d2}, {2, 0x1c512825}, + {2, 0x54a03b14}, {1, 0x6048e27d}, {1, 0x1b926afc}, {2, 0x68c4afbd}, + {2, 0x4439c313}, {1, 0x1263fceb}, {2, 0x834dee3e}, {2, 0xf21ed9dc}, + {1, 0xdcdac434}, {2, 0x4c1945be}, {1, 0x6d42a594}, {3, 0x20927a30}, + {3, 0xfd60f461}, {2, 0xd9ad2207}, {2, 0xe7f69d1a}, {1, 0x7fa9b932}, + {2, 0xb0511080}, {1, 0xe7d24cd5}, {2, 0x3c57e668}, {2, 0x83bfdc2e}, + {2, 0x6eeb4e10}, {2, 0x9cacbcfd}, {2, 0xb27ea98e}, {2, 0x6d57c5a7}, + {1, 0x6deb4fa8}, {2, 0xabf625c6}, {2, 0x27e7c569}, {1, 0x89c6e991}, + {2, 0xc359bc28}, {1, 0x6f25768d}, {2, 0x654a4c31}, {1, 0x5cd03bab}, + {1, 0xda405f69}, {3, 0xfea453e5}, {2, 0x137d2c3a}, {5, 0xdee2f36e}, + {1, 0xeccbcf26}, {5, 0x9237dbaa}, {1, 0xb7b9350b}, {1, 0xcd0c7eb2}, + {1, 0xf5ea5a32}, {2, 0x3486a7f3}, {1, 0xd0a0f2be}, {1, 0xe1238144}, + {1, 0x28b98a9b}, {1, 0xe79d02aa}, {5, 0xf4555d56}, {5, 0x74da0bb7}, + {1, 0x18728b91}, {1, 0x07ed3a93}, {6, 0xd7a5e106}, {2, 0xba50b06c}, + {2, 0x952c830d}, {1, 0xfbd1bb18}, {1, 0x36126967}, {1, 0xcce357d0}, + {2, 0xff1ec2d6}, {2, 0xbed5dfc9}, {1, 0x0d21fdd7}, {1, 0xd744edea}, + {1, 0xe09fc8f2}, {5, 0x2ad325c5}, {5, 0x466b6549}, {1, 0x10705d49}, + {1, 0xf88478ce}, {2, 0xbfda6c4a}, {2, 0x731fe414}, {1, 0x6f1b362e}, + {2, 0x6be709cf}, {1, 0x60553200}, {2, 0xf6a992f0}, {2, 0x1521f7f5}, + {1, 0x8b440273}, {1, 0xe9ade0c8}, {1, 0x4d414618}, {5, 0x7b48070d}, + {1, 0x1202ebae}, {1, 0xd23fe97e}, {1, 0x8d1d6505}, {1, 0xfafbaae3}, + {1, 0xf200353e}, {1, 0xe77bd65e}, {1, 0x9fa32102}, {2, 0x68dfa747}, + {0, 0x7c74d78e}, {1, 0x9b79cc6b}, {2, 0xad957cc2}, {2, 0x91acb818}, + {1, 0x00024b92}, {1, 0x0002a868}, {1, 0x0000767a}, {1, 0x0003f818}, + {1, 0x001e2f24}, {1, 0x001d43f5}, {1, 0x00074756}, {2, 0x0001cc72}, + {0, 0x0002bb2c}, {1, 0x001a9616}, }; static CBlockIndex CreateBlockIndex(int nHeight) EXCLUSIVE_LOCKS_REQUIRED(cs_main) @@ -200,7 +200,8 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) // Note that by default, these tests run with size accounting enabled. const auto chainParams = CreateChainParams(*m_node.args, CBaseChainParams::MAIN); const CChainParams& chainparams = *chainParams; - CScript scriptPubKey = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG; + // changed this to dogecoin genesis pubkey script + CScript scriptPubKey = CScript() << ParseHex("040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9") << OP_CHECKSIG; std::unique_ptr<CBlockTemplate> pblocktemplate; CMutableTransaction tx; CScript script; @@ -214,11 +215,6 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) // Simple block creation, nothing special yet: BOOST_CHECK(pblocktemplate = AssemblerForTest(chainparams).CreateNewBlock(scriptPubKey)); - // Dogecoin: Disable tests which spend rewards, until we have 240+ blocks in the mining tests - // TODO: Re-enable once we have Scrypt, Doge rewards and other early mining Dogecoin parameters in place, - // and can calculate 240 blocks to put into blockinfo[] above. - /* - // We can't make transactions until we have inputs // Therefore, load 110 blocks :) static_assert(sizeof(blockinfo) / sizeof(*blockinfo) == 110, "Should have 110 blocks to import"); @@ -230,7 +226,10 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) { LOCK(cs_main); pblock->nVersion = 1; - pblock->nTime = ::ChainActive().Tip()->GetMedianTimePast()+1; + // Replaced ::ChainActive().Tip()->GetMedianTimePast()+1 with an actual 60 second block + // interval because median([1,2,2,3,3,3,4,4,4,4]) will eventually be problematic re: + // block timing. Tests should be more stable than that. + pblock->nTime = ::ChainActive().Tip()->GetBlockTime() + 60; CMutableTransaction txCoinbase(*pblock->vtx[0]); txCoinbase.nVersion = 1; txCoinbase.vin[0].scriptSig = CScript(); @@ -420,7 +419,8 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) } // non-final txs in mempool - SetMockTime(::ChainActive().Tip()->GetMedianTimePast()+1); + // changed to 60 second block interval for consistency + SetMockTime(::ChainActive().Tip()->GetMedianTimePast()+60); int flags = LOCKTIME_VERIFY_SEQUENCE|LOCKTIME_MEDIAN_TIME_PAST; // height map std::vector<int> prevheights; @@ -506,7 +506,8 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) for (int i = 0; i < CBlockIndex::nMedianTimeSpan; i++) ::ChainActive().Tip()->GetAncestor(::ChainActive().Tip()->nHeight - i)->nTime += 512; //Trick the MedianTimePast ::ChainActive().Tip()->nHeight++; - SetMockTime(::ChainActive().Tip()->GetMedianTimePast() + 1); + // changed to 60 second block interval for consistency + SetMockTime(::ChainActive().Tip()->GetMedianTimePast() + 60); BOOST_CHECK(pblocktemplate = AssemblerForTest(chainparams).CreateNewBlock(scriptPubKey)); BOOST_CHECK_EQUAL(pblocktemplate->block.vtx.size(), 5U); @@ -517,7 +518,6 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) m_node.mempool->clear(); TestPackageSelection(chainparams, scriptPubKey, txFirst); - */ fCheckpointsEnabled = true; } diff --git a/src/test/scrypt_tests.cpp b/src/test/scrypt_tests.cpp new file mode 100644 index 000000000..d037c88d3 --- /dev/null +++ b/src/test/scrypt_tests.cpp @@ -0,0 +1,34 @@ +#include <boost/test/unit_test.hpp> + +#include <crypto/scrypt.h> +#include <uint256.h> +#include <util/strencodings.h> + +BOOST_AUTO_TEST_SUITE(scrypt_tests) + +BOOST_AUTO_TEST_CASE(scrypt_hashtest) +{ + // Test Scrypt hash with known inputs against expected outputs + #define HASHCOUNT 5 + const char* inputhex[HASHCOUNT] = { "020000004c1271c211717198227392b029a64a7971931d351b387bb80db027f270411e398a07046f7d4a08dd815412a8712f874a7ebf0507e3878bd24e20a3b73fd750a667d2f451eac7471b00de6659", "0200000011503ee6a855e900c00cfdd98f5f55fffeaee9b6bf55bea9b852d9de2ce35828e204eef76acfd36949ae56d1fbe81c1ac9c0209e6331ad56414f9072506a77f8c6faf551eac7471b00389d01", "02000000a72c8a177f523946f42f22c3e86b8023221b4105e8007e59e81f6beb013e29aaf635295cb9ac966213fb56e046dc71df5b3f7f67ceaeab24038e743f883aff1aaafaf551eac7471b0166249b", "010000007824bc3a8a1b4628485eee3024abd8626721f7f870f8ad4d2f33a27155167f6a4009d1285049603888fe85a84b6c803a53305a8d497965a5e896e1a00568359589faf551eac7471b0065434e", "0200000050bfd4e4a307a8cb6ef4aef69abc5c0f2d579648bd80d7733e1ccc3fbc90ed664a7f74006cb11bde87785f229ecd366c2d4e44432832580e0608c579e4cb76f383f7f551eac7471b00c36982" }; + const char* expected[HASHCOUNT] = { "00000000002bef4107f882f6115e0b01f348d21195dacd3582aa2dabd7985806" , "00000000003a0d11bdd5eb634e08b7feddcfbbf228ed35d250daf19f1c88fc94", "00000000000b40f895f288e13244728a6c2d9d59d8aff29c65f8dd5114a8ca81", "00000000003007005891cd4923031e99d8e8d72f6e8e7edc6a86181897e105fe", "000000000018f0b426a4afc7130ccb47fa02af730d345b4fe7c7724d3800ec8c" }; +#if defined(USE_SSE2) + (void) scrypt_detect_sse2(); +#endif + uint256 scrypthash; + std::vector<unsigned char> inputbytes; + char scratchpad[SCRYPT_SCRATCHPAD_SIZE]; + for (int i = 0; i < HASHCOUNT; i++) { + inputbytes = ParseHex(inputhex[i]); +#if defined(USE_SSE2) + // Test SSE2 scrypt + scrypt_1024_1_1_256_sp_sse2((const char*)&inputbytes[0], BEGIN(scrypthash), scratchpad); + BOOST_CHECK_EQUAL(scrypthash.ToString().c_str(), expected[i]); +#endif + // Test generic scrypt + scrypt_1024_1_1_256_sp_generic((const char*)&inputbytes[0], BEGIN(scrypthash), scratchpad); + BOOST_CHECK_EQUAL(scrypthash.ToString().c_str(), expected[i]); + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/util/mining.cpp b/src/test/util/mining.cpp index 74536ae74..ca4fa9f33 100644 --- a/src/test/util/mining.cpp +++ b/src/test/util/mining.cpp @@ -27,7 +27,7 @@ CTxIn MineBlock(const NodeContext& node, const CScript& coinbase_scriptPubKey) { auto block = PrepareBlock(node, coinbase_scriptPubKey); - while (!CheckProofOfWork(block->GetHash(), block->nBits, Params().GetConsensus())) { + while (!CheckProofOfWork(block->GetPoWHash(), block->nBits, Params().GetConsensus())) { ++block->nNonce; assert(block->nNonce); } diff --git a/src/test/util/setup_common.cpp b/src/test/util/setup_common.cpp index f3428b7f8..405a51c92 100644 --- a/src/test/util/setup_common.cpp +++ b/src/test/util/setup_common.cpp @@ -219,7 +219,7 @@ CBlock TestChain240Setup::CreateAndProcessBlock(const std::vector<CMutableTransa } RegenerateCommitments(block); - while (!CheckProofOfWork(block.GetHash(), block.nBits, chainparams.GetConsensus())) ++block.nNonce; + while (!CheckProofOfWork(block.GetPoWHash(), block.nBits, chainparams.GetConsensus())) ++block.nNonce; std::shared_ptr<const CBlock> shared_pblock = std::make_shared<const CBlock>(block); Assert(m_node.chainman)->ProcessNewBlock(chainparams, shared_pblock, true, nullptr); diff --git a/src/test/validation_block_tests.cpp b/src/test/validation_block_tests.cpp index a32b25899..920208900 100644 --- a/src/test/validation_block_tests.cpp +++ b/src/test/validation_block_tests.cpp @@ -103,7 +103,7 @@ std::shared_ptr<CBlock> MinerTestingSetup::FinalizeBlock(std::shared_ptr<CBlock> pblock->hashMerkleRoot = BlockMerkleRoot(*pblock); - while (!CheckProofOfWork(pblock->GetHash(), pblock->nBits, Params().GetConsensus())) { + while (!CheckProofOfWork(pblock->GetPoWHash(), pblock->nBits, Params().GetConsensus())) { ++(pblock->nNonce); } diff --git a/src/txdb.cpp b/src/txdb.cpp index 72460e7c6..8f7820bc5 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -271,8 +271,14 @@ bool CBlockTreeDB::LoadBlockIndexGuts(const Consensus::Params& consensusParams, pindexNew->nStatus = diskindex.nStatus; pindexNew->nTx = diskindex.nTx; - if (!CheckProofOfWork(pindexNew->GetBlockHash(), pindexNew->nBits, consensusParams)) - return error("%s: CheckProofOfWork failed: %s", __func__, pindexNew->ToString()); + // Litecoin: Disable PoW Sanity check while loading block index from disk. + // We use the sha256 hash for the block index for performance reasons, which is recorded for later use. + // CheckProofOfWork() uses the scrypt hash which is discarded after a block is accepted. + // While it is technically feasible to verify the PoW, doing so takes several minutes as it + // requires recomputing every PoW hash during every Litecoin startup. + // We opt instead to simply trust the data that is on your local disk. + //if (!CheckProofOfWork(pindexNew->GetBlockHash(), pindexNew->nBits, consensusParams)) + // return error("%s: CheckProofOfWork failed: %s", __func__, pindexNew->ToString()); pcursor->Next(); } else { diff --git a/src/util/strencodings.h b/src/util/strencodings.h index 1a217dd12..c7e66d775 100644 --- a/src/util/strencodings.h +++ b/src/util/strencodings.h @@ -18,6 +18,7 @@ #include <vector> #define ARRAYLEN(array) (sizeof(array)/sizeof((array)[0])) +#define BEGIN(a) ((char*)&(a)) /** Used by SanitizeString() */ enum SafeChars diff --git a/src/validation.cpp b/src/validation.cpp index 7457ab50a..481eb0359 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -1161,7 +1161,7 @@ bool ReadBlockFromDisk(CBlock& block, const FlatFilePos& pos, const Consensus::P } // Check the header - if (!CheckProofOfWork(block.GetHash(), block.nBits, consensusParams)) + if (!CheckProofOfWork(block.GetPoWHash(), block.nBits, consensusParams)) return error("ReadBlockFromDisk: Errors in block header at %s", pos.ToString()); // Signet only: check block solution @@ -3342,7 +3342,7 @@ static bool FindUndoPos(BlockValidationState &state, int nFile, FlatFilePos &pos static bool CheckBlockHeader(const CBlockHeader& block, BlockValidationState& state, const Consensus::Params& consensusParams, bool fCheckPOW = true) { // Check proof of work matches claimed amount - if (fCheckPOW && !CheckProofOfWork(block.GetHash(), block.nBits, consensusParams)) + if (fCheckPOW && !CheckProofOfWork(block.GetPoWHash(), block.nBits, consensusParams)) return state.Invalid(BlockValidationResult::BLOCK_INVALID_HEADER, "high-hash", "proof of work failed"); return true; @@ -3526,8 +3526,8 @@ static bool ContextualCheckBlockHeader(const CBlockHeader& block, BlockValidatio // Reject outdated version blocks when 95% (75% on testnet) of the network has upgraded: // check for version 2, 3 and 4 upgrades - if((block.nVersion < 2 && nHeight >= consensusParams.BIP34Height) || - (block.nVersion < 3 && nHeight >= consensusParams.BIP66Height) || + // Dogecoin: Version 2 enforcement was never used + if((block.nVersion < 3 && nHeight >= consensusParams.BIP66Height) || (block.nVersion < 4 && nHeight >= consensusParams.BIP65Height)) return state.Invalid(BlockValidationResult::BLOCK_INVALID_HEADER, strprintf("bad-version(0x%08x)", block.nVersion), strprintf("rejected nVersion=0x%08x block", block.nVersion)); diff --git a/src/version.h b/src/version.h index 019c3a3ae..cdb18dcdf 100644 --- a/src/version.h +++ b/src/version.h @@ -15,7 +15,7 @@ static const int PROTOCOL_VERSION = 70016; static const int INIT_PROTO_VERSION = 209; //! disconnect from peers older than this proto version -static const int MIN_PEER_PROTO_VERSION = 31800; +static const int MIN_PEER_PROTO_VERSION = 70003; //! BIP 0031, pong message, is enabled for all versions AFTER this one static const int BIP0031_VERSION = 60000; diff --git a/test/functional/data/rpc_getblockstats.json b/test/functional/data/rpc_getblockstats.json index d794037e4..d9d05f59f 100644 --- a/test/functional/data/rpc_getblockstats.json +++ b/test/functional/data/rpc_getblockstats.json @@ -1,249 +1,249 @@ { "blocks": [ - "010000000000000000000000000000000000000000000000000000000000000000000000dfb3cd23607f60ee25d69d24ffd4a55ed1a9e37749cb28e1e9008eafdbc7ab13dae5494dffff7f20020000000101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff010058850c02000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000", - "00000020e86237b48c31b8d6b0286f2bdfb4d28e31eef1956c4de750204efa7e4ab2bc4eb40e4032e98eaddd01559da7cf829651ce78602c8bed0c8eb96d74d1a7a9db71194ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03510101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020c2df148d4306c14b369e0834d405596ea895c8ff2e7dc830cd4e058dad90987af75e2cef25e6bc076d1aa0f0927a1a142e6a27e84133bb25243767a6c9886f9a1a4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03520101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000207c429ee5d74f3b32bcb79882c82f468ba345333a2181f51b57626e1923fd986e0c3e3a6176122ff4d6f6a5bdcd38b9b66cf17505bc4a5764f1820051bbcfc0a11a4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03530101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000207a08ede2265f5ba524f3976f4be9519e0a3f3932983bb14e97843eb80a6e9b52ea57c13f65016434a9cafaecd8410262a0c9a65557e5b069c1d456034245d50f1b4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03540101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000200196ec0b00715f58ab591a45648c1d914d43a7790d8a89efed1c861a714161584860de1b20d1268b2169a91df1d08888503b396f163a668bc674083ae3b289771b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03550101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020e8519d866a7433a6e7de1bb42130750878770f4debf04820c755ccb13ee3eb6eb61b8499ea18f18c5e6039d1942a79430b0c7bcb1a28ebbe57917d2bd6e48ef31b4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03560101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000200e808e7f544a7d6a49da60efaac01fedbd2d9adc9a3885160d229058060dd96c4843569ef48be310c335511b54a88a0aefd954bcf508c3d7b69d09b236b26cbb1b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03570101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000206004cb963030de8d90ce39c63671dfde8e42485021c65b2237a99f187c7c3171cbbc07bc5b1b887061d9e93c0095ef312f8d160751045960ded731cef619ceab1c4ae75affff7f200400000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03580101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002013fdbd337db74dd38c3522a5a4f07939ec92852b2a4d27dcc8eb62f76732be45fd2ecb6a50ffbe5f73645ff49c0bdca05528964f629478481771edbc15025f011c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03590101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002066b5a10e29b6f537dc4d35c79503bf5cd3a883146335a4f113e5056246174070c407c1d3209dc8b31226e58e8b616eb378ced2774943c2d5ed3df0154368f2321c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff035a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000207bbd2c88fb2009d631d9a9cb3ba65eeb560157552887c365d0038fb684ee934b89cc726c5339dac3d7151037957beb278fef3aca85864f0dca26f76d3657cda81c4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff035b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000205445b6e7e7254d158b2392b2a462df6fd78751a275887b75f4f9e6885a564c6ae91b7ca68c31aa6a3d01919cbbb0745b30da63ea585bf3174822e91a07b41ccb1c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff035c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002072fc009c7f94bb46fd216de32ce7e60e18e247a3d83b8bd0a132ca67e099701b13ea3255fd4726d14bc54aeb09d91de757df2dcafc4fc8c8618a8de904367fcc1c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff035d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002085ec776d96e15443ba75396c81f490d8adf9afe7ea41389c79536ba2cf91911aabd3aaf05202a7469af1589ac690c9da01641a38ff148ffd8749c7fbe29124791d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff035e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020e7233c7ab101b3e37772898b156c1b130ed1869c4489d1a6e6aea2e815ddc1658686b394132280553c1bab722522eee155de484e9d07744469c229dfff6862431d4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff035f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020f8d5473a8ec135eaa30e271452f65583dacff4947bedf9f60c01db29df92d2112c35a1d3464faa96a31b8ee0f21d440d34bf0e78a421d2ae718fbd2d61e4ba9e1d4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03600101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020badf9a3f7aeaf9807512cbb07f0cfb50012dd00badb7e555610ab83d9a69072aa43f17a9d7bc9f30db05d6e7f2c1b843188bb23ac6cfa96054001732419955551d4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401110101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020b0a7adb9742ecf7d60b442920378a3a6d21fc552766c9f2097c4f5ce6bcaf50aa25dccf782264379b5260d2a6f469f7130b28f891a781cceb5eca24dc6c59d4b1d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401120101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020177a4c798fd973db7e2abff18526cbc41e1cd1474cae72816ce0907248ffa8286a2d4126e2119e6dd207b5b6d3aa694ca3d19f22b42ee9ca3af20f97afdfc2811d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401130101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020f31a9ceb8025eef7c6da800e037e0c0ec0558d517533c97b39ec12529fc4e95d7d0b8626465b7bbe87c3df33ef0dca2cf149ec1376e0d4df65e729d0464d77071e4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401140101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020f4ae86661a674b8c8ecbf718ed22d03d8bc8b3ad7a1c608d2925a643ecfdd11595515e244f1bf7d8c89794bb3d16065a376afc274e57edf11c511c512f54fa811e4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401150101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020b21124f114d143cd35e5ec217429314e1d692aa7c792df1814eaa845c085943d7e417dc5ee89ff08491d4c91e8e36cf43e9ae4ddeaad4916e0ffd51debfde63d1e4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401160101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020a471ed8ca9afab08c113ec60bbac36b6f17d7900fed83379c37ab9e3ee323107d10a51b038b39075363ae201f1d5acbe7e488e6ae66a604ca2138d8d3cb018d21e4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401170101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020175e5bb87f8de12f44c877b5759dd50747d1d390b9e319ae1c6cc7122d9c8334e36a79bc1c476ce697880daf8155c8a3375b8eb35b41cc88b70181a8c850a2c81e4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401180101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000202abe414211eb83e4147601f85e24452083d29910078d29b0a8241443ffc487624625359f4ea22f53c76bb6defc9f41363eb513ed4acd24b71ee59c08b0b183bf1e4ae75affff7f200400000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401190101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000207c8e0e66f8e0b462d83ec98a5c82e338e779f5a3a55c2c60db69bd206353b8502ac4a8ed93f07f39d81dd4e8a55b541bc1c9b2d517b247314680217fdb0068351f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04011a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020107a3b5880eec30b24e85f1a734a3dc1678fd8040ad505c4d96596e4ce3ba8122bfe715dc17738598b0693f53fe8c52c92889d6d7d138e2faa8b339f4ec7d4531f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04011b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002043e03e7cb25df3d7c6a20784c0534dcf4beaea76ed543f1f9e346be7c32d941c9efe85cfb8fb03e1baeac0969cf5d96094205bc6a3845c601804e7a1927ca5c51f4ae75affff7f200500000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04011c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002025eec46009ef4a4dec5e64b7f5e41db6a13b4f3b9c64dd4b0cfad2353c594969b591d3074309b5da323ac615023f08bf7cce6b49db7715826899a8b5339eec4f1f4ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04011d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020c55c76d1d75ec9750911059ec2d6d140d6d13b62126c8ff39eeaec77a5198a550efdb9d5fd7a876a84bb3ad26ebd3f3c61bdd2b43ddcf0b9deb3ae6e1b3c77051f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04011e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020ac66f8c814bff9815acd824bf5df1a834e3822b5b7cfefdd408be3140d903945128b2ce073e54cf3d7d909470d88636c91711a8ca096839222de396f0798b24f1f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04011f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002014c4001c0852e133ecf36192019075174bf649150477159d9d700efbb76fbb086f25d446568286f8eacf14b8152b71d7bde97d15f945ee3997a4e96f24920854204ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401200101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020e051d015ec6ce820833e999b8ece129d30ad3535c715a0c1b139b0dfb14af94506278787e885912c1fe9b08b55697d19a2098c30b8019b2590de4f4ec33185de204ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401210101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000200f5c4b2201377523711cc42758f410017d4d1b2cfac7bb375d9716e57d2cc358607d707501e94defcf7b00a1c07b63f861ec2b2b10ae22377aecfbe56ab5c838204ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401220101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000205bb969b856269e890e6ed8f89c91a349edd9f2550c6de6e61c93896356370432e92be068c75e4aea718a96e7debc930169f0da2e12e82c542c23e11a7597d763204ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401230101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020b8efd37210337cc4cf682e0e517225a06d14989baee4557d4d2571499f05e87451e3cb0877e932083c1ed1fbfe0b2a80a11b539e7726c943a45a59c4e200be90204ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401240101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020002680f9ff3a2d72d68c2ebe80b4951bd0679e99461510ca51ab9a5b0d829844c35d7a1a3ca59328aa2a574bebea8d0e964485290db4f448e832f812bf843d56204ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401250101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020829100923af7d3593d082ef733d290c5c9dadbf4e2c4084bfacedd33cb5e103084b9dfa3cce5d627c889a487df9a7857ce4eaab9a5f876f33302a198aba62f5e214ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401260101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020caa6a898dc68d1b28727ed42c2979b068a5289da055dc6714aa8392a038d125bcf1678e36d905b9932cc68b581aa8f5058492ef554d7c40550efe86b0d7b57af214ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401270101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000201ff9247d756c83d0460620c75402d9bb9a4338aaa50735ef53dcb3402c8c71069a0a742b3aa4e9a09bade628984fbded4ca4fdeb3546e4b0650d2712caea7fb5214ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401280101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000205dd66b2b60e0cf2c3f2352112544762a6cc90733ec75ca4b58e5713b1b29ae65fbeb6f108215a05ed342165e9f78cafb71c519ea5495c608756c346d7396a244214ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401290101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020bbce0b0835b4e4d5b45c2c493bd5c22b5c46ad42e27f6c55c5f476b859fbb65d93e680e1aeade31f4c41024af841bb4342ac9263831a8bb60b49118b99c82b69214ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04012a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000208833168dc35d93b81b6efbaa139ad825c9b4ca059f6d9bf0e043a594e98d085ef2e479371803409658f07d1226ebb853f26052bf2c32c772600f9f9f095d89e7214ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04012b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020d63037457f896a241faa1f4cc1d2ee185d120206106a2b7c87783bfee617064682c31483dac7f3e29abc8ec8b9a44dee570d30bb0bbb919b3daeff4f2bc13371224ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04012c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020ae3538548e894e5bb27297e0c54dce8c7dffb8a2c60141a7128b072a688f324105af0434465560abea118d2b0be44fffe70f031eafa432d518ae24c1f04dadd5224ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04012d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002073d59f7d9be0e6c069e84e228607faadf83279f82d2f7addc3e4e404de6de248ecc5344c2b300d49b595c67891a663566b4c9ffdc9afa13029a26335ed25c457224ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04012e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000206f69bc3e63c8a92f46c782b48eb9e90325ccfff1b7fc5ef8f909e764914100342dae27037072caf5fa97c166bea89df60cfadbd116f9ecaafe453aaa230532ef224ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04012f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020c9102045dbd94b38c872b8f4852097a401e373e19f250409e7da992395fac363d3ea2c2ea321a720b1774ff6b57da9f74e259edfabd6b889c83f7619ce916938224ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401300101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000201adc51222c1b8b03f9da44b22c9d158e1438e9d3b66d141c447c70a0e8e5ab7063bbb0b67dcb1f83215eab58279f49517a3b2f7f3e93533a88d99788020cb99d224ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401310101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000201d477a755cf58052b43f67dab8dd6fab5f00f43f3857b5cb12cddb264fef3a62803a85dc54fbf2a041dbc2cdffb33b15913c644155e8d297007cb809040c94e7234ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401320101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020bef34c084ca077a6aaeac845642c506d96e46a6b91a31403392e42378c35b769aa0616f42a608ad43a421e758231a21216b0b366f2d50bd4fd98a7a1e0b5aee7234ae75affff7f200400000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401330101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002033a1f23bf9de8c4031712be344ab41501626d48692451c7a2eceeeb2abc20b355237ca5189d4aa4385b29035457a9e1c8b2463512f3881889370dfc0cb9f5813234ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401340101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000206afc3c7013cdcec914569695267360de59fe2a0c60bce582154dea312eb58e50a4e483bfe855a0a0903afc50ea72fe551fccc3bfbfa33eabd61fed1abe75e721234ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401350101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000209560d0e91abd6b77319ec8457ea73732fbecd3062ad351531ea4a6fb741bca23647f06f82b76dea8e3b81acc164cb2e5ccc64f78cf191b28ed313225cb38cfaf234ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401360101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000201714e3660c8abaed0e37210deacb470e541b90c97ef49c20edb5254ece0175020cf088861245b3d3d16453a8ac34ded5336542c5699cf7b5c55f89fb107c7f7d234ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401370101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020782853f8dada4bb0109ac83d8b396816995cac4bcdc4ab9039a0f6f88795c21e8df1a30ade3e06eb1e9b289d1e0b9d79debd88b8b32022e41ae889008b873963244ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401380101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002019a16905dcd62c178dfbfb38ce83a9913cec35310459a7778f2cc85d90e8f727474b4eacb7d3309d45e889b7d65f4824a05adc3f5425e95d3725bf7fd35e44cb244ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401390101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020c525904ba070632df91e8c2c22ccda57021bd800da12e89ac58ba79cc0ca5515cb19d5db44e188c0301ae2de87e57f9df0a5a0a10f25c4dce1bcfd84e451dfeb244ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04013a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020183d8df5421e23784a3c54c36a95301c102a3b7fa9f41d9b9d4346e79d4f140df312690ad49ca5336fa2cc39a3dbeafe8ffc618b9c1de26375972212e7bc9544244ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04013b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000202da9fcbd6aef943374e8abda6eb1b7f06d7acff852557e70c975adfcd542e84a28484a4310594dbc1f2b0cd5174bab0cacc202299e2414719dac17bba002cdef244ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04013c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002060c4c562cbcec4f18f92e72cac1690e12d8d76cc7874d6a5e3d45f1a6958d24d3b0ef6d4726a2fd8910aac05b388bb52f91b9bfda18f3e34e45f3cf8758f4418244ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04013d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002087dc165ed817fe0298552f00c53995ac0684512839c1f493190951a32cf6bb04fd569603f075b948566c403f27c9e7131b97cbe12d8f0a86bf359f8c661c1056254ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04013e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000209c643bb568a257acb1a8e37f2b981488b0effe19ba200f68eff24c3de0b1b94a1779cb660c8142a8fa66f4f2b227e5558f13e2882ad1c8c87c422fd9dab71eea254ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04013f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000202f2a59151ac65f992ecf183b68b945ed85a416f7d59b2dcdc06163dc4f47b41ef603da762ca3e32f7812a848d8d0ac66f54395db3eee8953d25a796a77bce05d254ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401400101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020d3643a2c8f0e3b70414c86ac4b561406c0a7045a4f8522e0b8a79ae3a3d0bf0fb607d59ddc5648b983a9279d31a74313ad8db8497e90c95381d02adce5613b9a254ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401410101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002087f359fb84f86c3c9cb06b28dcf84a243e117a10d7501036feebccf0d018546a21d462160ba940356a52bb4014b167ca6c491ecdad7c2789851703b3d4188847254ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401420101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020ebe6ee09fcaf3cc2fd5697b4ebe556c7a05f54299c7720a1963eac1bb180ed5be90e17bbab10f8e1af8d10029a84ee2a971472e540ba27efa14664847d7bfd96254ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401430101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000203c4cba50856f38fa80b5285952150c6da54608bdb58c4955c6da118f110f41093e25ef3dd966dc85197a48918800df6c792828a6b649253eccbb90a9fe1381bc264ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401440101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002075e8fdd3185efc358a22610ac0c97a6581df79ac240f890816959d8620ec9c5732076515b4946271b4d30bc59ef8d4ea4451147eae091e5f38c73887205828e2264ae75affff7f200400000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401450101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020ce7bedb9ae312a8c04b1fae0f1fd851264b897d731c18e3c078de6d32ede42779f2d4a03373ab2f6bece4e9fc108c540f6f1fd3133246982654c60cf65e57d3f264ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401460101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020778a32129f214e9d22ed1ed762302f603d7e98f2b611ada1133c5e59dcbc1112e488002bbf188f8560b05806f443c7d3c876f589ebfb26cbe06d1bc400dcb354264ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401470101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020086dc21ad1a9de634874e153a1cd1bbcfb58c5139f2b0d34dd2d9727c67a64455cead78faa4c4de5aaf1af45847042328aa948b9d40f6db59a0d28c2fddb5572264ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401480101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020be65f696d10156679d0d880fb3acfe2f3e8ef07ed3e207f50fea1dcc016c752d08547c332f5ece4ac74b9184ddec493918932f551d0a806bddf69736f562341e264ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401490101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020974635ff6225e34a89b24c49e40e24eccec10eb72c514d4a8a667d13e3092f14df56d380deff815e91760a599bb322d5e2895595b0b7891ad4f604c1413a2815274ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04014a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020d65abfabdcb33fd4919fdcfdf847c9876e5db2baad93f0925b92255304760e4693da92685cc7d12fc387bb8f742463321c5d64a6a94a557da83bb9b615f5c3a5274ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04014b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000201eb9451779077d5d2690a4e322e6c5aa311950f0089a40f028cbb0ec0a374922a7f555a5dbfe331035ca85ef4e1687848ec6b7fee5e3d11a4c881fe2fa7c29f4274ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04014c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000207b4489c28df8e46cbc28c8b5ab1339025a1ce5bddf8705706ae78a88ee2d8625eb44a480c641c2a3b090cffdc54e36f4a2fcdd66a600b6371271fcc446ae39f3274ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04014d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000204fc87dd8404c53e7afe5b91cddddbfcfaa6225f11f39dd2901a241d95928500d20db43df1a4ac71c25a63c294813fa0217414d5dbbdda98babb9a0698b861724274ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04014e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020f30c84620de30f4c829308286f512fd2cc49be779500ef9e653c458fc5f24c47e747b039403939b657d36e7ac59d5467b2520d02addb0014292a4892105d198e274ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04014f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002074d5ae914322be832e8c34e1c955c053c7435ce595c354035268a890e5194e6f7371b37a7deea0d85aba44226d29b411eeb20e9dabf0c74b767e61a7b413acd5284ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401500101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020c374773fb961dc05fafe5063fbc41c9c7a65594cdcb77f73c93d83111976ca4b5ba82a108d691667e6506c11cc652c6628a355b8818df5a919c4bd67d2de0a45284ae75affff7f200500000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401510101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020baba1d53ea328814f77df86d3ed8e5f3fe067c92d04850531c5c77921e04ee0925a15d14bd25e27a4cb3ba7a2ee148f21e9574dea908ecc1a057372bea5d9fa5284ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401520101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000209de3c9474c51d5164e7da20557a49657dcbcbc8711c485a60ac4b9e43b4bf13ed07c793a0dbcebbcab30d3a4d4efac18b9f1538d77ba8e326b14c82ed261cf32284ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401530101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000201b5ed87ed56fe357bb365ca798f49e52e60824849fe017adec30b1d0dae544199eb9470d94f10e6fe67d170c066208a6aa73b25c84eef366f7533acde32f5798284ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401540101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000206a6f7a1fc50afc008eaef086ce44fc5587779a7184d87372ce434f55c62be5041b67caf16926291b24f219b8c579734c78f36e582b5805f799be5aadf3d7e38b284ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401550101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020e7617aa09885d711de616b1111a83699e058c46eb419af4d0d1ca97fdbeea02945b76a1790cfe1334bc6ebaf94aa72494da9504b76edd0a7654f8c359086d666294ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401560101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020d76b9ff6269a94c796e7c25f8233dad787019a4b9c63e1f32f31b901f2ddd908452418d8708fe47265ad57981f12ece0e586fe847be239278eb470d0dcaa019b294ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401570101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000207b7d9a61ef256237c2d6a60f8740f25cf1863e78e085099e313b1286c976bc5d292a893996d465dbaf56a6bb3462bc16f4a59c3f5072c8b4ec90fcdbdbab9dc2294ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401580101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020e050942396872d11d90c67ee19383f78f5b8dca9e353ad47b3b8323c00d37b4b88d0966cea8f2440953abfd723c212f62735f9034d10684f2a04c0e76ec08f10294ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401590101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020796a4410cbf74fa0939702d48d7746c70a94898c0c06ca5f7103d60ddd77fa60b4fa7f3266d560c5783ca20431b298c90c3b3c236215f9a4bca120b034a51d96294ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04015a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020f456b98efd1f98d5a9ba9c7d861a6a416550dacb4fb0fa90e42b8793005c1c74c2c53cbc4dbcb5e88353fc6553c3cea509297a47b811c52034b85bb41dca4275294ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04015b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020f3c86759a03a5a662d3de8972d172cf9877d84c13b6bc59b095c22160391827e94f6df10c90e7a8d7fb0de04a495328d7ee90a6aa5d40f1192e92f03cedc58902a4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04015c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002093b824583ef2d5cc5358d6c1bdade5fae4f673b0ae3ce0815c821b7d6914294964a3a926d8e2b5d3de9d4fc5acf25712c585ccf1ca986185b4ae570df2aa259b2a4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04015d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020a56afcbc9bf0ecaafce8619a9558f7dfba52bea66fff51b0685ac1ef8cf8292a94b0bd8b419a4311fdcde709ed54525956d652f1c7a0049da4df36bdb9f524aa2a4ae75affff7f200500000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04015e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020e00683024f76a4db0f320ec8167c667d78249c0a657135bb104d0445bebe5454ec00071519a45cdc8ef5bbf109ceca3bfd85594ac6a0aed34a95f0f838a4c6182a4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04015f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020c95f6379863a8bac234b99da7e10504dcc23138300439f20903ee1d0ec00f27b8aae6cbd53b2a43fce81a9e0e880e6898d44553147c54a5abd7dc5228d2274ed2a4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401600101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020d798348b82b620b4bb3c41387bd8e321a5914e6637c32c8988b6c719a334bb025707cbdbcad1f56abed1d202b9dfb9c7984290de1b05efae2df45d0e50e2752f2a4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401610101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000201e68258b0931b446e499acf72e4fb3c385284954670a3710f441cd184ffa3f22da1dd7555778cb4f24141d34def48c1a6e43cea0f3784a21e7b367e42a09cbd32b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401620101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000201f394f62afb62387ec55511c265198ea3d62b5796991243116941c929fb569455f7dafa529c7472d47b32de80fd454cb5117f3f6dce5c14c25b6948b5d66de7c2b4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401630101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020a1bd3b8372dc6e723e150b9495e8404448a4d112040d42d644411a049ac6e731a0b7a234a1eeebafdfdedca088a40034f0ae91586e254ef175f41d93292dfc002b4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401640101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020415be62ed78679af975a81fcad5a49a3edb78767de6cce0c1e142b33fa36ac26fc48ca3ddb6c183e3deb4f4c8c56bcb83f9aabbcd4bd9a189a76c01da50cbc722b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401650101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002019571ac356dae48445b56f0bacaf5c9ae69cca6b472f3aa977d6a5ccbe38d332dae04c86109e15e1c655d97edcb3029b3260c1af6a59f4488c865b27feb4e6ee2b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401660101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000202a281de7280362ef7192c0a829ab823773bd7c7d0d1bae910acfb9343318d840f534e65eccb9bfbc1e7cb56e25e6cdcc8ff966516249635fb17dbd89813ffa042b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401670101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000201e46385bb69f0a27ec87cb894e698912032298219907784fa0882e59d5a592256030d1e7053a8aabe2c8fe44bec4df0ad4ec6130467899f90aefc9d43bb80f962c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401680101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000207b7321a2e0ff0cb26842827e33793cd43804bf528d84483da29b587bc2bf5a322696fa30728552bdb615d5c3f6c2bf1249a9e199e4362aae88064806349a36602c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401690101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000208f8120c421347c1d922f321abd611392109a99ef6c962fbb8c61489025bec05958e3643d5cb560d8a97af5bf6c733ddb1e1766f280c1db2dc6b52ed3ae04aac72c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04016a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020aa28630a10fb1b0cb32d1669a8b6d407d8fdc80218d2cc98a58f08b09091cd60aa13649f1218e4aef9317b876e4152bbbfa42e874167c8248708e3fc50163f772c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04016b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002075b95f2e29794f46cad7e42b3be9c9ee2fef073e69a9dff121ba170e8b1a6215df34890a7439a2f0ea002394e04c7925e8e40edc76ac7711754b45a30c5b5c972c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04016c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002028f8d3b1dddea4f7cd585ba1814b52113cb01c71c2ee70599ca4c0529508b202f6b48e5948d891103d477a4ac55f7ca7cf3b04cebbd4bc1a6706a1b87b14817d2c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04016d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000209128e429af89042274ab3c40f5c5ad2d3625d01f7789d1074abc467f288b645f2a884520dd628e04a57bd6f90c9639dc0da180aa5d888fad779c3311b3a654602d4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04016e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020c411d45cf19a99af5b8a234b43482f27115f8d4ea7ae917c3c813e68f8ba1d749acf192cac6b33d9bc53a123b8b8403d1efcb8bed0470cbab3648aa6b31e957b2d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04016f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000209f66588b4450d91e8aff764a061b7c0e4d5f9b0755db45c04d01816c34306700393c68fbbf7d4cfd4e4c1c194f75d0ea803dfd43a197869e704394e3186a9d452d4ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401700101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002001af4a87862f61913439af5ead639468e0355fa22d7e9eb5c2dc8eb0b9e0257925282b876a5e2cccae63c8ee5273c7e609249c93a77651b56ceda6c3705004502d4ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401710101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020b3c0f54763302acfe299c47c15a12e519a9e5786809d69e93c32b4321cbd9a25baff6cf10091f1fadbf7c68e9b39c1f0b674d85641984241745e97ae6df409a92d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401720101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002010b9ee92b465b821091a409b55870c12ccc380804bbc6b145880d6c199c82c78b4dab36d5f3828645d3b3279261ffe931b47a1bbd14d22aa59ece3e6cf0f43992d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401730101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020941641875f1a37ada61895fdd864403d4b8cad7f950e4d99c5937ed38eb063247ad08fa3a63aa359ed7c2596382d926a0de61c1d2e346739c5d4b3ff944918222e4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401740101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020354ea077b8433d7e5a20bf007f9812261013e2030c4f7491c6c51c7b87e976251ed9fe8bc6b228aa3300a00573273848dd170b1c07770d83f56d5e2696aeaa8e2e4ae75affff7f200400000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401750101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000208c74aa724db75773c70bf18b64218cb693aa0a97b32116bf91dc51bdcbf97c59c031d30e38077c849412ecb96000fbabcaf0949ca4c7252f2bea8b50f0d755ed2e4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401760101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020d9e40bb7ffa3017d9d243866060b82f18194d25deb7dc79720d41eeeb86dfb33fafe9aac9b83ed83504b9f36a45d9e7363f160d28740b66b5747ed1ccd712d1b2e4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401770101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000203a992e7a428fc4cdff19b525ef9de468bb6373dba4aabd53c8d3c7ddfb22571024bfdfcad86ac46dd219701ef0ebf4c7b94573941149a82a34145ae2aa03be092e4ae75affff7f200600000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401780101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020922b19aa8b37e3480622ddf2d93a2c3c9d3f84f61a869a5ea158c9262cc1a64d7a9c63fd2ef583d1f94b2b489074cac8c16de8292a3ef8b11e170de2859656a72e4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401790101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020e4bd1d4d0a959e185c66545e7e111214092fb28920ded6b4ff48549d70048f4b42c2b2f25a0f8df8296ff0f4f5cfa4b9488ef17917e01b6e4bdc2c96e7b8864c2f4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04017a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020cd113005611cce32a8b7b10e9fd7aa488f1b80071413122e16c569ed0a7cd8317ff22f538cf08a527f39f015bc380fd890bef5f066e2f86fe150c442eb069b4d2f4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04017b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002063334d944e3360fa0a0868f1390499e144486c58b8972242faf78190111b480494f77126b8a8600d6a5eb58b817b18a1ede25a8ab38f26b9ddb8f653fe0628e52f4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04017c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020c8b08a6fa1d96e00eb293216e9022876a4164bc7bf276c1edbccd3b24a8df1598f7fc3bfcf363e3ce275268f714a463e9161a8f7d9d770279c289b34b4ae5a792f4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04017d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000207aa0e7af158c5ac24ea9d96a0c7af8073486ae50b75102145853419e230faf79206d3ed0c8970241bd417e0525604adba077e1cf5cc22f251ea8f0cee6303d092f4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04017e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002003fab9ca375be4a5328adb4a2e709978a5db207e14c3fba7042972affaeeee15226116b282507e43d3fff4eb78629f9a5d07920ed45a30e414c95d611d3a83c62f4ae75affff7f200400000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04017f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020e0caf0f7a62b8e7033c990ff53622e128fbf17cee99953b2c2d116aac555dd1e54afbcd2a6842515ed26522d2c100c4b3d8f98aee64bd8eb219f50504b3640ba304ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050280000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000205fceef676b537ca84a0238ee9d093e674c35697110ebe0a67df8405913846d62976441b7883ede4a75f758a803fcf42c6e5216d5a2c5c0b57bef2bdac584a83c304ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050281000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020876b33ea180c144a6e7298ac00f76c1a0540605a307b9d536134a0a53fbda257eeea1c1a001c3915cd2c34251d1f20616a69f45a1416903a4a1d7fdda9561f16304ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050282000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020511da78b7d338bdaf56975827147c794da7735fdca660253994e97fb9c36d75b9f526c42c1b96896a92f588fe1a39ed9586dff5b8cd98754758bb5d2ebf31b33304ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050283000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020116687162780f170d625677ce13383ee37ad30d687dba3e6b9cf5e0f7eb1ff7ae52a2fbdf969fc769b12c7dbb67fc569585ee9c27b86381fa97368efcf302931304ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050284000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002035c468ccf328cc9689a783a38c51088d511429eb37e433320414af3e60fbab4a4755f74559bdf5c69b6afec728fc20f0f401411f99673b2b888bbb924afcc780304ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050285000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000201c41356a7428d55079cff65ab89fb266e965b82f44caa7d8d0beb8f3478e174b73145f575d9a1db904f60c2e694671ee1629c043bbf8ab3b1fc3b3aee9aaf2cb314ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050286000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002001dce5544af09238c1017b27bebfcae65e91c516b989facb40a629ed36920f55336be232f3b1bb58dae830739a48f2fc9770bf0329c162aa342c45f445806b14314ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050287000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020365bec817b792ad52e48d17860535a33dbe6d5a2db1f60166bb63abcd54a4b140dca28718fe9613e01e869b5fe02d5c12f6112faa31f79e7148b9135444bafb3314ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050288000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000201c359611e454250f657272abf96c53e93e0d61991c132ca870142653e5885b1d3cba1e44976dbfc3cd1b5d5229553bcc7b5fc702ba03826de82bcbe8f0097a5d314ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050289000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000209854be43d2fd34444a0621134d676114b889b13e914b71355d1769032e028a01cd2376177c6c67890aa6d80155b33cc8d36859e0e10e4843d4aca38c1fb42b16314ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05028a000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020947b3c89ba6dbbb91d66fa81927636e18344d84d0bb29471373d18c2ed667c7c33c9eae3efab8faa26c3193dc27bce668ade8811f10268d015b3ddd75ff1b55f314ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05028b000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000020b603ae066b0c17ce2367a80f096c882f108cdccff399be6281a292ebc6c5dc3c5b3bf928ed9a9bc60809865393ab80b439425a66a79634cba6e9e59bdb09f6cf324ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05028c000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002053624a4774fca11009c4742acd9769674c92a7c66e834503c08fa9d0a0981d40856398589407919bd9c5cc3d8c0cecdfc5b551e9f12a7041065776b692cb2189324ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05028d000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000207cb093ac502d840e9db7cb43961aef81fc5126cc38e050f0704e2e830a077565e6aafd20ed380273edcfbf215f5bc3506c11aef3db8342ef614e776e65615f05324ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05028e000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000002019f596c3fc1bb7d9b32ce638a4e012d80d84430688d09428704a031d1a60ac4d85f82f10085c76231997d4c41a869e4487c6c3f93161e3a28b803a7bde147cac324ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05028f000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030c4d884e4ab5bc90335148acfabaa25c522791768e73b1c5f0020ec1edd92855bfac6fffb125d30f4a97de9a74de10a74d3737d36beb426a0cc262d10e625b19c324ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050290000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030c508cd7338e7a703273730d65a9394c89f7f19cb83197343eeeacf7d5804b41982accb5662062fae20db45854f43c86ba45c83795006253e779b806505b4b78c324ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050291000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000303a74302f78deecca9c71150c83d99801b68c62facd0e1e17037cfd7c0ecedc7d06a83033f35c0eea2ea8ebb02836b37d0fb0c086dd97ff1fa088547e6b7cbe2a334ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050292000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003043810b01998f951f88e392476e4bbe29743c7a3e7b1d3a7139164411ada3427065eb202c4d0ace331468298f950bda5bfd061f26d6f1af9be0a428ebd075599f334ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050293000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030da367bffb91e8c8cac24f0c681ee5ad731369f634beed7763d881ad6571a5f1f6c2d374f1c83482a8a0c1e687850851b3bf6b287d28954956b39a094a6e59694334ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050294000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003032e1e614eab3d9a13fe263a66fa9797531e2aea49565f4c4b8cd243ac7881a3591240da3f5025ef164df38d62dbc2da3beb247dd6def9424d653ae18a0199c36334ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050295000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000304cada8f975280c074b7c6ccd05e7d71bfd98aaed7dca7beda2906c18443850797e0af1bff7f6e29b6183838496d2e40ef183564aff9befecf8623a536178e1ea334ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050296000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030864662f173dacc71293355cc4ca58b136582298a3f72ee8168fdd93fdb055f204b99b8a2742a978d92df75a00f1355eb2b27b7d03ee61636541fc3f958f8f8d9334ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050297000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030964e97e78b09781e6e095af6ce6939be080bbf2b0e9a715f8d344e671da5954e8d3efaec9592d29b5f5347a18ca39766ca97fff0c585f54711c6d24ec6bb5253344ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050298000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030a7c77cdb480ee819a588dc3412623acdc28d1601fd5b08b0c1cc7a47eb0dba36f4f5f365b53d69d9cfecaac4b86bc02d653152c04803d77192500261696fd958344ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050299000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000307667c52c2faf4e2697faafe32ace8f2f505ab124a766a147976daad7112d70271e46c0cf839fac82b518f5d618dda53a7f3f80928994d3e4e69fc8a12113ab04344ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05029a000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030dbc34d2bc6d8f76f7c0cd480375dd505152952fbb97b612fe7fa56eae2a61b2a0abb26eaec2ff325310da247cd3ffc0af289d648194be1d0f180a29e01791749344ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05029b000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030dfebeb03b9a81338defb6379fcfa86cb3b86425a6fb217ac318645405aa24f6822bae5eee335ddb91c57b5ebf964c5e159f0c4523c59072be6be09e6b939e794344ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05029c000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030bb9a29902103d5463b464b37c9e60b8420d04fcb5884bfd3efa49af94fd22655f5bcd3140242fce264438ee9f4499d8b0370d264ebc4fe7107d7b4c14168874e344ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05029d000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030e7674f5e1ab018e9af78aaeebe98897726f38adf0554e35231483f14cf968e490fb677949379d150f0f4cf2d3243979e05af4738a4c32c058d8e1d953f4d66f8354ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05029e000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003052496e258de94296aaf95fce689e96fe345e9ca79c51e36087dc03e4e97e552d01b111aad61fa94aeec3222ccae5421532a840ed002212b509c608277ebac786354ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05029f000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030a6288c35e18d2390aba9d3187bae258528530ed131d7a70869d70fe6b4dde158a448021abc938b1d6d504024c48dbeb8bcc971ac9f8577f67a761593c01ea931354ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a0000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030d83af690ed6a6a593e7b19e04e075de93a9a0839246296a0eeb04d884aaab76b99e0b979d5da4308544d363d6d134b69900aa09ea666ed61e0378117363e104c354ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a1000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003070d8bfe2a8c311bf7e3540f3d01ed941ae8ce2acb8e6ae8573f0b08137df2d07a3974a50a6e9dc54b151b482d7aee5ccd79ee2ab6cb9d7ae76d68f6d1f485c36354ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a2000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030f9c81f295fab181eae38f7f13997992a760ee42be6d79ff43eb2525eb2e0fc7eba38208b65b89b56fdc0e2aba949ca9c73099dc491b7269bee1921cc0b657c3a354ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a3000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030cffc900d9cebbc34c1cbfbcd2856ecb6ceaa48daaeb16cf7af6090bcf345d11ae8f8de671a2faa5f4b94f5f219870e810ddd25112143cc4b8c6c4e3940bfe21a364ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a4000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030f657d2f77dadccb5fd5dc5f3ddfc27c92f7b0d435f99b5e527503bd8fbb54d544a222a887b05db5558501762836e4290e80ba0eeaa962b2234280929ccb3d4a1364ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a5000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000304874d565cdff313789e3d16b7fe9d6bd1c43d86d8b160514f6d76ab2fd38056964082637d3253e02e884fab33b9588cd38acc395be6c104f9e7918821a457196364ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a6000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030d0d69b5581a43e01a20b3dfac1ac02ca407a4d70a06b238424051cbe404956650f857604d5ca34ffa543e8dae8c121832b0946ce4d76d176e71fb902790a1b16364ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a7000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000301a515385da2f2d055ed35ae1c5412dfd098342c77670ad579a5c75426565b22b64f44c30fe0706640a377787a4f679cb7619103a5512f6b58b310e645fcf16d5364ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a8000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000301593cd5ee493a92f581a447a09218faf4d53e7c08529b60ca5f2f598fadf7262653b1e42765d3246f6e1913c79f2d12ab4ca903fbc7f5a12b8c0e59d85de667f364ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a9000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000306e56b7310580a4e1edef61778356e807a1cae8443b4c72beb3203c8bbba3267829566c1f13e58a0a495f3ea311adb4ed25d2f0ac5e3814010de165986787de5b374ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502aa000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000304e98382c2feb4eb8a744abe2a919d2a5e0389ba8e0981fb8527d77d80e2ac42867b4967bfa95e94f43d7e6b31a8501ba604c0106fbe1da104638f924cf86b4e6374ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ab000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030acc7006157fe5dbee6a5ef8b89f2ec09e87b6cd65644f079ea9fdfa5e3edb428f318ca003befd0053cb481e39efd57c5961f3e4dc6eb2321f53286485d511a70374ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ac000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003065a0d658445a558dd018e92bf1b344c6cd4a4d99db87ac3a267f8640fc3f8b797a4aff50bdd8380a79fb52670f16c18103afbf05b5532911471e79c79c72a86c374ae75affff7f200700000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ad000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030a3a9203e40c193c3792890a5c35e3c56144d32d080d994b0f3480ecd04a8c87cd71f1fbf8ed4c75682996acad85006737c4c47c8d9aa6624aac9ad5cb2cdcf78374ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ae000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000301b546adb7e80e51141673d75d1d0b8ad37b86d5f67b7ababf8b69ac056700673d53daae312806b61022a24d1dc88473bd65b3f6e95b4ec441673bbe962598b36374ae75affff7f200400000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502af000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030da430aaa0b354248c24c3265bacbd8a9269a1be204a48e3ce544830439ae4b33809696a8f6d2be8f58e93d1dca43e33aab9e8def80d82a6a23c670518cbb06b1384ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b0000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030c4077a71db7ce18a60f82ccba1dc4ac1fda65a8a621b4a7514dc1647e357195059d7c1c7654bed1b347fbdd54346d3297f9b16f9481a9ed5850771710c100898384ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b1000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000306f88218cf3bab8e351297c270af142814d08509d370eb8a162c442f7d1676b041353bbdc7a0b2ccf0f51d0f429a9676e4e583c1d89c4918e6c26e450befedc5c384ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b2000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030fab1ca83eb79f7821fc0285dc2d667ff651d43da5c2609aba8d376437299b34bdc693308f3879237b4e1b405410533111c31efc08b3bb242eb293b28e0085f4d384ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b3000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030a1fd153269839fd0db3d80d3e8390d54e2483776d9c333b7ddce034a2296343454d28d49189617ae8335675714e6c7c96c77468aba41575f20c1e85646db1c4b384ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b4000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030242c4460cb0788abb0cfecfbb50b49fae4135797266ab96d759bf77f9b65b0708656b03ed899b9031f3e8383e641403d7d0c01db8ee34480e8ae81d52d41a2d9384ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b5000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000308bf4aa43330b585a7c7883d463506d848fe627fc8bfd92b2f8c3ed5d0ceb8572b0de9f4e3d48910ec779245734cd280b35b1a036eb0b562b1c105e383631be63394ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b6000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000303c5732f3c8f752a09f6a9f8c0b25bbd94af2a9313f7b5f3c7a418e011454ee298583460772359aacaa0eb4935162fdb43b539a2f0f566c92e5fe9782aaf53106394ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b7000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000305a6ee8dee15f3627bc0b4d9228f25fdddc48443f81857ad17b028ae38bfb40428a0a731dc587bed23dca20bac75795288d8dc1870b9acec2e239f2fae2621792394ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b8000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030f7d49136f29a7e8e91cf31cae6ded5d92983c317df93d0ed9e212c8e394de341668ac758f62959acfc6b80db3562552b648a634f7c4d2b3b4c1c53961924bb4e394ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b9000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003052d00280b5bb603d9179edeb1d69cfb4b4a42c5b7e4c7cb80c4851d2030431767b0b322e695b59eea57e35fbbbf45ef065786a94b3916075dd232534f1cabdd4394ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ba000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030ab0da32ee88f4fdbde84cff7a17876e697ebc8586fae7c81dfa94c306a1bfd23af40b8f922bf0397dcbfb875403da906c0c40022a42cd6d469df3c77464faf9b394ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502bb000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030b53970db3ea9b548c2baea6f40fdec4662d8661ed70e44c146fb339f9ab66875e15efee5b076fff4a7f14c807acf3ff1f4b15b20ac6922202d29a17007b7a0083a4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502bc000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000301be23d04bcb316821422725ef10d3c2668a16bb7e4ae8bc5f9b4565482206d5362b3bd30f926aa46700451aee013eb71e4d025f5d99b08b3467a413681074fa03a4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502bd000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000302484f72ae28b571285e15d97627b090b0640a7afb74980ed3439a97ce5e8425f4eb940b1e19d2c70b6f271131b861b84559e22971122375fb4a2d925351abbd03a4ae75affff7f200700000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502be000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000306cc8c6fc179f098ff23cf8e7390227fcdee198fee38afc90d311e70b21e19139985fb6ddd770245132cfe8aace771c50a9b32fc4ce99ee542ac1fb7fe869dbb33a4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502bf000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030930ee4caeb9c58de4bacc1136a0df7f03dac48dff5293caf01c76f5399325c48fc3933f54a84d41f6313d86f9a089b49294e69c5c3e2c32b8360dd4623cd29b23a4ae75affff7f200400000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c0000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000305b222be09a4b48bd1306a693bf3f42fd9520b8d46814df1eda4f18168f5a827b558fe844dcec51556b37c48e5753005400ec57559876d4d66a796c8a1341ba823a4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c1000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030d84e6746767baf539703179660778e625646ceb8e4e0cce55f1e51bc4a518079fac2c3745960a97fc07997190021ed99ae6689e121b5f4ad1d2d1b56d68652653b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c2000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030219709f8c3f69a8350fa0a143764fbc117159d911dec3cef681fd7f00108895394367983f4543a46c57ab507e2d027b682353d9132cc6edfbd089dc6275b9ae63b4ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c3000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030a4e2b7b66b9c4dce3ddd43704f367a441403829b6a75b9e5ba0940474cf00f7390316e67b02d67d70958429ae177ef262008f92aa5d0e6e5f735b929e5c1b8c03b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c4000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030cd0e4a95ec99abcf4c65a2fb3b5c0c74f848857dee56cde6336723aef685e8279533d6cbb5f35e76e002cea279f4e4e8fe1af1926a989d00e127f5c15978246b3b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c5000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000306fd1d3f1beb93d99ede6f31c56592de6dbbbcf8b32929eefcca46fa65d24a80f7164b3697c531927572aea4fa63de2879aed2a00b07213043f4712abf902d9683b4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c6000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003097914cdceb0fdd38667a6488046526b24da11412e6c0ff13197ff92061417439b68897bb13e0a0ebd18a3f92a76f81965c2e81bdcc20f92b1a8d8bc9899a15693b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c7000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000301c84a255401a70a395789690dbe2cfe4d02103c1408f83d9d6c33a9de79a6422569c73485915f33ef3c6795dc749c32efe5c7cf06691138dbeefd3c397e232f63c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c8000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030509e775adc2fc291fed3ccbee334b5dd1bac13f93d3ba75a5cb2c907c0ebe8455537689b9402606742880c99467d80a3011e5d216bf1935cb620e86073dafbba3c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c9000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000306c432c1667139921d7cea50ec45dd95e969d8c914c3c1cf21d04275783fbd75b1a4755f38b40258a403d609ea254780e21b2b8f7c46e4b768dda2a017bec6a6c3c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ca000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003072a21c83611dfb816b1c8acb4a77f88373a2404ee5ded76417c9d2187c67bc4e3103241fc430bbd2884612603b234a0bc3b186ba43100f6111a8883b36c547cc3c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502cb000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000307f300476af0d20a08370a4d2d8def611e13b171bc45ba2551f1cffdddd605007251479ff104d6e2be0cbaa15ca4ab0b32f4edf4173c3ca7c9a1905dabd9edec43c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502cc000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000301e32f07884a596a209e977516203406416adc0fd6aa84967c07668a8f0ecf42c4850edd5901cd508b04186bb25cb5c77506952512d21538bdcb53524154d36503c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502cd000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003071538788e7d814aeb6e8c1e434641458048d1456dfff23d64a7635e93c3596288966be6e29df64a1c010f885b07766c5e8503d5fbc40d145c765fb78cc97fbb93d4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ce000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030e1f94407abb7066f16da41644e38efc97c8cde78558fd32f2952752f3f0ba64b5168b8f052c9366c58a36c3bf5a8f1e51f39b0400e90f8f068a7b8be2e26d8a03d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502cf000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030267c7134c1b08536ae881bbe287209244058c0f8de7cb313c38a2ce86d4329542ed07d4f9ee6671da5c5336971e9df635cfce248b619bee91489e95aaa3d7fe83d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d0000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030c8bdc4782e5f526be1828c7d100c4a3e819bdb882d2295eb6208d64491946e7f2cfdc402430c073c23aee439f8c867da53b2eb505a40d82fc68c4657dd2d01e13d4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d1000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030dc35cf9dc6f495cbc2b165b1290fd92063ca19f267d832e997e5b70f668b304deece4998904520b6b53bd380d6fb41567ef59e39a392b3116c7ba42635679eb13d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d2000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030a1f3d6355121408d0659c4034db32c267326d6302daaf875b1c81bf5eed18d1aea4a403a8d189c98280d2e2a3c9152594b9a0314a951b08c4fbcd11c281cf0de3d4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d3000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030bc1bc571f9b15a9b559bd8be823de6c305d6a4cc32cb0bb58e65c5c8eb494f6d591cbc1a4fcc14478fc218fac1446ba588df192eade9e7f030d654232cf2fdd03e4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d4000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003044630f433256e72ab5164137bb9d866eda2ac3c93908f70cc12cadc853157655cd16510070366fcdd6bed19d4bd0be327bdd1fbeb0fa1bd8bac5b454227e079e3e4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d5000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030392ec82d73c539b322998c514340c50d90785583a8daaf7081e8db4f8ae3a84458b7d15a90d881b159f31f7304d82a7512ff88d90f16501296f57d88ae4449943e4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d6000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000305ae1dc13f211466b8d831140575dfe8d97e60b6062749d9d99a762bbcf378a159c8baea43ccce4ee6af92d8b857674fc667015c460e13452208b7d09c73137f73e4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d7000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030f48128182469556c0f65940bc6b4ccf2ee5cd4efa795ecca4785c8b79dba8f1d0dad8fe0de448c110669a728d968c66b957b78a667099a5189d8efc51541ffb93e4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d8000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030c0ba4059d26b0a6044e4ae8a216899a2373eb91965c9dcdea29035e94032732f7ce6c8011ed9fc8abb2d6d98cd1eab86470f631ac51dd9416ae1799aa0a491183e4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d9000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003086a623500c90564b0399241dbc492b00ab457f840c5940b0dcbd327808b2e67b8d86ae8ec7e9a1376300035c2959e1d81f87e015838ca8d682c2f1eabefdcf193f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502da000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030a33115ec0a1ff4a8da83f0a82bd2b3a5fe24bc58c1eb27d94afbe92c10c7bd7a4638b041ce64dab4df93ea1bbae55fa9599d19ede54fdd79755379e263eec7ff3f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502db000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000309865f9f4fcafc47fe88d97eef2595cb7215bb71e248c82ba799fc67202529e2e77cbee33d997369f5553f3be22ac56556e9204633730abc3f47ec2512da1e1fc3f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502dc000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003034e4e2577d28ae17f58a3e7bf1ac452c1a7f7622cd6b03b75aef5f8c5b006f62d0ff5e40dac29df059a5dde0ab2316e702b589b1ac703e43300c3a94648f0b513f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502dd000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003060ccc96f7a63223a1a0ee9cc5ffa045e34f8659cee3eaa857b89e77a3743e5060eab96c964fa9c16764929e734f497a36a56d3ad361f5afdcf08cb55dc03ba753f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502de000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000302b46a26200a92808163d908aa38406eaef519cf18f71918273c773f16fdc42577e98fcd8ff229ede4e78d29e388e252a6603cb7fe2433a07da69069d636487b83f4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502df000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030a2fb332338db2efc3fb3fd92f53f7a999e7561e825aecd11bfe5717a610f252bfc3afc2548cae1e2b3f450c092bb9ba2ff868aadd254078975e7bf020eb2d409404ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e0000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003040580b42feae18c82f60394a7c0d5a99eb1b657f20c31e74f44970b71de54669bddfff5200cfaf0fa1fd1b35bf7266e3216be329506df9943d8d686b6721e9d9404ae75affff7f200400000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e1000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003097fce43253842a955442fd3ab0755c96558a6d126d637462901e111362650b208ea59fb37ece037c6718e393aaf1ab16a89499d9349e19eecbb8f9bd0aac748f404ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e2000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003075024b2c08ea1bc58835a9fa49cbf3654457b97f5f356baf3443f7581787704dc43fd8902c131b167637b0064c4757e77e450d9f868f5f9e101e4deacae1dbb6404ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e3000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030bddcceefa7a42b05a37108b81c058a0a1a48cd29f02cf26df1fefb2216bf823f7b172489c5d534624486077eddfc7ed2a9ca329e1d5afdb335b074e439dd6770404ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e4000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030a45d472af830e84ba6e3360ea001674666d7d9ef2684b62e7e2a1ced7190430cfdfbdc260644b48417db682b79b5ac9b1db5fb407d69e0212809ea9336f4823a404ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e5000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000303f04f0551b1db1c249452237c3076892bd0eb2b6a5b257f937cbf27b81311718733b99746ee70646479cde411fd45dae66a43c7e3b69477c659e7d6bc02c1a4c414ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e6000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030d488947e73d46a2844055860ce54cb6d53f2fad39310a05e87e3650811a46c27dcaef26a599b3a5cd11e73843a8f9a584a3cfc2a7b3792ff7874a0c99fcf6ed4414ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e7000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000309abda28b640dee07be157ca9f69979525f9e5d66c8db85d172b784005f78d14decdcf65a15ae59b79a34cc646af05ca4248ee339ab25c645f447af7fbd8fe3a3414ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e8000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000305f1d76efd59043956b2752567508a8bd925a42a70957c87f3aac05c68a731061c4f166844a81190b293ffd06a9789ea7b66802e1ca8388ffd5a83a5879e1459b414ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e9000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030a3f64207b1f11754efdb56df99efd1a1d89137531d0af4f75dcb8f3d88398c5245c4f1bf971cb53035e032e2d784c1da0e211364fc9351b7977b4ccf48b5fb1f414ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ea000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000307ddf825cc36f4a6ff71120b26a6d49675cabe7cbca53d5050e57db4df3514557115736c4113735ac0f62718248620ba7f95ca93af71b8cfa45d2a1df755176ce414ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502eb000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003051398914513f3a1df16bade4bef02739ad810e2bbc58223ab22964d2bae54a531f09e0d3b7bc86448f56bbb91da01b1f6c6f1a69c8f8c8b7243500ad587ce2ab424ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ec000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030480bad641209de8e6bfa19e88d1bda9ed29816529e550a432b11ed962d0f0e443fef800f3fd29f1cc70a947e55520a6dba4ceaa8a7cd72fbc89e46c7b485f4d0424ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ed000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "00000030fb25d6615b6d28c84facd6db5f222d300d6971503a75bc143352ad4997ffb953a5ea9d0163a939caeed2ce52cc1de19fe3cd1bb064b3d112052a19ebf57d7579424ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ee000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003016715358781acc645332baa73db3e7ecaad710298010b43b0d23262889822e28301bcfdd191bbd6fdf4c72ddeda4347657eae25a6811fb1026e0139126565be6424ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ef000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000308dd50d82c898ab141ddaa201687030bf6331c652475becf5ee532c56e68d3f0bcd4592844daec828f91fe58c1e1fde74ffce76c43cf3e78bea062d8240ce4bd9424ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502f0000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "000000306ccebc6b511cabbaab8ba884f39db066facdb7084608f2a1a0aa66059ca3c06330dd83d58a60c832ba3b439fb46347aeed5abcec290f85eb97b8084981e1f998424ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502f1000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", - "0000003080c2bd715c9cae749341529f1e6b0155dbd4cc00f7ebcbee83a206b3f7c8b634414f22d3fa28bc7fbfa13c0d4caac4110dc92011392f927cdfa01d39621cfe33434ae75affff7f200100000002020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502f2000101ffffffff0258a11ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede42b2f4da94831aaf2d01ac259d8cbc23de55ed3cca803ef582f4f27dc1f3ced01200000000000000000000000000000000000000000000000000000000000000000000000000200000001b40e4032e98eaddd01559da7cf829651ce78602c8bed0c8eb96d74d1a7a9db71000000006a47304402202cebee5a021548cfe28ef9b8b485bff57e92bac9d34ca47dcf7b2600d3d3f97e02201f9fcb389207a9da0e88b1f51c3455d4b41f8092abb474113ebd88c234cbfc4101210227d85ba011276cf25b51df6a188b75e604b38770a462b2d0e9fb2fc839ef5d3ffeffffff02a88e724e180900001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0080ca396124000016001405083cc3c35fcb4c8310fc706da06fb4e24fcc14f1000000", - "00000030bd720eef5dca114208ef936781f709c3e5212b05aca32effad1bf6ca53708f3d198f717ee9370bb80d6186211b0e0bd2a1fc18b209d259a396f2ab98e7ca1015434ae75affff7f200100000004020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502f3000101ffffffff02404f1fc4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9edba4c771474972be520288385e9274f73d845934dd884749b11a0fddc85f9913e012000000000000000000000000000000000000000000000000000000000000000000000000002000000000101be563cf0b1b90fb98ba1fa8892fd65a5e26244fa93a53f34c86274d4fe669cff0100000000feffffff02c094724e180900001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac00e057eb481b00001600149f8238f16d46471128b3baed100e794d19577e700247304402203760f9c0ba23f2bb4ad8491ee9d6b79aa3b72707cb8c5da516df0bd4a5abb5ec022064a8a34c2310b685588fb5e562ec4374260561c80f9a26e2cfa9b66dd81fe31e012102ab868ca99dd4473ff188fc8a5bb8a57920c10d505b8cadbe05205f29650869dcf200000002000000000101715859a2df129f08910268f61d96d92f952310e0d6d729012ee32b4c6600df920100000000feffffff02c034e59c30120000160014f427b41e4de2b6813416089c0b99a6dcfe96364800a0724e180900001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac02473044022001fb45288d37c4e8a52f3aeea6cf14798aa4df5ed16440840264aca6aab987c8022024d09b59ccf98b97808e52ef89009a66df03419563aca0c145933f5be5503d96012103418ebc7811d635ad2a8ee37b84f91b656cea7224c6fa81f33e9ac5abbd2b59fff200000002000000000101a799614a1eea95e2d54d8ae48b668b0ed2aab3ee1c6149e1be92a405593e782a0000000000feffffff02c02440c8471100001600149777a3e74d0301f58abfdb336d54c17e9d22d0c04067a4d4e80000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac024730440220320ad4aaaab993f1514cf265141ee2ce96e6ab486361ad35186ac77ce8ac2ff20220374fb44c78be606e98b3b67685386459aeeab16ef000f896061304e01aa0055f012102a848a009a4ced2417842bae1b3f6278a3fbd28d0043e6ef17a9858ebb9407146f2000000" + "010000000000000000000000000000000000000000000000000000000000000000000000696ad20e2dd4365c7459b4a4a5af743d5e92c6da3229e6532cd605f6533f2a5bdae5494dffff7f20020000000101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1004ffff001d0104084e696e746f6e646fffffffff010058850c020000004341040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9ac00000000", + "00000020a573e91c1772076c0d40f70e4408c83a31705f296ae6e7629d4adcb5a360213db40e4032e98eaddd01559da7cf829651ce78602c8bed0c8eb96d74d1a7a9db71194ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03510101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000204779918008bb4454ae02d253c7e4f3e218a585bde2a296a783310f702d011a5cf75e2cef25e6bc076d1aa0f0927a1a142e6a27e84133bb25243767a6c9886f9a1a4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03520101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020259f718b5beaaf66f3720355e7139f0c040f153dbdf3bbc9108b1715f02f6ecf0c3e3a6176122ff4d6f6a5bdcd38b9b66cf17505bc4a5764f1820051bbcfc0a11a4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03530101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020c789af2bc9042089aa93bbba8a2af0ae902a40fee38d9f8eacc4b868e95f87acea57c13f65016434a9cafaecd8410262a0c9a65557e5b069c1d456034245d50f1b4ae75affff7f200500000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03540101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000200428bf52098d20b042392a2a729d9f7a52dffedb30fb4223c1a2504546fea65b4860de1b20d1268b2169a91df1d08888503b396f163a668bc674083ae3b289771b4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03550101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020d7c53493e8aee5afa9916f8cb322d8216c5fa658842e3c0e6c450badf8b24519b61b8499ea18f18c5e6039d1942a79430b0c7bcb1a28ebbe57917d2bd6e48ef31b4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03560101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020e37d04fe335598f9b817f1d7a4ab34aefb7548840717d529e9d951e1178b07994843569ef48be310c335511b54a88a0aefd954bcf508c3d7b69d09b236b26cbb1b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03570101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000204fa0775111ac94369947fc0d6cb2fda35be1601ce25b16a059e7f2c5fe7d0c8fcbbc07bc5b1b887061d9e93c0095ef312f8d160751045960ded731cef619ceab1c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03580101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002026ad7aacdba9f377a8485d354b525ffd23fd0c570a136baa3604e57a495c6dc0fd2ecb6a50ffbe5f73645ff49c0bdca05528964f629478481771edbc15025f011c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03590101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020ae4142ae532bc2992b83a41cce8667365136c5d56352bddf5d808ba0deca774bc407c1d3209dc8b31226e58e8b616eb378ced2774943c2d5ed3df0154368f2321c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff035a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000206ad90a192fb8469cef52bb9a73ba00fba7cfef75b93cbc7ad20143e15512deec89cc726c5339dac3d7151037957beb278fef3aca85864f0dca26f76d3657cda81c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff035b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020811cb5d47df4bb9967b7e4323d0a63e9ade04e6495afdfcecc43ff9e472aeb7be91b7ca68c31aa6a3d01919cbbb0745b30da63ea585bf3174822e91a07b41ccb1c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff035c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002020702df2eda4e94ab64c810713123f1781b2d608ea7196f5be28fd755ed09ea513ea3255fd4726d14bc54aeb09d91de757df2dcafc4fc8c8618a8de904367fcc1c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff035d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020ca91ca53d3fb7a26a30af9f04404487b25901443bb8f27fe07a0acfd18865c2fabd3aaf05202a7469af1589ac690c9da01641a38ff148ffd8749c7fbe29124791d4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff035e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020b30b222dda1bb6abd4338d4eaa22c99ca41b194e334e5fb80115ff6f4499aa3f8686b394132280553c1bab722522eee155de484e9d07744469c229dfff6862431d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff035f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020bb5b72d5ea8afeb01f6ea0f5b245d9f50b9754b1884525142636f2777b6388262c35a1d3464faa96a31b8ee0f21d440d34bf0e78a421d2ae718fbd2d61e4ba9e1d4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff03600101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000209f499ec3a7177fbbf0a5131329d5a695e9a72b14404f08d1e6f85575f0118bdea43f17a9d7bc9f30db05d6e7f2c1b843188bb23ac6cfa96054001732419955551d4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401110101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000205d8ff71f1420372d86c531cdb622c559e6649908b9b3cf192b1d5930073a7896a25dccf782264379b5260d2a6f469f7130b28f891a781cceb5eca24dc6c59d4b1d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401120101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020704e10385cd9c5ea98e813fdb772b5c6b4f488cb5902f774dccd9e12a4cd6d856a2d4126e2119e6dd207b5b6d3aa694ca3d19f22b42ee9ca3af20f97afdfc2811d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401130101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020cbf0dd866808489b66ed68d5e21de703a2905b44ecc488d051ff6c3cfb113a207d0b8626465b7bbe87c3df33ef0dca2cf149ec1376e0d4df65e729d0464d77071e4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401140101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000201fdc1c77473ec23a7378c273eadac387c61ab9c101c3b367c1e608d75c37cc4695515e244f1bf7d8c89794bb3d16065a376afc274e57edf11c511c512f54fa811e4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401150101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020e16981278df1d5a0a5ce59124f82091fc3e93a6f5f2f5d629938ebe6218ed94d7e417dc5ee89ff08491d4c91e8e36cf43e9ae4ddeaad4916e0ffd51debfde63d1e4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401160101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020122a7a8592e232be2b9bb452aef0abb6721195c745f31aacd40302f6ae2d52ddd10a51b038b39075363ae201f1d5acbe7e488e6ae66a604ca2138d8d3cb018d21e4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401170101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000206cb2082cc75a4f501af1bcf70f567beb6b06a6e7bfa87a7fcfcaad3fd6803b02e36a79bc1c476ce697880daf8155c8a3375b8eb35b41cc88b70181a8c850a2c81e4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401180101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020a21254a6a0eb6c65c062f5a8cc16a1fbef23e3ec331708093ddf3b8b4b6169b84625359f4ea22f53c76bb6defc9f41363eb513ed4acd24b71ee59c08b0b183bf1e4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401190101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000200dba11f993e98ea720cfdda0816dcbe2282e2d05a4db1aaa935bd751a9ef204a2ac4a8ed93f07f39d81dd4e8a55b541bc1c9b2d517b247314680217fdb0068351f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04011a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002051e1cada1b32f0a3545ccba7e90ab44fa1668cc35a40952c1351c86626673a702bfe715dc17738598b0693f53fe8c52c92889d6d7d138e2faa8b339f4ec7d4531f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04011b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020b0b234d6373880fc435127b9bb1c23a8fecd7096f3aebf78c950a5cfd5898be89efe85cfb8fb03e1baeac0969cf5d96094205bc6a3845c601804e7a1927ca5c51f4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04011c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000207abc9dd564e3a17dca33e0bdbe7b46ef20a7ece4a9cf2e7b26710b71ffd871abb591d3074309b5da323ac615023f08bf7cce6b49db7715826899a8b5339eec4f1f4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04011d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002097d2cdece29a2c82439a44dee5385f1df125d67923f84edda5fef212532406af0efdb9d5fd7a876a84bb3ad26ebd3f3c61bdd2b43ddcf0b9deb3ae6e1b3c77051f4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04011e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002087b9f2e2e16c4975f1289e924fb7fe119796692f742f8b56af3134aa2939ae24128b2ce073e54cf3d7d909470d88636c91711a8ca096839222de396f0798b24f1f4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04011f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000201d103e8f262310e1b2e57604961832ea71cbc61d2d40341dfe062f786832fc946f25d446568286f8eacf14b8152b71d7bde97d15f945ee3997a4e96f24920854204ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401200101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000202985b43f556ac33253b0af311a7134e1ed9fc63ba34f09cd3c55fcc19c064cc306278787e885912c1fe9b08b55697d19a2098c30b8019b2590de4f4ec33185de204ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401210101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000203b2e8e6cb988c98e5b88f384626d33cba1566bc034096caac9508406081a3527607d707501e94defcf7b00a1c07b63f861ec2b2b10ae22377aecfbe56ab5c838204ae75affff7f200500000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401220101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002014c3edbc1895e44bd5ec9f943827afdb9fe5e940620aec6e0745eb322c847586e92be068c75e4aea718a96e7debc930169f0da2e12e82c542c23e11a7597d763204ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401230101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020d59e858dc049ad99edca0c1eb8547ac8ac785e90ca80c6c068bca0ddd872375051e3cb0877e932083c1ed1fbfe0b2a80a11b539e7726c943a45a59c4e200be90204ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401240101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000204c1556e51b65ad1a7e08cce9e43ac4055deeac54faecc55e273ef67518861080c35d7a1a3ca59328aa2a574bebea8d0e964485290db4f448e832f812bf843d56204ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401250101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020bac91a2e11aaf91d679df928c3845bd60d04f13c7f586cd0f2bc78ada191c4b984b9dfa3cce5d627c889a487df9a7857ce4eaab9a5f876f33302a198aba62f5e214ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401260101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020084b4468ba2eaa77f9d3a475c25f0706b4a93804d6d00cea9f2cdf360a835350cf1678e36d905b9932cc68b581aa8f5058492ef554d7c40550efe86b0d7b57af214ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401270101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002082024b72b26b53789062f01ec31f6332d0bf243042dded1d64a756d1cb38195a9a0a742b3aa4e9a09bade628984fbded4ca4fdeb3546e4b0650d2712caea7fb5214ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401280101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000206a3863cd0b9e745e923d36be540f42b265bd618c6d98b9b95e86c4a03d8c7fb6fbeb6f108215a05ed342165e9f78cafb71c519ea5495c608756c346d7396a244214ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401290101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020823c30af55a57c3c29c62013a79e5d4e1257c2035775c85921082ad1d61a2f3d93e680e1aeade31f4c41024af841bb4342ac9263831a8bb60b49118b99c82b69214ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04012a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020106182035be1e8dc255924d9117feb786827c2d697fb57cdf951494dd3899185f2e479371803409658f07d1226ebb853f26052bf2c32c772600f9f9f095d89e7214ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04012b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020ff2490cb4d0dd92e9626778bc33853fd64759d7b7453dd5d67231addb16936cb82c31483dac7f3e29abc8ec8b9a44dee570d30bb0bbb919b3daeff4f2bc13371224ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04012c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000203a89c3f076cc6c7bce2d86b727bf1d5c4f896036558cd36e8c39c6497680103305af0434465560abea118d2b0be44fffe70f031eafa432d518ae24c1f04dadd5224ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04012d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002063ef350804aed49ed023287b4414e8fdaccaba6ebf78247a230ae8316e22fe8becc5344c2b300d49b595c67891a663566b4c9ffdc9afa13029a26335ed25c457224ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04012e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020c7890a799ab18ef0c0e6907b837085b02bfd531cd53b0b6510dc19ca286a6dc52dae27037072caf5fa97c166bea89df60cfadbd116f9ecaafe453aaa230532ef224ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04012f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020c48e425948b7cc8ec626e29b6fa9a7a4a382b900fc13711abd674b96a9b6e181d3ea2c2ea321a720b1774ff6b57da9f74e259edfabd6b889c83f7619ce916938224ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401300101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020f87e4927d962e884399484d63c62ec3378945fd4f683e91f23d776be21e381ea63bbb0b67dcb1f83215eab58279f49517a3b2f7f3e93533a88d99788020cb99d224ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401310101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020648d542ca6389d3da49195467d20e67dc9b1d4c584bdb8316385c6f5bee50a49803a85dc54fbf2a041dbc2cdffb33b15913c644155e8d297007cb809040c94e7234ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401320101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002044738f5769b42017180d34a701fe87997c1b55f903542894d25862028a8e1172aa0616f42a608ad43a421e758231a21216b0b366f2d50bd4fd98a7a1e0b5aee7234ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401330101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000201ba797d62b90988e63ee915be729abd263ff4478b7cad84d35dcb0abc19891f65237ca5189d4aa4385b29035457a9e1c8b2463512f3881889370dfc0cb9f5813234ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401340101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000205c753889a425a160b2c5902c1220ed3b9b5f75b81601b71f3e6a4f20c0c3f127a4e483bfe855a0a0903afc50ea72fe551fccc3bfbfa33eabd61fed1abe75e721234ae75affff7f200500000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401350101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000203a66d25d5d4fbe95450fa38341c1a63e9b1accdb2f893acb6dc893a9746d1454647f06f82b76dea8e3b81acc164cb2e5ccc64f78cf191b28ed313225cb38cfaf234ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401360101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002094e6047d2f091473761513f48e03364fe9f2a50fbf8d656cba6bad43cea4572a0cf088861245b3d3d16453a8ac34ded5336542c5699cf7b5c55f89fb107c7f7d234ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401370101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020da9686353dce5f7d048f4e1892a41454a9dbedaec002d41c82506524e26bc74e8df1a30ade3e06eb1e9b289d1e0b9d79debd88b8b32022e41ae889008b873963244ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401380101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020def98e3abb5a919b0839574a3bdeb798fb0e58af73610940b6f8bb963c42e0be474b4eacb7d3309d45e889b7d65f4824a05adc3f5425e95d3725bf7fd35e44cb244ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401390101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020c7ab8942c9985e92bba5efbfebf6560e144af7f8bad750fbc369c848a2e8f310cb19d5db44e188c0301ae2de87e57f9df0a5a0a10f25c4dce1bcfd84e451dfeb244ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04013a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002083fe827c61f481b9f7d5aed70ac9fbffce4e2009ee90f86e240cc3d462809213f312690ad49ca5336fa2cc39a3dbeafe8ffc618b9c1de26375972212e7bc9544244ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04013b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020d2580b1ae6e6466aa328c46134631c02912b2d0f591fb7ea07088380182c7a1928484a4310594dbc1f2b0cd5174bab0cacc202299e2414719dac17bba002cdef244ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04013c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000206f77f430550816d867612663efca38df2a7dc5bbb5ff09b2d680e367fe2a17e93b0ef6d4726a2fd8910aac05b388bb52f91b9bfda18f3e34e45f3cf8758f4418244ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04013d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020f02524463ff092c31e5461e512ae9b4d5580808230a41171af83210dbf581822fd569603f075b948566c403f27c9e7131b97cbe12d8f0a86bf359f8c661c1056254ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04013e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000203b40d1d2231413e9dde80d7959fb1dc62a201a8805578f796f1e4f5bbc8d3b5f1779cb660c8142a8fa66f4f2b227e5558f13e2882ad1c8c87c422fd9dab71eea254ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04013f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002016e8650be8df609c9708909227b31f0b45138c670b2c284ee518daf6e3294eb0f603da762ca3e32f7812a848d8d0ac66f54395db3eee8953d25a796a77bce05d254ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401400101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002029e7eb3606763926ae24c83aaf56a73c9cef7e31d8cb4c106f7ff5a7a5e6a53eb607d59ddc5648b983a9279d31a74313ad8db8497e90c95381d02adce5613b9a254ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401410101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020c6271be337177375783fc0307965343999a7ad5a2c088b237514353e94f9cd5321d462160ba940356a52bb4014b167ca6c491ecdad7c2789851703b3d4188847254ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401420101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000206e5c449b5ee1b33afd5619c587b57d28640c16c45377b00e1f4c0507f6248169e90e17bbab10f8e1af8d10029a84ee2a971472e540ba27efa14664847d7bfd96254ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401430101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020acc182950c0b7768ea184716c26d7814d317052f387bf2d5e6e824a10b2e16643e25ef3dd966dc85197a48918800df6c792828a6b649253eccbb90a9fe1381bc264ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401440101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020ac20924ae7b07d461551e29986739c7c3c04e555b6ce46fefe024c47be8f380532076515b4946271b4d30bc59ef8d4ea4451147eae091e5f38c73887205828e2264ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401450101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002074b91766f0b8ecef4cfafc315c62eca3ff533498f42b37c90f891a2a1af2ad8b9f2d4a03373ab2f6bece4e9fc108c540f6f1fd3133246982654c60cf65e57d3f264ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401460101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020f28c76473491170e1e7f467b8187bda9250e2b5c1c468692a2d731ec7c823adbe488002bbf188f8560b05806f443c7d3c876f589ebfb26cbe06d1bc400dcb354264ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401470101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020b441d88f984f9bc18a04d1a5ad1bff450ea810d4e758e2fc3a75479283e75bc25cead78faa4c4de5aaf1af45847042328aa948b9d40f6db59a0d28c2fddb5572264ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401480101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020234d84ca651cf59608edfc0dec69b9f76d947236311ef11069f2cbd77e950f9808547c332f5ece4ac74b9184ddec493918932f551d0a806bddf69736f562341e264ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401490101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000206e0af41c63ce5dc5f59bf12c306a1e34560a3df404c15f8e5be13aa3bbb00c74df56d380deff815e91760a599bb322d5e2895595b0b7891ad4f604c1413a2815274ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04014a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002047f27b82ff58938bc6ae617d41d42c8434a15fe21c77063c3ab918588858218593da92685cc7d12fc387bb8f742463321c5d64a6a94a557da83bb9b615f5c3a5274ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04014b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000200d7f759753a48ed3e0983ee971db7445694562d4f11f34880a53ecb700601c83a7f555a5dbfe331035ca85ef4e1687848ec6b7fee5e3d11a4c881fe2fa7c29f4274ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04014c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020ae6c6597d96e3beb627c0a40f2eaf32e437fb41143c0fbbcb59396775bee8558eb44a480c641c2a3b090cffdc54e36f4a2fcdd66a600b6371271fcc446ae39f3274ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04014d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020ec7a711185adca7dbcb504b12cf9c6a6aff0e0e65ac2a35a2b7014d556b3011420db43df1a4ac71c25a63c294813fa0217414d5dbbdda98babb9a0698b861724274ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04014e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000207e7ae25e948d98b93a75106109f198ab89b7fc3ee2cd2765394dfaea7e39f16be747b039403939b657d36e7ac59d5467b2520d02addb0014292a4892105d198e274ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04014f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000200974ab0c3134b5865f4fb016fbf3fdaa0beea89726a6034f31cce5dff086052d7371b37a7deea0d85aba44226d29b411eeb20e9dabf0c74b767e61a7b413acd5284ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401500101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020f232bc773c1fc07d35739436651f184a9f7dc60f5cc32f3ca39c8527fba3d27a5ba82a108d691667e6506c11cc652c6628a355b8818df5a919c4bd67d2de0a45284ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401510101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020ab2c3ca90bc347678ed98227f95fba895db233d770f039c14d759165f534d67725a15d14bd25e27a4cb3ba7a2ee148f21e9574dea908ecc1a057372bea5d9fa5284ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401520101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000207bf9247557ad358e0e0f0e1d8629e8064d4f636b0a5cc951bb8a000af8945a2fd07c793a0dbcebbcab30d3a4d4efac18b9f1538d77ba8e326b14c82ed261cf32284ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401530101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000203355aa9969b51c809a54aceaa7431eb5891ce448953549951ec5d8e83c55cc689eb9470d94f10e6fe67d170c066208a6aa73b25c84eef366f7533acde32f5798284ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401540101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020d4620a8867f251d92be59a7a67ef61c37ae98455d07b669df2733b683e27e5aa1b67caf16926291b24f219b8c579734c78f36e582b5805f799be5aadf3d7e38b284ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401550101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000201a3c00ba459716dd126a18431355690ea9b21491693dad578a85cea9a7b6a8bc45b76a1790cfe1334bc6ebaf94aa72494da9504b76edd0a7654f8c359086d666294ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401560101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002060d3170b9b8b77cf6f2ff9936fcd3098512fa6f07adb1794222927b3cd3ba95b452418d8708fe47265ad57981f12ece0e586fe847be239278eb470d0dcaa019b294ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401570101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020d752502170caad104e920852c134dd91ba934e6cae48d68f7b88246abc585900292a893996d465dbaf56a6bb3462bc16f4a59c3f5072c8b4ec90fcdbdbab9dc2294ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401580101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002038dc0c654b45e07f5e01d0602773ff5e33bbd181bc4e04f603baf184138408de88d0966cea8f2440953abfd723c212f62735f9034d10684f2a04c0e76ec08f10294ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401590101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000202b81245e8b003bf256764efa330435f71645a43e13f41603f79b953f0bf93a07b4fa7f3266d560c5783ca20431b298c90c3b3c236215f9a4bca120b034a51d96294ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04015a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020027255f3725c24034f81d47323c8bd26019230399278e05a02d8513febbfe8ccc2c53cbc4dbcb5e88353fc6553c3cea509297a47b811c52034b85bb41dca4275294ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04015b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000206bc648636039f9614d92d01749f2a5bb2093eb45bb2bd5b5d1b128ce07cc954594f6df10c90e7a8d7fb0de04a495328d7ee90a6aa5d40f1192e92f03cedc58902a4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04015c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020e1d49fe0ef814a622b7ec1ad8d472c137a176a1f6f97788d97c5dce51aa1824064a3a926d8e2b5d3de9d4fc5acf25712c585ccf1ca986185b4ae570df2aa259b2a4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04015d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000204630ed2534bf4fd1a7a1342c5c31c0735502c1a33e290b494731a208c023bd0d94b0bd8b419a4311fdcde709ed54525956d652f1c7a0049da4df36bdb9f524aa2a4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04015e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020c7004cf7dee4b0bc627be63359eb03a54b0a62b89d0af6a7501e3cf28126c576ec00071519a45cdc8ef5bbf109ceca3bfd85594ac6a0aed34a95f0f838a4c6182a4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04015f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020e3fa004d2589eb421a016b732a0d6c143a848a1c8bedf167048eb769b0fa82248aae6cbd53b2a43fce81a9e0e880e6898d44553147c54a5abd7dc5228d2274ed2a4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401600101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020ac929a0699be46f5aa9b3f6882dc4e9a0d47a88121b7e6be10d8099c8c5563a85707cbdbcad1f56abed1d202b9dfb9c7984290de1b05efae2df45d0e50e2752f2a4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401610101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020c156b0bca85a63c26a0dced8da84cb14c42a5d20279e59c3b756488e4b94882bda1dd7555778cb4f24141d34def48c1a6e43cea0f3784a21e7b367e42a09cbd32b4ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401620101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000206598cfb9e662a96c5c19541b16ec6596fa8db3b3d975daf83b5f8353acf0b1f05f7dafa529c7472d47b32de80fd454cb5117f3f6dce5c14c25b6948b5d66de7c2b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401630101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000204d19cef8be460f962d424df87b0b4ef731cdbae86f79dab11e1f9da6fbd385a0a0b7a234a1eeebafdfdedca088a40034f0ae91586e254ef175f41d93292dfc002b4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401640101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000203dcb8ab1babce5ed56e21b307e5083e95cc4af17199491fde01a05f68d695899fc48ca3ddb6c183e3deb4f4c8c56bcb83f9aabbcd4bd9a189a76c01da50cbc722b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401650101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020fc6640151c6c96175f52bbca3900da62a62c5295605a54e26b7c0193dd695769dae04c86109e15e1c655d97edcb3029b3260c1af6a59f4488c865b27feb4e6ee2b4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401660101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000208b256b9ab6870f3a05d4066bc2fc58a67b8fff2f81a11fea35ec0752ba3ec649f534e65eccb9bfbc1e7cb56e25e6cdcc8ff966516249635fb17dbd89813ffa042b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401670101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020588d6f4ba43b556cd7a07eeadfdb77706390c182aacbcab4b96032d8c67906766030d1e7053a8aabe2c8fe44bec4df0ad4ec6130467899f90aefc9d43bb80f962c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401680101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002000df91ecfabfffc99d37a117bef69da8c78a41819023331cdb16242faf26e4412696fa30728552bdb615d5c3f6c2bf1249a9e199e4362aae88064806349a36602c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401690101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000207282e0a9eb71caa53b762ca85d5fde29f764dfe3dfb386d3885868a4b0b187a558e3643d5cb560d8a97af5bf6c733ddb1e1766f280c1db2dc6b52ed3ae04aac72c4ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04016a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002068fbd5b6f63225c7507053d5e4c2c5f4df36f7dcc56fc78dcb3c459afd13d29daa13649f1218e4aef9317b876e4152bbbfa42e874167c8248708e3fc50163f772c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04016b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000206ae32f5a23a359f8236c408aee3a3362f19df3b0f0103a78d4d88db7888fca88df34890a7439a2f0ea002394e04c7925e8e40edc76ac7711754b45a30c5b5c972c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04016c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020c6be91db695c38570d23a8d839140fc8c74047e23397eba8712334809e00d0b0f6b48e5948d891103d477a4ac55f7ca7cf3b04cebbd4bc1a6706a1b87b14817d2c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04016d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020477cbb127eb2533b50b98a7ca7ff43f7c3eab4def18bfc58d610c0d9494de4702a884520dd628e04a57bd6f90c9639dc0da180aa5d888fad779c3311b3a654602d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04016e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000205bc291fc840e9ca5cf81abb270278913aa60e88859b53f1faec81fc969f53ad29acf192cac6b33d9bc53a123b8b8403d1efcb8bed0470cbab3648aa6b31e957b2d4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04016f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020abbf282afac89287cda920ec9513f68ec3a55666b0f17c12fb1e44bfe0b37db4393c68fbbf7d4cfd4e4c1c194f75d0ea803dfd43a197869e704394e3186a9d452d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401700101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000200980edc9ee622a5cf3577ece741f66ca71b363752bcda8b3ce8dd2c1131a15f325282b876a5e2cccae63c8ee5273c7e609249c93a77651b56ceda6c3705004502d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401710101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020b5b967909abda65f58506d9db559f55bb9615697d1e4c256877445ac0d1ddd8cbaff6cf10091f1fadbf7c68e9b39c1f0b674d85641984241745e97ae6df409a92d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401720101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000200f4304a3ae48166eb084abf7c7f68884d307277829926b9cb43c0655c365e85fb4dab36d5f3828645d3b3279261ffe931b47a1bbd14d22aa59ece3e6cf0f43992d4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401730101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020eb1bd3894bb810b7eebb50d52d12bbd6ef11763d7beddfcc7510dd0c9aa4aa427ad08fa3a63aa359ed7c2596382d926a0de61c1d2e346739c5d4b3ff944918222e4ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401740101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020f6e85468a2ec48482dac7b95986b54b2e2da766db6c545e632f2a619c09879631ed9fe8bc6b228aa3300a00573273848dd170b1c07770d83f56d5e2696aeaa8e2e4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401750101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002073b1f5c7c921acff83505a0e05b48af40d4d8dab9384ed46ee56abfd922d0804c031d30e38077c849412ecb96000fbabcaf0949ca4c7252f2bea8b50f0d755ed2e4ae75affff7f200700000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401760101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002056b26ed4d0f5ff9b1800d0f4f092ddbe27e95908e8d50fc442abc60942114de7fafe9aac9b83ed83504b9f36a45d9e7363f160d28740b66b5747ed1ccd712d1b2e4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401770101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020f3e884463d720267d67681ede8718d7a92687f0b6ebe13ecef7f34ef5ebca65e24bfdfcad86ac46dd219701ef0ebf4c7b94573941149a82a34145ae2aa03be092e4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401780101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000202faebb431b3b209f7b94fc0524eff0e03667eea44b1c45b30d67f671614aa6b17a9c63fd2ef583d1f94b2b489074cac8c16de8292a3ef8b11e170de2859656a72e4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0401790101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020038be7f5b01d1924057820362779c175989c9efa13c9c14746f69d4848525ca342c2b2f25a0f8df8296ff0f4f5cfa4b9488ef17917e01b6e4bdc2c96e7b8864c2f4ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04017a0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002003bf2d6c7ca04b70b2545473e3dbc437289c90faf5690bfaeac39170305c99f87ff22f538cf08a527f39f015bc380fd890bef5f066e2f86fe150c442eb069b4d2f4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04017b0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020fa7d81a684870f55aa26ae51a935b2da2882af161a8deb08331ee2000466afbe94f77126b8a8600d6a5eb58b817b18a1ede25a8ab38f26b9ddb8f653fe0628e52f4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04017c0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020eb3d67d4c8654b4a837a7ee2dbcc5561f1fcb57a58a819e17c4841ef9f0e851c8f7fc3bfcf363e3ce275268f714a463e9161a8f7d9d770279c289b34b4ae5a792f4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04017d0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020868b83f09ceb1ff84689c608da11fb93ba8c71a14ac89ba274277a39f616b28f206d3ed0c8970241bd417e0525604adba077e1cf5cc22f251ea8f0cee6303d092f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04017e0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000200e2f44c66a95c1ed68f1ad84577971e6fa03c48296aff607d19c8275807781d5226116b282507e43d3fff4eb78629f9a5d07920ed45a30e414c95d611d3a83c62f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff04017f0101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000208c4f07cdeb4e7269de2a7e7f305f363ff43fcf867ad0749374289f9fd079f56054afbcd2a6842515ed26522d2c100c4b3d8f98aee64bd8eb219f50504b3640ba304ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050280000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020d828fbb483c792800ec9933ce34fe9558155853eed48e54bd4371d3e124431ca976441b7883ede4a75f758a803fcf42c6e5216d5a2c5c0b57bef2bdac584a83c304ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050281000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002081e2b545c6529ed57196399af39a0825fbd4dd98bfd6783f1c1e62da5441269beeea1c1a001c3915cd2c34251d1f20616a69f45a1416903a4a1d7fdda9561f16304ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050282000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000201501eb397159ccac9a18d1bd046421e38e87be69ca608222998f9df57c4f2ee79f526c42c1b96896a92f588fe1a39ed9586dff5b8cd98754758bb5d2ebf31b33304ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050283000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020900764f217d599c1683d8372315444982787985bd68acee94028b6c17b6cf33ae52a2fbdf969fc769b12c7dbb67fc569585ee9c27b86381fa97368efcf302931304ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050284000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000201c352a1c742404d36ebccaa5489ed5b77ad3d557689c987317abd041bff7c5844755f74559bdf5c69b6afec728fc20f0f401411f99673b2b888bbb924afcc780304ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050285000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000204e511fba1c471f7a232951675ae676a5d6137154f5d6a91f885c5f51c4d7951573145f575d9a1db904f60c2e694671ee1629c043bbf8ab3b1fc3b3aee9aaf2cb314ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050286000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020a5cdb157a807e2336db4d7941b09539c7ab169c0d70064eb51540bcad2c00bbe336be232f3b1bb58dae830739a48f2fc9770bf0329c162aa342c45f445806b14314ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050287000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020149d0e4d68e9bf039219c27536ef0dde92cf952356c98252e9499b03cd60a42b0dca28718fe9613e01e869b5fe02d5c12f6112faa31f79e7148b9135444bafb3314ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050288000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000207ef9b4be3630980d9e0fc1b4d96428ce2175ff343b2370daf8ad438946c1f57d3cba1e44976dbfc3cd1b5d5229553bcc7b5fc702ba03826de82bcbe8f0097a5d314ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050289000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020d4a756cdc59e307b84d22c72f30e7d25b615558b64bfa40f5372777188fc3fd4cd2376177c6c67890aa6d80155b33cc8d36859e0e10e4843d4aca38c1fb42b16314ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05028a000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020439c0c7b5f8b1d1e2d8c319ce1f5ab2995b2d1adb1c3203a60c171f454c4ffeb33c9eae3efab8faa26c3193dc27bce668ade8811f10268d015b3ddd75ff1b55f314ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05028b000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020805fc50f9fe75f6dced81924a314b15c0875648974dab612eae3d644bb3b37115b3bf928ed9a9bc60809865393ab80b439425a66a79634cba6e9e59bdb09f6cf324ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05028c000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000002045df7579e750da19f922f43aa3a21e2da249525ab8cfccd9b71f51c6a1c30bb0856398589407919bd9c5cc3d8c0cecdfc5b551e9f12a7041065776b692cb2189324ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05028d000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000206eaf4408f46ca6620a3f0fce1bdec4e44c9d1b19d7295af7b6467f4559274083e6aafd20ed380273edcfbf215f5bc3506c11aef3db8342ef614e776e65615f05324ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05028e000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000020cc3e9b49a553bbe5de4d0e424b1a8a9912e5a3190cd940a5103fb4316d887d9d85f82f10085c76231997d4c41a869e4487c6c3f93161e3a28b803a7bde147cac324ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05028f000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030719985e454f387b55e528d20487dc66bcc58965a603473d75b72dc476931b479fac6fffb125d30f4a97de9a74de10a74d3737d36beb426a0cc262d10e625b19c324ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050290000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000300fca9b1dc3a5329cd5520ba4bc68e4534de342b5c84004333d48a7d2890f003782accb5662062fae20db45854f43c86ba45c83795006253e779b806505b4b78c324ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050291000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000300f0985caf9cbf9387360c4d1d0806cd9871358d9efa2f42466799655c3da681c06a83033f35c0eea2ea8ebb02836b37d0fb0c086dd97ff1fa088547e6b7cbe2a334ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050292000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030bd0e4af3c064855f33bdcc8ec995d6cf4651c810c06eaf210138ef8bf60b156a65eb202c4d0ace331468298f950bda5bfd061f26d6f1af9be0a428ebd075599f334ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050293000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030e498621487632eb22abe8e5218ce90a59262bf8305a17ea4c8ae1747951fe7dc6c2d374f1c83482a8a0c1e687850851b3bf6b287d28954956b39a094a6e59694334ae75affff7f200500000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050294000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030ef8197ae7579a94ff6b7522bdc509d2c416933a748b12725ce358f9b4c98ee1991240da3f5025ef164df38d62dbc2da3beb247dd6def9424d653ae18a0199c36334ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050295000101ffffffff0200203d88792d00001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030788a115cf1a5a4861afde79db1a31297aae43bd0696f98a41a3e2d3254f315a37e0af1bff7f6e29b6183838496d2e40ef183564aff9befecf8623a536178e1ea334ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050296000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030aab55d9a6153fe4932e045b83f2f794aa95f491c665134653b92aeb2eae0d0384b99b8a2742a978d92df75a00f1355eb2b27b7d03ee61636541fc3f958f8f8d9334ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050297000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000308ac6ef982e83f704f2c57fb04d599ad7bcb7547fb1c1f14c50e7a75b0ba9603a8d3efaec9592d29b5f5347a18ca39766ca97fff0c585f54711c6d24ec6bb5253344ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050298000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003028cd3d482c7ffd5dbf4f01a665cd9fc920ef311095136121556e4f8e77159de9f4f5f365b53d69d9cfecaac4b86bc02d653152c04803d77192500261696fd958344ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff050299000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030e702ff09007fbe96b21ad507417ff969a8c32c8300617660d0ae9507d09218c81e46c0cf839fac82b518f5d618dda53a7f3f80928994d3e4e69fc8a12113ab04344ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05029a000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003085230bda07424c8f0ee7f85cbe4ccdb412cd003a386b387ce237b70f687169070abb26eaec2ff325310da247cd3ffc0af289d648194be1d0f180a29e01791749344ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05029b000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030b25ee9e478caf1c229fee8e2cf5a9f5f461e05da8d4e67ed58c2b8944463d6ac22bae5eee335ddb91c57b5ebf964c5e159f0c4523c59072be6be09e6b939e794344ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05029c000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003088b7b42b02d905912aa865682e1270b8dc66e4381ed89c98ab61a44d66d83fa8f5bcd3140242fce264438ee9f4499d8b0370d264ebc4fe7107d7b4c14168874e344ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05029d000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030cb63782d992cee585134d8e1ba1227aacc63564acd1228a1cd055d657fb5f0e30fb677949379d150f0f4cf2d3243979e05af4738a4c32c058d8e1d953f4d66f8354ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05029e000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000309273a0fd93f2108e74733f1a5600cd81da1e105ce79c05924554636045b4018c01b111aad61fa94aeec3222ccae5421532a840ed002212b509c608277ebac786354ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff05029f000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030c23061d78601e1eccb376df69cdd1e1ca210071d81c1f1452c60013cebe12ab7a448021abc938b1d6d504024c48dbeb8bcc971ac9f8577f67a761593c01ea931354ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a0000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000308adfd984e743a7d2b3f9a817e0786ee25c7ba09bf2d8e22a50740fb4ccce87f699e0b979d5da4308544d363d6d134b69900aa09ea666ed61e0378117363e104c354ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a1000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000307f7c7fb53abb2348b5956b885e6590e7357dc5c461dc79f649f31a2d80cca32fa3974a50a6e9dc54b151b482d7aee5ccd79ee2ab6cb9d7ae76d68f6d1f485c36354ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a2000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030628204ee97680cf35da64baa4c7839b98d065f7880165602219574997b7f1c33ba38208b65b89b56fdc0e2aba949ca9c73099dc491b7269bee1921cc0b657c3a354ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a3000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030c28169a3ba4cd273e0efc8732024a849d31d52d9ee44599a1feb279443fdfad7e8f8de671a2faa5f4b94f5f219870e810ddd25112143cc4b8c6c4e3940bfe21a364ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a4000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000307805b42c0c49c66c2005cd3a59572265646728c457fde1230b7d00d3fc49ef134a222a887b05db5558501762836e4290e80ba0eeaa962b2234280929ccb3d4a1364ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a5000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003026050b4d8db4ca80b0b21d1dd5f2f2e1f8376b7a452f5eb308e2d0cb7786a77064082637d3253e02e884fab33b9588cd38acc395be6c104f9e7918821a457196364ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a6000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000309cae866d3a2282534fb67df9930bf8c18e65e6400e8318c33b1ea2fc9d7de2da0f857604d5ca34ffa543e8dae8c121832b0946ce4d76d176e71fb902790a1b16364ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a7000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003054d6bf9bbe3a759efda7fa5d55ea8bb0d7b8ac2759d9b7d14dd48b7b0117606e64f44c30fe0706640a377787a4f679cb7619103a5512f6b58b310e645fcf16d5364ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a8000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003041d023336a9a7e6459741e9365ee341479e25efd26477ff60b46a068b6d1e0d7653b1e42765d3246f6e1913c79f2d12ab4ca903fbc7f5a12b8c0e59d85de667f364ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502a9000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003056d1cc7efea99b3b6b6625e4945f8e662de89cfad9f7793df74985770b2ec8e929566c1f13e58a0a495f3ea311adb4ed25d2f0ac5e3814010de165986787de5b374ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502aa000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000307a3d15781152f884aeabe012a2f7575de0394915709b391f420a0ffb54f6d36267b4967bfa95e94f43d7e6b31a8501ba604c0106fbe1da104638f924cf86b4e6374ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ab000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003010cb2ee35ae5677167c2b50d1da81663611b527d91399f7e5a1cd1bcfdff1102f318ca003befd0053cb481e39efd57c5961f3e4dc6eb2321f53286485d511a70374ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ac000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030fc1c31bda2f5b04352a79de6386caf339bf69a3b94e750233b01f313657bef257a4aff50bdd8380a79fb52670f16c18103afbf05b5532911471e79c79c72a86c374ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ad000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003064afdb03e5eccb8184d0bfa7ef8cca45ae38279bdda254173ccb6aa24e27e82dd71f1fbf8ed4c75682996acad85006737c4c47c8d9aa6624aac9ad5cb2cdcf78374ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ae000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030aebec63901206c2a64ee0e8ccab520045d350749de6d944ddcb7b790c3eacaaad53daae312806b61022a24d1dc88473bd65b3f6e95b4ec441673bbe962598b36374ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502af000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003022da1f2e5acc898b29266a6df0891c6c2326035a02b7e26a0e892df18716864f809696a8f6d2be8f58e93d1dca43e33aab9e8def80d82a6a23c670518cbb06b1384ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b0000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000306c860f93d926f9c9ccef0b10f2eb4f95b82457e8a26abcf2ca5bbdfe2fa49d2e59d7c1c7654bed1b347fbdd54346d3297f9b16f9481a9ed5850771710c100898384ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b1000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003028545249173292d951e828c21541b3a71de41870b0eb7214afac5c3f072f4cdd1353bbdc7a0b2ccf0f51d0f429a9676e4e583c1d89c4918e6c26e450befedc5c384ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b2000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030255fa6d861a8c30e1f3e0076d231f611ae23fa8e41beb4422bc350b5ca47b323dc693308f3879237b4e1b405410533111c31efc08b3bb242eb293b28e0085f4d384ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b3000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030bb137a01ee25cada43c29d10a25c4625025ae301bf7060432d87e2a4c85523d754d28d49189617ae8335675714e6c7c96c77468aba41575f20c1e85646db1c4b384ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b4000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030693947bd89787196a6ab30f40c38a2d98937655caea8ebe61700d3c1465b5c098656b03ed899b9031f3e8383e641403d7d0c01db8ee34480e8ae81d52d41a2d9384ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b5000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003097e33a83afd78678d686707fd76605b21c8a52f7251b3ff56994c2648b96edebb0de9f4e3d48910ec779245734cd280b35b1a036eb0b562b1c105e383631be63394ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b6000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030d78b64231fbc875e9ceccda95a64828a7af148047e364db0dc395e57fde3da4f8583460772359aacaa0eb4935162fdb43b539a2f0f566c92e5fe9782aaf53106394ae75affff7f200500000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b7000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000303a48e2b4de856037a9b835ffd895d8c9dcb0ace941dd9275b015e0b3b9e80ddf8a0a731dc587bed23dca20bac75795288d8dc1870b9acec2e239f2fae2621792394ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b8000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030e88c1d640cdbd4cdbf12870df51969e0d354bca333ed93fc2f57f5795014839b668ac758f62959acfc6b80db3562552b648a634f7c4d2b3b4c1c53961924bb4e394ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502b9000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030a32bb197b8ac1a61928da7c02f68a92756085534baeb8bdfaa6d065c5b0bb6487b0b322e695b59eea57e35fbbbf45ef065786a94b3916075dd232534f1cabdd4394ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ba000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000305b4e6a811da62ddf7182e07275eb6c40a2438f29b53e71f2b2c3b0c29dd60ca5af40b8f922bf0397dcbfb875403da906c0c40022a42cd6d469df3c77464faf9b394ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502bb000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000300afbebd88ef39d68c49947009829eb6dcb4c7e21891b2663658fc38c993bddc5e15efee5b076fff4a7f14c807acf3ff1f4b15b20ac6922202d29a17007b7a0083a4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502bc000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030b7a84d256ebae100836ce7a0d48e4bfbdc4c4d1dd8249b771bc16989b42bddd562b3bd30f926aa46700451aee013eb71e4d025f5d99b08b3467a413681074fa03a4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502bd000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030e5ab8f0b0d3ce14a4da047d699a3dedde63bcf54d10a4f6353bf3e86746f49e34eb940b1e19d2c70b6f271131b861b84559e22971122375fb4a2d925351abbd03a4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502be000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030fde5cc1dd856569772f86309d2107aa1d198d6e28d4120d492b4431e103680b3985fb6ddd770245132cfe8aace771c50a9b32fc4ce99ee542ac1fb7fe869dbb33a4ae75affff7f200500000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502bf000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000306cc5717f04eb02103e7bb42fa5fea1cc610a685526e345afd956db031774ec64fc3933f54a84d41f6313d86f9a089b49294e69c5c3e2c32b8360dd4623cd29b23a4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c0000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030fb07de88eb8139ba0541e8da4668af9cbf73d443ef6a7c65bb3396b3d7059329558fe844dcec51556b37c48e5753005400ec57559876d4d66a796c8a1341ba823a4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c1000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030042bfc293aa926aebd5bf2fda24830c9ceca5b28a0e753980d5dbc98e0621763fac2c3745960a97fc07997190021ed99ae6689e121b5f4ad1d2d1b56d68652653b4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c2000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000303b919244ed96865b7270231d5ae5b2e8b4815caadc0e7f877a546f6bff70569294367983f4543a46c57ab507e2d027b682353d9132cc6edfbd089dc6275b9ae63b4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c3000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030cb8a00790d10922b8ae8ff0556b6d4c505a956b5c8782e8292640b2ed5d3ece190316e67b02d67d70958429ae177ef262008f92aa5d0e6e5f735b929e5c1b8c03b4ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c4000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000305e5b26f0fabe23852e70dfc470469555bb36794e2c63ca662d0d403b86e2545f9533d6cbb5f35e76e002cea279f4e4e8fe1af1926a989d00e127f5c15978246b3b4ae75affff7f200500000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c5000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030ceb1ba85f158f3bc77eb3e8fa9e8780ab14575acf4f294486d9f9c532b3ae14b7164b3697c531927572aea4fa63de2879aed2a00b07213043f4712abf902d9683b4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c6000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003075f42da305dff294cef09c25c2a06d28d96c0c8d002050760fb4d94d7a75385fb68897bb13e0a0ebd18a3f92a76f81965c2e81bdcc20f92b1a8d8bc9899a15693b4ae75affff7f200400000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c7000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030f74531e959f498656396c5346557bad3d98203d1691ab96a7593e219646f5336569c73485915f33ef3c6795dc749c32efe5c7cf06691138dbeefd3c397e232f63c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c8000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000309c23129a6e6ad0088ad842077bb1ff08feec092c468d4aca9b3b8f332a2244355537689b9402606742880c99467d80a3011e5d216bf1935cb620e86073dafbba3c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502c9000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030e770e9a2c7b22168060c12e023add62124608eb062c674511cb44c4271bb8ce61a4755f38b40258a403d609ea254780e21b2b8f7c46e4b768dda2a017bec6a6c3c4ae75affff7f200500000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ca000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030192b89e38aa887fc51e0bcff29083cad1b89a3f28cb4a287d0ad3f57bd81a6213103241fc430bbd2884612603b234a0bc3b186ba43100f6111a8883b36c547cc3c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502cb000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003026eb8f8728cb9e7adb1734810d64569d1ce0adacd69c0335c378102e0257cc4e251479ff104d6e2be0cbaa15ca4ab0b32f4edf4173c3ca7c9a1905dabd9edec43c4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502cc000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030823a8ab35f7017be99737b02acf3cd163f1baa9b81f1393d9b11bae062fd49924850edd5901cd508b04186bb25cb5c77506952512d21538bdcb53524154d36503c4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502cd000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003012f89e1cb63a667b21401ccea764012872c45f83f4982aaea43f0f2bd26df0a18966be6e29df64a1c010f885b07766c5e8503d5fbc40d145c765fb78cc97fbb93d4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ce000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030a9f37027c53902104ad251d5697719e0d3da7b31ac18a1c40ead63d5c96a91505168b8f052c9366c58a36c3bf5a8f1e51f39b0400e90f8f068a7b8be2e26d8a03d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502cf000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000306253d2f5434249d12e109f084adab1bbff0aa3c78042342a4b293a19adb95d932ed07d4f9ee6671da5c5336971e9df635cfce248b619bee91489e95aaa3d7fe83d4ae75affff7f200500000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d0000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030d07a18a83b7d3e99b7854e49995bc183c84ca1288294df0428ef0698625312f62cfdc402430c073c23aee439f8c867da53b2eb505a40d82fc68c4657dd2d01e13d4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d1000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030859e58a84653c2ed6c31c592f15fbabbb1a7e0625e4599e985049802aa60f375eece4998904520b6b53bd380d6fb41567ef59e39a392b3116c7ba42635679eb13d4ae75affff7f200300000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d2000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000308e8de5b85051cf7fdd8fe03792ac99e6bf2f063e1e59dddb6170cd237dc37884ea4a403a8d189c98280d2e2a3c9152594b9a0314a951b08c4fbcd11c281cf0de3d4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d3000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000304e1115408da4efea8e7378a0866743c31bdf593b15029a7cf339705f4d0db02e591cbc1a4fcc14478fc218fac1446ba588df192eade9e7f030d654232cf2fdd03e4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d4000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030b9efe13174a52ccb252dee322370861809d5cebda096fa86839426cfc3f45cdecd16510070366fcdd6bed19d4bd0be327bdd1fbeb0fa1bd8bac5b454227e079e3e4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d5000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000304580d9ee64c9c0b760de0069a0842ea64b0306c65d1ad6751bb840880f657e7758b7d15a90d881b159f31f7304d82a7512ff88d90f16501296f57d88ae4449943e4ae75affff7f200400000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d6000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003027bf82a90a420d2dbd81b5c19707090737dc56a0a049ac84b009e3ebcec72e169c8baea43ccce4ee6af92d8b857674fc667015c460e13452208b7d09c73137f73e4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d7000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030995039534d1fdbbac86e641ae32129d56a9e4d2ec1739fbc1942a0f3c997d02d0dad8fe0de448c110669a728d968c66b957b78a667099a5189d8efc51541ffb93e4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d8000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000304768a3e432d80b397e744660c65c26f2d49c2cf4cbfb6ee094ffadbf18ab1ff37ce6c8011ed9fc8abb2d6d98cd1eab86470f631ac51dd9416ae1799aa0a491183e4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502d9000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003036f2606284005abe052fa2447ae7d8b288cb7eea1e723e2d9b468443371d97628d86ae8ec7e9a1376300035c2959e1d81f87e015838ca8d682c2f1eabefdcf193f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502da000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000302e32c2c2ce79019058871dbf788c87615d37a488f23f1425b068588befdf98494638b041ce64dab4df93ea1bbae55fa9599d19ede54fdd79755379e263eec7ff3f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502db000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030b0d281d6fa217185a101bdb7c078a7bc3089758b116e6485f473283b2c63762f77cbee33d997369f5553f3be22ac56556e9204633730abc3f47ec2512da1e1fc3f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502dc000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030061d4c6cacd1374a69f918c684a7dd57a8ee7ed683450b9878915ea16ebe31aed0ff5e40dac29df059a5dde0ab2316e702b589b1ac703e43300c3a94648f0b513f4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502dd000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000307d46e466624ba6d72f6a2d14d488296f71370995eaebb4e379248927d4905e9d0eab96c964fa9c16764929e734f497a36a56d3ad361f5afdcf08cb55dc03ba753f4ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502de000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030fb4f097f10e9f3d39d6388b499c8b6836ded207c9ceb39af5c66aa34fac7fcbf7e98fcd8ff229ede4e78d29e388e252a6603cb7fe2433a07da69069d636487b83f4ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502df000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003067c379f7325051e165a989ee9958cf12a696a56900c888763c6821f3f6d63351fc3afc2548cae1e2b3f450c092bb9ba2ff868aadd254078975e7bf020eb2d409404ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e0000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003021af0519f8d3eb6e42473d66d175c8e8d6661e5415f71e82d06a762fba40bee3bddfff5200cfaf0fa1fd1b35bf7266e3216be329506df9943d8d686b6721e9d9404ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e1000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030c25642bac4a00d81dc3bc69384802a25028fac447fbedd4a553d8303d8c638348ea59fb37ece037c6718e393aaf1ab16a89499d9349e19eecbb8f9bd0aac748f404ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e2000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030df1689cefcecab35774629b83eb5b20884715f8c5bf2eb91771fda9075803405c43fd8902c131b167637b0064c4757e77e450d9f868f5f9e101e4deacae1dbb6404ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e3000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030bb802914b1a74b4ae3d0e72e8cce56f19672d797ec1f92aca7ac111f589903407b172489c5d534624486077eddfc7ed2a9ca329e1d5afdb335b074e439dd6770404ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e4000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030c4ba399044843eddffe4c12c2265759fda4fe86e27c347a7e5ca9dbf0bb80f1bfdfbdc260644b48417db682b79b5ac9b1db5fb407d69e0212809ea9336f4823a404ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e5000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030044ade43f8852730a33a64bff5580b54bb0fa04f7b9543bda780f05c93f0bf9d733b99746ee70646479cde411fd45dae66a43c7e3b69477c659e7d6bc02c1a4c414ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e6000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030af2990a8f916d45bd452e00e304dc896c778edc117320dc346b9c72b3177e463dcaef26a599b3a5cd11e73843a8f9a584a3cfc2a7b3792ff7874a0c99fcf6ed4414ae75affff7f200500000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e7000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000301d20eae66c634f7accf452dd8d85d63315a730a618af17e02503130deb1eaf89ecdcf65a15ae59b79a34cc646af05ca4248ee339ab25c645f447af7fbd8fe3a3414ae75affff7f200400000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e8000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030ecf2a94122e084a170fc3a54174ba94e1ddee395e78986cee2913a22d5536867c4f166844a81190b293ffd06a9789ea7b66802e1ca8388ffd5a83a5879e1459b414ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502e9000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "000000307a6f4fb010126072560c7347c196b5c14b9a40857ca6be383cf53e61036f974145c4f1bf971cb53035e032e2d784c1da0e211364fc9351b7977b4ccf48b5fb1f414ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ea000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030224e0b4dc44b3c1928e97c721659ec3c78f5d3ad8d4888170c762ae7575ccf97115736c4113735ac0f62718248620ba7f95ca93af71b8cfa45d2a1df755176ce414ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502eb000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030c9ce894dd7fcd7f69927ade2d0ed24c070922aa43c2708aa8b1323136f0d4ac91f09e0d3b7bc86448f56bbb91da01b1f6c6f1a69c8f8c8b7243500ad587ce2ab424ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ec000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003002e570af42a6662567849e757f6b4661fb534ea6c9a0a34e4dca582879076cd13fef800f3fd29f1cc70a947e55520a6dba4ceaa8a7cd72fbc89e46c7b485f4d0424ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ed000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030f275432333a1df35e862e716684391f1a8aaef63b8994a7b5c58231ad52d6c46a5ea9d0163a939caeed2ce52cc1de19fe3cd1bb064b3d112052a19ebf57d7579424ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ee000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "00000030d09bfefa5afc86cf4344112ba370a935b1ab67fdcbef1b693402d0dae6176374301bcfdd191bbd6fdf4c72ddeda4347657eae25a6811fb1026e0139126565be6424ae75affff7f200200000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502ef000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003024089486146412ddb9d82e965474a41dd1362e4353f43409ec8de8d92f7aa9fecd4592844daec828f91fe58c1e1fde74ffce76c43cf3e78bea062d8240ce4bd9424ae75affff7f200000000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502f0000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003078f5256b6b64733186f7d72f99098f7fc74bd591dd4e978b818ff45b60c3f21030dd83d58a60c832ba3b439fb46347aeed5abcec290f85eb97b8084981e1f998424ae75affff7f200100000001020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502f1000101ffffffff0200901ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000", + "0000003012855267c2e62958758e9679dd13446a66b3528c89ab346fbdae093289d2cef7bf69d7e31f8235f8977f191c2c628da08740bbb573afa0354f76176599862e9b434ae75affff7f200200000002020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502f2000101ffffffff0258a11ec4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ed9b390cc1f9db76f50e67dd54b26c6f9069795cf80cff23e84ab9b40a74c38f7a01200000000000000000000000000000000000000000000000000000000000000000000000000200000001b40e4032e98eaddd01559da7cf829651ce78602c8bed0c8eb96d74d1a7a9db71000000006a473044022064468ff0f3e85d9da49b2e391343d78e7415fb4ed2250bf781a5655fcb4df48002202e17027714cdb8d95ee55b009f0b2fef5ded731d4ae2b58b7cd965a0e45bf14501210227d85ba011276cf25b51df6a188b75e604b38770a462b2d0e9fb2fc839ef5d3ffeffffff02a88e724e180900001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0080ca3961240000160014829777b472568c0e6f66facc4806a8187632ab57f1000000", + "000000306d0063ca8274bb91912f3cd04fe25b8fba253fcd3519c72896ba4be072ea42d05a5a25ba257d29f14814544396a9ea4aed3ace477c853dedbdfe633b1d03b8be434ae75affff7f200100000004020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff0502f3000101ffffffff02404f1fc4bc1600001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0000000000000000266a24aa21a9ed97a64c2639d1501564af9dec11b81684296f2fcb2ea92ced93b64702d2ab754c0120000000000000000000000000000000000000000000000000000000000000000000000000020000000001012633786c580a4fe16b86ec566fe3139f9d195403946ad69acd002046b308acda0100000000feffffff02c094724e180900001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac00e057eb481b0000160014bf4a2771c7a20ac673b0d1429c5306f9d8869457024730440220426ebd1dcad0c65dd48c3c37a5a15f8444abddff1f994894971ee97cbe11c9800220485c64b4395792f85f96f5f30c1b9216b8c80dcfe3c95c5d436c6e10fe20e17f0121025e305e0d506beb8c8054179707ee58a15f83a82cd60c96c4d16486f655d0cacbf2000000020000000001011228073484cb422e7a13ecd49b4e4df0ab38b7e391a8b6ee17e2d0a75db9f2970100000000feffffff02c034e59c30120000160014759c853a54b5902b3669d127523f5f3b9c8574b100a0724e180900001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88ac0247304402203a21da378277985c1af93f25161950dcd77b2a9ea2036e1f99861ba7b53e6b86022010077897068cbb52230f1564b8eaccf2ca71d628458e8cfdb71e0973db57f80101210382f07d2f3b41ee165bec9827296de2204ea1d9a8445b7ad49b858c98e9883b64f200000002000000000101569f2a4e192df3aced1463a5175d300c6d37a63496778eaff7106ee2b2acddb30000000000feffffff024067a4d4e80000001976a9142b4569203694fc997e13f2c0a1383b9e16c77a0d88acc02440c84711000016001402b1a067eb4c88ab6d5d5e367459bae1340fd91f024730440220218b6dd0302088b9a9fe516cf7f2eed5f2b6027d566ba5b8533b495cdc67aa8d02201d181c80c03d5ebb2034eea23611bd6ee1a730d8a81aacdf15fceeae31dbec810121023630a0eba24b2dfc7ee0b86a897cbd40c4f55fdb7c5718c20b24e1f1b4963fe2f2000000" ], "mocktime": 1525107225, "stats": [ @@ -251,7 +251,7 @@ "avgfee": 0, "avgfeerate": 0, "avgtxsize": 0, - "blockhash": "34b6c8f7b306a283eecbebf700ccd4db55016b1e9f52419374ae9c5c71bdc280", + "blockhash": "f7ced2893209aebd6f34ab898c52b3666a4413dd79968e755829e6c267528512", "feerate_percentiles": [ 0, 0, @@ -288,7 +288,7 @@ "avgfee": 4440, "avgfeerate": 20, "avgtxsize": 222, - "blockhash": "3d8f7053caf61badff2ea3ac052b21e5c309f7816793ef084211ca5def0e72bd", + "blockhash": "d042ea72e04bba9628c71935cd3f25ba8f5be24fd03c2f9191bb7482ca63006d", "feerate_percentiles": [ 20, 20, @@ -325,7 +325,7 @@ "avgfee": 16320, "avgfeerate": 113, "avgtxsize": 225, - "blockhash": "5e141c66bdb43883402954465614eba8f45ea5d81ad0f1a893789127fa227217", + "blockhash": "452be0bdde2d0d6bbcfb4a351dad10a479a216af53a14169ddae1734b1cb8872", "feerate_percentiles": [ 20, 20, diff --git a/test/functional/feature_block.py b/test/functional/feature_block.py index a7be34bf8..a6bedd465 100755 --- a/test/functional/feature_block.py +++ b/test/functional/feature_block.py @@ -589,6 +589,7 @@ class FullBlockTest(BitcoinTestFramework): height = self.block_heights[self.tip.sha256] + 1 coinbase = create_coinbase(height, self.coinbase_pubkey) b44 = CBlock() + b44.nVersion = 0x620004 b44.nTime = self.tip.nTime + 1 b44.hashPrevBlock = self.tip.sha256 b44.nBits = 0x207fffff @@ -603,6 +604,7 @@ class FullBlockTest(BitcoinTestFramework): self.log.info("Reject a block with a non-coinbase as the first tx") non_coinbase = self.create_tx(out[15], 0, 1) b45 = CBlock() + b45.nVersion = 0x620004 b45.nTime = self.tip.nTime + 1 b45.hashPrevBlock = self.tip.sha256 b45.nBits = 0x207fffff @@ -618,6 +620,7 @@ class FullBlockTest(BitcoinTestFramework): self.log.info("Reject a block with no transactions") self.move_tip(44) b46 = CBlock() + b46.nVersion = 0x620004 b46.nTime = b44.nTime + 1 b46.hashPrevBlock = b44.sha256 b46.nBits = 0x207fffff @@ -634,7 +637,7 @@ class FullBlockTest(BitcoinTestFramework): self.move_tip(44) b47 = self.next_block(47) target = uint256_from_compact(b47.nBits) - while b47.sha256 <= target: + while b47.scrypt256 <= target: # Rehash nonces until an invalid too-high-hash block is found. b47.nNonce += 1 b47.rehash() diff --git a/test/functional/feature_signet.py b/test/functional/feature_signet.py index 96c581ded..413946d6e 100755 --- a/test/functional/feature_signet.py +++ b/test/functional/feature_signet.py @@ -9,19 +9,7 @@ from decimal import Decimal from test_framework.test_framework import BitcoinTestFramework from test_framework.util import assert_equal -signet_blocks = [ - '00000020f61eee3b63a380a477a063af32b2bbc97c9ff9f01f2c4225e973988108000000f575c83235984e7dc4afc1f30944c170462e84437ab6f2d52e16878a79e4678bd1914d5fae77031eccf4070001010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff025151feffffff0200f2052a010000001600149243f727dd5343293eb83174324019ec16c2630f0000000000000000776a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf94c4fecc7daa2490047304402205e423a8754336ca99dbe16509b877ef1bf98d008836c725005b3c787c41ebe46022047246e4467ad7cc7f1ad98662afcaf14c115e0095a227c7b05c5182591c23e7e01000120000000000000000000000000000000000000000000000000000000000000000000000000', - '00000020533b53ded9bff4adc94101d32400a144c54edc5ed492a3b26c63b2d686000000b38fef50592017cfafbcab88eb3d9cf50b2c801711cad8299495d26df5e54812e7914d5fae77031ecfdd0b0001010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff025251feffffff0200f2052a01000000160014fd09839740f0e0b4fc6d5e2527e4022aa9b89dfa0000000000000000776a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf94c4fecc7daa24900473044022031d64a1692cdad1fc0ced69838169fe19ae01be524d831b95fcf5ea4e6541c3c02204f9dea0801df8b4d0cd0857c62ab35c6c25cc47c930630dc7fe723531daa3e9b01000120000000000000000000000000000000000000000000000000000000000000000000000000', - '000000202960f3752f0bfa8858a3e333294aedc7808025e868c9dc03e71d88bb320000007765fcd3d5b4966beb338bba2675dc2cf2ad28d4ad1d83bdb6f286e7e27ac1f807924d5fae77031e81d60b0001010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff025351feffffff0200f2052a010000001600141e5fb426042692ae0e87c070e78c39307a5661c20000000000000000776a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf94c4fecc7daa2490047304402205de93694763a42954865bcf1540cb82958bc62d0ec4eee02070fb7937cd037f4022067f333753bce47b10bc25eb6e1f311482e994c862a7e0b2d41ab1c8679fd1b1101000120000000000000000000000000000000000000000000000000000000000000000000000000', - '00000020b06443a13ae1d3d50faef5ecad38c6818194dc46abca3e972e2aacdae800000069a5829097e80fee00ac49a56ea9f82d741a6af84d32b3bc455cf31871e2a8ac27924d5fae77031e9c91050001010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff025451feffffff0200f2052a0100000016001430db2f8225dcf7751361ab38735de08190318cb70000000000000000776a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf94c4fecc7daa2490047304402200936f5f9872f6df5dd242026ad52241a68423f7f682e79169a8d85a374eab9b802202cd2979c48b321b3453e65e8f92460db3fca93cbea8539b450c959f4fbe630c601000120000000000000000000000000000000000000000000000000000000000000000000000000', - '000000207ed403758a4f228a1939418a155e2ebd4ae6b26e5ffd0ae433123f7694010000542e80b609c5bc58af5bdf492e26d4f60cd43a3966c2e063c50444c29b3757a636924d5fae77031ee8601d0001010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff025551feffffff0200f2052a01000000160014edc207e014df34fa3885dff97d1129d356e1186a0000000000000000776a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf94c4fecc7daa24900473044022021a3656609f85a66a2c5672ed9322c2158d57251040d2716ed202a1fe14f0c12022057d68bc6611f7a9424a7e00bbf3e27e6ae6b096f60bac624a094bc97a59aa1ff01000120000000000000000000000000000000000000000000000000000000000000000000000000', - '000000205bea0a88d1422c3df08d766ad72df95084d0700e6f873b75dd4e986c7703000002b57516d33ed60c2bdd9f93d6d5614083324c837e68e5ba6e04287a7285633585924d5fae77031ed171960001010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff025651feffffff0200f2052a010000001600143ae612599cf96f2442ce572633e0251116eaa52f0000000000000000776a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf94c4fecc7daa24900473044022059a7c54de76bfdbb1dd44c78ea2dbd2bb4e97f4abad38965f41e76433e56423c022054bf17f04fe17415c0141f60eebd2b839200f574d8ad8d55a0917b92b0eb913401000120000000000000000000000000000000000000000000000000000000000000000000000000', - '00000020daf3b60d374b19476461f97540498dcfa2eb7016238ec6b1d022f82fb60100007a7ae65b53cb988c2ec92d2384996713821d5645ffe61c9acea60da75cd5edfa1a944d5fae77031e9dbb050001010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff025751feffffff0200f2052a01000000160014ef2dceae02e35f8137de76768ae3345d99ca68860000000000000000776a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf94c4fecc7daa2490047304402202b3f946d6447f9bf17d00f3696cede7ee70b785495e5498274ee682a493befd5022045fc0bcf9332243168b5d35507175f9f374a8eba2336873885d12aada67ea5f601000120000000000000000000000000000000000000000000000000000000000000000000000000', - '00000020457cc5f3c2e1a5655bc20e20e48d33e1b7ea68786c614032b5c518f0b6000000541f36942d82c6e7248275ff15c8933487fbe1819c67a9ecc0f4b70bb7e6cf672a944d5fae77031e8f39860001010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff025851feffffff0200f2052a0100000016001472a27906947c06d034b38ba2fa13c6391a4832790000000000000000776a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf94c4fecc7daa2490047304402202d62805ce60cbd60591f97f949b5ea5bd7e2307bcde343e6ea8394da92758e72022053a25370b0aa20da100189b7899a8f8675a0fdc60e38ece6b8a4f98edd94569e01000120000000000000000000000000000000000000000000000000000000000000000000000000', - '00000020a2eb61eb4f3831baa3a3363e1b42db4462663f756f07423e81ed30322102000077224de7dea0f8d0ec22b1d2e2e255f0a987b96fe7200e1a2e6373f48a2f5b7894954d5fae77031e36867e0001010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff025951feffffff0200f2052a01000000160014aa0ad9f26801258382e0734dceec03a4a75f60240000000000000000776a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf94c4fecc7daa2490047304402206fa0d59990eed369bd7375767c9a6c9369fae209152b8674e520da270605528c0220749eed3b12dbe3f583f505d21803e4aef59c8e24c5831951eafa4f15a8f92c4e01000120000000000000000000000000000000000000000000000000000000000000000000000000', - '00000020a868e8514be5e46dabd6a122132f423f36a43b716a40c394e2a8d063e1010000f4c6c717e99d800c699c25a2006a75a0c5c09f432a936f385e6fce139cdbd1a5e9964d5fae77031e7d026e0001010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff025a51feffffff0200f2052a01000000160014aaa671c82b138e3b8f510cd801e5f2bd0aa305940000000000000000776a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf94c4fecc7daa24900473044022042309f4c3c7a1a2ac8c24f890f962df1c0086cec10be0868087cfc427520cb2702201dafee8911c269b7e786e242045bb57cef3f5b0f177010c6159abae42f646cc501000120000000000000000000000000000000000000000000000000000000000000000000000000', -] - +bad_signet_blksig_block = '00000020a585d01fddeed2b0ed42703e0a048407c05509e3e55d241b3f8bb5a3002c1af2f575c83235984e7dc4afc1f30944c170462e84437ab6f2d52e16878a79e4678bd1914d5f7af7001f584e020001010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff025151feffffff0200f2052a010000001600149243f727dd5343293eb83174324019ec16c2630f0000000000000000776a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf94c4fecc7daa2490047304402205e423a8754336ca99dbe16509b877ef1bf98d008836c725005b3c787c41ebe46022047246e4467ad7cc7f1ad98662afcaf14c115e0095a227c7b05c5182591c23e7e01000120000000000000000000000000000000000000000000000000000000000000000000000000' class SignetBasicTest(BitcoinTestFramework): def set_test_params(self): @@ -29,8 +17,8 @@ class SignetBasicTest(BitcoinTestFramework): self.num_nodes = 6 self.setup_clean_chain = True shared_args1 = ["-signetchallenge=51"] # OP_TRUE - shared_args2 = [] # default challenge - # we use the exact same challenge except we do it as a 2-of-2, which means it should fail + shared_args2 = ["-signetchallenge=50"] # Dogecoin: OP_FALSE, but we don't actually use these nodes + # we use the Bitcoin default challenge except we do it as a 2-of-2, which means it should fail shared_args3 = ["-signetchallenge=522103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430210359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c452ae"] self.extra_args = [ @@ -53,17 +41,17 @@ class SignetBasicTest(BitcoinTestFramework): self.nodes[0].generate(1) - self.log.info("pregenerated signet blocks check") + # Dogecoin: No default Signet network, so pregenerated blocks are not relevant. + # self.log.info("pregenerated signet blocks check") - height = 0 - for block in signet_blocks: - assert_equal(self.nodes[2].submitblock(block), None) - height += 1 - assert_equal(self.nodes[2].getblockcount(), height) + # height = 0 + # for block in signet_blocks: + # assert_equal(self.nodes[2].submitblock(block, None) + # height += 1 + # assert_equal(self.nodes[2].getblockcount(), height) self.log.info("pregenerated signet blocks check (incompatible solution)") - - assert_equal(self.nodes[4].submitblock(signet_blocks[0]), 'bad-signet-blksig') + assert_equal(self.nodes[4].submitblock(bad_signet_blksig_block), 'bad-signet-blksig') self.log.info("test that signet logs the network magic on node start") with self.nodes[0].assert_debug_log(["Signet derived magic (message start)"]): diff --git a/test/functional/install-deps.sh b/test/functional/install-deps.sh new file mode 100755 index 000000000..653742366 --- /dev/null +++ b/test/functional/install-deps.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +export LC_ALL=C + +# installs test dependencies + +curl --location --fail -O https://github.com/langerhans/ltc-scrypt/archive/master.tar.gz +echo "ade3cdf498927990b6d153d74f0da104114e838584be5a81bef8972accd03341 master.tar.gz" | sha256sum -c +tar zxf master.tar.gz +pushd ltc-scrypt-master || exit +python3 setup.py install --user +popd || exit diff --git a/test/functional/rpc_dumptxoutset.py b/test/functional/rpc_dumptxoutset.py index a7bca5373..00b47d019 100755 --- a/test/functional/rpc_dumptxoutset.py +++ b/test/functional/rpc_dumptxoutset.py @@ -37,13 +37,13 @@ class DumptxoutsetTest(BitcoinTestFramework): # This is presumed safe none of this code changed, so we're updating the value for future changes to test against. assert_equal( out['base_hash'], - '3e1dc20bda7548441325d5f6224c5ae3aaa7259564540db17646cf9224fc58dd') + 'eec7e2fd4d81b77ee3122f9500723c3723ef48aa7b45cbb54fae0c6b39f13208') with open(str(expected_path), 'rb') as f: digest = hashlib.sha256(f.read()).hexdigest() # UTXO snapshot hash should be deterministic based on mocked time. assert_equal( - digest, 'f5cf05f9bb08b686f70e7af7d2cd3fd96b01187a76160dd752cd60e2e33a68fc') + digest, '77d1eca936df34f2b3d769ce589f710ac4b92b0306fd925d775336a6067658b5') # Specifying a path to an existing file will fail. assert_raises_rpc_error( diff --git a/test/functional/rpc_rawtransaction.py b/test/functional/rpc_rawtransaction.py index 2ea8e0f41..80ff5d1e7 100755 --- a/test/functional/rpc_rawtransaction.py +++ b/test/functional/rpc_rawtransaction.py @@ -106,7 +106,7 @@ class RawTransactionsTest(BitcoinTestFramework): self.nodes[0].createrawtransaction(inputs=[], outputs={}) # Should not throw for backwards compatibility self.nodes[0].createrawtransaction(inputs=[], outputs=[]) assert_raises_rpc_error(-8, "Data must be hexadecimal string", self.nodes[0].createrawtransaction, [], {'data': 'foo'}) - assert_raises_rpc_error(-5, "Invalid Bitcoin address", self.nodes[0].createrawtransaction, [], {'foo': 0}) + assert_raises_rpc_error(-5, "Invalid Dogecoin address", self.nodes[0].createrawtransaction, [], {'foo': 0}) assert_raises_rpc_error(-3, "Invalid amount", self.nodes[0].createrawtransaction, [], {address: 'foo'}) assert_raises_rpc_error(-3, "Amount out of range", self.nodes[0].createrawtransaction, [], {address: -1}) assert_raises_rpc_error(-8, "Invalid parameter, duplicated address: %s" % address, self.nodes[0].createrawtransaction, [], multidict([(address, 1), (address, 1)])) diff --git a/test/functional/test_framework/messages.py b/test/functional/test_framework/messages.py index 9b0ea645a..ee5a52f11 100755 --- a/test/functional/test_framework/messages.py +++ b/test/functional/test_framework/messages.py @@ -23,6 +23,7 @@ import copy import hashlib from io import BytesIO import math +import ltc_scrypt import random import socket import struct @@ -603,7 +604,7 @@ class CTransaction: class CBlockHeader: __slots__ = ("hash", "hashMerkleRoot", "hashPrevBlock", "nBits", "nNonce", - "nTime", "nVersion", "sha256") + "nTime", "nVersion", "sha256", "scrypt256") def __init__(self, header=None): if header is None: @@ -617,6 +618,7 @@ class CBlockHeader: self.nNonce = header.nNonce self.sha256 = header.sha256 self.hash = header.hash + self.scrypt256 = header.scrypt256 self.calc_sha256() def set_null(self): @@ -628,6 +630,7 @@ class CBlockHeader: self.nNonce = 0 self.sha256 = None self.hash = None + self.scrypt256 = None def deserialize(self, f): self.nVersion = struct.unpack("<i", f.read(4))[0] @@ -638,6 +641,7 @@ class CBlockHeader: self.nNonce = struct.unpack("<I", f.read(4))[0] self.sha256 = None self.hash = None + self.scrypt256 = None def serialize(self): r = b"" @@ -660,9 +664,11 @@ class CBlockHeader: r += struct.pack("<I", self.nNonce) self.sha256 = uint256_from_str(hash256(r)) self.hash = encode(hash256(r)[::-1], 'hex_codec').decode('ascii') + self.scrypt256 = uint256_from_str(ltc_scrypt.getPoWHash(r)) def rehash(self): self.sha256 = None + self.scrypt256 = None self.calc_sha256() return self.sha256 @@ -726,7 +732,7 @@ class CBlock(CBlockHeader): def is_valid(self): self.calc_sha256() target = uint256_from_compact(self.nBits) - if self.sha256 > target: + if self.scrypt256 > target: return False for tx in self.vtx: if not tx.is_valid(): @@ -738,7 +744,7 @@ class CBlock(CBlockHeader): def solve(self): self.rehash() target = uint256_from_compact(self.nBits) - while self.sha256 > target: + while self.scrypt256 > target: self.nNonce += 1 self.rehash() |