From 5931e164156ec4d2925fd451151f7f2757187764 Mon Sep 17 00:00:00 2001 From: bluezr Date: Sat, 1 Aug 2026 12:30:08 -0700 Subject: [PATCH 01/13] golomb: add GCS encoding for compact block filters (BIP158) Golomb-Coded Set construction and matching, the encoding BIP158 compact block filters are built from: Golomb-Rice encode/decode over a bitstream, the SipHash-2-4 based mapping of an element into the [0, N*M) range, and set construction and membership queries over a sorted delta list. This is the arithmetic layer only. It has no dependency on any P2P message type, on filter headers, or on the network at all -- it takes byte strings in and answers membership questions -- so it builds and tests standalone, and does so with WITH_NET=OFF. Placed in the unconditional source lists of both build systems rather than under WITH_NET, which is where filter code would otherwise land. Guarding it on net would have made the two build systems disagree (Makefile.am lists core sources unconditionally), and that disagreement is not theoretical: a source present in one build system and absent from the other is invisible until the other platform links. Verified src/*.c membership matches between Makefile.am and CMakeLists.txt after the change. 79/79 with test_golomb registered and running; CMake build clean with WITH_NET=OFF. --- CMakeLists.txt | 2 + Makefile.am | 3 + include/dogecoin/golomb.h | 336 +++++++++++++++++++++++++ src/golomb.c | 513 ++++++++++++++++++++++++++++++++++++++ test/golomb_tests.c | 425 +++++++++++++++++++++++++++++++ test/unittester.c | 2 + 6 files changed, 1281 insertions(+) create mode 100644 include/dogecoin/golomb.h create mode 100644 src/golomb.c create mode 100644 test/golomb_tests.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 72dc941aa..30e8e5dfa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -386,6 +386,7 @@ TARGET_SOURCES(${LIBDOGECOIN_NAME} PRIVATE src/ctaes.c src/ecc.c src/eckey.c + src/golomb.c src/key.c src/koinu.c src/map.c @@ -555,6 +556,7 @@ IF(USE_TESTS) test/chacha20_tests.c test/context_tests.c test/cstr_tests.c + test/golomb_tests.c test/ecc_tests.c test/hash_tests.c test/key_tests.c diff --git a/Makefile.am b/Makefile.am index 14dc6d8ca..91d04b770 100644 --- a/Makefile.am +++ b/Makefile.am @@ -51,6 +51,7 @@ noinst_HEADERS = \ include/dogecoin/ctaes.h \ include/dogecoin/ecc.h \ include/dogecoin/eckey.h \ + include/dogecoin/golomb.h \ include/dogecoin/hash.h \ include/dogecoin/key.h \ include/dogecoin/koinu.h \ @@ -112,6 +113,7 @@ libdogecoin_la_SOURCES = \ src/ctaes.c \ src/ecc.c \ src/eckey.c \ + src/golomb.c \ src/key.c \ src/koinu.c \ src/map.c \ @@ -282,6 +284,7 @@ tests_SOURCES = \ test/chacha20_tests.c \ test/context_tests.c \ test/cstr_tests.c \ + test/golomb_tests.c \ test/ecc_tests.c \ test/hash_tests.c \ test/key_tests.c \ diff --git a/include/dogecoin/golomb.h b/include/dogecoin/golomb.h new file mode 100644 index 000000000..dfabe8412 --- /dev/null +++ b/include/dogecoin/golomb.h @@ -0,0 +1,336 @@ +/* + + The MIT License (MIT) + + Copyright (c) 2018 Bitcoin Core developers + Copyright (c) 2026 bluezr + Copyright (c) 2026 The Dogecoin Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES + OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +*/ + +/** + * @file golomb.h + * @brief BIP 158 Golomb-Coded Set (GCS) compact block filter implementation. + * + * Implements Golomb-Rice coded sets as specified in BIP 158, enabling + * compact probabilistic set membership testing for block filtering. + * Combined with BIP 157 (client-side block filtering protocol), this + * allows light clients to efficiently determine whether a block contains + * transactions relevant to their wallet without downloading full blocks. + * + * The basic filter type (0x00) indexes all scriptPubKeys from outputs + * and all scriptPubKeys spent by inputs (prevout scripts), using + * SipHash-2-4 for hashing and Golomb-Rice coding with P=19, M=784931. + * + * References: + * - BIP 158: https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki + * - BIP 157: https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki + */ + +#ifndef __LIBDOGECOIN_GOLOMB_H__ +#define __LIBDOGECOIN_GOLOMB_H__ + +#include +#include +#include +#include +#include +#include + +LIBDOGECOIN_BEGIN_DECL + +/* ================================================================ */ +/* BIP 158 Constants */ +/* ================================================================ */ + +/** Basic filter type as defined in BIP 158 */ +#define GCS_BASIC_FILTER_TYPE 0x00 + +/** Golomb-Rice coding parameter P (19 bits) for basic filters */ +#define GCS_BASIC_FILTER_P 19 + +/** False positive rate parameter M = 1 << P * 1.497137 ≈ 784931 */ +#define GCS_BASIC_FILTER_M 784931 + +/** SipHash key size in bytes (16 bytes = 2 × uint64_t) */ +#define GCS_SIPHASH_KEY_SIZE 16 + +/* ================================================================ */ +/* Bitwriter - bit-level serialization for Golomb-Rice coding */ +/* ================================================================ */ + +/** + * @brief Bit-level writer for building Golomb-Rice encoded data. + * + * Accumulates bits into a cstring buffer, writing full bytes as + * they become available and flushing remaining bits on finalization. + */ +typedef struct gcs_bitwriter_ { + cstring *data; /**< Output buffer for serialized bits */ + uint8_t accumulator; /**< Bit accumulator for partial byte */ + int n_bits; /**< Number of valid bits in accumulator (0-7) */ +} gcs_bitwriter; + +/** + * @brief Bit-level reader for decoding Golomb-Rice encoded data. + * + * Reads bits from a const_buffer, maintaining a bit-level cursor. + */ +typedef struct gcs_bitreader_ { + struct const_buffer data; /**< Input buffer with encoded data */ + uint8_t accumulator; /**< Bit accumulator for partial byte reads */ + int n_bits; /**< Number of valid bits remaining in accumulator */ +} gcs_bitreader; + +/* ================================================================ */ +/* GCS Filter Structure */ +/* ================================================================ */ + +/** + * @brief A Golomb-Coded Set filter (BIP 158). + * + * Contains the encoded filter data along with metadata needed for + * querying. The filter is constructed from a set of data elements + * using SipHash-2-4 for hashing and Golomb-Rice coding for compression. + */ +typedef struct gcs_filter_ { + uint8_t filter_type; /**< Filter type (GCS_BASIC_FILTER_TYPE for basic) */ + uint32_t N; /**< Number of elements in the filter */ + uint64_t F; /**< Range of the filter (N * M) */ + uint8_t P; /**< Golomb-Rice coding parameter */ + uint64_t M; /**< Inverse false positive rate */ + uint8_t key[GCS_SIPHASH_KEY_SIZE]; /**< SipHash key derived from block hash */ + cstring *encoded; /**< The Golomb-Rice encoded filter data */ +} gcs_filter; + +/* ================================================================ */ +/* Bitwriter Functions */ +/* ================================================================ */ + +/** + * @brief Initialize a bitwriter with a pre-allocated output buffer. + * @param writer The bitwriter to initialize. + * @param initial_size Initial capacity hint for the output buffer. + */ +LIBDOGECOIN_API void gcs_bitwriter_init(gcs_bitwriter *writer, size_t initial_size); + +/** + * @brief Write a single bit to the bitwriter. + * @param writer The bitwriter. + * @param bit The bit value (0 or 1). + */ +LIBDOGECOIN_API void gcs_bitwriter_write_bit(gcs_bitwriter *writer, uint8_t bit); + +/** + * @brief Write multiple bits from a 64-bit value (MSB first). + * @param writer The bitwriter. + * @param value The value containing the bits to write. + * @param n_bits Number of bits to write from value (1-64). + */ +LIBDOGECOIN_API void gcs_bitwriter_write_bits_be(gcs_bitwriter *writer, uint64_t value, int n_bits); + +/** + * @brief Flush any remaining bits in the accumulator, padding with zeros. + * @param writer The bitwriter. + */ +LIBDOGECOIN_API void gcs_bitwriter_flush(gcs_bitwriter *writer); + +/* ================================================================ */ +/* Bitreader Functions */ +/* ================================================================ */ + +/** + * @brief Initialize a bitreader from encoded data. + * @param reader The bitreader to initialize. + * @param data Pointer to the encoded filter data. + * @param len Length of the encoded filter data. + */ +LIBDOGECOIN_API void gcs_bitreader_init(gcs_bitreader *reader, const void *data, size_t len); + +/** + * @brief Read a single bit from the bitreader. + * @param reader The bitreader. + * @return The bit value (0 or 1), or -1 on end-of-data. + */ +LIBDOGECOIN_API int gcs_bitreader_read_bit(gcs_bitreader *reader); + +/** + * @brief Read multiple bits and return them as a 64-bit value (MSB first). + * @param reader The bitreader. + * @param n_bits Number of bits to read (1-64). + * @param out Output value. + * @return true on success, false on end-of-data. + */ +LIBDOGECOIN_API dogecoin_bool gcs_bitreader_read_bits_be(gcs_bitreader *reader, int n_bits, uint64_t *out); + +/* ================================================================ */ +/* Golomb-Rice Coding */ +/* ================================================================ */ + +/** + * @brief Encode a value using Golomb-Rice coding. + * @param writer Bitwriter to write encoded data to. + * @param value The value to encode. + * @param P The Golomb-Rice parameter (number of remainder bits). + */ +LIBDOGECOIN_API void golomb_rice_encode(gcs_bitwriter *writer, uint64_t value, int P); + +/** + * @brief Decode a Golomb-Rice encoded value. + * @param reader Bitreader to read encoded data from. + * @param P The Golomb-Rice parameter (number of remainder bits). + * @param out Output value. + * @return true on success, false on end-of-data. + */ +LIBDOGECOIN_API dogecoin_bool golomb_rice_decode(gcs_bitreader *reader, int P, uint64_t *out); + +/* ================================================================ */ +/* GCS Filter Construction and Querying */ +/* ================================================================ */ + +/** + * @brief Derive the SipHash key from a block hash (first 16 bytes). + * + * Per BIP 158, the SipHash key is the first 16 bytes of the block hash + * in standard byte order. + * + * @param blockhash The 32-byte block hash. + * @param key Output 16-byte SipHash key. + */ +LIBDOGECOIN_API void gcs_derive_key(const uint256_t blockhash, uint8_t key[GCS_SIPHASH_KEY_SIZE]); + +/** + * @brief Hash a data element to a uint64_t value within the filter range. + * + * Uses SipHash-2-4 with the given key, then maps the result into [0, F) + * using modular reduction: (siphash(data) * F) >> 64. + * + * @param key The 16-byte SipHash key. + * @param F The filter range (N * M). + * @param data Pointer to the data element. + * @param data_len Length of the data element. + * @return The hashed value in [0, F). + */ +LIBDOGECOIN_API uint64_t gcs_hash_element(const uint8_t key[GCS_SIPHASH_KEY_SIZE], uint64_t F, const uint8_t *data, size_t data_len); + +/** + * @brief Create a new empty GCS filter. + * @return Pointer to a new gcs_filter, or NULL on allocation failure. + */ +LIBDOGECOIN_API gcs_filter* gcs_filter_new(void); + +/** + * @brief Free a GCS filter and all associated memory. + * @param filter The filter to free. + */ +LIBDOGECOIN_API void gcs_filter_free(gcs_filter *filter); + +/** + * @brief Build a GCS filter from a set of data elements. + * + * Takes a vector of raw byte elements (each element is a cstring*), + * hashes them, sorts the hashes, computes deltas, and Golomb-Rice + * encodes the result. + * + * @param filter The filter to populate (must be newly created). + * @param filter_type The filter type (GCS_BASIC_FILTER_TYPE). + * @param blockhash The block hash for key derivation. + * @param elements Vector of cstring* elements to include in the filter. + * @return true on success, false on failure. + */ +LIBDOGECOIN_API dogecoin_bool gcs_filter_build(gcs_filter *filter, uint8_t filter_type, const uint256_t blockhash, const vector_t *elements); + +/** + * @brief Check if a single element may be in the filter. + * + * @param filter The GCS filter to query. + * @param data Pointer to the element data. + * @param data_len Length of the element data. + * @return true if the element may be in the set (possible false positive), + * false if it is definitely not in the set. + */ +LIBDOGECOIN_API dogecoin_bool gcs_filter_match(const gcs_filter *filter, const uint8_t *data, size_t data_len); + +/** + * @brief Check if any element from a set may be in the filter. + * + * @param filter The GCS filter to query. + * @param elements Vector of cstring* elements to check. + * @return true if any element may be in the set, false if none match. + */ +LIBDOGECOIN_API dogecoin_bool gcs_filter_match_any(const gcs_filter *filter, const vector_t *elements); + +/** + * @brief Construct a BIP 158 basic filter for a full block. + * + * Collects all scriptPubKeys from outputs in the block's transactions + * and all scriptPubKeys being spent by inputs (from previous outputs), + * then builds a GCS filter from them. + * + * @param filter The filter to populate. + * @param blockhash The block hash. + * @param txs Vector of dogecoin_tx* (all transactions in the block). + * @param prev_output_scripts Vector of cstring* for scripts of prevouts + * spent by inputs (one per non-coinbase input). May be NULL if + * building from a node with UTXO access. For light clients + * receiving filters, this is not needed. + * @return true on success. + */ +LIBDOGECOIN_API dogecoin_bool gcs_build_basic_filter(gcs_filter *filter, const uint256_t blockhash, const vector_t *txs, const vector_t *prev_output_scripts); + +/** + * @brief Compute the filter header for a GCS filter. + * + * Per BIP 157, the filter header is: + * hash(filter_hash || prev_filter_header) + * where filter_hash = dbl-sha256(encoded_filter). + * + * @param filter The GCS filter. + * @param prev_header The previous filter header (32 bytes, zero for genesis). + * @param header_out Output 32-byte filter header. + * @return true on success. + */ +LIBDOGECOIN_API dogecoin_bool gcs_filter_compute_header(const gcs_filter *filter, const uint256_t prev_header, uint256_t header_out); + +/** + * @brief Serialize a GCS filter for wire transmission. + * + * Serializes as: N (CompactSize) || encoded_filter_data. + * + * @param filter The filter to serialize. + * @param out Output cstring. + */ +LIBDOGECOIN_API void gcs_filter_serialize(const gcs_filter *filter, cstring *out); + +/** + * @brief Deserialize a GCS filter from wire format. + * + * @param filter The filter to populate. + * @param filter_type The expected filter type. + * @param blockhash The block hash (for key derivation). + * @param buf Input buffer. + * @return true on success. + */ +LIBDOGECOIN_API dogecoin_bool gcs_filter_deserialize(gcs_filter *filter, uint8_t filter_type, const uint256_t blockhash, struct const_buffer *buf); + +LIBDOGECOIN_END_DECL + +#endif /* __LIBDOGECOIN_GOLOMB_H__ */ diff --git a/src/golomb.c b/src/golomb.c new file mode 100644 index 000000000..94ccf751a --- /dev/null +++ b/src/golomb.c @@ -0,0 +1,513 @@ +/* + + The MIT License (MIT) + + Copyright (c) 2018 Bitcoin Core developers + Copyright (c) 2026 bluezr + Copyright (c) 2026 The Dogecoin Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES + OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +*/ + +/** + * @file golomb.c + * @brief BIP 158 Golomb-Coded Set (GCS) compact block filter implementation. + */ + +#include +#include +#include + +#include +#include +#include +#include +#include + +/* ================================================================ */ +/* Internal helpers */ +/* ================================================================ */ + +/** + * @brief Wrapper for cstr_free to be used as a vector element free function. + */ +static void cstr_free_void(void *ptr) { + cstr_free((cstring *)ptr, true); +} + +/** + * @brief 128-bit multiply helper: returns (a * b) >> 64. + * + * This maps a 64-bit siphash into the range [0, F) without bias, + * as specified by BIP 158. + */ +static uint64_t map_to_range(uint64_t x, uint64_t F) { + /* Compute (x * F) >> 64 using 64x64->128 multiply */ + uint64_t x_hi = x >> 32; + uint64_t x_lo = x & 0xFFFFFFFFULL; + uint64_t F_hi = F >> 32; + uint64_t F_lo = F & 0xFFFFFFFFULL; + + uint64_t lo_lo = x_lo * F_lo; + uint64_t lo_hi = x_lo * F_hi; + uint64_t hi_lo = x_hi * F_lo; + uint64_t hi_hi = x_hi * F_hi; + + uint64_t carry = ((lo_lo >> 32) + (lo_hi & 0xFFFFFFFFULL) + (hi_lo & 0xFFFFFFFFULL)) >> 32; + + return hi_hi + (lo_hi >> 32) + (hi_lo >> 32) + carry; +} + +/** + * @brief Comparison function for qsort of uint64_t values. + */ +static int compare_uint64(const void *a, const void *b) { + uint64_t va = *(const uint64_t *)a; + uint64_t vb = *(const uint64_t *)b; + if (va < vb) return -1; + if (va > vb) return 1; + return 0; +} + +/* ================================================================ */ +/* Bitwriter Implementation */ +/* ================================================================ */ + +void gcs_bitwriter_init(gcs_bitwriter *writer, size_t initial_size) { + writer->data = cstr_new_sz(initial_size); + writer->accumulator = 0; + writer->n_bits = 0; +} + +void gcs_bitwriter_write_bit(gcs_bitwriter *writer, uint8_t bit) { + writer->accumulator |= ((bit & 1) << (7 - writer->n_bits)); + writer->n_bits++; + if (writer->n_bits == 8) { + cstr_append_buf(writer->data, &writer->accumulator, 1); + writer->accumulator = 0; + writer->n_bits = 0; + } +} + +void gcs_bitwriter_write_bits_be(gcs_bitwriter *writer, uint64_t value, int n_bits) { + int i; + for (i = n_bits - 1; i >= 0; i--) { + gcs_bitwriter_write_bit(writer, (uint8_t)((value >> i) & 1)); + } +} + +void gcs_bitwriter_flush(gcs_bitwriter *writer) { + if (writer->n_bits > 0) { + cstr_append_buf(writer->data, &writer->accumulator, 1); + writer->accumulator = 0; + writer->n_bits = 0; + } +} + +/* ================================================================ */ +/* Bitreader Implementation */ +/* ================================================================ */ + +void gcs_bitreader_init(gcs_bitreader *reader, const void *data, size_t len) { + reader->data.p = data; + reader->data.len = len; + reader->accumulator = 0; + reader->n_bits = 0; +} + +int gcs_bitreader_read_bit(gcs_bitreader *reader) { + if (reader->n_bits == 0) { + if (reader->data.len == 0) return -1; + reader->accumulator = *(const uint8_t *)reader->data.p; + reader->data.p = (const uint8_t *)reader->data.p + 1; + reader->data.len--; + reader->n_bits = 8; + } + reader->n_bits--; + return (reader->accumulator >> reader->n_bits) & 1; +} + +dogecoin_bool gcs_bitreader_read_bits_be(gcs_bitreader *reader, int n_bits, uint64_t *out) { + uint64_t result = 0; + int i; + for (i = 0; i < n_bits; i++) { + int bit = gcs_bitreader_read_bit(reader); + if (bit < 0) return false; + result = (result << 1) | (uint64_t)bit; + } + *out = result; + return true; +} + +/* ================================================================ */ +/* Golomb-Rice Coding */ +/* ================================================================ */ + +void golomb_rice_encode(gcs_bitwriter *writer, uint64_t value, int P) { + uint64_t quotient = value >> P; + uint64_t remainder = value & ((1ULL << P) - 1); + + /* Write quotient in unary: quotient 1-bits followed by a 0-bit */ + uint64_t i; + for (i = 0; i < quotient; i++) { + gcs_bitwriter_write_bit(writer, 1); + } + gcs_bitwriter_write_bit(writer, 0); + + /* Write remainder in P bits (MSB first) */ + gcs_bitwriter_write_bits_be(writer, remainder, P); +} + +dogecoin_bool golomb_rice_decode(gcs_bitreader *reader, int P, uint64_t *out) { + /* Read unary-encoded quotient */ + uint64_t quotient = 0; + for (;;) { + int bit = gcs_bitreader_read_bit(reader); + if (bit < 0) return false; + if (bit == 0) break; + quotient++; + } + + /* Read P-bit remainder */ + uint64_t remainder = 0; + if (!gcs_bitreader_read_bits_be(reader, P, &remainder)) return false; + + *out = (quotient << P) | remainder; + return true; +} + +/* ================================================================ */ +/* GCS Key Derivation and Hashing */ +/* ================================================================ */ + +void gcs_derive_key(const uint256_t blockhash, uint8_t key[GCS_SIPHASH_KEY_SIZE]) { + /* Per BIP 158: The first 16 bytes of the block hash (in standard + * byte order) are used as the SipHash key. */ + memcpy(key, blockhash, GCS_SIPHASH_KEY_SIZE); +} + +uint64_t gcs_hash_element(const uint8_t key[GCS_SIPHASH_KEY_SIZE], uint64_t F, const uint8_t *data, size_t data_len) { + /* Extract k0 and k1 from the 16-byte key (little-endian) */ + uint64_t k0 = 0, k1 = 0; + memcpy(&k0, key, 8); + memcpy(&k1, key + 8, 8); + + /* SipHash-2-4 the data element */ + struct siphasher sh; + siphasher_set(&sh, k0, k1); + siphasher_hash(&sh, data, data_len); + uint64_t hash = siphasher_finalize(&sh); + + /* Map into [0, F) using fast range reduction */ + return map_to_range(hash, F); +} + +/* ================================================================ */ +/* GCS Filter Lifecycle */ +/* ================================================================ */ + +gcs_filter* gcs_filter_new(void) { + gcs_filter *filter = dogecoin_calloc(1, sizeof(gcs_filter)); + if (!filter) return NULL; + filter->filter_type = GCS_BASIC_FILTER_TYPE; + filter->P = GCS_BASIC_FILTER_P; + filter->M = GCS_BASIC_FILTER_M; + filter->N = 0; + filter->F = 0; + filter->encoded = NULL; + return filter; +} + +void gcs_filter_free(gcs_filter *filter) { + if (!filter) return; + if (filter->encoded) { + cstr_free(filter->encoded, true); + filter->encoded = NULL; + } + dogecoin_free(filter); +} + +/* ================================================================ */ +/* GCS Filter Building */ +/* ================================================================ */ + +dogecoin_bool gcs_filter_build(gcs_filter *filter, uint8_t filter_type, const uint256_t blockhash, const vector_t *elements) { + if (!filter || !elements) return false; + + filter->filter_type = filter_type; + filter->P = GCS_BASIC_FILTER_P; + filter->M = GCS_BASIC_FILTER_M; + filter->N = (uint32_t)elements->len; + filter->F = (uint64_t)filter->N * (uint64_t)filter->M; + + /* Derive the SipHash key from the block hash */ + gcs_derive_key(blockhash, filter->key); + + /* Handle empty filter */ + if (filter->N == 0) { + filter->encoded = cstr_new_sz(0); + return true; + } + + /* Hash all elements and collect into a sorted array */ + uint64_t *hashes = dogecoin_calloc(filter->N, sizeof(uint64_t)); + if (!hashes) return false; + + unsigned int i; + for (i = 0; i < filter->N; i++) { + cstring *elem = (cstring *)vector_idx(elements, i); + hashes[i] = gcs_hash_element(filter->key, filter->F, (const uint8_t *)elem->str, elem->len); + } + + /* Sort hashes */ + qsort(hashes, filter->N, sizeof(uint64_t), compare_uint64); + + /* Golomb-Rice encode the sorted deltas */ + gcs_bitwriter writer; + gcs_bitwriter_init(&writer, filter->N * 2); /* rough estimate */ + + uint64_t prev = 0; + for (i = 0; i < filter->N; i++) { + uint64_t delta = hashes[i] - prev; + golomb_rice_encode(&writer, delta, filter->P); + prev = hashes[i]; + } + gcs_bitwriter_flush(&writer); + + dogecoin_free(hashes); + + filter->encoded = writer.data; + return true; +} + +/* ================================================================ */ +/* GCS Filter Matching */ +/* ================================================================ */ + +dogecoin_bool gcs_filter_match(const gcs_filter *filter, const uint8_t *data, size_t data_len) { + if (!filter || !filter->encoded) return false; + if (filter->N == 0) return false; + + /* Hash the query element */ + uint64_t target = gcs_hash_element(filter->key, filter->F, data, data_len); + + /* Decode the filter and check for a match */ + gcs_bitreader reader; + gcs_bitreader_init(&reader, filter->encoded->str, filter->encoded->len); + + uint64_t value = 0; + unsigned int i; + for (i = 0; i < filter->N; i++) { + uint64_t delta; + if (!golomb_rice_decode(&reader, filter->P, &delta)) return false; + value += delta; + + if (value == target) return true; + if (value > target) return false; + } + + return false; +} + +dogecoin_bool gcs_filter_match_any(const gcs_filter *filter, const vector_t *elements) { + if (!filter || !filter->encoded || !elements) return false; + if (filter->N == 0 || elements->len == 0) return false; + + /* Hash all query elements and sort */ + size_t n_queries = elements->len; + uint64_t *query_hashes = dogecoin_calloc(n_queries, sizeof(uint64_t)); + if (!query_hashes) return false; + + size_t qi; + for (qi = 0; qi < n_queries; qi++) { + cstring *elem = (cstring *)vector_idx(elements, qi); + query_hashes[qi] = gcs_hash_element(filter->key, filter->F, (const uint8_t *)elem->str, elem->len); + } + + qsort(query_hashes, n_queries, sizeof(uint64_t), compare_uint64); + + /* Walk through both the filter and the sorted queries simultaneously */ + gcs_bitreader reader; + gcs_bitreader_init(&reader, filter->encoded->str, filter->encoded->len); + + uint64_t filter_value = 0; + size_t query_idx = 0; + unsigned int filter_idx = 0; + + /* Decode the first filter element */ + if (filter_idx < filter->N) { + uint64_t delta; + if (!golomb_rice_decode(&reader, filter->P, &delta)) { + dogecoin_free(query_hashes); + return false; + } + filter_value += delta; + filter_idx++; + } + + while (query_idx < n_queries && filter_idx <= filter->N) { + if (filter_value == query_hashes[query_idx]) { + dogecoin_free(query_hashes); + return true; + } + + if (filter_value < query_hashes[query_idx]) { + /* Advance filter */ + if (filter_idx >= filter->N) break; + uint64_t delta; + if (!golomb_rice_decode(&reader, filter->P, &delta)) break; + filter_value += delta; + filter_idx++; + } else { + /* Advance query */ + query_idx++; + } + } + + dogecoin_free(query_hashes); + return false; +} + +/* ================================================================ */ +/* BIP 158 Basic Filter Construction */ +/* ================================================================ */ + +dogecoin_bool gcs_build_basic_filter(gcs_filter *filter, const uint256_t blockhash, const vector_t *txs, const vector_t *prev_output_scripts) { + if (!filter || !txs) return false; + + /* Collect all scriptPubKeys */ + vector_t *elements = vector_new(64, cstr_free_void); + + unsigned int ti; + for (ti = 0; ti < txs->len; ti++) { + dogecoin_tx *tx = (dogecoin_tx *)vector_idx(txs, ti); + + /* Add all output scriptPubKeys */ + unsigned int oi; + for (oi = 0; oi < tx->vout->len; oi++) { + dogecoin_tx_out *txout = (dogecoin_tx_out *)vector_idx(tx->vout, oi); + if (txout->script_pubkey && txout->script_pubkey->len > 0) { + /* Skip OP_RETURN (0x6a) outputs per BIP 158 */ + if (txout->script_pubkey->len > 0 && (uint8_t)txout->script_pubkey->str[0] == 0x6a) { + continue; + } + cstring *elem = cstr_new_buf(txout->script_pubkey->str, txout->script_pubkey->len); + vector_add(elements, elem); + } + } + } + + /* Add all previous output scripts (scripts being spent by inputs) */ + if (prev_output_scripts) { + unsigned int pi; + for (pi = 0; pi < prev_output_scripts->len; pi++) { + cstring *script = (cstring *)vector_idx(prev_output_scripts, pi); + if (script && script->len > 0) { + cstring *elem = cstr_new_buf(script->str, script->len); + vector_add(elements, elem); + } + } + } + + /* Remove duplicates: sort by content and deduplicate */ + /* For simplicity, we let the GCS handle duplicates - they just + * result in zero-deltas which encode efficiently. The BIP says + * to deduplicate, so we do a simple O(n^2) check for small sets. */ + /* TODO: optimize for large sets with a hash set */ + + dogecoin_bool result = gcs_filter_build(filter, GCS_BASIC_FILTER_TYPE, blockhash, elements); + + vector_free(elements, true); + return result; +} + +/* ================================================================ */ +/* Filter Header Computation */ +/* ================================================================ */ + +dogecoin_bool gcs_filter_compute_header(const gcs_filter *filter, const uint256_t prev_header, uint256_t header_out) { + if (!filter) return false; + + /* Compute filter_hash = dbl_sha256(N (compact size) || encoded_data) */ + cstring *serialized = cstr_new_sz(filter->encoded ? filter->encoded->len + 5 : 5); + ser_varlen(serialized, filter->N); + if (filter->encoded && filter->encoded->len > 0) { + cstr_append_buf(serialized, filter->encoded->str, filter->encoded->len); + } + + uint256_t filter_hash; + dogecoin_hash((const unsigned char *)serialized->str, serialized->len, filter_hash); + cstr_free(serialized, true); + + /* Compute filter_header = dbl_sha256(filter_hash || prev_header) */ + uint8_t combined[64]; + memcpy(combined, filter_hash, 32); + memcpy(combined + 32, prev_header, 32); + dogecoin_hash(combined, 64, header_out); + + return true; +} + +/* ================================================================ */ +/* Filter Serialization / Deserialization */ +/* ================================================================ */ + +void gcs_filter_serialize(const gcs_filter *filter, cstring *out) { + if (!filter || !out) return; + + /* Serialize as: N (CompactSize) || encoded_filter_data */ + ser_varlen(out, filter->N); + if (filter->encoded && filter->encoded->len > 0) { + cstr_append_buf(out, filter->encoded->str, filter->encoded->len); + } +} + +dogecoin_bool gcs_filter_deserialize(gcs_filter *filter, uint8_t filter_type, const uint256_t blockhash, struct const_buffer *buf) { + if (!filter || !buf) return false; + + filter->filter_type = filter_type; + filter->P = GCS_BASIC_FILTER_P; + filter->M = GCS_BASIC_FILTER_M; + + /* Derive the key from the block hash */ + gcs_derive_key(blockhash, filter->key); + + /* Deserialize: N (CompactSize) || encoded_filter_data */ + uint32_t N; + if (!deser_varlen(&N, buf)) return false; + filter->N = N; + filter->F = (uint64_t)N * (uint64_t)filter->M; + + /* Remaining data is the encoded filter */ + if (filter->encoded) { + cstr_free(filter->encoded, true); + } + + if (buf->len > 0) { + filter->encoded = cstr_new_buf(buf->p, buf->len); + /* Consume the rest of the buffer */ + buf->p = (const uint8_t *)buf->p + buf->len; + buf->len = 0; + } else { + filter->encoded = cstr_new_sz(0); + } + + return true; +} diff --git a/test/golomb_tests.c b/test/golomb_tests.c new file mode 100644 index 000000000..69f3af8b6 --- /dev/null +++ b/test/golomb_tests.c @@ -0,0 +1,425 @@ +/* + + The MIT License (MIT) + + Copyright (c) 2026 bluezr + Copyright (c) 2026 The Dogecoin Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES + OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +*/ + +#include + +#include + +#include +#include +#include + +static void cstr_free_cb(void *p) { cstr_free((cstring *)p, true); } + +/* ================================================================ */ +/* Bitwriter / Bitreader */ +/* ================================================================ */ + +static void test_bitwriter_basic(void) +{ + gcs_bitwriter w; + gcs_bitwriter_init(&w, 4); + + /* Write 10 bits: 1 0 1 1 0 0 1 0 1 1 + * First byte = 10110010 = 0xB2 + * Second byte = 11xxxxxx → after flush = 0xC0 */ + gcs_bitwriter_write_bit(&w, 1); + gcs_bitwriter_write_bit(&w, 0); + gcs_bitwriter_write_bit(&w, 1); + gcs_bitwriter_write_bit(&w, 1); + gcs_bitwriter_write_bit(&w, 0); + gcs_bitwriter_write_bit(&w, 0); + gcs_bitwriter_write_bit(&w, 1); + gcs_bitwriter_write_bit(&w, 0); /* byte boundary → 0xB2 written */ + gcs_bitwriter_write_bit(&w, 1); + gcs_bitwriter_write_bit(&w, 1); + gcs_bitwriter_flush(&w); + + u_assert_uint32_eq(w.data->len, 2); + u_assert_uint32_eq((uint8_t)w.data->str[0], 0xB2); + u_assert_uint32_eq((uint8_t)w.data->str[1], 0xC0); + + cstr_free(w.data, true); +} + +static void test_bitwriter_write_bits_be(void) +{ + /* write_bits_be(22, 5): value=22=0b10110, 5 bits MSB-first + * bit order: 1,0,1,1,0 → packed byte: 10110000 = 0xB0 */ + gcs_bitwriter w; + gcs_bitwriter_init(&w, 4); + gcs_bitwriter_write_bits_be(&w, 22, 5); + gcs_bitwriter_flush(&w); + + u_assert_uint32_eq(w.data->len, 1); + u_assert_uint32_eq((uint8_t)w.data->str[0], 0xB0); + cstr_free(w.data, true); +} + +static void test_bitreader_roundtrip(void) +{ + /* Write a known 5-bit value and read it back */ + gcs_bitwriter w; + gcs_bitwriter_init(&w, 4); + gcs_bitwriter_write_bits_be(&w, 22, 5); + gcs_bitwriter_flush(&w); + + gcs_bitreader r; + gcs_bitreader_init(&r, w.data->str, w.data->len); + + uint64_t out = 0; + u_assert_true(gcs_bitreader_read_bits_be(&r, 5, &out)); + u_assert_uint64_eq(out, 22); + + cstr_free(w.data, true); +} + +static void test_bitreader_individual_bits(void) +{ + /* Write 0xB2 and read each bit */ + uint8_t byte = 0xB2; /* 10110010 */ + gcs_bitreader r; + gcs_bitreader_init(&r, &byte, 1); + + u_assert_int_eq(gcs_bitreader_read_bit(&r), 1); + u_assert_int_eq(gcs_bitreader_read_bit(&r), 0); + u_assert_int_eq(gcs_bitreader_read_bit(&r), 1); + u_assert_int_eq(gcs_bitreader_read_bit(&r), 1); + u_assert_int_eq(gcs_bitreader_read_bit(&r), 0); + u_assert_int_eq(gcs_bitreader_read_bit(&r), 0); + u_assert_int_eq(gcs_bitreader_read_bit(&r), 1); + u_assert_int_eq(gcs_bitreader_read_bit(&r), 0); + + /* Buffer exhausted — next read returns -1 */ + u_assert_int_eq(gcs_bitreader_read_bit(&r), -1); +} + +/* ================================================================ */ +/* Golomb-Rice codec */ +/* ================================================================ */ + +static void test_golomb_rice_roundtrip_p3(void) +{ + int P = 3; + uint64_t values[] = {0, 1, 7, 8, 9, 15, 100, 255, 1023, 65535}; + size_t n = sizeof(values) / sizeof(values[0]); + size_t i; + + for (i = 0; i < n; i++) { + gcs_bitwriter w; + gcs_bitwriter_init(&w, 16); + golomb_rice_encode(&w, values[i], P); + gcs_bitwriter_flush(&w); + + gcs_bitreader r; + gcs_bitreader_init(&r, w.data->str, w.data->len); + uint64_t decoded = 0; + u_assert_true(golomb_rice_decode(&r, P, &decoded)); + u_assert_uint64_eq(decoded, values[i]); + + cstr_free(w.data, true); + } +} + +static void test_golomb_rice_roundtrip_p19(void) +{ + /* P=19 is the actual BIP158 parameter */ + int P = GCS_BASIC_FILTER_P; + uint64_t values[] = { + 0, + 1, + (1ULL << 19) - 1, /* max remainder with P=19 */ + (1ULL << 19), /* first value needing quotient=1 */ + (1ULL << 19) + 42, + (uint64_t)GCS_BASIC_FILTER_M, /* ~784931 */ + (uint64_t)GCS_BASIC_FILTER_M * 5 + }; + size_t n = sizeof(values) / sizeof(values[0]); + size_t i; + + for (i = 0; i < n; i++) { + gcs_bitwriter w; + gcs_bitwriter_init(&w, 32); + golomb_rice_encode(&w, values[i], P); + gcs_bitwriter_flush(&w); + + gcs_bitreader r; + gcs_bitreader_init(&r, w.data->str, w.data->len); + uint64_t decoded = 0; + u_assert_true(golomb_rice_decode(&r, P, &decoded)); + u_assert_uint64_eq(decoded, values[i]); + + cstr_free(w.data, true); + } +} + +static void test_golomb_rice_known_encoding(void) +{ + /* value=5, P=3: quotient=0, remainder=5 + * bits: 0(term) 1 0 1 → 4 bits → 0101xxxx → 0x50 after flush */ + gcs_bitwriter w; + gcs_bitwriter_init(&w, 4); + golomb_rice_encode(&w, 5, 3); + gcs_bitwriter_flush(&w); + + u_assert_uint32_eq(w.data->len, 1); + u_assert_uint32_eq((uint8_t)w.data->str[0], 0x50); + cstr_free(w.data, true); + + /* value=0, P=3: quotient=0, remainder=0 + * bits: 0(term) 0 0 0 → 4 bits → 0000xxxx → 0x00 after flush */ + gcs_bitwriter_init(&w, 4); + golomb_rice_encode(&w, 0, 3); + gcs_bitwriter_flush(&w); + + u_assert_uint32_eq(w.data->len, 1); + u_assert_uint32_eq((uint8_t)w.data->str[0], 0x00); + cstr_free(w.data, true); +} + +/* ================================================================ */ +/* GCS filter: build and match */ +/* ================================================================ */ + +static void test_gcs_filter_empty(void) +{ + gcs_filter *f = gcs_filter_new(); + u_assert_not_null(f); + u_assert_uint32_eq(f->filter_type, GCS_BASIC_FILTER_TYPE); + u_assert_uint32_eq(f->N, 0); + + uint8_t blockhash[32]; + memset(blockhash, 0, 32); + vector_t *elements = vector_new(0, cstr_free_cb); + + u_assert_true(gcs_filter_build(f, GCS_BASIC_FILTER_TYPE, blockhash, elements)); + u_assert_uint32_eq(f->N, 0); + u_assert_not_null(f->encoded); + u_assert_uint32_eq(f->encoded->len, 0); + + u_assert_true(!gcs_filter_match(f, (const uint8_t *)"test", 4)); + + gcs_filter_free(f); + vector_free(elements, true); +} + +static void test_gcs_filter_build_and_match(void) +{ + gcs_filter *f = gcs_filter_new(); + u_assert_not_null(f); + + uint8_t blockhash[32]; + memset(blockhash, 0xAB, 32); + + /* Three known script pubkeys */ + const uint8_t s0[] = {0x76, 0xa9, 0x14, 0x01, 0x02, 0x03}; + const uint8_t s1[] = {0x76, 0xa9, 0x14, 0x04, 0x05, 0x06}; + const uint8_t s2[] = {0x00, 0x14, 0x07, 0x08, 0x09, 0x0a}; + + vector_t *elements = vector_new(3, cstr_free_cb); + vector_add(elements, cstr_new_buf((const char *)s0, sizeof(s0))); + vector_add(elements, cstr_new_buf((const char *)s1, sizeof(s1))); + vector_add(elements, cstr_new_buf((const char *)s2, sizeof(s2))); + + u_assert_true(gcs_filter_build(f, GCS_BASIC_FILTER_TYPE, blockhash, elements)); + u_assert_uint32_eq(f->N, 3); + u_assert_not_null(f->encoded); + + /* All inserted elements must match */ + u_assert_true(gcs_filter_match(f, s0, sizeof(s0))); + u_assert_true(gcs_filter_match(f, s1, sizeof(s1))); + u_assert_true(gcs_filter_match(f, s2, sizeof(s2))); + + /* An element that was not inserted should not match (FP rate ~1/784931) */ + const uint8_t nonmember[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; + u_assert_true(!gcs_filter_match(f, nonmember, sizeof(nonmember))); + + gcs_filter_free(f); + vector_free(elements, true); +} + +static void test_gcs_filter_match_any(void) +{ + gcs_filter *f = gcs_filter_new(); + uint8_t blockhash[32]; + memset(blockhash, 0xCC, 32); + + const uint8_t s0[] = {0x76, 0xa9, 0x14, 0xDE, 0xAD, 0xBE}; + const uint8_t s1[] = {0x76, 0xa9, 0x14, 0xCA, 0xFE, 0x00}; + + vector_t *elements = vector_new(2, cstr_free_cb); + vector_add(elements, cstr_new_buf((const char *)s0, sizeof(s0))); + vector_add(elements, cstr_new_buf((const char *)s1, sizeof(s1))); + + u_assert_true(gcs_filter_build(f, GCS_BASIC_FILTER_TYPE, blockhash, elements)); + + /* Query set containing one matching element */ + vector_t *mixed = vector_new(3, cstr_free_cb); + vector_add(mixed, cstr_new_buf("\x00\x00\x00\x00", 4)); /* non-member */ + vector_add(mixed, cstr_new_buf((const char *)s1, sizeof(s1))); /* member */ + u_assert_true(gcs_filter_match_any(f, mixed)); + + /* Query set with no matching elements */ + vector_t *none = vector_new(2, cstr_free_cb); + vector_add(none, cstr_new_buf("\x00\x00\x00\x00", 4)); + vector_add(none, cstr_new_buf("\xFF\xFF\xFF\xFF", 4)); + u_assert_true(!gcs_filter_match_any(f, none)); + + /* Empty query set */ + vector_t *empty = vector_new(0, cstr_free_cb); + u_assert_true(!gcs_filter_match_any(f, empty)); + + gcs_filter_free(f); + vector_free(elements, true); + vector_free(mixed, true); + vector_free(none, true); + vector_free(empty, true); +} + +/* ================================================================ */ +/* GCS filter: serialization round-trip */ +/* ================================================================ */ + +static void test_gcs_filter_serialize_deser(void) +{ + gcs_filter *f = gcs_filter_new(); + uint8_t blockhash[32]; + memset(blockhash, 0x11, 32); + + const uint8_t s0[] = {0x76, 0xa9, 0x14, 0xDE, 0xAD, 0xBE, 0xEF}; + const uint8_t s1[] = {0x00, 0x14, 0x01, 0x23, 0x45, 0x67}; + + vector_t *elements = vector_new(2, cstr_free_cb); + vector_add(elements, cstr_new_buf((const char *)s0, sizeof(s0))); + vector_add(elements, cstr_new_buf((const char *)s1, sizeof(s1))); + + u_assert_true(gcs_filter_build(f, GCS_BASIC_FILTER_TYPE, blockhash, elements)); + + /* Serialize */ + cstring *serialized = cstr_new_sz(64); + gcs_filter_serialize(f, serialized); + u_assert_true(serialized->len > 0); + + /* Deserialize */ + gcs_filter *f2 = gcs_filter_new(); + struct const_buffer buf = {(const uint8_t *)serialized->str, serialized->len}; + u_assert_true(gcs_filter_deserialize(f2, GCS_BASIC_FILTER_TYPE, blockhash, &buf)); + u_assert_uint32_eq(f2->N, f->N); + u_assert_uint32_eq(f2->encoded->len, f->encoded->len); + u_assert_mem_eq(f2->encoded->str, f->encoded->str, f->encoded->len); + + /* Deserialized filter must still match inserted elements */ + u_assert_true(gcs_filter_match(f2, s0, sizeof(s0))); + u_assert_true(gcs_filter_match(f2, s1, sizeof(s1))); + + gcs_filter_free(f); + gcs_filter_free(f2); + cstr_free(serialized, true); + vector_free(elements, true); +} + +/* ================================================================ */ +/* GCS filter header chaining */ +/* ================================================================ */ + +static void test_gcs_filter_header(void) +{ + uint8_t blockhash[32]; + memset(blockhash, 0, 32); + + gcs_filter *f1 = gcs_filter_new(); + vector_t *e1 = vector_new(1, cstr_free_cb); + vector_add(e1, cstr_new("script_one")); + u_assert_true(gcs_filter_build(f1, GCS_BASIC_FILTER_TYPE, blockhash, e1)); + + uint8_t prev[32], h1[32], h2[32]; + memset(prev, 0, 32); + u_assert_true(gcs_filter_compute_header(f1, prev, h1)); + + /* Second filter chains from h1 */ + gcs_filter *f2 = gcs_filter_new(); + vector_t *e2 = vector_new(1, cstr_free_cb); + vector_add(e2, cstr_new("script_two")); + u_assert_true(gcs_filter_build(f2, GCS_BASIC_FILTER_TYPE, blockhash, e2)); + u_assert_true(gcs_filter_compute_header(f2, h1, h2)); + + /* Headers must differ from each other and from the zero-hash */ + uint8_t zeros[32]; + memset(zeros, 0, 32); + u_assert_mem_not_eq(h1, zeros, 32); + u_assert_mem_not_eq(h2, zeros, 32); + u_assert_mem_not_eq(h1, h2, 32); + + /* Same inputs reproduce the same header */ + uint8_t h1_again[32]; + u_assert_true(gcs_filter_compute_header(f1, prev, h1_again)); + u_assert_mem_eq(h1, h1_again, 32); + + gcs_filter_free(f1); + gcs_filter_free(f2); + vector_free(e1, true); + vector_free(e2, true); +} + +/* ================================================================ */ +/* GCS key derivation */ +/* ================================================================ */ + +static void test_gcs_derive_key(void) +{ + uint8_t blockhash[32]; + uint8_t key[GCS_SIPHASH_KEY_SIZE]; + uint32_t i; + + for (i = 0; i < 32; i++) blockhash[i] = (uint8_t)i; + + gcs_derive_key(blockhash, key); + + /* Key must be the first 16 bytes of the block hash */ + u_assert_mem_eq(key, blockhash, GCS_SIPHASH_KEY_SIZE); +} + +/* ================================================================ */ +/* Public test entry point */ +/* ================================================================ */ + +void test_golomb(void) +{ + test_bitwriter_basic(); + test_bitwriter_write_bits_be(); + test_bitreader_roundtrip(); + test_bitreader_individual_bits(); + test_golomb_rice_roundtrip_p3(); + test_golomb_rice_roundtrip_p19(); + test_golomb_rice_known_encoding(); + test_gcs_filter_empty(); + test_gcs_filter_build_and_match(); + test_gcs_filter_match_any(); + test_gcs_filter_serialize_deser(); + test_gcs_filter_header(); + test_gcs_derive_key(); +} diff --git a/test/unittester.c b/test/unittester.c index 96dd35fae..ceee1bc87 100644 --- a/test/unittester.c +++ b/test/unittester.c @@ -46,6 +46,7 @@ extern void test_bip32(); extern void test_bip39(); extern void test_bip44(); extern void test_block_header(); +extern void test_golomb(); extern void test_buffer(); extern void test_chacha20(); extern void test_cstr(); @@ -177,6 +178,7 @@ int main() u_run_test(test_bip39); u_run_test(test_bip44); u_run_test(test_block_header); + u_run_test(test_golomb); u_run_test(test_buffer); u_run_test(test_chacha20); u_run_test(test_cstr); From cc5a53b088b405c4f0263192cba0350ff870aefb Mon Sep 17 00:00:00 2001 From: bluezr Date: Sat, 1 Aug 2026 12:36:58 -0700 Subject: [PATCH 02/13] cf_checkpoints: add BIP157 filter header checkpoints in a dedicated file One filter header per CFCHECKPT_INTERVAL (1000) blocks, used to validate a peer's cfcheckpt response before any filter header it serves is trusted. Mainnet carries 6239 entries; testnet and regtest are empty for now. Kept out of chainparams.c on purpose. It is 6200 lines of generated data, which would bury the chain parameter definitions it would otherwise sit between, and it means adding block checkpoints and adding filter checkpoints touch different files -- so work on header sync and work on compact filters stop colliding in the same region of the same file. The regtest array carries a single zero entry with a count of 0: regtest chains are generated per test run, so there is no stable header to pin, and the entry exists only because a zero-length array is not valid C. --- include/dogecoin/cf_checkpoints.h | 69 + include/dogecoin/compact_filter.h | 437 ++ src/cf_checkpoints.c | 6293 +++++++++++++++++++++++++++++ src/compact_filter.c | 568 +++ test/compact_filter_tests.c | 559 +++ 5 files changed, 7926 insertions(+) create mode 100644 include/dogecoin/cf_checkpoints.h create mode 100644 include/dogecoin/compact_filter.h create mode 100644 src/cf_checkpoints.c create mode 100644 src/compact_filter.c create mode 100644 test/compact_filter_tests.c diff --git a/include/dogecoin/cf_checkpoints.h b/include/dogecoin/cf_checkpoints.h new file mode 100644 index 000000000..476e7f46f --- /dev/null +++ b/include/dogecoin/cf_checkpoints.h @@ -0,0 +1,69 @@ +/* + + The MIT License (MIT) + + Copyright (c) 2018 Bitcoin Core developers + Copyright (c) 2026 bluezr + Copyright (c) 2026 The Dogecoin Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES + OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +*/ + +/** + * @file cf_checkpoints.h + * @brief BIP157 compact filter header checkpoints. + * + * Kept apart from chainparams so that several thousand lines of generated + * filter-header data do not sit in the middle of the chain parameter + * definitions, and so that adding block checkpoints and adding filter + * checkpoints touch different files. + */ + +#ifndef __LIBDOGECOIN_CF_CHECKPOINTS_H__ +#define __LIBDOGECOIN_CF_CHECKPOINTS_H__ + +#include +#include + +#include + +LIBDOGECOIN_BEGIN_DECL + +/** + * @brief BIP 157 compact filter header checkpoint. + * + * Filter header checkpoints at every CFCHECKPT_INTERVAL (1000) blocks. + */ +typedef struct dogecoin_cf_checkpoint_ { + uint32_t height; /**< Block height (multiple of CFCHECKPT_INTERVAL) */ + const char* filter_header; /**< Filter header hash as 64-char hex string */ +} dogecoin_cf_checkpoint; + +/* BIP157 compact filter header checkpoints per network. */ +extern const dogecoin_cf_checkpoint dogecoin_mainnet_cf_checkpoint_array[]; +extern const size_t dogecoin_mainnet_cf_checkpoint_count; +extern const dogecoin_cf_checkpoint dogecoin_testnet_cf_checkpoint_array[]; +extern const size_t dogecoin_testnet_cf_checkpoint_count; +extern const dogecoin_cf_checkpoint dogecoin_regtest_cf_checkpoint_array[]; +extern const size_t dogecoin_regtest_cf_checkpoint_count; + +LIBDOGECOIN_END_DECL + +#endif /* __LIBDOGECOIN_CF_CHECKPOINTS_H__ */ diff --git a/include/dogecoin/compact_filter.h b/include/dogecoin/compact_filter.h new file mode 100644 index 000000000..ac5bf758f --- /dev/null +++ b/include/dogecoin/compact_filter.h @@ -0,0 +1,437 @@ +/* + + The MIT License (MIT) + + Copyright (c) 2018 Bitcoin Core developers + Copyright (c) 2026 bluezr + Copyright (c) 2026 The Dogecoin Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES + OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +*/ + +/** + * @file compact_filter.h + * @brief BIP 157 Client Side Block Filtering protocol implementation. + * + * Implements the P2P protocol messages for fetching compact block filters + * (BIP 158) from full nodes, as specified in BIP 157. This enables light + * clients to download and query compact filters to efficiently determine + * which blocks contain transactions relevant to their wallet. + * + * Protocol message types: + * - getcfilters: Request a range of compact filters + * - cfilter: A single compact filter response + * - getcfheaders: Request filter headers for a range of blocks + * - cfheaders: Filter headers response + * - getcfcheckpt: Request evenly-spaced filter header checkpoints + * - cfcheckpt: Filter header checkpoints response + * + * References: + * - BIP 157: https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki + * - BIP 158: https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki + */ + +#ifndef __LIBDOGECOIN_COMPACT_FILTER_H__ +#define __LIBDOGECOIN_COMPACT_FILTER_H__ + +#include +#include +#include +#include +#include +#include +#include +#include + +LIBDOGECOIN_BEGIN_DECL + +/* ================================================================ */ +/* BIP 157 Constants */ +/* ================================================================ */ + +/** Maximum number of filters that can be requested at once */ +#define MAX_GETCFILTERS_SIZE 1000 + +/** Maximum number of filter headers that can be requested at once */ +#define MAX_GETCFHEADERS_SIZE 2000 + +/** Checkpoint interval for cfcheckpt messages (every 1000 blocks) */ +#define CFCHECKPT_INTERVAL 1000 + +/** Interval at which filter header checkpoints are exported during full sync. + * Matches CFCHECKPT_INTERVAL so every BIP 157 checkpoint boundary is logged. */ +#define CF_EXPORT_INTERVAL CFCHECKPT_INTERVAL + +/* ================================================================ */ +/* BIP 157 Message Structures */ +/* ================================================================ */ + +/** + * @brief getcfilters request message (BIP 157). + * + * Requests compact filters for blocks in the range + * [start_height, stop_hash]. + */ +typedef struct dogecoin_getcfilters_msg_ { + uint8_t filter_type; /**< Filter type (0x00 for basic) */ + uint32_t start_height; /**< Start block height */ + uint256_t stop_hash; /**< Block hash of the last desired filter */ +} dogecoin_getcfilters_msg; + +/** + * @brief cfilter response message (BIP 157). + * + * Contains a single compact filter for one block. + */ +typedef struct dogecoin_cfilter_msg_ { + uint8_t filter_type; /**< Filter type (0x00 for basic) */ + uint256_t block_hash; /**< Block hash this filter covers */ + cstring *filter_data; /**< Raw encoded filter bytes (N || filter) */ +} dogecoin_cfilter_msg; + +/** + * @brief getcfheaders request message (BIP 157). + * + * Requests compact filter headers for blocks in the range + * [start_height, stop_hash]. + */ +typedef struct dogecoin_getcfheaders_msg_ { + uint8_t filter_type; /**< Filter type (0x00 for basic) */ + uint32_t start_height; /**< Start block height */ + uint256_t stop_hash; /**< Block hash of the last desired header */ +} dogecoin_getcfheaders_msg; + +/** + * @brief cfheaders response message (BIP 157). + * + * Contains filter headers for a range of blocks. + */ +typedef struct dogecoin_cfheaders_msg_ { + uint8_t filter_type; /**< Filter type */ + uint256_t stop_hash; /**< Block hash of the last header in the range */ + uint256_t prev_filter_header; /**< The filter header preceding the first in the range */ + vector_t *filter_hashes; /**< Vector of uint256_t* filter hashes */ +} dogecoin_cfheaders_msg; + +/** + * @brief getcfcheckpt request message (BIP 157). + * + * Requests evenly-spaced filter header checkpoints. + */ +typedef struct dogecoin_getcfcheckpt_msg_ { + uint8_t filter_type; /**< Filter type */ + uint256_t stop_hash; /**< Block hash of the last desired checkpoint */ +} dogecoin_getcfcheckpt_msg; + +/** + * @brief cfcheckpt response message (BIP 157). + * + * Contains filter header checkpoints at every CFCHECKPT_INTERVAL blocks. + */ +typedef struct dogecoin_cfcheckpt_msg_ { + uint8_t filter_type; /**< Filter type */ + uint256_t stop_hash; /**< Block hash of the last checkpoint */ + vector_t *filter_headers; /**< Vector of uint256_t* checkpoint filter headers */ +} dogecoin_cfcheckpt_msg; + +/* ================================================================ */ +/* Parallel cfilter download support structures */ +/* ================================================================ */ + +/** One buffered cfilter record held before in-order disk flush. */ +typedef struct cf_par_record_ { + uint256_t block_hash; + cstring *filter_data; /**< NULL = slot not yet received */ +} cf_par_record; + +/** In-flight getcfilters batch for one parallel worker node. */ +typedef struct cf_par_buf_ { + int node_id; /**< dogecoin_node.nodeid owning this slot; -1 = free */ + uint32_t batch_start; + uint32_t batch_end; + cf_par_record *records; /**< array[batch_end - batch_start + 1] */ + uint32_t received; /**< number of records received so far */ + dogecoin_bool complete; /**< true when received == batch size */ + int64_t assign_time; /**< unix time when this slot was last assigned */ +} cf_par_buf; + +/* ================================================================ */ +/* BIP 157 Per-Peer Compact Filter State */ +/* ================================================================ */ + +/** + * @brief Compact filter sync state for an SPV client. + * + * Tracks the progress of fetching and validating compact filters + * from peers, including checkpoints and headers-first validation. + */ +typedef struct dogecoin_compact_filter_state_ { + dogecoin_bool enabled; /**< Whether compact filter sync is active */ + uint8_t filter_type; /**< Filter type being synced */ + uint32_t cfheaders_tip_height; /**< Height of last verified cfheader */ + uint256_t cfheaders_tip_hash; /**< Filter header at cfheaders_tip_height */ + vector_t *filter_headers; /**< Vector of verified filter headers (uint256_t*) */ + vector_t *checkpoints; /**< Vector of checkpoint filter headers (uint256_t*) */ + uint32_t cfheaders_base_height; /**< Block height of filter_headers[0]; usually 1 or chainbottom_height */ + uint32_t filters_tip_height; /**< Height of last received filter */ + uint32_t cfilter_batch_end; /**< Last height expected in current getcfilters batch (re-request when filters_tip_height reaches this) */ + uint32_t pending_start_height; /**< Start of current outstanding request */ + uint256_t pending_stop_hash; /**< Stop hash of current outstanding request */ + dogecoin_bool awaiting_response; /**< Whether a request is outstanding */ + uint64_t last_request_time; /**< Timestamp of last cfilter request (for timeout) */ + uint256_t genesis_filter_header; /**< Filter header for genesis block (height 0); set from cfheaders.prev_filter_header on first batch */ + vector_t *watched_scripts; /**< ScriptPubKeys to match against filters (cstring*) */ + vector_t *matched_block_hashes; /**< Block hashes where filter matched (uint256_t*) */ + vector_t *matched_block_heights; /**< Heights corresponding to matched_block_hashes (uint32_t*) */ + uint32_t matched_blocks_fetched; /**< Number of matched blocks already received */ + dogecoin_bool cf_block_fetch_active; /**< True while fetching full blocks for BIP157 matches */ + + /* Parallel cfilter download (par_num_workers > 1 activates parallel mode). */ + uint8_t par_num_workers; /**< 0/1 = sequential; >1 = parallel worker count */ + uint32_t par_next_height; /**< Next height not yet assigned to any worker */ + uint32_t par_flush_height; /**< Next height that must be flushed to disk next */ + cf_par_buf *par_bufs; /**< Worker buffer array [par_num_workers], NULL in sequential mode */ + + /* Parallel cfheaders download (cfh_par_n > 0 activates parallel mode). + * Each worker downloads a disjoint height range; validation uses cfcheckpt + * anchors so workers are independent. When all complete, filter_headers + * is populated from cfh_par_data and the normal cfilter scan begins. */ + uint8_t cfh_par_n; /**< Number of parallel cfheader workers (0 = sequential) */ + uint8_t cfh_par_done; /**< Count of completed workers */ + uint8_t *cfh_par_data; /**< Flat 32*N_total byte array of filter headers */ + uint32_t cfh_par_base; /**< Height of first entry in cfh_par_data */ + uint32_t cfh_par_total; /**< Total number of filter headers in cfh_par_data */ + struct cfh_par_chunk_ *cfh_par_chunks; /**< Per-worker state [cfh_par_n] */ + + /* Flat filter-header array owned after parallel cfheader download completes. + * When non-NULL, cfilter validation uses this instead of the filter_headers vector. */ + uint8_t *filter_headers_flat; /**< 32*N contiguous filter headers */ + uint32_t filter_headers_flat_base; /**< Height of index 0 in filter_headers_flat */ + uint32_t filter_headers_flat_len; /**< Number of entries in filter_headers_flat */ + dogecoin_bool rescan_done; /**< True after a full cached-filter rescan; suppresses duplicate rescan in cfh_par_finish */ + uint32_t cf_scan_start_height; /**< Actual height cfilter scan began (chainbottom or 1); used for accurate progress logging */ +} dogecoin_compact_filter_state; + +/** Per-worker state for parallel cfheaders download. */ +typedef struct cfh_par_chunk_ { + int node_id; /**< dogecoin_node.nodeid; -1 = unassigned; -2 = no work */ + uint32_t start; /**< first height this worker handles */ + uint32_t end; /**< last height this worker handles */ + uint32_t req_next; /**< next height to request in a GETCFHEADERS batch */ + uint8_t prev_fh[32];/**< filter header immediately before start (cfcheckpt anchor) */ + uint32_t n_received; /**< filter headers received so far for this chunk */ + dogecoin_bool complete; +} cfh_par_chunk; + +/* ================================================================ */ +/* Message Serialization */ +/* ================================================================ */ + +/** + * @brief Serialize a getcfilters message. + * @param msg The message to serialize. + * @param out Output cstring (payload only, no P2P header). + */ +LIBDOGECOIN_API void dogecoin_p2p_msg_getcfilters_ser(const dogecoin_getcfilters_msg *msg, cstring *out); + +/** + * @brief Serialize a getcfheaders message. + * @param msg The message to serialize. + * @param out Output cstring (payload only). + */ +LIBDOGECOIN_API void dogecoin_p2p_msg_getcfheaders_ser(const dogecoin_getcfheaders_msg *msg, cstring *out); + +/** + * @brief Serialize a getcfcheckpt message. + * @param msg The message to serialize. + * @param out Output cstring (payload only). + */ +LIBDOGECOIN_API void dogecoin_p2p_msg_getcfcheckpt_ser(const dogecoin_getcfcheckpt_msg *msg, cstring *out); + +/* ================================================================ */ +/* Message Deserialization */ +/* ================================================================ */ + +/** + * @brief Deserialize a cfilter response message. + * @param msg The message to populate (filter_data will be allocated). + * @param buf Input buffer. + * @return true on success. + */ +LIBDOGECOIN_API dogecoin_bool dogecoin_p2p_msg_cfilter_deser(dogecoin_cfilter_msg *msg, struct const_buffer *buf); + +/** + * @brief Deserialize a cfheaders response message. + * @param msg The message to populate (filter_hashes will be allocated). + * @param buf Input buffer. + * @return true on success. + */ +LIBDOGECOIN_API dogecoin_bool dogecoin_p2p_msg_cfheaders_deser(dogecoin_cfheaders_msg *msg, struct const_buffer *buf); + +/** + * @brief Deserialize a cfcheckpt response message. + * @param msg The message to populate (filter_headers will be allocated). + * @param buf Input buffer. + * @return true on success. + */ +LIBDOGECOIN_API dogecoin_bool dogecoin_p2p_msg_cfcheckpt_deser(dogecoin_cfcheckpt_msg *msg, struct const_buffer *buf); + +/* ================================================================ */ +/* Message Lifecycle */ +/* ================================================================ */ + +/** + * @brief Initialize a cfilter message. + * @param msg The message to initialize. + */ +LIBDOGECOIN_API void dogecoin_cfilter_msg_init(dogecoin_cfilter_msg *msg); + +/** + * @brief Free a cfilter message's internal allocations. + * @param msg The message to free. + */ +LIBDOGECOIN_API void dogecoin_cfilter_msg_free(dogecoin_cfilter_msg *msg); + +/** + * @brief Initialize a cfheaders message. + * @param msg The message to initialize. + */ +LIBDOGECOIN_API void dogecoin_cfheaders_msg_init(dogecoin_cfheaders_msg *msg); + +/** + * @brief Free a cfheaders message's internal allocations. + * @param msg The message to free. + */ +LIBDOGECOIN_API void dogecoin_cfheaders_msg_free(dogecoin_cfheaders_msg *msg); + +/** + * @brief Initialize a cfcheckpt message. + * @param msg The message to initialize. + */ +LIBDOGECOIN_API void dogecoin_cfcheckpt_msg_init(dogecoin_cfcheckpt_msg *msg); + +/** + * @brief Free a cfcheckpt message's internal allocations. + * @param msg The message to free. + */ +LIBDOGECOIN_API void dogecoin_cfcheckpt_msg_free(dogecoin_cfcheckpt_msg *msg); + +/* ================================================================ */ +/* Compact Filter State Management */ +/* ================================================================ */ + +/** + * @brief Create a new compact filter state. + * @return Pointer to a new state, or NULL on failure. + */ +LIBDOGECOIN_API dogecoin_compact_filter_state* dogecoin_compact_filter_state_new(void); + +/** + * @brief Free a compact filter state and all associated memory. + * @param state The state to free. + */ +LIBDOGECOIN_API void dogecoin_compact_filter_state_free(dogecoin_compact_filter_state *state); + +/** + * @brief Reset the compact filter state for a fresh sync. + * @param state The state to reset. + */ +LIBDOGECOIN_API void dogecoin_compact_filter_state_reset(dogecoin_compact_filter_state *state); + +/* ================================================================ */ +/* Compact Filter Sync Helpers */ +/* ================================================================ */ + +/** + * @brief Validate a cfilter against a previously verified filter header. + * + * Computes the filter hash from the received filter data, chains it + * with the previous filter header, and compares against the expected + * filter header. + * + * @param filter_data The raw encoded filter data. + * @param prev_filter_header The filter header of the previous block. + * @param expected_filter_header The expected filter header for this block. + * @return true if the filter is valid. + */ +LIBDOGECOIN_API dogecoin_bool dogecoin_compact_filter_validate(const cstring *filter_data, const uint256_t prev_filter_header, const uint256_t expected_filter_header); + +/** + * @brief Compute a filter header from filter data and previous header. + * + * filter_header = dbl_sha256(filter_hash || prev_filter_header) + * where filter_hash = dbl_sha256(filter_data) + * + * @param filter_data The raw encoded filter data. + * @param prev_filter_header The previous filter header. + * @param header_out Output 32-byte filter header. + */ +LIBDOGECOIN_API void dogecoin_compact_filter_compute_header(const cstring *filter_data, const uint256_t prev_filter_header, uint256_t header_out); + +/* ================================================================ */ +/* BIP 157 Hardcoded Checkpoint Helpers */ +/* ================================================================ */ + +/** + * @brief Look up hardcoded cf checkpoints for a given chain. + * + * Returns the per-network array of known-good BIP 158 filter header + * checkpoints, used to validate peer-provided data and to bootstrap + * BIP 157 sync without a getcfcheckpt peer exchange. + * + * @param chain The chain params to look up. + * @param count_out Output: number of checkpoints in the returned array. + * @return Pointer to the checkpoint array, or NULL if none available. + */ +LIBDOGECOIN_API const dogecoin_cf_checkpoint* dogecoin_cf_get_checkpoints( + const dogecoin_chainparams *chain, size_t *count_out); + +/** + * @brief Validate peer-provided cfcheckpt data against hardcoded checkpoints. + * + * Compares checkpoints from a peer's cfcheckpt response with the + * hardcoded checkpoint array for the given chain. Returns true if + * all overlapping checkpoints match, or if no hardcoded checkpoints + * are available (no validation possible). + * + * @param chain The chain params. + * @param peer_checkpoints Vector of uint256_t* filter headers from peer. + * @return true if valid (or if no hardcoded data to compare against). + */ +LIBDOGECOIN_API dogecoin_bool dogecoin_cf_validate_checkpoints( + const dogecoin_chainparams *chain, const vector_t *peer_checkpoints); + +/** + * @brief Load hardcoded cf checkpoints into a compact filter state. + * + * Copies hardcoded checkpoint filter headers into the state's + * checkpoints vector, enabling cfheaders validation without + * a peer cfcheckpt exchange. + * + * @param state The compact filter state to populate. + * @param chain The chain params. + * @return Number of checkpoints loaded, or 0 if none available. + */ +LIBDOGECOIN_API size_t dogecoin_cf_load_hardcoded_checkpoints( + dogecoin_compact_filter_state *state, const dogecoin_chainparams *chain); + +LIBDOGECOIN_END_DECL + +#endif /* __LIBDOGECOIN_COMPACT_FILTER_H__ */ diff --git a/src/cf_checkpoints.c b/src/cf_checkpoints.c new file mode 100644 index 000000000..638dd3e0e --- /dev/null +++ b/src/cf_checkpoints.c @@ -0,0 +1,6293 @@ +/* + + The MIT License (MIT) + + Copyright (c) 2018 Bitcoin Core developers + Copyright (c) 2026 bluezr + Copyright (c) 2026 The Dogecoin Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES + OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +*/ + +/** + * @file cf_checkpoints.c + * @brief BIP157 compact filter header checkpoint data. + * + * One filter header per CFCHECKPT_INTERVAL (1000) blocks, used to validate a + * peer's cfcheckpt response before any filter headers are trusted. + */ + +#include + +const dogecoin_cf_checkpoint dogecoin_mainnet_cf_checkpoint_array[] = { + { 1000, "03cba6fcccc24f375efc327558d84f79c4be0aad567a11f6e251f2d647ee76c7" }, + { 2000, "a9abdca4c6f4acc3715a8c36a0429fdbec8e338059c0588ebb5e3faabab95fc7" }, + { 3000, "a019c429c39dc45913e23bef748c0b833da4262de59ab2cc1efcdc6cec6a0d20" }, + { 4000, "acc366d51d9c422bc020d8f21e19d8c57cb207b5fc8af082ddfee5d6780603d2" }, + { 5000, "305c523f4287fff9cdb266171abfca9ae2e9f1311b417255d63464d5985482e7" }, + { 6000, "d686fb009c5df70ebd2c1d789e2243a1ef16fec6aa981d10f43c7aba84e639d9" }, + { 7000, "93586f1ec916329416c26abae5129087c7a310bce39e9b6984f21eb3bd584118" }, + { 8000, "1af0e9121ead9e34fc484014dca7fe2143b29482ebc1b28a043daa265990a9ba" }, + { 9000, "9a9b396b5b4a43354ccfa87ac188d16a26fdfc6690544ad1b9a6aecf077228e2" }, + { 10000, "888a34959356ba713a435b3c196a74ed057b2101d7ebf5093164375f5c377773" }, + { 11000, "d162935ec49dffb60733dd5bed3337c2b8ca94fdb13730a5056aa264e3855d1a" }, + { 12000, "0b76ceafab9b8df1f6756ae3118de7720b8fc5aa91c3cd7f6b06d0fa972b71d5" }, + { 13000, "c736c6ee7b16fd7b16f21898216ece99b6f0cd07452fba9a06169031feb8b84f" }, + { 14000, "34fbd49d219ca87aef0a6cd5de611b59661500c9b9b20ecb314b5e98da3888cf" }, + { 15000, "08cf19e74be510a4da996bc01cc3ff6846b7be7a125af73c15571757dedb5ceb" }, + { 16000, "ed1b029f13cd667ef1019cf92b99c1b55c2c19fb659e2dc4760b78a3098b832f" }, + { 17000, "d5449b02e52c2a9f701899d56ce3903d927b937dfb5c4a366d943bec325517f2" }, + { 18000, "130d09e9243fc3ca9e6b5a9520bd2853c3e17dc97a305f2700287b87d3cdbb1d" }, + { 19000, "8b16f9b4ad48078d059c9588160644f9afc724f10a67fd5969316ec8242e8107" }, + { 20000, "72c0ec389608f5f4b7a9089f28f0d94a782c7e2347785d2601bd6ccdc1ddb704" }, + { 21000, "fb1458cc611fa008a2ad08007cc9034a2e3f0e97c57e77c690440625450f1244" }, + { 22000, "2af00182c7b6c771b97784d7429f2839725eb68c67180c9b38ba7a1f62558cde" }, + { 23000, "ea15e2fdaa962d13467c6a1a0f15d8375881daccc908fd8edc0732d1395d1388" }, + { 24000, "8934e229a01cad3634de5a509bc72132dbf75d166583ff21c1a60e2589211cc7" }, + { 25000, "fa7b514aff644d18cc24b9502046ad48c75ad25a6bc757a761c9fe944636530b" }, + { 26000, "76e71b5a083f7e412ffb7394662e1ce6e79265de88f69873fe590017fde6065d" }, + { 27000, "063a8a7357dbbbfd2dc3aaea366be674d377e0082d5d0d2c92f691ecfbe99254" }, + { 28000, "e2df6a34cafa71a254273c0738b1fef3953a10ac2afb13fcb9773067c5f010c4" }, + { 29000, "4e3be4f4bb1f9fcb24b1f4244531825718499df833174417df54928d854bbc0f" }, + { 30000, "32247ee3ae6c8c06e16f81032daef3361b81aadcaad027dc7f5d5f389518abfa" }, + { 31000, "e4eaef8453c21465bbc96d68641b2881945feb2cdb2e6c4398d49d8a67553cb0" }, + { 32000, "312313f730d5ae288259deb8d77ddab5e2716c616645e406b88f1bf7dcfc4289" }, + { 33000, "ba0dd569c517ca823d2ed6e85e54b7a82abf4e9c25f5ef0aa940ad068802fcbd" }, + { 34000, "072438d36966ab508e43406b45dd04eb577ffedb20ad39094dbdf9b4f41c5bf7" }, + { 35000, "81016e4a8540a2551e38e72dea35eb33ab3ebfe5dbea97b1b07305c0e1bfbbd0" }, + { 36000, "3f8ef3a1d4eba6235f79e22ff35f81ec77c16e47b275dadb86c2fcfcf9cd6b16" }, + { 37000, "86c762ecc63e233aa239b8f70157ade17483179e0e1fbcefd93b24497af656f2" }, + { 38000, "51a78d5f18efc5330ec8548ec9087c96f93d0527348f1cc32696c62d7d16f0be" }, + { 39000, "a3f4a02391923c3cb36a9865b6939b9f73975a16ce83249c0da3a15aa09f9733" }, + { 40000, "4d2dcaffb4fb14769abb78be6e6cc277cbdb13e9bd76683421dc63bd764f8090" }, + { 41000, "1a6bb4d0daec7ccb7a8a21b311009c03f94bc87d17f8be28c798061be715f14c" }, + { 42000, "52feab3cd806011f6e432e480fe7b31c750ab80bdaa1707b1ad80abdb680b6ca" }, + { 43000, "ff2be3e4c52989b172a13bc9ed3e60a76dfe9918ab82e796332c7292538e1736" }, + { 44000, "78be26e8070d354e482ca95e4c7a69bce5ed9a243332d2525cbcd946fe1521ac" }, + { 45000, "b6a0515ace95dbd65c6b6a4372f4070593034cc992a0fe671c01208eb798aef4" }, + { 46000, "2c3cb4fff0b1d263a08a89c2a559ad3205a54572ed6030f0cc931d408d92ece5" }, + { 47000, "f85cee229a807ad2d9359fd2a9c4a24a1f7e936962fed5c8fb33c0612d21894f" }, + { 48000, "a27189f1be9a8d43f01079a5dec988b11cfd94efd6cbb05913c56e1507e245c7" }, + { 49000, "8c4f77afbc6b7aa35580f90e816b54be4402c8bbfc68f7ebd665780e9b5835d0" }, + { 50000, "c3641a217f872db8d468eca848583fca42a48ad9ac212e566b29e3d1af6bd8db" }, + { 51000, "a34bc5740731a29b8edb335fae08ff170f66935e16fa9ed208f0eabf99a7930b" }, + { 52000, "4eb2f95935631e64df2930be875f3c15a25575a3dc9b6c58d36319f9b5622cc0" }, + { 53000, "a61db1d5d11b7383113dcca3e521e1cbdd4eb6cf140b17de9ca1cfb74f825d0c" }, + { 54000, "bae28556f5d33275dd09ee921f946b47d5773bc090d5e0cd07ca3e66d0beb4e6" }, + { 55000, "3f673a3a07fa746ff925e7eda18a15e5c13b9452ab2e0bdada828997ce02f7aa" }, + { 56000, "2f03afff65dd1375635634a5cae26a108dd5de398cb2564f7280a9af1d9e9763" }, + { 57000, "2adf548c6c32aaf9c3fbc07ba53a9dbebc353800d8b9b0b0c61caccf589c8e84" }, + { 58000, "34696ce9da0f294a80c3c247fc78a8fa85c07470e81d66084fde2302a992061a" }, + { 59000, "cf2fc8a708161662cc77275716ea4c6effb578fbfb8cf2e484e885ef865ce553" }, + { 60000, "7bcca84d61226f5da8e7994d9f549e9c697e3ef47870e5655b969366417b5f81" }, + { 61000, "3746da0b2fc2731ad6b5b939f0eba75c9d7d4901c6da5fbdda279c4ba1ba6c64" }, + { 62000, "964c3975b738b1744dd779b0e02a9a43f2c84db893c8fe7baa850d557086dfba" }, + { 63000, "e7b59a28473bafb6c90150b13747960242530e5e8265e404ebb3efbbf1a0c349" }, + { 64000, "880585429b9fa8f44597a7413276b2b4dcbab1d1c6370ff5d7135c15727aebcf" }, + { 65000, "6ad31328c3cefaf953b7f2bd9cf11e22fae7d576acf25a1231bc2d13fa6e212a" }, + { 66000, "4bd129e544562da5edec8c356313fc5e71e59b322a1403d7b16989e69a560745" }, + { 67000, "b8e814802c8011f08b4c43cd54a8f47a09eaf860243e6ddda3e6f0adb230e229" }, + { 68000, "eb20347a822a5f864259634a0de7e412ff2ff03d3258b762c5b95e16c6a9a943" }, + { 69000, "f28938b3d8e9b1cef2f3d8f35b31e6ebac34d7480b414066ea1081a5819b06f7" }, + { 70000, "1f89c9d488ba97eed360f16d18afae8ed6434bcfd414fce1e8ab86872d76ce07" }, + { 71000, "299443e579187a0c0316d979060234ce3e2e95e51bd88d3742535513236a9400" }, + { 72000, "718d3dcf171c6ece78741b0b6a98ed3115acb9fcd3d2d0f729ade693eb16767a" }, + { 73000, "c1402662f853ebf588a2d2dbfd05b15aa224c3e7f35945e4185442e721ce1692" }, + { 74000, "ecdadf32ac0e54a66b8fbc6929b4a3ae5bad8ec8a59f86767e169d080606a9e9" }, + { 75000, "92a7df7d77402059b3c5e48250885d1ed8144e4e6040418c3d30d696c38e8b32" }, + { 76000, "0728d1f97e0c1e0d041ec3e2ec6bb3b9ab18fa8d0e886c090c1eddccbb072f27" }, + { 77000, "38dc1d4a9ca5f169ae409108b07710f9762fb16cca31c44faf07abf68c4d6703" }, + { 78000, "63aef4c34867128d303ae63cdf3c20c5b51d29867d1a48a38d50a870589b7e78" }, + { 79000, "1f779091df0cf3cb911b5a19f0587f87fb347104563c40ed2cb3b871a95c88f5" }, + { 80000, "0365afc55aac6e1a2dda2e382cd85eef200d9002af5618b8335470d8b137e898" }, + { 81000, "3d9a03d6599469d07c6d9accf7e22ca991443a64ffcf4dfb5f40d7d3aba8b972" }, + { 82000, "e2475a661f39dbb4f9f9d8f6ecf2a85620a54d87efdee4e86134e4d3a1de91d2" }, + { 83000, "1bea47c29311b8a0103bb785d7d63de4f1180d0b1fbc5828b7ae33123e55d34b" }, + { 84000, "4a680c58cd4bb1457191966923f2399f0bf3a654b6bfffd8dc23df569f5114fe" }, + { 85000, "d25c2b5b5cc70d8b1b7e08c8e67b221ed337d9ff977f25c6e3292dcba1dc0312" }, + { 86000, "304931cbfe5f0816dbd1af996c85a15768d021b2222c700f2a084e9a40d67e7f" }, + { 87000, "23455ecb3dd9453b69611391f80a2c6aef1046fde7026ef8d051a120771489ee" }, + { 88000, "560a90e1a2c597cf721f11245bac1700066bea0146682c956f36eb1bfaa84601" }, + { 89000, "e88a640a71932b67d8e9d5cd3ef685e440c6fd69762308944781bb9294acda39" }, + { 90000, "14f3831f186c1e100a35d8a205a0a637fedcfae805f63545ebf0886dca8a1893" }, + { 91000, "a20ec28849ea82182ec81104cc19e0bdf755fdd99bd139352b46e5b3deedc847" }, + { 92000, "abbb536704ac86c88365f58632d551ee5738bd831de45a6f916315ac9ff38bc8" }, + { 93000, "f5e792d5780c25cbfeaf20470db541c3395be0ebf713782f9174a259f4ad364f" }, + { 94000, "2a55b22f90170d9c5ce90fd19215b4a689330113db883d4440a5518f5512ec7f" }, + { 95000, "3be753aea124a3bd8b38a9678a6c355ab9434b655dcabe272f468b362734cb09" }, + { 96000, "f38c670deb573788f4829ecc163d6469067ce01ac622718d2fa0ab7973950459" }, + { 97000, "65600c036b4c06123427e63759105cc96393a0deedfc1fd67d6e49d2917e48d0" }, + { 98000, "7b34318ec4022ba0874c1f64d698bebd0e2a661a837ab322429a193fe34a9605" }, + { 99000, "97a1ce88a4d3cf6ac79089cdc9502d59467de2afd2d46e4ea21a7692afeb608d" }, + { 100000, "040a2689d9159fdd6343db90acc55206b051e51fcee10477729d22b42e2cdc8b" }, + { 101000, "bc47f3888982374d89f86e371bbf6d2f1385621972b311da94277eee6fee0c02" }, + { 102000, "e6a949e91ec73833388090350d062e61fca84cf48416c0e285e4dd3b486cda5a" }, + { 103000, "aff08adb6890c3ce35f6ab2a9c1d13e6a60ce422946996062cd9d2415874a30e" }, + { 104000, "b203ca08981a51ca03f834fd82de87b971a7ee6d57ddc8517b5713dfc01e392e" }, + { 105000, "a1c141a974f691dd6a11afd834a85554bc7b9d88257c2679c82018035b91af78" }, + { 106000, "c53a6a066362e3f2e32c33462bda9346862da6268459ec2237f0010eb8cf07e3" }, + { 107000, "6033fa0bff49d7b94ed76f7351dfe4eb6bfde0b5ee97e25504009e516f738a91" }, + { 108000, "f533adb4b4e1ae94df0be093f92055d6106cd4ab3e8f0ca076f66c8a3a661329" }, + { 109000, "e8db028d01fd0e190d269e530d4980b74696660409eee458684a6bde3ac7b0a5" }, + { 110000, "0da5e17b5d3233a7244a6be2b224e70c07dc66d2dae8756aeac8153fe88dcd4e" }, + { 111000, "5b5cc2c8ff0f9b7c135c3be32c14de86d62c9214c541a41be3a78b53dce008ce" }, + { 112000, "81e921abe70a2da4ed1362f480f961867669bafe252f6ecdc2dde68724814122" }, + { 113000, "a7aabf294fb83e07163f35ee2249f40f38e35d4213dea50c01f1e992233c8372" }, + { 114000, "3ba7e2261dd77ca8ad2e255aaa9c17b3e2b8fbc1ac757744f1ec838c51bb7b94" }, + { 115000, "1e959473c3c5de06a65f73d56f7e1b3bdf402552f35f034a5fbf7addddb5f3e9" }, + { 116000, "2a129efbde15b406e5bbe57105373b8e4116b856b14df400c707ab4bcc680f5d" }, + { 117000, "e2eb5d17e89329fb8db4f4d235b21630506555f0929bd428fa9d5baa183144f0" }, + { 118000, "f991fb1f2820e11f1f192f4720bf104d54f10a5e075d0ec493e254482f770d7f" }, + { 119000, "034fcde84822ebcf9ebb3e1e2753c9a480f93c55273d397af9c4ad7ec1c866d0" }, + { 120000, "6163f4ade939318dbdd623ee8c2e38263efea610a1e8960f4864b18bd1932e3e" }, + { 121000, "f078b6a589460c41369de58f9bc057194e3e51b24fd5b6b78be48a156088c7ed" }, + { 122000, "e924f948f84e6f8ed42c6dc55d41ea75b1265effaddf7a6d6962e3389fa365e9" }, + { 123000, "0f748c97cf042d1622b7776fcfc5c21ad0937a094c5741cdff6d3133af1062f2" }, + { 124000, "4d926a698f69f2b4d10a5100413f2b0d5f5ade678d7818aad77cdaaf54627393" }, + { 125000, "bcb29facf3a99ce36dcabd19e54a52b9ca5f538eccd726d400db3c3d28500001" }, + { 126000, "13050960c4c421ae65e7024a2f921af6cb2a6704ca1a9eb55a81ab8501dcf2b2" }, + { 127000, "91e994e787ca1235ad0209a1ac21b2b1f6cd36f978768acd4ef675ece72b1435" }, + { 128000, "3239ef551ea7258d9d5c0de5e49cd0dfb6c7a909c23216b2e3e7297534ffbea0" }, + { 129000, "925eb0ee6240bb3df585d46696f88604a4ee10c625271f78d4339fab7d14d131" }, + { 130000, "175f2e7e23215a600b429ed712445a4b4c90eba8e9da8dcfc19c6702af9bd451" }, + { 131000, "a7102065d9def3e7c906c84d1658125fafe8ae4bcdcb25199b23b2ccf6b54eea" }, + { 132000, "93ad76336720813772efb7247c91df59abe849cbe668b9cebd7fd2d3374b7467" }, + { 133000, "5cd540f335754b74a47a0625ff971b9509873b3f239bf787f7069ddae95939f6" }, + { 134000, "b19f78a30181ed6caf9dec9566753e82c0776c8aa968f03232408a4b4583519a" }, + { 135000, "694acdb929ac9e39e9b4f4ea35baf078c7b83aa9dad9e9364bd3ee455f70a605" }, + { 136000, "ed6ccde444b85684b056f31fcb8fd21fb273c63b542de8eb115583c708053041" }, + { 137000, "7940479e1592d6c3ce3d10e6fc66917601aa06d5c643cb67045ae7d74d4cebde" }, + { 138000, "25c90f26c62cdf4228a12b5204db33b1e63a0391159b8dab0a7b000abeaa57e2" }, + { 139000, "25b384538f29056a73eb03cd3deb3b8e6cd929412596456b5887a083bb1a0a20" }, + { 140000, "92d7dcd30e1cb3ddf97e912a08123af11a8a8cf1ccf6fe3ca46825d32624dc44" }, + { 141000, "1e27b711601d806181c7ce84e393f1e790fdf72d03e8936d1966308296d7da79" }, + { 142000, "b3f5bcdcdece5733a944c27907b28b8d02b99597f0bb9f0dae82307432a14524" }, + { 143000, "57f4592a94d648ffe6695146bc76223cedffe0eceb9f9a85a2aeccfe8384017c" }, + { 144000, "a304114397eded9c2c0d36e4e28f8c46b86a76b3b063e3c2f8727308fa608dee" }, + { 145000, "8173ef41a7993f7a808b05a5c5424458a6e842af9c0e188c78b12f09a01f87b1" }, + { 146000, "f702b604b7b0e6082afdfdd7f16439bc615f13e0c24d75e1a659d4127e2534c0" }, + { 147000, "8e7812ae464ffe87e8d67a2450f4c34335b04952851b28ab13cd63d958e76361" }, + { 148000, "c4f3343419025ea082685b99954161ad7b2ff9ae8e1dfa93ea823606d80d1414" }, + { 149000, "9d4c85870b387a5c335a562fbc95bef11a0ec5a937c6944f7536debff5445137" }, + { 150000, "5efae1425a2396d37da6864f0fcb5a0517e2be0e78a2d576f9340eaf55257d9f" }, + { 151000, "9b7805f62165b97007ae486ae7b974a07c8a41f64a49ecca085d0c659a85c9c6" }, + { 152000, "f71eeeb7618815a0063c1c3b6a87d6f0fd31bd1c3842398ab25317780a490aeb" }, + { 153000, "43db191345bc42c7bf5c3773f16335128d5dcd2bd0466e462bc397964b7ff9d2" }, + { 154000, "a26670166fb1d5eed39f59b6d3476a92c275ebd1e889f7f26c5a596f04d6a942" }, + { 155000, "06cab38f0ea41524d67eb30c9018e008656d01fd8ec61d8892efdfb88a096ed1" }, + { 156000, "d740fd16e32af478cf1017579768d759093999527397a98e8a75af4730985ab6" }, + { 157000, "f11907c39d8ed8eccb0cde3ee5a556b4e7f1d405ed8da919815f45e4d7af8cfd" }, + { 158000, "60ac3f54b57031bbe9bafd91e1aa3c82d5f4d0c26cc3bfef5bd0bd6cba1112c5" }, + { 159000, "6691c171bd2263fba50a069bf70fc4d45d852e925bfee0a6fc7f4cc8a1680e6a" }, + { 160000, "2c347da0cd83838761be9d37bf97440c6bbd046d0ee9282fcd1f7ce925f01167" }, + { 161000, "7d6d0ef905e5eef81248452aa23538377d922d0d6c92b3c9da343ab8446d4cf6" }, + { 162000, "8c79901144f6a6b6ad76dcb0a061c303365e43dcec2cfb193a95a27a31cceb41" }, + { 163000, "3d78dfcf4474ceb8a5f0555fb8848e9a4045071bbf8bd346832c8b3224dba16c" }, + { 164000, "bac97e45591d3ed93be4921335983b7d3ce4b3df5d348c7ddccff1471986964f" }, + { 165000, "b48c065c67de84eecb05d048cebe8747a997024ce66f0bf12ce41112d7813e2c" }, + { 166000, "4d56b4bf7a90e128d96f47f6fbaa7fa2e7e6c65925f2a00fffc1ee13af52489b" }, + { 167000, "ffba9038ab2d31aa463be124d804be4cb4bf8469e6b363814c3081ac3f7d45b2" }, + { 168000, "1855fdfd703d66d277b5040c1f997bb4be0943ccd2d2be9492c8b7dd270d920d" }, + { 169000, "4ed3bebfba3027d248b50b706437a903ddc5a0b8acba93d9f87293dd439e8ae3" }, + { 170000, "0077b8b86a22f41e46869edef3312d6a6dc0f6ceba0d7ddddb32880c2954d691" }, + { 171000, "1f191167fce71945939d0bbe57030e1a376403e0cacf8c284b59a9c10b721d8e" }, + { 172000, "c0dba8b11d5888dd5348ba529a6bce7cfc2608a7581f2df3d6e10583231dfe16" }, + { 173000, "42ea4ea255d96a08ce4de4b20b8c06c875d9281301c0f05e4a72e3fb21a223ce" }, + { 174000, "455024bb5bfaf149f557333749821bf9cec6652f5ad0899ceb86aad7a40b2bf8" }, + { 175000, "fecd7b386e5fa53b3f00145f9134adb5da1409c57a1987384226f1a9c4d0596b" }, + { 176000, "b27469228f4c618ed9b9810874741d66fe3a39902a9c1065b6288af3d3f16969" }, + { 177000, "18635232aa3174c4e1971b930e93ebac0493ac81e7dfe9325d728a2f21b59383" }, + { 178000, "e6db842b4273bf1ec100a3c45acbb3f4bc6406b09e2cfc93591f54a93d2d5b54" }, + { 179000, "4359b8a6d671822713bbc4d3a2361c19f6f8a842a5d4b91a36aef887dc6d490e" }, + { 180000, "919d26ee5b6cbb81a01b2f709aa2c8d7caca857533ba254cc303ec1f730435f3" }, + { 181000, "d38ed767d58461f9cbb4e676350a71265bd5d3020ee675014f42d16cfe066ac1" }, + { 182000, "9f262fc7ebd239881ac4a0ed54a465dbe700c5504fcc30444dd34fbfb2cbb2f0" }, + { 183000, "4002a379de7f81ad7a19671ecf0271991f4cee44a1e04c05aa6bcafd1f74ebe9" }, + { 184000, "3ccd7a773cf32721eca7f88a0a7d3251952b6892df328608aa59eded4d1a433f" }, + { 185000, "1e95d64180c5c0c5d73f890e5db41b7cfe1ae3d3d025a3a999cd7072674902de" }, + { 186000, "b9fcee023c29eb1c985d1786be0e83278d658f6376d8eab9a7a109a268278559" }, + { 187000, "2473ecc8f887a7ed3fceed2729833ebd922a60649cc65a03a2a441cc7790c953" }, + { 188000, "413a6e45818e05224ae38a5d5a0df1c849d7ea31b25e9e8b3f8109e8acc90715" }, + { 189000, "63a54c875243a1b3544400b66e5a1c46aba6242f3903f57162ef455d92688130" }, + { 190000, "d56ed3427b26f1a53808c74064e247bb2e05052d4ca60716a722daa89d45c8e8" }, + { 191000, "cb9c10e1fc3e1c54564f04ef3401da0409d67953be7edccc7b9cd5fc8f33d2b0" }, + { 192000, "4a8da605c098cfd8224f768ff629b4e2f943887366e97aba8cef65015bc2a465" }, + { 193000, "3d1c7cca4474e83cb375423482a36e6a70ccaf4025f41d87c5110ec28ba8b111" }, + { 194000, "e9e27e3a5a9078d769bbd282f3fb4dc9bb946d9e2c1666a0bb145dd8e3ffa412" }, + { 195000, "46e3b675f82bfc88475fd50985ef8993ee9c1ec4d0d75c133cc705038271a73a" }, + { 196000, "fa1ee6520b6236799f1e502d5612d6077389c171271db72d2afff2b44fd88a2a" }, + { 197000, "d72ae985317448c5cae476b3c94cc6aa49a894e3ee9392e26ed8471ad621411b" }, + { 198000, "c43e55096f0eebd5e2a2d6435f695f2c2d211669e12c7fc28e0bc7eb78daf813" }, + { 199000, "332469ec0c679185fd73240ea07036b8ad4591dca7066577885701197f4bfd13" }, + { 200000, "439c6d6791d5d2d681fcd94e44d3cc4bb53ebeaf12b42d3fdbe13ab9cc6c2b6c" }, + { 201000, "3a6263dc9d17b7d60f3f1688cb5ee25179c14fb7617c1060da8e20eeaf9d5b02" }, + { 202000, "c39b125ce9146b54e27766fb54f63933c2d832f6c0f8c4b319d28910d52e656c" }, + { 203000, "b841ce9abb04472783a11045f464245393cef21332214b0590fb4359665ffa77" }, + { 204000, "14aa374fc02446acea5cfebc9ab6e3f1bf2a1eba7bdaf6524b15bdccdbdcd40a" }, + { 205000, "3e0eccdb3c8e136f9202b7e1a562510149652e3dd0cd4265e8fe5a7fc6e6444f" }, + { 206000, "d2800e31dd1bbd09c61bf063534cf8f9b6286487d55b8aca04d9b385f78bb4c9" }, + { 207000, "fc63051be590e1a633dfc0eb9f1ef01b1d75e50c656a0d18a403026bf07c46f6" }, + { 208000, "8499934e0c38a15a0c2a2c232a5508e7bf0ba98dcec2d10530271b0449399e26" }, + { 209000, "fd1b59bd9b527343688ed186745c70c0ebfae0f91b3358f9eaf3e0025a667b17" }, + { 210000, "110f806f132984f11a1095bbfe81bc9359ca00b78676117957df266980ebe7c1" }, + { 211000, "375a086c58c91ccbd94ca76a18d7bbecf937b1b597e62c82a2343154a0d32e43" }, + { 212000, "2e023c2ae690c303abf804677a4478aa1f0cf801cd2936fa04de308b9671e22d" }, + { 213000, "8be2e7df973249f23f9cf79fd077af3a1aaad29dcfa315513e773e3e00cf8f72" }, + { 214000, "27ce1ad8fcb3962f27b7267b71a905987f3e8d15902a6263b1552c38acf190b4" }, + { 215000, "8e5e29635549f88286647b5e227250d0cb40208dd68162cd813f98a8bf0442a0" }, + { 216000, "712f5936713951b8b3ac5dca16b8e43c070437b0ead52dde577975ba9aae877e" }, + { 217000, "6aa515d361e4ec36ff2754f9543f96b99fe586e5060525fd35f0d47e2c748f1d" }, + { 218000, "5022cc4b8a13bc788ce103822e54140ce2a832fd699051bb6c5991a7c20206ef" }, + { 219000, "28ee253863d6ecd1794927cccaba53eb0d80c81f485255f545c23e60bcd2f7f5" }, + { 220000, "a0f5006183cd193e19fb0d71f4e6b82458094ffe65f87ba879b005f81ffdf857" }, + { 221000, "bafb93e0e21a9c91bcb8b285c30a20c7a78b0995192ce2202ccf3ee51b55fbfd" }, + { 222000, "a3b8705edf4089704391724a4a3fddfc12ba3d16da6b7491910721b26c8d3954" }, + { 223000, "a71e5125778f612472db50d9e38bd160071639cc27d9697de33ad098a92fbb2d" }, + { 224000, "5d95c7ff7bc2fc63bded0b14ca0d322f5db6f23121dc467b0ef1cbe1d9774078" }, + { 225000, "4f6a06694d8f3fafc044ebf9e7cbca35821916fcc8fbf9d74bf970423ed273db" }, + { 226000, "509aa9ad5d80ce5f0889cb83086c98fb1b899b7b97650850bfdb7a9062d9449f" }, + { 227000, "6cf1170aad8528de92d19a77afbdcfeb138148adee2acd1a9ad7cd81a8c8feb0" }, + { 228000, "edf3e6312ec81b79e3a8024d2dd41f260aa2d685fb17418c0c68dca332cc83d5" }, + { 229000, "22ccd17b4c8a8d2da72b7bd19627cdce4e5f4f7171da6d75691e81e57295bef7" }, + { 230000, "107c03dd2c6d2cfb6d2e31afb31a10792fae7f3ae2015e5ea5864bcec494a5f1" }, + { 231000, "5ca9b3dcd5a986dfaea043a3dcc7e2a01efaf2502a1df629d4762747e25c9ad0" }, + { 232000, "553dcfa0df8b55bc198e72eed7a80fa2d25f8585a026b40c4d204dedf44d73da" }, + { 233000, "5922a2df21fa41d097f0ae5a0bb5e3823b2825d915c977e98d216b301c94ae7c" }, + { 234000, "b9672be2479a8ae221984013c1d828a86fa1ae382d9ddd379cde698b311b3ef4" }, + { 235000, "affabbc6719937339bee9bf09110143a363b592f54efee46c6b764b12518510f" }, + { 236000, "53686f0d22c8cbccc3405ee2c4d413fa4a1f4323a33188b9f476c183d9fa1089" }, + { 237000, "6283e32c55e98dac176426c8bf9d5667ef903fcf7d7977906c272438dccb0232" }, + { 238000, "3620b1994fb465deea8497cd6fb5eb0dc7fc9b502c91b021b548c07c67d343ad" }, + { 239000, "19657a793ea4f4b0c344d51cae1ce5b548df311fdbe7b124368774f4e8e01320" }, + { 240000, "17fb199607abc47ca0f14de1f780d664969ba8beeab9d734a0b88a65c23ac5ca" }, + { 241000, "c06f0ca4c202703b64c54c1ab9e21eda80ae1c5e6c4d03c25a69a32a0160084c" }, + { 242000, "16ae535c22f100b580217cd64b2195b1c96a10afdc51f142b6f9fd018dd8c113" }, + { 243000, "30a9c71e3a70ff395d60cba66ce1a2d8008595dc1b2e33d6c7eb88764e7a4829" }, + { 244000, "96b2d4923a31ee5fc462f141ec0c0b81d66c97015d9664477fabfc811eea26aa" }, + { 245000, "aa29b88cedce798c9041f49b264e36b6ef671b1e527a12261708b222fd6286a8" }, + { 246000, "182cd533f5e965727f0b625c3343a3591fc2932123d69d611416052588f42784" }, + { 247000, "680cbdf62ffcc7f2b9f7acf21c2b5c6ccddaa3aeb3c84b56e0f515ee8a28dfc2" }, + { 248000, "150eea23a5d2639141b9d7f5b60d994a8418bc77fa1b3f01917f0f8845ccc402" }, + { 249000, "30e83dbf9efc03d25432b7a416d07218ea8766a079e50b6046074b165ce31a36" }, + { 250000, "fabcfad39bf49f1ead5edf583dc4f5e3dfa7fe067737a4e3e2f6e3e97eb3c4bc" }, + { 251000, "86e3c712e44fde046e00d6d74bd09d9c37a16dad9598d1e278c425d48c47e3ad" }, + { 252000, "790a4dfb595f3beab13d5fc782ad19315c4ffa31c5eaeef49f0023126996010b" }, + { 253000, "79ba158b37697263f3e0b1b8db5152ba39f175b80f542517def54279095404d6" }, + { 254000, "febb056b6a6342bd7d333d7571462076c00355be6640ff128eabe0b214863026" }, + { 255000, "c93099f5aaa306b24db3aae368556c9f12597e78d8980c75580e7318239975c1" }, + { 256000, "7565c664748f24c1eb36d9730b8aec063bb13e7b3e733e0e0e1120bf2b821ee5" }, + { 257000, "c43c60435626abb32bda40fa00a316990b532a82721fbbad0fd769d05236731e" }, + { 258000, "d5f551f8e68df012d98972fda66f784eedfc4be36fcb75441264ab5762386693" }, + { 259000, "a1d99b904e5848f09a1383d4aa96488b335fe41aa71c18bab97980578e135e8d" }, + { 260000, "a5189712b41cea11c2917a7ec0e0441808f80a2da222a3ac9165d8346656ae89" }, + { 261000, "e3817284e7c72aef89482acea9eb19b1746cb5210db1e85cbbddab3e8178c7fa" }, + { 262000, "9f3aa3fe23ffc9cfbe8d646d770ad5de95f08ab7837fff81a5d29573f27c4e84" }, + { 263000, "1b2d5a6b72c30a4ed31a0f6c0755950552bbe21b5fd7052a0b0baa5c3594fb12" }, + { 264000, "863199d29c0ec6716cd458e00c420262954b3bcfe8b2fc25c6591510d549e4e6" }, + { 265000, "9ed00b8409a2bf5acd13077b2e812d32c369777b4e2e6e53296ec8b1e685c793" }, + { 266000, "f58831ae1a8c307efae54d8d18feede73a92e534085f2b1ff245e880d75fca4e" }, + { 267000, "c61c590d21085cc782af3f8c84fe5bbed65e332195cb6a8f1ea4ff837d08ab99" }, + { 268000, "0e319986cd87633061aa026df3bcbf5ce1cdc5a234c1473bb72915c92705d834" }, + { 269000, "a46571b74c9e88260d7a9b0ac0811ea5e28c0fead64b3c19f392cfb6131c9bc8" }, + { 270000, "39233313ff22b8f700675f7ea303a1858e38822bc16b09963d11a622866c7b07" }, + { 271000, "4e0caf526cd52b162cb184060fb0ea7a0684bd849256ed6d94b9da8cfbe84209" }, + { 272000, "ce6bfd398b5e7309d01b8d6e0b9bef50f1b9c61bb85304cff00347cc055e0586" }, + { 273000, "1e02c609650b1587c18f6404e8b44914a538086272ac8ff7c048b29e2c86d35d" }, + { 274000, "41c14b048ebafb5716cd34b6efa5b864265c5b463c6c4a604bb6ca1e127109b0" }, + { 275000, "37eb0799597af3301a820d59e12674d19dbbd9007eb5dddbe0468efe7711934e" }, + { 276000, "beb4048a31c2296d4c4bb740c06c88c2de9d3b6c467528f94de9cead777f80cf" }, + { 277000, "a80833b47b22b62ac121d00aa98e5262c37e0be581f3d28f44886e270e38518f" }, + { 278000, "899ba8f31a4ee014b6648f7cbb667433e581c486479449b8ed387a57d4b4e009" }, + { 279000, "07246791218cd34c6563cd4c3d464711934b3de93601b77226131f7e2aec1f01" }, + { 280000, "daf36ca7ad52bbbe496ef9b27bd13f196002f8d4c3baaade129e459ea2a5b88e" }, + { 281000, "7d5dd13fc32406566f25393754a7ae0037d31bfebebe7e3a3176a1e4bc5e77c5" }, + { 282000, "fe60f0dd7e0ebdc6db0068fc8c7ced2a3bf10c42132e64bdd25ad95de432c9d0" }, + { 283000, "ca4faadab834c70fdb54bbd9615c2714748f7b09dc7c77c609c6633f74f2bddb" }, + { 284000, "f5bea44045fd156e1bc8429adba7cf483237465677c0ff2d94c0adadc0a1f10e" }, + { 285000, "0eec9e09b1bdf4457514b39a0952a0fb746b82f301d1f6e3868680e3398c725e" }, + { 286000, "4cf3fe9ed74eeba78e7c9e7ae38204deb68ba1dd2b3244956f9358bbc5d1eb14" }, + { 287000, "bb1ddd2d67fc261facf3b8762471990f2c0f31b07a3a892ea6085db84528f351" }, + { 288000, "cd1cc0101ecafd795e29cc4d9e13165f4f5bb1138b5ba7a89d260897847544d1" }, + { 289000, "0ec331bd532155b27ca250056246b13f6a22ce126d7462204ebadf3e846d6e36" }, + { 290000, "9ff767073288b4896f31a10a3d25bfd5d607fb3d9b4caf8aef4aee8998e4af2e" }, + { 291000, "55b1caa4d674073a20b56ab7a3a84e71da8a2021fdcc61ee412d8cb96bbdeacc" }, + { 292000, "c77ddc41e41e9dff906bb00e0516cbeff5e56abd9d4bc4d0e42fdbb8a164d058" }, + { 293000, "3c2a7d2f2d0c3946cf1583868d25383d5490181943b2e4ff987d6052f8ee894a" }, + { 294000, "7f18a11bf09e007478d990683490e1d02e130d6f158bf836e2d3c4aa13e9cd25" }, + { 295000, "506779563014ff2aeddef23e88d695c43e75b9c58c308a9b427eea2cee7955c7" }, + { 296000, "2c5e516b01c750ba14a56cb04012d80c606b8fdb237d4a0d81d1ef435f8d9143" }, + { 297000, "7f6e09d40fd60c09eab69d1019ee4d85bcb944caa8d432f0f4a4ac9a6668b463" }, + { 298000, "513870ceba567cebb4dea23c654c4775cb45427890edef5856cea099d2abad57" }, + { 299000, "58abf3ef8f94c31a6f49eefdf19f9314f81ef3552889964daa484bd006276dfc" }, + { 300000, "b40e0d8b0e250b94b7e6b78b4087ad8f968cb582e231fe6de932530692b1173c" }, + { 301000, "a23b0d3d3df979e498a98d6e3b7eb90d9d3a4e191ca4b68068064c865d4a9016" }, + { 302000, "fc484a92aebe3b9a91b387a77d37857917b1236bbee93521890253a9df9bc748" }, + { 303000, "2dc579c648b3e673f0e8e67de0bc29997b8fc068f6b54b5ed8959106507e2962" }, + { 304000, "f0870051c209725191001ad529a7d7a41bb01d43220d9e714f8674ec995aa2f9" }, + { 305000, "21d4a803223d8eb76583f8a218d605aa522eb7ba0d965b335000cb1b7e31f4ab" }, + { 306000, "7ff551f87ba33ea8e7b8006a1937cefc0d117fcfc2e932aaa5fe609aacd42b17" }, + { 307000, "f9ac2480aabf28658efee04c878d80c35ae39614270ddefd6d18a2698bc9c7b7" }, + { 308000, "54b02349fb21fa4409c5415badd7915b3c95337c7b31326f1dfbf8d989c51181" }, + { 309000, "5f8727b3ee9220fd5ea212c903de195b4be4e103fb52a32c5b6d762ceb2e8241" }, + { 310000, "8e08e60855278036df4dce259955d60660257591f49dfd93cfacfa9dcd712768" }, + { 311000, "ab8af33a433b9248c6b25ef86f9f684ac85066a53e6d38fc822710a163c192f4" }, + { 312000, "fe47285c724be468d2e5ea97d17614ab1130a218cbe2bea5d757143c56046afe" }, + { 313000, "25d1a243aa30cd8383516442984a0cb1b98677b2eeae630712c009e5baa4f709" }, + { 314000, "83abb633f86c7ddbabde3ecaa49a6ac4fbef9513d1ad4c18270c1125b2bae01c" }, + { 315000, "8bc37c103e7a73a08bff230c1ad664290d2421ddd008cdca24ec798bfc40219a" }, + { 316000, "7b2725bea2d623926d61f37231c5b8ee2e9c7cf82b99c5b9e57696e21a7010aa" }, + { 317000, "bef31692d637578efedca33ac2a6d0f11b4384e4752dfbd318666c15b868efb1" }, + { 318000, "431febbbb638bbeea51987ab7ec7a7827deb4145a6aaee76a2b3a9ba642be830" }, + { 319000, "8545e9ac6fca25bccc50848341d37eab0e53625b3de48ea85be468d0efe944c5" }, + { 320000, "3bc76dcbfd3c84e214086795185b1b7298328cf653be8d7c98169bdd8429f8c2" }, + { 321000, "b0bfd04d6c3f1192c61bdef693b1878a4d87ccfeaf07af57972dd59bfa62c208" }, + { 322000, "b3a0895a78af35f48456750837556093aae8c7480df0a42782fc14f129ae6b60" }, + { 323000, "47a5b6453b64bb947d6c4a2eae9528ca9c71f076f7c37028ac34366d47f6b4d4" }, + { 324000, "35a12cfc5776654726fd2a55dcd96e8fc613a6bde1bc73984e90e7f744dd7e3d" }, + { 325000, "e8bf0ffea3a93aaa2b3511f71ba880c555547b7f39776cb7938997acb97236a1" }, + { 326000, "04cb08e460c6c6b5c4afee18c3e801e845f286c564c8042433421aaf9173e5ae" }, + { 327000, "c40741b304c60d7c92d0fbfe9879a41630baf9f219927046bf8d496e14b90132" }, + { 328000, "a585275a9e4ececed09a515991decd5f1e37bc3f556671c4c672898163f89c96" }, + { 329000, "7259a371825378bb5e12e3752e1bf43ae5a5b9099e2a36152251525c5d3eeba0" }, + { 330000, "7a251c2c4b23191653ab6e416a1a37f2862850670315ddc016612261dbe95732" }, + { 331000, "489f825bcd73faf6f1ade6192fc109af620edb5f7eb8c0f3fad52af5a843e666" }, + { 332000, "02405c1b907b2087785eb2f618396b5d5ed45b252df788edbdace0836e359655" }, + { 333000, "6c20620dd3cd037bf1b9e8102410ffefefb8669399156b1c5e1311b80edd63ac" }, + { 334000, "32ec350c05f8c8bd04e1dc9be3a202449b3bb402f3f434e7bd9a750e21757e83" }, + { 335000, "0b60bce07671bc9f2cd8dd88c83d88bc5acdd238406a4937e3f3d328b9781e2d" }, + { 336000, "5b6346d4c387f1553a95c4b5d2886d231c5e7b3b10d9eec0d24e507dd7b91a47" }, + { 337000, "6f094b8dea2493594ea9de126a0ea0c12538ab8791c31e679d271f691e3e2aa7" }, + { 338000, "4657e559b7a2db58bd846c6a8029ab4d284aac988be30d148bee95a63e43380c" }, + { 339000, "45bae03d06315f45fca79c8543b261eb3779c1168e20c800ccb5ec9dd522d6dc" }, + { 340000, "10a0f83de25e3e6cb3130895af0e2a92a303f7d0bff82462359d0986e72656f5" }, + { 341000, "089bb78ea656a94ae72ffe5981efc45fca1b479ad630cdbd9192ea0b56da2b70" }, + { 342000, "4dd0b6a502ba12cff00eae0861751aa24b2f80de932ee96a7974dce68a7d16d6" }, + { 343000, "03065c26fa63d5be4c9f9a301c8434962a9fcd5a26effa72bd57e63aa6208c81" }, + { 344000, "9fafaf05e4dc0ad6f6256756b1166f31b80b8a7cba91f868b4de42ab7ac539b0" }, + { 345000, "bbad3c55d1983230c7de3f1c0aab2138b1b0071916ed451a2619df4a687daca5" }, + { 346000, "d1faabbb8bc5209d2feb601ba599d66d8fc76a308a9c0d4d61994a2e08e7f696" }, + { 347000, "0ef14b0b8c0a35b6df80afab7b6fe97e5231805b62d76987c13563ebb99de837" }, + { 348000, "506c3f8749bd935f19ae86c7463ce9d9e0aaaca0fb868527619725af5c69316a" }, + { 349000, "c3078d7e8521ae202fd0fc04bc3374dee584a9966c73756631ffec5e5ca5a8f6" }, + { 350000, "a059c5b25772c6027e69be07ecba3be5a7d31889ab458453e656287f9e8cf77d" }, + { 351000, "0b3448a4aa525a57995892488e8c6c6e675329e30aebfeab37559c13c0c72d54" }, + { 352000, "ac1442a9cf813b4356726b6c64b2a69d37ef9066b01677e46c95a344337f22c6" }, + { 353000, "ed91a4a8d6da2c15618244d084fd2c83b7ffc3ac67f91092b9e43fe16874e48c" }, + { 354000, "ce78fb169714fd9981561c61a1acb1300b7da76d50fc50fd7f522ccaf84a69be" }, + { 355000, "2e152dc3bcb3ce3bc73b8df8560b66cc651989e02bf0556df8337b670291e0ae" }, + { 356000, "4e2b650db223a7a3d4ac9c0ecd771cc610d373428bb0ab8e70df838d7187206f" }, + { 357000, "ed17e2e0db7f6e9ae66dd731c1aaf2a0a5b6336fe52a103847ea0ff7bfefefe8" }, + { 358000, "07be2034eb8094962da3f9895ba0422221cc370ddc25dbe0401669b04b6fa180" }, + { 359000, "b61c32c23e5eb102e30016c0f8f31e73693039d8fe4305b10a04838dfd167966" }, + { 360000, "b03a13b9907ba9de09485d3b91c0ad83dd8a4d4d7986e7d5344f14cbbecbe840" }, + { 361000, "75aff59e8be5654e6cb2ae202e3af4b9534c6f169cfee18612dc4aa02d42f9ab" }, + { 362000, "0f5aac2ce15ce5f347f9c967af92a993f6e69f3e4414b8fda0b83bb5cf9302a3" }, + { 363000, "85de0961ec21459327cc5729cec69540939b6b413182be88b20ec98e1eb281bb" }, + { 364000, "e13179b2b947bcff7763593a7d852d83f9f22013ea06585e0d68fe013e26c94d" }, + { 365000, "22032538bd1deac5b5d4403e897ce3bad2f303f99ab7cdd1c2978c3bbf5b2bfb" }, + { 366000, "cfde8b3f48a5ddf4caf52b42057cecb4017e1be7a38e23d9430e7fd60a6fd462" }, + { 367000, "99d37b426c0a6b4434b471e43e3f209711f77b4b71b61cc5efe6659c2c4600ab" }, + { 368000, "a8a1bd13178184e9f09e95d08efe547921821b61a6c702400cc49950819be021" }, + { 369000, "fa0ec419045f9ce0898a4b6ab569c97c1bcf7dd68cfefd2dc1ad9dc7a8dd8fdb" }, + { 370000, "26699463c6bc6108320f9b79d57d9cf332db8415df0e00d09371a6b8350fec00" }, + { 371000, "8a92df054b9dd9cdfa9bb7d8ad72d01ce0008ef747edd88474d607b35d80e9c5" }, + { 372000, "2410ad74e1e1f29487760c3a9798b112b8aebdfb2bfa4b7a6ac7f7386d5aaa93" }, + { 373000, "f29ea67e33890e75c0759e594841280c11cf5209f197349656621a18d0094fda" }, + { 374000, "97fdac1f949ff3c40bd25aff5034b8ae85caead0a9ef72ef2ac3cd5394b05177" }, + { 375000, "396396be61337c0175d5cb8b735afab9e1a48542e77434869a598f5804dc2913" }, + { 376000, "f5f63bd5a7e04fd0d14d8f75a0aa59721813a4de98ce723a2dcd3b78dfafe182" }, + { 377000, "ad58a2968b75b6a7f975098fcf9d44e8a9630c91fcb11caaea1c97a9ad7afa9b" }, + { 378000, "9d2ba756a80a3d08978f13314dcfffc57ad660745953606efecaa2cd0937f031" }, + { 379000, "49a4d31397bc78578eaeab4b97bc0ce5bbfd2283f5051e0b4da5673c800d932e" }, + { 380000, "0c2326891ccb944bb20cc4134d125f2c3d1fdf3b60a2dd6b8f5b553d625d92e5" }, + { 381000, "fc44846230235c1acd04184844e3e9f24a50f0fea025805aa4ecae6614737f11" }, + { 382000, "09bd10f7960bbb017663a9c98d625df00c50c0b007c37d15d34c2c54fd93f126" }, + { 383000, "c1c8e705e3fb703c62fbba134f057775a9e6336943f92101f5228820e2e30172" }, + { 384000, "95d1f807e1f03720aa99cbfbccd63a3933c5aa44304079a0c565e0252d5bc8d4" }, + { 385000, "06928a8bcc1cab38e1c98ec402ea371b6a6597a995510ca56473399bdd3ecb39" }, + { 386000, "62fc9a0d0f50c7842693bd4142ce5c2b734dbc5ca653be2a751efd4543eb3079" }, + { 387000, "7ef29ed2c7c5169ca08aa14073b298aeaeb44bec2f6c868221de392f8248337a" }, + { 388000, "2c955383ac1454d75558eeac2a684e97ad4406a6369a9917475709dc90399ca1" }, + { 389000, "a9cba5fa6105a7a4e3b6073bf93c1b1c1f0f83cd3d5efa9f58f0232b105cc02e" }, + { 390000, "7fcc255693bf730900165eb8621ac1f07e4580eabadd04994ea02d7aa05c0db5" }, + { 391000, "d2e898d6f11612f5e1099c753764f178cd02fc48a459d73dd0a7df88595a8be5" }, + { 392000, "350c8b02912e779146f122f7afb7ac5535ccba87967dda6b70c6c0f113b36ab3" }, + { 393000, "2bf3d90b9bda81a34059de2fda22dc414ea768555d5702495bb1353bbe153778" }, + { 394000, "fe4c1d4c485b598c086088b8adffa52f1f40140412c3c6f73eba2becccb695df" }, + { 395000, "ded7c427ef7cc3ef0fafc2aea70ddabd9df319b3e0c9402ad30369ccf475aa04" }, + { 396000, "ce62a45a49fe650d601ada6708c76dd4a02bf10b09d58d0b471496971e16b9c4" }, + { 397000, "57dd105bf8a9dc28b1d0509f2cd2b34c3b339cf9bef6f00de5afff5a5d67c401" }, + { 398000, "3eb0c8d5f5c89e3ed24dc382150498862313915e33f5d6ce2fbb177ef2d98a21" }, + { 399000, "411272a040ed8758ace1e702ce3e8e7199dc5433d29a2b9f433c62c5a94cac77" }, + { 400000, "b4ee8fd5e0167bc9e8be82fee53dcd1f4e38c1a99467f371836c9135aa11a099" }, + { 401000, "0e5096be7f4e89811ffb2d50313ffbe8b1eb6a9887d1335b232e153989de621e" }, + { 402000, "b9a2363a2ad48c59ba4cec2f7408ea6eec40c47529aa5b5982446a9d530aa0ea" }, + { 403000, "0579dba01aec4de48d7fd4200452a4f4ac61715984e2fadb921fed7ea259d20a" }, + { 404000, "d02e5010136b85933faff759f8074111ca8f7e1a88df1256044f9af376bdd99f" }, + { 405000, "5014e0c31314cfd3f5b7ed64e63d499fcad7ac30c07cd79729575e9bbbcf1727" }, + { 406000, "b01cf2e012521f492cfff34d6e191fdb17a468da73d522419205537815487417" }, + { 407000, "69ce00b4484034287e81d6dd6f43579ed29437938ecb514f6a7d51a103932831" }, + { 408000, "ac6f3fe1bb56768b7bce1bd3868d80167f89220acfe8dcfcd2f849a1d53352d2" }, + { 409000, "711031dcd323cf279ad99c5d028a596a5de08d0e16c0b1af8718441e4acf2424" }, + { 410000, "643359122ceb9a2036201c5f645db590e2f879bf025e6cde8f39902ddbf7d87f" }, + { 411000, "1bf17d9775f8b88c75c38c4cbbafa7aaf6bfeff438f1a83ab91c8cf3f2cf09e9" }, + { 412000, "69659cadc6362345788f5a3bb02912943cdc4e094d868d718e031911ac892b87" }, + { 413000, "e422c06c24491e078527356d621fe5384ac180bdb9c2a39db10b333af25fd4ff" }, + { 414000, "9a60d61529e217da620f13d8a1ac6a63854122d12a33a0b7e5e9e76d4fc537c5" }, + { 415000, "d295d31bcc4d15d636b316854e9378f1871121b18d9fd409e89109cd131a7f63" }, + { 416000, "56a08f0c22a2db7fefdf8c7d92decee132b804090c3351c6c52af0aa4f05cad3" }, + { 417000, "ec55c820b3f725e26816e346c480b3ee89d78d2bbea90efcb1f232c7c9ccae82" }, + { 418000, "d376e3869ab224a3475f80382567135a252097da6b0d9b91276060c05472a9b8" }, + { 419000, "ffd2015c538499da0a4dd1be146b62a61c4f51dd2562ca86620023271873e63e" }, + { 420000, "51238232a61317d27e925c79476f977e3988a3416b541621532b81265049f908" }, + { 421000, "0f1b0122bcd2c31b54ba752b07f19177e704885af3342cf187c22e00ec63a1ef" }, + { 422000, "02640e2d02177cfbd395cceaf0265e5837d4a310120aab2cbec5f11f0de48303" }, + { 423000, "30ce5736491bb2d47e539ced90c7fa5db324add1e065a85a22f703f7f370adfb" }, + { 424000, "2ee29d061c3ae77d00e1b3d2dd044607c8422c612d35fb82a51b2a5b8242ecfb" }, + { 425000, "d2b42b1786d2a392f5fa5fede95784cc5b12720582f77a29da2f90d612614e1b" }, + { 426000, "c8d37c2d2fe1f09521b4ff845ff6b8eb06f74deb5a8f893a11ad4f346206c11f" }, + { 427000, "d3dae621e193c03a917eb2ee27b12bdcadd047759bab9cfa666d5f5087f4d179" }, + { 428000, "7f202601baa8fbcde851d61c4f89bc287fbd9ba9f1d093d1dd79d63a2b2658c1" }, + { 429000, "184ee1a880b2d662c7922b701c303a5972ae6e1b67727813a827112bd04fcbb5" }, + { 430000, "49f26cceac17766005f2f1256c35b7794fc1ef3f40ce55dbddee9e20a250ba41" }, + { 431000, "807ee11927656424b0200e7a0e7df15d2ec6a56a3b193372df9e664ce1bb1da0" }, + { 432000, "6e977a4a438a173abaf870aa745842f313f97b7f0b5802f540a664eb8c49ab80" }, + { 433000, "c93908b4617d200ced870186fab9abb5ce5d28bc71aa71376c07ef23c031aef9" }, + { 434000, "dbf38f6dce3a42d31338be1e24823e36204db6c07ef5e9132d82da2251a9337e" }, + { 435000, "a6a7abf831ffcddc15f37c9a3a878b7c7058622548e8a36810d080f6c6cc75b1" }, + { 436000, "8aef3c12ef36c798e3fc018b238a988c30f55f7ce02b9cdcb00def894ab03ecb" }, + { 437000, "54437345d048e3b0ef50016da64b29f4881751ea98336a858596b1c043d5e2d1" }, + { 438000, "841b4a6f9117fca17adcfd2ae61fd78a333aefce92a5a02bd5ea7ee4ebba6540" }, + { 439000, "43a7b42fefa5fda2e310f279ac9b75a00248c23c8d54a6e2edc1c4a9bc0ae1f9" }, + { 440000, "0041aba5631752b487d51f49cd7e636a8652fb6af00a6b4d864d86a2cbfd9aa7" }, + { 441000, "05cc8e2be8ffafa235e7d724a6c8156f85c0b3c3055fcdb55ec310887e3056aa" }, + { 442000, "13b3bcf7635440c5d4ef79016940989fa0e60f60ac70ece215444a0d0c921a66" }, + { 443000, "87c9fd4ee71bbbbbf144ec98ff2b4cff9c45b32b959db9ca8cfaf2161d914d05" }, + { 444000, "b683b94b8d1e4c8827cdb0ba9877e85ea428d46226e7477311a1f2b97d2d4d48" }, + { 445000, "c14b1a959ea44b5b0c46ebeaca540516ce0245944c96a18fa96146f295ad0495" }, + { 446000, "af45360de7da17ac63a997b15f881d008037691d5137fd520e57390e9245c1eb" }, + { 447000, "05e665f09d49244db7fa0360643b7ed0a95f98f0e6db9bfa30a109eabdb9b22c" }, + { 448000, "018e88e1d328ac33453e9f5fe0684f7210839e9fbc97a836fa3d98eb6dbbb207" }, + { 449000, "a677095b82df566a4ccf6dc68ca128f2b34a1343151ad1b9cbdf916756cf6a8d" }, + { 450000, "f0e8bdaf3d1ca92fb29f8d74de49529958a8eb125aaa461147b71c492d436d4e" }, + { 451000, "3db931a9d17434af65469155e3f602d7c6383ad51b2dddb766a9cc7981fc28b3" }, + { 452000, "162f168b8a118daa81ff64c4f452089b3197a4526ff45eba1e2855924e1508d4" }, + { 453000, "cc8b9557b786fc906fca4c51cb6f132f22eacffd745065da460393b2bf5886f7" }, + { 454000, "65755915fdd2657428faa891af14f88443555c5c24ab455b2850f7a8bee81b78" }, + { 455000, "1b71d6fe18a23ee5399428b5ea3f9a79954944c1a07d9e32e876399c1120503e" }, + { 456000, "9dcf389db3dfd96e6db4ffff3c5ebf0422a745ec740a035c919a12a915bb030c" }, + { 457000, "8cdee5e7f140d0f345a75b91ef5bdc1ece194104481de96fa9e7b15c3b136579" }, + { 458000, "f27da5f3c9e6784e22844366a9f889463f56bb9dc4f4c7f6a3a393906c6c770f" }, + { 459000, "60aa5dd582d183a7a5a3f89cd94ac140de900c49c4b034a31a2758f8603a7553" }, + { 460000, "9c96567227707041bb0407b3b74a7e1eb77f8ccbd5be17d5bdacce517358120c" }, + { 461000, "68a88cb2bd38270e4d576aced6e82d226d155aa8b11af4a7450f2f61a7f3295e" }, + { 462000, "a67dd08a84f7a07ba02bd4fdfc44a19702b30bc85d3cb1421001ed52d07a24d9" }, + { 463000, "1864af8a7cf550d85fba6c4f7ade1c5e34ef79f156d7fa63562bc06c23cf90b9" }, + { 464000, "37f736552e20aa9750c3c5e4d3e2a596ccc75ea42cf80776d97c073b88d6ebe7" }, + { 465000, "5fa01fe035c6621691361a7551f8482cda1fb15c6731d8abfd10dc9f09dfd969" }, + { 466000, "00ab3987a1ee066965dc7e329f988653d71f3e4064408882186b95b47456c04f" }, + { 467000, "3d3a71c22fcc83754df5a593057a705ff3418baee2107cc66739154c68b6d1e4" }, + { 468000, "a5cd0be32e2f2706c2d7cd9d4fcabe3b4efdb64746e225e13891ffeb3051d23b" }, + { 469000, "9409185b9077cf7d46195bb8da8293ae116518a024a1120e24f730196de80ff0" }, + { 470000, "1dfa6d76af562923c108866f00caf21dbb22b1996d2efd0fc6a43a55870cffbd" }, + { 471000, "5e267dad87cf16d05964d6bfa2cfee010fbc059213a2ed7463de22222e90587c" }, + { 472000, "ec7eff27fe8899f0cd2072f6bee5ec567fcd12251cac318c82e04bed7b206d64" }, + { 473000, "94b7643e518b400def6c141a187b8eecc5a40a55648b6776dbdcc8f4a103e57b" }, + { 474000, "e23a8a2288c4a9890b077066351857c387b7957c095e534cdb73293c35aa62f6" }, + { 475000, "9891f1213d10175de20658bbf3f4372bca2f1c065a470a1cbc9f88cf6f008e8e" }, + { 476000, "8ea7ba95273f26e4ff1f39f42592570a53424c8e8453dd5374189dc6a26ff147" }, + { 477000, "e7653e43904d1054ef168ebfda8c5c9a55878b695c9dea2dcbb1ce3e4fc58c30" }, + { 478000, "fec956dde2064ccb169ec1e877e366d0e8745570e86f0ec3f9ae752e678c5cd2" }, + { 479000, "4b6d1589fc1b1caf3c755f9d621862bbd662bdd2c1c4c1cff23a99b39dc1e3fd" }, + { 480000, "e6e489c310f829615192dc67505ed224ead1a92db580b1b5dd1ee7f6dd5bffbe" }, + { 481000, "91834e52e7d83288539869bfc4dacd1e667211acac77df642569d951961dd2e3" }, + { 482000, "7701dd9e44be04bc33fba84c58efcf51cf08fbad74b9da8bc5b1b7fd1b366fcf" }, + { 483000, "73bcfc7b50e023b2bcfe5744623f3066659b634375376aee75fc915be5a05387" }, + { 484000, "9c1d093759b659a5d27e8f632b01b0ebc01ba88df356e5980e9cc7aa9758416c" }, + { 485000, "270738aa23e8009e03f99a0850430be322f4a01db220d20d8f7cc12198d55c39" }, + { 486000, "a076e3c9e81d6cc2f32410134c5a5fb2389a76fc037339def9af77e477b87f67" }, + { 487000, "4fd1846180cb4cb5c8b6b9d497de82407d249954a9880411e395e6f7e8b2a0d7" }, + { 488000, "a47e318769db079e6cc200c23cec8c05db4086087eae545672c8a64f12cc19ad" }, + { 489000, "eed8f4da84b5fc96a4b0dc0f901572746e72502acc5bb7f59a93a004811b6038" }, + { 490000, "2ddb63035fa5990d4cf4143864e70c1292b958db5c164e0dc29a00b44b6292af" }, + { 491000, "2e4090d62423017dd1be57df102f76143ad191042e960f1c9d5c991cafd41e10" }, + { 492000, "de1716704ed77befc0d297096c3aa011be5007ab1da2c60aa9514373930cb700" }, + { 493000, "89eb619c597e2d4ac82766c4399ca0616e36c77405be888c7a6ed4f4f3f3ed50" }, + { 494000, "24b699d804b62012eb4f31688af0c1dc8380e2d341ec4b754ab9002423f7e4a4" }, + { 495000, "ecbdb6177e8144522771dfd6c6008c9fa1810f030f2c6f732adb5f3f909c4374" }, + { 496000, "b3f2cfabc3b2a58cec2385e2138f66fdaaccff33005dcd62906a5435f0d082b8" }, + { 497000, "2a201aa5eed81d5bc47a43739bed0f5409ce4abef6d33bd45f31d999e2a810ab" }, + { 498000, "1b2e0d93860ea71599aca5f643302a6ccc8760bcc701dc0de17949bbcf14c463" }, + { 499000, "365345cf773d97e91934faf49532aa3c2893b44f25ccd58a22cbcb55fbbb9a77" }, + { 500000, "7233cd5a0e1e5b3baa21aeed1e7263a028e2ba8d59a45cda0c08fa5dab2dfe84" }, + { 501000, "98d8f27db64a6a8ab66bb4832911ae5c0135ea64ccd18f586c2b1ee00d867400" }, + { 502000, "6c9cee6e35a92041ed959814d10ad955bf7b3aabb020fb663adcba4b70bc9e98" }, + { 503000, "84e6d39af2477a5ec82caa87cdd5bfc03749265e46baf848e44468574e2455ab" }, + { 504000, "54e573157359f02853e1d7d8260d0a21ac76451271fcf6ff726b987314b21cb5" }, + { 505000, "8b5fa4740ca9bdeaa57bd613cbfbf39900179e0a83c44ca6f52b2e63c19b4e8c" }, + { 506000, "6352c31e43bec064d9e84414f22ded89a08d68f854abed0e8099c01958f52b4e" }, + { 507000, "be615ea7861d67703dd402cf18254f4348a23e5a243340745eacf5e1506d7438" }, + { 508000, "6d3d5af7628b36df037ec68493f712f7895b1e7975d41a676b097c2ff473a3b2" }, + { 509000, "cf7c2e6f22aa1ba1f2a4100960dfdf01588bdf2d0d96af2cb673a61f52365e2a" }, + { 510000, "bef3723234334b19e1d4ecd8852a281f2c640189465e109c08d49fe95f77c1a1" }, + { 511000, "1b1df5fd57c79e23854f3377d6d062d17d60a7c12e0db79cb7ed469c0c041437" }, + { 512000, "5cb31d76b2c200f05fa922c1a1c334f3f16a545b088741d4f274e88eb94166be" }, + { 513000, "41ee509ac69c2615f142f655a83da0993ce67166099eea00aa396ed1ba66b2f6" }, + { 514000, "a5cb29f0591c9bd163e02938162e4da2eb653fc6a1f64ab47f626b40b59ff670" }, + { 515000, "e07a34c451a9696f771016e0e80046752da29f06487d63febc334ce1b778b8e8" }, + { 516000, "44e8b49db08e8dbf90c1330e3a6dda5e103832d458bb812bcf5ed095af6acbd3" }, + { 517000, "d3cbe6e727f185a1220c430771e6b0b8ee8590800c09bdedd29eadb88ad0f257" }, + { 518000, "b924a9b6f68e00d588efe7766f27e24ccb1361ee24779fc58bf6caabbf020a39" }, + { 519000, "69e664971de9a29da0a542e7e73f2c5d3add3d741a7766f9d38c88e76550f1a5" }, + { 520000, "9717b8550db36136b4b7397c5c4e13c6b87809133dddb401a6d18c9dd3eb4c97" }, + { 521000, "8edb3cb88d4b7cc87eee95409fe1a72e90620cc3c95cfee9abad26f8f3c7ae24" }, + { 522000, "81ef5d3959d229adac9a38477cd28386f9f6d68e82e42ffae7c5a15dc531f3a2" }, + { 523000, "b0f16a357cfaad26dfd085c5b1cb3df952bd138eef98fb5df10ea0e3573c33f5" }, + { 524000, "dfb54d5b885b18d411df96bb996cadba84d8734ec6f2c57dda15717cc50e4292" }, + { 525000, "fa6ff319c5f23317a4496a3e666b178d99bd0a6ab3bece251e31938dba326b51" }, + { 526000, "09db398d3a4f3ab84c28f8e741e558ca0012cb7ba9d0d0c6c43a987f02abfc6d" }, + { 527000, "3cdfa9c8736f5c1614c048edc503da6ef6f50af869f1aa4ceab6724728e1b279" }, + { 528000, "1e27079363ee5f4be3e738b011b7012c6c317ed6ab71dd73776f967fc1d86c63" }, + { 529000, "5231d99c8c564bef13b3416f353f2293633cbd0dc4e5a124d219456738d7ef55" }, + { 530000, "09ad0b944015b91dbd9794aa23e021659d06826ddb49f4311f49364fdae43f59" }, + { 531000, "f93a81752b737dc5cf90df0eb341bbfac69834cdcde54c0184e3e4c7e5692704" }, + { 532000, "7b0c9f2b060198dc7b07faa812fa6cfb5c40a3ac41c3a164d1f21d2fff99d198" }, + { 533000, "65b37d0f81a67d67e036ece72082ce0629ce353de7223f791732cbdbe242b95e" }, + { 534000, "3443454bccbb3c8dc66c6d2f70879131a3b199cfa92736a0e0b6457951a99a0c" }, + { 535000, "d2e5af1b46b221f4ec6668c6c3b0139abb9a00698b3dbbe7f1b9f0f288a45990" }, + { 536000, "9a43c2dbcdec2eb4fa94513f5d18e428a55a33715f9df23320e8474e58bee4fd" }, + { 537000, "28c4fa71f4efa96bce2292a5e82b0ab949cbd21e5097d4b1eadd192d801db045" }, + { 538000, "d9553fa7960d98fbbc7dff0c287881703f6c2c288340f9792ff46cd344f6c8f4" }, + { 539000, "6fc14c6f6b39505bbab571253dc1ab8c0e3a486dc4d9f21b4e01d4b2420da921" }, + { 540000, "a9d67690861e93a64e013a174a453ad97cfed27a69c2e4540d47c3a327121bd3" }, + { 541000, "873d37569cbd1d0031add6f00980f8e645e240238cf51c38311745079fcff7d7" }, + { 542000, "3f53d99b40da109fe3c51e06b9211cf17ddb27a3773e29ebaec0ff54d71ad395" }, + { 543000, "e1bca110915b3267bf092bd5f68cac37af90154d57988105320cacf874fdf7e7" }, + { 544000, "e60a794e9f56ae6a1af383264eb38ed5b1c6d0020989a2b767bc5f09aa10935d" }, + { 545000, "51a3ed5f6cb6794a1a812056a30c04891f2a97695558a6edccbb5ad680a24877" }, + { 546000, "8c911273c0d3ff2e8f96f107a40c0300218e5ea1a11f5abdc18c828aa485cc87" }, + { 547000, "e1604844c831196639e462d3c6dae414149c1d7b84464a0e87cc571026110569" }, + { 548000, "020dbd5f3c489d3a46a0682d1c3229b9ad1f68080f0dba887be657bc54ebad54" }, + { 549000, "840972e7cded7df0c74f46adff5b5590a516d9199db3a396bf36f7f9b49d57e9" }, + { 550000, "c42277fbde4ec6c304588903dd21cac80f5ae35f8e692473d00c17a6cd7c2df0" }, + { 551000, "69aa1396e1862d0c7fffa71a616295d82a97b8b4349ea96d25c2759e4f5fcd89" }, + { 552000, "2c2c3fa08a0c9bffd7397b5097c879e7dc86e1c6ee32ce5721ebd679adf904a2" }, + { 553000, "78c13fde46f4cc799880acb1142682cac69f7424601d78767f4cff061f1443a0" }, + { 554000, "97ad2abf703fa349ff6b6e5219c82f46135544180fec8a8a29d09eb58ae0cf10" }, + { 555000, "5ad33aec630f76fa15eaa881bbf58d0ab2ccdb28b61b704232b1fa146a006454" }, + { 556000, "002c87ded85bd86b8970b0a993eb32bf523f0d34aa46971a44f13fd754cc0ca3" }, + { 557000, "048d04938fdada82a11cf4f918172e465c2f43ef38b90f9aa55b73b273c2abf2" }, + { 558000, "8151d967881653fd4ee2750f9d93adb744f44713a3f65dc4c0d8f7af3375b849" }, + { 559000, "1bf290285a9d4e3f83907bf63b0b7f5626568d1f4ce93e8f8983349039af57ff" }, + { 560000, "eb6b652c343620196139e905136024c9d43cb62ee1b68b551898383459657252" }, + { 561000, "55d312de0a404bcdcbc14939ea74e73c780cdd3c178ab575f97b5ebcefbf38c5" }, + { 562000, "0a46580eb10ea441828c1ab4a083d70b9c9594775c07475ffa3f519ac37bd881" }, + { 563000, "dbbfd06a70ebac6ee1b34ec37f9fe6fc3a1f954c568eee2ca2ffb080047481d1" }, + { 564000, "a01c92b71d039e04538f471c77763e749030c9719b323cc75bfd46d1907ba91e" }, + { 565000, "e5bacc2229d341f975da2db074e5930ae4622b9732928f562b08525af5acdb8b" }, + { 566000, "7e6337a6013267379938b5e1d722c07e209a754dbf8db2571f62d81cc117d299" }, + { 567000, "063f2be58da9934072150ba02ffbcc713d3da715377edffc20c8e786a1e65460" }, + { 568000, "8f61cd87e481ac1314bef78d85dbdf8fcfdea1f3f652b953c2b4060579ee71c7" }, + { 569000, "412249ab464ea69c5b2511220729ebd51008c6b733a74cc79ffeb608febef7fe" }, + { 570000, "7b7f85dc577895692edcb6c65e0f517ac0707dccf62804d44ea52eb2d84aa5da" }, + { 571000, "63ee89f69266a7ae712d3028e77ea733fd23e76cd789892109bfb581949aac75" }, + { 572000, "950c8cfc972ae6b11748f7981aa4b6721927593848d8b0165fab52e3f003d523" }, + { 573000, "6d21d51530a061f7b38c6682d1842e6eb23a4ca60cade39a272059febc8157be" }, + { 574000, "8f0b035ac51399172b98738f98804596702df2588d813998bdd602dba3557e61" }, + { 575000, "06838c8f088a48c5b4530bbe3bee7e5359715f1669a806106f227b92264a2e68" }, + { 576000, "ae24f5f220a68f961fc0e4892f48c3e7c2e530a9394874db5e50608801c31866" }, + { 577000, "2430fc850b1bf7ca3c0f61d555ebb615054ba74dda38fdd4b92c5a3013cc316e" }, + { 578000, "0cbbcc63538b0ae086219420e46afd4d633d2fb063e38297fddd2f0470464ced" }, + { 579000, "566c4e63a709d915b7bce86e5580f6f7b3bc22e3bfee50264ebec355cac854ae" }, + { 580000, "5425bf4636a65343860494fc17663b8518cf85565e2f369377da3ec220e71880" }, + { 581000, "3253ddd05178bd64f9f0600dd9af2e4557bd2c958c01663425d1c492b4ca29fb" }, + { 582000, "9bb61a0407782891821efc5d24290b3615991286767230186610a1a82b2ad51f" }, + { 583000, "09194d80facb822feca911ff69657e54c05a65e72998beefff4d7cfbf7587806" }, + { 584000, "16bc50b30bd8e76f30788dd9d1128c791c78a086ce24441121c99db9e2b9b6d3" }, + { 585000, "17722cff63c1215ce06aab129a52317ae818a44722b97cb7dd7b252276bbfad2" }, + { 586000, "b5c164cb4afd97c1c234c70fac4a59d1a5197cb66ba93fbcbe298ed76ee61c50" }, + { 587000, "0d14698d9f7817a0ba0ef6cfd3e60a093264a7610a8077ae327b8058d106324a" }, + { 588000, "afff217c9bda7c0c7758dc781cae2b9f0de5f09315f7a8dcff223f15dcec702d" }, + { 589000, "0ef8ab63aae149c1c3e4228d86d15bc90ea015a6250b8f77f1cd5ed077591e7d" }, + { 590000, "a3220bf9431270f7698b171a3d9df40fa926820fbb9c19947aab1edfab84a9e2" }, + { 591000, "8dc5d1fdbc467e31ad9e8b40d84f308f51854b77c460e0801771e34b0b3f48a7" }, + { 592000, "79356891e7a410334ca060ea61ea33fe92dcc247b4ff43cd6b87955fa2c98c63" }, + { 593000, "89a5ad8b09a09ba991d89b62ce255c9ebdf01c30e35e973bb4a58e05c731022c" }, + { 594000, "588a923273598cdcb9f6d03c143ed66ead7aa05b04ab903b5e8db190edddb775" }, + { 595000, "b0c600c726537f06e503154f17f600a5507002bf7229ce3b45164dcc10205a10" }, + { 596000, "6630ef79af8733d64ed480a17da07fb4142da8b942d3a7f20c9f1ff18183cb9b" }, + { 597000, "a47bfecb3bb1ee2218507b9b1561309a86522e668a55551dff36d8d5262a1fac" }, + { 598000, "1af111b3a88fda3070da610236af77c25ba57b32c6a4736bcb05ed4b75a3c674" }, + { 599000, "d41b7e9528ae09c15359023af0436824c7abe20974b1e3092102a0aef4b7ace8" }, + { 600000, "0a1642271fc8248131ab764adb984ccb550641552ab9673cfa79fda298ea4d6f" }, + { 601000, "eed5d265afb4a36f1ab08c326776c2ce0d5846a2573305a2789715aaa44a64ee" }, + { 602000, "5f90c1c7ccc89aaadecbfabb096195ac8b5e01ea595b7c62a0c2c5395f6098d7" }, + { 603000, "4bbd255485180b5889055740c8618ce682f086fc8deee842909a54bb6885e746" }, + { 604000, "329160c511a6e8df7e54f4ab6b67d9009b0d51acd1ba43093267993313d78d2e" }, + { 605000, "10b6efdfad6520afbd8c476fe6ba79aeb4ea1ee2e32bf94fe08c871401b53d28" }, + { 606000, "27b8d67aadd4833f5cece9312dc86707857ec669c763e3f8603ea45a98ef5bff" }, + { 607000, "5c731ba7dccea5029bec963a4d25c6a1ff7df75a86c986a45281685968bcb527" }, + { 608000, "fea3a71174aa3e99dd0fa54f80931be9a2dea8a615e33dac9fdb7966f94457cf" }, + { 609000, "da7bc32fc4602ad50e7e35eaa1648a178816c5698757455a5c536946ec008c26" }, + { 610000, "9cff177efb5e28e60bc979b8ce26d8271a5a5d2bab3851b8bdc1050a46bb5a6d" }, + { 611000, "df2bb554b9575d70d6a44f6be490f6f227f2d7b791da876f6e6bd6f10c3ffe36" }, + { 612000, "38ecc3a82087b3f36540441dd5acb65d9905b546e38d5c40c2189e2dcfc3d875" }, + { 613000, "96e15990b653731e9674da8651c947b265674e3a0d78dcc2cdaeeb96c0ceed4f" }, + { 614000, "3592b6402478e27ccd2802095b65cc11b80728d2fd7daf1a986470789a20451d" }, + { 615000, "b306cfe742aa544ed4a1db22d3d0a1b63bb19328c2e3a9b568d6cc2af2787e00" }, + { 616000, "c4218e8a07efc8e228e60869f31da01e705a1feab105df0ac49f13abede54a14" }, + { 617000, "380ef40535379e69135e5a69deea4bfc8fb46828d99ac446cc8f52eb61d623a0" }, + { 618000, "20dc8713100fad43ad6196fe7ba809af87dee2d55c4090330fce925497aa52b9" }, + { 619000, "14f4bee3886bf23cd03a90d44322c3ff2f8359cc5d849c1a1d8ee848f529b0e6" }, + { 620000, "a4f9dbe5d7a4f8e9ebd6be0b1183d7b59323351035307309cbc10406282ae793" }, + { 621000, "1ca650e6ed169fa16be333e8fa1a04151a9a41b7e51cd938db1a58890906f7f9" }, + { 622000, "b31b8a8e0280dc36dec9784bf3ad6023aa7d346d2f00272ee1b9aac9fd1f5841" }, + { 623000, "25d30fb1eb547163901ec97b82ec683729badeadd474360ed2388dc188e68cc2" }, + { 624000, "0906e6b84144068b69ec12bcf028afe576b930f6e4384260b9674c293a32f3e0" }, + { 625000, "80e98c011cb151de92ebbfacfdd929fa6b4588977c5af512bf2ca10039063f9e" }, + { 626000, "ab834d59946676276890fa6f74db56e586b991e012e87ff20477fe834627db1d" }, + { 627000, "199690d7d8a87d7ec473383b8480eefd973a28fcf4897e5954e398b2eec9019b" }, + { 628000, "3ab2c95cad967484fbb843f4b82d9148f6923bbcff41614ddf92d49dc09e27d9" }, + { 629000, "c5006702bb388a79ee8be86ab72b28ab6d14ed8697011ef82ab0530d71eaff32" }, + { 630000, "7944a1150b961e8b4aa5edb39572fff3cac583b89695d63943940bae1557c853" }, + { 631000, "83583195aacd2c5c84b70f26cf632985f55f6d011a7df45cacd15d7db3bed313" }, + { 632000, "c9c495d457e47bfcf5d0ba7b7401dbcc66f93866a8965129a21c8f08280a2107" }, + { 633000, "6f84bcc5b07c76c0c5486913a7bb7582bcb0dcc002ae94d8ae2f82870ef41ca9" }, + { 634000, "920391ac8741643951dbc84353755b9598904067f76c6f8ba408a5628091bebd" }, + { 635000, "92b79d544a2227310c274bbb63a1697858862bc33139531a89886b549ce3e4bc" }, + { 636000, "9cde13b3b0181ea71d9bd8209fdefe8afad083516a5b70555f15413f425dd080" }, + { 637000, "65a2c5467b7132c6ab3c84c36735f340ac51f8e0cc491abeb493fb3b4a1b6c8a" }, + { 638000, "349d666cfbcbe3844d6abb5a7e362d3c7fa2f2cb2ef9ff270dfcaacd9a6006ff" }, + { 639000, "3b304ac2ae4b186b6e295a63e11a1c402e8435f4f9308fa6a97bcc37173767df" }, + { 640000, "2f90bd91fdce02a0e4f6a5da3ec21c77692db83b53dd6e554b9c314a91afb639" }, + { 641000, "9e64181a447c8a877f93c742a072a9b69631bf8617eb21a7c87a0f5e5ab5fb4e" }, + { 642000, "7e8a43b816e6f5e95560ccceaa93a3e6b855949839616dc5da7a6a6768838a2d" }, + { 643000, "e2de505643c759775fb73d73e19d551bc765dd6009ce833863df95e3ad4b670a" }, + { 644000, "664c7ad59bb3e3ee8b809df70701b48f9477e891858df009dc3440762e5a14e6" }, + { 645000, "b47d648b256272af0058cc5f5e23403057205abeccbe5d5fae5931c2fce526ec" }, + { 646000, "fd2f0b154169b6c3677c452c1d2c99abeb1d5fd293fe990d8ba97dea6fa6229d" }, + { 647000, "05b7cf422e9037ce00b0f4f5783d55df3322b136d0ac650505b139977f1bd6ec" }, + { 648000, "529e7ccd2d4fab8e25c0f2a49a1bfc3452f8a6202db3be1ab60247c4fb5794f2" }, + { 649000, "40b8147b2416bcc81829fd6caa310d382c5b47bf9ef88d117eff06f0d3eac085" }, + { 650000, "4c03da728b673dd46303de4300d99506ca8a77957d2676634a24c24388a9feee" }, + { 651000, "f41e00ad734b1f02b6d3d3d1d338928ec5860aa326c7e4ad0ae6d251ac1e6859" }, + { 652000, "878b02324b277c3925ab961ceeb42062889bc44c70b65d1ef50e4c63a21ef41c" }, + { 653000, "8556ae4e2b0b87953603011f4677193306b8c4cfba448aa3ea7529a12bf9d026" }, + { 654000, "2979b89bfade316bd1ea1cb76840ec396ded0078a0d3cf9c8c7a1a6dd1c0b658" }, + { 655000, "d3becf2daf90383a9d91c2d7f2b4ae87139a6ce7a1adf5710e0651ebe0a5f5aa" }, + { 656000, "4ac612d1f14ea6867f9d3c3ade3bed68c10e4a1545b463eb87dc75fe016737a1" }, + { 657000, "3bc54a4c2e45ef248fb2e41590804ddab5e5be2cd6b20b312bc5bcabee0f89bf" }, + { 658000, "8b15516d1d1ceaad8c270851a03abff237b2dcc46f7582eb244ed3432dd9aa71" }, + { 659000, "7aa5ec87094aa6a272decbe179a2395af5eb73ebdf98602346ecafa5e2af408d" }, + { 660000, "b74f796cf02360c203732146d8310a54aeb2f474d0d101fb83d9e9c1499b4fab" }, + { 661000, "7ee6fc293e43fe25adf36ca570b360715207045771141c3a7c5c3fb347d1cdf7" }, + { 662000, "c8756ebdf5507d4eaa7a75b13e8be3f08e4dda3f332e6dfcbc8134c72b29304f" }, + { 663000, "b7716ce4051289d90749f4c1fdcbf9eec918d0ba2770a1f62818b25f85161b1b" }, + { 664000, "e1cba52ba22943244e9e88a65a7f6ec78660e0d435f7580ecb2aac0fc6ccec2a" }, + { 665000, "e2bf462700ab2e268a02b9546f33c59bda796c27fbfcbb22be0035bce92fdd4a" }, + { 666000, "6fc0416de1040108b8c93f97a194c92627f40acca208294ec7b8269bc76db0f7" }, + { 667000, "4828e206e6e670ca8fce12f6b11ed8580615959280b315652a2429e30ddc227e" }, + { 668000, "a957bb3e6d1dc132f08ef62e24df323c847b2e38b2581802eb7a9d8cc317c1f3" }, + { 669000, "18fb96011c45273814e920b6dea03a38a427915e28866cb02b6210fdc4417c51" }, + { 670000, "719b444c9a4e036682dec102b26cdd28dec2e9f059c9f9fabe69a4cebb23c950" }, + { 671000, "b82051b43bc9e0259a23308a06ebf7c8f27606b5bc21708cb366b7dbf82dd777" }, + { 672000, "b4838dc3a18df5cc8d8e6ef52fe9ac534d43976e1a8862e738ef73e91aaf8553" }, + { 673000, "f7d3e88e080437f00a85cac6e74975b67db127315b59bc84880830a978a13e62" }, + { 674000, "ef8305db77ec295476e94575b776a380257682e4d9f1c0082927ed8bfcdc7cf1" }, + { 675000, "e8950f230c28687b78db9275ad6eaa9fd4e641c030fa8407714b71d774fc5537" }, + { 676000, "862ae90979a84280862756acbc56b1c20e44abbd9e6135a6e1e83e83ad4bc3e7" }, + { 677000, "038e8cd8ac4a812cff16f7dcba23dd2290b79878a2a23f03eba4e58074ea3c7a" }, + { 678000, "ccbc71933f5590c5d6ea5210e8d6047eb65cffa25fd70541ae01e2729267a377" }, + { 679000, "f4ab95939abbba68e225b6ba34ea0a66f592d41d88904e9518ec9a1f61110642" }, + { 680000, "2ff9ddf5f6b673223a2a2075107cb17fd5a280c3c604919e3a53f632a9e34799" }, + { 681000, "4c7f297182b1c586c678ef5096d721b85dfb6a5c6bcdf56ad855b91f9c1cec62" }, + { 682000, "937e8933574c611f343b1cd83ca52e9df6c5e17d86198dc1dd0e07478892f1dd" }, + { 683000, "cd779ce179c3a51cf966390416feaa6559d869e3abde31aae2bb87065615080b" }, + { 684000, "3bf7bed9d003df2d6ffb67c15536bc20bee2929cc6bcdec8658718961d4842a0" }, + { 685000, "07d5a7a9713ae98621f79117d68d7692db2d9abcb58ce4b61b85f459a412eacb" }, + { 686000, "46aa553a1063f6bfc8932d68ace9ebe2a9f225f448d2d24b45f5e3544907c49e" }, + { 687000, "64b60e6064a4e37223243e4b4bc50c2e55ace7b2a09408d11e648bb7cb81e689" }, + { 688000, "5c17402b63f7b4dfa6bcec34cad7bb43c8bc6f2bfc3cae660ca6d585e05535a4" }, + { 689000, "bae085d9362996d88245f1962b20dfd94f39efafae913d42a423bd71826add2b" }, + { 690000, "222b9acbf2019361a636fc95ca35938cf24ade3a8f519406274ac10d172dad9f" }, + { 691000, "1438e77cc70f3bb45f2baa1d585f4880b9e30c9fe5521e3d1772e258a9547725" }, + { 692000, "0608382f81532a2658078d64d414e0a01a412df1f9d6778873457af90eff822a" }, + { 693000, "77a7a3cfa815841411fe925c04ca4a6e88491c21cf7349927fbe95be1b00a390" }, + { 694000, "b5de6f88f5e9961658b2cdbe849ee9e88912edab5370e151ca95edb773bc4585" }, + { 695000, "553ed1c0c56b6628727f6beb775a2e531aad602d25faa9bbe6a09f43bfa91e1a" }, + { 696000, "ff357317c7d71ba1c2f313f86eb651e6a79952fd35e046ac745e3c0f9430a2c6" }, + { 697000, "114c7551c09e58be219acc422ac821cc2cd4a19cf70db7ce3052b9e5d730b228" }, + { 698000, "d65b32ad396cab72e83ee2afbf5b6744873694746e8dc9b807a3f02ecc2b5f43" }, + { 699000, "cd577420f429ed9766460cdba4ed748ebe38349a9e682c04a254e36503968080" }, + { 700000, "6a12fd0de1431e281f98e93251904bbdb8b9a4782f297951458f61f5b22ad673" }, + { 701000, "ac47921782acfb58bb4c19b6c92bffca38831c9bb27e4da0ad316e14ca594e57" }, + { 702000, "f1e684dbb802fe75b7b150b6a5c23d3be54aed53f3c40952739f14b70d260099" }, + { 703000, "86ee933cba04614fde65f3567b6675882f4a1cee289bf000a1b343c60d3ee6de" }, + { 704000, "bbcd7059f0c9875f778837741155044f4c917ab899a5670b5484b3e62f6caf15" }, + { 705000, "fc8a57563258ca753974b0b0adff84b170f9ec3ef50e5554d2607ff4df34cf37" }, + { 706000, "abb17afeb885343a7e08c4dc0090608ca4465ff7eb93e3d1d07f0bbc175236fe" }, + { 707000, "46e8bfd1576df114cc577b297400dcf71456851a4e0140925e537ccc75650c6c" }, + { 708000, "5773b18143bb70975301c8cb5c15fa68d36d27243531fac32506a0b37f010bc7" }, + { 709000, "1c991b9e03ffa4f3aa475aa6bb00e93a65e9b67ac2a88c9601de6f95835efef3" }, + { 710000, "74ef9e5804b13b0834bb38243b9a21136af1e36190893ba8d552eeaf3eeff1e0" }, + { 711000, "65a817d63d42693d710b242af3a041376c2474acc1666259497b262b0bfa8af0" }, + { 712000, "abe2add1e41a8e277d164f42b7bf54e3d5d167d49b850b271ac94deed0bde7dc" }, + { 713000, "4589af6ccbcc3098bce53d4149c992cfa6b2dcb07c7bea0aaa2ff746bc0572b8" }, + { 714000, "9c5936200e132cf4ddbfb5cdb131eb2acda60afcbaa509e9d3dd28adc0cf1669" }, + { 715000, "d400bdd65b64898bafce555a549c2565841ee3d4e72e66a5ab803f134560d717" }, + { 716000, "deb209eb1f9d5c30d4c378fc6aa9d06de516a93d1d0704d4a95101239cb627c8" }, + { 717000, "80bf6874f5637409fc129258d25a3e6bec7e0e1217a7c2f0d242797db6021827" }, + { 718000, "99120502e67698cdee738f70c06b0c9c27788f5607ecebce007524d75ace28e1" }, + { 719000, "c2a7fa8f078aa5d62b1d9f46ef6dc444c46d6817b3222742d919ca440b2ffc15" }, + { 720000, "5815fe8ba956c742f4e761f8ac80b2c46c881eb2bfe5db723419287b52f5db40" }, + { 721000, "a754054ff0aebf068ed6d0411e83dc485f0d3d465f2d89f53a40ec2f6b4cf170" }, + { 722000, "0ca88090380f69ed0f57d5ed418141e95f252279cd788ba02fe4488d92bdaa14" }, + { 723000, "63e11bda79636caab82ef7f39bcdc035eb5e028782c9c77035f7d54d9e8f356d" }, + { 724000, "b96a85f8325119a5fe573e58c693728b0d97eb9b35b49713ac8fb5d68718218c" }, + { 725000, "220a034316f1fa46e7071f8ffcdcaa4916c62a3fd37a0401964f0a973260029b" }, + { 726000, "9685fdc2ec5854875e7bc4945e2f3b4e71f20c50a167cd6ea08416d0e90db99f" }, + { 727000, "705217da9816a0a4ecfc3e3018efc12e8da2b52d7a4b93f48934a7b98f43f438" }, + { 728000, "3164f9470be4b9b458e8ac925d9edc7299eb740fee0e9a1c59c4239a47ef47fd" }, + { 729000, "66b93f3650c4d1861e1c657e9ebb81a22bbae94b5419561d6ff801bb759aa73e" }, + { 730000, "c94440a912f6818073e0bd0931deddfe659f297ccbbb7b20552724ade03d07b6" }, + { 731000, "dc968045735e2085faceb2aa56a7422afb281bc8fc6514740db8a4503f0a4ff4" }, + { 732000, "3f06cb91998cbd1b2205f34bc63f7a34f05c21ed51d869f02e188faf62c15f68" }, + { 733000, "f561f0cfa26b7169ed7d03687a4079968ff402070173bf296541555194ad943d" }, + { 734000, "4c961cf6ab18c31955862586db06fc0acf3b56fb2d37c9cbedc6e79267658e2e" }, + { 735000, "11b2f45144d3bde7bafc4656a0b7c09a215cfee7fd7e1ecf718da9f76345fb7f" }, + { 736000, "553c5009079053dfcc1d7937d5c351c84948753a9dc9c84a2932925e52f765df" }, + { 737000, "07f595ce150c8c4910b81358b6d4c04927198aa579c7d20c84539e4a732bcb80" }, + { 738000, "c0615e976b46b97214755a78b834430258f25374862a81656865f944fece7be7" }, + { 739000, "32761946e1135916912d848fa6dc27df83625844fb996a0242b843f55359515b" }, + { 740000, "2e1428d45ad48f9f411a4afa15bc6b705b6231112a412a08b3c126e668af35f0" }, + { 741000, "4a43f0b79c6d3e3c3a7f468f7c5fa5fa449251d8cbd0cc362f4e543856ce605d" }, + { 742000, "aa3dc353a18ede46c51c75846d0ce9421f2e29e1d72d79f93de46d50a9a6c240" }, + { 743000, "a8f9cb33a3d03a74504d7c952ee13b1b6ef5a7c7c25a353b46112e17fa91a779" }, + { 744000, "c59e669042828fc33b9fe874ecf5bf67f3a25dfbc53b95bd195dd535c4b9f90d" }, + { 745000, "cabccad06f5bd84c504338202cc6a9f796f331ec83b58f48807ad50fca9c05f8" }, + { 746000, "9354f23faf3c6cfcedd8087f8d1bd13e41d50f37219072fbf9cb4a0df2e6c8f6" }, + { 747000, "d87d3b3fa146b0af6b4d2fc8bc54064cd46da82c19e7e6dbccefb7d94e72b866" }, + { 748000, "6144cf3d90ffa3fe062b8d86659bfdd9dbd79848e703a6713a7a43fef77eb6cb" }, + { 749000, "d4c5a5929b7c24b26e160a6341d0ba793504e096fa3e4e057ac201275578384d" }, + { 750000, "41b72a5ca49e0a653066d3f0d56e9aec630bc801871333369574074b2de32f42" }, + { 751000, "fa44f02f4d17138dfcab645ff8c4337ebcebc1251af1f652651b06a5b65a7ad1" }, + { 752000, "cc776bce263e9c6aa194f13c0052dd3c304eeda9b5248224dd76de5f47a167b5" }, + { 753000, "cca2bb5ac11d08182cfb9682f2cd961808b978d31e5b98a11394961e173e12c1" }, + { 754000, "6011055a37e00655cd79e3485fb781d2587c962d635af687d73a11528b1d55ed" }, + { 755000, "2d615550b6b47956c37b7a05a11a0e3427bee0c3e6efa90acc4739da65cca357" }, + { 756000, "94fc041f3f707611103c096142d04a33b773076a1d0436db6caf1c5cc0430bc1" }, + { 757000, "f6502dbb335f3cb0f0fe88014a78efad7d41917077b0270d98c05aecb45156fb" }, + { 758000, "6ce71d6d9bdba1ecd3e3644a3444bb312828c722cd5d7dfbd79a18117c7bcdfc" }, + { 759000, "58abba22f01a01e120a864de2462557350ac57f49bf3fd55c69a6034c5a25ebd" }, + { 760000, "6b5c2392e86b056b4bcb1b31fc09e298c406ec2dbe454fa0b89d9e821d2ee47c" }, + { 761000, "974d7d54e1ce0d5a965df79dd3c1f9ec82ee3e348276e42de0e16d2122b8c779" }, + { 762000, "cdb6d89c2773a73233ca01aab1c9da920ec3ff18d41c3a0d6d2a05e44e4bcd39" }, + { 763000, "e719feadb9ea0c63574e79f7e83ad06368df176bf0beb1efcace4287e93fd4e7" }, + { 764000, "f47dd75ecb008306d2f94370d2dd1de36e611c29c4340494e1607918c3162c73" }, + { 765000, "8345ff2e69437ea1ebc978f5396659913a662047509d74953b4aedccddf614fa" }, + { 766000, "efa556cb808979931d5686fc06655e2c493e3d42715a96e8a9575016acdb0b3c" }, + { 767000, "58554b84a5de871e8b1607cacd3d367fbe1584ea1c674b6e5cb48a013168a001" }, + { 768000, "f40480a0b2c28795f4e120c068a1c7b8438f4c11aa55a1c9dc3d3d01d7223329" }, + { 769000, "4cf65229fcf09be9f4c7fb6d676df86841e52cf333a0f5601949fcc8d8317e15" }, + { 770000, "dc6804375876e4d4f60578fb8bc26dbd83429f08b3b5be7ce656e0aed6a4a7b9" }, + { 771000, "867d0567993f12877cbb91be38301a474c66a34d43bc76ba1ff0295b31544a3d" }, + { 772000, "60e540abca59b63a6c539ddf265e60c42a28e8dc0cc06c97d66e246112870c3d" }, + { 773000, "3b82396fc3121fd9561184b818288acae393483bd80d2c76089d04bfbe8169c8" }, + { 774000, "74d28bd6ebe0ba17e23f5a6afb2100824f6321ff8df6ce9a6828b961584115af" }, + { 775000, "0f21ab4671ce97304c9f4070b4381ca4d8b8821af8b36dd3375c512aa89585a2" }, + { 776000, "46863619a4c45056902a67d4a85dcca18f3e2e465e113b94b42c6ee359ea6984" }, + { 777000, "805c7aaffe4ba04bf9649e6ca712e5c1a5e75a6c6ecb57e9858ce666d3058b75" }, + { 778000, "08ed7f2fc7e41320b54eeccfbe344ad3777ce001bce7b46ce33c7828df7e51a2" }, + { 779000, "f523b40c77e2333e96f52f94dd6570a88687359d1943df9e999209b4f1b9d46f" }, + { 780000, "0b1712d6795f4b98b222e0c11dab3908608d83a583c19828a4b1d04039f734b1" }, + { 781000, "8468e6648f3d41e5eafe6387915349a3529ca2e9b9d1a30fb0e8bc21eb27a837" }, + { 782000, "5697c9adbef0c167c13ea2ad3273452df786a93ac83e0d52a1aeecf026ac0402" }, + { 783000, "9fb9185109de408da7756572dfa94eb41c37bb10dce929a0ea323d99351ee3f3" }, + { 784000, "7d8d6ce84571bed5d83b4dad4d64706aa58f832988dec83305c3de58c915b66e" }, + { 785000, "9ce01b844487f9268d923c3ca50f41aba5c6dd0ab6994fbd00427a2a26b89b4a" }, + { 786000, "76eccc0632619c3b2b546e711970ce8d04f83398350653539e57c9e7fc5b20cd" }, + { 787000, "ab2bdebd33c7c4959bcb1c48eea9926a5390dfe91b8d09732122a0c1c5c4badb" }, + { 788000, "c71c03c0df53bd983c921a6aaeb1b1faaff5f02975939d5e47852da37485f36a" }, + { 789000, "a84a39910aef093e56eb820d29ad4aae49daa08a7413ab8839b88f4f932733ca" }, + { 790000, "82a334fae5535684aa9c2e94b2d61d57a7ebafe3ac8d4d52b97e4819914629c1" }, + { 791000, "446905dec258c9c5e016fa907eb2bf29ac114a55f0894f4edfdc75790f6e9e22" }, + { 792000, "99bf27dcd7674caee26889bd26a6aac7b00d6447f1b13c22f8607d64b4e720e5" }, + { 793000, "e171721e9fbc6f10dc4d11c34810701754cf2bf438ba54975af89a9402139400" }, + { 794000, "f401ce98ad5e420e9e4af9d906bd8cac6b80312c827903777b878ba9e24f6c96" }, + { 795000, "30c9af5713124e8d6c6db327c8f64526606a55ad8ccbea3d65ed89d4b6fdc849" }, + { 796000, "077f42e830acba2f40d1b2e6eac03682b3d2a144bfa616881eba2dba0b5f7a83" }, + { 797000, "43d6972cac1f7bf501e4dfc53b0bee44731689b18fbdea5b5bfe2da0494b514d" }, + { 798000, "3bf593cc377375e5283dc22e0a0a829cd9975e7195bc734cbea0ae5c0398482b" }, + { 799000, "0268d741c1e62b73740c95b3375c420985a395ee9f2942d9d6072691efbff6ee" }, + { 800000, "06d16a11ae045e434b2e7850bf2b1d061c91d741783984bdee921decfacf0f90" }, + { 801000, "cc7ad7e7942e5e6c8e069cfba0de9db010670a91663fdafdb6044f973f91066c" }, + { 802000, "63b7f5e902cd801a4495052c620a7cae8e34b2d69ad9e5e31fecb4be7099aa37" }, + { 803000, "b14b8256f83664b8268e6a98792187e9ac719a822972865d889967ee98aed0fc" }, + { 804000, "b48eb299b4d2ed305dd09adcf593b5885f499ca41b0f12d75110b07c290c6495" }, + { 805000, "960cf47dd44321b1b6725a187fcdf4514af09b6cd0b3180140dc15f657ea12d4" }, + { 806000, "2dc652232cd7fde75130655deaeab06deb77621374f4d0a282de21b2d49ef7d3" }, + { 807000, "4eabcb29d77e13fab6b9e7fab52d13a3966e8d1051666b2e80d07f6ee09570e6" }, + { 808000, "2b890b62513b3ff1becca0a4fa61d7d95e027034cc4160f44321df0005338e06" }, + { 809000, "a16cea1ca78a7edd23546904da6fbde0f937f03f36776b6d4e8951072ccae83d" }, + { 810000, "5f65db32f349669fa9c949f9bf118c9ea91ffb028e4c71e93fbbca2c11709f7b" }, + { 811000, "21528f55f977378541ea55fd21dc295bc6ecc190043c90e8bd1269a5c1f94a3e" }, + { 812000, "aef1a381baa344247ab25b9db4557213e9d823a53e0612ba7e79ab38ffcd4154" }, + { 813000, "4e33e9c8813f9baf6eaf3b8ef7d28d70f2d8eec15fa2e5fe5ec63413945b99df" }, + { 814000, "1a8036bace8eabb9c300c47f3e75f74b3fd67641b4386defe530d6c60225623a" }, + { 815000, "825eb16ff2085d0cf893846aae162cef8a60c0309df189d9117ca397b42c819d" }, + { 816000, "845980a8942362c6d296ea9e866d8ed4223906c7b46f9194b9d3b04c7de3eda3" }, + { 817000, "d4f06681826d1d3e93b995aa24ea87d1abe7dc52a6f77e3d95d39e8f5ca02409" }, + { 818000, "edfa0e5e012741439ff763eba7e2b223f4da342375ce3dd1d51fb1088779d463" }, + { 819000, "7357366792f8c7ee439d492e36769fddf0b92fe429c3aa51e88ef817c753183e" }, + { 820000, "9e9d1866e6f5e276b2e7c9b01a39cd515ae904d7577e715b62f834517afbc4c3" }, + { 821000, "0d20326d0a5c6c6de0565fc34ad85c0f53b4768aa1f482e987e3fe788326d31c" }, + { 822000, "1e5711dac6491341ba5464b9ae303ec857087178d78632e5e9ff74d10f7f57ae" }, + { 823000, "95ef36abbfc7d5d2c9afc0ca6fa67d11fb4db72b73b1d91bad8d19d1b86416fd" }, + { 824000, "0702c31d6e3416f38bb9dd3e0fc45e8fc9b6a529faea9c12e2533e44c8974775" }, + { 825000, "97a0330e9bc25d198c80d2b6f06acacd32634774096b457cf313489edcae837b" }, + { 826000, "5fe70b6b076d72334e3eba36f5ba7847418603cc7ba27d04e4b0cd2108975404" }, + { 827000, "e3222b2ef006bd600f547f41ac0796ee86d7027c954e5a0837ca61cf3a053a69" }, + { 828000, "35549ccd76df94733df96e6f29de7ebae951fd8646df57ca23ce01ae4b96413d" }, + { 829000, "e8c8a7648c3c0796e9d2466b512e581b6ac412f65deac72e00d3569ec6901d35" }, + { 830000, "824058b3310fa5ff3cfb72c2f533ea907e026b36289fad545abf1ca09cbd3551" }, + { 831000, "c440b4a198982c5f857a9eff673e7cffb7262ca8b9a28186d38099d744645126" }, + { 832000, "79f54a9b7455824de4d5a5747b10c1caba415aacd92cd5739d8c0c9d290e6e6e" }, + { 833000, "755020044019735c2ff4ea4c31bce2ea46373f10275a0c06e2122c702b6e8b88" }, + { 834000, "ac2dc947c9954c8b4cea55a6ead7e344d6d0f478814c530567533c66c8be581d" }, + { 835000, "75e879c6c10d198b70473d2b5ac95307fabc395c4a87b8a00b20627d77bba486" }, + { 836000, "3e744d549ea0b10b973bb5a352afa7bdfb236a8c3e734a25d33e866b130e3e06" }, + { 837000, "0fa9a2672edd3795bdf393f73261310f539a7eef97769ec55be2568e67881c29" }, + { 838000, "76d21ec0f3764fb0357a956ec8a53721d5e56447f874e3cfdf7549e8100c1c51" }, + { 839000, "b77c5cfd482b34c3e5a1cadb070eb312fee6fa7bd233180e6348fbc3d3cb3145" }, + { 840000, "ab89e030bcbabc24caeafd857de2e6e8feef129832ade049c0a5cf7722f6178c" }, + { 841000, "7c3b2fee14438efb207850c3493026653d46cb3f8bef9a27a686d4ae12027c76" }, + { 842000, "b54e11fb070f59067532e7eee0c3f34d83593262006f78848288c3b5169a0410" }, + { 843000, "d244c7109e3164a00493a469f22e39107aec950b012e1257fda209a44dc86353" }, + { 844000, "472b934286edf8a7b233c3de48660a5100fea6c6c16efa168021d67dbb7c01c6" }, + { 845000, "2c5cb2c048ec972c78b286f411afac8a9017b381cb36f9b19167ea37ede154e0" }, + { 846000, "15cc5f1adb5fed3a1326fa40bc5e8d7259b4ef97b95d9ffda0744a52c9c0baf3" }, + { 847000, "f56c815b68d271ca6896d3d86baed2763e497336856a90f262a3600318d5d9f4" }, + { 848000, "fa909aaea0da6d6e44811ee55e1873abb4d756c427afc7a6e0f05e96905d35e6" }, + { 849000, "62534444cd4d84f10238c72c2f0088b61c8e30c10b23c4308997f7534c4c2895" }, + { 850000, "d502abd527f2fbd1e8eb66f769c11da8e58de366130b228f6c9842465497fcb4" }, + { 851000, "8359a0901c975f86e3406227d0d9516903424dc4f0e5002aa83e0b0180b3821b" }, + { 852000, "707b9c6efb2826bccdefc1bbacf192be950dc8ee4674d4a036da2a63a4db12ca" }, + { 853000, "90df3d239b7302483a4a9c6862607ec64f5a3a08f7f3cd0dc0ffaa9d952ba3d3" }, + { 854000, "773c7b6177dd18e4bbab0d56b3a81ccac35c7d5a8cbca48a6ffd7d8c6a144517" }, + { 855000, "897723b0122b5cdb8856224f297d742338d657a47b1dfc1f372a7187fe7d3202" }, + { 856000, "0a525fe51ea196fbabd7bfc2e3042254ac6ecb90527078ea9bcf6a6c616d8bb4" }, + { 857000, "491da4dc8dba1d9431ba6b47e7ba4b0536124819799410679ee51f10462bf3a3" }, + { 858000, "a4fcef5cc6cf45f5c81831733be094dc7a836435e5d7ac87236d50fdaf3a22e2" }, + { 859000, "26779554c1e05f7388fa5b3119055c365b2198e22e53770b1c73a51cdc23945d" }, + { 860000, "19b2189ce285ee6cd5cb96412141e5f55355b616e37e55c0f30f0ea953878c37" }, + { 861000, "28d02d85ed33a0578add5843c723d97a420092b4ea6fb68a824b90a1473eb30d" }, + { 862000, "3641da94ed41ae3981035388e2096b9e8b8cab22c2cef807949c4eade0ce530f" }, + { 863000, "86b944f8899181e38690fa01bf9ed93d62a108ec999ac8f533040e7b64a7f25a" }, + { 864000, "957a83592c5278288cc185dc96aa36825f8c72d990cd0644fd756f9f8f4d6bea" }, + { 865000, "99bf6efdc6f0bf334eef4cffac07b8aced6e74b46d3bae3ebade4861ba137c34" }, + { 866000, "3c746c6f070a03438ee64eb77b308dae05d71cf6b67e571ae98f1c35b727a9f9" }, + { 867000, "a873dce39fb2f98bd07ffe3c59c4ead065a67c9011fe6d694023cb97fcae1fcd" }, + { 868000, "9598e4859543d94774c63cb5b63689e888bbdcf848ea2836b87a26cf9ea9799d" }, + { 869000, "690a3494f38409d19c8b2e90bdf5e6a2bf63dd322547d16fd5ad59a752324416" }, + { 870000, "cee5e1cadf2db8b05fb38a527d13de072c0bea89446949a9891983e6bf498ae2" }, + { 871000, "fd52d8c4e170d109d6a68655b6cfd4e4868ef3bdf9206e33c21518b6e9009e84" }, + { 872000, "157ddc4bf2b1801270b19d64c545f6ecb009c8ae71fc406e38f55064e85a1c63" }, + { 873000, "679feb939bcfcf4ee5d854b74a8659b8bdf57f347676700a7bdf99228d678371" }, + { 874000, "11d2cb9dc36e4685d27b9c135919760c612bcdf64a173829cdd01f6ed62a90e7" }, + { 875000, "1b15b46fbe39e32f0d4297bf52687e71dc3af5a6fa02e02d57ff957faee63aa9" }, + { 876000, "c60bfc79f20c4f9145a06584059d84b74873d5ffca23438258cee8431485a635" }, + { 877000, "82a898fda08b4dd641161030b94236f8655823409d3efe920e228ee54aff76eb" }, + { 878000, "62ca04200d7aa567a3b22d99bc780b9aa3dc445417e8c55850586b8da21b06fa" }, + { 879000, "27d484baef7e4a44d400e86469b928709d62b5c849fd1f86793bf0e421fa53d2" }, + { 880000, "3d78d6526e953377f8eefe45f51ac74932abf1f1ac5308e053ce699633ed4171" }, + { 881000, "d5be12ef1da11ada16ba1f3dde50985e809b4345a215fb178f9e5d526d561c68" }, + { 882000, "99bbba16761ca1a60d82ed971d755d2e22202cae502a5025d4d2d23b030c28ee" }, + { 883000, "c9088a08e2dcf2e7dfc41f3c873410bbe6c4a5d9910af6e3667997ab7d62203e" }, + { 884000, "d4773f4fbfe985d58be07e1d29d3a7e710e4ce7f1b575365f4bb6f7b82c98425" }, + { 885000, "0b4b862b392bb24a623568c471d18adb76e4b14911335ebbc3d94936ab9ff6cf" }, + { 886000, "0827e2447015aa7dda645aab4ffb7cfc930e110a718ac7140114e94e96da2de8" }, + { 887000, "6966fc68d04066d61b3bae3384fb1a765f0d2485d53b2cd3aea7bb9d0e12ff02" }, + { 888000, "62b71bd9125a3efc3dbfecd5dfde1482e12109456c32cb3df7ec8623a24aa984" }, + { 889000, "6aa8cc6db2496142c60c8bf71c54266b40d9c5002295cc2ac94209acc59c6295" }, + { 890000, "be1bee6699f377345ec5c42200f76943897440d9617c8ef22ac1d606d3721f76" }, + { 891000, "e0d52345381ec4d0fbbb4a81a4fda0f217d5b39b21adb599e6bb40d2f6e55f67" }, + { 892000, "874449c43e57b0bfd6cffe63ff9338b386b832fc1f6e7417491ab458a260147e" }, + { 893000, "a1a74d3d1014e2d2f2f02c240cd62acc0fbcf6cfc64e62255f6e40f28ff85e31" }, + { 894000, "6725b03c2887c60b0dc9b06e332c089f925419c8f712cb9ae4892f36e81f8b23" }, + { 895000, "9823d67fdf27834b59cd87f6040d26b435448f5f5ea1813aedefa9f40d84a4ee" }, + { 896000, "4c4e50cb12106d42a8729ca28da964e66ba392a8c53aabc3dc182e36aa9bbab0" }, + { 897000, "2610e0dc9d3cb1a96156866c946767d58b0513a32f39322792fe67585a0cc899" }, + { 898000, "e98994827c2125f847068c3b5c16665a33fd13815a8952b7140e94bf29c259b9" }, + { 899000, "28776cf3190a1491a6a76641235373fe94ce26b1ed735e6a04d5d72eeb4acb68" }, + { 900000, "58f8b3e1380ceaaeec03f23bcb3549fc385ab154b35c2015ebdf25435786dd33" }, + { 901000, "3cf14cf3efec669ac73312f308984469219b131af53743d190ac7c5b70cacc25" }, + { 902000, "51b410d195d96c8ffd62f696257629f6a03134bf29bb74e29f6b9fa5e2d0f05b" }, + { 903000, "291d8edd5a31909758307bef754d8471ff782b70d6578a16d2c9a1507f6fe8e3" }, + { 904000, "12eb81c75e44ac5b6f0389165adfe5c94c300b3f07f63bd033899d74801617b4" }, + { 905000, "7d7fb8e2baa04765e1b6421f2fb83e1df0afcdccc0f715698a6fb343758b6f06" }, + { 906000, "593154f6a5a63cbac28454c8172e510cd361404e55ef42c8e53bf2cf56c5e653" }, + { 907000, "f02371cafcd132e45bba713c08cd6f74a1e057d048723337fabe7f9232930189" }, + { 908000, "67ede623b3ea3ccf88918dad27deb9cab92f64202a0754a805c66c575bfb4c5c" }, + { 909000, "7b881937b6457f3a31ec445410ceb02f0fb26c30a6ad6432df4483bb5131fc89" }, + { 910000, "3bf72daac195ad0e197f691d959168602a1777a3e038fdabebc068507b540e7d" }, + { 911000, "2bf3d2903f6a3a2ea12e985c1a23b473604c9ea0f0bb387982c80a6b315c5f52" }, + { 912000, "9e10cce384bc33d2a4fdb7c20ce3b72798e12567b1616e71ff192740cc48503f" }, + { 913000, "e6bc78ec6d566782861dbdc0412da969dad82cb60082624cf6f9bc089d4bd825" }, + { 914000, "e4e5eab870e4af4597bed3989fe72adf43efd664037b35fc0816a0e58eb7dee7" }, + { 915000, "1e9871513ebcf71f6fb7ac155b3a1c7e26af38b6b06a40f2fd7c0b1c525ec1d0" }, + { 916000, "efeba5938ff11520108490b5df59fc6928e51be07a9ddde6600572d5d6a36fee" }, + { 917000, "579a635f0c94c9af81df9bebf7fc1e754c75e8aa06ed2bb0254d89a6a947dcee" }, + { 918000, "d3d5d2c7952e58e74d070693b927b4733375dff0a6f48edfc96a774ad17efd1f" }, + { 919000, "555800aea2614ef48758ad74dfe26583d2f5f02e4dfe8174f6a6c4ed5000dad0" }, + { 920000, "d604b16fb37f253f917acbb5222dc5e63d08ef2f6c39ecbb645a8f72234292ec" }, + { 921000, "460a9bab701ccb00de6925c95a276f5942bc4c005a5db57cf04d9f92d3e6963a" }, + { 922000, "745e6e698800b832500bfc536e2d2716bcb58ee652c81bccf84bdc928ca4b1eb" }, + { 923000, "9e2ac6096d8d5c5757d7230fbe2307bf680d62bdc9d780faf9f79b4bacc6706e" }, + { 924000, "8a6f041f191224cdc65153cbcc548d33c0276ad05c68d34804038f225cd2e029" }, + { 925000, "1912056d67e9eddedad4451dc719c4b6d96c5a8d1a1a9e45df712f4148bae47d" }, + { 926000, "660542d4cad2cc6370a091198f353a9da09cae5c4ccd7ab2cd47847c3062b0a5" }, + { 927000, "bad2168f6e819b99705ce1393d7e826da1a05e3cff8ee7ac079fc37eb50d4c96" }, + { 928000, "3de9c7b530ec8568eb6ce15fc1406f8e672b0e81759887754e6d0b6243ab11bf" }, + { 929000, "d82bd05495ef8910b349b09b10ac79edc22377ac5143daabdc681592892d898a" }, + { 930000, "604cb3c70ec02b59afdd177a8b47f23024c84cfc6c6d1e5680f4fdd682e2b299" }, + { 931000, "2f5311e454c527f721d9aa3ad52960163cc4b4dff7b855234f5cd0e61b12b7a0" }, + { 932000, "3eb2c7d788172f0c32731fc8b2a73d00421c4f333b94234d6a127cfcc4431366" }, + { 933000, "99fc18730095ebfdec14192e53d0aee550de29a9cfec0328144d3981903dde67" }, + { 934000, "9e4798425767efcf3e230363e68961da0eae251705a0b8937080b3ea4e0409c7" }, + { 935000, "a635df6c7d03fcb0d0b05e097648cf04e6b43f5166e81abd13e9b77e4b8cbd2d" }, + { 936000, "2a38d62dcc82ff2f2a4acb1065e4a5117e49c7591ee6ba88e5fd9547cbf503f2" }, + { 937000, "40d15515a2c272b717dae53517550a4506e1a21099ec56604c5a051abc418d8e" }, + { 938000, "1a0cdc37669aef276fd40411da69ef1ed6e483c165c72d0eadae4abdc16af9e6" }, + { 939000, "517fdc221bc994dc24f5052a269b0344f1dec771580887a4f4eea2b03d8fd35f" }, + { 940000, "0cc493e454a95f4a1de695c441084767279fbfec4be484242ba2e9e13f957b13" }, + { 941000, "bbbec9d77aa33c19baeabd8061693a2a2b4379cbc89bf939a8963f4fc08c8b1f" }, + { 942000, "80b4ce9bf828fcb3cc4e58bb8f2b8003c92ef58af543ded445ca680056848c3a" }, + { 943000, "8b552dd3e1f5d2a828bf61fd0cb9d4c5a415fba08773de6826010f0abe6afa0e" }, + { 944000, "3740e7a0c9883bd8385bab8c4539e3a3b771994b38a1c9d6b94aa3ab93849c59" }, + { 945000, "5f5f0f1251fdee7145790cfaf2ac723cf3c40e36f49928f0beba0f66563ef315" }, + { 946000, "39f66239f1cdb5caea4d36d1df7bea828a0c7dc8c46a71a55ed01b2f04e97c34" }, + { 947000, "84f1419a40a6f25f137b4d5c1f35a56aeedb3e6251b171facd2a0974906ef3c9" }, + { 948000, "9d7c02988908bb906942c7b56c018c0a6e1b06f972bf34fc2cda4b85c109735b" }, + { 949000, "17cb0f0b54be3859f1a04e36329d0d8203d55961424114127990d02ec86619de" }, + { 950000, "477234eda8abb563e050d4a9d6a08454dc486463cb7ff1f06b777bf0ca928573" }, + { 951000, "248e9d71ff64dd8bee7448fbad53aa30788627d95f9e23802d943b1696a8fe36" }, + { 952000, "07593c3c2c5348196d9cc704ea18e33f8e966ee05f9882b69cefaa04cb7566a4" }, + { 953000, "9d1b97ef02d4b5a5a94146b60267059b25d226a80ee7718678402fe888cf3f24" }, + { 954000, "a797bf0c6b1286df321c641bb1cc0f31c963d0502cd180b1a5e46e3c73ba3722" }, + { 955000, "4495a86f0a479e2be209a45217be590e2a4dd1e296de7144a03ea4e3e9c8fb8c" }, + { 956000, "5dd5317ba5c7b14d882df6e156e7fd9ba60ee1afc141cbdd4cca435265ff1691" }, + { 957000, "88baa81ea2e5705e9775e1acfcc98d2bcc9501d372b7813cb1c7160d41755778" }, + { 958000, "d5fdc276a66f04857013a1112491944327509b01cd3a425993f0878163cf4fc3" }, + { 959000, "42509479ade85010e24221fdf24c17b30aeaa75cf72135dde771b2a3a15243fd" }, + { 960000, "8e7c38a1957a1a644c260a411e2c6e081321bd36d3810ed78fd8f8c5192f953a" }, + { 961000, "918614104df543277d82d0f19a9e354a6c6df5cb45a90ef150ad87c9769b0b06" }, + { 962000, "8ed9f12c3d512b4e0ea1a468247779be13d087caca2f590f50ab614d8b37cfb6" }, + { 963000, "11a3f554274bc33a3a2bc162c62e11957d9daba97d95def41dd2c14e43d59984" }, + { 964000, "65f44675bd5801f41da787aa32256a0ec8bc7420c34992ff5d43bb464feccda0" }, + { 965000, "389a3dbfc1fcd60fa74e67a256df43305e128c50cd063abf5942b6a45d1f8e23" }, + { 966000, "cabd56e4b742c8fd9634f7e9fafae620fc68b662097487fe8867a20f9f84c161" }, + { 967000, "4b125731da659d92796242263e25decfba5688016c1b8398825c7c43dda5c08f" }, + { 968000, "f2185ec76ec83b30a8190d930f6ee2b58d2567dc253720e70b5a002baf118e99" }, + { 969000, "cd5093f0e7c96cd048ccc3064947d4a8c98e16eb9ea52c6b0011b2c9013260d2" }, + { 970000, "f6ea7b2214e2a6c77351841dee65bc2bcb593c3629ff10707821eaf24021ffdd" }, + { 971000, "aa0a56adcb410be39c68d5f92c805d09ab0eef2896d69c804a915cb17fc8ec32" }, + { 972000, "912a5f39cc3901ba97993eaab3784c3b5d32f757a0b8bf9c65076c7322094ab2" }, + { 973000, "650a4ea855db02041887becd650e380a821c1a13420be43b4598fdf27b692959" }, + { 974000, "1b65d6287b60da4066b7f8f662110f342380ae9a824c01ea1837382c6122d6e9" }, + { 975000, "ac807048f8012db0c3a8546a516e6bcf5071a598fd49e2737acbdf98543f9eda" }, + { 976000, "e5deca78768ae18a02ad614000a0f5fef65a13dc4ce41d977fed2d53c159cec0" }, + { 977000, "c6e8c3eab718ae02b77d95ea85523b55cb0fc70fdcf4f9523b600bcee8bd6251" }, + { 978000, "0e388ed09fbfe4e97096b39fdf663d1e30721d058f00d2640a31b418ac24f6f0" }, + { 979000, "e622296143e4f9cab81c47dd395bdc2768abae2262a4876d67cc7a2652eb3d3a" }, + { 980000, "e727b48c76f19f03fd06a90ec1851cab4c6eea85d66305c99608ae21979c2354" }, + { 981000, "128539656c292118e509a4cac0b241d9abe6404c53e629aa038b3d4cd0f3fa7b" }, + { 982000, "9b385af2f11ea40bc662f6e7cdfda8794ead4f6ac85bb35ec41174ec4e14bb8c" }, + { 983000, "299a5956578250362cd4a19777d2d740df89cfc6582ceb9b00300f01c30a7c32" }, + { 984000, "f3e49150a45c25614d4342d4800b3b7a625e5ca39cf09e1b5501eba63b1f76e7" }, + { 985000, "e6f58de182b0daccd2a3c1043bb31a07da6cfadcfb1041f86dbfc57b3d5698b1" }, + { 986000, "7c1c967b82d7fbc9f1856b9dbe6168e0d52e758837103cf23346f4d96390ea62" }, + { 987000, "a921cec755105497469f4cd4f269ffc45f0604d257fc463d6fbe07f7f7470e3e" }, + { 988000, "a283269ada4545687d17824f89bec75a02e9e8253e2827b041dae0bb48410fbe" }, + { 989000, "a9c708e9773e9e01eceda62d06460f37cfef5d21bfae9fbea16d2f7a793b8bd0" }, + { 990000, "8f8975991fbba371629facb060ba63f6628a71f162df3f7d6f21701fed0d5efd" }, + { 991000, "279f2bb6f8688e48dfccd459bc4d102cbb61878c95a5adc7b36b943c2359ba3d" }, + { 992000, "ec989d3bd3bc9362db0d4bca21b1e0da47c7d56c39d48aadefe825b0c35d6f4b" }, + { 993000, "d5b25b35a99e618b19c2b36ab86ca07a986c905ccdbbde402142720d4e306014" }, + { 994000, "992187fb61a6741779c1279cf1a071748cd48b2dee5d87300cd3561cf66d4744" }, + { 995000, "a43ff96cf72728c33247662f43e30fcf3af7396e1d8ecc5ef20b5e19287416cf" }, + { 996000, "a3f6f2958193a6ffe70faab0604fda60f1a910cae601b33aa0cb8e1412848ace" }, + { 997000, "7a06da51089f322b9250fcdf327f5f04e4177ea5b7942a79dde3b16b57bd3585" }, + { 998000, "8c651fdf1cc99198cb1f2897a12f7044ab0b39c247e634dcd42ea0a21fcf52ce" }, + { 999000, "c2d921ae5ecdc1cb4bb47bd984c78cb062b44752b7247e16e77e1533675b2ac1" }, + { 1000000, "4f099b5a86e0a5621e4904e74041c6259f7df346a5ff331234f92432e1debee8" }, + { 1001000, "d5fc33efb8a96714229f520a18b7e16276ee34efbdd841414dd4ef52256dc995" }, + { 1002000, "20a159ba648daf1318050197d5a9f2ac141e8da3c16bd3adc6a8891b141d0b1d" }, + { 1003000, "469540c686216108dba10801fd61a26b8f6ef1f54223939cd1ee32febd26cb79" }, + { 1004000, "d2d2b41c2411bf71e9ef9f99006706d471e03921179ecca5253caa8beb262d40" }, + { 1005000, "32078d5956301600dbde3991bf8fed68bedf22169c3e63861cf0f6a870141e8b" }, + { 1006000, "661297c2b97c6ed7b0e7d491ad80b213890c3fa8675c5b2c7049912216505ab3" }, + { 1007000, "b51c76c404b22d987d833a2938ae3fdf572e00c52bff17ba25056089da953a0a" }, + { 1008000, "f0b1a9d24669a19c0f7cdb30245ffd6e4d1f4cbc5da903799840d142935930c3" }, + { 1009000, "679d568acc88ffe3e6dbf49b8b4dc54dac16889e0592a394b7ced4b6c43837bf" }, + { 1010000, "5b49eddfcaadda9d0425272486dd0df64bb97be92d589f9ff7ebad940bcc313b" }, + { 1011000, "56fb66adc9d88ee630150b985d2cdeb5cdf5490e869078fdfdd6920f554cfa23" }, + { 1012000, "ed1fcee7cb2c2c1a9fdbd1824e30fe261707ed919e440bf31ee1a4623e23f0fe" }, + { 1013000, "d672f1b779f3caad8ae25bd71edeb577a35703b009646ef32d87785ad0d30fc2" }, + { 1014000, "ae01804a692097c944cf0be28b365ce1cf3caa94fb80dd3495067752fb10e2e5" }, + { 1015000, "791fd5a46bd13818e9e38b7cb5bca8c3446cac28327718675319c6ef8c3c40a5" }, + { 1016000, "8563a35a1fb36bd5540256ab4b1c22b9cafcd8c8d24881ed82970c60babad21e" }, + { 1017000, "0d79ae91dc8e4de796ed4c7c3efe383d82f2f30d4d935a4a8a373dbcd19921c9" }, + { 1018000, "2e495c883276f8ea451d8162568c981a9574a8d24771798086375bbcc18a627c" }, + { 1019000, "06f2e7fb06649f42b511a5c1e36681655f2557f3dc952780cf67c191fed323b4" }, + { 1020000, "7adc26d5e3baac1f257a28bfaec1217dc7986a319874476d3efa4a6bf7f31a36" }, + { 1021000, "b1b6782647c698a741e8611e7a739ae165d9dab56901856336f461857dd9aa7b" }, + { 1022000, "e9249a69c2a7d7d239e70f8a81028cef0f9eddd57bc3ebb12825493f698a11a4" }, + { 1023000, "0386e28bcf863f714f25240f7bb51f33354825ed39154142f1807d16e698d9b0" }, + { 1024000, "7b52b000ce74f57f40a8fbea6a73e554299cde29bb545b40c63cc47e792e8b95" }, + { 1025000, "8f71a7f2846d20779d1b84fa41da4835ec438abbe67ce9c1bab894a77ad12205" }, + { 1026000, "5e0a7af99591a7be36234d52b748f74506b599280d91a0ea13d153c2e7261706" }, + { 1027000, "1f25c959450da5c258b9494d76ea4baf798525ba207c9186221dfe2a33efb2b5" }, + { 1028000, "714cad9ebca5818f8c81fe1ac328bdc6a698a10b1eb7643cd85e2546ce1a635a" }, + { 1029000, "66a69df671a49187362c0be4a3fa3b45c15d5fcb4ce4b1176decd14bf458a731" }, + { 1030000, "1c57bb99d6d35a01a0fba24efaec2dc8e07a049cadf79137ad456d4523eb8dfa" }, + { 1031000, "4fc052d7b1783e6d918b94c907be1b12b2186ca1f0a3ab060f0b39ab8997e4b9" }, + { 1032000, "13316f770bc7c7c4438b4531185f28a8d1bbac919daba6e2964af054800fdddb" }, + { 1033000, "e93948b94e9e27ffbbdb367fe7fb6f0b82631a414d6f04681dc6445db855e067" }, + { 1034000, "a4e28d0e86698f4b4b55caf4f0af30a1aa27bea0431f3df14e91dc79274798aa" }, + { 1035000, "44ba594401be04a51c0ab20ab21fb07fac27f6eee83a330e80c5ac3a0b7cc45b" }, + { 1036000, "9764ad49d7f68e6b559d0901dafd2100a6209ca5635a18b1c60423a3ece2f9e2" }, + { 1037000, "232ca662cfe1a6d8d2d160e875be34bb0954100dd4c2753eabb1aede421ba074" }, + { 1038000, "9fc8e45f54711cd03ed2a0d9ca6a84fa2043ac7325890cbbd4f14403c397901f" }, + { 1039000, "eefa68017cd32a1e79ca4160e910f72e8995917ffa44e1fd43882768dffaf71f" }, + { 1040000, "f7af93d783243f12e251f5fed50f610202517841b0de87b9e261c0057fdb3268" }, + { 1041000, "a3576f7b5c468edf6ed036909f634ac6117f8ce5e54af48ba629d1db6f76fe9a" }, + { 1042000, "5ebf592d6f144c7f9abfec22809ae28fbed201eb2015ed7a9b2f1f496a25071a" }, + { 1043000, "952229bb2924f70d3ba31626121e959288cae35ae0e3b76586e4395e24c7d7f3" }, + { 1044000, "d0ad7c4f9c80753e128f04ad9c04c41f76b9321e07d062fd934f0870290fca55" }, + { 1045000, "77b7408ae359c35244f9368e744909a9210af730cb88d62e878ba3919c3759c0" }, + { 1046000, "82cd9c6440379b5e81b927fb2b25ec350c5a99d12a63ba88a27caa05ad200e5d" }, + { 1047000, "7bc40ffd09485de5cd1e604571df15e7a0aba7ffc7e85928d389377a0af4d06c" }, + { 1048000, "4271318836fe33288c1a15c1fe798e5b4a89841fc01abbd1df2547d4631caf7a" }, + { 1049000, "85828834e2dc951ebb48dee7d75814674a5e48c57cc98d6f986f94cfe6e22e6d" }, + { 1050000, "00503cad1a91958f222f278b56f600411045f06c336e48984b562d9fea07aa76" }, + { 1051000, "d2642c10b486717249c7a9ed8bef2500ee2412d0ba61cf9ab742abb865d7b336" }, + { 1052000, "3ffb4e4164a032d82d19ae8ec61986d06538aa01191907f4a1fa246e5ada6e4c" }, + { 1053000, "e4ed8ee7e44fda5aab91123934f3a802f789a06c078f11d2c613acf12d5dfe91" }, + { 1054000, "1b518bbe7f6b430aff4586fe8d682de24c54b43c90b28370eedfb6b8d524cc9b" }, + { 1055000, "7235d996401925aba3d9cecfe2b446a6ec6703dd6a4ecbad4ba42a4b49a3b8f1" }, + { 1056000, "66063667f073771d543fcae3273797e22e549b1215872e7dc971dcea11f45c32" }, + { 1057000, "547e961ac6f4389196ca5b1af4f49d6aaa0f32c1c07b1314d51bf1089a7346f9" }, + { 1058000, "ed06043ecdff6c0d9d88037bf92cfbcad5794b85de73321600cd84e4f287dbaf" }, + { 1059000, "2bf56e384de81d2a19a5950e425b1bc18572a14bff0ce191b06c4307257f1b07" }, + { 1060000, "03d5483cfe51be839fa7b1b132a49d9efb70e9dc97dccd7013883d6f681151bb" }, + { 1061000, "c267b0e07d9698b18f8248f03be745474752a691a1ac100724cea1ae48e303da" }, + { 1062000, "bf71d5ddab000042e17e85edbfea9b3b84a027a928093a9df73cc8787809cd5d" }, + { 1063000, "9dd896bab71970444cbb93daadf4bd0a31bc444106bcc4e56fcce5f4cb2e7846" }, + { 1064000, "32c022246463b6d9038b42550bfd34fad56850db0b3d0152ca4fb74274665108" }, + { 1065000, "3709946594144b17a26fb697c2b6de949fbef934352324238c58f9848e9a00ac" }, + { 1066000, "711759b853622a4433b5ce2bd04f25ee33bb57b884d9164fdd7ecfd0a74ac0fd" }, + { 1067000, "f878558fd4316462b6cc94794abeb292a65676f3892e7150490e9506096fd2ca" }, + { 1068000, "6d676432e0849e8eb0a6f5a26db7a96aa0969badaab0715a2cb82f0de7fcc934" }, + { 1069000, "ed63c9723398dac01372d67608ce091e0b9fc9add62d8e795bca7a6d05592a8d" }, + { 1070000, "d89062eb495f87fa276fce07e9cba469a8a23c86213c54217997a9279d749c66" }, + { 1071000, "1a0e256e0f6624fc31dbf5c48262fb7a161bbddc80efa492c794779e02a799d6" }, + { 1072000, "15d88eec528355d088a7119a0557a1445a4d9289e14fc5e53f95e7986c016a6c" }, + { 1073000, "6ebadf3a854801bab84efb43f2630db232be9b1ef20379df0fd0effc05bf5127" }, + { 1074000, "f69501bad5de736f42cf69a62ae6f9ad826852a5523da06c6b5738cf7983c035" }, + { 1075000, "a4d5ff592bb9ed2fad5df26daf81b10b1af3f609e3cf8ef22421996f42f9d445" }, + { 1076000, "1c6e045c5cb6d851c3258e5bcf19083fefc680c8cef48cd278af20b175674e4b" }, + { 1077000, "669a2c8c394960860c6389e7d49532b7ec7e683b06329793194462d0aa413abb" }, + { 1078000, "ed6b0711a10eb6838df407226453148a5c7e6ba4531b3da59adb1b8377be6a5c" }, + { 1079000, "deb48efae8671c48c46a07326ad85b75ab54bb49b6ed912a5e2c34320c4238b7" }, + { 1080000, "edb3bca271fad3c4a1ddb565284e0f422aa1e5b85966346e54bd5fba687edc1c" }, + { 1081000, "f3b3f3641a7ad11417d7e1f1891f95a3b0f0968c76c504ebc015179e6a53f343" }, + { 1082000, "6f601d63bfc74714a33a0f989923aa05f9c6d32284a4816088b1c423f3a72823" }, + { 1083000, "c71c32500d6b2d01682feab1368e671474d4078741db43dafa8b33534ce36989" }, + { 1084000, "b5888ebe08fa6f5949dc852336371bce5d031a957fe65bac267ad0ef9430dc5f" }, + { 1085000, "ad0ed802602bfa9af9ac8b078f2d8d04e014d0239a76f34f15825fabc4d7cbf1" }, + { 1086000, "edfb1329572fee9b090a59f6f2b1babef52a86b09de233d1b05dc2abbaf3ae99" }, + { 1087000, "c189119a7c38de1156c187194c7b053e1900b0839036ad64b58cd4ba1f9b7120" }, + { 1088000, "2925fd72851fd17160fb023a1167f6c3d8301c712acd6f4626dbf47a4748e8dd" }, + { 1089000, "eec5d98835b2c9b5f2de2e0d7a9f11d741af1493b95d11f4c5c447fba681e940" }, + { 1090000, "825f3eaca88356d6f4e0cb7b631216fa446a3cecb0b451939839f6ee1638f633" }, + { 1091000, "501427cf66d51cf5ff3e2b9fd03a78470a6ec971079941e4256cbd5ba5cd7eb4" }, + { 1092000, "5e85c1fcbd8eaa316870bb8f4b7faaae95654b20949b96eb1c62ede1444cbaab" }, + { 1093000, "cc5f3ea06a8382afa25dd06e77a3ed95beb041808d253facba5b08697ee0bc7d" }, + { 1094000, "4006fe030aad40a438ad8954e439941e2e5d473fe5bc2ff9bfb62edf369a83f1" }, + { 1095000, "948373c37e32b54f021bd7bde8f82c42ce12f0b3b61df8cf62451a4f0df3e493" }, + { 1096000, "e27e297f5837ecf7a93a62373dc6d3eeb2512df69412ef6f7e33abf097c0ab62" }, + { 1097000, "e440337fec18737d63fa4d91d1d4453701488b05b67876df95d8a67e03b6780e" }, + { 1098000, "3a1e2e66a24cebc02155aa8cb691283918a00b171e6c2dea0ab7f65d316d0600" }, + { 1099000, "4aae8dfdb0c1ac9f86b43b9337601cf8344e287cbd471af1097b45f4bc8473ea" }, + { 1100000, "fdd95f56fcb7f3686ef4c6b3f77f58b8710bef58de74c1b42ea9b7d5483a32e1" }, + { 1101000, "3f9bff2fd4e4edeadc653392463cead672694a72025f65604d18717fcd9d034e" }, + { 1102000, "2fb0b239343e3f089d0618986887bbd5feb599521288b14a52eff867f4493ea3" }, + { 1103000, "066a980cadb19024b3bad108e045d211b9a878f9ff4fd84c580b958480e534bf" }, + { 1104000, "8aedd5efc641e03be48c14afa73696b8027daafa349703d31cb21aad21cab199" }, + { 1105000, "ab793572d974e5940c0d1eee71a33b8d40e3855eaf86b8abbaeeeba50797e3de" }, + { 1106000, "893cd44d5566c8507132ea40cdc98c79ba41727b7feb343f5fd4e4b99bd2fdf2" }, + { 1107000, "73de9c6d0ef3f93ae8d56915f1de8c513ea1508acb2c88adbd42ee40f0049116" }, + { 1108000, "5b3d3d75fa490a9c927d644ebf1665ef4fb63376fe7adaf3f1420716ef443908" }, + { 1109000, "6a811537ab39b0a73acaf2a1ee34f41745c259284324ca54b16a417a5b98adc0" }, + { 1110000, "dd49bb37dff2aeea04fe672e020a61ccf2dd357bb50ca236e15c87f69abcaba9" }, + { 1111000, "1cb5731efaea9c1e9be8d07cee8ffa0b3cb4249da75df0721dfce08f8ceb0dc6" }, + { 1112000, "577100792ef97543108e77e40893131134e08c1ce914500238f36bcfe6c0644a" }, + { 1113000, "249ed1383d823dd671eb1ddd912de41d620e1cbf5770aedbdee7ebc6f7ea1d34" }, + { 1114000, "f94aa296bf166595e5e731df71d8e508bb3ec2796d45b576acc1aa93ed223c93" }, + { 1115000, "a8a00920a1e30ae8e359b0f933ddb19506fe76405016c609830fd0932c61fc3b" }, + { 1116000, "1d595a0c3b67ff996a6e1bf8444826af7b7796ef9a8fde1860929e98558d8e84" }, + { 1117000, "384201791ab8cf1858856153d71d0a5348b0b2cdfcb4506f747130709e476156" }, + { 1118000, "c48d237641c5d74620735ea715b75229f88d1c14b94cb7c226552c497dc49e59" }, + { 1119000, "43d2f819dbac7a4fb663800eb98c4a6a128048ce4ab9e87b8932662b74b6554f" }, + { 1120000, "9da1bef03f9acb2f9b4669267387711d1302ab2e709d1b1de71baea8e93c46cd" }, + { 1121000, "cae707f607283090c6649d74d6a43e52a1272ee3d71a274d330d08a53c0646e8" }, + { 1122000, "4d8dee90b862e78a95252c76245d6146505025429ee73e488f7e6bf7097e0160" }, + { 1123000, "e258edb03f064364c8cd5f6909aecc654a5b02596f0d1f0e9559939bd2f394c0" }, + { 1124000, "43d6ba6eea008cd4f0c316343dcbaf331bcfaac340bd790e2487ea416151d88c" }, + { 1125000, "8c32a6ac22b35466cc65827f86a8eb358940ea8b781e0c0f78ebde49faf86b33" }, + { 1126000, "2ebf2f53cc461811404ee4543f5062cf26a6a3eee5e42c3d5f337ab6e40a042c" }, + { 1127000, "856c16d56e5e3e08ba7ac2a5dd1430386bbdc6084b4023c61c5a15ec8b9c5c36" }, + { 1128000, "ed8ed9a31c5c0c2f92aaab1228f86ae18be374a1e47ba127241164da098a05fd" }, + { 1129000, "004875dd3104209f52000a7a61775c2c94ab7ba63f12367bc4fd9df3643da32c" }, + { 1130000, "bf5f6644df4c5ec98d6b8aac52aa0856fb2d6daab06da7b160723dbd8c55200d" }, + { 1131000, "1d09500b43d1a10934a3937602fe35319008bb9d5350cfe6e856aaf7dbd7afc0" }, + { 1132000, "928db4fa5f7f44d8bb2c991dd470e9ea9b694720ec0706911ea30ed8cbd17bb4" }, + { 1133000, "4dbe4821b38fe70cdd76aa406859696d1ea81369e3f3f9ad900bb3044af43468" }, + { 1134000, "80a8c66e121852b0452cb18b4a0a832b5eb951299b91df360e6f524e352a267e" }, + { 1135000, "cc042ca322db43449e7826d66e98b496c5ecfeac51fadbd02bc7bdd6b874d858" }, + { 1136000, "fa526e25239ee09c2f38c5eec6660f3d1f97ad270b16d2e6236b5e970df41d27" }, + { 1137000, "547c4691ee41ceb00e9418704bfa249bccd9356621b38ec3135fcfe604dc0d07" }, + { 1138000, "604e3928a56acfb7752f728422461dc03844ab557d0a85e93d2fae11dc874add" }, + { 1139000, "cc818ddff286387c0a4d911488b22cb4dea6c73a42839bd1e2db760816438da3" }, + { 1140000, "9e15884ba513530448253fa27c85304cfa97b61f0719ad821abad07bd4be6468" }, + { 1141000, "e3b2686343d1ff24f2c546161407547e20008cf087677db745c270811c4bf331" }, + { 1142000, "82eca719a4cefa853d24ffb33ac9222c9876e2bfeb501fd3e62e3d572676dc4c" }, + { 1143000, "b3ec53a89b5c97c57d6c9c06448ed62145bbdb329da3049bf714a0dd371068d9" }, + { 1144000, "5678fa841ef4fc0cafee9e5b63a610af7bdd5c6461fd5171c0b7a0ef76ed0cd4" }, + { 1145000, "501c4e96c71c5fbbbb51a3cb999e59a2d9997efb463d71061f18366e1c56fed7" }, + { 1146000, "ebfddf010e9f66e5fd17f21076cbee71b71a0d61285d9161a1bbd804c95f7d67" }, + { 1147000, "98b4be6fbd3f3b29db58b72dc3de6cfaf2959c3f9668ddb59201db0c20e5a545" }, + { 1148000, "93d192a33e438f66536b01e650ae76e7f4f4fbb47c28999f21cda32f7d909859" }, + { 1149000, "7d367c678e6189527441c41411044c587c9165e6f78c09303f0039daaf26ce63" }, + { 1150000, "3dfaf9c4a6c8c3095b8889c65062d35543d069471ab7e64a47ffa83fca26bf58" }, + { 1151000, "a7800a6e6557c0be07a24d927f80afb04b667dad4adce0e51de52cb119e9220d" }, + { 1152000, "8412eaa71b89e4af55e50df54ae08734ec98e1252be43636320ddbd23f532b5c" }, + { 1153000, "1a65a8efbf72f8838eaec8c733bff6b89dff7e5a4c5c93d6db8f1cd9309c529e" }, + { 1154000, "8995494bd104d9979ff22a2a1f91c871d6d686ef4cc5ffdb5367b0ad593ba481" }, + { 1155000, "ca61d77bd2d193bb695d9f261c697607ef4c4d3b7a97fe9423142ab484f48b29" }, + { 1156000, "ad3406a57107eb85d5f0df361ff793adda8e03845a1e8ccf429246f7e02b7686" }, + { 1157000, "c3c7c675dbe992c16b43c9366cd460521cada70041c455f9c192f8b5b1f273ac" }, + { 1158000, "3b935604b78b6c9b9c5d554f28e406752e950f0cbc3b066b0ef13bb002b8d084" }, + { 1159000, "55d4410800b7feb1e2414596839501e771c3b4e1b7a64a10388f8c836d989f15" }, + { 1160000, "882fe4bd4373bdb0cd7b43d49de52b5b8db937aba4b3e28928d4295047f1eed4" }, + { 1161000, "e0800c6f6a3bc19df5c9bd3c4413d13a7040b085c28f9347d4523f2b6370137d" }, + { 1162000, "286d27b74c8329149e722d1b58e443290afbf454cc73971a3b9bd63104a92076" }, + { 1163000, "b65e43ebed3499fdbc951ae6fc17abbf322bb7ff57cd3e3bbfc4eae3704e452f" }, + { 1164000, "183e82b6803ba35c7f4596dbc5844cb62f1b89d4a91c499396c1aeecb350c49c" }, + { 1165000, "0044b2bbda3f1c71b11739cbadbb2804e17559012545a842347062eefbc10e9d" }, + { 1166000, "ec40f2beb67060756422b440f6cfbeeab1f497d6e043841d6613cf14e4b4926c" }, + { 1167000, "dc45fd4d5b7196477d64436de26129eb65040ddf3c8a3f476dec0bd8f66a8baa" }, + { 1168000, "578794f9f8e9863a461e1a04f9dbdac13da8cdf9ff3e6538c139290a66b90312" }, + { 1169000, "ce8fd02c86a55044a14b5ea55d0f107f972c0373e630d039251f87a3a6e68dde" }, + { 1170000, "9893b8320a81522861ac4c7d800af4af915699a7618c1318e6b675fa46001040" }, + { 1171000, "b67254489bf4f1023a34b3bcd86284c78b04906d3a86552f1256ceac8429ebd7" }, + { 1172000, "1a48d677cb347718b3b0f5fce020ea7652572f1dc5bf0cec42a6805c248b58b0" }, + { 1173000, "e1428da3311f38e801986a39a9f32e5a3378f9736a5c213ee5cec5f9af77358c" }, + { 1174000, "45ba0c3676cbfd11d331e713c9fe4735fd01cd7f277cfacc40f496a319aa4a19" }, + { 1175000, "23ad3ead4ffc11613892a82193c94267a4411621da8088662be8e1e49e99ea95" }, + { 1176000, "26b133c2dabf4f829a393d88f860ea2a862ca274370dbf7fe2db5910a46392e6" }, + { 1177000, "302dde247f1e656bfb1c77fdb029567fdec7ad58fa646e59b92aa89db67c0f91" }, + { 1178000, "e191828859c030e1b07291bf74669361bb99a7d970ffe22b39346f42f7708e3f" }, + { 1179000, "f844c926d22e3a4aca3c595df092d7db8f5a030db32beee28e88195360611395" }, + { 1180000, "5d21d7ae3f446c4cc10b5b6fdd553178c1834cf12b9d5055245de65cc0eec3b6" }, + { 1181000, "bb7f349e3edb1b287d2f75b37c9f0d9bb44eb0379611683cd0465f8a7fca3bc9" }, + { 1182000, "fad6c4e61c8ed53966d265ca8df10bf4683907e5b4c23f456f868fd1ccfc83cd" }, + { 1183000, "67be0d8a814af615b53623fe506c4e6a1f7f67731087414d01385962bfb7556a" }, + { 1184000, "6499d31a6d8ffa972efb0d116af8ffa5b63314562e59cc24cd1a37151fb3a6c8" }, + { 1185000, "8a129ba3140c75cf6d057e0785327517efcd5a9cbdb16b6183c1cfb064a8aecc" }, + { 1186000, "8f09a4ccccebbc58a762785d2bf0ebb19f6bae879613b0fa4f375870ffb0f439" }, + { 1187000, "ab110ef36b36fa8fd8fbf200937446ca5f5f8d2cce8d6e28a8e23abafa45499a" }, + { 1188000, "d835e73fd89cb34be412b76663067df1c8274c6105ce7204149041f56fc155d0" }, + { 1189000, "2620c6014359323b1bdb419433702cc96ed5846de632cac3a665b4740e43c595" }, + { 1190000, "fb21810174d545dfb933d5be0d8dd74910642e38a31a096d0defa78b8205f899" }, + { 1191000, "4180a3d33eb5e288dcb8887885923c8f0ef2bdb89702e2168e8a93791da1dfeb" }, + { 1192000, "6cf5311c3994ee4cae34e03012359868b328c0d79d69bd846f925bdc354e5ba7" }, + { 1193000, "dd44cb5743c5789d6828bd7d298c68a0b5f4bd0c7514a9b2fecf518556d6d23d" }, + { 1194000, "f3143942fa81a2fc6bc60a3df671b480ca61f8b197a15c10da51f0b49214a31d" }, + { 1195000, "2ddd3bedc6eeec8af20c734e6c389949e7cbc2fa9c56b626f0fcffdec48900ed" }, + { 1196000, "c2118afecef2947216cd8de04e41fd413d5e78267126a30b22e1722503fb82e2" }, + { 1197000, "dc2abe3701d71c61ae53fee4293a384bd196d831a27288fa86f530da30b59a96" }, + { 1198000, "8372f309455b027f3231d48cfecc25066b1b930710be95a96129725267a28af7" }, + { 1199000, "419cf4f7b3d1dd17e9f277de9f257fe9f4a85c43055a63c07650c4d82c74976b" }, + { 1200000, "df186174b3ecb38a32a7eab321db821c3c09b9b95e299868b97379973632c1a9" }, + { 1201000, "2a145ad77fc8ddd2deb99b82e6e30cb99ea9ddc4171219b82443d0dccff27e19" }, + { 1202000, "dba1c08a042e026c22d45146428988cd68debb5af60d90c6b03ccd4929e8691c" }, + { 1203000, "be8781502272c5676a89456c90f89dca0c86b318fdbe07c0e6bf4a235651360c" }, + { 1204000, "fcb8ab6671a1604176e53cf90c3c01a4249cf4b7345b06a1eb050bd6d9d33e49" }, + { 1205000, "2105814d416391f2251f8958e75290b82f0dc16208904311d0bd0dcd702992ad" }, + { 1206000, "83e13fa7b125c2ba982ea351f4b8ac80088f14043322b02aa22de70582d59052" }, + { 1207000, "0765d476466c9cbeaccc828e9f94a17dbcea07e647b6fcbf929df23d9635edb6" }, + { 1208000, "e9c48fc390b2f437cfbe3b4f385a8c03006eeb73681269a0493e149e3c244064" }, + { 1209000, "57030e06de915b3327839d7d8cf7d8a2a40b92d8a20a76876d5c94b07ff208b0" }, + { 1210000, "821326ad5df39d0fc28f617bb7f6b9835cf496289879e117a5733cb5f7ca3248" }, + { 1211000, "f765fc24b827360fc35ec3ee3edc1691ffd752c19bbeeb66a18d6f04b90bbccd" }, + { 1212000, "9807eef59c5b38366e04a83a3b6f92eeabccc91e1421b9db87bc01eae197535b" }, + { 1213000, "9e031db9eb75a910dad2dde297005fd89e31326a737d49232aad03243253d28b" }, + { 1214000, "30b9ef8ad8be57266fd2d982a5f24a1c9d987550831e678044d168b8fbf8c6d7" }, + { 1215000, "6b8e616b74fdf5d3d5cc70c215206f35d73bc8987f03660a36db3be8c3cba461" }, + { 1216000, "026f2d5cca27e2eb5ef6e717e54b2f1468fde6648af3b910a54e4326d8f60f3d" }, + { 1217000, "fb004f7164a7d70751b35dbea2f546f097e7ae7c6bb8ec99506f2d3f3a4375e8" }, + { 1218000, "3f2eb8835b36538f5a5a4e782c6a0f661c0d63407bc949b02f85afbbf6545eee" }, + { 1219000, "9c25fa1706b3cf579ee2596491abcb358fe888123fcc8664a89d4ec1e57bc7fd" }, + { 1220000, "ca8952b36d09765ced6d6126e7baa42f6ffd7f4e0219de6ea8768b71392384c9" }, + { 1221000, "9d30ed1c78ad4846919f8004abf81017d9c74645d8af7f91822ac049e4dc274d" }, + { 1222000, "5f9570419cc57d6c5ce339b7b37c563f6d1ec7952e9b2a00b4a3f725eb749474" }, + { 1223000, "4aa16f6202964f9db025e003d54e15e7596656f71fd361e8e281359aacf4dece" }, + { 1224000, "216b810253c5e850292b16e25097f494b364cc3134a7bb12b70e7ebb08872bcc" }, + { 1225000, "fbf3d04584809878580120ffafd76637d148dae3c16e3f351f5270dedd4f7fe9" }, + { 1226000, "6812ea26946762d386a724cb3be0f9bb8bea59b212ba31b10640e9a23b71a096" }, + { 1227000, "adfaeb458fbdc6d01d36d455aa66c1c7cd0f23644dd9bcd1233b0058713dd489" }, + { 1228000, "d3738ed4aeb322f153c53926b86286079a2a7075672bcd0524d6292b0f7641c4" }, + { 1229000, "6269cf72ccb5dfe5a575c553bb050b05098259fef2556df976a4ed38263dd13d" }, + { 1230000, "c9bdce8d1ad69b04e9148c4d63a39b3ee5ff313c9a09bd039ae8df6e16548a99" }, + { 1231000, "5115c8a6622e8d672895a10c909a8d0f23e4f2478095c89038c2a8d5226c1eb1" }, + { 1232000, "17456a6ce73265c634ffb1a7944d23ca1e278e253be81cb1ad9febc6e71ac654" }, + { 1233000, "7b422634c424ed5ac449ba43d009cd8d9a7c6f652ebbe30beb139e4d04d3a3b0" }, + { 1234000, "05a28614d8f8c5016ce3a02221cf12f1170566b07a41323d5d23b066e1b840dc" }, + { 1235000, "3cfdc68a96525a0ca3ed6c1ba4bf1a708c598d9f596ca1f914f76857480339a7" }, + { 1236000, "4b7fcef514079816aae64ee6baf0bc9f6e0aa47779505ef763c161ea3849e2ed" }, + { 1237000, "80b7f844feee6379432c0e4835dc2dc0bf79f2946129178e3aa90e90a6f3ba0a" }, + { 1238000, "a8384a9daf85d380814be9f251bec362646b42a96eed42dc59eccc0e409999b7" }, + { 1239000, "5ae3f40b33b3b524b6a1bda8db518060d59766f8e58188e0377778d888e940f0" }, + { 1240000, "c17a198622a6959260661b8f05acea215d445f6195916b78fe36233fd5539c63" }, + { 1241000, "a9fb56b102047127c431a355ea24f4210c268ac758fff5a2a3e8bc566cb087a4" }, + { 1242000, "5231d8a470d9ac3410ce24656047606e65c996162c9365b5befe2003228c0ce0" }, + { 1243000, "0c0376f022b483a36e5391b3b5ad5003d9cb7f1845f33161ebc2615c5d7fe58f" }, + { 1244000, "b226f47e2a52f8a52d8f66c5dbbff54df34c2474fb653dae3742f35fbb0fbc95" }, + { 1245000, "623f965a667c8fb0b4095b1810ab7e153d8cad2b559f9b2e4830176158175305" }, + { 1246000, "d6f4e291648053f55be0e4648bb944864a4110047c71a0efa47af5c06b468e2a" }, + { 1247000, "9a5e9d3d6edd0316a11496a5d0f2921d39797c64fe815910037c3fa41c2f705a" }, + { 1248000, "8253c7b37de8e067481db34a1d1ea2e2214e55654de12175f3ac94812b0b3511" }, + { 1249000, "8105ddb9c66a777de9fea274b026cb50b1dd27023fc49f315495c685746a67f7" }, + { 1250000, "750b6a3ab3f7c839a84705bedebd208ebad3362a4882ba12e0a2e673d40303aa" }, + { 1251000, "7893c2a09dec0dd73f397a7fdf2875554bdae4c696e17fdeea23b0c9dc82677c" }, + { 1252000, "54b03487bcaf1156e3fb026b30bd792215372e0c00ad9aa6cbe42ba6928ec4b1" }, + { 1253000, "c0e63f21eda478bcd239ea6b20bbdcaa5527d775c675a465e31c739693a24b2c" }, + { 1254000, "d24a0b669cebc8d9e967c60a61e2af3796fd4deb99a89bf93d2fd28791fe0e04" }, + { 1255000, "ba8d02757953c0034a99f55dbc21e1b89c839f434894a802ae1bff573f7e8363" }, + { 1256000, "6d9e4559f3a6148bd398f70f244337b8ed1c5564a0295cecb239aa819fb9769f" }, + { 1257000, "65530bc83464635ea06424f3b9ea142a0cd40a7e4dd926d45f1347bb3579f45f" }, + { 1258000, "87c0f921e0c0a79f27da012d439b29c4db41baa65efdacb72eb94c63997e2c0a" }, + { 1259000, "a50b8de6b1aa5f383871cf00b749520534befec34ab2eadd0b2d7ec08d0eba6a" }, + { 1260000, "6740c0253b56ffc27509ba3925e88e1e248e53fc48ace3a692ae28b50a837f69" }, + { 1261000, "0043acb16b96a46021dd812c3f2b3d913873f41e18f76844eba6ce952ff927d8" }, + { 1262000, "6117ea981f8b15fe0f7e535dceb94200138cd5b4c287ba95b2296078dd9036f7" }, + { 1263000, "93214be5fd76a4dbcad950f3c2b30e65a80b11a43221879624d7f4c414db9883" }, + { 1264000, "d5bdd602b61bac26b6f6fe8b04c2ec1f5d7074d44f9ec218049c0f81bff52aa2" }, + { 1265000, "b5a4c0710cec4f0b3f6eec825aa341a4d5499c30627b7edae447bb7350f96b4b" }, + { 1266000, "d5cb9b3d1ca815175b2a3b64f4358e45fe6f1ce1a7f9714658ed24c08232348e" }, + { 1267000, "0c995c65eeeeec7f0f18d9ac20a14e84120a042f51a12edd5b1d4c9be8ca45b8" }, + { 1268000, "01ff6ab8351b0d392ce6173ab250e63170c962bb024c115a8e4259d55073f4ac" }, + { 1269000, "60e0d7c20a84956f4705a01ad49f152a72fcb883fadf0eaa1068a49a5fbdd098" }, + { 1270000, "affedc6c613c932bdc4629a3d1347b8419c8a14a0aa61964a15885cb366f464d" }, + { 1271000, "c02c3680c4bc9568715ba0766385c123136a8f5e8d3b8f2155c9a7041ba826cb" }, + { 1272000, "89557bf31e4c36aff118d6942c90c56b8d592b5526d5838e89417643c195bbff" }, + { 1273000, "273a510e88787c0aff0b1007c6a89330eda416e85f825b6a6c9c7fabd7aed15c" }, + { 1274000, "e162e0e097073f802f171ae6c0549e892eb6f8d9939981a1e8c9bebc2505d1ff" }, + { 1275000, "dcf2888ba663564f24c26c3c7173027dd17468c537b6580f9b4aff31b37bbd3a" }, + { 1276000, "5b3ff5b2991c8e32b8b1b799a96afdffe280f9f9d22fbcf6135f7e05802cb7c0" }, + { 1277000, "742958d80d9701e48d5afe2c9b7db9d076476c929238f3d71b84cb321327a535" }, + { 1278000, "e3c25b144d64e33c4a2f679a596b6af429eedbca98490f12abda5c3c11969521" }, + { 1279000, "c15e44791c5c121d7a6bc0f47f80c6bc1a3d433655553d23c4bd2acf53a4200e" }, + { 1280000, "16879a01476038bd69edc125dd8c9bdfc65d1f2e470e6163b511425b7ed753c1" }, + { 1281000, "16830774e4111703f40f2d3185f4c6fa1ca6dc5df63e30734934ec78c0ba2301" }, + { 1282000, "c52a8e974853b44565e49aec4d516989e3a12f44b588b2fec57fafa449d5c733" }, + { 1283000, "af263414d79e05d938bfccc3ae261ec7a4cd0a685c4c414d7809467e7c213b99" }, + { 1284000, "ee40e3c227a25a3ed7182c6920bc9ba101da3a67bdb5ac27a3d93453a0b45639" }, + { 1285000, "3255786d03a632dad1947318372ec8f18e08ec74015269cdc5b382f38395cfe5" }, + { 1286000, "f047b46dcd35118ef0aff662d22009f121a96840b9dd170f3932ec76c21f394f" }, + { 1287000, "117360deb3a139177022b43000544ddd0066047e04da9c0f3d18b3c2d646141b" }, + { 1288000, "ec6810098a2804f2775a25495866993acdc71aa8d59e4d07e6cc33a72ca543e1" }, + { 1289000, "65cdde847657a7f19f862fa8b3060002daaf297581f8a87c342d39e48c53fc68" }, + { 1290000, "ea621881acc6635210c225d60a4e6e00d88d1a9f37221d8a4c81abc26d056a59" }, + { 1291000, "ee4c1837a9ee3532b75178ce5e980483051da0599cc3de01f7fc6307eb431153" }, + { 1292000, "22e10bfcbc6cb5a54880b673a10c6ef23041093b2c19a0de17396eb610346cdd" }, + { 1293000, "48f1f82fbbdd840b8eab4bab54c0487fb385f531086c1c49873f0072801831ba" }, + { 1294000, "8e0897d5d7254ec11f7490bbfa8bb0ed02f539e1d9c5015bfbf593c291e773c3" }, + { 1295000, "b678a75d63b32c98a3007d992dd86526fa78e28e8dccdb3d277452c69b9b3d8d" }, + { 1296000, "4f59d132d7d49ec8b253d4be2ecd785a447a072602b23bb9c0418b2b61a20e3d" }, + { 1297000, "5523b14389127e76cdba21a82644b3d67dd8f4d31076584af3d2673c899e25bf" }, + { 1298000, "e44313424e89043e8d135f50b4837e8f45968dcd82cce692155dd30ef7b6038a" }, + { 1299000, "73169a049a14bcf7a52d7075eadfc2207bb2f427f7c838291ab5424205007578" }, + { 1300000, "4e4ee4581b585d488a77fddfa21c77b9f97779ee3eea2733516a8cbe8897220e" }, + { 1301000, "d4b2a872e053f19fcde2118b45799d3917250d3d8595875efa359f007b5fbd15" }, + { 1302000, "2a7c03757dbf12bd438413c76d127708436f925fc6d3331e07332b4fc990f806" }, + { 1303000, "d6e31e1f07e3d5ff9f24a0db9494c57cd50a7b6f7ed1d329566f0687cd1f54c8" }, + { 1304000, "7a6670d9481a07d8efc097fa08068d08b29ddbbcfff3c12f44caa718b0b40ad0" }, + { 1305000, "51c4a766548023875c4ccc5e16351a4af4ddab551f6ef67399dd1201f5c59a54" }, + { 1306000, "8ea61192714dbc5d2d63b85beb7ab8374ef72e2ceae6c527892bb54ad809640a" }, + { 1307000, "4a01b8557f957b36d1fd49bbe8ba4054d34dc9f226a056f6d277ec1b745756b7" }, + { 1308000, "01b0b9e8736ab6b83696a1c01189dd2f7b1cafd20eeafa5c8ff4e37073c6ece0" }, + { 1309000, "c1a02fe8e81e872da001a0e7e5700d2d739a89cd1597dcbd2a06081692b87d2a" }, + { 1310000, "00631aeb531a7a4f60ccc3805e140f2bb41d293deb97687d2c1d8795a95e2cda" }, + { 1311000, "c2b7b05a4b623979bdb8977e0f39603fe0446753746e9c7c34bdb3fc1678eaa8" }, + { 1312000, "bca46ec8c7e325a481a4fb055d6526ddb744ed122fbcacf8b614be2bc431233e" }, + { 1313000, "0467cc8f76a72b03e2bed858fb03b757ceed5eb0d6e6e7badd0c1a5cf5f262e6" }, + { 1314000, "7cec84f752a496abc1a31eed45f8f84715c3c492fa1060e3882bfe07d6d32437" }, + { 1315000, "6a2adaa84e47380f98fa16a6e5336068328a6d04d399d2f18d6752edbdc78420" }, + { 1316000, "6b9a28a8c61bb06ad6ce73d207b79f4abc425d9395f2529a4db45d713b13f38b" }, + { 1317000, "cf5f15927f0434c26ac7dddc89a2ff1be775f3cf1a02b35bb1532761094ec21d" }, + { 1318000, "37aac969ae1e296b3507b2756fae91a5a70b0ac7cac3e5ca0a2ef4be3b92fac6" }, + { 1319000, "79cd350927fc048909678b8d664735e4d44ae9aeba6e5f28cd0c32c73c64528e" }, + { 1320000, "5be4a99382478f3e19795d858668afef82bc1965540a2d40d82edd85ac0e4a6f" }, + { 1321000, "dd610413f42d9325e50e0a5293f1e02c15e5a78b0a1dba5c3db1a3608eccd7e6" }, + { 1322000, "33b3d71867dabab8730f344290ce595bc89cd21bab71cc1f7fac141f12d66668" }, + { 1323000, "d260cf4dd7235af17a6b23324f959d58969c23cfd746213471186d4ad25bab0c" }, + { 1324000, "0e791e29096e2ad9da9d07831d610f8d8cf9ada3cd624837eac711e1ac36bb6c" }, + { 1325000, "24b1d2f0d6c8d5f5ace2b42b37b16fcc4e33e8a18337329a9e54f9b6149dd389" }, + { 1326000, "e65f9d9a01b6c5ebd57e837975f89ccfa09b7b79f76919c0f8830f2cfb669e65" }, + { 1327000, "10ddbae17e8ec6cb718ed9a4da6746f46525976098a6b3de5ddcbd0e325ae165" }, + { 1328000, "5f07ba1570a84436694233492e8819da95bf52a60d9fb35ba0c6cae090605f40" }, + { 1329000, "6176abefae9651604d2fe5b86609a78c93801515572c1c8e6be2c64439688ce1" }, + { 1330000, "f57181c22fe65df41c9efbc65916eedce32e47c1de955d84f1abee22e5a885b2" }, + { 1331000, "be2cfd197078b7374e074a04d03cc37e359715ef26455186b0fde46ec95a42b8" }, + { 1332000, "8bcf55d7c57d3f34dc72aba7128404760b3a8a7a37a9cc43c0efd5549911e8e7" }, + { 1333000, "1a61b094bd1dab1dc0cdd06cc9a85484916a3ee48cac98c7f53814beed553d5f" }, + { 1334000, "064a586041fcd5426c4d770dbb92c6a1c12458c478fb72dd317e21b8542c0f07" }, + { 1335000, "177fa6473f4c86edf5d459d79ec8f9330deb9ff8650ceafeffc61a82fa8cbab1" }, + { 1336000, "8f5bc3bc699de8cd03e18e024bf69667333d666b9e4c8f4ee1d91a9bcc439d57" }, + { 1337000, "dd08fbed87a3599696555fc7a7054cee7aa0eea39d46a70bf1900371682ad35d" }, + { 1338000, "ebd21d00a648e97334e803322a7ffc2d0b4810085c0155a3c259121fc1f62fcd" }, + { 1339000, "568943a2b7a85d3ed75940993e1c839b07c20155f715fbc74e52fa3f9a132001" }, + { 1340000, "37ad07d883a45315c7f44f92fdb813b27d2efcde30d538543685a81c7f4aaca2" }, + { 1341000, "19b3e16a0afbe69cbc02c28e4c48eab1e9e9f05880cfefc1590cd63169061423" }, + { 1342000, "4070b83eece8b4e2be081d87f75021172eed71789fe8b452411e700d45b0de79" }, + { 1343000, "df89e0fd44b812d545093d8afed73fb0f6421d7275bea038d95db0482259ea7b" }, + { 1344000, "c89c2f80168074672a7de252fa6bb02c1a4d518b79dc53a4de0dede7cba7bf06" }, + { 1345000, "9dbdc97565efd315f51dc959821d869598f792758b083b2f77ab269f407a374c" }, + { 1346000, "9021ed7897247bafe90db2b56575e9e6b132d6f7035e9bcb387e2d29b76f6d90" }, + { 1347000, "62bef90f65a9cab8d0f29ca272535f3646deef1f56af2e18c9e45381afb223ee" }, + { 1348000, "c14353453744853fd1cebff63a12b52b4f145254d850a5adbd90c5a0fd7ef3f6" }, + { 1349000, "2550490e34d5bdf028151dd75c6be7fdff1198428ae153e37c93224be93ecb68" }, + { 1350000, "a75578ef2aeb22eea3c78427202dcc778661902453ee31693fa9bf47a1c4c419" }, + { 1351000, "1a90b56c1635ee219e215a9085e40e819ca4654d315cae7bb5e3fe1b64bd0aee" }, + { 1352000, "eba090e5ad2b6ce54818569be457ab70223b82cddcec926d55719fb1e251f44c" }, + { 1353000, "6d7194cf2d529ebd3297a3618e18d3968b21e54f8a27f42641f9d17f03dd6567" }, + { 1354000, "85c839894a02f9f37074c54d940a1a65600fba3c20b7ebeed35c4f40faeaf028" }, + { 1355000, "16bb6bfc57a6a75a45ffc2089af312280d9b6e5ab0a0fcc00c85fe636a965723" }, + { 1356000, "9377df26c865d0c3c1844af35c31c8d2e54792a4a4264aaea2778b854195278c" }, + { 1357000, "14a01a910b60ad873592bd4978f10443f8e9859dcb5f91fa96295e90d5afa35f" }, + { 1358000, "8c0648dcc5d091061e169607be0fbad0f4a8a21e9128fb8a5168d766a16fab43" }, + { 1359000, "be45fce0b9e26106c717fd4a9d71e2f6b0b9d45664b163cc997cfe6ce023e17e" }, + { 1360000, "7253c536df51181c225060d0296e954a3a5753fa0cc16ca67b80c4ff55f3b31c" }, + { 1361000, "1b0c05b3db34140b2e7eb068cb4e87d7fef2c665c196a3adafe60ade749c5333" }, + { 1362000, "c492ef836131196d3ea6f032bf3530628c8d36fe388bb1bda74f3b2aed753b6e" }, + { 1363000, "aaeb6e09b92c1f1d8990b72281b09dd5640a3478f5d03a80f0b42d15239e868e" }, + { 1364000, "ae9b0d35e87f788b9c6b150077c993538e58dcf9b336d16f107068a9f56c2dbe" }, + { 1365000, "811dd06b265fb9766288b73818fec30040c7a06cfdf06813561f06a7eb468ede" }, + { 1366000, "0586b5cad75219158e75c5bd8d4710387a59cd887fc43ee6f2c41d3c6edbbc4b" }, + { 1367000, "bece3881412281fbfe3b96816b1969fc9b226f2a4765f519231a5bb29d29f6d2" }, + { 1368000, "a6cac822367f9d9ade889e781e66540241b06f03229837dbdd3689046d935142" }, + { 1369000, "a8509b7e67bfd3034fa1937a7aaf3ff7f21c15460ad8de4ab8bd479d8d993543" }, + { 1370000, "cbc35ae2acde6c3159ee626b9808b925022776b6a3944791e09b5c9a3cbab010" }, + { 1371000, "e9668378bdadc336a637314b3492cbe82c68d0416bc1a74fd79132bc5b820e5d" }, + { 1372000, "1d9ddc3d60a845b108d607f274369dc1d91316189568ca95b0a36746dfebf448" }, + { 1373000, "2a8404a8ef1fdcc4b89485cdaf04f10457938c291df780133531b6470360d372" }, + { 1374000, "7bf211ea370484559fc11f5eced3193e465ac43b10e8a442a3385a344b824df9" }, + { 1375000, "650f112c2d8913373fd0e8337adb5418a662135d2cabbb197f567d3502d8d9a8" }, + { 1376000, "cf95535c166db3590db7cc6b27833c29a55a9579852f8c2eb4225b28876ae2bc" }, + { 1377000, "a5ec5d13522563a08c4a8e5ccdae14b2fda74910cd254f6f79045fce1313f77f" }, + { 1378000, "81b16e7832bc01bbd14c100c83579eb596ef52ebbc4dfadcddff6cdd7904bfe9" }, + { 1379000, "99839db729acdc96a4711df3900f9c2f09aaff3ec4382e585fa27df7a7095e77" }, + { 1380000, "f6b9ef1d000f0d71f40fe972418a7533f9a6ca14b1f8c9d0ee02dcd4f649f88e" }, + { 1381000, "fb72375f87a25a718a5fa98735df46889c2c5bfee08b5a3123ebca696cb1f524" }, + { 1382000, "e81372ec2a00e87ab7c6a18071e70e5c2541a3e5a982904ac2f4d82a9c10f7fd" }, + { 1383000, "a5dbec9a552eac70e331485a6299c70a60c19936442713c12b4e91fe3095cf3c" }, + { 1384000, "54c837cfa579eafa7944bb2dd08e6520dfa36c1d7b554edfc7450f5c6e4900c5" }, + { 1385000, "ee0120b70ca365c6b4267abd612ba0ab2f6a4d8564ed8a6c47445dec45d07527" }, + { 1386000, "7fa722f1e010ab731c99d4832cc0a96fe4f5fef35fa6e43af2f550dcb479fc5c" }, + { 1387000, "f9f62f8d5ddad69354debcd2465c351bd6be5174dc27efb3f17994fb609c87b2" }, + { 1388000, "2b19d9feebc06a9fac85fe9d4ccda3d1890544d92374ac016ea99fc73d3a0961" }, + { 1389000, "bbeaecba1b8db37f122738533c23983b7a7b12eba0f2145c2624482b279fd1c7" }, + { 1390000, "715867c229f598201296dbc2bf2506095342e6d711811c6f55cbb51b83e8f011" }, + { 1391000, "9e603e216166b74a1ebe769ebe668c33bd4638d3b8a8c1f22fc5a55cd6f73fe5" }, + { 1392000, "f8f04913bdd7ee8f8472977928de0af2a236cfba2921f4392bf712cc8454b10b" }, + { 1393000, "d60b87ede317d58995aacc77df329f009d3b84fbafe5fc6be4190d7e676fdc63" }, + { 1394000, "5eb1886e95549b6c8e325fdc4b6615c46ef2129fb6a88650433c36c309defe09" }, + { 1395000, "2d11fa6c9ca419fe124f649e820d2da9e1c53b2a96d9edc97fff14b0c0574b77" }, + { 1396000, "7f221e354d34ca1f8cbe3d6c690a79b5037588db55ac952990dc403a9f2d2128" }, + { 1397000, "d148e6731841bd5ad70aee244c99c39585c068e84da6b3fb1d2e06b824b3e2ac" }, + { 1398000, "d692325acc80ea8f92913fc43c233823c217457dadf8fcd93692dcde5fb73a14" }, + { 1399000, "15d960162c70569c11bd2414b20f2ca6335a57b5463faf2b14e7ca8f03cf7325" }, + { 1400000, "c5bbdefba706c0c34447d9c490565b40d2b1c675316ff0df339499369f7b900c" }, + { 1401000, "4d4471301789e7a87ff1c4c5a3c3a75e3bce883c5623c4d5eacbd3338e6ff418" }, + { 1402000, "55a29f4ecbe3a556ea580b1563bf3034e04eb4c5277e2a5fb95fabd73d671671" }, + { 1403000, "42d387ef2ab556f213d81fbe9e95a1e3e75f8adbe8fb0d2441a0e92a83681314" }, + { 1404000, "b448342579f5bb2f6133e2e2cb8d3a15d210e8374247219d542dca7734039951" }, + { 1405000, "aed0c622ef9e5ab6c4eea8e3dba818de3d69bafe2fa98fa4f572ebe6aba32514" }, + { 1406000, "cdee3ec89db30618cf51fa480d3212580a81d7f6ac33c66a276e55990da11dc1" }, + { 1407000, "cc453bf16a05645515f360a6879575e35907eaa0a3f04482bc065b4ec364bdbd" }, + { 1408000, "cfd2e7da8d12df882daf9012a47fd2aaa0d927bf4c033887432298176e89f261" }, + { 1409000, "41122160c7729308fa1dd09333d9aacee1d88769526d15227d8ba7176807e735" }, + { 1410000, "5c1ed6852cceb97aa478a022fb6d29b0dbdd05ec4c0b50eb0fd29ffd6d19b218" }, + { 1411000, "008e6c3881d2ffd14cadf931d246c08ee094e959c6d0a5d925e48a4b248a80fc" }, + { 1412000, "df55d308c6e05ead07ceaf96b285da50c8363dfe7c3eeff58e6fef9443ee1d96" }, + { 1413000, "fda81287705d3aa80db7e9a7240cd13e00d96263a90993f4ad9a82236d64591f" }, + { 1414000, "ef13b667b16507285d3e86cc119ce3c1edd8f1ae5e76772532f7f9036c899716" }, + { 1415000, "883365ac310df18b9337b4e57f59d4720a2310822e771aa67cec9ccabc46395d" }, + { 1416000, "8e4c4b0644d3542a9a18af4f4eb785d5d15d15a7ac15d9d369339f8b3d2c760c" }, + { 1417000, "9bf465a3942c7ea2ef6fed3f141df01af0efcb4743244e6bbaa7d821ca77a07c" }, + { 1418000, "fadf44ce0998bc4a2b0247ac0b225f0f8642739946d3292214fa2a14e4b2aff2" }, + { 1419000, "9bbecff2153ceeb0388fe1a903e9eca9efc0f32efaef922f27c0ca208a85f304" }, + { 1420000, "555a6b4f7dafbb6e2ad34011276fdb77238921b5a4eba7e2ce61b2064cae7eb8" }, + { 1421000, "eb762b389446bd4c838fb4513ac255ebe1e5ffec6a80b0eebb8549a896ec8900" }, + { 1422000, "231a9089b335967702880bc7daf0e4adf9346b5d8ee8ef552d5a51f466ab8bbc" }, + { 1423000, "6a2c3e8df9e00385f35b0e6a24b86d80b888573f1db64e005bcc28fa37d8f736" }, + { 1424000, "4a4236334c1861ee97d11a529d1529664c05c57e494dabba06305d9f88b7099f" }, + { 1425000, "2d11783b65337e249214aa806035dd1923bc3d3973b7c7cf88e5bd8d52b7ea1b" }, + { 1426000, "e51cfd7ebce3878a554f5427d2ea4f764e0b2477926ee5b35b471aa1c291e555" }, + { 1427000, "9561c7e7377065181fcca02f94b1e32a6524e39e77903bcf3431666975734e34" }, + { 1428000, "54f64ac78ae9d9421a5482a0b6ec591cf30206d32600eec005a01c19097cf646" }, + { 1429000, "eda7c77630ed2a5599c290df45b53f83059c0688d7456862b859be2fb336deb9" }, + { 1430000, "878328c9586d4bfcfea66372f7f80f711e39c069d5737b3d45bd9345d6d287a5" }, + { 1431000, "f1437f0613f5b796b696e061a8a4acf1f3166ae20adeff943d7c41c13652d58e" }, + { 1432000, "12e270e78c35ee46b8a47526c03d7cdf2c77e2956a1ec9b5447804902779da81" }, + { 1433000, "f786cf7a58118ee99102ebdc5990f0f20a8522cd2dfaeaa2f5d2c8883736102d" }, + { 1434000, "8d4520d87d76b3910698a4618886a2c5f6ba2db7ca56bcfb5870075b0c0c2ee5" }, + { 1435000, "ec120e9d45526f73bb8df2df52d3db771d17fe6d74c81f630fd19fde953c9ac6" }, + { 1436000, "00aa9a6c4a70d5ad334e7b9142afbeace8e4cf51b46a518be6d7ed2f9f6b36de" }, + { 1437000, "0d0bbe275980c44809fc95fc7a8a5a4d9774f66ef6cd11a014c0186e08000e7d" }, + { 1438000, "836f96f688b3fbdc3c85e30c2aa2f27e44c38ffa4402b8e6e3ea3b1f62c0cc28" }, + { 1439000, "821aa48b044a7fa32ca09bb9222db630d51cab4d59e61a393b9324720afc1632" }, + { 1440000, "2fe32c357bc938645a5fef5ce96762e31b07f863f5c263fde5ce14797c6b85f3" }, + { 1441000, "09b818bf0be1b474c8881cda27e0d79b497314ff8005f420cedea995f5f4a08e" }, + { 1442000, "1fbf610635be8ac92428548bcf3477121a4b831603e6c606d2dce76351852fdf" }, + { 1443000, "7d90ae6fa7da7e500b764401def5e5136b4931e067b2acd6df57ffc4c792a9a0" }, + { 1444000, "d574f07d5220196edfd28e988e92eb83e30598cd91b71138f5dd30ebf8c5b35c" }, + { 1445000, "7fffe9490f9a3918a4d83269f8010aed55ab648c96d5d83ab90ba759c1e4224e" }, + { 1446000, "60efe25d6c1d25975b2548a85de3e169c373977344054238be7fd6cdb1d69641" }, + { 1447000, "867cdfff28e2699a17563979bb5bcb521b36a4128283a9690a68f67a1d1e641b" }, + { 1448000, "62de815c57521e0c809f0b201a5150fba306ffef3d56eae9d00b28b6aa6807db" }, + { 1449000, "fc24c70ceb7421e42edfb680b1667cb3339b4b015df88284a0b04fd1352dc43c" }, + { 1450000, "a6c9ed7bdd85364fccb76b55b2d1d9267642d8978d910b1407896d9bada0f655" }, + { 1451000, "3f9e87843e86717b9f77aa76d0907708f9e4098811a355952b4f62e19f527f1f" }, + { 1452000, "11f4bb9fa9d639ccec7b30e275a880a9762927e4e91cbbac87a790d923045c9c" }, + { 1453000, "bfd0ebaa224c21fa479edee262c71cc228512d4daa2e191c99b293a67d8c7e5d" }, + { 1454000, "3501d441f85417f77843a64e1ebd2ea68efc0ba62eae12680b0732d5d1f62a05" }, + { 1455000, "796318ff21e08d53ff805c37803eabc949c1622714e7d49c91a9ae7bde78a63b" }, + { 1456000, "5854e4745051327e145f1e10663df3b57a04ed60105da7eff10931992f3b1011" }, + { 1457000, "087f2044d377ef436d8a1fbc2ecf3258b28beeb71a6589eda15bfc57dcc937ba" }, + { 1458000, "bad9d4425d4d016e3fd30ab0d83ff324959c406e27c47dc8dd6cf5b6cb220087" }, + { 1459000, "c25281694d83cf09bfcee2124d5dcfe39e2c7f9ad279d52532fce057609ce55e" }, + { 1460000, "7992932a5603e135464be42e2642adba52710f4f8c14737fde0afdfe5aa5b631" }, + { 1461000, "47cb919a45617de2adab7de8a4299c5387697ecc0f214c26002844af36462eb1" }, + { 1462000, "f200197bbfb5881964330c4caa833fa18142479e2f3023b11aed7ba6b6ba28ed" }, + { 1463000, "a4d125b24657cab7317405693b8258375ffe2d438647e1845691584566ae4474" }, + { 1464000, "2e1a8824f4e89f88c0cb2dc14a990bda283bd0d0e2d468f1a019eebcdb470d94" }, + { 1465000, "4243babd289b8e9ef2a549c37305d51da125ad2530912f83ff76dda50a2f89c6" }, + { 1466000, "607347af926f8ba25571079196728e56e89eba53357641331c42c8822c3a0b19" }, + { 1467000, "fd8937ae60b6e96589cb9284d82c255aff6579a7c5685019560e5104ba58954b" }, + { 1468000, "fd3ccbf4a0dbeb8f3f2e7e5023ac3ad48d46e3935d84865355615e2ea9b6acde" }, + { 1469000, "57c68017e207b3857d62cea8b2207037a42c958ce67ab0d00b02f32acb40ce4e" }, + { 1470000, "1a8a94876f8ab921602b846c051b121711c2d9d2e257e441b3a11551e5ab4f6b" }, + { 1471000, "237c90ef0484b27f19bdf8ee5e94f7040c0b3be72224ae32c48cd534d224e0b4" }, + { 1472000, "4dbb6b608a59e43b0df2a78ac85f0fe66f21aec87aa5c0ed041e8b6b338ccb77" }, + { 1473000, "77722a8dc6d31e802f52ccf2185efc85ac47ace518e98a7e6b0e917918b8dedd" }, + { 1474000, "c8e5f32d7415710364607d9165d63a252e8b4e5a51a3af72b3255592c3f63cd7" }, + { 1475000, "58d31532c5f5c8f97b6fddff488fbf7bae4f3fc57b6df7380125e888d39f74d9" }, + { 1476000, "4c70e6767a4704a22563996add44189edc14fa8a339bc6cd4007bd73ac74b952" }, + { 1477000, "e49dd987525b06376c8b5267492b381b4b3f7c64942935f81af5a69f9e6bf488" }, + { 1478000, "19cb361aea594472903a5ff39169e61f2afe0d61927864d485e37f32607f196e" }, + { 1479000, "1583f0a3cab694363fce33d673cf180128ca7cbc0b1b1fc82094e1631751b47a" }, + { 1480000, "ca672e9cd23d3023cac4d81d35e798b83c515a5527b375b03942179035c46c50" }, + { 1481000, "821db689d9b65a6c5c5a7f471f8994b63b93e4bcc0963a9ba84dfbcb6d5240af" }, + { 1482000, "441a78cdf7b011616a9baafcb344e2e2f189336b89b10576fe809a9545414cc0" }, + { 1483000, "5e21404592e17da944394001ca5243af2b6dff791377ab17ffc923e14c36b4e2" }, + { 1484000, "7ca5a20a754aa936c38b302976d87af7437f6c20aa391a703c56adefead49cc5" }, + { 1485000, "30a740fc6a78185dad033de75fa81b18f53b764f2fbdf575ad660ad2e8ffa4a7" }, + { 1486000, "388b7edc1e9e35ab3c63d1baa62a0075f0e3d72149dcf86cf8ad73b7d3841ceb" }, + { 1487000, "4e62850bc789348903535ee49039dc27a35efb33d61f2dc3c707653b99ed3d83" }, + { 1488000, "870c571723d9039c82901c2215c951e4181b25b12167f033ac363214caf5bb25" }, + { 1489000, "fc64d2c4d0a3f45e7c048b15ceaf1fb2ae71531feecc444f513781145fe2450b" }, + { 1490000, "a78038b44384bc5efbe2154a78e66b06e02abf49c5c0128f904c3aed6ebca6cc" }, + { 1491000, "3eefd3ebeb2701085bfa556dd0057294864819956448b50671812cee0b5af18e" }, + { 1492000, "fd79441c5d870897c387eb9f70619a054fa4a5e8df0c48936f94471980f28f24" }, + { 1493000, "7697a45b6cd471aa0d845654b06f153aa344cfaa5f3b2f2bdcd05474386f25f0" }, + { 1494000, "13fa0f129ae7d2d0e475a0fb3403db586f51e951f3a0f70b8722e9fa26e94cd7" }, + { 1495000, "f449d92a4c4d4e35a001997fc2768472bbb2612f031d9c81ff17fdf4e3a852da" }, + { 1496000, "16ad7aaf59f2418d8b21794749865d8a59e2a756ab18cafb30a6ccd48b305dc3" }, + { 1497000, "1f381f702baacea49a8c18fe836239800bbe8eca62636a6a002ef32c8476177c" }, + { 1498000, "a7d28112d56d8525f26fa6e919e4c419353551c62a5bf0bf7753941b2fe345fb" }, + { 1499000, "a1f63a9723b82cf9fde4fe8f43b6affe3d0371e2a576b4e42d44547b98d58adf" }, + { 1500000, "3b078229890780a2ae09633866921534c0effbac3a8e20cfc64a0de302b1056c" }, + { 1501000, "45a76e414634a4aa0dac124ce6c96e8b576af95a863de5347fe96e0880aa9921" }, + { 1502000, "c9506b7bd9ec9208f9026fa5d2e65d4b3c542adad4eba39e5059bde4d0216ec5" }, + { 1503000, "a5cbf2f23ae6e5b40ddede1683666569751ffcae69bfdcefd965c3a9613cbfc7" }, + { 1504000, "84fa6a0339110c26042411b3a1db8473225eb9db45994a8b50f1f5812921539d" }, + { 1505000, "567a7759910eeaa569382f040445fbfb2ca344e2121812807e0b639c25890dc0" }, + { 1506000, "8ce9c2438eec0f4dd77c06b6e618efa3056a665814caaea91830fa04a3d01745" }, + { 1507000, "b2a736fbd20020d84d135cee2409a5492acd342085c480cef30bede2a9e79628" }, + { 1508000, "e5f1df0c5d2ec750fc7de94c72b4049e41356aeb436f98565df5badc798c0896" }, + { 1509000, "1c526179b6519007255a565fc8dbf2219e064dae00672de9bb58386fa4ca3c28" }, + { 1510000, "74be9f5c1ad5cf89d992497991dd1ddea4a80ba8c389c9283e27fb22adb73b70" }, + { 1511000, "0984e7280927a7f27e4f208e6ed1d4e8aad9be0a8c12b4b070c8404f4676e375" }, + { 1512000, "f122f795ea8a493b71c1f4aea99a1512eace6e86a3c843c444581f94e9e5df82" }, + { 1513000, "a8b6270d0a1a4ee27a98b0c03fa3b7ee8b101bf3fe460d640ba40eab2a807573" }, + { 1514000, "975b5cd7d04c7cba1d066b6f486a5c6e3b7b2bf2ea8a588de34d8a01d7389857" }, + { 1515000, "eecc57ce9803ed52dcce0ddde40647a1102f17a1bac31d4988d74a2ca04fa43d" }, + { 1516000, "c83d3beff2fc2e302cadd1580cdf1d3fc684421dbd5f77c78e66ec8c6db3b858" }, + { 1517000, "d36bc94baab179f2b2bade02b5a1d57dc86e0c9f0122e0590745161a3a68d367" }, + { 1518000, "aa2c35ab54a29a19f71f59d5cda76eb3320a5e6b22a9b2786de6066570b13e2d" }, + { 1519000, "7501ed65af91690d071fe7cae2ae98153a9533fc4933c3f852fa34f405d09876" }, + { 1520000, "2d63037a4ba7449a5300dd7abfac425037ba6402e4492e0de2d2111ba7042da7" }, + { 1521000, "8fc0e1aafa2f28cb21735c615238b5342d1b117b11206cfb30fa3426a48b97b5" }, + { 1522000, "a8a7887fd5d4d9b40202873e11cf8c63644ab474855231f8fa9c5af05dac4975" }, + { 1523000, "e6e676fadc4450cdacd9b1657da19d3d50e2442ded2dea78e09e2db3feebb35a" }, + { 1524000, "4593144999e83ca2c23d19d7e0aaabd5b0dc2d6210e8302d2f445206dfb371ee" }, + { 1525000, "5614371ea6454554a5eb77c0aa81011195ff4915cf5cbedf746b06246ef53ee6" }, + { 1526000, "e2b7a06c91c096c8b40b5bc617d9c14578e3fe046b89d0e0f9cac04915cdb916" }, + { 1527000, "931a9e43227993cd6ab38ec1e1ce4d3f533242a51eeea1396693a9d10e144871" }, + { 1528000, "d7868fc56743ad872c8aa7e5fbd36dc0a2971439903c77e7d8f5a0503d74f514" }, + { 1529000, "e6994c12574e5c78c55bf55c8ab7836485635dba8b235775093cda1f8df62388" }, + { 1530000, "4c7d5725374a76ec0cd2e9ef1b5ddb68ee209404a968606f414caf49d287673e" }, + { 1531000, "e55795f9ed4c448836081e5b7a39b9169be4fe7a12a0d602a396dcaed5ceb854" }, + { 1532000, "b200fe4f95a3e1f57b1cfbc717cfdf8b83cba50721fe413baf52275aaa67f3f6" }, + { 1533000, "f947ca0613849a00af7d5f74e6830287fce2743f125e1e427509a8ad04dadf4c" }, + { 1534000, "ccf398df16f7bc8c053810843c5e0a50b2070f5f77da1de10a21a0db718377a4" }, + { 1535000, "b4c8a1779d42965fe338d8ecb7454c565e579c2aa580d190940209248bbc4650" }, + { 1536000, "997b7fab711ad4b2b69b68104dbdbdfc0ebdfcce98b71719d29099dea91fc3b2" }, + { 1537000, "e1607a76c3f7bf92c13b172235ea0d1cb57e602a483f4528888b3fe194b9f1c0" }, + { 1538000, "5d554b75b95a4d170f79e4fe5bb1edb6c3bb0d04897d948122628467c8400918" }, + { 1539000, "ed80e2be0ecb14bfaf1362bd80665ea017dfa4867dcc2d23c1892fe040400164" }, + { 1540000, "616a0661b13963fbb2589c70c4dbd8e3f27c8b0e7493425e48cdd9be7a8c2d93" }, + { 1541000, "6b60ee97af0dfd3effd902a7cafbd9e70b030a83e76e7d1b42f9d8facbf9e935" }, + { 1542000, "98e623e8783864cbe8b73016107d2ac7368e762c13c5fe400c5d055a63e76bc3" }, + { 1543000, "4840658cbd2f0afccea693d15f3132f7852b283d19add21d363cb50f7c3de990" }, + { 1544000, "121da7dd8a5252150510cfb5807bbda18ea5f1cc09295457b9cfe19258fd8b67" }, + { 1545000, "d041bd4302f2bd3c9c15a4756ef1bce57dd7d3708f1eeb693dd4a5568622e0ee" }, + { 1546000, "7e23f96a27cd12af1c9fd13331886fc92703662aa34a8619ca37f65d64685c1b" }, + { 1547000, "43802042b6e474b11731133ecebe17c2ede4087241b76c6d3bd6e6ce5089508d" }, + { 1548000, "405eb2cce8339882eea029e5c5b53760baf58747859f3f855d4b77bd2b79a9de" }, + { 1549000, "52d18348fe4aacf4273a1ae8bd2a8b41e94ae80f3c58c2f2dd7a3cb4bbf40649" }, + { 1550000, "651a254443cb26bfccc7ec4229fc32276960028c0cf89909f94f7c8e8004d70a" }, + { 1551000, "4e9b34936eea5e7ced6562a889ada43c14becac46cb6be82dc3969ca8e574557" }, + { 1552000, "321ab80ace7fcfa806e1a973eecefc1c5c654032e26fe00564b69c96c8966c6b" }, + { 1553000, "b46e1173d0278ddfcc8f89a5576d7ac245e7ffb59ea16b9adc6302eb63f33c07" }, + { 1554000, "c0da6c8c54ac5012f0613962ec493ae23a8c7f94578d08b0cc947c171f07f94a" }, + { 1555000, "aa6119dba813e8826da1ae7df2f52de5e06032b2c581bde2a91159213934aeaa" }, + { 1556000, "5fc8c077d61f99e98c46a3d9040f46e0ff9ea385e6daed318f36060d1d8dfdb5" }, + { 1557000, "9d67f4331b80fb04032793c3f0edfdff613e41b104c544a4e97b6ffbab07f6e7" }, + { 1558000, "fb3deffc3cf52a36395506fb069a1cf3bf5cd5970848d0e774296d42a358f55f" }, + { 1559000, "a407ce1732c2447fa534368f63edc06a7fa4b704f8b19051ff160b59a9bfdec2" }, + { 1560000, "02d2255cf679abaa124435fe4413c25a6f8f8967165cf9584527a5c2f0621daf" }, + { 1561000, "587a44e7478bb8d8a83e1c4a0debc146c3592201c7fbd7f52e5ebfe2e0d4303b" }, + { 1562000, "72f1d81cea5e6676079ccf2fa9bc75f59aafce7e9bbcf15662e75059eefe1da9" }, + { 1563000, "9939d6202c636e18889025e3be64b9b2f84980d8684dc08d584ee18d2728132f" }, + { 1564000, "3e5dfe946041d1705b245d848bc0ac6124708b46dcf3cf287fee85e64cfed12a" }, + { 1565000, "4262731b0418e78a533e54773b7520b62c137785bd223d127d841e44ef7c66bb" }, + { 1566000, "480e8f69b37e1ef81bc382594e54803fc343b215858d9c7c905bededeb53c29c" }, + { 1567000, "a84428fc72785e8044489386ba8128617febd7ec0c237f8ed49a6c915e281d1f" }, + { 1568000, "7d9b53dfcb250d7c795a022132fcbd5698202372e22c78385fc2984a32c8e018" }, + { 1569000, "567ff98c646f5f3532a26c3af70626b4c13f4de72bb4214becde5bf4cc9d2c30" }, + { 1570000, "37ecc8782e7b3fb21b883f8961a6c75c61db279be5475ac8e0540a335c75cd2b" }, + { 1571000, "dbe6f476b05ed4367f44ea8fdcfc36c5e4bf44183c026590f21cbb682f028ea6" }, + { 1572000, "64b7a0b28fc4073529439c58b5dc4f9827ac7a0f8766dfc152b54ca9addb04a8" }, + { 1573000, "6f5827f182d92040199db1706a9036caa2ac46cba76278222f52dc719f3051d3" }, + { 1574000, "579fbc209ae3ae711b9adbac028d569f33c8813e0a7293928cac7f30bd97a422" }, + { 1575000, "eb9c52988b766ea0fc8b1d1ebd6b2b35fcd75e83a53b4e66eb5b5ca85fe1b5b6" }, + { 1576000, "5640ea49d0be699410e8eb0cc6d50168439c9ccae5b4ec96446abafb3fab1633" }, + { 1577000, "4986f0433e6ccd1c453104fa3b621c8bf146a99d4100c61e0325ce6f6db0e1ed" }, + { 1578000, "0455821ffca0042c55b7da443ecd316847cf5cb6e5aa41f402a03758daf9df69" }, + { 1579000, "dcfbf728652116a4a0f92be21b2d832b6de63e9a1b9a2ca7a528770b8fa9c571" }, + { 1580000, "bf89ee8f8de38cebb9998cdabfc80c113e9cdaaf0e5163c63b2bff2877bdf5d2" }, + { 1581000, "469b4f41deb08ff1e9aaf67598ca4f0cd877d04969831427b20a9b93d269efc6" }, + { 1582000, "efd14758a90d155c2b24644bbbc6fd04eb800364d4873101289908b299b011b9" }, + { 1583000, "d9535cee77aa64539110e354374fb3587693da6efd19629e274dcd5afba462e1" }, + { 1584000, "e6f937199af56586f01782f0ac574311d656b433972c91dbfd3ea267201ffc76" }, + { 1585000, "3413c241d25b7ebf748e78c4dc5ac35225e30598365187ac0678319c5523a0df" }, + { 1586000, "00237315a9a0c0b764e7c2b5c95900aab04eda3f52a117e21dac2c1c123b1458" }, + { 1587000, "bfc573531e75f2f78ae2f74ff9c273fc6cc5297bceb3ad93034f6b48986af4e9" }, + { 1588000, "422b37a9ac0030b710be2f4bd0322d474a15414d9b3891b9afe30de875c0d57f" }, + { 1589000, "184441687bc69dbf7fd78460352a5ca7ce1d2d9af5499d71d38bc65ccf0267c8" }, + { 1590000, "35a6fd188e472c32090f505532cd7da0a0f3b3a784e3a99dba8bfda32a2866ad" }, + { 1591000, "09c01f6c42af638aa798f45434674f45aba8c76531025b6b4649e953a74b03ed" }, + { 1592000, "e057af872f30586df210d931619747bb0ac847948c875ad6f87497b2417fcf22" }, + { 1593000, "0ccd428d1bb874151de38dfe0201d2edd5a54279ab483b89277218aff071ef70" }, + { 1594000, "7d7fde4cf1bcc083efa9635f381a5cfa5e6dd9c959f9b77f635eee08be68f1cc" }, + { 1595000, "e1e3b888b1338f7b6e9d6b656445b427cf9912471e93b3eb4f59f817b8acd418" }, + { 1596000, "3a0579aca5bc2fc8c2813a74096c5aaf608503010b3dae03f2e0b4ba0f2ee354" }, + { 1597000, "84e16c8197b9cbaf267f30b64eee9af788c45e66cc49d5867296ae2103158482" }, + { 1598000, "aaaf752c3d70083c51e9d041dac6fb4bbfa6243fd3903ca83cc6d14338d5adf4" }, + { 1599000, "67c61fb96cf7f3845b9e6fccf33d913f3153f4e748a8b07558ef4e2659ff6231" }, + { 1600000, "9a45661e35b559aa2e0330e8154fb2ec463699e218092f1f58fa43e8d66f026e" }, + { 1601000, "3eb2dcbd316a326f1a14249df07785ddf248c3120e7f8a157e8fc857fc3b3c51" }, + { 1602000, "7e95953e680ecacf9c2d82f4d37a9a75378a5523ef62903f213da3a75050a786" }, + { 1603000, "e856fa12808267646c272c355afa40917fb22552701d26fced2e63b465d697e8" }, + { 1604000, "02c83acd3b42556433a5233d7c70b76a2c312c8cdfc89c3e8456b95be815271a" }, + { 1605000, "14710fe8566a084e0864a76e92fd42136e407f028e34fe142f8360e9bac42cfd" }, + { 1606000, "afbd681de1470f14178bdb060e557e1101699cea53d2a32d720352fa0415e7c3" }, + { 1607000, "1a0d122e28760b6d1b6948bd534038beb24c3070b942f44845272935a355fa81" }, + { 1608000, "89842368877f4bb0784dadc77cd0b8c8b33453b162fd5b4030d510952c6a7b42" }, + { 1609000, "905f9059be9b3271733426bb274b9bc2591f302a9eedf6127daecd287ae3722b" }, + { 1610000, "a5bb5a9ffe7b4e009c6a6e21731f4c85d54a4867d45711e11d774392c684760c" }, + { 1611000, "eca551ca8e47f7b8f55bc1338deef8b3db0e55dfc746bb8fda0fa524da818bb7" }, + { 1612000, "74163195187562462fe20405362bb19547d72a093fedc20240fdd458c6ec49fa" }, + { 1613000, "dd7af9515f49cdc659dc42c6b7a4ad5d15a7c731f9fcb745f4408cfad17d4787" }, + { 1614000, "45a1f617d5c79d5304400140874e5b3f8a8710e8da29c77a3fe9fc6b3229e96a" }, + { 1615000, "b3b0fe03e57af7ebcacc544f34b6b2ea56276832af7087a9a5fa8a1b7a3fee37" }, + { 1616000, "8e761b1cf3181d6f9a2216c54f06445e59dc12cec99ab7c84a7a38245d485407" }, + { 1617000, "96dd5f7e0b98fd48bb39ae31b1cd123325988dd10743268ee2d125ad705ac00e" }, + { 1618000, "346a87804588b244a452d489bafe2bf085dad5e9b42e243a9a25f0d09e41d3ab" }, + { 1619000, "42f978f44b43df7d693023d18c88f26a507c4b69fb35af25ce68a2278e408047" }, + { 1620000, "5148c07c509a14ca4e1c4510a8cbf48ddf9811a1361e65863eed46664c9b669d" }, + { 1621000, "2c79cccd0ca96f4b3003867ef8a5fe4501d812960d5cece309f990aa9386b655" }, + { 1622000, "95fb21c58bff5c088137da6aeb9a859a43a1a2ca5781d90e85bd5f2b156ad0ba" }, + { 1623000, "43bf893c1c2b4d9a20253ec73a7133cf289d8ef0904d88ca0bc54c7ba7986857" }, + { 1624000, "5ebe1b993eaf2322a068d0ba635db2ca3a5f3efec23bbfb9d0b06debb1bc693a" }, + { 1625000, "c296ea319dd0f81df9c35742ece9853595fbc2a33d16df8a3d756b8e85f3d409" }, + { 1626000, "1b6ec527dc5281fe68e0f4c4d6c3d6ffa08c71eab377b10371e70636d404f00f" }, + { 1627000, "298ce3175604d2753f5e44c9fa3053f0d19da1314081471a6cd2e89b1b4a0cae" }, + { 1628000, "3b3cb17f393f69952aa0a48dedb224b8eae838f7926bf55511c7e6d961fb68a7" }, + { 1629000, "4fec637f3297029e39b6396165aeb62e4dd948d0e66e5f64d88ae260f1fd5771" }, + { 1630000, "7b7447bc265f63449debba34fee237b16e2c8902370396f97dd3e1eb97e668a9" }, + { 1631000, "f2c1f8fda8e36d8ff992abc7341e5ebac47d815a632cef1f37fa412b7010a9bf" }, + { 1632000, "f50e066f2640ff1e7a1e967da5461a593c331dba24daedfc986bb987686060cc" }, + { 1633000, "c27fbfbf0669f198887c2c8b4ddd5acc0de4b225073374639373a3198a80ffd8" }, + { 1634000, "f5fe981a0beb65c133679fa6284e1d8c7af6c04cfcbf3d9c207bc612ef254feb" }, + { 1635000, "a74c536b8b8f1c14c5af10a1cb567259e4ce5233727d593338ebc48eaabf0993" }, + { 1636000, "980a8ecec085ff5aac2c07f21a450cc35d62782f37940e0e0856099a579817a9" }, + { 1637000, "e974ad3258a19a4c4615d4ec86f50dacade0d0d6f6c0427a9cf22de734fdaf66" }, + { 1638000, "13446b8d1f3472e8bc56ec77f6adb93d1dc8854d19ba6034409fbc2e5dee4904" }, + { 1639000, "838fdf3cf7ead2f25e9849aa76681ffc750209c8bc263eb4f8a56484e572024d" }, + { 1640000, "7bc6b0962bfb421423ef1fe0b1b12cfbd13ac42dc27fdaf9f042547b78150799" }, + { 1641000, "a64c97a53dc4465e6ceca562ced384e3773e2816b60973d28310b1af68cd65d7" }, + { 1642000, "90a7907d931a0a2102ad07a5492b9cc1ad9fa3df629636b9477ac00f3564e5ca" }, + { 1643000, "c1d3b87b8e83c42937f76731f98795b92ad4df6aa593182dffa1636826015c9f" }, + { 1644000, "26b0dfeb8382341ad1943d0984d2be5791eee959e7283730855b718c0c010cba" }, + { 1645000, "6e93d52aa9b3951bc7d8dbcc5a77b45cc03cab0839d1e950d255757e36093026" }, + { 1646000, "69e2c917788aa11480029a73a3ff5a24a5a6ff3fd8900784e5f76fc6fb9de9dd" }, + { 1647000, "a3f71994dff114d38b39c18eff366aca9cfb0acaabf5353aec13df6b35f2fcf1" }, + { 1648000, "4e84579002166fd8ef9b051c7804698a9070ff1fdcf5d0e0603a710689c0c7ad" }, + { 1649000, "7b30d6170c82bfe876d11aa65dc13bbb0129b3c82b7462e6d3312c14b889a1e9" }, + { 1650000, "3a79c8e7c0c7bd797cde27a61d093e43f697b2ed754d010f26dd8eb09dc72d2f" }, + { 1651000, "01c9958188b05b2b31751870a3a1caa7c4aeed538fd344bc4346e93736032e54" }, + { 1652000, "e3e9989df38fa2e41e0d88158d9e44076bc982e6c182fc8329636d5a81fca191" }, + { 1653000, "5bb0363db30fa4ae6676690ea9fc6d856654e5156c5a33cbb92e443544210c43" }, + { 1654000, "86ff3de6b7385f8c92ab980a92669fa9be08249c742d3d009c1e24f584113bf7" }, + { 1655000, "bb70e059f7db6f6abc914da96e6f786333f6667f736bd5c08c9e033727aa37c5" }, + { 1656000, "e67ffc581b8bd3b85aa6be02f98b8c313e26a1b9f4219d490d31db6e6ee442e9" }, + { 1657000, "67c26a89be72d5ca522d758e98fecaf9618f3a8f609eb903e1f530a2471d1da9" }, + { 1658000, "ec97b177e235c6b223c30938ba539528678b95bb07713aa5d1c714f3bb29139f" }, + { 1659000, "212d991576c14169eb8db2b39ea10d6b0e4f508fc896f12e7e3d9b81ad72a370" }, + { 1660000, "47e379a9ccb96c759d484d9acf04e6c6928109edecafacb06dc0e041ae5747e1" }, + { 1661000, "13c169665928dd42bafbe5d7522f2099bb780557c8a9bca2314bd631fe20be85" }, + { 1662000, "958633da99cf1339bddaa82283a9b9dfa1d788b6c72423c25785c1248305f5e5" }, + { 1663000, "cbab5ee090382f75ed6d1e5b2e28825cc73d64a455361e4d011c45f3ba0a61aa" }, + { 1664000, "0f7e168b057560dd02502e6bfeab3163fabd9b5a26f302a1946e54a82ec06030" }, + { 1665000, "b2d896c388c7b094b295237366de2d53dff32872febc333af554a509bcf7ba71" }, + { 1666000, "4eb1ba938c0afbef128fc1cdb3551765b245da6b05376e5a23cbe51e5afeeaf9" }, + { 1667000, "e731127e5fe00b4b08d78890cf1e50d88f04bd9061cda7dfe9e732e9c074f3a8" }, + { 1668000, "3e5f6ab3d1f806debdc350866531b016052ecfd2c46c3e8ca48bbcad4c6f3df3" }, + { 1669000, "44d98814c745ef2643e8f6582db7dc4991f2e61ca8148287c45d14b4ff6c3480" }, + { 1670000, "40af79432056385687b429d7d47f0ed9e42bc496698e64ba9408cdb97e2860cf" }, + { 1671000, "14a7e4884af4b0f9f2ff8e2f8e557ede1dcc7f2d93db364bf9eff30ea33d9f75" }, + { 1672000, "85a7fa1f23b95b03e44f22d92e63af5334559ddfdf2eb63310cca72e548456fb" }, + { 1673000, "a03ecd4501f3f5957df91c530b54444cb9ca47029c3e682317b11bda712b063e" }, + { 1674000, "64d1492d51dd7ea9345d8cea052e3dce7e1820d7a5a1ce77fdb7242085f58fd6" }, + { 1675000, "c0d76771c0092007ff90dae3c567799a661216a68adcf9955beb4f4404ec06b3" }, + { 1676000, "77361ce8ad04040387b3cd8e7a74b71fb13285a4f3da374de7cb4d6068372eeb" }, + { 1677000, "9b69591227df86e2b2571c0b5b9b652fab0327b83bbded311fe11dc59b40422f" }, + { 1678000, "b27116f4fd95b5479ff6a0f24b7826541af54c830ef7e1a0e799fd14bade19b4" }, + { 1679000, "24cbcd6870f2671faebf724f8764f318eb21750309184643cca9bac853be30cf" }, + { 1680000, "3aac58f6da568638264068f59dc9856b4bfd7b1219b5b9458cccd74e65199ef6" }, + { 1681000, "49a890170444eec299c9ad462208aacdc62237aacfa644e5bcae62de414f8a81" }, + { 1682000, "a4ee5e6c3f08723d2bd9bedfcb99a12bf0b3a82c68e5c744f762b4204a0c9ce5" }, + { 1683000, "60cd9fd2724eac3ddaa89e8cea6672b7d9a20ff2ab03add41ae6f40afdf1c54a" }, + { 1684000, "50af868fa42181d63400099bf6e1ca5a14debdfee8f6f3efb6f54ab94137fa28" }, + { 1685000, "5c57963127ff137412d8ba97e7ed5198dc08d50e6e19d3d22d0d5789dad1bcdb" }, + { 1686000, "a5533970ac0bcf1d547ac414876118330a155d909c090e788d187b0fb1e6af2f" }, + { 1687000, "9f8ead495f777f1dac5235ad9532271144f92def6937c73873a2c164d6be1a34" }, + { 1688000, "0bf385d62325a58296344ab889be9c15aaf4ae1a83f006fa6da3900a8245eb7a" }, + { 1689000, "826cc89ef9aeaece9ccb53dd44f92132e8501a9a67c98b16fcf02c68f9dae1ab" }, + { 1690000, "5674948567b07548016d3db3a6ddd4383f8d95985fc0c89443b3bbfe874fc959" }, + { 1691000, "7971ed907b97a9f49523a461554a2a739cf73b16e1b2c634216fe884f63f0d04" }, + { 1692000, "cf696b6f80de291d83c82f2e36d98016ae28c82f3ee97a7a265cad95ffb5208e" }, + { 1693000, "0411e0aed75774e8dea7c0d4248d7f5de0c053cdf2075e9b0e104996887148f3" }, + { 1694000, "f855f0f57d32bf2fbe0b56c825d333954cebb8becfbcf970648da742b47c5933" }, + { 1695000, "97ba4be0fa1608cd633486b873bfdac5b0fc72a3efb2fe6ca7e6e03164f1c349" }, + { 1696000, "3024bfae502cc6128783bf518595ff6f3b41f6e48cf935bb3896ce9af7c002c8" }, + { 1697000, "4c4822532c951de854a5ac0d762c4a3559e85f27271cc7ec1d763310edce9684" }, + { 1698000, "c26c6984dfe51f3f583b9255c23adb59e3417f20a2da1ed5b4e7030fabce2c9e" }, + { 1699000, "f627a1a54b68afa3d23cc466df4c114a6e7ea379b3929c1eab88889ac2e86994" }, + { 1700000, "df5af84682500c5fe8f44707cae0ed38daf8f67d8a239abe0157be4191eed4f9" }, + { 1701000, "508fee53808e2e73bb866a5c4ee14d502a4c6688f4d29e71331c19bad1483c03" }, + { 1702000, "bc5b5803f85bae244987ce65ab727d52ce1a4f95adaa0791bb4f5d17f715bf26" }, + { 1703000, "e5db768073cb78bb168fe6b513be0259069c2b02580387e020374e68db370eac" }, + { 1704000, "938caa321eeb2bba55f066e7273daf7af1ca02007cf55b99c5f00600b3985091" }, + { 1705000, "72fc44d72b470386264f6a5c9633e0c0a5d17df039368e98cdf0201e3b6fead7" }, + { 1706000, "7f697b46f9c6793f799aeb620e3e833653227b68876c3339e61a03a0c39c49ab" }, + { 1707000, "9f55fdbcca73236fe629c05a399effa86773bcbc9898521b25882ed7e53fe4ce" }, + { 1708000, "5430b7902c70e43a4bdee02f14a9a8ad1d183ecd7b4d584757e32fd2db8de4c5" }, + { 1709000, "01ab6a9bd77fd9174ba570aaacf609acd5d3d4df526f4074093fd09d34a1996e" }, + { 1710000, "eddf37b7c00ceae24e3740adb4e3199a32d44763a3fdeb10735439dccb59973d" }, + { 1711000, "124fbae062b83fe99dd1848ec9d2ddb2e3db69bb9652163fb9e9adb284dc781a" }, + { 1712000, "7f0980c7bee127907a235819563f0c5131b4e001c955d3a4bc8947de3abf13da" }, + { 1713000, "19302a1b696909c01c49cb92a57acabc8ffb7bbf9760f516b6e9abc58e9f3b63" }, + { 1714000, "e140368db4ea2c5fd4252d1c4430ffd09a919911685f68f46470697405534c1c" }, + { 1715000, "3ab50319cd2a917d2553f4329aba8a0b77829a521508fe70e47ea51a1c818eb2" }, + { 1716000, "e707b0cf97d779e2f331b233042495bd745b22a8b67e9b123c6d34fb37e7ffdc" }, + { 1717000, "9c7014cbfaaa75f4c1bf6c3ed85cb68106d52d89c31c1f3821d9591fbdb20092" }, + { 1718000, "a63ead6047017c3391048c6d6445e7727ba3cadcec6ecdace030bf4ded571073" }, + { 1719000, "7837f4f0fb4f5128990bcddda9f8fca4a32359d4f7f39b973eb177a92acfba0f" }, + { 1720000, "bd5b3cdd7cb1e4d03e62599eacac6d4e5745d21383ba7a98c49445db4e4569be" }, + { 1721000, "bed1f200d36919974320b068e9fec1129f758bec2b1068b7fa02fdbf61562e2b" }, + { 1722000, "2a298acfabb688004f3a23444f5626537dbb942d59be020f2b0257635278b4d1" }, + { 1723000, "056944c88bffbb77eb69bb8782914941f6d12fb6fea17cbb33bdede3428e67fa" }, + { 1724000, "78e9836539323cd1429ac588611aecc90bec1c1a8f63853532fe4659afd18a0e" }, + { 1725000, "fe17de40b424aca5864a471f390c52b6148580fcad1eab62cd79bbac84f2aa5d" }, + { 1726000, "f5d2733f4efb44c38888cec5f84e315c51b9de55c871b0538125b7c2e1464a9e" }, + { 1727000, "859bf3c63f4ed42b2098551ceadc9fe63fa4e0c6214b1fa0467b77cd58755320" }, + { 1728000, "933e3d0bd6537182f2d9474bd8efc86fdb22e711f72234255f5fd05cfd77e028" }, + { 1729000, "9dea971d400780e5471557275e26ba392486d5367573c1513354dfc60a67b57f" }, + { 1730000, "250af199172d41148f2320e42ab0a38833bbcf4919984a4c65ea9c615698ff82" }, + { 1731000, "85c9071b8eca0fb364bf50824d59b52a499741010f60e06beb34c4b1fa18533f" }, + { 1732000, "bf4a6bd4682775dd98c573ebe3c0b8edf9878de9ccda41c768ec9e85fffaeb24" }, + { 1733000, "469238ddffa27afcec00ca23b36085506f345257dd9be2d06cffcb6a007b6b74" }, + { 1734000, "c10ea13eb103a917dc17c84b66b1a10fc0327b2478183edfa3645c0aaf238c32" }, + { 1735000, "d34c0606f18644a8208e97341674ecfb0c5f3d5a242f6afdb0eccd2c8c098019" }, + { 1736000, "af77d597fec0b96a3ea2e616116f5ec7b0bc8b1a56e89668e994ad676192e527" }, + { 1737000, "c6a869ec9cb73ce96ee1620b1803516b466d47cde5ef78edac8b8ec595cc171f" }, + { 1738000, "3b69b8a388ad69c84f3e345199440024996bbfe00a59b933f81959b6724576f0" }, + { 1739000, "b64af79e91f8f6a5967f1bfc1ec567dad1e24d38b89ea20a9fbc1b3e8ee9c4b8" }, + { 1740000, "1e78856c1f5a775fdace5e6b331005011e309825a44043738512be9f39a45320" }, + { 1741000, "817d330a7bfd7dce9fe38f5d8806a8b5c5ad4bfc5c977722ea4653c13fb0d281" }, + { 1742000, "adf32030b702a9705e864471ad59983210df4288db92e5c24fc4885b4ba2284f" }, + { 1743000, "e1257e0ac3b2dd3cb93ab66a3ec0a9ce5e619454919c9f093ae968c95b7364cc" }, + { 1744000, "a58589d821afbd93699e80a38f2376116fe00eb85a8fd1ef80993192f34c1409" }, + { 1745000, "b9bacc5848228228aa741d96fbac4bec395d6e9857cfe75c0c9d6e18b2c02e66" }, + { 1746000, "2200e20d4ac99a9172622c9202d24446a95aa6fcbe35f2dd745cdb4ec1220cc4" }, + { 1747000, "d19975ef01e0e8c7b836202485f17314a559822bda7611b973f65ed300f4800c" }, + { 1748000, "f99d70c8702104a9a0380b517dd142604ae8d9f7cc479205a20b7f4b9a21c405" }, + { 1749000, "df986855bc9ffc4491429b6e57c693c3690dc1dc2dd6e2f0e2db2e253dcac955" }, + { 1750000, "be9a1079d72365e8830591897d8225e26d3310b581e25b5ea29fdfc0ded7c9ac" }, + { 1751000, "89f8490e4d61306c439c0df4d6cd0e63124f021a901ba5c84f5013ce2b576b0e" }, + { 1752000, "28960c73a947317b8e7a8dce75c24166f0870071d8b6222b43c3fb91d0dcad30" }, + { 1753000, "3fb1f97a5cd3d4180e309dcb64463613beb967123fafe01f4e9cf456a38e1fdc" }, + { 1754000, "c4d6878195f227aad71dc1d88995d570b61af4e66a3adc14dc5d584aab2cf393" }, + { 1755000, "a571474c5d3ba96fe8ba32ea6f3f8d7d24e6a1c5dc37bf831aceae5b9eb93dbd" }, + { 1756000, "c483179ce58677cc42734749c4de23aa0b6ec3f9a943283050cc8e8169a415eb" }, + { 1757000, "12aee1f833dd2531e5203c153fe8fc1550585831cb9546e4ab7fd2ba8d8448f8" }, + { 1758000, "328a6ab17fe0b580e489bab2926155986624f78a4034b50d0f77bfec9bd8f020" }, + { 1759000, "e5c949d3fc601e2109d550f0496be60c24e6fc117235daaaee520bb9cdc8f67e" }, + { 1760000, "4493cc9915b240c0f776a70c664bacf28cd0540c52b20c323b23524792f66dbe" }, + { 1761000, "cbe14802387a21a9baf30d04d92edca3449fab121db0f301c52067cd60665b19" }, + { 1762000, "9ac8d7f9f00d6a805a31e83928340f4b91631dda1d0990090634f9c8e391d4c7" }, + { 1763000, "9bed376e7736e79f23e0a01ed1989a697ab77f2f81586962e3e2851397a106ab" }, + { 1764000, "ddf8d658ecc74a4189fe591143a6821c6f601d26ec6081fce358b82acc2d805d" }, + { 1765000, "c87bc4fd3e2d5f028b934c4c2a464b9954e5cf6b5b4c4f96b235aa181575dba1" }, + { 1766000, "ecb3fdcafb7a4a1a0eb9a2074baad7bddf108beb7ae77c0f0f24f8614e55e2b6" }, + { 1767000, "811f5548a7b507fe14e5c006a5bcf12501eebfa421acdf94b4148831fd187427" }, + { 1768000, "97e7f70fb01d0a9386c40f3315e8d7d80c4e303745f01ef9295f8f6e49f525d0" }, + { 1769000, "f3d18b620c3a92272cec0ed2e308e77cc1f3d614a88498d0fa33fcfa0baf108b" }, + { 1770000, "c974599761f9bb57f37faba6630b625a721053a629d1161ed2a56c98d1e4c6c4" }, + { 1771000, "e2ee30991088a115f879f75fec89e96d325293788be7a0158dc86769a299dc78" }, + { 1772000, "b6fd7380be3063d793fb76c9bfae71e7169de2e2d21afc3a24f657eb041d7c01" }, + { 1773000, "da5136d96250c30f5b6e6c91fe3a7359f63f04004d1078bfa52b57a623c4e55a" }, + { 1774000, "f71e3cd4f1b9dd9053e6991290102e4ae5191c740454c7982490024aff43329c" }, + { 1775000, "52f1c5bfdbecdb7fb4cd00915891c2ec21dd1629e035485e96593d218c8fd0bb" }, + { 1776000, "b8e9d8b6d6a031fbac807116d7580c345b8148fda5a988c7151e734d490c25ad" }, + { 1777000, "4347cf0ce5547ffe0b883e888363ea0b535e6e1da33bf4d7a740f13590ef5d68" }, + { 1778000, "044ea4a4bf0b77ee4f415173af5048fd7658c03347d5571e70e2999fef64b094" }, + { 1779000, "d5fc5b65a30c637315a10e4c82a2026b91d897e20f63f898aa45fcb872c6fb5a" }, + { 1780000, "be7e3fb82d0398d85d151a105b407f6c8858a2335e1bd6ae3458107c4b198e8e" }, + { 1781000, "06fba26696dbca4b5241f7f950f39b59a07f48ea747816810b00a6897c242faf" }, + { 1782000, "229db79d538c7ed959bcdbcc0a8543c2b46ba97f1ab1bd2b60e47d92af651fa1" }, + { 1783000, "f34019cdd068190666aa2e485edd7819f280e8b7325e7c3e423c550b81bd0c04" }, + { 1784000, "1a57c43a0049f1b3d4e7d37ccdc8be605cba794f2fb56b9382f2318a672ca157" }, + { 1785000, "becd1a52adc255bf5128c9ba5a55257fd0418a6752c46c77615e830fe679e8f5" }, + { 1786000, "e05a06a428a5bbfcf7e2d42c2b5dd32364ec91f7692e92f4f3553ca28daf90e5" }, + { 1787000, "5f2c238540f2fdd45fd104d53f9e83a08f06fadf9b74cb937711012baa8ae83a" }, + { 1788000, "5dedd54f919fdb209c6babb1a96c149e111ec5b888561ec4bc2879881130a7d4" }, + { 1789000, "dfdab38c3bd5ccb81947d5829fe61e8f54f2f141172181473447d17450d858f6" }, + { 1790000, "8ecb5a666a6847d4eb3f02240a3116b24fdc0f17ba03d926af579ffc665c683a" }, + { 1791000, "b9bf2df98691f0ff35ae5b1f9e3fbff0bf09c2ce7225a4e7949ad44b1070c8b6" }, + { 1792000, "878cc61fffefb9906983c3ace2048d494a70a7ba8dc92e11973213b4e8f7160e" }, + { 1793000, "78eb9b979331d3dc8612634a117d5daf1fa0bcd06aacdf7e37813f170102ac55" }, + { 1794000, "e6bbb95909ecb68288fbec0b10494a916ac66cf6b170282e70f7d6d4939b007b" }, + { 1795000, "fa913dd8697e1a75f21a8106c03781faef46a57667d96601c27edaa4f768db36" }, + { 1796000, "053a4b331752a2ea3c4fe401bb587e2e094e4dbf678db7c58a6e8895d8271391" }, + { 1797000, "5fa8f171676fca5592feb950c6412945d3d359a78a118b2f8f7c9217c09b23bf" }, + { 1798000, "ccb1731c506366ac8994efdd689535e18139c5f809ea5d1c172251313c55dcd6" }, + { 1799000, "7f998c74eb334bc95ecff223d530fdeceaf9390bc4ebf9ccc10aefee3404a473" }, + { 1800000, "bab155179e9049f9d6fc2a001ffee601361ff3f9d6cb2baa8f796318526664fe" }, + { 1801000, "068ed5e812ce10a33957c2a9bd3d842d84e7210c8768adb0cff6222ac4132c89" }, + { 1802000, "0341bd17cb0031e1d43afa653f984fad3d5172a0bb7eb85d9533d7ce9aadc4c3" }, + { 1803000, "cba79b0cde23e90fab39bed5f5ac0a7a2c8e6e0a3663b1b596b6bfa8f6a5a4f5" }, + { 1804000, "7e7e8c67e8a4056276eeace82b0c32a9bf53054b6763bc1b35ef2053efc375f6" }, + { 1805000, "506348c62b04b94b7b1614ad195e070eab00009b71bdf105096047d7ead23b7e" }, + { 1806000, "b22832a4af387cd012135be0e25a5d32289f75d8f2fa7049ff2d22a0dc36a163" }, + { 1807000, "b42a5fb2ed8148d8b50f5ba96b5a163d2f6358cd2314765135ddbc915be3aad8" }, + { 1808000, "c658aa8123eb3c781446bcaa0f202268ee8066ac1ddba50d2f4d363b2e374b6a" }, + { 1809000, "1927d9fa9a7d2c0e7b72352a7c442b60acfa5d22ec8f3ff4495feea047df5927" }, + { 1810000, "45452f73a1c59c6d4b628c18beb9bfd407b2238dba27ecc22bb74cffae29d2dd" }, + { 1811000, "10db9105ee04d65340e4bb5bd9c519b526c68198cf1978666c150c5591fb5298" }, + { 1812000, "48004db1699897f2c1e15b3ba22f98833598d61c3e1cebffee1a2764f2f4ee4b" }, + { 1813000, "a05ab99d820324878be97775e7de4e95026062b61ce4eb4256f8929fad5cbfec" }, + { 1814000, "a1498c4a7630d236ca694e8534b188100154f9ccfefd2559d5bd60b1bb4d2411" }, + { 1815000, "00bb7004cfe768db90bb349c059b272b81c53bd196b8f4f7a687ef007d1500ef" }, + { 1816000, "d2d31d8bd9d8ed91700edae0cd3f88c5ab0ba255d0119527277824db02f9a764" }, + { 1817000, "6619a68e2e31a4ce4b5edcd57ac62d5562c539164dc985bf0fd38996842e5bde" }, + { 1818000, "1590c190a7ada5825e90f7becef0a80213f34b3b31f2a953e9b19fff2ff07183" }, + { 1819000, "e1c52bdeb5a8cab64395dcaa44d30d352c53f63ac25f9bb01731e9ccf7890a82" }, + { 1820000, "d242bbb73f784587fa4505f393d16eb8c0a8470dce321564a70bd79e39fb6bfa" }, + { 1821000, "c0530c1f9ddbf66f83d136472ca673dc482267d2916c921dad91ac2f28149edf" }, + { 1822000, "01711ec5784defaf8c7f09e4dd7f8cca4aec07aed1d15d61a5076e55464d4b8c" }, + { 1823000, "75a6bfcec2fd31e9557ce38745666745dea865504b0e41a90a82e299201ab42a" }, + { 1824000, "b971fad64eec2f04c1c060c34909644788c4281f058e9c191c303a1d8e1598d4" }, + { 1825000, "e0c88c25d1408de5ad91709ccaea42c7c7b61116c26e0474b44e71fb822be7ea" }, + { 1826000, "2b27f37780b4075806208b4265e6e378525e609db5c82c760cc3a8b6972c8a0d" }, + { 1827000, "cdf1031d412d5cf5ca40da2153d41273a050d2f6f613345c9a888419f025a367" }, + { 1828000, "67c8d608f59763b1f9a90c20bc4bd8c5105c820a2e445ecf0b4001141812a7d2" }, + { 1829000, "264ab8d66338b6c0f159f67c171466ed1dc5efe10bfe1999f0b70035c44badd9" }, + { 1830000, "8feb3d30971a59d53bbc7b18d8d2b035f62e9fb35a5aebb514f104e7d0487b81" }, + { 1831000, "a307218c72849762202e3c174fbad8e35a344bfc1f7317d975844ea0b2b3bd63" }, + { 1832000, "28022c322aa8a1809a53ccaf34cf80e71a92b4a6f4597236e2524da30f7cbadf" }, + { 1833000, "5c5c819a50f2c8a1d9278e44f82e4e52d3385e77619513543b1b07bf2f015627" }, + { 1834000, "3e470ccde982faf31035b4030e0b933f51b5408fd6784a4ee7131a74f9f5221c" }, + { 1835000, "7b11778228e3834a682647c87b69c24cc1218138ab98e0b2a28bcd7ab9811064" }, + { 1836000, "7452675a12c8cce4995520e5f3b5884ea001e97aa85652300c429a7d9efb3fa1" }, + { 1837000, "d11bc7eee8b5a0161e1e27646f7fa3e6269c1be6712a69e200db17ee4f1b289d" }, + { 1838000, "2d8c5772d758938aecf8da7d81cec33cacc386019e777c06323b7afd68b80e43" }, + { 1839000, "afc99834df7c814ecc320c750eaa656b1555010613a1dc0f8d36523da759f3df" }, + { 1840000, "acef6c2e281f2480b831aa3952448a3764601fc610a13c59892970fbf0c66ab3" }, + { 1841000, "6dbc6d956ca04b90331f0afa32872a08bc197b1980b1fd1cf4e2a1a106564ec3" }, + { 1842000, "35271660df6691cfd65b1ae2c4070cbe3affdcf4e7e596bcdb29d76885c6c11b" }, + { 1843000, "16684ff5df85a58b082e3db420039329c5c74433f8dba0b0a9e39f11ce07d5c3" }, + { 1844000, "594a4bf577e8c74e98994d7e165a09837b87c835fa36f8d6f63fb87af509b345" }, + { 1845000, "0bf13dbf5f8ae787530744e8cd4bdb97067fd7f0c578864585c206145ff5d81a" }, + { 1846000, "54a1f8b2dcba4b4c8205e84a6206aed90a93376fd86320542270f47c94688d0e" }, + { 1847000, "ffb9758accbcd403861774605073ab6d39474cf3c45855e14f16b8a28a8acdea" }, + { 1848000, "3e36ce5a16558ddfe74a55b155f753d4e23ab75c72b366380e4c4ec2aaaebb0c" }, + { 1849000, "ccb9b5e2be94a33bc9966f65023419bef7e7b2c0253ca4e6edac80075d841e27" }, + { 1850000, "a79217e362a3377c67a87c368d081b8e866c6178e67d13fe994f40b66f8e328b" }, + { 1851000, "572617c950459eb84d69d41bd8ef42f48d3e72d76dcc75a2faae7ae6dfa306b3" }, + { 1852000, "f446684923cb09e60824bd4c41fe46afb2b4036a0622787de3fdadcf51e00231" }, + { 1853000, "3dfcbab264976d79dc20800b066123155c98740783d1ace7ec58fb9d393ea4ee" }, + { 1854000, "9deea119677b0a8000584a98dd4ba9d6a5c406982cdcfd2200fecf3414833267" }, + { 1855000, "f89fdb0f802ac2a7133287295dc384615015afa908c21723915eef452c2456e4" }, + { 1856000, "252245d44fba6a3d60259a0d25919b85795995e5f67e6060d0127b5bc9828703" }, + { 1857000, "97d4c7362d5c1bdf09dc0556d215cc6d72982f1664fd3e4a5ee5c4237dffb028" }, + { 1858000, "d89e6f7dee558e07af9743858352a844a8c8b91901e914183acab7615e7c3811" }, + { 1859000, "ef6685475fe204feb592938b936a59b6dace9ee226d0ff1cac72b8a4d0e63a7b" }, + { 1860000, "d2f43d09f1f756b46fbbce2ba5679d4a180e68ee02c9b18e9d123eaa049442cd" }, + { 1861000, "112a63a1c64bee14cda7a3f5184639e2f063180f4eae5dc003b552c9bd150d8c" }, + { 1862000, "d4e03421ee7555ebec44b8fa54a389406efd615d9e9dea5ec0f00170baf4f154" }, + { 1863000, "a6c4836086e46597d507edc2cbef85fbbc3dff906bb7a778a720c384dbf678a0" }, + { 1864000, "bbf7d94e80a0223d7cb50745fd9d83fe3d29a15181151f8ae4d244e72d84de34" }, + { 1865000, "d695f4db220141608a0cc228d5c5a9fd98d0b5d2a278528e03c38bb1ae74b041" }, + { 1866000, "a49b063d680bd618d85aba3c3b04441a013133b41e6337ba4bd8c9ca40c8e9af" }, + { 1867000, "d173b5ad5b7c6bf470de78364841836f04e2f55e90e9a18ff2a909db059890f8" }, + { 1868000, "0f3f6b0ab16d27db3390f17ff40bc1631377f76c8ede69dab344bf4b7117502a" }, + { 1869000, "2ea160c71d008b80455040326ddc9b1fbc5a2737914188d2c196cfe2f1c45f5e" }, + { 1870000, "a551a5b81e161b82e5b682bf1bccebd964eb2deb5daae69fa84427512d10a875" }, + { 1871000, "ac7461a8b98f0c3925f4501cae0694860621e671fede37ff6bf6729b7f8f3e1d" }, + { 1872000, "16557e3a2353a592ef8f7a4d8b503348fb1b5789e0beba29f1f7005c29ef83b5" }, + { 1873000, "aaca37bdcebcd128c25a34e9a9bf2db007b3b40e719513f39c04a5c8ca2ded11" }, + { 1874000, "0f2f0c17cda1ea1f09ab9158b1b5779047b9e759c59394ba1df0c3b98b732372" }, + { 1875000, "e787b0315779945458bc9dd6bfa38b1f1313b1f00c0386cee91a007135c1cbc2" }, + { 1876000, "e6e3ea9563a57a82153e03e28476e93d01d9d154ecc19acd448af41141181b12" }, + { 1877000, "1ef67d234ffdd2b2f204aa5981219d1a86ae3af7392bbf3baa0d11c57a973498" }, + { 1878000, "1d826ede84b33859ff076cc8885e45778d15270b5922421792190450f27ac5b0" }, + { 1879000, "ffb0bcfdf1215f24c83df718f86e0ee6616b71c39a3494eb5e3b897f99bba20c" }, + { 1880000, "680f33655fa69ce7c2fe5d13678141e1acf2f3016dc4c96be2fd963fe70b51ed" }, + { 1881000, "c21ac4d7892e6e5a92d02ad252ce4b156309a04cda735d760456edb655380eb9" }, + { 1882000, "bb7f10d5c62faf8db1a9b17d815e332b24d9a02c453bf7761e22cc7cbf50fe82" }, + { 1883000, "72100d265e8d670d4c8ba26cfe604b4b4b3ad8e52a4aceb2eeaf8559f8dcb0fb" }, + { 1884000, "42987d18a1b20a7866b1406badc46525015ba3a4b311fbb24585181e88562777" }, + { 1885000, "1918afd5199ae1871d967df49847d68992bc2dace6b65dd11a84ab64614822ba" }, + { 1886000, "d2b9826f1f70e6bd7e79e8c627158d7bd40df79ed986f5285e4436465c81fd3d" }, + { 1887000, "5c8bf949e88bf21ee3174af2a039f094801ec48e6bbab1f49d6330da268f38c9" }, + { 1888000, "d43bcb7005fea71ef89ffcfe1072e96b7f03a54ee2c3fcfa07aa7194321380ff" }, + { 1889000, "95ddce43625771498ed56ec05b3e2a94e661c3b9493e372a54cc8a213aabd08f" }, + { 1890000, "eb283d6104bcc058fbcd64d5ae5c7712154877fec37c4fa34d9a2d50930728dd" }, + { 1891000, "10b74e3df4cbf368f49216af901f4e380af1505386d034a01edb15018b3dd19c" }, + { 1892000, "513c8dae893c17a4eca74713ea9f6658a3656233a66b140f850452a698897c99" }, + { 1893000, "7ddc0f7d2eb4d11bbbdbe82ec09f7c96b85883ee34b0d1f610688777d7ee68d7" }, + { 1894000, "47b114575c9ee9870344231a7c62983f526bc24b2e526098c32eb3859669dfc5" }, + { 1895000, "9251bddc9c6f9bbafe32f44aa9d72795f7d124e9ea5fcf06166e6222931cd133" }, + { 1896000, "79d7af703c0e825176219285240440a6457de75941bb73ac1d1b186002e0070c" }, + { 1897000, "00567e0e8449c29ed9c9cbe130ac4360d6e72fbecc3aebf29824b94921aa19b9" }, + { 1898000, "7aa40d404b7299d10fd58f69a5fba4c7a3a7f6885f604f586a06a8882366b8ad" }, + { 1899000, "671c56de195b253a1a8ea6977ab3762b1222ca2ca931213b2e0dc98dbab0e547" }, + { 1900000, "377d439a17bbf27b41e9c965e5586fc7321fa73a82a428052e749949566f73b2" }, + { 1901000, "7a5006833b16c01efa4bf2ecfc251286d610b7cc0308e415ea88ab25bce08b69" }, + { 1902000, "1650b54d4fb59bd5a9f4dd034d6594e391606bce69faa75f2d25e3a7fe2119e4" }, + { 1903000, "c0c6de991dc2235fc2bf2166094300ce62d7a2227e65b302ee04a7950202fff2" }, + { 1904000, "6123d44df9bcc9770fe50a2b041ca571341012a2ee9b3560895f1225abea5380" }, + { 1905000, "4f1f881a5c135d37130b839e56a65e90f1a991acc8562575f6b73af3651c7fc7" }, + { 1906000, "0ae084daadd67e8cf0a4a91701c43a16d91a29bb1b0cb9ace509ce846b6a8852" }, + { 1907000, "cf04613a6afd7315fdea3d75cef66f0d59646890fa1cd0f93dceb9c2bd0eb0ab" }, + { 1908000, "1f19c986ad10992affa2a9c06037bd28e26f22a7cc4f68dd5b6ef063f957ea48" }, + { 1909000, "4f50f4f42c7bf234c37bef15c90a6295873c2f003884b65d22ee08d38b0d6a10" }, + { 1910000, "1141fab871d851e38f668a938b1291231aae7c9f5ba93a900aa2a8e7b26c65df" }, + { 1911000, "156db2380b5dec8243e196f48f842dbe77acb8afd034cc2872bd27194d818588" }, + { 1912000, "ae8df7ad3dfccf265d9d5e82a30dd2971d8341c7be23e1e18dd25c52e2da1528" }, + { 1913000, "3bc078ce75e6a0b59e6d6c3d6567e255b436b242aaab97f93f1e651df5bd7e07" }, + { 1914000, "10c2dc159c1e74acb191d8affc9c420aae58b72d962553fcb345a1d8a8fd108b" }, + { 1915000, "0e9a6d5ce965f91946bb40e6823d21685f869ffdab01491419fb3feded835c01" }, + { 1916000, "60b41a8d449a39be6bb5078f27ae8b57ec5421e18a5e4a2a53319f5c801b4c67" }, + { 1917000, "10e2cedb84877d7b480bbed6f42f02f42a91ee1bb2aff1454ad53b6a95a4506b" }, + { 1918000, "a9a650fa216162eab7846ff3a9f048793f0965a9231e75d0b27ae1a239b6e9de" }, + { 1919000, "3b641d02f4f3feefd972f672f9414d0941d741f187a3303cb37edc911c920d4d" }, + { 1920000, "3b6d0b89aae6ab15a75c75f5e529a81d41120661d48ac0a9470c21ecfc85a5cd" }, + { 1921000, "43feb7f69f41e7f1d64edaae333e1f3d0f7caadfaa5c75244a463d66799db75b" }, + { 1922000, "fc77e1a9320e2a03f0dfa4f2cf8f444af95c7b7f9fbecbbae98defe16659cd8f" }, + { 1923000, "2cedce0c95a240ce8fbd985229759e9c329f0954243cacb9bc4e486dc60999db" }, + { 1924000, "099b95ddf6d32595076615ad508dceeff20f8673bacb68c5ceba7784d0655c40" }, + { 1925000, "019a1349c2db57aaf8c7c96d6a0fc9db5ff19cee3fbecde0314b1354e6ad0862" }, + { 1926000, "48d84e00025081f149cd6f4017e75267c34fd0469ad3e4daed52c3b1b3545127" }, + { 1927000, "505ec5d3d387d52ce10d9fe10fe5a26f7462b4c632004ef090414c3fe98b148d" }, + { 1928000, "3a62e55db0a02a6c90722ecbde3b35f024d920f48ebeba495cd0ed7854961d3e" }, + { 1929000, "690e70b0d7f2eef52582e90e31507292cb8753d9e825208b69aea300cf915cbd" }, + { 1930000, "c3065e12de2272b5fedd91ce624ce6ba115fc7e9051c7641ad36099d5885c322" }, + { 1931000, "7c61f2d6b5503b615cebf68933e8cb8d2fd8c1e75a4c7b01fda6461ea3ac9ee6" }, + { 1932000, "67f23b0acd3a427eb556a8c99a19cfa04e39c2655849acdb1bfdab27898ec4d3" }, + { 1933000, "b7522683f9b87d4f08de643564f01f99914e7608cb54cb4692893aa2136f0eb9" }, + { 1934000, "03c6eacbcbbc3b8c716a88b2197c490e9033b56878cedcfc87db3629b9cf2e0f" }, + { 1935000, "d4cf9ddcaabcf67c0c148b61a940b994959e7098701b0ab1af5f5d8c00a5ceee" }, + { 1936000, "17c9db2ff563251af6e1b041c420497ba7f4809b5d9dbdb3b332323b3c0a2595" }, + { 1937000, "e31bb3fc2a767bc6d8cd8f045f6234a4148b2631a35d3b7c13a0905cfc9e96fc" }, + { 1938000, "50400879b1859eda8d847efe576ddf23589f6e7edc21b864671d2bad4aac5fc8" }, + { 1939000, "9adc4a182011b7132689c070ccad2b3d95d876d2d0268f312b3c46953403b17c" }, + { 1940000, "bff23a3fb969755b558df592f7a6a0e920e7118ac2ad74ac2e0886ac206ab485" }, + { 1941000, "4814c3c6feb7d5d946e9ee48b970fb854f5f2328026e4075966955808c1ca83b" }, + { 1942000, "ca615ee1ffc543b5f8197fdea78bfe1bf06ed462e4549c62bc6ced22126d8a86" }, + { 1943000, "f2050d9dbd6a1476a4d7bfd8b7be75a6ddad465baa0ad70a841f87bd58c6fc39" }, + { 1944000, "57c204ccb1d7f7c44c396116e983257c80b8150f5b776f0d768c72744ae124bd" }, + { 1945000, "51afd148913136d9c746e79982144c4718fe5758e09fe62487bcfff03ed22ff4" }, + { 1946000, "58e845f4ec67c1658bf7556af7825010be69b9fa426a2a0317285a5a438f4455" }, + { 1947000, "896dd713df7633601c72e9f5bd59effbd2a69b89ab4a5ced2f5462a5cbcc3c6b" }, + { 1948000, "2108cc8419c5963a2e37f07a53cb793e7bafe2e324a6810c866b5a0a0c347f5d" }, + { 1949000, "cc0a3bc455022aa9af797d94a97d0b93033301c97e3992ac7be6055d3b1c926c" }, + { 1950000, "79cf71ed3634245ac407c4e10cb519cc748f6a786fa93061875ede7e0a2f08e8" }, + { 1951000, "444dd6b60b3006068cdd655ea040aaa986322650b7f69ec6ea545f006c7fc421" }, + { 1952000, "2017b61238d3ada51df5411ff8dd6f25528886791884a0426ac97313bd2f5d9e" }, + { 1953000, "a036a63374697b93ddb2ad2fd6171bbcd9b151bcff90dea72ea0e131072cb2d0" }, + { 1954000, "dc94e8f613394249daefa453e171275297226da9fa20905aa932796cabebb3ec" }, + { 1955000, "754e1b2f1b74c14f6ba858f74122eb4bf4495e1c64ab696c6e7dfaade148b681" }, + { 1956000, "c2baccc1ce3519b85fd495f4c67a1d55a37fb05be37d1db95d8d72eea386c77e" }, + { 1957000, "2fcc058700a2deda2d8bf23b1752b1709b49bc636ee7414fec5fc51c7a764b36" }, + { 1958000, "686971e94808702c0357bbbf5854cb6b234ee692ca34886542f5d5a454c5ac7f" }, + { 1959000, "03ee3218f445db7ce4dc8a4f6fde3b6dbb3dd8308596a5a95c2f7b91940197de" }, + { 1960000, "c0bcae2a889565bf9395d3baf734465766d664a51098c7d9d97899554a67870e" }, + { 1961000, "bb359b4aa1f496cc547bfaab6cac62a64cdfaffd65ed3fd46b5e27653f704724" }, + { 1962000, "9550c77ffd130bd997d024b85f6c5bbb86395d39cbd590635243a045bdeb81a8" }, + { 1963000, "4c80f0ce0260f9c6531cf96613e86ffce77e41dd1b89a35ce25cdb24b09ff37a" }, + { 1964000, "8fa4e717dbac56a13a7c34a981d77240fa603ac25dd60dbdd6ab9de1c5194455" }, + { 1965000, "7d76bc3ddd35be144291984859ab0fc3df19d6112c9279d902bd6969600832b9" }, + { 1966000, "a1fb10471be96dbf183d5ea61e70493f6d04b88c938772cb37c8bfcddf019bae" }, + { 1967000, "fe8399ca2014cc6a867cbe6e35d99ef55913ec64aa67a799dbb40c9f31c5be9f" }, + { 1968000, "09f1f4afb884c4aa4df8a7fef8c1c41d1d10f1e446c1f76c36658ad9a21579f2" }, + { 1969000, "2566de0a4efbd0dcec61c3672e33875c97ea5bb91a9b9c6dd666065f7aa80bf6" }, + { 1970000, "a915878874d13a1c7d3b140e663172a77bfc0717446250a20ec0f38165648217" }, + { 1971000, "edf1cc6cd9cc481ed4943764fa1fd2073c50a0a9d2cbeb9b885dbb377fd0079a" }, + { 1972000, "7f4a5da87495600fecf5173ff08a98cc2471af0ed6b6cb219651fb01f87c6863" }, + { 1973000, "6ea7b032515e16d20d47a421e29575c5f0919a5017b7bd7a12cb7220d3f617b3" }, + { 1974000, "ea1f5cb8095b243f7e4172bd5773c281ff2650cba6dc6704a3cbc6bd27084b36" }, + { 1975000, "690d298a08d834c6372bf774c820af4fcb997775fae0f920c487d49c136be572" }, + { 1976000, "2862779a7a2d2db78ef17920300cbeb78b1920bf40d8a331094aa7e5a580aa90" }, + { 1977000, "4454dfeaa0c339dfaa483998ef43200cff2b613bcc077d58c4bf31ae52f844ae" }, + { 1978000, "649d34f38dadcf4110857256ca193de3ab3a251ebf32cee5ffd0910f5b26654f" }, + { 1979000, "27d0d8da744d5a6ea02a9214fbb88b739b493739cade081ac6ac1d742f40bb1c" }, + { 1980000, "86da5931ee68bb9726b0eb0c909f51593d5b2a91556ca6307c5bb6d569588423" }, + { 1981000, "6b3c621ef1658fb842814ac6a15799ab966f677d7e865f04b32223af7363124f" }, + { 1982000, "75ece9ad8da8c07b82a4daa57600cdd32056535ba0af4a44205c9ac382fc4e06" }, + { 1983000, "b3319b75a7449238f51afff797e5d6ff3f55c994cbbdeb554d3142df2cd078c1" }, + { 1984000, "2c8de080cc5aff927a03c07875ff96c34f2e8dc13e93614a5d3c0507e4a01e13" }, + { 1985000, "46e751eeb7fe6ef8b455aec2bcea3bb9e7a1aedf6df6f68bc107fcc125d76e8f" }, + { 1986000, "6b2b163abf7e91756ea4e3a1b94e67502386a50383df3916f260def49552c7b1" }, + { 1987000, "5fad2562eb5111f6e15f535e01d304aa1c1f6e1f5b376a663d255c38d56b74e8" }, + { 1988000, "585206e35d341bbcfa5d002a228d3185bac3253377784b6a63980217195d3f5c" }, + { 1989000, "d5744d5f7056059ec7fb68e7156751ed6cf7184a11e44fba46bbdfbb67cdf3c1" }, + { 1990000, "2aa2fbe1e4d0632a1dbae90e6085c197afa9b5d3c09b09c2079460f2472c5ebd" }, + { 1991000, "6260a032124713e375ee18b0432a61065d68520705b040ff4491354bed1ca787" }, + { 1992000, "d9efee7d4a7b71188b74d7665969c8977f501c828b51968ec1257b9318447030" }, + { 1993000, "53a8918ea2aa73aea163e4c07f2e7a3b5b4efe425eda21621d64fe6e1659e64d" }, + { 1994000, "cedd12360deb216e7f7e98b9a875e7b10ae0ac8f1c8b1d27d3884145b8d9d9b5" }, + { 1995000, "8935cbb89d786887ce5332feb0ebf9887048d79a2de0c6e4e4d74ee967bafdab" }, + { 1996000, "5ea833c1fcdba69c1528f7fa7f9eaef17b785201328c3eaefd2d26099f68ce0e" }, + { 1997000, "a7103d078d8b69da49224c9b7548e8df57cf96deb092ef3cf1a15ce84df5d7f5" }, + { 1998000, "d6be50f46d3a98d829856f7d907ca8c03412cb7b2b13a55bd62f524a2460b91b" }, + { 1999000, "7b42f2c7924bf715b59b770e430f9496ddac6b55f569929f82009787d8659830" }, + { 2000000, "a90d79cbde562d72fd9510f1316c94f52752a33466b69bcb90426ee6edab9db5" }, + { 2001000, "fdb0dcc0f37556f345e3f2033dbe4b68d747bf16338dd1e5bd861937031f650c" }, + { 2002000, "8da0641930176362f85c86d4fb185f26fe118e8dc5f12eb97dcdef16799b3dc0" }, + { 2003000, "5e90ecc0be98381cab639f1a41e8c34c9fc688d6cf533498d3730f8e0589c65c" }, + { 2004000, "24d984f3ea91626faf12c21c0bb55678aa893f9e357c406d45c2e924559ad1f5" }, + { 2005000, "0a9ea722647cfd82de3e28bf35e8cb729bfbd5b87c3faeca5ca7b259d6a025d1" }, + { 2006000, "58f614dae3d63dc5ba302fb2ae15e5b5df14c618ee7ca8c164f855655a8f9476" }, + { 2007000, "10d4471e871d14312b7b9fe11a8674282623691c93734ebfd41339be927fe455" }, + { 2008000, "886dce7949d6189b0cf381332b39db84355498b6fa554e18b44080a5139ba847" }, + { 2009000, "3182f06bede9b65fb30addaaa907ad7773072dc166055a688021edf11e75a16f" }, + { 2010000, "17812eab013d0cb587f601fbe3fd1f3b6a6d87eab3a6b5f6abe187e2f21f25da" }, + { 2011000, "1039787d13f78ece126469b608db9cf1aa584b64c128d197f780142424d0662a" }, + { 2012000, "036d8b8d359b710cd22b2086e29d8072e52b7345c560c44bb3fb1339f9bf2bcc" }, + { 2013000, "b17400470a4b291715c49bd51cf6dfb7cf296b6fd429b900e1c015d79c575b74" }, + { 2014000, "220ce88d634fd5f948ad570ebb602e9c83b8cca19fcf84d7cf25bf919b18038a" }, + { 2015000, "365840d951e1a0eabab029710e0bf18eb5d6d102bcec736d801aeb1a16da2fee" }, + { 2016000, "bb2764f04e7f94f064f5f1bdf8e18aae824539e1983b1a9b5632ebb98c7a642e" }, + { 2017000, "1e067cf029d1b84828f248da7643ddfb9286d1614debd0423b12d4a87165192d" }, + { 2018000, "faac4cb9f5fe6ec14a74729a87b7515b100e5b3fab711c018104cb1981ec6d54" }, + { 2019000, "c279a0b8b6be1c85bcbf72606435cd981f561a69d3c8e56ddf6df6d0835f7149" }, + { 2020000, "8b1de891543c535d8ec084ba579e1077ee44f052af24866dc7979cda29658475" }, + { 2021000, "a16ba954ab2f4c77cac09fda31f960febc01a9dd2f9c5536ddd18019d246fa98" }, + { 2022000, "38789a4f136cb0dddb26440e90208a84c1f4e1bf3bc2b51b39209a21ede61a49" }, + { 2023000, "313d026df85cb50a92976429d0286d8362d59ef1b38935ce7b08c981a43754cb" }, + { 2024000, "b669dd5e1e24eeae8586b454083c7d2a690ad94ab82212f3eb8bea13f85480b8" }, + { 2025000, "ecb0134deefdba3026083926b6f2a4c0342336f09532b1f4ae0c30855f1ed3c2" }, + { 2026000, "6117484c2c3da568ee408309f9ae8b604a46b4af6fc3504fe7da8dd0329ff6a7" }, + { 2027000, "03614844c397fa77550c80d4ab7139c93dfffadee70b278c446a8bf8c8ab77a9" }, + { 2028000, "9e82014a80ada3d0e5486c0cca7f1182f6fa2049152812438652802df557c678" }, + { 2029000, "41c4344b2fb053a5f434c4277582f5870f7a62742dd0d876fabf28624f63e691" }, + { 2030000, "d351927bc2d4247ba150855aa20da55c880eefc904202dc9d39ce901eeeb6903" }, + { 2031000, "443d0be0f22451bffa7524f25c5179d11877963de86f1fc771b7f8df748aac5f" }, + { 2032000, "9c664540c41304571e8156bb179d5d9b2f157ae8b3bd4888603aecf04f4ad752" }, + { 2033000, "dbebf59be9f9d4c94e393ae4c466e86689b331ae5c55c2ea10332841be04874c" }, + { 2034000, "c8e786f1d28f9c412b51b1221d22285719e65674e4d1f63d3027b005c52bc801" }, + { 2035000, "70e5208175f41c2ac7554dd052cc7d85e27301a3da4fe5806f62c6a9507ce137" }, + { 2036000, "27715bff95e0b75e9efcdc6539e6b3766888396d717d4d2829fc515eefc9af26" }, + { 2037000, "95bcc7fb3624ed33970350892b423b765d1466efd425de8f29f0ba22149dd162" }, + { 2038000, "3ea715e1c3591e5fbfbb11ccf391fbee7b27947d8c97d5e7e4c25f685b66e4a3" }, + { 2039000, "e8466f885cfdcc50cf85dbd2bf4b78fe1522f40f0330f5ecd7f556be40ad3eee" }, + { 2040000, "248ee7acda6c0c58cafd2f3e53ce69515e19941082a1e9620fb273e935ec5048" }, + { 2041000, "6657a3f38e63fbfb0c128112c3ef7897b14c55f6a88aa12eeffdbc7bc3f72e9e" }, + { 2042000, "a799d464ff47ac37d0102d74f9665237c57240f09efde7448d214f06fb93c02f" }, + { 2043000, "00570dd2a1ae3221dc380e17983c02e2cc43396f4804e2888ce8ba0996928fab" }, + { 2044000, "db0db0686018cb23c0bffda0f8ad8c8603216fa55264dee18393a006b1a13741" }, + { 2045000, "001827dceb842fe62b8aaac484448cb5bc44a5844254120a9c86214e82cc12a5" }, + { 2046000, "e4aad908ab98e9d42c912772d66a9438828705034dfd8163a143cc4108fee5ac" }, + { 2047000, "ca4ba73c81421d3bc7c37e435db329b860a543e62907aec8451200634ca4f27b" }, + { 2048000, "a7880f2ea8437825855af2934689ccbaffce19c70e0a5b42de24e6f7a82c086c" }, + { 2049000, "596108316abeb8e9dfe294c0e9d09ccf6b62f18cc4f0754c393301d394693e6e" }, + { 2050000, "5780eb85ffdcd94cd2aa40296e997d856868a7745b6fea1d599d068f353c19c5" }, + { 2051000, "9a6e1d82933ef1c66d7b005c41fa31916cb3ed8ec060fe4031be87d116af520a" }, + { 2052000, "180c02f681fc3314f40f02c0fb349add492c791ad558f959c57a68e60882a29e" }, + { 2053000, "f2d3862a6b4cae8022a2886123bd7ffec964c8e421c13937d3b6c95c6c84b62e" }, + { 2054000, "3fe4a46d0eb5672dddf5c514fc1876e01a1d994da65a993a94844ea97969cbd2" }, + { 2055000, "3003a6c18362fe6ff76858e7cf61b511e16d99ae706a49eb1b71a0c03700956c" }, + { 2056000, "336aa0a97f3a10fc650ac9a7888720eea019335768466a3dc8512392e8c20282" }, + { 2057000, "5f4f1413dd0d4382f4a9e8728d18bf8e63f4c965a13658fe405ae49256f70680" }, + { 2058000, "1563939333dad2855068799fdc58150047e90899eab63d1cd24820a9a76335d9" }, + { 2059000, "ad27991697d5d837a397d7a39e707a2d52b48f4604c840642924f3a3a0b7fb86" }, + { 2060000, "c7117410e4b67af1cba39644290d6418f006b7649ba666653b4c03347dc8ff04" }, + { 2061000, "e10593df9c803b711ff7484b4da4ccd1d2a1abb8b039730ed39d8b73e9aac5cd" }, + { 2062000, "1c3a1e307fa6ec0129f6aa709e76314fb53e2cd4f2c3c78da2d1efb645c83455" }, + { 2063000, "f913c26cd72d6b19fbea2aff446ec3e16043537da91d43942d07e1ae1b27c6e5" }, + { 2064000, "839a7f92793e720567bfc37980afc32b01352d308ccdf6a2e9abe3797879da00" }, + { 2065000, "660144bf5c6ae8c65330cae4106a8272ca14adcf920a586e260f7346a9a4bc20" }, + { 2066000, "046a58af08d0a87ed7ecd27ee871fada186a4f1aa871ff7de4f11bc74d07bbbd" }, + { 2067000, "c0d6b277e69c8c828cff9d71563f8578eb9564d4f427071b929d691804a6fdbd" }, + { 2068000, "5afadd160d09ab4225c693f0bd4c23420db52ff0913a3c4d9cd008454d1af2b3" }, + { 2069000, "a851058317669522c733c8b2944890682a0029f1a7a7ecd77da5c8c166e9a20d" }, + { 2070000, "6d61abdb47faa8f8c1999f0d2aad4ad2c7d292757bfcdff19792a7a3ff8df760" }, + { 2071000, "94442fb86fd3886dc319463c78c4710da65043f5a95f047b30aa53d3a2bc4494" }, + { 2072000, "820e4be009831c631f38c2572e5f95a3be8360b914de1ce4187391d0e25971b5" }, + { 2073000, "f440ef07a3cbb6c0f3741fd2776e177a9047b82c579db7e4fe4ae4aeea988ca4" }, + { 2074000, "019e58920d364345dad6e43f4ebb28e869e02504eabac8211c428ee350b8e4ce" }, + { 2075000, "ff37df145ab6ebded1448d90e30039064ac6903712d376b2e39e30057078023f" }, + { 2076000, "b219112e3af6e40e0c954c4275fa47d92fbf8dbd429bbf07e8708c40c2d09daf" }, + { 2077000, "a68779dfbf649640006bec6a8f90f593f0e777421adc1147913b0cc3c552d1d3" }, + { 2078000, "7a962d04437e134be1297c2421842d6138e293541912bebdfbbd00ced93a03bf" }, + { 2079000, "650be9eabf0f472b4c3ababaec3ba6db3a4d31c072aa1f26e9ead52fa0802775" }, + { 2080000, "cc3e6a9ae141369db1e02012db3897855ed2f6a1ec2e5fe1aee00135b2d61717" }, + { 2081000, "184080d759094b3f75ad788245b0a4bfcfaeb014bc7b8415380a55ca48e74192" }, + { 2082000, "cf035e31215d380695bbbf0f16fc37bf73acd70089e44a76bad1efbef234474c" }, + { 2083000, "2adf0a993b5557c6733f32e00987f14d81e11d89cefdd99328c0f5f4eb3ac475" }, + { 2084000, "c4fc1ebe8704a6b63754bc61550e94e264d15b083abc39fb4a9683d1afcb947c" }, + { 2085000, "fa22c8182de4fef7318eaeadc27a6a95a96bfc6df3d5027643d6e7889f8f2452" }, + { 2086000, "62c9b1b33f653fd91c936ddf8d6b315e8b61793a52548364f951400d10a4670b" }, + { 2087000, "733239b5e5f16fd4935c9ab20256c9893ebec468f1291d45d1fda2730210f2f5" }, + { 2088000, "c64d73be9437d76a3426d82a861d9b7a5985487b53b276a5dfb022b9f57add95" }, + { 2089000, "2da2445636ef901b39b02a4a1cfe34f7a062b84528b88b94b1101cd269184508" }, + { 2090000, "24d3a03b86991aba123e5411cb7c1b61980534956bd17924818be115a93eb672" }, + { 2091000, "d81880ff30121189d64a8da4fbfd9c76b092d7b1011fd6ef8ee76dce2910b005" }, + { 2092000, "9aa0b3d813500842dbe35a8755fad66e5d526fac4258ee1e2049aba79426e20c" }, + { 2093000, "532d726b0f82cb92cda07df936cfb41f4321e5a55d18c30ad9e9abd89bc694cd" }, + { 2094000, "7d6b18f7b9ae1c54e4e335697e6f4811f51ea52cc67ed93a4f3e4abcc16f3fd2" }, + { 2095000, "2373d503d4abf9e4f46dd37b4d4db86f6e2146b032f65525a10d15ba41d4823d" }, + { 2096000, "d581c9789bf8fd99a2295818204100db70db60a31f26d0f7fbe1b5394a464cef" }, + { 2097000, "2b90c6ed224aa86ccc6cfd6d0de2e4d40009ee51b6aff043429d837e2d15de47" }, + { 2098000, "14988118799a8f7a3e9c8758a2e2533a51ddba18c12563e1673e3eb8f357c684" }, + { 2099000, "538fdf7a7bdd9045dfd5a36221bdda8f345100ae9ad465f419c983a26ba67ae6" }, + { 2100000, "affbe34e0e3a8eb133929aa70043243034e69e4cd29e572e37f4b3ae77a3ce3d" }, + { 2101000, "449c02fab4fb3a2072369a3ffa6d7c2d72011ab324d6bc9f8ae89663571026b7" }, + { 2102000, "86734a1e9e6aabfdde9e3e46b470a1e6cc2de4c135558639ad0fe0ddda4d142f" }, + { 2103000, "ce37575a3b442b389a11fcd6bb124e406016fb430ab185b91607080798b6b7f5" }, + { 2104000, "2af1ec17e7d7921a42d6befd4b7f05a0fe91fc49ce064b78beeffaa178c9b4b7" }, + { 2105000, "651f47e5816c013251fe173341be110c871ba54afbe8714cd8d2ef559a92a24b" }, + { 2106000, "d7772ff150f50e19161d7f3d6bb32626c168c04210457b6e52255fa069b84e6e" }, + { 2107000, "b33b5b7acd526a957a474fa8d2009bdd9f607bde7ae3ff1c1a2ab3c4d909be01" }, + { 2108000, "26fa3ea83837f275b11a8ab35262ce7dd827338b66711ce7eeb3b06fcef574c6" }, + { 2109000, "73a7890f913e2361215026f9e76ce52fdc34e5b321dabc70cb7deebe837c409b" }, + { 2110000, "2305398c068679d95ab41d80725611d5ef8d91b948c48df5fc7caf2171487d64" }, + { 2111000, "76fab55eb7ea7d94e6be4cd7d8b79732ffd3d4d313d2facb86b225d572237cbc" }, + { 2112000, "e1348710ce04ce2dc92e4765729d37745d29e815d7c1e0634de777fda255f601" }, + { 2113000, "c5bf0d1d55037bbb1a3f0321057b09b714c4a233b9c4bf3a797beb8abcddf4e7" }, + { 2114000, "b155483239c89982261f586d493afd9174d46ef418ca673777cb6e075025a161" }, + { 2115000, "9e0c350a10bdf25b73caf022be4bc731dfa95a2333233815e14e661c917c55a9" }, + { 2116000, "0eb7c421011d47fc2b01cea23c76ede950234cb463be94de9f56f693ec01229a" }, + { 2117000, "04c154fc0d7386b734d2740d725ee4755c01f00fd3c79fa23b5a937c51d2f935" }, + { 2118000, "7da7fc2d2562247befa055bac270a65b79b00c82c3e9ed02dd8b425e516632d3" }, + { 2119000, "9cdea9c7b2ffa063c9fb7ae63431ec6f5f314f682e2caee0e3f40acfc08ddd17" }, + { 2120000, "7d2540603d40fc92a56044060df4118ea4c8f191c5d52a077f33c60f37ddc4de" }, + { 2121000, "64bcaebd1d7b8915bea43ce2e332b124a73982c81928eb723e7bddb4b7c28e16" }, + { 2122000, "b51725acfb249cee76547174dca6c695f0504ac169664789fc249850a3ed6ea2" }, + { 2123000, "d63f032e504d010fe97eb746af331346d362b98b04a4a5d6e16aad0e999a5809" }, + { 2124000, "698cb32a3f1ed4a6b436b883482c91b5ba17cdae3968bcd0c23e24b6095f4fe1" }, + { 2125000, "436160f9f5991d027a270db5aeec584862dacdac984fdb0762237a272b8c2293" }, + { 2126000, "3b74f31837f6f24b1ee030caf1b2f2ad91fa8c105081adcff080dda60b36a864" }, + { 2127000, "9bc2c42678c1ae42fcc65fbbe038565014ceab527cdca4987a26d6b34481d874" }, + { 2128000, "a2ca3ba8f193e29f10d23c1d3cdda8cd949c27cbd41b5d1ee5dce8be5848eed3" }, + { 2129000, "01aa86894382d10d0319165915b8d2dba8ba64260a2704affd2d55ca6ac0b20f" }, + { 2130000, "24a0a11720366c8f85fbd5a63c9e2cb119c2e83a95bbcd1c87e94365a81902e6" }, + { 2131000, "4c13b463209792e378840ec332c5de23260a602bd232d15c1578c79906334455" }, + { 2132000, "4f687f0205035f09cddb889dbd1072d1ace4b7edcadfcb51c6bca44e7f5bc651" }, + { 2133000, "1b19db58c5d7852008695bab94f5de38bbae4c844d139eb4efcef3538d5f3729" }, + { 2134000, "8137131d94fcfa2e311cae34116dcf4e2698eea6f83d6abd98d6439cf860d722" }, + { 2135000, "e66ea675382adbba36fd92f5cf40d942b63063f6b5ac02387c33b3afc643d84d" }, + { 2136000, "8fdd76b214cc077b58bc823b8ce2ec119c7711cf08c1efb48a2ca3f4f779b18d" }, + { 2137000, "30ab7584f31200806e9382756e887da880db36427790cad841fc054274e200e4" }, + { 2138000, "1e27ad33bc6c0803b7ecfe271a498dcbc37fdaea3b0c39283267a43075cc415a" }, + { 2139000, "a25b5450cfac1b6ff9fcf346d88bb3b00628c0c08e9f7f50fc8a4c80b1fd1b17" }, + { 2140000, "4af501f18a7ced7fa8ed85e54772ee59b4823c2728124bfba159b85a3233440f" }, + { 2141000, "254d29fc59d4b1a29dd60e8e1c80ae9cf64fc31f59a718b0d1fdc590e65c395f" }, + { 2142000, "447144e764fe7e512b6db7a1e07f2a01da7eb7b5abd1a7eadc016f5a01cf0661" }, + { 2143000, "77394b6266b81b0603ef18ab2cb7a2d75ddea139905eed4c48e959cc083f9ab4" }, + { 2144000, "3b4255ba9efd556828f0cf204ca2caf792797a4d35fa2e05861a01525b2bc2b7" }, + { 2145000, "ca02a47fd10166d45678d9079930f0588f7250c7b712a368e3c0840a297030e8" }, + { 2146000, "fa719cd05919ebd2300bd22733ea4cb934178554882ceff44afb0cc006a20f09" }, + { 2147000, "758093d2ed99087a5712e76f81e224c7fa6da3a7af38bc66396d371d128d9ac3" }, + { 2148000, "baa77d343f47c59da6957f5441397c9be7a83c20cef837cf7c87ba649c617852" }, + { 2149000, "1d5d0dfc2eb00656c37714afc2428d81749e4b40100b674872f8d78f6b602a45" }, + { 2150000, "9ba1a3eeaec42ec5116a9e53cf3aeedde4dfe6c52848888470fb83c81e18553c" }, + { 2151000, "6524d3ab3f870fea241e4dd42091b65763dfeae1d69c2ea23b27971c90154e8c" }, + { 2152000, "f8530f17583e810964b14d58da62555bec2f42f230067c169069b6cd532827af" }, + { 2153000, "8e2099e43516a110ef42d62ceba058ca437dbc4455d1590e4490836be0abe778" }, + { 2154000, "87e6e76e10d285e135d2f8a63984be3a8883133000ede485ef91b3dd4b0393a0" }, + { 2155000, "3fd425fe78d301503fd3badc49088ca3f18fa95c96641ebf3aac847702b2a60d" }, + { 2156000, "590cd1cfeaa44445322bf80f46e4737276af34dc105856dbd773962af5547449" }, + { 2157000, "1819caf34517003528c28bded873b54767d9c0c49f41da17775650dbb4650667" }, + { 2158000, "d47798e294dd90b540fdebb9ae2c11cfffcd99e26edb989b9e46c6f501eed0af" }, + { 2159000, "6d7eb22a5d7c999ae3090d5159d6910a7ca9a9d64e76d8bc287e6a11893217ed" }, + { 2160000, "b7086e10bc39b5cec783e07adb9a0389d8e1a644230a4271cbca5a84306559a6" }, + { 2161000, "6784c440ba2ef830625fe20b615fb6167aca91265e8cd5e569df50f827601800" }, + { 2162000, "631706cdd92ef0cb64d7e573efca99e50e544a0ba3be02e4024f72baa06745ce" }, + { 2163000, "636cab9c29d6ceb713f51f454a7906f0e997389c5029057b535a4459ea449607" }, + { 2164000, "c22b0eadd83b956aff1adb64048fcafd642c765a4a47dd4b08ebda2eba233a48" }, + { 2165000, "2025ebaa5a5dfc2544e59e365fa43e675128eb4849527f601368d093f07007af" }, + { 2166000, "4ead2fb3bdf10d052e91b13dd35b7d2610406d4216be331ff21ff24b7a89caf7" }, + { 2167000, "a2c753f146afff71e6e07ab0327fe9376d6bc6956c3e9f46e27e40fd7dcd6276" }, + { 2168000, "a459996824d7636c953b217da724a42da4b105a79bb002749fdcc004583bdd52" }, + { 2169000, "eb1f314e34b1d55e52d0da81226824daa0c1e2f993efef7b68b93a7c000c8a8d" }, + { 2170000, "3205e12692d7f6c1902a4931307f2f37c3b98160065fc7a32e285bfec2e54ab9" }, + { 2171000, "d61f9acd8b100fee82a76e7a0c955bdede9cc5ee447c95c10b44d0de6c9f9112" }, + { 2172000, "da34f84dda951540df42bb4c375d8e6eb07b9e2298097367f2bc92a21ee4c610" }, + { 2173000, "1ada0ee6c2cf9113026c49926a194eab4f0ba25fc714e44b3863545817456041" }, + { 2174000, "e94871c2a2b5ae3e16f9d945491dae4d9f1eda14d83d3091ab60893561f19130" }, + { 2175000, "5873dd1597b6123aa01e7f6cd38b986b3432d845b27763399a670a4c49e5b068" }, + { 2176000, "47cf1fd022dd685f431aab3c39054a7c30eb57176ad0f9bc32db7b7c5aa8fcfa" }, + { 2177000, "c0514ce93525e3c735118434ffc7cd7294aeec6c827199fc4339cde0a9f5128c" }, + { 2178000, "c40562c6c9175961db908dfee44423f98ed48b479246385d8a634113ad7e5a92" }, + { 2179000, "4799eb15ecdbb726270dd3eff1c1348d4adb8b66d4d4727bb5bb7e7b5af31f4c" }, + { 2180000, "5beb3fae4856a4bfc0a7616ecacff0a2b80c92d93271c503d448e42f9b44b823" }, + { 2181000, "e13fb4cc17388703af41eaaadeb151d76ae547884617d6b42b644a8d3671c648" }, + { 2182000, "642aa060a213e6d953df08cbb0c19bcf4a920749918302b6945d3e6eb9de7bb1" }, + { 2183000, "fb97875d2b363c5d59114e3f4115c24c0a9de333aa013e8d2158aad18522caa0" }, + { 2184000, "50b9ca2d85ae3336300d3170b58d40aa3e963e0c7898798957341edb9dc1380e" }, + { 2185000, "0c3820112a3574d4b3ecdd236df17f182431c79b0270dff70126b4587fa6154c" }, + { 2186000, "52a55664d933e23b630363c264002e501f5a3f0f51dad0f3e6e5d6ef981e0248" }, + { 2187000, "4249009f9cebcd236c15fe743dd8fc44b31db5069f4e73e146cf49cf62219d74" }, + { 2188000, "1a3279322422ff8dd01cc65d50418e6901016a8755df51e1c6899a567ac78812" }, + { 2189000, "af510af2d906544485eb00d85269da5201e9ed61cc3943ecde9dc53f0096052a" }, + { 2190000, "d12e9936cd2e0b0e863498949ff2dd7c85ceb5427bd551cae36b2bb726dd0dcf" }, + { 2191000, "0867375fb3a5c7d5a3c30425b09608f2744589c3b0dc30dfcbb62798cece87a4" }, + { 2192000, "108453aa3e117b0322eb9e947f4f0732688b8664d9da1e04068512c8ca1cbdc7" }, + { 2193000, "e4fa198812790f8d5089ba17451c9b81fe2c3220591068ce602fee1c678cdc0d" }, + { 2194000, "a25bdaa6bd059c73eedad5f0771dd1fb29b58cbd6dd2a05f27df9abef9a3993d" }, + { 2195000, "13c5dc49fa185569341e98167feb323d8243d00d173f700d6398c5845c4d2533" }, + { 2196000, "bbb31288f9c5917b693e44679fe7d71329435b4df16a20ca660358fd31791047" }, + { 2197000, "47007f5503c011ff06c469d8935208a0676f00a36e1501ce475555a9c5387f21" }, + { 2198000, "5f2662e817a54f09c73bbd115299892839b961305773f03422a7274bbce8b579" }, + { 2199000, "8d86a796e1f7ba42b3953f3772b2b9b47bf144edc3c9ff8b53397ea347d195ad" }, + { 2200000, "7b75666b0c743d7c7bf9e6de9256e0e90dbe668f05c1736fbe90dea40e2ea2fe" }, + { 2201000, "c334ed5d0574943f25517ac154011a9eaac32d9e1528d1abcde88d0f14693e3c" }, + { 2202000, "8b69fd156b4f02e3aae17b409f34603a6c5506e2bb4b725770bc91c1913c95c9" }, + { 2203000, "c86aed5c54dc9dd23d547fe543aab8e691636b435136191b944b9b84d81aa1a6" }, + { 2204000, "4bdb78d2386d375e3956f042570587d109cd953afbc5212f91e88f49cada4787" }, + { 2205000, "3df20398d9a377ba6e88121900d1a3077157ad1dff81dd9ba62b260f08bd2a16" }, + { 2206000, "eec1915a092b38583c7495f8b6a1cd5f49ad57daefdc32757ca1444369650754" }, + { 2207000, "ac9339edd07edb0f049d49c62d4cf5ccb85e2ac86d9053f0270588fd7944fd91" }, + { 2208000, "a200047c346addb3560bfa31c8aa7e0d098e332a8bdf842f72ed2ab2dbb7a379" }, + { 2209000, "db70233321a72633f2d4d5a2b9e9277ab9d9ee530f9044e7ec3f06b18ee32b4b" }, + { 2210000, "9c38c3bff9ab0b9ef0f811b9043185266d1f35bbb958250476d0c3bd27000d9d" }, + { 2211000, "181d02d1e62a52e529fa01a0fd8ea2e905922e30f987b0ecf0596c93c7741603" }, + { 2212000, "d6bc1af53495bb9ee3dd0abe99a40aa1765ae62063515cf8a40415a75f1f45d3" }, + { 2213000, "32dfe1bb67bfa31d0446d35925f55fd53d0782fb81fcd4e1ad3195d29e505cb9" }, + { 2214000, "aca9fa8c195da5d56dbfa9c50b1a55a0d18d858553da29cca878c5c9dced6965" }, + { 2215000, "21dccc0b29993e7292cb3273484354e05c341e6808b02a2ea32a9c4aa527ea44" }, + { 2216000, "5a34923c885a6adeed00aa905cac95560b91ca7225dbc4b8ba535c7d1d7b7e7f" }, + { 2217000, "3a09f94b995439b5f27264f7868bcef30e991b214f15b697b3e43bda919cc555" }, + { 2218000, "8aefaf343689fcd9a862b23652fae22d482582bca3bff4f732db1df93d6b5217" }, + { 2219000, "ee2dbd935dab6a5b429494acb7f178e1c4477754a4dddf83f8dbeb6e28a27af1" }, + { 2220000, "70475415184d51f0386e4493c6255adfa89777677dc73daa45870cc395ad2dca" }, + { 2221000, "2ee1c6e10335893099a2ffdad1a1bf4e781b1bf888b1eb54e7146079fb084b27" }, + { 2222000, "d8ea4e0ca93e4c90d3a9ed53724856e0330142df5fa4db78db202396af4da050" }, + { 2223000, "d89ac0391552b66c81f416a272e21f3c854583567f94501617b24fdfd47383c0" }, + { 2224000, "9a30ef63b852a77f4a4c61bc119cae6807e2c6d1bd776f7ff16492a1085105a7" }, + { 2225000, "d9d7326f394f7ba41f8a089b95a69235960a2b0aae1293909a02238c4db34a52" }, + { 2226000, "963ba35e17303d4395120b48f0edd343f287e78e90a39c14d6373ceb1da8ab07" }, + { 2227000, "082270c5d088583511665670b9c21614a250387e8baf4d7a9de0b7f7456312d0" }, + { 2228000, "e8c4a0b28b2d696538b1648a06637b9a2a413f171708869e4d3986208eb7d193" }, + { 2229000, "94918ed945e05aa512aeeecddd29364d6f4a16f502196f4a4fe889e091b5e8e8" }, + { 2230000, "3733acb6ade0a07dd056afeb522ee6a37f276f68939dd9908d79c477bc6b53d6" }, + { 2231000, "e4cfa3baca1f00eeda3da57970a64c8811a59ed2d4dfe60ee4879499e1693383" }, + { 2232000, "2cafe814570a40fc82ba035c99e494a81c26e85ecf78bf47236737af844a44c8" }, + { 2233000, "0844b20c3a6070660096fb79eb675faad26b07c9c387fae58a6c231f9e707c64" }, + { 2234000, "7a0ef4c987021aec12dc0a4eb18608f0a195b0aea0371aeee356c8cf132fd113" }, + { 2235000, "43e251bfcccf23409ab212a5b18a2b0c49a2ca56eaa94436ea9e0256ac9b8dca" }, + { 2236000, "ea5fe254780228d19d8a27f6985407f88b549e9df1dc2f2280c50ea5f42e63b2" }, + { 2237000, "0dd0607f072062dd4184a34f3294e67f5a8ad14ce949af6e0c0a84cda650c6b6" }, + { 2238000, "ae7f1063082e3a1f71d817cd2f47e7de5b2707cabfe0e9efcf9c9def4e4d2dea" }, + { 2239000, "bf62b9020a182432b5aa44fd9ea00e2d60ee66f6f38f7754028e2c41a425457e" }, + { 2240000, "c1ae7585d61296b8b016b909c2e0273680bf700e30d172c8310f939924468371" }, + { 2241000, "a157b62256dde76ac2d5781096673df96f41e18e47b17d3982c483904b99a4be" }, + { 2242000, "755f582a80abc6561f97d8ffac21634252257f65c118a39e0a8c023d621c7775" }, + { 2243000, "8189de82f67b2886ddc55566abbf0daa7c1df1b36b73dd48a6e081486623e785" }, + { 2244000, "160473063ddd5e03ec5eee54137c48233787497da862970280bcee3ec20d171c" }, + { 2245000, "bd68e842759879aec30b198ef0df8e17958d40f374350b2d2221527448e58d75" }, + { 2246000, "7a4dcb47c71cf7118e11bdf5c1dd49e9f50908ce0044423a0e4ed782a4a50a26" }, + { 2247000, "53d761b43ccced5297f12b58f2af0a7979327c4570a19ab2a7657d9cc6132bde" }, + { 2248000, "0fed5484767e09df2cbc76e98ef1ca9865d9b5c9eb1b5f442a090f8d63d70c0d" }, + { 2249000, "ba483519ee63112d6f188027cf353bade93ae061fa049cf1e093cf4210bad628" }, + { 2250000, "daa4b44006bcee51edd9263ae4fe512c4b3ea1e8f46737b8acc6dbdb380a619f" }, + { 2251000, "baa7a96f0bbdf57d7313e5d4e9cfefa1ab784c5e5c038c84a43a51bcd736ad83" }, + { 2252000, "e354404ef9606863602a865eae21b99600607c21b818e4c6746db3455fc3f920" }, + { 2253000, "27068a24b5b60c5ec045a09ab781a884f66505f490fcc9be2d0d66344ca4f3a1" }, + { 2254000, "e034a2066a53a366ca41f17a7f5ffaf2b6fa31c7cd916d8108926d0c4eb7216a" }, + { 2255000, "2b5b1547c2dff5cb64b6ff7accee9f1bd4d4db319ce4463f8c3572d7663260c7" }, + { 2256000, "e21a19565a44ee5428376a1f6afad5c06971ea400f6cd7dadbf89b34ff68a072" }, + { 2257000, "de0c0aed5fdf3e36810c915373117d533dca74ab4094610abc0f08d795506cc7" }, + { 2258000, "5d474cd7103c8047b278b74219e41a395a8d979cc1d99f1052d5f9a7ae6c79fa" }, + { 2259000, "4a5573dbc5c8ebb01a8495096068ca6f31a23a58b4e67b1616ee52274240ba6e" }, + { 2260000, "ffb34fe002416c5bbd603b31fdd5738dba32037de3c66782decd10b73c9db828" }, + { 2261000, "79bc9f2e98103cce54dc3ba3c265a7c555ca456753e6a4fee7c5c4994719af96" }, + { 2262000, "977e594ec352bae9e19532cafc273b49e529bf939d4f9baa2da88daeb7e51e8e" }, + { 2263000, "e3bcbd1ff0892259d79944b7d4cee59c6b81c7f450d89b70087d47962a95c3ca" }, + { 2264000, "505323d6948934b33ea1c1094012cc85ea7544b3017549456bd14901205bc88d" }, + { 2265000, "7543e67f132377416de1a67fe5aa7a80576031de52cd7af110266fd5abfd875c" }, + { 2266000, "ec1fce7805db0d54618445612de62d1959849c26e92689eae1913923a2d0126c" }, + { 2267000, "427e6650c9371fbcda64cd902b42207a4c781d88bafd7f2a80e138a10cf6b802" }, + { 2268000, "fb396e0443159917ebad0a08a78a190dd1d90a97d440bba20d14165d88c3795e" }, + { 2269000, "e9770f3f5a3427cfef141982e79cd6ce2f4bfe8c2ff8861182cec97242c8bd3d" }, + { 2270000, "0b4317950eb50d049414e400a6f488c530d9f93875b62ec6e3f3896c96a88224" }, + { 2271000, "bbe32e8aa6e29cbd98647796acafdf02168d9d1ed943e04529d1fbfc0a7bb17c" }, + { 2272000, "947e9614d040eb97978fbd1482bafae47962e27ddead68150a1328563e15fb4e" }, + { 2273000, "a2611479ec9e2e623cc4dd59bc3161af44f12fd4fe01d897c1465accf9ce93b8" }, + { 2274000, "e76a6a528860db1ab29eaf73529277fad6af434df6247417366b72caa8bc89d0" }, + { 2275000, "b0e2a07494e186c5e4ba0e7d1fced62ed7fb352860e96cb3220c7991568179cf" }, + { 2276000, "c9a5852a070cded44bb25975962ab279916992cf8097810005713ad6f9425143" }, + { 2277000, "1d1ea83df25cb4046811ac55babb4318370696f26ee0b928afcaeccd1d8b91b5" }, + { 2278000, "3dc0d4924f06775dc17b09a4c053218a8785d05682395a00107106c40e9fb47d" }, + { 2279000, "7e5afd6d9fd5157dfa1e1eb2ed237811f34d24fdbdfd53af9e08a1972434fc6a" }, + { 2280000, "3c90e2c9bd14a35d3b47e36b609adca49d7c8d11e4ca244b3c590f925484670d" }, + { 2281000, "33725b02810c87b23a561671b8cc88266869617eff8722a61d294360c6800ac0" }, + { 2282000, "aeb73ba4e0224fbf5de9624db4423b8634d92993e6b08718be092960cae8dbf1" }, + { 2283000, "ed442690ab025dbeb768e72b39461d10e5b4d76c2b2cc111534b9b362b23e86b" }, + { 2284000, "7ed5a064954b24d5357ac66924d5ff786d6207655e9c494fa588c19af4e029eb" }, + { 2285000, "6b7ef1927f93040de5f5af4e54ceeec1741b36cab2c7bcfcd698966e9bebe10e" }, + { 2286000, "ea239c8c967ff7200dda0ace6a1a8f4343d5a3d782120fda9123c09e44496a94" }, + { 2287000, "b33785fe1656beca2a54a7b33d60908dc2f384332958a3fa25d59c0fcb1ac240" }, + { 2288000, "ca6e2c409864101b76db5c2af8dcc728172f97271b4c0cf92a3574e4a3ff194b" }, + { 2289000, "87ae1c42b2724fd037fab4ec9087619fb6efc546b84dff1db84f2fc308c8f28f" }, + { 2290000, "0c5a006caad2b37533f6d138e86aa88658495ea866398e719cac45188d7f128f" }, + { 2291000, "8f47a88442bd270af71687bc67c4d827c93345a313923d5ac2be0ca11f1c353a" }, + { 2292000, "350de82718fcb71c3e1ca07cd5fb697d4a30dfe5dc49ca144f0a39f484e71749" }, + { 2293000, "70081e64addcd8cf2f82a8cfd025a0e2617ee38bf131abfebdab76d75eba5b96" }, + { 2294000, "9b10b43d4f7fd56cdebf0bc4a4a972d5657e68b9d142fb203271c037fcbce4d0" }, + { 2295000, "5a21d694dba7aa81abb208d4dcf20e2551e7417cf73b0cad44d549f6e32e33a2" }, + { 2296000, "c6e64234bf4276308a29bff81e279889b44522055f3f25278e9dba81e76c5988" }, + { 2297000, "a15905eecd42a33b8d1f4cc320364c45cc5316ab917e01fe31543620d141393c" }, + { 2298000, "38c33c729b06d995f063d80698a14dabb72e294ec91da91f731096fd5c470231" }, + { 2299000, "a7828cfb15aeeba9884c4a0573b60795bd9ad9ba2b2e82833c7ef69194555097" }, + { 2300000, "fb81383ac4efe25ec29995f8e85e1d9a16140373b31ef3ffdb193d691315e0ca" }, + { 2301000, "65c98e237a6b3890318d62e7be2b4abc019d98b05fc6cfd593ca9128c2e11e86" }, + { 2302000, "7750f44d03ab314e1abaab04b82be84059d20c64177eb4b4a3746feb812550be" }, + { 2303000, "842ec42f1b93ce5c61c56fabc609e7d4225d402ea8efd38bc57561796a06fd4b" }, + { 2304000, "e4c7de93fd6596ff699b3a284974c55f389372f0d53dfee2e5d955fd958fc7c8" }, + { 2305000, "6a14a12bd8eac29df964ea8cdf559b3f686571088c26c9f1066bb7954479255b" }, + { 2306000, "38e6dd10f352425ac307d5702e1ef0ecef7ec5c2ecdbbe35750c5d31233786ee" }, + { 2307000, "86e0384f8fc9f3e93748c1524c3da8fa39821808f17a2a1ecc07aaabab31502b" }, + { 2308000, "f3dc242cd337acbd65def8eb7a203bde2ee9db0fe9cc6d3643c06751d573ce5d" }, + { 2309000, "80c25c6d72d10410118a170098cbb601e483a123666539915be02063a9a5759e" }, + { 2310000, "6158193921a37e325d232ab6b34eb58ef087e171025589b9ad69c8b1360d4e8e" }, + { 2311000, "900f162e676c4512c6c7937411bcabe04b49719eb036e864c263804469703a44" }, + { 2312000, "fa9aabfc9da426487346a13035b48407bb0deac06c46e24d53d8df9261123837" }, + { 2313000, "11750c5126c15857631ecf5c4c6fe7ceb7ac58c73ce25c2ba45488c0d64e1d72" }, + { 2314000, "4b19cf58bca9ed1ed254dd13187762716384f01c8b939a9b3c5185950062a089" }, + { 2315000, "1213ce12fd90e0727ac52d8458ed87ee6d8c63eab6c395bb1942ec8d8bdac575" }, + { 2316000, "d98f5606f9ffe1bfb3e172d7da017179cb9cca7f4ab6bc9f71c14161edff7fbe" }, + { 2317000, "7c3dc0e15446330d92656bc9b4babfa0a1e819a8a0d5acbfc17196adb8d6d2e2" }, + { 2318000, "3edbaaac7f8edd02477d4be0faff408935d804bcb8f360cbfe231f02e088cb27" }, + { 2319000, "91f5b6d26f0e08deb2d8f19310566324d0574e84cc8f27fd9106e3e3380c962c" }, + { 2320000, "51fab90ed2af5a6dc4eb18ae3d5b591529ab8cfd7d49da2b2b4408dada68745b" }, + { 2321000, "c855fce103663cad7bbce39c5df77ec6a474bf999a111d90b884987b5e26fc1b" }, + { 2322000, "42a602344b180e1c15f01f991b56320e7490187aabe49df8fb765058069cd304" }, + { 2323000, "ecaa36b93f25b51a1ad07ff959386ef255a3cbd8b4e3850efeb54a51c83edf62" }, + { 2324000, "b76e5c05e0f2445e4601f3c418d4a9ae4bc073795dd442d8040df8b0ba790220" }, + { 2325000, "0834f8a68a5ceb81387440eeaba75c67e6a811eb62c5079785b72921ef0e8897" }, + { 2326000, "6ce00af357920fc07c30e2f14bb0a89b4ab61068354b4e27ef335a41ca885b71" }, + { 2327000, "20f1e0b25e71b5c32b7bbbc294f4d30ffb416d6bc49ab7ec2c3a3af6797d009d" }, + { 2328000, "5734baa189f470c3229d31d764cda5abee0f1b93e2bfbbd09b244959287279ed" }, + { 2329000, "69640e868fb4b7fc6b4ea9e32c8994271816f161faeb88c62242803f1d4fcf8f" }, + { 2330000, "f5fd093b69a744f366b44eac37228e10040ed1993078f70344c9c52bb999fa77" }, + { 2331000, "955b0d1b0810e9c57b7709090edb865b66c2c4f384be28c0118edb863e3f76a9" }, + { 2332000, "6fa1fb264c37ff092bb6fe380d4cb3d3cba00772ccc78b2c30da5de235211979" }, + { 2333000, "8f85e52d863515c296622f7520237bf28c8402544b636f9fb24cb1be2eacb973" }, + { 2334000, "b043676fc6c0f9075965624f8678c9fbc84cd117c21dabfda15ab753ddc20c0c" }, + { 2335000, "2d628fb8d51b978f15706dc76e68ead7577714ba0554e752bb5da96644f3865f" }, + { 2336000, "eea1c0aec958031a7a767d02d394fd0e6dea5fa55306ff91d60d122f91039568" }, + { 2337000, "06b78c8c80942e27dac1f1bd275b72a0ed57e71295cb9c35a9ef0ab67638b2d8" }, + { 2338000, "477579230e2f2a243231c73b92f0df400bc2692b828d87e232b9b63d2126ae7f" }, + { 2339000, "5960c7aef04b9ba9c6ba88f5dbe8c45c328eecd19c6bb998c896a6fe2824e504" }, + { 2340000, "6c6fc49cd2c244d383c4ff959c1cc8e60dcab33e0b09bbfb13c63437aefb121e" }, + { 2341000, "24ce0eb54da3766177e426407797b75a3397afc6efa7ae30bb667bf86e5db509" }, + { 2342000, "db07bf1c73c1713efa74f0224a59c3ce3e7b437fab09c83507849640156b0ad1" }, + { 2343000, "039498f2516040eef8b4c26281009a9dd342535a4c6d4c243e0b2b251a816f51" }, + { 2344000, "f645ebf1873ffb5b463ad6b8012976b99baf32ec13e899effc4ba528d559b5af" }, + { 2345000, "4302c7a2f4c96e1e92c0a00451972b8d048cdc83538c1dae6718e01a8bf6c0cc" }, + { 2346000, "31d8bd979c51ca22a4908159c87a7e7a70e8083efdbfb574a59041cae57e6147" }, + { 2347000, "7e2337b84a39061c9258cac1c99a7af45771339d8021afb322a9e0569cffae1c" }, + { 2348000, "364c66eca080e3ce32ad7595d4337050289b7afa64a689f8579aa8b31a5f7af6" }, + { 2349000, "0318342c3f6fdf8f868a976575f8f588fcb4ebd981505f38ade43df181c24091" }, + { 2350000, "95c1d1b431674edcf3b15fc63ea14f5364011b17da6658b218e1a98a7e36322d" }, + { 2351000, "77312483f000f7b6b7d01d03aaf274b858d7e39542c6b06fbba828780ed2cf09" }, + { 2352000, "82891a17c0b41b2d8d083fe8ae66d533a59313e11c527f7a9c2a32794d1667de" }, + { 2353000, "3726fb793dbd4f231b7a78bef8e4dcf3e198704835a3e07b15f4f73fc809225e" }, + { 2354000, "5e859c973a0e4acc9e99ee5a2fcfd4d5d022d509ec5ce8c95e3ed21d89dea485" }, + { 2355000, "63e1ea81fcbd32ea0950b99fa0655c21544926fc607a445d726d8d855c3c407b" }, + { 2356000, "f456c49943ef738a4592c4a5b92ced08f74980d029e74d981b7051fbadf21b24" }, + { 2357000, "babe39e804074ff7cdd42dcafdadc640716ae6a1551fc2e3d3c71cca0a9610b2" }, + { 2358000, "69fd062b16d9423d339da5d7558317065fd679a4dfcedd4c7128ce4fffe40cc3" }, + { 2359000, "828f28a0f4e134a8d39bc75f992c7011682586c60c61cd2b8337a010e4ed15c4" }, + { 2360000, "70793daa730b7f4d43b3e76318f1f4fc91a161995cba16b004ffa0494703b53f" }, + { 2361000, "22f7c42b662da9444418b681c64eef9a992b3b0c09360bf62deee7728c71ec16" }, + { 2362000, "3dfcc653f09b192208af101e635aa8d3b66211ec5f8ab5acdc7712c7fbae2ab8" }, + { 2363000, "ecdfa7dd8d2cc37f201cbc5187824d1a242d2bfdf7c928c1721f8f32303f2711" }, + { 2364000, "237a5f1be0aa783b377ccac8dca08f5ec95e12318eba178572a0bc5a3c95fbd6" }, + { 2365000, "493d694bb0471b91383762e550cebd8e2f3bfbf81b1ef61b566af5d52615077a" }, + { 2366000, "5849b8ee1c13f85275e55523f0e2c49b6a559b5ea9c125b235707a36ec474c26" }, + { 2367000, "2c569ccda156046fda97a7e4466e48ce0da3c11a70ca48fa92e821040abfdd37" }, + { 2368000, "bdc61755bb8f83fa43f08c350a8b21dd299ca04918253bdb1496afb27d6c2693" }, + { 2369000, "11743bf15707a5663b7d570b88182fe13c4a7fbef4683846fe4c47ec979390c1" }, + { 2370000, "b881289834ea18b012d0790f9c9394cb76b6adde004d3aa01213a1e41a43d189" }, + { 2371000, "6f64441868c1a79b981f88509f508a2dcf8f538e59d8b7b2cc4becd523f0b24f" }, + { 2372000, "36bc1608c70389f4c365e482c0b7fe4884a11ce5c97897a97f9089296654a2f8" }, + { 2373000, "95873f87491b1bb65b0077a79b544b7f06aecae7c094c2f7fcaece9ad917fa1d" }, + { 2374000, "a5baa65d9ab17008e9d1afeca221fccf1fd3414b04a9ae72e95df43d3d7a34cf" }, + { 2375000, "35a4fe1b0c54af77436bb7d843a0818189f0aa006dbb254e894fb28b27e6ddf6" }, + { 2376000, "1456522b371113d86f4dc4792487de70e7de3706a2d8704a9c293f08433bf25d" }, + { 2377000, "ced96f60077c8a074b6d4e685d9bdbfc3127383fe574d7a9b8350fb8851798b6" }, + { 2378000, "245d03edfe82147f661c44b74543eaf229666689d6b04a6c475b4bc139df79d5" }, + { 2379000, "bb2a3b8ee3231ea68ee6d1e48468d365b12461f83952d2bd803ceed777920143" }, + { 2380000, "5750dec9daf6d568e166c57831d878c63f298cf1e45c612d9d7ff8a7969a00ca" }, + { 2381000, "5914a5808e7b55491ddce732018b6a8b77a5fbc46a5b0a27ffe293cb13a57001" }, + { 2382000, "a2f780ba07668c71c4ad2b1d48955f4135ea4ac4b2d099e61e8275662edcd915" }, + { 2383000, "513cbb9e445c393db56f8eaf6638d29a34da8ac22b3a721980495081995f1bc2" }, + { 2384000, "34d7f5759a30a4e97214bd8f82b303d77c22a281d5b5401faab8581f4f2c2370" }, + { 2385000, "259b0ea9a5e7ab8999ff1c51399ce3f511c2284440da9a92e558bd05eb062155" }, + { 2386000, "fff0148187a9b0c9391cc70d103f5f8089692119e4d9443e3d0df3d27ffc879d" }, + { 2387000, "c2cd40033acdf616c2cadbcc5494cfe954ef904ed6d566962a845ba4ed7ce28e" }, + { 2388000, "d2168519d4e163aa189f0d06845e3d832f46c3efd225a5a9a5c83edf042287c2" }, + { 2389000, "138e22dae92b39c151f125f181240f97e635657032ddde3a22ddd3d1f722cdf5" }, + { 2390000, "063dc484965a1cf0ba6fb3275b0ef6173e3d02791e88fd209e1d1219acbbb468" }, + { 2391000, "7f00f5a7188c38f3eb15a95b737a0b9835d49d3c2407a4176ce463a547cebc94" }, + { 2392000, "d3dba1f49b7b254e7f52170de135b9fbf315598e2a7c940ee3990a6cd0fa7838" }, + { 2393000, "eae39f2510aac595a4192f247d473ea030288bfe09ba1a5bf97b3a1487ba4697" }, + { 2394000, "b83ad56609b0ee1fa3a2bda28e6a83b7d95ba359b3fbdf6391ced48c327a4c44" }, + { 2395000, "c471716d7c3a04f6c9ccf578d28b4a4d4b6ba14d648c33f88de8978a0218668c" }, + { 2396000, "45dea3ee1ccb6c67b7856d8c4b8177576caccf18c4917891e5d0c934b04a7f3b" }, + { 2397000, "9e91abe80a9670f87ea8f519ec3e192815848ab3097863ae7281b11648928e65" }, + { 2398000, "81e8090c4e2aa560af428a75b9bb724cff3859b234db010914564c78d2047513" }, + { 2399000, "24f39f075ae8447a2a84e43fce45b02bf8910ddabf1cac0bae8c11fa942117f3" }, + { 2400000, "a7612655d0ef19c15687876d1b826bfa678e53c9c7956c586dcac8c438911d33" }, + { 2401000, "f58e1b07bf4f33b4cba183701a22b5d1004694ce8b0c22b68bb91ef50e17cb21" }, + { 2402000, "0546d3147e8863c96f92310d5bf9694630419823f278685180e8243c6a92a71b" }, + { 2403000, "ed2204750a97e9ffc3b45ea5b0d0fd94e2c61c581ce8d9e7ecefc5c66d07b580" }, + { 2404000, "16355ad1178350dd6fef4a0afbbeaf1cccaa3ba8a4ee9583bc2c2c5ae0f5a262" }, + { 2405000, "795c2165f1412e65875021681bbc453fd5d71f453bd6576d42e0e260db6f393d" }, + { 2406000, "2ba5cb57e81fe96b6337294246a186bc6c45b5034ee4ff4c7b4bda82defc67ca" }, + { 2407000, "7ba78fe69f7b2e259a0c7679f3276e04b4d0b39b287b88b1b91a67e22c1964e8" }, + { 2408000, "982e4b8ae903b992e6fb161ee8af8a71268b572acfda4efaa9f13897587e7dcd" }, + { 2409000, "7c5df636f8aa0a13e927c3d1d767daa7825ad18ab3e025765ed94c281d83fb23" }, + { 2410000, "d40f3d16b233354642f864f82dd1e661f5227b326a82e0361db666af31c2ac11" }, + { 2411000, "214461bb2d7ac22c38861c4a195345cdcddcccc743354bd54569384ce16aa3e7" }, + { 2412000, "bb2c80722973edfe1e043aee436de427c54abb31b053ba97d5ce8854f3711add" }, + { 2413000, "86b4fdc0e68ab24034652b0056b0f134e52dc9360762f95031cd80799f7d9521" }, + { 2414000, "d59afac1ee35f54daf208b7b06ef495f5a152bad535e8c09f88957cdbd28b192" }, + { 2415000, "d5a5b8ebb6f621a6f4bf0cfa8aa5cb07dce6eb5cfe52272944c21e86a4c15d80" }, + { 2416000, "9890d3d491bda6453dd0933caa971f6b6f17684337474e30ce87ed2a3bec47a7" }, + { 2417000, "c062d22f44d27f41544341dac2ef153ac8fba753cd76a7445e1a54c942281ad6" }, + { 2418000, "0f0781f011315b1636c152f88d364e60e9f533055ca8055cc0cdbdd83517001e" }, + { 2419000, "13b24eb6e85259434ddeb750828965b5a7aa02ebceef19848fc6e581ba6277d7" }, + { 2420000, "24635677a9cba39f794b9e1569b5fbf5a31661104c4d0ea68bba32784729e6f3" }, + { 2421000, "3456ed34613c048798fc0daedc44a8ab6fb5ff6f7b86a96f20477c14f4dfacea" }, + { 2422000, "1592ffc260faca97f91ea548a74f0eabf6220e3eb15118a97e3afb6604055e18" }, + { 2423000, "902cc66a97b285bbe01310d55f5a05886c07d4dbc35c0eddb2c5c821ab23a0af" }, + { 2424000, "ba2f5df32f95d4c2052ca3d54e2af7221a14cf75cc9a350ef7eaeb80d4193f2b" }, + { 2425000, "75d32cde27abe58e0ad3d2d26349cf378a94d454a24dfad215b52a336a8f2c83" }, + { 2426000, "baf5e136da80135ea6c70ee314f78b40b53ec21a010c5012983f0aa81f448cf6" }, + { 2427000, "7f685c054c12483562f8709a75a45d7164141a4bd89807e81457f8694b465243" }, + { 2428000, "0416ee23bd6d5d021a53cbb91c82e79c5e5c2063901d3e31a82d05ae34ad08b6" }, + { 2429000, "a2e14237320b9ff876ef2e2860b3fd2d5ef555558639d93695a2911125a2fbc9" }, + { 2430000, "c43f0b5bf14dbef830d0f2ad530e12948356a0f4ac07655b3b5fcebea997d6ba" }, + { 2431000, "d792e54f13e36c534f8ef5e00e96831b989769b0052afa05988036aa007769a4" }, + { 2432000, "e6714f851fe45eb0ec6b7fc5088572c2ffbb13e2f760ca1ec6d506604f850336" }, + { 2433000, "56375727c855874b63f7da265abb2ba4dabb21b9e5a4faa1d182069d6fe498a5" }, + { 2434000, "3a0ac14f168c18460b937aff4ec5ad75001925754e62a539c2ca7d35fe40f0cf" }, + { 2435000, "cf422d5e431376090e6d7f75638b283399c39ad3439c069f020f29b08f84de32" }, + { 2436000, "fe34c442ba06df667f07c2ddb2cb7c0dfc8f93e90275707df1cf9204ab56b190" }, + { 2437000, "6f7805b04731d0b2b2e902fd37c8ddd5210746ee5d99d1df4680e44ebfd327d1" }, + { 2438000, "180be0a9e6b5c1d6d96874661202dd5ce7a8cb9d0b4705ce434ea0e455dfc4e9" }, + { 2439000, "5e1b67c4fcc8db5ad3c84319316238eb54296a897740762f9f85df18b8afd2de" }, + { 2440000, "645d9c0d8ed5cfd2b8ee8534be67fa2fc0d95e7b38198a9c005cb16e0b6c0d3f" }, + { 2441000, "d1eb6a4afdeea9d45f7e33ec2ef8e11b42c99b52e80ba254054aad2f185f354e" }, + { 2442000, "31a2e87d1090afc45849cf7feb7e680c01318255a67bad40d0e07dbe60806524" }, + { 2443000, "65c53ef01de68934e77bf5d6fd4191fa622ce8dfec5aff77b0a8bf0937f3e733" }, + { 2444000, "4fa7b7d7909ec50e0bd6d412149850190e0a9ae45932f6d3a97a09adad07c245" }, + { 2445000, "56719482cb117fd613c310083d16c4a1d1420aed316f593d72480f3b8f6acbd8" }, + { 2446000, "844df7d3f37b3ae30cc08b91bb6db7fca47b836f438ab9a1ceb4c158220d75b3" }, + { 2447000, "8616d22aca850dc7ae4fdfb1b56bea94b16851434831916f54731a4d65ea6697" }, + { 2448000, "e68853d43870b6667d60fcdf06f5476eccedd7cfd43663df56eddcf0ee75fa53" }, + { 2449000, "56e483205ad54c420c66c611e5ac8bde866872f3734588a424709a52af595ab3" }, + { 2450000, "6eb296e948fe64caaef1f3f03e39fe59b888b80fbf3a2355dd27ce261f96768f" }, + { 2451000, "2eedf6926c6068bb9542163d08863112445c2f863109d7a49595fc8d111a973e" }, + { 2452000, "d9926779aac9f89e8f18301e8161aeac6ca3d8823e9d19809e919af9bb7a1630" }, + { 2453000, "41a9d0f45894c66e49c6a26555a953dc09fd1be8d029965e8d9403d65e794cdb" }, + { 2454000, "0b51fe2d0829f760dfa35f7ed43f6358ff82b34507317a0ba4652bac3a8ede32" }, + { 2455000, "e7b944f2aea293e84dd51c78c43711aa6c2538a62fe25796a4454be4df7667d8" }, + { 2456000, "a9de869f67f25828e87da9917d0ab9d8ea7c72a5a8a37a5de02919564f75012e" }, + { 2457000, "ac325ca6a6e873bfee16b1a1d79917a38b4a46ea0f5feaabc9adedac251000f5" }, + { 2458000, "a091a963c9793a41533bbe8f96d50c6aa1562c50ed2b086a369ee3832fc9afcb" }, + { 2459000, "7b25d7d3b1aec6e569a9775383a000368cc4819cc007ff1e36940f56a2692643" }, + { 2460000, "43674412db8a96e93d10c9b3585eba99dabf81a89db8bb0242e9237bb7d57508" }, + { 2461000, "9090cb815cdc4c608b7a466ff2ba801f550e48074963ff72d774f9af12e635f1" }, + { 2462000, "6ccbbd2d9fa00615932b52310d197ef3efd7a12c8c299b810561dfc95d44397a" }, + { 2463000, "04ca064ddfaa26aebaa8983844dbb4f861fa4295e8f7a56397353fb81b32874d" }, + { 2464000, "59db9fa192ce7b21146bd4621802a8d94426d6ba31a41913cd359b03683ba5b3" }, + { 2465000, "8c05079ddcd4abffdc285162cf8685bbfeaf46ec25ee55592c64546b94351abe" }, + { 2466000, "a88912d963d0b59f9aae476639f20e9830f8b8ebd51277f04558e61f76065af8" }, + { 2467000, "c33e45b7aa0ecb68a61a35701b9373897e7789fcde32251573cbbb1d504877d9" }, + { 2468000, "f5f5a699b88a7d26a936520329333f9b23653a4893e12e853f2a9458e7b0837b" }, + { 2469000, "ec49a37e8b557f252005ed28a191294efecdc2e354147c49b47d858547d388f8" }, + { 2470000, "ab4aadb9a628c0208a5296af3626cc71068fe06b6fc8f0d6944f3f4471a649ca" }, + { 2471000, "189da104aee7d93b7dbadc56d01e556659632cc79ddfee644a4da438bb763e9a" }, + { 2472000, "06c4174c43ea62f4e7d2a7b627c1e68f2d75b69b7705f4ec073ce32ce2913d31" }, + { 2473000, "7ed94dc9b77882da0766389eb207d46fae1bc84bd91d609c1d3a2cef0fb71b03" }, + { 2474000, "08319dba56921b8aaba22caac54238aaeb032df3bf9bc58e0f91b5824741101a" }, + { 2475000, "f4549a5638ee91ed111929da4b6dbe75201ddc6bf96d1d3ed16bed8c86efbc5b" }, + { 2476000, "82aff9fcbef0d7d7cb255c69f4433bf19aecde07300b3e8854f413eed8dd1419" }, + { 2477000, "2cacab8fb7ace412ce537e07ee3ac72bffb43f14a2c492de55782101dd370691" }, + { 2478000, "17f181cf7fb735d2c0703c0e6c21f22ee127f58ccf181a1b9d31a88349990701" }, + { 2479000, "df0f9d85bd92597f54d6fa387c8f65b0e886baad91f45d5f5f8e319530447f41" }, + { 2480000, "4224dff3aac240443c1a4f2eca7f88e33c6dc02168945007cc335cbaa4206d6e" }, + { 2481000, "c4d58e11553bbbd5b16b82d18a28e06b79498d2732b1e56490eb71f76d5d4213" }, + { 2482000, "c31d9e58a645f50f72e95babd7bce031c483ff69c53f68336b60a1810026e3f8" }, + { 2483000, "f67548f64bcbf5adf3994df4f629247f2d7fbe06ae69a61eb2921ad3445d3095" }, + { 2484000, "07aa458e3035d9e68e106084bce941aaf7503348ddb163e0e70b17e4573c9ef0" }, + { 2485000, "110cb5bb28c5e24b3898b70c231895d65d46b75da849e4c2104d9518a8ddcbe0" }, + { 2486000, "2842280334391742c410c9077085e275941bacd7db61c76ab3605c19f07b52f8" }, + { 2487000, "1632a1207f4ed3e580f9c9de91d18c4a953c6dc7de3aaec3b2caf9bd7c78a12b" }, + { 2488000, "b39a4eb4cdfd0f938134cc1a8aa5f239edcfa87adbc5440ad2e3c3d66adcb0e1" }, + { 2489000, "e381d072bd5b1cbdd1f979b33d9b8ad2f3e18c55be6eb1bb007fdcb59dd920a3" }, + { 2490000, "bea12b3d2bc2bf246b0d8acb06e096303064642edd3cbfb25aff46b28f7ffbcc" }, + { 2491000, "bf61ca3ec32256233817d08ead8c3946a185169d3445f26c9e33fa932284f7a4" }, + { 2492000, "f91e7ebf2997ae429418b6721f94ac01318fba4868cb9f623bfbb63b2fa143f4" }, + { 2493000, "c6c230f3e25ea33e5dc2fc1598774f06921df636e6955ea93a3e9e707e05fd4e" }, + { 2494000, "1cb1eb12fba06c401754c79f334db23b5b3ec0d9af570d430b9e9b9f1615a0aa" }, + { 2495000, "d74f1a10bfa6087a0718206fcd76811a329b3d02982d800682ad96ef9c98c1d4" }, + { 2496000, "ad9bd623e39abd8df57055ceaa9dab446a61343f6d1ca769623401a6c8daef75" }, + { 2497000, "0a24a07c5c6f2df0ddb73c82f0210828904399f4e8f25ba7f84b03ca8b4c2954" }, + { 2498000, "35b370e5c1a548209ea5ce9fe22b8d69331226ffdcf1e4749af48e44946da215" }, + { 2499000, "112356bd71a78bc130f72c1ad0afaedbe0b06698f41e02ec941db0ab0bcb4c7d" }, + { 2500000, "218a07b75622c0035acf653764bf66ef3e4f6a20d1a3e51f0997fcd697a9ffa5" }, + { 2501000, "1c9553e3873a251baa45e70f717f918d46f9e0b63a6ea8c3b1e54c8e5a717268" }, + { 2502000, "a0f30879976de53ab9a756396c70d1602ac2010083a956e648d9a7ad50d5a4d7" }, + { 2503000, "78b3ee8c1685a0abe575a0a57a8a730ceb12856d907ec52bfe5a3c87a9fd21ee" }, + { 2504000, "f57e367bcb136a9efe9113349ddf59b32d21756fd0ea7d44d9f93102d4e9fd05" }, + { 2505000, "6b098f0da6bf2bd5d37b31db9746bb4cc6bae05b1e85026971ba55f68eece0ea" }, + { 2506000, "9ee83d4e6b14046a1152df6045dc039adac9e61e15d377f240bc8b626204e4ba" }, + { 2507000, "ba710d30a04352962968c301643f0dafd390b7848610f7ccf186a90afc5d4893" }, + { 2508000, "a9819a251e67365a68a7810516b83fa5c3bc353cb73afa65f99d60d6ecd4aa49" }, + { 2509000, "8ebc86b6405c1f087cf33cd7b87f96ae999873af22c393b5cac48b518a9ab08f" }, + { 2510000, "bb934a66ec9e88395f597a79410a81f7379258e4e8ba71570a481b182784d0b8" }, + { 2511000, "7dbdc9a2871abd0c5c82d2c4c5187016cc41d056406d5a5e5bf7cb0e0a396def" }, + { 2512000, "1c45dcd5da0d5bd31695b9f9f120753020635a9271f3913ef425d519b3722e5b" }, + { 2513000, "714294c61262473b73db23175b022a8d478fd38530f77ccaef6b587e1d9773c5" }, + { 2514000, "cfab8d546bd8befb974a4596e1cf993df4f625b1485cdcc32213f9a6fd1999a2" }, + { 2515000, "d88d953e8f043c9d3ac8bc6cdbfa6d008e108fabf95c75c71c616fbaee865a09" }, + { 2516000, "edac1ced0a6082cedebb84d24d11f634c7353d1edb9315b63386ef3986438675" }, + { 2517000, "a658ebd912967172574507d4ffa71ad029808981a48038676c779a1815bd9df3" }, + { 2518000, "dea5e365685b4fe2d3c246881340aa88880f7360b77e7f34e239dd17f5bd3349" }, + { 2519000, "4a4c71fde2edea7c0793fbc2690125615469673abefbcbe4212ea79ad193e97f" }, + { 2520000, "dd014533429ee5621354ea753754fe9aec82978e5111f18b3581d41e6f885015" }, + { 2521000, "3ea4453e165b579e903e8c5d3c48f94dcd688237caf8bd9e33f998245ae36495" }, + { 2522000, "9e3af48faeb2a7369e22b48835cbae0b336e38ed437a41a73a425e6f60bb860e" }, + { 2523000, "4a9a8bfc69c927fbe9e222a736848a1674c27a9594d29f3722f2e2c312f16446" }, + { 2524000, "14e9953f0d4a7a2e97c848c2e229a7755da13fc28cf0fcbe6cd966f20ffd94ba" }, + { 2525000, "d0ab98eb5f85393cf274d4d841f3cdf5188f250f6e6049cccbb8207d4292bd78" }, + { 2526000, "fceebbc703ecf4deb998fcb55631b91d3ce7751cfa88bc5fbf36ea55f13a6ecb" }, + { 2527000, "8e95fc2d719aa891ef1e47e7e1a51729e812f504f1b72ec08fada962ccc81686" }, + { 2528000, "4cd72e62ec0b847964071ab57636c3eb987fe10ec9f59da978a272559c980234" }, + { 2529000, "d64b49c4671171cc6fa839c8562a4d8623dec171497251cd0500f2a1f29b95c8" }, + { 2530000, "0afc22056c896496b33d25117766d772002169584e2f8079f17338758395b8b8" }, + { 2531000, "883d8fbdde15b17155f638a975bc208963b803d153cdf72cc2b2dd547190e9d1" }, + { 2532000, "f2fbdb38a6275f07357fa79a4e5ec786293a536de7cfde395c70faf7afd46c59" }, + { 2533000, "5fa1721360552c53e5ab00fc619147cccf7a5f31b49a81760d80c309044c1616" }, + { 2534000, "6b076616b6067beda857477764ac8f6eb5028c585787a32b6ea6629aeebbf68a" }, + { 2535000, "27b1c0f7c912d9f919a4b637c17dcc3609e3739e7d856dc1bc1f9a30ff396088" }, + { 2536000, "9eb033ce23ce6250cd497a1d69a6da5ed3cc5112984c7486a4ac81a8e7010019" }, + { 2537000, "e08fd45bc041b2f7f0f48ea05517e1ecf0f2a14865f001a75830d010cd0a0f01" }, + { 2538000, "bcc4058a3873cc757d24c2abf3751b7d5851ca0b037d333b4cf71584ca6115af" }, + { 2539000, "3e6c84abcfe7b94ec705fd89ab22c3bd72fe2660071cb77fe3b265f9f9bdadb0" }, + { 2540000, "920f2163f0f7fef5d5337b9b1186f7baa58e34e121d9bd72f15d9596d8cddc74" }, + { 2541000, "bc9d93655e0e29737f318a1389f52c85cc318d9daeae98cb0de5bb494795392d" }, + { 2542000, "b2047b8905a93bee9e806ba981daa028427fd225127ec42e44aea9c30a03e519" }, + { 2543000, "53c3c0204921c196f191763188e24f82f7c9aef1e8f3deec6f41968f2cebabeb" }, + { 2544000, "0c6a4e045448a5cf992cd5b7062000a55c2eeb253cad6c5003af54f618f39d61" }, + { 2545000, "58b0d39fa9c88d6dab8f72d643f9f0378fdbe55a501ca28007d37cd0c595c175" }, + { 2546000, "04e963be21eb0b968d43d9be6d5c1bdd1937730abafca4372083dd52762eb744" }, + { 2547000, "11a78cb596058d8b9e40f860ebecf8216b71c9a4cca64412837d71c554cbe3ec" }, + { 2548000, "61681f2aadf77625d19f801f81771942c8b7ee3a8bd2e2fd634c6106edd4bf08" }, + { 2549000, "9706d7e53893471e9aa9f129308711c7681a4cf2983a83244de5b94f2632c531" }, + { 2550000, "6a3b73e40227fdd14526385691ba145a0b287fd3d11a5cb135b9fceb6183bcb5" }, + { 2551000, "707202fb7ef9eaece8a2b86f6a0913c77dd300ae26f38fd7dbe2c3ff11099961" }, + { 2552000, "f8213498d8fa8b6eccdd1ce0bc9770b5cf6209249f98d7375c9bd69df7657498" }, + { 2553000, "1377e6698c40df0958c6395adfc6f5454d679ba3d6c366dfe2230b40ba477726" }, + { 2554000, "1df29783ea0b392c5c80b56e9d7180bf77c4b5f8a9e40acca30d7d51e58ad29c" }, + { 2555000, "a00dbb2c3ad22b0be700648262f05758450e4eed71d99e17bd94b354eb460c5f" }, + { 2556000, "c692e27541b0de4b629bd68e1a0d8593d615536d53e6659436c04b124acbccc5" }, + { 2557000, "7e87316dcba5603d6f4ff70126590262b09a55515e7f51781af158202579bd20" }, + { 2558000, "178e2434f471c8b0226bbcbf6a75256f49344f74999a9fab91fbcc55c58e93a5" }, + { 2559000, "4f932f90ac93bb59c5dce4ec7f186b3d77bc19be9a1fc3d1769a0c9ceb1da047" }, + { 2560000, "5b3378fd0477b643913cbfaee927a5a446b4a1d3d1e2593f479ad66ad9d1fe3d" }, + { 2561000, "557991edf98e5ad215f216c86b16b1844cbb64cdb173bfd83f7bf2d8a5bd711b" }, + { 2562000, "2bd3aa98303f7ebc73e9c7eb21627c78ea33c09be27f7aa196763b9f52bd7bbd" }, + { 2563000, "5cff108741c473dce074476def0e86a22f941ada9547a03575b0025c24e7c167" }, + { 2564000, "498c3a9c7c67a6f5bc3c9dd0961801225c7d3b2dc8fc407aec89fb70ee2ca927" }, + { 2565000, "b84073a2f7f6145e0087f008a775a87a09b120270ac8de97ab696525b59d9ca7" }, + { 2566000, "bb0358e2625ee8d860baba534a3cc7238fd9d858826c003b368a7be87dc51472" }, + { 2567000, "3fa6487949ba2811f3df269343d63a60f0dd8d145c898cb51757a7ee97092119" }, + { 2568000, "38cd8f74b4f66540575b18b8b06f69d1e1123ab02895d0552a8defe94ec709c8" }, + { 2569000, "3b1e31fcd6d4cb3b3d051ee3b902a98d01eef2da5e9b7c34c88fa3d5ebdf1bc0" }, + { 2570000, "6bc47e4bfae9b88d73f06f5e94afa22bfd3c1cba9357850b0dd033ea17d59bfb" }, + { 2571000, "641277bec32bbf19a41888e670d70bf4b54b4e2368a77eb66b21169568330b28" }, + { 2572000, "b8ef73e007268f7b25a0a11b6e2598c679ef9c162fb6bbb5b72727cdbb698817" }, + { 2573000, "da8b8e60b8e26f28e920fe1155301538a8fbecee8e00efb511198b950f8ff8a5" }, + { 2574000, "2fb24ffa70232dbee36546f2476ee2f1ac3f8c1f2a81c872e212729f9d37a743" }, + { 2575000, "915d770df7c058f98edc56954a50d053380d7e83742b01745188abe0fd211ada" }, + { 2576000, "b5d656c47a021e22c4d44938fea36f36c736468f2a1be98abc050f6bab0578a8" }, + { 2577000, "aaf739e0cfaee9c1f9912d768fe5142bedce9e752cfd36263afc46312def7d85" }, + { 2578000, "0cdd24cfdab43b0a3b2315a1c2eba4c9602e82d66602c41f2258cfe707848245" }, + { 2579000, "715753f3bc17947a72dde9e3ec6d729fdf9480941e0a162f69298bd0fc91f79c" }, + { 2580000, "43b3f24df077a3bf63c8bcb4b3351048d753e86cdbde821ea71a32cfd08a390c" }, + { 2581000, "eefaad449c10bf9c29cccb27db5f555e4ad9b70454b934618b915ca2a7c22381" }, + { 2582000, "666356d5f8ed7a5439e49798b37ae6fe3c970256f14e9be7a349168b357304c6" }, + { 2583000, "b6b316a90d0346955a6b108b9b32319d365576f8500fb4f0f79a1618932b797a" }, + { 2584000, "c2b5c5918bb0189fe6037158f18a678d7bbaa5dc517b4896d984ee90fa69209d" }, + { 2585000, "c2605ce042429a9d6d3becb77acbcfa3410a4a868f09c03e4034d50b5f0939f9" }, + { 2586000, "444fe9ecc2c93fef576ef89af7d381eb99b15e28c6eee2fe696eadf57ef286fe" }, + { 2587000, "78ead7051fa31e0cd086b8ca0c5010bce433ee430b3c4f2391cb400388dc55bb" }, + { 2588000, "208dc2c70cdc7128b716231b4432f6c6d1fd7272831a04cf96daa216098d491d" }, + { 2589000, "6a98bd2742d965f4df165ba4c1fd4dddb06551353cdf52a427761188cae238a1" }, + { 2590000, "72e45b01727a72751cf6988e72dd0abfad11f8344a9ea068ad47d26e0ad20470" }, + { 2591000, "3ac55fb5911f731b067adf1392d4073f544d21186cb0404a676042e4a3327684" }, + { 2592000, "b104ceacba1a2ec3b4303b7c341ce77c8e32d0a5fa11ae802e41eedb7682fde3" }, + { 2593000, "d7b71782a5a976cd61ca7ffd12b88fbde51b04a822e7a7f16eb4dc51288daea1" }, + { 2594000, "4d78734cd3a297f639bb9cd008728e0562670134f88e6c283d3a680efc29b47f" }, + { 2595000, "5047bc8f1380c13da0bf37cc15832bf18fde6e756154ae259d595560cc5d1d41" }, + { 2596000, "1bbd24a837d0ae6da9b003d87ac87ca37835ed70301c85533bf74f770c6a42a7" }, + { 2597000, "6cf5a8de6da9196c2a7785f75704144ec4c093fd029d664f9bde980abd146521" }, + { 2598000, "1acd6c5ab75b3012eceb706f0a4edb11c4e4831c5785e430949672799ce21d27" }, + { 2599000, "cd2dcf74ae4fe6e4de64e8f84fc1cc2423dc3c0b700c0a26311f2c72e79bde1c" }, + { 2600000, "4395215c5cff2f3d451d715e71a50dc7ea9209f4237221e8cdd941181af6e672" }, + { 2601000, "7bff3ee737ab03d1a395711b87b898ac1412ccc77f21d9f66e8e73f5beb863f7" }, + { 2602000, "f1aa0f730644f2ed55f1825ccc98228d06a209adb90845aa4251895d5534ad1d" }, + { 2603000, "5e19fe595224e57e9f31cb2028b1e036a2759447d1621d603afa5cdf5f3dddc4" }, + { 2604000, "0dd383aeddccfe6c06576318625261c31551ba07fa26e4c31ac2821cebeba667" }, + { 2605000, "87da6cc075bb501097d0fbaa0bebaef49476e5f50ef077bd87040f8cb10aa6ed" }, + { 2606000, "cb61c4042418d5456bb1119a45833208c1dea6650440ce1d58f02026dd1b6793" }, + { 2607000, "9dd5b183590b418c4c63304417736ce28dda54670a081215cc7f487ecdd8e03f" }, + { 2608000, "4053f2fca8f9f9ef870dcae08c64c33ccab65793cdf65eb20e9ffda9d9301a58" }, + { 2609000, "71ff8a0a3eb0985f44dd8e5311c35bd8f2ba57e6163360e019a851b38b83b4b6" }, + { 2610000, "74e6e67e441d6514affc61cc838aae00da5063a4e03d57de759c843183e28faf" }, + { 2611000, "769b08dd1d8107fd0da62a0f36820cf2c52941bea09b0bc3e229b9134c68dbab" }, + { 2612000, "5745dd68a42cbad344203e54f3e4f508224000634891a3d393ab54462ae12a50" }, + { 2613000, "0ec263072ea5b053250b1774f5654fb5101a2e2acd483031c5ccacaaa6d5fc07" }, + { 2614000, "27d0d3f55929ab8b40b63adff9e8bda7707117d690e1b964920c98c59e4b2a11" }, + { 2615000, "d6a07c04b02e03bb6eab201eb30679bad2b1829ea96b37a4865f7d74dad0c00c" }, + { 2616000, "ff936675c71cd2801dcc40501f6ce051ba1ab5aaebcf9653aaff16f1cfecf651" }, + { 2617000, "5ccf82ce1e19e0380ac65cc2005b35aab7ff3cb13ab90f7f67b6b39161bb38e8" }, + { 2618000, "96f33ba6e8e167343a98be40894d3f2d36dc0c2eacced3bb068020f3e935c58c" }, + { 2619000, "3affa55e9ed14428ea4e16d74afea1be60992cc54eeecb0b16ab9d7a6f52071c" }, + { 2620000, "6529d2e9b34b5ff4800012deb23f6c4f8cd9356db91c10ff67afcef60823bae9" }, + { 2621000, "e9024ad4d9b0b98fa003b5b27a127323c0022bd525bc7e7e36161fa43fb3b200" }, + { 2622000, "b322d9fd19a372b454e37958f18d3c5f988a2905548817d4f4ad8d5aeec830e7" }, + { 2623000, "d2b0fc8379fcc7e8a172f691547ada4e8a06e4fbe81bf734b7b535dad774a64a" }, + { 2624000, "4310b727bc63687c4fce7ca86d15c888bfe61fd573d932889410be0c6628a49d" }, + { 2625000, "581bca659f183447e347ac02bfd14c1a8cfcb40afb1ca599db3555f8a997941e" }, + { 2626000, "427cfce7b6f9de9541ae5b47c8b2e5bb155eff96dc70088ddca1e9520892a5f1" }, + { 2627000, "db1d6b939dec79c4b4a49b98f661ae8bf4ba34a7f569bf4d478440fa15d654ae" }, + { 2628000, "2672c28bf7850a0c0cba645e871be230c54e959e8f675183e91a441df8487667" }, + { 2629000, "c0f9060bb20e58ddf2ac24561540fabf2ea43b2e203347a389e41ac79a079eb8" }, + { 2630000, "09a91d41ac61b924b883b439bfa7a716c16bbf239f8655e8aed1d1d852176cb4" }, + { 2631000, "8e0f6115c061a2c701014c92e1380a81868e381beee4052755056df2f33d9c8c" }, + { 2632000, "a2c4e76f1a34150c8ab8cb7992d2822edafb193b22358fbf86470e91f80093c8" }, + { 2633000, "a0c586ea5edc1f8e7b7dd565d64a05b4d379a08d9317c3dcb63d2c45af798590" }, + { 2634000, "ef907bfcea0f34910e3d76905f14358206f3753fccb5f2dd9ab518dd7eb6c54f" }, + { 2635000, "5463a54f839a0ef76ab69043efd3665046698ff70d9ccf47d02c53a77931e4c9" }, + { 2636000, "e8ad7d81c14aac2970839fb0317a354152e871efbe9d64d9285a16b6f5937b9e" }, + { 2637000, "5ce1913641e3dd2c902331e87297842e72683cbdcb3a12367d3dd8ad80573937" }, + { 2638000, "b7591c7857947285c765bcad140d9596c0b17bcc9049d9bb345f55ce99e845b9" }, + { 2639000, "617703eed11ebe008bc621d62237d7ec0c0bf6fbf1879bb464049b2b5ed8f920" }, + { 2640000, "561794742d1af48846dbf4d7adfecfd99541375955ec0721ec1f88729f89db68" }, + { 2641000, "83bc6c73e481ee79d07222ded32e8262dc5608a490b14b755d2735d31626df86" }, + { 2642000, "f43afa84c6326b5ea006f2e78281401a52273c4214b0168f434437e2524bce7a" }, + { 2643000, "4bf917f0088a1e92c4650f06f23687a4518cd11b653ff9672d0c4b5430d329ec" }, + { 2644000, "a4d104fe84f89fba231ca42a21c2983d52e48754b4a26767936da685d8c37db4" }, + { 2645000, "ad2170cac76ba7f09a989cbd818630a61ee2cbe80fa6057b32f309c2b244e463" }, + { 2646000, "bfeb953c7d5cca64892b7816e0f704e85a8e7aa31d8ec324c7951f83ee9349e6" }, + { 2647000, "db2793466bef7441cdd1f11dc68d6e8fd33c5d30f3a9bed6a338d4fc6a9f8416" }, + { 2648000, "85412b44aac985a80af6630fbd44ee6665356b43b4ae7c03c708c6fd919bdff7" }, + { 2649000, "474afc32865ba7df38b3e0902b64efab4ab2aa73b262f61109466defc812ea64" }, + { 2650000, "315d90d8ece68063872b9237745a4061e7dc8a490d867d12d879d9037446f13e" }, + { 2651000, "3a3ec3e077acf368b68475d66fd76af30ee0c4815567f1222ddb9cc696c5b17e" }, + { 2652000, "064acce76f6c4d8860443c295325078ac8b7681590d3ab8b6273baedfc7c5487" }, + { 2653000, "15db50281303ff1e60a46aec6dfe65fca79f71f91b042759abf2dd2130a880e4" }, + { 2654000, "dace8f3d47d1cff46a0913f95490912347f2df0bdfe4249350328562c3a6d590" }, + { 2655000, "c194be77a56b88220c0d1d6d493f6bad84ddb0cb3730c05f6e545c801ad98f95" }, + { 2656000, "798896cf66b603b12e396cc37ac8bdd6af2c6fb5eec1bfcf8aa530e620ae39d0" }, + { 2657000, "fb8b160bee5d782318bd1abe86c292d3a4bc8e7f3e73b75457d996e3dc6ada51" }, + { 2658000, "f9a97de26cd7d95f477cb0b5236d5aee837bc5dc24eb0e1dec3425d145d0ec25" }, + { 2659000, "3b906e7921bfd4390af995672be6d74187cad4dbe3313aa1d2b3236077da07a7" }, + { 2660000, "9613d1b1566674d9b6796c10fb115d808797066546559b7eea7451be978bb65b" }, + { 2661000, "720a2f467e511674ea83a94e9156d23ebdb54ce8fe8caa5fd2135ada9ca91643" }, + { 2662000, "ba57e6fb77063ff44321af53d2a550c1cfc4afbb7b936419e9dea26878078bd8" }, + { 2663000, "da01b0ed602da2b4943e1595619cbb906d3c2b43597fafa9dbddd6f2e7379dd4" }, + { 2664000, "dfda91de1801cbfda2aca54fd33422fbb37e9d3b07f9e8f4d2111dda70a8be7d" }, + { 2665000, "191fe44cc4d096be8c8cd78fb05b51ae55f00d192ce22bcfcf4d1f81faa3a347" }, + { 2666000, "b88a86d866c3b42dd59ffd599997911e4dda9c4f4d112f2438a139f9885f5070" }, + { 2667000, "fe0d19ac9e7b5ff2e69181535a68015f4175cabcef09488c35f67e6d00da9fc7" }, + { 2668000, "31c7e7a8a1de86959e3d9982fd9c597d1a7f567e1f9b7c13e46d8399406732fb" }, + { 2669000, "1046bd45fe309d594c08868ce34b5bda8b665ba7cc45d65b3955a9ace486dcdc" }, + { 2670000, "e58f08ce7e3628842bcd51390bab64655553fe69ab022ed85e53719cc064c135" }, + { 2671000, "1cc0f98b2ca289d7ff5e0e85d158eb218d4be87cb58299a112f0ddc87acba052" }, + { 2672000, "c64a3c0b63ba0a60429bdf0b67f8019be9386ba0c195a892a70d3ebf269b1a72" }, + { 2673000, "fb0566a59c9715b64eff662cc3659f0a0318956a28930165c83dc185780eb4f9" }, + { 2674000, "99c52380173643ac5253f34f784016758fe4c6c3078eb2f47ba90d3a7f6b2248" }, + { 2675000, "ac70b46a5e0a35c7e02b014310f40aa3c665a9453a85fbdd71c63bb614357456" }, + { 2676000, "072271d6fe1bf7c09b32b4acf88ae95fed7af5e49883b16bc3659b110a626217" }, + { 2677000, "9983f3f7bcca134c5494946ce75f26ca4c69ecc2fb0590ad0c7b7f60f5a573d1" }, + { 2678000, "09504c3d1b1716cdbc4c0e115e5907460dc10f29bceee493bfcac02de034fae0" }, + { 2679000, "699fd32b2267e4b2217316951c9df23b75928572f6462de61df2028238849a70" }, + { 2680000, "32370a4b966ca8adbdcf84e830ad17f5e1cdf1f5a1664d7ca9d472faedce407e" }, + { 2681000, "03fed835e7ac9f3c3f25491b45cf92340226157a61816a4712325287ae477234" }, + { 2682000, "e3bb18e92184189cd6e22dd8fbc5fa3b577b4bcf2cc874dcbe3c6340c277543e" }, + { 2683000, "103b00628a466bb1707275d860b30eded1323d6daa4bd4edd447507aecd6d82b" }, + { 2684000, "b352108114e66033b5d900d7da553b162fb8c643a1dabe2b4e56e19f13580720" }, + { 2685000, "6e835cccd3eb950bfc86e9bde6b045f8f1ae486c4f2085fcd3094b3e5dc68e40" }, + { 2686000, "b0e8ae4ce7e73aa071306fc66af8b3cce87fc753beafac66de5716b507aabead" }, + { 2687000, "9b968e8ecfe194f402f4854531221b30af986d758bdde9dc7ca76591d1c6ae26" }, + { 2688000, "4a11c953ae60d539b33bcbae551592dd3f7b36ee62056e3ed917a96ea6a2e212" }, + { 2689000, "dd7ee218beb42b80f0971bc7fad0b4ba3f8240470c81c5631410360565b60fb0" }, + { 2690000, "210f81a1442ae6d3fa768cc3c06c2e991f8e9ee0c76b3f24d2ae45929d211f8b" }, + { 2691000, "8218513fbb2a8357783b710844c0d82d63b0ef56db04cb03b099a309c0635a6f" }, + { 2692000, "bb2c54e454c76c2b23126cb54084d157f1b92944eb851a4daaffc149b4eaad79" }, + { 2693000, "02785ffd29b4b4625eae4852c62c15a7a2026070fed1437628413ea251a69718" }, + { 2694000, "2f6313d57210fff2d487a9fffb779424faa41fa7118d8c8ee9a2bf96edaa2065" }, + { 2695000, "c6bd26623c837d50c8175bc9b656f75aa22405119d2dc038dd1aed33e3716c63" }, + { 2696000, "700998a9b9ab739a763b62036aafb7cd71000cd336fac2ad4f3ad4c6ee95794a" }, + { 2697000, "9d267615012b2cb5d2483ddad6a23a66a87da379a9603d8f0b098cff517c601a" }, + { 2698000, "fc35032bcd0f1aa79a9392ab9e63469319fdc129cc2f704d60ecac70ae4ef226" }, + { 2699000, "bafbac2b50cc7911d6c7f819dbfc56a4f79d5ae817e71deae1d622dc9edb8821" }, + { 2700000, "6fd9c21dec58c8ea506b65ab7abde2e3848f126f2d1b16e1961fa671960b116d" }, + { 2701000, "69b87bfb1e4130e30ddded144c1d9f3d937075f0a09ed1a5d43492e2b7894528" }, + { 2702000, "ee6fa8fdd8806b2166bc22a8e7dfbc4e9ec397b23974c9918d4601169c39f8cc" }, + { 2703000, "11916585c27dd4a32f997f595fbe4d53628f29a63a90854c074ce14abf21b5c0" }, + { 2704000, "f26eb952d7fd8080e3e6e07f4a21564e3770320a7d6d37c8f12af9b327a2153f" }, + { 2705000, "508d62eb3a12727ee7dc1921037e8c593c366eda52095c0ba56b0bafaa1fe13e" }, + { 2706000, "879c03d4cbdc1cd22c2815b76279c6a35a8ef5db13dc021b86e2e015bb0d911f" }, + { 2707000, "72c05006b1d43e6002dc4011a72fb0669b73c78905595e9f457eb6856f41cc65" }, + { 2708000, "87a7f27fd7ad5feda56d6e9d70146a38d602c13da04128ed7012f2525d72cad7" }, + { 2709000, "17da8851fd157f1a2a0ab11e808a1653b586f54090d2940c6675a342bec42478" }, + { 2710000, "194d910d2630b9399dc195057398766007c9b0f9c2160da1dee0a68f3e2280ac" }, + { 2711000, "9671987cab9a5b088f7b589fcf8111bc586af9245632bbcaf14770698d1faa86" }, + { 2712000, "df4ab1638d4070cd500d229a2ccc63043c75584f86a930a26d49818b33055e26" }, + { 2713000, "cbd91b07cdd69967ff95e23d4c26a1b941230d06e7b178744889e557376945bb" }, + { 2714000, "11224f117e2403ba5417c9b6fe5da7ab4ed1c970e27b7295f1628c0124e36af1" }, + { 2715000, "4c9f480f28b931b5a7d4c925a5b9e73a5599e8cfd20b8d6452fbb5021f289858" }, + { 2716000, "60a14478d6c9171f0210812e2a93412c142109dc84afa8b1c11845297002ae60" }, + { 2717000, "913be98ae1b560c38c6ce70e3571928c81c86a22e4128f976783ef4a145af097" }, + { 2718000, "c2328c70c15693df18e6ea4a992874be15e6b6c94c01f91a566368d3366dad59" }, + { 2719000, "b2ef3fce80e6e445752e75907fd2478ddb0a2866fa82ae9472ada922b51bc29a" }, + { 2720000, "1a01291a2affdf903afe01fa36c9df48b432a5bc79473d7e63406e1401008e8b" }, + { 2721000, "cb77a27f4d516776600d9b3d82c34b80b56af3819685cff675a1867416ab6a64" }, + { 2722000, "3e566c7715d74b47fa99d7c872ea98338a014ed3d4c4b0a0a1731e7af51b2d49" }, + { 2723000, "267187f2402a62b1496e51ba54a5bdc7499f034975151d93ffb2ccb04d7b322d" }, + { 2724000, "4797a346a4870428f41645ac732f907af13c3ea1c2d68112c6259a7117f94add" }, + { 2725000, "54c373f4626cf3b1a47fcfb60dfe2a57d6fa692c5dcc3879029c2b17e80dfe70" }, + { 2726000, "b664c2cd50386c39005c70a5d8684feff664ebcde522bda360873d779fa308ad" }, + { 2727000, "acae34990e9e5ae74cf06fbedec3dabee5f4902b4cdface6ff738eb65cd730ed" }, + { 2728000, "83b90b4de8f97c96b9aa66e7b10e942153cb9e1b3840a0bb4f6140dbeca6baec" }, + { 2729000, "f31a4605317e4fe832b516e69cd8bd6f334d25aef52f281bb740d619891718f5" }, + { 2730000, "f09e36f674df80000b07642b2d695a81a42ab497443fdc05e9b71359b03cd0b1" }, + { 2731000, "57621acb52189c5f4e1bdaa6c8cbd5d84549c610f9584a67cee08612a46d05ce" }, + { 2732000, "4e6b6fca5dd64bf9aa4ec5efcfa29ca7a194106b585c205b8ab45cfd08c0b127" }, + { 2733000, "3d4b968742557cc2401cd093bf8810cb0286052336ffe7ad3b3f20b12776cec2" }, + { 2734000, "d16dd35a1576fe4f8ac97283f61750ecaa1632cb248f1f63ab2c62b5b2cdca73" }, + { 2735000, "a9ae20a808a922fcb0feaf13457f566fdeba807d1f1e3a62735eab64b8e79f4b" }, + { 2736000, "e5248c78ee3ea0f23a8cceb9efdc4b7189afec02258bb2fa9917982d7e1e3f2d" }, + { 2737000, "528a0e5db6b6dbc03c62719eae8bc7f8eace18af1e380a34e13c7e2d14c3c996" }, + { 2738000, "178c41abca94554ba53bdfabc9c75ea69df2901f0f39e3998962431f76b2ecf8" }, + { 2739000, "ca491a0946477c238506e171470eae73fbabf482c73c375c65a39fe6f2af4f00" }, + { 2740000, "68dc00f5faaa3f03881e108a0a0f343323bc554880af9d00a2e7a7bab5ce15c2" }, + { 2741000, "e407b8e3cc20d68df31c47ee3c4bd2a474ff793b767c15b79859d228a0ce3a1d" }, + { 2742000, "1456e9bc851c8ec5ecf3b04a30cc50932511846b27e433a13e54e9ef38c264a1" }, + { 2743000, "850cb4ce8d0cc636f90b490be46a23b8f161eb4afd5c8d1f8cd5cefca5d73686" }, + { 2744000, "767a9b2a2eb821c19230cc40f681bdb90341f224f6339ce684e7a73a556aec53" }, + { 2745000, "74645eb71793d87ec399a9194ce3658f5fce98e75de9e1ad3a9b812241a6704e" }, + { 2746000, "5f7b869ae12010c03e98db8672169147023b38e4d8eb3336490550b93e8cec3c" }, + { 2747000, "4051cecfbf5cbbd4c3992e167d901d9b66327c9382384925582b349199dc667b" }, + { 2748000, "1bdb9d1a6e3f5530f3adcf05e735ffc3df6a235ac847b9fcfff22bbcc95acde1" }, + { 2749000, "53b6f592ccde4a43efdc93a7aafb3e5277e1909ec2dc6a3f10c73740d151c3ef" }, + { 2750000, "4804581b02b8d6d5778e62c3dac2338f75a37a072c3c4e56de9589773af1bedd" }, + { 2751000, "1cb8c1dad4e1f6fee1c3c35683ae28e572fac050258bea0363b22838261fe6f3" }, + { 2752000, "c0d8ebd145a34f06607082fa5ce6ce291b67a898a50007e5b6b0d895a446a4d9" }, + { 2753000, "7fc357be2634e6b75b78415566ae0c5594d269a81bca84270898039a72754dce" }, + { 2754000, "aa73667427e7186c9d3ef00720fa536412779550b50d45b967613a65ff79cbed" }, + { 2755000, "1ca62900a6423878cf11ded9a8a228cfdc1c3473972a8ea493eab1128da2a53f" }, + { 2756000, "f822bb88030a980b7891ef6793914419df7150cc59ac8bdd70d3636b91f3c725" }, + { 2757000, "747d51d24a687a6b30c3650ce3fa278d937305eef8f2a669f90b2e3e907d55e1" }, + { 2758000, "532ed7546dae3937ad9a90ceb2a19b4b03baf639f859671e3fff04ab6f0e606d" }, + { 2759000, "b1d79b924fbff74c43b5c02b6b9cbec38fe9f66f29c5af0f200cbcaca4ee6784" }, + { 2760000, "1a8ec3d16bc96cc58b2090b1055ad69b61b114ba87da54d41167100ce1f007ee" }, + { 2761000, "4ea673eed96a165143f79b86eb743b1df9fb560acf29c6c07ac7b9e4406a7233" }, + { 2762000, "68dfe9bd86edeb80488fd6e96011f416afe5d6aaba25674e85b194bae4b8b041" }, + { 2763000, "b9cc18b3b7bb7e638bb9b548670b5fffd329ec80251294bbfbb84cc617f7b9ed" }, + { 2764000, "892c34773ef7294704282d4b81369b05b56039cf8e8c41840d5278ee0142314f" }, + { 2765000, "74d68dc1a82edd3d272919209ab23e1083ae887840e36b7d64f31b1860eba8f1" }, + { 2766000, "f1a3da4b8598428793a8d5edb246b09fe4988fe22060d786137c36136d29e96a" }, + { 2767000, "8305078fc0f45cc5290419d0aea0939cb6b7575070d11c7db07f8d3a64964a2d" }, + { 2768000, "48831c925b7c0387047902fe50e8048b86bccfc3c2fc0308c27ef763fbfc9a75" }, + { 2769000, "ed557ee29e17acca77687da20921e3fddc2d682d6de086fef40a0d7d463001d8" }, + { 2770000, "735de383a9f73180b0a5a4e1a9a60fe13329e4a62516759ee3890256f437d182" }, + { 2771000, "4d9c5601827f50414014c24efdaf218ae8a0238cb34ef9551d17ca155e77005b" }, + { 2772000, "30db97cd41b1fe3ad050558ad526205d9fdaedc602bb567cffcd8892cbe12c5a" }, + { 2773000, "9433d95cd570d65aacef12bdc960120fb7e9808f14c5016abe01f5ea00a93244" }, + { 2774000, "1058955e10cd0005ff90bc832553db2b6df20b016d412535912eff1acb551072" }, + { 2775000, "22db401cb0f9e578f5e4e8e816f9e745fa7e4263fd0d8b0cdd8c19cd4febe540" }, + { 2776000, "73c170919bbdf806e3793b749674e8fcd7ec5698b5b03bf23df4e8d5f1e69a21" }, + { 2777000, "21f7938acf8b2d2f5e37632fcc57c99b6d7c427dcc0dd7dfb8e6af86d36aacc0" }, + { 2778000, "2c5faa06b4de880294a5ff0c83202a0212abe724578e35cf77fbdff522c0f1c5" }, + { 2779000, "741909f7df0184e905c868c87acf3f5eb152e584342b29f7551a4810da65ec27" }, + { 2780000, "9250c863e9b5f68c1eb4005ee2b94c0986c8d7e440f9f9a41c1fc74098308882" }, + { 2781000, "3841918c1736de97432db870747910588414cbb6b5eae27f893dadf99705c3be" }, + { 2782000, "daefb11554880f792cb55ec2a7121f9e13ab98bc608d651a4ed1750aa24e6782" }, + { 2783000, "a66d7400c4357a88c2fb01dda47f8093152203c1b83e0aea3a5784e17c33f4e7" }, + { 2784000, "a60dc229d9039efa212185b4d29058c4cceebf385512071b17f57c207652f328" }, + { 2785000, "16509dbe22de5d9c098f729a771a3e0c8b6ccc56aa50241d12393065714f58ef" }, + { 2786000, "ed942bab3337a6aaa3bb491ba0dffd10c666efd1e7933585f6cc7aa33c336717" }, + { 2787000, "6307969099c497edbaa9cf7e2a1e37fb0db50ae598b4f4cd43a9cf4a9513377e" }, + { 2788000, "da86a16422eff6676a931e46df255e85398f96c6995320a1ea644ca3055733a8" }, + { 2789000, "cbbc0eed0c42af0613da0d2de99e80937f6a954baf6eb305da6bb57e9ed40105" }, + { 2790000, "873dc81a6ab28a6ca9ccabe8c8204d992962ef3c7e62c5a55669a33cc01ea2b4" }, + { 2791000, "09c13ebf50650e467ae85c48913246a7177994500073a4fec022923ee0103366" }, + { 2792000, "61c2fe58772faa28465a75ecc3fa0986856004a2fef54acede0719752b9ce69d" }, + { 2793000, "4a013b002e7cd503141c7d764d99f2262f247ae5d3f5a158e0fb9397b3bbd872" }, + { 2794000, "4485f7a325c9deb6b8d92fb26efb91a6d0b79be60abac15f64bd924d35aa38be" }, + { 2795000, "790a98670c4768c40a49dc9f264a5e39ee5ffdada13c4fef0aaaa3083c664a0c" }, + { 2796000, "1743f45a602029d3077ab46cd28d8364d99aa783df8b25874feb4216d7538236" }, + { 2797000, "b60a96289c1d4e8d7987707c92a4b89a74e13c467c695fc1a832cf6f07d6c3a6" }, + { 2798000, "f593e645840c1c7cc77cc06e52b5826c18d51541e4c762ebc61d981fba547c71" }, + { 2799000, "90e77036f764fbdc1722bc8098c549aaa074a5a0902eec674bf992b5b009aa79" }, + { 2800000, "11b5049e07539ae0f02c01cf60950017e1d2e1aa57dcc139764e07e1fa5661b0" }, + { 2801000, "7133eeec592c81017d6eafabae21f83013e327c66be4d4d04588d31c172945cf" }, + { 2802000, "537cf59bbb296bd99cefcbda79f0ff471b526e3423c099c73558a0507677f251" }, + { 2803000, "75ea06ae4f28877ab3089cb6d12ed499342bf7998a9f54b00b4a81fe081c6db0" }, + { 2804000, "b6e2151fedff44edfe6e82939ab9fccfd569b03f8520f663330aef6664a420ac" }, + { 2805000, "67cab4cf84ef48a0a6fad169eeea9cb9d003324d9739d25fc2a6dcefd972b3f6" }, + { 2806000, "97cfa8ef99db224452af5ab2aac4d95558ca8e0229733e85216828658aafe246" }, + { 2807000, "1ace244288483b197dd9e0afdc7e311782a698a9411445243e4f4afc0a947517" }, + { 2808000, "32afd6945d25c5eb332ace3ff67241fff35f8f8e04c3a5c5e54cdc9e83b6d064" }, + { 2809000, "965ba4dffc0b0660c85a318fd22b93f5a4ffd6c27eb52d1e2e8d212ab9435904" }, + { 2810000, "a1b7081fb212de3b3245d318190709771c50e7c720c797bf0166af179639e969" }, + { 2811000, "b9d0f29cf1ee1a08f512e6580b854fd059532b0429be069c77c21063c43a6bc4" }, + { 2812000, "4a0fdfd044233453d50dc347b1bca996a5db0f641cf757137cf091f0f131da14" }, + { 2813000, "f150dbde270fc74fdc31e33d222825760199533e032ceafeec49c88ce18f5fde" }, + { 2814000, "ce5bed86068e06b17a021ea76aa61e760dcd07d42c6277a97fad32391190a498" }, + { 2815000, "f15ac2e0623b134432d3b860bfbf0e0f4a2d68df33adc25b0937893a5f48c1d6" }, + { 2816000, "717d64696984d259171bfe4bfeb3972fe68cbb83f5b4ff051258763829eed045" }, + { 2817000, "2bb7130e1c082c5267fccbc0cf369510b42e8c7b3efe8f3961b38c464cf3e3d3" }, + { 2818000, "3ea34afa4617a82274be6d6823601fe6d0e3dc07cfd0311b1fb050549e705b5a" }, + { 2819000, "ca013e6c48766663982e91860dd17de87b1221e8fdefa11040da415760180730" }, + { 2820000, "b73a5177ee3198046db8a205d870d29c525a37f6c34bfdca8be901d64fa2bef3" }, + { 2821000, "4e3e774e314138191876906baaa133b4b8efc8606be2aa7d00e6b8092a1f42e1" }, + { 2822000, "c5d9c3a6ab4c67fa3ac0e7acd8ba71e91f6357f1dd44888127747c12014ab4b3" }, + { 2823000, "af4be96164acc52c87f4b23f5f6b8b920d6e519611293577026fc8748a803f04" }, + { 2824000, "4feeffdf718e5b7082e7784911bdaba6f2804d09d254b10c76108570e44caecc" }, + { 2825000, "db1ac27b102a33efc4f64680ea8d87d4eb620c34ead8a172b8e17f52368e560d" }, + { 2826000, "fabb5dc95b45fb7d6ff3083288db300fc5e719f7649f2900f1d21f3fde1e42a7" }, + { 2827000, "208798cbc11353294e883631fce54d92068b30f43ce680e7d76aa4e65e7db81b" }, + { 2828000, "586746adf799c9ef63685e9ad7f0bdffbc4701131cbcc4e7e0fe16c38255b005" }, + { 2829000, "9803ec8357563f0e4785e8cf23af6c235125be5eabaf0091a471e346b6b31600" }, + { 2830000, "6f4e293570121406feae06405a67a3cb39ce8847942d001e77ce61655685abb3" }, + { 2831000, "d970784b2ce88fc28603eb85f21dfb420ffa7104ee06473b335a1524d8c4096c" }, + { 2832000, "6634d04d710b42945d4affc72081cb9f3a0e7e8dcccf6f0930eaa587492c899b" }, + { 2833000, "33dbd53ea8925b7324526481c04b97f450ab3a52482b6dcdedbb28195f3f3abd" }, + { 2834000, "707dc95c04427a53d9e7c22c05d4e58c8ccc861acd13040810c7ed99bd4ffa23" }, + { 2835000, "23cc8ffe22c4722c9805e49d35fab1bda95139b3f8de511ccab2f9024c4a44e9" }, + { 2836000, "3305a6501d03d73aaa91516c6434fd7741b7cdbaf09c08243e50b4c47afb8364" }, + { 2837000, "7cbc1152945fdbb67f69b140c6210af135a30b493bae42ede124d730543e3652" }, + { 2838000, "841ec7982fa3400945f16b7e22964e3ff5eb46d659b308aa653d6cbe92a01d90" }, + { 2839000, "4aa2fff506f56b7672cf8c382fdc569c2d19d6c44fd85a287e6ff22685cc4724" }, + { 2840000, "7b9fa94ba279ab1c27e545df45aa4f9b6a03eb0bcfce7395a8ed20de7411249a" }, + { 2841000, "d5faa8156449d5c5cbf9e1c487b86572ccfa472a72d7dc3cee866e67154cd040" }, + { 2842000, "87b0c65e20cf0f3ec1785311d242a02e961c37b745df1002675a4fef74e5cdc2" }, + { 2843000, "9b1a4e071420d62aa7d28b002396be2aeaaf9aa6b532b672cc556ddc71cacc30" }, + { 2844000, "da12734d02a16b5b660fb4555e5d5ee15af2de17b2320da6fb082dca0a574f11" }, + { 2845000, "db537fa79ba3a5b1caa2ae9a6e48abbf879ae5becd016ccb98861c35ff3f48cc" }, + { 2846000, "091a4eaf47f6b330735251efb5be0e87a7bd518b4e00a48d24480f43f64278ca" }, + { 2847000, "b256a251add666ed4fc963fccbf408e746960a6a57b20f19f372ccb0b90af59b" }, + { 2848000, "eb89b2e3eceaa77b5d03acad126a729e6040f6017b50beaf674252975bd3c685" }, + { 2849000, "8277bcefb971329c094c64af6b6bca04fefd4fa784a4a8bc403f37d48220dfa1" }, + { 2850000, "88f38da9f867a894e7dec8dec52a0512317c243d60786a52ecbb3c8fc8d122d6" }, + { 2851000, "d1ad228af460f6578ac0b1cf0a8a5eb1badea5d57120b5ec46adbaf20759ded7" }, + { 2852000, "f65e20fd823b3ddd4592c186939477d1e1e7d03d3bb10a4c3d0fd247400cf823" }, + { 2853000, "025f97746fe14ff49d2399fc0953ae588c0f036469c75cbd9f1ee237a46c5db8" }, + { 2854000, "0538199c7d6f0f40761d68d37a903f26f5fb9cf431e59dffa127db16280375b8" }, + { 2855000, "b6140800b7f9084acc53afc73d77fbb9194fa399014c3112134d7aa3637d65a9" }, + { 2856000, "23fddc4eff6034b684fd3c6e8b2adbe8be2870a6ddddbd5eb4f62e98e90c5fdc" }, + { 2857000, "e3dc84910ec3558e38e2cc881d8d3afa3936f1cb5704e56609cd2d8fbb8e8a74" }, + { 2858000, "7d3b3a3871ee315bd04d5f4cd59bcb88a12df84189112d402319aed67c8e769f" }, + { 2859000, "7efbcadcb243e276bafd43708f07db057bce739b027e51a9e5fca7707d5c3725" }, + { 2860000, "bc154759dc5be03c722299a82fba8f46988846cd7daec7880fc120626403360d" }, + { 2861000, "dfe1367d23e46f0e7b29db3b8af192f18df45959a780c8c0ee15241c71f83c0a" }, + { 2862000, "2fe46603b3b30ea490079f08f8f736615c62c38c7c8762d7042f86dbadce61c3" }, + { 2863000, "691b824bab28f205f445df1d17672fb8cf25d769fc43b3e84978803d7e535d27" }, + { 2864000, "114926de58695f0de043a99fe3205b3cf37ca0fa96ab048fd7d2fe6c94387260" }, + { 2865000, "157e07ace38ba7d0bdfac7a3f96a129e237da9ffad0ca7bddaec49e3bb3f085e" }, + { 2866000, "e2a3272728ab02d13f751f9cac0d202026daa5c04f3e9a3ff6c757e3eeed7575" }, + { 2867000, "6e7242349d3348ae93741225029443cc4c311a855cc0c6df2cda842f3141ec66" }, + { 2868000, "11a69038e3ac0ff2cf5ec25c4a5fc76defa915018794c110e80fdbec4e6df6a6" }, + { 2869000, "69961b8e1bc0d6994c164e0570a7e50a782bd42fe5757f50dd844ab7f8e6a3b8" }, + { 2870000, "b76614d0d84b69f8337eeeac24295fd4953aecdb580ed92511385256a1d5dcf4" }, + { 2871000, "390c1e46d024d75da6816054258068f3ea2250af182587ea9f16797c0a1eb080" }, + { 2872000, "0d828294192c3ee4f4f512478a358841a73533789f090d5808ee735d9fad3d5e" }, + { 2873000, "6ac5393a5eea7e6dad804fc5db2190a83c26e0e231d7723e6a6813ca71841dbc" }, + { 2874000, "b526c4190ee2c4da10a0001d6f8491e2da85d51ff6119b95a2658517a4fb3dec" }, + { 2875000, "e08d100021392e983586af82d4082851e3f4045711a89a0ab0130073ddaa68de" }, + { 2876000, "98aadc2082dcb3cd813d5dd64c1abf99579efa0ca97d6151339dd883c1cac1f6" }, + { 2877000, "4d02196c9f0bd54a6aff28b5ae93b407427ff4da34be59949cf5f74d48915ba1" }, + { 2878000, "69ea8261713bd930d27a38bb6ee6b0f0677ef823d0a86ab613f53eb763c65393" }, + { 2879000, "5213b2384c1a3d9a176e2ffc535aad02b3edc668d058e9979701a769ebd343b2" }, + { 2880000, "9a5fc0c8df9ea23b2a6d6eada14a3ce340396761da7f5a41d214cf7835b20a9d" }, + { 2881000, "934689e474319241617f4336e50df8e0c2788292dfa2ac34fe616e47b6ac7874" }, + { 2882000, "b5bc34a0cba419e92701b6d968363ca3d1133c10989c040a4441eedf985260c5" }, + { 2883000, "1c97ceceed42296fdb1739e12a524940aeb62b24fb98ebbb4b87f6b16a3cde16" }, + { 2884000, "f8d883d2edd4dced40d6562f6116297520d69075ed78da56222a85bf3441a7fb" }, + { 2885000, "7869df5200f80932d0271004a49061eacdaa4b3fec519893b93f841f488d9939" }, + { 2886000, "e8ffe5b4bda00e53d297a206746f6d01e32c312b52024dc0e32c8d66dddafe2a" }, + { 2887000, "9f9231aea9e340bdc8f644c90b40e553a0d55f751dc932c1c63f0ead4ff7fba4" }, + { 2888000, "ceb237f868c61994247cedba59671b87d9869e592c4469ea9e17f04101aacb94" }, + { 2889000, "6b0ee86430e44b2d05290768ac049aa74d1121061121558521ea15259b8aa232" }, + { 2890000, "f87b24dd43d1dfb69cc56140cc7a0000bb7c0f757c33ef4a966c88d875c40e94" }, + { 2891000, "bdc06d125235206b4002077e5913233b90e327115229037031fa671011bae541" }, + { 2892000, "6003f24349f90dbe558166438f31065917c65d0906175702762b7eb498679bb4" }, + { 2893000, "d06cae0a8a9749634c9ec8e5c0fe3d7a7a6aef5b2edcab3f022d5e3ce7eb97ee" }, + { 2894000, "6e75d7215980c553ab1da19cb32c1286a3f9662c53155fbdae493d627fd42b97" }, + { 2895000, "3819b480a3b7ae6c5717918c522bbaa7be4399ecf7801411eae15d627a6b7f87" }, + { 2896000, "b3c482d62b1bb4a62cf6073b7e84955a4be716310094a2db078b96b4eb1abf47" }, + { 2897000, "7caed1d7bd4dc3d2bead3495ad6200cd3098c947f4bb0fffc31ddd51769daf17" }, + { 2898000, "4d868201f6c26b8f303f681386fea13c74f8fe945e0abb2abcbcfd5b47b24597" }, + { 2899000, "0b95e720d9bb7daccab156ce338f0fb5609a2033864ff6042abfb2cf30ba6d21" }, + { 2900000, "f00092f307be8376972d0efe41fc00f2087397fcf34917c7a0e8814ca3ef2ada" }, + { 2901000, "895695ab497d8d0e13f20e87ee3f2c17616bc619f8d67c3beded49c81e8aa575" }, + { 2902000, "fec558851d9b4916d3499d8ef72f39e986040950507b7c847593d864e274bb30" }, + { 2903000, "b2a94dfa26ca0f57e7a6eb121f0f6c2bf88c8feede9a5c4493575bd1a73c7aff" }, + { 2904000, "7dffcac745ff7ca6e9326d4fcaab048c066d3d9819a1bc06ff1eb4288f27b24b" }, + { 2905000, "65bf840e397b06cd81c437a6e2fbe1ef1180dc98d344f8f1b4a3d2371072fb7d" }, + { 2906000, "92f164e9ede5c2a5a742358893d8b901e21cc758eb47f07dbc56a7350b51a285" }, + { 2907000, "29a0c773cfb8e122cf5b01061526417d4d04d5b6b03f7e506c56ba35de927dab" }, + { 2908000, "51e07cb9c50a99a93d2ed5501745680efc165e2b423d8cca18230fde3f27badc" }, + { 2909000, "93fe30561cd0298d52493d3852fcae993b526bebba7510d8624e3da435434b01" }, + { 2910000, "ecc8cd48d4c95955623de692569ffbdeef1d22a00296d6814d4727b81a05838a" }, + { 2911000, "2f28225585ebd7847eeda97c1f499289b9d96ee46248a39ea4fc833ea0151914" }, + { 2912000, "faa72a36e9e5a1a5fb8af69f852d15c31e6020055fdf44f348653116a1bbe784" }, + { 2913000, "2fa66279a818fcb76bfc9b414031c2517e21463dd0f54c07dae3169c32ee3e2d" }, + { 2914000, "dd68619c37ffaa507b094f355b5b2e6865ec138876417296a9ec430b02486cee" }, + { 2915000, "8f9931f181e4af7d23f4726bbeafd2639fff31022ae909548c9c77956227ffdc" }, + { 2916000, "e4ecd174243b7bf6bebb78a6e37bffe4a0268dfc5d2dae905a3b79d0bba28c20" }, + { 2917000, "9a93529d2e20d015b4a4242fcb895d7d1175a55176bed0586143e44f9f648e62" }, + { 2918000, "3558eae3ac57999aa0b39478956a44e5bc98264300808edef4457be62d165bc7" }, + { 2919000, "1990ae70c239b74924ad782d81acda4ce920e7189081a14eae0ea3714ffdc406" }, + { 2920000, "37212a62163aa41d125d988c6688e7c4761e19225e635043b33dccc020b4533a" }, + { 2921000, "15c3938224c52ad3136aa22efd95c1f05dceac691972e6968e461d64322115b9" }, + { 2922000, "bff7da063775b960410a7273e37dafd6c14d036c230749bc7fe9472c4e2d5041" }, + { 2923000, "f519c69f821f21f69b46647f6c72f247a9e2705d24685c7a8609c2b62e15727c" }, + { 2924000, "705591938579cab1a3a3cd79eca7cc6fffcd7f419e952d17762d3e2bea59d088" }, + { 2925000, "4adb088eda5a1b90226e58aa79dd5482a6cb40804112fc99bc091e594ada9505" }, + { 2926000, "9dcc01073c58821ca2ebf82640739dae7f26745042f9cdec90b4739cf73d960e" }, + { 2927000, "b4655540362d3b5782900fa8e4e75c5fc3d7702a1bb91eb1e4ae7b68ff5ba0cb" }, + { 2928000, "aa20039830a70dacc36d7383a55b6c529a8273d2e05c90025f1b08d6841e6958" }, + { 2929000, "88a714ac70bfa2171306420978181110cbebc1558805e78c06847ae4d6290bd2" }, + { 2930000, "499b4d992f94330fa66a523ab30a3850b0b44755b205d326d1837bfc7a2833f8" }, + { 2931000, "0c20d9faa5feb3311e10fcfd84cf54687ac28383e5698dbd0cf95b77ff2f74a2" }, + { 2932000, "cf7777c550b2348f81722928050e8468ff621f3769a1cbe9c09765c678a7d022" }, + { 2933000, "f348adf2c68baedd795ebcdc49134d98efb74843819fcd5d4835df37ec9328d1" }, + { 2934000, "50edcdbcf1ccb2b51acf64e85513b5e85d5d630c81d6c468421a3eaca1e1c87c" }, + { 2935000, "9e9d6bc635f5560a1bdc8bd541b3ec3ed3378887cfd61c0b4832ffb88dfb10e5" }, + { 2936000, "7e63f0950e5eb1862971018defd74ab766077c36e4b0f3f3a2d28e15c43f7dd7" }, + { 2937000, "e534c62d4f0d84c28dd8208ad1b4c18dfc1eab32758196f82967a8560c50ec3d" }, + { 2938000, "74789409ae63d249e95083c854c6892180dcbc0349108304be55bfac4ddf38aa" }, + { 2939000, "3cfe6c8bd4dae4a1fd7965aaed0c0bac790b66443729e87333f23ba82c76744a" }, + { 2940000, "7d246e814c721dafa8b7a3cb24b42cf0644866225a56cce910bd4638a4383671" }, + { 2941000, "864b353b26a0c9ad5b1ed12659e0fa6441c720fcde96109cd54277e1d4bc205d" }, + { 2942000, "17ce53db974876e582ee327053ea194cf5d99937c08468b9cc24fccd32b56985" }, + { 2943000, "46b88b21090a22fd800b0cc271704513e17ca8e227f3bf1a9a71a18353658a3a" }, + { 2944000, "0bf946c0bb9847c860a6e35ceceb6a1e12eea96352402561f70d2626a4ea87d0" }, + { 2945000, "2787efd1654a3684da04af36c1e5894acbcd5779c829cc57297d5a84e4ab525d" }, + { 2946000, "951ef3b15956348de24d22b2c6911ab340b2db0db30c76400b8afabfe6e7df49" }, + { 2947000, "1898dbed3f9a7fbfbdf4b403bc4c30c727dcc90509a4172ef9797489b2c152ad" }, + { 2948000, "a41d0c69b9ff64d7cf55793ae7630a2bab794e68dbc4c39dcd17db657fafe543" }, + { 2949000, "410022f0c75d87d5d7207b4bbf649f8a46d467e92a5e9dde14703305116ff92e" }, + { 2950000, "ee74f785ecc67aa00f9de61ea82b0224c4d836cd6feddd4e811f5b1bf885eafb" }, + { 2951000, "c79f4e84cd02ca4d731e9fdff6389f637f6eab357bb1601fb9a79c82d5e770a1" }, + { 2952000, "25c755467457310a50e40c358a5225401748354bd3896a81279b75bdc67363bd" }, + { 2953000, "1f3010f134cd45135197e421ae9ada5778750d64c04043d957f8d035b104b99d" }, + { 2954000, "2c993f3b8f7d43dc3eb49ca76da951bd09891e0fa376e092fde5bfbc63342deb" }, + { 2955000, "4aa0286a4447fd3a2b4c56ca224008653aec7cf79046bb78f386250f19ceef60" }, + { 2956000, "8bee73a3698094387a7bae467e8976e7ddc8b54a40c2b5704fe48430b2c6ee76" }, + { 2957000, "1d18df661f7f9e8a0af00e2cd95d8c5338009386582b89844d0508163f9f0e57" }, + { 2958000, "512dd899101754a0f2b9d377d0535cd23034e0138a7008865058e32c82f2664c" }, + { 2959000, "90ab3e79952a2900355f43e97735ce6b1553cf9b09854fe3b3ec1c243b555409" }, + { 2960000, "d3177c665a0b946fd3e81091f6322ea02b88ca43bfd9729b035ba19ad81a58a4" }, + { 2961000, "db4ef73530a50ad6f704b0c6fb184c12475ec4f110c0ca0fa271c4186c99afa7" }, + { 2962000, "be4763f3c22e78789f2d4bf5ef8ab84d38dd541ad205f90651d74e015389813a" }, + { 2963000, "dbf23060fa5ffd66fbfbab4b61fe9d3ec02db66220f9c42632ce9236a6236eac" }, + { 2964000, "3a834275624d011e0a3e7610f4f8f15614c844598ee7cd73f5c5d40e51fa53e8" }, + { 2965000, "d765fee236bdc38cdcadb2c2964e11b65e929c2ab06dde474fe0e66e696a2915" }, + { 2966000, "94efe98bfa526fc872765bd366cbd0b5268b02976c632a5394b003b08f3b6cac" }, + { 2967000, "68e61ba7671454778a936a3dd65515fbed82f52c9aab4fa5362714f8732eea14" }, + { 2968000, "7f911b23e842f7ff59c4dc23668cf64d0961f2aafec99b6aa60a3d7ded44f33b" }, + { 2969000, "31abd6f5f42509baad5a1a77699dcc6e7e0287f490d7524f92e5c1dee7b09ae7" }, + { 2970000, "cb7cb4473c6ae5d77c40f9325745efe7b4a853357d95ee7cb5b6eaae5670560e" }, + { 2971000, "bc6d2053b6bcd002f9368a8e002876fadd92c10f45c1fb01265350552feb5aec" }, + { 2972000, "b25d4e264fd9cce33f94ab36a6a32852b5bc80461a47e1865b52c2f105ffdde0" }, + { 2973000, "9f9a812a93637291c0c147242d50de5e20fc26c64cdf1a0f2638469ca92ef7e0" }, + { 2974000, "42892c679fc411e3f44cd0fb6fc1dd929a94a832f4245e3ef931f70a3a3355f3" }, + { 2975000, "78d9a883fa59af52aafd3a483d0a04ef045b2262bc01757a4540dc580ef9294d" }, + { 2976000, "23bae00e966149ea6db780fa7981f4dce7014bc1f287ee4f1ca6a97b1ccc1181" }, + { 2977000, "4365cc4293d5f1d4d3962b91e21b883ffc53fc876a93ef35c53ab1ae6f1eef9b" }, + { 2978000, "756955fc283e43e9ff8a57a654a1ea9df16b7f6e99bc4039a93c238020fa79bf" }, + { 2979000, "0ee8a16dc05629f207b2d0df5071cd5a6b9e8a0f1f526e9766b711f5eb7dab76" }, + { 2980000, "ea1b4b87fa8be72ec9185bdea883d75457567de158c3802d702cb86a88951053" }, + { 2981000, "3f665e6b9491490224700ff8bba8e2ae74ee360db5accf5b9561fc0501f25333" }, + { 2982000, "37b855c2902072fe5bff47dfd155e2413e30235130abf7c9193ef191a31e696d" }, + { 2983000, "2cc6a3acc301cd7f128d7395b05aabc03d9d98aff567191828bd5707897f2ebb" }, + { 2984000, "17e96ebf299389febc9c76e81286da32124cb139ad41492cdcdfffea0da1b94f" }, + { 2985000, "9b5b059168eb994add6a0703e25d3b199012994d23c36dd27a0d7858abdcbb55" }, + { 2986000, "0a72bb9222b606d8e137fdb431e83b1cae54431fc9da5cb8455bb1a02074ad4c" }, + { 2987000, "d36213cdd2016e1825725cee69f7bd31b381f07615dd2034c0fef771c23dc159" }, + { 2988000, "0cf4610b17649b973976279ad61b0e788dd43a3d806f3fe643e0d096400df52b" }, + { 2989000, "12455f1fa73128bac129e2bd45324787c23ca527d6d21a5684254bde9f73f4d2" }, + { 2990000, "328c5f8c6fab55f73b20274ab61838b03c47f3c70cdbb416733f320c5daf9ab9" }, + { 2991000, "1b338a36300c77659a98bdc5cff8ec99324078023689b62b6296f9791da2cc16" }, + { 2992000, "abadd7811fb2534d5dc95eba6d3d5410b27a1fbc4fb89ae7674188c222534ee7" }, + { 2993000, "eb3a4b772f1095dbcad58e38f4f8251fd661fd35fc9d8b34b25b59df8826b891" }, + { 2994000, "2bca5ebf0c8290fd5527c371e3ea6459ddfae2197e87dcfe8066f0112a29fa4d" }, + { 2995000, "78c0f93f1e87233628ced9ada548cab24a727ed4a2dcec2b088fc2c493aac90a" }, + { 2996000, "acc30f8a06ee0a9c0c14e71f63e16aed225ae95df506796e358d491962432d22" }, + { 2997000, "d24a85b4aa547a62f68b9d3bf31abd71dcfdff28e203ba229e3db149d2ff712e" }, + { 2998000, "f3d96c2e1eb62bd35d4fb584417590b52488de4e65ca9071470239377a28343d" }, + { 2999000, "0e5138871d719127a87de490a3f50d718d7f3b7656207e8f6792dbc578e911ae" }, + { 3000000, "5c25f9157bd71e4ce367c6b2bc11fe6be51d53e8ce905973eb2ce18b235b34d4" }, + { 3001000, "0b3b9f62ba31e5d809535b5b7158ccb5ba93b600c55976e4924e6c5f2ab40f6c" }, + { 3002000, "4d9d906013b10af6a915275c2c403ed7c7ef5d2a2fd2ac1497e6316792300897" }, + { 3003000, "83ccac866d37231510e382588297bbc745c5041b6f6db2f3ae358033e6399b39" }, + { 3004000, "8956f2c94d5996a15f6f7feca01dcc94d33c0bf1e24fe7076f70fdc2a6012adb" }, + { 3005000, "9e0aa33baa221b4826dd7077d233e0955752f8a673aa60c0083a681cdae737d8" }, + { 3006000, "67a17d8f48ba828573f7e0402b5eedecf4924c047279ab4183944473fb08c42f" }, + { 3007000, "f2b7ba7d451262530a3e2988bd25abd25876be29092df436d22711bbec8217f6" }, + { 3008000, "33b54604e7c4ae6b8a14030634d82c0ed1febfc32e1ad76788fdfb46ee1b9231" }, + { 3009000, "d50973362cfe09bd8ae2d53737880b0cfbcd21728ee33fc9e0b53280019b962c" }, + { 3010000, "765898ce1d360ec484066886ee52764768a5397d9a79cb313c62c4ca53ffca36" }, + { 3011000, "94d95559586e7dbba1f359c3a259e2e46ab3a87cfb7ba1f4ba7cc73305065290" }, + { 3012000, "548e244cbf64edcf323d7cdf7bfbfd2c3dc3402f08bc8e2032199f73967423db" }, + { 3013000, "2386bb38ca46e47fbfd0a6e41c5cf3a6addc331a8966774a03eea688ef24001e" }, + { 3014000, "cf8f5924638d961ed8a66525d7a18ab81a275540068e8b64c2b622a872b3113d" }, + { 3015000, "c7dee77653f7e6db4dcda861d2b3f3b941a4e5ffaac09ae837ee940aee237504" }, + { 3016000, "8fcd10fce45776445e38c40c5a880e10306a17f0b1551568be0acf50d0ee6839" }, + { 3017000, "1be22280b41f98203b6fb96f04e693c218b71e7bcc9baa5fa3aa75594343cfd6" }, + { 3018000, "6ccec89f8d2b1ade9a9950b44abc50499040a792dde422eb6145b00088f2cdb7" }, + { 3019000, "87a4a7d662579a9531ba86a4dd7074a69bee751c6fd928bd034d98321f606482" }, + { 3020000, "7c5e474f2813a17fb2a55dffeb4d5f34a3a6ab627964fdedbfcb699b1336d2b2" }, + { 3021000, "a13dcfed00f1e9f2027c2030b36fc19ca47a5fec27c410ceb2a6fcb605aedfbe" }, + { 3022000, "01d282df5ea7d80bcf6466d41f8d2f059924251dd10729c5580b8041834d69d0" }, + { 3023000, "ce42c5011b5b6d971a5e79e45a908e44a543703be0a43687a164ab1baa0fc409" }, + { 3024000, "336953cc7d0d4bdf37b5db850f283a957b16fa05fff0073f0f8b7dbf2a22f42a" }, + { 3025000, "ba706928b265f22e7fd8de31df6a1fa487a9d27533c4fc5a0cf6484405d9451e" }, + { 3026000, "31381e843113a0f6ed45d177173785861abe15db6b4de45adedc9b0d7aae470d" }, + { 3027000, "7b55e96bcbfdca44cb5d070c0281d7d2f38de81d63649f0d52ab823c387a5054" }, + { 3028000, "9d6563e49af1bc6fdd574e58aeef8ffeea22d01fd9b793418523d59e94dfa176" }, + { 3029000, "22143c8eb06fdc6126807bc11508c97d8280dd2b1e26e5d2d22ae3316517c4fa" }, + { 3030000, "6d4a4541341110709159322e929bba110d45de7db30fa4306e972ff0bf61ffae" }, + { 3031000, "508d6fcc9b961aaf6d0f4fcb856e3379d4bcfce9fbfa06d1004287fde6a831f0" }, + { 3032000, "0ee0365efeebbb2953eaa212a78c3303f26c0a67919279b72a45e4256df32997" }, + { 3033000, "2b8e55482ff8fff760d9fae90f3cf2f3cc5bf03898c003677b2dbf71e27f781a" }, + { 3034000, "6a181a94d98199b26de91b7560436dac7207cd4dd45e7442a892ba394fd023a9" }, + { 3035000, "111c3e9b6dfd3dc30fbf6a0a4102c66e3ae70bef63d625e26f38a2dda692da51" }, + { 3036000, "9c9d760994801915f23e58c5fb234b46b4e97ac1c9c4b01d0d9a031c9487f760" }, + { 3037000, "8869a18cf754ab832ce28883ba849e2a93dc843bac3db001e6ef1144a1bf4bd7" }, + { 3038000, "a5f56a513915f3df6ad582e59b0a936ff1ac321f1f94d8c2ededa95f2a08d4e8" }, + { 3039000, "5e92b53395cf9c87e5bf94c422d06f8545a9c55f311b5b3c24dafb6fd5aeeaac" }, + { 3040000, "7444fc35c11a295a3f3cbdfb777bbe40580cc81c265ff4179389e8ec0954354e" }, + { 3041000, "d079b8f3f5c6f66ce3b47b49922dcad7d06f8d2304f43eb3ec3250bb3f9a8a20" }, + { 3042000, "1cae5393fd4d2bd9d7955086ecbcaef9411f1ab78f72598cb4c09e94ae330872" }, + { 3043000, "1fb214b7693c4c54a7425c61756dc00a990c9442cc2dc6f7c92b7af3e65654da" }, + { 3044000, "f9360298425bc01164162126f24fdc4ac26b984f5c8b8dc5651fff253cc2405b" }, + { 3045000, "eed57ab8b800021545496ffc531d92be84f433e944d9ae62b2b4dd8f8824479d" }, + { 3046000, "a1da3c2157f019c6e9dbf4e1d32c3270b7a9d1ad96182db533048f3ad8469d20" }, + { 3047000, "3e81e33c565258db7cc373729f1be67f8ea010a14f91701dab7b20ae181fb4e8" }, + { 3048000, "89c36cba2d2aaec2a51ac3e3c3d1e434ed984b9ee6d9a5260436082e4e3f0891" }, + { 3049000, "d2fea290b484b5827414d6d089f41419db48b959963936c11a0e98dc798ec7a2" }, + { 3050000, "4f9614382ca05d41179db2640d7694f8796fb26baaada3ef4775c7a9261881cd" }, + { 3051000, "99a7e3b51b791295bad8579ac4b6340853ff3b8263e9fdd1351a8078d1aac05b" }, + { 3052000, "c68ebb01a599834fa6dfd8414da3ceffe177c49bdae142ec38330353e47b6e37" }, + { 3053000, "39baad20e3f12decd65b29a17d654fc34dc8e9baf372836759313b686de23810" }, + { 3054000, "e1554b71a0ccfe2a1405817974b6a5cd8086303ae77a2243f7cb0250aa30f88e" }, + { 3055000, "6eb53c330bd60768f43991255a06fee700097492f25fb4a0d6a58c2d961e31ed" }, + { 3056000, "b089b47d34be46b4d621eb99f24d6edeb8f1c4a8db3e14677e8f56603b757de4" }, + { 3057000, "f450156ef0491fdfcdc4f981713d31ad27a36072b1ede04f06c36364f65c1698" }, + { 3058000, "ecaabc81ad09fd0fb21b2036305ab0293f58191f8c76b82c577bf3dad44d0b5e" }, + { 3059000, "422a39760fb255f2295a590c17b5d7212fc3ab214f6a16b458cb70f0d9af13bf" }, + { 3060000, "b71529a0c8eb46bd26c08100fd571ea69a8bf35e95ee89f6c5c1ba1389718033" }, + { 3061000, "95f254419da6301927524f08e841ee857a0cd1dd5b8a724ce5e0e216adbe5349" }, + { 3062000, "76d53794e08407294891036f891a51e47f2e98cdec6a5d9c505b0235b6f42505" }, + { 3063000, "bbb185be470393f0275127f3f7f45e05923d2ba9da0d6e6f036c2f7c72f7796c" }, + { 3064000, "97e50864324b9360d51c770c79769523269e2fb30d9b5677531c4ad10c0109b3" }, + { 3065000, "9eac5fe3a2858ebc4e57774cab8ba331d508be030ebca22fdd7cfd3c33e5e061" }, + { 3066000, "634ef14bc5e943a73dd73cb4111550d385d158243691edf53964554a08b80380" }, + { 3067000, "8fcb09ffff3728f61cafdd93a10d6f3d2fea108596b6efecefa0bc5f75d42457" }, + { 3068000, "8f0568fe525f328373a584c8ffced9ce3b06792f1d94e285321a75f98c2bd2fa" }, + { 3069000, "44b87c68520e6acbebea954826dd5e776105965c9d2a30582bf3ad19c7765e3d" }, + { 3070000, "b552f05e1fa92236443269d9ed1ea54e7d51e684613b7f2f2acbc00c7093f688" }, + { 3071000, "c3985aa1e09ebc50656ff7d4bb63e2c6615257bfb327a48091cac1ead1cfc7ff" }, + { 3072000, "3214e19393cd0cd8e1d6509bc1ed5342121352ea2bb093d1079c296b85b417fb" }, + { 3073000, "76d21b29041d218156ffe91afa4cf63932178a3d83e8c9c8e146bde62d49f28c" }, + { 3074000, "cc335a7ce6fdfeec607058a2f98697693d14bd2bdfde7935f59b23989e29e60e" }, + { 3075000, "fd37593851a62e3170e3d3ecb84715b005fe8fbffe61a4fc32d0cf16a1533cce" }, + { 3076000, "c27cf123745da7e3f5e7a4e4bed119bc10b8892de28d16c58586f0e901700bb9" }, + { 3077000, "67d44de0ffe2cb86e515766bf33e1412f42c03dae0620d07375a71e781d85ce4" }, + { 3078000, "89e5fc5892cacde126f187aec326be5d33adc04459c9bad3cef377218519efbe" }, + { 3079000, "99774b91ebeba3d1ab68cff8812f15998dcd8f82a221953b4eafe263581187a5" }, + { 3080000, "cf1315a2217955940201b37980a85f4211b8bcfe0ad543a5a77329418de2527c" }, + { 3081000, "f05faa1ed0a8ee19dbbd57f9a4c9eea2e82faf5a8ae1e3ff22a67bd4a14d07fb" }, + { 3082000, "c6ba0eb3e2ba95c5c7921f1c369208a3e539761c3b1260b657744f28d14b288f" }, + { 3083000, "b0c551e974bf388c51fcf48324437ac92b29281e49328406aa743adff063ed30" }, + { 3084000, "a976514b9d9731b4b2792612027121e6cf23450a81cf0925c672f7e7d4b2c838" }, + { 3085000, "cf8827788421c1aed64aa71c1c342da421c7c9d9f457eee8179861027a4daf12" }, + { 3086000, "314aa0f3033a8a51013ad23385ff1158a38a71be2d20044db5c9deb04fa63697" }, + { 3087000, "13db6c88a669bf223b35fa4ad1904fc7b439c859ef7a5be6a2ac5fcbb113937c" }, + { 3088000, "4921dac730d47885f7f9ebfcf5e92e616bf37de015854ef6994ce52dea69b4eb" }, + { 3089000, "8072f3964e4588ed2f0081cbd20dee18804ebc38de495681890b4c43bdc24a87" }, + { 3090000, "5218ce00524cbcdd6dad30d9bfbfa6bac41e7279bb55ae3f2e34e3de4805b547" }, + { 3091000, "119fc5d820584f5525027907030a1a63f2d801e3a91349a6f41360498a0ac7ad" }, + { 3092000, "68d9329f3c1c7ffb783f6b598869f7a6093f06786fc93dd6590b7be59d76c056" }, + { 3093000, "49358a12c380164ff8bf28d83c6cc4c79de41beb1e43a81124239421086c7c7a" }, + { 3094000, "ce7363f433b402a78ca9bf08da1978d506a0b511788ec21e218dd28f8136bebf" }, + { 3095000, "db51e079b6bba29c17911e93f156a781389f27e17b3c22a2bfc11aa47b550c43" }, + { 3096000, "be417367ce8362e226971e2a5d6c19510534fa7ab1836a5c443bf2d0791ba306" }, + { 3097000, "ab2320f67aa316ca87af5c3fa90f5970019e596e121363058e5942f0c3054950" }, + { 3098000, "0f880decf6fe3064c844b23346e5c54e5bc2953f86cd7bbd211ddf43c7c74768" }, + { 3099000, "27075dae4e3acaa74fdaaa224723837e800477b95acfaa9f78265b995eba80cf" }, + { 3100000, "8181379a740aa40fb3a8d1d5d5cdcef7ea62d49ba6f3c65d009cf02383e678db" }, + { 3101000, "389e462cf17fd7de3d9256c3ee8bb2c4e2204601f3175722de163588356fce3c" }, + { 3102000, "63a9c26e6e6343443f2bd5f10dbafaf622d9533489c632fc3122df556c530d7c" }, + { 3103000, "e89ab3745e56a84a8b3b174c34b1653313bc7af641de1c02af03c83e9cf5dce4" }, + { 3104000, "3f1796c4acb909f44a7b5439701d356ab7d0ada0eea5e8bd30c67f13644bf3bc" }, + { 3105000, "fb5787c1108d962cad027d2742c47695444ab125320601e34c6a7a28731f3bb2" }, + { 3106000, "bd8b5e3d80d9e809f8ce4503cc3a1722e7b1c269e93bb4b4244dd10fefce7d59" }, + { 3107000, "b78b8f72f62cb0e3a25c534bdccdae55ad90636cfa86ca157c3b4bc4a9c50b3c" }, + { 3108000, "5db4a3b969e0b06dd50bf18ef01db961dba97c1c9d6c6371e22413d69fc290eb" }, + { 3109000, "96290f9e9856e70081c6bcda011be2c48f9b7f79f1de53b38e17c4bc5fa93ce6" }, + { 3110000, "f3e89899f9cc0ef605ac6822198168b3b68cc317e6bdf5a4c438519f756f26c8" }, + { 3111000, "de5160d9ad80d4e98dbb1b4587d7c24a8a5530b8855320ad88c9e1522a8dbf94" }, + { 3112000, "41810592a7e1e32df10b711310bcaa695a47512be8d796d84e5afb000f8ac340" }, + { 3113000, "6963699724dec80377862ed98ff93cef034ead326adf313387a29505f7706790" }, + { 3114000, "ea1d5826d9d5c992d6af2c36020562dec27727220237b8b343ea5f628d75c90c" }, + { 3115000, "a65da760173c886100052c1f229eb390f4a622a2e799e44caff58e8dd3fc250e" }, + { 3116000, "1bf1357ca5eedaa9ed9ff57c1c844898bb7f0264839d6b64c2ca427a964e47d9" }, + { 3117000, "8b9ecad196459d881d6f771218ee0aa8a734358fdab2ca01dde69524682cd49d" }, + { 3118000, "dcf9ed93ebbcba66ab65bbe5c3b2b2270ab271b439aaff0af1eaa004612b5372" }, + { 3119000, "ec38e319c5a853504230db117522191a5527a9b3512c9ad4ab904f4193d2c43d" }, + { 3120000, "595e25a440340e1ad78e118c183ac02a1dbd6b053406d4664cf3a64b6df0a1d2" }, + { 3121000, "352d2cc9e3b27da26f0f5983fd1c914feacaae874c5b2dfe72770964ee8207a6" }, + { 3122000, "888c4cb97d45a9a6f726588bc3373e0c3997e3e9c967ed0322b985d9e83c0625" }, + { 3123000, "b48d193f7c1ad92ea9d40c76d9436f367e8473f030933bafc8cf0b3e0b014b5b" }, + { 3124000, "17d422fa98c670d0a1519640e5111353f05cba518e906e331c67490f76a80fe1" }, + { 3125000, "d56a0372ef438d5d7a3a984bd9eb05abec1aab9a3808b1b837a70d9e81320278" }, + { 3126000, "5ef58a6cee33923f03fff2f22d3076553d73dbde539d0442027531cca9e6f6b4" }, + { 3127000, "c02fb75c96b78bd700e447a013eaddf3889f22aa51ad5cd43c1371ecaab26b03" }, + { 3128000, "a0e2352bfd5e9c5d21192764ec8af742dcaf78f0f52d2452192565e3c983514e" }, + { 3129000, "7c0cb1ebd5b04860063ebb2637979acf29f3c925ac5309471fcdfda912797669" }, + { 3130000, "1a9ddcb0443be8ff19afd1e5f64bf1ac25541a180ea0b7b3c61b0c7a721bf7fb" }, + { 3131000, "34d774821111d6ca9cf54f42b99d004e4b857cedf5ba6d3f87a4388bdd8beebd" }, + { 3132000, "7142771c53f2b880bcee8ed8150d60566306bd8978116bd4448833c4e561d9d2" }, + { 3133000, "da64ee333b4273aae9589939338dc592d9094159a6a69b81e523e7f7331b9765" }, + { 3134000, "0341ebcd36b2b8d6f5f12fb140447093b940105d36e0bd027b7be910b3e3b24d" }, + { 3135000, "195580b3a710828166d7b3f0dd05f5ac502b319d0800d886873b57a6ea41399f" }, + { 3136000, "676e60463ad1781bec974443e6cdf0b66c82622e335aba2e1a660373255c2bbb" }, + { 3137000, "009a70ed78c772b8bdf16d13eca8db28cd0dcc55487c233a4d19996de4b86a4c" }, + { 3138000, "25c2522ee1e1d01d17c49c265cee20b7afb9fa935a2c1f4b92e8c9550841abf2" }, + { 3139000, "91c94a4781c93164d2fcd0a04667b17c57ad9d347fd3304a56e9d933719d2269" }, + { 3140000, "b618625fe7f15440dcb0c552b0b10746045fb9b26833dbf3d138abab3689d340" }, + { 3141000, "f912ab289e68f748204cfa4f4621c9609d4dee9ed7c45f6bf8c67bae5ce27469" }, + { 3142000, "3a5fa59917ec916806fe9d853f3153cfa5b4fb37867f58c98bcdc4ceb258d691" }, + { 3143000, "6d83be09d8e00d6a1883ec48324e3129986fc6e6178e39bbb32b780dad31c505" }, + { 3144000, "aea3888b87349076ca22f4be07718f07710bdbca55ddb9c657abf02e2e21322e" }, + { 3145000, "30e6eb105f262405190bff7c1602dbca75b744196dda3e7252e15dcfa74792ed" }, + { 3146000, "801320b0ec932141fb62b88be9dc38f6cd5a2399d81211f17431a55c5264ed26" }, + { 3147000, "09ef361292ab0fe69c1f254bd460ce69c65df70bdcd44acce79c0ed1c8037428" }, + { 3148000, "585077377ce46e8ad1871152e0a6bbcd209d86b70f0ae6af24c754fbf5face6e" }, + { 3149000, "eae94f19f9b4f7024a0e09d1923d93e9f2e3218f40b66db684365339b1f91cf4" }, + { 3150000, "410d589d09dfee9fbd536e24821f5a91dd00f773818287457c4e7869edff8667" }, + { 3151000, "54fb731905e864779609e719e062faca1ec84ac34cee9827db664756450a05ce" }, + { 3152000, "9accfeae5f07b2623e64b398caaf13f72b57bc4b5dc991b4388cd0ca5da2b263" }, + { 3153000, "5c8e875c77a41fd0eec67102df9dc0312853e06dd645767f31735b57f236bf06" }, + { 3154000, "5bc1a880f5962e0ae63fd65a7fde7cb784388070851135b4092ffae00168fde9" }, + { 3155000, "dd1d92ad266365bd031f21682d6717a6d5b6af8f3901f95cb2a75a56d1696035" }, + { 3156000, "bba5f48e3864fc0b96970460d087050002f76239b647f73aed5122175a59da64" }, + { 3157000, "9dc00a316fcb57ffc8b6a55f56b6450d24144a394dc2748bbcc4b8bb753d4b3f" }, + { 3158000, "79e2353c70d5fbda54ee4e8d7ef3e5194afd1d6c5c247360ccbe3249e287f746" }, + { 3159000, "c53cccad639305885e3d771dad76e609eebebd88e7abf5bf88a3d328baf5d1cb" }, + { 3160000, "9e1e2a71efe1d093018621d5c9738f408cfd2953df2daa0acf8690a82b549960" }, + { 3161000, "b3b7d4ac8cc37e1474e3d1f93b98f8356f35e83d57eef9bae26bf5e16a0738dc" }, + { 3162000, "abba3e5301f1fac4bcf1ef081130577fa409ad091da2470516489ce74265297e" }, + { 3163000, "aad231052ebd0cc5a1aec641557d6dd1e00f5e51a36f370e35f539dd3753837f" }, + { 3164000, "812bd0cd9758d6b3fe479b695e01481206092718363955923833b53138a7fa8d" }, + { 3165000, "dd27ce5354b3918fa8c2a4db59a6944442b4e49b624fd271750707339513a829" }, + { 3166000, "4e5a0ffe0f49fed0f83847b8c4973fa1f859b12cfa397df759bb2680fb7d73fa" }, + { 3167000, "eafab654002a8362ed9b7c53db6d707ca2f046e285f282b0182fea54e83d2ea3" }, + { 3168000, "b17b0168fd203b4663ecdcdfd45acdd248b07de1e9a2e975f79d8332fe2b95e5" }, + { 3169000, "43b6cb92be61ab46c34c9c45f6191d1e097fc99c46608d340efc06b7a49ba333" }, + { 3170000, "473d0594338fa27520ca6350ff87817d52df70b4804df54dd8a98a89db4de054" }, + { 3171000, "5c2e3f68a4a1008ed69571ade48182c39028937843ec959c98d33db37edf668b" }, + { 3172000, "742c8d15dea830c990f329fca9aa625e7142ce2e979be98ef04f46254912cd0c" }, + { 3173000, "624f9b0fa80a306c1586307d3f6200cd671d72239522a7ef71365a3c3c226203" }, + { 3174000, "9b0930e2b8f6fd879d4b5c234d15beb08dc9c31b587c45e0802ba69c1cd3c116" }, + { 3175000, "467ad2c6d2b6b8712fa041503d84f8e475e098ff122de62a062295ec2d6f4135" }, + { 3176000, "e07f13bb62cd8795f5106107a388a12d03d88529abd2d98df2ad549273f6f9d7" }, + { 3177000, "300770a79afa8784603445290c4d778b231f3563eb6b8fc375a08c45dc7d4a7e" }, + { 3178000, "7b266e8b1ece3e4965ce94c1c355c0268d788b160e8999dd960ada6dc90fe341" }, + { 3179000, "4506591e656a60a3519c8a48656525ffb88a7f66d303c795bed5bd9d6be0a39e" }, + { 3180000, "a03ff0343f63733f5ea1df43852579a09b75936b2fe5a551e22ac1113de63de4" }, + { 3181000, "40ca323ed35725ffcfdd552172ddd5f72978530ccb813b55b1d789ada71f0233" }, + { 3182000, "c248552fa425ac221ab5ad5980ac36ca504a4a8cf5e37f375dd34a9da287e07d" }, + { 3183000, "d929c6a8874b441010fb0784651a4306a9b3d1db2518c9eae0d01cf2f305968c" }, + { 3184000, "f4908dfd32a2ddcdcff3496cdce13bdc0d63f52b0ae5751e2f09f946e1d80470" }, + { 3185000, "9010fd0074dbe3ac9062c59d54a66e067caa5e5056b6e913613e72862596d18d" }, + { 3186000, "e230c7f329a97141ee4d99b6c9f33ca0e8770b0ccff9647e273737257a28fbb5" }, + { 3187000, "58f5f93115771bbda78c99e43493a5deead7383998e8a0eddd20273573e39f83" }, + { 3188000, "839716f42c1dfd7c3e25850c9df1a2ae2dd855ca2c92eb17cd06fa1eca596324" }, + { 3189000, "db063dbbf4521b55a93b3916f6506c728642d305606557e68ab62d778bc3eb33" }, + { 3190000, "9b2f6e26734bc6695be4823de4f8b2af8fceb2fa53c287d631583e64ae73b05a" }, + { 3191000, "03dee9e0155fea3632a2ad7aa8b630852d231826dee076fe7fb346be6d8a85bb" }, + { 3192000, "4c9fe2efbca509a3d974eb15cbbbebe0dd229cf43e5bb7fc9c98079b388cd7e5" }, + { 3193000, "61d7b9c6e6f1a43dbc3cb6d87240574ae297ee3f6c3183f0c6aadcd2643499ce" }, + { 3194000, "023f0f74557add3a03c790c5690c9da4c7a279a4769e21f097dfa122e66b5e43" }, + { 3195000, "7dddf7953f80b061a61ed0bb01b1793cab007b7f271ad4576834ad2803740e34" }, + { 3196000, "2a8c24bbe7070f9ec22db84f4322a5427d1c0b328f40fbc3403a2fae2ac97ec9" }, + { 3197000, "400bfc0f60238e00075c9f66165ee4e0ebd53c271eba76f02bedc762be6207ad" }, + { 3198000, "f68d9350b4b5831debabcf9b2f177f8fcab36ffab4b895dc31bd16f9cfd55797" }, + { 3199000, "df88991a3c3f1b4fd608551162389888cf07a5df9655cd1d92cc444308ba72ea" }, + { 3200000, "3b58260891025de2881e45989f6f93fbd2cb5067ef9a0e4a2207833ec9469675" }, + { 3201000, "be874f029c7f508771df6c783ec117fb70ac313a5ec80796ec35c2957b93fc39" }, + { 3202000, "bf498dbfe5d9a36e14635c8735067673cdc43ea9163cb17e4c6dee8cb0ff0f9d" }, + { 3203000, "4e410d8615e3035d61de643c286ffdc171668efa1deeb6a90a946c2d495c07c7" }, + { 3204000, "7fe14a9c7e3bbebd1b5df821c3017e0a4bedb0e9786679b9d31950ba4c804971" }, + { 3205000, "452bc44d692fcb0d208ec1f661b118678025a642222d8f8d18b6d8723435c33c" }, + { 3206000, "536c80d6c756c99bdee8a98ead62924a77c4cced9b02cf7593bda60345228dbb" }, + { 3207000, "159e568923bb809a02370fad123247df4af21fc2fc102a91930450d7a76bbd67" }, + { 3208000, "7d07877f6c8c1e25677428d2a31109bdc1e882f0f7a464c8fcd0cdb701a25e31" }, + { 3209000, "7be454a363dd21df880ff1d2f2a74dee2bf1f2427685e1ac39156412a13b5afe" }, + { 3210000, "d8bce02188c554e1a96a2afe0fb235be473778e1fea78a91a444a06c5edeebb9" }, + { 3211000, "fc3ed511ab90d66570fbfd361149fc8cd30ea3d2e5b2de9d5117974fa822a6a8" }, + { 3212000, "d19fe23597b11c6426be8ff2ffde10e6eb70a15f58263a8026e2d9b93f820093" }, + { 3213000, "5c2fb09397d01bbad12f6f8743888e6592868da3602de366de9163887409c80a" }, + { 3214000, "11af29a2afc910b18f2572dec0288f6d424aa4d30c783b3baa4311add4bb47f0" }, + { 3215000, "f52cb7786fe56b2ca7f4fbac5be5fd595f06dea3bdce92b10399875f059e655a" }, + { 3216000, "033f80cb5f066fe3181b6d46b0c3054c8bb78ba71ba08d3ffb0c7c81c01832f4" }, + { 3217000, "0c6a893f73c3780020d1a875437135cd2943729fdb3c0e204e8f375f288521bb" }, + { 3218000, "d6d52e70286675b77820555e8175afb7a80717ce725cf1d6cf9211a5ece76ed3" }, + { 3219000, "bd2c832fd8fd115b2516bc712e8921d24cc3a6738ef55a05d4485a37ecdf33e9" }, + { 3220000, "adf4dee3d7acff2239823dddba15499da7afd30618d5b998d14ef05d7d8e48d4" }, + { 3221000, "069385e589baeacf5375a1d25379871d0e85e4bd98aae74890ff6838249c9a0d" }, + { 3222000, "86f76c1016ebd072610c2b8f600c15980ab7245a443caf7a4df1e2f2d740545d" }, + { 3223000, "85429407f0a54c096998a83bcdd30f01810ffa8399a1b59d5e85bd6727d9bf19" }, + { 3224000, "81075554f9d4ee08d1e472d83e6f5f575bda9b5aaa57b860c177c09dcef109ea" }, + { 3225000, "8fa10381dadd3fc548b815487a15509b64c8df23a3829f7e87c626d7c8329c23" }, + { 3226000, "767084dbb9887ef0bf0f7243b50c4b74d2f28521fa1391f8a96ddad310362faf" }, + { 3227000, "bc0db67ad69fdb5a5dbba82d56adc07e97487369630e114e33427edd5917eb10" }, + { 3228000, "cf58b53164236996ca2e0cb81f844a18d7de63129a4a0a7bf0484ce3a47fded5" }, + { 3229000, "11b2ece5284c17b6e6759284b819d736c3ea720458ac72bf2281067eb311c12b" }, + { 3230000, "75fefaf4b995d2043ee20b47897d40c9f4f589496f732acef96668e76ddf27dd" }, + { 3231000, "c580685e5f9a8f006ea1cff7f6b7597474fb4de552afe53b723dbd55efa4e1bc" }, + { 3232000, "91fefc511d10d0191dd70793fd6445e60fc8b4cbc590971b063584a300240427" }, + { 3233000, "dcd8031a28a84aaee12a5a42b7664528952dc0deb2be42f7813b87415514b729" }, + { 3234000, "e876148ee58245466190db645d78b119798d1cdcfa9fc1660bef9be95b4d410e" }, + { 3235000, "a0a7953c43483493e2f9fbec69271bf05f148257d877efcdc0ca195534069662" }, + { 3236000, "fa1bbda352728ac9fff48d48fa44264d783953d3df43b3239ae5e3d41825767f" }, + { 3237000, "4f0920db52401aa3b6b00d1be0c165e05693b52f3a196956fb8a481cccceea3c" }, + { 3238000, "9d0590dcd78da30742cb160791a075ca4e6fa35d9f557ed9598d7e54dcd23d2e" }, + { 3239000, "cce792cbfd78645832e3565385ff04d9fb9bd3367bfbe8751306d846ab0bae1f" }, + { 3240000, "b42e157b38cd57ce7f312ef5fefe78590cec52bc123d20ee644ec5c2ffd5db54" }, + { 3241000, "c6a510952d6a3d2f5b9cd05323c531cfb5a3641e7420db4a30884a185dc616e5" }, + { 3242000, "877e651018bbbd5e2316b2695d3353f50741e4a751f871cbf0782651e793fdae" }, + { 3243000, "e7a18ea5cfa25a593b9152483b40ce224b94d036e23c1f4f99cd5898f3d32781" }, + { 3244000, "fa1c0abc88fd105bc546a6860fb518f594b7e793db8172f17758fc2ce209b533" }, + { 3245000, "785fa37d40f82669ee57ed6f9306b551b63d6bc5ec348d7f1ff81ab8b0fc19c9" }, + { 3246000, "6b6dbf19f5bfc8689eaf860f9b16f17a340a1fe599856d17d63e1de9798b1379" }, + { 3247000, "1f8826fbb6f5a0a9fba77a1a976262a03eba44738e9fcf24327b7395d5d42222" }, + { 3248000, "3d711f831979f0277b0830110c83a3ec9c6ca04668ecf4028b3c5cbc911e7067" }, + { 3249000, "a9cdc9ed5999c883fca35703838970c15fdeba47e42290021e09387eba9e4882" }, + { 3250000, "b82a77a6aaa5ac6c376f7e0e4968ef5bf7d56514bf992996057f9f0e1c8f9fce" }, + { 3251000, "5f4618d437a811b1dc424360a33193b2605ac660f385519cfa59e9b48e46180e" }, + { 3252000, "5a57c0932b8213660a65bd8f1b369792c6f51d775cbfe5e3ef92d5314d2561de" }, + { 3253000, "d5348b5d27d9cdeb1afb29c4364a0a8a99302e86c1c84b9764fff10206c10b24" }, + { 3254000, "f2d1c3526c27d87f57ec7af7529cfbd8a97369913fb53f2f0d91738841225d84" }, + { 3255000, "f99f075ee2372ce1341b04908d7e13a219eae5bee94b6dc65ea7ba29e80cf7d5" }, + { 3256000, "8dab22743e18d9dbab7298f6ada123cc0e74be0c426970d57ff2a6b8951a29e3" }, + { 3257000, "5b97a9c9f3e47ba13cac151dbc23f24cd2703dae72a5ba5bd9030a36bb05c71f" }, + { 3258000, "56ec37feff42ef99ac6cf7429ea581b1e44b6bcf22af0400f4f7e76bf4e029ac" }, + { 3259000, "bf6d469e8c482776ce1f812a783c2e798219d609d928711372b433b05c01da3b" }, + { 3260000, "354beab712e1b92c51effe5b84348fff6a3e441823104b8807c5120f827b085f" }, + { 3261000, "6080f26f11cab1b1319d9a216d42588e6869b1407b9c5685aad70decc8174ed8" }, + { 3262000, "58f8cf1109356644ca882e3da841d3b9ee97ece95a452ce836f8b08a39cec1e3" }, + { 3263000, "4814a51f7c6643b483cebabbf91ffa49bb91e0ee1f7f88ecb9b452cce1cf06c1" }, + { 3264000, "5d252694f360d8105ef13fed654b24b88b9ef5067e19b6a7c43979f20efc18b1" }, + { 3265000, "253c33631870fe96f86c91c1543d3ff54180ef3ae50185883e2b804e92852f72" }, + { 3266000, "ababa93f2da4e8fc35ea25451e74f92117569ae298669f3ed5bb79b9cc069969" }, + { 3267000, "84528f0cd3a596d0d8a7053484728c8f3cd3d5ee0aa5c02c22d947ddbff8718d" }, + { 3268000, "ff42f698f29577a7f9e282adeaa32a0f98d77aaa2a58e2ca6adce10284b94e7b" }, + { 3269000, "64475ebd9c7c1a31b67ad8b9dc0146168a4e6c0666c747c0cea09df8fed2812f" }, + { 3270000, "a78481ab822609c38e20335be4d9f220880e4de67ce25d204f874509b90fd750" }, + { 3271000, "6f679aaeddb5071095db48cfbba1a87e7d4e72074c74074bb7bf26ebc3415442" }, + { 3272000, "4e061e0e63433b92531a9e01e9fa029df4bc21f2c87487bb59c9b39721cba18c" }, + { 3273000, "763ef1c7d848133c3598dda907ea93f53f4e8febb5011e699f778b922011661c" }, + { 3274000, "87bfdb231ad4c613bd60e1ca79d128db89af7b181e098b6fbb535159f9f583cb" }, + { 3275000, "e491a0eb1b40289f2eefbabd2142d9b22f0bd9dfc1ae73adec6c10ce0d8aceb2" }, + { 3276000, "d00a32578818495e79d795e80d3439eed10e033f33d77aacae6dccd0c77b891c" }, + { 3277000, "9b312b8e630805745e490dc250521b318d535db08592d79ff59dbc0320f76283" }, + { 3278000, "2ed3ae326a1784b80543d523df7dcbd9401c005eef3299389b30e4e0ed41524a" }, + { 3279000, "810bb433d1adac26942785cfe1a49359040d231c9f348efd7a9e65bab28e6d0e" }, + { 3280000, "f9b3d574f51966e741befbd06f2df63e8113bafc2e023e155a2e069d45e7da04" }, + { 3281000, "ed72411cc2be933ec08ddd55c6caa74d0feb85b76117990436dea1b647ff263a" }, + { 3282000, "840a5b9f65007180745dd119f046d3bae3f06f980bc4d94b5c732c5bb80dc27d" }, + { 3283000, "473a7ba203dd428de49b4e67861beb12780f746cedae890a85183631a36e156b" }, + { 3284000, "9a00e093393ee0654fccf9324430fb176bbc4ecc57ee49cd56bc6b0e736889fa" }, + { 3285000, "69038a4844de38550f55f85ebfda6a206a579ce81457d2c92faf3a4c3b92f0de" }, + { 3286000, "fdba443d3149a86f4348c08522e7e3e175991fa2f608e305547eb11c199b3be0" }, + { 3287000, "2cf48af1f256ea5214dfa3a80a9e904a2bb2568f5b6b5646299bf95b61e30419" }, + { 3288000, "fd9ba9bd1855dcaffad2972be5ddda66b57e7cb94b63da650677341199924a89" }, + { 3289000, "aa59c40eafdef288b1f93598621c81c0cafe380d8f19a063bf000a09bf830492" }, + { 3290000, "c1af41c7ff4614de0181da4ce0de8fc01e4f525d0835e84a53098756679cdedd" }, + { 3291000, "fa25e0fdb9a5a4d3708d2a0df66570b0c20bd3ca8f283cbee9df61f92883b69c" }, + { 3292000, "c1b34a6ba3cad452556274610ba55563b8a9a2829534c9658be78c495bb893b0" }, + { 3293000, "50ecb783438d63e44c56a7004f3f61ebdb03bf8f97410716ea1a2158b4d652ae" }, + { 3294000, "77bc8e7c52dcc56e74b3ab5f0a7fe25f205fe08c51d113e84873f31baeecca62" }, + { 3295000, "4a956cd8696c45adf3d8aa8182da53e9bc553dfe2374f78a174be002578bdf68" }, + { 3296000, "005eece1745219e36824f8cd97b5371c6656947c95286e9d482ab2bfb34a6840" }, + { 3297000, "9d3681dde5b907422b5290a63d1d4949b19fcd92953898a243e94512bcb745db" }, + { 3298000, "b65b11feec87fa996120c5fbd6d171675ede723cc04a84ab6d0e8991acd419c7" }, + { 3299000, "5275c248e7be4f24aecddc9cc16e5e020030c2e32195a4d75fbfb4d1aff4c7e1" }, + { 3300000, "0ddc52d1a727e9a1df55a518ac17de9185b201af0a481a1cd6890a80ed3b6bd9" }, + { 3301000, "db68e4868b7eb225e3297d40537b56fdf77bcda15434da60d271ffb556c73130" }, + { 3302000, "6d0eb703644f61b3f072a95051f2364bd5b25759663dbfe7cf9d130346036e5e" }, + { 3303000, "a54d423e2e16baf116579a7250835157c4253a81a7fb3b2813df4b70da6394c9" }, + { 3304000, "7151f8f549e71897e7347d59f458d54c4486d41284d681ef3e6f281026ad3654" }, + { 3305000, "f3dd8ed8a19c6a4640e9412a58e5716c92331ac8e0e10c919fdb4a9f064eddd9" }, + { 3306000, "8339a07a1a26395cd7ec6fd081b4c3036c3d74353720ee12eea1a28abc9e4005" }, + { 3307000, "6ab15353cdbf60a9c7665a2578c7baf11e63883e014d326581aa926e9fb7ab14" }, + { 3308000, "46d85df6696e0e411dad4faa5d35bb7e1b3d8d22400c69a54371bda994ad0d3a" }, + { 3309000, "d5ea57a3c3abb152af6c0aab39640038861a74d72fd22ebd9e0a1d8f1b2606f4" }, + { 3310000, "08fa05c410be457df131475dfd0e60d76d5c30d44d489ed57d2eb8ef8d377417" }, + { 3311000, "9e284afd1ba5fc7aaf331f710cbc39c0cdf44e567d4cf26d4403357d621310f1" }, + { 3312000, "88c445b8d8e1711cfffe8e9b99c0b9f925b4d0c221dd1ca2b6c891ff3251f63f" }, + { 3313000, "62bf872b3f467afa5728b0a4f65459a51097b95af5a4a4d2e9962dd553fedadd" }, + { 3314000, "7b9cc9862e25f8eea5d04876a2b8ae2efcb679c0d5b40c21f7f76fc4253ed832" }, + { 3315000, "ee801c6bae9f0486d10a03e277bc6f3aa5c3e8877662bf2d33c9380a36a505e5" }, + { 3316000, "7317be9f8a11120ec212e250ea3ff167d8e8e63f2fadb8a6a58a1b2694312987" }, + { 3317000, "c3598b73ba406b14ff38f9e5f93faab80477c5b20a50df6082b4ee0113b2f7b3" }, + { 3318000, "bd9011c0828e5763fafa6e308cf8f722bec1908976beb3fdbea598ddfc7bdcf7" }, + { 3319000, "ad156c9e8b12f752a780c1ba3d5fbfab6ad2863ca12fa257de4167f1f646decd" }, + { 3320000, "9e3d1953541e9d5fad8587fa419d571c864686cb7af13a8060902f93989f3b02" }, + { 3321000, "f592842a77307c66b6052161a1b59f3e33d104df308557f9c2ac1a6db746df7c" }, + { 3322000, "2b95a6d82836826019bc12dfda009c437e02c67fd00bedb792b1d23e2eabddeb" }, + { 3323000, "1c1b8fe74fdb9045d6f5d5f00f8b6e2eb34dcd4f1ddcc5cc10f636c5b480cf7e" }, + { 3324000, "8e720bb76d84f406fac690e11d20fc5983e355b7c6689dcfeb867b8c56c18513" }, + { 3325000, "88f865e80cdba9188ea9469f01ec473979cc2685dc945f586c9c246d60bbf0ec" }, + { 3326000, "20758d50744581058ed1a07c3923b6213f571cb14b99976715d081344ebde65c" }, + { 3327000, "41ef9f39ed9ad604b79f755d10b149f5438fd4b97f7233401650b39c5b455375" }, + { 3328000, "e49b550814378903b3ed4ea201350dcde3cf4728401110ec6f842f0e61774003" }, + { 3329000, "56cbfd46e269fc2907585cad70a19bbf52a86766ca210c503ecc6b90f3c2604d" }, + { 3330000, "f598d12ae0e82a0be7e09378dec73bb7b18ab3ed28095b3e1c3bffde3c6c41db" }, + { 3331000, "23086d5b172d843c84ba93602602eeafb732327988bc780487ec9b49b8187ebc" }, + { 3332000, "1d008a88d325917a67b519e29afb2d14905e49828018ebd9e7bbe2272c2aa92b" }, + { 3333000, "9a6def07e0cb437ccc1a9229d05e1fe47764460171ae20d319e96e8503114cfc" }, + { 3334000, "1865f4845063d0385eb991b3b6429cd2fdeb79d02cc0a41256553662879436a5" }, + { 3335000, "0e33f65d7915417eea50fcab7b6712998136c970f138fa3ae12a121502ea0de3" }, + { 3336000, "abe35bab044ff8d4c026b1cf1fd9d58a7daf1038ba2f95c771520e64e13f2ac3" }, + { 3337000, "0aba9aeaaf2e79582af1b1678331e371cfb2900e35897c8451929d276a8b434a" }, + { 3338000, "77b80487f7794cae2151b1a6203623848cf19fac7da21fcee6a4e7ad5a17336c" }, + { 3339000, "c265267722dea27ad38f88d23b2d6d243da5b7b1376bfa72b4196179249375d2" }, + { 3340000, "221e5a51e159b16e98b6aae415bfd923074d32331eb4a2f9f92fc87f947d3863" }, + { 3341000, "a43f6579322d08788e2cb5844e6bdb1b941f35c6f409c0586d52eca077de5ded" }, + { 3342000, "65f4c2ee5249c92b72b8dd95afbb35ce29b4d0176f0439b3cca4d411d43d954e" }, + { 3343000, "9e8d637371c8a7608e8b4d12ba304ed666dd0ed8c0ebb2e0a240f13336eac93d" }, + { 3344000, "68d6741aaf6bfd8290bc2e36280af2ce3246498c4cd6ae07afead2d5e733dbcb" }, + { 3345000, "1b87e84bd32ef7f407f02b4206fd333859c4af5f684954a0db8f3dc2a718a812" }, + { 3346000, "fa9dbd6f4f643478bac7922bd414c44fc58f0c35b049dda0be1c590a0a2e5a35" }, + { 3347000, "fe3592ef6a1881fe030add93c8bdcbeee4054429acb912a25f30d2a9751871ff" }, + { 3348000, "5713327c78ee265039257dc2a3cab45a26aeb26f27089a6ccb552693c6e65690" }, + { 3349000, "d9f603369243adb87ada60317ed687c9a536cf9537405ef05d4cfa5f479f76a6" }, + { 3350000, "6d0c784c9ccdbf7fda41243a91498e136bbebc138c764d7e3413ae1e57f7a60c" }, + { 3351000, "41ba7e7c0aabb6940623b8f7db6f09c092439dc2f2dd113334e62cf100af7249" }, + { 3352000, "e32c166b81dcc0aee4c0e018008240c36a15d35c25d4bfb3f54c80f0a490af20" }, + { 3353000, "9de6a8aa59ba930b4aec45fb14167f1953153723ec6d6c88cc7590300e2a35ab" }, + { 3354000, "0c2a650620df29e52a5876302616c77cb76e5d5180a597ae4c5f32dee7afcc26" }, + { 3355000, "225357218d03c75cd479ad0a258ebf4f61ac9e2248accff2e7680f5bb16c4ad4" }, + { 3356000, "43061b0bbc07fb03258b5f95da3717817dd9cb3d9413547f048854eb2fd37b88" }, + { 3357000, "c2f86b47d3a957414a4a4d3728228d3e9af1b3ee34254208d8f78a916e807753" }, + { 3358000, "f23f4e998d8b8f50eb3cdaea18294062ce87087ca0903b319e6d454a35424c2a" }, + { 3359000, "d0913918f4d23f9b868d1725ca3929acdd77375022097cf437097cda2818a5bd" }, + { 3360000, "eb17c33de3835012bffac49303907da26b007985006d2251e854004bbdb6e78b" }, + { 3361000, "8a6d2bee3aa95f0da71f5a6174521ad3120c33e4854e3075ab7609a5cb6e3a90" }, + { 3362000, "63e39b9a53cb47273fa13b9a88891bbb519b3e84c9f16d0ea33b822c5676c7bf" }, + { 3363000, "8f08592128ae68bd604b63294e55e7ccc35efaf2fde79046dfc26590c1c9592b" }, + { 3364000, "ff5cdbcafbc58f48f5b7d21ec7033c986f0b8f403c089fde67a6bb155dc7a9ea" }, + { 3365000, "e9952084ee20b115942c74fc58272e72e35d3e46f15efc3d07b68eecb9070db1" }, + { 3366000, "4d901d096d97be65370cf7ddd0a3cfb2c58d542496d3d16dc7fe15b5d27da4b8" }, + { 3367000, "f4d522ed0796fb5b0e2a4fa4aaaa03b2918a0e81567b87ed4351f1e062c8b627" }, + { 3368000, "ac153bd0683e269a938aa199bb6f13fc9507d8e8adb08f136b30ea4e343f319d" }, + { 3369000, "a1598c6f969e75865d0b945bf6e9fb87ac4c7da70e16d6d9c0709d7f176ec0dc" }, + { 3370000, "55f634cea34467c5826eb11cbbc327723fa926a8d2f9446e548a227d53006883" }, + { 3371000, "934af6289199ecadb61557b501bf1dacf9aefc541b96b60736e24e3fbe9bee02" }, + { 3372000, "e667283adf0931c61a1fb2e97f10d9d276fc92e983d597748163977e9e5f3fe9" }, + { 3373000, "4f563d4c0f6d87a43a135ebf11441cdfab7857aaacf0d65be6860e20d886ae80" }, + { 3374000, "df27e02996458e2f8a5d037037711bde0f84fff336cf89f469265336bee47679" }, + { 3375000, "843b2d0c83a8baa2a39fe27c07b56f57b62a425cd5d0f1cc6c990e1aed6783fd" }, + { 3376000, "511c9ff88b8e45b298633800833b902371ff2f7485107b1b8167bd5aa8087d0a" }, + { 3377000, "70670ee6440c3287e25c1878cb1895454093708b9bcf9f933297e15e2f299933" }, + { 3378000, "fc349130b87ee6f5ecc3a1dfe333791baadb6d9f84a1fc0183551b49072dd921" }, + { 3379000, "560d6de1ef48dd1920f61d380f8709de460785d13365215a6eba388b22ede786" }, + { 3380000, "1bbdf4589afac6e47b84fefcbdeb3752390cb4a75ddd6af9ed5a8fd69422360c" }, + { 3381000, "1f46250e44290cdbc492f105c92a80861f64154bb9e9648912a643ed352e7517" }, + { 3382000, "b4715178891ec8419552d5b4e04399dda36d6ba212a8f74b93f17fa7b7c7ac09" }, + { 3383000, "b5e74af6e185f3b1a5f21f0c4b9dda7a29a79e242ccdd01fa95dfcb176b2a567" }, + { 3384000, "064a0ac1c568dc75b23a3ac952d2b1296de8c68d3d512cfb94273235dbc7fc2a" }, + { 3385000, "27cdd378700e3e4b838a6ce7a4a95e9cdc5e07ddea16c100070a176446f96c00" }, + { 3386000, "8e64efb70984904b0eb33de0188fe273c1c2eda2a88a6636cb7bc19a9792b405" }, + { 3387000, "683f26ce79fef62868dc7ff6766cfa8b37b1a42b0b35613f06f631fa0d7403d7" }, + { 3388000, "2f41ecdadca0d41688720969bc19bc034525370067cfee31371bdedb540b52c9" }, + { 3389000, "6a10fc0cddf5a00bd189ac585192e1a03da8db2cc8fb01d5b00735fd77b80e15" }, + { 3390000, "8944cadc5ea1165ad123cf5b2872d2055dee23da7d349dc8cfcbaea2339c1cfc" }, + { 3391000, "e634975906efafb46af35daa966c5f44818dd660757851faa67750fd1d8613e4" }, + { 3392000, "1d6a6a7ae535e57595384f0d52ba4677c58030535035040b87c5a6e4566a86d3" }, + { 3393000, "848adcef55755e0ff6fac1d39c07c34488e43e1b488733a1f36912dfc42f83b6" }, + { 3394000, "ae6dc1b18bdcdf384ce3820f257f1b7542ef3b6441724e5b53788e2d24ffbee4" }, + { 3395000, "92c26779776b5727d31fb93f98a5aa1c220d8bebfa693692718b23376108d6e5" }, + { 3396000, "c34119f06623b53a2fa21ec35cc80216f8344a4731abef3ead595cb7662c54aa" }, + { 3397000, "74b1de17fbfcb29957c37940d53e6e8dee8fe7c0d40b0945fcc8a07cb6eb9741" }, + { 3398000, "0a91212618e848a040c3512d6444194cbca721354d3109726f298c2904034ec6" }, + { 3399000, "5789f98891033338efa414f64e5607da9e24eca0c52318374da78c7f02f048da" }, + { 3400000, "f6b9450ccd29883f620c89fc94e8db30287dd2f08635e2e2de134c4a3f5ecd3b" }, + { 3401000, "40b6a8d67ca0f4973b541f5675518b80c721b7af9d8b020654937e859967d293" }, + { 3402000, "7b30f7bb48523eee5be5a6909b01deddae7e60d4b55830001f9b0b589b85f7a7" }, + { 3403000, "cffb94ce726daf4330a5dc52e374a106420d032c8e5df517925458d8b760e9e9" }, + { 3404000, "5a0f7b9c3aa2f304d97984eddeaf8d62772fc5ace7585c69a5a85fc33143eed9" }, + { 3405000, "e2900ebe0c59e995d4826a329b88eadbd4af8de3c795c222bf37ba27a5296f82" }, + { 3406000, "c001873f5d7d7deb7b51cec2782b4b43485418c7dbe6bc1d23c4c459e904f3f8" }, + { 3407000, "14d6263c602674d670b851d4e2a98ca0d1896385c32c64db417e3fcc8a0b7998" }, + { 3408000, "c7efdcb636757b6ea34378eb2dd05f18b88a122437653035710e9c5037c53249" }, + { 3409000, "4bb192aad79e3f4f8a6ed0ba8e01e385f149998dd7a1b872c72dd77a7016f812" }, + { 3410000, "c362aa842839b8809e1c5c9b3104d4fd4a0b0ed36910c2dace3f38eff3289699" }, + { 3411000, "f0c4305b6303e8fb011d554e7e125c67c33557e263892d20c6c4bbca3e15579b" }, + { 3412000, "05bf3206d2c6ede91fd87052a373093e1eae6859b4e43a88593202fbfe56e60b" }, + { 3413000, "f911b876f987a3235c534bbe4253a839bd2fba7633bad1b3e052acb55efb7ecc" }, + { 3414000, "ca5b13c552e3dac78187c1d5551726cea65f8a20fefb889e9786fb8bd47dc889" }, + { 3415000, "de0d382c98cbe4d43a16d8e63795d047fae71305b65865bf824cfbf90c9cd944" }, + { 3416000, "27a83ae4220d6cc9ca3a1e2c630f1bc5bbd44e93247022b2e991ea5e35575e10" }, + { 3417000, "43ad2060038b992d083de26451d6b6f88fe50298b6c227882681baa49eec6ed5" }, + { 3418000, "c29a16bfc1eca9dbdeeb18ed4b5ef5ef9504d65a7fd3fd72202f553f7b431215" }, + { 3419000, "8f358dd9f1ea6935501dbcb1110322990994bf12209650f223a55f21178adae2" }, + { 3420000, "f4cd2126061a3dc717bb568cfca6592aba45dad23b3228afaf500dc8adc4fda5" }, + { 3421000, "f842392764bedea119e4c18e1022d1bf813569d649266fe55ad8f1650e87c09f" }, + { 3422000, "1bb4a8799ae96b367a8ddd6f1541e8f8b43bc924dd5415b67f54d311837e85db" }, + { 3423000, "61a78f15c016f0eaa7ce116738bb4ce44c184fde499f3d488e7a3e5188899fa1" }, + { 3424000, "d0cc206cf6e828df9d24d4f945a97a640485235e6c85a25f4457f17bc3423599" }, + { 3425000, "a195125404045a9a4ec39f3cd2501278d76ed1b087c8d3789a931c6176808d62" }, + { 3426000, "fc2458d8e96c711529f2a3d3362e162d81ec14ffdf3a9ca6bf9cccf8fb503bb1" }, + { 3427000, "36a3ebff03e1e668612968124a2635ede82004da930a9de29949e25ee0672fe0" }, + { 3428000, "ef6fb0a52c40e630e6ff7c6ecd6872dfa85a5f4a47f7eaa633c4c07a0e0f0a28" }, + { 3429000, "e94cc4196f7123220eb5a6237113ea71eda099368e13acd3de352c04fe347ce3" }, + { 3430000, "31ead53834b4cd8d183ad9e603446ec96cfb7be58a38825ea7b5e657537687d9" }, + { 3431000, "081cecdb3b17a6f7e468c6f50828d10143950d2742ddac2b2e0de5fae8f48ed5" }, + { 3432000, "c7d21e51d7b5c28f9fc870b95aa0480ed1fd0a6242e23f68d11651f49a45758c" }, + { 3433000, "bbf6d479bf02e7d26898e5ac5d29f4d72bbb316eb386034ec8dc00f7c54375fc" }, + { 3434000, "a71371c33822eb0986706bffa17f2df59d8906ef38643e86eb01ce6c7290f1ad" }, + { 3435000, "fd26934ca2477e6168da39160dd66dfa53d17720e9842691a1ecce57c94c1226" }, + { 3436000, "3288dba8415f11659cd798edf79305e84d0e3fa4768147f015dd470b0419d52b" }, + { 3437000, "f35b8455afc7613a8c67c3d8e07a460c275428dda1f724068ae82b6f23f9cb6a" }, + { 3438000, "54b2ca658dab4fa92fdf8d1d1e45ac55f7a4386d422e3e73cf51fde670a6e285" }, + { 3439000, "b685fc5e9dfc21db08fa1d5813ab5e03991a4e6290a830f69687ed03c833e5ba" }, + { 3440000, "370dfb627719a30f89529ab81efde4e6f67959b51b2563d138e70dada43ffbce" }, + { 3441000, "beed32e8125df7315acd8ab5a0d10367bb759f8a61026b111d65e1e90f0559f1" }, + { 3442000, "405e2d40cc9f7517d015ae28adb386b5f2698b6de305db9bddca80d50567f8de" }, + { 3443000, "480d37b603923e70fe6169586a2582a6c002c1d14cf05a4363d540755a7fad23" }, + { 3444000, "080d4ccc7c9ee071a3eb0820bf3292a624484a083f24f1115f3dfda53ca61de6" }, + { 3445000, "bada5c4c0d9be8fc45dfe24bf0e49727660dafcbbab16e3dda0bdc831f784d8e" }, + { 3446000, "46088e6a64fd1bf4f8e23d0824c8a83ec0816fa0692633248784044dd9131bc6" }, + { 3447000, "d4acc97c2b8d5e86f859b4724026b8aa3bf3232d232246ef4aa629d5b6dfe94e" }, + { 3448000, "37edcfcac5c2ed8c381332e6aa8b2dd01223661675fa2e3d3164a6222cb8e8d0" }, + { 3449000, "5139788ef2b85de88b64faa9bf886e1d834e58f2b2d42e433c8416b04d989081" }, + { 3450000, "e24b789541a4c5cefb05d7f335fe0937cfc8c197fc432e86247baa209ff2411d" }, + { 3451000, "096fa973d7d89cbe8c652fe3586a1346a0b5d919e8f06cf83af4229f0d08c953" }, + { 3452000, "46a91ecb27820a81675670f227dd9cd5d7b0a8de5d226978758aca7cbfab4787" }, + { 3453000, "a010e6920d9f935daafcbd2932b4b5d52b1e343780e8dbb43a4fe607f54c6425" }, + { 3454000, "87dd588323c6858bc88b659ab404e48a4f64bf5c679413f06655ae104f326be5" }, + { 3455000, "55374deead1294bd4b46507b4b679dbfc5cab49b4fd048aca9deaeb70f57b6a2" }, + { 3456000, "30557fc008fbb528f66b8ffe83a2383b68dd91d75668b53a68a1a1c60d10cf97" }, + { 3457000, "73a42b3bc6ba5ddec4e05742fa9ff9422c53e9811a51c1ab88d5099ffd307380" }, + { 3458000, "68f832027a5989f60ec651437d030fff0dbe2669033dcb7fe30c659bd6400039" }, + { 3459000, "d55f1af24932e663838edcce6087ae6c48016cf3f06133eff0dc95ca441f9328" }, + { 3460000, "53a764fa463df0cca261e29e5448a5211ac211d5ef758484902bd51966aac594" }, + { 3461000, "42fd3e3eb01cd4c2cdaff473b615f0121c4a2bf960382bff1f0a356ecf784bf0" }, + { 3462000, "b9484bf74630f1c01db2ad39daeae32a0f34e8c5828446f0c9f9148b97cbab50" }, + { 3463000, "79235796a44cee2896127b46d4d7489354e493fa87a1f2d67700f09752865769" }, + { 3464000, "9147e8a21f6989dbd37212b595b55dd0c4ab7f19b6c14fecaa0e42637c41bb06" }, + { 3465000, "6f543509c549504b825cf7383009735adc4ae2037bef62fae22f3513e65afc9a" }, + { 3466000, "86ddf3ceb78d5e04584e6a1f3cbe01781855d56a163d590e0812db252fb4adca" }, + { 3467000, "7743ddff10c37cb8af842bd7692f1207aa1b9eab521b7e5ee75897036a266caa" }, + { 3468000, "bb907ed72662cee8addb91a85edb0193ca149f47838df902cda349e6b304a18d" }, + { 3469000, "d17c1ee9fd958a5a4215450369a0009d4873f34bf2bd8fe08bf204918e3d8669" }, + { 3470000, "f3fb0aa62391e2bef31fe81d970f9a698f71dfe81fd4ec5f7ef7685810df3864" }, + { 3471000, "cd45cc532e23a9d48af51b3e67253d488b416640c57b00dceea6542f4129624b" }, + { 3472000, "ed2b23784ed0443e9846eccf7699d8c58907dcbf2226cd614a354a8425f523f8" }, + { 3473000, "f44abf60fab852d84998ddbefb5310017fe82e39c2e4aadab9a2cc6d60ffc5bb" }, + { 3474000, "2845687ac600572ff9c2d3825d83c9cfd27385e91e36b05deec9ccb67a647a2e" }, + { 3475000, "c18c6f262f627924748470346ecbdf17d3746976f24aa16260aa51cc6642a0fc" }, + { 3476000, "f8c9a9e25b0682d723db0bb2a78df400e4a49e41fc62911ff7e2dcee87001dde" }, + { 3477000, "a934c00cf5ccfb524e74ce662825e8f060926c814f74687cc35c4fcdab785493" }, + { 3478000, "fd6fad2f251b75e7e2b2a39e7ccc58571f51a591deaa74c42b86151128436713" }, + { 3479000, "340d8a9e704c516ea68ead08a56a6a6952e838323477db5f53e7a7086e55bf4d" }, + { 3480000, "5e92cfaf15622b7271e0659a3996f9092b326a6b35fbc64becd99d6469b902f2" }, + { 3481000, "5d9ebbf16fb3114dca2b58833208b4dce64d480aff6e21678e21e3295280e899" }, + { 3482000, "6225495552f14b30d0c994fe26f0a9258d6d5a52b9d0464d886233a370f628f0" }, + { 3483000, "77cf7ec4b1cde3fd35255b79f055518b18c76b0c58e04f6d3279233cf8fc7b2b" }, + { 3484000, "3d296703231c27d4bf89d129433e397132286b39c450e8a63474c27a3cd53355" }, + { 3485000, "572c9ae0cba2b4bf5f271ffde4b5837e2d488f98ab94c001582b10c143c1e189" }, + { 3486000, "c1584b2d253e4e5e907a000156fd7f50bcdfccc2b3e54ff0b71b7b42841b1f9c" }, + { 3487000, "46cac4a94b94e5c0dfcc71486a227b1d8117f58dcd7da1b7e3c509f77a706d80" }, + { 3488000, "f3801d62002eca31432ceaf4402e8999868797f33287e4d5d9775f87ad55a211" }, + { 3489000, "c04083f770db58059df638813182731e3185f2afcc36561eca462d9ab3ebaba6" }, + { 3490000, "28911d688d33fb702ab11c8c8c236efdf8b96049ffec2703b29ad8807a8dcae5" }, + { 3491000, "71196cd6ece13b9c85d4f00944fd40c6fac7c97297fdcb3ef6ae9772b7a78d2d" }, + { 3492000, "57e7a4b477c506fdf00fab3be5193a615cb5a3667c1b1b0ca4399da652d25cb5" }, + { 3493000, "b44095804c15cde09e6f4cc80198028dbe1cf82b8b343fcc4cd9af4433d4a528" }, + { 3494000, "51be41cf515cd83bc16510a923d120cd7887501d388c030810ae1aab0b8f885f" }, + { 3495000, "49dbd46e58a92681f6cd99c06c7039acd8e5b068b5e77cb5ba54303c314f381f" }, + { 3496000, "21315b87612952dcb25ba2cd5154989396db50c92cc434bd181e7a8c46c6e74a" }, + { 3497000, "46e6e2637ba4b65cbb4aa8bfdac53a2fc54e95937e81b7974c46bf891d4f569e" }, + { 3498000, "fe0f7b8f4fab97027e5c3d65eba534b4c76af68f181de22d478571664d24ffcc" }, + { 3499000, "57518b62c30490041a1f498476eaebda9182b1c31b312f595f5b2167ada77894" }, + { 3500000, "01eb0a9113f0ba23492907ea6208b1de001ffcdeff90324da0f36ede5b8c62fc" }, + { 3501000, "298f1b1556f91c60d6262b2c8f7fac8655492607c47e616f4e067df18820af1c" }, + { 3502000, "2d5a0891ed817b3c0d8746e866c1fe8aca5fdd5ba667fb7a914160436223c32e" }, + { 3503000, "55fc90ebd864ae5635787c2277fbad9b1a317aec17c86b0c07ec936181705c38" }, + { 3504000, "47619dc8d32f6d93bb4dbd3127aa60e1a0d552dca4288be73f6d571f8559823c" }, + { 3505000, "64190ca344bcf0cd2dc60ccbd738b02d052091277bb88012e384619cf252b80e" }, + { 3506000, "a75d4b511fa5769ea609400182c86dd04bec61a9de11ccba741232ad23f11514" }, + { 3507000, "97cd579f18940d2c2f47f4f546680839ecdfc20e0c19d843d7c46c6b963588ce" }, + { 3508000, "61af1f665cf9f033a0436dd9130cc3f0c00e626d417f96f531ad0c2f490dcee0" }, + { 3509000, "007e1a30296489b336b2ed52471d662e39b013026dd22a1ccbce546194ce9fe4" }, + { 3510000, "107b7330db0ac510b75b943fb9b83f572792b58f6888d1702a98cb8a9fc86ece" }, + { 3511000, "091431e328b152232da2e3d35b0b90076849b3d985fc1c23665e90326e3f58d7" }, + { 3512000, "fc781a3c6a7b3059ec75c252c3b2f7a5b708262f38bc784c082ab0aefc2cf034" }, + { 3513000, "6baca750d51a3c68ac386ee48f4e09f01571631b646e5d9eadc8e8d6427ae660" }, + { 3514000, "a61423036f7026e739a5e56d613a4dcb593047d3a146e309cea0bff92cd90bf4" }, + { 3515000, "b1de3b3375f17cf6141b3c3d0c87338cd871c5005d28745944b46635b717371f" }, + { 3516000, "46c3f6dc527557987af85070525dc4030b2f8cfd7173063005655476c12ca1c1" }, + { 3517000, "0242bc50914648d4bb9322dd7a14e693ecc05d6750e87ae4dae6140d79b01d03" }, + { 3518000, "dfc8e7380435e90b25e2530e210e5d74299427adf75d9a2ae4f1b674f24f4c77" }, + { 3519000, "0060ac7214cf496a5e8328ac6ae88b27b4ef314a59d90cd5aebf5f94c51f0242" }, + { 3520000, "b7b6efa2164192f820096bab90591b5cd3ca4567f0f8e49f70b5a6b42dcd7003" }, + { 3521000, "461ca788ad451c45d46ac63a543a250295ababe541ce27733a71a6089176a51c" }, + { 3522000, "925b76dce16679b604b762b11a3cf5514a12f2624a7b0af15349e678a209becb" }, + { 3523000, "d6837fbfed7e00b9c44529aa0b6e76f6b4114a9a0262a437d91775ebe46e69d5" }, + { 3524000, "e5d8ec1da25dfd44cbd6ee0ca473e21b505b1fa15416a5cf3d090f8e1f2de606" }, + { 3525000, "9271e8ba70729fbebba161ee954caf5a37b41f696ee027dd37e51ee3bce711fd" }, + { 3526000, "79ebcf432b4c7a20944b01072225cab5267be3d702ccfa7a488f7f0f433fe388" }, + { 3527000, "da009ce7b6ae607cf6d28ac7275aeda134e14e628c63beb3f2f5b434b2ac67d4" }, + { 3528000, "df31a1fe181fe75a29bba88d5d35f8b6f1c1cd54b1492801f54a27a537fb4ae5" }, + { 3529000, "d725148e913fe99c86dbeb331088a7a17d130e264dd76ff9047fc9d115432be8" }, + { 3530000, "b16e9b802a73f1dee7f0c7f3d2fb44d3a81b9ce4dfbb5361191d528a271cac14" }, + { 3531000, "4f1a6e4bfdefc2d8d1127cbd5bf8586d866ce3d5c9b14f8fdee842977c7c68e8" }, + { 3532000, "c818afd795d9db600db36a1948dd49d282397fb0d0b89a1a27d78c211aed3e9b" }, + { 3533000, "e14d8c7629bdfbc0399da427b67f35ae22ae9bec44c0f5374432f5541633bcbe" }, + { 3534000, "866536c5c1cf9660431ce8e8c8992cdad7677b1bcdf86b52924d03e570791730" }, + { 3535000, "36e695571c15facc8a48b5d248ce291315803a56cea9f0903b6b015e7b95ffd5" }, + { 3536000, "88949e8807ab9c3f8ae400e08245fc2dd31ec19aeafd79d4dc2bd3ed3ce25b98" }, + { 3537000, "5bc630e0f5de97efa0d6a91182061ccd9a5e07f294eb6a9b73823273e452e96d" }, + { 3538000, "a0eba0058b34b564bd90c34fc97d86473d07f863b57dd208ab80e0d3215abe12" }, + { 3539000, "113f9cfd709eb1a106caba4e6a76001fae1aca73057df6bb18a76b60ee00ed94" }, + { 3540000, "66d6b7bf6a2ed9b6db1d50295027c61092463e608333ab093072d70f8ef82ed3" }, + { 3541000, "f3c16e27fba51f3c193cb88a0ce027a45ae0ef6ae86b89edcc3a7bd24d7b434c" }, + { 3542000, "35e5b9a7c5c833a7895f8ccdf022eaa7ac6811d765ec40c453feea6398298979" }, + { 3543000, "677c36798d8b5d268e3300f14563d7602cb6fb0c7b1401ab654e05495c760ebf" }, + { 3544000, "ad13ef5ec55528667364328dce7d4f1eab15bafd94a26dbcd5b5e836e44b5221" }, + { 3545000, "5b9debde5623b0796ea315009a27902995cccc3829e7c3ed2e9cd8b304453e99" }, + { 3546000, "37affac6d6261177c3527219b34ac78a4ae3ae60fa73a70d7cf89483791ffb50" }, + { 3547000, "110ac87253e5fcc6b3c995c62bb4cdc4f8d2f63a16ecf28893fcda8e31c00cbf" }, + { 3548000, "ff54a4d20537089c880ba60822d3b9c5249820fd9c64ca2f1cf8cbe03ab9b9b3" }, + { 3549000, "e84e8ab749cf3f2d7804bb923d571a2fa7aeaa7483ad82850a49b2100e3eb2db" }, + { 3550000, "ddb98a20273945d59f7f7733fb3ba13ed68895964c34f178e711c6661d679719" }, + { 3551000, "b0bbc4bd20868987b67bf08023e1d378bb1e5700c3d1796467efd8899c02240f" }, + { 3552000, "0af0323ccf5be88d971e4ac4938a7e800d62225d5c8d4cfaf6c6db36b556ad1a" }, + { 3553000, "cb4e6412e180b9559cbb5ba2a3712a6f16494ddc0ada05ca6cef3e76684df366" }, + { 3554000, "64d1b1b2038d21a6760196d3262e5e446b72f19bff8e4c0c2b19d36e5ce04d0e" }, + { 3555000, "1e9a1ab6f4d6e67d61bb8634507abf7eb71e94c148b0d715061600eed1f69647" }, + { 3556000, "d1fecc61d1295700e2025cf968fdc0a334373a66269539974c9cf7c9c2fd74c1" }, + { 3557000, "4dfca671a85f545f1bd7459632f9e9e70498be5822fcb0aaaeddd251fda51630" }, + { 3558000, "6afea559ecc35bcd35d9035d8c88a2536030c262a7c75806922eab351521d0f9" }, + { 3559000, "8408973c654ab13c542596699b95a19d8aed7142a386a5fff1f2831308b0ee1b" }, + { 3560000, "835c8cb790612958e182028ef6a316dec83b62c234a37012322645860c405a76" }, + { 3561000, "89420fc80e51b419da3ab4f884aa577a731ac64a1c6c6b85bdaa10d18a19284b" }, + { 3562000, "7b6652e85ee6a04d34617337c9c17efbb668f40ac4b1c1da8eba5c6f38702e8b" }, + { 3563000, "95402851c93faccbcb15559b7c0dec975ef2783276c373b40f339c141b454157" }, + { 3564000, "e5c683e65fdc49a2efab264969eb4f448d4ed587b865fba4b5b56ad49c42bc4a" }, + { 3565000, "b9bae250fdd1f5faf6e71171033188be3822a27613971eb13a7156e05fd4568b" }, + { 3566000, "4f68f9ade51dd351f974d820b32e4e363599a1753908359c60ff7fdf54022d55" }, + { 3567000, "d842f549ba1b667eb15dff95f812a3b00ca4ee8623ed0171e6f4cf6b8d1bc87b" }, + { 3568000, "59fd28240700e1c712c9dc96fdc7fc9991c1cb408dd5e6d09ecf164c086bde3e" }, + { 3569000, "416be3de65f52a739178ed6afaed8ea6e8c1789260954b1c42771bc9bdea5951" }, + { 3570000, "d66a1702f88920d0123741dbde8667b947491237dd5b042eae5d4c5c92cf1e5f" }, + { 3571000, "f21ddb26c27538e414e936894279f4b6efca4e0ca25a465652dab95775056516" }, + { 3572000, "bfabf834f64a37fb3d641599fd75bd696e4a896a17a9102988c9bc94e0529665" }, + { 3573000, "ca6d0ced9f8785bbdf51762fc53bc89197c8774905a3206f26bdc226e8446ba7" }, + { 3574000, "0f993ac436e59e5920924bb3436b8087a50f73e15d9e83382341900131c86c3d" }, + { 3575000, "d78f9d9ce52ac3483d861bd07caf2536120151d3eaffbf3ce93d3bf75d5bd521" }, + { 3576000, "b3921ed3ca9defb0690e9335e93bfea3f43e770dc411ee79e5caa1b7219f6272" }, + { 3577000, "152d6c998e272644813c55bd32c2901e006ac972fc06f7dac877db0a18262082" }, + { 3578000, "a918678fb9cf8a403ba97724dd7d206d478f3fe9510fedda004870b3c0697d95" }, + { 3579000, "37d006a737a96f7332b0c2ab4a2280a0093bb926894282b3f20e345e3e32afe5" }, + { 3580000, "151b6ea0ea71140ed37424d44da70874e13f73cfefee3d46b0702320cdc48f3f" }, + { 3581000, "e1f4c26e22188a5eabed3bab3e26fdda35b59f29403be41b8a87b70a8850a1e5" }, + { 3582000, "15603a12cc688ee494b3b7fb02459883abb9040b7a967a8688180bf17a836957" }, + { 3583000, "9e5d8d19e20bdef764fbe96b1695a8929eadd72248e566dfa29789bd33e9180b" }, + { 3584000, "7e72108b1c031cc6128afb55feb929e2752010ab45cdc7f6347eef0c6bed0884" }, + { 3585000, "71cfa48d5d45eb22359a8e5666dc4db3b5d401024af296724e9f8dfbff1ae7bf" }, + { 3586000, "26b2d349f9618b465c1c7e1d8e8f0671b730356935f07ff043a130affb0ba658" }, + { 3587000, "d233281b314ab21258d0ce799d698cdc6dade58a1e23a900e77b75976782a9e3" }, + { 3588000, "b4539bfb217c36a439742bcb198df82d15f552792f207dff12f7ee40ac180244" }, + { 3589000, "68b12ec7a98940e00c7d9e879cbd4af38e6dafc62e7067067be52473735d1cb3" }, + { 3590000, "f56b470354deb935ff1f77d7ae0e4fa9f6534a959ae59766fec40f0e278e9cde" }, + { 3591000, "a049c7322cc2d74c198651d5990e85bd7019cd0d0500d635caec785b1d608514" }, + { 3592000, "6518cf788145aea503f3e8897fe11f071faca43342097a41eef9640f98d36c0d" }, + { 3593000, "1a896da1bf0388c0c1db3b4090273eedba9d1f206f61480f8c4adc5ecee20ae8" }, + { 3594000, "447aa2e11e79f70b11c146879985e19c09c7f5a9ca0bc9292efcf247b7b56110" }, + { 3595000, "09a2f36324803e42226f3153439a3433834b31cea5f209daa2027c37f1541208" }, + { 3596000, "70dd1b846b2086bdc4b343cb78cc5be3f011484778c4186a27d550cff8778857" }, + { 3597000, "7ce86d935a4b8ab7736a628e2126a5587dbf65064d1da3d607cce30d1a240d7f" }, + { 3598000, "ca80ae5aef3ed429f65be82f38e1bfb1ac896aaf52b01d24bd23b9bdc3053b65" }, + { 3599000, "8d1bec09362066427a260052d39056582abb2f36f8aa6ae4a615283277815594" }, + { 3600000, "0ba9f2870be7afa53f9fbff27733c0aaf7c5e132f92cc562706c954c4f4878f8" }, + { 3601000, "1b1d2cd05a6936316f97c0aee781da0644057d7d61e963f1ac1f22377b2fd95f" }, + { 3602000, "3903914a8f3e6a66e4b746cb0a5866be5f83ba1071a709d59449fc94e1a1a69f" }, + { 3603000, "13250c1a4071102da18a419439b0315bb45d59a4c7b5842b1b339e65f46c8f19" }, + { 3604000, "b8015e9cbda8e50827c9f74f143eb7f149f3dc3cdbc5175fad63794b5ed63120" }, + { 3605000, "f451d451e122501da30eb96e8e7bb13e7aa10213f35d9b81d0b1295bf66fdb37" }, + { 3606000, "66099861fa5d21cf4448f504c4f086cda6e87d32048e226751f8d4dd85881cd8" }, + { 3607000, "3db0716743b87654f323213cb5cd9120ed5929fc4efc5bd4bfec75954c7a6ecb" }, + { 3608000, "05270a4f9320b9bbd74cf0c2843e7a16da595673b419c6c1ae18cfe061b16434" }, + { 3609000, "1ede8e43932d12198ac313029b0a669b04d6d2c85d6ff75e63f8f61573591b30" }, + { 3610000, "8704796a6f5864f3f4e28f9c7483cd044f0d3b885975f5617a539079bdc4f4c1" }, + { 3611000, "b33a9d7bb0ecb79b7446bcff8bc834f324711e1b59e249597b3dcc54b2a0b225" }, + { 3612000, "6d3b1681922e7a6f9def0dc586654c4a59ab9226a840285acfea20319562eb96" }, + { 3613000, "6dbcd0b4edbfd574df591d7c042cb7de3b8cf712297458dfd9c1b1723a53c92f" }, + { 3614000, "7906afef2dd4decf780c48fe59ee851d36986be7abb2bcdd933a7ef8582b09c3" }, + { 3615000, "17f97d88f19538a4df471aae81d7877a2a9e2fa1e0d7214354fa6b83022efda5" }, + { 3616000, "3af9d67738da9312153b1845da1e81502a6cd633331d0d14311d71442c3dea43" }, + { 3617000, "da2c313ee652b32a97374b93a1d7f75d99046eeb5d5569e789e4ee1e3c862464" }, + { 3618000, "613062f6ee85027febf7634fbf622ac2430e2694ca24319ddf62da04a9873eea" }, + { 3619000, "eb0106dfe9dff4adfc6e2328ee4c712733402d32c5a09d0531679567dd3e357a" }, + { 3620000, "c063f086f2236378d78486d2c59b82e35d33ab1c3113fdc45cf9a9fd8b5843db" }, + { 3621000, "4d273029bb9ab50c3102586df8dd8bc9dcd07e2c9ac258560cd2dd1aa41d0b28" }, + { 3622000, "11260ba86ada78f85492953d6938fe81b17490fafcfed3dee24f7ec405ee0490" }, + { 3623000, "9b07f25135371a693278ba98399e6864a05a35ead4124aca40e9182f74cc69b6" }, + { 3624000, "c9803116f1f559cf8bf0905f3643e648dd1eed4b9f7b663f4ed49429b87abab9" }, + { 3625000, "13c99efe599dc994380ebbec52238af9f488a1d3c47ce57041583fe4ab2e186b" }, + { 3626000, "e8ed76b7391763fd9b03591c90b4cf53561a201b8944750ae4ecedf886438a22" }, + { 3627000, "f9dfe4ae71bee9972c440fb8e0edea29c447fab7d705e878cac6b1d89d7576c6" }, + { 3628000, "3532813ccf51d989eb1ae1c59593ca3cd684ed40550cbba506e8f7f9f0012275" }, + { 3629000, "4cd03d3653e66c5ad75a6d21a3443a8b5d0f0a262131d309efd6bb5b05a90897" }, + { 3630000, "b00438373ad40b0d5c7400de9e48104f220e302a6266e55430f33d3d03b4758b" }, + { 3631000, "7f0422778e6f6e5b799860704c4283905f188bbb234fbd101345a51e636a0e45" }, + { 3632000, "637e1fbc840d18e9c732fbec72f0b5f2058b52263345b140dffed0fdd242958d" }, + { 3633000, "de98281240c9ab26edc0b5ccba4e5786bfcfed52d5cbc1253790d5169ee17513" }, + { 3634000, "3bca20cfe01e1a947477a058b72bd11c59ebca2ed61cf4b7ab854fc0b48eae9c" }, + { 3635000, "4e853b6fc32192e0ee8fc7c7d9bca909fed4055e7a6184e40eed88851140499b" }, + { 3636000, "d2ee5429bf8c69719f598ea7e54ed775900ecd8d4ba93d7e7ea21d16ca91c371" }, + { 3637000, "d415a41822678748616f6dbef592329b648f61ef38a085c86853213f1973f2eb" }, + { 3638000, "67d5c68f8acda0b80093ebfaae9fb69cd076a664583555cc03a2b9f9505d2c00" }, + { 3639000, "5d7a0f64b46ed48a42aecc04fa8f4ac38092ce214091e196237e6cf81a0e6f1d" }, + { 3640000, "19a1d6bd2c4162a1764a4f9e7030c917ba10371a35a81af50e1fceabdf690523" }, + { 3641000, "5c602244dbfbe7c3f696043e563e0a9af18ec8f38fac5fc0fa2a29f3bdff59b8" }, + { 3642000, "2a53d03b6b553c20159820e7361df960cb51263e6f57dffdd1ce13ad0e2fbfac" }, + { 3643000, "1e4761a99a7f75337ecc38a84a5cbeff0f217b52bff525670584ebb2710443c3" }, + { 3644000, "a50b240039327ecf302c81d052baa648f29a6939450fbbe514c58e8509d39644" }, + { 3645000, "5166921272e30bb86958d0b11f1b38f41893a47b62e453c87aca91c41b18db0d" }, + { 3646000, "144385f9926ab0c841ec7cd8e22f3d4178bae2207c8dd02b60f72c9451909ae8" }, + { 3647000, "850d2cae5c9f4006bc2b97f28aef6aec489a5b80955fc243139ca4b84e9e1258" }, + { 3648000, "fd0ba5ad845765412b7f9fa317dfc20ac8ca9dff368f05970bcf74b7e6aa1488" }, + { 3649000, "709d1909686b1c799828ceb501ed3c4cf266b56ab05ba31b574aaf6634f52457" }, + { 3650000, "1021d0daf243011210e068bd4276dbcaf7ba4b9f67ca5cb4587fea0573b6c0bd" }, + { 3651000, "2d87f27cecb51a40b3d90845ccc7715d623a3845181275c21615f0ae7a9b6daf" }, + { 3652000, "bc5b4dd0e9cc7d39123d0fae30b90e9389a150da49395fcaf253430ff3445f7e" }, + { 3653000, "1f1aa4275223fd58a227373226e7e6beda51f1f211b09d8586b7d837ee299651" }, + { 3654000, "5571669155dfd635857c8650e851a8f52ec92270f437427c24344ddf67ccd1ad" }, + { 3655000, "bd7e72fa5e0e99381cd7637972ff0196909dabc77565e4ded88e736ed37709c5" }, + { 3656000, "cd1adf83fd0f7737ab8df3773a35b13529d116861b2016b992350854f5a0b804" }, + { 3657000, "8c3bab448bddf83ff5dd85cb1037f7ab50e05491832cb906252f5653014ea23a" }, + { 3658000, "ab06481e6576cf380b06468768fd09131b86dc498b9a3dbcfa2d7c7c2ebfadf7" }, + { 3659000, "5f98e5fe511b2151df7f7019ff5d4f9f62587d403a35b2058e338df60d18d97e" }, + { 3660000, "b51d3ed93c76729ff959f98934e7a998ed213d90cb231b3d558d931b76a21202" }, + { 3661000, "599ae1bc192c73c893c30e10bc195ad4624d036b6c693170c0fa2aad6c9751d6" }, + { 3662000, "136c14f9674cefd71d001909c7c08341f75d75e9471eb559f69242f23433e514" }, + { 3663000, "3a0363dd46fa71621938f91b90bcc44982c0a294104c56bbb80ef186dce137ef" }, + { 3664000, "fdc974c25c028ee6e7ff287342cde4aa8ad46eb2f6b9a5d1d4ba2f993ac29b9f" }, + { 3665000, "93a681f06604d84288e96f7106288b57dce1d5a396af1008c7a67717de446d54" }, + { 3666000, "20f307a3897e2087160d75c6c698e14ae530528d7021342dda3c40340b3ba040" }, + { 3667000, "59d397fba8e21101d765ff4cb56e51ec89aa5bbdeb18fe287d472493a0912461" }, + { 3668000, "34f59b9b55895ec3317b2e514c61871b50e71265783c95582bc385d390d3d6bb" }, + { 3669000, "a3b12b906b02921ce35f52c6620a92d8f72517b4625004b595aebf3cd431134b" }, + { 3670000, "ede9fd24b20bcd8574f14a2dd6a95045fe469b94d5b7fe956212c5b89dc3685a" }, + { 3671000, "1173a13342395c9657ab883820c46ccddffa87ff4bf43c5a52cee1e5b00a4bd9" }, + { 3672000, "6aeadfaa053257da6491801c7321371313f18abb1e92a62610d9c25e359cfe3b" }, + { 3673000, "16384cd4b1b28de48cb222e2bed4e5802fb4f8052a69b4ec05b7b1076a123a8e" }, + { 3674000, "de15633d95e35e4b0b90c4f3701cc58bd9b5f41130b1f7aa5114ab87297477d1" }, + { 3675000, "3a68ff995d1a77dbddc473e12f47e5458490ae59d68c2effe49ea22f91fbc53f" }, + { 3676000, "f70622eb016d9969edca2b785186d994b350189a051808f82bc9b93446df0bbb" }, + { 3677000, "a9613d248d54e9c044df4bf594d7c66490c957409919f43e16841bb7135785d5" }, + { 3678000, "15c1cc9f019d0d58b170af3fce3447e22d6efb9ddc8d5cd5dbc09fcdf9746415" }, + { 3679000, "72b2223410d515dc7f5a8e3063dd2a318330de31302125c99aa31fc79240c25c" }, + { 3680000, "cc5bbac344aab6fcbea9b4e1a237c5d5e7c33ea15ff3916241fe240155e9e9fb" }, + { 3681000, "89bf989598eeb76fb2bf83d338378f3f3f70cf6a523379b4af42683155b8c760" }, + { 3682000, "a03950de8a1dbed9fde001abe4caa9a7ac1cbccab9a26dbf280529c6ef95096d" }, + { 3683000, "ec87069d40e39a8f646467c1a952c34f759fdd8c6ae8d53b4524165a68b25018" }, + { 3684000, "5b371d144f0f43bc4115ce2afbbaf0ffc6c77f3dc5569e16f72d78712c90bb83" }, + { 3685000, "6ba18aaa7f11a26a40bc73ed9b95e64f37ca5267f876a6f79fc33e48892c022f" }, + { 3686000, "9fee24ea0b0da80816f3d982a3a457610025cb8fab654e750f971da6f021ddf5" }, + { 3687000, "30d694cb67aa09b16eb374a9ccb95efc35aabfa0049d99e7d8e007acabd69b2c" }, + { 3688000, "b4887172ce797344261f1ae41332f0d8e21c798f4d7e3478baeafaa99bd8e1ea" }, + { 3689000, "ddcfa0e327eb45fe39108620665a5d96f5a108f8fdc93fd5492625d529108a00" }, + { 3690000, "0e1f74e93f5947a30dffb9a3e70cf947b5d2d71319380c6dd108e5e4f156806a" }, + { 3691000, "be06222d2286eff474af40dde6d77d80029726cfa5de11d0516281fb594ffaab" }, + { 3692000, "4a6b017693358f5dce514e2d755806c40716f200df97b33c726bfa990505263e" }, + { 3693000, "c1b3d110ba9d0a4b7ea8b1a14d2703755ebeb43dcca9ef0fa16fb0bfdcd50c0c" }, + { 3694000, "e8ba119a0a5b1eb82f047f051b2ecb81ae9a62dc20ae2dde0fb81fc5cad23102" }, + { 3695000, "005b60323b5367fd0a8678e82644f78cae525667ab6d7396c61ef5918907c993" }, + { 3696000, "d34e8911c95930f70251db72cedc015e2eb319f2809d0da168540ec8b49d7f75" }, + { 3697000, "0241e930968a98387c350d21307516305e1828d856ac2d04b146cc601c64e06e" }, + { 3698000, "71a998f919a9e7266dac66e56d256822e90d64683d44956237a412b844555565" }, + { 3699000, "dbfd45b4bcfe7fa63492db0928cd2195a64b0cb4ee56d1467d220c34d2e3c640" }, + { 3700000, "b5f4384d503774236352a7e1289cdfce15dc0fadd7f5d61b2408f4c886692700" }, + { 3701000, "a32abd429c1c3cd8a4e81cb40382e0e86e5f9547e716c98d169f9bfeddef716a" }, + { 3702000, "11b9ed36cac9fb6c0f66691e2becec3abf69b893ecf898a48143fcad4e8704d2" }, + { 3703000, "2205ce91fb60aae72cfea56b6936bdc520a8822faf7fd459c55fe7b51d360e7b" }, + { 3704000, "0620ff410099e44faed267459c371a0b757cbb5f8d80f59a382186a59036e2d9" }, + { 3705000, "0f1c83a67628cadcb056b6af1dac1e14adceccdd95034ac452e60f18623c8a4f" }, + { 3706000, "651c9d2c78e68d627685903af28894770d5da7252933bd3da8b9eb4e309305a6" }, + { 3707000, "a94bb1c55a4c93a1ec06da0c49fa180681ceab82e68fc573d868e27cf3bc9931" }, + { 3708000, "161c22238875817cd6fb5494652529399e18146f2b3133f65a2b4d8b6845f205" }, + { 3709000, "1b6f2a5f49f7d87e3af25ca33d148ffeec3a7aa39ee25fc1199ef0d1f7b92570" }, + { 3710000, "337eaf4763a9c4a4e400497ed1680815cb1d80ecaca84bf6cf38580a1cf16440" }, + { 3711000, "320c4f58e574c02397ca50c01850343b04bd4c47d017abf5ae0f0fd727426945" }, + { 3712000, "3905fca46a7e0daf69fb781af66ff85342c59d2e1eaa7d422bf08573ba2ab6b6" }, + { 3713000, "f9987df6cf1a2c6379b7b2d49dd517fc18565fe36aed79e7a043a2a8eee0339a" }, + { 3714000, "cdbf909bdbc46d3a2dbcc2ca277c0ea6dea8bdc28d4f1510528a15727013432e" }, + { 3715000, "0877d0a20f3eb94b9496b955a6a4d603ab91bf55f4ebdec89b9c944aa17ce293" }, + { 3716000, "8a7a39f9cc3fd5878eaccd3ddc5931a1b7fe61b6309f473c166674de40ce43f3" }, + { 3717000, "bc23c0ca1cacc53cb81af262979a6b00b44aaa96bd12899ade7757e70a051b2c" }, + { 3718000, "f88dd4b482af2e63b6ed2a2daad7f3f53e2afb36ebf362ab42096de3ffad68ce" }, + { 3719000, "fba6904976c360cf6bb468fa84f7cc469fe2c202fa0da13299b69b42f1523f05" }, + { 3720000, "285f2c436867ca48ec40c789b6dbb0697cfcd3e1a1bf85a6be83fbe39e25d926" }, + { 3721000, "c2ddd2b55116e5e49ffcab0c03b0fd4cfa851168a6c8a8c3b70149ae14b85d8d" }, + { 3722000, "3f8370e72100a5003f8a8b3291a0b6263e2fe35812fb6dbd7b21653e47606342" }, + { 3723000, "392d476594778a6f4d264c95f4992673bec99e8d5314deadc6d2bd76d3443c1f" }, + { 3724000, "0273a81fc8f61af36f50e298881e77d9f3db763ec01a8c0d40db7a45e2c61fa4" }, + { 3725000, "e7a0f0445a6abd9b0d89add2b3e064fde9373e7f048a682ed36f2baade8efe50" }, + { 3726000, "bce0419a31e86504dc81cd3c365fcf23ca11cfab9a7eab97d68285059604d500" }, + { 3727000, "70cd393bd58cecfa05612c59d2488901fe5c6f1bbc299f94fcdb3ba941ac9759" }, + { 3728000, "4b6ed158356e9b8d9afec4d45c0911d0b8663d6c8d7e52683b5a698ffb50f03f" }, + { 3729000, "c7cfaa51fcf6a3a1c3672cf5f14f52982a8bc7cc2d0b2be2711372667f4384aa" }, + { 3730000, "128b6a17e6e4acf7ca5de7d3b819329bf3f0b8baab1521acbc79a315f3e11c58" }, + { 3731000, "6a92b431878fcfd2d1124f7f5c2f78af46eabb79c7672c68ba407dd281e01306" }, + { 3732000, "f79783091cc02dfe6773ac09656c2b33875911683ab2393b6848509bf415d9da" }, + { 3733000, "934f9b8f6b1331712d4b1c5b82ba53a21f048c8437da53d37b8991f6bbae17bd" }, + { 3734000, "4f0ddce96d81cf6bedb7c4d3b68c5c5479ccec6d9c14ee4a9751342803764070" }, + { 3735000, "2aa69e273ee6ec925474936e3847f73df645500d8c0fa97a0371726062bce959" }, + { 3736000, "2af5ff1a1ca1353f827b439c15a67372c756097601d68e51183c77b8f1d4480b" }, + { 3737000, "cbc92d02ed11c3da3e1781402f5fab827232ae87452961f14fc671f6822123e6" }, + { 3738000, "b1ae1e05b6cb4aebf32e67b9bfabdaa928d68d8a3bc5aa5bc841623089e15459" }, + { 3739000, "c42af5efb98bfea4cd971cafcebf6695f4b9d23d1fdac2a8624d2191b3d32cf8" }, + { 3740000, "b7544a42ca66206c82dc2eefa469acd499c5f377bf0bfee90b25bec0be01372c" }, + { 3741000, "70499bc4bef5184c63b6de4ca80b4d64c72cdf553bb5bddc617a350ba1287201" }, + { 3742000, "d1480291bafc43cacf11648587450529cb88e34f3ea3c9efd1b7df45fcbe03b1" }, + { 3743000, "7d546529c47049f7900b4f191b6f4eba6d1b94a82a8f0003a4f001e2e5907291" }, + { 3744000, "c866f63596ebefad13748883e1113a3a8cda91b44e50ea0b6c861d33e45e50e5" }, + { 3745000, "d516cd1aba0a69f5d65c9d5bca78d55acaf4dbdc65be96b04ce602c186dc8a8a" }, + { 3746000, "e42922d47ddd451ea7b6f0311f118af31f1492b199e2a0bc4f6ca4ebb10c0153" }, + { 3747000, "2c8d69d455f0800dbdee80005049e3d7bd78b5dce5c897bfe8aab54c80a68e87" }, + { 3748000, "b7743d92c6b4c91a5fc97b8ca25fbed0aad99c0348af1d93e50ee768a2573ad8" }, + { 3749000, "38a30be3f78d755cdb9d010f0dc0e833f07c3e1edcc896a903dc42a28bef3c43" }, + { 3750000, "8272202236a188bca395dfbf32e1bd1cc0950b76c2e50aafad2ea6ac9a304fa3" }, + { 3751000, "8f02a71762d098ae43d335848688ecfa7b38d3011e86e1b635a4f44bf293013b" }, + { 3752000, "ccd819b23d295a64b1b474e99d280e9102f33b746d28cecef322a0b71549240d" }, + { 3753000, "bf62bcfa6576991f8412dd16cdb334a587bd3eb1e6da50213da996671b6ca533" }, + { 3754000, "3794393dfd137d15be79849577d9ae8dca6ec82668355af1f3a5e709fb20538d" }, + { 3755000, "d6c56ffeddc5644bc090d2ad1b572cdaa61e63c7d04c4c3b2bfb6d787176b49e" }, + { 3756000, "ff76d3cfaf9e98eb7f26a2656180bdee414a2cedbd9d114a54e62b417b1b14da" }, + { 3757000, "05296308522d3f17bc9d0cedb59ce21a2fd616e714322304449ef4b1792bf4d4" }, + { 3758000, "bbbbe2c37163162e3944c5712451d83b654ad0bb77dce55854881285ae6c6e8c" }, + { 3759000, "f4bc726288f39fd96567d30e53a1e34ef8b17e784ffe3f0a911a130f4c813ad0" }, + { 3760000, "9fb55aa12ccdfa8a5fc5d5140d489e5a4e42fd0a313dbc56c31725eb6c09ae6b" }, + { 3761000, "8d5bc39fafb6f4130ac1a7eb1877a355f48deacb073a602ae488cd9fd89e6e8b" }, + { 3762000, "301998a41b67500e456428bdbc03abc90c4b52b3b22c4bbd9e6750a59ce2f3fd" }, + { 3763000, "fffef5a5af641df8587aaae984ae014b7ff0f141eaa81f276a10830d18ed4f8c" }, + { 3764000, "5bb44562d35ab3d6e51edcd0775f3e32455b6b3693f7eab2ab09ff44e44007c2" }, + { 3765000, "d0592fba96309af51d8b41a08a4f5628bb555299134e4ce0c3f6806035afa57e" }, + { 3766000, "902c728ab7ba822744791b4ba772d38150ae1efdc5ed4265ba05cf333189ec60" }, + { 3767000, "ed46492ae519a4038066e2a888ad8b8adc48f3be6a580bde93ee6a4fac763cd5" }, + { 3768000, "d2d3c000ae5eefb2d035193a1f71d6a731b4d3dd748480ddc2683a4a297263be" }, + { 3769000, "14c1080d8519b3bf1feb896352bcedf810053e0c460b58f6a91f69fdb8e8ea8c" }, + { 3770000, "1d1dcc3f9d952b42da47735b5133ccbf37d5554dc82110af2ed5cf1c6a467b8f" }, + { 3771000, "bfeb0a5644ac5c465ec1fd07d57e3943462e92f45232e95ac4c4115df1ab3570" }, + { 3772000, "80bf574a815e835b70b9a1c41289472b7de0fa8a695791eb50ef20b8c8de2164" }, + { 3773000, "48d60856c22e6b88330e9718650303bf20754b945a4c9d808110df89aa3b2685" }, + { 3774000, "c00f6e3505c149faaebc45a1d7b2fcc4de24528d9b4013fafe781d1996bcce92" }, + { 3775000, "ea3581ec469d7962fec2362348f66a086530ec7d8076c22571fe0f6ae721ba78" }, + { 3776000, "7411ce21c9c2c8df0809c6695d847fb9913303cafc79c55cbcafb60b447d1410" }, + { 3777000, "def21292c2caa18cfb040187b324b1d8aff09140dcb76a80699f2fba024eda55" }, + { 3778000, "3a8eafff7cafc46a39b0498d5fe047436b7e70dc1d9c5a59f0610c98d1633858" }, + { 3779000, "72a8e0d4d423624f83d86fcb093b6ad1fd69240bbe1ee524bdad26b7509412c8" }, + { 3780000, "800c22bd7cc5fb96a574b081f1b4d25d43ca8f0f8935412559e1ae1d94a678ac" }, + { 3781000, "9973abb11a2a7b649c5f870ef5dffc3740b68fd40d2a79c6bb83cd4284ba609c" }, + { 3782000, "326909d355a7b78099e435bdc0e48ff3d339bea054040ce67b3e83adf723c100" }, + { 3783000, "99a82c472f997031be9eb486693a3640e34362c58a1154375e8cbec83b969ce4" }, + { 3784000, "94635eff4037bc3a53fbf8475d1444aab876d0f1be0d8818c9d51c6db437970f" }, + { 3785000, "70ed40c82294e6377655643aecbc5db2f7bcfc9a65677dc9ee31b71d49a08bb1" }, + { 3786000, "a7f12ff79678c23eaaff430f326146ffb1f9cdd9785cff47b0b12f9756c5f987" }, + { 3787000, "e6a1f9bf6af78ef63c6528d8aaa0958e015c0d8cf30f38f52f0ad4706573587f" }, + { 3788000, "3805232b73e27faf537ff46be8e275e03184ef8cfc15ad72a57a407e2b8d6cf5" }, + { 3789000, "e3773cced2107f6dcd660632e6f47d35d7b3f631035083601680f66377c1dc4f" }, + { 3790000, "c37159508ae7fa6dc8d1e455a8da72384119e5e53e434c6fb4e8ca84f3496d2f" }, + { 3791000, "5f35e9df9dbe2d4d9914816de21b665bed798a4ef20946114ede844045b01c9a" }, + { 3792000, "2307a0bfa1091f17126a5f75425f757185eabc940935687b0d85f6ad420dbd9d" }, + { 3793000, "13c8b094f901661283d88ce6e3bef89148b887688965dc638a59003c5bd37835" }, + { 3794000, "f18ec97bda8daba642f366efef8f9dec26d054ef7d683dab8933445c790a67af" }, + { 3795000, "71fa6eae68611686e60678c1d47efe96f22d6480d37a56254bf326baad2ba999" }, + { 3796000, "ea2eaec8db155f0019a7f77c3184097018d2a78b7fec4741860587bb7f4f6d82" }, + { 3797000, "20293a7773f4fb85417e9610a4d6f8549fd2477c49d8af45c8b8875be7e440d9" }, + { 3798000, "a30c3d125707a8afb0e4a96be3c76760dd2d3aea003027960984102dd90f79b1" }, + { 3799000, "a1c13a876f76cec25a983ea34edbf020ad430f41cb05a448fb7f14695161f8dd" }, + { 3800000, "51efcb866e2f9a1ee1a24589d5ab7f6ad806646b45cd091fbdf9c20b57155e5d" }, + { 3801000, "f36a9808956340d9fac34ee0a939181408b052dfa6e48b432bde277935a20f21" }, + { 3802000, "1c312d84308999e0495fc195aa58d6fed4b8e9f91dfe2b4f6fdb1e6af0edf133" }, + { 3803000, "1b004f8073f988f56d985ce092fdcd442fc985359f107f2d45014095a140eca4" }, + { 3804000, "bc18c5e5c85cd77b4a2e54e4088161975bc46f9f36f0b7e00fc6567b4d0cdddc" }, + { 3805000, "244a75127a0bfe9355155d31d19bc2e1961de3731362bc5763676136bb1ec0dc" }, + { 3806000, "216eacd483b1286e21038007d15529ef44b9ed3fbc9c900344344cbaf83002f8" }, + { 3807000, "9a79265fad844d352cdacdd896b4c9a73fc408fb6e230f0ce69414cc3119ee2c" }, + { 3808000, "c8eeefda65999b788de3a2f19573ae64a6eeb119f6d1b23b882a7a44a150584d" }, + { 3809000, "9226db4ea9603474ab4355b6dcd8ad8e53741eb270fb50dae95e51e115f290a3" }, + { 3810000, "6e85a7e015ee84fa86dc71ddb6f5b9ac4c16b236ce80edbe5bd23f407d916fe3" }, + { 3811000, "d764ea5f13a5a081b3e20fc98f6ba32e32ea4cde798e89a79cff10beb792da99" }, + { 3812000, "703f93f4a5703b8598be9a7332dd1660dbc702ed1efeaecaaaef35d44e062310" }, + { 3813000, "ed748feed926d4157ae612b02eb9ef6108a650c58ce0b72259152001a5cf2f6e" }, + { 3814000, "a34020b756874eefbb8bdb269b440fa8a908b6f005f3aca70b18c2cb827825a0" }, + { 3815000, "d0a8443a7b56b0cbefcdd9e95c7991d9e2bd634ebac49c003d1cc02e0f4f014b" }, + { 3816000, "0aef5437e96726157f6f75d2d2105f94bada0420ede30868d73ea1eaaf40224b" }, + { 3817000, "e63c833c24f67408f73c7638475e387b780e6f95a34b403124d28be9494aba67" }, + { 3818000, "d2aba6c7e9443df75d3490856588320c8f34398515528c8cfcfe67a6542b3ab2" }, + { 3819000, "5f071d35ff6237e695af857c0ad8f9b666ef6f9d0f1bab19ae89fcbf68e88472" }, + { 3820000, "855ea75c4b37747ee170a2326a99de5a3b7b2c349baeb013f31b13685d16f827" }, + { 3821000, "c51828aa7893cefa435c5a480fd01eff338cfe85e37e6345aed1b1d0e73b91bd" }, + { 3822000, "d56cdc45499930e52ad2458f661bfb1526d7e3648da0794559ef6be8e950ba6c" }, + { 3823000, "cd88966905a5b374e31cea01e0477c34fc08aac1b174ac604ff0b7249e39dd05" }, + { 3824000, "3a2bf5961ea839800e8cb683a76b0bf8e053189ba078983ae407e46395fe8b82" }, + { 3825000, "410c0b40ec35a64493f70c974aa0c21c8c31c91f44c3f70759061f8aa15ddf2a" }, + { 3826000, "dcfe17c34515a011d29d526d2d0d501a457aa9c3ea7dbda6c9f7c8232d1bec7e" }, + { 3827000, "10eefcdceb88f2967d6f785d4a26d88f190fa641632a49f2316112f8e5098090" }, + { 3828000, "ff783c45935b7fdebacc04588395a2b56f63015a58fc620e4066453bda6f6255" }, + { 3829000, "ba754f748d051dd698dc90c524e67a690d1c8634db92598eafb043d9b0f45c06" }, + { 3830000, "fbbf61411cbbbe226c5c94556d7724b7887deb07c6b5532dffe27f51e8636dcd" }, + { 3831000, "05363cfafc8bd3c0aaf281fea3a9f72afe2eb3ab6e200ba125ea4182b078981e" }, + { 3832000, "5fdcab28fe92db87975365396834e333df1e20a9df169ddbfd16093b26a5775f" }, + { 3833000, "b72d9c82393814a914b0b4852bfa84a373490442a82c806eb2669bfa29db0223" }, + { 3834000, "74debfebddcaae210385deee4d5cb0040d1212394641b9abbcc148df2d530cce" }, + { 3835000, "5909b63494694f9f0d799f2add97ab4c9eecb1838e113b762b58bb132023f838" }, + { 3836000, "f8f16388c358640fcca7696253cb996ab9acc27f1cf5f9846ad0069d85768942" }, + { 3837000, "9292209e82abcc717f70da35c25e5d0d1d25301288762fcde4d45b5d8ec7767d" }, + { 3838000, "0a4b93280d7b23195cd6bde12e4fd43db1720b376bc8ee2897abdae18a92b98a" }, + { 3839000, "39a0f5b23e959aadad45eb1198a09cb1ffdd50fe98cdbe0110fec450213a947b" }, + { 3840000, "681e6ec59a8524d6e3b5393569bd2fab2f22736c0491b9d1bf10d2ddabdad235" }, + { 3841000, "253fa28feeae9d8fc06dc8a21c07371bd3c7abb6fa5aff3e07c2b572613a3214" }, + { 3842000, "3f07f005b7278a8d58d9b5744b85166b9f2df164715ccd4724eee744c71db271" }, + { 3843000, "0d65c738b32c7fae6983781080f6867ace9ef29c91af616f2e6a4d9d818c0a55" }, + { 3844000, "705f8d95e4a0b84a4948bce5c9c8d93b40ce0a8f80d7ed78de180b61a8c5c47c" }, + { 3845000, "46da5feac6f1f6989ef98181002a9227a36b1471abb64c0122ebc4d8c0432344" }, + { 3846000, "967ca7727b00b910bc5175948536233c6d1a19fb828097c759b146bc83dd41eb" }, + { 3847000, "61c487dc4f5377a1c39508a8b857ff3b780cee17c80e5e3b47202180b776037f" }, + { 3848000, "334387a013445d3c34cb6281554c9f68bc3f775594de72fd9058a8e24dc89979" }, + { 3849000, "e658ef794cf89090ff4eb01647e4fbfe0b513cdf50a3ca4f1b59d067badf8eb4" }, + { 3850000, "50cca9da94e0d3b95c11e569b6dfd97f70ffe72aa545847489a98ea0cef028cb" }, + { 3851000, "2e2752d6bcb7466871b7b36a59c6fd8c59bb0aa5a8f1e52937bc2df03ca6a208" }, + { 3852000, "affe8673340a1b4005fc3dff93c4562549cbd22b6710e3c1bcadd65599be6d47" }, + { 3853000, "ed232662d91c6206cbdde14f3a9e4a5f8a02951a17743ccc1c656420cde4f8c8" }, + { 3854000, "0a048d6776cb79425f7d932b653fd4c3978c9d1f3d4277d2510027eaad3e7649" }, + { 3855000, "65b7352e0554c4aa7ef8b546e28aab01db9bd6bb05b233b8dbbc6d8ad89d9ecc" }, + { 3856000, "6175900593ad2550ea1c44c55dd28fdb762134a44f47b69a448bde6bc49e7c4d" }, + { 3857000, "0a5b71e52745aeb4a445a35c0626a0832c160dc8c7e45b77150acdc66e1f7acb" }, + { 3858000, "2661cfc5d66ab7f125654207c572821f5c02cbe370b5d741e8967464a45c764d" }, + { 3859000, "973b862633f5f5edc5114d3577d490275245320df518d4bc5a2875ec92ced94a" }, + { 3860000, "817865da1f3ff5404734691c43ba77652c6b0b08aee17e96c61598d96a417411" }, + { 3861000, "8386a62b41196839f7a84b053baec788d4751ec801143131e6cabc52b2c4c2df" }, + { 3862000, "5f2e50e0c1c8f5321278c2dcb9a010ca8399047fb506585b361a74f1a72af396" }, + { 3863000, "61b87672d8c81fc9abfb22a987de66a7737f6165a8fa6200c927a0a44a488b3b" }, + { 3864000, "82fd310e82c952d1e82adb1efdb93c6f8be3b22342dd73f875922a2ab4d645ad" }, + { 3865000, "2e0b6e80258e9c536e1232a5c49aec160a91ef3616fb4cb7e945b86f7dacc14e" }, + { 3866000, "f73af138eb51fa1345c8cc8d142b84bb79efae6d3900bc154c6586baf685f9b7" }, + { 3867000, "85cef5ee4184d960a499867146423bd5bc1e3e6a7adeb3eee6a1db2a87ccfeaf" }, + { 3868000, "9746af6005c1bceadd10f985bc192a9883b78f38d348848caf46aed7e19f33d2" }, + { 3869000, "368417637696fabf33e1e3b53fac0eb18bd8f58fa3c723928906bfceb9efe476" }, + { 3870000, "7df24e77484f7abd31cab22002e6e42af463a5b710582131a738056a9e7d4dfe" }, + { 3871000, "c49c0f8aac63eef5f972698053967d553279d523fe74717a2b5f153013674d42" }, + { 3872000, "a400ffc094fde39a3897849b071e1a58669be58331741dcb0a8fd8617cbfd976" }, + { 3873000, "c36413d1c4ddf209581e65e022a4720e9e1ea8c1e275f509cc33155407df2b0a" }, + { 3874000, "ef677b751e2ed5d474c33740c23e51a7f751730e7768dedb7e3a79cf8630b8fa" }, + { 3875000, "1a8118e0dcfcfe18078df755ffea4294ee8c389da8d5247e00490e14e40d8b47" }, + { 3876000, "0b60c72cde9dfa16dc82ff4dfb097d9eb7d304714c1aae5496f0438b08afd8e4" }, + { 3877000, "28816e944602a4801b78eee174519e41644e5d3061066362c51495a0373202ed" }, + { 3878000, "04f55e960b14c2a17bb10d4ff88b63335378471d0db135fef2724f48a8ec0877" }, + { 3879000, "21d5155c0cd574c0c1bb9453d0fdf3b727ccbde7bf0da8c72e36845bab1d553c" }, + { 3880000, "cdec7f057628e3bb6149d93111579e3fb86370f97a8c72fdf0a6564c7d72cc16" }, + { 3881000, "f9fb341bb333f9217441010cdbb7c2ad8dd852a2fe3621d53e50f9178216070c" }, + { 3882000, "5ba0b846dd6c8e805dd555e02361ab4904aab23dfff8fb3ba47ada9266b2b4ae" }, + { 3883000, "afd0f71ddf5467f77f6cf764a8b9b46209d733e16d0f8e938dcdcae65c3ca1f5" }, + { 3884000, "af003e687a902032f3a5be364bdb545585601b001053fa400fbcd3dc44bacf18" }, + { 3885000, "5b41b2bf58fa82a1581907fe6e0c4fda276376e051621615b12b74573f244345" }, + { 3886000, "a08757919c6eb05da3a14623c0c953b1b15e322c73d6835a25bc9272dc87ddf6" }, + { 3887000, "a3dae4774f95426880bdcf6425eea9f49579e602533a9c4e73edca7f6892cf8d" }, + { 3888000, "4b51c79cf380fd6db102077f6d8f0bafede612493718fcb952e42fb3b262563f" }, + { 3889000, "9414c2b81ec806e37e759b57143b37104739e4adeea9c41434c5f96ef1855db9" }, + { 3890000, "a14863781a6804a83ee6b0e41b0b29e5aad728984931bd153c92160c8a1299a2" }, + { 3891000, "b1fefc7e6c9b9aa4a289bce6af029a5f42a37800253cd5840e3653025da0a08d" }, + { 3892000, "8b706019979ab994f5b42c58dd411ecbf9e5ae01780656bb83fc99a72aad096a" }, + { 3893000, "8b7e48a62dd8982fe74efb9448d75dd976d69b7fb5e6557e7eb38ff08b6472d9" }, + { 3894000, "7880d4ed30d92cf08429296c240ad20861f3df2dd51843f41b8ebead41c75509" }, + { 3895000, "ccc0e7008b41ca147155df81703191a88da49f608186419602ec9123c50e174f" }, + { 3896000, "4d15926b7c50f7cdf0f871e2c067a0c590af9e49cfad6b4817b0ffc0ae8c26f1" }, + { 3897000, "98933bb76cdcea770e48cca008125e9551a2ccf5a86faaed30c6f2a7c6813eda" }, + { 3898000, "a207f42ce0111335949b236ee9e12c7980f0e5d7fe872f366395dfce1a680900" }, + { 3899000, "425bf228494c9ceb9b0e70d410500d03f9184c14aaf58955d2d0ed3c2618dfe0" }, + { 3900000, "c4210b54c185004b6b6c2814c071856236c6bdd8f367465c4a4830674b770318" }, + { 3901000, "d018e22d840f7027dedfc6288ccf6def3731b0bf4a2a06bdd33c870ff4c0c326" }, + { 3902000, "55869d78883ae2f2a5356c2aa37651ec98b933c15f0f4323fbe84e82535008e3" }, + { 3903000, "e5af50c239acf00e96e3a6bc217c6e3fb4f0fcc7e742944aac05e89ea453b37d" }, + { 3904000, "5fa448b00011285050a7f26803f855ab43c10c41c1393bde70e050b2248f0763" }, + { 3905000, "201e6ef54433dea9d9018d1ff82af9064ccc33d5f6b7c67ddd07f7fb5ef4b6c2" }, + { 3906000, "e9963d5fe6aa250598fc2e33eaf6119f151d12adb2cbd297e67fe4d12499fea3" }, + { 3907000, "ca7c099c35b8d06afac35785b90755b44e0d4c37469b8e8ed5f41a88ac2f1b07" }, + { 3908000, "b80703f98f79f38d4534a1e16814bebc787034ffba71a4b5446ecfe68e4cf2b4" }, + { 3909000, "f7db9f0cc9625ea897b6554a6f05616dd244614c022e147468ed9d70b6a2bd16" }, + { 3910000, "c216bc8f6fa21e0ad754f66c3e01684e106f45f6b35ac24e68204a08ca0fccc5" }, + { 3911000, "395669a2817a861a741202c7a12da07375d8187aa004cb7e47d5c69b5a6ec980" }, + { 3912000, "b7608239119c50c555f4890716a9b7b45a6999317d34e7eaeea7da180c2b33e6" }, + { 3913000, "dc5daa0ad66a1089cf84481d3be2ea6b622adadfc1b2fb8887ff7e7f2766075b" }, + { 3914000, "512cc6b1007bcba1d8d2bf4d77251f723b7446875d0a03ef8f58ba75fbd20ffa" }, + { 3915000, "7406beab6437cb6f4eb7f0d44164894460ed3587faaec47514f5cd732b2ba3f1" }, + { 3916000, "23c99a76897f5e4e2f980084669056163bfd3b08cb847ec021769970f1095a5a" }, + { 3917000, "7cfde92510336bb17e3a2adda0f3648ff07b6497d4892d9dea0ae40cf4a8b060" }, + { 3918000, "e8baabff64c47ceebfb0b7dafa5cad40b6ad5eadd8b73885cc041137df029bdb" }, + { 3919000, "93af9af88c6d17dfb616616e5b0bd511e689faf8759be7afde49877b4c4dc069" }, + { 3920000, "3c2a507f12f67c5196cf4907413afe90d6a4bda5c6006e744af80e80a685897d" }, + { 3921000, "0d56d7633446c737863790f24d39d7e9db1d8579ba0b9bc0b7adde399332fa19" }, + { 3922000, "dcdb543e50d245625897dd43a78fc73dc5138363ac4cad22b3b116f98e10b676" }, + { 3923000, "6f8aeebbd9f506f5dc82655c90b126dd341bec18299f4aec5adcf12212d0e62d" }, + { 3924000, "bcfef6c961cb9434d8b9df11d0987c793392a0cab6d82c976ffd00ddcc5b4a6b" }, + { 3925000, "17428f62dba08d67e3e0d7321e9a24785a93c8ad2c4644edf6cf1523f6c55861" }, + { 3926000, "f0a7ba86562282e7296062d827dd1a8a04bd7a29a437e027e34969f01a63a07d" }, + { 3927000, "cbfdb490a2629e29efb0371ecdb4417c9fc31546f050b4736aa7bdd4e6f6e577" }, + { 3928000, "94e9284df0dc3f8b1adb5211ecff3b8c4c12321a19e01a2721379b428d0b22e4" }, + { 3929000, "8aba541698f86cbc40fe00cb1a8c42dfbe25ae067b284aa3fc902db9e3830259" }, + { 3930000, "7a0d276cad228c17654527d59c5a62de61d505872d28e1d9a5dc926595259089" }, + { 3931000, "4593f728972201326a47ac0cfe79421baccac83fa4f9d8c6090bb49cee6304b2" }, + { 3932000, "57031b340bb86881e97eeede7fd7a101e78eb0bb42c3290b70045c95ef48659d" }, + { 3933000, "8104795b7391770fbd237200d71d429576d47bf7921e9f6501189dae26cd7475" }, + { 3934000, "a33b95baccbd751091e3f838a574bde1b0f7f61dbe231431a95c0bdcd7b8c0df" }, + { 3935000, "f4497ce50ff164fdf5b7620fec342140757abdfd6685f67ca9e7f8f617856154" }, + { 3936000, "18dd17a59cb7a5d0cedd1168adf7daabd4a39e9e96e8a571b77f04a7c0fd3dc5" }, + { 3937000, "4dc2d5f068a0100509c1c32a13862edfaeb4a7ad0a9deedd1ed6e0a6641de871" }, + { 3938000, "e681f851d01ca7cd1c38cca44949b145bcdab92648b3c3c04016fa04d801f2a9" }, + { 3939000, "a3b3c73072428fa675b318077946324287a29833e2475d961eb628aa25164a82" }, + { 3940000, "9549b88344a7ce7f445875676188e43ef85b57c3819f09dbcbd96c9d1bd6225d" }, + { 3941000, "6e6adfc00c5e52f946d58200ed08f394b0372e47eb82e41309da77453c692d38" }, + { 3942000, "cc88ce1d0db0c41239d80bd9bd19c7a46acea2fbac050e02cc837c89b70cf2bd" }, + { 3943000, "0fdae309f8bf07cf1a68c4b100680a4e5bc785d859cb588ee5be202ee84a74ed" }, + { 3944000, "263a4ec90e7a38dc03ba2e6e80daf5965666ea2d63ba03a6b8044bcf39b0cef5" }, + { 3945000, "2645339adf3f2d4052d22a6db2ca23f4676a968667f13e7401f1974f54c00332" }, + { 3946000, "f384d7bd884ef228bf8ac03caab12867216fcfe4463f4f6206a2ce12a49535e9" }, + { 3947000, "34824ed9735529149db1dcb64fcb54c1009095508f6c77c97f21d6ef1a5dd46f" }, + { 3948000, "656347ca9b9548591f4a81fc59b53b3a788623d5e8a9d8bb98e0c5607b78b73c" }, + { 3949000, "65b125eeecddbcdba8a8c2da5b52cfd46839de92b28260991a12d6eed8d774a1" }, + { 3950000, "2c37cabea76a35cd98e5d880ddf980b9cea7b27c1cb2443cfcc49a9c4fce16b6" }, + { 3951000, "72ffb2dc82712ba63e29773f3b15a5ff75afc11293b0352b5b97027032899305" }, + { 3952000, "40da58a6e97e32430a183e7cf334d3bea2e1a4f949c9633bed5b9df8adf764b5" }, + { 3953000, "ac9b93bc9cce9c73b57ea54e4de85384fb8ec2364d62c99d59c66756b3a7395a" }, + { 3954000, "1ec66936f7bb7d6596401696354bc0da1c1e932e070e2b5ad0cad2c6fa77f60e" }, + { 3955000, "4e9efa5bb6f7af814181cccbda80eca330c06a6ec2801cc5cf72c922628dc154" }, + { 3956000, "5426a948b29af3ab9aa602e926614533e4becd015fbec9cc025b20526af197d1" }, + { 3957000, "def7e3f3660c8edc04065f04f98f75f21021ccd628b11304440f29e9274257ab" }, + { 3958000, "6ce51d7ec0f463008860783d27a9e2da5e90a8dcc1de1d9bfe7bef90f17b0054" }, + { 3959000, "508fd8a474da5f99283fb25c616ea5707ffa7ef47e94da22bc9899b9da14774d" }, + { 3960000, "2f6a9b010cfd64fc743638ce360e7f58fe83cea939ff17983c6cdb106e5167ca" }, + { 3961000, "d1fd69ace6b07b5356821c44e4c514143f97d793cc99bc34e4a334f56a7d9a83" }, + { 3962000, "d9fbf23ed2a0f2bbd845a0193eacb9621a274fd31f33ebacad52c20827b9ce2c" }, + { 3963000, "49f0072ed49ffdccc96423de863a08b58a8214a5e98e0c127e64eaaa9c9dd20e" }, + { 3964000, "09fa7072cfe4cc510eb88034682edddd30bf4fbad37aa2dbfc7b631e7f013e3a" }, + { 3965000, "7052e8411a20ea8d8f4335cc20627c757f7039f34ecc317dac70fbf90a103b4a" }, + { 3966000, "00b7914b9c51968244d5eb2fc7d1d627596f4919d717329ae1460af54a4e54c1" }, + { 3967000, "cac32cd477adcaae46fb03dc2439fd08034e3c927d0c5e3fc6552e91220980fd" }, + { 3968000, "34006880ae4a0c939fcfb23139cf4dc3c9634a5a9b0614475ba62f4beb4bacf9" }, + { 3969000, "9108ce9a6e46aac7505c3d14a91eed3ff79a71c889d9e36de258c49fa52d6815" }, + { 3970000, "a66c2d4180cac27abc19fc6a09dd467fc910596f7ed0fd9a20a303e16e8d64c5" }, + { 3971000, "d8de4a9851c470b81cf4b7d17ad8d9cb7441ab1bd902ae177a8b62d5a84a2e39" }, + { 3972000, "843eb3bc074d3165b4d945aac13781655453d800f04bfe3862dd1ddbad8c9a8b" }, + { 3973000, "d8755838ca5ccb8f64438dab59056098c0fadba0919abf1f5ba9f99c6937ed1d" }, + { 3974000, "7c13a69cf4dd0e1671afeb2b42b1b16fe100d2a2ce2916e619e9c5f71c33d34a" }, + { 3975000, "fb62cab706ac81859648e849f8682d3aaeb494180627edab016e03b2754b2cb6" }, + { 3976000, "c14d792f0fab314a087dc2f79a35ee84163c34b9705fc3f988a95194bbe3edfb" }, + { 3977000, "c445fc94fe0feb154212b529bc81ad777b7345df2b018781f7a25ace3a5ac340" }, + { 3978000, "1d5f372e77fd351916f64c4617e5d89d23874f8910105650f1bad330fb9d685a" }, + { 3979000, "cd709b207da36412ca6f8abf295efc189709facf1e3389cdfbd1ef76026f4598" }, + { 3980000, "56f52dd3d69cf59595749870ebeb807d6c0f01d63f692de8754e72fa2f4c1de0" }, + { 3981000, "0f837f4b4569dbffa56cc408d25e4948529f7e52169ac2527f8d9309b35a7132" }, + { 3982000, "2b7760d703cc24dc3a18cbb09b185283eefa733c556ad9638ab22bb95692557a" }, + { 3983000, "00176ca798b5cb3fa77ddb0340e1789f35c9c04bd7929e708aae15cd1b4795fb" }, + { 3984000, "bf989cd6a6fdd4bb1a03a63e81a194cff4d024d58a84785571eb181f6c810b28" }, + { 3985000, "16db5b01b214a9e10140a1ae3176919792cb47ec3a13c07f24d52bd9a55ccfbd" }, + { 3986000, "969528ec3d655eb67890687c0b07ebd0bfa84641b34b77ff8e84894d5fe497de" }, + { 3987000, "32f617ec4be849625c3ae9831fda38a954667f09c3ab0491843cd45cad82167f" }, + { 3988000, "092c54e1cec6f7138c3ae3f9cd517b79575956e4b4d7436ef91d4c7130d31be6" }, + { 3989000, "e34e29cbe5826fe4a74744e88501d0b010495237b362a2324de7eda5893005c7" }, + { 3990000, "1c21d6b2099e34d561a4f462302e8c6e3a972cff7d0f1a838944ab125443b084" }, + { 3991000, "881bbb89df63d979c540bb91b96279432458b5ec8968efc13d0b7e22ae55eadb" }, + { 3992000, "e22a4ce94509780698da49b0703b4f3752862029ed9eeb8d210db47883615bee" }, + { 3993000, "44fd27eb044e1b89f0213e6f9c8f53bbc6b154632825a31d6f8ae28b03ab45a0" }, + { 3994000, "252109c12380f147db762cf4e877331941e449284bf5be23c9fa67550578076e" }, + { 3995000, "10abf06cbcd3932ba4b2e8a3b36adb32ab9bad91a5288f3df927b4082d58ebaf" }, + { 3996000, "15f635b3e25cac0f81ea0e9ab0e57fe088728bc45794aa8a11d05a01183a0d57" }, + { 3997000, "b735e0442d9843b75c7e39d2bf2e46049ddc23a09008460bd0b6c5cca66888d7" }, + { 3998000, "30cba25873220c140d186bb5056492b3982dbd5e381175a5eaf39ed85bd2bc9f" }, + { 3999000, "21138f071624fd6de50ac691b8c6a2864f9b0da0807f20fbf20bcde14a7dd227" }, + { 4000000, "15ff6dc247f0d8fe6ce02af33b21ca3c49f149945c2d5b61ce07c9b40f799d4c" }, + { 4001000, "48e5e54b2d6fe956582210e48a039a9ffa19603603740943aad5fae8d5f5cd5d" }, + { 4002000, "e8f9f2a953f48f6b97429a3ce17d5239f695e20177fa217f4a560fce3962c966" }, + { 4003000, "05eff6f43c0a8cabc790ed79b83576d7a1a19ba0c3b69b0dcbc2272a346677e3" }, + { 4004000, "b7084a6ff982600e758bd78ad3c0b6184df49ed80e8c7c57277e97dc54ba6e6d" }, + { 4005000, "e72a77660a614cdae070564c841fad90c97f09c91a2c3da1bfc2241b9b833d8a" }, + { 4006000, "4d57d9d1d4536ed64a91068e4e3e45da328c40581f579edb9ac8d19eb64699ab" }, + { 4007000, "c4e770ff936a1abbe30c1fc76aff546bb7798d42436e1772633b2b32955fb39b" }, + { 4008000, "a01e80d3b7704056058a917a8ca4ee7d98039f73946af3cfe8e8a3761f1bf393" }, + { 4009000, "d2921324ec2e58a4031f5c9e029e96cc8f117902558ad1755fa0576c02a0185a" }, + { 4010000, "193768384f8d661e99f3712f4e2ca40872994da34c9172648ad96745bf2029f5" }, + { 4011000, "9e1934e46001fe90ea3f64817b23bb41c787928e20791de8ebaebc2e55839c0e" }, + { 4012000, "476a3ea80d2c59a8ab44d6019e9b4eb4376bb98c3a352b8d089b8a6386df6bee" }, + { 4013000, "29c084d4d75b52a2e6697104f98f878aee17b346bb2a528be889f5268113a5d7" }, + { 4014000, "149e543708ab57404de970360d7e29706a988b9248d2be542c29629f7cb28abe" }, + { 4015000, "311b10c7404bd2cea546ec6c4a209a24c4c47be297c955f221b2a6161a6a8e8a" }, + { 4016000, "f8a27cc6fc136394ff212dc20e91efc7a8408d5f51d885ea382e873fce8096c0" }, + { 4017000, "514a419c422868e64983d643f9aad6f3d11007ba4a4916d279194c82dfcd4a68" }, + { 4018000, "8013d87aa56e38bf3d8a69482d814f698a077bf1d4f9f643884ad96270e207b9" }, + { 4019000, "7cac461f7f50e3359003925bc3b8d57e009bbc1a423d5caf185745e9d997a828" }, + { 4020000, "2b170a50da3076aca78447468a186a6170344d91db5516ba79a97a130b76f9ff" }, + { 4021000, "81c3f6e2c10772434e939519a4dbf02223c126149483b75f7555a7b6d0093afd" }, + { 4022000, "94df161b33b4f9f4b7910d99b87c75deea192eda86469f991bc01760c72cd2a9" }, + { 4023000, "c68f9c7041ce76c39a70538c21bb6be1f80fccd90e24944914538fce71a4227e" }, + { 4024000, "ce707932e092442438d253b550dfaa4098e0eb17f9994402423cd3ef6ea34a3b" }, + { 4025000, "cbea93d8bd1e15e9892025971cb864c84655fb76a0effc3e293fc7d4a0dc36ce" }, + { 4026000, "c8ec13c5f87d631e03909dd4ea5637689a2adcec1b9203f7e11d29a580139ce3" }, + { 4027000, "9a8d5cc73671a9902fa7fab9b8a104531cb7082bc1dcf25c2bda5e5fd1f772b5" }, + { 4028000, "a0bb04760fde959c5c7c4b3f5087196393bc39302837c605aa17b8748c49dcc8" }, + { 4029000, "57490f3c987f892f8a23fd4e433b58d0f7250a6e8b117dcb0c2ffda7a5613f51" }, + { 4030000, "c3a37ae555a693c0d7f1273a60db50a9cb5a4fdd1a19407f6091f0a0bd7422d4" }, + { 4031000, "8d2019dc21cd87fc4c05e77f7669695d19ec2329059fb368d6868e47a894100f" }, + { 4032000, "7cb64f297561ebcfcec86ab4e4eb77fbe39836b890466eb7cbd5fa2712128ca5" }, + { 4033000, "b17467f05a24af9ea60478672dd49e909bf2acef81b1bd6e367d234305840a7f" }, + { 4034000, "7528c21a091fca549466aa6796ddd5740f51555731dd774f82a804cb5f61f49c" }, + { 4035000, "75c6131484d8c56f2e73a14fddaf55be93431336042eca9295297ad6d19286de" }, + { 4036000, "65f1d24167c2f045057fa263ac58d8ab54abe7559f9f55603821709c95cc8aba" }, + { 4037000, "786cb53e6b15f76c194de19b8934220e644b9a20bab413d11a8af09d5c78597f" }, + { 4038000, "bba5805ab0b9777ec71e4c9eb983881070529ff8295b86ac69e54c8074413065" }, + { 4039000, "c33a8eeabf63837370555acd1a9652d590f5feb55588612776633e65fd0110fb" }, + { 4040000, "4a7dba530617cbebe8c1a028acfb25507c6b59a94d2dbc356f0bb5ff8c7db068" }, + { 4041000, "43d15b7fefd36a340cf1fb5de4c1e3e22b6f2be6d01cc8c87bab03e9818fd1d8" }, + { 4042000, "e9610823e1212ca4fea98e90357c1b4aacd0045becbb7c37563ae11e115d1c46" }, + { 4043000, "bb9815e803ebb9755e9f461b8200ac13869c88d877a75139f0196873b844abc5" }, + { 4044000, "26ea46b43ca55b9c8693285ec5701624f483083feb174f815d9cbcacce6836b6" }, + { 4045000, "1e2d531b70982e2404a2159963f81c1a80ab9fbc2adcea35a1b53d52fb73624a" }, + { 4046000, "14fe995b60fbe0e6ce7747f037fb211ad483adae9161ce6acb4d0af2bafb5e7e" }, + { 4047000, "080339b3e6f69af7ace0032eba741695837743b557794782389cac9b970e3173" }, + { 4048000, "56194bb572df22129bc8469c016b7a8d39b7a9c917673addf46423b24356d22e" }, + { 4049000, "02610de383818c70294ad31d7c57a3b04a0e3d785660ad4acb217a9363426b61" }, + { 4050000, "00ac004b4615724d2b74c67bbab3443082dfc01194470675e4271ff397be0152" }, + { 4051000, "c38d1e83e093c2c63174cff464751f1e3609fcf50b68cc63f02c3f05404b1265" }, + { 4052000, "9850d50535452503f864df1a6bab254a8ef6944600ec86363267b6cf929e809f" }, + { 4053000, "777cc78206e33f3365343de47df67c8774a4fc4254e3c1d68bd954263399bae7" }, + { 4054000, "db8830061ff6a2fac60f4058729657c10203465bf12cc00cf5d244fff9506a54" }, + { 4055000, "f3627eb9b9c3c104159fd19cc0be82c4ffb615e34e95d0b42f0f8d26385cb4f4" }, + { 4056000, "8b73b7814965cf0d8fd93ad97ac64b6f6cc0401f96f83d68733f7528d26bc94f" }, + { 4057000, "d51bae6ae630552ac6fe6fb54ea825b1724e8a5411b28b337fada8cbe8a2511e" }, + { 4058000, "46a447fda9f5fc48be90d9de83eb3dd3ddcc5f8f11a2a9d45e541e6621ef5dcb" }, + { 4059000, "e09c624eeac7a43087b32dc1b2821bf5b24a83e174a297d6d570280c78906baf" }, + { 4060000, "1a1dab26535a2d43281eab4e296542feaaa3ea336b1a4e1708ac9d02d34d603f" }, + { 4061000, "70d57ddc718060cb98a84a4ba278997104f2008493d7b4df6e4b92c5c55a039e" }, + { 4062000, "8e1cb15d9f3a2312cc8cc28c674dcad4fb5de1f2bc0c79f735fe53efecdb6949" }, + { 4063000, "d2552d12b5b6bf23c8a3f68f2a6e46cf60f43e8c7c8c5f3db57d5161bb820e4e" }, + { 4064000, "7b9bf377d904323736d8132719bac2b4c62918db4a087e5c3e80e08670e9beec" }, + { 4065000, "d09bf3d5dce4636e58315b954d5a6b079b5fe3180b57ab0947245ab45ba383e5" }, + { 4066000, "544416acd02536bb8b256e3a650964d45d050b91339aff3b38e1dd040336a7b2" }, + { 4067000, "b0e568c05f1341986091ff92a5db8ede33a202d87b3ed0d7fa1f36f8db96264f" }, + { 4068000, "09e0034c1636b3a108f042f369ac2e2b8e73637e8dfb0daa1e037a1a84d0c4ef" }, + { 4069000, "c24a2bfbec531721ad4bf575fbb4d61401f4f59464e4a6c047423e22a9f101db" }, + { 4070000, "e86e851ba5806453990e88b02ad12983a5592ba6e569b8f968f8ebdf483831b3" }, + { 4071000, "7a7b27ef9ba85191bc4153dc5bd93a5f5672d4fb390721e5abcf55370af05206" }, + { 4072000, "8d70dce280059eacb1e59a995608e940c8bf82e0195fb8ebbcf232b2cc9a7760" }, + { 4073000, "bd0932c36fd4b2ea803d4aa0fa8fe5d86ef3b4dc50788fc9ab206b3516aba3f5" }, + { 4074000, "ab3e20baedf26fcaef8d65150f3a65a11c51e1b1a7bd4696944ecc80213caa9e" }, + { 4075000, "deb86b13df77969b944c56f8f335685e0b72ca142cc4f0af1e1073458ef1a44e" }, + { 4076000, "093e9fd8bc33c4eb0d69fb091837f8290c2b18eb9706bd0916a0ab55b38ee0b3" }, + { 4077000, "01f73544c8167e5194ea9b57f9b7c5b7324821c4d9d1b7f624ee99c99b711728" }, + { 4078000, "fa45e4b1ef330f9505c3d7de21daec54570eae418cfbf99bb719f6800e3229ef" }, + { 4079000, "6a791ba56fff300de30f24912a3953855f6b56596f1188f8244b19c93b3834a8" }, + { 4080000, "500e3e973e91097d9cee055dab63d22b4f3b67ef8510d4b1d06859d22d6960f1" }, + { 4081000, "3cf9393116aceb785c5fbd27b69b710296d19676a3413d20b0d8c70476eb2e84" }, + { 4082000, "cc221276be669a11b3e28bbc40cbdf348ea0d84bb6c0ceec5f488253368b89e2" }, + { 4083000, "5c7a01986893e2b97c04d089203a92a87a18f475bac3eec453bd82e8f1864c8d" }, + { 4084000, "62b0eb127954e489412a02273f9537d4fc98344de5efc6bc764994b8aacb2f8b" }, + { 4085000, "6865ef2b47b7e6de011eeb9b2b9e4dbf556ec718423397f1afeb3bad7ae23f62" }, + { 4086000, "89e09603bab96188194ca4e3e31fe21fb93810da2cc3683fe1a2f218b809d1f2" }, + { 4087000, "a630d3104f08ceb5854133b78f93b183b373a10bf35c5e418e0b5b6ccc8ff67f" }, + { 4088000, "bdfbf7bc3fc83b15eb82ba9a6a00b7966b56d6b2689c87bf6b14509294247fc2" }, + { 4089000, "f2e41df4b1087e3411e7fe53034def7a36a02005e79faa7804795db3d3fb1b7c" }, + { 4090000, "9fd7651fbc809af21ae2a3a6b13d443a0b123061da1027fc4c0ca34d7230f877" }, + { 4091000, "9f6a1794fa9550b64b200fb2e7c76dc6facf1a8bf6b0516d38cec75821788806" }, + { 4092000, "f900d0b550cec83004838b16574eaffa78da7ed497d259c8bd2e0a50229c6ee7" }, + { 4093000, "c4fecf73babdcf97327a1443c64e74283e944ddbba3f07a0a02c73aa283fff69" }, + { 4094000, "478b70c50c40da7e369e5c58d0a282c45fa0af01e82e9e8f0ffdb2e492ab849e" }, + { 4095000, "8b5c31ae160cd2cff2c463304960d830a6e6b2cb88133235c9b2fd971ebba871" }, + { 4096000, "6e62c12ac738c65ad4cb3bc7c5ae279063712e62beed990e5bc78dee45c33d5a" }, + { 4097000, "ceb699673da28091d10a6c9823df6ef66e589186cf15ea694bd436b2e7879eb1" }, + { 4098000, "c0c1431ae359e0ebfb30fb9e59453bc4d4ca6bf48ff6abe0202b57e8c9961bf3" }, + { 4099000, "73aaa0f5bc3df62e0d6ac3565ae44d0f226325345bd5b30edaf1c207f71ff59e" }, + { 4100000, "969daa1a7c803d5a4e6fb7f6e7a5528ba7d338ba260bf31e4e92099828992c6e" }, + { 4101000, "0bffcd86dc90c06a099770db88a776939588ef4a1956c57a7adb3965c2a1aebc" }, + { 4102000, "cb65e72c352d2579d4d769b6d7fa7a4468bbf9030bbb402d1398d908a3a7d40b" }, + { 4103000, "10d14fca66825f27f5be6b50eb1876e1e710e4a2f4ed4bacad14b5273f93aefb" }, + { 4104000, "cbde25b3872b77662edc0a34fdda32b4c1539a6aa0b100805dcd8e6043abdf32" }, + { 4105000, "404ed0eb5b35e00c6adcf097fbc6893b0592e0f5e1cfb8993bfb11d2342dfe2b" }, + { 4106000, "2134057229d0fe0d126d36818767e665d87f53423dc6213d4e9acc0c5e5db5f7" }, + { 4107000, "16283f263ebc97d2e1311128f626d202446e63998253917942dffdf4b9b31415" }, + { 4108000, "1fc1d07a17bdf9c8b3362273bb54258645573e721f5903540cdce6c4a7f12570" }, + { 4109000, "199568ea3c769569a715e7efbbc881ce56bd35179f4adc2e71ef7c3e6450b921" }, + { 4110000, "9a8fbde047a0ab60ac46580c52b8cba03bb86316d85f5cebfe58d96d91f8023c" }, + { 4111000, "d1e3e03e97ea7f853dbb37c5c07b149bf49cc951287f2a797ad31ad707d2ac0f" }, + { 4112000, "71f9a683206a4e93771753e9f75004352114c8989841c2dcc61aa80f73563127" }, + { 4113000, "0f21edc74e41a3fe3bbaa51dc32e783ac34c70ce8a9b45b4aec7fff0c7df38bc" }, + { 4114000, "f8b193ccb1205a408e1c4472f95c9e32b7560a5cb24e10bf3b4ce75da1d899ab" }, + { 4115000, "8e90065ba7c1ef9d10fbae211455ef1ee8ff985c52bc13f2ded7f16f646f1658" }, + { 4116000, "b55436eed12fb54ab0d61e1581455821669204e65692ee5417b6c34ff53c7ada" }, + { 4117000, "007bc5fe7a654912bebf799113d5397fa4aeb299c306571c39d37fa134d0b1f4" }, + { 4118000, "55fcfe885017d833ae12456aa0e8a5ee5274c62f0799079b94fd9132382fad00" }, + { 4119000, "0c72115546186e7d878f0866df263a132788d914281df62edd48b42ed8f8fbd9" }, + { 4120000, "02a7aba3f642f2fbf38c8a83471e9522a62b8f70b0568cf9580a88787ee29137" }, + { 4121000, "c3218f0a524d3bc32a22a826d565b72560a913658edcbec04ed798239ed7dc01" }, + { 4122000, "20e997b88fdf311769f7afe5dab36ee3ad8bdd6ab0e901406352b276deb440e4" }, + { 4123000, "9da0e4a21e34fc785a659d24704e0f4511fc08c4703b68a6e1a13c6572cfac36" }, + { 4124000, "68f4255552d4601ad740e9200d12bcfd946ce4e3004dbce145ea2280773a8278" }, + { 4125000, "ad9922902c8b9d4ba73ac6523b41b226dd8789595d28dff69ad198d86a083835" }, + { 4126000, "1e0e1100aa58d6b56c193f36f755540be22d7328cb9b5d24176b432ef3c15199" }, + { 4127000, "8ad47aff1a169e9915876d461960bf6195ecdf1f393a9172ffcb5282a8020541" }, + { 4128000, "c8cffbf1a4c6083b341edbb8970cf7351849a8c29d2cf7b6c70129433a833cd3" }, + { 4129000, "f5fd40d7a9e37d94c908756d91145404f04fd68072a821495b329bc77e92ce19" }, + { 4130000, "ccd3a8b628356d86712324a2366e5ce7118d719963843b7e4796f44842c4322f" }, + { 4131000, "13ed8c34d670bf42b96c476d991642da356316621461da76b8b3830878aa6250" }, + { 4132000, "ac49fab6187f57bf6cba513d53ca89404fcaf6911ecf54136d04c01c96771e6b" }, + { 4133000, "0c4847f2db42ae3bda223063dc01aee125224cc50bfae47034f3f3997c3bdab5" }, + { 4134000, "fcf82ddeec6f4b21f5d167788839caab1ae487abd5cb96ad1d5bf6b27848f316" }, + { 4135000, "e71c587af20a0a2ce2efbaea906aae55e86d54b3afcf604dc81bcee19ef535ec" }, + { 4136000, "b58d0a12862cc76a24c2d834920a398efe1f6b9660760cc3f9cfca8df15c984c" }, + { 4137000, "3db95899c7b72abd9d11aee0461ccbc1d906e5c5aeed0509a92ee9a0f180dcf0" }, + { 4138000, "92f08040e7a1d9abff7dd889462ffd5d71f9ec3b6463173bcd42914d4634ece1" }, + { 4139000, "32629c0c35ef31bc3c07502799402ad455b6c3d885d2889dbcd2fd12e60313fb" }, + { 4140000, "9c7097c40b8e0c981ee4ae9e880af1c17b2ba51477186021040568a237936a6d" }, + { 4141000, "6d58b0d59aa1c8492cabcbd052946482c50a1cee0928d70c43ba0ae0e3c208a2" }, + { 4142000, "4e115449bd17e5c8a944bd038f6288d50568a54528c3cd7e11336b96cbbb11ca" }, + { 4143000, "307c481cf63ebe0f09d9f8be0928246dac793bae0f58fc4166b844aa0416bd6c" }, + { 4144000, "d03821d2103002b463b6da1aa8d238fe52def7cc20312978e19e50617286278c" }, + { 4145000, "f64c099212869bbde6ef3e03a190a25027d7c6c4c8431dd3aab00c5d757cf193" }, + { 4146000, "6431662f363c958ea943685ee0fc2b665a7d44d43afa83520fbfdd9d6422111e" }, + { 4147000, "0cf7862f163c8012a330efa54abea02d26687b3b1a08b057c770e3db7a72a072" }, + { 4148000, "38a1a86eaadc57ef729cd297db7a3f80ebd6da7bfb910f7ee33b76fb5378dd87" }, + { 4149000, "c99286ebe2e5cc69ddcb10a9b4e6d2923234b2efbce5fbc0f57deabafe9d0f2c" }, + { 4150000, "53af457b0092ad3c90f059684b3d1fe315aeacba019ac12d76119356560d0f84" }, + { 4151000, "0c0844d52e5007115bb85dd550553558818870c67edb5b6dc2389311d376e35e" }, + { 4152000, "ff1ead6057f8a12ecfbbbc2c16d54f69993b779e10fbd7dbf524a79d66540760" }, + { 4153000, "6bf4d0d110c5184c1d1d1baead79e754f438e7956d41fa3b416d5ef372048825" }, + { 4154000, "a5f4b7b73c62d17186d00a86c822c2679c4a4288af3c71fa03a5a5e702d8d90b" }, + { 4155000, "7de6fb0bff8f3783f52da47827c1f95d590e92d6bb74fc5a8591f1e41a01bda5" }, + { 4156000, "e134cc4179ee1cb7997afad3f63e5c3f1de9f3c0a817d56eb28f23c0b25b429e" }, + { 4157000, "ba582754677dfd8cb8aa63721708a816a06ac596ce5414d767edb4fda0c5c220" }, + { 4158000, "02a7baa2b99c571f3523754d7f6660b51f638c1383ab045395dd3090227e491e" }, + { 4159000, "d0a3f209ff6855820a7071dd5ece0ebf5494e2eafd2699ee0c0e7009111ea4da" }, + { 4160000, "77d205d9dea5bcc440756f220f3c01c0207c4755268d533214df8e407afa80b7" }, + { 4161000, "51296189e6b0423b907f1b09ee4900434eb9e6650f37d6408bbca615a0d6b512" }, + { 4162000, "55051be5b1ef58d9a4926160a7e92691f08c67f57cefd71c927f57a3888fbab5" }, + { 4163000, "f009d2a013cfcdc91221590291ed28fe3a3096539524b96c7db7f1d020ff6bd1" }, + { 4164000, "6969a02ab96cfefee445605e47f1eaa4300745dbb614cd5f9c7d7288d422b8a3" }, + { 4165000, "8448f2c5e05ce9bcd5afc7868400ecdbd41fbfc36063dfb061c28af114a0ff99" }, + { 4166000, "4fb090c0558ee1f6363200a9c9e63719a276ca3502ca62be4ae849581e3d6212" }, + { 4167000, "d95e6845b80772360a9498da9a3aef1e6aab72cca2272e5af473995aa180b2af" }, + { 4168000, "783e03e8fda117da09692fb73d3fba9d535cd40e7e847dbb631a542abcb30836" }, + { 4169000, "669d2603b32f0e9055d88e25147e1556e826c96f361150d92ce0950587768faf" }, + { 4170000, "c3f5b726e3f5e90f081d769fd8340e4a44304387e77e0cee4f75f5155050bbb8" }, + { 4171000, "ff1588a6925a58e1e37e020eb84c76fd55e5c1623717c166d4f0655cc52ed1a7" }, + { 4172000, "73b111ee36ec09171814a6da9f22e7356b60934522254a11d38286df030fb103" }, + { 4173000, "949d2afaab93766dfe842f13d3c64506665fbc3c228e33833c47525d56e99038" }, + { 4174000, "63b0a411680241a9922a4d41c8cac85f6611a0d112de82edcf012b57b57f762b" }, + { 4175000, "1d063e4960a8fdaa2394adf89881247208b76734f4b04eea5f636b902bc290e8" }, + { 4176000, "a29b5a21a19bcfe3fcc70a903a0da7310cb9509ffb19308d977ae6c38922cac4" }, + { 4177000, "bf0763dcac22764a4b9a4dba50d49fc5f2df2e607cd29c0c2b0ecca3ea18e345" }, + { 4178000, "5be756df1282b51404f8a96fde1803fec62e8ae3b53daaa63442b343fc27f17f" }, + { 4179000, "b1edd623238ed8da0d4adaae87066a1e92e9385cb14cc3b2208383a8a5b903a8" }, + { 4180000, "4d8fe628a9c7756752c8f32b729ed2c3183cbad0ebb2eda63216033681ce6ecc" }, + { 4181000, "424e487808c1e386cf4e2ec7a7a9aac3b95850d3f21d66c6cc68ccaacb566fd9" }, + { 4182000, "e31839bc21131f2d2dc2f659aa0acf1714eac0e6071ca2d1d55bad0b20b2e063" }, + { 4183000, "7ba9f9bde172a6f41a36ef68f9ac029217e6bdc3fe09cfa6122fba62900654b5" }, + { 4184000, "faaab752355ce5eba30140ff940159b41ab381c8cc5781bfc00cd4462aeedc93" }, + { 4185000, "36048d42d39b9f1654b2bc1dffa4bea40451c10779df51181c7eca58f5316a54" }, + { 4186000, "cde3c4cc945b4781cb4b6bead524a6ed03135ff6a67986cf8fcb568987915072" }, + { 4187000, "4c05c0b6d276d13fe04bc14d187551e93270c516377118b18434ac2b6015f5c3" }, + { 4188000, "6f9929d136c1f7f0e97f2f91d316894d746c41d6f6f595616cd40be19fa1113a" }, + { 4189000, "e58341b9564be10fc97e861c78770fc6b82a8016a547b9f93471a0890035949c" }, + { 4190000, "beed29aba3d8b5f9bad7524733dd1f971c170101698fa95c193ea697ca131478" }, + { 4191000, "72ec7961e695c3955df4e4876ee83c3aa389906c71ec9d366a268921ec8be51e" }, + { 4192000, "978edd2a5711bc4853b54ca39945c11a1baf935b9d68e35b89f0154eac314dbb" }, + { 4193000, "dfcd9caa4027b8c0142e9013abd8b32f098c0e7016d95c0e1a5df4dff8b99621" }, + { 4194000, "28d689f5b882fc575018b88a818739bcfb6d650289506a7a1b6f25f7c1ede16e" }, + { 4195000, "04b2342c9d563e58058e915f81edc529c4886740024cd5f08c3c1d313033542a" }, + { 4196000, "74284339e5a8f8099b8a2d622c69e7f719857fa740c572f218ea77202668312b" }, + { 4197000, "861c82a97579c7f6d09ccab62ff6a425619f91a281bbda209ba073dc80671b94" }, + { 4198000, "c68da9fb09a3beae3d38daa99ff5a398bd012bde2df40f535c6e32a85e80c0c7" }, + { 4199000, "c4c29f65274a87058b4fc30a9dfd6855335461e01d2dff54c8a5a239218ba35e" }, + { 4200000, "e2e109927c49b92a958a071df251f1a63c56200f44016e53baafdd7658db42fa" }, + { 4201000, "1654054a3de56e50756e6dd2e7836c6c22838488e5fb096708a8284997635b1b" }, + { 4202000, "6d907aa4a0fc9873897c895d7075e187745a00e817576f09a0f9e5ef1a789fc1" }, + { 4203000, "f20ca27219124b0db0d0444ca3ce4cc1e6652ba41c6a791297d9506599432024" }, + { 4204000, "e8bf129db694cb2bbe30e28b0c3cd1d463e7fc0a82b41684cf136be4dcfe3c46" }, + { 4205000, "425ccad96df650676a55fc263b6633e4dd2c740ce5609fffd03237269ba17b3f" }, + { 4206000, "bbc6508726d14fbe82848310c9a58f6d54720fc0aad78654166875144cf4acd4" }, + { 4207000, "491d984233272e5b4b4b185762ac061c3c416194268ddac712b557bdc65eb0ac" }, + { 4208000, "ee342f3e0f58f412d2ffa0971a2973be4d4e29b8c18f6f6ba6acaf9f8ea43d27" }, + { 4209000, "69a8b9d49aaa3ca230d6fc15655456a48e750b5c529dbf14b8b2b30cc5be3d0a" }, + { 4210000, "e8511e15d64689ceedd7dfb818b6cd30199fdc8d9130592d16082c87a3573cf6" }, + { 4211000, "1ef3b6ad7482df9250c8255cd2e177c7fbd4587db112f3e97ad0e820ff3c45f3" }, + { 4212000, "f89657a388da1997b51003da30d31fdf204a32681ae6c80a707dd416087f135d" }, + { 4213000, "75b4bcafe8402e9ad9de66a9a3840fb4115dce10b42df929dc027d410b704731" }, + { 4214000, "76e6cfb38cb876032d7cf72de1464bd49042164ffa199c2b32a44e9871dd9334" }, + { 4215000, "1fe0fb06053b8bf88c542660c62cf7c5e3d49944297574bc5e69ed62fbe34f79" }, + { 4216000, "a16647aa7bf02ba6b4f0229a134dc4881bdb94e5096d352bd36756ae5f9f01dc" }, + { 4217000, "f429d57a7faec9ab5e75bff634acfe5b49dd898abf18e1622fefc742f9864f80" }, + { 4218000, "dadeaa788fdb0d16306826c45b664806f6476f489cb3b62a541d62fb1f1bd859" }, + { 4219000, "3e2338aa821e6af08df8fe108d523044b87a275a504676bc16aaf055e97022ac" }, + { 4220000, "7e0aec3d01fa972db2d06caab699870373ea25e12f937011740f73dcfe0da52d" }, + { 4221000, "64b92478a549bcfafcd7df21ab9bfbefa7f30d5ab16957df1747f55cd1b0ffec" }, + { 4222000, "34e30326e30083c8039a37bb545b1b80921a6e608b1f98ae4f908dde32bf9988" }, + { 4223000, "2a1a709cd5eea4ebe3a926f43aafad225f27353529fde710bde2a809d34337b9" }, + { 4224000, "ec4588d2d1c06ced80dfafcfd6c909474da9f047c98d16c22c06c964a4cbc1d7" }, + { 4225000, "9bbde80cb310db5d35475bbbe249348d1e827edb97491253c580663e29ace542" }, + { 4226000, "810db93a09dc6a0b02dd4285e401fa2d0526af589d7ea1f3eac929eba838b5e7" }, + { 4227000, "c2cc6c22f7adceb20161f1dc006ec901d83ef07ea4cbc2d74aebe238bfa11eff" }, + { 4228000, "9cfd0aaa30a21391639036528527a7749f35c065c6eb9848c63b71723dfe04fd" }, + { 4229000, "415e34f0db5f9171d23c6dbded33aa8f81fd7658b5a503b4323389e0caab30a5" }, + { 4230000, "f92cef3d8e6b2baf67f0e7eab4e4e30ebea913e7af795af63bd7ac60537fdd4a" }, + { 4231000, "80378960d10bb641d68adf4cd007eaf264de8314143c4f1d31834531ad97aab3" }, + { 4232000, "4e8d636546f591b25ad571820632d3f5cedfff20e3e3053b478e76546815e529" }, + { 4233000, "689ca19947faa8850d42fceaf5e821419134501c4b971a740766cf365dfbc889" }, + { 4234000, "eb062255d03695bc2872b1c0d18193f03499caf923f70a6fe269160453576f66" }, + { 4235000, "dca4cd09772321e54a7f37ae933830447143811a4d8bb52d68e64df0c86ad033" }, + { 4236000, "c9007166d22b902d16c21400d14ae510a4cb78648d55aaae35b874055142f42a" }, + { 4237000, "eb408a8e745696511c3ee0c73fd5753afe5e45d621cf1ef2729178f3eea82137" }, + { 4238000, "e58b756112a5dcf79df95b7e14d2007c11d616d9b67f6a863617f7331933bb4d" }, + { 4239000, "da6a4976c9e12ebaae31eea6419d84de91b6e46b47650fef9fa26b4ed336232c" }, + { 4240000, "1b972f09afbd43b9ad9a263a27ffa31a79ccfb4d7deabfd33b1b94d7f7e88ff5" }, + { 4241000, "627ab54e3ca3e37f8577ab2fa0aa27c8294b9a7308dc5d4c07a31c2c8f1f4c0a" }, + { 4242000, "74e97d7e038ea9b19f9d783eefb94d16f8f48d74751c8d11db8a9bae4f61bd85" }, + { 4243000, "c2f2aaa70ae13ec13cfb83f5619cccf508fa37ef46e76e09e0ff7784b340170c" }, + { 4244000, "fda09364f417628ec6adb8598f928ec0a24bf2d2acf380864f4d429bb17ce4cb" }, + { 4245000, "14dc30532bf704d54c0e8db5a653ac78f5e8663b22ec27c8850376573a2d526a" }, + { 4246000, "579dfb2feda15bfb5cd9b532e9067e9948b24869f0e3be8546fce2b0a46d05b9" }, + { 4247000, "fe1bc6b274fceaff2b0b00cc75934721558dd25ed551ae433ae726b96984f7fd" }, + { 4248000, "f3b6f06ec4b9ff7de6406c973145756af33efd153ff1660dd3e4c545ddd08db8" }, + { 4249000, "f07419facf03df70ef20ed25b7cb11b1c4c4b2a51ed3be639db6a0f9013d34d4" }, + { 4250000, "bcfaad50664b7f21172171fc994f90736a1ae1b8f7d8e04fa977411d7872517f" }, + { 4251000, "9cabefa3dc7682d0f7729e5a38c2e92b3d5c78b4857bf650ca66ede3c7c458da" }, + { 4252000, "d6a48d51c66901c6b7a76c830ceb0c36ab53bf2a54a315f42f90b6baabda1c64" }, + { 4253000, "7c2963ecc4078050a18d3b4e9041724314ff6544cdf201eac00203dbad2f93d2" }, + { 4254000, "d6e40a29a109b2b26ab2aef0285fdcd4a58a330d745a46baf548a03b2d425149" }, + { 4255000, "c40ccbb542e3b39c08facf43020707409d568910771e924c69a4a78fc4258809" }, + { 4256000, "eb4a57c81361bf74e5a53830fdf645cd196a4cbac1a3932a82a5d44a7dd24ae0" }, + { 4257000, "7f3e696ef04b2771a6a8e122f567bd3677d8944ee5bf3101f61c3091ae2d43d9" }, + { 4258000, "1f0970c31b63eed229617041e18d0886957cbe08a3c46267c1210006a8172bac" }, + { 4259000, "761be8b94058e66cf02025e5c6dc769a8a0fcb78cbdfe46dec858f3385f835a8" }, + { 4260000, "353e02ea0171f18f95e3d199e4bb078065030953c7c88911af4def7204c180de" }, + { 4261000, "65c0fd1eb2bc39d7f98eeaecde5f5e23fba777070ce8ba7877e9e3013448a626" }, + { 4262000, "98776b5361743e98b8fb06e9ab5ecea498bc342c838760697bb419b256e54760" }, + { 4263000, "ee7fa58c349c031bfc42035ea79c79e4c23286dc535909a2f1778ffcb7230f6f" }, + { 4264000, "3c746fc24cd983c66c82258e4cb290de6e154b59a63ff520653206752069f117" }, + { 4265000, "660f43a535f7eea35fbc888dbde37497d6b05f943943e3105156de7c9ee0ae7c" }, + { 4266000, "fd8860b928835c0f7058d8c240d45643321ce931285c5bbb7b500e8586115135" }, + { 4267000, "5c74155fa482379b7b121e9f777fb4f55240e50f81e4accc6ae126609aa27662" }, + { 4268000, "924dd1ea38babe16638fb560a067f4564706429e89ad980193c1b3a2bece7d77" }, + { 4269000, "d6ade52d9a4b9e51a0e850f1fd6c46b8cc9428b0fa4ca5a5176e682520e6fb43" }, + { 4270000, "f1451e2a3ac312478a5b9259839bc5ef37c9130e06313a6631438d2c9b574f1b" }, + { 4271000, "e66e6b5329a2bb8e54096c04e37259ac790f9e5672ee0af95402fdae05582416" }, + { 4272000, "710e14a12ecb76dac72b2e39baeb5c1ff797d236e3b6a05ecaa4e2a5ca03b360" }, + { 4273000, "b11dceb3f453e190b9b68fe314a9322de4931e78b9fffef0fd22a0e9d02c2faa" }, + { 4274000, "b08d7dd04d5f9dbc6a0260757c8adec05bf8653d7d21d1d9cfb2d8ff2bf7c4e8" }, + { 4275000, "f24d70c7d8a3b64e928eb6e2902be13fc690aa9da54b4c0d2807e5d46d182528" }, + { 4276000, "fc84e0a076da98742bbb1dafe5e762f211f9454199afc9501482cf5e8f69f248" }, + { 4277000, "d0d2689ae2eb81f05c5df830f518c9dce01ac83973d47ad5cc4733e626198646" }, + { 4278000, "c7127c73b83f1b443b550e5ffd47e837c398c32358ab0806f33a0b99eef4839f" }, + { 4279000, "8a7fb56f47cbe8bdc086f27e4d58a4f495fca8f743d2fe918ad1f7e48f407764" }, + { 4280000, "201d163556999bbb85a7a22917f2e3da973ea2fa0585bb400d41cf994583cecf" }, + { 4281000, "417eae61ec6b67adc7656dc93cac38778011b482013c1ff13782fafa3dc26f76" }, + { 4282000, "e9d5f2d617ff234dd9a01ae739b39dadaf1511d5039b9c60ba74023edc344fe6" }, + { 4283000, "4339365a0964c4f71f1b8d1b8ea861bdde24f95bb4f4b1b52171f0e8d65edd0a" }, + { 4284000, "df97900b5fb8683d7b115174402782715bf10768d91cd359e500b340eaba2477" }, + { 4285000, "edd47c892c6c38b1c7d8c6beee368cf1b7662eaf0a2208e9644a79c4b2c760fc" }, + { 4286000, "3255e68b2b55311f526dcb8d867cef88563d29a61900e0c92b9ae3e2d83a5961" }, + { 4287000, "6d548c9a9bba4eb222602d726430e5dfcbf370c3edc727718c72c0ef62884e2c" }, + { 4288000, "d9200f5cbeefa6307be65fcc678dbd9884dec7673f6eca0097b7cdbdd1e734f7" }, + { 4289000, "7e5e1129ddc20c98709b035a1f66389015ae2a6b4e77adbbb50abf5a9f932d00" }, + { 4290000, "63a8654aec6f2f051a19afc0b2a895cea5e8c5489b8c7c32cb8a0e95fc3739a6" }, + { 4291000, "fc39f324e6fddd7837427186dec6c3e44c8f5fa62dfb8c83db92e11118bb2605" }, + { 4292000, "0d627fdaa0a858d6c2899615055a9da454aad5dd8d6c059377b071e25780d00f" }, + { 4293000, "0c7c11d06c9aa5b472673741b2638d2cec09a1f07c209301606cf600a659bd6a" }, + { 4294000, "488b6c92b9ee0084e9a71fa1d308abe47395159d0abff498f503b81237d4bade" }, + { 4295000, "b47ba56f1a8e890127db4bbb6ff8aa761eb94e64ed829b584aeb0e310c84c6d1" }, + { 4296000, "59b11927cccea9cf31a170208ba7d74eedd3640324f149dd51ac7bb0afcc2bda" }, + { 4297000, "4a5e5be9acfc0a5d419df5236593ccdb1deff2b73c91d32947b7cf9a25cf701b" }, + { 4298000, "387360ebbe2bb88951a7adb0bb4bff29315aee192c0bfc0c5e107f307bff1b22" }, + { 4299000, "25622d45366fbe7e6b3450d830683ae601b9afd8ceb61a3d0e75f939db884a75" }, + { 4300000, "47c6705dfa8e9c33fdda3f60a58f700d2f0c236e3c6efc782f13b8025898f3a1" }, + { 4301000, "19370da50008935109058d13f89d37dc352db5ae127b447cd820707e5c016b55" }, + { 4302000, "842a2fb3076d93d24b7b5f7e972a8c4c065a8ad3fe71a11f6c58587177c5e7f8" }, + { 4303000, "3054b180e56a7a6eccdefd2dafd4c5a52d5125ceed13a91227c75ffc113b4342" }, + { 4304000, "99318940471ecbea92ac5a480e5e8dbae9f83fbbd33a834aad8dfff6ef30fb9a" }, + { 4305000, "4d6c97df147fa99533cceb5bbaaec747da1c66f69d4f44cc65cc41e8d592b44f" }, + { 4306000, "02fa580ec46803d019149c81a7bebda77e0ad9c108c15e470a02ff824ef0584c" }, + { 4307000, "59b05bcd0ed9101d395bc7ae6f6c4e6976b79ecf24ca912fd6baf1bffdf6502f" }, + { 4308000, "d1045d0f1ef45cf585eb97bffe9e492dd6db159920b2b572822064b934779e87" }, + { 4309000, "54368dd18ecf63839a82815b66f83dd9ff23e6ad6e4a69f12e09a9d2f7126dcf" }, + { 4310000, "211bfce06ca5c28c67c7ba6c630c976cfaf7a16a0d8f804c92acb5035c44563e" }, + { 4311000, "e3c7e3e36252eb89679b4a1e2a181440f6206d8f7ec8363db48b28e99b984a8b" }, + { 4312000, "c5a298c24b4531f923d1e78973f23df1c216b7c53a1ee7799fcfa69fe035eb10" }, + { 4313000, "f448b0cde176c7be7f60500ef5f0265381c45e8101cff06807a53fe4adf81f62" }, + { 4314000, "b9e4fc5b885c1acf75422b9534839f096f5cd191bd0b62229dd4469e9104314d" }, + { 4315000, "5dd1d6f760582425ed444bf858536ad0bca5afa6b69639ead22c5b6a690bc8ef" }, + { 4316000, "3dcf08d64fb2cbe0c94cdbde0221f11923ca31beecd1c3277a6ad16c7bbf11e9" }, + { 4317000, "323953e53b457ffaaa0e05a044cde66cf653e52de6691ab9564c9d6836e450d9" }, + { 4318000, "c33c953ad44a3acc504a9295f216cbfab0d6af8d05e1974f3d082f90d004070f" }, + { 4319000, "0ba12387401132715cf7721da0e237cb9304d4126d486f0f1877ed908630e2c4" }, + { 4320000, "c95991fc6db7f0c08fa6dd8decfb59eeec25f5f3e9ded5adb76e4137855d3774" }, + { 4321000, "93c881a4441c786e489e68d7bb51902e37d7136f2377a0a1a8b737f35a16c4ff" }, + { 4322000, "4b23e0ebb3735ce28b75b4cc0875868d8c8fd71c038c13d1afa79fb22f43bf73" }, + { 4323000, "3357c6feaf1ad3a95dd38c145315bc436af1c19427036744989f542986f226ae" }, + { 4324000, "848e969a9dbaf26f629ecb08a518a994ddbabaeddb3dd5190e1d36889a45db9c" }, + { 4325000, "61dd9f61aff4009fd0048a6120296bdddd300fe24f7293b42fc7883bd24a4baf" }, + { 4326000, "ade971f5b1aea82faba624b6bf0c13396bb16c4a0062b709d8e761bbbe9f2700" }, + { 4327000, "c07b704735df0208b23ecc494de83a268ee30549aab6b52e973a753d1c7f39a6" }, + { 4328000, "ba5efb17f360943de6d57b9979d190ea79e46ce4c603fa2c019ca94e8295144b" }, + { 4329000, "e63c3ed1cfd2778a786b1e926da517ef0dc1a26c69a67a9752f104d576cfdf7c" }, + { 4330000, "63d0d9152dd7ef23a035a87817089ab59453d5ca9a69e9b1eb3f33db66bb92cb" }, + { 4331000, "a3b10dc32072f67fc6d70985e74fb5952024fd9edd864ace97d161e9409c9002" }, + { 4332000, "f045084fa4507d49ba06cc60e369f907acae067e60edc20d00d4df90f99d423e" }, + { 4333000, "bfa53a2e93a20c00edf4e001cab7476900dc9f7f6d42baae111e9125f334c1fd" }, + { 4334000, "306804d5bdcfc9fb91007bb726ec5ce281d2df050fe9e1c35f3f321649d416aa" }, + { 4335000, "5f3c499e02a7933ab69abde8cb6ec8b6d8a575c1143386992636377a4614e847" }, + { 4336000, "d16723213066b436e1e869a466a48155c3dadd133a8a3f043dfb92e9eda67b76" }, + { 4337000, "421da8252300e173aa4c0b32185b99b689b43b26785b324072093d0073251768" }, + { 4338000, "101967ab0fe3a3162371bc4ae64400662e4a061342290e0a0b7fa0a60626009e" }, + { 4339000, "3f1cb644cfac73a417be6eaee7e3ac588f4fa1f96720afba67899c10a37a7319" }, + { 4340000, "4161852ee63ee06dcdb4643d4cfe2ac8d0e8c326392c05c1bf2853bddea5aba0" }, + { 4341000, "66d34aa651b80e56a72fb1a3082f4cedab3a120dd453707a96d1ee7e807f76c8" }, + { 4342000, "002fbf79999bef8ac891e5fc2dc710864d0402fc1a5f9646e5c9d88963d86b06" }, + { 4343000, "550fb98086ae6b104277847719198681d5785f1212448602493cc9913584c043" }, + { 4344000, "252dc940dcabca708867e8eff7c2081bab851d3e4d5576cce51f6f2b6c975194" }, + { 4345000, "3ab1521c381da218e0c73d70b28439120ff80a5f7684678168debfa65fb20bc9" }, + { 4346000, "31401e4962db54b47a0c54888cbfd284353919c3c215e65ebc6abdbd388feae0" }, + { 4347000, "56904c84940f2ebcddb799726d8aa74b98b3bc5ea85889fe1f5c0dc9fd046715" }, + { 4348000, "0b75659bee407981a5b012d923a0cd0889d478e34cab2e90cf0e90938558c8ed" }, + { 4349000, "53284bce729412a7e72b392c3de47245e385dc9caf0b021d2d8ab7c7a8603108" }, + { 4350000, "129ab749090d01b65e29cb309ee97ae59e3495770e2428bb7e4ba42911a8ee90" }, + { 4351000, "92de42eeeee40d653985ff2f9d13616e8d2b75101b117f3eb20f7a1d3419f53d" }, + { 4352000, "f3f800a8b20f1c82b85c5c0b3be71021a46da34efdfbb0f829c098598a9e681b" }, + { 4353000, "961a80cce115fd42467a2a21a213fec1f4ee19589981043ef7d7c75202f0d10f" }, + { 4354000, "f9c67b4f6078a6594ab5090ee1f3b53e4e972d3949911d26eeec7db21d5ba1d8" }, + { 4355000, "2946391059526da8870d9f42b234dbb66fce213bf530a50724312d1893a5b951" }, + { 4356000, "21a8d6b7ada3fba2c22ca58ef8cf1590a5f4709144c33fa3c9a089f593a42ef1" }, + { 4357000, "9a3cb6281c282972d8d845ecceb6ca55a3a4a292d66e1b7adab283bb06f17227" }, + { 4358000, "39a4ef3ea935dd36c35625cece562dd79d74aced1e46748f1676afae95feb338" }, + { 4359000, "f003f8e2c74706feac35a14c8a67af2af941caea402fd4e7b0e8e83b41f68e67" }, + { 4360000, "ea02b02730b8a8c4cd13ca1d127ed70e38f2e5d3692d40e711a30fe76cf5699f" }, + { 4361000, "c86bf73360295e81a13346fce411ffba4dc323d3be426c87b501dd9f420f13e8" }, + { 4362000, "2eacbc20b28f1e8186aabc44134a39672478b71a53edd5c14ed46ec28affcdba" }, + { 4363000, "3c4ffc25a79f2672a8fe9545a7ace8cc37c3c379a68c08d1e1007983dc5ffb5d" }, + { 4364000, "5b26f472519688e5dab42e09ff4cd5471fd5ffc35c6aaee0fca64ca6f101a93c" }, + { 4365000, "f7a1bcc4befe45ccf209bc9c77592903800fd554f4b25798cb52664a4017f17a" }, + { 4366000, "a9543afc33ef0dbf16005716154e54f38242a88ba3e51e790248dd8d5faaa5eb" }, + { 4367000, "31e3ff777ec288866a91095014dd4e65cd9eeb75345ee04b35c5e5a6913f75b7" }, + { 4368000, "59958410a97cae54754d32361ea24b2c79bdda9408f01cdfa17d873daa8c015c" }, + { 4369000, "5fe1f68cae8b6614f4fd79a6ac98a142a8a8f66795886fd734350e6202fb5477" }, + { 4370000, "a64647ab32013ea7122c78c44c9bc83a931fc07db84fad9f2ffba978af1ec23e" }, + { 4371000, "c80070fecbc7b35237d412c6baa0a00d884a9cf7414c84d221f14c54be8dae12" }, + { 4372000, "7b95a1585d3a71325a0b937b9ad419d9c7a5cdcc4973d0254040a8f4903acf77" }, + { 4373000, "b8c91bd094bd294137c5f2e7017db212aee2c508236ccbc11e4c6c40415af3b4" }, + { 4374000, "7cef69c8ece32e9afbb68f15fb5d63f257e1e2da39ac19cda48dceb53d4256b4" }, + { 4375000, "1c102f6ced5576bdc5dd895b36cf82a18827d0f8613034250257fea3e3db3ef1" }, + { 4376000, "495d95ae5b36c0b1c8c0394ea4d1154e67d9dd9b2797a004cf54d96a772bcbad" }, + { 4377000, "23b70819e9d977b8fd44013c6f875c4e33c3abbe13fb6ec0cf1a10ea82590c5a" }, + { 4378000, "aef3b049b6910bca51d82c5934710082c1563d5f57c62d953c6c6debbcc7427d" }, + { 4379000, "d61204ba36133636c0716e1fc7ec2c66ed1c0859f3cae02701300fc47eb7142f" }, + { 4380000, "efcad025203d032aae22ce666755bf9c58afe49ea6b524aa1f5083bcaa09e8b9" }, + { 4381000, "9c9434dea093bfdf5d71ed7efebd1af35f313f94fe74069b19147aa2102bfca4" }, + { 4382000, "99d173e1b0df49abf8a45c342b1899b0ce25bca1a5ab067ecb74ef2c6c4b7ad9" }, + { 4383000, "1666fbebc5276a17bcf2dfd63799fe85e432b6b3ee6005dea39f21584784e967" }, + { 4384000, "773fa9f7ac0eb988b47cfc8db9d552cd1b7608c97dfb674143b9c1bfcbaf7f0c" }, + { 4385000, "6ce63bb58f6749712648a081d09f80c18ee3458963c3cc5c77806275f79e2af1" }, + { 4386000, "65b06c3162f2043ca3c2fe5861b958b124820d956478e75f3313d5768e76cce8" }, + { 4387000, "037e4d309ba1e3f3eb565ee73018b9b973c71b594f7a774913edf897d89dbe9d" }, + { 4388000, "65776041c392d1931b45f2a9527fbb4697440b59a5c06632b9b69fcf4aefba8b" }, + { 4389000, "319a76cd0888ae7aaa8dfb3e4852ff0fdd8d2282482b27d84cce9c9dc15f5bc5" }, + { 4390000, "2e691848272e63418bd54b20ea3a2c319e6cd7f9741129947378f1f6ac11e06f" }, + { 4391000, "b681b8ab393cb09d8ba3caf14d099c210c04d68bc6bf26f043dfeed32f8b871e" }, + { 4392000, "183f6990e3b2fa3df39296b12be93d5fad0d69cf2a39b80d9fd9ba0d38f2ceb5" }, + { 4393000, "ca32cda3d182db5015214af3de297f6bd2b4c329d84ea5cf42deb920b0c8d811" }, + { 4394000, "cc93370b9289e3090e08739b4e1926544bd7ae094ff654b653ba61a30b17d960" }, + { 4395000, "548794d8d53fcd0e7d2925af139a8767dce98ec7448e1105eed9100ee2782001" }, + { 4396000, "619346d3466f3728e38f94e339c511787c632f8a51e9d2da83fa0c5a80a04d7c" }, + { 4397000, "fdae13252bb5c94ec002b20b563d649ed13c05d0fc4f2b6bbe450120c5a2706a" }, + { 4398000, "52e87238d48e237a90b83dad561148bcfc1da0f42375bccc46777e8772558358" }, + { 4399000, "3cbc07a304c22d138315bbab51e3e9df8c62e59adde8a039d16b48e999d60924" }, + { 4400000, "c0ebbb2ad500cb8836738c95bf16f1cb33a4337d618af9f7c521b0a1fd26dd6d" }, + { 4401000, "7faaba03fa03addbd374a8320ed896c64bba3de87f96be23fbc5f78dc07122d5" }, + { 4402000, "5bd2f314e9d9ba78326f23c339fa0a8a5e915f0460c0189bc1bd5b87318fddb8" }, + { 4403000, "da4b042a58f316bc98323e15adb6e8a797b17205f3ecf74d024a3d04e800a3d0" }, + { 4404000, "03a274ee3244426918413912c514efba967241ed91f1c7b5857c0146f5874fcc" }, + { 4405000, "2404a4b810bfa58f7af1fa24f86839b550aa11d3c2bbc034692aff5e49783fd0" }, + { 4406000, "d87bb7adb05d16deeb05d544a4f68c645b7222b1d3f0ea88ead58cdfeef86e29" }, + { 4407000, "38c6f953157d17c50677bd80960ac9d8806603d5e3070729ae5bed043c2c4a20" }, + { 4408000, "5bafa175ffe57a08cefe93bfb33014b65ba96f76f9d7b523e2d3d00560117c69" }, + { 4409000, "e2da8d2d6f4987253ef5f84779e253a0bf9efed96af034932685cbc0f594efa8" }, + { 4410000, "89fab313d7bd856bc066d7bd4c05d94e2bb85ce25b96c6c0ab810abe64210dfa" }, + { 4411000, "e5c27c33090af953e40be9b0c19d61ac76c803b2e569f68fd3e673a917613d6d" }, + { 4412000, "c69834c6e460b93ef48db1f52314528b934fbcf01c79525263480302998e8d0d" }, + { 4413000, "5f4d71bcbaaef3b989d7128875fe6566e3a02c4a0e4b761a27e17c5b3e6138b0" }, + { 4414000, "2680421845547ed853521d8a9bb93fd02ff6558980c7d15d901cdf605f91e802" }, + { 4415000, "e82b92f07937c1139e97ee349096665e474093764e877c88b44f8c959f3628b6" }, + { 4416000, "c7ece07c8ecdf48bd790f4fe07d33b2899e7515aba4501e2772d0f82f136ae2a" }, + { 4417000, "10effd96d37c8e77e1c2b27276d72853a143bdb0fa263794a028c02915883f31" }, + { 4418000, "2f1cd618e4ffdb446288640523e02b0cdaa7644c317a8a9e7d5b5bbefe910b2a" }, + { 4419000, "1bc4049ef712e4c021c73765c64a0772efac5632f75323db0d153dc98e84f598" }, + { 4420000, "ff9870875a872d43bb99d3899fee32043ea4516ec4444bd4d74731402c72d1ec" }, + { 4421000, "ca5d17c25ca36b6cf5991cde201b2c4bd0c729b1d44f10a98676d7010f528e11" }, + { 4422000, "d9feab1e9dfd6f881e54771bade43a83414888b1221243936191a54277d1e600" }, + { 4423000, "c8a6aeac9637d9d239b42468491ca41742faef28f61156f33106baa14d73a029" }, + { 4424000, "1d53de21ed4d75037f61d40e3f5053c75a90701f277519247bf1842992d27882" }, + { 4425000, "20e86dc2ac9a4a83f3205baa365f5ce5a6a66e0e6edac15958c8208d4d7b20f1" }, + { 4426000, "4cd731136ab3d46bdba8d8c341dc422ef0164f7387ee4bf2b50440fad1ba4d8e" }, + { 4427000, "9e7fea95bc8ea16fea05913ef35cb8246d28830feecd559987334ea3632f762b" }, + { 4428000, "696a822801a215f3c27ecb33e381444d992b50ce1b9575ea80bf6dbd014f3e1c" }, + { 4429000, "d0d50bd8c9b756a0c3a3dfae5c41bf61a54c99d5e767c70e23bed0278cf54ff3" }, + { 4430000, "037db9a2ba112c15faef671568360be704d6ee625eef345490816eb7ad699681" }, + { 4431000, "dd4a70f167088a6717a384b0485e9a29e7ed4eab01c6140201cebb187e6dd941" }, + { 4432000, "11f6c2d1f3c1cb0f881d24c80e0ffa495ad52cb229d601d2016e91593ec31a5e" }, + { 4433000, "3fa4060edfe911e7db2676219ac475cf3ec958d2234ab5ebd88371694b90da92" }, + { 4434000, "9a25dc4a0d487fcf46c80d3553e89f3f94e2b098fbd3b3b87dbd779cc7b691e3" }, + { 4435000, "b92e68afd6e9069efd1949f89ac2375c1658501f8914d05b2035359dbb04f4a9" }, + { 4436000, "82e5f9efc9d5a9252a902e797271a81f1491c13d87e72a9844d48fc4b71a73b3" }, + { 4437000, "e08b33e84f7ece51aa3a402705bf2a6df30c4336c0860757cc81fba9b2affb6b" }, + { 4438000, "8108f8a0b545f35dd66b608f72c5aa52107ad9b66fded4f60d18b91fc9873542" }, + { 4439000, "f3ad12fb1e2a20d0a724648331a7fedd809fb0fa6fb63b8f7c088d8bbbee66df" }, + { 4440000, "290df1394ff337b48b73b4a1ce61a16451ecf1fa04209699cd29051c4a5937bf" }, + { 4441000, "275d936b9dfad07a5fd37ffa6fd96bf9c21a78bea3d2dba95ce41093243f3bcb" }, + { 4442000, "2ed5b5a127b48f1a7d190f7885e291c3f96ec9c9d1473913c243fbe909afa975" }, + { 4443000, "2c129c0de31108d58fd1999ea2f7ee2b47be0e174c94004ecee4da35e2b21d51" }, + { 4444000, "05c3ad8f68b1e6c6c9dd732d300265d29250b0d4722d140a3452cae53c26d0d9" }, + { 4445000, "20952d1a2f8728113f2846dd70a0562db8274cb945cc2107b8e247609712021e" }, + { 4446000, "97c8cb99aed41dde4f13eb3cb2a816524b7d8d32d4dee3cca13f211a2cb69b03" }, + { 4447000, "03c5999e603a7a4751719a45226313b2e2f8e705b1da29216873d71587e465e6" }, + { 4448000, "efaf5449d1307a18d700707df2693bd793ae8344582930c8a5aa34c12ed71bf7" }, + { 4449000, "7cd602c0294ce9b16b0a13a69c7567143fefbea0740c09e099b562c391d582f1" }, + { 4450000, "02e1df308d95fb26769bc35dc001789759db598de961b2aeb7598130f302fcbc" }, + { 4451000, "e30d57b0922c8dbf36152b46f3008235ade289973bd5dc73b151a2507deb555a" }, + { 4452000, "ae2f8a21930a7d039f90e92838616692e76be3966bd99049e68af165b3867026" }, + { 4453000, "e59b68e3d1ee22241190de532d2f94deeec9190522614b44358fe0dc4620a58d" }, + { 4454000, "79d5c45f954545b8038f8b7f66d37a7ff72194a6a0d066d8c2555a87b9ba54b4" }, + { 4455000, "dde1712fb15f1739712e0a7a914cfb7d4b6e9efd012e76bd0bda08c6c21b1721" }, + { 4456000, "b15d29b6f020c251254401d0ad87e5eb9befa4f7c0930d1aa38973086ad9024a" }, + { 4457000, "d36fec3530156471a87dda178926b46646e496db72b450f3d4b77d0900a30ed7" }, + { 4458000, "bf8811cf1fd10b82816c1de41fba2bea7fc628daa209daca24260613c89acca1" }, + { 4459000, "230e308bd66ff0952f6a19a70656ebf7203c6eb1a01826ff8dd86ad46877c380" }, + { 4460000, "555b46a6d6f0bdac5f7b82a99c0c239a3e89194ed17421aa28a571bf0f21f78e" }, + { 4461000, "f88decae743846c9f30fff047f674a2e54c0f90526215108657518f198748f0f" }, + { 4462000, "9b1d9c0ac3f0709e858e6ce034841a852fd9f1d02c4854309cf92b54795fcd92" }, + { 4463000, "7701931cf906a9bd4c26d857011117177c38530ef2d8366069b06c557583939a" }, + { 4464000, "b7b7221e838bbb1144fba71a761ff5d73d377bab63687605a7e7f481bbcc04e0" }, + { 4465000, "2d6a574e830898984bc4c8734e7cb5b83b75c222885c7e8176a6f9992e11e634" }, + { 4466000, "46196f16c655ec3e1c3a219f2f4e82ba31f200cb4aa775eb4f1dc27df5c8d4ca" }, + { 4467000, "2bd60d9fcf7676ac948df613b6ac53448dabac1c5a3e3fd54ae39612510b9778" }, + { 4468000, "1987298019a538b8e7abefa2b511c0b2c3891200d1bdef376e9020d91422254e" }, + { 4469000, "690669c008067d63fef666bd9da1823727feded06a17dec81e4b86968ff4c817" }, + { 4470000, "881a20bd4d246f6266871bf4ff765cc8d7b1ff70f0708e0c2b793b370d42fb56" }, + { 4471000, "be3e1437ac0e7298ed118925c7e9fcc735ed49b8675ecb7ebd27082b90e280ed" }, + { 4472000, "f0f1df0c3ee0f8f91d87d143c7b71934fb32c0372af0a8121d8acdf14f31425a" }, + { 4473000, "43b142649b311e559de1a515d2c9b6b594ffbbb37ca468f1f50d1dda1120476e" }, + { 4474000, "5d6e85ce4cf56e2a16d12e0c7f6453425a492658741c21ba6a99438ff84e29f5" }, + { 4475000, "0926a14c8e9cfb6f5f5cce664f9237f17899ea552ce88acefbe1359132d3cff9" }, + { 4476000, "dd99f5e8fe13d06c94af1150543d72333cd29773680fdc8e9a08705a3aaa19d0" }, + { 4477000, "6d21440c48f6a45bdb83d717835d0f32866f86954d8cd8db267418b5cf298319" }, + { 4478000, "950288d08ed534c3114d2b6f30f864ba18ae8395fa8ba17f9a7e6c72d63ec0e2" }, + { 4479000, "aee13617570fbd6fb75deef5192fa437059f553d98cdb69b7ec9fcd640bf40b7" }, + { 4480000, "3807dbda19b64a20c010b9309bcffc63809c4f23ba29ffe8582978943fea2d5d" }, + { 4481000, "eabda002034aa49864221ae3c023c51e0d7b19efd93ee69e467dacbb8e86d16f" }, + { 4482000, "faf8f1db8c5a41724e5bb470d7a20ce6bd0ed42de4097837701ada28a93cc36f" }, + { 4483000, "89c8cfdd64c05e8a91c5b3325bba548e860281041d400aadf41e17e46b9d3f76" }, + { 4484000, "b62fb62acf3fab1d576d8f45bdc8c490d8f26a8e115427d922f1acbf8ad11907" }, + { 4485000, "d4aa2e5d00271c0aeb02c2b52c0e379e21c2005823127e0f9ba1b1ec59115f7b" }, + { 4486000, "3b8108a904a52ae85739cbb653bcbb189622e935992ae0460a0d810ecb4efedf" }, + { 4487000, "0c5d011e4d77fa31d5d5c2f879fa08bf1e3c79aa51140e3550f70202f0fd1362" }, + { 4488000, "1a55136c2e4a070b20a922ec86c5350c52cda6c36f482ac38987e8c0084c921a" }, + { 4489000, "71608b77208cba5d19e2787984a2ad73f37b15cddb4647d26f73e1a398189dbc" }, + { 4490000, "b6f9a1ac0495195b4d98b7b9d8b8f3de8a5bef00e37db6b723ad9c19bd07ebc7" }, + { 4491000, "a980d97487dee899aea2ef084125e51af3d55b3e7a31cdc153ee15ee44e3a968" }, + { 4492000, "6ea15a599ad11e0e3eec4d2feb088a3de9a58ad98f483e123d409261f8e56881" }, + { 4493000, "66ed0a9b2ea31f76b39a4b473b7ada1a904c6ffc7498734a07c06da4a14bd818" }, + { 4494000, "4b9124d49edb0ce00cbf678c8157cc90dcd5dc5c03764b6bf8f6b17ec6dda3f1" }, + { 4495000, "03f04c787af7e1b7081b8d7e5bd2513ec3fe143cc3d5e34a211e22e04c50ea2f" }, + { 4496000, "db1020cb62da6b3f8a1ebd680653b286a957e1a4bc45108628fb321ad7a79eb5" }, + { 4497000, "17fa3a58862bd6100b2c2bf7928b37814504724d633962327e63573613b977fd" }, + { 4498000, "913783e7999ebe760ec7e77f45f5cad1370e389d5302161a3988a2efa9efcfc2" }, + { 4499000, "4324d7164c71eea278c2bc67faedf6f517446632955880d1d52241c4116e9695" }, + { 4500000, "2d4115e7d6dd542b986ba7ca91a3c2bb34fda1248e4a28a3dbc6676ce680c34f" }, + { 4501000, "bf26e5d94d61229dfc541c05a586ad0841eb8b232b777202fa8712e5936f4864" }, + { 4502000, "491627e5c2991417bbb078bc70da63666fb017a199ac26cd72c25e2c5f6439f8" }, + { 4503000, "b8a308e7cd75fb71182ed504f07ecfe37d649aaca09eef6f3add99e44e04089c" }, + { 4504000, "6a9e14d9dada402ea7b00f56dd2f22cbd95aacfde5283a2580a52cbe621be363" }, + { 4505000, "558266e45d2ca4c90002cf90188adeecfa390c64e03a3bb5de0fe49113286f54" }, + { 4506000, "09f7e6097b00b2925be201b39c972e3a6b56df227c109a6e59c7fd90421e2254" }, + { 4507000, "6a068f646446d31359282679636c6aa77c5eb9bc9ec2db3ddeabea960a61b442" }, + { 4508000, "795d04894152c2ed73480e7576369da83e2aecf3c19e5ef98d988def997d7f95" }, + { 4509000, "04ddd44135e6399ff55203e04f5c8011ebfe86d1ae9a7f160183eb757370858a" }, + { 4510000, "a62bbdda49766ac0c4c6611aad2dfadd8ea6b735f0bcc537562da44ca8f42c9d" }, + { 4511000, "f857050400297cb754288c16c4126d8337bd5bf35e15c06d2550773f8a04fcc2" }, + { 4512000, "643923996630963daad6af075aef7bb1c703bc6af78badf8fd2a69bcce5c2702" }, + { 4513000, "01210df1fa119130aef59de254ed51d3a9af1963b156931e6c515fe3aae56937" }, + { 4514000, "fa258ed1c3b984f025542f15c341ae8d649cfa9823721169c5a70a7cdcea0e5f" }, + { 4515000, "10b1181cc86dc7e226a7f913ef018c8b2ebe37899cec37dbe78bf9b02e2d833c" }, + { 4516000, "4e7615b5b8f03417d9e880a9dbbd547e8d0cce1e463fe9b05ed3a63de04107a1" }, + { 4517000, "088396833c4bde8729a6dbc8636652ec949a694f30ec88f55fba056a5395a32d" }, + { 4518000, "53633bd93e1a829b29ccd3155240173127d33f94b9660cf813f3b58c8e66ede6" }, + { 4519000, "fa94871d8ea09163ef0a32dce2e586fb19b6f18dbc71c6470643573d8eb170be" }, + { 4520000, "155e25d2674480674e983c9e46183928f1958a9b26ee1afb49fccbbabc55adbc" }, + { 4521000, "1985173a57b4627c57b7ffa8f2a89d7c060961765ddfc48ed2ff669b933ac9f5" }, + { 4522000, "b0ec6967fc8ec537e7034e52d4272187e964cb7416922c646f8c94ac5d3dc368" }, + { 4523000, "cf2dc108b1b1d5cda4a2056a27f36145ed493955f4e91cd7bed05658556768a6" }, + { 4524000, "d30c359094e13792c4db117f77d861f8afbc5cd348da68caa235d68c310dffcf" }, + { 4525000, "44884184156a85576289bc10c1de4dc8ee0d35e032f6b61c7e15593a88e5f28f" }, + { 4526000, "acaf58df03cd3b896a39ee873da7965787ae49166451f8c22b1f3500f6169423" }, + { 4527000, "a97dbf63288c2ae909e9f0daf702880c117ccc02eba248fed89598b4591de117" }, + { 4528000, "2e218fe99c57320574f8384aab69cc2f14c6afbf5a77e8e0af3703839b9bfd9e" }, + { 4529000, "b551415cbe4c4961ee0c172a11cb40004045787b64ddafd6effc085503062534" }, + { 4530000, "2cebef80fba24e00953bafbca8468ba62632df607c4610a3bca045b75cdd4839" }, + { 4531000, "643433bb116571bfb9ae1e9d6c39b72466379839fc9e588dbddad412e88219ba" }, + { 4532000, "124cc674777a2517aa6eff4e37ccb37c673ac8309ac472607d5d47d8c2f0672f" }, + { 4533000, "990ae92dffc1b9b5cc290dcb3cba4267485b28c8f437dc8e8b66f9bac71b50c1" }, + { 4534000, "f3699beb1cf4c583628cccb5fdeaf72fc3208ba0f970adf242af4afdae73eb0e" }, + { 4535000, "62df684214fc5461a631c2744eb5d43f81808719eb7c9c780f63480a8ea5cbc9" }, + { 4536000, "6d78fc1c8a13a9bc4a02cc62db1be5467f713e46a332014e556a419c4e46d8c0" }, + { 4537000, "144083e855f4e9b1acc433fa76e43578f826177ea68ec91cb9567c7bf034a7bd" }, + { 4538000, "ca98574197164a2e01b264c1f4649ca28303255d7aa31c67123d6cadc497e9d7" }, + { 4539000, "6bec417022853c4f57e40f44c7dfcf1e57b463765577953256664026ef917b0e" }, + { 4540000, "0189fee717502aa049348b4d79ca7128b1f1c4297870f8f8f5da11d45972d0ed" }, + { 4541000, "250f15ac209b094d2e0b6cc6004628eb7a2b25fba0807f367426409a5a826ca6" }, + { 4542000, "9d78e29990bab546867998bb3f9b27f794dae9cad7b2b1bc0f55479958bb9859" }, + { 4543000, "07a560757a37260ffdca277fe7140f000a1771b342e46b2f7f5a4685ee6fb03b" }, + { 4544000, "a1d51243562db785d43e5fe620bf6dc222f7389e3b1d3bc0296d66c62eea1123" }, + { 4545000, "efa0de866b8677f2c1e714e7c5bd23c929c396cb99b7373c3c98de3c9aee45b5" }, + { 4546000, "ee80c57076e5a647d02d91bd09ac4cfee1155261c177717613b301168b3273a6" }, + { 4547000, "657dad1b0ca2f9e709c0c1966518aa15c1fed0e088b7a195d2af9ea866e05384" }, + { 4548000, "3ba096cf7713e6863c295d41d5e4419400ebaff6bd9fc2519402aa31135707b4" }, + { 4549000, "224f509b791b728eb0cbc0b02055a8702eacb69e8ddd5358e18d8a7a87771553" }, + { 4550000, "a7e0648038fa299b413a3ff39511a947016ca647d764628c5f7946649b36f66b" }, + { 4551000, "040d0820a33431a86c9e87019b0bd5e45f64c0e9fe910fe587692bf8f4e7810e" }, + { 4552000, "18af95e1fc8dc69f0222b70517a06fc47c96ada51121be16b9e1925f66a07393" }, + { 4553000, "0fe44bbe6d9485a689bb748cd8c379be87d7423cfef264070aeb2daf12d466db" }, + { 4554000, "3a5dff91d6ce53608a1880fd55f066082d4eee8ce255475895dcd239ed1fc604" }, + { 4555000, "18ed7ee45b9b3fa01262fc3b8b4c31acb20ead813378fd024280c16e26f7e940" }, + { 4556000, "c1f682058ba625a7f5d81f12eb4925887e9774f74076698cae736c4f88d7229a" }, + { 4557000, "357b34747ac51c2bd05982b50d267c74d7d91f5c7d87ddcc9d61872cb81cf4f3" }, + { 4558000, "89ea7be1028ec5008f5de95b39648558e0c1d1fd94f352e5714e1ac86db06f21" }, + { 4559000, "c54483834a7a4da1433cf7c8eaa270298c404f7e4cb574ef40a169cbf549eb84" }, + { 4560000, "d5e6ab7f5697e869c91267f6ef98a1f1ec657236345866467c92e8ca671b9f05" }, + { 4561000, "6bb54f307271d978c421e7eaafbe058d13491f56c09b8a3f6dcf9080978c2ee2" }, + { 4562000, "24115c004b2c74b09a6173029c28328025b0842f0fbade238d7edeba098a06c9" }, + { 4563000, "149d3dcb5e04dda58eec73590c9fc9a6639fe3d578f47c7b14c74a92865db3f5" }, + { 4564000, "4101d46154e1f1f258ae263683588e89277171fa619a74a783b20fadd059cbb4" }, + { 4565000, "07599cc70aa9c71c62e07a3a2346498eaf267ca4ba8c9b0b3fdf8736e5d09220" }, + { 4566000, "eccbea64b705579a9c2e6c1092b81a6e9fce1a80931f1791ad872072d0ad126f" }, + { 4567000, "6dbc0e45b0bd572b15dec2ea757dcef5094cc6e297a6f1da390f95f913714b48" }, + { 4568000, "4f7f3c18155e042725501ca4df5e73aa07402e463d8b48888ec6e886bdefbeaf" }, + { 4569000, "1082aa44f4fce8c5b155b4950f445983d455c291ea05ace5b753d361411a11bb" }, + { 4570000, "46cfdf36586b7cd50b2dfb8dd69dc550bb6a9d53bf1d7dfd06d76504dddc81be" }, + { 4571000, "5276e14d62904678b4f3d34d3a868610f79a370a4b45680b9cacb2eef718964e" }, + { 4572000, "6ab6e20bdb1738b970d4b238c5cbffdf5603187c4d3feba325b116748da2607b" }, + { 4573000, "28ae605ad36745410769bef6b6ff4b9752854719160fcc9ccb50660a6708a9c5" }, + { 4574000, "a497e0afb2c6d29f603981f754be70dcd999b9c21d26a165e08fdd7cadd8aed4" }, + { 4575000, "42faf5d3de236d3ef3666fdc961c2b060b2c2a59e34fdb1c7434ee44eaa20279" }, + { 4576000, "bf94262c437d0d918b510555c3de31ed456fbc11254ee1abd436e0e81c8cfd80" }, + { 4577000, "c6b8fb2a74eb959dbdf42ee87ba5111eab67baa850855450f8abaa3994a6db11" }, + { 4578000, "2df42e59f31ee1dae9510cb0d4e00d3df48ee22faadeb83bca84854604c12362" }, + { 4579000, "6aab92d2beb6a15ebf72400e64631c811efffcdcb7d2a9d1fa8fdd03eb7140ef" }, + { 4580000, "9883964f86dc19b8b9f78d28b58e0d3438c7fc890ea501ff7aafcfaa978911d4" }, + { 4581000, "edeed95f80a6519a2db7e10b8ac94c8a8dde15f0f44ef2f8370cf82f5ba21dfb" }, + { 4582000, "d422e64a7ec7a748cac7f27f8511e28667ac818a3601d14f6cb9e3c96164f6eb" }, + { 4583000, "522817fa32cca3957fbaacff4377c869b47658a6d49e873987a1e30aeaa6d515" }, + { 4584000, "e6210941e451f8a5ec12ff91e5d23ce2a053e778e11af286849d456c5f0e442e" }, + { 4585000, "4de596157d92cf01e4ec8de7ecf31af9a6a41d82e3e7c7b299d7e453f3687b9f" }, + { 4586000, "3654705c0abe608e5172cc8987efe8ebb87783e7bdb90272f789a8af80366444" }, + { 4587000, "884b3d40e8a5f0919010c5970b8e8104f890068d1950f438138c2bf2b888f608" }, + { 4588000, "494aad51014e533f3ccc31cd0e7283a27fa0642260d3859db65044425a4af10e" }, + { 4589000, "84b6677aeb31d97a0cc8a0930a048e607a698ec6741ee45b5d11178f1d12ae91" }, + { 4590000, "a8ee17f655ce5cfd7e8b8e99be3bbf8957e62a5325922fc517e391882ce06152" }, + { 4591000, "c78f6d1f381105203bca79a65f176b6e42a897fabe8012b830b6327d6d1fbc24" }, + { 4592000, "b7a4c138c871525384371e37a4a3b0ba2864a6523d5c8412784a040107f799cc" }, + { 4593000, "477fe0ec04aee0e93934a2df3528d116f3f99f0b0521823ebdad2c22be9aecf2" }, + { 4594000, "325c1fb6eb32086402318c0a5e56246e28cca680ee862add64d74388daf12a3e" }, + { 4595000, "d97ea7c5055921347511a04895f26ebc4499c6b9e0ea61292291f5d0a5e1215b" }, + { 4596000, "ad73dcaa1e392f97ac75071dd0271563750fa6c5d263a7ee9a73947069e5d610" }, + { 4597000, "8ff8ad0397a994d1ba7da94e6d4ba5077410de104e115d2aa9cdc4b65286c24d" }, + { 4598000, "e9fd1ea844b98615d7818b65562a680ed4f8ac03d5517f756744c48024af8bf9" }, + { 4599000, "b63388bcce44d49b9a0a87cf1ad75ebdcf3da500bf5f3dcc9ee24ef013a313ed" }, + { 4600000, "a392ba71538958a3ba400596d5b0dc422bd5c9bdccd85c0d907983e6ae99ae7d" }, + { 4601000, "e44d75d371ffc98971cb9c8814f0c4d876e170db4987d1ef276fe07459e91f51" }, + { 4602000, "c693808d0f938159b10623c083aa18fc1c500cb7ca518f389cc83ba351800760" }, + { 4603000, "34d29e2754556150711028103f2ef13113e8397fc3354d53db68f7f7dea26930" }, + { 4604000, "fca7d86c007d676ec587128495c78369c8388142aba3f2abdd8a2dbb9184da92" }, + { 4605000, "5a7abde153f52bff9f727a4c4bbca117f1690eb86daf86f621d09b58d54ecfa0" }, + { 4606000, "ad493698b0852b200116a59fe38de5d5848dff5c2bf82ed45a6d352b71ef7f5b" }, + { 4607000, "45861bd1226235aac8626c25a540d6ab16a0e08c642b982e19bd641db00f4934" }, + { 4608000, "6d7cfb70494735094c80c7bf37b48f3080e41a6eb153fdb0bddd209c66edc7b1" }, + { 4609000, "38efc2919089c5ca16ab0dd6860dfc2a287e17af38215be7e70b7450b63b80fa" }, + { 4610000, "57dc2ad211a8ce6101a8fee8ed5d96a2ea00cca1afc5fc7047c7b006ed988e1f" }, + { 4611000, "1daae698126cc578edc28973b39b5c63e36ace7e62443473a550372dccccadbf" }, + { 4612000, "625c20442c941af851190170b2085fbf83db41227cad919490ce5886c80b0a86" }, + { 4613000, "d5014df020a5c34263bee430e6a9127d8db5cfb19432a6f29b90d5c47adcb84d" }, + { 4614000, "82bde0a225e523385b743c8c18aa412622622b615f05b8143f5e994263993ebd" }, + { 4615000, "dae723107d37340b8d3cdf627f078fbbf57d4ae73fa0a16dca72e27435b0b34a" }, + { 4616000, "75c8b9d0778dd8f543e1e1bf9ba8ec488e9a2572adf6d9ce409b3444ad527416" }, + { 4617000, "a89de0e22f25a1c7b5eca66c0c4f1fff9508a12d3e056e4b52de82fd7bba699f" }, + { 4618000, "ce1eed7f21976f2e525b2f8102eca77d807c5d3dff534dfa562baa45e0371590" }, + { 4619000, "6739c88b3bd5f6d853566407f2f4af07d59a8eefc05ceb23f80c726d568aeaa5" }, + { 4620000, "7e5157f42c260fbe9ec7c6088b76a92077cebc5341f557203274f2bc7f8644d8" }, + { 4621000, "901a98221a6c9a72f824ed784a4e0356231a221b2a2ea2deafaccecc849c7c4c" }, + { 4622000, "9be124cfad4aee9176d955ba09adb0afc3177657c6ab5144c194572ec7124a91" }, + { 4623000, "311199af4a18fc76abe469a72dafa4ef0dfb1a5b361c0c508fe5556c70394b97" }, + { 4624000, "e5ce76c2c56f45cbbf0a6eb15b5cbed3eeea7695509fcc7b42ae548f9195280f" }, + { 4625000, "e18875ee9cde685d2befab50103dc86ad9e55bf9928de9e2594fbb7e3c1dfdcc" }, + { 4626000, "f1c56c932092bf54db545954bd042b1c409da2e3ab9506e778cde47edc1363b8" }, + { 4627000, "93f715666ed9b40f9215aadaec3d05812a0aa53e3b4b6e7e0ee48776545e27b0" }, + { 4628000, "a3b49735f9d0f52effb5dfddc6469a637decca393eadd750d991fdc1386b6188" }, + { 4629000, "8486d0de1254752d74c3ae62a53273552bd65bf2e6ad025a76dec8e9cf5bdf4e" }, + { 4630000, "c2063b7d4ffe9f3e87b6dd69b82a23984805e6a3216428122bd09a23f0fb10b8" }, + { 4631000, "030475a0fbd81b32feee902650fa5e2ad9507826ef61314974a240f783bfb567" }, + { 4632000, "d7215096a190863b25e3e3315ad485a8fc150cb92e5731fb42e0e5744d44cdec" }, + { 4633000, "df4b2adf2bb39a27a4ac479c85d4e5e90e6e99ee9404e92bc524b33d892be1c4" }, + { 4634000, "e6084d9b60358dbd5b51381ce644400b75d344a897962c49e9f07e34e71a058c" }, + { 4635000, "e904cac1fdb2fc15cdbed585a84be7b1cc76ed0a47f9e75aadbc85e1e20e6c19" }, + { 4636000, "63f0b166fdb61c4c47d883fc1ea1cc153c50b0525e2ea4ebc40d366158698918" }, + { 4637000, "6d4081298c1df9e0439a45ea3b6c2b20c9ae2395d607534e051388fd3e677c3b" }, + { 4638000, "9707864fa555e33a6fae1e26619070b23de14a5c972e5a59453c44f584886f47" }, + { 4639000, "f098fff6a006340b755e32104566aa9efa2457fee0ff58fe724fcc79ff57db4f" }, + { 4640000, "09fb092882393590aa93f2c9a2327c9dae5e1d45b09a2edab18e5a5b750fd090" }, + { 4641000, "c07fc2367e2a6ef690312515f1fdd4214ee1813b722d0d3a4d95432f79dea25f" }, + { 4642000, "9e1d450b6cee1cd16ea872ada15e60b4abf1f1543fe6ada9b510ce0a3835d613" }, + { 4643000, "537da5a4ff7f5c3fb25772de37ef346709dc1c9ec5cbd5c09f5ce5274b59f7b4" }, + { 4644000, "63cd25352a4e91234f4c4d4b3060f2dc3e365be75f6deff64eb9961ca83ee5cf" }, + { 4645000, "387c820ee7812e15dbdae2be79050e448df7565b7edb1d25839e93e516088764" }, + { 4646000, "06f583e64e225d54ca6d09f9d83cdc1e4ef95fd7d394f5f4b55105ce6700f4f3" }, + { 4647000, "e417363a1be9fd2e8a9184ffa2e0cc7ec022a0c3bd5e528a1bd264f269afe88a" }, + { 4648000, "497031ea3158a97f0ae06a0107e3ae096660a5af4478d5e4130c01b1b725625a" }, + { 4649000, "65e55e00a101adba0337fd9f940740e56f168e31fe0951cb88a4618a1c253c92" }, + { 4650000, "543b2d16e5b275dc492756e4f548f7328a080f9bc41a3c2b4bd0601c3eb933ea" }, + { 4651000, "fb49753a3f6477a0583b9e3445bca1b47893bfd421f54356b643a385666118bc" }, + { 4652000, "294f44c46a178f4c369002be79b9e53fce492ac96f6689c1514b624729056988" }, + { 4653000, "817ceb90a849e4eac4606c898b6c007a2150b1f42a76c81f406b392325ec30da" }, + { 4654000, "7fd82b594ee3cf522e043b7a583c401e3f11da8e91c455053843e2dc522245c8" }, + { 4655000, "81dc5a0cf2524dbf96f489b36c1b639507fd0987fc4fbddfa7776307553ce49e" }, + { 4656000, "41eb85fda7a3ad386da86b351b576897daedaa4cb7d309dc51497ca1f89961f3" }, + { 4657000, "a9ee7d151eac3310ff0494c6e5dbd8d29bb7baf96144972f55917bd5cfa27eb0" }, + { 4658000, "38ddb1059fade70b20c1a1e2fae1e17497fb19512a2160dc494d7c95e9b0b7b5" }, + { 4659000, "ccc6daf8f4630e72b3793d824026e5472c455b4ba2f9ce76960cc5db9751d222" }, + { 4660000, "691ddf3ef1a16ef66f759f8760efc40d03e1e24fd6dfc5a596b8ac2926a2c76d" }, + { 4661000, "4e81695d80308997390b71cf8ae810cd6fbe654123dc31ea7735f04078deab6c" }, + { 4662000, "2ef721785ce1f0419ec00e00c3bd6687c87e2261157b6a91ef4a8c3beaa20bcb" }, + { 4663000, "665b96867036902239f005add9632b011984ec57aa71bdd56a90b6e2128f64e5" }, + { 4664000, "c7add414331fb06e50120f72ae60526f89d771107ae980978bd2cccd0d284dec" }, + { 4665000, "1b94e06e6430c1a7a0650c7666e585daaebfe42334af814ab4ba0fdba8849290" }, + { 4666000, "333f221e7b1d5a8d71f02d9a2c3a28ca141e6ec62124f89c72d2839f8ab0232b" }, + { 4667000, "f333553a21fe612fd1ee5e03a0b41362ed26261ba9284a8bf570abb6d324b16d" }, + { 4668000, "0e4307a64e1c48e708eb59a2b0187d2c3a1f96e8d9f04fe363fd3b2d4bfa4898" }, + { 4669000, "71954118a7e2b6310250b4c8d238b7ae8640fb2cbd02524315bafa664c0a876a" }, + { 4670000, "b497acf755089a9fc6ccc2b103d19ac132b1fad380947844d6cafcbc2e800e8c" }, + { 4671000, "1e847854af4c21f4561a3195a105d2c065af419bc3396da9dfc8566f5d2f450c" }, + { 4672000, "8a3e6dde21a18783266722f91bcb97eda316ec6f7974e9ec3c4a4e0acf0cc47f" }, + { 4673000, "fc447c1773b62ddd15697dba2cae5a0dfc8fb928b25d14c927f516dc7f78de9e" }, + { 4674000, "94e3145307e4677e83e58c651db2d7df316b689faf53cd6f1eab502e57b8127b" }, + { 4675000, "24b5dbb37287c4e946b0a8aba33e58be9381c9da40a81786810ca26deb60cffc" }, + { 4676000, "954f48ee11ff98fe0412f59d8b5a1951cb432b01fa714bdb735591153cde54c1" }, + { 4677000, "5bc3dd718fdc56154a411df74333720dc7b4cd7c5386d17f6605f232b7723a4f" }, + { 4678000, "cc7faa0812adb9ed2abb1cc4f187b3bffd8489b60e1cab1456e5dcd70688dc6e" }, + { 4679000, "7e13ce39cbff032b48a135a8e0035aa46037431cfe492aad464cd6f52e06f0ee" }, + { 4680000, "f0159156ff80b12483798d20893a6bdf4d5238ff73f4ef9a180a8b41e8c5d842" }, + { 4681000, "3b6a3f54fc592d165693dd6eeabe6eaca77756aca461dfeed2918c7ae9f37ca7" }, + { 4682000, "7610f0720e132019d02a84076c1ea8023076b5b16ca17b50642ef2ca763bff61" }, + { 4683000, "fa7367c5808437dfd38e7fe5f6e35dc8c6a9692f8a0b4adc626031d8839a40c5" }, + { 4684000, "75f4ddd51c17f5487bbae787c6d52b0680dfa74655c7b75425d7d92b27d88aea" }, + { 4685000, "437a3eb5dad593760a34eaceaf480e0baad6e11baaed5f55ffb9bf06a6cac414" }, + { 4686000, "f6432d479fa102e98afe5caccac6d2f757c9b8deef8aaf5a2e117437b6471403" }, + { 4687000, "117edeba95352ccd944c9445c38486ba753dac9185fbcb2c9a9a4eac29137bc9" }, + { 4688000, "76ba631dd5e5e550e453313bb91fde1ed34839f0b89af49986a06279b023d2a2" }, + { 4689000, "56c931b08535fbfbcab73d341b554f61e645fa9193627c440a9281e920c3596a" }, + { 4690000, "a977427960eb93711f87bc930fa2dd795990a0f64b434f100cab3b56a5a771ed" }, + { 4691000, "405f0c632c8c17d854bd888fd84a85aaa78126f383ad3200cb69bbba11e8b275" }, + { 4692000, "6b5ff6b8caabd0dc61549d6c940b866f29ac2d097fcef185b5173a65603b412e" }, + { 4693000, "ea9a1e8e1e46f5d6e2b28330d70cfb19bd32d222f9c78956572f1a9c2bcf1ff6" }, + { 4694000, "c2dcc1d94165b8d23bb5175eb4d68810ed74bc0b637d290ac30b0abc27e1c70e" }, + { 4695000, "1e808c2b53e39f4807ef747f648690fd05a448cd1e04a68a41ce11f884cc354f" }, + { 4696000, "b47a3c0f287e97975a5e253ce62ecd1eefabbd81c7438dc88ae04762e7b4c9a6" }, + { 4697000, "29543ad2fd5eca7921945b76b1957126305097d88bfa30f02a7010ea7e2bd99f" }, + { 4698000, "b514962bea7476bbf106398a535daeacf66f7658ecec42f05d5cca59b18c10e1" }, + { 4699000, "c11cb2dabf716a3f84049bd9abdbfc33d30c0f839a9b25f552505035f99c105a" }, + { 4700000, "a3e00b58554dd7bca88ae918bec6d0f7be902f404af84c9393bf758cd9773d9b" }, + { 4701000, "5438f1cb7d82d20fad35100a5d018482c06d1267c7b637baa3d8572b922db924" }, + { 4702000, "784c9452ff1b73af6ab79a7a4488a9315574b03e952f8abd8c8a3c6615aefad4" }, + { 4703000, "b6271f17dcb863530d50e47cc2db4fa40fe7a88276d03c04b89b1c77b38cb412" }, + { 4704000, "c759a689938ed605822a7b2d8985b572781d0533349e32b5f88dba1446a5f337" }, + { 4705000, "4e34d1c0f41d5b78531c08cb1915975ad52866c359c000d86694235a507548fe" }, + { 4706000, "f2d0ee4854652f434672549cc51d6d5e7dd5cbc473cc8ef94350eb208b2236a7" }, + { 4707000, "30b453365b3beb710fa553ab3ee7a155958a661928c2b630687c9c552e763816" }, + { 4708000, "44a34a1a38a48f0d0675e647e81968d464b9dc8707a0eadbef99e7bd11815238" }, + { 4709000, "f38cb29a747617bb58b21e911464eb9fdfc58e12ea3b3133b9239a627c5a5c06" }, + { 4710000, "ea613de93d1520321032ccc8e4574d10b14eaaebe0edd4604921285bff88b4dc" }, + { 4711000, "8e79710dfc6aab25fb0e5e287f828cd51845a5b7453ebfce7150363efbeac1bc" }, + { 4712000, "2dd71dcdeecf1db65d39243f40b675a9db9a4824d48732ab68df5974fb157cc7" }, + { 4713000, "4a6a774b7390cb5a2b3cc55af7a3b64c515b9a3a271fdcdeaf0759e4bbddd58f" }, + { 4714000, "bd94ad36097bb10242d2bb46e4a894056c08566e9d42ca51f42bab1a84fb0e75" }, + { 4715000, "b7187ecfd23d1d7c7b8d925566b54cb1d10557bdcbc1a603c8a8b0dcdb5ab441" }, + { 4716000, "d4a8e55a5f4d781387b9b36b87f09a91750b856b9498036cc4ccea62c56c2039" }, + { 4717000, "5bb92c73206c2b508d52d121a6c9de67571bbfd53992f0f29302777d880925c4" }, + { 4718000, "061ca389fd6bf8e210a42e3e4ce299cfdfece8025f8c99d82de766dcab00e469" }, + { 4719000, "6db0585be2f1ef83de5b89639768a216ed8278cad1a2829890096c44a97d28e6" }, + { 4720000, "ed4af16846753121aea1f975aec3013c5981cade57a159d4d38ad32f22d0ebe2" }, + { 4721000, "01ac93ca757454cab16d0440595e1fc4ed7d1b754574978b93db00c752ecceee" }, + { 4722000, "bfbbc4e8007098b8d5cb429a8abb75c55ae66c7d031621eadc7884eaeee65f4a" }, + { 4723000, "4e05aef16272fc57831f8261c7f725df26f67de0368443d82021b92ac1fd92b7" }, + { 4724000, "21685a86d062763db407b5d74dab8b13fdeeabcfb79b2c38693c206b3681083a" }, + { 4725000, "d5b9d5bc720a73279b7ebb1eb8213015d2cc3ca50c665abff2637b82d9de3a54" }, + { 4726000, "407a91a4a344175d9a273e39cc2d136c7c818365a6c5a09324e479f7e8cad280" }, + { 4727000, "6b04c93da4f47d949f3625cabe8229e8c00794023f3eb4c8391f36e063add82b" }, + { 4728000, "63dd4d5ad188909273f8f249e83be22bf5a8115bd1299916c6a1d50f786fd166" }, + { 4729000, "8b1cbc73fd5bb806a229f9a0696d6ef8e01a3dc423fd218baeb568ab56bdb98c" }, + { 4730000, "e70bbec7a4495754d94f20e498f9f348cd5dcb5382f15e93e37cdb600b2e247c" }, + { 4731000, "78e3f6a01d061eb34531e20928cef4ee590d3c6a429765a6fff2a46a20a70749" }, + { 4732000, "7016056c57d7579d6dd40e137bb9c993eecef42c19afba4ecc632ca9e2b76778" }, + { 4733000, "c714010b90c2a1f31d2d35126ec940fb4023863af5c01b2f72dea1407843819b" }, + { 4734000, "036baafa3d3ecb9802438d0b5bda5be09f7cf970e12acff82c310b1a633ade33" }, + { 4735000, "6098981a0159b43239cfc5c648d61e834f06b9f01fc7a8deb9cf7107e1422109" }, + { 4736000, "da69d6e87eff429cacd4c0b2599ab06bdbe54598e6a0a8c72889b8efde56a52d" }, + { 4737000, "f65589963b9553a9a23a10938f4179cab94cbb6082bff12976aa57f7372e0b03" }, + { 4738000, "ec8542b495cba8e18d0c550069d30c8c9779cd1b96514a6e34af97f622d29648" }, + { 4739000, "d9935e0719e5eb7a10f0588be2bc582eb855ba4d82eff018a87639ffbbe8b0b1" }, + { 4740000, "51d6cce6690d072f69afe75957d269f2f7d4de90a82689ff3faa828be3d8c2b5" }, + { 4741000, "1f3b3cbbf85993d0282c4a4341601e16acb84deb2013271ddc16fc34d16ef4c7" }, + { 4742000, "09f905cc15b692375237f7449ae9b5fd2d2bc22ceb64345b3b1d0458c077c48d" }, + { 4743000, "fc2770aa986b7efb991386f59b81289f0b250c8314df8ef26030d3a8464a0e69" }, + { 4744000, "31b33350b279b82873c5a1abc84f442ebf8ced3327169ce5ce0b82aeb027eb3b" }, + { 4745000, "74041c55613e4a7a3b93b0de02b591337f04d184895871f66930e268e8e225db" }, + { 4746000, "a671a0df445e53b08ec66a30961aac5227b8ab1df2186f53076b0a0a1eb50598" }, + { 4747000, "1fcb092d3399429be19efead2c5cfdcc5cd374a61d1c8f83c93667027ad21b3c" }, + { 4748000, "89a960f3f082b649752d5861c02718c5a0af9d5ec91930877c3cef1962087c63" }, + { 4749000, "71e77253dffdaaac32a519429671c000f7b4700abe1164017478b302fe31efe9" }, + { 4750000, "040f666510ac3ddf8a1cd73c55992416061349e576ad8784e7ed628d5e698e98" }, + { 4751000, "1a25ba117b0f2e8583d330bc072438ae36de280e5b31812bd0b23adee77ab2e1" }, + { 4752000, "d78b9b326a8f08257b2653c32dc7dca09861c6162093a13ddc25709b9a11bf89" }, + { 4753000, "06841cce98ac7e6b256d188182b8cf3df309e6d99e46aa02dd36fcc810df882e" }, + { 4754000, "29e63f3cb92b9689762b8e9610b05ccb386b56beb3e8c793255f741e793f0271" }, + { 4755000, "a1ce1717d5a9eedaa81c61577cce0f7099c929a836086e7e767b51bb90ae03d5" }, + { 4756000, "f8998433a6947b2aaa96e19e36acbffa614cf5c959126d8e3aec744ce5a84380" }, + { 4757000, "c466b4de1842e262402b5f5c2973cb2364fb21964159d7129b905778dbe53342" }, + { 4758000, "94f013cebf0f4b0b04b1b2756eaf2c400d22d014ea369899472a781d4ff7f1e3" }, + { 4759000, "9d4e07c62106870002124d116e91d465384642d0140a635f33913faf52102c30" }, + { 4760000, "0624fed6463eb3d51d174a89d59a6a6fb077eec757ea395d8ebe854482503bca" }, + { 4761000, "d8c705a26c77e3e2d27574f249b1dfa2112f9aae3617fc39c33334a7b7471526" }, + { 4762000, "77b1c9126a51e77c60983f0a57c38fba9eb2cba184aaec71b76e46ff94e8e1d5" }, + { 4763000, "afed409dcceea04ebfbdb5f030824ee01230065c35048014f2334d08a43ec5e5" }, + { 4764000, "02f4e7bfdddbc6069d5d4e06ff10d325d1b6f0ffdb77d99ea9cc938dfeb949e8" }, + { 4765000, "d9b37f523fb4890afe6c9dc7b2106b2e8da3ab2fc883fbc93e43d2b2be4b4706" }, + { 4766000, "a27731dd0edb55dfe3d6886ba6e7fc6b8f15c8bc5392e379ead119779d5cb441" }, + { 4767000, "b4ad187b7e45b52f8948c2f038444b580ae5947cd6e6278639c420e47a5f68a1" }, + { 4768000, "eb424cbbd556e3e1173092a5151893edbabdfa59f68ae9072f9c7240dac8c241" }, + { 4769000, "bab5dc28ca6630abe58025a468fb5989b86f5471e335acf677dff5fd244b8693" }, + { 4770000, "8443b7aae5475592536378095054f6d969cfe4b9992c1b6374089fe585abe4a1" }, + { 4771000, "be57f81054674c0b9a8de7e57f1959b06a68954b9424d892d7d55df704533638" }, + { 4772000, "ec05203488c9988e499ceedbc14c78a2b60937fcd6737fd53be1c8fa11192057" }, + { 4773000, "7244619f2b60fb948ca92703bf2f91ca91d08a61f7dd12d51c78f8b65a96547e" }, + { 4774000, "cd214542bdd501f76d84f06057b78615fb0bdb92b482d786a0bb52fe227b3465" }, + { 4775000, "e896755574ffa62507c44616e47ba62229b71cd10f891b2e74767483fa70ab6d" }, + { 4776000, "4d7a1d8fecfe10ce3015eb04c1a41aeb8011c6c77e2e5006a0bfb17d55f841ba" }, + { 4777000, "4fe98d756974c2f0b8b6860f20f61567b7b3cd71e6b5c93c8d7ea2626afef85c" }, + { 4778000, "b2ec95daccb2ec5bd92d27fefa4b44065cc5a68e6c54054f6d24ca0352552cc1" }, + { 4779000, "2724829359083e1b7eaa9e1c9f0f0f7aa27d2bb190bf6a28319b919aaa933183" }, + { 4780000, "2b1a778938e41a5fac2b5c0ecb1c11c450cb0b60d55bd059b7b0725afed7f360" }, + { 4781000, "fbbb83aa04c53818b8f66036edf3895b1fd7dd4b3a37af3041026f3142300671" }, + { 4782000, "42fc80205b793d17e9dd0304de0ca9f8f9137c2801ab1069bab7693ea983992b" }, + { 4783000, "d73e29b02777ee12ded66a8817d4ac77fcd579d716c00b9f75f5b999ac10663d" }, + { 4784000, "f9a791091d9936a0a6f3dcd7107cc40d69768202697f1bb585a2d1553e0e7dfe" }, + { 4785000, "1521054b22854679c52f11ddadfc0cab33385760589786bea9be831477833ccd" }, + { 4786000, "a5c76850c316f4177440f8be09018d102438b213b2c59abc5d04181dce96249e" }, + { 4787000, "801677e4e5ae5d7bcab60a11e5008921173364b2985e5cc85b98c5a4839687da" }, + { 4788000, "fd0e005579f184c3c3eb342673be6e5c74bcfcdfe21fc4d9b4bb7e02219dbda2" }, + { 4789000, "900f1d0271642f2c323e4609d0d3e6ff74385c85b2bc49d0dc4352dfbc4f9f96" }, + { 4790000, "bb2d70f4a75ec8247155b6734b717cbd0ab4375bca4756ea9b72b5039037d19d" }, + { 4791000, "d9809c45d64661785b6a79a877ed4b4fc54ef6861fb122d8fe740fe5406b3d27" }, + { 4792000, "274ce4133a842c9f7dbab0475c9ab593e38039b6289480f2675a28d4d7f203f1" }, + { 4793000, "d8d6141d324d50a597b105abffaf3be4794c976dceb2bb32fce65d1c5bc2c203" }, + { 4794000, "f4d4ff1f44725c66b316ea98632883895358ce315b6d43263033375b051c2f7b" }, + { 4795000, "29447d4684057cf7c314335a83a07a503c613a597d5f0f62b67081042feaf15c" }, + { 4796000, "7889133f412603f043b7b28613a68186c0acf72a499201ac2ca58cf33e15ebb2" }, + { 4797000, "78b0949a095f915831333bab616fffa0cd869d777f44d4929db685f7fd221f17" }, + { 4798000, "ea63d4c4315c30628e1f0f78c167b1ee896357cb4f26710959fc30eefe8ff94f" }, + { 4799000, "50a531d32a2d831919b7ae8ae72d6237f31058c0883f89f5fe9f305ef81f080c" }, + { 4800000, "f0590250dccecc04bf8a6148275451f5c7e14457a266a40975f434940abab6e1" }, + { 4801000, "eb90f1ff5f1fbff4c6b716229fee8bab435e3f468c61c1d28e3ad8a0e0db88e8" }, + { 4802000, "b14045b4f601b9036f1488fe3e646d806b2a0b6676fc63b0c4f0ffaf5a80cbbe" }, + { 4803000, "90cc0bd0329dc89f7a21b16205ab61f07c441d875fc89e722dfc54ae23e25303" }, + { 4804000, "49d672cf38bb00bd18e0d29bb57dd5f66643ad64c76e0e06a9cebfc505f33172" }, + { 4805000, "bd5aa9df6cdc6e9b22c9d7282d1c885d56abed5922b51617f691135c59bb81a8" }, + { 4806000, "e33403d2afa1a13c68a462e33d9ac39c26a5e2d0b64a5fe7f907adee18c3056d" }, + { 4807000, "31fd4b753bfb14bfe2cc02c06e8e1181bbd2b096c2d62ef6a8ee3f54cdd4d636" }, + { 4808000, "6587b26e561e2dcd5261a915602de2bbbc67db602c5b5509217246a8434b10ae" }, + { 4809000, "58603568524011afc0a2fda39bed927546e88f8df85868a193657cdb8af1e1f3" }, + { 4810000, "aa7267b9ddc9e1951c9bc8cbeae801cd701b89add502a5a88f79d8870008dbd4" }, + { 4811000, "698765668268f1c4b2b3af09dffa3b6b79506187b7a773ed5a9ebf8e5579e5f5" }, + { 4812000, "1ce29867e4a990d56967a1037bc1f92d7f4d6460fb34d848e39bb111e315a7c3" }, + { 4813000, "91341eaf795e497a44f119e13e72485145cf3571edc9339d7ffa8152e64ff399" }, + { 4814000, "27699c40354d743e7ae30205f4b22827d687c945bf41154e171c485c6efefbe4" }, + { 4815000, "3963bf20bf47f2b0672482cb753fa13316244ac90c6a49a482098d1f662e8a29" }, + { 4816000, "37abab67e381cfb1aa08d27febfc16ec089862adfb5c484cec71b1c502e95fca" }, + { 4817000, "a7b109ae28f0fc0b99712b6f1146e7e68758a95ee9ef19caee211a82cac2de70" }, + { 4818000, "aaabead18e1cb38d3c034d52417675be2d90cc7d3ca7e1861d94a31383ce520a" }, + { 4819000, "12ac9f17df8dfc80d6db50f85264727e7551f6b2404dd22d9894f63ca2283c4e" }, + { 4820000, "cf593cc69928853a007b992d149b49bbe8b9fd7306b7e71aa444285eb0f9060b" }, + { 4821000, "01845784c527f47f2fc490b113915056aa64b7c2bb18ebb16fc03ca9b214c2ed" }, + { 4822000, "ecff88d4131de598cc2705757b5bd2ddba5ca0d128b7d37f19fd26fcf6fb61c7" }, + { 4823000, "84e5ec81fa9b2c4773458aa397194144bf49c46b35ceab6912f9e93b805d0c4a" }, + { 4824000, "d66e125ef0352bb18c84d0121330510991d9a0a0e3b9038321299da0a08fd63e" }, + { 4825000, "e16118571ab0eecdb8f16edc8f50012a420145ab9846b67caa76cff6840af5d3" }, + { 4826000, "cafc5bbbceda9bca53efe4c7b23115c806ce87c5ddce1003553224800ce3c653" }, + { 4827000, "c3382014fd8638cd477526b89fc36d969022a047d974e8abd075acb7b91e46d4" }, + { 4828000, "9cd6a099f4cada28957868906f39f978c03856f960f1223733aa3593cff4695e" }, + { 4829000, "0b65c550e21fb83ed6f5be7ce37b3434e6eb22e2268afceae15b73914e2c74d5" }, + { 4830000, "b9b464ee2119557c72ad011e5eb72936ea6415cfa685fe53595b0e380556456f" }, + { 4831000, "6cfdb52d578bad7ac0ab9455440192518cccc170de22f250cf3fdcfc46ddec62" }, + { 4832000, "9e3b4536d8cfd8b45e83b9ba3ef87d35365bfd09cecd104a9ed039f2b30db006" }, + { 4833000, "828fab8e10e4aa69c5c7e4ebde6c602e596787988519ecb009b9d2d131470b5f" }, + { 4834000, "b499523b4d118028e40e602c593b33953313b030a01195a3b758a0ade4c00f12" }, + { 4835000, "f09ce6abd826a61007cf70b9588838f5186883fba6c798113fa269cded7dba07" }, + { 4836000, "0f6e5004314e2f86af5880624cac1aa085e9d2ef4ca6bcf9414434cc9c4127b2" }, + { 4837000, "73db3273a1ddfe2deb7903272c6ebb069ba5d6532a642a18ca0131e9fa1a710a" }, + { 4838000, "c83735284def92b227bd7b1322566d519a352360ede9eb42534fa3a80438046f" }, + { 4839000, "d9d0491add38df0fa3792016fa9b51448c6065f6639b655394a8b2d5443a303e" }, + { 4840000, "1aea12fba47dadb0d4d39d8a189d361eb13031d3eca3269153a51b4932d59a60" }, + { 4841000, "d8e7f589808abcfb943d8b6caf392a2030b96c1cf53e6c68f26023a3e7d51f54" }, + { 4842000, "df161b4a485777e7e7a7c9f0ae311a2ac87dcfc450d790f69eb869e5f4b0acc7" }, + { 4843000, "1672f328fd71d35186314daf1d9eb4c24c38415eb2ba9c7537c63cb8bad55e76" }, + { 4844000, "0d1650ecf85f4544da9a624041471f6d3ab2fd12c34c7323f975a1f0f5665828" }, + { 4845000, "318c0ae5add75b28c538af76ac456397d2b33456d446f3459079f7df9e15d8f9" }, + { 4846000, "3f63aba618c4666e7ad01f3c8469b7d6986da5e938dbd40d60c58617d4657961" }, + { 4847000, "8909c7a3981c046c53c4292c90be511f934329f1680fcd950d8b4ca5022cdc5c" }, + { 4848000, "fac36516e3db3665b29b0bb37226a727439f9a109e8725fe6c719934288af532" }, + { 4849000, "e13ed48934711f064404b8eb4ff6325877e7b3c49484b8b5436b5422d7447d42" }, + { 4850000, "c039930b7b3c8cc4578b7a4b89dd22bb0c6eb8294803c3e81e5255eb9ab1e032" }, + { 4851000, "0f456a9ce3b1c58d32f6b926a373b7bad30f710e79effd5ede8a4c1c5982b9d7" }, + { 4852000, "f6f724b0aa10259b229034b18dd87920bc0dedd1c7d37c42f3f14b78ab78d25b" }, + { 4853000, "657db0e82a87516613bf4d64524d361e4bb3a81eb571d36d3bcb1535cdb4e387" }, + { 4854000, "f359700f066ad7745811fbbf91d2af52fbdb2724f71af8760dff0c120ba77561" }, + { 4855000, "9705d1542d8f9882d09f200af8719319c91d84b2f8b120f9fc0a32ab8cc5d076" }, + { 4856000, "addadcc9c3ef3a2fd949d6f6a5eb6c51c1efec7a985e73d1c3428004b1ecc798" }, + { 4857000, "7c96420ff60ec903191efbe4edcdc329ca60aedcd44c9d5572f0c061d5d0ac81" }, + { 4858000, "e06ea82bda686cc9312267be11d1b90a53691a661a33fdeae72dabab2fb2456d" }, + { 4859000, "16331e5d50a7cb28315f3c57d467caff867d17a7942fb2d8b193f9c3450248b4" }, + { 4860000, "694c5c22e78ab81a68c49dfd79c4209ce5c1968de689f221b38aed19486148fe" }, + { 4861000, "a8ba66d88578b76a88358857f3e317de08454f588b0fc2cab59d2655fad0fcb0" }, + { 4862000, "32d8164ff7ff1dea8aa2c435d98fae64f32c88183c656ed46af7496e2b15d790" }, + { 4863000, "6c1212977dc28ff196edf9d6c8fa781f534454927c29765f3846bbd2ea528ded" }, + { 4864000, "4fa53c195dba92a1c131006fd54bae82c0eafdec9b626067fab210e190b7346f" }, + { 4865000, "ebb2039e29fc181f7f2abf6aec21fa3254138f26764579d084dd6493b0831d3e" }, + { 4866000, "163fb75c8473bc7f58763a160343f0524fc705c4b01cfe06869497ca6d0b3454" }, + { 4867000, "17ea6c544ad2321484478d5f405d7e4d5ae108a103f4df9c81b16e28c1aa6077" }, + { 4868000, "e99011dd2fb3d706e9fc1ddf959b0cdf914147ee35165a1c15b4f4551f033d8e" }, + { 4869000, "4e9a0b397b8e71e136981c793d1bb54b9b83c940375b98f3d758063de113eb98" }, + { 4870000, "2034c95e067d4075499f3460a9fd4970e9c686799721ad4b312e43e8541513b5" }, + { 4871000, "1efb715a04288762fd5505d3588a49f9d8d22aee76679ca77827715d841a65dc" }, + { 4872000, "2c172b4ff387ee236138c365394e94323e7494cf2a35539313323a47b1ec9a66" }, + { 4873000, "0f2f3eff1d25300c954b927aec79dcab039b1a5e87733a902640a1a3b96462b1" }, + { 4874000, "1611c09426b7e9c7e53ea335b0bbd2807a63c40898f9b24da88be325799d6411" }, + { 4875000, "83b4b93f7076d8705466f90c7110795a39dda17309c245c838edf7e6af6c0b8e" }, + { 4876000, "193b53428c2e9d7ca68efd46540aab4b54148cf0fbaacbc0ac164a0e45d535a6" }, + { 4877000, "1b9e18471795fb7ceee88461c5a091ba5e6d268cd1e0ee88fadc8f5a00a997f9" }, + { 4878000, "71f632c809441646514971f18819806609e341f11124ca60604e69e0f71ca820" }, + { 4879000, "a714bd47c16ed6d78fdb86c7cef8b27fafa47df54b0fd59dff25f8752b80d4f0" }, + { 4880000, "0c685f14e86b975bf5d565ab940f148a9841a0fe9eb8c8f11789f09fe2a0d1ca" }, + { 4881000, "8328f1bd21d62a350e9edb06bb4d3d9c523ba98157d01edd7f228ee9a766d2f4" }, + { 4882000, "76766156e9c522934a69224b0db1a8321048c1ebd63a5c18ca712cb38895b0aa" }, + { 4883000, "52771624bb0e0059b37be41d795d553a996b1901fe6c0a937486264ca049f2d1" }, + { 4884000, "2ab3d94c5eb7ef1440bd6f0ef584dac4db37f0284e7fed38c301dbc92820eed9" }, + { 4885000, "56623b6a04d6c77385a0907b24fac03ed360a4e05aa8215ac79f8bb1c67ef075" }, + { 4886000, "d2ab8792ed4710cf91876fe14312cef0c5dc38a3b7665ccee1e2d374d08e5258" }, + { 4887000, "e844bb5512153723997a476cf1021819884fb956544a2fc8e4bed98af8dd2f46" }, + { 4888000, "a4cf8e3412e3173bf19b74b5fed6ee848ac3ac37d308ba416de8b36896ceb252" }, + { 4889000, "e2440da2780f43e4cd3b03e9cc2388b650c3f2ea8f3943fd250f92d7debe3787" }, + { 4890000, "b3f0e6a07f6080893ac7e3005ba5a08d30a54c76022ad41e84212119ded27c48" }, + { 4891000, "d551144b89dfa031eb244e6562bc82fc15fcb1d86c02f78480d590ff49ebbb37" }, + { 4892000, "daf4d7feb018a62b65e3e97687de21e16e6b27cce6d06b7b88c3ce000bccb233" }, + { 4893000, "9ff8dd81035caeb144bfe56cef0089fa238d73ed459f7b30c4b4c3edfa65d357" }, + { 4894000, "f982e58027ab19ede45c8dcaf5e926a9ed6916ffddc5612538dbee09a5a5eb2b" }, + { 4895000, "3db1f7c416eda149528673d014f280683d22dfc3081b9576a6326f5f66765de1" }, + { 4896000, "f184fbadf5db96bfcb7c2c97afa76644a5cce26e60f3ef5d9d9cbafba1440e92" }, + { 4897000, "fefa24e0cc83830a0c1776472cd967a9b487c23fa9fc1bad88f89a529213890b" }, + { 4898000, "3c0f97f6e1087568a0dbc87c6926b56cdef1dbad1e7afb73e31b8c9bb3cdb873" }, + { 4899000, "a102f9f0399157ab01b4a7360c3276d0cd1b72500c3ea79f409a0c3dd9f370c9" }, + { 4900000, "df7fb7a7b3340798b50b8b5c8387cacea017c569072de577fe9099be8be51931" }, + { 4901000, "ea8a5841c61ff1faf999d252a320d567d778d2c383ce6aaf61e91e4873ef0233" }, + { 4902000, "144ed2bfe9d76aaa00b4ea16a81a8139f6bb0e75f5dcccc26776b6ec9024ad18" }, + { 4903000, "2311e869256d1083e882162835e1f451244177ef8457d42c749ffb4693731afa" }, + { 4904000, "f855cde11cdd972a23a3498b0e63b8f31684643c86f090c87d35ea03797aa1ba" }, + { 4905000, "b9c71fc1bbc51fd6a4d0a25565a02bb0b727631ba81f29629153ce0d071909b2" }, + { 4906000, "7cf965be9f69ed7d1d04fc44e6d05598c980f5a981622831ac3ef1b107b59643" }, + { 4907000, "d4ec7ce8cd44cd1a163cecd3af07e7847a5086576765ba6111d5e1ef569ad96d" }, + { 4908000, "de140981cd7ed08633d5b555e2bffc0ee30759a8ee50a73a315e111c6b211e90" }, + { 4909000, "6969f00d1560aead39756c9e6f6a701a9bf6e2fc02c87d8acebcf78fdeb9a898" }, + { 4910000, "027a2e1c15f1e6f0aa8d99b0d7de336cc3fa41bc8e679a66b1a47188c19f5457" }, + { 4911000, "dc3b0f3af8778270c291922f337717afc20cbb94cd6abd9801ecd5fff6d4832f" }, + { 4912000, "5966e6774d3d623e26513bf28c02a27119644b8f07345489e369a959fe18f453" }, + { 4913000, "483aa6b05705ae607ebdaf6056ff186314bc5fc97ff37dcb301fe5efa195512e" }, + { 4914000, "a8a611b7bbab5199ca1411f8ae128b385892ef1f93bc7028fdebb08600f6d573" }, + { 4915000, "027d760b08dd6dbc8d7a33162562dbda3453deb7c60d69720ef2c7764bb5f6eb" }, + { 4916000, "2721fc82191bfd78c1bea2f3d78081f8311fe7876562dd72991c15ae2cec3d3f" }, + { 4917000, "7bdf0e55289ea866a63cab6a747e3ae03458f7eb58b43fb5c179670b34704795" }, + { 4918000, "61ce68c441b7d49c3243663a2ebd9a140d95e1455cabaaef7f906d146e05a5d4" }, + { 4919000, "8bdb99a36f9e6d752f1ea59fd27c5e33a1364023324754e15663d1f0a38da9a8" }, + { 4920000, "53c3edfc02c8aad9fa98086736a45d22392bd86c626343fab5086da15efce7c6" }, + { 4921000, "6086557dfccc4a4e8fc76a9f5898bdbbbde076c7f5a429987aaffab54d0db0cd" }, + { 4922000, "59ccd26f9015a86f0b9b88d1e39b38ee2d8d26094cf6069fa570024f747f1fba" }, + { 4923000, "1bfbd71c7c1f2843fc72496aba611b215954cc56d4d27e40cc8c3adf682bad0a" }, + { 4924000, "8c311c248dd32dc1294486a5c6fc449607ea7a042072f26641d0b06c58c1f8ca" }, + { 4925000, "d93884f30eaa9eaaf4446c2caab477946a3954790fc9dd4754f1cf213e1c833e" }, + { 4926000, "eb1e4a9aba3ad38d4884e3ecfc784c483374fd400f86a9eb7ea9ce5dd3ee2fea" }, + { 4927000, "f6349965b9c35c2aa60ce418e873e8937dd862d0a4cdff0443723ac31d5db1cb" }, + { 4928000, "d9b34749bb61cecdd6e7723f2942285f2791e0b9c0a5462573cbb50691c21afd" }, + { 4929000, "f9ef3a7c7b1b693bd2a76374062ed94005a9bccc1fa2e83160beed2a9798b481" }, + { 4930000, "478d46a653f1cd14986d52191838978d85884586a50393e60fcc0f8d976239d5" }, + { 4931000, "8a8a20c23bb7d9ff4eebf5fc1dbced7c39dd59741049cc5863911627942ddbc3" }, + { 4932000, "5f52352944c195f044dfaeb72985c299bc7885fd8b6afee23dadd86476b5424b" }, + { 4933000, "47c60426333926ecc47429c91efa6be8afae7516a6cd9bd70ef0c49cc46994f5" }, + { 4934000, "4599556a374c12b15b421a35d903bf72f38717eec6438075f1576962611d77c9" }, + { 4935000, "b4865b9988165d0f19423bd623c344d569e6f394cec5fdcb95d6a0bfb04667a3" }, + { 4936000, "974142979acabd58e6a5387ed729afebb8920b87809cfd2b4db4213ec4799602" }, + { 4937000, "8df62e79fe18e39142c2fcd76a5a98f809f698a92048a42d67137793d270f206" }, + { 4938000, "c393ad119497a93e9b9e2994dc99c0b5388f80049efe64f868a22f6151a2a4d8" }, + { 4939000, "ffedce22ec5fabe795ec8f38632f8ad6581aca0e0a618c2455ae8795aa9633a5" }, + { 4940000, "0d824dc8d81f88a380b7611eea17ea91900e52271e6a94acf152fd782182b1e1" }, + { 4941000, "1cfd22a6e29e5834afabbf551c7dd1fc604adffc060d023b070d80110bdcc4d0" }, + { 4942000, "6effdbcb2e1cd2cd43346f9d02ba54f5fd63e416543a4ceba97946fb28f5edba" }, + { 4943000, "716de3901300b6b605f39e88c3226f19947dbe9687c66849fbaa75cbb672e2f3" }, + { 4944000, "da9e35d4e24d56cfcd792e375a70b8caafc04c96815e7481633bb26717ad8dca" }, + { 4945000, "92f5ebb92eed70319637e374a6504d5a3c2b9997ffb0732687c5528bc73bd8f3" }, + { 4946000, "9a86dfd9e17c4aa5172785dc7922a1705044b65b3778852914ef13c9643c2ee5" }, + { 4947000, "6e59b6a2772981cf8326944c61f8409b5b0ea8d10e2c9c7240cea63525c9c1e8" }, + { 4948000, "f6c98391a27386794b9048c9224fdb19e5aff44022f9265f04de94654c87fa37" }, + { 4949000, "e5dcbe5ec1ba65a4bed0f1a680d17632415b4880dcda9fa668dead3a32e6e9a7" }, + { 4950000, "4bf87b6887843c153f27febf9c62e0df71af579923d12b39c3277e8b0cea8325" }, + { 4951000, "453569587f322cdba15fdce695f5749e135eb8a5a48a3db01712fd57961b229e" }, + { 4952000, "af6c9e525c823eb488bb7363562b42b9c54c75cd054062266fc8ec5e46832d98" }, + { 4953000, "819e66fba371f6d1203c3610e18cce1b821b2c1981f095ce44ff00e8b8bb337d" }, + { 4954000, "1e4c062bf7a902921450038d7b031ea06c85f3ef30508098d100281009c055c4" }, + { 4955000, "b3d22f51a36ce18df844b40f24437b7180a672fb555ff386cafc2d03f44dfe89" }, + { 4956000, "54ba2892d2a17f63d76084a6277af9244ee3c7bcc54521e91ffa6f4994fb4ec9" }, + { 4957000, "475bcdc3cec655321095918be2bc87633023168297b02b6cf0e31b16ef4a91c9" }, + { 4958000, "766ede06e7d463633c521d020e6bc8042c9a56ce4a710f9a2cc066f12ff9a913" }, + { 4959000, "c02a120481d1960e8aede87bd802e229500757cdf7d4b8962cd6ec9cf7a9e03e" }, + { 4960000, "9914ec29d97189638ada539820d680d4c8ac5c289b1cc0aef1cc1fa6761613b0" }, + { 4961000, "755b375d6650c57ca5e11bb8a5ce41912fea61ee9be0384a26c9835304a1c90c" }, + { 4962000, "7efaef460513898d85150836ed618b3da86b3c28f0724b3212fe28b24b5a2bc5" }, + { 4963000, "37fe93de28aeb2c24d1ee71204110e156951c0914c2abd7515ce5e206824ac97" }, + { 4964000, "b4d7c5274dede2027171eee378d9b039ed00de3bc7bef11362fd4b7f637054f0" }, + { 4965000, "3c5fb396230c85ff2438ffe772b04746ca881f27ee1cf01ef0fc34efa14b487f" }, + { 4966000, "2bedb0aa9b914291b9a8f97c3af0b5b5fac4711c8a2d619078d61e2c3c6041c8" }, + { 4967000, "ce5ee78330a456a25b0d1c508a7836dc578235cbbce72c173708488daed5f016" }, + { 4968000, "46645b663c49360ae985c30bcd830e210bb0e6d0cc06c1657575c991d6096e0c" }, + { 4969000, "61eded53a527b33d1d9e2967bd1bf916750b30aa8dc9d1bd2cfe57ae06043d87" }, + { 4970000, "d4f492bfe32ced4fa412e1ee8f906c34850b5549c7afa3933f80d556fbfbf7fb" }, + { 4971000, "4cde82380efcd007741b45c00889d0f3fb6dd088133f16c1b99709f7092e469a" }, + { 4972000, "e213cd4fb9dbec8d01be92cd95f6b0c42d1e3847884058db4ae39cb6df815907" }, + { 4973000, "83a635486f6094f54a140db38e9661dedd819180ab0df5eebe56fa143dd8f1c9" }, + { 4974000, "35a1ef9643e94783ea879226387442beee868001aeed0c650685263d8fcf88fc" }, + { 4975000, "b8a3dc0652b5403eb23685c9bf5ff1c06f2c8b3e904191f19070726aad0f5b4a" }, + { 4976000, "2e579a94ba1a6f5bd5a3a0b51fcb3c8b6720ca04f726ade8596d9807a3259888" }, + { 4977000, "2b7e28ab5494249ef97d76e4887bc6ad35996fe9a46cd9db048d022a6b288587" }, + { 4978000, "3444c266ba7f7bf2afbd9e38ddba1f12777f5729fd4cbc931752fae6d9f1b050" }, + { 4979000, "8559740ce169fc669ba7e2c164a6164790767db0eb3c3ac6097ae2150a9cb999" }, + { 4980000, "f665c5a59d0ce46102ccfd478148c8152d832e71cd5785985e2b5e8995a02164" }, + { 4981000, "3591b40669e1caa6fb2f70247b468232bad1bd4dfb5d8697819a7cde70c97e50" }, + { 4982000, "015486e35e3349707a945cf8f5af54cca3d7cc249f6d871aa0f92e901346ca00" }, + { 4983000, "6dc291cac238ff0f5ba1c1526b29faa386bd09531188e991571de6915c8f3667" }, + { 4984000, "1c5dd496bda24e58fd813e0e303854d8cac7767b4bb9a2ff84c24e466d96edae" }, + { 4985000, "83069d46897347a53a8ed2e712c4f6056d14243057bf89101c252321d4a17920" }, + { 4986000, "642e34e940c7385553ed4d1d8cb9b4ff66b5429b2a32f1f99bdc0d5a4ef877cb" }, + { 4987000, "7efe221e61f7b03aed7e1fd69380731c13fb7a92e2e68413be50b2d6856f8a6b" }, + { 4988000, "b98ba2945234032207587ce6f2ca16fb28938b0d95e132c02df415a7457e969b" }, + { 4989000, "6e6c3221f1f11c0427abe23eeb714f21bcc4f9d1e656d480064cd25153d16a20" }, + { 4990000, "efd6c582e0a7c4c86a6e4174c87aec5361f88eca4ff9aab80eef8fe3699344fb" }, + { 4991000, "82fedc57b258dee4e02484e54c0bb27fb9b4b3ef99ecb275b241a22965f2fa76" }, + { 4992000, "c7e9ba4662b0e58b43824dcb58dad188c72a74d5d655b3cd0f303b9edc361cad" }, + { 4993000, "bd6b412b853f674077dd03ffcff40817f4b4b0ffaaeab9f11c6edea6b9c2e4a0" }, + { 4994000, "c05f757c1af75863da5c6f299b39c0adf120130c11cef511fed72737934fb13d" }, + { 4995000, "6f5faf36d014bc53771503b15c6b88fb7612e4266583b51dae507a4b7bc247c6" }, + { 4996000, "00f9195a3c50d30ab7fe8e0b0a33f23f37690b7cb82b2f384bb61ee22fab06e4" }, + { 4997000, "d9915e1b2f05c45baa9eacc64b01c042df1769a6c2122e22298d09dbd0fc3eb6" }, + { 4998000, "76a79591b81156901f12e19cb2b50a1bf500414f556daf968075b5ed18e497f2" }, + { 4999000, "eab0de98adb52be4588f61fc099fbd07e882b72ffda9dd9ebd042fe0b378b88d" }, + { 5000000, "71d52466bbc8b854f8b06cbf2d6327748d1617f9c03598b6f035762108983096" }, + { 5001000, "46df82550e6d78455fc875de264e8185a35b860a069e972ea53d14feb0aafcb8" }, + { 5002000, "1f7e1b920541a96f530673f3855752154e241f6b7b19c38bfaab41a50b219e5e" }, + { 5003000, "4d30bed4b5ba3a88ce0a1f856f59dc5f070bb7f43012db7ea8342c4fbc6d2f6e" }, + { 5004000, "0ba32bf28e48844a299a5c121f712918e995f12a3c43ea114e6489718780c838" }, + { 5005000, "fa8380be242b5d3bbdb2786609e22ad46c09c928f532ab010ac86afe7f36e4d7" }, + { 5006000, "9e59c6d0746c6b2e7389f7feac792151fb72129f35a88015fc00c335e3634437" }, + { 5007000, "6096c4eea68bf5ab1fa87ce41d1c3781d65d9ab5c36d653e53a5e8345368a848" }, + { 5008000, "965b6a174916b979175a8f0355d02368ad22aaea5c86e0d39aed95b33d4c3215" }, + { 5009000, "8a54e92f2098aab18c07c2fb988ad7854d7e80fff1de5908b7180a692ed99c2d" }, + { 5010000, "8dec22ae13180e59b27508a6c03329a636d8f6f5c7c9c8ef8fcfc103cc62ac03" }, + { 5011000, "8cf58202104aa66c5a93c79b93fb90f2c5b9f87dc6184b3a1b56ce145198e5a5" }, + { 5012000, "99cd885064e594ec71c57227122979643314af340e578bc36e348476ab587f2e" }, + { 5013000, "1b362b0e1baf317c3db6fa486a05495e489cc62ead67d4c0f5cf84011912a036" }, + { 5014000, "a8f750c56c73921f558ca1bd7b3714847b381479e28eaabd0a5a92e365f28543" }, + { 5015000, "ea3255ea321214d6e75194b8d18f80ca1fe469e0315b27c7846b92acfde1b0be" }, + { 5016000, "014877b46bde0d286360e9538a2a29b680edf62a2253d2e1de2b0bd7cd6a4279" }, + { 5017000, "78252023112205f09da8c3e3d929676b001fbaf7684e187a3ff4823e32c93d21" }, + { 5018000, "2d8388d1b429656aafb99ed8a9d60a274b42a8d5689eb79fe217610d87994585" }, + { 5019000, "c54359c80200b28efac4e1a921d1d3587d1fb3b699fed8683ffd0be66f997d21" }, + { 5020000, "fc955c7b2a0945a872905d78afcf081690a56a40a4968e8dafaf3b3de7324c6a" }, + { 5021000, "1df540ca3775dda8549510a954a7577c2884454549757f4425f535f1f0c014d9" }, + { 5022000, "01ea8a5aa6c54c8b479aebae6bd83b3133db2e146ea55a49bccf1ea6d922dcb4" }, + { 5023000, "b22293c3003b9640f9bed22387dd1a3b1ae008c96acf468b047543f964116b1b" }, + { 5024000, "83c349650a6ebe951aa0e5d95410f48564bbc6f193312465eb514d86f2289b35" }, + { 5025000, "df56717e93585df743076e8593821dc75f69b6c4049bd8bbd075a27edc07baa6" }, + { 5026000, "77a544b3145d14b268ce7f0125822989e7293d210e8cdf196fcc0d1e4850ed9f" }, + { 5027000, "0d5d77ebe2cff4f76ad1902c337d57e7b21fa6dfe7749d83b0f42623acb196d3" }, + { 5028000, "d7add9ec7daf9cabe2807dd0e5a9bde1743df443b49d2bdca3fc2882a31fd6ff" }, + { 5029000, "864c347965e89fad1cb5c696e77fed139a1042ca0e59152ee4ae69fe5d2335b1" }, + { 5030000, "03593ec1d20c8bc57ff2692c7c9c39427b3111709cedfd789c8f59bb777274a3" }, + { 5031000, "b46e0b678843067c79b53e6dfec58edc77b31057f3fb47714e3993b4a16430c7" }, + { 5032000, "24dac47ec629a063eb1bd94ebf54e783198e0599bc27cdc29a608b4f880446b5" }, + { 5033000, "a86712cf49d16caa46d99074913c90c3eee83afce427c019482f0d33e0cc0171" }, + { 5034000, "009bc40e99e723f71c5ac712c82975e3f83189c973649b7b534de22a2ca9cd4a" }, + { 5035000, "b6074805070f0742f3605f957125b48bcc5ec7b8573f8fc5839db115d560f53a" }, + { 5036000, "2d6c8279e971bc4d7289a7d79d2f9c4156b941fc4b35bb347956360bbbbd0814" }, + { 5037000, "1092012c1760849a71aadd330d709498bbe27f376e4e47f3f4af3aa356d4c1a3" }, + { 5038000, "ded5b36efeff4af671b8f2c888a23a38541705a71f3e4e718c6b361a14adda4b" }, + { 5039000, "48fa8210b4b6003cd1aa3b3828b84eb432bbb6ab17fd46ba846e99f923586c6c" }, + { 5040000, "2f1e6b6794136070cd735e3c234878077db887a7889879c1c390f82d9a2b1ace" }, + { 5041000, "211c26f4c772d08f794586f296618ac1fcadd4746311f83e32a6617782c70eff" }, + { 5042000, "d9de001a76536bf0b164c5e951b27a79b80982473f06cb40e8e89c6771d070b4" }, + { 5043000, "efca8255dc93a21d47584e4fa336c747eb3109c0654410a94fb051fb34de6abf" }, + { 5044000, "2e0dcd652b1b42a9c51b1dbae8cef2778a99e081f7643235cc0311b3b4ffa988" }, + { 5045000, "ff91f687ac80fdcbd61b4713a8481fca7d2db5e9c0ac21db1bdebfc802dd6419" }, + { 5046000, "f5d362d33525cb367ce1a9c1c6eb4d18159edfbd7886b832199e932a062fb191" }, + { 5047000, "b97e884047066133e29577646f51ba8d190213b3ce36c946b3363b5925bf571b" }, + { 5048000, "8659ad8fe3941254ad7501c2c2295bc2ec0892557f192530a826595720e112bb" }, + { 5049000, "0c3f80f413e223623465fe408648c84dabb993bd62497ecbb0bef1dcb8b0e92f" }, + { 5050000, "f59d046e63446c0bdd60635f054867f997aeb3a9db4e740d5ed288249601aa7b" }, + { 5051000, "c97f24608462365927623d84344342f6e2c1715b6541da18f1a584f21032c8ec" }, + { 5052000, "57662990169e5cc716793ee6553f36bd8261a47d0aa4e84445922e59b49e99ab" }, + { 5053000, "a65772ce06b5617d1394a6c862703fafd2e61fa62faadd421351fe77d9cd5d98" }, + { 5054000, "2dba8c41a9ac101cb7a82bdc424c576967dca34964010814afb35b2b241501f4" }, + { 5055000, "d7e43519a20b5a52e3cf0f56950b74a1dd9c8929811b73a4e37d959ff90847d9" }, + { 5056000, "3959a91ef4083251a1d4e20c86678254b3da5fba13539df0996cdbcf38e10635" }, + { 5057000, "9eeebac70748bc7311da418fbbcdcdc53b9ff1267abeb0c37d277ebb4f07e6e6" }, + { 5058000, "9b4eac71ca2626b4677eefbe9dd88424264f5a69b9f49b41724004203bba83f2" }, + { 5059000, "90c94e1971aa462d7e9e3b29eb7f964be4106dcb5de55c5641846394c384a3c7" }, + { 5060000, "8c8735efa8bab7e2a9d9f5cb76d9bebf7eeda797f693d3d49ca860c43121000e" }, + { 5061000, "31f226d75a2db51c0287f472f1c8043a25432530f0bc2fcb812683b5718dd2fe" }, + { 5062000, "55cd18ef057cd4f59028080113548e1f5af9f7926c88a188cab105719c80e2e2" }, + { 5063000, "3a7605f7417fa971fda00182b5883b61338985f99022f19fc5c7569595e38569" }, + { 5064000, "921f44e595480b6cd9e98a36ceeef21f0798f73e24d059ae493e441cc06cc587" }, + { 5065000, "733acad0c2bc01fef8c4f677893134490333f0fdc87f07d0872b8b001735975c" }, + { 5066000, "a0d97bd9196e4ced5f72da09dc0643fc8de9b6c493eef8bd7bc3e1fe7b5aa0ab" }, + { 5067000, "a144c834c32a5f0122cc010d455bfa56aaab7820057bea8be55a7d8cd39e0c86" }, + { 5068000, "4a7ad1d01d93aed634f7de6ca054d5a3f86d7790b30cc4d5d0319a9f484dee4f" }, + { 5069000, "934127ea9c5084636c15967877c4703e51081b55c4c9ad27b55aa56050c86b73" }, + { 5070000, "878c9e974747f4750a1dcf5eebfb34a6c3645c0859b28fa523de4a62f3e4b2ea" }, + { 5071000, "aa319a39054baff1119224df3240b2b75588c6926503092164fcb28db20f06a2" }, + { 5072000, "481d4382fdbbe14902945a0ffb0e7f423160eef96983c75a6d0c1e7a34a86fa1" }, + { 5073000, "e766a85f0b8aaf2b1ed1fb38287b166b28c30150c7f04bfaad0669529625e549" }, + { 5074000, "6d366e3e52cb513a8ba10bee719b103678ddd775136997fecb920711db29f59a" }, + { 5075000, "fc9f5bd58d4f0c591c7555dc438ccf837d018644397311fd08480132e691355e" }, + { 5076000, "b0799c950dfb428b55c99b0e24944c18b9df685a042ac8f1109d1c855533d825" }, + { 5077000, "6d079c5032eae72a7acc636534a7c5f5f32d1058e4b3b0165a88fe27fa63ce69" }, + { 5078000, "885b30e1b8208114ed2e14c9aba1550b47fc7760dea2691036cec9ba87a69d44" }, + { 5079000, "61c4cc21eb462f5aa70628f67c342bac2c7085436067554d461a31492dd8e6ca" }, + { 5080000, "43d722a7b1ac6bd432fb2cfc9c8945250fbf6da8184245c4b3e80f0fe3323db7" }, + { 5081000, "55de0571ba19dca2b3c8dcc3a7025bda7f7a317bc9a82843eac8e9e581169d89" }, + { 5082000, "292d6649020683615655e190c002a4f68d3aa28f862532090204dd8e5e3d3d7e" }, + { 5083000, "9ae1d3718facd4642f966356d08fae538198336bb1c288ece9aa49c9723dda70" }, + { 5084000, "4300385aff3df90832ecb2d5484a33eadba88e00de8505986a678800bf9cf724" }, + { 5085000, "3fe7ed0f5bfa041eb7f187b16c9a2c78b46e08e49c259c5b3ed74b6ad6eb94b8" }, + { 5086000, "30f28cbb37844141b1cf7dcdc10e6eed42f0b90c357fca8bfcc94bc3c743fe51" }, + { 5087000, "ec1bc7c60e28e599ac707f06773ee1090a827521bc37cba31ab7762f04910a83" }, + { 5088000, "d73808adbc728e06caeb0dbd89f022a51acd5427b4d8a1b8225bd6cbb46360cd" }, + { 5089000, "277e2f1ba75f09299692a21f8a91b708ac9159cfda8530ae86b3a8c6e1251186" }, + { 5090000, "a72f5f4c4a7aabd9eecf7486d8fc15c38573a82c75175d132864cd7ba30df6fa" }, + { 5091000, "b9a65c9f354fa2270c0898064f062f5eb606ee688446572aedf7e9ee3942aae7" }, + { 5092000, "83e7ac4329c73241b9f5a4935a6fee2dd6c59c3ce6ea8ae2a2972cb9ad3126a3" }, + { 5093000, "b26dad27767f882649f98e18813c482f8e80da7534acdb2a99432d1784eefea3" }, + { 5094000, "5d4058d5f29fa347331ae984cd605c71a5bea8682ef95d47663fcdbacf253646" }, + { 5095000, "d9cda7775a92a3be3b0be688128ddefcbe036ea2a7c645217313e945b72b8a40" }, + { 5096000, "f2a5305b029c2a996464f6a5e47e871d835cb3676653c1ded0f151e63e2eefdd" }, + { 5097000, "ac675688c77b203b62df8d65d4ad7bb0b634a3d3be8157356b3613d7883c870b" }, + { 5098000, "f3c45a65b9a87e553499abd1f9bd4e1a91df884eb6744ca6f01aaedda93d6aaa" }, + { 5099000, "412fbd4f3a22d8704f2ede1b6c858f91f6b2f5578752c35afe71ebe0a8704d57" }, + { 5100000, "d9a205a42d72c7d005ce93391a0e2c32d50aeeedfbdef51e30aec7dff18e2276" }, + { 5101000, "486065dab27289362518c0dff663ba098397995d57fe626053bc3667fe5db77d" }, + { 5102000, "12b4f9f0b908aeb3d2c812867f7bb7786f73e1639999545824a5faf8eb72dfb0" }, + { 5103000, "5d99939e6d001bdf41694770223a214a68fe7912e0bdd25c4eb9881c6da34be4" }, + { 5104000, "a91666269f445b63b2c823e6d3cec797543a612f2a18a2b0f6396c16c517fe56" }, + { 5105000, "13655c46ed04a8b0ece9f106e8d07167ae4f7763dedc5446a377c216973e6aed" }, + { 5106000, "c28939f319c50d337f1fd90ca00db871e76fcdfb2173d9b7dc07778bc1099755" }, + { 5107000, "76693e1687564061617e59a684b712a92e711566668cebe5965d7a3e07aedec7" }, + { 5108000, "06866e515939bfc0e9b4e35188a706826eaab6e871b672420e03dedc5809bceb" }, + { 5109000, "9d6a0eda103b70049a3a178fb6efa3585241e8d601927a9ea2252ad203ca9088" }, + { 5110000, "30de89459d226a62702ba7d2963b49ab83df628494800b7dcc4c139d15f2cf8a" }, + { 5111000, "49117da75ad88a743a97d70eea30bc80c4964f6ec97430aa8eb89aecf6487733" }, + { 5112000, "098a016ffb38d36c5530fde28930258d09016b081af8be9f581558737d469dad" }, + { 5113000, "a89d0808378fa05009ab580241afe3c33fb14f61f196c8e256beae134445a757" }, + { 5114000, "0321bdb45ac9e949d4c53972ed06eb12f55cb5d324ee0cd3bdf339452e45eed6" }, + { 5115000, "4c58136d43c8f100da6077fe51fc439821ddeb75d00a3d117dad074aafb29769" }, + { 5116000, "985de93c0cea79e45891391e28fbcd677cd47e19a0c9bb0ed5a12a57e04a06da" }, + { 5117000, "280a6d711943c0856c2123d4ea75a47baa88c9f01c3a9bec854d426d27679244" }, + { 5118000, "dc35eba31cfa9127f512a8ebcee58e898d513bd14f28ed2b3dd027bf02f7089f" }, + { 5119000, "b2499b1a480a83c85276f6d711d8616a78f79264e96e18bb0687319db00d5dbd" }, + { 5120000, "9f303e8d5b12f52e8cc74402a01a3cc3105a3037eb8ad99588432c644e83fbe9" }, + { 5121000, "ec9eb27f8733c42c6d30919e092e591643e7d5288bb58a121b276b7e4e3881d1" }, + { 5122000, "393d29b78cac21e29c92480ffdce8ee223388251cc34b26f5017003e84a9a4c9" }, + { 5123000, "9423704127f9c29eeea671ec85776d5d61be8c9c065731d32db068e94f5989b9" }, + { 5124000, "10967bcc622972b94a01e2a2606a2fcffbfd209f6a3ef7fee53da9b2023cb305" }, + { 5125000, "9385d3e58bdba12e56cdc173046082a44a928d2b211c33fc1263891e51f589d7" }, + { 5126000, "e79ba6afb5603e9807281fb13cb9f8fc5edce1ee86c68257398e3f66817ff7e2" }, + { 5127000, "7483e60db52f2dc9ab08335f625d687ba390b61858e258d6af724b8825459378" }, + { 5128000, "d02ffa320c5f5e5fc0e143f863a25241f565a603c4442f3f5d70ee364fa9d14d" }, + { 5129000, "3604604333d11dca5ab84c43bd30dcd5a151225fc1f499f1d2ddfa2886326e5d" }, + { 5130000, "b7305de7d8df94ca45381d0bf8e4dad33462c5d26cf7a0f839ba000c59e15ff6" }, + { 5131000, "0622a3aed15c15e9822cd3265a3d17f3f167a8c4e40d562e0f6daf014c1e9881" }, + { 5132000, "7f65dd68d062a5113ad527d4d358ac775493c31f504ff7244f4a9dc8bd230d89" }, + { 5133000, "ec5fcc48e4464605e92b5778f30f4426d341b92e275ac749d160d49d9524a8ff" }, + { 5134000, "cc6d6d4461a9b435d608a8e3fcf8c7c0bdd3183de3e2edff85079d2a8ac8988c" }, + { 5135000, "90360a57344a47047ca1c758bed95abefb0313e10cdc07c93a0dd4e0e750a8b0" }, + { 5136000, "01b89dcc538a6220989e2dd99c739985e58b96a7df9072610c0ac83bb713ec63" }, + { 5137000, "d160e11243fb2634657930efeaa72c7c1f1d05fe609e694d8cc833742fec58a1" }, + { 5138000, "b0e39d4510915cfdc9e67ad33de40d426cffa15aec5ac5bf72d36590cd6fd1a2" }, + { 5139000, "246050d05c63687f5743044063d8cb478fce538e23510e3e253ade455911590c" }, + { 5140000, "a286a51be9924530ee6a7630336bb95819611a6a807cd5d2162f0d065a694ea9" }, + { 5141000, "e66c593c17ed3fac60a501114cbaeaa8c1b6fd1c1da70cb411f9f6bcf77039ed" }, + { 5142000, "f392e9f8e9344147697d224c2bcd8f1ed4229273c0f557bdfb06806b4a7aa028" }, + { 5143000, "c7c1dd946265d5fb571887948088327b16d463b4b5c119846c5ffbd294aa285f" }, + { 5144000, "71fb349f16f518e9e907e6dc414770e1e8d3a5a327e1b78346cabe0e11752dc5" }, + { 5145000, "fe2891ce942c4f387f56a4e16000d3c6a18810b718694250187634a9fca23f23" }, + { 5146000, "e1c4b970067c1e9254344010b27e6ae15501cb73557afe143d9472f6e848daf0" }, + { 5147000, "682fb9a8febe99e0eb101ca1fa54aafc15dea1a64122c51d6d30a86cca426642" }, + { 5148000, "d02f55af8cc7c04ab7db1e72e90b41f65175ee88f926fc7a5db3f62092014f55" }, + { 5149000, "d0d70c79cb265f31a4747cc4819b1714baacffa4318cca446ff1647bd380d0a8" }, + { 5150000, "b8a469257e66e64005d384bea7625399d7c27284c74e70fe5032fecd2a794be9" }, + { 5151000, "3fcabf4f78aea749844a155925575609e654b01ed9cf78d7902c49e4522da325" }, + { 5152000, "de0f2f693b14c382ed275979fffadb1545b3a9bcb49ce8d59fd7c2805c1378ef" }, + { 5153000, "a785045ec8ec486bbc603c67c2f9e0fbd0e3218d411d86fbd2956e8c939878b1" }, + { 5154000, "798622e50cde6f7307c883766e16884a6f1b2256c150bf7eb7d7b8b7734bca1f" }, + { 5155000, "11b612fd740e9eeec9e12185d054dc9a4cf7d46f77e09a98b74b9e2b4ef8fe1e" }, + { 5156000, "d7b190d6e73e2299ca0e792fc1106d6a784c4f191f9509192df4d689fae50201" }, + { 5157000, "7cfcf3ed5ead9c8f7fa3ef8742e23dfa24dc86afb3a9acc8ae6b81d4c65f32e5" }, + { 5158000, "e07379821e9ad9cc14792f20c4153ab00d23d54d5f0608fff140c14bc86f2050" }, + { 5159000, "4eb855d847702aa2400203a9f5944d061b2d0af79326aa7a4a3780cb6983d198" }, + { 5160000, "2b95bdb29dfffe73d59058422f1e279c665b16dfcb5669d1a22f3ded3de2085a" }, + { 5161000, "9da960b07bec88cecb3c73caf86393c52371ef41653ec2479efcfb04ddac8ec8" }, + { 5162000, "1e5e80f5507cd9c2b76571a5215feaf4b411eb2360915f17f55483ce49d2a9f3" }, + { 5163000, "0706f7161895e58f30d48550f6e1fcb34144ada66989306c9cf1456687a1e5d8" }, + { 5164000, "3b71d24045946aac400dfe764fde78dca53f1ddc30a1fe02b627c5a26fa7bf89" }, + { 5165000, "d6e666cff139075f53b0630376f4b1b0c28769192f30074caeb21f7380e2da7f" }, + { 5166000, "c6a6ce3bbd3283287d4513db63f7788a16070384efc3c3f994d590f44b3bda8d" }, + { 5167000, "dcd6f602dd8aeaba60d5d11ac86e9989ed00547c0c4072a4bf1be1ecdf0af798" }, + { 5168000, "86806335945b8d2ac7a581bf555926c4c79546379e49b693f0fda9fd23326589" }, + { 5169000, "e7d65d1af52d5fe206b3781726ee695ff07d56514d0570dd9cfe445425d51e30" }, + { 5170000, "f9af314a616a2fdb05701ce27b80daa8f5a0b9dc90146d6b5247d1057410237f" }, + { 5171000, "b670c6b4f66e3afcb07f5ca72aabd6c7f3fca15a6fe8e19157ede7dba3bb0a0c" }, + { 5172000, "f1870392261afb669174ab8a80482de53ea385569082635e1984d892a51bbdf5" }, + { 5173000, "e5a95e270be8ea36c208002f69da3bbed12c65f4dadea523161b97ead0b6453d" }, + { 5174000, "4fe0e637bb4b3714ba80b31ad3d8b9f39546c028e38191cc05162bba26b99f15" }, + { 5175000, "9274b79620c26cb3f3209f0209c801749b4bdd7312616a77d610b239dcaa43cb" }, + { 5176000, "4422fc28c365ce7352c6b94026e0b1e5094797271167173d69ba540560b05891" }, + { 5177000, "cc6cafd2b236ee778f00dca8eb49fba575b029e022f0d1bc63e51347604c2c74" }, + { 5178000, "627d5a0c795104a9bee2a66bc6e81a5f436e4b3b9410e01a0c68f4587304e35d" }, + { 5179000, "e0da3fc8fa644750761ccd565523e2f66cc790a1956c8cfa7024ba7fab49957e" }, + { 5180000, "d86fc80271793a1824d79566443155ad31d010f5ea6577aa5fef8a5cc36d0e8c" }, + { 5181000, "acb7153788dcac468b240d56715d30ff7164d5131bf6c8dae5055e7375a36687" }, + { 5182000, "c2ac6068442f214e6f187be3fcb72d04d89f1a742e979b002279eca9585ff539" }, + { 5183000, "3395a50b8dce0f599496005456c89e51cfd46ea8bcb90298e50e117ac4d0a563" }, + { 5184000, "56aedaddfa37b4bae80b6648064d2b3f4ed5f1eebd2ef6df139c5d54c11864fc" }, + { 5185000, "07281711f34e034917bb48768bc131b5a0c9cbecf829ee680b1bfbc9b8f1f1af" }, + { 5186000, "814a507e9a1877cbf5dec2bf239fa804f3d7c32f25a3dc5fc8e01fc33588aa5d" }, + { 5187000, "2a2211af39dabe20ccea354d996a5bcfdf8472df5796aebacc3be00ee9a67d26" }, + { 5188000, "46a5c9f4c4211ea2857d6581c9d9dded7515911d8a74d20588b3406c27451e2d" }, + { 5189000, "847056bca80c986903fc60eec0b8f280f974197ef35364f5dfe03f9f02912805" }, + { 5190000, "65adae3958f4f99d19167659c2425e37ca2bd3866ff75e17f8bf3d3fd5f0a0d3" }, + { 5191000, "1e685d230984c0bbd668daf7cf0b7307764fcd73a3c925bd4e82dee99422dcaf" }, + { 5192000, "721100ed92746a717a1e06fb01d0bf671619a30e78de197e7d4d55cb90d96144" }, + { 5193000, "66bcf39c3664571f774ce8166c084b56b216f32d2a9b5026ffb412a9f5d716a2" }, + { 5194000, "fe78b43309f3eec134afc6b8c1ee6131433502bf2c4b7e46d36993e5e8267100" }, + { 5195000, "394ab415e7aa4e8711e21e37db64d7eb64a01a3a1da212b027bf38caa5aea34b" }, + { 5196000, "c792520d6fa59c705e5ee4ff7b03b57c377c25095667bb74bed00781f1348f0f" }, + { 5197000, "6f79644c284d67b89a2081c23c4080aa92c8cd099170d2879b2b9cdb0af3a3c2" }, + { 5198000, "e316edf26f97ccd6a87d7ff9f68c12c65077650ff33193fa488c7d2717a559a7" }, + { 5199000, "52010bc84d103db2842af00dfc8e91acf68dbf8ed75d7912de2038a9ce740357" }, + { 5200000, "3596668ba986f86e7ec94f1a2e33f36c744bdcc83dd372f7fff3910890adce65" }, + { 5201000, "5c68622ac6198b2ee7bb67e37fc4290897b81771e7d6c70a9eb05dc80b2af4dc" }, + { 5202000, "13bd95e31778c970d434d065d61036884d62a2576dc2cb41944120e96b03e77f" }, + { 5203000, "11a5a31aa4485b0104845fa5a7fcb247ca3e3973484b368b556813c42bdb4139" }, + { 5204000, "d3df36e2d3fd952d0c6f87bb8d1d921575b657b1cb651b430c379c1d8668af88" }, + { 5205000, "ff8dd98340cff7c8f09f5f82563f4167e17864568b79e8ee43886e5970d0f0df" }, + { 5206000, "6cb5ce7b6a50f09c9ba81ba9947e56b5df73ac23e78cb604a320a5df34ff1987" }, + { 5207000, "9faf52656bbefd426baacd389ddd98e5653777f4fda93d7a9dde0111b8c0da15" }, + { 5208000, "17a69484d2043cef4e9bd8faf53882f4fa7f959d240c1e1af05d218f58da1da9" }, + { 5209000, "cf48b95d8aa565dbc6ad862fad9d6274a5717a4d1fb786042cdd2db10d7ef394" }, + { 5210000, "24cafeee167c7487cdc5c7cc020c7d49830c4a191a6b73e6b96c89d105149b79" }, + { 5211000, "46d23543f94e773a1ed72300f1bf5297f90daeec7deeb0f7e0d09658177903c6" }, + { 5212000, "b58c4913cb18c67570b037a56d76b0b6f5f02c20f18696789f03bc61ece72644" }, + { 5213000, "a7952c656b87e3383797b502200b734b4dc370a66ec2bf4627696a49e7910847" }, + { 5214000, "4094e3cea6239cc664df2e25f9e272ea1b212977303f53103045457cfbdba10f" }, + { 5215000, "1c54408b34eea526ea2642a840f985261c0ecbcf1003efb26f4204301919704e" }, + { 5216000, "03430578dc5c424ef2372c8456bd1cb55d000592b9d715130a3406c07c88ccf7" }, + { 5217000, "2823facf5daccc2b69beeed1abbac2218b04d034c2ce8df94788f65b0054837a" }, + { 5218000, "831a320c51ae7a3eefe24e0e8b14d770a935ac085636df58983affb6ba56e283" }, + { 5219000, "814603a5fde1946af8817d5ab05b8e2ced09cd38b57992fff8761bb447aadec2" }, + { 5220000, "f1ce1684cf3ee96fcbe59fb55d0ebfed2dbb0c8225d2e87c0fd3df24ef13eace" }, + { 5221000, "01fd9d90eb94bcf27ce9ab0f825856397afa14952bfbdca3586009da4205c9fe" }, + { 5222000, "daa042c9a338f157a1243a6ac16e35fe8cc7efcd7fb540c11de98799372387b7" }, + { 5223000, "f69cfd177b2636726b46da7c0473cf4204f7c170b213f8976ad69286cc90b4dd" }, + { 5224000, "34568e3d95f51888e5c520c5b6421526f46ca2496d3a72b1847dd523d081dc72" }, + { 5225000, "0deb614b0c2e00d73b93fb30a2f7e0d47ef74b6d05884e1f4e9958f7a2f382ec" }, + { 5226000, "1a299c605ef118bb5a04a685173371ba19f656ac0981c5bf2138722b277d9a1d" }, + { 5227000, "c68062c2f514d95a50e92e4244685994193fc9c9db4eb235c5f617369681e561" }, + { 5228000, "5a1390157d86b2a3d10f68cfebdf67b6eb0ae53bd46e04eb94afcdbf3152a2e5" }, + { 5229000, "aa7a645ebdc4b299b3de81bd2028f358e665b75e4725a1f4ef9510a1e1ec9cf7" }, + { 5230000, "41eb4b268043313628cc4e7ca0ba298ceb997a18cc5314bcaed1b976139be9eb" }, + { 5231000, "a1a9cdcd9addcd7b36e52a7566ce289acb46727eef7d4fd760358ccef7eb7399" }, + { 5232000, "7ab0c1651efd375064cfd738cde77b1dc91d9edc5b2966233764dafd1062fca5" }, + { 5233000, "d69095f7cddd632549f4cc2d14093c7965c8285ed1f9e879a072531d93d23288" }, + { 5234000, "2d6742a400917d147fd2e7bb54cff66d520965bd96e7333d19fc52f35579c990" }, + { 5235000, "c9b7670b694246b599767d4229e62ea0e0593eecc6a8e0bd1bdc429890978fa6" }, + { 5236000, "e4421130f8d7123c17ac8995e54815d6ff17b0abc664836946e108926574aa8a" }, + { 5237000, "f440a5e49376e1ed79ed93675c8849929548955cca711f63facb0a5b9b874633" }, + { 5238000, "c002886dc9447059b21927650f0e78de4360580e99fae235c139cc9852eacff5" }, + { 5239000, "0d9af41651c7ed59fce5863bf45a7da0e83126d7c2a9eab8ece53064615e2203" }, + { 5240000, "9c2d6f92f7f32925824d27d8153cae3a0306fb09690a4106e46abbf0a16fba62" }, + { 5241000, "b308a903b6ec3fe3dd6e1a8ab8dc450a1e6a28b651412a01bc698b26f20ea2aa" }, + { 5242000, "5d091b962912ed67f0ceb4a4888de3b05780fb4fb9fa6b1f35b30a97cda706bc" }, + { 5243000, "90f9050bb9103967f5d14282c81250eb94f5235b54737a0fe5f7671f64ccef2f" }, + { 5244000, "cfd202bb99143fcf012f14d49c76ecfc18133010f50b69eb9bc2777d1e686b2e" }, + { 5245000, "0fe0887150d4e4379b213c24cb8fe470e7449d416b4e0a20070e3eda9384f2b2" }, + { 5246000, "b353cbee8e8e8779b62d5ff2d97a98c4af4070732ffd887ee73573e33daad0d6" }, + { 5247000, "28d35f969e6634417bcf09ae731197fd4e26458bc20221e94edf445527e0d194" }, + { 5248000, "8ad472a06b7424cce5bd871ae2484173894986a032522102c90d27d0c98773aa" }, + { 5249000, "030ee59bc440bd04477be29ccd9acab21e38c4b95dbfb975de5834af37d7bc5d" }, + { 5250000, "fc96e8394dd873ecc2fe4751825e52a01340d819b26dfad147f1add99622b7d3" }, + { 5251000, "08f7c7183cee9822869ab511efa691b9645c72210d51b4364728651966175f61" }, + { 5252000, "860dc75ae59206ce31719cdc942b2c18a58e382bf576225af481bfa9a6a22d06" }, + { 5253000, "dcc0c71e0fef788a05ba95813580f3e308f61088ab32ea63ac0a4f2660b0df0a" }, + { 5254000, "c3e182723f6565bcdd3f8e2a5a11c82c8510c28d919dfe9fb0e77c10faf98a12" }, + { 5255000, "a154f1919cb77bb8602b548466bf08573a3c6605b3c9f98beccdba8225762172" }, + { 5256000, "a5e0b9c8381b3b6c2214c01c4a9ccff30620026e508ea6891ce8552de59ad2ee" }, + { 5257000, "c6daac0a72c0fefeef742064c77e36083508e7aa58e721d6128dfd14880e623d" }, + { 5258000, "ad885257ce922bcc645796c24c1ba0cc11607687161b8c2de554667ba591e165" }, + { 5259000, "5c09d1ae40ed18cde36e97feeab753d15c6c7fc21f29e04c85f0556756b7c617" }, + { 5260000, "01b8f32ad9c498c780aba0855f4dc79fab2f785f9e157355ffdb5b8c44e123c0" }, + { 5261000, "a3644053750ac9fa7766ff76d0048d9cd779b541c594b67847e492f610c077cc" }, + { 5262000, "11af92bd791cc6e34a2e3d30f5fac353023dd0e12c1f515d1834a84713c242c0" }, + { 5263000, "04a16835ae4581b5a2a9218d195ba91c7c4f9572cd7f65eb771d4b8fa4fdf363" }, + { 5264000, "556933d0dc2a16118f867c7918fd5969498594d361209688f7839fa7d80d3f67" }, + { 5265000, "02ed73b0deb2f0049ae3eb0e7cb8ff82d4e1b7697fcf7f104e2cd5cd94823bd8" }, + { 5266000, "bc2ab84e9dcde1c5853a9c800102c0efac971a14559c3b3d010cd32be4067c26" }, + { 5267000, "21491fbaf7de0a5a609439bed891e3f209dc62595a2ef5af02a9a1f20690e9e5" }, + { 5268000, "fb1346f74d05b7128f55089df5339a449c15ced72803995c7d8e9b92c28482a6" }, + { 5269000, "b2b9c8dc96bebcc8ad93fac2f128edfa4754317bde943a2b0bfb76dabe24fada" }, + { 5270000, "526e82830ceb979146631f8961d2bf83459c7cf58eaf805304be665fdc6bfdc3" }, + { 5271000, "c250d2c83074707ac5cb2ce08b1943ceef4e2a182c5e33ab1eadf81f43b95efc" }, + { 5272000, "539d81b7917304014f31643064eb62ff2266aba24b55f22d894ccb5edaa196cc" }, + { 5273000, "c303b145421d65a6a1efb80fc318bc6ba6e09dee06c37f062487081db8ef0545" }, + { 5274000, "1c8fe68e45c96ebfb14f250c231a9f2920b120d609a9757fc37cc61e668c70cc" }, + { 5275000, "d5979fdd59aafdd50a40c50690e139289af123fbc86a420af9e72351e1bb2c8f" }, + { 5276000, "4d2c3980cba388e07409a46c91adb51e5c66a146beb0a957cf0742fc90a1aae5" }, + { 5277000, "c0bc19b7d2f41258dcb82d4486df984cfd46f77525e65a117fb93b0dbb13594e" }, + { 5278000, "7a039fdbf2343a63a4cbe029fa957da345cdad27751cfb41ffc814c0b5167578" }, + { 5279000, "4c718ec398f09b39dda69f617a32c9ecc0f3a2976a3b374ad9d7c7333c0e71ca" }, + { 5280000, "d963122fbe78a3c28101698cb7c05b34c4fb9406716aec94fd5add3e38117eab" }, + { 5281000, "85517272a30ece3c63ac3793d1a5299dec95b5d2245ad4f7055da3fd6699d19e" }, + { 5282000, "255820b1d986e15d1f44120fdbdd3c88faac17203b0524dca13ed8fc67bfb437" }, + { 5283000, "164e00f42f9f6608e262b6172ee99941f7289e7e036ef00c0bcbb6ea433fae99" }, + { 5284000, "f9cca9297f6c178fbddddcd54047ec42b21002898f2af850c4d5bed6dbeb212e" }, + { 5285000, "5eac694863b83b518174d79257bba5b4b27154a79ac0c77ce9fdb5f326e0388a" }, + { 5286000, "096faadecce9527b4b73b3cb7e5384e997ea5ec01a90045d23553787afbc3eaf" }, + { 5287000, "f91c79e47b3cf3ecd6eaec0b4e3417dea07856863038fb832cd2346b922d6f2b" }, + { 5288000, "775665db345cbceee9937ee99419c0ebe80d22079553d11e6b92a55abb7af595" }, + { 5289000, "19ebc47f2507d5984fdd70ded2978a2ad8e4e052b85620b8ebf9c1aef17618cf" }, + { 5290000, "a9228d1c491a126f2d166fc64cb4abaa591cd5ece2dc9bcd3c588516d8ff4003" }, + { 5291000, "0ebfa757ebb9ccb15e283b05600479f34382e0e444fe4c705330ae5edb101e15" }, + { 5292000, "e3cd39b22f39897e70646e5227cec355d415f5835caa86d1de24dd53085b0f78" }, + { 5293000, "92a207c3199ea7a7852468c6003e08266eaedd4b1f85988a1094c8d4210df249" }, + { 5294000, "461665b2d49c5221d51948f868876622e1ef9e4b445414573764255f8a84bb27" }, + { 5295000, "b9e555a30e85ad1e715371ff0bbf1c9a3cbfaf6e8a152dbf939c499e198f978e" }, + { 5296000, "c44ff989389a15cdba2907c058da3522d61768072cb1d9cd418edce7e8497e17" }, + { 5297000, "6cd72137e44bc18321b01ee97a7837eac0203b8dcab69a3dc89b103a4a3cc5c8" }, + { 5298000, "a1271b64bde6291202d17b702f88f198ee878167c3165284a62695e21a75eda0" }, + { 5299000, "64418bbcc99ae8effb6a80d1882177a49fdb49a8a0c7723dad58f19f09c7260b" }, + { 5300000, "1efa17e05359640ea5a1cec6b502627a7ffa090a9ddeeb2e326aae97f0ad295b" }, + { 5301000, "c7b413b5d23cebdfc4f0dc332946ab53401ee7631823284a28bd1be4b1ddce81" }, + { 5302000, "bc11251581d505666dd443a9254a02e607772a00ba4ec5a49cfc69a323e98a6a" }, + { 5303000, "fced1ed0576a66d1d2baf1154f4488b1535581d6adfd1b803a53e1db66cf5f88" }, + { 5304000, "3d738f5a3618f207ae41f2ab3b0d92114ce99480c5b2267c00847d435aac4210" }, + { 5305000, "e34b07467abc80adcd553f55a1a2855d23b048747c14d689c6f4bb8e2749aea2" }, + { 5306000, "554e06ae6af7c0f54272008776c4eaf2a7deb9879862279785d5565ca960efbb" }, + { 5307000, "e3550d05653d340353fedc39de68cea432cadf54913a29e34be5c54498f62196" }, + { 5308000, "fcb6b3781a5ca2044e2ec9dd713c54fc8cebed80c85ea5560330dc462dcbcd4d" }, + { 5309000, "273fc620688a617f79489f033f13e6f464148e9e6ca3377c84784ab88c77eabc" }, + { 5310000, "a40c17bc235ce8bd5d9b0ef77f6c86a4d09fddac428bc9bd1a658a48c3f020c3" }, + { 5311000, "3d05e74d5a6c423d0f8a7c3b50fad996096443c594290490e67d5055e8f3ba64" }, + { 5312000, "d699be834e91d34b336ae2c56cdc943d7a8e615ebaffb61793d941cfac34a1a9" }, + { 5313000, "befa26179b8b3354af634cac8d60a0d469a0fa7a3cd6c719e505caa190b62447" }, + { 5314000, "ca7291ef7c99e8afc6f58c1187fcadb65d367b2e053c747fcbadc7f2dc87ae72" }, + { 5315000, "881181355b7c74ef6fcadf080d963c55f7b2b23c442174869b1bb5f6766eb709" }, + { 5316000, "10ca9268c0b536e274c11f93fde934a27a337af632b6587c12a74c44f4b21537" }, + { 5317000, "787e7b229f8db1651ab741d7e4ff760e144f050e89ba8609cd7ffb34e5f5c98c" }, + { 5318000, "ac6a2a38371c1e517f8b777bdf2b5ccbe9341b8476a77a200fc68c47718e40c7" }, + { 5319000, "65f15e969b3373ab2956c90852595e0f325d3a8f78c5730a00fdd092a479e7b0" }, + { 5320000, "4685499fdc28dddd6db23c030375d22ceb1b5ec1b1eebece3029d5b1d674df27" }, + { 5321000, "117689ac787e7b8a0278f65d31f2161f8de556f13b67d82c3f035790b72ef335" }, + { 5322000, "9f213c0c1183cc849db9ca60b2738c266261ed8e06d887ecbfc4f3942aaba47c" }, + { 5323000, "9e59ef44764d4be1df53b81d7ef7375b180bf181c85d790ee6e8d092fa91978f" }, + { 5324000, "8daa3127a2ba51c3edac06dadaa55c2fed3d24b16eeeccb43983a6b7bafa31b0" }, + { 5325000, "6c5c84ebbd206dc4c491d36b74f44d8a97a2d98b98e93cda22b202feae900a70" }, + { 5326000, "8b06d09cc99590ca3b90de66091f0ea02c4bda5d344a2d34dacba4e9a74f40fe" }, + { 5327000, "063c363320539efa5b6b7da3e9df124beb075063aa5f94bc4a8670a62363efbb" }, + { 5328000, "44bd073f50b025400c503be08af7d1297ecf78ba3f4f6fb5db1b1a5a97de48cc" }, + { 5329000, "09cd30931b8828d8111f8974ae79aef05d65afd8ef60877c62ed771b04096264" }, + { 5330000, "921ce727684a6de46b40f703ceb78226a4e0113ab9566b127f55f6dfd37fbb0f" }, + { 5331000, "1df31dfde6a7fb5641073538f29e87b75cf566cbc29a7f18a7f22105c18051d4" }, + { 5332000, "a5c4c042466215d08c806be5c64382349509ddcbdb8b8c04983e4f1e91551812" }, + { 5333000, "ff99a0610da261849a943c94b819b7bd1f8bf7b9c638a8b1d0d60a037ea64969" }, + { 5334000, "5292c3fcf84792e87cd9fad40d101f8b707e61087bd4d9d911071a82668e90fa" }, + { 5335000, "0a7ec01d00e11efa16487447b83e77f4e8a094865cb378602d4726f5a3fc8c3e" }, + { 5336000, "dce4cc15c72e601566ef48f64a3b6fc82f57b74403fcb40373173eb99eca3a5e" }, + { 5337000, "2a8d45ca0e90b6f19156e4c14034470f01bac61849b2a49f39929e6e6f2ac530" }, + { 5338000, "0fab2e36a9fad9bd1c57717513edb50f82b29788ef429dbaeb6ea2e71059637c" }, + { 5339000, "191a45b2d5c1032ec6429c63819421ad47c0f48d5cad105b12110932b8a46d8a" }, + { 5340000, "797c38dd1dbaa596a33e264a64ec18b8fa37375ea1d6c7cf1b2bc10d2713a891" }, + { 5341000, "b790a3d3ea57755be631661e2884e9a8e7392f629a9e933810cbaf809e799664" }, + { 5342000, "925f0a1dc2095d32a07ebde2fd5817e0920cdbf7a124211694b956be0fa89628" }, + { 5343000, "2f48850c0afe381989b4909f46b0b88c049461705e93617db5a8611701aebc55" }, + { 5344000, "013e72bd588928e20cee2413fe1d5ebfdc468c2481c80e9fb31bf7ac386318fe" }, + { 5345000, "f7bb295dcbf931580dc82f07e5716a239ce47bca92eedb1752fe800fb975947b" }, + { 5346000, "2674fcff5775d7c020243d0fb86aa72fdabe42d3467c7aa210b226e387a15598" }, + { 5347000, "4ff64f84ea538ed5bb1f04a903eb66e4d3a5d54f23e66c1a96b7b495bff7df55" }, + { 5348000, "31e23d1c62e981392d65f2db532ab97e7806ab2d58141e257d5e01c9052f17ab" }, + { 5349000, "f0a9fbace1e5849f9c275cb414de69659a7d23ab34384e3d56b4d103a6746fff" }, + { 5350000, "f2c9da46735f7a934e0ddf55e71e454c22d0d0c3618e93ab04c229989b4f0b32" }, + { 5351000, "b131074ce0ea635c42b5967602f7d38e65aadf724bff2e3cfce7b2f1af3c8931" }, + { 5352000, "e61e4cface9e637262db0be334e40d81db88681bef38bc4e12a17c8527627bc6" }, + { 5353000, "0a6a98b4917c5cec314945ea4114cb436de0c3f529d4ce521c610ddd983fdcdc" }, + { 5354000, "81085432c5d6c9f73c85ebfd037ea991cbae70f85f607d098896e794dd91648a" }, + { 5355000, "5f7e09f17f3299ce79e306101146655e5a72abb62ae389df82cb8d1458abd699" }, + { 5356000, "a6ca8079646151d5435567ea2d21214bb5de669e6884a722c2de7e62311926b7" }, + { 5357000, "1d9d3fe0872cadfca1e15515b5b521e2449827a826113ce87cfe5e327ebfeacf" }, + { 5358000, "eab6d0b83b4833310e1cdfe9be85be1fbcd10def07446799f454efaefade761e" }, + { 5359000, "aae85baae3a476d04f0ffc5111b367b55e80c054efedb817da67a6b7b44b16c9" }, + { 5360000, "bf5849c53be86aaeca8b628a19bb625eef4fb49122c1da0b4494f96745043fca" }, + { 5361000, "a803451121a58b49dc187bb24382fd54db3bb2ada6e6f8b62faaee8bef318b2f" }, + { 5362000, "c28437e20b292b4d4c8eb9f8938f6432e411d8fe3c6df7d18a6ab28f9083c0df" }, + { 5363000, "38b805743ab61ece65ab57927eaaaef17ab39962fa17545a0de5cf24b4f7e5d9" }, + { 5364000, "82c5631388751afc169625ba51718a954c0ea68063c9b4e0dc247c96342816da" }, + { 5365000, "bb0fc197ef0fa35212638bc83eb25b64c86766c3b1b14a953e4e37304351a347" }, + { 5366000, "00ab6068d2a15a4d7156c90a55bb9e9fc3d52b7dc8d35e97749a8d4ec05216aa" }, + { 5367000, "b36860a8985783bd3b9713e5d18412b010e784509fa92d6ebf1e088033ddf97a" }, + { 5368000, "d8e410b62fecc1a5759997c9e7e44d1a6e686a7abbf258727646ba93432ff640" }, + { 5369000, "b74972943d1212fda32351c10a44cbadf90ee617de1fe483676d8cf76bf010c4" }, + { 5370000, "7ec833b3f1da886ba3172637af4f1062410c44bc46c30c5af7a46d30224327fa" }, + { 5371000, "85eaa8196940207cf6a75cace58259701e232905a749f3ad65341a22baa68487" }, + { 5372000, "9dcf8ada8d8ac951d93983c9674cb015ac9bc84af72b113f275dde758e09bcf4" }, + { 5373000, "20856e8148d67f88403a647b81644f5f8d47e6a2d4778f725b8c2ea12a27945d" }, + { 5374000, "4acff15b8812a75e4c9cfb5ed49888cda357a6e187cf0cf9cdb03cdf5d77785e" }, + { 5375000, "a808dd5c2a9ca2dee8a927b2261620f77e8f0e822a64e70d6c2852284f0ff6f5" }, + { 5376000, "18db1001b1aae721fc16d8d2ef91aa3db66b11c920f3d8dabbaae3434434b04a" }, + { 5377000, "21484984aa1b6101952fa317e1b3e763408e0a6d64053ae4a2d2be375a84bb80" }, + { 5378000, "7287cce08fd3ab5f1b65acb1c21db04eb9794c748c4ccfed31be698f2288d6ab" }, + { 5379000, "c67d4e940aa379b3e42f5297f5d8d3cf5615e3b2e42e77753396a9b86a0663c9" }, + { 5380000, "2a7b569cd3d67d54f39b8bc7eebd908521e0fcddad837ab7f117fbeee4e5ec1f" }, + { 5381000, "33ef549449ac08d94535c9dd77dc1807c1c2b183df169b5512c35ee4ee5ad12b" }, + { 5382000, "ef6511e6730a119887dd3a579bd381668e5e5cb570e9e2015bc039c2564b66f9" }, + { 5383000, "8941d01163b836289c33b314c3bf5336424e3a833f3c38ad0124dc94002a4eb1" }, + { 5384000, "320ec6cbe943485cc6cba06e7bffe472f544ea87c649cb3aa12958864534fb40" }, + { 5385000, "56836c6f3452d711aaabe73b858dee0069fbf695977518e2e5eb312964bddf01" }, + { 5386000, "65a0eb21684d8900f8ac941412a51ce6e69f1fa39fc622673fb81263a1c7c2f0" }, + { 5387000, "f83f1e2f0e94affa065e1578d678cf0b6d89b2e2f0f15a491e7dc4484afa329a" }, + { 5388000, "73d54e4ed3a0e58867daaef0b28f67a60554b503979e77c6ec3a8666221b8864" }, + { 5389000, "5a58eb74031b81f6b7802fead4084ad5051827f8a363d858f311ac04a763cb49" }, + { 5390000, "6f3f0de9094fb51a452fca0f4d08ebf4cf6993dc3b3a6f174026f2f0be8fa76a" }, + { 5391000, "9768879896f521cdf2364ddaa15cdd98bb97aa6d0b0834081633677bd40b8010" }, + { 5392000, "46eeadd657f7992d92226a69bbc1ddb96fc8d63e724399a7b2d87132fa504dc6" }, + { 5393000, "528eda726ee9cec11694af642884ad81e1698b1230be2807009dbe0786ab765d" }, + { 5394000, "e2f72f839f09e051ea15148e4700220de04ebb79ba4ee20048c948769bdca2fe" }, + { 5395000, "804e715ee148c10013a712b10805b540f36a66d4402e73f684893124ba37965f" }, + { 5396000, "d71cbb4987f368c8451aa090607b707f521f19a98c604c3be02da15a1f814c6c" }, + { 5397000, "c1c8cdf18299992ae157c1900da5a445aa6260dcb33bcf9f3ee5ef0a607e93ce" }, + { 5398000, "5c7e0ae76eff51139df195799bb41cbb2274c18e243f35f1c510139a0df129d7" }, + { 5399000, "1122d0244cd78058e5bd3ac714f873823b41c61c6ee4f6b90d52322129321461" }, + { 5400000, "21956279c52e7f3ecf2c72b8ccd8e514ae54459e03b8b4fdcbb02a81e5916fab" }, + { 5401000, "1f458454d94d99c7c73136035ea522ee1ce3aa47f049567ba9a2fc704aeaf583" }, + { 5402000, "1bdd20d07e15346dfa73a7123ea06bdcc13b854693ee5a17d3f2c9702e06aa08" }, + { 5403000, "9fa37047e61dfb9a5d62f9fadabab29f208dfd6e1778bba86304440b4b26f521" }, + { 5404000, "f17f571ca40e9f66b3f0cce1f6b4333c3e159ca43dcec7ef28bdb3b242ecb692" }, + { 5405000, "99a1656017d730816eaeb327ef0257ef85615dfdb7b7b86a873971f83a864d8d" }, + { 5406000, "fa0c6f5a8ca56b944810f75b78e04e606336e2a786ecc90b726507eb9645446d" }, + { 5407000, "e16e26e3f08d8a0df5b1f3afd1c5e838ec7273a8781a0948403142f16dcd27da" }, + { 5408000, "7fe6d9648d19b7229919fbc1660e4770f9477444ef1a47eac11e09888822fac7" }, + { 5409000, "08e2d5104901c64ea5f44a4dc9485116bd07a94084d9ce09c775089fb4f21f31" }, + { 5410000, "f6aaa5c16b5c4b38792a71d0e08d655ce5e526a1c909254016e9f979951c9ea9" }, + { 5411000, "46e06c001417897d79f8bb77d0c3cc430bbe8604212ede9dbd97e3dda6896355" }, + { 5412000, "1eb76aa5af93a2f5cc2593486fa38ea44cf1c457ba2b442ec4e6702da6783a7a" }, + { 5413000, "bf51f157c677c6d09dd6821f1f71e2dcfe087c0bf75c3a6c069499fdc070c181" }, + { 5414000, "4c83577136a0633db0613b31c91c534ec69fc71d38a39f753b678ddc461259ce" }, + { 5415000, "3df11da409088f4b44a333ac9f814eb3f2e9d05a152e65e64f605f7d8edc093c" }, + { 5416000, "26f14dfd2ef097b40423855037d0f98025c1773f65af6beb01ccde02d719f34b" }, + { 5417000, "61e2454a3394aa6905321001c034b70fdcd6394330d5e8177c11d2d6085ee58b" }, + { 5418000, "cdf8b6df7ee3625446721921415fa570d3213e7a325a09636c1a9b26fb77f165" }, + { 5419000, "3ba37d57bc7f242783a6064446e5cd7944429bfe037fe98e2d42d9bb50432b70" }, + { 5420000, "cdd13daeec0ec8faea285b89a5950e997ef138027bbfef6865d506ece535b1c4" }, + { 5421000, "e904655a9511ecf9b878275dab96ad82009340970cba94cac10faff73da10af1" }, + { 5422000, "fafbed998b0edef1df81c2190db1c62f4542d1a2399424cf4e0bd3a8689e7f5f" }, + { 5423000, "a89eccf384acc67f934dad7d7ccd1b4403ab0d224e8b002a48a8a71eb9946352" }, + { 5424000, "754c707377fcae1f4613bfe72eb081810e7e1029b6cbba99c3b0a72ed971e07a" }, + { 5425000, "a36578936cb6e9ace6d3aee31c35c18da2768eab53177ec0d1a8b57494691ec0" }, + { 5426000, "3b39e0b8e3c6c8462422aab028f4aaba8fc60b450d614c8654acfee7c7ec3447" }, + { 5427000, "fe5e4c6307880d7323da35cd5e40abd04dbcf4ae078b725b97e1a74ab44470ba" }, + { 5428000, "ca8bd3e8905874cec5a0767a8bb61c671da6f8ca8cd37f2b2459c9a77b912849" }, + { 5429000, "4e41949a5d0346cb0a9a3d7e1e95f9a7fc28fe1b06a92a674d7aca5771dd617b" }, + { 5430000, "b2ffeac1e566e6a8fe89b78bf3670bccbec865ece7f5f5a32ef1b7965fb2d382" }, + { 5431000, "b5295612d4723f3d6bf9b7e58cd429c89708e82b6ec6f6ca2d341aec74430598" }, + { 5432000, "d59e9f1542df71808ae6f3048080ec80f29f9ca41aa0105734988b50f30c3f32" }, + { 5433000, "0226b5d74c31214e7db6eaeefc63722d039808e568ec65c680fd036b0c6861b9" }, + { 5434000, "d8fdcb4c42a3515de0f89ea5257cb739f2426a420dace7c20ffefc369d5a5198" }, + { 5435000, "aaf94ff587e2750cc4881fd6337493067ca1279b50266cdc57721bc18aa855d5" }, + { 5436000, "feb745128b58238f86283447427def67223bd35361fac38bd748878e4b23a59c" }, + { 5437000, "472be3180b50b1db1ce9a4bee6ba3439040a11d6def89bf221b61c604ae441c0" }, + { 5438000, "a94cb9d3d096d7b010570d3fc768f77b71c8606b27238fd67c8e31d161d394c4" }, + { 5439000, "79efa36310514aaf064cdc724f05dd7339f657628d66930ac3335818adc55cd2" }, + { 5440000, "eb3ee5af1469b0c5b55cee42a8b68c9b708dcdd7bebec595c02246b455145645" }, + { 5441000, "c1abe92fa04b0f18c427794be29fd649d582f8a9bfebb50bf595f6194085fc3b" }, + { 5442000, "f982e88aa94d5a3a1b49a75a86c4c671c86a2920336bea54ce44f9a53ccba3d6" }, + { 5443000, "dc1a7090fd42ab99f838c9460c5dfc3216435b62403a6a752c86721101bd3fb5" }, + { 5444000, "d503228eba1a10d124105e2cb64e880c3e67d4149a93e4df1c569c890e7b003a" }, + { 5445000, "d181f385b140bcf6083d60bfa84faf09c532ea924ac101f389934a737fd67e86" }, + { 5446000, "d91aad2785710977ba938d2e51420e877cff3f231fb2b21e8443ccfc8d3a527f" }, + { 5447000, "6bf8d3fb879bd6ff07faaf8351665ba0f39a0983954bad7000ea75fd71451973" }, + { 5448000, "193693f24302e4aa05b0e830313eae7362c7ababecc52356a31a5e60d203f31e" }, + { 5449000, "ca9e79086e0bbace545e15a3b4a75d0f5f267957ccff98c383aedb51f8f73eb8" }, + { 5450000, "fc19a8338643cb33128d72ca4fe0ef7248abaf7844a588564a9161ce5490fb20" }, + { 5451000, "a376c948d7d09674adeaa826a5922d03ac25e8e2e863fd18d2a634a00e60b007" }, + { 5452000, "4e272c85ba5c2c8eec983e9fef25127f6d6b60133944dd2744917ec748092191" }, + { 5453000, "8f883ba06b7ab3c5cba4be4de616cbe8b339fe3c8a49e1c76f30a6650ccd145e" }, + { 5454000, "de6695ab222b1a3da8351665d8d23d521844627ee02b26ce5f0c5d4c64f10cd9" }, + { 5455000, "de2477078733787abf450dc6baa329e02cda54284ecdaeaf28439db0b5e50ce2" }, + { 5456000, "16610347c85a1999b5e3886e2ff349a1d6bc5778ff5d719cdc7814fab3dd0956" }, + { 5457000, "ce26d9683ad2a45054c616d13f35f0339a868e22632a433b8d0c6c1d56daa198" }, + { 5458000, "0995438a7bafdec81ec4f5e7c00a952e4c35fe8486ba71686cadae44bc97b162" }, + { 5459000, "829be983cceaf13c2db8fb6d392f7dc907089e738b1d16671a53213e6bd2d8a9" }, + { 5460000, "341d736c40e6ea651c877678f428598cdcde5496f1cb24e5866ed8be7d44c32c" }, + { 5461000, "10fb12dbd286d0eee2c8427d9ba00aba9cfb5be9bbf4b516b863d271bdbbac3d" }, + { 5462000, "a07af8c380a4c6d260a3db52405183607f8c816b579530518a71ef02750cba79" }, + { 5463000, "df49ff37ccdcb86f04a26d38e4f652f41d3419148fe5675a3b37990268f74e12" }, + { 5464000, "59d7300f564b8c4d15f77c39afe5e876373cbb1a8c66642bd156b92e8702c4b3" }, + { 5465000, "94c793a0a30349889f72ee9af3d22ee8b85d02bb63c6b2e4b3640cd0ef825eaf" }, + { 5466000, "33badf3682ab073853bceb5fa903c9afa55ece3bb052a6e38bf36b8338d4327d" }, + { 5467000, "fd459334799102ffa335f6cfad9e033fdd4fb47d57f3a064bbe39b0992077529" }, + { 5468000, "a3844e993078e14f6bc9da2bb4975ead9f7a4d76b91bb3ed9676000460460b74" }, + { 5469000, "6566ce076df8d37d4da0858aa42da30295d12add76374b120b15c920a8d5698d" }, + { 5470000, "202e189e776d8b0d7d9245af6629d8f18c10ef69ebc8d73183a1b7269c04fd38" }, + { 5471000, "71b1b6acf22e6418e8a72f9d235dfb6abe72218782e699e19a1326cfe52a1183" }, + { 5472000, "5c4f230e84c21c25b8ba6b6f45d9fb426291397181f99aa27432559d503937c1" }, + { 5473000, "9a537f877c5302410f3b9f4dcfb491f75b11496a57fc86140712d8ce34ab941e" }, + { 5474000, "fda70f14c11ddc0ba38e44fabf7b42728fb042a749ce63d5d3fc425952897a40" }, + { 5475000, "d01d9850b5e6d6bff76ae3a441e93c671ff20ba7b066e2ea9d734b5d20fc2549" }, + { 5476000, "49d7a2291f05c2dd4648b507db42c3036759a8ac4e0bed40c1ffe05988ebdd07" }, + { 5477000, "164d76bfdc2376483923e67211a0e00dc439a25a682a2304fcd89238982d3c67" }, + { 5478000, "7ee3e2ffe4dd7ec1e2d27c2156cb7786c7c7361af0103aae626d115d2a67c2a5" }, + { 5479000, "57589e7e8d84c7cb1ecbf7fb019fde32b52e578dc8d1ee8dd665359fb97bd513" }, + { 5480000, "df6188f3a45eaaff78884c893a44ce7a43e20f34884ea0294ed955c36334a898" }, + { 5481000, "ad2b81299a1b0c88f04a0b987f80baad3a84bc8825b71ce9f7e01270f5a34665" }, + { 5482000, "c2568020147aff7b4bb23959282af7b246f55beaee949f1f0314fe8bf8bdd309" }, + { 5483000, "7d935836405f2eb2396e0f610ddba98d725046728ab90a79240d6565e57a665e" }, + { 5484000, "4e4e7414a61d20e2c3fbfddaaa68bdcaab58f5e9a4be5f97e5c0d471e5b13603" }, + { 5485000, "5c27eab3cb12b032c6fe2feb2cd1bf21ccab03d176c548df2f3a2f1d96220882" }, + { 5486000, "66dedff26c1ee597911ad991dc91de7ce92124811487d71a13a2dd894806af3a" }, + { 5487000, "30c9a19f24d8b0aa3a7e77e110f121ed7b6c7fc698788406465356b1794b0a36" }, + { 5488000, "f114fe39a0be967ef73faf932ef27f34283be12473f7fc0471ff4b9c198118bf" }, + { 5489000, "b51721c58addbd161a2c9a71d6890ac8d3d5bdee5b125638e5664df1f026c1dd" }, + { 5490000, "cae5a20122b0eb4f794e4644db39bb8b28575b79655e44ce3462f6d1d2ad8047" }, + { 5491000, "4ba8f644adaa11f704ed88625a50927f0adf7b9d64bd63bd57bdb680dfd177c0" }, + { 5492000, "f2b5e0ac5153a6cdc4b0f60b6dd8f55bfca186eb1bb28f61626a97cc463ea5f7" }, + { 5493000, "66ab2b2f248151d0ec91b4da55cdb63b7fc90e1da19def0c2cc0b35afcaaf846" }, + { 5494000, "e8bf884f9068da594d970832af4b00a2836f362898562a4264968167669f7a70" }, + { 5495000, "3edaa78db8271a1063ab1912c8b287aa97dff39b7a002fde5d7022592050ef56" }, + { 5496000, "2c2be01569515b2fd8b1af99906546a89ad5c791fa99dbfbe586da42d87dbd28" }, + { 5497000, "2c30a527be54ff4f4b30feef62bf3e229a9c3ff50377a3d02058b5b9f7e2b493" }, + { 5498000, "b468ed77421e900d2f8d14f9c337f9890725f31960cd5ded15c02a20fda926e4" }, + { 5499000, "6faa10ef38a1dc41bafee4395f142dbbb6149151e96b338e31f9101d4cd76f7b" }, + { 5500000, "0b2fa39ff57c3941a778f3ff18f8492bf841ee538949265756f739b58a597e53" }, + { 5501000, "4b2a8cf411dabad6b2bac64d334d587e2ff8da5368954c2bebc162ab05943e68" }, + { 5502000, "4ed0f1f2dbbabaed0cc65e18f767818c7f6a73bedc61fe074f09d02e03f8de7d" }, + { 5503000, "6cee032af37482de3b7d98e2be950a250164c1936bc18209e953f2480febd215" }, + { 5504000, "a992a12a5cd909fa80727a12d83a4ec885f820d921063f592641635f1b65bc19" }, + { 5505000, "21b725888f6e025794283876b5287ace2c3715b14b059c31becfce12d99aa106" }, + { 5506000, "a87683e62af7813abf9075918ca00f8f42d9aa995bd55123a96c00bba80691ec" }, + { 5507000, "6696b4cc2cd72859095cfb3a1366e005c9bd18b480d75df6bede8585e92a9407" }, + { 5508000, "643f4ce670358ae4bee5497c068000408e41f8a745da231d9f2c6fa1b7fee5e0" }, + { 5509000, "1d216b43a2cfb36e28a8f302f8a04573bd60a4a5f7476175f494034b665a18bf" }, + { 5510000, "25de9ed78f055abe21480ac39e674241fa4eca1eab64732509c977808cdd47d9" }, + { 5511000, "cdb06c5dcda30c58da3f4b9f08100bef843f8b464a13d96e2b10af8f0725733d" }, + { 5512000, "04632b44160722895b5422f493a81fafff3f164ddcdb9bb5741807f80f45de22" }, + { 5513000, "276f61a3ef3f615498a05626e1c122db1253e36a23df21e1cfc3790b1fa01f15" }, + { 5514000, "b56b35df5d86462348ecfe50b3bab5dfd34449cf8cf34d1e8337dd38e18eb82f" }, + { 5515000, "0cf8be6971adb8cf829cf86708f5901cfb1f7da18e484fc5b36b65f30cd45a39" }, + { 5516000, "c2e21fc5e4d9d57a12414b676be3b3926ce09b50281ebf75dbe541907d8901c9" }, + { 5517000, "c89f538270c846abec2cbe311e8f93821754c415dc8a3cf20c4b5f547250ebb1" }, + { 5518000, "282744a10c3a6d9d219671ac17daff5ee65f8c7d6e2140c48c96f13dc9579c95" }, + { 5519000, "def3d12e1e4034bb884d0d38e3092a0889a4eaa6712edceefa40f91f8a0719e9" }, + { 5520000, "1ff24fa1d9dcd7c41776ff87fac6b832bee8981d1fe8b65cc338fb5efede10e8" }, + { 5521000, "43a0b556441b0247291a17dfc319600f7cd66645e840c6c2e17272e543aad895" }, + { 5522000, "4a6022185f154a8623059290d8e9c09ac2e8f1eee9414516d477d747ef0df586" }, + { 5523000, "6d02346a84a9dfc45d8cf4eef457bf41224bec4665bec5b7d711ba0f5d83d991" }, + { 5524000, "2f69dd48662dc854a3c3c0c519275b366b86bea8fe845820763722f9309af52e" }, + { 5525000, "088516428a6f21306bc0c37b0934de94ee10164036d9f1b8d5998a7415655cbc" }, + { 5526000, "038520b594654b6854e81f758f0ba8f684577bfe2854514f36b8aa97b0ff8470" }, + { 5527000, "b5a882d6586b643a7e65723c7692a24c9f6cc129c6e0d3cfadda2ffebe9b2591" }, + { 5528000, "540e559ad2652ffbaa3c8c1c6d48fd1fd1b89e27dcd2363280a9525327b4c3d2" }, + { 5529000, "a37a01e8f16d596217d4e79bc3b01958b99b711c2155afb50392fa4e20f0dd19" }, + { 5530000, "38455ca91de6cf306ee463ad6b2db25325961931778361270953a8edbc3e1a94" }, + { 5531000, "4a8e53254bd514480a3b6b1e5d14d2454242ea4b891aa103541f559b27542394" }, + { 5532000, "a2bf9dbd7d8198c35ac02f5922123dd3469fea5dcf093fa1e93564fe6c3689a3" }, + { 5533000, "303c2ad45b2a4184beaa5649b36d744afaaf7c2403595e038d3468df46ded188" }, + { 5534000, "edbbaaf6072f6acb5e63974a37d92e0675fcb316251abda5fba075b163fbf920" }, + { 5535000, "1b6287490b0252a03452da8b12903f0a3c1cf16206e8a91b22f84decc3107baf" }, + { 5536000, "4483635c88610d6c708247875c981db64c5d8052abf6c2da85b2e5fe630fb8c1" }, + { 5537000, "a5ce69556c1cf41d89cf0a932756955f0417af061f1add84f17f2041da20be40" }, + { 5538000, "104eb3f78ec9320f9a8c98428434e985195c27399a61fd307994787a6401cfb5" }, + { 5539000, "eae9de497525d94f4ce055e258d3be82bb3fb004cf515d3afd9ef232f2a35882" }, + { 5540000, "7d3986f17150f49e2a24bb814743be6788441fbe02377fcacf5c89d8368ac416" }, + { 5541000, "d1cde1db85d0bd78e788cc6a1bc06e9a4688fc4cda105d5c538f63dc98d541b8" }, + { 5542000, "b348663002beaae006edc7caef916d154ae6c1b496ee20d7c165cef9843f3b5f" }, + { 5543000, "5c0ffed08927470c3e5ed3cc7ed09c62d12dcb8455e8c7919ce6b16189f5aab2" }, + { 5544000, "f27e1bb26e00519b095bd64c56113be9ffb23a1ff5bf5fb8332ccfd373be7de0" }, + { 5545000, "fb788d23abccd3015d6e6c48dbc5064a3408338c0313e32684f6b0ce6dce1ba5" }, + { 5546000, "494e77ae90cd832b398a22dd31f96fa5969a6b4f787b15a74716953f7edf22c0" }, + { 5547000, "dda3221e911bb4492a390a24d477d8908cdcba8c067359b4a7f46d0e936720f9" }, + { 5548000, "076e8ed8354403a4a0356d827fa151a46955d10766049d10e94afb49aa502136" }, + { 5549000, "db04d526b5444b235f4b2adb15b18823252e337ced355447a07358aed979a3f0" }, + { 5550000, "bb9a1bf26441f230b04b3bbfe5fc32ee35b6443cacac3f9b9edf32f5ea928fa7" }, + { 5551000, "5b5a9ccf692555ba72ce959ae210435b8bb410ff4fc27ee3d73263432c1b53d0" }, + { 5552000, "5debfa070e0ff9fe5972f46ab6648cfca1f13bee65ee0d7181811210e593f94f" }, + { 5553000, "3a9c54217be24caab51d2275d8774f4c6da8a5623ed24d9d59e88c501950c4ff" }, + { 5554000, "df5d9cfa4ac71dcc4e0fdfe70f589f92a9398965744b45bdd51c7e8472c29481" }, + { 5555000, "92a78e3c4d28a7eb02560a5e72fae81eec9a449c0c1fc2b9ecee81e65ae29787" }, + { 5556000, "357278b459fb36f091790c2d52518bbfc70c21937c62b4dca52699724e6a590c" }, + { 5557000, "1a127d2f7acbcc927d07295fb089268c8259e1df399f5f9575ecb95f17d54b74" }, + { 5558000, "76d2842270994702301d93425f46090563a2081a7d4632a6618873e13aa15b45" }, + { 5559000, "91a294a2df15ff0923fd3c67295e4e6effb96cb136109b55bf6e614bd35edbe1" }, + { 5560000, "d4158d7d21fbd60055a0b5cb780bb6d7dd67d02075ecab029be7286a011c0670" }, + { 5561000, "78d2242948ad223aa01e5eea95a584aa0c2b41d24d2dc42fb204e31a4a1afc20" }, + { 5562000, "dacd9ed94c648d60347c48002274d34793513a3c7b4d9072ddb5c0e115c8100b" }, + { 5563000, "6927a7884bda558f9b5d27177f6bb19e0284d6f04d789b1ba030a918ccae8243" }, + { 5564000, "d28229def359eb0a80f08cd881cf656fc0c783212be7bc6fe0daa4b9e100000e" }, + { 5565000, "847438d24687f2d5906860834a5d350d7dbdbe0169696312e4f605333c0a8c57" }, + { 5566000, "fa724d1a31e1777a1cad514234ea668a3009a8c7c348a54e4228a714606ebc37" }, + { 5567000, "26f831403f59d08a137a54645ff2397801e68fe61d83f171b8ca038122adfe22" }, + { 5568000, "3545a0937b564a7650e21c873cf3e12d09f9ec74bd964a94f3c368c116c19209" }, + { 5569000, "c57fd624e648dccf0c40aff75cf12011b7501c8f8fbe998916127beb3c11c2a0" }, + { 5570000, "c2e249344020136fcb351f4ae0599d2e19245050b82acaabe641d21bc82322e1" }, + { 5571000, "efa1d76ac10c14c7e951a24cc6535a6632a5074ace8e984e206919574bb71582" }, + { 5572000, "b43fa369e96c5cc6333433e11a737fc40f33811083e54b5d9a83fdf50cca4748" }, + { 5573000, "44715d9c36550a9a595663bc8f7781afd99aa8796b516c31416828be736a46f8" }, + { 5574000, "8cad62b7e8dfc8c87aea5343648fc88027c7c05351ab9d902119fb4fd71c514e" }, + { 5575000, "44bf3e50dde2e9165434ee48172b6190ee1cc2fa3fcd75c123f48fb4bd1d333d" }, + { 5576000, "4df747800d05da06267010dbe5933ceceafad44f68d757ec44ecd2b0762c3d2d" }, + { 5577000, "6f03a10557d27abfaf5ea2ec99fc4ed18488ba7680aa3a8fd9b6592db8ef072e" }, + { 5578000, "45cad03443b320aa0e37988461436aee29a05e5b130bd1be3d18624e6ffd39cc" }, + { 5579000, "7e73ec6c975aeeb6b6852d514aeb3c6e338acf9bc7aa33b6a8759f5ba0922f96" }, + { 5580000, "189d051ca9fe119ade5eb7e906a4cfbbbe142e6de49b31c12d24e571360c981b" }, + { 5581000, "2db4bed46ee0cc226d5add6c95fa18f05318c6e49d46c8617472b0533f4fcd8d" }, + { 5582000, "cfb281d42a188f2c8533c8ac43c58e2975121ed086f0d8ff0e751464b5f24283" }, + { 5583000, "67ccd0bbeb6127a46a21e110d97a75fda7b5a0bd4ad274285562c927ec4d10dd" }, + { 5584000, "9e02a834a5a74430c2b94e72f059c0f7fea7af6b554b8a6377032424d46fdbc5" }, + { 5585000, "3765577f7c53d57db535799a31cee0db07d9507e5c12ad6bf869ebfc91d67e05" }, + { 5586000, "2bd65ce137baaf2b08aabf57f0110ccb95096a0325a16bca160e2137285b80cf" }, + { 5587000, "db99ad0648b41a0e883291811de970952497167006db3e9312ede9148e52a981" }, + { 5588000, "e5400c3f0a42131e33fa0e39976e53be86111dfaa682e98fe2e221b09bff9713" }, + { 5589000, "cfc765fd7ba542a3759275a4265a5bf2dfb65ef86406fb5ce3afa94446c99507" }, + { 5590000, "ca5aa6587266842101196c26d90a6ceafaf1ee6f3f7b3a52fe71dd98b50ac626" }, + { 5591000, "f8766199193768df556f6691eaafb650958e5fb9a39f244309f153433179081f" }, + { 5592000, "a55dfc97af32df02a34cc45be261be8f728d85f009f8ecf290732b5380b726bc" }, + { 5593000, "5d5eb6a437e33f074c6a684885fba440ebd2b7dcec4dc7b93da2ed9df33480df" }, + { 5594000, "4d7316c09a94a18f69e7a1498ab88f5f8500a378e9093df7f5d797cbaaa34754" }, + { 5595000, "7d18bcfdf175bb51ebe2b0c159c23a47af8cd5514c8e2123db83534d649ae6fa" }, + { 5596000, "14511ec594721f108d5df1bc764d75922239fe12cb74234b17c6498194d460b5" }, + { 5597000, "1c5ff9436853cffd739f53e31293a310fd702ee9e1059af57fd8c52a4e15adac" }, + { 5598000, "aa40fe93a8082e922e7e76fd5cb0c8573682297d15216f8fcafda9ca74669df3" }, + { 5599000, "c3857c80b8716222424eb1cb25de3280e8d79668312c699a13c27b9702aa8d74" }, + { 5600000, "7966d4855c4bbb9835e828a6a7b021039779b35fee5ae2af6d77508d4ff5b545" }, + { 5601000, "7d7d76f3486a5897b15d13f9b9dd1fc32af2739f863bdd0e801e74c68f39bab0" }, + { 5602000, "a240cafd8ee334acd47ffd3803da6ab77c810bd1679b1ddb68594d8320248c1d" }, + { 5603000, "fb892608f29ae22705ae964d648d8af95b05d7f43eb8df171ac8485679ec8448" }, + { 5604000, "621530da7fe307ec102b100e2e9d2b22d658882a63e145414f11ca0ea513dc6c" }, + { 5605000, "73341c675a782f3493e5497b978d1cfc897cc1d35f7569533e4dbb81ef737fbb" }, + { 5606000, "4c87c3ad00d372d6a1b04c7411f4c1ceac0ae3b88f18a5e8a23946fecc2299df" }, + { 5607000, "6c36fb62dba056b679cdd186d86af0e1f3fe5d11f84a46623e87131939486c72" }, + { 5608000, "1b6fad9dd61ab166462cb71d327f561c7d94f994c140ef31b5fb11bc23f1091c" }, + { 5609000, "55f15711bd80e4262df4730649ba7272839096148b17a9f35dc9b6b00cfe8896" }, + { 5610000, "fb550f35f71a66a40522fc56f7eb9a85ab8eaff664a520c885805a91fb1231ef" }, + { 5611000, "59cec427c19e7be89703661d6d16ec32d8ce189003b8f6d4c5b2640cc8ac5507" }, + { 5612000, "9bdd19b61bbc683f1932996c629d315ac5a44f77b396cd5e15bb9b95c50289d5" }, + { 5613000, "2694328b1090cb1a551d907636de47c1f544bd98b9daeb6c24ba855b18928e57" }, + { 5614000, "ba8d64671e062fa5dfb7c3bb2dd57dd9ffe226c5d12cf7f7b35da0a9437e9356" }, + { 5615000, "c854fbe4f1556751f0ad33f426ca78651227f59fd02662e0614eda8aadc6f1b6" }, + { 5616000, "44db5ef91094e3d76e8b4fee98e2d1c2a5cdd25320088f0f7195de9e8f08248d" }, + { 5617000, "fe794e193682667f234ef210c2e7ca19a9cc1a3256b6dc98bf8b265c5b0157bd" }, + { 5618000, "3213c9e7bb7a670ccd65d79120d3423f689780d5bee781f1d814be0ef416344c" }, + { 5619000, "e75c9276eaf1acc24521d1128401d52ca564cfbd19d0d1e4a0e8d38a3ae1648a" }, + { 5620000, "5c5858d554a4ee738f80bc7ebbf2c8ba5989f2afcc829eac07d731be89646c87" }, + { 5621000, "efd39521bc4735d708cd965500ae7ebe2fa132a154630f932fe6ef7cda34c8a9" }, + { 5622000, "6ada3bffc36c4d6102920aac0363d3aa444abe90190bb1bb02edfb4b85fa7a14" }, + { 5623000, "c04acef94e292ce69638c19ed35d6b3b456240620bb583e53b911f7107e10d18" }, + { 5624000, "312716db931fbcba06e3f279196884b1cd590701575bc54848434f6fc0c24144" }, + { 5625000, "ac5d5a5c98164d08a3a084939e18074a0163bdcb0c1dd28dd7c4c3ec06832622" }, + { 5626000, "6917bc5bd6093918cb0b3fc61281287f2e773dd354112b10f350d480b417f8c0" }, + { 5627000, "c194801ae279533a546a9ed9a6c098bd7909d3a93b9441530739f3dc71f382df" }, + { 5628000, "dc956f28ff8756c9b72a345c1f2b8277434fb317c291ec2e182dcf63022a115e" }, + { 5629000, "aaca9a965824c353ea2c03c2b06f9502c8c5d2c75da9d00b238af21b239e81b9" }, + { 5630000, "56f9bf5f33f3d817f315ff5212b0d6c3305ff58e0e0eb663f5adc0a5e33b34d4" }, + { 5631000, "c6a8f221f2b17c5964b044b350379babfa302735bdb1bfdebfe2d32df04e0de8" }, + { 5632000, "31d24ae96d6e2b0bf78a578bdd8b9a78c69a14f76adc48e0c46410abe6851806" }, + { 5633000, "16e2b0482c1c2b144439fa0f50e5d17582899438215f6fed1ac0d23883f6b01d" }, + { 5634000, "3ccd1ea63dc6d1fc853c4da3690a4e79d52ef672da0bce2ca35a142bb12d5e2d" }, + { 5635000, "046a271169b78e1dffb16d2f82c7c4ca27be987d809b50b69d80c01ef66369b6" }, + { 5636000, "1182001eabcf439ed62d6a5b905c42754748c68413926045b074f8aa2588bb23" }, + { 5637000, "eadeb7c4fea4f1b349d2961e80a00c20488f0f783d8167111f8ade47a9646528" }, + { 5638000, "9f3e64b2057161b7d5f1e4c67bb9f0d6d128b6b6109ade55f1149398570acd96" }, + { 5639000, "9a100245beb64d5e4934edaf888519416e69053ea2e3e186ba734851327ebb26" }, + { 5640000, "298f2f8bd4cc3ecb00a3b1ed7783868ee4f8dcd690592da003cc08f28164e87d" }, + { 5641000, "84e496e208f3279a5ef877fc772f1fb7d8a84e11e51c656e1d0b93b13c2746dd" }, + { 5642000, "4ad075303f144ca607dc6cb66da6388317353746a030312cb268ee32245de004" }, + { 5643000, "4e3723204e3ed76ae0c99ec9d2237044b66d1e19bd55c02f363c4e7b34c2a2bb" }, + { 5644000, "b53b3d48b9e92b25e7fc90851c73817bfebf4b6a4066b20785bed6e1c5c22e6d" }, + { 5645000, "defab34c439caba94fb94caa0aef2c6b60c044c0818554fda0af3490c0877b7d" }, + { 5646000, "a34669a6969f12d9f5daede49124f4a9e7f5b9a9ef1337c942349ed3776baba0" }, + { 5647000, "86f2614cf41533d4d65fafb3c8604a46d79613605882f36222430ec63975f935" }, + { 5648000, "56d79ef8bf1937c891ff00e7dafd029d8e094073edc17f59cb3cf481947afae6" }, + { 5649000, "ff005e36286d3ca8ba134b0b15ce9a8fa43907576876319e159e765c38f4f825" }, + { 5650000, "cf69d269f9145b5cd7fc33522b360b3c7589a31b44c7c57736f4e388b7fb167c" }, + { 5651000, "587f3c81ddcc90c2928c21457270b91ce25dba1fdac8f82aac4398fdb098867c" }, + { 5652000, "e46b3771a2980d4083e4dedc1abd8eaa3077a391a07307b8a065f4ba90cebe84" }, + { 5653000, "27b95f115ce239f0a3a8df1e658c361b5133aebdaf17d4f68caa4ab947023428" }, + { 5654000, "c528465c02fc90006b0b03c1a79f392e55493bd0720e1e6d4cee2667cc49f249" }, + { 5655000, "0335bb261045db7976d2a6c62ecfd45890ffb805a3067079642b8cf3899cfcf0" }, + { 5656000, "4b4fcdd345873f1d7dbcc1ea824cf610699931c07d59344353b4e10af4a802be" }, + { 5657000, "7a8aea71697d64bdf9d9fc29f16a54470905d4107c4bd6860a37ac2f7b03d51b" }, + { 5658000, "9f253de52cc682b178930274fe8797c257f5788dc5a30b27291e1d44c3156ce6" }, + { 5659000, "142231ea77ee3ede0d43a3b47e5c6f3858a59566fdc7bdd2025e04912703bf08" }, + { 5660000, "2d3785bae68f56f50a912568db92dad44f373cd205dbdfaa3efb3c8b0c9ca746" }, + { 5661000, "79e2c3d52b0655a830bfefc6de52cb9c3def6fd2041d18ce4312119c521eda7e" }, + { 5662000, "9fd013d1c3959a43c8f852f0ca96fc3797346c184a81a4d77d80269a17eaa22e" }, + { 5663000, "41e594fd48c2f34d268eadba2c8944e0af37df9105320929571058fce6e63426" }, + { 5664000, "c2d54815f9310af0429fdb607b78ccf96f207e21302aaff0088fe7ec27b5f038" }, + { 5665000, "745aebe277953e721222ec47a2c4a7d41091e9331a83fb8e7f30344476e0a2b7" }, + { 5666000, "5d669e47ee5f1e36c2c802489768b61a0766dacde0609529a1040a36fb41e839" }, + { 5667000, "6e2474a37c6adc1520567ebf1084e46a15e6066b00651c8e0bca06488b4d0216" }, + { 5668000, "c133fbfdba02446417ff18716f590fa14e0e500983c02be659b1eef35c108650" }, + { 5669000, "5ed2b24fbc85a6bee59d8629f0e3959812e112356640b88e040b7e7ef14ef059" }, + { 5670000, "0e2319eece4af1ddfc9e238fed813602c660b8d3ba4c062f3a6ebbdf594d4d32" }, + { 5671000, "f8befb010b210f29044645d87c4edd57f808eec9bd0337b5d573b241c3ec4408" }, + { 5672000, "0a99f39acd64985d933fc7646ff26713b9cc826fcb53082cfd5776e63e0bfbda" }, + { 5673000, "66d9abda7e3ccf394f067ca8be63ab1e58e6965fcc1a21598f61cac4184a35f3" }, + { 5674000, "a29819096103dde605eeb0665c3933902c0918c803302f84597aa744d49a8700" }, + { 5675000, "01cebb3b30e5897e25f18e5b07ab4338c34878145adf04dd321a1719a57f766d" }, + { 5676000, "b1150c1bce5e276f26f9633bc853ebb0d0a2197ad9242c9a8dcca67fef1a5511" }, + { 5677000, "f2aede0564e5158cb739762109dfe3ef2dda671119fd15c48a4b76af9a9f820a" }, + { 5678000, "653a034a0a62bd41727c10164912518beccacd343053992ce5ed80258b53fd64" }, + { 5679000, "3e2e8669eb50c0665089100ce199fb800bb4ff71dafe225f744a8f019fce4640" }, + { 5680000, "193697b8983fab6c47c996958f33685aadbaeec39261e5e67b0eb5ea019b41fc" }, + { 5681000, "d24dc9850b79f175bc62899bf2106c6b81c853f9e1edf65d42610fef0e965a80" }, + { 5682000, "46aadc8fdc7fa5b6f9fd4a95c1193af504fac198f21e4abc7cd9095c8fe001bf" }, + { 5683000, "8264a1856606905b557a5c5c2c30c5dcf2cec64b6fa204efa7c73899899a4548" }, + { 5684000, "de5173f8f216e1c98e579716669362dceece04c49381ac946d348bcc86fc7f01" }, + { 5685000, "9e1a6eef88f1295171c01572c2cde124d2bae27e7a418b10602ffbc177cc25c4" }, + { 5686000, "7a81d5d029688982718548e6ae585cd0d3a94d0104f283ea9baf524d4ecd4c62" }, + { 5687000, "c6cdff250cd97c59cba858379699f48cac859854c1bcbaedff00c9a171dc98b6" }, + { 5688000, "68977e3c08a262060954b31d4c15e064cab63546ebd03cb8b71cf3e879e8612b" }, + { 5689000, "be1952a6b162bbd7bd2f820f09a26cf6181a31f91c7c0df39536b1effafe56be" }, + { 5690000, "75aea3a293c125ea9bf69671bf9ac005fbff3bce5d0e4f700b29c2d525b61c77" }, + { 5691000, "7b6c820470bee36716966a3012c2b8c7bc29df5400e2b64bbb3831f407965260" }, + { 5692000, "ff2fc0ec8557c53598da7e444a40c74d15bc54c368f0fcb48c8eca039248af13" }, + { 5693000, "ba268fee5f46eb20a1dab7bcb85607174e46bf4b888744389d88834ac9d789a7" }, + { 5694000, "c766ca8531529f6b340678f330bc826053f383d70fa0bc002c6d80fe5464feb1" }, + { 5695000, "55ca20e2026a041153ab817bd254fb7c33edf1fe48b1995d887ce327aad2a73f" }, + { 5696000, "6aeee35b1d88dbe71b788557210ed803623ed90503665826341be40ecbaa0ae1" }, + { 5697000, "36394c2e43bdd5f14405a4d6f49f271774aa7fdafde59354b6f9d3934ecfd1e4" }, + { 5698000, "b9419896867a46686b431a878c467a8fa04140dcb9e90e0ccfb08f2b0e6a65cd" }, + { 5699000, "659d2def44271f84c4915ca5fbcfb1171d4a6b2682ba97637c422d869af2127c" }, + { 5700000, "8aa5036343f806cb08cd581caaa5aec716989d17de2c7cc0a75279fddaa5df7f" }, + { 5701000, "ad3602458df2215cfe93f4e39bea902d1532da60863c4904c9c5ba3ccb36caee" }, + { 5702000, "d04a4e6867b572ccae8b47aa1fae59f1f497a8678e476138fb1125ecf87a436f" }, + { 5703000, "d9b220dbfb040336eafc4539493508442e0ccb3d094a4170d9d02ef667f0dc55" }, + { 5704000, "9d1b2aec8e93b6d850a940b06521259053f6c100a0496471d2269572db713eca" }, + { 5705000, "da6c0e248a1cb4baedb340a5d48302ca955fdb23c41554e730b70f69f937af4e" }, + { 5706000, "c4d1e77e4bea8ddf965343399c8ad9054e43f8dc3534e363d47e348e2df9e00e" }, + { 5707000, "471c1412c225ae98a29d0d4f866d7bb7bfeb0e6631c8bc441d12778337c915ab" }, + { 5708000, "5cc2e05f5c1d13095b6afa16da19bb22a4bf1bef289089f5ea632b1e19649471" }, + { 5709000, "4d0cb9718528b82849546f40bf7710f0fe9332fa59ecf57c3837525c82573643" }, + { 5710000, "da0b73a36d141d86183e6119879fbae32d325c4084e1a6bdbb722feda1f07174" }, + { 5711000, "f7839e6fa6e4aa2ba15eb7cbb63d49ccf061d9081e9bfea9d31a7e1911c0c5e4" }, + { 5712000, "c33f7d48fb271f40add38e19335ca96525cb7d8181e46cc3ba61b663a961553f" }, + { 5713000, "690b353cd628ee2657c87e94855edcf5c95537412d9de5475c946b093df412a5" }, + { 5714000, "d31cdf9922219c34f0908db2e1cac113e276dc9b8ba0ef11917d331f760ce9f9" }, + { 5715000, "a614f0bdaf70d4b62d25b6e516c1968dcacd3528b127e0c931af07c704b5415d" }, + { 5716000, "b3204fa04723d804f1e9f3c996042a22dbc1ca6790b5d78fc7a318db4f3ced46" }, + { 5717000, "43ab09f54fa4ee121153d0118cc0c713abe5cf18f9ef50b7456dad9ac28b55a8" }, + { 5718000, "0403e78ba69decc75a7053ebf4d3e84243e732b378f6a61c8b74053b88760d08" }, + { 5719000, "16cf89e2865445996b270e4df7c02567739456bc337e3a11f6ae0ab0e259508d" }, + { 5720000, "d482408673824fc37233f3f4350bd833a2b6a30334a21ceb69b9ce041a5599c9" }, + { 5721000, "a677e6a03a13c3203c8c5a750ca84774e2d9d0a8f995bc427334c27055f60539" }, + { 5722000, "c9a74a06cea9008fc6cfddd914c879fcfd1e0bd604c240a6a7a2dc0d5befd0b3" }, + { 5723000, "1b01082a16e4fad95ca0a49aa914c0b362433086cc4b979430b846521d2e5302" }, + { 5724000, "bb5b5ba969b3142741fdfce938cb66e0e45fe602ed062fad3f11d5ce4f4a46db" }, + { 5725000, "da68878c126859da1e911c8473945d54dcc87ff991659f1db5df651a6b8a57ea" }, + { 5726000, "81ff65b5649d1f9c46d4b9c31ed709b261b055f0c0e2abb35fc9d4ab2f630716" }, + { 5727000, "a38033718b8ca61b2b17b6eb01e739deb4f1071b7f6acbc1432630201a6db1f2" }, + { 5728000, "ce87689fb03710c0f04d4ddf5cd277531717a8da9f01578e6dfb7f69a9b8cf97" }, + { 5729000, "b53c7f1cd9ba3ccfdeae9535b88c336c329b30415c8d06a3c976d1f38028fef9" }, + { 5730000, "ed048b6620e5ce1c5177357db998697b135e348d7f38fbaee52da6c44e37d7b4" }, + { 5731000, "cf01eff170311a0927d04c9d71edb7de79a5e1a1aa099954cda4c9bab36dd93e" }, + { 5732000, "11fe4e296251f32cae0a20ec0a3e72025bd95a94d5979b5ce2354139c5477db5" }, + { 5733000, "70a94d727eb3de14e0c70efde21f6e1a9effc4289cc5bdd1c295518908559871" }, + { 5734000, "7a40a4e02c2bf7a4ea1b0a250e04d58c97011751eb49edf5c1fc688e8a200c95" }, + { 5735000, "a8526caf7aff087803ac138e400f18acaa8c9490e556d881e774b365e7b7efd8" }, + { 5736000, "a40dfbb728c7fe92401c9385e0aa9f381078e97cd3641bf835cac4755e586861" }, + { 5737000, "30c59141fe1ad4a42fa97ac73a33f862c8cfc5c8c009dfc636034fca7bd40db3" }, + { 5738000, "27c3693e48343f5e63c4910d9a6204b0823e0ba40bfbee05a87e03ab22b13485" }, + { 5739000, "4c8b8db9cf66f88dbc459fbe8154889d428a62646a8ff324f62b145c61dfe823" }, + { 5740000, "7a5103f8d47639a6ed94a5a70c3dc0303d4386426d2e46031fb37bbe404109ca" }, + { 5741000, "afd16e3728989660119ca2847efa6649a3fbd491335e7006e16cad54842c5c8c" }, + { 5742000, "c208111b42a9141985ac5caa05d0552d2fe8a2e74e9fd6990e23fc88d433dff3" }, + { 5743000, "0df8d3b48249dc38ef9c5cde690402cf233c7fe4e3ff83693f958f2e7902b7fc" }, + { 5744000, "0cf0210e0727aef64b8bc15c97f31bea1d8926e6242939d57b637000aec09818" }, + { 5745000, "15f7b5cc4541d3c5debbcfcc57fd4854af4c68da74a8566babd64eec1d00cd1b" }, + { 5746000, "d4070c06907fbb6d3a2ae531319daa728ed093984d39ccbe3ecd25c88b37c3e9" }, + { 5747000, "3aeab126dd821a856c803e644f6d0d689b9d90a57d23b49d7428aa8693a42c9f" }, + { 5748000, "4f78f83abd5634f2c142fd108398fb6bf508e52c74a8839a1d04f7945d95f177" }, + { 5749000, "052a3f9df5d912aac4c3fe572d0d6b370c97d2418f109d187016b27e182ddb2d" }, + { 5750000, "2fb9a96155b607fd7ac38b7195988d77961456c905d3f5cb7b9ad0da1504adfa" }, + { 5751000, "11b52452f034b69adc97cd0d7888015aa77ed8578a9ab83ad967a2413e305866" }, + { 5752000, "bfa9c55a2b0d464f1fe02ddda40730074a49e4f0384f8501345fc7c90c6ea74d" }, + { 5753000, "e0be1ae26c4f31fa1f0b2f314c8abd14e4f02dde6067f301775b5de33a57017d" }, + { 5754000, "2d27472cd57fb8470ffc7d6353822be57090af61378ea30093cd4c90e8012694" }, + { 5755000, "a32d2da9d5cbcdbe3cdf5fbec2f5e7797fec473260c4848052c043b8bcc69709" }, + { 5756000, "52099f3b715772d2098c052d8058bc1e81399ab4b5ba5b5b8828cf275d572d1c" }, + { 5757000, "7c6b42f6c7614c78ca3bf193ad15ba8aa013e0d8367ca5cdb29fd56af71bd8af" }, + { 5758000, "7a74fa3517505565a2e765575a43436ca4486dc232933a2012ed14dbd13fcbc4" }, + { 5759000, "3a407b2b5a2b30f5cce4961ab891b9ef5e068ab6228b55add09ef196af650b6f" }, + { 5760000, "4a59ea0a138035857916a17a8e3b8d97226baffaffe2a22133356fa136ba5069" }, + { 5761000, "f4e0b209b2ba3f8bb3abec9a86dcfa0870bb4c2591995358f46de6f049db7c10" }, + { 5762000, "def06f162678dbf520e8408756c10694a02d9784f6d1563a8a5930d7dbf7b2b0" }, + { 5763000, "d8473fa9729db195433f5c4f6b3d9680da38e6d4f4eabcbb6d77ba31b5c70f8e" }, + { 5764000, "8d98510a77271014c7929284c92fad68508dfe28e90f90ac002d0b843ca00ff1" }, + { 5765000, "01424f5749aad879f3d5f5be65ec7044e984b3b5fd1f3afa754af2f83a7bfa14" }, + { 5766000, "f6ab720975970b7da797faedde3c459943675e0063968bb2c7f354c05676b4ad" }, + { 5767000, "5326acf624d042aa12bc3457e12aebdf1d46fa4513ea4a0e9a4c8b84caa2da0b" }, + { 5768000, "8727431c8c8b574aecd9022c4438b9c07b5283235c21acbb54c9da114bbb907b" }, + { 5769000, "83f8ff518582f050cd23defdf2b08a526e6b8d9ea4ed62166c4629812f10660b" }, + { 5770000, "49d0018ac6653b70e4c5f85437cbebec7f15feea8a481b289eaa1ef63e340f97" }, + { 5771000, "acaa32cbbdfc0e840ee9a375a54c58839a77579cadafe2dabc26777d61ea20f9" }, + { 5772000, "a4d3eacc3a69ead1e710d48943aa25ef1f62bcfdc268cd4bddc78cffb16fd591" }, + { 5773000, "f2b3c926dccb11ff3b35b6f12fbef26d5cf100d7dbdae7ca279ce153e0eb5a3a" }, + { 5774000, "00bcca1e18721e8997541f1eaab3600288a59c4e3ac88543c7fada6a0df86606" }, + { 5775000, "04c8030c8c87611a59e3fe0c8825a4fc719f9719fd8411bf8cc239d9dd64027d" }, + { 5776000, "65fe4a291883e47af80e224f4a850e8ab3aae560efaef9ba5f9b2ca3cac0694d" }, + { 5777000, "02fb0e446fd81242492b143c5bd96b214586996028a663a0ae89edf0a8021c22" }, + { 5778000, "45f8f6aefad9b5eaf7a3949384629a90e74866eb5cd48dc0504ca449759e171d" }, + { 5779000, "57ffdbe762fa0b5586bf58c6a6e500789889b3ed9c3460166f2636e76e440e9b" }, + { 5780000, "3bb3fe6a6a9927cc2fe7faeb39ca15312384bb034bfb216ea9198142350e191a" }, + { 5781000, "d8893224e6dca08435f60c356fcf69601e0dc56c8e7e7a399ecf32dc68b1f8b1" }, + { 5782000, "a43cbe0fd1200a5b2c860041f66970116b056db4d2d3be232273d65e2e80dcee" }, + { 5783000, "17ff07ad9f523f99d96a4681ffbb74b0e575c4f0d8203dccc5e395f08e71fb9b" }, + { 5784000, "ab59783a86b1ce5c384a95c147ba355185f1327f5c60f8207a0821bcbdb656a5" }, + { 5785000, "e1f2e130e4fa083a190539518e1881e97148f33f98c2aff1d47acf47e9d9f821" }, + { 5786000, "e856482aef8e77ddb266f2e9b464f73cf981126ba1afd2c0d897b051ef6db1f2" }, + { 5787000, "8c257b3510f28c3a486876015a49e6876ac223d27139607a6ee2ae7595a90440" }, + { 5788000, "69fd492b2c85ce55f307c0cd4813a286915b2228c4fdb30263f7de923523b37a" }, + { 5789000, "d95421ade8f1378a33eff724527efac43b73e33559d6903b201f1c4d0c7cf8d4" }, + { 5790000, "023527cefe66171b3015f43067802752982ddda999f9a00ba0861a5b5b753b8f" }, + { 5791000, "6c83e82060939f26a39de225a9da6afba4b83c5451080b1d794095ddd9c77ed1" }, + { 5792000, "56ea6e0f250bad29d218d11a7e70f6bf77a020b05aa1f381f24dbdf0f17b108d" }, + { 5793000, "54776e9e8a7cf2a343542b9691b3f164bb3ad26e6f3385ebeb243761e2086385" }, + { 5794000, "c0e05f2cc5e2f5ac969cc9fcfd9ded2befa00183a519ea240507ce834d201ee8" }, + { 5795000, "329d66af280863332af71fd108a4e0315915865b0fd7df02cb0c7f7c0ba3cde2" }, + { 5796000, "0c90c933a9d6ea72bbbc0a64e4115b4b3157bf4a6944af4d7a3d44dd1a93faf0" }, + { 5797000, "e06c4df0bd5ee93fce976b950f54f513b6f6a472a0c9aefa12b68be56e240c74" }, + { 5798000, "8805378b3e2d4f92a711508ca9d2b44f7e5b666540c824f63e994733eee32b01" }, + { 5799000, "9b4f33bbd26f18d9fe5ea170d603a720f76e718886b75b4fdbcbce5376081183" }, + { 5800000, "98ba02d82a69f91ec1b4d84d8ba0aa315a6eb25a4eed9f083d71f933d29d3ff8" }, + { 5801000, "0c25841beaef17c5e74f9748c9084b238ceee8c9a470b6fbff13c597421e4f2f" }, + { 5802000, "02df05ad844feff05c934abcc559a385c94fa24e9d541767963031752ddd32d4" }, + { 5803000, "ed5ddcfda23b7da898690778b9ba3a8444a52ebb7bdfd8851bb024f0fe993d5a" }, + { 5804000, "b20dff67543be3a142cee27f7195d6acf12a9c77eefc804d104afc73c711ac39" }, + { 5805000, "64c64c68eb16af832241b7ddd2c624f920ce8059e7acac0d5b997f8f59d144a2" }, + { 5806000, "a28c810e1efaa18196071cb29a520e538b8aafd4755b64f3d4f1edbe7fbf0871" }, + { 5807000, "738ab121b14ecc285f0d08b5633e9c4c5e8516995986846134ad64a344dcd9b7" }, + { 5808000, "d26ad1b607393a55428d96ad694743fbc2b813da72319a2884049766090f078b" }, + { 5809000, "528152cb4d6ef861e1628a225d8e2cedee569e946fb4d7dfe8a03738cba8517a" }, + { 5810000, "b7ffc28bd16f463c9687cdf74890f74339968525bed721c40fa845d6df35f5e4" }, + { 5811000, "5e1191694d41a7df9e6dc229223f3edbd35d21596c15190280c9b8aa8ffd67e7" }, + { 5812000, "f415ee6bc7db90bc8f492f353f95b67964b59326c624bf9f989a9dc1a0b0447a" }, + { 5813000, "eed9341867559bae9453955c42c568a2b5a01f8aa6cf654b94fb0d7acc19a1d9" }, + { 5814000, "56596e31549b89aa6e47e2391b80b750f0df3369c7b5cf07e81ffe0ba6122824" }, + { 5815000, "3c52ddaf7efacee073af3ba12edb5b778cf79b73282f90968458a5ee8781a0d3" }, + { 5816000, "861e5c76fc6e54b82606d1d67bf48fa5bb581cbaff1a01d224804293156d1c0a" }, + { 5817000, "5e03ae411a1155996b7685414941dfa36335cf2fe4e9f02be5f0110850cbf2b3" }, + { 5818000, "40e482aafea013a396734f39bd8c958b7d7d1b46e5650b9da2ccbd3bf9f778f1" }, + { 5819000, "01244257d3aaadcc13e9b1a3c3612ff7ea110bff9fa1fabc43a87c9da7d710ed" }, + { 5820000, "b08d5f50fb98a787a24cd9bd6ec7411a8dcba24dc764f87a9ebb03e032bf449b" }, + { 5821000, "298877f7b2146d6404de1189ec55fb625d71668d21dd73752dabd25ab349b11e" }, + { 5822000, "4bba1e9040ed450f975e32577f7c0e9c55a82dbb9e88953de4d1230714933dbe" }, + { 5823000, "b69320ab914fb91884235ea316c00bd2dabc04a85406b0696a8bf63a4e7ca47b" }, + { 5824000, "4eff278df8f86cfad3832db15d1e7feaaf0ab3db5b66d4ce0df397625d8e42f0" }, + { 5825000, "748c76effe40af6f9da2ccaf8a48dc65416220abc32a65980c27fba396a50457" }, + { 5826000, "7544b39e42abb8e8039edaa18ede885d4c9b5d05bd8e3b9880582ce2211aedeb" }, + { 5827000, "ca0290cd84896f9c2fdb9bed17389c8760192bd221f5bf4a8bb735bb8842d9ae" }, + { 5828000, "206e83e87b733bbf83fd8dc67ee0adb70f0791a0c1bd4435530307b83137e7ee" }, + { 5829000, "8e9f1eba228d2da5de3ec509b2c8a9399125e318da3f6b9c41a3a9070e9219fc" }, + { 5830000, "4ab3d825407f335218f2306b38764748ae17985ee27af396c981de0723ea83dc" }, + { 5831000, "ec4f5712b242e746b08a1e4c2b5969239ee4c47abd0c904d8e81db979aed2d13" }, + { 5832000, "19a41d9855f7b53884697a81f35ae68cfd6bd8c9bf12165047ebf9153d3bc6ab" }, + { 5833000, "5821ab14c83b26859c0c3536709823c1353b20dde1b484a8d44f5742f0781210" }, + { 5834000, "ff732a6f2ddd8baf4325c2ebffff8cb88f3d743ac77ceca2aa5db55a31369456" }, + { 5835000, "604a984d84182ad4d74fc277430033ba11cc1a808a414902be4443a42b8d63d2" }, + { 5836000, "a3704ad919c8d14a080918b8e2c39a4ac6d2ae7e9c575c8967c8442538332851" }, + { 5837000, "13bff322bdc4fbf3d11be9e1e913bf6cdc6a41ff6e7366884997032b7764620b" }, + { 5838000, "6c30bc473a85a0e021f54873d07097965fa8b4b11f022314d72d8445a4c7c17f" }, + { 5839000, "e84c5d7da9bf7d5aaff80cd4ed11b557329d8de1516a2b3bae6c0edc3957a9f9" }, + { 5840000, "d71611d25dd8073f722eb39dfd19deb5bb76bfb95ce70f41876c5098599aece6" }, + { 5841000, "4bb9f2fcebcb15b3f7883262e33c75a06e10e1d698910d903d8b4ec79db7f38d" }, + { 5842000, "2dc9f962e287262f26f7bd01959cc1249955fad5b3ea0333ed609b1f437f66dd" }, + { 5843000, "906909deb805d55acfb6592b3a6f3a87601b1fbd5bbfb4fc8b7421d7faeeb140" }, + { 5844000, "8d4a2746553d518961d270730822de3a75360afcdbd39c719e649937c341a07e" }, + { 5845000, "e1a9d9b598cbeed3ffe00cb8ac19dc01b7fec29aea462d9dadd90b923c58618b" }, + { 5846000, "139e1e086246d97e300ce01d521856a48f2170ad267a77ba2f06773befd33960" }, + { 5847000, "b63fffe2448baafecd2dc88a9f5355e2fd6760314a2f3058819ed014afc1bd27" }, + { 5848000, "72f7acf34d72490b41d1959f12afacf6741ab7290bbf326d6ca16a2942b26cd5" }, + { 5849000, "abc3a17f74bac5a387b13d77ffe35e31306cbab2dfce985edb5e7e3a046d2e9d" }, + { 5850000, "04d8a4cfbef73dd264ff538308c12e9e5fac9f729941653abff030a33d7b4c0d" }, + { 5851000, "c550eea3e7438519496bdef1d215d94c3b90843d5d927d10dd6c32837a6e461b" }, + { 5852000, "b5db42e7a9fa3bf698896caeb260b96e25048cc87f931065ae4cef6d2ce37f1d" }, + { 5853000, "9e0268833b975e8e2a94b905f7cc9077f2696e616836981c0dba425526ac7479" }, + { 5854000, "5a10d1ab4eb8b76b47194d3db1e4f7c33de48bbf928a3c33ccd24c7ef8c0635d" }, + { 5855000, "3885da95209cd3c19b9e73539afdd49ef231bc16f8218073f7ff60bb35379347" }, + { 5856000, "d6c6f432ee1f6e21b90727765751f6682276b8abfb6ff205c7a165e85cc639b4" }, + { 5857000, "228f8c8a97cda77488ecc57ba1a7e92b8bdd2c1ba06b0ad6e7a17b82eb013e08" }, + { 5858000, "b820dfcb2d57be0d07bb8bd2cacc97495d7976edd15391a153b8284539d996ed" }, + { 5859000, "1ec533fe7576d3d63d5ba5c6ab66d5b0d8e0517c499576d18fb9cb6bc6676043" }, + { 5860000, "9f050fd9d6df3e6b04ce677582a29f705a9b13aabe8c428ae21216b3a1bd7613" }, + { 5861000, "e6db3d11441a7e5f951ec3e553864b4b778e9dd27a98ccc5efea4f3c96d7990a" }, + { 5862000, "16bb4defe978820c47c603c9a7428f0a1606ac9ac5875ddbe27951533fa43266" }, + { 5863000, "be9d41796954ad2d0fe245a87e5d4a59dec9affb331a44e31ab88aa28ecc6474" }, + { 5864000, "33af334a2146cea4970f8ace7d01afc8a6a1d63e20d821042a95450300147e8e" }, + { 5865000, "5d73dbe5903e4876c5de2ab0425018fb712a26aad65587238ca7eafe50f66ff7" }, + { 5866000, "a5f862fe3292126f90fecc899b59217b55bc86dc69058d3146c5a3e8cb8f3c37" }, + { 5867000, "7658bdcf17355808e0c4de794641406c82429825a0a1940587383100391379fb" }, + { 5868000, "52045d24451dcb494b1a4e1b4ee2d5587491e0e2fc14d8565a2e6b64166d7307" }, + { 5869000, "bff7eca93985178b90988dd8dc9c4f67d3476c502f0583898f00714bc8290e72" }, + { 5870000, "1f5b7061de297e7e65e65d42c3437b95f26ffc50d2a0c0434b70816ae4be4047" }, + { 5871000, "0388cd49ced9c0e1448a3af5d18e647eb1e345588e695f446f2ba7151610e31c" }, + { 5872000, "86cfb3a98f24c7dd2b216194e1b6205811584407b24aa12a8e438059f56d33bc" }, + { 5873000, "96bee7d2274162d7f13043895de0224e4332359def9b2d74e455503193f27f1e" }, + { 5874000, "42aeca005fe94092428d00b76c0f81cbd938607c5c8b2bf001633048b6429f27" }, + { 5875000, "ae938108d34763435a01ddad9aec82725a191d65dc5d251cca6165eb82867b1b" }, + { 5876000, "c427609c3868c3b7727a27e3891116c48b7609977954719f03034eff3a11e517" }, + { 5877000, "ec03de913c89bbca61ba64d8d870447525f05bac7e1e9c33ccc26f762d204a38" }, + { 5878000, "4963926e68494a5aaf4588496a537733041a29f53ab5b22f0f3f8ad79849baef" }, + { 5879000, "e8a9a21e54545a05418130e2c923e17c95b6ec11fec5af03dfb4958e6bd244d4" }, + { 5880000, "4f895f5e50d307de77d32a2c0b2cf30c288f0fce1dedcb8a3811a69405762601" }, + { 5881000, "0182d485e4a428fc6c6372db8ae9f0f375ccc5a68060770d3dc32194c819a4d3" }, + { 5882000, "817dfc3e435a903d9ed44e1df8347c3f3b766887f4acbb21ccac34210db2d242" }, + { 5883000, "cb3d19b474faed23b3699a5e03d73cee5a6449f606319df9a20621fe1fbfbfbf" }, + { 5884000, "1481d909c02702d07494fa89e0a2f1946972dcb56b65acc683420057a3cd8716" }, + { 5885000, "93fca484bf7a9e5e13d0a930775621e07829a2828c1bfa04c10a072f84a678a8" }, + { 5886000, "365b178994d94cfe81909a1614030f566ae3da03e6399f2d367b4f9bf4b60b00" }, + { 5887000, "49b6e1806a73101386d06fa4cd2a28dcb57cbeb25c3db2ad9295a61fcd9bb29c" }, + { 5888000, "4099d0fe4b7b1b5fb01b4eedcc9434295996fede0da74ab3549c64057763561a" }, + { 5889000, "185ef8b20cfee160bede76fa851c9815e373916e27184833d86b6887e02afcbb" }, + { 5890000, "eeb3953b79f097f0ead2743101d6451d75aca3ae865b2ccedd8b643d6865f58c" }, + { 5891000, "93f418574f3b61eeef188486e6b336c0e93b56998de6bc1dbc59a30be710ada8" }, + { 5892000, "0bf6e371a9658d3c1aec3b2ce858d58c09c5eac894282b82d6b53c5e2cb644a1" }, + { 5893000, "1e6b3ba9c2f1d13f941e47a5e8561dede561819af71986183517cec03a23f480" }, + { 5894000, "dd4c76ff80b0df8535c2d451889246db2f4e865723392ef0b5d7e6a698e7c1fd" }, + { 5895000, "79d3e1ae25bcc9ac554bc3b90d8945b28835176e0b27cb7163b0f328df7d46bf" }, + { 5896000, "e14a9b33e31be7922a30bab27fa5826184bb6a854adeee6db427e9fd8a86f0e7" }, + { 5897000, "104c3665626206d40f18bdc585892b5890fd1f9428cdbfeea05f4498ab9877f2" }, + { 5898000, "63bc0da45477f0d4df994ff84c5ccef3c1d1bf60955bdc7db95972af3e82c00f" }, + { 5899000, "56dc11972eaf0f8863374f8918f2b13f7aacd660acd989818c3525d5cb17f505" }, + { 5900000, "c57e3cd34d9e47f902185c3d185ec3035f7662b573696e27a9da29f62ad952dd" }, + { 5901000, "4605690d24d014f0d6a0584a864f815b22bbc5b40d5d41ad99cc901d5bc576b6" }, + { 5902000, "f1277515ec5b02f2ec088e97729dde504cc11fcec46cac5232bb9c00f70d6d18" }, + { 5903000, "6ade96ca0dd1f1d796c2b11ede8861b5b6c9007e6777a656f131e3f7e2d2ef49" }, + { 5904000, "08a85ccbe19837a03286082ecff00b354bb1a641bce0f94a0255b9c966ef0334" }, + { 5905000, "69d9cd83db0bea668eb54e4ea21077650fd3e814b1aa8c474540591dafd14fce" }, + { 5906000, "9cdf2321a91d52bb548ed71de546fbd92a307d0300b73a177d92db51ff9472e8" }, + { 5907000, "a120a9c4906535cc005bf356051162b672c44d2a902e78892f561f17d1fafbe7" }, + { 5908000, "7300bc4dfe25ce39cd449b58c8bb7d73d4798bfb54e9a44170a52f2b5e048ab5" }, + { 5909000, "6bcff782b2557a6a658cf468a34ab8ec2881ed9d527afe6d1a71ca6073636be3" }, + { 5910000, "c48248c006bb27b3379c7d5cf913a44b800fc47f9f4fe8b1b6a9c5593c804791" }, + { 5911000, "0d686fc7ac363402da0317e5693c888b9dc9ae88c2e42790669770d292dd19f4" }, + { 5912000, "820db9fd0c361ed2188ed15e0abd4b96c56e74a4974c01748e62bb0fe9799324" }, + { 5913000, "4e825e1a2988ba8ed79cc1dbb1565d9a8156b2cca237e2716d33f0d069c2eacf" }, + { 5914000, "28328cf4f99431cd6690ec297a86e817baace9c9aabb26fc1920410157beb7c5" }, + { 5915000, "4e8362010fe929bb2049e99d0da714b13ee28298f0c96471c408825fd192143f" }, + { 5916000, "78b372b9acc6f580e0d286e297eb9006f98b3863b8e438a882d22cc623458c5e" }, + { 5917000, "cce5e1285fdd421f62cee640d6b4bc0a7ca83aaf47f7272724bbfe07cce51403" }, + { 5918000, "19f58f3163fbf79784be66d53aa4638c38617e04cecc7a00072c2c45fea904ff" }, + { 5919000, "94a2ea73980dd0c935b0a13ae8461d34e3cf4ee7cd4706e7c693cc7569ad39dc" }, + { 5920000, "ecee04f5e29219106aed847bbd7359b1af1028df3ec2d88f935a4da4aa23b587" }, + { 5921000, "da1bdd8654488513fc77117f61d4746482a40dfd8db3dd13d23bae44312f59ad" }, + { 5922000, "1390328fcf44195376bcbbb583f65813a1beacdac08fa2d91e65c8428a75d84f" }, + { 5923000, "3453ef9316c5843535d8b7e4b5288e75809c294724a75cda30a04d5c8e279c0a" }, + { 5924000, "f1ff4e27203a4be952a4308d93add9f617a0d98ccccac5bfe750ac106c3aeee8" }, + { 5925000, "a59423d403aaab16174dd1c4e0ffb701cf28581147650f142de71bec81cfe252" }, + { 5926000, "83982817ed5f8346251e06149401c7bf2de254a3fe509ba2b6fbc842aa018d3d" }, + { 5927000, "65dab6f7de1cce3f1bafcb3816110da66c6e3ec2fc073229d1a0dadb8ce4ac43" }, + { 5928000, "1deba7ff15abda2df93bd5ee28821858ed3f8ffdaf248791d2feb3b31f0666fd" }, + { 5929000, "cbfc8b9666ca1bd2c5c757fdcec215feda040be1f904d5c109423d0ebdf618dd" }, + { 5930000, "3fccf9c0643b4f9f1c5c6363700ba9b2437cb5ccb435a82b2bfc93171b604e28" }, + { 5931000, "3761f12c3f6117dc9d3fdb7dc40095f76cd224bc57bbffb0ca52371c2d128a31" }, + { 5932000, "7ae9e162664c21b00e03058df9feaaa7a286938262df4e05751a30864e041513" }, + { 5933000, "1a1f6f8b9d293ef23633ebc608bc163e7fc69af8862d1810c37b20d627e89572" }, + { 5934000, "00b7d03273351b5f8f0f10ab7844d684bfadd2a55988f402d538f7849d78bafa" }, + { 5935000, "2ac144ee803d029cc417f4dc6a21d8ff92c072b271e9aecb07441c0759a78733" }, + { 5936000, "a1bdbcffbf0c8eb2e57df67557e0aa50be913683e86b3cb4a4582139f9d9885c" }, + { 5937000, "06bf7cb9b39d64c2d6035119d4634c9d974ccae5b09bc49ddd9cb09708f7a03c" }, + { 5938000, "ebbc8a43a1a6ce6f3169e3aa0fc5d365d5cd040c1564b3ce23d806ed3356db45" }, + { 5939000, "0c7f3eaf4217a82dac6497165508fc5f8bc8fda653419f29749759e6888149c0" }, + { 5940000, "27e437424f5d7b01b58f029548749a57564459ecd964036e28f814bc4d588658" }, + { 5941000, "697b787ba7ed53fcd78d487fe7e4d165eda87e77574ce678175841c74eddcef8" }, + { 5942000, "36812f1997b415b408f6a09bdbc5720537db38eef98f0100f64b9213fb578ac5" }, + { 5943000, "d193b2ee07d6bf212a2bbc657f68f3c15ed437e31f43a03bb92f92dbf6603f47" }, + { 5944000, "d444d76c5de4bfec6bf7bf98613c00e3afd589603155ab53fedb53e3e00e4896" }, + { 5945000, "13d1ea92d9cf06e9e1932ac8d7f524944b6b27571c7c92babc66c9767b7a32b5" }, + { 5946000, "2cff5d6d681b1f03e2e4fb1ab63ac250226232e1f2f0c9297e20d61b29f5c3c3" }, + { 5947000, "3f64a5f5e61126e72141a9bc2b422e7fa7f193f6e06abb8cd189d3062474146f" }, + { 5948000, "120642462f7b8e4b0e71007fd9c48c8f00aaeb506580722079eb1fb63d1e9dd9" }, + { 5949000, "591fca24c0bf087c33b1926baa930e777a9fe07b6369ba7ccfcd6cdbbe9de5d2" }, + { 5950000, "65f048ebe22c2287dec0039477edb86d4f2135bc5cd690ba8346f849b6ff8640" }, + { 5951000, "3aaa93eff5d2b11d6548c9c84dce76346a6ad569e268e457e20bedaf16a08eaa" }, + { 5952000, "7d4e05aa10548d804910bc147dd8364df20236378f9f18cb741e319ae980fa42" }, + { 5953000, "be99edf2def23c0be840d5e3ea03de17bb401c34a95624d857ecc5c7f7800bd1" }, + { 5954000, "c081123fd35bb56bd982f653ecf6e440843c473e44d0ae1bb4d7d6653936292e" }, + { 5955000, "c3c1dede07ef3af343516a9665a0d80ba1b7ba69f68a0dfe374bb58fbebaa210" }, + { 5956000, "56bf7ab61b0caed0596ad9ea613ac9267cb953d1bc86bc287a07051942c20729" }, + { 5957000, "a30816d6a58a6fe5d64a38c712356c5f9e55959b65785070290cb91f3541346c" }, + { 5958000, "d6f092a18c08fbc5ef123a8b9999d5736e726dcacc15b0858e4135c6b695b570" }, + { 5959000, "133144775f22d454ec39ff59a1cc98bc8e38d401171a8ff98773889da2c72f06" }, + { 5960000, "7a49fe4e8f9298a5081c277308be7dfe91dbf40874e55eab28248347bf12defc" }, + { 5961000, "642313b5d91746dfa80a8c1b3d42207ba89b97b04b9997a4efb68992d81d2f7f" }, + { 5962000, "bb17b93903f727906efec1cfe51ba30ba13a2dcd885cddf24034055220fb6aa6" }, + { 5963000, "d7653894475c1739f96204ad9afa3bd543276a319541ebc377e7a7244b908e90" }, + { 5964000, "24871f39bd15373dc2982b7d302de445325685c74bf04cb319ab556f41ed57d5" }, + { 5965000, "dd6151c223bba5524d23022beff39d8a69f935efed056ac359e0daa2d7bbb22b" }, + { 5966000, "0030f9ed51ece1d3e70c1563aa1ea44ea84dfbae1587bae4bbe1dd4f3610b1b9" }, + { 5967000, "4788b814395c8a6a93903e0c9843b061fb39894ff6baddea6c979f1f80c9977f" }, + { 5968000, "5f6007bca3871071e4a2354c19542ebd7c125da323a1a087f258e2c8d7dca355" }, + { 5969000, "09b01cfb6f4a2079f3cba6d4628bcaab3db25764c5603e3f5479ec0e0a638b38" }, + { 5970000, "7f2c7e4a336fe815f4b4e035e3ae40ac70904ec3a59ac9beeb39220d1aa31ded" }, + { 5971000, "ddd638ea77a2518fa337e9c4c2ff28988abc49dba418e4311f4846a018f704c4" }, + { 5972000, "b2da35755848786f65e25f6254d59835673890a4217de06fc755c6bf7283976f" }, + { 5973000, "8766fa1ec329a407129fa4edffb6fbca2cd5f909cda58b8e38ee19c5015cd664" }, + { 5974000, "de8e94a4d0a81c12f4071f33f4b0b1c5aa2f4ca3a7ee742d88cbadb732ca72ee" }, + { 5975000, "419f77006d55c896a266c2ba56a97d473a41bd33c7720c5c9fec00b3a02e4277" }, + { 5976000, "d2d35cd6176687704dfabefbe618005d436f345f5ce407492bbc65d08ba878d7" }, + { 5977000, "a4971e91617f28953ddaea2334ff9003a3975dba75d060ae2d04ebf1b60c4fd9" }, + { 5978000, "1139213ffb1bf80baa026abf1fc58576da9d54ed41d4f200b3885ccb0e60b5bf" }, + { 5979000, "a6c0a2b610b6fa2cab075d57870ce78efbe1ca0c56a8b8306aad354ed7f01ff9" }, + { 5980000, "220c3f079490b0bb26a266a75320453473dbe5a3e9f919a1dd06f94a5efd5a5d" }, + { 5981000, "8c5eff84a877869f0d5913aee53ae3da6fa0168ee9c0b1c374991b429a41ab97" }, + { 5982000, "f74937cd6ea4eaccdbc498e7ee38eb4898d8b6b6a77ce7d9e276f7f50146c444" }, + { 5983000, "6984b3ec7e70e68a1f41734b58627105bf07c1d7afcb70ac3912cfc84efa5466" }, + { 5984000, "5a5ce31b4e1fa99d7a9a83bcdfe79395d84b52ad61afee0e55fd7556441e4191" }, + { 5985000, "993ded01bbdeb3a989d2fe9615685ce539b576311359684a2a7f837e990088d6" }, + { 5986000, "a560d16d87ea3952c0fb47fd43c1f7dbff6cdec853b85abc7312fa94fd55df83" }, + { 5987000, "11560d429e911ca3765927a88476aab5dbf63cb2753cd2e539d861ef2162e7bc" }, + { 5988000, "05f855b93b1df74da931822394576347c8b2cd6ed2d744d3344bab4e717fd532" }, + { 5989000, "5be19f5cec976e115c94baee973ae5e13b95ddccc249683be2312ea66d83554c" }, + { 5990000, "7a8e6c4ff9fffb423e95654b987a3f8a0173c9121546f89adaf660dd57ad8328" }, + { 5991000, "898f01998430340a16f74b3b9d7093bb807f2e160b45b9b0eb8f63d69e9712b9" }, + { 5992000, "74fedf3d3b96c58684e729d263ce30051714ac4cd227c0749841b8cb3a9c6724" }, + { 5993000, "21a4d65a46bcdb7be95925d28544a5edd64882ac48fcb4a50574ce3a0c53c996" }, + { 5994000, "ed65dbc1e4603c2a7dee5051bf2bbc195983c805f4dba15eab2e7550b2261a8d" }, + { 5995000, "5389974a8ab1c20f6f1cac92cdc2a8ce30ad3eff7edaa6d56ec79524be10cfb6" }, + { 5996000, "a2eff3ec6b29033205213b0440af61b69729f285dbc21aa49d317fa4446b9d55" }, + { 5997000, "34f2b0ad06d407fa9fb011345664ac51a01e1adb839b9aed89d1adf9736c6cba" }, + { 5998000, "2b3ec17f1bb835b633fb589fa43faa970d759e1cd7d7b80fd8aff9b3a6ca2566" }, + { 5999000, "e1c0e1014d41920d7cd8dd833cc477934272556f678b3c8e2882623c0a2b443f" }, + { 6000000, "6b0f77218c7a95404a148cc34fd7b011b0fcd15ce3b70ef2b220145a3f207c44" }, + { 6001000, "157f2f0a9793e74c1a614053bdf5c979654a55b2ffd1147b66fa89da5cc7b7c6" }, + { 6002000, "de980f74a4a5bfb3ac0d807e4713650333a09c0bd34176a3db0c1e902493bba4" }, + { 6003000, "797d448d0270878f94b05abd46f7e8dc949bd6c7b2df9ad7600c012c0753d845" }, + { 6004000, "69bcf74869de0e349c27c3ec2df1a208e3a7cfb74876208d94b044032af5201e" }, + { 6005000, "1e4b68735e755adb4076da9fa8dfb8e69df7d1367cb7fa16cdd7ca113419d478" }, + { 6006000, "c1432d69073669f5dedf10c01141a2e09cc8ff134f159978bd83326c3d704226" }, + { 6007000, "8a3fa06ebca75ba7fb6b3750e8847c7887f4ae3c2838ef4aa472230ab06b031e" }, + { 6008000, "707dec1df100a4590b543ff6558321850974a4e0d3584f6105845299f33aef54" }, + { 6009000, "e054c29ae0333131fb009fd64021f449e8f0ca029c9a4f4fc5b2d06429f988f0" }, + { 6010000, "e70571bc80965b2828c4b1f97bfea74c878e3e4b5a6285b5d1313aeb5bf1157f" }, + { 6011000, "31a36bcfe9eeedfa254d5b3f058e16bee8a34853e92d23a4512b87186be0e9fe" }, + { 6012000, "df258cb18d983626f182a7f867128a98097549289b8294d1f3d8b7dedb0650d9" }, + { 6013000, "1a740bed0241ae0a080b9bf3ef8c26d05060c01e904852b65b53140f1659c2fa" }, + { 6014000, "dd00b72f990083a8bb470c3d779a02ee4597c787e6818c427785ca04db88b205" }, + { 6015000, "e44d2ff57b74ab6e1203d8b6d3e9da18ad8f5e85d032088ff8ea6b606ba8e34d" }, + { 6016000, "271acc98b653600248a0621ac2d351eaccaa8a2caee3d86b4cae7a4c71749871" }, + { 6017000, "b929b8b48a22f29e640ebad9c1010f9ba9d7af8824585965ebd068734c6be747" }, + { 6018000, "9d0945957e41adf68a9c6f669180a61de8f2a685dd1ca125b78fb30773fdb87f" }, + { 6019000, "f8cd5c24db48801d5f3f1ccfb9adf66b4b13999336361f09e9441b6860e45952" }, + { 6020000, "ffe9c4ddb502c4e614ce32866dd110a0acd7d7ee6585e5018cba6100a6a17937" }, + { 6021000, "b528b402608e3c8de5d4a9087b8c66188794e50b3807a861e15fffcd99374abc" }, + { 6022000, "f3ae14c61318ec12664cc93b645b241d9db49172c6d70043bcbd2491b469b347" }, + { 6023000, "6a8852ce0f3c9aa5075cd303546e8c955543270c9eb4225f3ec2f741ad7f1111" }, + { 6024000, "7a4934d72bb4dc2c453bee61f008e39176d0caabd7b12ffe2de780ae93c449b0" }, + { 6025000, "a28232e418371a3336905de18de3f750fb8d4d4290b817bb07dcbd77f67e6654" }, + { 6026000, "053ba52ce8520319dd4f4f4d2981a5e6ead622ad0a67bd5cc64a0807efb58d18" }, + { 6027000, "6cf819cfd32627dab97201efa914f9bcf8cb4080a8f0bc8134e8aa47ccbf21f9" }, + { 6028000, "c2f0e90629a160e7570807775d09002d779e024bf04aa047fced5e57814f8310" }, + { 6029000, "1f737823080e17a95ee58b000c26cd43f4bb6dfe6d0530f74fb8042b8fb9d355" }, + { 6030000, "8088a4cc4b5a486250130812fcf3d0c2d22440a4dab20fb91886ce49732ca0e3" }, + { 6031000, "bea9c675af188a400d20cb69e00b1b3fb42187fd05c129de3e7d8efd4c288c6f" }, + { 6032000, "063827f656ac84d9cabddd0e12cbce64d86f5b313f78231572314381ac2d64af" }, + { 6033000, "d5c51e3def062c6760ff27b12e4b84e38f72a7959857de73c1a5ec5afd2d8243" }, + { 6034000, "9e433b83092f92f5665dff618d871c26ccd1d072cdb71c0f0950ad7f61c2dd32" }, + { 6035000, "7362fac1351d7097c59f84046d5b18f60196d1732ac229d44af529e9a8bddb9f" }, + { 6036000, "fc8830f11b635d74dfdf172f4d7e16afcddb0675266bb34732c02819d33fbfe5" }, + { 6037000, "264c6a82f4e015e2fa3317620d8cde786e2d30f47729745e439c6f2b2708dcb9" }, + { 6038000, "492728950e10faebb847f622191a8b65c9973e7a36dc7651b100a89fc06eed8f" }, + { 6039000, "770865269664a76da46726def82bf2903746dab74348ba6fab3d9a4ef7be76b4" }, + { 6040000, "5e25799c6bf07a9781e7acf6a38c2b16cfcc807414fa0e9c7ae08700e4b9f047" }, + { 6041000, "e1007f8aa3861e127d1ace4ca90a6bdb8a565c6d8ca00bc6b550070e7a543e27" }, + { 6042000, "0851f0fbbcb199896cd60950d6de2a158db6ce329da26b80c0898e5a1fd984f6" }, + { 6043000, "92afb3c2c912b937a15f4c1e3f99e5c3c1e49114b9fe013c80ab00013141d60a" }, + { 6044000, "a4109a7f1ae542d4490e5bfb6385fa52180c1c28767c5e6e95f93ebc0ed267e1" }, + { 6045000, "8b75e3337e0ed12b09ea6a12080d0a6bd77bd018e9f9093f72d25c1e883f92e0" }, + { 6046000, "543a5ce6f2dd46eeefb537bf6ceb91686fb6471486e7b4b9332fafa73c5e690a" }, + { 6047000, "9bd9c989f811bce3d4c5c3ad0ac6ea990943c934418927fd5d1ccc7a9e6ed6be" }, + { 6048000, "e49fcbb9125562e2a07b496093a2c517404b36f57fca4a58b513ebf544033377" }, + { 6049000, "f18e7ab2db4e14699967a18c621f2c08ae6517157323f53905ba2b4920a995d1" }, + { 6050000, "f0ae2583f14b5f021d1070e0202c578710950edfbd0ac1de5249c1d8f35e7863" }, + { 6051000, "2bae8fd53792f9feb0333512debe11c8c942351b83cf4c97d9d558095ab51b52" }, + { 6052000, "0ceca076c85bb7faf0ec97100e9b01314c8bcce6df37d9259b94cb8a0315f87c" }, + { 6053000, "16ac82e5cb38c0e5d0d65556d2a22996f80153a0374c232d0cfdfab0c0cecb5b" }, + { 6054000, "39a597867f56831e8068468ac9229b6d18dce72a67727d691b4f0aeeec97996d" }, + { 6055000, "69f7be279d8d0a2a63111f577ce4067dc1cb38727b69d449c999a06dbfa58792" }, + { 6056000, "ae3f87c5be0b992f3dc49eac5038c58110b7ee2e5d86d977acd7e79310b6c232" }, + { 6057000, "edbf56a266c1faa8cb2718a1f064750080cdcce63b25a26c6657302e5c6cd84e" }, + { 6058000, "70cdae575ecdfbf7be1905d48b28a0e4812d556dc9f8d0d8c57c519ef462353f" }, + { 6059000, "78c2e344355f6f72f78ccf271ea7e53e54bc771e9181c471f57a0373f21e1177" }, + { 6060000, "63e896283d61641e9cb3764d86ae69cd96a06dd0d99af32cc104f3aa8da76a6e" }, + { 6061000, "bdde3c0102795dbc3f48afb86c4704a3b69516a35e152e2031c4e6fc016d798b" }, + { 6062000, "58e111116b87604f9fa344b481e396e1fdbd71d2c5de6cc8bfff7d2028b970d8" }, + { 6063000, "951f3412916e7a1c937127340d8c3b0b492a0d6018787e181c307bddd7e902fb" }, + { 6064000, "81094ac4c544f52f0c826aca0436b7487e3f4c574c9d0365914c2935b9aca2b0" }, + { 6065000, "5a68d0badaabda45e31d049c6cf44a44fba4c76ce9eecc7ed78d9717cc2c79e6" }, + { 6066000, "199e747e25bc86a588bb5aaf2b0297f2afbb7f6e3ce231b0ba43e581c3cdfdca" }, + { 6067000, "355b72ffd1e2bf3815e893570dc9c75cc4183dec8626b1add0ee27ac2dcca523" }, + { 6068000, "d56454cd6d29abcc9fb571e4d89add0dd8e9fd76a2a91096cb07a2776bba30d2" }, + { 6069000, "2597ff0b5155679371159f31fde737f4fdcd8e19c17cfbdedb8708a0dc16625e" }, + { 6070000, "6965271053ab06ac86fc4f6eb7bf5a58c39bfc3318db5ec9c481ddcf490d69df" }, + { 6071000, "15d803c78b9e54119f1716f0bafa1949ffbfbc598d7bc4fa3ff2fa0e8e00204e" }, + { 6072000, "c5c99bb876287f4eeacdcb28a17d096851158dd9b4d40d0231118d296ce16ea2" }, + { 6073000, "8e4d6fbffdecbe44b2777f766b53d8f1c1a845470ffa7521a1a0b969f0edf780" }, + { 6074000, "188cfe17f41a2c891f852c1fe16a52e30d1f18d9279b4ed110685d5948f9fb26" }, + { 6075000, "0749967a6bf828f1ba7e55092370cac05844345127d392696753a18e915e11d0" }, + { 6076000, "2e37b3ba03143a45258c9d674cd7c0efbcac7d1675f2a8b7ca6c9d54c29d99ae" }, + { 6077000, "9208290f7e1bfce0a89d647b35da151250b6262c4aea36e88c54cac3276a1ad2" }, + { 6078000, "8e61e8bb69eed6897d14f0427870b6764aababa491e69a3c8bec7aa886181769" }, + { 6079000, "0f5379510fe04bd3bf6ddd685050954d9a78de0b387a02b875130a60927cf75d" }, + { 6080000, "e0504af3d4de3c5b875f69e153978cbf858a138fb5db95a515cf0e9b183506e5" }, + { 6081000, "d23cd33b2a3b15726ee636cbb61a390520978501e089948649cbdd9a2632d457" }, + { 6082000, "747488c94419940a0459c12add0591c66914dc5370af9e563e6549203f72928a" }, + { 6083000, "f05793b73f30339b1858eac2b6364193b6c73a3fa3d97d7520847fb701f28e04" }, + { 6084000, "bebc70390044071a66f8a59f757e4f224339d2400c977d02cb20bad598ed1221" }, + { 6085000, "f34edf864db017f522652039febe978ac9da88fe7164d34dbdcf2178a1082b02" }, + { 6086000, "f89248c63f50df3c9141137ff4478490fbc4eead3f9c6501043c8dba98891121" }, + { 6087000, "9c3d2a5989af9f4d2a9955b94bd74a057ada11475f6a5a87b2c5ea3d212d8639" }, + { 6088000, "8bbb69b2dbf8fbf8726aa2c51459d4efc5ac25f74f46c4f1b254fa7486aa7456" }, + { 6089000, "779424bcab8d845cd892ecfc1c2b8f603ad05ffa40e3c04d640aa785c1773910" }, + { 6090000, "e917943b5de0e7b843b6dbec5b16dee16935df379f1d65d05f2cadb8c5936d2a" }, + { 6091000, "1b17e8e64764ace50dacb8da6d23ba5002864db4c5b1f79211d09bb63eb27e15" }, + { 6092000, "76e904e7e82bddc31e274161483589ab177e47e80d383324d355a2b323cf7201" }, + { 6093000, "e4060c35a002f58d93f0bc63646a646178ca4f5bd8fa92c77cd95f666e601460" }, + { 6094000, "a2d4662b44f133436141bd9f41628550d292a86fd219f709399a06fa8ae64098" }, + { 6095000, "b3b6939a098bc6f7af226488eeaf5d784e52951811e1e1324360bd91e82c81c4" }, + { 6096000, "002f50e5b6b938b916de56832435bb6e8b7ec0bec43f5ddcc73a7aed1eaf03f7" }, + { 6097000, "ec0d6c072901071b1f910561620fc996ade07ef99ff64abfcbece3ad7d68a349" }, + { 6098000, "6247c5d9fac39b95812a864cc05a1a5f76150c89ce94e4fcdec16c85184d8266" }, + { 6099000, "a7dd032a8dc083d78474bedc627ba20013cdc9e51fb9c248157c79f3241b2f05" }, + { 6100000, "0d4b5fc268c0affc29549b8e2e7f8143d6fabb7f0dbd71c8fce7dd7751c281f6" }, + { 6101000, "c16d3346b3915d7013d3d5c6a03058b59a53c659543d326752b2a75078625313" }, + { 6102000, "166f2cbdbae26f9aa30e90a6fd113f91695068d1b4b5e674383500542ef2e761" }, + { 6103000, "5e40c83857c5647cc1d8c50f267fafe5f2c2c0029b6844ca9744508250c80dcb" }, + { 6104000, "14689d81fa096ea20adee5b27ce757d9ab8cf05463a7220113f35420aba551cf" }, + { 6105000, "74961aea606758bb29c011b4a00240c48dbccb3092ae4adeefe0cd3523f335f2" }, + { 6106000, "08b20413d75ae428e13971bd281244d0f50721d524e292a7dffb1c6b067731b6" }, + { 6107000, "d4eb70cffaf92a666fd6b1c3ade48e6e5fd38e323adde9353e7b9aa1dccbe7ac" }, + { 6108000, "a91a7033f30e42f9d774e272b125747e04855dc21edb2ca0945a6d2a33e2d8e3" }, + { 6109000, "56caeb8598c1e9460798f0a7e79e1c35144a687a469c3d22cf2bd774e3f98055" }, + { 6110000, "4bbecf66923bc5a8b70069d9b90a55b6a89f889912f12f92a4a20a97d56cb2c7" }, + { 6111000, "a9c553fa6d477992e51429cf163fd2c51a5631643bf3c8e978a52dffc053274e" }, + { 6112000, "64fedf56b392feeb77c8d1fee219d77dc375f2ec0e1487cafb5dad3b944d49d9" }, + { 6113000, "6c3ef7ccda041cb97e3f9117e3651ee34332f0ce2ba70330c1c444988569b90d" }, + { 6114000, "a6b922b85c4978d922d53d9a7bdaa21265e7e2f05907c7b14e46260d3dc02ac6" }, + { 6115000, "2c1c86bae363ecd77f6ed7e551fa85a8129ced5adb11a7ddb21e4f132cf82c41" }, + { 6116000, "05d0f9d8790f9049c0281c3e7d20493c0261bd8354a82ae1bbad089e8fc1b933" }, + { 6117000, "718577590e50c8063a7f23026c3c7c621b3888c17aa459e5da57950b0e6a4b70" }, + { 6118000, "d2f49f9bfb3e61205266ca1013a08a6f58e7581a72745dfed12f27cfb0ea73ab" }, + { 6119000, "b6868f2145f5db6aaafd9cdafaf60f91bb0161c9645de83982f14088951b8b8b" }, + { 6120000, "496a7ef08b2055cce5a7f9d1f89a197354ce113ac680d866e4ec86a70fb4fc8e" }, + { 6121000, "500c672b20102ba50bf28ff428dd15725a269e442fecff85e38144fa20b716b4" }, + { 6122000, "543c69ea9f1bb74c9a4737b0bf4b4359bf67c3ce8d7a1906d1236aafbd60d6d8" }, + { 6123000, "ced9f0cd3cc5d442217e5e8cb016f4cd24ee2d3c0a2db334e9e72ee1be34523a" }, + { 6124000, "77dc8ddf5e18b2fcb3b535d8cdfc1c5b456adfd76333a5c0f2ddb21d187bcb18" }, + { 6125000, "193acb5d929c2568f81d8c91543776f6ccd6095a120c5c0cfb959a774a600955" }, + { 6126000, "3f9dade0bdf8dc01ba46b2dcc0965c8e9794fc48c7951c5ed34fe9047915eb1a" }, + { 6127000, "2311a64499b16450c0180f87c34b9e2647727a5a730a74fb2c5637da5aea4a77" }, + { 6128000, "02fb586bae5cd598844539105f051a1592cb4ac203d574f2bffd012f85c130fe" }, + { 6129000, "9178c4729d0703f5a625314d769ca0b2c93a5f40cb95b8788d1bfea15ff5cc5a" }, + { 6130000, "ddf30491eb7640531d66d6565a5bd62a9aee73e28b94a24d086fc45daa528388" }, + { 6131000, "4a3c69ca506bca2446982ce0a2f45659402b8bbea689bede002cb8d883f1bae0" }, + { 6132000, "0c1e1e5f02148eb2b768bd9f3b86960ad1d79824c908f8526e01c5534c71c092" }, + { 6133000, "5b27978a5eb02a8432d693aa7d3b9ac2b16e695e80697a8b92c611b1d3c87c4a" }, + { 6134000, "b74fac142d12014b285ab76a6caf8146ae6f610463048629ec5960ffe5dde4eb" }, + { 6135000, "90c925de21ffd81965012a93629535a473b60e0e994f8909320f209298c9bb0e" }, + { 6136000, "609044ef959746cc97518919af182e2bd284d7188b5baa36d5e0905a40e5e12a" }, + { 6137000, "339b45b45a4e412463bf94c2932b52982bfbeef126a37f7cdbda0d9cf934f043" }, + { 6138000, "17a6d621143d654b36a46142919440386ce8f7b3c6a083ddd4c3758fe15c4be8" }, + { 6139000, "8977e17bf8d63dc368bd0459b961be2890ae74cc5923e92766bff38210a4df95" }, + { 6140000, "c1816015de883c8f2d179151caa7f5998117b4e268c08438801a8bddf746e73d" }, + { 6141000, "16da29a2090ec3d2b6bc3074afbf62a4ea462411a8ef9a328a379b7c26cd3dd3" }, + { 6142000, "f712aa643ca2488695ed67358b22a708351af2523f48cc9c00db8c0172c5eb6b" }, + { 6143000, "3677b79ae4c31064fc7e286299e66a40f132f980be709a09068a168e2eab38f3" }, + { 6144000, "c3ebb5369c360a812a58dcaadb59a62097bc598afdee865bd70588120d38f839" }, + { 6145000, "5997f2393b9c54fdaf69305b79ad74ad65757fab02489bc9a992fd135cead619" }, + { 6146000, "75f27a324d4b867a57d22ecf0b8ff6cb3903c43f1729eb85271ee6637c80bd34" }, + { 6147000, "cdfaab7163181a7acbbe5e50c34c8d90387faefa81bbe695e05521e5978e8f5b" }, + { 6148000, "c141842ce8204f4a60ffaacde0442d1d56e9987c89b92431c510edf7793e9f12" }, + { 6149000, "8c0e7dcddfc126b140cbad767c2b4449e1e1b7268a52f9c3eda85ad83f6de5d2" }, + { 6150000, "dac0ee180ffebf1cf295ae35cb61d07c660004dced7f155a73bbe80b977371ac" }, + { 6151000, "48e14b58d1c021c1169b665f0fef1c3a79fdb4bb98f0ddd51a227d91371d5076" }, + { 6152000, "ce3f9a5fa6f1f8e446a1624e176d55657d1da03707476de47b85e148879ac9c5" }, + { 6153000, "5b66e7f118ceffabe4042a553168528f9b6fe1b051d5db69ce460a3835c1a540" }, + { 6154000, "b5d2131bca10a6a78b72b719263a1812af33e6721285ff9a7911d917363f439f" }, + { 6155000, "ead38411226afde560705995a3c4d003fcb1d37afd7f71c0e14925ce2545d725" }, + { 6156000, "b0d9f210372c72af23b6b7b80e398e6116a633427385555c1784c6da475becf0" }, + { 6157000, "ec8543155239455e66384092400cedcf21c81c5f4adcf7a8d7488a6754b19bca" }, + { 6158000, "ba251a521e7eec45b7a5f21ce5d9b8fe99309ccf1a721c96ccddb38d5e0fc656" }, + { 6159000, "1572fb130a3a463cc14e03f48ed9fd46dd23e25cfa935926ff69c526c0da470a" }, + { 6160000, "972d32261388d8fe8196cc015937635720d7da2ff3ed5646375655cd8503a4aa" }, + { 6161000, "cad1474628c8c671c9d792c7d65286653dda9799a22d5ce9b9cb22437971df9e" }, + { 6162000, "255effd5487fb9425247713c4f343bf26c5811c4acc77f27505b306d713034cc" }, + { 6163000, "be950bdc2a4bd2eb3aa300685ef90df2b4743591a08cc6b0a31bbf5909ab59fc" }, + { 6164000, "dc99e8122bbb244026f361a1d4c2fa7397e13f17fab0fd3ba887e7d8eb5ef257" }, + { 6165000, "c73a75e8e042f28cfbc8abcb5ea9bc40e6f7723f73b20b47672287ee9781046d" }, + { 6166000, "6065d6f4554a97eda9a9dca4b60156e11d6856a6ddffe64197b5bb5941f44840" }, + { 6167000, "cd749602cb3b1b43bff05723c81215213bc68c71fa33439db697111b7b376969" }, + { 6168000, "81d1840ea4f861f11e8a8ae80ae6c1307463a92efa55d1b054c984efbf6bbd2d" }, + { 6169000, "dd30a97b6069a6b6e92c8605d7ce5622a19315e113ba550a391d53e36e22beb3" }, + { 6170000, "81c472f7073f05ead36c5e4aa9dc162ea26107d74180f00387ac90fc6540f717" }, + { 6171000, "cb2f969e3370af289dabea55b4d22f1bec4b942fb85ff04d9ae5d6c8ac445d0a" }, + { 6172000, "c1a8d500b6e389370771b940cdca54118593b3031e38c7206a32d5d6d852b365" }, + { 6173000, "5a94106b8dd5e5d82f607d566ae2bcabe2f47f0f5bb7c25e9f4f229615eb9962" }, + { 6174000, "4b564bbf1dc09b631b53cdb3a4d854906f2f76181c04f772dc552a9ce301f5b3" }, + { 6175000, "1986e9bd55b66c19094be103ced76706ff5e0c4800f87014139feced5c50b2d7" }, + { 6176000, "f1801743205864729f9eadae01e395bd66e09d73dbddc7b84aada1b817c332dd" }, + { 6177000, "dd8a6d00a6287ee9bf32c0fac0a58e7aab69fec08b67f8ccd5ec8a94f52587c6" }, + { 6178000, "f69052e08781bd70c1c546ef01cd0dde79e9bf6299e80cab3b4cc4d4d37c251f" }, + { 6179000, "dd911dc465954d5d79ef27b757b991fe15ea7739ee74c166bc87fe9cacda0a76" }, + { 6180000, "d85058ec5d35f66afeb70722410975dd25436669c31280b37f32f2e235670536" }, + { 6181000, "eee037023b3522b3e5153a20da84c2876e7873df2e66e0b2e320cde62aa3c1ec" }, + { 6182000, "ee94215286236538ed54d5a29d99f60ab4f603f81b71948301c20b85eaf9d93c" }, + { 6183000, "3c3d20fd4af204a2484734f88c5c577b9bd3d86bf2e98bde8118d5efa2734b47" }, + { 6184000, "a3b6266d7f5788984142618039929fe2ed4f4e03f70d7428ffe08826c075b2f3" }, + { 6185000, "3a81a787c64f0c01a7deb1c61c7cd2059e7d62807d344a30070743c45ac6ebc5" }, + { 6186000, "1252f3de7a55064440f51cb351f3aed2588b39626af40940aae6f22703c99aca" }, + { 6187000, "8fea78a7898eb13477fb8a04756a2e827112d178220d156854aa4455c281e8eb" }, + { 6188000, "98c6bce09be42aae16ae233a8f34ca2b565c8ad3ca24c87f33146b638b94bfed" }, + { 6189000, "55c7859b03df4169b4a91a05250f510bcca4cbff7c295df7c8e5dc63cac2703f" }, + { 6190000, "86e175f896589a062942583868dbe1c418ab8922c5fe6096804ba165eee32e50" }, + { 6191000, "eea5b490931af375e4c6e03a3f3ab8a80496103a5ae5ab15ba3a48867cffb33e" }, + { 6192000, "8eea132dd647b047eed8c4e6a443aca3d413b5ddd6d64942111c27047ad62d31" }, + { 6193000, "b8542097e842af5dc97395d9204d1298ce73bcc8e60934f6d65901665054c332" }, + { 6194000, "89d5d402b9113fe3bbd18c48796787b94923a1c3bc34054b11f1d084444ec349" }, + { 6195000, "3ba0c573594f7eab06b207ce7e770381f71e0bf0360c870aeefe13c584c9bb19" }, + { 6196000, "9590dcd792b6e9924aef33037ff7f5cdd3df0aa87656553fb64e10023a6c94be" }, + { 6197000, "34264ae7688274325652ae8c20c529677a5ba9144a40c076b96f060d8b08bd40" }, + { 6198000, "f29c48bb8c295594c959d8d09aa72e064d2b355603a3ee9b8159f7ba42cffb4c" }, + { 6199000, "129ff29abf77495f1248a0400c02d229480b67fa04247ee812d2ed66e933bac1" }, + { 6200000, "b56a4e462182208430d89736df4cd4f42fa3ba9f47bc43ff8c373ab0623c74ba" }, + { 6201000, "99edc4b98f74e0395f5781f536b953abe71cf36a841cbd32fc3f8e10b87f4c5e" }, + { 6202000, "0944ae37fce54d015bc7e940b42d62343feb376202bd30f925080549f5c51f9e" }, + { 6203000, "3637acc5aa37c26fa661cd63674676bf596708821ef31f792f07d2629bc2a0c5" }, + { 6204000, "7c7934438db8b6411e7b8c39acfe9e9292b602b21037d29d9b82da8e55e3c835" }, + { 6205000, "12ffe18a2b1671df3995391e4bc0831221cd8dc4bfbf1f698ad02ace34c27e87" }, + { 6206000, "9a7953ecbc3e3c40379f0913f37df2247ccff1209c3838dc6ffcb9c98b7dd949" }, + { 6207000, "e14d854533d8277eedebadc550b124f84f2bcfbde690a2d2a9fcac0f20d09260" }, + { 6208000, "a1e5dc58d6b2c4e2b21f3515a94a4fa8a12964bcf75c216959e440b7f355bac9" }, + { 6209000, "47d0dd8e7e6ff0d953f0bf8dded4535147f036f1f83b949f678a6a8a275b9d88" }, + { 6210000, "8e967a41c0c4dd69680bc9ce2aa0b2821965ed2d19264b35685063f0cd4d823a" }, + { 6211000, "affa94997895f9ec28c70dc2779ffb1df3985e62758a504e3a6cfd28d5a00957" }, + { 6212000, "642a96b0da3eb121ec58a1c680c1fd0dd82b4ab174496bf57afca3e5bcb082be" }, + { 6213000, "eced61c107924caa682d8b9b55438f611bef183a101668fefa793a3d8b4330ad" }, + { 6214000, "e6353d81d503787459055dc21f1dd763a3678d33b5a931a92507617ba61f04a4" }, + { 6215000, "0b95893d179b9f634b5def14654489f0de006907c9fd55b72981113326375435" }, + { 6216000, "053ece771ca6c4af1937519638a2fcc3b7df89d9c8592aba073029905947debe" }, + { 6217000, "406e92d47dd01351fe14bf9160e297224e9e29f50230c2b4fe7fc0d63b869d99" }, + { 6218000, "78748128bdd51981faef28a0fe15eeb3a3d32ba34850b26c2609375cbc2e9212" }, + { 6219000, "41b0c86440ca203511c9aa2f62fe2f61e913e0b8fbd07ad0ef5753f8b89df311" }, + { 6220000, "fae33d2ca3bb83b57e91ec87b603d8ceb11858c1ca015b1472bd9b3c5acd2400" }, + { 6221000, "d655372c0e5125180c3a35d46a25aeeba4927ac2f6b12b9dbf2709d44d7c2af4" }, + { 6222000, "117eb9e784072bf039bfffe2c2e1477b993659f715a9e128262ef2cef6bffe7b" }, + { 6223000, "e181576b467b6ee047b86182411321d6b7173a8a4b129db4d7fb719c0b5a7009" }, + { 6224000, "bcf8f07b004739b8329c29e7d9a644ab469af3a34e56cbe421280d45317fee55" }, + { 6225000, "972ea0220361e5bf65d5e5d1ef7fa2f6dcb819e6c767453ce0303e6fd9668198" }, + { 6226000, "8c5389665db6b36e6bede3a39aa34ffb3e4838ae49170c6d1e6aba26e2db82d5" }, + { 6227000, "1041d8c510124ee3ef984878d27fa8d62c9e540e0eaf6f19668946a419c4b2a6" }, + { 6228000, "7c116477b6ae592f721842a13bf7b40d084479f15b9ee1ad8259806ede5431a2" }, + { 6229000, "5a91311a04b843734ed3d6202bb7b81e3bc07aedefee80d546fc677db675debc" }, + { 6230000, "a10e16fb4567c1710e49191efc28b57cd1dd4507d99dd0b7b4669c2bc4afaba0" }, + { 6231000, "b7e61ad7adf6b30101fe2bc09a2bee799da9e6a810a2ea151cc0100a58ff9f6a" }, + { 6232000, "440fd9566e663df265635368a4d7b98edde6e1a51eb8bef5fbd22bd6fd68fdc5" }, + { 6233000, "33f94bc6a7a78a65d5a0070d9eb92f898b5600efb78dcc26a2233fbae8ba8ff3" }, + { 6234000, "3d4939458fbea760fc83ed26d19a432b6d9c34c2a00b53332b8c0831e13d9b47" }, + { 6235000, "28c7abb10a5607862e4ea3d43926e350df0cfdbc62136ed7cff140b9c209b825" }, + { 6236000, "845c44cc6459616fbf3ccdd84e6cfeea87a752d017142aff31715394b4066076" }, + { 6237000, "4c2e6be4a042b6ab341f329820bd1c812ad79db20f961bf83d2320de5ddbd07d" }, + { 6238000, "85fd5a093a29a978d628afb35074ba0374531a0aafdeb1fea0f3f3c9bd962f06" }, + { 6239000, "b71bd7595e0ab26fbcc456a583e20689942276dc2cfe4cf2a42b454123a85af5" }, + {0, NULL} /* sentinel */ +}; +const size_t dogecoin_mainnet_cf_checkpoint_count = 6239; + +const dogecoin_cf_checkpoint dogecoin_testnet_cf_checkpoint_array[] = { + {0, NULL} +}; +const size_t dogecoin_testnet_cf_checkpoint_count = 0; + +/* Regtest has no published filter-header checkpoints: chains are generated per + test run, so there is nothing stable to pin. Left empty deliberately. */ +const dogecoin_cf_checkpoint dogecoin_regtest_cf_checkpoint_array[] = { + { 0, "0000000000000000000000000000000000000000000000000000000000000000" } +}; +const size_t dogecoin_regtest_cf_checkpoint_count = 0; diff --git a/src/compact_filter.c b/src/compact_filter.c new file mode 100644 index 000000000..11d20d412 --- /dev/null +++ b/src/compact_filter.c @@ -0,0 +1,568 @@ +/* + + The MIT License (MIT) + + Copyright (c) 2018 Bitcoin Core developers + Copyright (c) 2026 bluezr + Copyright (c) 2026 The Dogecoin Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES + OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +*/ + +/** + * @file compact_filter.c + * @brief BIP 157 Client Side Block Filtering protocol implementation. + */ + +#include + +#include +#include +#include +#include +#include +#include + +/* Wrapper for cstr_free to use as vector element free callback */ +static void cstr_free_void(void *ptr) { + cstr_free((cstring *)ptr, true); +} + +/* ================================================================ */ +/* Message Serialization */ +/* ================================================================ */ + +void dogecoin_p2p_msg_getcfilters_ser(const dogecoin_getcfilters_msg *msg, cstring *out) { + if (!msg || !out) return; + ser_bytes(out, &msg->filter_type, 1); + ser_u32(out, msg->start_height); + ser_u256(out, msg->stop_hash); +} + +void dogecoin_p2p_msg_getcfheaders_ser(const dogecoin_getcfheaders_msg *msg, cstring *out) { + if (!msg || !out) return; + ser_bytes(out, &msg->filter_type, 1); + ser_u32(out, msg->start_height); + ser_u256(out, msg->stop_hash); +} + +void dogecoin_p2p_msg_getcfcheckpt_ser(const dogecoin_getcfcheckpt_msg *msg, cstring *out) { + if (!msg || !out) return; + ser_bytes(out, &msg->filter_type, 1); + ser_u256(out, msg->stop_hash); +} + +/* ================================================================ */ +/* Message Deserialization */ +/* ================================================================ */ + +dogecoin_bool dogecoin_p2p_msg_cfilter_deser(dogecoin_cfilter_msg *msg, struct const_buffer *buf) { + if (!msg || !buf) return false; + + /* filter_type (1 byte) -- BIP157: FilterType | BlockHash | NumFilterBytes | FilterBytes */ + if (buf->len < 1) return false; + deser_bytes(&msg->filter_type, buf, 1); + + /* block_hash (32 bytes) */ + if (!deser_u256(msg->block_hash, buf)) return false; + + /* filter_data (var_bytes: compact_size + data) */ + uint32_t filter_len; + if (!deser_varlen(&filter_len, buf)) return false; + + if (buf->len < filter_len) return false; + + if (msg->filter_data) { + cstr_free(msg->filter_data, true); + } + msg->filter_data = cstr_new_buf(buf->p, filter_len); + buf->p = (const uint8_t *)buf->p + filter_len; + buf->len -= filter_len; + + return true; +} + +dogecoin_bool dogecoin_p2p_msg_cfheaders_deser(dogecoin_cfheaders_msg *msg, struct const_buffer *buf) { + if (!msg || !buf) return false; + + /* filter_type (1 byte) */ + if (buf->len < 1) return false; + deser_bytes(&msg->filter_type, buf, 1); + + /* stop_hash (32 bytes) */ + if (!deser_u256(msg->stop_hash, buf)) return false; + + /* prev_filter_header (32 bytes) */ + if (!deser_u256(msg->prev_filter_header, buf)) return false; + + /* filter_hashes_length (compact_size) */ + uint32_t n_hashes; + if (!deser_varlen(&n_hashes, buf)) return false; + + /* n_hashes is an attacker-controlled count read straight off the wire (up to + 0xFFFFFFFF). Each hash that follows is 32 bytes, so a message can declare at + most buf->len / 32 of them. Without this check vector_new() below allocates + n_hashes pointers -- and it rounds the reservation *up* to a power of two, so + 0xFFFFFFFF becomes a 2^32 * sizeof(void*) (~34 GB) calloc -- before a single + hash is read: a memory-exhaustion DoS from a ~10-byte cfheaders message. + BIP157 also caps a getcfheaders span at 2000 blocks, so bound by that too. */ + if (n_hashes > buf->len / DOGECOIN_HASH_LENGTH) return false; + if (n_hashes > MAX_GETCFHEADERS_SIZE) return false; + + /* Deserialize each 32-byte filter hash */ + if (msg->filter_hashes) { + vector_free(msg->filter_hashes, true); + } + msg->filter_hashes = vector_new(n_hashes, dogecoin_free); + if (!msg->filter_hashes) return false; + + uint32_t i; + for (i = 0; i < n_hashes; i++) { + uint256_t *hash = dogecoin_calloc(1, sizeof(uint256_t)); + if (!deser_u256(*hash, buf)) { + dogecoin_free(hash); + return false; + } + vector_add(msg->filter_hashes, hash); + } + + return true; +} + +dogecoin_bool dogecoin_p2p_msg_cfcheckpt_deser(dogecoin_cfcheckpt_msg *msg, struct const_buffer *buf) { + if (!msg || !buf) return false; + + /* filter_type (1 byte) */ + if (buf->len < 1) return false; + deser_bytes(&msg->filter_type, buf, 1); + + /* stop_hash (32 bytes) */ + if (!deser_u256(msg->stop_hash, buf)) return false; + + /* filter_headers_length (compact_size) */ + uint32_t n_headers; + if (!deser_varlen(&n_headers, buf)) return false; + + /* Same unbounded-allocation hazard as cfheaders above: n_headers comes off the + wire and feeds vector_new(), which reserves a power-of-two number of pointers + (~34 GB at 0xFFFFFFFF) before any header is read. Each checkpoint is a 32-byte + hash, so reject any count the remaining buffer cannot possibly hold. Checkpoints + are one per 1000 blocks, so the buffer bound is the meaningful limit here. */ + if (n_headers > buf->len / DOGECOIN_HASH_LENGTH) return false; + + /* Deserialize each 32-byte filter header checkpoint */ + if (msg->filter_headers) { + vector_free(msg->filter_headers, true); + } + msg->filter_headers = vector_new(n_headers, dogecoin_free); + if (!msg->filter_headers) return false; + + uint32_t i; + for (i = 0; i < n_headers; i++) { + uint256_t *hdr = dogecoin_calloc(1, sizeof(uint256_t)); + if (!deser_u256(*hdr, buf)) { + dogecoin_free(hdr); + return false; + } + vector_add(msg->filter_headers, hdr); + } + + return true; +} + +/* ================================================================ */ +/* Message Lifecycle */ +/* ================================================================ */ + +void dogecoin_cfilter_msg_init(dogecoin_cfilter_msg *msg) { + if (!msg) return; + msg->filter_type = GCS_BASIC_FILTER_TYPE; + dogecoin_mem_zero(msg->block_hash, sizeof(uint256_t)); + msg->filter_data = NULL; +} + +void dogecoin_cfilter_msg_free(dogecoin_cfilter_msg *msg) { + if (!msg) return; + if (msg->filter_data) { + cstr_free(msg->filter_data, true); + msg->filter_data = NULL; + } +} + +void dogecoin_cfheaders_msg_init(dogecoin_cfheaders_msg *msg) { + if (!msg) return; + msg->filter_type = GCS_BASIC_FILTER_TYPE; + dogecoin_mem_zero(msg->stop_hash, sizeof(uint256_t)); + dogecoin_mem_zero(msg->prev_filter_header, sizeof(uint256_t)); + msg->filter_hashes = NULL; +} + +void dogecoin_cfheaders_msg_free(dogecoin_cfheaders_msg *msg) { + if (!msg) return; + if (msg->filter_hashes) { + vector_free(msg->filter_hashes, true); + msg->filter_hashes = NULL; + } +} + +void dogecoin_cfcheckpt_msg_init(dogecoin_cfcheckpt_msg *msg) { + if (!msg) return; + msg->filter_type = GCS_BASIC_FILTER_TYPE; + dogecoin_mem_zero(msg->stop_hash, sizeof(uint256_t)); + msg->filter_headers = NULL; +} + +void dogecoin_cfcheckpt_msg_free(dogecoin_cfcheckpt_msg *msg) { + if (!msg) return; + if (msg->filter_headers) { + vector_free(msg->filter_headers, true); + msg->filter_headers = NULL; + } +} + +/* ================================================================ */ +/* Compact Filter State Management */ +/* ================================================================ */ + +dogecoin_compact_filter_state* dogecoin_compact_filter_state_new(void) { + dogecoin_compact_filter_state *state = dogecoin_calloc(1, sizeof(dogecoin_compact_filter_state)); + if (!state) return NULL; + state->enabled = false; + state->filter_type = GCS_BASIC_FILTER_TYPE; + state->cfheaders_tip_height = 0; + dogecoin_mem_zero(state->cfheaders_tip_hash, sizeof(uint256_t)); + dogecoin_mem_zero(state->genesis_filter_header, sizeof(uint256_t)); + state->filter_headers = vector_new(4096, dogecoin_free); + state->checkpoints = vector_new(64, dogecoin_free); + state->cfheaders_base_height = 1; + state->filters_tip_height = 0; + state->cfilter_batch_end = 0; + state->pending_start_height = 0; + dogecoin_mem_zero(state->pending_stop_hash, sizeof(uint256_t)); + state->awaiting_response = false; + state->last_request_time = 0; + state->watched_scripts = vector_new(16, cstr_free_void); + state->matched_block_hashes = vector_new(64, dogecoin_free); + state->matched_block_heights = vector_new(64, dogecoin_free); + state->matched_blocks_fetched = 0; + state->cf_block_fetch_active = false; + state->par_num_workers = 0; + state->par_next_height = 0; + state->par_flush_height = 0; + state->par_bufs = NULL; + state->cfh_par_n = 0; + state->cfh_par_done = 0; + state->cfh_par_data = NULL; + state->cfh_par_base = 1; + state->cfh_par_total = 0; + state->cfh_par_chunks = NULL; + state->filter_headers_flat = NULL; + state->filter_headers_flat_base = 1; + state->filter_headers_flat_len = 0; + return state; +} + +void dogecoin_compact_filter_state_free(dogecoin_compact_filter_state *state) { + if (!state) return; + if (state->filter_headers) { + vector_free(state->filter_headers, true); + state->filter_headers = NULL; + } + if (state->checkpoints) { + vector_free(state->checkpoints, true); + state->checkpoints = NULL; + } + if (state->watched_scripts) { + vector_free(state->watched_scripts, true); + state->watched_scripts = NULL; + } + if (state->matched_block_hashes) { + vector_free(state->matched_block_hashes, true); + state->matched_block_hashes = NULL; + } + if (state->matched_block_heights) { + vector_free(state->matched_block_heights, true); + state->matched_block_heights = NULL; + } + if (state->par_bufs) { + uint8_t pi; + for (pi = 0; pi < state->par_num_workers; pi++) { + cf_par_buf *b = &state->par_bufs[pi]; + if (b->records) { + uint32_t cnt = (b->batch_end >= b->batch_start) ? (b->batch_end - b->batch_start + 1) : 0; + uint32_t ri; + for (ri = 0; ri < cnt; ri++) { + if (b->records[ri].filter_data) + cstr_free(b->records[ri].filter_data, true); + } + dogecoin_free(b->records); + b->records = NULL; + } + } + dogecoin_free(state->par_bufs); + state->par_bufs = NULL; + } + if (state->cfh_par_data) { + dogecoin_free(state->cfh_par_data); + state->cfh_par_data = NULL; + } + if (state->cfh_par_chunks) { + dogecoin_free(state->cfh_par_chunks); + state->cfh_par_chunks = NULL; + } + if (state->filter_headers_flat) { + dogecoin_free(state->filter_headers_flat); + state->filter_headers_flat = NULL; + } + dogecoin_free(state); +} + +void dogecoin_compact_filter_state_reset(dogecoin_compact_filter_state *state) { + if (!state) return; + state->cfheaders_tip_height = 0; + dogecoin_mem_zero(state->cfheaders_tip_hash, sizeof(uint256_t)); + dogecoin_mem_zero(state->genesis_filter_header, sizeof(uint256_t)); + if (state->filter_headers) { + vector_free(state->filter_headers, true); + state->filter_headers = vector_new(4096, dogecoin_free); + } + if (state->checkpoints) { + vector_free(state->checkpoints, true); + state->checkpoints = vector_new(64, dogecoin_free); + } + state->cfheaders_base_height = 1; + state->filters_tip_height = 0; + state->pending_start_height = 0; + dogecoin_mem_zero(state->pending_stop_hash, sizeof(uint256_t)); + state->awaiting_response = false; + state->last_request_time = 0; + /* Keep watched_scripts - they don't change on reset */ + if (state->matched_block_hashes) { + vector_free(state->matched_block_hashes, true); + state->matched_block_hashes = vector_new(64, dogecoin_free); + } + if (state->matched_block_heights) { + vector_free(state->matched_block_heights, true); + state->matched_block_heights = vector_new(64, dogecoin_free); + } + state->matched_blocks_fetched = 0; + state->cf_block_fetch_active = false; + /* Free parallel cfheaders download state */ + if (state->cfh_par_data) { + dogecoin_free(state->cfh_par_data); + state->cfh_par_data = NULL; + } + if (state->cfh_par_chunks) { + dogecoin_free(state->cfh_par_chunks); + state->cfh_par_chunks = NULL; + } + state->cfh_par_n = 0; + state->cfh_par_done = 0; + state->cfh_par_total = 0; + if (state->filter_headers_flat) { + dogecoin_free(state->filter_headers_flat); + state->filter_headers_flat = NULL; + state->filter_headers_flat_len = 0; + } + + /* Reset parallel cfilter state but keep par_num_workers and par_bufs allocation */ + state->par_next_height = 0; + state->par_flush_height = 0; + if (state->par_bufs) { + uint8_t pi; + for (pi = 0; pi < state->par_num_workers; pi++) { + cf_par_buf *b = &state->par_bufs[pi]; + if (b->records) { + uint32_t cnt = (b->batch_end >= b->batch_start) ? (b->batch_end - b->batch_start + 1) : 0; + uint32_t ri; + for (ri = 0; ri < cnt; ri++) { + if (b->records[ri].filter_data) + cstr_free(b->records[ri].filter_data, true); + } + dogecoin_free(b->records); + b->records = NULL; + } + b->node_id = -1; + b->received = 0; + b->complete = false; + } + } +} + +/* ================================================================ */ +/* Compact Filter Validation and Header Computation */ +/* ================================================================ */ + +void dogecoin_compact_filter_compute_header(const cstring *filter_data, const uint256_t prev_filter_header, uint256_t header_out) { + if (!filter_data) { + dogecoin_mem_zero(header_out, sizeof(uint256_t)); + return; + } + + /* filter_hash = dbl_sha256(filter_data) */ + uint256_t filter_hash; + dogecoin_hash((const unsigned char *)filter_data->str, filter_data->len, filter_hash); + + /* filter_header = dbl_sha256(filter_hash || prev_filter_header) */ + uint8_t combined[64]; + memcpy(combined, filter_hash, 32); + memcpy(combined + 32, prev_filter_header, 32); + dogecoin_hash(combined, 64, header_out); +} + +dogecoin_bool dogecoin_compact_filter_validate(const cstring *filter_data, const uint256_t prev_filter_header, const uint256_t expected_filter_header) { + if (!filter_data) return false; + + uint256_t computed_header; + dogecoin_compact_filter_compute_header(filter_data, prev_filter_header, computed_header); + + return memcmp(computed_header, expected_filter_header, 32) == 0; +} + +/* ================================================================ */ +/* BIP 157 Hardcoded Checkpoint Helpers */ +/* ================================================================ */ + +const dogecoin_cf_checkpoint* dogecoin_cf_get_checkpoints( + const dogecoin_chainparams *chain, size_t *count_out) +{ + if (!chain || !count_out) return NULL; + + if (chain == &dogecoin_chainparams_main) { + *count_out = dogecoin_mainnet_cf_checkpoint_count; + return dogecoin_mainnet_cf_checkpoint_array; + } else if (chain == &dogecoin_chainparams_test) { + *count_out = dogecoin_testnet_cf_checkpoint_count; + return dogecoin_testnet_cf_checkpoint_array; + } else if (chain == &dogecoin_chainparams_regtest) { + *count_out = dogecoin_regtest_cf_checkpoint_count; + return dogecoin_regtest_cf_checkpoint_array; + } + + /* Unknown chain — fallback: try chainname comparison */ + if (strcmp(chain->chainname, "main") == 0) { + *count_out = dogecoin_mainnet_cf_checkpoint_count; + return dogecoin_mainnet_cf_checkpoint_array; + } else if (strcmp(chain->chainname, "testnet3") == 0) { + *count_out = dogecoin_testnet_cf_checkpoint_count; + return dogecoin_testnet_cf_checkpoint_array; + } else if (strcmp(chain->chainname, "regtest") == 0) { + *count_out = dogecoin_regtest_cf_checkpoint_count; + return dogecoin_regtest_cf_checkpoint_array; + } + + *count_out = 0; + return NULL; +} + +dogecoin_bool dogecoin_cf_validate_checkpoints( + const dogecoin_chainparams *chain, const vector_t *peer_checkpoints) +{ + if (!chain || !peer_checkpoints) return false; + + size_t hardcoded_count = 0; + const dogecoin_cf_checkpoint *hardcoded = dogecoin_cf_get_checkpoints(chain, &hardcoded_count); + + /* No hardcoded checkpoints: nothing to validate against — pass */ + if (!hardcoded || hardcoded_count == 0) return true; + + /* + * Dogecoin Core (and Bitcoin Core) sends checkpoints at heights 1000, 2000, 3000 ... + * peer_checkpoints[i] = filter header at height (i+1) * CFCHECKPT_INTERVAL. + * Index mapping: cp_idx = height / CFCHECKPT_INTERVAL - 1. + * So hardcoded height 1000 → cp_idx 0, height 2000 → cp_idx 1, etc. + */ + for (size_t i = 0; i < hardcoded_count; i++) { + if (hardcoded[i].height == 0 || hardcoded[i].filter_header == NULL) break; + + uint32_t cp_idx = hardcoded[i].height / CFCHECKPT_INTERVAL - 1; + + if (cp_idx >= peer_checkpoints->len) continue; /* peer's chain is shorter */ + + /* Convert hardcoded hex → uint256_t for comparison */ + uint256_t hardcoded_hash; + utils_uint256_sethex((char *)hardcoded[i].filter_header, hardcoded_hash); + + const uint256_t *peer_hash = (const uint256_t *)vector_idx(peer_checkpoints, cp_idx); + if (memcmp(hardcoded_hash, peer_hash, 32) != 0) { + return false; /* mismatch — peer data is invalid */ + } + } + + return true; +} + +size_t dogecoin_cf_load_hardcoded_checkpoints( + dogecoin_compact_filter_state *state, const dogecoin_chainparams *chain) +{ + if (!state || !chain) return 0; + + size_t hardcoded_count = 0; + const dogecoin_cf_checkpoint *hardcoded = dogecoin_cf_get_checkpoints(chain, &hardcoded_count); + + if (!hardcoded || hardcoded_count == 0) return 0; + + /* Free existing checkpoints if any */ + if (state->checkpoints) { + vector_free(state->checkpoints, true); + } + + /* + * Determine the highest checkpoint index we need. + * The vector must be contiguous from index 0..max_cp_idx. + * Find the max height, compute max_cp_idx, and size the vector. + */ + uint32_t max_height = 0; + for (size_t i = 0; i < hardcoded_count; i++) { + if (hardcoded[i].height == 0 || hardcoded[i].filter_header == NULL) break; + if (hardcoded[i].height > max_height) max_height = hardcoded[i].height; + } + + if (max_height == 0) { + state->checkpoints = vector_new(1, dogecoin_free); + return 0; + } + + uint32_t max_cp_idx = max_height / CFCHECKPT_INTERVAL - 1; + uint32_t n_slots = max_cp_idx + 1; + + state->checkpoints = vector_new(n_slots, dogecoin_free); + + /* Pre-fill all slots with zero hashes */ + for (uint32_t j = 0; j < n_slots; j++) { + uint256_t *slot = dogecoin_calloc(1, sizeof(uint256_t)); + vector_add(state->checkpoints, slot); + } + + /* Now fill in the hardcoded values */ + size_t loaded = 0; + for (size_t i = 0; i < hardcoded_count; i++) { + if (hardcoded[i].height == 0 || hardcoded[i].filter_header == NULL) break; + + uint32_t cp_idx = hardcoded[i].height / CFCHECKPT_INTERVAL - 1; + if (cp_idx >= state->checkpoints->len) continue; + + uint256_t *slot = (uint256_t *)vector_idx(state->checkpoints, cp_idx); + utils_uint256_sethex((char *)hardcoded[i].filter_header, *slot); + loaded++; + } + + return loaded; +} diff --git a/test/compact_filter_tests.c b/test/compact_filter_tests.c new file mode 100644 index 000000000..328ed525c --- /dev/null +++ b/test/compact_filter_tests.c @@ -0,0 +1,559 @@ +/* + + The MIT License (MIT) + + Copyright (c) 2026 bluezr + Copyright (c) 2026 The Dogecoin Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES + OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +*/ + +#include + +#include + +#include +#include +#include +#include +#include + +/* ================================================================ */ +/* State lifecycle */ +/* ================================================================ */ + +static void test_compact_filter_state_lifecycle(void) +{ + dogecoin_compact_filter_state *state = dogecoin_compact_filter_state_new(); + u_assert_not_null(state); + u_assert_true(state->enabled == false); + u_assert_uint32_eq(state->filter_type, GCS_BASIC_FILTER_TYPE); + u_assert_uint32_eq(state->cfheaders_tip_height, 0); + u_assert_uint32_eq(state->filters_tip_height, 0); + u_assert_true(state->awaiting_response == false); + u_assert_not_null(state->filter_headers); + u_assert_not_null(state->checkpoints); + u_assert_not_null(state->watched_scripts); + u_assert_not_null(state->matched_block_hashes); + + /* cfheaders_base_height must start at 1 (default) */ + u_assert_uint32_eq(state->cfheaders_base_height, 1); + + /* reset clears tip height and awaiting flag, preserves watched_scripts */ + state->cfheaders_tip_height = 42; + state->cfheaders_base_height = 6238060; + state->awaiting_response = true; + dogecoin_compact_filter_state_reset(state); + u_assert_uint32_eq(state->cfheaders_tip_height, 0); + u_assert_uint32_eq(state->cfheaders_base_height, 1); + u_assert_true(state->awaiting_response == false); + u_assert_not_null(state->watched_scripts); + + dogecoin_compact_filter_state_free(state); +} + +/* ================================================================ */ +/* Request message serialization */ +/* ================================================================ */ + +static void test_getcfilters_ser(void) +{ + dogecoin_getcfilters_msg msg; + msg.filter_type = GCS_BASIC_FILTER_TYPE; + msg.start_height = 0x01020304; + uint8_t stop_hash[32]; + uint32_t i; + for (i = 0; i < 32; i++) stop_hash[i] = (uint8_t)(i * 2 + 1); + memcpy(msg.stop_hash, stop_hash, 32); + + cstring *buf = cstr_new_sz(64); + dogecoin_p2p_msg_getcfilters_ser(&msg, buf); + + /* 1 (filter_type) + 4 (start_height LE) + 32 (stop_hash) = 37 */ + u_assert_uint32_eq(buf->len, 37); + u_assert_uint32_eq((uint8_t)buf->str[0], GCS_BASIC_FILTER_TYPE); + /* start_height 0x01020304 in LE: 04 03 02 01 */ + u_assert_uint32_eq((uint8_t)buf->str[1], 0x04); + u_assert_uint32_eq((uint8_t)buf->str[2], 0x03); + u_assert_uint32_eq((uint8_t)buf->str[3], 0x02); + u_assert_uint32_eq((uint8_t)buf->str[4], 0x01); + u_assert_mem_eq(buf->str + 5, stop_hash, 32); + cstr_free(buf, true); +} + +static void test_getcfheaders_ser(void) +{ + dogecoin_getcfheaders_msg msg; + msg.filter_type = GCS_BASIC_FILTER_TYPE; + msg.start_height = 1000; + memset(msg.stop_hash, 0xAB, 32); + + cstring *buf = cstr_new_sz(64); + dogecoin_p2p_msg_getcfheaders_ser(&msg, buf); + + u_assert_uint32_eq(buf->len, 37); + u_assert_uint32_eq((uint8_t)buf->str[0], GCS_BASIC_FILTER_TYPE); + /* start_height 1000 = 0x3E8 in LE: E8 03 00 00 */ + u_assert_uint32_eq((uint8_t)buf->str[1], 0xE8); + u_assert_uint32_eq((uint8_t)buf->str[2], 0x03); + u_assert_uint32_eq((uint8_t)buf->str[3], 0x00); + u_assert_uint32_eq((uint8_t)buf->str[4], 0x00); + cstr_free(buf, true); +} + +static void test_getcfcheckpt_ser(void) +{ + dogecoin_getcfcheckpt_msg msg; + msg.filter_type = GCS_BASIC_FILTER_TYPE; + memset(msg.stop_hash, 0x55, 32); + + cstring *buf = cstr_new_sz(64); + dogecoin_p2p_msg_getcfcheckpt_ser(&msg, buf); + + /* 1 (filter_type) + 32 (stop_hash) = 33 */ + u_assert_uint32_eq(buf->len, 33); + u_assert_uint32_eq((uint8_t)buf->str[0], GCS_BASIC_FILTER_TYPE); + uint8_t expected[32]; + memset(expected, 0x55, 32); + u_assert_mem_eq(buf->str + 1, expected, 32); + cstr_free(buf, true); +} + +/* ================================================================ */ +/* Response message deserialization */ +/* ================================================================ */ + +static void test_cfilter_deser(void) +{ + /* BIP157 wire format: filter_type(1) | block_hash(32) | varint(len) | data */ + uint8_t block_hash[32]; + uint32_t i; + for (i = 0; i < 32; i++) block_hash[i] = (uint8_t)i; + const uint8_t filter_bytes[] = {0xDE, 0xAD, 0xBE, 0xEF}; + + cstring *wire = cstr_new_sz(64); + uint8_t ft = GCS_BASIC_FILTER_TYPE; + ser_bytes(wire, &ft, 1); + ser_bytes(wire, block_hash, 32); + ser_varlen(wire, sizeof(filter_bytes)); + ser_bytes(wire, filter_bytes, sizeof(filter_bytes)); + + struct const_buffer buf = {(const uint8_t *)wire->str, wire->len}; + dogecoin_cfilter_msg msg; + dogecoin_cfilter_msg_init(&msg); + + u_assert_true(dogecoin_p2p_msg_cfilter_deser(&msg, &buf)); + u_assert_mem_eq(msg.block_hash, block_hash, 32); + u_assert_uint32_eq(msg.filter_type, GCS_BASIC_FILTER_TYPE); + u_assert_not_null(msg.filter_data); + u_assert_uint32_eq(msg.filter_data->len, sizeof(filter_bytes)); + u_assert_mem_eq(msg.filter_data->str, filter_bytes, sizeof(filter_bytes)); + u_assert_uint32_eq(buf.len, 0); /* fully consumed */ + + dogecoin_cfilter_msg_free(&msg); + cstr_free(wire, true); +} + +static void test_cfilter_deser_truncated(void) +{ + /* Truncated message should fail cleanly */ + uint8_t short_buf[10]; + memset(short_buf, 0, sizeof(short_buf)); + struct const_buffer buf = {short_buf, sizeof(short_buf)}; + dogecoin_cfilter_msg msg; + dogecoin_cfilter_msg_init(&msg); + /* Only 10 bytes — not enough for filter_type(1) + block_hash(32) */ + u_assert_true(!dogecoin_p2p_msg_cfilter_deser(&msg, &buf)); + dogecoin_cfilter_msg_free(&msg); +} + +static void test_cfheaders_deser(void) +{ + /* Wire: filter_type(1) | stop_hash(32) | prev_filter_header(32) | varint(N) | N×32 hashes */ + uint8_t stop_hash[32], prev_header[32], hash1[32], hash2[32]; + memset(stop_hash, 0x11, 32); + memset(prev_header, 0x22, 32); + memset(hash1, 0xAA, 32); + memset(hash2, 0xBB, 32); + + cstring *wire = cstr_new_sz(128); + uint8_t ft = GCS_BASIC_FILTER_TYPE; + ser_bytes(wire, &ft, 1); + ser_bytes(wire, stop_hash, 32); + ser_bytes(wire, prev_header, 32); + ser_varlen(wire, 2); + ser_bytes(wire, hash1, 32); + ser_bytes(wire, hash2, 32); + + struct const_buffer buf = {(const uint8_t *)wire->str, wire->len}; + dogecoin_cfheaders_msg msg; + dogecoin_cfheaders_msg_init(&msg); + + u_assert_true(dogecoin_p2p_msg_cfheaders_deser(&msg, &buf)); + u_assert_uint32_eq(msg.filter_type, GCS_BASIC_FILTER_TYPE); + u_assert_mem_eq(msg.stop_hash, stop_hash, 32); + u_assert_mem_eq(msg.prev_filter_header, prev_header, 32); + u_assert_not_null(msg.filter_hashes); + u_assert_uint32_eq((uint32_t)msg.filter_hashes->len, 2); + u_assert_mem_eq(vector_idx(msg.filter_hashes, 0), hash1, 32); + u_assert_mem_eq(vector_idx(msg.filter_hashes, 1), hash2, 32); + u_assert_uint32_eq(buf.len, 0); + + dogecoin_cfheaders_msg_free(&msg); + cstr_free(wire, true); +} + +static void test_cfcheckpt_deser(void) +{ + /* Wire: filter_type(1) | stop_hash(32) | varint(N) | N×32 filter headers */ + uint8_t stop_hash[32], cp1[32], cp2[32], cp3[32]; + memset(stop_hash, 0x55, 32); + memset(cp1, 0x01, 32); + memset(cp2, 0x02, 32); + memset(cp3, 0x03, 32); + + cstring *wire = cstr_new_sz(160); + uint8_t ft = GCS_BASIC_FILTER_TYPE; + ser_bytes(wire, &ft, 1); + ser_bytes(wire, stop_hash, 32); + ser_varlen(wire, 3); + ser_bytes(wire, cp1, 32); + ser_bytes(wire, cp2, 32); + ser_bytes(wire, cp3, 32); + + struct const_buffer buf = {(const uint8_t *)wire->str, wire->len}; + dogecoin_cfcheckpt_msg msg; + dogecoin_cfcheckpt_msg_init(&msg); + + u_assert_true(dogecoin_p2p_msg_cfcheckpt_deser(&msg, &buf)); + u_assert_uint32_eq(msg.filter_type, GCS_BASIC_FILTER_TYPE); + u_assert_mem_eq(msg.stop_hash, stop_hash, 32); + u_assert_not_null(msg.filter_headers); + u_assert_uint32_eq((uint32_t)msg.filter_headers->len, 3); + u_assert_mem_eq(vector_idx(msg.filter_headers, 0), cp1, 32); + u_assert_mem_eq(vector_idx(msg.filter_headers, 1), cp2, 32); + u_assert_mem_eq(vector_idx(msg.filter_headers, 2), cp3, 32); + u_assert_uint32_eq(buf.len, 0); + + dogecoin_cfcheckpt_msg_free(&msg); + cstr_free(wire, true); +} + +/* ================================================================ */ +/* Filter header computation and validation */ +/* ================================================================ */ + +static void test_filter_header_compute(void) +{ + const char *data_str = "hello world"; + cstring *filter_data = cstr_new(data_str); + + uint8_t prev[32], header[32]; + memset(prev, 0, 32); + + dogecoin_compact_filter_compute_header(filter_data, prev, header); + + /* The header must not be all zeros */ + uint8_t zeros[32]; + memset(zeros, 0, 32); + u_assert_mem_not_eq(header, zeros, 32); + + /* Validation with the correct expected header must pass */ + u_assert_true(dogecoin_compact_filter_validate(filter_data, prev, header)); + + /* Different prev_filter_header yields a different header */ + uint8_t other_prev[32], other_header[32]; + memset(other_prev, 0xFF, 32); + dogecoin_compact_filter_compute_header(filter_data, other_prev, other_header); + u_assert_mem_not_eq(header, other_header, 32); + + /* Cross-validation must fail */ + u_assert_true(!dogecoin_compact_filter_validate(filter_data, prev, other_header)); + u_assert_true(!dogecoin_compact_filter_validate(filter_data, other_prev, header)); + + /* NULL filter_data returns false */ + u_assert_true(!dogecoin_compact_filter_validate(NULL, prev, header)); + + /* The attack this function exists to stop: a peer that serves altered + * filter bytes for a block whose filter header is already committed to by + * the cfheaders chain. Flipping any single bit of the payload must fail + * validation against the header computed from the original -- otherwise a + * peer could strip a transaction out of a filter and the client would + * silently skip the block that pays it. */ + { + size_t probe; + for (probe = 0; probe < filter_data->len; probe++) { + cstring *tampered = cstr_new_buf(filter_data->str, filter_data->len); + tampered->str[probe] ^= 0x01; + u_assert_true(!dogecoin_compact_filter_validate(tampered, prev, header)); + cstr_free(tampered, true); + } + /* Truncation and extension must be rejected on the same grounds. */ + cstring *shorter = cstr_new_buf(filter_data->str, filter_data->len - 1); + u_assert_true(!dogecoin_compact_filter_validate(shorter, prev, header)); + cstr_free(shorter, true); + + cstring *longer = cstr_new_buf(filter_data->str, filter_data->len); + cstr_append_c(longer, 0x00); + u_assert_true(!dogecoin_compact_filter_validate(longer, prev, header)); + cstr_free(longer, true); + } + + /* Chaining: header2 = SHA256d(filter_hash2 || header1) */ + cstring *filter_data2 = cstr_new("next block filter"); + uint8_t header2[32]; + dogecoin_compact_filter_compute_header(filter_data2, header, header2); + u_assert_mem_not_eq(header2, header, 32); + u_assert_true(dogecoin_compact_filter_validate(filter_data2, header, header2)); + + cstr_free(filter_data, true); + cstr_free(filter_data2, true); +} + +/* ================================================================ */ +/* Hardcoded checkpoint helpers */ +/* ================================================================ */ + +static void test_cf_checkpoints_get(void) +{ + size_t count = 0; + const dogecoin_cf_checkpoint *arr = dogecoin_cf_get_checkpoints(&dogecoin_chainparams_main, &count); + u_assert_not_null(arr); + u_assert_true(count > 0); + /* First checkpoint is at height 1000 (Dogecoin Core convention) */ + u_assert_uint32_eq(arr[0].height, 1000); + u_assert_not_null(arr[0].filter_header); + + /* Testnet and regtest currently have no checkpoints — function returns true (nothing to verify) */ + const dogecoin_cf_checkpoint *tarr = dogecoin_cf_get_checkpoints(&dogecoin_chainparams_test, &count); + (void)tarr; + /* count may be 0; that's expected */ +} + +static void test_cf_checkpoints_load(void) +{ + dogecoin_compact_filter_state *state = dogecoin_compact_filter_state_new(); + size_t loaded = dogecoin_cf_load_hardcoded_checkpoints(state, &dogecoin_chainparams_main); + u_assert_true(loaded > 0); + + /* The checkpoints vector must have at least as many slots as loaded entries */ + u_assert_true((uint32_t)state->checkpoints->len >= (uint32_t)loaded); + + /* cp_idx 0 corresponds to height 1000; it must not be all-zero */ + uint8_t zeros[32]; + memset(zeros, 0, 32); + u_assert_mem_not_eq(vector_idx(state->checkpoints, 0), zeros, 32); + + dogecoin_compact_filter_state_free(state); +} + +static void test_cf_checkpoints_validate(void) +{ + size_t count = 0; + const dogecoin_cf_checkpoint *arr = dogecoin_cf_get_checkpoints(&dogecoin_chainparams_main, &count); + + /* Empty peer list — every hardcoded checkpoint is skipped (peer chain is "shorter") */ + vector_t *peer = vector_new(4, dogecoin_free); + u_assert_true(dogecoin_cf_validate_checkpoints(&dogecoin_chainparams_main, peer)); + + /* Correct checkpoint at cp_idx 0 (height 1000) */ + uint256_t *cp0 = dogecoin_calloc(1, sizeof(uint256_t)); + utils_uint256_sethex((char *)arr[0].filter_header, *cp0); + vector_add(peer, cp0); + u_assert_true(dogecoin_cf_validate_checkpoints(&dogecoin_chainparams_main, peer)); + + /* Corrupt cp_idx 0 — validation must fail */ + (*cp0)[0] ^= 0xFF; + u_assert_true(!dogecoin_cf_validate_checkpoints(&dogecoin_chainparams_main, peer)); + + vector_free(peer, true); +} + +/* ================================================================ */ +/* cfheaders_base_height cfilter indexing */ +/* ================================================================ */ + +/* Verify cfilter validation indexing when cfheaders start at a height > 1. + * With checkpoint-based header sync, cfheaders_base_height is set to chainbottom + * (e.g. 6,238,060), not 1. filter_headers[i] = filter header for block at + * (cfheaders_base_height + i), so the vector index is (filter_height - base). */ +static void test_cfilter_indexing_with_base_height(void) +{ + dogecoin_compact_filter_state *state = dogecoin_compact_filter_state_new(); + u_assert_not_null(state); + + const uint32_t base = 6238060; /* simulated chainbottom */ + state->cfheaders_base_height = base; + state->cfheaders_tip_height = base - 1; + state->filters_tip_height = base - 1; + + /* Synthetic genesis_filter_header: the filter header at height (base-1). */ + uint256_t genesis_fh; + memset(genesis_fh, 0xAB, 32); + memcpy(state->genesis_filter_header, genesis_fh, 32); + + /* Build 3 consecutive filter data strings (empty GCS filters). */ + cstring *fd[3]; + fd[0] = cstr_new_sz(0); /* height base */ + fd[1] = cstr_new_sz(0); /* height base+1 */ + fd[2] = cstr_new_sz(0); /* height base+2 */ + + /* Compute chained filter headers. */ + uint256_t fh[3]; + dogecoin_compact_filter_compute_header(fd[0], genesis_fh, fh[0]); + dogecoin_compact_filter_compute_header(fd[1], fh[0], fh[1]); + dogecoin_compact_filter_compute_header(fd[2], fh[1], fh[2]); + + /* Populate filter_headers as if cfheaders download completed. */ + uint32_t k; + for (k = 0; k < 3; k++) { + uint256_t *h = dogecoin_calloc(1, sizeof(uint256_t)); + memcpy(*h, fh[k], 32); + vector_add(state->filter_headers, h); + } + state->cfheaders_tip_height = base + 2; + + /* ------ cfilter at height (base) ------ + * vec_idx = filter_height - base = 0 + * prev_fh = genesis_filter_header (filter_height <= base) */ + { + uint32_t filter_height = base; + uint32_t vec_idx = filter_height - base; + u_assert_uint32_eq(vec_idx, 0); + u_assert_true(vec_idx < state->filter_headers->len); + + uint256_t prev_fh; + memcpy(prev_fh, state->genesis_filter_header, 32); + u_assert_mem_eq(prev_fh, genesis_fh, 32); + + uint256_t *expected = (uint256_t *)vector_idx(state->filter_headers, vec_idx); + u_assert_mem_eq(*expected, fh[0], 32); + u_assert_true(dogecoin_compact_filter_validate(fd[0], prev_fh, *expected)); + } + + /* ------ cfilter at height (base+1) ------ + * vec_idx = 1, prev_fh = filter_headers[0] */ + { + uint32_t filter_height = base + 1; + uint32_t vec_idx = filter_height - base; + u_assert_uint32_eq(vec_idx, 1); + u_assert_true(vec_idx < state->filter_headers->len); + + uint32_t prev_idx = filter_height - base - 1; /* = 0 */ + uint256_t prev_fh; + memcpy(prev_fh, vector_idx(state->filter_headers, prev_idx), 32); + u_assert_mem_eq(prev_fh, fh[0], 32); + + uint256_t *expected = (uint256_t *)vector_idx(state->filter_headers, vec_idx); + u_assert_mem_eq(*expected, fh[1], 32); + u_assert_true(dogecoin_compact_filter_validate(fd[1], prev_fh, *expected)); + } + + /* ------ wrong prev_fh must fail ------ + * Using genesis_fh as prev for height base+1 is incorrect. */ + { + uint256_t *expected = (uint256_t *)vector_idx(state->filter_headers, 1); + u_assert_true(!dogecoin_compact_filter_validate(fd[1], genesis_fh, *expected)); + } + + uint32_t j; + for (j = 0; j < 3; j++) cstr_free(fd[j], true); + dogecoin_compact_filter_state_free(state); +} + +/* ================================================================ */ +/* Unbounded-allocation regressions (CWE-400) */ +/* ================================================================ */ + +/* A cfheaders/cfcheckpt message declares a hash count as a compact_size read + * straight off the wire. The count fed vector_new() directly, which reserves a + * power-of-two number of pointers -- 0xFFFFFFFF became a ~34 GB calloc before a + * single hash was read, so a ~10-byte message from any peer was a memory + * exhaustion DoS. Same class as the getheaders locator-count fix. Each entry is + * a 32-byte hash, so a count the remaining buffer cannot hold must be rejected. */ +static void test_cfheaders_deser_unbounded_count(void) +{ + /* filter_type(1) + stop_hash(32) + prev_filter_header(32), then + * varint 0xFFFFFFFF claiming 429496729 hashes, then nothing. */ + uint8_t bad[1 + 32 + 32 + 5]; + memset(bad, 0, sizeof(bad)); + bad[65] = 0xfe; /* compact_size: uint32 follows */ + bad[66] = 0xff; bad[67] = 0xff; + bad[68] = 0xff; bad[69] = 0xff; /* 0xFFFFFFFF */ + + struct const_buffer buf = { bad, sizeof(bad) }; + dogecoin_cfheaders_msg msg; + dogecoin_cfheaders_msg_init(&msg); + u_assert_true(!dogecoin_p2p_msg_cfheaders_deser(&msg, &buf)); + dogecoin_cfheaders_msg_free(&msg); + + /* A count above BIP157's 2000-hash cap must also be refused even when the + * buffer is large enough to make it look plausible. */ + size_t big_len = 1 + 32 + 32 + 3 + (size_t)2001 * 32; + uint8_t *big = dogecoin_calloc(1, big_len); + big[65] = 0xfd; /* compact_size: uint16 follows */ + big[66] = (uint8_t)(2001 & 0xff); + big[67] = (uint8_t)((2001 >> 8) & 0xff); + struct const_buffer bigbuf = { big, big_len }; + dogecoin_cfheaders_msg msg2; + dogecoin_cfheaders_msg_init(&msg2); + u_assert_true(!dogecoin_p2p_msg_cfheaders_deser(&msg2, &bigbuf)); + dogecoin_cfheaders_msg_free(&msg2); + dogecoin_free(big); +} + +static void test_cfcheckpt_deser_unbounded_count(void) +{ + /* filter_type(1) + stop_hash(32), then varint 0xFFFFFFFF, then nothing. */ + uint8_t bad[1 + 32 + 5]; + memset(bad, 0, sizeof(bad)); + bad[33] = 0xfe; + bad[34] = 0xff; bad[35] = 0xff; + bad[36] = 0xff; bad[37] = 0xff; + + struct const_buffer buf = { bad, sizeof(bad) }; + dogecoin_cfcheckpt_msg msg; + dogecoin_cfcheckpt_msg_init(&msg); + u_assert_true(!dogecoin_p2p_msg_cfcheckpt_deser(&msg, &buf)); + dogecoin_cfcheckpt_msg_free(&msg); +} + +/* ================================================================ */ +/* Public test entry point */ +/* ================================================================ */ + +void test_compact_filter(void) +{ + test_cfheaders_deser_unbounded_count(); + test_cfcheckpt_deser_unbounded_count(); + test_compact_filter_state_lifecycle(); + test_getcfilters_ser(); + test_getcfheaders_ser(); + test_getcfcheckpt_ser(); + test_cfilter_deser(); + test_cfilter_deser_truncated(); + test_cfheaders_deser(); + test_cfcheckpt_deser(); + test_filter_header_compute(); + test_cf_checkpoints_get(); + test_cf_checkpoints_load(); + test_cf_checkpoints_validate(); + test_cfilter_indexing_with_base_height(); +} From 0ce2347bb19fa0a3fdcc2625d88636dc56b84fa2 Mon Sep 17 00:00:00 2001 From: bluezr Date: Sat, 1 Aug 2026 12:36:59 -0700 Subject: [PATCH 03/13] compact_filter: add BIP157 messages, header chain and validation The BIP157 wire layer on top of the GCS encoding: getcfilters, getcfheaders and getcfcheckpt requests, the cfilter, cfheaders and cfcheckpt responses, filter header chaining, and validation of a served filter against the header committed to by that chain. Two things worth a reviewer's attention. The cfilter message follows BIP157 field order -- filter_type first, then block_hash, then the filter bytes. This is worth stating because it has been the other way round here before, and because Dogecoin Core's own compact filter work has been observed serialising block_hash first, which is not the specified order. A peer pairing this code with an implementation that swaps those two fields will parse filter_type out of block_hash[0], take the next 32 bytes as the hash, and then hit a bogus varint -- deserialisation failure at best, a silent header mismatch and a ban at worst. That failure mode does not show up in a round-trip test, because a swapped serialiser and a swapped deserialiser agree with each other perfectly. It needs a test against a fixed BIP157 payload with known bytes. Note also that the on-disk cfilters format is framed separately from the wire format, so a client reading filters from a bootstrap or cache exercises none of this. The counts in cfheaders and cfcheckpt are bounded before they size an allocation. Both are compact_size values straight off the wire, and vector_new() rounds its reservation up to a power of two, so 0xFFFFFFFF became a ~34 GB allocation before a single hash was read -- a memory exhaustion DoS from a ten byte message, the same class as the getheaders locator count. Each entry is a 32 byte hash, so any count the remaining buffer cannot hold is rejected, and cfheaders additionally takes BIP157's 2000 hash cap. Tests cover the wire format, header chaining, checkpoint validation, both unbounded-count regressions, and payload tampering: every single-bit flip of a filter payload, plus truncation and extension, must fail validation against the header computed from the original. That last one is the attack the validation exists to stop, since a peer able to strip a script from a filter makes the client skip the block that pays it. 80/80 with test_compact_filter registered and running. --- CMakeLists.txt | 3 +++ Makefile.am | 5 +++++ include/dogecoin/compact_filter.h | 1 + src/compact_filter.c | 1 + test/unittester.c | 2 ++ 5 files changed, 12 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 30e8e5dfa..e87094775 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -387,6 +387,7 @@ TARGET_SOURCES(${LIBDOGECOIN_NAME} PRIVATE src/ecc.c src/eckey.c src/golomb.c + src/cf_checkpoints.c src/key.c src/koinu.c src/map.c @@ -556,6 +557,7 @@ IF(USE_TESTS) test/chacha20_tests.c test/context_tests.c test/cstr_tests.c + test/compact_filter_tests.c test/golomb_tests.c test/ecc_tests.c test/hash_tests.c @@ -687,6 +689,7 @@ IF(WITH_NET) ) TARGET_SOURCES(${LIBDOGECOIN_NAME} ${visibility} src/bip37.c + src/compact_filter.c src/headersdb_file.c src/net.c src/protocol.c diff --git a/Makefile.am b/Makefile.am index 91d04b770..a39e6dd83 100644 --- a/Makefile.am +++ b/Makefile.am @@ -46,6 +46,8 @@ noinst_HEADERS = \ include/dogecoin/byteswap.h \ include/dogecoin/chacha20.h \ include/dogecoin/chainparams.h \ + include/dogecoin/cf_checkpoints.h \ + include/dogecoin/compact_filter.h \ include/dogecoin/common.h \ include/dogecoin/cstr.h \ include/dogecoin/ctaes.h \ @@ -109,6 +111,8 @@ libdogecoin_la_SOURCES = \ src/chacha20.c \ src/context.c \ src/chainparams.c \ + src/cf_checkpoints.c \ + src/compact_filter.c \ src/cstr.c \ src/ctaes.c \ src/ecc.c \ @@ -284,6 +288,7 @@ tests_SOURCES = \ test/chacha20_tests.c \ test/context_tests.c \ test/cstr_tests.c \ + test/compact_filter_tests.c \ test/golomb_tests.c \ test/ecc_tests.c \ test/hash_tests.c \ diff --git a/include/dogecoin/compact_filter.h b/include/dogecoin/compact_filter.h index ac5bf758f..9450160c1 100644 --- a/include/dogecoin/compact_filter.h +++ b/include/dogecoin/compact_filter.h @@ -52,6 +52,7 @@ #define __LIBDOGECOIN_COMPACT_FILTER_H__ #include +#include #include #include #include diff --git a/src/compact_filter.c b/src/compact_filter.c index 11d20d412..792c2637d 100644 --- a/src/compact_filter.c +++ b/src/compact_filter.c @@ -33,6 +33,7 @@ #include +#include #include #include #include diff --git a/test/unittester.c b/test/unittester.c index ceee1bc87..9925baf2a 100644 --- a/test/unittester.c +++ b/test/unittester.c @@ -47,6 +47,7 @@ extern void test_bip39(); extern void test_bip44(); extern void test_block_header(); extern void test_golomb(); +extern void test_compact_filter(); extern void test_buffer(); extern void test_chacha20(); extern void test_cstr(); @@ -179,6 +180,7 @@ int main() u_run_test(test_bip44); u_run_test(test_block_header); u_run_test(test_golomb); + u_run_test(test_compact_filter); u_run_test(test_buffer); u_run_test(test_chacha20); u_run_test(test_cstr); From 9bdc73b47f3438cbacb4bb571d862fbde53a43a3 Mon Sep 17 00:00:00 2001 From: bluezr Date: Sat, 1 Aug 2026 13:38:13 -0700 Subject: [PATCH 04/13] cmake: compile cf_checkpoints.c into the CLI targets, as chainparams is The Windows build failed to link every executable with six unresolved externals -- the three CF checkpoint arrays and their three counts: spvnode.vcxproj : error LNK2019: unresolved external symbol dogecoin_mainnet_cf_checkpoint_array dogecoin.dll : fatal error LNK1120: 6 unresolved externals The file was committed, listed in both build systems, and compiled cleanly. The tell was in the build log: chainparams.c was compiled nine times and cf_checkpoints.c once. chainparams.c is declared TARGET_SOURCES(... PUBLIC ...), so CMake compiles it into every consumer target as well as the library. cf_checkpoints.c was PRIVATE, so only the library got it. That is invisible on Linux, where a shared object resolves the data symbol for the executables anyway, and fatal on a Windows DLL build, where data symbols do not cross the boundary without dllimport -- and LIBDOGECOIN_API expands to nothing for consumers. So the existing PUBLIC on chainparams is deliberate rather than incidental: it is what lets the CLI tools reference chain data arrays at all on Windows. Filter checkpoints are the same kind of thing and need the same treatment. Verified by reproducing the Windows configuration locally (-DBUILD_SHARED_LIBS=1): cf_checkpoints.c now compiles into 9 targets, matching chainparams.c exactly, and the shared build links clean. --- CMakeLists.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e87094775..99d6d903c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -387,7 +387,6 @@ TARGET_SOURCES(${LIBDOGECOIN_NAME} PRIVATE src/ecc.c src/eckey.c src/golomb.c - src/cf_checkpoints.c src/key.c src/koinu.c src/map.c @@ -460,6 +459,12 @@ ENDIF() ENDIF() TARGET_SOURCES(${LIBDOGECOIN_NAME} PUBLIC src/chainparams.c + # PUBLIC for the same reason as chainparams: these are const data + # referenced from the CLI targets, and a PRIVATE source is compiled only + # into the library. On a Windows DLL build the executables then cannot + # reach the arrays -- data symbols do not resolve across the DLL boundary + # without dllimport, and LIBDOGECOIN_API expands to nothing for consumers. + src/cf_checkpoints.c ) IF(WIN32 AND USE_TPM2) From 90a41ed9af9fac2ca8186ebe5ea2a12dc2782920 Mon Sep 17 00:00:00 2001 From: bluezr Date: Sun, 2 Aug 2026 13:54:00 -0700 Subject: [PATCH 05/13] cmake: build compact_filter.c unconditionally, as Makefile.am already does The two build systems disagreed. Makefile.am lists src/compact_filter.c in the unconditional sources, CMake had it inside IF(WITH_NET). Since test/compact_filter_tests.c is registered unconditionally in both, a CMake build configured with -DWITH_NET=OFF compiled the tests but not the code under test and failed to link with 55 undefined references. compact_filter.c has no net dependency to justify the guard: it includes only cf_checkpoints, chainparams, hash, mem, serialize and utils, and references no node, nodegroup or event_base symbol. It is message serialization and filter header arithmetic, in the same category as golomb.c, which is already unconditional. Aligning CMake with Makefile.am rather than gating the test, so the two build systems describe the same library. WITH_NET=OFF: 74/74, was failing to link. WITH_NET=ON with -DBUILD_SHARED_LIBS=1: 80/80, unchanged. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 99d6d903c..efa46cadc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -382,6 +382,7 @@ TARGET_SOURCES(${LIBDOGECOIN_NAME} PRIVATE src/buffer.c src/chacha20.c src/context.c + src/compact_filter.c src/cstr.c src/ctaes.c src/ecc.c @@ -694,7 +695,6 @@ IF(WITH_NET) ) TARGET_SOURCES(${LIBDOGECOIN_NAME} ${visibility} src/bip37.c - src/compact_filter.c src/headersdb_file.c src/net.c src/protocol.c From eea03d53c030436abaf5a1f0012b8935ff390d26 Mon Sep 17 00:00:00 2001 From: bluezr Date: Sun, 2 Aug 2026 19:38:17 -0700 Subject: [PATCH 06/13] compact_filter: drop unused headersdb.h and blockchain.h includes compact_filter.h referenced nothing from either: no dogecoin_headers_db, no dogecoin_headers_db_interface, no dogecoin_blockindex. headersdb.h in particular includes logdb/logdb.h, so anything including compact_filter.h also needed -I src/logdb/include on its command line, even when it never touched logdb. That is invisible inside the library, whose CPPFLAGS already carry that path, and only shows up when something outside it -- a fuzz harness, a consumer -- includes the header directly and fails with include/dogecoin/headersdb.h:37:10: fatal error: 'logdb/logdb.h' file not found The header now pulls only what it uses. Removing the two lines leaves it self-contained given the include path for dogecoin's own headers. WITH_NET=ON with -DBUILD_SHARED_LIBS=1: 80/80. WITH_NET=OFF: 74/74. --- include/dogecoin/compact_filter.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/dogecoin/compact_filter.h b/include/dogecoin/compact_filter.h index 9450160c1..8df2f456f 100644 --- a/include/dogecoin/compact_filter.h +++ b/include/dogecoin/compact_filter.h @@ -57,8 +57,6 @@ #include #include #include -#include -#include #include LIBDOGECOIN_BEGIN_DECL From cf342cf01398975bdbbf191dabd90a4c6d11d51e Mon Sep 17 00:00:00 2001 From: bluezr Date: Sun, 2 Aug 2026 13:50:52 -0700 Subject: [PATCH 07/13] cfheadersdb: persist filter headers and filter data per chain Adds the file-backed stores behind the BIP157 filter header chain: cfheaders.dat holding height+filter_header records, and cfilters.dat holding the raw filter payloads. The on-disk layout is segregated per network, /filter/basic//. Sharing one directory across chains is not merely untidy: a regtest or testnet client loads the mainnet cache at startup, rescans it, matches mainnet blocks its peer has never heard of, and then blocks forever waiting for them -- while writing its own filters back into the mainnet files. A one-time rename migrates a pre-segregation mainnet cache into the new location, and only mainnet, because only mainnet data is worth keeping. Bound the cfilters record length before allocating. data_len is read straight off disk and was passed to dogecoin_malloc unchecked, so a corrupt or tampered file could request up to 4 GiB (CWE-400). A cfilter cannot legitimately exceed the P2P message that delivered it, so DOGECOIN_MAX_P2P_MSG_SIZE is the ceiling. The short read that follows would have failed the call anyway, but only after the allocation had already been attempted. Tests cover the round trip, the genesis header at offset 8, reset(), in-memory mode, a trailing partial record (dropped rather than misparsed), and the length bound. The bound test asserts on the allocator rather than the return value. An earlier version of it passed with the bound removed: malloc(4 GiB) succeeds under overcommit and the oversized read then fails, so iterate() returns false either way and the return value cannot tell the two apart. It now installs a recording dogecoin_mem_mapper and asserts no allocation exceeded the bound, which was confirmed by removing the bound and watching the test fail. 81/81, and verified against a -DBUILD_SHARED_LIBS=1 configure. --- CMakeLists.txt | 2 + Makefile.am | 3 + include/dogecoin/cfheadersdb_file.h | 265 +++++++++++++ src/cfheadersdb_file.c | 561 ++++++++++++++++++++++++++++ test/cfheadersdb_tests.c | 295 +++++++++++++++ test/unittester.c | 2 + 6 files changed, 1128 insertions(+) create mode 100644 include/dogecoin/cfheadersdb_file.h create mode 100644 src/cfheadersdb_file.c create mode 100644 test/cfheadersdb_tests.c diff --git a/CMakeLists.txt b/CMakeLists.txt index efa46cadc..0ede4c42c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -695,6 +695,7 @@ IF(WITH_NET) ) TARGET_SOURCES(${LIBDOGECOIN_NAME} ${visibility} src/bip37.c + src/cfheadersdb_file.c src/headersdb_file.c src/net.c src/protocol.c @@ -711,6 +712,7 @@ IF(WITH_NET) ENDIF() IF(USE_TESTS) TARGET_SOURCES(tests ${visibility} + test/cfheadersdb_tests.c test/net_tests.c test/protocol_tests.c test/spv_tests.c diff --git a/Makefile.am b/Makefile.am index a39e6dd83..73457fdee 100644 --- a/Makefile.am +++ b/Makefile.am @@ -418,6 +418,7 @@ endif if WITH_NET noinst_HEADERS += \ + include/dogecoin/cfheadersdb_file.h \ include/dogecoin/headersdb.h \ include/dogecoin/headersdb_file.h \ include/dogecoin/protocol.h \ @@ -426,6 +427,7 @@ noinst_HEADERS += \ include/dogecoin/spv.h libdogecoin_la_SOURCES += \ + src/cfheadersdb_file.c \ src/headersdb_file.c \ src/bip37.c \ src/net.c \ @@ -438,6 +440,7 @@ libdogecoin_la_CFLAGS += $(EVENT_CFLAGS) $(EVENT_PTHREADS_CFLAGS) if USE_TESTS tests_SOURCES += \ + test/cfheadersdb_tests.c \ test/net_tests.c \ test/protocol_tests.c \ test/spv_tests.c diff --git a/include/dogecoin/cfheadersdb_file.h b/include/dogecoin/cfheadersdb_file.h new file mode 100644 index 000000000..6c914c134 --- /dev/null +++ b/include/dogecoin/cfheadersdb_file.h @@ -0,0 +1,265 @@ +/* + + The MIT License (MIT) + + Copyright (c) 2026 bluezr + Copyright (c) 2026 The Dogecoin Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES + OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +*/ + +/** + * @file cfheadersdb_file.h + * @brief File-backed storage for BIP157 compact filter headers. + * + * Stores compact filter headers (cfheaders) and compact filter data + * (cfilters) to disk, mirroring Dogecoin Core's filter/basic/ directory + * layout. On startup the database is loaded back into the SPV client's + * compact_filter_state, eliminating the need to re-download hundreds of + * megabytes of filter headers from peers after each restart. + * + * File layout within the data directory: + * filter/basic/cfheaders.dat — filter header chain (fixed 36-byte records) + * filter/basic/cfilters.dat — raw filter data (variable-length records) + */ + +#ifndef __LIBDOGECOIN_CFHEADERSDB_FILE_H__ +#define __LIBDOGECOIN_CFHEADERSDB_FILE_H__ + +#include + +#include +#include +#include + +LIBDOGECOIN_BEGIN_DECL + +/* ================================================================ */ +/* File format constants */ +/* ================================================================ */ + +/** + * v2 file header: 4-byte magic + 4-byte version + 32-byte genesis_filter_header = 40 bytes. + * v1 files (8-byte header, no genesis) are automatically deleted and rebuilt. + */ +#define CF_HEADERS_FILE_HDR_LEN 40 + +/** + * Fixed-size cfheaders record: height (4 LE) + filter_header (32) = 36 bytes. + * Records are appended in ascending height order. + */ +#define CF_HEADERS_FILE_REC_LEN 36 + +/** + * Variable-length cfilters record header: height (4 LE) + block_hash (32) + * + data_len (4 LE) = 40 bytes, followed by data_len bytes of filter data. + */ +#define CF_FILTERS_FILE_REC_HDR_LEN 40 + +/* ================================================================ */ +/* Compact filter headers database */ +/* ================================================================ */ + +/** + * @brief File-backed database for compact filter headers. + * + * Mirrors dogecoin_headers_db for the BIP157 filter header chain. + * When read_write is false (inmem_only mode), no file I/O is performed. + */ +typedef struct dogecoin_cfheaders_db_ { + FILE *file; /**< Open file handle (NULL when inmem_only) */ + dogecoin_bool read_write; /**< Whether file I/O is enabled */ + uint32_t tip_height; /**< Height of the last written filter header */ + uint256_t tip_header; /**< Filter header hash at tip_height */ + const dogecoin_chainparams *params; /**< Chain, selects the on-disk directory */ +} dogecoin_cfheaders_db; + +/** + * @brief File-backed database for compact filter data. + * + * Stores raw cfilter payloads keyed by block height and hash. + * SPV clients typically process and discard filter data; set + * read_write=false to skip disk I/O. + */ +typedef struct dogecoin_cfilters_db_ { + FILE *file; /**< Open file handle (NULL when inmem_only) */ + dogecoin_bool read_write; /**< Whether file I/O is enabled */ + uint32_t tip_height; /**< Height of the last written cfilter */ + const dogecoin_chainparams *params; /**< Chain, selects the on-disk directory */ +} dogecoin_cfilters_db; + +/* ================================================================ */ +/* Compact filter headers DB API */ +/* ================================================================ */ + +/** + * @brief Allocate a new compact filter headers database. + * @param inmem_only If true, no file I/O is performed (RAM-only mode). + * @return New database object, or NULL on allocation failure. + */ +LIBDOGECOIN_API dogecoin_cfheaders_db* dogecoin_cfheaders_db_new(const dogecoin_chainparams *params, dogecoin_bool inmem_only); + +/** + * @brief Free a compact filter headers database and close its file. + * @param db The database to free. + */ +LIBDOGECOIN_API void dogecoin_cfheaders_db_free(dogecoin_cfheaders_db *db); + +/** + * @brief Open (or create) the cfheaders file and load all stored headers. + * + * On success, every filter header read from disk is appended to + * @p state->filter_headers and @p state->cfheaders_tip_height is updated. + * + * @param db The database object. + * @param file_path Path to cfheaders.dat, or NULL for the default location + * (/filter/basic/cfheaders.dat). + * @param state Compact filter state to populate on load. + * @return true on success (file opened and records loaded). + */ +LIBDOGECOIN_API dogecoin_bool dogecoin_cfheaders_db_load( + dogecoin_cfheaders_db *db, + const char *file_path, + dogecoin_compact_filter_state *state); + +/** + * @brief Append one filter header record to the cfheaders file. + * + * Writes height (4 LE) + filter_header (32) and flushes to disk. + * + * @param db The database object. + * @param height Block height of the filter header. + * @param filter_header 32-byte filter header hash. + * @return true on success. + */ +LIBDOGECOIN_API dogecoin_bool dogecoin_cfheaders_db_write( + dogecoin_cfheaders_db *db, + uint32_t height, + const uint256_t filter_header); + +/** + * @brief Persist genesis_filter_header at file offset 8 (v2 format). + * + * Called once, right after the first cfheaders batch is received, to store + * the filter header that precedes the cfheaders download start height. + * Without this, cfilter validation cannot validate the first filter block. + * + * @param db The database object. + * @param genesis_filter_header 32-byte filter header for height (cfh_start - 1). + * @return true on success. + */ +LIBDOGECOIN_API dogecoin_bool dogecoin_cfheaders_db_write_genesis( + dogecoin_cfheaders_db *db, + const uint256_t genesis_filter_header); + +/** + * @brief Flush and fdatasync the cfheaders file. + * + * Call once after a bulk write loop instead of relying on per-record commits. + * + * @param db The database object. + * @return true on success. + */ +LIBDOGECOIN_API dogecoin_bool dogecoin_cfheaders_db_flush(dogecoin_cfheaders_db *db); + +/** + * @brief Truncate cfheaders.dat to the v2 header only (clears all records). + * + * Used by the cfcheckpt handler when a fresh cfheaders download is needed + * (e.g. invalid or incompatible previously-stored data). + * + * @param db The database object. + * @return true on success. + */ +LIBDOGECOIN_API dogecoin_bool dogecoin_cfheaders_db_reset(dogecoin_cfheaders_db *db); + +/* ================================================================ */ +/* Compact filters DB API */ +/* ================================================================ */ + +/** + * @brief Allocate a new compact filter data database. + * @param inmem_only If true, no file I/O is performed. + * @return New database object, or NULL on allocation failure. + */ +LIBDOGECOIN_API dogecoin_cfilters_db* dogecoin_cfilters_db_new(const dogecoin_chainparams *params, dogecoin_bool inmem_only); + +/** + * @brief Free a compact filter data database and close its file. + * @param db The database to free. + */ +LIBDOGECOIN_API void dogecoin_cfilters_db_free(dogecoin_cfilters_db *db); + +/** + * @brief Open (or create) the cfilters data file. + * + * Unlike cfheaders, filter data is not loaded back into RAM on startup; + * only the file handle is prepared for subsequent writes. + * + * @param db The database object. + * @param file_path Path to cfilters.dat, or NULL for the default location + * (/filter/basic/cfilters.dat). + * @return true on success (file opened). + */ +LIBDOGECOIN_API dogecoin_bool dogecoin_cfilters_db_load( + dogecoin_cfilters_db *db, + const char *file_path); + +/** + * @brief Append one cfilter record to the cfilters file. + * + * Writes height (4 LE) + block_hash (32) + data_len (4 LE) + data bytes, + * then flushes. + * + * @param db The database object. + * @param height Block height of this cfilter. + * @param block_hash 32-byte block hash. + * @param filter_data Raw encoded filter data. + * @return true on success. + */ +LIBDOGECOIN_API dogecoin_bool dogecoin_cfilters_db_write( + dogecoin_cfilters_db *db, + uint32_t height, + const uint256_t block_hash, + const cstring *filter_data); + +/** + * @brief Iterate over all records in the cfilters file. + * + * Rewinds the file to the first record and calls @p cb for each one. + * Iteration stops early if @p cb returns false. + * + * @param db The database object (must be loaded). + * @param cb Callback: (height, block_hash, filter_data, data_len, ctx). + * Return false to stop iteration. + * @param ctx Caller context passed through to @p cb. + * @return true if the full file was iterated (or cb stopped it early), + * false on I/O error. + */ +LIBDOGECOIN_API dogecoin_bool dogecoin_cfilters_db_iterate( + dogecoin_cfilters_db *db, + dogecoin_bool (*cb)(uint32_t height, const uint256_t block_hash, + const uint8_t *filter_data, uint32_t data_len, + void *ctx), + void *ctx); + +LIBDOGECOIN_END_DECL + +#endif /* __LIBDOGECOIN_CFHEADERSDB_FILE_H__ */ diff --git a/src/cfheadersdb_file.c b/src/cfheadersdb_file.c new file mode 100644 index 000000000..b25127572 --- /dev/null +++ b/src/cfheadersdb_file.c @@ -0,0 +1,561 @@ +/* + + The MIT License (MIT) + + Copyright (c) 2026 bluezr + Copyright (c) 2026 The Dogecoin Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES + OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +*/ + +#include +#ifdef _WIN32 +#include +#include +#define MKDIR_ONE(p) _mkdir(p) +#define CF_FTRUNCATE(fd, sz) _chsize((fd), (long)(sz)) +#define CF_FILENO(f) _fileno(f) +#else +#include +#define MKDIR_ONE(p) mkdir(p, 0755) +#define CF_FTRUNCATE(fd, sz) ftruncate((fd), (off_t)(sz)) +#define CF_FILENO(f) fileno(f) +#endif + +#include +#include + +#include +#include +#include +#include +#include +#include + +/* Magic bytes and current file format version. + * v2 format: magic(4) + version(4) + genesis_filter_header(32) + records(N*36) + * v1 format: magic(4) + version(4) + records(N*36) [obsolete, triggers rebuild] */ +static const uint8_t cfhdr_magic[4] = {0xCF, 0x68, 0x44, 0x52}; /* "CfhDR" */ +static const uint8_t cfdata_magic[4] = {0xCF, 0xDA, 0x54, 0x41}; /* "CfDATA" */ +static const uint32_t cf_file_version = 2; + +/* ================================================================ */ +/* Internal helpers */ +/* ================================================================ */ + +/** + * Create a single directory, ignoring EEXIST. + * Returns true on success (directory exists or was created). + */ +static dogecoin_bool mkdir_one(const char *path) +{ + if (MKDIR_ONE(path) == 0) + return true; +#ifdef _WIN32 + return (errno == EEXIST); +#else + return (errno == EEXIST); +#endif +} + +/** + * Ensure /filter/basic/ exists, creating subdirectories as needed. + * @p base must be a NUL-terminated path with no trailing slash. + */ +/* Build /filter/basic/, creating each level. + * + * The chain component is not cosmetic. Without it every network shares one + * cache: a regtest or testnet client loads the *mainnet* cfheaders/cfilters at + * startup, rescans them, and matches mainnet blocks its peer has never heard of + * -- then blocks forever waiting for them. It also writes its own filters back + * into the mainnet files, corrupting them for the next mainnet run. */ +static dogecoin_bool ensure_filter_dir(const char *base, const dogecoin_chainparams *params) +{ + const char *chain = (params && params->chainname[0]) ? params->chainname : "main"; + size_t blen = strlen(base); + char *dir = dogecoin_calloc(blen + 32 + strlen(chain), 1); + if (!dir) return false; + memcpy(dir, base, blen); + + strcpy(dir + blen, "/filter"); + if (!mkdir_one(dir)) { dogecoin_free(dir); return false; } + + strcpy(dir + blen, "/filter/basic"); + if (!mkdir_one(dir)) { dogecoin_free(dir); return false; } + + sprintf(dir + blen, "/filter/basic/%s", chain); + dogecoin_bool ok = mkdir_one(dir); + dogecoin_free(dir); + return ok; +} + +/** + * Build the default path for a filter file and store it in @p path_out. + * Caller must call cstr_free(path_out, true) when done. + */ +/* /filter/basic// -- see ensure_filter_dir() for + * why the chain component matters. */ +static void default_filter_path(cstring **path_out, + const dogecoin_chainparams *params, + const char *filename) +{ + const char *chain = (params && params->chainname[0]) ? params->chainname : "main"; + *path_out = cstr_new_sz(512); + dogecoin_get_default_datadir(*path_out); + /* Strip trailing NUL that dogecoin_get_default_datadir may append */ + while ((*path_out)->len > 0 && + (*path_out)->str[(*path_out)->len - 1] == '\0') + (*path_out)->len--; + cstr_append_buf(*path_out, "/filter/basic/", 14); + cstr_append_buf(*path_out, chain, strlen(chain)); + cstr_append_c(*path_out, '/'); + cstr_append_buf(*path_out, filename, strlen(filename)); + cstr_append_c(*path_out, '\0'); +} + +/* Legacy chain-agnostic location, /filter/basic/, used + * before the layout was segregated per network. Any such file was written by + * whichever network happened to run last; only mainnet is migrated (below), + * because only mainnet data is meaningful to keep. */ +static void legacy_filter_path(cstring **path_out, const char *filename) +{ + *path_out = cstr_new_sz(512); + dogecoin_get_default_datadir(*path_out); + while ((*path_out)->len > 0 && + (*path_out)->str[(*path_out)->len - 1] == '\0') + (*path_out)->len--; + cstr_append_buf(*path_out, "/filter/basic/", 14); + cstr_append_buf(*path_out, filename, strlen(filename)); + cstr_append_c(*path_out, '\0'); +} + +/* One-time migration of the pre-segregation cache into the mainnet directory. + * Only runs for mainnet, only when the new path is absent and the legacy file + * exists, and only via rename() -- so it is a no-op on a fresh install and + * never silently discards data. */ +static void migrate_legacy_filter_file(const dogecoin_chainparams *params, + const char *filename, + const char *new_path) +{ + struct stat sb; + if (!params || strcmp(params->chainname, "main") != 0) return; + if (stat(new_path, &sb) == 0) return; /* already migrated */ + + cstring *old_obj = NULL; + legacy_filter_path(&old_obj, filename); + if (stat(old_obj->str, &sb) == 0 && sb.st_size > 0) { + if (rename(old_obj->str, new_path) == 0) { + printf("cfdb: migrated %s to per-chain location %s\n", + old_obj->str, new_path); + } else { + fprintf(stderr, "cfdb: could not migrate %s to %s: %s\n", + old_obj->str, new_path, strerror(errno)); + } + } + cstr_free(old_obj, true); +} + +/** + * Write the v2 file header: magic(4) + version(4) + genesis_filter_header(32). + * genesis bytes are initialised to zero; call dogecoin_cfheaders_db_write_genesis + * to fill them in once the first cfheaders batch arrives. + */ +static dogecoin_bool write_file_header(FILE *f, const uint8_t *magic) +{ + if (fwrite(magic, 4, 1, f) != 1) return false; + uint32_t v = htole32(cf_file_version); + if (fwrite(&v, 4, 1, f) != 1) return false; + uint8_t zeros[32]; + memset(zeros, 0, 32); + return (fwrite(zeros, 32, 1, f) == 1); +} + +/** + * Read the file header and return the version number. + * Returns 0 on bad magic or read error; callers treat anything < 2 as stale. + */ +static uint32_t read_file_version(FILE *f, const uint8_t *expected_magic) +{ + uint8_t buf[8]; + rewind(f); + if (fread(buf, 8, 1, f) != 1) return 0; + if (memcmp(buf, expected_magic, 4) != 0) return 0; + return le32toh(*(uint32_t *)(buf + 4)); +} + +/* ================================================================ */ +/* cfheaders DB */ +/* ================================================================ */ + +dogecoin_cfheaders_db* dogecoin_cfheaders_db_new(const dogecoin_chainparams *params, dogecoin_bool inmem_only) +{ + dogecoin_cfheaders_db *db = dogecoin_calloc(1, sizeof(*db)); + db->params = params; + db->read_write = !inmem_only; + db->tip_height = 0; + memset(db->tip_header, 0, 32); + return db; +} + +void dogecoin_cfheaders_db_free(dogecoin_cfheaders_db *db) +{ + if (!db) return; + if (db->file) { + dogecoin_file_commit(db->file); + fclose(db->file); + db->file = NULL; + } + dogecoin_free(db); +} + +dogecoin_bool dogecoin_cfheaders_db_load( + dogecoin_cfheaders_db *db, + const char *file_path, + dogecoin_compact_filter_state *state) +{ + if (!db || !state) return false; + if (!db->read_write) return true; /* inmem_only: nothing to do */ + + /* Resolve file path */ + cstring *path_obj = NULL; + const char *path = file_path; + if (!path) { + cstring *datadir = cstr_new_sz(512); + dogecoin_get_default_datadir(datadir); + while (datadir->len > 0 && datadir->str[datadir->len - 1] == '\0') + datadir->len--; + cstr_append_c(datadir, '\0'); + ensure_filter_dir(datadir->str, db->params); + cstr_free(datadir, true); + + default_filter_path(&path_obj, db->params, "cfheaders.dat"); + path = path_obj->str; + migrate_legacy_filter_file(db->params, "cfheaders.dat", path); + } + + struct stat sb; + dogecoin_bool create = (stat(path, &sb) != 0) || (sb.st_size < (long)CF_HEADERS_FILE_HDR_LEN); + + if (!create) { + db->file = fopen(path, "r+b"); + if (db->file) { + uint32_t ver = read_file_version(db->file, cfhdr_magic); + if (ver >= 2) { + /* v2 file: read genesis_filter_header then records */ + if (fread(state->genesis_filter_header, 32, 1, db->file) == 1) { + size_t loaded = 0; + uint32_t first_height = 0; + uint8_t rec[CF_HEADERS_FILE_REC_LEN]; + printf("Loading compact filter headers from disk...\n"); + while (fread(rec, CF_HEADERS_FILE_REC_LEN, 1, db->file) == 1) { + uint32_t height; + memcpy(&height, rec, 4); + height = le32toh(height); + if (loaded == 0) first_height = height; + uint256_t *fh = dogecoin_calloc(1, 32); + memcpy(fh, rec + 4, 32); + vector_add(state->filter_headers, fh); + db->tip_height = height; + memcpy(db->tip_header, fh, 32); + loaded++; + if (loaded % 100000 == 0) { + printf("\r %zu filter headers loaded (height %u)", loaded, height); + fflush(stdout); + } + } + if (loaded > 0) { + printf("\r %zu filter headers loaded, heights %u..%u\n", + loaded, first_height, db->tip_height); + state->cfheaders_tip_height = db->tip_height; + state->cfheaders_base_height = first_height; + memcpy(state->cfheaders_tip_hash, db->tip_header, 32); + } + fseek(db->file, 0, SEEK_END); + if (path_obj) cstr_free(path_obj, true); + return true; + } + } + /* v1 or unreadable: close and delete, will recreate below */ + if (ver < 2) + fprintf(stderr, "cfheadersdb: v%u file detected; rebuilding as v2 " + "(cfheaders will re-download)\n", ver); + fclose(db->file); + db->file = NULL; + } + remove(path); + } + + /* Create fresh v2 file */ + db->file = fopen(path, "w+b"); + if (!db->file) { + /* `path` aliases path_obj->str, so it must outlive this message -- + * freeing path_obj before the fprintf was a heap-use-after-free. */ + fprintf(stderr, "cfheadersdb: cannot open %s: %s\n", path, strerror(errno)); + if (path_obj) cstr_free(path_obj, true); + return false; + } + if (path_obj) cstr_free(path_obj, true); + if (!write_file_header(db->file, cfhdr_magic)) { + fprintf(stderr, "cfheadersdb: failed to write file header\n"); + fclose(db->file); + db->file = NULL; + return false; + } + return true; +} + +dogecoin_bool dogecoin_cfheaders_db_write( + dogecoin_cfheaders_db *db, + uint32_t height, + const uint256_t filter_header) +{ + if (!db || !db->read_write || !db->file) return true; /* no-op when inmem */ + + uint8_t rec[CF_HEADERS_FILE_REC_LEN]; + uint32_t h_le = htole32(height); + memcpy(rec, &h_le, 4); + memcpy(rec + 4, filter_header, 32); + + if (fwrite(rec, CF_HEADERS_FILE_REC_LEN, 1, db->file) != 1) { + fprintf(stderr, "cfheadersdb: write failed at height %u\n", height); + return false; + } + + db->tip_height = height; + memcpy(db->tip_header, filter_header, 32); + return true; +} + +dogecoin_bool dogecoin_cfheaders_db_flush(dogecoin_cfheaders_db *db) +{ + if (!db || !db->read_write || !db->file) return true; + dogecoin_file_commit(db->file); + return true; +} + +dogecoin_bool dogecoin_cfheaders_db_write_genesis( + dogecoin_cfheaders_db *db, + const uint256_t genesis_filter_header) +{ + if (!db || !db->read_write || !db->file) return true; + + long saved = ftell(db->file); + if (fseek(db->file, 8, SEEK_SET) != 0) return false; + dogecoin_bool ok = (fwrite(genesis_filter_header, 32, 1, db->file) == 1); + dogecoin_file_commit(db->file); + fseek(db->file, saved, SEEK_SET); + return ok; +} + +dogecoin_bool dogecoin_cfheaders_db_reset(dogecoin_cfheaders_db *db) +{ + if (!db || !db->read_write || !db->file) return true; + + fflush(db->file); + if (CF_FTRUNCATE(CF_FILENO(db->file), (long)CF_HEADERS_FILE_HDR_LEN) != 0) { + fprintf(stderr, "cfheadersdb: truncate failed: %s\n", strerror(errno)); + return false; + } + fseek(db->file, 0, SEEK_END); + db->tip_height = 0; + memset(db->tip_header, 0, 32); + return true; +} + +/* ================================================================ */ +/* cfilters DB */ +/* ================================================================ */ + +dogecoin_cfilters_db* dogecoin_cfilters_db_new(const dogecoin_chainparams *params, dogecoin_bool inmem_only) +{ + dogecoin_cfilters_db *db = dogecoin_calloc(1, sizeof(*db)); + db->params = params; + db->read_write = !inmem_only; + db->tip_height = 0; + return db; +} + +void dogecoin_cfilters_db_free(dogecoin_cfilters_db *db) +{ + if (!db) return; + if (db->file) { + dogecoin_file_commit(db->file); + fclose(db->file); + db->file = NULL; + } + dogecoin_free(db); +} + +dogecoin_bool dogecoin_cfilters_db_load( + dogecoin_cfilters_db *db, + const char *file_path) +{ + if (!db) return false; + if (!db->read_write) return true; + + cstring *path_obj = NULL; + const char *path = file_path; + if (!path) { + cstring *datadir = cstr_new_sz(512); + dogecoin_get_default_datadir(datadir); + while (datadir->len > 0 && datadir->str[datadir->len - 1] == '\0') + datadir->len--; + cstr_append_c(datadir, '\0'); + ensure_filter_dir(datadir->str, db->params); + cstr_free(datadir, true); + + default_filter_path(&path_obj, db->params, "cfilters.dat"); + path = path_obj->str; + migrate_legacy_filter_file(db->params, "cfilters.dat", path); + } + + struct stat sb; + dogecoin_bool create = (stat(path, &sb) != 0) || (sb.st_size < 8); + + db->file = fopen(path, create ? "w+b" : "r+b"); + + if (!db->file) { + /* Same aliasing rule as the cfheaders path above: `path` points into + * path_obj, so it cannot be freed before this message is formatted. */ + fprintf(stderr, "cfiltersdb: cannot open %s: %s\n", path, strerror(errno)); + if (path_obj) cstr_free(path_obj, true); + return false; + } + if (path_obj) cstr_free(path_obj, true); + + if (create) { + if (!write_file_header(db->file, cfdata_magic)) { + fprintf(stderr, "cfiltersdb: failed to write file header\n"); + fclose(db->file); + db->file = NULL; + return false; + } + return true; + } + + /* Existing file — verify header and seek to end for appends */ + if (read_file_version(db->file, cfdata_magic) == 0) { + fprintf(stderr, "cfiltersdb: bad magic or unsupported version\n"); + fclose(db->file); + db->file = NULL; + return false; + } + + /* Skip the remaining 32 bytes of the file header (magic+version already + * consumed by read_file_version; seek to the first record). */ + if (fseek(db->file, CF_HEADERS_FILE_HDR_LEN, SEEK_SET) != 0) { + fclose(db->file); + db->file = NULL; + return false; + } + + /* Scan records to find the tip height (variable-length; must iterate) */ + while (true) { + uint8_t hdr[CF_FILTERS_FILE_REC_HDR_LEN]; + if (fread(hdr, CF_FILTERS_FILE_REC_HDR_LEN, 1, db->file) != 1) break; + uint32_t height, data_len; + memcpy(&height, hdr, 4); height = le32toh(height); + memcpy(&data_len, hdr + 36, 4); data_len = le32toh(data_len); + db->tip_height = height; + if (fseek(db->file, (long)data_len, SEEK_CUR) != 0) break; + } + + fseek(db->file, 0, SEEK_END); + return true; +} + +dogecoin_bool dogecoin_cfilters_db_write( + dogecoin_cfilters_db *db, + uint32_t height, + const uint256_t block_hash, + const cstring *filter_data) +{ + if (!db || !db->read_write || !db->file) return true; + if (!filter_data) return false; + + uint8_t hdr[CF_FILTERS_FILE_REC_HDR_LEN]; + uint32_t h_le = htole32(height); + uint32_t dl_le = htole32((uint32_t)filter_data->len); + + memcpy(hdr, &h_le, 4); + memcpy(hdr + 4, block_hash, 32); + memcpy(hdr + 36, &dl_le, 4); + + if (fwrite(hdr, CF_FILTERS_FILE_REC_HDR_LEN, 1, db->file) != 1) + return false; + if (filter_data->len > 0 && + fwrite(filter_data->str, filter_data->len, 1, db->file) != 1) + return false; + + dogecoin_file_commit(db->file); + db->tip_height = height; + return true; +} + +dogecoin_bool dogecoin_cfilters_db_iterate( + dogecoin_cfilters_db *db, + dogecoin_bool (*cb)(uint32_t height, const uint256_t block_hash, + const uint8_t *filter_data, uint32_t data_len, + void *ctx), + void *ctx) +{ + if (!db || !db->file || !cb) return false; + + /* Rewind past the file header to the first record. */ + if (fseek(db->file, CF_HEADERS_FILE_HDR_LEN, SEEK_SET) != 0) + return false; + + uint8_t hdr[CF_FILTERS_FILE_REC_HDR_LEN]; + while (fread(hdr, CF_FILTERS_FILE_REC_HDR_LEN, 1, db->file) == 1) { + uint32_t height, data_len; + uint256_t block_hash; + memcpy(&height, hdr, 4); height = le32toh(height); + memcpy(block_hash, hdr + 4, 32); + memcpy(&data_len, hdr + 36, 4); data_len = le32toh(data_len); + + if (data_len == 0) { + if (!cb(height, block_hash, NULL, 0, ctx)) break; + continue; + } + + /* data_len comes straight off disk, so it is only as trustworthy as the + file. A cfilter record cannot legitimately be larger than the P2P + message that delivered it, so reject anything beyond that rather than + asking the allocator for up to 4 GiB on a corrupt or tampered file + (CWE-400). The subsequent short fread would fail, but only after the + allocation has already been attempted. */ + if (data_len > DOGECOIN_MAX_P2P_MSG_SIZE) + return false; + + uint8_t *buf = dogecoin_malloc(data_len); + if (!buf) return false; + if (fread(buf, data_len, 1, db->file) != 1) { + dogecoin_free(buf); + return false; + } + dogecoin_bool cont = cb(height, block_hash, buf, data_len, ctx); + dogecoin_free(buf); + if (!cont) break; + } + + /* Restore write position at end of file. */ + fseek(db->file, 0, SEEK_END); + return true; +} diff --git a/test/cfheadersdb_tests.c b/test/cfheadersdb_tests.c new file mode 100644 index 000000000..ac9cf80af --- /dev/null +++ b/test/cfheadersdb_tests.c @@ -0,0 +1,295 @@ +/* + + The MIT License (MIT) + + Copyright (c) 2024 bluezr + Copyright (c) 2024 The Dogecoin Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES + OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + */ + +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#define CFDB_TEST_HEADERS "/tmp/libdogecoin_cfheaders_test.dat" +#define CFDB_TEST_FILTERS "/tmp/libdogecoin_cfilters_test.dat" + +/* Fill a uint256_t with a deterministic, height-dependent pattern so that a + record read back at the wrong offset is detectable rather than plausible. */ +static void fill_header(uint256_t out, uint32_t height) +{ + unsigned int i; + for (i = 0; i < 32; i++) + out[i] = (uint8_t)((height * 7u + i * 13u) & 0xff); +} + +struct iter_ctx { + unsigned int count; + uint32_t last_height; + uint32_t last_len; + dogecoin_bool payload_ok; +}; + +/* Largest single allocation seen while a recording mapper is installed. + iterate() sizes one allocation directly from a length field read off disk, so + watching the allocator is the only way to tell "rejected the length" apart + from "asked for 4 GiB and then failed the read" -- both return false. */ +static size_t cfdb_max_alloc = 0; + +static void *rec_malloc(size_t size) +{ + if (size > cfdb_max_alloc) cfdb_max_alloc = size; + return malloc(size); +} +static void *rec_calloc(size_t count, size_t size) +{ + if (count * size > cfdb_max_alloc) cfdb_max_alloc = count * size; + return calloc(count, size); +} +static void *rec_realloc(void *ptr, size_t size) +{ + if (size > cfdb_max_alloc) cfdb_max_alloc = size; + return realloc(ptr, size); +} +static void rec_free(void *ptr) { free(ptr); } + +static dogecoin_bool count_cb(uint32_t height, const uint256_t block_hash, + const uint8_t *filter_data, uint32_t data_len, + void *ctx) +{ + struct iter_ctx *c = (struct iter_ctx *)ctx; + uint256_t expect; + (void)block_hash; + c->count++; + c->last_height = height; + c->last_len = data_len; + fill_header(expect, height); + if (filter_data && data_len >= 4 && memcmp(filter_data, expect, 4) != 0) + c->payload_ok = false; + return true; +} + +void test_cfheadersdb() +{ + unsigned int i; + + /* ---------------------------------------------------------------- */ + /* cfheaders: write, flush, reopen, and read the records back */ + /* ---------------------------------------------------------------- */ + remove(CFDB_TEST_HEADERS); + + dogecoin_cfheaders_db *db = dogecoin_cfheaders_db_new(&dogecoin_chainparams_main, false); + u_assert_int_eq(db != NULL, 1); + + dogecoin_compact_filter_state *state = dogecoin_compact_filter_state_new(); + u_assert_int_eq(state != NULL, 1); + u_assert_int_eq(dogecoin_cfheaders_db_load(db, CFDB_TEST_HEADERS, state), true); + + uint256_t genesis_fh; + fill_header(genesis_fh, 0); + u_assert_int_eq(dogecoin_cfheaders_db_write_genesis(db, genesis_fh), true); + + for (i = 1; i <= 16; i++) { + uint256_t fh; + fill_header(fh, i); + u_assert_int_eq(dogecoin_cfheaders_db_write(db, i, fh), true); + } + u_assert_int_eq(dogecoin_cfheaders_db_flush(db), true); + u_assert_uint32_eq(db->tip_height, 16); + dogecoin_cfheaders_db_free(db); + dogecoin_compact_filter_state_free(state); + + /* Reopen: the records must come back, in order, with the genesis header. */ + db = dogecoin_cfheaders_db_new(&dogecoin_chainparams_main, false); + state = dogecoin_compact_filter_state_new(); + u_assert_int_eq(dogecoin_cfheaders_db_load(db, CFDB_TEST_HEADERS, state), true); + u_assert_uint32_eq(db->tip_height, 16); + u_assert_int_eq(memcmp(state->genesis_filter_header, genesis_fh, 32), 0); + u_assert_int_eq(state->filter_headers != NULL, 1); + u_assert_uint32_eq((uint32_t)state->filter_headers->len, 16); + for (i = 0; i < 16; i++) { + uint256_t expect; + uint256_t *got = (uint256_t *)vector_idx(state->filter_headers, i); + fill_header(expect, i + 1); + u_assert_int_eq(memcmp(*got, expect, 32), 0); + } + + /* reset() truncates back to the file header, leaving no records. */ + u_assert_int_eq(dogecoin_cfheaders_db_reset(db), true); + dogecoin_cfheaders_db_free(db); + dogecoin_compact_filter_state_free(state); + + db = dogecoin_cfheaders_db_new(&dogecoin_chainparams_main, false); + state = dogecoin_compact_filter_state_new(); + u_assert_int_eq(dogecoin_cfheaders_db_load(db, CFDB_TEST_HEADERS, state), true); + u_assert_uint32_eq((uint32_t)state->filter_headers->len, 0); + dogecoin_cfheaders_db_free(db); + dogecoin_compact_filter_state_free(state); + + /* ---------------------------------------------------------------- */ + /* A trailing partial record must be ignored, not misparsed */ + /* ---------------------------------------------------------------- */ + remove(CFDB_TEST_HEADERS); + db = dogecoin_cfheaders_db_new(&dogecoin_chainparams_main, false); + state = dogecoin_compact_filter_state_new(); + u_assert_int_eq(dogecoin_cfheaders_db_load(db, CFDB_TEST_HEADERS, state), true); + for (i = 1; i <= 4; i++) { + uint256_t fh; + fill_header(fh, i); + u_assert_int_eq(dogecoin_cfheaders_db_write(db, i, fh), true); + } + u_assert_int_eq(dogecoin_cfheaders_db_flush(db), true); + dogecoin_cfheaders_db_free(db); + dogecoin_compact_filter_state_free(state); + + /* Lop 10 bytes off the last record, as an interrupted write would. Done by + rewriting a shortened copy rather than truncate()/_chsize(), so the test + stays portable across the platforms this file already builds on. */ + { + FILE *f = fopen(CFDB_TEST_HEADERS, "rb"); + uint8_t *buf; + long size; + size_t got; + u_assert_int_eq(f != NULL, 1); + fseek(f, 0, SEEK_END); + size = ftell(f); + u_assert_int_eq(size > 10, 1); + rewind(f); + buf = dogecoin_malloc((size_t)size); + u_assert_int_eq(buf != NULL, 1); + got = fread(buf, 1, (size_t)size, f); + fclose(f); + u_assert_int_eq(got == (size_t)size, 1); + + f = fopen(CFDB_TEST_HEADERS, "wb"); + u_assert_int_eq(f != NULL, 1); + u_assert_int_eq(fwrite(buf, 1, (size_t)size - 10, f) == (size_t)size - 10, 1); + fclose(f); + dogecoin_free(buf); + } + + db = dogecoin_cfheaders_db_new(&dogecoin_chainparams_main, false); + state = dogecoin_compact_filter_state_new(); + u_assert_int_eq(dogecoin_cfheaders_db_load(db, CFDB_TEST_HEADERS, state), true); + /* Three whole records survive; the truncated fourth is dropped. */ + u_assert_uint32_eq((uint32_t)state->filter_headers->len, 3); + u_assert_uint32_eq(db->tip_height, 3); + dogecoin_cfheaders_db_free(db); + dogecoin_compact_filter_state_free(state); + + /* ---------------------------------------------------------------- */ + /* cfilters: write, iterate, and reject an oversized length field */ + /* ---------------------------------------------------------------- */ + remove(CFDB_TEST_FILTERS); + dogecoin_cfilters_db *fdb = dogecoin_cfilters_db_new(&dogecoin_chainparams_main, false); + u_assert_int_eq(fdb != NULL, 1); + u_assert_int_eq(dogecoin_cfilters_db_load(fdb, CFDB_TEST_FILTERS), true); + + for (i = 1; i <= 5; i++) { + uint256_t bh, payload; + cstring *data; + fill_header(bh, i + 100); + fill_header(payload, i); + data = cstr_new_buf(payload, 32); + u_assert_int_eq(dogecoin_cfilters_db_write(fdb, i, bh, data), true); + cstr_free(data, true); + } + dogecoin_cfilters_db_free(fdb); + + fdb = dogecoin_cfilters_db_new(&dogecoin_chainparams_main, false); + u_assert_int_eq(dogecoin_cfilters_db_load(fdb, CFDB_TEST_FILTERS), true); + { + struct iter_ctx c; + c.count = 0; c.last_height = 0; c.last_len = 0; c.payload_ok = true; + u_assert_int_eq(dogecoin_cfilters_db_iterate(fdb, count_cb, &c), true); + u_assert_uint32_eq(c.count, 5); + u_assert_uint32_eq(c.last_height, 5); + u_assert_uint32_eq(c.last_len, 32); + u_assert_int_eq(c.payload_ok, true); + } + dogecoin_cfilters_db_free(fdb); + + /* Corrupt the first record's data_len to 0xFFFFFFFF. Without a bound this + asks the allocator for 4 GiB before the short read is ever attempted, so + iterate() must reject the record on the length alone. The file header is + CF_HEADERS_FILE_HDR_LEN bytes and data_len sits at offset 36 of the + record header. */ + { + FILE *f = fopen(CFDB_TEST_FILTERS, "r+b"); + uint32_t bogus = 0xFFFFFFFFu; + u_assert_int_eq(f != NULL, 1); + u_assert_int_eq(fseek(f, CF_HEADERS_FILE_HDR_LEN + 36, SEEK_SET) == 0, 1); + u_assert_int_eq(fwrite(&bogus, 4, 1, f) == 1, 1); + fclose(f); + } + + fdb = dogecoin_cfilters_db_new(&dogecoin_chainparams_main, false); + u_assert_int_eq(dogecoin_cfilters_db_load(fdb, CFDB_TEST_FILTERS), true); + { + struct iter_ctx c; + dogecoin_mem_mapper rec = {rec_malloc, rec_calloc, rec_realloc, rec_free}; + c.count = 0; c.last_height = 0; c.last_len = 0; c.payload_ok = true; + + cfdb_max_alloc = 0; + dogecoin_mem_set_mapper(rec); + u_assert_int_eq(dogecoin_cfilters_db_iterate(fdb, count_cb, &c), false); + dogecoin_mem_set_mapper_default(); + + /* The record is rejected and no callback fires. */ + u_assert_uint32_eq(c.count, 0); + /* And, the point of the bound: the 0xFFFFFFFF length was never handed + to the allocator. Asserting only on the false return would pass with + the bound removed, because the oversized read fails immediately + after the oversized allocation succeeds under memory overcommit. */ + u_assert_int_eq(cfdb_max_alloc <= (size_t)DOGECOIN_MAX_P2P_MSG_SIZE, 1); + } + dogecoin_cfilters_db_free(fdb); + + /* ---------------------------------------------------------------- */ + /* inmem_only performs no file I/O */ + /* ---------------------------------------------------------------- */ + { + dogecoin_cfheaders_db *mem = dogecoin_cfheaders_db_new(&dogecoin_chainparams_main, true); + uint256_t fh; + u_assert_int_eq(mem != NULL, 1); + u_assert_int_eq(mem->read_write, false); + u_assert_int_eq(mem->file == NULL, 1); + fill_header(fh, 1); + /* Writes are accepted and tracked in RAM without touching the disk. */ + u_assert_int_eq(dogecoin_cfheaders_db_write(mem, 1, fh), true); + u_assert_int_eq(mem->file == NULL, 1); + dogecoin_cfheaders_db_free(mem); + } + + remove(CFDB_TEST_HEADERS); + remove(CFDB_TEST_FILTERS); +} diff --git a/test/unittester.c b/test/unittester.c index 9925baf2a..2fa72499b 100644 --- a/test/unittester.c +++ b/test/unittester.c @@ -155,6 +155,7 @@ extern void test_reorg(); extern void test_spv(); extern void test_bip37_filter_state(); extern void test_bip37_merkleblock_vector(); +extern void test_cfheadersdb(); #else extern void test_net_flag_not_defined(); #endif @@ -294,6 +295,7 @@ int main() u_run_test(test_spv); u_run_test(test_bip37_filter_state); u_run_test(test_bip37_merkleblock_vector); + u_run_test(test_cfheadersdb); #else u_run_test(test_net_flag_not_defined); #endif From 766266f5cb7f38338212f075b04ab7f84910b52e Mon Sep 17 00:00:00 2001 From: bluezr Date: Sun, 2 Aug 2026 14:56:15 -0700 Subject: [PATCH 08/13] test: use relative paths in the cfheadersdb tests The test hardcoded /tmp/libdogecoin_cfheaders_test.dat. Neither Windows nor Android has /tmp, so x86_64-win-native and aarch64-android failed: cfheadersdb: cannot open /tmp/libdogecoin_cfheaders_test.dat: No such file or directory Use plain relative filenames in the working directory, as the wallet and spv tests already do. Both files are removed at the end of the test. Same portability class as the truncate()/_chsize() call this test already avoids -- caught there, missed here. --- test/cfheadersdb_tests.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/cfheadersdb_tests.c b/test/cfheadersdb_tests.c index ac9cf80af..34b502066 100644 --- a/test/cfheadersdb_tests.c +++ b/test/cfheadersdb_tests.c @@ -40,8 +40,9 @@ #include #include -#define CFDB_TEST_HEADERS "/tmp/libdogecoin_cfheaders_test.dat" -#define CFDB_TEST_FILTERS "/tmp/libdogecoin_cfilters_test.dat" +/* Relative to the working directory: Windows and Android have no /tmp. */ +#define CFDB_TEST_HEADERS "test_cfheaders.dat" +#define CFDB_TEST_FILTERS "test_cfilters.dat" /* Fill a uint256_t with a deterministic, height-dependent pattern so that a record read back at the wrong offset is detectable rather than plausible. */ From 9ab2f5619ac2415997f1ee5f751c231ae2053d15 Mon Sep 17 00:00:00 2001 From: bluezr Date: Sun, 2 Aug 2026 15:30:16 -0700 Subject: [PATCH 09/13] spv: sync compact filters and match watched scripts (BIP157) Wires the BIP157 message flow into the SPV client: getcfcheckpt to pin the peer's checkpoints, getcfheaders to build and validate the filter header chain, getcfilters to fetch filters, GCS matching against watched scripts, and a getdata for the blocks that matched. Filter headers are persisted through the cfheaders/cfilters DBs added in the previous layer, so a restart resumes from the stored tip rather than re-downloading. Cached filters are rescanned at startup, which covers scripts registered after the filters were stored. BIP37 and BIP157 are mutually exclusive here, by design and for privacy: a bloom filter tells the peer which scripts are being watched, which is the disclosure compact filters exist to avoid. Compact filters are on by default and dogecoin_spv_client_filterload fails closed while they are, so a BIP37 consumer opts out explicitly via dogecoin_spv_enable_compact_filters(client, false). The test asserts both halves of that. headersdb gains a block-hash-by-height lookup with a resume cursor. cfheaders batches request ascending heights, and rescanning the whole file per lookup is O(N^2) over a 6.2M-record file; resuming from the last match keeps it linear. Deliberately not included, to keep this reviewable and because each belongs elsewhere: - parallel cfilter/cfheaders download. The state fields live in the compact_filter layer; the logic lands in its own PR. Every path here takes the sequential branch. - the par_hdr parallel genesis header download, which is #378. - skip_pow and the stored-hash-on-load shortcut. Both were in the prototype branch, both weaken what header loading verifies, and neither is needed by filter sync. They belong with the bulk-load work where their trust assumptions can be reviewed as a unit. Header loading here is unchanged from 0.1.5-dev. Report the height range actually covered on completion. cf_scan_start_height was only set on one of the two scan-start paths, and the log falls back to 1 when it is unset, so a run that covered the checkpoint tail reported "scanned heights 1..tip" -- overstating coverage in exactly the way that hides a gap. Verified against a local 1.14.99 node serving BIP157 with the corrected cfilter wire order, run with an isolated HOME so the real filter cache was untouched: 1442 cfilters parsed off the wire, full getcfcheckpt/getcfheaders/getcfilters round trip, zero validation errors or misbehaviour, and the completion line now reports 6314395..6315836 rather than 1..6315836. That run does not exercise GCS matching: -a is not wired to the filter state until the CLI layer, so no scripts were watched. The matching block is byte-identical to the prototype's sequential arm, which was separately confirmed to match at a predicted height over the wire, and the unit tests cover GCS matching directly -- but this layer's own end-to-end run proves the wire path, not the match path. WITH_NET=ON with -DBUILD_SHARED_LIBS=1: 81/81. WITH_NET=OFF: 74/74. --- include/dogecoin/headersdb_file.h | 21 + include/dogecoin/protocol.h | 7 + include/dogecoin/spv.h | 45 + src/headersdb_file.c | 149 ++- src/spv.c | 1397 ++++++++++++++++++++++++++++- test/spv_tests.c | 8 + 6 files changed, 1611 insertions(+), 16 deletions(-) diff --git a/include/dogecoin/headersdb_file.h b/include/dogecoin/headersdb_file.h index cc38e8d7b..06291f7b5 100644 --- a/include/dogecoin/headersdb_file.h +++ b/include/dogecoin/headersdb_file.h @@ -55,6 +55,11 @@ typedef struct dogecoin_headers_db_ dogecoin_blockindex genesis; dogecoin_blockindex *chaintip; dogecoin_blockindex *chainbottom; + /* Sequential scan state for dogecoin_headers_db_get_block_hash_at_height. + * cfheaders batches request increasing heights; resuming from the last + * found record avoids O(N²) re-reads over a 6.2M-block file. */ + long scan_resume_pos; /**< File offset after last successful scan record */ + uint32_t scan_resume_height; /**< Block height at scan_resume_pos */ } dogecoin_headers_db; dogecoin_headers_db *dogecoin_headers_db_new(const dogecoin_chainparams* chainparams, dogecoin_bool inmem_only); @@ -68,6 +73,22 @@ dogecoin_bool dogecoin_headersdb_disconnect_tip(dogecoin_headers_db* db); dogecoin_bool dogecoin_headersdb_has_checkpoint_start(dogecoin_headers_db* db); void dogecoin_headersdb_set_checkpoint_start(dogecoin_headers_db* db, uint256_t hash, uint32_t height, arith_uint256 chainwork); +/** + * @brief Find the block hash stored at a specific height in the on-disk header file. + * + * Scans the headers.db file from its beginning, reading fixed-size records until + * the one with @p target_height is found. Falls back to walking the in-memory + * prev-chain first for blocks near the chain tip (no file I/O needed there). + * + * @param db The headers database (file handle must be open). + * @param target_height Block height to look up. + * @param hash_out Receives the 32-byte block hash on success. + * @return true if found and @p hash_out is populated. + */ +dogecoin_bool dogecoin_headers_db_open_for_scan(dogecoin_headers_db *db, const char *filename); +dogecoin_bool dogecoin_headers_db_get_block_hash_at_height(dogecoin_headers_db *db, uint32_t target_height, uint256_t hash_out); +dogecoin_bool dogecoin_headers_db_get_block_hash_at_height_seq(dogecoin_headers_db *db, uint32_t target_height, uint256_t hash_out); + /* Defined in headersdb_file.c using typed trampolines (avoids the * function-pointer-cast UB that -fsanitize=function flags). */ extern const dogecoin_headers_db_interface dogecoin_headers_db_interface_file; diff --git a/include/dogecoin/protocol.h b/include/dogecoin/protocol.h index 8fd9a33c1..3e6f6e05c 100644 --- a/include/dogecoin/protocol.h +++ b/include/dogecoin/protocol.h @@ -106,6 +106,13 @@ static const char* DOGECOIN_MSG_SENDCMPCT = "sendcmpct"; static const char* DOGECOIN_MSG_CMPCTBLOCK = "cmpctblock"; static const char* DOGECOIN_MSG_GETBLOCKTXN = "getblocktxn"; static const char* DOGECOIN_MSG_BLOCKTXN = "blocktxn"; +/* BIP 157: Compact block filter protocol messages */ +static const char* DOGECOIN_MSG_GETCFILTERS = "getcfilters"; +static const char* DOGECOIN_MSG_CFILTER = "cfilter"; +static const char* DOGECOIN_MSG_GETCFHEADERS = "getcfheaders"; +static const char* DOGECOIN_MSG_CFHEADERS = "cfheaders"; +static const char* DOGECOIN_MSG_GETCFCHECKPT = "getcfcheckpt"; +static const char* DOGECOIN_MSG_CFCHECKPT = "cfcheckpt"; DISABLE_WARNING_POP enum DOGECOIN_INV_TYPE { diff --git a/include/dogecoin/spv.h b/include/dogecoin/spv.h index ba2bbdf49..f4ee4b2f2 100644 --- a/include/dogecoin/spv.h +++ b/include/dogecoin/spv.h @@ -31,6 +31,7 @@ #include #include +#include #include #include #include @@ -42,6 +43,7 @@ LIBDOGECOIN_BEGIN_DECL enum SPV_CLIENT_STATE { SPV_HEADER_SYNC_FLAG = (1 << 0), SPV_FULLBLOCK_SYNC_FLAG = (1 << 1), + SPV_CFILTER_SYNC_FLAG = (1 << 2), }; typedef struct spv_block_sample_ @@ -107,6 +109,35 @@ typedef struct dogecoin_spv_client_ uint256_t filtered_history_last_rerequest_txid; /* dedupe repeated tail re-requests for the same matched tx */ int32_t filtered_history_last_rerequest_height; + /* Comma-separated "host:port" strings supplied by the caller via + * dogecoin_spv_client_discover_peers(). When non-NULL, the reconnect + * callback reuses these peers instead of querying DNS seeds, so the + * client stays connected to the explicitly-named hosts only. */ + char *peer_ips; + + /* BIP157 genesis-filter support: optional read-only secondary headers DB + * used only for block-hash lookup at early heights when the primary DB is + * checkpoint-based. Populated via --filter-hash-db CLI option. */ + void *aux_hash_db_ctx; /**< Context for aux block-hash lookup DB */ + const dogecoin_headers_db_interface *aux_hash_db; /**< Interface for aux block-hash lookup DB */ + + /* When non-zero, overrides the cfheaders start height (auto default: + * chainbottom for checkpoint-based sync, 1 for genesis sync). */ + uint32_t cf_start_height; + + /* BIP157: compact filter sync state */ + dogecoin_bool compact_filters_enabled; /**< Whether compact filter sync is active */ + dogecoin_compact_filter_state *cfilter_state; /**< BIP157 per-client compact filter state */ + struct dogecoin_cfheaders_db_ *cfheaders_db; /**< Persistent storage for BIP157 filter headers */ + struct dogecoin_cfilters_db_ *cfilters_db; /**< Persistent storage for BIP157 filter data */ + char *cfheaders_path; /**< Override path for cfheaders.dat (NULL = default datadir) */ + char *cfilters_path; /**< Override path for cfilters.dat (NULL = default datadir) */ + + /* BIP158 filter header computation during full block sync */ + uint256_t cf_prev_filter_header; /**< Running filter header chain for BIP158 */ + uint32_t cf_computed_height; /**< Last height for which a filter header was computed */ + dogecoin_bool cf_export_enabled; /**< Log filter header checkpoints during sync */ + /* callbacks */ /* ========= */ void (*header_connected)(struct dogecoin_spv_client_ *client); @@ -162,6 +193,20 @@ LIBDOGECOIN_API dogecoin_bool dogecoin_spv_client_filteradd( LIBDOGECOIN_API dogecoin_bool dogecoin_spv_client_filterclear(dogecoin_spv_client* client); +/* BIP157: enable or disable compact filter sync for this client */ +LIBDOGECOIN_API void dogecoin_spv_enable_compact_filters(dogecoin_spv_client *client, dogecoin_bool enable); + +/* BIP157: rescan all cached cfilters in cfilters.dat against watched scripts. + * Call after dogecoin_spv_client_filteradd and before dogecoin_spv_client_runloop + * to check locally-stored filters immediately without waiting for cfheaders sync. */ +LIBDOGECOIN_API void dogecoin_spv_client_rescan_cached_filters(dogecoin_spv_client *client); + + +/* BIP157: send getcfcheckpt, getcfheaders, getcfilters to a peer */ +LIBDOGECOIN_API dogecoin_bool dogecoin_spv_request_cfcheckpt(dogecoin_spv_client *client, dogecoin_node *node); +LIBDOGECOIN_API dogecoin_bool dogecoin_spv_request_cfheaders(dogecoin_spv_client *client, dogecoin_node *node, uint32_t start_height, const uint256_t stop_hash); +LIBDOGECOIN_API dogecoin_bool dogecoin_spv_request_cfilters(dogecoin_spv_client *client, dogecoin_node *node, uint32_t start_height, const uint256_t stop_hash); + LIBDOGECOIN_END_DECL #endif // __LIBDOGECOIN_SPV_H__ diff --git a/src/headersdb_file.c b/src/headersdb_file.c index a851c413c..33b473690 100644 --- a/src/headersdb_file.c +++ b/src/headersdb_file.c @@ -211,13 +211,12 @@ dogecoin_bool dogecoin_headers_db_load(dogecoin_headers_db* db, const char *file size_t connected_headers_count = 0; if (db->headers_tree_file && !create) { - printf("Loading headers from disk, this may take several minutes...\n"); + printf("Loading headers from disk...\n"); while (!feof(db->headers_tree_file)) { - // print progress - if (connected_headers_count % 1000 == 0) + if (connected_headers_count % 100000 == 0 && connected_headers_count > 0) { - printf("\r%ld headers loaded", connected_headers_count); + printf("\r%zu headers loaded", connected_headers_count); fflush(stdout); } @@ -225,8 +224,6 @@ dogecoin_bool dogecoin_headers_db_load(dogecoin_headers_db* db, const char *file if (fread(buf_all, sizeof(buf_all), 1, db->headers_tree_file) == 1) { struct const_buffer cbuf_all = {buf_all, sizeof(buf_all)}; - //load all - uint256_t hash; uint32_t height; arith_uint256 chainwork = {0}; @@ -266,10 +263,46 @@ dogecoin_bool dogecoin_headers_db_load(dogecoin_headers_db* db, const char *file } } } - printf("\nConnected %ld headers, now at height: %d\n", connected_headers_count, db->chaintip->height); + printf("\nConnected %zu headers, now at height: %d\n", connected_headers_count, db->chaintip->height); return (db->headers_tree_file != NULL); } +/** + * Open an existing headers DB file for sequential hash lookup only. + * + * Unlike dogecoin_headers_db_load(), this function does NOT read any block + * records or build the in-memory tree. It simply opens the file, verifies + * the 8-byte magic+version header, and leaves the file handle ready for + * dogecoin_headers_db_get_block_hash_at_height(). Use this for the aux + * hash-lookup DB in BIP157 genesis filter IBD — no tree needed. + */ +dogecoin_bool dogecoin_headers_db_open_for_scan(dogecoin_headers_db *db, const char *filename) +{ + if (!db || !filename) return false; + + db->headers_tree_file = fopen(filename, "rb"); + if (!db->headers_tree_file) { + fprintf(stderr, "headers_db: cannot open '%s' for scan: %s\n", filename, strerror(errno)); + return false; + } + + uint8_t buf[sizeof(file_hdr_magic) + sizeof(current_version)]; + if (fread(buf, sizeof(buf), 1, db->headers_tree_file) != 1 || + memcmp(buf, file_hdr_magic, sizeof(file_hdr_magic)) != 0) { + fprintf(stderr, "headers_db: bad magic in '%s'\n", filename); + fclose(db->headers_tree_file); + db->headers_tree_file = NULL; + return false; + } + if (le32toh(*(uint32_t *)(buf + sizeof(file_hdr_magic))) > current_version) { + fprintf(stderr, "headers_db: unsupported version in '%s'\n", filename); + fclose(db->headers_tree_file); + db->headers_tree_file = NULL; + return false; + } + return true; +} + /** * The function takes a block index and writes it to the headers database * @@ -558,6 +591,108 @@ dogecoin_bool dogecoin_headersdb_has_checkpoint_start(dogecoin_headers_db* db) { return (db->chainbottom->height != 0); } +/** + * Find a block hash by height, first in the in-memory prev chain and then by + * scanning the on-disk header file. Used by the BIP157 cfheaders batcher to + * compute a valid stop_hash without needing a height-indexed block index. + */ +dogecoin_bool dogecoin_headers_db_get_block_hash_at_height(dogecoin_headers_db *db, uint32_t target_height, uint256_t hash_out) +{ + if (!db) return false; + + /* Fast path: walk the in-memory prev chain (works for the last max_hdr_in_mem entries) */ + dogecoin_blockindex *bi = db->chaintip; + while (bi && (uint32_t)bi->height > target_height) + bi = bi->prev; + if (bi && (uint32_t)bi->height == target_height) { + memcpy_safe(hash_out, bi->hash, sizeof(uint256_t)); + return true; + } + + /* Slow path: scan the on-disk file. + * Records are written in ascending height order (one getheaders batch at a time). + * Record layout: hash(32) + height(4 LE) + chainwork(32) + header(80) = 148 bytes. + * + * cfheaders batches request heights in ascending order (2000, 4000, ...). + * Scanning from offset 0 each time would be O(N²) over a 6M-block file. + * Instead, resume from the last scan position when target_height is beyond + * what was found before; reset to the beginning only when scanning backwards. */ + if (!db->headers_tree_file) return false; + + long saved_pos = ftell(db->headers_tree_file); + + long start_pos = SPV_HEADERS_FILE_HDR_LEN; + if (db->scan_resume_height > 0 && target_height >= db->scan_resume_height) + start_pos = db->scan_resume_pos; /* continue forward from last find */ + + fseek(db->headers_tree_file, start_pos, SEEK_SET); + + uint8_t rec[SPV_HEADERS_FILE_REC_LEN]; + dogecoin_bool found = false; + while (fread(rec, SPV_HEADERS_FILE_REC_LEN, 1, db->headers_tree_file) == 1) { + uint32_t h; + memcpy(&h, rec + 32, 4); /* height field is at offset 32 (after the hash) */ + h = le32toh(h); + if (h == target_height) { + memcpy_safe(hash_out, rec, sizeof(uint256_t)); + /* Remember this position so the next forward lookup can skip ahead. */ + db->scan_resume_pos = ftell(db->headers_tree_file); + db->scan_resume_height = h; + found = true; + break; + } + } + + fseek(db->headers_tree_file, saved_pos, SEEK_SET); + return found; +} + +/* Sequential variant used during the cfilter rescan: like + * dogecoin_headers_db_get_block_hash_at_height but never restores the file + * position. The caller (spv_rescan_cb) visits heights in strictly ascending + * order so the file pointer advances forward only, keeping I/O O(N) instead + * of O(N²) that the save/restore pattern would produce. */ +dogecoin_bool dogecoin_headers_db_get_block_hash_at_height_seq(dogecoin_headers_db *db, uint32_t target_height, uint256_t hash_out) +{ + if (!db) return false; + + /* Fast path: in-memory prev chain — only useful for heights near the tip. + * Skip if target is more than max_hdr_in_mem below the tip to avoid + * walking the full 1440-entry chain 6M+ times during a bulk rescan. */ + if (db->chaintip && + (uint32_t)db->chaintip->height <= target_height + db->max_hdr_in_mem) { + dogecoin_blockindex *bi = db->chaintip; + while (bi && (uint32_t)bi->height > target_height) + bi = bi->prev; + if (bi && (uint32_t)bi->height == target_height) { + memcpy_safe(hash_out, bi->hash, sizeof(uint256_t)); + return true; + } + } + + if (!db->headers_tree_file) return false; + + long start_pos = SPV_HEADERS_FILE_HDR_LEN; + if (db->scan_resume_height > 0 && target_height >= db->scan_resume_height) + start_pos = db->scan_resume_pos; + + fseek(db->headers_tree_file, start_pos, SEEK_SET); + + uint8_t rec[SPV_HEADERS_FILE_REC_LEN]; + while (fread(rec, SPV_HEADERS_FILE_REC_LEN, 1, db->headers_tree_file) == 1) { + uint32_t h; + memcpy(&h, rec + 32, 4); + h = le32toh(h); + if (h == target_height) { + memcpy_safe(hash_out, rec, sizeof(uint256_t)); + db->scan_resume_pos = ftell(db->headers_tree_file); + db->scan_resume_height = h; + return true; + } + } + return false; +} + /** * Set the checkpoint block to the given hash and height * diff --git a/src/spv.c b/src/spv.c index ffab9d4a9..82543c07e 100644 --- a/src/spv.c +++ b/src/spv.c @@ -39,6 +39,7 @@ #endif #include +#include #include #include #include @@ -48,8 +49,12 @@ #include #include +#include #include +#include +#include #include +#include #include #include #include @@ -121,6 +126,260 @@ static dogecoin_bool spv_send_filterload_to_node(dogecoin_node* node, return true; } +static uint32_t spv_elapsed(const dogecoin_spv_client *client) { + return (uint32_t)((uint64_t)time(NULL) - client->start_ts); +} + +/* ================================================================ */ +/* Parallel cfheaders download helpers */ +/* ================================================================ */ + +static uint32_t cf_find_checkpoint_stop(const dogecoin_chainparams *params, uint32_t target_height, uint256_t hash_out); + +/* Callback context for spv_rescan_cached_cfilters. */ +typedef struct { + dogecoin_spv_client *client; + uint32_t up_to_height; /* only rescan heights < this */ + uint32_t scanned; + uint32_t matched; +} rescan_ctx; + +/* Iterator callback: match one cached cfilter against watched_scripts. */ +static dogecoin_bool spv_rescan_cb(uint32_t height, const uint256_t block_hash, + const uint8_t *filter_data, uint32_t data_len, + void *ctx_) +{ + rescan_ctx *ctx = (rescan_ctx *)ctx_; + if (height >= ctx->up_to_height) return false; /* stop; network takes over here */ + + dogecoin_compact_filter_state *cfstate = ctx->client->cfilter_state; + if (!cfstate->watched_scripts || cfstate->watched_scripts->len == 0) return true; + + ctx->scanned++; + + /* The block_hash stored in cfilters.dat may be corrupted by an old deser bug + * (filter_type byte prepended, last hash byte zeroed). The GCS SipHash key is + * derived directly from the block hash, so a wrong hash produces wrong match + * results. Look up the authoritative hash from the headers DB BEFORE + * deserializing the filter so that the correct key is used for matching. + * Use the _seq variant which never restores the file pointer, keeping sequential + * ascending-order lookups O(N) rather than O(N²). */ + uint256_t correct_hash; + dogecoin_bool hash_ok = false; + if (ctx->client->headers_db && ctx->client->headers_db_ctx) { + dogecoin_headers_db *hdb = (dogecoin_headers_db *)ctx->client->headers_db_ctx; + hash_ok = dogecoin_headers_db_get_block_hash_at_height_seq(hdb, height, correct_hash); + } + if (!hash_ok && ctx->client->aux_hash_db && ctx->client->aux_hash_db_ctx) { + dogecoin_headers_db *aux = (dogecoin_headers_db *)ctx->client->aux_hash_db_ctx; + hash_ok = dogecoin_headers_db_get_block_hash_at_height_seq(aux, height, correct_hash); + } + const uint8_t *hash_for_gcs = hash_ok ? (const uint8_t *)correct_hash + : (const uint8_t *)block_hash; + + gcs_filter *gcs = gcs_filter_new(); + struct const_buffer fbuf = { filter_data, data_len }; + if (gcs_filter_deserialize(gcs, GCS_BASIC_FILTER_TYPE, hash_for_gcs, &fbuf)) { + if (gcs_filter_match_any(gcs, cfstate->watched_scripts)) { + if (ctx->client->nodegroup && ctx->client->nodegroup->log_write_cb) + ctx->client->nodegroup->log_write_cb( + "[bip157] MATCH (rescan) at height %u\n", height); + uint256_t *matched_hash = dogecoin_calloc(1, sizeof(uint256_t)); + memcpy(matched_hash, hash_for_gcs, sizeof(uint256_t)); + vector_add(cfstate->matched_block_hashes, matched_hash); + uint32_t *matched_height = dogecoin_calloc(1, sizeof(uint32_t)); + *matched_height = height; + vector_add(cfstate->matched_block_heights, matched_height); + ctx->matched++; + } + } + gcs_filter_free(gcs); + return true; +} + +/* Rescan cached cfilters (heights 1..cf_scan_start-1) against watched_scripts. + * Called before starting the network download so that already-stored filters + * are not skipped when scripts were registered after the previous sync. */ +static void spv_rescan_cached_cfilters(dogecoin_spv_client *client, uint32_t cf_scan_start) +{ + if (!client->cfilters_db) return; + dogecoin_compact_filter_state *cfstate = client->cfilter_state; + if (!cfstate || !cfstate->watched_scripts || cfstate->watched_scripts->len == 0) return; + + /* Skip partial rescan if a full startup rescan already covered everything. */ + if (cfstate->rescan_done) return; + + if (cf_scan_start <= 1) return; + + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] rescanning cached filters heights 1..%u against %u watched scripts\n", + cf_scan_start - 1, (unsigned int)cfstate->watched_scripts->len); + + rescan_ctx ctx = { client, cf_scan_start, 0, 0 }; + dogecoin_cfilters_db_iterate(client->cfilters_db, spv_rescan_cb, &ctx); + + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] rescan complete: %u filters checked, %u matched\n", + ctx.scanned, ctx.matched); +} + +/* Repair cfilters.dat records whose block_hash was written with an off-by-one + * deserialization bug (old code read the 32-byte hash before the 1-byte + * filter_type, so stored hashes contain the filter_type byte prepended and the + * last hash byte replaced with 0x00). The symptom: stored_hash[31] == 0x00. + * We correct each such record in-place using the authoritative hash from the + * headers DB. Only records opened read-write are touched. */ +static void spv_repair_cfilters_hashes(dogecoin_spv_client *client) +{ + dogecoin_cfilters_db *db = client->cfilters_db; + if (!db || !db->file || !db->read_write) return; + + dogecoin_headers_db *hdb = client->headers_db ? (dogecoin_headers_db *)client->headers_db_ctx : NULL; + dogecoin_headers_db *aux = client->aux_hash_db ? (dogecoin_headers_db *)client->aux_hash_db_ctx : NULL; + if (!hdb && !aux) return; + + if (fseek(db->file, CF_HEADERS_FILE_HDR_LEN, SEEK_SET) != 0) return; + + uint32_t repaired = 0; + uint8_t hdr[CF_FILTERS_FILE_REC_HDR_LEN]; + while (fread(hdr, CF_FILTERS_FILE_REC_HDR_LEN, 1, db->file) == 1) { + uint32_t height, data_len; + memcpy(&height, hdr, 4); height = le32toh(height); + memcpy(&data_len, hdr + 36, 4); data_len = le32toh(data_len); + + /* Quick corruption check: the old bug always left byte 31 of the hash + * as 0x00 (zero-initialised, never written). Real hashes end in 0x00 + * ~1/256 of the time so we'll do a few unnecessary lookups, but those + * will match and no write will be issued. */ + if (hdr[35] == 0x00) { + uint256_t correct; + dogecoin_bool ok = hdb && dogecoin_headers_db_get_block_hash_at_height(hdb, height, correct); + if (!ok && aux) ok = dogecoin_headers_db_get_block_hash_at_height(aux, height, correct); + if (ok && memcmp(hdr + 4, correct, 32) != 0) { + long rec_start = ftell(db->file) - (long)CF_FILTERS_FILE_REC_HDR_LEN; + if (fseek(db->file, rec_start + 4, SEEK_SET) == 0) { + fwrite(correct, 32, 1, db->file); + fseek(db->file, rec_start + (long)CF_FILTERS_FILE_REC_HDR_LEN, SEEK_SET); + repaired++; + } + } + } + + if (data_len > 0 && fseek(db->file, (long)data_len, SEEK_CUR) != 0) break; + } + + fseek(db->file, 0, SEEK_END); + + if (repaired > 0 && client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] repaired %u cfilter block hashes (old deserialization bug)\n", repaired); +} + +void dogecoin_spv_client_rescan_cached_filters(dogecoin_spv_client *client) +{ + if (!client || !client->cfilters_db) return; + dogecoin_compact_filter_state *cfstate = client->cfilter_state; + if (!cfstate || !cfstate->watched_scripts || cfstate->watched_scripts->len == 0) return; + + uint32_t tip = client->cfilters_db->tip_height; + if (tip == 0) return; + + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] startup rescan: checking all %u cached filters against %u watched scripts\n", + tip, (unsigned int)cfstate->watched_scripts->len); + + rescan_ctx ctx = { client, UINT32_MAX, 0, 0 }; + dogecoin_cfilters_db_iterate(client->cfilters_db, spv_rescan_cb, &ctx); + + cfstate->rescan_done = true; + + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] startup rescan complete: %u filters checked, %u matched\n", + ctx.scanned, ctx.matched); +} + +/* Called when all cfheaders chunks are complete: populate filter_headers + * from the flat array and transition to cfilter download. */ +static void spv_cf_request_matched_blocks(dogecoin_spv_client *client) +{ + dogecoin_compact_filter_state *cfstate = client->cfilter_state; + if (!cfstate || !cfstate->matched_block_hashes || cfstate->matched_block_hashes->len == 0) + return; + + /* Collect all connected peers (prefer CF-capable, then any) */ + /* enum, not `const unsigned int`: in C a const object is not a constant + * expression, so `peers[MAX_PEERS]` was a variable-length array. MSVC does + * not implement VLAs and rejected it outright (C2057 / C2133 / C2466). */ + enum { MAX_PEERS = 8 }; + dogecoin_node *peers[MAX_PEERS]; + unsigned int num_peers = 0; + unsigned int ni; + for (ni = 0; ni < client->nodegroup->nodes->len && num_peers < MAX_PEERS; ni++) { + dogecoin_node *n = (dogecoin_node *)vector_idx(client->nodegroup->nodes, ni); + if (!n || !(n->state & NODE_CONNECTED) || !n->version_handshake) continue; + if (n->services & DOGECOIN_NODE_COMPACT_FILTERS) { + /* insert CF peers at the front */ + if (num_peers < MAX_PEERS) { peers[num_peers++] = n; } + } else { + if (num_peers < MAX_PEERS) { peers[num_peers++] = n; } + } + } + if (num_peers == 0) { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] no peer available for matched block fetch\n"); + return; + } + + uint32_t total = (uint32_t)cfstate->matched_block_hashes->len; + cfstate->cf_block_fetch_active = true; + cfstate->matched_blocks_fetched = 0; + + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] requesting %u matched full blocks across %u peers [%us elapsed]\n", + total, num_peers, spv_elapsed(client)); + + /* Distribute blocks round-robin across peers in batches of 8 */ + const uint32_t batch_max = 8; + uint32_t peer_idx = 0; + uint32_t sent = 0; + while (sent < total) { + dogecoin_node *peer = peers[peer_idx % num_peers]; + peer_idx++; + + uint32_t batch = total - sent; + if (batch > batch_max) batch = batch_max; + + cstring *payload = cstr_new_sz(9 + (size_t)batch * 36); + if (!payload) break; + + ser_varlen(payload, batch); + uint32_t bi; + for (bi = 0; bi < batch; bi++) { + uint32_t type = DOGECOIN_INV_TYPE_BLOCK; + ser_u32(payload, type); + ser_bytes(payload, + (const uint8_t *)vector_idx(cfstate->matched_block_hashes, sent + bi), 32); + } + + cstring *p2p_msg = dogecoin_p2p_message_new( + peer->nodegroup->chainparams->netmagic, + DOGECOIN_MSG_GETDATA, + (const uint8_t *)payload->str, payload->len); + dogecoin_node_send(peer, p2p_msg); + cstr_free(p2p_msg, true); + cstr_free(payload, true); + sent += batch; + } +} + +/* ------------------------------------------------------------------ */ +/* Flush contiguous complete batches to disk in height order. */ +/* ------------------------------------------------------------------ */ static dogecoin_bool spv_lookup_headersdb_height_by_hash(dogecoin_spv_client* client, const uint8_t hash[32], uint32_t* out_height) @@ -188,6 +447,7 @@ static dogecoin_bool spv_log_merkle_match(const uint8_t txid[32], uint32_t pos, static const unsigned int HEADERS_MAX_RESPONSE_TIME = 120; static const unsigned int MIN_TIME_DELTA_FOR_STATE_CHECK = 5; +static const unsigned int CF_RESPONSE_TIMEOUT = 30; static const unsigned int BLOCK_GAP_TO_DEDUCT_TO_START_SCAN_FROM = 5; static const unsigned int BLOCKS_DELTA_IN_S = 60; static const unsigned int COMPLETED_WHEN_NUM_NODES_AT_SAME_HEIGHT = 2; @@ -430,7 +690,9 @@ void dogecoin_net_spv_node_handshake_done(dogecoin_node *node); void dogecoin_node_connection_state_changed_cb(dogecoin_node *node) { if (node->nodegroup->should_connect_to_more_nodes_cb) { if (node->nodegroup->should_connect_to_more_nodes_cb(node)) { - dogecoin_spv_client_discover_peers((dogecoin_spv_client*)node->nodegroup->ctx, NULL); + dogecoin_spv_client *client = (dogecoin_spv_client*)node->nodegroup->ctx; + /* Use explicit peer IPs when provided; fall back to DNS seeds otherwise. */ + dogecoin_spv_client_discover_peers(client, client->peer_ips); dogecoin_node_group_connect_next_nodes(node->nodegroup); } } @@ -587,6 +849,28 @@ dogecoin_spv_client* dogecoin_spv_client_new(const dogecoin_chainparams *params, client->smpv_ctx = NULL; client->smpv_enabled = false; + // BIP157 compact filter sync (on by default; disable with --no_cfilters) + client->compact_filters_enabled = true; + client->cfilter_state = dogecoin_compact_filter_state_new(); + if (client->cfilter_state) { + client->cfilter_state->enabled = true; + } + dogecoin_mem_zero(client->cf_prev_filter_header, sizeof(uint256_t)); + client->cf_computed_height = 0; + client->cf_export_enabled = false; + + /* BIP157 persistent filter storage (opened in dogecoin_spv_client_load) */ + client->cfheaders_db = NULL; + client->cfilters_db = NULL; + client->cfheaders_path = NULL; + client->cfilters_path = NULL; + + client->peer_ips = NULL; + + client->aux_hash_db_ctx = NULL; + client->aux_hash_db = NULL; + client->cf_start_height = 0; + return client; } @@ -598,6 +882,19 @@ dogecoin_spv_client* dogecoin_spv_client_new(const dogecoin_chainparams *params, */ void dogecoin_spv_client_discover_peers(dogecoin_spv_client* client, const char *ips) { +#ifndef _WIN32 + // set stdin to non-blocking for quit command + int stdin_flags = fcntl(STDIN_FILENO, F_GETFL); + fcntl(STDIN_FILENO, F_SETFL, stdin_flags | O_NONBLOCK); +#endif + + /* Remember explicit peer IPs so reconnects reuse them instead of DNS seeds. */ + if (ips) { + if (client->peer_ips) dogecoin_free(client->peer_ips); + client->peer_ips = strdup(ips); + } + + dogecoin_node_group_add_peers_by_ip_or_seed(client->nodegroup, ips); } @@ -653,6 +950,40 @@ void dogecoin_spv_client_free(dogecoin_spv_client *client) client->merkle_match_active = false; client->merkle_match_blockindex = NULL; + if (client->cfilter_state) { + dogecoin_compact_filter_state_free(client->cfilter_state); + client->cfilter_state = NULL; + } + client->compact_filters_enabled = false; + + if (client->cfheaders_db) { + dogecoin_cfheaders_db_free(client->cfheaders_db); + client->cfheaders_db = NULL; + } + if (client->cfilters_db) { + dogecoin_cfilters_db_free(client->cfilters_db); + client->cfilters_db = NULL; + } + if (client->cfheaders_path) { + dogecoin_free(client->cfheaders_path); + client->cfheaders_path = NULL; + } + if (client->cfilters_path) { + dogecoin_free(client->cfilters_path); + client->cfilters_path = NULL; + } + + if (client->peer_ips) { + dogecoin_free(client->peer_ips); + client->peer_ips = NULL; + } + + if (client->aux_hash_db && client->aux_hash_db_ctx) { + client->aux_hash_db->free(client->aux_hash_db_ctx); + client->aux_hash_db_ctx = NULL; + client->aux_hash_db = NULL; + } + if (client->headers_db) { if (client->headers_db_ctx) @@ -722,8 +1053,29 @@ dogecoin_bool dogecoin_spv_client_load(dogecoin_spv_client *client, const char * if (!client->headers_db) return false; - return client->headers_db->load(client->headers_db_ctx, file_path, prompt); + if (!client->headers_db->load(client->headers_db_ctx, file_path, prompt)) + return false; + + /* Open BIP157 persistent filter databases when compact filter sync is enabled */ + if (client->compact_filters_enabled && client->cfilter_state) { + dogecoin_bool inmem = (file_path && strcmp(file_path, ":memory:") == 0); + + client->cfheaders_db = dogecoin_cfheaders_db_new(client->chainparams, inmem); + if (!dogecoin_cfheaders_db_load(client->cfheaders_db, client->cfheaders_path, client->cfilter_state)) { + fprintf(stderr, "spv: failed to open cfheaders.dat; continuing without persistence\n"); + dogecoin_cfheaders_db_free(client->cfheaders_db); + client->cfheaders_db = NULL; + } + + client->cfilters_db = dogecoin_cfilters_db_new(client->chainparams, inmem); + if (!dogecoin_cfilters_db_load(client->cfilters_db, client->cfilters_path)) { + fprintf(stderr, "spv: failed to open cfilters.dat; continuing without persistence\n"); + dogecoin_cfilters_db_free(client->cfilters_db); + client->cfilters_db = NULL; + } + } + return true; } /** @@ -778,6 +1130,89 @@ void dogecoin_net_spv_periodic_statecheck(dogecoin_node *node, uint64_t *now) if ((client->stateflags & SPV_FULLBLOCK_SYNC_FLAG) == SPV_FULLBLOCK_SYNC_FLAG) { dogecoin_net_spv_request_headers(client); + + /* Recovery: if our chaintip is far below the global-best peer and no + * BLOCKSYNC node has a block request in-flight, we're deadlocked — + * the inv handler won't request blocks because we're too far behind, + * and dogecoin_net_spv_request_headers early-returns because BLOCKSYNC + * nodes exist. Force all nodes back to header sync. */ + dogecoin_blockindex *sc_tip = client->headers_db->getchaintip(client->headers_db_ctx); + uint32_t sc_best = 0; + size_t sc_i; + for (sc_i = 0; sc_i < client->nodegroup->nodes->len; sc_i++) { + dogecoin_node *sc_n = vector_idx(client->nodegroup->nodes, sc_i); + if ((sc_n->state & NODE_CONNECTED) && sc_n->bestknownheight > sc_best) + sc_best = sc_n->bestknownheight; + } + if (sc_tip && sc_best > (uint32_t)sc_tip->height + 1440) { + dogecoin_bool any_pending = false; + for (sc_i = 0; sc_i < client->nodegroup->nodes->len; sc_i++) { + dogecoin_node *sc_n = vector_idx(client->nodegroup->nodes, sc_i); + if ((sc_n->state & NODE_BLOCKSYNC) && (sc_n->state & NODE_CONNECTED) && sc_n->time_last_request > 0) + any_pending = true; + } + if (!any_pending) { + for (sc_i = 0; sc_i < client->nodegroup->nodes->len; sc_i++) { + dogecoin_node *sc_n = vector_idx(client->nodegroup->nodes, sc_i); + if (sc_n->state & NODE_BLOCKSYNC) sc_n->state &= ~NODE_BLOCKSYNC; + } + client->stateflags &= ~SPV_FULLBLOCK_SYNC_FLAG; + client->stateflags |= SPV_HEADER_SYNC_FLAG; + client->nodegroup->log_write_cb( + "[spv] stale BLOCKSYNC (height=%d global_best=%d) — forcing header sync\n", + sc_tip->height, sc_best); + dogecoin_net_spv_request_headers(client); + } + } + } + + /* BIP157: recover from stalled awaiting_response when a peer disconnected + * mid-download without clearing the flag. */ + if (client->compact_filters_enabled && client->cfilter_state) { + dogecoin_compact_filter_state *cfstate = client->cfilter_state; + dogecoin_bool cf_incomplete = + ((uint32_t)pindex->height > 0) && + (cfstate->cfheaders_tip_height < (uint32_t)pindex->height || + cfstate->filters_tip_height < cfstate->cfheaders_tip_height); + + if (cf_incomplete && cfstate->awaiting_response) { + /* Fast-path: if no CF-capable peer is connected right now, the peer + * we sent the request to has disconnected. Clear awaiting_response + * immediately so the postcmd trigger can fire as soon as any CF peer + * reconnects — no need to wait the full CF_RESPONSE_TIMEOUT. */ + dogecoin_bool any_cf_connected = false; + for (unsigned int ni = 0; ni < client->nodegroup->nodes->len; ni++) { + dogecoin_node *n = (dogecoin_node *)vector_idx(client->nodegroup->nodes, ni); + if ((n->state & NODE_CONNECTED) && + (n->services & DOGECOIN_NODE_COMPACT_FILTERS)) { + any_cf_connected = true; + break; + } + } + if (!any_cf_connected) { + client->nodegroup->log_write_cb( + "[bip157] CF peer gone — clearing awaiting_response to retry on reconnect\n"); + cfstate->awaiting_response = false; + } else if (cfstate->last_request_time > 0 && + *now > cfstate->last_request_time + CF_RESPONSE_TIMEOUT) { + /* Full timeout: CF peer is connected but not responding. */ + client->nodegroup->log_write_cb( + "[bip157] CF response timeout after %us — retrying\n", + (unsigned int)(*now - cfstate->last_request_time)); + cfstate->awaiting_response = false; + dogecoin_node *cf_node = NULL; + for (unsigned int ni = 0; ni < client->nodegroup->nodes->len; ni++) { + dogecoin_node *n = (dogecoin_node *)vector_idx(client->nodegroup->nodes, ni); + if ((n->state & NODE_CONNECTED) && + (n->services & DOGECOIN_NODE_COMPACT_FILTERS)) { + cf_node = n; + break; + } + } + if (cf_node) + dogecoin_spv_request_cfcheckpt(client, cf_node); + } + } } client->last_statecheck_time = *now; @@ -891,6 +1326,27 @@ void dogecoin_net_spv_node_request_headers_or_blocks(dogecoin_node *node, dogeco * * @return dogecoin_bool */ +/* True while compact-filter sync can still make progress: a peer advertising + * NODE_COMPACT_FILTERS is connected, or matched blocks from a rescan are still + * being fetched. Sync completion is deferred to the filter path only in that + * case. When filters are enabled (the default) but no peer serves them, nothing + * would ever advance the CF state machine, and gating completion purely on + * compact_filters_enabled left the client waiting forever -- `spvnode scan` + * never printed "Sync completed" and never exited. */ +static dogecoin_bool spv_cf_sync_pending(dogecoin_spv_client *client) +{ + if (!client->compact_filters_enabled || !client->cfilter_state) return false; + if (client->cfilter_state->cf_block_fetch_active) return true; + if (!client->nodegroup || !client->nodegroup->nodes) return false; + unsigned int i; + for (i = 0; i < client->nodegroup->nodes->len; i++) { + dogecoin_node *n = (dogecoin_node *)vector_idx(client->nodegroup->nodes, i); + if (n && (n->state & NODE_CONNECTED) && (n->services & DOGECOIN_NODE_COMPACT_FILTERS)) + return true; + } + return false; +} + dogecoin_bool dogecoin_net_spv_request_headers(dogecoin_spv_client *client) { size_t i; @@ -961,7 +1417,8 @@ dogecoin_bool dogecoin_net_spv_request_headers(dogecoin_spv_client *client) } } - if (nodes_at_same_height >= COMPLETED_WHEN_NUM_NODES_AT_SAME_HEIGHT && !client->called_sync_completed && client->sync_completed) + if (nodes_at_same_height >= COMPLETED_WHEN_NUM_NODES_AT_SAME_HEIGHT && !client->called_sync_completed && client->sync_completed + && !spv_cf_sync_pending(client)) { client->sync_completed(client); client->called_sync_completed = true; @@ -992,7 +1449,9 @@ void dogecoin_net_spv_node_handshake_done(dogecoin_node *node) } } - dogecoin_net_spv_request_headers((dogecoin_spv_client*)node->nodegroup->ctx); + dogecoin_spv_client *hsclient = (dogecoin_spv_client*)node->nodegroup->ctx; + dogecoin_net_spv_request_headers(hsclient); + } /** @@ -1662,6 +2121,87 @@ void dogecoin_net_spv_post_cmd(dogecoin_node *node, dogecoin_p2p_msg_hdr *hdr, s } else { + /* BIP157 matched-block path: block already in headers DB; process its txns */ + dogecoin_compact_filter_state *cfstate_mb = + (client->compact_filters_enabled && client->cfilter_state) + ? client->cfilter_state : NULL; + dogecoin_bool is_cf_match = false; + unsigned int cf_match_idx = 0; + if (cfstate_mb && cfstate_mb->cf_block_fetch_active && pindex) { + unsigned int mbi; + for (mbi = 0; mbi < cfstate_mb->matched_block_hashes->len; mbi++) { + if (memcmp(vector_idx(cfstate_mb->matched_block_hashes, mbi), + pindex->hash, 32) == 0) { + is_cf_match = true; + cf_match_idx = mbi; + break; + } + } + } + + if (is_cf_match) { + /* Get real in-memory pindex with correct height from B-tree. + * For historical blocks pruned from the tree, recover the height + * from the stored matched_block_heights vector instead. */ + dogecoin_headers_db *db_mb = (dogecoin_headers_db *)client->headers_db_ctx; + dogecoin_blockindex *real_pindex = dogecoin_headersdb_find(db_mb, pindex->hash); + dogecoin_bool pindex_is_heap = false; /* track if we need to free pindex */ + if (real_pindex) { + dogecoin_free(pindex); /* dummy from connect_hdr; tree owns real_pindex */ + pindex = real_pindex; + } else { + /* Block pruned from in-memory tree — recover height from stored value */ + if (cfstate_mb->matched_block_heights && + cf_match_idx < cfstate_mb->matched_block_heights->len) { + uint32_t *h = (uint32_t *)vector_idx(cfstate_mb->matched_block_heights, cf_match_idx); + if (h) pindex->height = *h; + } + pindex_is_heap = true; /* we own this allocation */ + } + + uint32_t amount_of_txs_cf = 0; + if (!pindex || !deser_varlen(&amount_of_txs_cf, buf)) { + if (pindex_is_heap) dogecoin_free(pindex); + return; + } + + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] processing %u txs from matched block height=%u [%us elapsed]\n", + amount_of_txs_cf, (unsigned)pindex->height, spv_elapsed(client)); + + size_t cf_consumed = 0; + unsigned int cfi; + for (cfi = 0; cfi < amount_of_txs_cf; cfi++) { + dogecoin_tx *tx = dogecoin_tx_new(); + if (!dogecoin_tx_deserialize(buf->p, buf->len, tx, &cf_consumed)) { + dogecoin_tx_free(tx); + break; + } + deser_skip(buf, cf_consumed); + if (client->sync_transaction) + client->sync_transaction(client->sync_transaction_ctx, tx, cfi, pindex); + dogecoin_tx_free(tx); + } + + cfstate_mb->matched_blocks_fetched++; + if (cfstate_mb->matched_blocks_fetched >= + (uint32_t)cfstate_mb->matched_block_hashes->len) { + cfstate_mb->cf_block_fetch_active = false; + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] all %u matched blocks processed [%us elapsed]\n", + cfstate_mb->matched_blocks_fetched, spv_elapsed(client)); + if (!client->called_sync_completed && client->sync_completed) { + if (client->smpv_enabled) dogecoin_net_spv_request_mempool(client); + client->sync_completed(client); + client->called_sync_completed = true; + } + } + if (pindex_is_heap) dogecoin_free(pindex); + return; + } + client->nodegroup->log_write_cb("Got invalid block (not in sequence) from node %d\n", node->nodeid); node->state &= ~NODE_BLOCKSYNC; node->nodegroup->node_connection_state_changed_cb(node); @@ -1674,7 +2214,8 @@ void dogecoin_net_spv_post_cmd(dogecoin_node *node, dogecoin_p2p_msg_hdr *hdr, s // we check if the height is greater than or equal to the node's bestknown height minus 5 minutes if (client->headers_db->getchaintip(client->headers_db_ctx)->height >= node->bestknownheight - 5) { // last requested block reached, consider stop syncing - if (!client->called_sync_completed && client->sync_completed) { + if (!client->called_sync_completed && client->sync_completed + && !spv_cf_sync_pending(client)) { /* BIP157: defer only while filter sync can progress */ // enable mempool requests if smpv is enabled if (client->smpv_enabled) dogecoin_net_spv_request_mempool(client); client->sync_completed(client); @@ -1692,11 +2233,23 @@ void dogecoin_net_spv_post_cmd(dogecoin_node *node, dogecoin_p2p_msg_hdr *hdr, s uint32_t amount_of_headers; if (!deser_varlen(&amount_of_headers, buf)) return; uint64_t now = time(NULL); - client->nodegroup->log_write_cb("Got %d headers (took %d s) from node %d\n", amount_of_headers, now - client->last_headersrequest_time, node->nodeid); + client->nodegroup->log_write_cb("Got %d headers (took %d s) from node %d [%us elapsed]\n", amount_of_headers, now - client->last_headersrequest_time, node->nodeid, spv_elapsed(client)); // flag off the request stall check client->last_headersrequest_time = 0; + /* Use global-best height so we don't switch to BLOCKSYNC prematurely when + * the peer we're syncing from has a low tip but other peers are further ahead. */ + uint32_t global_best_height = node->bestknownheight; + { + unsigned int gni; + for (gni = 0; gni < (unsigned int)client->nodegroup->nodes->len; gni++) { + dogecoin_node *gn = (dogecoin_node*)vector_idx(client->nodegroup->nodes, gni); + if ((gn->state & NODE_CONNECTED) && gn->bestknownheight > global_best_height) + global_best_height = gn->bestknownheight; + } + } + unsigned int connected_headers = 0; unsigned int i; for (i = 0; i < amount_of_headers; i++) @@ -1721,7 +2274,7 @@ void dogecoin_net_spv_post_cmd(dogecoin_node *node, dogecoin_p2p_msg_hdr *hdr, s } else { if (client->header_connected) { client->header_connected(client); } connected_headers++; - if (pindex->height >= node->bestknownheight - 5) { + if (pindex->height >= global_best_height - 5) { client->stateflags &= ~SPV_HEADER_SYNC_FLAG; client->stateflags |= SPV_FULLBLOCK_SYNC_FLAG; node->state &= ~NODE_HEADERSYNC; @@ -1735,7 +2288,7 @@ void dogecoin_net_spv_post_cmd(dogecoin_node *node, dogecoin_p2p_msg_hdr *hdr, s dogecoin_blockindex *chaintip = client->headers_db->getchaintip(client->headers_db_ctx); client->nodegroup->log_write_cb("Connected %d headers\n", connected_headers); - client->nodegroup->log_write_cb("Chaintip at height %d\n", chaintip->height); + client->nodegroup->log_write_cb("Chaintip at height %d [%us elapsed]\n", chaintip->height, spv_elapsed(client)); if (client->header_message_processed && client->header_message_processed(client, node, chaintip) == false) return; @@ -1746,6 +2299,54 @@ void dogecoin_net_spv_post_cmd(dogecoin_node *node, dogecoin_p2p_msg_hdr *hdr, s client->nodegroup->log_write_cb("chain size: %d, last time %s", chaintip->height, ctime(&lasttime)); dogecoin_net_spv_node_request_headers_or_blocks(node, false); } + else if (client->compact_filters_enabled && client->cfilter_state && + !client->cfilter_state->awaiting_response && + /* CF sync not yet complete: cfheaders or cfilters behind chain tip */ + (client->cfilter_state->cfheaders_tip_height < (uint32_t)chaintip->height || + client->cfilter_state->filters_tip_height < client->cfilter_state->cfheaders_tip_height) && + chaintip->height > 0 && + chaintip->height >= node->bestknownheight - 5) { + /* Headers are at tip — find a BIP157-capable peer (NODE_COMPACT_FILTERS) */ + dogecoin_node *cf_node = NULL; + for (unsigned int ni = 0; ni < (unsigned int)client->nodegroup->nodes->len; ni++) { + dogecoin_node *n = (dogecoin_node *)vector_idx(client->nodegroup->nodes, ni); + if ((n->state & NODE_CONNECTED) && (n->services & DOGECOIN_NODE_COMPACT_FILTERS)) { + cf_node = n; + break; + } + } + if (cf_node) { + client->nodegroup->log_write_cb("[bip157] headers synced to tip (height=%d), sending getcfcheckpt to node %d (compact-filters peer)\n", + chaintip->height, cf_node->nodeid); + dogecoin_spv_request_cfcheckpt(client, cf_node); + } else { + client->nodegroup->log_write_cb("[bip157] headers at tip (height=%d) but no NODE_COMPACT_FILTERS peer connected\n", + chaintip->height); + /* Completion is not handled here on purpose. Headers reaching the tip + * is not the end of the sync -- the last few blocks still arrive over + * BLOCKSYNC afterwards -- so finishing at this point reports a height + * short of the real tip. spv_cf_sync_pending() lets the normal + * headers/blocks completion run instead, at the right moment. */ + } + } + + /* Blocks matched by the startup rescan of already-cached cfilters have to be + * requested independently of the cfheaders/cfilters network sync above. That + * sync only covers heights not already on disk, so when the cache already spans + * the chain the cfilter download never runs, its completion hook never + * fires, and the matched blocks would never be fetched -- the scan reported + * matches but the wallet stayed empty. Trigger here once headers are at + * tip, whichever CF + * branch above was taken; cf_block_fetch_active keeps it to one dispatch. */ + if (client->compact_filters_enabled && client->cfilter_state && + client->cfilter_state->rescan_done && + client->cfilter_state->matched_block_hashes && + client->cfilter_state->matched_block_hashes->len > 0 && + !client->cfilter_state->cf_block_fetch_active && + chaintip->height > 0 && + chaintip->height >= node->bestknownheight - 5) { + spv_cf_request_matched_blocks(client); + } } if (strcmp(hdr->command, DOGECOIN_MSG_MERKLEBLOCK) == 0) { @@ -1998,7 +2599,8 @@ void dogecoin_net_spv_post_cmd(dogecoin_node *node, dogecoin_p2p_msg_hdr *hdr, s if (dogecoin_hash_equal((uint8_t *)node->last_requested_inv, (uint8_t *)pindex->hash)) { if (client->headers_db->getchaintip(client->headers_db_ctx)->height >= node->bestknownheight - 5) { - if (!client->called_sync_completed && client->sync_completed) { + if (!client->called_sync_completed && client->sync_completed + && !spv_cf_sync_pending(client)) { /* BIP157: defer only while filter sync can progress */ if (client->smpv_enabled) dogecoin_net_spv_request_mempool(client); client->sync_completed(client); client->called_sync_completed = true; @@ -2131,6 +2733,511 @@ void dogecoin_net_spv_post_cmd(dogecoin_node *node, dogecoin_p2p_msg_hdr *hdr, s } } + /* ================================================================ */ + /* BIP157: cfilter response handler */ + /* ================================================================ */ + if (strcmp(hdr->command, DOGECOIN_MSG_CFILTER) == 0) + { + if (!client->compact_filters_enabled || !client->cfilter_state) { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] compact filters not enabled, ignoring cfilter\n"); + } else { + dogecoin_cfilter_msg cfilter_msg; + dogecoin_cfilter_msg_init(&cfilter_msg); + + struct const_buffer deser_buf = { buf->p, buf->len }; + if (dogecoin_p2p_msg_cfilter_deser(&cfilter_msg, &deser_buf)) { + dogecoin_compact_filter_state *cfstate = client->cfilter_state; + + if (cfilter_msg.filter_data) { + /* Determine the height this cfilter corresponds to. */ + uint32_t filter_height; + + if (cfstate->filters_tip_height >= cfstate->cfheaders_tip_height) + goto cfilter_handler_done; + filter_height = cfstate->filters_tip_height + 1; + + /* + * filter_headers[i] = filter header for block at height (cfheaders_base_height + i). + * For block at height h: + * vec_idx = h - cfheaders_base_height + * expected_fh = filter_headers[vec_idx] + * prev_fh = filter_headers[vec_idx - 1] (or genesis_filter_header when vec_idx == 0) + */ + uint256_t prev_fh; + uint32_t base = cfstate->cfheaders_base_height; + dogecoin_bool have_fh = cfstate->filter_headers_flat + ? (cfstate->filter_headers_flat_len > 0) + : (cfstate->filter_headers->len > 0); + if (filter_height <= base || !have_fh) { + memcpy(prev_fh, cfstate->genesis_filter_header, 32); + } else { + uint32_t prev_idx = filter_height - base - 1; + if (cfstate->filter_headers_flat) { + if (prev_idx < cfstate->filter_headers_flat_len) + memcpy(prev_fh, cfstate->filter_headers_flat + prev_idx * 32, 32); + else + memcpy(prev_fh, cfstate->cfheaders_tip_hash, 32); + } else { + if (prev_idx < cfstate->filter_headers->len) + memcpy(prev_fh, vector_idx(cfstate->filter_headers, prev_idx), 32); + else + memcpy(prev_fh, cfstate->cfheaders_tip_hash, 32); + } + } + + uint32_t vec_idx = (filter_height >= base) ? filter_height - base : UINT32_MAX; + uint256_t flat_fh; + uint256_t *expected_fh_ptr = NULL; + if (cfstate->filter_headers_flat) { + if (vec_idx < cfstate->filter_headers_flat_len) { + memcpy(flat_fh, cfstate->filter_headers_flat + vec_idx * 32, 32); + expected_fh_ptr = &flat_fh; + } + } else if (vec_idx < cfstate->filter_headers->len) { + expected_fh_ptr = (uint256_t *)vector_idx(cfstate->filter_headers, vec_idx); + } + if (expected_fh_ptr) { + uint256_t *expected_fh = expected_fh_ptr; + + if (dogecoin_compact_filter_validate(cfilter_msg.filter_data, prev_fh, *expected_fh)) { + { + /* Sequential mode: write immediately */ + cfstate->filters_tip_height = filter_height; + + if (client->cfilters_db) + dogecoin_cfilters_db_write(client->cfilters_db, + filter_height, + cfilter_msg.block_hash, + cfilter_msg.filter_data); + + /* Match watched scripts */ + if (cfstate->watched_scripts && cfstate->watched_scripts->len > 0) { + gcs_filter *gcs = gcs_filter_new(); + struct const_buffer fbuf = { cfilter_msg.filter_data->str, + cfilter_msg.filter_data->len }; + if (gcs_filter_deserialize(gcs, cfilter_msg.filter_type, + cfilter_msg.block_hash, &fbuf)) { + if (gcs_filter_match_any(gcs, cfstate->watched_scripts)) { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] MATCH at height %u\n", filter_height); + uint256_t *matched_hash = dogecoin_calloc(1, sizeof(uint256_t)); + memcpy(matched_hash, cfilter_msg.block_hash, sizeof(uint256_t)); + vector_add(cfstate->matched_block_hashes, matched_hash); + uint32_t *matched_height = dogecoin_calloc(1, sizeof(uint32_t)); + *matched_height = filter_height; + vector_add(cfstate->matched_block_heights, matched_height); + } + } + gcs_filter_free(gcs); + } + + /* Request next batch when current is consumed */ + dogecoin_blockindex *cf_tip = + client->headers_db->getchaintip(client->headers_db_ctx); + if (cfstate->filters_tip_height >= cfstate->cfheaders_tip_height) { + if (client->nodegroup && client->nodegroup->log_write_cb) { + uint32_t scan_start = cfstate->cf_scan_start_height > 0 ? cfstate->cf_scan_start_height : 1; + client->nodegroup->log_write_cb( + "[bip157] all filters processed: scanned heights %u..%u, %u matched blocks [%us elapsed]\n", + scan_start, cfstate->filters_tip_height, + (unsigned int)cfstate->matched_block_hashes->len, + spv_elapsed(client)); + if (scan_start > 1) + client->nodegroup->log_write_cb( + "[bip157] WARNING: scan started at height %u (checkpoint), not genesis — " + "transactions before height %u are not covered; use --filter_hash_db for full history\n", + scan_start, scan_start); + } + cfstate->awaiting_response = false; + client->stateflags &= ~SPV_CFILTER_SYNC_FLAG; + if (cfstate->matched_block_hashes->len > 0) { + spv_cf_request_matched_blocks(client); + } else if (!client->called_sync_completed && client->sync_completed) { + if (client->smpv_enabled) dogecoin_net_spv_request_mempool(client); + client->sync_completed(client); + client->called_sync_completed = true; + } + } else if (cfstate->filters_tip_height >= cfstate->cfilter_batch_end) { + cfstate->awaiting_response = false; + dogecoin_spv_request_cfilters(client, node, + cfstate->filters_tip_height + 1, cf_tip->hash); + } + } + } else { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] filter at height %u FAILED validation\n", filter_height); + dogecoin_node_misbehave(node); + } + } + } + cfilter_handler_done:; + } else { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] failed to deserialize cfilter from node %d\n", node->nodeid); + } + dogecoin_cfilter_msg_free(&cfilter_msg); + } + } + + /* ================================================================ */ + /* BIP157: cfheaders response handler */ + /* ================================================================ */ + if (strcmp(hdr->command, DOGECOIN_MSG_CFHEADERS) == 0) + { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] received cfheaders from node %d\n", node->nodeid); + + if (!client->compact_filters_enabled || !client->cfilter_state) { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] compact filters not enabled, ignoring cfheaders\n"); + } else { + dogecoin_cfheaders_msg cfh_msg; + dogecoin_cfheaders_msg_init(&cfh_msg); + + struct const_buffer deser_buf = { buf->p, buf->len }; + if (dogecoin_p2p_msg_cfheaders_deser(&cfh_msg, &deser_buf)) { + dogecoin_compact_filter_state *cfstate = client->cfilter_state; + + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] cfheaders: type=%u n_hashes=%u\n", + cfh_msg.filter_type, (unsigned int)cfh_msg.filter_hashes->len); + + uint256_t prev_header; + memcpy(prev_header, cfh_msg.prev_filter_header, 32); + uint32_t height = cfstate->cfheaders_tip_height; + + /* On the first cfheaders batch, prev_filter_header is the filter header + * immediately before our starting height — store it for cfilter validation + * and persist it so restarts don't need to re-download cfheaders. */ + if (cfstate->filter_headers->len == 0) { + memcpy(cfstate->genesis_filter_header, cfh_msg.prev_filter_header, 32); + if (client->cfheaders_db) + dogecoin_cfheaders_db_write_genesis(client->cfheaders_db, + cfh_msg.prev_filter_header); + } + + unsigned int i; + dogecoin_bool valid = true; + + for (i = 0; i < cfh_msg.filter_hashes->len; i++) { + uint256_t *filter_hash = (uint256_t *)vector_idx(cfh_msg.filter_hashes, i); + height++; + + /* filter_header = dbl_sha256(filter_hash || prev_header) */ + uint8_t combined[64]; + memcpy(combined, filter_hash, 32); + memcpy(combined + 32, prev_header, 32); + + uint256_t *new_header = dogecoin_calloc(1, sizeof(uint256_t)); + dogecoin_hash(combined, 64, *new_header); + + /* Validate against checkpoint if at a boundary. + * Dogecoin Core checkpoints are at heights 1000, 2000, ... + * cp_idx = height / CFCHECKPT_INTERVAL - 1: 1000→0, 2000→1, etc. */ + if (cfstate->checkpoints && cfstate->checkpoints->len > 0 && + height > 0 && (height % CFCHECKPT_INTERVAL) == 0) { + uint32_t cp_idx = (height / CFCHECKPT_INTERVAL) - 1; + if (cp_idx < cfstate->checkpoints->len) { + uint256_t *checkpoint = (uint256_t *)vector_idx(cfstate->checkpoints, cp_idx); + if (memcmp(*new_header, checkpoint, 32) != 0) { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] cfheader at height %u does NOT match checkpoint!\n", height); + valid = false; + dogecoin_free(new_header); + break; + } + } + } + + vector_add(cfstate->filter_headers, new_header); + memcpy(prev_header, *new_header, 32); + + if (client->cf_export_enabled && + height > 0 && (height % CF_EXPORT_INTERVAL) == 0) { + char *hex = utils_uint8_to_hex(*new_header, 32); + printf("[cfcheckpt-export] { %u, \"%s\" },\n", height, hex); + fflush(stdout); + } + } + + if (valid) { + cfstate->cfheaders_tip_height = height; + memcpy(cfstate->cfheaders_tip_hash, prev_header, 32); + + if (client->cfheaders_db) + dogecoin_cfheaders_db_flush(client->cfheaders_db); + + dogecoin_blockindex *tip = client->headers_db->getchaintip(client->headers_db_ctx); + cfstate->awaiting_response = false; + if (height < (uint32_t)tip->height) { + dogecoin_spv_request_cfheaders(client, node, height + 1, tip->hash); + } else { + dogecoin_headers_db *hdb_cf = (dogecoin_headers_db *)client->headers_db_ctx; + uint32_t cf_scan_start = 1; + if (client->cf_start_height > 0) { + cf_scan_start = client->cf_start_height; + } else if (hdb_cf && hdb_cf->chainbottom && hdb_cf->chainbottom->height > 0) { + cf_scan_start = hdb_cf->chainbottom->height; + } + + /* Clamp to cfheaders_base_height: filters below that were scanned at startup. */ + if (cfstate->cfheaders_base_height > 0 && + cf_scan_start < cfstate->cfheaders_base_height) + cf_scan_start = cfstate->cfheaders_base_height; + + /* If startup rescan already covered the cached cfilter range, + * only download filters beyond that tip — avoids re-scanning + * heights that are already in matched_block_hashes. */ + if (cfstate->rescan_done && client->cfilters_db && + client->cfilters_db->tip_height > 0 && + cf_scan_start <= client->cfilters_db->tip_height) + cf_scan_start = client->cfilters_db->tip_height + 1; + + /* Rescan any cached filters stored before these scripts were registered. */ + spv_rescan_cached_cfilters(client, cf_scan_start); + + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] all cfheaders received (tip=%u), starting cfilter scan from %u [%us elapsed]\n", + cfstate->cfheaders_tip_height, cf_scan_start, + spv_elapsed(client)); + + /* Record where the scan actually began. The completion log + * falls back to 1 when this is unset, which reported + * "scanned heights 1..tip" for a run that only covered the + * checkpoint tail -- overstating coverage in exactly the way + * that hides a gap. */ + cfstate->cf_scan_start_height = cf_scan_start; + cfstate->filters_tip_height = (cf_scan_start > 1) ? cf_scan_start - 1 : 0; + dogecoin_spv_request_cfilters(client, node, cf_scan_start, tip->hash); + } + } else { + dogecoin_node_misbehave(node); + cfstate->awaiting_response = false; + } + } else { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] failed to deserialize cfheaders\n"); + } + dogecoin_cfheaders_msg_free(&cfh_msg); + } + } + + /* ================================================================ */ + /* BIP157: cfcheckpt response handler */ + /* ================================================================ */ + if (strcmp(hdr->command, DOGECOIN_MSG_CFCHECKPT) == 0) + { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] received cfcheckpt from node %d\n", node->nodeid); + + if (!client->compact_filters_enabled || !client->cfilter_state) { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] compact filters not enabled, ignoring cfcheckpt\n"); + } else { + dogecoin_cfcheckpt_msg cfcp_msg; + dogecoin_cfcheckpt_msg_init(&cfcp_msg); + + struct const_buffer deser_buf = { buf->p, buf->len }; + if (dogecoin_p2p_msg_cfcheckpt_deser(&cfcp_msg, &deser_buf)) { + dogecoin_compact_filter_state *cfstate = client->cfilter_state; + + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] cfcheckpt: type=%u n_checkpoints=%u\n", + cfcp_msg.filter_type, (unsigned int)cfcp_msg.filter_headers->len); + + if (cfstate->checkpoints) { + vector_free(cfstate->checkpoints, true); + } + cfstate->checkpoints = vector_new(cfcp_msg.filter_headers->len, dogecoin_free); + + unsigned int i; + for (i = 0; i < cfcp_msg.filter_headers->len; i++) { + uint256_t *cp = dogecoin_calloc(1, sizeof(uint256_t)); + memcpy(cp, vector_idx(cfcp_msg.filter_headers, i), 32); + vector_add(cfstate->checkpoints, cp); + } + + if (!dogecoin_cf_validate_checkpoints(client->chainparams, cfstate->checkpoints)) { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] cfcheckpt FAILED hardcoded validation — misbehaving node %d\n", node->nodeid); + dogecoin_node_misbehave(node); + dogecoin_cfcheckpt_msg_free(&cfcp_msg); + return; + } + + /* Export checkpoint filter headers directly from cfcheckpt response. + * Checkpoints are at heights 999, 1999, 2999 ... (cp_idx * 1000 + 999). */ + /* Export filter headers directly from cfcheckpt response. + * Dogecoin Core checkpoints are at heights 1000, 2000, ... + * peer_checkpoints[i] = filter header at height (i+1)*CFCHECKPT_INTERVAL. */ + if (client->cf_export_enabled) { + printf("[cfcheckpt-export] /* Dogecoin Core cfcheckpt: %u entries */\n", + (unsigned int)cfcp_msg.filter_headers->len); + for (unsigned int ci = 0; ci < (unsigned int)cfcp_msg.filter_headers->len; ci++) { + uint32_t cp_height = (ci + 1) * CFCHECKPT_INTERVAL; + uint256_t *fh = (uint256_t *)vector_idx(cfcp_msg.filter_headers, ci); + /* P2P bytes are LE; chainparams.c uses big-endian display (same as RPC). + * Reverse the 32 bytes before hex-encoding. */ + uint8_t reversed[32]; + for (int ri = 0; ri < 32; ri++) reversed[ri] = (*fh)[31 - ri]; + char *hex = utils_uint8_to_hex(reversed, 32); + printf("[cfcheckpt-export] { %u, \"%s\" },\n", cp_height, hex); + fflush(stdout); + } + printf("[cfcheckpt-export] /* end */\n"); + fflush(stdout); + } + + dogecoin_blockindex *tip = client->headers_db->getchaintip(client->headers_db_ctx); + + /* Determine where cfheaders download starts. + * cf_start_height overrides everything (set via --cf-from-genesis or API). + * Otherwise: start at chainbottom (checkpoint-based sync) unless an aux + * hash-lookup DB is available, in which case we can go back to genesis. */ + uint32_t cfh_start; + if (client->cf_start_height > 0) { + cfh_start = client->cf_start_height; + } else if (client->aux_hash_db && client->aux_hash_db_ctx) { + /* aux DB covers early heights — download filters from genesis. */ + cfh_start = 1; + } else { + dogecoin_headers_db *hdb = (dogecoin_headers_db *)client->headers_db_ctx; + cfh_start = (hdb && hdb->chainbottom && hdb->chainbottom->height > 0) + ? hdb->chainbottom->height : 1; + } + + /* Use cfheaders already loaded from disk if they are valid and cover + * the needed range. The v2 DB stores genesis_filter_header so we can + * validate cfilters without re-downloading all cfheaders. */ + uint8_t gfh_zeros[32]; + memset(gfh_zeros, 0, 32); + dogecoin_bool genesis_valid = + (memcmp(cfstate->genesis_filter_header, gfh_zeros, 32) != 0); + /* base_height <= cfh_start matters: the loaded range has to start at or + * below where we want filters from, because the resume path can only + * append forward and cannot fill a gap *below* the loaded base. + * + * A gap *above* the loaded tip is not a reason to discard anything -- + * that is precisely what resuming is for. Requiring + * cfheaders_tip_height >= cfh_start - 1 here meant that whenever the + * on-disk cfheaders stopped short of cfh_start, the whole cache was + * declared unusable and the fresh-start branch below wiped it, along + * with genesis_filter_header -- after which every subsequent cfilter + * failed validation. That is the normal case with -p/--checkpoint, + * where cfh_start comes from chainbottom near the chain tip while the + * cfheaders file legitimately ends wherever the last sync stopped: + * headers 1..6269574 on disk against a cfh_start of 6311582 threw away + * 6.27M valid headers to re-download a 42k-block gap. */ + dogecoin_bool have_loaded = + (cfstate->filter_headers->len > 0 && + cfstate->cfheaders_base_height > 0 && + cfstate->cfheaders_base_height <= cfh_start); + + if (have_loaded && genesis_valid) { + uint32_t cfh_resume = cfstate->cfheaders_tip_height + 1; + if (cfh_resume > (uint32_t)tip->height) { + /* cfheaders already at chain tip: skip directly to cfilters */ + dogecoin_headers_db *hdb_cf = (dogecoin_headers_db *)client->headers_db_ctx; + uint32_t cf_scan_start = 1; + if (client->cf_start_height > 0) { + cf_scan_start = client->cf_start_height; + } else if (hdb_cf && hdb_cf->chainbottom && hdb_cf->chainbottom->height > 0) { + cf_scan_start = hdb_cf->chainbottom->height; + } + /* Clamp to cfheaders_base_height: filters below that were scanned at startup. */ + if (cfstate->cfheaders_base_height > 0 && + cf_scan_start < cfstate->cfheaders_base_height) + cf_scan_start = cfstate->cfheaders_base_height; + /* If startup rescan already covered the cached cfilter range, + * only download filters beyond that tip. */ + if (cfstate->rescan_done && client->cfilters_db && + client->cfilters_db->tip_height > 0 && + cf_scan_start <= client->cfilters_db->tip_height) + cf_scan_start = client->cfilters_db->tip_height + 1; + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] cfheaders at tip (base=%u tip=%u), starting cfilter scan from %u [%us elapsed]\n", + cfstate->cfheaders_base_height, cfstate->cfheaders_tip_height, + cf_scan_start, + spv_elapsed(client)); + cfstate->cf_scan_start_height = cf_scan_start; + cfstate->awaiting_response = false; + cfstate->filters_tip_height = (cf_scan_start > 1) ? cf_scan_start - 1 : 0; + dogecoin_spv_request_cfilters(client, node, cf_scan_start, tip->hash); + } else { + /* Resume cfheaders download from where the DB left off */ + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] resuming cfheaders from %u (base=%u disk_tip=%u) [%us elapsed]\n", + cfh_resume, cfstate->cfheaders_base_height, + cfstate->cfheaders_tip_height, spv_elapsed(client)); + cfstate->awaiting_response = false; + dogecoin_spv_request_cfheaders(client, node, cfh_resume, tip->hash); + } + } else { + /* Fresh start: clear any stale loaded data and re-download */ + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] cfheaders fresh start at height %u [%us elapsed]\n", + cfh_start, spv_elapsed(client)); + if (cfstate->filter_headers->len > 0) { + vector_free(cfstate->filter_headers, true); + cfstate->filter_headers = vector_new(4096, dogecoin_free); + } + if (cfstate->filter_headers_flat) { + dogecoin_free(cfstate->filter_headers_flat); + cfstate->filter_headers_flat = NULL; + cfstate->filter_headers_flat_len = 0; + } + dogecoin_mem_zero(cfstate->cfheaders_tip_hash, sizeof(uint256_t)); + dogecoin_mem_zero(cfstate->genesis_filter_header, sizeof(uint256_t)); + cfstate->cfheaders_tip_height = (cfh_start > 1) ? cfh_start - 1 : 0; + cfstate->cfheaders_base_height = cfh_start; + if (client->cfheaders_db) + dogecoin_cfheaders_db_reset(client->cfheaders_db); + cfstate->awaiting_response = false; + dogecoin_spv_request_cfheaders(client, node, cfh_start, tip->hash); + } + } else { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] failed to deserialize cfcheckpt\n"); + } + dogecoin_cfcheckpt_msg_free(&cfcp_msg); + } + } + + // Check for a 'Q' or 'q' on stdin, to quit. +#ifdef _WIN32 + if (_kbhit()) { + char c = fgetc(stdin); + if (c == 'Q' || c == 'q') { + printf("Disconnecting...\n"); + dogecoin_node_group_shutdown(client->nodegroup); + + // exit the event loop immediately + if (client->nodegroup && client->nodegroup->event_base) + event_base_loopbreak(client->nodegroup->event_base); + } + } +#else + char c = fgetc(stdin); + if (c == 'Q' || c == 'q') { + // Reset standard input back to blocking mode + int stdin_flags = fcntl(STDIN_FILENO, F_GETFL); + fcntl(STDIN_FILENO, F_SETFL, stdin_flags & ~O_NONBLOCK); + + printf("Disconnecting...\n"); + dogecoin_node_group_shutdown(client->nodegroup); + + // exit the event loop immediately + if (client->nodegroup && client->nodegroup->event_base) + event_base_loopbreak(client->nodegroup->event_base); + } +#endif } static void smpv_tx_cb(const dogecoin_smpv_tx* tx, const char* addr, void* user) @@ -2450,6 +3557,25 @@ LIBDOGECOIN_API dogecoin_bool dogecoin_spv_client_filterload( { if (!client || !filter || filter_len == 0) return false; + /* BIP37 and BIP157 are mutually exclusive, and this is a privacy control, + * not an optimisation: a FILTERLOAD hands the peer a bloom filter of the + * exact scripts being watched, which is the fingerprint compact filters + * exist to avoid. Compact filters are enabled by default, so silently + * honouring a filterload here would leak the wallet to every connected + * peer of a client that chose BIP157 precisely to prevent that. Fail + * closed and send nothing; callers wanting BIP37 must first disable + * compact filters via dogecoin_spv_enable_compact_filters(client, false). + * dogecoin_spv_client_filteradd() applies the same rule. */ + if (client->compact_filters_enabled) { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[spv] refusing filterload: compact filters (BIP157) are enabled; " + "a BIP37 bloom filter would leak the watched scripts to peers. " + "To use BIP37 anyway, call dogecoin_spv_enable_compact_filters(client, false) " + "first (spvnode: -e/--no_cfilters).\n"); + return false; + } + if (client->bloom_filter) { dogecoin_free(client->bloom_filter); client->bloom_filter = NULL; @@ -2485,6 +3611,16 @@ LIBDOGECOIN_API dogecoin_bool dogecoin_spv_client_filteradd( uint32_t data_len) { if (!client || !data || data_len == 0) return false; + + /* BIP157: populate watched_scripts for compact filter matching */ + if (client->compact_filters_enabled && client->cfilter_state && + client->cfilter_state->watched_scripts) { + cstring *script = cstr_new_buf(data, data_len); + if (script) + vector_add(client->cfilter_state->watched_scripts, script); + return true; /* skip BIP37 bloom filter and P2P FILTERADD when using compact filters */ + } + if (client->bloom_filter && client->bloom_filter_len > 0) { dogecoin_bip37_filter local_filter; memset(&local_filter, 0, sizeof(local_filter)); @@ -2563,3 +3699,246 @@ LIBDOGECOIN_API dogecoin_bool dogecoin_spv_client_filterclear(dogecoin_spv_clien return true; } + +/* ================================================================ */ +/* BIP157: enable/disable compact filter sync */ +/* ================================================================ */ +LIBDOGECOIN_API void dogecoin_spv_enable_compact_filters(dogecoin_spv_client *client, dogecoin_bool enable) +{ + if (!client) return; + + if (enable && !client->compact_filters_enabled) { + client->cfilter_state = dogecoin_compact_filter_state_new(); + if (client->cfilter_state) { + client->cfilter_state->enabled = true; + client->compact_filters_enabled = true; + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] compact filter sync enabled\n"); + } + return; + } + + if (!enable && client->compact_filters_enabled) { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] compact filter sync disabled\n"); + if (client->cfilter_state) { + dogecoin_compact_filter_state_free(client->cfilter_state); + client->cfilter_state = NULL; + } + client->compact_filters_enabled = false; + } +} + +/* ================================================================ */ +/* BIP157: request helper functions */ +/* ================================================================ */ + +/* Find the first block-header checkpoint at height >= target_height and write + * its hash in P2P (internal LE) byte order to hash_out. + * Returns the checkpoint height, or 0 if no suitable checkpoint exists. */ +static uint32_t cf_find_checkpoint_stop(const dogecoin_chainparams *params, + uint32_t target_height, uint256_t hash_out) +{ + const dogecoin_checkpoint *arr = NULL; + size_t cnt = 0; + if (!params) return 0; + if (strcmp(params->chainname, "main") == 0) { + arr = dogecoin_mainnet_checkpoint_array; + cnt = sizeof(dogecoin_mainnet_checkpoint_array) / sizeof(dogecoin_mainnet_checkpoint_array[0]); + } else if (strcmp(params->chainname, "test") == 0) { + arr = dogecoin_testnet_checkpoint_array; + cnt = sizeof(dogecoin_testnet_checkpoint_array) / sizeof(dogecoin_testnet_checkpoint_array[0]); + } + for (size_t i = 0; i < cnt; i++) { + if (arr[i].height >= target_height) { + /* chainparams hashes are display-order hex; utils_uint256_sethex reverses to LE */ + utils_uint256_sethex((char *)arr[i].hash, hash_out); + return arr[i].height; + } + } + return 0; +} + +LIBDOGECOIN_API dogecoin_bool dogecoin_spv_request_cfcheckpt(dogecoin_spv_client *client, dogecoin_node *node) +{ + if (!client || !node || !client->cfilter_state) return false; + + dogecoin_blockindex *tip = client->headers_db->getchaintip(client->headers_db_ctx); + if (!tip) return false; + + dogecoin_getcfcheckpt_msg msg; + msg.filter_type = GCS_BASIC_FILTER_TYPE; + memcpy(msg.stop_hash, tip->hash, sizeof(uint256_t)); + + cstring *payload = cstr_new_sz(64); + dogecoin_p2p_msg_getcfcheckpt_ser(&msg, payload); + + cstring *p2p_msg = dogecoin_p2p_message_new( + node->nodegroup->chainparams->netmagic, + DOGECOIN_MSG_GETCFCHECKPT, + payload->str, payload->len); + cstr_free(payload, true); + dogecoin_node_send(node, p2p_msg); + cstr_free(p2p_msg, true); + + client->cfilter_state->awaiting_response = true; + client->cfilter_state->last_request_time = (uint64_t)time(NULL); + + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] sent getcfcheckpt to node %d\n", node->nodeid); + return true; +} + +LIBDOGECOIN_API dogecoin_bool dogecoin_spv_request_cfheaders(dogecoin_spv_client *client, dogecoin_node *node, uint32_t start_height, const uint256_t stop_hash) +{ + if (!client || !node || !client->cfilter_state) return false; + + dogecoin_blockindex *tip = client->headers_db->getchaintip(client->headers_db_ctx); + if (!tip) return false; + + uint32_t tip_height = (uint32_t)tip->height; + + /* BIP157: servers reject requests with stop_height - start_height >= MAX_GETCFHEADERS_SIZE. + * Clamp the stop to one batch of MAX_GETCFHEADERS_SIZE filter headers. */ + uint32_t batch_stop_height = start_height + MAX_GETCFHEADERS_SIZE - 1; + if (batch_stop_height >= tip_height) + batch_stop_height = tip_height; + + uint256_t batch_stop_hash; + if (batch_stop_height == tip_height) { + /* Last (or only) batch ends exactly at the tip. */ + memcpy(batch_stop_hash, tip->hash, sizeof(uint256_t)); + } else { + /* Find the block hash at batch_stop_height. + * Try the in-memory prev chain first; fall back to a file scan. */ + dogecoin_headers_db *hdb = (dogecoin_headers_db *)client->headers_db_ctx; + if (!dogecoin_headers_db_get_block_hash_at_height(hdb, batch_stop_height, batch_stop_hash)) { + /* Primary DB miss — try aux hash-lookup DB (genesis headers for filter IBD). */ + dogecoin_bool aux_found = false; + if (client->aux_hash_db && client->aux_hash_db_ctx) { + dogecoin_headers_db *aux = (dogecoin_headers_db *)client->aux_hash_db_ctx; + aux_found = dogecoin_headers_db_get_block_hash_at_height(aux, batch_stop_height, batch_stop_hash); + } + if (!aux_found) { + uint32_t cp_h = cf_find_checkpoint_stop(client->chainparams, + batch_stop_height, batch_stop_hash); + if (cp_h > 0) { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] getcfheaders: no hash at %u, using checkpoint %u\n", + batch_stop_height, cp_h); + batch_stop_height = cp_h; + } else { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] getcfheaders: cannot find hash at height %u, using tip\n", + batch_stop_height); + memcpy(batch_stop_hash, tip->hash, sizeof(uint256_t)); + batch_stop_height = tip_height; + } + } + } + } + + dogecoin_getcfheaders_msg msg; + msg.filter_type = GCS_BASIC_FILTER_TYPE; + msg.start_height = start_height; + memcpy(msg.stop_hash, batch_stop_hash, sizeof(uint256_t)); + + cstring *payload = cstr_new_sz(64); + dogecoin_p2p_msg_getcfheaders_ser(&msg, payload); + + cstring *p2p_msg = dogecoin_p2p_message_new( + node->nodegroup->chainparams->netmagic, + DOGECOIN_MSG_GETCFHEADERS, + payload->str, payload->len); + cstr_free(payload, true); + dogecoin_node_send(node, p2p_msg); + cstr_free(p2p_msg, true); + + client->cfilter_state->awaiting_response = true; + client->cfilter_state->last_request_time = (uint64_t)time(NULL); + client->cfilter_state->pending_start_height = start_height; + memcpy(client->cfilter_state->pending_stop_hash, batch_stop_hash, sizeof(uint256_t)); + + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] sent getcfheaders (start=%u stop_height=%u) to node %d [%us elapsed]\n", + start_height, batch_stop_height, node->nodeid, spv_elapsed(client)); + return true; +} + +LIBDOGECOIN_API dogecoin_bool dogecoin_spv_request_cfilters(dogecoin_spv_client *client, dogecoin_node *node, uint32_t start_height, const uint256_t stop_hash) +{ + if (!client || !node || !client->cfilter_state) return false; + + dogecoin_compact_filter_state *cfstate = client->cfilter_state; + uint32_t cfheaders_tip = cfstate->cfheaders_tip_height; + + /* BIP157: servers reject requests with stop_height - start_height >= MAX_GETCFILTERS_SIZE. + * Clamp the batch to at most MAX_GETCFILTERS_SIZE cfilters. */ + uint32_t batch_end = start_height + MAX_GETCFILTERS_SIZE - 1; + if (cfheaders_tip > 0 && batch_end > cfheaders_tip) + batch_end = cfheaders_tip; + + /* Find the block hash at batch_end. */ + uint256_t batch_stop_hash; + dogecoin_blockindex *tip = client->headers_db->getchaintip(client->headers_db_ctx); + if (tip && batch_end == (uint32_t)tip->height) { + memcpy(batch_stop_hash, tip->hash, sizeof(uint256_t)); + } else { + dogecoin_headers_db *hdb = (dogecoin_headers_db *)client->headers_db_ctx; + if (!dogecoin_headers_db_get_block_hash_at_height(hdb, batch_end, batch_stop_hash)) { + /* Primary DB miss — try aux hash-lookup DB (genesis headers for filter IBD). */ + dogecoin_bool aux_found = false; + if (client->aux_hash_db && client->aux_hash_db_ctx) { + dogecoin_headers_db *aux = (dogecoin_headers_db *)client->aux_hash_db_ctx; + aux_found = dogecoin_headers_db_get_block_hash_at_height(aux, batch_end, batch_stop_hash); + } + if (!aux_found) { + uint32_t cp_h = cf_find_checkpoint_stop(client->chainparams, + batch_end, batch_stop_hash); + if (cp_h > 0) { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] getcfilters: no hash at %u, using checkpoint %u\n", + batch_end, cp_h); + batch_end = cp_h; + } else { + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb( + "[bip157] getcfilters: cannot find hash at height %u, using tip\n", + batch_end); + memcpy(batch_stop_hash, stop_hash, sizeof(uint256_t)); + if (tip) batch_end = (uint32_t)tip->height; + } + } + } + } + + dogecoin_getcfilters_msg msg; + msg.filter_type = GCS_BASIC_FILTER_TYPE; + msg.start_height = start_height; + memcpy(msg.stop_hash, batch_stop_hash, sizeof(uint256_t)); + + cstring *payload = cstr_new_sz(64); + dogecoin_p2p_msg_getcfilters_ser(&msg, payload); + + cstring *p2p_msg = dogecoin_p2p_message_new( + node->nodegroup->chainparams->netmagic, + DOGECOIN_MSG_GETCFILTERS, + payload->str, payload->len); + cstr_free(payload, true); + dogecoin_node_send(node, p2p_msg); + cstr_free(p2p_msg, true); + + cfstate->cfilter_batch_end = batch_end; + cfstate->awaiting_response = true; + cfstate->last_request_time = (uint64_t)time(NULL); + cfstate->pending_start_height = start_height; + memcpy(cfstate->pending_stop_hash, batch_stop_hash, sizeof(uint256_t)); + + if (client->nodegroup && client->nodegroup->log_write_cb) + client->nodegroup->log_write_cb("[bip157] sent getcfilters (start=%u..%u) to node %d [%us elapsed]\n", + start_height, batch_end, node->nodeid, spv_elapsed(client)); + return true; +} diff --git a/test/spv_tests.c b/test/spv_tests.c index 797e27af2..a5eed15da 100644 --- a/test/spv_tests.c +++ b/test/spv_tests.c @@ -598,6 +598,14 @@ void test_bip37_filter_state() dogecoin_spv_client* client = dogecoin_spv_client_new(&dogecoin_chainparams_main, false, true, false, false, 1, NULL); u_assert_true(client != NULL); + /* BIP37 and BIP157 are mutually exclusive for privacy reasons: a bloom + * filter leaks the watched scripts to peers, which is what compact filters + * avoid. Compact filters are on by default, and filterload fails closed + * while they are, so a BIP37 consumer must opt out explicitly first. */ + u_assert_true(!dogecoin_spv_client_filterload(client, (const uint8_t[]){0xaa}, 1, 1, 0, 0)); + dogecoin_spv_enable_compact_filters(client, false); + u_assert_true(!client->compact_filters_enabled); + uint8_t filter[3] = {0xaa, 0xbb, 0xcc}; u_assert_true(dogecoin_spv_client_filterload(client, filter, sizeof(filter), 2, 123, 1)); u_assert_true(client->bloom_filter != NULL); From 3befc146954b51d00f4dba560ad4a653f1e62597 Mon Sep 17 00:00:00 2001 From: bluezr Date: Sun, 2 Aug 2026 15:51:10 -0700 Subject: [PATCH 10/13] cli: wire compact filters into spvnode Connects the BIP157 client to the command line, which is what makes the feature reachable by a user rather than only by the library API. -a/--address registers the address as a watched script with the filter state, so cfilters are matched against it -e/--no_cfilters disables compact filters, the documented opt-out for a consumer that wants BIP37 instead -o logs filter header checkpoints during sync --cfheaders_path override cfheaders.dat location --cfilters_path override cfilters.dat location wallet gains dogecoin_wallet_add_watchonly_addr so a watched address is persisted without a private key. It follows the existing add-address path exactly, including that dogecoin_address_to_pubkey_hash returns a pointer into a static buffer and is not freed by its existing caller either. Deliberately excluded, because each is the seam with another feature and not the CLI's to own: --cf_from_genesis, --genesis_headers, --filter_hash_db, --cf_workers --genesis_headers is the clearest case. It calls dogecoin_spv_client_enable_genesis_headers, which initialises par_hdr *and* resets cf_start_height and clears the CF databases -- one function spanning parallel header download and compact filters. Exposing it here would pull #378 into this PR. The peer-list replication that gave each parallel worker its own TCP connection goes with them. End to end against a local 1.14.99 node serving BIP157, run with an isolated HOME so the real filter cache was untouched: [bip157] watching address: DJoQKLWJtM251NhzsR7DmbgT88TwqBbPX7 [bip157] MATCH at height 6315000 [bip157] all filters processed: scanned heights 6314418..6315859, 1 matched blocks [bip157] requesting 1 matched full blocks across 1 peers [bip157] processing 2 txs from matched block height=6315000 1442 cfilters parsed off the wire, zero validation errors. The address was taken from block 6315000 via getrawtransaction before the run, so the matched height was predicted rather than read back afterwards. This closes the gap left open in the spv layer, where -a was not yet wired to the filter state and so GCS matching was never exercised end to end. WITH_NET=ON with -DBUILD_SHARED_LIBS=1: 81/81. WITH_NET=OFF: 74/74. --- include/dogecoin/wallet.h | 1 + src/cli/spvnode.c | 183 +++++++++++++++++++++++++++++++++++++- src/wallet.c | 36 ++++++++ 3 files changed, 217 insertions(+), 3 deletions(-) diff --git a/include/dogecoin/wallet.h b/include/dogecoin/wallet.h index 22f028dac..1abc0ca52 100644 --- a/include/dogecoin/wallet.h +++ b/include/dogecoin/wallet.h @@ -202,6 +202,7 @@ LIBDOGECOIN_API int dogecoin_wallet_add_hd_account_ts(dogecoin_wallet* wallet, u LIBDOGECOIN_API int dogecoin_wallet_get_address_ts(dogecoin_wallet* wallet, char* address, size_t len, uint32_t account, uint32_t index, dogecoin_bool change); LIBDOGECOIN_API dogecoin_bool dogecoin_p2pkh_address_to_wallet_pubkeyhash(const char* address_in, dogecoin_wallet_addr* addr, dogecoin_wallet* wallet); LIBDOGECOIN_API dogecoin_wallet_addr* dogecoin_p2pkh_address_to_wallet(const char* address_in, dogecoin_wallet* wallet); +LIBDOGECOIN_API dogecoin_bool dogecoin_wallet_add_watchonly_addr(dogecoin_wallet* wallet, const char* address_in); /** writes all available addresses (P2PKH) to the addr_out vector_t */ LIBDOGECOIN_API void dogecoin_wallet_get_addresses(dogecoin_wallet* wallet, vector_t* addr_out); diff --git a/src/cli/spvnode.c b/src/cli/spvnode.c index e21e82051..4230d69f1 100644 --- a/src/cli/spvnode.c +++ b/src/cli/spvnode.c @@ -200,6 +200,11 @@ static struct option long_options[] = { {"filtered_blocks", no_argument, NULL, 'g'}, {"select_checkpoint", no_argument, NULL, 'q'}, {"daemon", no_argument, NULL, 'z'}, + {"no_cfilters", no_argument, NULL, 'e'}, + {"export_cfcheckpts", no_argument, NULL, 'o'}, + {"logfile", required_argument, NULL, 'L'}, + {"cfheaders_path", required_argument, NULL, 257}, + {"cfilters_path", required_argument, NULL, 258}, {NULL, 0, NULL, 0} }; /** @@ -214,7 +219,7 @@ static void print_version() { */ static void print_usage() { print_version(); - printf("Usage: spvnode (-c|continuous) (-i|--ips ) (-m[--maxpeers] ) (-f ) \ + printf("Usage: spvnode (-c|continuous) (-i|--ips|-H|--host ) (-m[--maxpeers] ) (-f ) \ (-a|--address
) (-n|--mnemonic ) (-s|[--pass_phrase]) (-y|--encrypted_file ) \ (-w|--wallet_file ) (-h|--headers_file ) (-l|[--no_prompt]) (-b[--full_sync]) (-p[--checkpoint]) (-k[--master_key]) (-j[--use_tpm]) \ (-u|--http_server ) (-x|--smpv) (-g|--filtered_blocks) (-q|--select_checkpoint) (-t|--testnet) (-r|--regtest) (-d|--debug) \n"); @@ -281,6 +286,34 @@ dogecoin_bool spv_header_message_processed(struct dogecoin_spv_client_* client, } static dogecoin_bool quit_when_synced = true; +static FILE *g_logfile = NULL; + +static int spvnode_log_file(const char* format, ...) { + if (!g_logfile) return 0; + va_list args; + va_start(args, format); + fprintf(g_logfile, "DEBUG: "); + vfprintf(g_logfile, format, args); + va_end(args); + fflush(g_logfile); + return 1; +} + +static int spvnode_log_both(const char* format, ...) { + va_list args, args2; + va_start(args, format); + va_copy(args2, args); + printf("DEBUG: "); + vprintf(format, args); + va_end(args); + if (g_logfile) { + fprintf(g_logfile, "DEBUG: "); + vfprintf(g_logfile, format, args2); + fflush(g_logfile); + } + va_end(args2); + return 1; +} static dogecoin_bool spv_enable_filtered_blocks = false; static dogecoin_bool spv_select_checkpoint = false; static int spv_filter_oldest_utxo_height = 0; @@ -478,7 +511,12 @@ int main(int argc, char* argv[]) { char* http_server = NULL; int file_num = NO_FILE; dogecoin_bool smpv_cli_enable = false; + dogecoin_bool no_cfilters = false; + dogecoin_bool export_cfcheckpts = false; int selected_checkpoint_index = -1; + char* logfile = NULL; + char* cfheaders_path = NULL; + char* cfilters_path = NULL; if (argc <= 1 || strlen(argv[argc - 1]) == 0 || argv[argc - 1][0] == '-') { /* exit if no command was provided */ print_usage(); @@ -487,7 +525,7 @@ int main(int argc, char* argv[]) { data = argv[argc - 1]; /* get arguments */ - while ((opt = getopt_long_only(argc, argv, "i:ctrdsm:n:f:y:u:w:h:a:lbpzkjxgq", long_options, &long_index)) != -1) { + while ((opt = getopt_long_only(argc, argv, "i:ctrdsm:n:f:y:u:w:h:a:lbpzkjxgqeoL:", long_options, &long_index)) != -1) { switch (opt) { case 'c': quit_when_synced = false; @@ -568,6 +606,21 @@ int main(int argc, char* argv[]) { spv_select_checkpoint = true; use_checkpoint = true; break; + case 'e': + no_cfilters = true; + break; + case 'o': + export_cfcheckpts = true; + break; + case 'L': + logfile = optarg; + break; + case 257: + cfheaders_path = optarg; + break; + case 258: + cfilters_path = optarg; + break; default: print_usage(); exit(EXIT_FAILURE); @@ -580,6 +633,15 @@ int main(int argc, char* argv[]) { in_memory_headers = (dbfile && ((strcmp(dbfile, "0") == 0) || (strcmp(dbfile, "no") == 0))); dogecoin_spv_client* client = dogecoin_spv_client_new(chain, debug, in_memory_headers, use_checkpoint, full_sync, maxnodes, http_server); + if (logfile) { + g_logfile = fopen(logfile, "a"); + if (!g_logfile) { + fprintf(stderr, "Cannot open logfile '%s': %s\n", logfile, strerror(errno)); + } else { + client->nodegroup->log_write_cb = debug ? spvnode_log_both : spvnode_log_file; + } + } + if (http_server) { evhttp_set_gencb(client->nodegroup->http_server, dogecoin_http_request_cb, client); } @@ -587,6 +649,30 @@ int main(int argc, char* argv[]) { dogecoin_spv_enable_smpv(client, true); printf("[smpv] enabled via CLI flag\n"); } + if (cfheaders_path) + client->cfheaders_path = strdup(cfheaders_path); + if (cfilters_path) + client->cfilters_path = strdup(cfilters_path); + + if (no_cfilters || full_sync) { + /* Disable BIP157 compact filter sync when: + * - user explicitly passed --no_cfilters (-e) + * - full_sync (-b) is requested: we need full blocks anyway, + * and Dogecoin peers don't advertise NODE_COMPACT_FILTERS yet, + * so BIP157 sync would stall indefinitely. */ + dogecoin_spv_enable_compact_filters(client, false); + if (no_cfilters) { + printf("[bip157] compact filters disabled via CLI flag (--no_cfilters)\n"); + } else { + printf("[bip157] compact filters disabled (full_sync mode uses direct block download)\n"); + } + } else { + printf("[bip157] compact block filters enabled (default)\n"); + } + if (export_cfcheckpts) { + client->cf_export_enabled = true; + printf("[bip157] filter header checkpoint export enabled; lines prefixed '[cfcheckpt-export]' will appear as headers sync\n"); + } client->header_message_processed = spv_header_message_processed; client->sync_completed = spv_sync_completed; #if WITH_WALLET @@ -657,7 +743,20 @@ int main(int argc, char* argv[]) { } /* Optional BIP37 filter setup using filterload with fixed-size bloom. */ - if (spv_enable_filtered_blocks && (wallet->waddr_vector->len > 0 || HASH_COUNT(wallet->utxos) > 0)) { + if (spv_enable_filtered_blocks && client->compact_filters_enabled) { + /* BIP37 and BIP157 are mutually exclusive here, for privacy: a bloom + * filter hands the watched scripts to every peer, which is exactly what + * compact filters avoid. Compact filters are on by default, so -g on + * its own is a contradiction; dogecoin_spv_client_filterload() fails + * closed in that state. Say why here -- its explanation goes through + * the nodegroup logger, which is not printing this early, so the user + * would otherwise see only an unexplained "Failed to send filterload". */ + printf("-g/--filtered_blocks (BIP37) needs -e/--no_cfilters.\n" + "A BIP37 bloom filter would leak the watched addresses to peers, which is\n" + "what compact filters (BIP157, enabled by default) exist to prevent, so the\n" + "two are mutually exclusive. Re-run with -e to use BIP37, or drop -g to use\n" + "compact filters.\n"); + } else if (spv_enable_filtered_blocks && (wallet->waddr_vector->len > 0 || HASH_COUNT(wallet->utxos) > 0)) { dogecoin_bip37_filter* filter = dogecoin_bip37_filter_new(0, 1); /* random tweak, UPDATE_ALL */ if (!filter) { printf("Failed to initialize BIP37 bloom filter\n"); @@ -715,6 +814,71 @@ int main(int argc, char* argv[]) { printf("Filtered block mode disabled (use -g/--filtered_blocks to enable)\n"); } + /* BIP157 compact-filter address watching: add each wallet address's + * P2PKH scriptPubKey via filteradd so cfilters are matched against + * real wallet outputs. Two sources: + * 1. waddr_vector — HD-derived keys controlled by this wallet. + * 2. wallet->utxos — previously discovered UTXOs whose script_pubkey + * may cover watch-only or externally-derived addresses not present + * in waddr_vector. */ + if (client->compact_filters_enabled) { + unsigned int wi; + for (wi = 0; wi < wallet->waddr_vector->len; wi++) { + dogecoin_wallet_addr* waddr = vector_idx(wallet->waddr_vector, wi); + if (!waddr || waddr->ignore) continue; + /* P2PKH scriptPubKey: OP_DUP OP_HASH160 <20-byte hash> OP_EQUALVERIFY OP_CHECKSIG */ + uint8_t spk[25]; + spk[0] = 0x76; /* OP_DUP */ + spk[1] = 0xa9; /* OP_HASH160 */ + spk[2] = 0x14; /* push 20 bytes */ + memcpy(spk + 3, waddr->pubkeyhash, sizeof(uint160_t)); + spk[23] = 0x88; /* OP_EQUALVERIFY */ + spk[24] = 0xac; /* OP_CHECKSIG */ + dogecoin_spv_client_filteradd(client, spk, sizeof(spk)); + char addr_str[P2PKHLEN]; + if (dogecoin_p2pkh_addr_from_hash160(waddr->pubkeyhash, chain, addr_str, sizeof(addr_str))) { + printf("[bip157] watching address: %s\n", addr_str); + } + } + /* Also watch addresses supplied via -a/--address on the CLI. */ + if (address && address[0] != '\0') { + char* addr_copy = strdup(address); + char* saveptr = NULL; + char* tok = strtok_r(addr_copy, " ", &saveptr); + while (tok) { + uint8_t dec[64]; + size_t dec_len = dogecoin_base58_decode_check(tok, dec, sizeof(dec)); + if (dec_len == 21) { /* 1-byte version + 20-byte hash160 */ + uint8_t spk[25]; + spk[0] = 0x76; /* OP_DUP */ + spk[1] = 0xa9; /* OP_HASH160 */ + spk[2] = 0x14; /* push 20 bytes */ + memcpy(spk + 3, dec + 1, 20); + spk[23] = 0x88; /* OP_EQUALVERIFY */ + spk[24] = 0xac; /* OP_CHECKSIG */ + dogecoin_spv_client_filteradd(client, spk, sizeof(spk)); + dogecoin_wallet_add_watchonly_addr(wallet, tok); + printf("[bip157] watching address (cli): %s\n", tok); + } + tok = strtok_r(NULL, " ", &saveptr); + } + dogecoin_free(addr_copy); + } + /* Also watch script_pubkeys from previously-tracked UTXOs (hex → raw). */ + dogecoin_utxo* utxo; + dogecoin_utxo* tmp_utxo; + HASH_ITER(hh, wallet->utxos, utxo, tmp_utxo) { + if (!utxo->script_pubkey[0]) continue; + size_t spk_hex_len = strlen(utxo->script_pubkey); + size_t spk_raw_len = spk_hex_len / 2; + const uint8_t *spk_raw = utils_hex_to_uint8(utxo->script_pubkey); + if (!spk_raw) continue; + dogecoin_spv_client_filteradd(client, spk_raw, spk_raw_len); + printf("[bip157] watching utxo script (%s): %s\n", + utxo->address, utxo->script_pubkey); + } + } + client->sync_transaction = dogecoin_wallet_check_transaction; client->sync_transaction_ctx = wallet; #endif @@ -746,6 +910,11 @@ int main(int argc, char* argv[]) { } dogecoin_free(headersfile); + + /* Load auxiliary hash-lookup DB for filter IBD from genesis. + * Use open_for_scan instead of load() to avoid reading 1M+ records + * into the in-memory tree — only the file handle is needed for the + * sequential block-hash scan done by get_block_hash_at_height(). */ if (!response) { printf("Could not load or create headers database...aborting\n"); #if WITH_WALLET @@ -818,7 +987,15 @@ int main(int argc, char* argv[]) { #endif } printf("done\n"); + + /* Rescan any cfilters cached from a prior run before entering the + * network runloop — finds matches immediately without waiting for + * the cfheaders sync to complete. */ + if (client->compact_filters_enabled) + dogecoin_spv_client_rescan_cached_filters(client); + printf("Discover peers...\n"); + dogecoin_spv_client_discover_peers(client, ips); printf("Connecting to the p2p network...\n"); diff --git a/src/wallet.c b/src/wallet.c index 6c567d3f2..72560c6a8 100644 --- a/src/wallet.c +++ b/src/wallet.c @@ -1503,6 +1503,41 @@ dogecoin_wallet_addr* dogecoin_p2pkh_address_to_wallet(const char* address_in, d return NULL; } +dogecoin_bool dogecoin_wallet_add_watchonly_addr(dogecoin_wallet* wallet, const char* address_in) { + if (!wallet || !address_in) return false; + + /* skip if already present */ + vector_t* addrs = vector_new(1, free); + dogecoin_wallet_get_addresses(wallet, addrs); + dogecoin_bool match = false; + unsigned int i; + for (i = 0; i < addrs->len; i++) { + if (strncmp((char*)vector_idx(addrs, i), address_in, P2PKHLEN - 1) == 0) { + match = true; + break; + } + } + vector_free(addrs, true); + if (match) return true; + + char* pubkey_hash = dogecoin_address_to_pubkey_hash((char*)address_in); + if (!pubkey_hash) return false; + + dogecoin_wallet_addr* addr = dogecoin_wallet_addr_new(); + memcpy_safe(addr->pubkeyhash, utils_hex_to_uint8(pubkey_hash), 20); + addr->childindex = wallet->next_childindex; + dogecoin_btree_tsearch(addr, &wallet->waddr_rbtree, dogecoin_wallet_addr_compare); + vector_add(wallet->waddr_vector, addr); + cstring* record = cstr_new_sz(256); + dogecoin_wallet_addr_serialize(record, wallet->chain, addr); + if (!wallet_write_record(wallet, record, WALLET_DB_REC_TYPE_ADDR)) + fprintf(stderr, "wallet: failed to write watch-only address %s\n", address_in); + cstr_free(record, true); + dogecoin_file_commit(wallet->dbfile); + wallet->next_childindex++; + return true; +} + void dogecoin_wallet_get_addresses(dogecoin_wallet* wallet, vector_t* addr_out) { unsigned int i; @@ -1863,6 +1898,7 @@ void dogecoin_wallet_check_transaction(void *ctx, dogecoin_tx *tx, unsigned int uint256_t blockhash; dogecoin_block_header_hash(&pindex->header, blockhash); printf("Found new relevant transaction: %s (height: %u)\n", txid_hex, pindex->height); + fflush(stdout); dogecoin_hash_set(wtx->blockhash, blockhash); wtx->height = pindex->height; dogecoin_tx_copy(wtx->tx, tx); From 91812e87a6a9a754507189acdf5727bbad2540f6 Mon Sep 17 00:00:00 2001 From: bluezr Date: Sun, 2 Aug 2026 21:43:01 -0700 Subject: [PATCH 11/13] fuzz: BIP157 message and GCS decoder harness Adds a libFuzzer harness for the compact filter deserializers, on the infrastructure from #351. These parse peer-supplied bytes before anything is verified, so they are the attacker-reachable surface of filter sync: cfilter filter_type | block_hash | var_bytes(filter) cfheaders filter_type | stop_hash | prev_header | vec cfcheckpt filter_type | stop_hash | vec plus gcs_filter_deserialize underneath them, which is the one that walks attacker-controlled bits: Golomb-Rice decoding accumulates deltas in a loop driven by the encoded data, so truncated and hostile streams are the interesting inputs rather than well-formed ones. The first input byte selects the target so one corpus covers all four. filter_type comes from the input rather than being fixed, because it selects the (M, P) parameter set and therefore how the payload decodes; the block hash is derived from the input too, since it keys the SipHash that maps elements into the filter range. Pinning either would hold the fuzzer to a single decode schedule. Result: 19,358,947 executions at ~160k/sec under -fsanitize=fuzzer, address,undefined, 228 new coverage units, no crashes. The harness was checked for reach rather than assumed to have it. With the length bound in dogecoin_p2p_msg_cfilter_deser removed: if (buf->len < filter_len) return false; it faults within seconds. Restored, it runs 11M executions clean. A harness that only ever exercises the early-return paths would pass both ways and look identical in the logs. Not covered here: the cfilters.dat record reader in cfheadersdb_file.c reads from disk rather than the wire and needs a file-shaped harness, and the BIP152 deserializers are on a separate branch. Both are follow-ups. --- Makefile.am | 9 ++- fuzz/fuzz_compact_filter.c | 110 +++++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 fuzz/fuzz_compact_filter.c diff --git a/Makefile.am b/Makefile.am index 73457fdee..661938eb8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -514,6 +514,13 @@ fuzz_fuzz_tx_LDADD = libdogecoin.la $(ASM_LIB_FILES) fuzz_fuzz_tx_CFLAGS = $(AM_CFLAGS) -fsanitize=fuzzer,address,undefined fuzz_fuzz_tx_LDFLAGS = -fsanitize=fuzzer,address,undefined -static +noinst_PROGRAMS += fuzz/fuzz_compact_filter +fuzz_fuzz_compact_filter_SOURCES = fuzz/fuzz_compact_filter.c +fuzz_fuzz_compact_filter_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/include +fuzz_fuzz_compact_filter_LDADD = libdogecoin.la $(ASM_LIB_FILES) +fuzz_fuzz_compact_filter_CFLAGS = $(AM_CFLAGS) -fsanitize=fuzzer,address,undefined +fuzz_fuzz_compact_filter_LDFLAGS = -fsanitize=fuzzer,address,undefined -static + noinst_PROGRAMS += fuzz/fuzz_block fuzz_fuzz_block_SOURCES = fuzz/fuzz_block.c fuzz_fuzz_block_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/include @@ -570,7 +577,7 @@ fuzz-corpus: fuzz/seed_logdb_corpus ./fuzz/seed_logdb_corpus $(CORPUS) -FUZZ_TARGETS = fuzz/fuzz_tx fuzz/fuzz_block fuzz/fuzz_wtx fuzz/fuzz_logdb fuzz/fuzz_psbt +FUZZ_TARGETS = fuzz/fuzz_tx fuzz/fuzz_block fuzz/fuzz_wtx fuzz/fuzz_logdb fuzz/fuzz_psbt fuzz/fuzz_compact_filter if WITH_NET FUZZ_TARGETS += fuzz/fuzz_protocol endif diff --git a/fuzz/fuzz_compact_filter.c b/fuzz/fuzz_compact_filter.c new file mode 100644 index 000000000..eb6e267d0 --- /dev/null +++ b/fuzz/fuzz_compact_filter.c @@ -0,0 +1,110 @@ +/* + + The MIT License (MIT) + + Copyright (c) 2026 bluezr + Copyright (c) 2026 The Dogecoin Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES + OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +*/ + +/* + * libFuzzer harness for the BIP157/158 deserializers. + * + * These parse messages a peer sends us before anything has been verified, + * so they are the whole attacker-reachable surface of compact filter sync: + * + * cfilter filter_type | block_hash | var_bytes(filter) + * cfheaders filter_type | stop_hash | prev_header | vec + * cfcheckpt filter_type | stop_hash | vec + * + * and the GCS decoder underneath them, which is the one that actually walks + * attacker-supplied bits: Golomb-Rice decoding accumulates deltas in a loop + * driven by the encoded data, so a truncated or hostile stream is the + * interesting case rather than a well-formed one. + * + * The first input byte selects the target so one corpus covers all four. + * + * Build: ./configure CC=clang CFLAGS="-fsanitize=fuzzer-no-link" --enable-fuzz && make fuzz + * Run: ./fuzz/fuzz_compact_filter CORPUS_DIR -max_len=100000 + */ +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + if (size < 2) return 0; + + uint8_t selector = data[0]; + /* Byte 1 feeds filter_type for the GCS case, where the value selects the + parameter set (M, P) and so changes how the payload is decoded. Leaving + it fixed would pin the fuzzer to one parameterisation. */ + uint8_t filter_type = data[1]; + struct const_buffer buf = { data + 2, size - 2 }; + + switch (selector & 0x03) { + case 0: { + dogecoin_cfilter_msg msg; + dogecoin_cfilter_msg_init(&msg); + dogecoin_p2p_msg_cfilter_deser(&msg, &buf); + dogecoin_cfilter_msg_free(&msg); + break; + } + case 1: { + dogecoin_cfheaders_msg msg; + dogecoin_cfheaders_msg_init(&msg); + dogecoin_p2p_msg_cfheaders_deser(&msg, &buf); + dogecoin_cfheaders_msg_free(&msg); + break; + } + case 2: { + dogecoin_cfcheckpt_msg msg; + dogecoin_cfcheckpt_msg_init(&msg); + dogecoin_p2p_msg_cfcheckpt_deser(&msg, &buf); + dogecoin_cfcheckpt_msg_free(&msg); + break; + } + case 3: { + /* GCS decode. The block hash keys the SipHash used to map elements + into the filter's range, so it is derived from the input rather + than fixed: a constant key would exercise one hash schedule only. */ + uint256_t blockhash; + unsigned int i; + for (i = 0; i < 32; i++) + blockhash[i] = (uint8_t)(data[(i + 2) % size]); + + gcs_filter *filter = gcs_filter_new(); + if (filter) { + gcs_filter_deserialize(filter, filter_type, blockhash, &buf); + gcs_filter_free(filter); + } + break; + } + } + return 0; +} From ed9c89507fcad735a0cd526ae6ec2e1cf061a462 Mon Sep 17 00:00:00 2001 From: bluezr Date: Sun, 2 Aug 2026 22:11:36 -0700 Subject: [PATCH 12/13] fuzz: cfheaders.dat and cfilters.dat reader harness The wire deserializers have their own harness. This covers the other parser: the on-disk stores read back at startup. Their contents are not attacker-supplied over the network, but they are attacker-influenced -- every record was written from data a peer sent -- and a corrupt or tampered file is the case the readers have to survive rather than trust. cfilters.dat is the interesting one. Each record carries its own length and iterate() sizes an allocation directly from it: height (4) | block_hash (32) | data_len (4) | data[data_len] The harness is file-shaped because the readers take a path, not a buffer, so every execution writes and reopens a file. That caps throughput at ~1.5k/sec against ~160k/sec for the buffer harness; it is inherent to the target, not a defect in the harness. The iteration callback dereferences the first and last byte of each record rather than ignoring its arguments, so an out-of-bounds buffer is touched instead of merely being passed through. Result: 236,685 executions under -fsanitize=fuzzer,address,undefined, 136 new coverage units, no crashes. Reach was verified rather than assumed. With the bound in dogecoin_cfilters_db_iterate removed: if (data_len > DOGECOIN_MAX_P2P_MSG_SIZE) return false; the harness reports within seconds: ERROR: libFuzzer: out-of-memory (malloc(4294967295)) 0xFFFFFFFF, straight from the length field. Restored, it runs clean. That bound was added by reading the code; this is the first independent confirmation that it is load-bearing. --- Makefile.am | 9 +++- fuzz/fuzz_cfdb.c | 123 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 fuzz/fuzz_cfdb.c diff --git a/Makefile.am b/Makefile.am index 661938eb8..3a37aace9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -533,6 +533,13 @@ fuzz_fuzz_block_LDFLAGS = -fsanitize=fuzzer,address,undefined -static # Gate the harness on the same condition so `make fuzz` still builds the # net-independent targets when networking is disabled. if WITH_NET +noinst_PROGRAMS += fuzz/fuzz_cfdb +fuzz_fuzz_cfdb_SOURCES = fuzz/fuzz_cfdb.c +fuzz_fuzz_cfdb_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/include +fuzz_fuzz_cfdb_LDADD = libdogecoin.la $(ASM_LIB_FILES) +fuzz_fuzz_cfdb_CFLAGS = $(AM_CFLAGS) -fsanitize=fuzzer,address,undefined +fuzz_fuzz_cfdb_LDFLAGS = -fsanitize=fuzzer,address,undefined -static + noinst_PROGRAMS += fuzz/fuzz_protocol fuzz_fuzz_protocol_SOURCES = fuzz/fuzz_protocol.c fuzz_fuzz_protocol_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/include @@ -579,7 +586,7 @@ fuzz-corpus: fuzz/seed_logdb_corpus FUZZ_TARGETS = fuzz/fuzz_tx fuzz/fuzz_block fuzz/fuzz_wtx fuzz/fuzz_logdb fuzz/fuzz_psbt fuzz/fuzz_compact_filter if WITH_NET -FUZZ_TARGETS += fuzz/fuzz_protocol +FUZZ_TARGETS += fuzz/fuzz_protocol fuzz/fuzz_cfdb endif fuzz: $(FUZZ_TARGETS) diff --git a/fuzz/fuzz_cfdb.c b/fuzz/fuzz_cfdb.c new file mode 100644 index 000000000..965f1eb43 --- /dev/null +++ b/fuzz/fuzz_cfdb.c @@ -0,0 +1,123 @@ +/* + + The MIT License (MIT) + + Copyright (c) 2026 bluezr + Copyright (c) 2026 The Dogecoin Foundation + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES + OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + +*/ + +/* + * libFuzzer harness for the on-disk compact filter stores. + * + * The wire deserializers have their own harness (fuzz_compact_filter). This + * one covers the other parser: cfheaders.dat and cfilters.dat, which are read + * back at startup. Their contents are not attacker-supplied over the network, + * but they are attacker-influenced -- every record was written from data a peer + * sent -- and a corrupt or tampered file is exactly the case the readers have + * to survive rather than trust. + * + * cfilters.dat is the more interesting of the two. Each record carries its own + * length field, and iterate() sizes an allocation directly from it: + * + * height (4) | block_hash (32) | data_len (4) | data[data_len] + * + * The harness is file-shaped because the readers take a path, not a buffer. + * That caps throughput far below a buffer harness -- every execution writes and + * reopens a file -- which is inherent to the target rather than a defect in the + * harness. + * + * Build: ./configure CC=clang CFLAGS="-fsanitize=fuzzer-no-link" --enable-fuzz && make fuzz + * Run: ./fuzz/fuzz_cfdb CORPUS_DIR -max_len=65536 + */ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +/* Reused across executions: creating a fresh temp name per run would leave the + fuzzer's working directory full of files and slow the loop further. */ +static const char *CFDB_FUZZ_PATH = "fuzz_cfdb_input.dat"; + +static dogecoin_bool iter_cb(uint32_t height, const uint256_t block_hash, + const uint8_t *filter_data, uint32_t data_len, + void *ctx) +{ + /* Touch the record so a bad length or pointer is dereferenced rather than + merely returned: a callback that ignores its arguments would let an + out-of-bounds buffer pass through unnoticed. */ + volatile uint8_t sink = 0; + unsigned int *count = (unsigned int *)ctx; + (void)height; + sink ^= block_hash[0]; + if (filter_data && data_len > 0) { + sink ^= filter_data[0]; + sink ^= filter_data[data_len - 1]; + } + (void)sink; + if (++(*count) > 4096) return false; /* bound the loop, not the parser */ + return true; +} + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + if (size < 1) return 0; + + uint8_t selector = data[0]; + FILE *f = fopen(CFDB_FUZZ_PATH, "wb"); + if (!f) return 0; + if (size > 1) fwrite(data + 1, 1, size - 1, f); + fclose(f); + + if (selector & 0x01) { + /* cfilters.dat: record headers plus length-prefixed payloads. */ + dogecoin_cfilters_db *db = + dogecoin_cfilters_db_new(&dogecoin_chainparams_main, false); + if (db) { + if (dogecoin_cfilters_db_load(db, CFDB_FUZZ_PATH)) { + unsigned int count = 0; + dogecoin_cfilters_db_iterate(db, iter_cb, &count); + } + dogecoin_cfilters_db_free(db); + } + } else { + /* cfheaders.dat: file header, version gate, then fixed-size records + loaded into the filter state. */ + dogecoin_cfheaders_db *db = + dogecoin_cfheaders_db_new(&dogecoin_chainparams_main, false); + dogecoin_compact_filter_state *state = dogecoin_compact_filter_state_new(); + if (db && state) + dogecoin_cfheaders_db_load(db, CFDB_FUZZ_PATH, state); + if (state) dogecoin_compact_filter_state_free(state); + if (db) dogecoin_cfheaders_db_free(db); + } + + unlink(CFDB_FUZZ_PATH); + return 0; +} From 5bfab4afaded1bf7a00803d04e22c5cd9d59c53e Mon Sep 17 00:00:00 2001 From: bluezr Date: Wed, 5 Aug 2026 15:57:41 -0700 Subject: [PATCH 13/13] test: create cfheaders scratch files 0600 CodeQL cpp/world-writable-file-creation on test/cfheadersdb_tests.c. fopen(path, "wb") leaves the mode to the process umask, so the file can land world-writable and another local user could rewrite it between creation and read. Creates it 0600 via open()+fdopen() on POSIX; Windows keeps fopen, which does not have the same exposure. --- test/cfheadersdb_tests.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/test/cfheadersdb_tests.c b/test/cfheadersdb_tests.c index 34b502066..fc2ee554f 100644 --- a/test/cfheadersdb_tests.c +++ b/test/cfheadersdb_tests.c @@ -25,12 +25,36 @@ */ +#ifndef _WIN32 +#include +#include +#include +#endif #include #include #include #include +/* + * Create scratch files private to this user. plain cfdb_tmp_open(path, "wb") leaves + * the mode to the process umask, which can yield a world-writable file another + * local user could rewrite between creation and read. + */ +static FILE* cfdb_tmp_open(const char* path, const char* mode) +{ +#ifdef _WIN32 + return fopen(path, mode); +#else + int fd = open(path, O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR); + if (fd < 0) { + return NULL; + } + return fdopen(fd, mode); +#endif +} + + #include #include #include @@ -191,7 +215,7 @@ void test_cfheadersdb() fclose(f); u_assert_int_eq(got == (size_t)size, 1); - f = fopen(CFDB_TEST_HEADERS, "wb"); + f = cfdb_tmp_open(CFDB_TEST_HEADERS, "wb"); u_assert_int_eq(f != NULL, 1); u_assert_int_eq(fwrite(buf, 1, (size_t)size - 10, f) == (size_t)size - 10, 1); fclose(f);