From c277015f5c4750e842e4ad87ac3f3dba2630256a Mon Sep 17 00:00:00 2001 From: Georgios Konstantopoulos Date: Wed, 19 Oct 2022 20:24:50 -0700 Subject: [PATCH] feat(eth): add remaining eth protocol message types (#82) * chore: port over remaining types from ethp2p https://github.com/Rjected/ethp2p/ * replace fastrlp with reth_rlp * use correct type for tx messages * encoding / decoding still todo * derive Default for AccessList * export receipts * also add Hash to more types * fix receipts tests * remove unused receipts test imports * add convenience methods on transaction * add block body * move blockbody to eth-wire, uncomment wire type * uncomment rest of messages * TODO: refactor tests and make tests pass * use U128 instead of Uint for td * expose wire types * use reth_eth_wire instead of ethp2p * expose Signature * refactor pooled transaction tests * fix hash calculation * do not hash the entire buffer * uncomment block test and make clippy happy * module-level documentation for message types * apply a clippy fix * cargo fmt * actually make clippy happy * use H256 instead of [u8; 32] * use partition in split_transaction_by_hashes instead of peekable Co-authored-by: Dan Cline <6798349+Rjected@users.noreply.github.com> --- crates/net/eth-wire/src/lib.rs | 1 + crates/net/eth-wire/src/types/blocks.rs | 545 +++++++++++++++++ crates/net/eth-wire/src/types/broadcast.rs | 60 +- crates/net/eth-wire/src/types/message.rs | 206 +++---- crates/net/eth-wire/src/types/mod.rs | 13 + crates/net/eth-wire/src/types/receipts.rs | 124 ++++ crates/net/eth-wire/src/types/response.rs | 29 + crates/net/eth-wire/src/types/state.rs | 91 +++ crates/net/eth-wire/src/types/transactions.rs | 548 ++++++++++++++++++ .../testdata/bsc_new_block_network_one | 1 + .../testdata/bsc_new_block_network_two | 1 + .../eth-wire/testdata/new_block_network_rlp | 1 + .../new_pooled_transactions_network_rlp | 1 + crates/net/eth-wire/tests/new_block.rs | 31 + .../eth-wire/tests/new_pooled_transactions.rs | 13 + crates/primitives/src/lib.rs | 2 +- crates/primitives/src/transaction/mod.rs | 19 +- 17 files changed, 1575 insertions(+), 111 deletions(-) create mode 100644 crates/net/eth-wire/src/types/blocks.rs create mode 100644 crates/net/eth-wire/src/types/receipts.rs create mode 100644 crates/net/eth-wire/src/types/response.rs create mode 100644 crates/net/eth-wire/src/types/state.rs create mode 100644 crates/net/eth-wire/src/types/transactions.rs create mode 100644 crates/net/eth-wire/testdata/bsc_new_block_network_one create mode 100644 crates/net/eth-wire/testdata/bsc_new_block_network_two create mode 100644 crates/net/eth-wire/testdata/new_block_network_rlp create mode 100644 crates/net/eth-wire/testdata/new_pooled_transactions_network_rlp create mode 100644 crates/net/eth-wire/tests/new_block.rs create mode 100644 crates/net/eth-wire/tests/new_pooled_transactions.rs diff --git a/crates/net/eth-wire/src/lib.rs b/crates/net/eth-wire/src/lib.rs index 6d9221d16..9615eb3ae 100644 --- a/crates/net/eth-wire/src/lib.rs +++ b/crates/net/eth-wire/src/lib.rs @@ -12,5 +12,6 @@ pub use tokio_util::codec::{ pub mod error; mod stream; pub mod types; +pub use types::*; pub use stream::EthStream; diff --git a/crates/net/eth-wire/src/types/blocks.rs b/crates/net/eth-wire/src/types/blocks.rs new file mode 100644 index 000000000..ec535a0e9 --- /dev/null +++ b/crates/net/eth-wire/src/types/blocks.rs @@ -0,0 +1,545 @@ +//! Implements the `GetBlockHeaders`, `GetBlockBodies`, `BlockHeaders`, and `BlockBodies` message +//! types. +use reth_primitives::{Header, TransactionSigned, H256}; +use reth_rlp::{ + Decodable, DecodeError, Encodable, RlpDecodable, RlpDecodableWrapper, RlpEncodable, + RlpEncodableWrapper, +}; + +use super::RawBlockBody; + +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +/// Either a block hash _or_ a block number +pub enum BlockHashOrNumber { + /// A block hash + Hash(H256), + /// A block number + Number(u64), +} + +/// Allows for RLP encoding of either a block hash or block number +impl Encodable for BlockHashOrNumber { + fn length(&self) -> usize { + match self { + Self::Hash(block_hash) => block_hash.length(), + Self::Number(block_number) => block_number.length(), + } + } + fn encode(&self, out: &mut dyn bytes::BufMut) { + match self { + Self::Hash(block_hash) => block_hash.encode(out), + Self::Number(block_number) => block_number.encode(out), + } + } +} + +/// Allows for RLP decoding of a block hash or block number +impl Decodable for BlockHashOrNumber { + fn decode(buf: &mut &[u8]) -> Result { + let header: u8 = *buf.first().ok_or(DecodeError::InputTooShort)?; + // if the byte string is exactly 32 bytes, decode it into a Hash + // 0xa0 = 0x80 (start of string) + 0x20 (32, length of string) + if header == 0xa0 { + // strip the first byte, parsing the rest of the string. + // If the rest of the string fails to decode into 32 bytes, we'll bubble up the + // decoding error. + let hash = H256::decode(buf)?; + Ok(Self::Hash(hash)) + } else { + // a block number when encoded as bytes ranges from 0 to any number of bytes - we're + // going to accept numbers which fit in less than 64 bytes. + // Any data larger than this which is not caught by the Hash decoding should error and + // is considered an invalid block number. + Ok(Self::Number(u64::decode(buf)?)) + } + } +} + +/// A request for a peer to return block headers starting at the requested block. +/// The peer must return at most [`limit`](#structfield.limit) headers. +/// If the [`reverse`](#structfield.reverse) field is `true`, the headers will be returned starting +/// at [`start_block`](#structfield.start_block), traversing towards the genesis block. +/// Otherwise, headers will be returned starting at [`start_block`](#structfield.start_block), +/// traversing towards the latest block. +/// +/// If the [`skip`](#structfield.skip) field is non-zero, the peer must skip that amount of headers +/// in the the direction specified by [`reverse`](#structfield.reverse). +#[derive(Copy, Clone, Debug, PartialEq, Eq, RlpEncodable, RlpDecodable)] +pub struct GetBlockHeaders { + /// The block number or hash that the peer should start returning headers from. + pub start_block: BlockHashOrNumber, + + /// The maximum number of headers to return. + pub limit: u64, + + /// The number of blocks that the node should skip while traversing and returning headers. + /// A skip value of zero denotes that the peer should return contiguous heaaders, starting from + /// [`start_block`](#structfield.start_block) and returning at most + /// [`limit`](#structfield.limit) headers. + pub skip: u32, + + /// Whether or not the headers should be returned in reverse order. + pub reverse: bool, +} + +/// The response to [`GetBlockHeaders`], containing headers if any headers were found. +#[derive(Clone, Debug, PartialEq, Eq, RlpEncodableWrapper, RlpDecodableWrapper)] +pub struct BlockHeaders( + /// The requested headers. + pub Vec
, +); + +impl From> for BlockHeaders { + fn from(headers: Vec
) -> Self { + BlockHeaders(headers) + } +} + +/// A request for a peer to return block bodies for the given block hashes. +#[derive(Clone, Debug, PartialEq, Eq, RlpEncodableWrapper, RlpDecodableWrapper)] +pub struct GetBlockBodies( + /// The block hashes to request bodies for. + pub Vec, +); + +impl From> for GetBlockBodies { + fn from(hashes: Vec) -> Self { + GetBlockBodies(hashes) + } +} + +/// A response to [`GetBlockBodies`], containing bodies if any bodies were found. +#[derive(Clone, Debug, PartialEq, Eq, RlpEncodable, RlpDecodable)] +pub struct BlockBody { + /// Transactions in the block + pub transactions: Vec, + /// Uncle headers for the given block + pub ommers: Vec
, +} + +impl BlockBody { + /// Create a [`Block`] from the body and its header. + pub fn create_block(&self, header: &Header) -> RawBlockBody { + RawBlockBody { + header: header.clone(), + transactions: self.transactions.clone(), + ommers: self.ommers.clone(), + } + } +} + +/// The response to [`GetBlockBodies`], containing the block bodies that the peer knows about if +/// any were found. +#[derive(Clone, Debug, PartialEq, Eq, RlpEncodableWrapper, RlpDecodableWrapper)] +pub struct BlockBodies( + /// The requested block bodies, each of which should correspond to a hash in the request. + pub Vec, +); + +impl From> for BlockBodies { + fn from(bodies: Vec) -> Self { + BlockBodies(bodies) + } +} + +#[cfg(test)] +mod test { + use std::str::FromStr; + + use crate::types::{ + message::RequestPair, BlockBodies, BlockHeaders, GetBlockBodies, GetBlockHeaders, + }; + use hex_literal::hex; + use reth_primitives::{ + Header, Signature, Transaction, TransactionKind, TransactionSigned, U256, + }; + use reth_rlp::{Decodable, Encodable}; + + use super::{BlockBody, BlockHashOrNumber}; + + #[test] + fn decode_hash() { + // this is a valid 32 byte rlp string + let rlp = hex!("a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + let decoded_number = BlockHashOrNumber::decode(&mut &rlp[..]).unwrap(); + let full_bytes = [0xff; 32].into(); + let expected = BlockHashOrNumber::Hash(full_bytes); + assert_eq!(expected, decoded_number); + } + + #[test] + fn decode_number() { + // this is a valid 64 bit number + let rlp = hex!("88ffffffffffffffff"); + let decoded_number = BlockHashOrNumber::decode(&mut &rlp[..]).unwrap(); + let expected = BlockHashOrNumber::Number(u64::MAX); + assert_eq!(expected, decoded_number); + } + + #[test] + fn decode_largest_single_byte() { + // the largest single byte is 0x7f, so we should be able to decode this into a u64 + let rlp = hex!("7f"); + let decoded_number = BlockHashOrNumber::decode(&mut &rlp[..]).unwrap(); + let expected = BlockHashOrNumber::Number(0x7fu64); + assert_eq!(expected, decoded_number); + } + + #[test] + fn decode_long_hash() { + // let's try a 33 byte long string + // 0xa1 = 0x80 (start of string) + 0x21 (33, length of string) + let long_rlp = hex!("a1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + let decode_result = BlockHashOrNumber::decode(&mut &long_rlp[..]); + if decode_result.is_ok() { + panic!("Decoding a bytestring longer than 32 bytes should not decode successfully"); + } + } + + #[test] + fn decode_long_number() { + // let's try a 72 bit number + // 0x89 = 0x80 (start of string) + 0x09 (9, length of string) + let long_number = hex!("89ffffffffffffffffff"); + let decode_result = BlockHashOrNumber::decode(&mut &long_number[..]); + if decode_result.is_ok() { + panic!("Decoding a number longer than 64 bits (but not exactly 32 bytes) should not decode successfully"); + } + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn encode_get_block_header() { + let expected = hex!( + "e8820457e4a000000000000000000000000000000000000000000000000000000000deadc0de050580" + ); + let mut data = vec![]; + RequestPair:: { + request_id: 1111, + message: GetBlockHeaders { + start_block: BlockHashOrNumber::Hash( + hex!("00000000000000000000000000000000000000000000000000000000deadc0de").into(), + ), + limit: 5, + skip: 5, + reverse: false, + }, + } + .encode(&mut data); + assert_eq!(data, expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn decode_get_block_header() { + let data = hex!( + "e8820457e4a000000000000000000000000000000000000000000000000000000000deadc0de050580" + ); + let expected = RequestPair:: { + request_id: 1111, + message: GetBlockHeaders { + start_block: BlockHashOrNumber::Hash( + hex!("00000000000000000000000000000000000000000000000000000000deadc0de").into(), + ), + limit: 5, + skip: 5, + reverse: false, + }, + }; + let result = RequestPair::decode(&mut &data[..]); + assert_eq!(result.unwrap(), expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn encode_get_block_header_number() { + let expected = hex!("ca820457c682270f050580"); + let mut data = vec![]; + RequestPair:: { + request_id: 1111, + message: GetBlockHeaders { + start_block: BlockHashOrNumber::Number(9999), + limit: 5, + skip: 5, + reverse: false, + }, + } + .encode(&mut data); + assert_eq!(data, expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn decode_get_block_header_number() { + let data = hex!("ca820457c682270f050580"); + let expected = RequestPair:: { + request_id: 1111, + message: GetBlockHeaders { + start_block: BlockHashOrNumber::Number(9999), + limit: 5, + skip: 5, + reverse: false, + }, + }; + let result = RequestPair::decode(&mut &data[..]); + assert_eq!(result.unwrap(), expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn encode_block_header() { + // [ (f90202) 0x0457 = 1111, [ (f901fc) [ (f901f9) header ] ] ] + let expected = hex!("f90202820457f901fcf901f9a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008208ae820d0582115c8215b3821a0a827788a00000000000000000000000000000000000000000000000000000000000000000880000000000000000"); + let mut data = vec![]; + RequestPair:: { + request_id: 1111, + message: BlockHeaders(vec![ + Header { + parent_hash: hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + ommers_hash: hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + beneficiary: hex!("0000000000000000000000000000000000000000").into(), + state_root: hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + transactions_root: hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + receipts_root: hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + logs_bloom: hex!("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000").into(), + difficulty: 0x8aeu64.into(), + number: 0xd05u64, + gas_limit: 0x115cu64, + gas_used: 0x15b3u64, + timestamp: 0x1a0au64, + extra_data: hex!("7788")[..].into(), + mix_hash: hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + nonce: 0x0000000000000000u64, + base_fee_per_gas: None, + }, + ]), + }.encode(&mut data); + assert_eq!(data, expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn decode_block_header() { + let data = hex!("f90202820457f901fcf901f9a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008208ae820d0582115c8215b3821a0a827788a00000000000000000000000000000000000000000000000000000000000000000880000000000000000"); + let expected = RequestPair:: { + request_id: 1111, + message: BlockHeaders(vec![ + Header { + parent_hash: hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + ommers_hash: hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + beneficiary: hex!("0000000000000000000000000000000000000000").into(), + state_root: hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + transactions_root: hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + receipts_root: hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + logs_bloom: hex!("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000").into(), + difficulty: 0x8aeu64.into(), + number: 0xd05u64, + gas_limit: 0x115cu64, + gas_used: 0x15b3u64, + timestamp: 0x1a0au64, + extra_data: hex!("7788")[..].into(), + mix_hash: hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + nonce: 0x0000000000000000u64, + base_fee_per_gas: None, + }, + ]), + }; + let result = RequestPair::decode(&mut &data[..]); + assert_eq!(result.unwrap(), expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn encode_get_block_bodies() { + let expected = hex!("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"); + let mut data = vec![]; + RequestPair:: { + request_id: 1111, + message: GetBlockBodies(vec![ + hex!("00000000000000000000000000000000000000000000000000000000deadc0de").into(), + hex!("00000000000000000000000000000000000000000000000000000000feedbeef").into(), + ]), + } + .encode(&mut data); + assert_eq!(data, expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn decode_get_block_bodies() { + let data = hex!("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"); + let expected = RequestPair:: { + request_id: 1111, + message: GetBlockBodies(vec![ + hex!("00000000000000000000000000000000000000000000000000000000deadc0de").into(), + hex!("00000000000000000000000000000000000000000000000000000000feedbeef").into(), + ]), + }; + let result = RequestPair::decode(&mut &data[..]); + assert_eq!(result.unwrap(), expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn encode_block_bodies() { + let expected = + hex!("f902dc820457f902d6f902d3f8d2f867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10f867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afbf901fcf901f9a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008208ae820d0582115c8215b3821a0a827788a00000000000000000000000000000000000000000000000000000000000000000880000000000000000" + ); + let mut data = vec![]; + let request = RequestPair:: { + request_id: 1111, + message: BlockBodies(vec![ + BlockBody { + transactions: vec![ + TransactionSigned::from_transaction_and_signature(Transaction::Legacy { + chain_id: Some(1), + nonce: 0x8u64, + gas_price: 0x4a817c808u64, + gas_limit: 0x2e248u64, + to: + TransactionKind::Call(hex!("3535353535353535353535353535353535353535").into()), + value: 0x200u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: false, + r: + U256::from_str("64b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12").unwrap(), + s: + U256::from_str("64b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10").unwrap(), + } + ), + TransactionSigned::from_transaction_and_signature(Transaction::Legacy { + chain_id: Some(1), + nonce: 0x9u64, + gas_price: 0x4a817c809u64, + gas_limit: 0x33450u64, + to: + TransactionKind::Call(hex!("3535353535353535353535353535353535353535").into()), + value: 0x2d9u64.into(), + input: Default::default(), + }, Signature { + odd_y_parity: false, + r: + U256::from_str("52f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb").unwrap(), + s: + U256::from_str("52f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb").unwrap(), + }, + ), + ], + ommers: vec![ + Header { + parent_hash: + hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + ommers_hash: + hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + beneficiary: hex!("0000000000000000000000000000000000000000").into(), + state_root: + hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + transactions_root: + hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + receipts_root: + hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + logs_bloom: + hex!("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ).into(), difficulty: 0x8aeu64.into(), + number: 0xd05u64, + gas_limit: 0x115cu64, + gas_used: 0x15b3u64, + timestamp: 0x1a0au64, + extra_data: hex!("7788")[..].into(), + mix_hash: + hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + nonce: 0x0000000000000000u64, + base_fee_per_gas: None, + }, + ], + } + ]), + }; + request.encode(&mut data); + assert_eq!(data, expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn decode_block_bodies() { + let data = + hex!("f902dc820457f902d6f902d3f8d2f867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10f867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afbf901fcf901f9a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008208ae820d0582115c8215b3821a0a827788a00000000000000000000000000000000000000000000000000000000000000000880000000000000000" + ); + let expected = RequestPair:: { + request_id: 1111, + message: BlockBodies(vec![ + BlockBody { + transactions: vec![ + TransactionSigned::from_transaction_and_signature(Transaction::Legacy { + chain_id: Some(1), + nonce: 0x8u64, + gas_price: 0x4a817c808u64, + gas_limit: 0x2e248u64, + to: + TransactionKind::Call(hex!("3535353535353535353535353535353535353535").into()), + value: 0x200u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: false, + r: + U256::from_str("64b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12").unwrap(), + s: + U256::from_str("64b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10").unwrap(), + } + ), + TransactionSigned::from_transaction_and_signature(Transaction::Legacy { + chain_id: Some(1), + nonce: 0x9u64, + gas_price: 0x4a817c809u64, + gas_limit: 0x33450u64, + to: + TransactionKind::Call(hex!("3535353535353535353535353535353535353535").into()), + value: 0x2d9u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: false, + r: + U256::from_str("52f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb").unwrap(), + s: + U256::from_str("52f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb").unwrap(), + }, + ), + ], + ommers: vec![ + Header { + parent_hash: + hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + ommers_hash: + hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + beneficiary: hex!("0000000000000000000000000000000000000000").into(), + state_root: + hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + transactions_root: + hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + receipts_root: + hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + logs_bloom: + hex!("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ).into(), difficulty: 0x8aeu64.into(), + number: 0xd05u64, + gas_limit: 0x115cu64, + gas_used: 0x15b3u64, + timestamp: 0x1a0au64, + extra_data: hex!("7788")[..].into(), + mix_hash: + hex!("0000000000000000000000000000000000000000000000000000000000000000").into(), + nonce: 0x0000000000000000u64, + base_fee_per_gas: None, + }, + ], + } + ]), + }; + let result = RequestPair::decode(&mut &data[..]).unwrap(); + assert_eq!(result, expected); + } +} diff --git a/crates/net/eth-wire/src/types/broadcast.rs b/crates/net/eth-wire/src/types/broadcast.rs index 09e4f284e..601aaac38 100644 --- a/crates/net/eth-wire/src/types/broadcast.rs +++ b/crates/net/eth-wire/src/types/broadcast.rs @@ -1,4 +1,5 @@ //! Types for broadcasting new data. +use reth_primitives::{Header, TransactionSigned, H256, U128}; use reth_rlp::{RlpDecodable, RlpDecodableWrapper, RlpEncodable, RlpEncodableWrapper}; /// This informs peers of new blocks that have appeared on the network. @@ -13,7 +14,7 @@ pub struct NewBlockHashes( #[derive(Clone, Debug, PartialEq, Eq, RlpEncodable, RlpDecodable)] pub struct BlockHashNumber { /// The block hash - pub hash: reth_primitives::H256, + pub hash: H256, /// The block number pub number: u64, } @@ -29,3 +30,60 @@ impl From for Vec { v.0 } } + +/// A block body, including transactions and uncle headers. +#[derive(Debug, Clone, PartialEq, Eq, Default, RlpEncodable, RlpDecodable)] +pub struct RawBlockBody { + /// This block's header + pub header: Header, + /// Transactions in this block. + pub transactions: Vec, + /// Uncle block headers. + pub ommers: Vec
, +} + +/// A new block with the current total difficulty, which includes the difficulty of the returned +/// block. +#[derive(Clone, Debug, PartialEq, Eq, RlpEncodable, RlpDecodable)] +pub struct NewBlock { + /// A new block. + pub block: RawBlockBody, + /// The current total difficulty. + pub td: U128, +} + +/// This informs peers of transactions that have appeared on the network and are not yet included +/// in a block. +#[derive(Clone, Debug, PartialEq, Eq, RlpEncodableWrapper, RlpDecodableWrapper)] +pub struct Transactions( + /// New transactions for the peer to include in its mempool. + pub Vec, +); + +impl From> for Transactions { + fn from(txs: Vec) -> Self { + Transactions(txs) + } +} + +impl From for Vec { + fn from(txs: Transactions) -> Self { + txs.0 + } +} + +/// This informs peers of transaction hashes for transactions that have appeared on the network, +/// but have not been included in a block. +#[derive(Clone, Debug, PartialEq, Eq, RlpEncodableWrapper, RlpDecodableWrapper)] +pub struct NewPooledTransactionHashes( + /// Transaction hashes for new transactions that have appeared on the network. + /// Clients should request the transactions with the given hashes using a + /// [`GetPooledTransactions`](crate::GetPooledTransactions) message. + pub Vec, +); + +impl From> for NewPooledTransactionHashes { + fn from(v: Vec) -> Self { + NewPooledTransactionHashes(v) + } +} diff --git a/crates/net/eth-wire/src/types/message.rs b/crates/net/eth-wire/src/types/message.rs index 3249cc2fd..573d482b6 100644 --- a/crates/net/eth-wire/src/types/message.rs +++ b/crates/net/eth-wire/src/types/message.rs @@ -1,5 +1,9 @@ #![allow(missing_docs)] -use super::{broadcast::NewBlockHashes, Status}; +use super::{ + broadcast::NewBlockHashes, BlockBodies, BlockHeaders, GetBlockBodies, GetBlockHeaders, + GetNodeData, GetPooledTransactions, GetReceipts, NewBlock, NewPooledTransactionHashes, + NodeData, PooledTransactions, Receipts, Status, Transactions, +}; use bytes::Buf; use reth_rlp::{length_of_length, Decodable, Encodable, Header}; use std::fmt::Debug; @@ -22,52 +26,51 @@ impl ProtocolMessage { EthMessageID::NewBlockHashes => { EthMessage::NewBlockHashes(NewBlockHashes::decode(buf)?) } - _ => unimplemented!(), - // EthMessageID::NewBlock => EthMessage::NewBlock(Box::new(NewBlock::decode(buf)?)), - // EthMessageID::Transactions => EthMessage::Transactions(Transactions::decode(buf)?), - // EthMessageID::NewPooledTransactionHashes => { - // EthMessage::NewPooledTransactionHashes(NewPooledTransactionHashes::decode(buf)?) - // } - // EthMessageID::GetBlockHeaders => { - // let request_pair = RequestPair::::decode(buf)?; - // EthMessage::GetBlockHeaders(request_pair) - // } - // EthMessageID::BlockHeaders => { - // let request_pair = RequestPair::::decode(buf)?; - // EthMessage::BlockHeaders(request_pair) - // } - // EthMessageID::GetBlockBodies => { - // let request_pair = RequestPair::::decode(buf)?; - // EthMessage::GetBlockBodies(request_pair) - // } - // EthMessageID::BlockBodies => { - // let request_pair = RequestPair::::decode(buf)?; - // EthMessage::BlockBodies(request_pair) - // } - // EthMessageID::GetPooledTransactions => { - // let request_pair = RequestPair::::decode(buf)?; - // EthMessage::GetPooledTransactions(request_pair) - // } - // EthMessageID::PooledTransactions => { - // let request_pair = RequestPair::::decode(buf)?; - // EthMessage::PooledTransactions(request_pair) - // } - // EthMessageID::GetNodeData => { - // let request_pair = RequestPair::::decode(buf)?; - // EthMessage::GetNodeData(request_pair) - // } - // EthMessageID::NodeData => { - // let request_pair = RequestPair::::decode(buf)?; - // EthMessage::NodeData(request_pair) - // } - // EthMessageID::GetReceipts => { - // let request_pair = RequestPair::::decode(buf)?; - // EthMessage::GetReceipts(request_pair) - // } - // EthMessageID::Receipts => { - // let request_pair = RequestPair::::decode(buf)?; - // EthMessage::Receipts(request_pair) - // } + EthMessageID::NewBlock => EthMessage::NewBlock(Box::new(NewBlock::decode(buf)?)), + EthMessageID::Transactions => EthMessage::Transactions(Transactions::decode(buf)?), + EthMessageID::NewPooledTransactionHashes => { + EthMessage::NewPooledTransactionHashes(NewPooledTransactionHashes::decode(buf)?) + } + EthMessageID::GetBlockHeaders => { + let request_pair = RequestPair::::decode(buf)?; + EthMessage::GetBlockHeaders(request_pair) + } + EthMessageID::BlockHeaders => { + let request_pair = RequestPair::::decode(buf)?; + EthMessage::BlockHeaders(request_pair) + } + EthMessageID::GetBlockBodies => { + let request_pair = RequestPair::::decode(buf)?; + EthMessage::GetBlockBodies(request_pair) + } + EthMessageID::BlockBodies => { + let request_pair = RequestPair::::decode(buf)?; + EthMessage::BlockBodies(request_pair) + } + EthMessageID::GetPooledTransactions => { + let request_pair = RequestPair::::decode(buf)?; + EthMessage::GetPooledTransactions(request_pair) + } + EthMessageID::PooledTransactions => { + let request_pair = RequestPair::::decode(buf)?; + EthMessage::PooledTransactions(request_pair) + } + EthMessageID::GetNodeData => { + let request_pair = RequestPair::::decode(buf)?; + EthMessage::GetNodeData(request_pair) + } + EthMessageID::NodeData => { + let request_pair = RequestPair::::decode(buf)?; + EthMessage::NodeData(request_pair) + } + EthMessageID::GetReceipts => { + let request_pair = RequestPair::::decode(buf)?; + EthMessage::GetReceipts(request_pair) + } + EthMessageID::Receipts => { + let request_pair = RequestPair::::decode(buf)?; + EthMessage::Receipts(request_pair) + } }; Ok(ProtocolMessage { message_type, message }) } @@ -116,23 +119,23 @@ impl From for ProtocolMessage { pub enum EthMessage { // Status is required for the protocol handshake Status(Status), - // // The following messages are broadcast to the network + // The following messages are broadcast to the network NewBlockHashes(NewBlockHashes), - // NewBlock(Box), - // Transactions(Transactions), - // NewPooledTransactionHashes(NewPooledTransactionHashes), + NewBlock(Box), + Transactions(Transactions), + NewPooledTransactionHashes(NewPooledTransactionHashes), - // // The following messages are request-response message pairs - // GetBlockHeaders(RequestPair), - // BlockHeaders(RequestPair), - // GetBlockBodies(RequestPair), - // BlockBodies(RequestPair), - // GetPooledTransactions(RequestPair), - // PooledTransactions(RequestPair), - // GetNodeData(RequestPair), - // NodeData(RequestPair), - // GetReceipts(RequestPair), - // Receipts(RequestPair), + // The following messages are request-response message pairs + GetBlockHeaders(RequestPair), + BlockHeaders(RequestPair), + GetBlockBodies(RequestPair), + BlockBodies(RequestPair), + GetPooledTransactions(RequestPair), + PooledTransactions(RequestPair), + GetNodeData(RequestPair), + NodeData(RequestPair), + GetReceipts(RequestPair), + Receipts(RequestPair), } impl EthMessage { @@ -141,20 +144,19 @@ impl EthMessage { match self { EthMessage::Status(_) => EthMessageID::Status, EthMessage::NewBlockHashes(_) => EthMessageID::NewBlockHashes, - // EthMessage::NewBlock(_) => EthMessageID::NewBlock, - // EthMessage::Transactions(_) => EthMessageID::Transactions, - // EthMessage::NewPooledTransactionHashes(_) => - // EthMessageID::NewPooledTransactionHashes, EthMessage::GetBlockHeaders(_) - // => EthMessageID::GetBlockHeaders, EthMessage::BlockHeaders(_) => - // EthMessageID::BlockHeaders, EthMessage::GetBlockBodies(_) => - // EthMessageID::GetBlockBodies, EthMessage::BlockBodies(_) => - // EthMessageID::BlockBodies, EthMessage::GetPooledTransactions(_) => - // EthMessageID::GetPooledTransactions, EthMessage::PooledTransactions(_) => - // EthMessageID::PooledTransactions, EthMessage::GetNodeData(_) => - // EthMessageID::GetNodeData, EthMessage::NodeData(_) => - // EthMessageID::NodeData, EthMessage::GetReceipts(_) => - // EthMessageID::GetReceipts, EthMessage::Receipts(_) => - // EthMessageID::Receipts, + EthMessage::NewBlock(_) => EthMessageID::NewBlock, + EthMessage::Transactions(_) => EthMessageID::Transactions, + EthMessage::NewPooledTransactionHashes(_) => EthMessageID::NewPooledTransactionHashes, + EthMessage::GetBlockHeaders(_) => EthMessageID::GetBlockHeaders, + EthMessage::BlockHeaders(_) => EthMessageID::BlockHeaders, + EthMessage::GetBlockBodies(_) => EthMessageID::GetBlockBodies, + EthMessage::BlockBodies(_) => EthMessageID::BlockBodies, + EthMessage::GetPooledTransactions(_) => EthMessageID::GetPooledTransactions, + EthMessage::PooledTransactions(_) => EthMessageID::PooledTransactions, + EthMessage::GetNodeData(_) => EthMessageID::GetNodeData, + EthMessage::NodeData(_) => EthMessageID::NodeData, + EthMessage::GetReceipts(_) => EthMessageID::GetReceipts, + EthMessage::Receipts(_) => EthMessageID::Receipts, } } } @@ -164,38 +166,38 @@ impl Encodable for EthMessage { match self { EthMessage::Status(status) => status.length(), EthMessage::NewBlockHashes(new_block_hashes) => new_block_hashes.length(), - // EthMessage::NewBlock(new_block) => new_block.length(), - // EthMessage::Transactions(transactions) => transactions.length(), - // EthMessage::NewPooledTransactionHashes(hashes) => hashes.length(), - // EthMessage::GetBlockHeaders(request) => request.length(), - // EthMessage::BlockHeaders(headers) => headers.length(), - // EthMessage::GetBlockBodies(request) => request.length(), - // EthMessage::BlockBodies(bodies) => bodies.length(), - // EthMessage::GetPooledTransactions(request) => request.length(), - // EthMessage::PooledTransactions(transactions) => transactions.length(), - // EthMessage::GetNodeData(request) => request.length(), - // EthMessage::NodeData(data) => data.length(), - // EthMessage::GetReceipts(request) => request.length(), - // EthMessage::Receipts(receipts) => receipts.length(), + EthMessage::NewBlock(new_block) => new_block.length(), + EthMessage::Transactions(transactions) => transactions.length(), + EthMessage::NewPooledTransactionHashes(hashes) => hashes.length(), + EthMessage::GetBlockHeaders(request) => request.length(), + EthMessage::BlockHeaders(headers) => headers.length(), + EthMessage::GetBlockBodies(request) => request.length(), + EthMessage::BlockBodies(bodies) => bodies.length(), + EthMessage::GetPooledTransactions(request) => request.length(), + EthMessage::PooledTransactions(transactions) => transactions.length(), + EthMessage::GetNodeData(request) => request.length(), + EthMessage::NodeData(data) => data.length(), + EthMessage::GetReceipts(request) => request.length(), + EthMessage::Receipts(receipts) => receipts.length(), } } fn encode(&self, out: &mut dyn bytes::BufMut) { match self { EthMessage::Status(status) => status.encode(out), EthMessage::NewBlockHashes(new_block_hashes) => new_block_hashes.encode(out), - // EthMessage::NewBlock(new_block) => new_block.encode(out), - // EthMessage::Transactions(transactions) => transactions.encode(out), - // EthMessage::NewPooledTransactionHashes(hashes) => hashes.encode(out), - // EthMessage::GetBlockHeaders(request) => request.encode(out), - // EthMessage::BlockHeaders(headers) => headers.encode(out), - // EthMessage::GetBlockBodies(request) => request.encode(out), - // EthMessage::BlockBodies(bodies) => bodies.encode(out), - // EthMessage::GetPooledTransactions(request) => request.encode(out), - // EthMessage::PooledTransactions(transactions) => transactions.encode(out), - // EthMessage::GetNodeData(request) => request.encode(out), - // EthMessage::NodeData(data) => data.encode(out), - // EthMessage::GetReceipts(request) => request.encode(out), - // EthMessage::Receipts(receipts) => receipts.encode(out), + EthMessage::NewBlock(new_block) => new_block.encode(out), + EthMessage::Transactions(transactions) => transactions.encode(out), + EthMessage::NewPooledTransactionHashes(hashes) => hashes.encode(out), + EthMessage::GetBlockHeaders(request) => request.encode(out), + EthMessage::BlockHeaders(headers) => headers.encode(out), + EthMessage::GetBlockBodies(request) => request.encode(out), + EthMessage::BlockBodies(bodies) => bodies.encode(out), + EthMessage::GetPooledTransactions(request) => request.encode(out), + EthMessage::PooledTransactions(transactions) => transactions.encode(out), + EthMessage::GetNodeData(request) => request.encode(out), + EthMessage::NodeData(data) => data.encode(out), + EthMessage::GetReceipts(request) => request.encode(out), + EthMessage::Receipts(receipts) => receipts.encode(out), } } } diff --git a/crates/net/eth-wire/src/types/mod.rs b/crates/net/eth-wire/src/types/mod.rs index 4f42c5e67..83bb844c5 100644 --- a/crates/net/eth-wire/src/types/mod.rs +++ b/crates/net/eth-wire/src/types/mod.rs @@ -11,4 +11,17 @@ pub mod forkid; pub mod message; pub use message::{EthMessage, EthMessageID, ProtocolMessage}; +pub mod blocks; +pub use blocks::*; + pub mod broadcast; +pub use broadcast::*; + +pub mod transactions; +pub use transactions::*; + +pub mod state; +pub use state::*; + +pub mod receipts; +pub use receipts::*; diff --git a/crates/net/eth-wire/src/types/receipts.rs b/crates/net/eth-wire/src/types/receipts.rs new file mode 100644 index 000000000..463792f5c --- /dev/null +++ b/crates/net/eth-wire/src/types/receipts.rs @@ -0,0 +1,124 @@ +//! Implements the `GetReceipts` and `Receipts` message types. +use reth_primitives::{Receipt, H256}; +use reth_rlp::{RlpDecodableWrapper, RlpEncodableWrapper}; + +/// A request for transaction receipts from the given block hashes. +#[derive(Clone, Debug, PartialEq, Eq, RlpEncodableWrapper, RlpDecodableWrapper)] +pub struct GetReceipts( + /// The block hashes to request receipts for. + pub Vec, +); + +/// The response to [`GetReceipts`], containing receipt lists that correspond to each block +/// requested. +#[derive(Clone, Debug, PartialEq, Eq, RlpEncodableWrapper, RlpDecodableWrapper)] +pub struct Receipts( + /// Each receipt hash should correspond to a block hash in the request. + pub Vec>, +); + +#[cfg(test)] +mod test { + use crate::types::{message::RequestPair, GetReceipts, Receipts}; + use hex_literal::hex; + use reth_primitives::{Log, Receipt, TxType}; + use reth_rlp::{Decodable, Encodable}; + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn encode_get_receipts() { + let expected = hex!("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"); + let mut data = vec![]; + let request = RequestPair:: { + request_id: 1111, + message: GetReceipts(vec![ + hex!("00000000000000000000000000000000000000000000000000000000deadc0de").into(), + hex!("00000000000000000000000000000000000000000000000000000000feedbeef").into(), + ]), + }; + request.encode(&mut data); + assert_eq!(data, expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn decode_get_receipts() { + let data = hex!("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"); + let request = RequestPair::::decode(&mut &data[..]).unwrap(); + assert_eq!( + request, + RequestPair:: { + request_id: 1111, + message: GetReceipts(vec![ + hex!("00000000000000000000000000000000000000000000000000000000deadc0de").into(), + hex!("00000000000000000000000000000000000000000000000000000000feedbeef").into(), + ]) + } + ); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn encode_receipts() { + let expected = hex!("f90172820457f9016cf90169f901668001b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f85ff85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ff"); + let mut data = vec![]; + let request = RequestPair:: { + request_id: 1111, + message: Receipts(vec![ + vec![ + Receipt { + tx_type: TxType::Legacy, + bloom: hex!("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000").into(), + cumulative_gas_used: 0x1u64, + logs: vec![ + Log { + address: hex!("0000000000000000000000000000000000000011").into(), + topics: vec![ + hex!("000000000000000000000000000000000000000000000000000000000000dead").into(), + hex!("000000000000000000000000000000000000000000000000000000000000beef").into(), + ], + data: hex!("0100ff")[..].into(), + }, + ], + success: false, + }, + ], + ]), + }; + request.encode(&mut data); + assert_eq!(data, expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn decode_receipts() { + let data = hex!("f90172820457f9016cf90169f901668001b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f85ff85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ff"); + let request = RequestPair::::decode(&mut &data[..]).unwrap(); + assert_eq!( + request, + RequestPair:: { + request_id: 1111, + message: Receipts(vec![ + vec![ + Receipt { + tx_type: TxType::Legacy, + bloom: hex!("00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000").into(), + cumulative_gas_used: 0x1u64, + logs: vec![ + Log { + address: hex!("0000000000000000000000000000000000000011").into(), + topics: vec![ + hex!("000000000000000000000000000000000000000000000000000000000000dead").into(), + hex!("000000000000000000000000000000000000000000000000000000000000beef").into(), + ], + data: hex!("0100ff")[..].into(), + }, + ], + success: false, + }, + ], + ]), + } + ); + } +} diff --git a/crates/net/eth-wire/src/types/response.rs b/crates/net/eth-wire/src/types/response.rs new file mode 100644 index 000000000..dfcf5ed56 --- /dev/null +++ b/crates/net/eth-wire/src/types/response.rs @@ -0,0 +1,29 @@ +use crate::{ + BlockBodies, BlockHeaders, NodeData, PooledTransactions, Receipts, RequestPair, Status, +}; + +// This type is analogous to the `zebra_network::Response` type. +/// An ethereum network response for version 66. +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum Response { + /// The request does not have a response. + Nil, + + /// The [`Status`](super::Status) message response in the eth protocol handshake. + Status(Status), + + /// The response to a [`Request::GetBlockHeaders`](super::Request::GetBlockHeaders) request. + BlockHeaders(RequestPair), + + /// The response to a [`Request::GetBlockBodies`](super::Request::GetBlockBodies) request. + BlockBodies(RequestPair), + + /// The response to a [`Request::GetPooledTransactions`](super::Request::GetPooledTransactions) request. + PooledTransactions(RequestPair), + + /// The response to a [`Request::GetNodeData`](super::Request::GetNodeData) request. + NodeData(RequestPair), + + /// The response to a [`Request::GetReceipts`](super::Request::GetReceipts) request. + Receipts(RequestPair), +} diff --git a/crates/net/eth-wire/src/types/state.rs b/crates/net/eth-wire/src/types/state.rs new file mode 100644 index 000000000..cbec17588 --- /dev/null +++ b/crates/net/eth-wire/src/types/state.rs @@ -0,0 +1,91 @@ +//! Implements the `GetNodeData` and `NodeData` message types. +use reth_primitives::H256; +use reth_rlp::{RlpDecodableWrapper, RlpEncodableWrapper}; + +/// A request for state tree nodes corresponding to the given hashes. +/// This message was removed in `eth/67`, only clients running `eth/66` or earlier will respond to +/// this message. +#[derive(Clone, Debug, PartialEq, Eq, RlpEncodableWrapper, RlpDecodableWrapper)] +pub struct GetNodeData(pub Vec); + +/// The response to [`GetNodeData`], containing the state tree nodes or contract bytecode +/// corresponding to the requested hashes. +/// +/// Not all nodes are guaranteed to be returned by the peer. +/// This message was removed in `eth/67`. +#[derive(Clone, Debug, PartialEq, Eq, RlpEncodableWrapper, RlpDecodableWrapper)] +pub struct NodeData(pub Vec); + +#[cfg(test)] +mod test { + use hex_literal::hex; + + use crate::{message::RequestPair, GetNodeData, NodeData}; + use reth_rlp::{Decodable, Encodable}; + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn encode_get_node_data() { + let expected = hex!("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"); + let mut data = vec![]; + let request = RequestPair:: { + request_id: 1111, + message: GetNodeData(vec![ + hex!("00000000000000000000000000000000000000000000000000000000deadc0de").into(), + hex!("00000000000000000000000000000000000000000000000000000000feedbeef").into(), + ]), + }; + request.encode(&mut data); + assert_eq!(data, expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn decode_get_node_data() { + let data = hex!("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"); + let request = RequestPair::::decode(&mut &data[..]).unwrap(); + assert_eq!( + request, + RequestPair:: { + request_id: 1111, + message: GetNodeData(vec![ + hex!("00000000000000000000000000000000000000000000000000000000deadc0de").into(), + hex!("00000000000000000000000000000000000000000000000000000000feedbeef").into(), + ]) + } + ); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn encode_node_data() { + let expected = hex!("ce820457ca84deadc0de84feedbeef"); + let mut data = vec![]; + let request = RequestPair:: { + request_id: 1111, + message: NodeData(vec![ + hex!("deadc0de").as_slice().into(), + hex!("feedbeef").as_slice().into(), + ]), + }; + request.encode(&mut data); + assert_eq!(data, expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn decode_node_data() { + let data = hex!("ce820457ca84deadc0de84feedbeef"); + let request = RequestPair::::decode(&mut &data[..]).unwrap(); + assert_eq!( + request, + RequestPair:: { + request_id: 1111, + message: NodeData(vec![ + hex!("deadc0de").as_slice().into(), + hex!("feedbeef").as_slice().into(), + ]) + } + ); + } +} diff --git a/crates/net/eth-wire/src/types/transactions.rs b/crates/net/eth-wire/src/types/transactions.rs new file mode 100644 index 000000000..69adf36a0 --- /dev/null +++ b/crates/net/eth-wire/src/types/transactions.rs @@ -0,0 +1,548 @@ +//! Implements the `GetPooledTransactions` and `PooledTransactions` message types. +use reth_primitives::{TransactionSigned, H256}; +use reth_rlp::{RlpDecodableWrapper, RlpEncodableWrapper}; +use thiserror::Error; + +/// A list of transaction hashes that the peer would like transaction bodies for. +#[derive(Clone, Debug, PartialEq, Eq, RlpEncodableWrapper, RlpDecodableWrapper)] +pub struct GetPooledTransactions( + /// The transaction hashes to request transaction bodies for. + pub Vec, +); + +impl From> for GetPooledTransactions +where + T: Into, +{ + fn from(hashes: Vec) -> Self { + GetPooledTransactions(hashes.into_iter().map(|h| h.into()).collect()) + } +} + +/// The response to [`GetPooledTransactions`], containing the transaction bodies associated with +/// the requested hashes. +/// +/// This response may not contain all bodies requested, but the bodies should be in the same order +/// as the request's hashes. Hashes may be skipped, and the client should ensure that each body +/// corresponds to a requested hash. Hashes may need to be re-requested if the bodies are not +/// included in the response. +#[derive(Clone, Debug, PartialEq, Eq, RlpEncodableWrapper, RlpDecodableWrapper)] +pub struct PooledTransactions( + /// The transaction bodies, each of which should correspond to a requested hash. + pub Vec, +); + +/// An error that may occur while matching a [`GetPooledTransactions`] request to a +/// [`PooledTransactions`] response. +#[derive(Debug, Error)] +pub enum PooledTransactionsError { + /// Thrown if there are transactions that do not match a requested hash. + #[error("one or more transactions do not match a requested hash")] + UnmatchedTransactions, +} + +impl PooledTransactions { + /// Given a list of hashes, split the hashes into those that match a transaction in the + /// response, and those that do not. + /// Assumes the transactions are in the same order as the request's hashes. + pub fn split_transactions_by_hashes>( + &self, + hashes: Vec, + ) -> Result<(Vec, Vec), PooledTransactionsError> { + // we need to loop through each transaction, skipping over hashes that we don't have a + // transaction for + let mut missing_hashes = Vec::new(); + let mut hash_iter = hashes.iter(); + let (matched_transactions, unmatched_transactions): ( + Vec<&TransactionSigned>, + Vec<&TransactionSigned>, + ) = self.0.iter().partition(|tx| { + for hash in &mut hash_iter { + let curr_hash = hash.clone().into(); + if tx.hash() == curr_hash { + return true + } else { + missing_hashes.push(curr_hash); + } + } + false + }); + + // this means we have been sent transactions that we did not request + if !unmatched_transactions.is_empty() { + return Err(PooledTransactionsError::UnmatchedTransactions) + } + + let matched_hashes = matched_transactions.iter().map(|tx| tx.hash()).collect::>(); + + Ok((matched_hashes, missing_hashes)) + } +} + +impl From> for PooledTransactions { + fn from(txs: Vec) -> Self { + PooledTransactions(txs) + } +} + +impl From for Vec { + fn from(txs: PooledTransactions) -> Self { + txs.0 + } +} + +#[cfg(test)] +mod test { + use std::str::FromStr; + + use crate::{message::RequestPair, GetPooledTransactions, PooledTransactions}; + use hex_literal::hex; + use reth_primitives::{Signature, Transaction, TransactionKind, TransactionSigned, U256}; + use reth_rlp::{Decodable, Encodable}; + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn encode_get_pooled_transactions() { + let expected = hex!("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"); + let mut data = vec![]; + let request = RequestPair:: { + request_id: 1111, + message: GetPooledTransactions(vec![ + hex!("00000000000000000000000000000000000000000000000000000000deadc0de").into(), + hex!("00000000000000000000000000000000000000000000000000000000feedbeef").into(), + ]), + }; + request.encode(&mut data); + assert_eq!(data, expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn decode_get_pooled_transactions() { + let data = hex!("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"); + let request = RequestPair::::decode(&mut &data[..]).unwrap(); + assert_eq!( + request, + RequestPair:: { + request_id: 1111, + message: GetPooledTransactions(vec![ + hex!("00000000000000000000000000000000000000000000000000000000deadc0de").into(), + hex!("00000000000000000000000000000000000000000000000000000000feedbeef").into(), + ]) + } + ); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn encode_pooled_transactions() { + let expected = hex!("f8d7820457f8d2f867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10f867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb"); + let mut data = vec![]; + let request = RequestPair:: { + request_id: 1111, + message: vec![ + TransactionSigned::from_transaction_and_signature( + Transaction::Legacy { + chain_id: Some(1), + nonce: 0x8u64.into(), + gas_price: 0x4a817c808u64.into(), + gas_limit: 0x2e248u64.into(), + to: TransactionKind::Call( + hex!("3535353535353535353535353535353535353535").into(), + ), + value: 0x200u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: false, + r: U256::from_str( + "64b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12", + ) + .unwrap(), + s: U256::from_str( + "64b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10", + ) + .unwrap(), + }, + ), + TransactionSigned::from_transaction_and_signature( + Transaction::Legacy { + chain_id: Some(1), + nonce: 0x09u64.into(), + gas_price: 0x4a817c809u64.into(), + gas_limit: 0x33450u64.into(), + to: TransactionKind::Call( + hex!("3535353535353535353535353535353535353535").into(), + ), + value: 0x2d9u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: false, + r: U256::from_str( + "52f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb", + ) + .unwrap(), + s: U256::from_str( + "52f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb", + ) + .unwrap(), + }, + ), + ] + .into(), + }; + request.encode(&mut data); + assert_eq!(data, expected); + } + + #[test] + // Test vector from: https://eips.ethereum.org/EIPS/eip-2481 + fn decode_pooled_transactions() { + let data = hex!("f8d7820457f8d2f867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10f867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb"); + let expected = RequestPair:: { + request_id: 1111, + message: vec![ + TransactionSigned::from_transaction_and_signature( + Transaction::Legacy { + chain_id: Some(1), + nonce: 0x8u64.into(), + gas_price: 0x4a817c808u64.into(), + gas_limit: 0x2e248u64.into(), + to: TransactionKind::Call( + hex!("3535353535353535353535353535353535353535").into(), + ), + value: 0x200u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: false, + r: U256::from_str( + "64b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12", + ) + .unwrap(), + s: U256::from_str( + "64b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10", + ) + .unwrap(), + }, + ), + TransactionSigned::from_transaction_and_signature( + Transaction::Legacy { + chain_id: Some(1), + nonce: 0x09u64.into(), + gas_price: 0x4a817c809u64.into(), + gas_limit: 0x33450u64.into(), + to: TransactionKind::Call( + hex!("3535353535353535353535353535353535353535").into(), + ), + value: 0x2d9u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: false, + r: U256::from_str( + "52f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb", + ) + .unwrap(), + s: U256::from_str( + "52f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb", + ) + .unwrap(), + }, + ), + ] + .into(), + }; + + let request = RequestPair::::decode(&mut &data[..]).unwrap(); + assert_eq!(request, expected); + } + + #[test] + fn decode_pooled_transactions_network() { + let data = hex!("f9022980f90225f8650f84832156008287fb94cf7f9e66af820a19257a2108375b180b0ec491678204d2802ca035b7bfeb9ad9ece2cbafaaf8e202e706b4cfaeb233f46198f00b44d4a566a981a0612638fb29427ca33b9a3be2a0a561beecfe0269655be160d35e72d366a6a860b87502f872041a8459682f008459682f0d8252089461815774383099e24810ab832a5b2a5425c154d58829a2241af62c000080c001a059e6b67f48fb32e7e570dfb11e042b5ad2e55e3ce3ce9cd989c7e06e07feeafda0016b83f4f980694ed2eee4d10667242b1f40dc406901b34125b008d334d47469f86b0384773594008398968094d3e8763675e4c425df46cc3b5c0f6cbdac39604687038d7ea4c68000802ba0ce6834447c0a4193c40382e6c57ae33b241379c5418caac9cdc18d786fd12071a03ca3ae86580e94550d7c071e3a02eadb5a77830947c9225165cf9100901bee88f86b01843b9aca00830186a094d3e8763675e4c425df46cc3b5c0f6cbdac3960468702769bb01b2a00802ba0e24d8bd32ad906d6f8b8d7741e08d1959df021698b19ee232feba15361587d0aa05406ad177223213df262cb66ccbb2f46bfdccfdfbbb5ffdda9e2c02d977631daf86b02843b9aca00830186a094d3e8763675e4c425df46cc3b5c0f6cbdac39604687038d7ea4c68000802ba00eb96ca19e8a77102767a41fc85a36afd5c61ccb09911cec5d3e86e193d9c5aea03a456401896b1b6055311536bf00a718568c744d8c1f9df59879e8350220ca18"); + let decoded_transactions = + RequestPair::::decode(&mut &data[..]).unwrap(); + + let expected_transactions = RequestPair:: { + request_id: 0, + message: vec![ + TransactionSigned::from_transaction_and_signature( + Transaction::Legacy { + chain_id: Some(4), + nonce: 15u64.into(), + gas_price: 2200000000u64.into(), + gas_limit: 34811u64.into(), + to: TransactionKind::Call( + hex!("cf7f9e66af820a19257a2108375b180b0ec49167").into(), + ), + value: 1234u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: true, + r: U256::from_str( + "35b7bfeb9ad9ece2cbafaaf8e202e706b4cfaeb233f46198f00b44d4a566a981", + ) + .unwrap(), + s: U256::from_str( + "612638fb29427ca33b9a3be2a0a561beecfe0269655be160d35e72d366a6a860", + ) + .unwrap(), + }, + ), + TransactionSigned::from_transaction_and_signature( + Transaction::Eip1559 { + chain_id: 4, + nonce: 26u64.into(), + max_priority_fee_per_gas: 1500000000u64.into(), + max_fee_per_gas: 1500000013u64.into(), + gas_limit: 21000u64.into(), + to: TransactionKind::Call( + hex!("61815774383099e24810ab832a5b2a5425c154d5").into(), + ), + value: 3000000000000000000u64.into(), + input: Default::default(), + access_list: Default::default(), + }, + Signature { + odd_y_parity: true, + r: U256::from_str( + "59e6b67f48fb32e7e570dfb11e042b5ad2e55e3ce3ce9cd989c7e06e07feeafd", + ) + .unwrap(), + s: U256::from_str( + "016b83f4f980694ed2eee4d10667242b1f40dc406901b34125b008d334d47469", + ) + .unwrap(), + }, + ), + TransactionSigned::from_transaction_and_signature( + Transaction::Legacy { + chain_id: Some(4), + nonce: 3u64.into(), + gas_price: 2000000000u64.into(), + gas_limit: 10000000u64.into(), + to: TransactionKind::Call( + hex!("d3e8763675e4c425df46cc3b5c0f6cbdac396046").into(), + ), + value: 1000000000000000u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: false, + r: U256::from_str( + "ce6834447c0a4193c40382e6c57ae33b241379c5418caac9cdc18d786fd12071", + ) + .unwrap(), + s: U256::from_str( + "3ca3ae86580e94550d7c071e3a02eadb5a77830947c9225165cf9100901bee88", + ) + .unwrap(), + }, + ), + TransactionSigned::from_transaction_and_signature( + Transaction::Legacy { + chain_id: Some(4), + nonce: 1u64.into(), + gas_price: 1000000000u64.into(), + gas_limit: 100000u64.into(), + to: TransactionKind::Call( + hex!("d3e8763675e4c425df46cc3b5c0f6cbdac396046").into(), + ), + value: 693361000000000u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: false, + r: U256::from_str( + "e24d8bd32ad906d6f8b8d7741e08d1959df021698b19ee232feba15361587d0a", + ) + .unwrap(), + s: U256::from_str( + "5406ad177223213df262cb66ccbb2f46bfdccfdfbbb5ffdda9e2c02d977631da", + ) + .unwrap(), + }, + ), + TransactionSigned::from_transaction_and_signature( + Transaction::Legacy { + chain_id: Some(4), + nonce: 2u64.into(), + gas_price: 1000000000u64.into(), + gas_limit: 100000u64.into(), + to: TransactionKind::Call( + hex!("d3e8763675e4c425df46cc3b5c0f6cbdac396046").into(), + ), + value: 1000000000000000u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: false, + r: U256::from_str( + "eb96ca19e8a77102767a41fc85a36afd5c61ccb09911cec5d3e86e193d9c5ae", + ) + .unwrap(), + s: U256::from_str( + "3a456401896b1b6055311536bf00a718568c744d8c1f9df59879e8350220ca18", + ) + .unwrap(), + }, + ), + ] + .into(), + }; + + // checking tx by tx for easier debugging if there are any regressions + for (expected, decoded) in + decoded_transactions.message.0.iter().zip(expected_transactions.message.0.iter()) + { + assert_eq!(expected, decoded); + } + + assert_eq!(decoded_transactions, expected_transactions); + } + + #[test] + fn encode_pooled_transactions_network() { + let expected = hex!("f9022980f90225f8650f84832156008287fb94cf7f9e66af820a19257a2108375b180b0ec491678204d2802ca035b7bfeb9ad9ece2cbafaaf8e202e706b4cfaeb233f46198f00b44d4a566a981a0612638fb29427ca33b9a3be2a0a561beecfe0269655be160d35e72d366a6a860b87502f872041a8459682f008459682f0d8252089461815774383099e24810ab832a5b2a5425c154d58829a2241af62c000080c001a059e6b67f48fb32e7e570dfb11e042b5ad2e55e3ce3ce9cd989c7e06e07feeafda0016b83f4f980694ed2eee4d10667242b1f40dc406901b34125b008d334d47469f86b0384773594008398968094d3e8763675e4c425df46cc3b5c0f6cbdac39604687038d7ea4c68000802ba0ce6834447c0a4193c40382e6c57ae33b241379c5418caac9cdc18d786fd12071a03ca3ae86580e94550d7c071e3a02eadb5a77830947c9225165cf9100901bee88f86b01843b9aca00830186a094d3e8763675e4c425df46cc3b5c0f6cbdac3960468702769bb01b2a00802ba0e24d8bd32ad906d6f8b8d7741e08d1959df021698b19ee232feba15361587d0aa05406ad177223213df262cb66ccbb2f46bfdccfdfbbb5ffdda9e2c02d977631daf86b02843b9aca00830186a094d3e8763675e4c425df46cc3b5c0f6cbdac39604687038d7ea4c68000802ba00eb96ca19e8a77102767a41fc85a36afd5c61ccb09911cec5d3e86e193d9c5aea03a456401896b1b6055311536bf00a718568c744d8c1f9df59879e8350220ca18"); + + let transactions = RequestPair:: { + request_id: 0, + message: vec![ + TransactionSigned::from_transaction_and_signature( + Transaction::Legacy { + chain_id: Some(4), + nonce: 15u64.into(), + gas_price: 2200000000u64.into(), + gas_limit: 34811u64.into(), + to: TransactionKind::Call( + hex!("cf7f9e66af820a19257a2108375b180b0ec49167").into(), + ), + value: 1234u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: true, + r: U256::from_str( + "35b7bfeb9ad9ece2cbafaaf8e202e706b4cfaeb233f46198f00b44d4a566a981", + ) + .unwrap(), + s: U256::from_str( + "612638fb29427ca33b9a3be2a0a561beecfe0269655be160d35e72d366a6a860", + ) + .unwrap(), + }, + ), + TransactionSigned::from_transaction_and_signature( + Transaction::Eip1559 { + chain_id: 4, + nonce: 26u64.into(), + max_priority_fee_per_gas: 1500000000u64.into(), + max_fee_per_gas: 1500000013u64.into(), + gas_limit: 21000u64.into(), + to: TransactionKind::Call( + hex!("61815774383099e24810ab832a5b2a5425c154d5").into(), + ), + value: 3000000000000000000u64.into(), + input: Default::default(), + access_list: Default::default(), + }, + Signature { + odd_y_parity: true, + r: U256::from_str( + "59e6b67f48fb32e7e570dfb11e042b5ad2e55e3ce3ce9cd989c7e06e07feeafd", + ) + .unwrap(), + s: U256::from_str( + "016b83f4f980694ed2eee4d10667242b1f40dc406901b34125b008d334d47469", + ) + .unwrap(), + }, + ), + TransactionSigned::from_transaction_and_signature( + Transaction::Legacy { + chain_id: Some(4), + nonce: 3u64.into(), + gas_price: 2000000000u64.into(), + gas_limit: 10000000u64.into(), + to: TransactionKind::Call( + hex!("d3e8763675e4c425df46cc3b5c0f6cbdac396046").into(), + ), + value: 1000000000000000u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: false, + r: U256::from_str( + "ce6834447c0a4193c40382e6c57ae33b241379c5418caac9cdc18d786fd12071", + ) + .unwrap(), + s: U256::from_str( + "3ca3ae86580e94550d7c071e3a02eadb5a77830947c9225165cf9100901bee88", + ) + .unwrap(), + }, + ), + TransactionSigned::from_transaction_and_signature( + Transaction::Legacy { + chain_id: Some(4), + nonce: 1u64.into(), + gas_price: 1000000000u64.into(), + gas_limit: 100000u64.into(), + to: TransactionKind::Call( + hex!("d3e8763675e4c425df46cc3b5c0f6cbdac396046").into(), + ), + value: 693361000000000u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: false, + r: U256::from_str( + "e24d8bd32ad906d6f8b8d7741e08d1959df021698b19ee232feba15361587d0a", + ) + .unwrap(), + s: U256::from_str( + "5406ad177223213df262cb66ccbb2f46bfdccfdfbbb5ffdda9e2c02d977631da", + ) + .unwrap(), + }, + ), + TransactionSigned::from_transaction_and_signature( + Transaction::Legacy { + chain_id: Some(4), + nonce: 2u64.into(), + gas_price: 1000000000u64.into(), + gas_limit: 100000u64.into(), + to: TransactionKind::Call( + hex!("d3e8763675e4c425df46cc3b5c0f6cbdac396046").into(), + ), + value: 1000000000000000u64.into(), + input: Default::default(), + }, + Signature { + odd_y_parity: false, + r: U256::from_str( + "eb96ca19e8a77102767a41fc85a36afd5c61ccb09911cec5d3e86e193d9c5ae", + ) + .unwrap(), + s: U256::from_str( + "3a456401896b1b6055311536bf00a718568c744d8c1f9df59879e8350220ca18", + ) + .unwrap(), + }, + ), + ] + .into(), + }; + + let mut encoded = vec![]; + transactions.encode(&mut encoded); + assert_eq!(encoded.len(), transactions.length()); + let encoded_str = hex::encode(encoded); + let expected_str = hex::encode(expected); + assert_eq!(encoded_str.len(), expected_str.len()); + assert_eq!(encoded_str, expected_str); + } +} diff --git a/crates/net/eth-wire/testdata/bsc_new_block_network_one b/crates/net/eth-wire/testdata/bsc_new_block_network_one new file mode 100644 index 000000000..6289d4d6b --- /dev/null +++ b/crates/net/eth-wire/testdata/bsc_new_block_network_one @@ -0,0 +1 @@ +f94f53f94f4bf9025ea09315f27346e0b40cff37d7d3389f3d626d0291a93b3a9b14e69f6aebc0b479c4a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794be807dddb074639cd9fa61b47676c064fc50d62ca0ca8d8e8aad27db012a001fd9f25edb548d6c1bd57e26a374a1cc584255917f69a0da10750ff9085910106fdd83894cc362bbcddde3657d670e1e873e16e1d8839da0759a8a8802bc731ff1eeda6ab0ce12f38165bd15a6ccbdd0586aac58c4c5008eb901000822020518020811102829008c54120313e07420868c99040410893422840d8202a0d8d00e2c800787c500fde20000a32c4300708883040745100c3002ed232500e7a080844050061124300980205a2c7054502111548a139404a430810a0020c2801ca402ab4023748324c060006a048aa011f98d1c0408c030203e83a5ce8d548604270c419d2280881250a89c584308260c91c500850864f111c120c34b60062000241d0cca4c3103e90b0b8e430990808500008061a8124030846982624d60c0c50641040482605a088013039012a14631c1716de150a240a92e8888f82909d23e09a000040501544a0a800082b8400484086e1780cd08c614492c401088028401282e5c8404bf7fe6838ee9008462c9f5cab861d88301010b846765746888676f312e31332e34856c696e75780000005d43d2fddf1558314f8abce8faa7de9ad0f209e4c6c8038791b9ad4b8e7a13e81da99e79175b507518dd5afd3374bea9e68c42d4c0f4fbba312a8303f1990b6bcef909be00a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f94ce6f9018c823681850430e23400830f424094b99bf278ca4e179e71d07eec63a84e9b9ca0a61880b90124a0d8e6500000000000000000000000000000000000000000000000000264a6d3b642200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001c2f0000000000000000000000000000000000000000000000000000000000003abd00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000264a6da9f4220000000000000000000000000000000000000000000000000000264a6f6cb0220000000000000000000000000000000000000000000000000000264a70f9d8220000000000000000000000000000000000000000000000000000264a72ab88220001ba064a033eed2167e9583962a68b3c427a0f0bec830a2f63ece5de230db77564b779fd6081e166745293cafac88bab044bffc99d70ee4b44b8c946968b17d5d8e98f8aa028501ebbd028082d0279455d398326f99059ff775485246999027b319795580b844095ea7b30000000000000000000000000c9adcfc5fc5c34074bd67e402c5f9cb14ba2920ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8193a02865e39b7bd294036bdd438affa432f4a37aa77c42a0a17a0116a8f49b31b004a02cd259a5bceebd679ead98566103fb69fd5d80f684d80108fbd4e79d32e10eaef8938202508501a13b8600830182109418b2a687610328590bc8f2e5fedde3b582a49cda876d24bee4379974a457fb096f0000000000000000000000000000000000000000000000000000000000014e508193a0797ac9f2a597bfa9ddc5a5ee6c97bab872122c0e60ba0c4b28a91eb83dad12a6a02a82561fe7939407b8ef32afdeb6dfff8ca83c3b62698c74ab77dd2752cd9d1ef90c8e829be18501a13b8600830488e69426c76f7fef00e02a5dd4b5cc8a0f717eb61e1e4b80b90c24f87343020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000006e0000000000000000000000000000000000000000000000000000000000000098000000000000000000000000000000000000000000000000000000000000000730a14208cfec94d2ba8b8537da7a9bb361c6baad772721214c876ee7fb9b6ab05e337bed65c7927e6a242c2d01a0a03e8fb41bcee7697336c2214c876ee7fb9b6ab05e337bed65c7927e6a242c2d028de7f3220674227f137531f54eaf62f069190d1a9c0b27d75614801b0a263c64d878c6833000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000005200000000000000000000000000000000000000000000000000000000000000041d65790c5648550cef3fb53b8370d1ee1dcf304e81bc2004948119fd413b767b811d6d515d0b21bcd19f749f5723992840295d4c52eb33336c47121fe108fe1221b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416b9ddde1d207d1b80f0aac4e6587dcdbf73f43f7b0bff2a90b4b6e74d8687f217018f387f3c47a29acd6c05c868e2162a66b16c43da4de6be2b4ef53ef114b9d1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041fbcb1cf9371eb7fb03e2fe9a4d79a69510e9fe152b9127f4d16c31a3eeaf018f4426782d148b7eed6fbb70f0388c5726a4ab30b522fbc460fb42e41a1699a38a1c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000419e46d6accc51e5dab33bfd43eacd87a033afc95ff47c96ea44e64db216da70a847597adecf8cc554e7ba57b37e5f5dc9f464cf83031f70d2c0bf082e1d01e5a71b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000411e9367e945aa43c6686d0b95fc5b75d1bf43a1b636a826c732956bd96b3e522910411506ba2aef08ecf3e88414f35b96e382c42e840b8f75033f6fb1d7b3b2431c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041cb889f461b0bcd98fef5312a05cc4503f592dfe307a11cf1117929ca51a1b2ec725eb155cff223de997381e5510e99f3c305f8ce465e90901eea4aaec908c3031b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041988d57e759a5c6e055bb2709b91aec80f9b0c091fff8975d27c9e6c34d7851de1f6a7c3834cf135af6205e2cd88fdb9bd5ac0e2a049f6254596a2ff043ec54351b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416b80edf57edec93de14ebf65cc1bc70e00d05eecc378aefacc2d98a7b8cd0a1e00d78e7077c8ee180239e47e673694ad8a48b1535fd92beb07b468fec63db66a1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041b60059d36bcaebac53af7c59848e424f3aff289e794c2586679154bb22d38de36cedc972f569f2363ab56a9973e8e932b73809ecf86b97a633c3dd20957250b61b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000241a100333eefa2efc389ec836a6ff619fc1c644000000000000000000000000273035e10f106499eface385dba07135e7cc8e5400000000000000000000000055f4a1bfc655cf55ed325f2338a1dee84f754df2000000000000000000000000870cf8dd5d9c8eb1403dfd6e6a4753f4d617a53800000000000000000000000095016e36adb4e0151735ced3992a7fa54e16bd08000000000000000000000000954adc74481634b4d278c459853b4e6cc17ae8d200000000000000000000000098e9d288743839e96a8005a6b51c770bbf7788c00000000000000000000000009a66644084108a1bc23a9ccd50d6d63e53098db60000000000000000000000009a8cfacf513fb3d5e39f5952c8608e985b3dc6ef0000000000000000000000009ac5279013edfec74c5c2976fc831ad0527402e00000000000000000000000009cd5006e1bff785dad5869efd81a2c42545c9d9b000000000000000000000000a73b339c3fae27bedf7cb72d9d000b08fc899609000000000000000000000000bfa2f68bf9ad60dc3cfb1cef04730eb7fa251424000000000000000000000000c74acab8c0a340f585d008cb521d64d2554171a8000000000000000000000000cf12dd34d7597d06ff98f85d2b9483d9d5f7d952000000000000000000000000d10c833f4305e1053a64bc738c550381f48104ca000000000000000000000000f3d912e7fb180acdea31a52797d55ee2988ab907000000000000000000000000f4151eebfa1b9c87dd92c8243a18b1baef8c1813000000000000000000000000f5ad7f3782e8a67bffa297684e27cf9fcc781be1000000000000000000000000f6e93eb288658de5e2e982f99d2b378b22959d15000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000030e494704d8e5766bf00000000000000000000000000000000000000000000007c15da650cdcf7084000000000000000000000000000000000000000000000001e07a0bc249937e9a3000000000000000000000000000000000000000000000039ee16c652abde891200000000000000000000000000000000000000000000001bc4532ae1e6ab92b90000000000000000000000000000000000000000000000336628a0f6a40b8f5d0000000000000000000000000000000000000000000000a97484021f33111e4300000000000000000000000000000000000000000000010f0ba0f9dac7cac297a000000000000000000000000000000000000000000000284879802da4847a434000000000000000000000000000000000000000000000288c3111ba1236ce6e00000000000000000000000000000000000000000000011e3fcf24feb9850a88000000000000000000000000000000000000000000000053e49ff53e13d1c7f10000000000000000000000000000000000000000000000cac6a48c8ea0160e3000000000000000000000000000000000000000000000003e256b3f09e2abf5f000000000000000000000000000000000000000000000003ca8e614299b610c5700000000000000000000000000000000000000000000007c50ec356542e6b2a7000000000000000000000000000000000000000000000008c6f7844e773e4944000000000000000000000000000000000000000000000029be69a390065f6cad000000000000000000000000000000000000000000000031f62c63e226f6774900000000000000000000000000000000000000000000003edfa3328012afe78c00008193a091ca3e5e11518bfc9673920479ed84032a60aeaf1a7e14120aa5b73dfd78b8c9a07c97b92186173654a557fa33f9b17dbf16e42701df6e7f4b6d1f30c8559f0e31f9015211850165a0bc00830c649e9410ed43c718714eb63d5aa57b78b54704e256024e87445fbc9572f71bb8e4fb3bdb410000000000000000000000000000000000000000000000000000007ab3a5d60000000000000000000000000000000000000000000000000000000000000000800000000000000000000000002a518d6e21b767e471078362772f222bd4f06a960000000000000000000000000000000000000000000000000000000062c9fa500000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000005f320c3b8f82acfe8f2bb1c85d63aa66a7ff524f8193a00898cd26b60af009fd4f8366406440b8116a96f95711043f49df4d6c0d463a61a046b0e1fd4c975b73987386ea0b16ef780014e25ca4b1efa639aa992fb3f4388df9016f83038df5850165a0bc00830f42409410ed43c718714eb63d5aa57b78b54704e256024e80b901048803dbee000000000000000000000000000000000000000000000000959810c86978a0f8000000000000000000000000000000000000000000000000050dfaa0145f007200000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000c07958c88bfccb12d7d0dda1a1cd80de8548f0f50000000000000000000000000000000000000000000000000000000062c9f5e10000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c00000000000000000000000025c54f9b99ee53ee7ab769d5897b886fe661bd2c8193a05a1abbc0d14715d6b80980ffc47e1ba6daa28e744d6ee7ecc54c7df63875616ea0453e4b656cd12cdef6b1ab27f00d3764289260d7ae34950f5e952145aef886e9f9018f8303fc7985014cb1fba08305cc6094b400af9ff00e7ba1f6aac4eeff475e965f9cba1f80b90124b7835e4c00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000204fce557662a480000000010000000000000000000000000000000000000000204fce55c2a7a200000000020000000000000000000000000000000000000000204fbc77de1b1a913e56c0150000000000000000000000000000000000000000204fce545204ddd3ba91f9bb0000000000000000000000000000000000000000204fce59492d49b69f8d263b00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000204fbe6f3c9d7aa9dab545100000000000000000000000000000000000000000204fc92150ad158b43aa78ab8193a0d854098af614291edc8c6b8dedbbab9fd3d36e8bbef3dbd0f8ba0234e721e633a03c0876cf32c83e4e0319d1d99709b3d0d6f71422b23685b331518a7da930bfbcf9016f8301cdd4850147d3570083030d409410ed43c718714eb63d5aa57b78b54704e256024e80b9010438ed1739000000000000000000000000000000000000000000000001f399b1438a10000000000000000000000000000000000000000000000000000078de8720f2f0a00000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000073b99ae712fbcec80b71e5bd532dd8bc32ebe5f00000000000000000000000000000000000000000000000000000000062ca1cd500000000000000000000000000000000000000000000000000000000000000020000000000000000000000002ff90b0c29ededdaf11c847925ea4a17789e88c3000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d568194a00dab1e47237b346e43b50881f21be9acdd48a33a634f324241f793cae7201b92a02e02d587097c96089cad5993014688038b2875f4ccf74b0885f4e3edf9c40ab8f8ab81b5850147d3570082b2e69412a055d95855b4ec2cd70c1a5eadb1ed43eaef6580b844a9059cbb0000000000000000000000004e29fa717fb61753e26885421b84ff7e06df585e000000000000000000000000000000000000000000000011a975923bb1ef67738194a0de94936d4db2f0b9ad548a1e58a7b06f86e2ddf1622673333edb9ee308fbe2d2a04c11ac0d453903914fe1465b2be23443c8c7dd1ef79c90e2b9038ac84a9e3774f901cc58850147d3570083065916940c9adcfc5fc5c34074bd67e402c5f9cb14ba292080b90164cba9bc66000000000000000000000000f62ef040fb5ea7d0828ff50bced9a7720f1387c700000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000009402a00000000000000000000000000000000000000000000000009e6006628960c1100000000000000000000000006e56ef5cdb4c97e41b5bf7f39c44dd74d2c0d62900000000000000000000000000000000000000000000000000000000000000020000000000000000000000002adc3468fc4149932dd16d0244b7228aa8eead5c00000000000000000000000055d398326f99059ff775485246999027b319795500000000000000000000000000000000000000000000000000000000000000008193a0861cea79a892a2a01f3710bca8e2453486e75cef2a9a8a452b59d7d4165141f5a07dac28ec65670de5cc77960b15b78af354e0bf911749db4f51cfeb7ae58e25b7f86a0185013f2ed0c08302150b940582bfedb791fb79434a79a815f92879c18c2f868084ba13a5728194a097852b1abc9a89a7404223c1627ed8a5e19ae818c2ebf83fb1cc90b40a656e38a0761aec984aa55c7984ca0baafde8332607b5e7dd9d220d2994526566b426d828f9015381c085012a05f20083025be59410ed43c718714eb63d5aa57b78b54704e256024e87976cfc65e7a17cb8e4fb3bdb410000000000000000000000000000000000000000000000002cc2da056da640000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000a374434a9cd2762d4d5eca5c1f70ee26b2dbe83e0000000000000000000000000000000000000000000000000000000062c9fa620000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000000e09fabb73bd3ade0a17ecc321fd13a19e81ce828193a08cc0cb193032115a020af28ced0350ee60f4225d6e9effe6ac3ae4b6b598b2fda07a2fdb280489824b398fda0fc860bf6e69c7394feef96f487d966b668dbb618bf9018e82df7b85012a05f200830f424094cc8cd14a1f7df6e7044316d17efe3f5dc403818580b90124e1bbf2d6000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d560000000000000000000000000446258f2cae8c67779a10c922e194febcc11398000000000000000000000000eea2ed025e05b8432d67dfaf4ff8f33fda00ebc300000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000003bf1394fff525f00000000000000000000000067bb6879b16ef6bc9035e92dd6c24facacb931b600000000000000000000000000000000000000000000000000000000000000010000000000000000000000002bfea1594fef68d2d329b40a520b145224e116788193a05fa14c97ce0623494e92d50e111f45e3cd3b8dba0a2399909e42247151a3e461a002978a1ddd02f1122985332aad43e3c99941a1a92187559bd359e71829d6bd19f8ed8203f685012a05f2008316e360944314ed878fa5bd71be6dd1da0ce9350dd1f5bc2d80b884d3e8801e0000000000000000000000002170ed0880ac9a755fd29b2688956bd959f933f8000000000000000000000000000000000000000000000000002936237765000000000000000000000000000051586182a2031f3e384d080f78c8836d48ebbffc00000000000000000000000000000000000000000000000000000000000027108193a087501ab3c83800886a2c5b7512c87bb3e9061f6d756cf53d45f1e5c2f80a76e7a046f40c6831b452f0eb453ac3f1581792ba0011097907d2951d8a7079d92be947f8aa0985012a05f20082ae4e94e4adbc43fcde17bff2fa4dd0310e4de2b2f2f8b280b844a9059cbb0000000000000000000000007c38b9a6d0d96d50825089f241732bd02755169a000000000000000000000000000000000000000000000001a055690d9db800008193a031539bdfb68d7888a934006a8180994e6173693922a618d3ced1dd617d336d9da06d33d5739d9e19d18a86e816ab6d23d8e886a6b585bf8c6b2a6788a32da002e9f88c82033085012a05f200832625a0941514c766127378ea9653f9f4428fe25f3fd256c380a4b637956a00000000000000000000000000000000000000000000000000000000000000048193a061427deeb3293c8069842870af9ecb4b06e98a44930b061666ff8ab8aaa1c749a0437775228259ad19b220659a5e601da4e3057cf3fdc4149c0514590f6c8e6cddf8ac821cdf85012a05f20082ca8994da3d20e21caeb1cf6dd84370aa0325087326f07a80b844a9059cbb0000000000000000000000007fae6750663bbf2b8994e9f059dd7e8d268de17900000000000000000000000000000000000000000000000000033078b9b530008194a081777d4cd3edf4ed96da05c490e4573e76c03ef45440f1bc95a2cd3c9fb50408a043d15cf79f25e3850f1fd7b3feff6e89cf65d50ae5ce101bce134f7280d32e52f8718306e0c885012a05f2008307a1209444bfc447a8f6b6e0a8fb40e645c0733acb648089881c7f4c703a284000808194a0a4188b5faa6528cd1f5c7b9cbe5f126de1d5b1c378145a2dfb170243a559b674a07ca3c806ed6a31f5a9de8d08a3fb85e419494c23582d7d14271cc168a1a04b42f9054f8306690685012a05f2008307a120947935a51addab8550d346feef34e02f67c933010980b904e4c98075390000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000004000100000101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000001ef8bb19055a122c01fdfa765813cf2d00011652040e0d03000601080f07020c090b04050a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000013135f5a0000000000000000000000000000000000000000000000000000000013135f5a0000000000000000000000000000000000000000000000000000000013136bdc0000000000000000000000000000000000000000000000000000000013136bdc0000000000000000000000000000000000000000000000000000000013136c40000000000000000000000000000000000000000000000000000000001313935000000000000000000000000000000000000000000000000000000000131393500000000000000000000000000000000000000000000000000000000013139350000000000000000000000000000000000000000000000000000000001313995a000000000000000000000000000000000000000000000000000000001313995a000000000000000000000000000000000000000000000000000000001313995a000000000000000000000000000000000000000000000000000000001313995a000000000000000000000000000000000000000000000000000000001313ba600000000000000000000000000000000000000000000000000000000013156b330000000000000000000000000000000000000000000000000000000013158d3f000000000000000000000000000000000000000000000000000000001315a73a0000000000000000000000000000000000000000000000000000000000000006fe7bf50f91e2e3db5358d3cb7fb8e5bec7a434a6d8f98fcd2452fb685391b7351bdf343068523ea985db7d42feccd46f497a024983a7207c2bf7b1c72a5b00f801cd8758bcdfbe77c64bf6ee5818413d483ad706a3868d1054ff195cc6893f896951f57443e9155a5deae785404cd6f3d47a245a96a3b9faeeb6f96e9b2e1ccaf7e9a3b7a70a4e805ce775464bc32a66d407e4be5ff34217b1b6437b62ab0b3588c9adb420b32db5cfc2e241b0c23937d0b71a5baf1b997076d4d4ee6b0ceea300000000000000000000000000000000000000000000000000000000000000063e91a6cbd63b83537ac82534ea99870a6b6bbaf2c846492333ac479c389462945de2bb4afe3432334b4b3bcf91bd64aac0644d90c719bac84a9f01bf41eec55f5ee69aa55aba7b824cda7e5988fbe30f4b76db437b9d93da7e393ef8fa639cfa3e346feeb5d86e5da69669f3f4784a7786a4b1dd5895c7f572ded2b20745f80f3ac272063d7c793ed51179f79594a4e64542d9765d8b6c37a83600bb73e395291a80a93abfe6adc9250c723675a422afd61181eb6e3287ec3bdcdc4dd9028f738194a054c03342f5f2c936d90bdee8b1b56280812126886fba62bccb42525cdedc5200a05f094c8b63a9da58945506b994fc6ce9c52237e9661df50294852d2e4083886ef901ad819a85012a05f200830233ca9432a725a0282e69836957bcec6d1b05bdb047d1ee80b901443e64709f00000000000000000000000000000000000000000000000000000000000171d4000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000001b4e56bfbef5af80000000000000000000000000009fd87aefe02441b123c3c32466cd9db4c578618f0000000000000000000000000000000000000000000000000000000062c9f61d00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000004197b76f660a4a7222d933e25a650508742c8a13aa6a93794715e42abd8a99f7c9492fa96e6b1ce81f35a315b06a9b7e23c0a8955791879df63068d02f59d16a1d1c000000000000000000000000000000000000000000000000000000000000008193a01075ed8562c758edf80d34490ed2fac42f4c28bdfa965bf56cb5d9fac51d1dbba0125e3dd29e4172cffd94f60a682df43fa3eee335f41f8502224909f516dc107af8ad820b8685012a05f2008302d21494e70e9185f5ea7ba3c5d63705784d8563017f2e5780b844e2bbb158000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008193a0a617d24c7f7f381abb574fc9a0bf4ba486d2c4e6fd1e2eed8748abec260205b5a06a20881fd845c0de60d81901536a52906f8af070efaf572a8427649fb68cc80cf8911285012a05f200830182109418b2a687610328590bc8f2e5fedde3b582a49cda872bb77c39b641f1a457fb096f0000000000000000000000000000000000000000000000000000000000014e508194a0a1e4c988d45dda84c67956a53b657fa13f313bc55ed99d65847d46674ed19f3ca07e9203cc5dd69e27692cd7ffc004412c7403117d966ee63b6c87f7e1e689f105f8d482012885012a05f2008303c01294f2ea680cdde6d04ef72024bbfdecdb011490741587038d7ea4c68000b864aea29ee40000000000000000000000000000000000000000000000000000000000000f5600000000000000000000000000000000000000000000000000000000000074ea000000000000000000000000000000000000000000001eb0d56b9c0e497400008194a06c86579e97377a0696fd7f5882950095f1755d5a446753419b182dc40e89ccb7a0088908cb5dc8b5257f161f6738d2427b81d872606162981eaa9558526cd5a8b0f8ad830210df85012a05f200830249f0942adc3468fc4149932dd16d0244b7228aa8eead5c80b844a9059cbb00000000000000000000000026f884051cb98900a987317f44c61c4c4f362c5600000000000000000000000000000000000000000000000000000000012c99201ba01a44c60af21bd5170045b8a86f29d79d4fd2c17674f158cb46612be39aa09adaa04950899baefc543b1400fb7c72e61f6fdf402abf5fd39be4f8daa90727a2d63ef9015482032e85012a05f200830391329410ed43c718714eb63d5aa57b78b54704e256024e877533bc35860787b8e4fb3bdb410000000000000000000000000000000000000000000000337fe5feaf2d1800000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000673a98ba965df184339afdc04e924666a88c37330000000000000000000000000000000000000000000000000000000062c9fa5c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000ad0a3901eff23b9143985bcb42f0171a112a2fd38193a00f5ea9841b646ae930bcd9b671e9cfaea0f9d31cf0b0e18717288ccfdc4dc5eea070492e4724f84184c25707ed5b41f5d154a87d0300c46d29f497e8feb91049e4f89382053185012a05f200830182109418b2a687610328590bc8f2e5fedde3b582a49cda873a49faf79dad41a457fb096f0000000000000000000000000000000000000000000000000000000000014e508193a085d7f4e3bae09526dd720e3fc522d30311675da30bde7a73325d5062df52f7c5a03fdb4785bba962295f87302c4e354a8551cf01362fe9904553734f539cb3fb1ff9018d82141685012a05f200831e8480943d3382ea81cc274e5b5fc10650d91b07f738a07080b90124bba4b0ac000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008c5591959049636a0dc1f5a89586acbe112e0c3d0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000bd6da3005683b5826a77d906a8decba6904b1fac0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000a5254af37b2600001ba07332b04aecae03f186a9ab55b12991d33cbfbd2dcbf18fb6dccdb27c9d427cc6a01ac9e5320e8a4891dd2fe35143b6dffcf9ac101306fe783e7952afb1c2c569bcf86e8201b585012a05f200825208949f248a57325fb74145996909b851bd4a3eb9cfe3878700cc75770000808194a0bbf5179810aaddfd09d9dd0ce3e40359de89688932308c0d0a35441814e0c2cfa07d095ed3eee641858258657b315ed0aa26856c39739ce706e1db31d0ccb8b679f86a2685012a05f20083030d4094a8c87a4b2de9bcebeadcc1ca4e6331fe28e3a37880843d18b9128193a01a9154f5856864fd030d19c4be7eea652f5c6ba1f7354b60e49975b91b78a5dda069e614b233f977bd901945ba6da735e19fc2381155d417632459b7f588ffe066f86a2485012a05f200830dfbdf94f97cde20e9208bd859acde7fd36ece865764273480845238faf38193a00be35c19dbe89a225001209c3ed88c38ed88f632e710f674735f56cbc9a7bbaea030c4d125f0b63adb29aec6659b3756da8f85a9cdbf10e60772522285cad27280f86c2285012a05f2008252089497b636a20d46857a233cd76d6698beb8c8f3a4b387470de4df820000808194a091a30ce4e42810c039ac1a67f2a2a860e34210c2eb7876e291ae346f5d0f38e6a0127b81165b7184b1714c1ca723632c037ff4d99f3f354cd75b283e3db5dcf132f86c8203b685012a05f2008306020794ffe811714ab35360b67ee195ace7c10d93f89d8c8084cd5e3c5d8194a0ae8f8b0e0a552fb246b901175117cb440d6d4f50c83b31d24ba4a37dbfccd383a04662061261a566b70f6ccb0d6bff21e6ab61ce380c519023ed880a1fd4c9a69ef86c82010685012a05f20083016c77940b4f924811601ebcbbb54f37ac2ae1c8430895f480843f5083d08193a03ec61a6f8939f771fb2316cbf574f88fc01eed4f36d31df7d51498c6a024d486a04ff8d88676e1fef1ea38dc68770c30544a98be115143ad43b44ee02e614ed30df9038e82010885012a05f2008301e5c6944e917a7f838610819cb4596c92cff438dea463b780b90324fbee349d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001ccab630dbcfc9218ccdf618958b57a2329d314aec2db699a8a272645476ba61eb28e1efd0a8242602a15ae3e22ced8a4300cb9b7ef4a15fadbd835e618ebebed8000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008bc22165cc98faf65cf5cdf141300e901dee02a6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000633ebba9000000000000000000000000000000000000000000000000000000000000006a00000000000000000000000055d398326f99059ff775485246999027b31979550000000000000000000000000000000000000000000000000891ccfa57f01b050000000000000000000000000000000000000000000000000000000000000160000000000000000000000000ea2e87ff1bc1e52b640452694e2f143f7f8d64be000000000000000000000000000000000000000000000000000000000031bd170000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000003fdaaeb79f834abfa8a9196431226ad4da9340f6000000000000000000000000000000000000000000000000007376940810e4fb00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008194a00b2f0075d4b1dc65fbbaf52d9ce21279955d1ccb0af240fabe5429a785a0b1f3a06a302862f18082f16b83694e0be2fe8f5fb6cc990ecdb88866fd8a6d3ca9ade0f9016e82039b85012a05f2008304c7af9410ed43c718714eb63d5aa57b78b54704e256024e80b90104791ac947000000000000000000000000000000000000000000000055d074fd2d91b5cb590000000000000000000000000000000000000000000000000078e45530a7b5a300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000907b14771f2b04c5a4643e611d23f7e988bd35d0000000000000000000000000000000000000000000000000000000062c9fa6d000000000000000000000000000000000000000000000000000000000000000200000000000000000000000062858686119135cc00c4a3102b436a0eb314d402000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8194a0bf62afe7f39775498e1101718e74ed5960b5b53981858ac9c5f53355b110de0ba01bdc67423ca1574f9503f631491a12a88e3a7f536c9d263113ac22dd8fefb73df9016e82037985012a05f2008302bced9410ed43c718714eb63d5aa57b78b54704e256024e80b9010418cbafe5000000000000000000000000000000000000000000000008efd90226b79e0000000000000000000000000000000000000000000000000000001d54735578686900000000000000000000000000000000000000000000000000000000000000a00000000000000000000000003842ce05801050339490266250c58b6faa4718ff0000000000000000000000000000000000000000000000000000000062c9fa6800000000000000000000000000000000000000000000000000000000000000020000000000000000000000007eefb6aeb8bc2c1ba6be1d4273ec0758a1321272000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8194a0f57a039b373d1bc850ca9eb1c1e183cba32b86df6d271e41a5291d782d87230fa052f8bc27f6ac1238ed6ab7946b2112ca01d9ff250c421c2965c0903f630f3ac3f8ac8268f485012a05f20082d0519462891201468a517eeec00fe72f33595a3f9047ee80b844a9059cbb000000000000000000000000070fd97e4db7c6d72d0a8d102c7917037319157b000000000000000000000000000000000000000000000014542ba12a337c00008193a0ba6bd7e574214a1d1874aa2be6604c19dcc45acfdcbe3a4c81110399f0befddca0472a86b42166e9f4a52ca2b36bf0920351cfe50521ef925b2d60da1c2edf4762f88b82024485012a05f20082db4b94685bfdd3c2937744c13d7de0821c83191e3027ff80a4beb6b1280000000000000000000000008e3dc66bb96b063afb932660fb5d060e170cf2cd8193a07cd2bab8d1d403c6c877388882d984af7da4894df05fd49d40447115c8cd77b4a051d3a548bf32de31b8fdd63db230ad425d61833383730b1ffd2b096f6883f4c5f9015482128785012a05f200830ea07b9410ed43c718714eb63d5aa57b78b54704e256024e870aa87bee538000b8e47ff36ab500000000000000000000000000000000000000000000000111ae3bf75240ad360000000000000000000000000000000000000000000000000000000000000080000000000000000000000000eee13c133067b72b9e35013524cef73202670fff0000000000000000000000000000000000000000000000000000000062c9fa6e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000b837978068a8257aeab4d8431de9c74e20776e088193a07d98d612b97a6f5e78253fcecce747aa07f466dd7a3cdb75f30b05a4ef46db71a036e6b17c48a202ec6b530ee49efc40f0d4a56fcd6468db9cfc43225f137c058af9014b1985012a05f2008306e86f94f0bd116b076a95df1e99f5074617b46c1c1039fd80b8e4e2eb3676000000000000000000000000000000000000000000000000000000000000a882000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000001bc6668851ba993306a18cee1982000ce71f04e0572e6a80ef7e51774a2e5ccb781c6ed23a452f5a604faef3aab37e77d6eb761d771a2d6d09dac9fcce958d0a738194a077e84d323a7c86a5298e7eebe33f48268e7011da233f5e2e2ec872192290a7caa00f5cae39536cadb148ea26bd0b6240e744f6f5d0865cb142d8a84d18ad34dd15f86e823bd385012a05f200825208949ccab17e7eb80fdebdb74acb96a35038ffc86564872386f26fc10000808194a0d1a1647aef70cd43151ac4d83cc8f2fc9c521513c04937f119ba956512d5e91aa0705b16ca0343787050f8763ceccf4ede4e8f7821128d151d44e073dca3f12e54f9015582135b85012a05f200830258009410ed43c718714eb63d5aa57b78b54704e256024e8871066e262ff20b08b8e47ff36ab500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000bbb0ca30a379c0b5cdbdc14f1daac7a4656b2c300000000000000000000000000000000000000000000000000000000062c9f9ad0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000009dac03356a6bd64ad31ec60802bc9a38071af6148194a0f15f8d976a010d17781c7b2955961838143257d3e736c566651999ccb20f6163a04fdb666270e886e91561e507da06cba1a44fa6fe4259f8f360cb247085e13ebaf8ab1b85012a05f20083012b6e94e9e7cea3dedca5984780bafc599bd69add087d5680b844a9059cbb0000000000000000000000006bd31845767e6567fc7e774d7b3fb79eed44a57c000000000000000000000000000000000000000000000000d02ab486cedc00008193a0694eb6994bc8628aa774dc9fa947730a03ad51afe0e8be93192a22e8761cdfbaa05c0468c6fe5626101c374691523f72e3811c2533bd920b7d0bf6c3d539600df6f8aa4f85012a05f20082bece9455d398326f99059ff775485246999027b319795580b844095ea7b300000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8193a0459a687231013e6f91b2204b5fd1a2b44cd88896f1a2965431030015052ba098a01b89eb8d995c652506943127497b2c44d66df70e7c3b45e7ff5b800fe61462e9f8ab1485012a05f200830186a09455d398326f99059ff775485246999027b319795580b844a9059cbb0000000000000000000000001ccfc4e4b9c05b99cfe43dac0dc84bf48b99e745000000000000000000000000000000000000000000000000a7c84ef1c67900008194a053d7e74b819f562f14ce916f505edac395e320cc92f17a4c368338eea1c5f3fca03bb836b085328acc925a59278c6e7ceea50a91d2930057717548fb3b88aea46df8ac82038c85012a05f20082716a9455d398326f99059ff775485246999027b319795580b844095ea7b30000000000000000000000004e917a7f838610819cb4596c92cff438dea463b700000000000000000000000000000000004000000000000000000000000000008194a0c7d1f97d75a1a8ea077ddf55f3dc80bb2050625a33ae9feb88918c16ac923ea0a0187e7ce18c9ff196869a040c9471cfe0d2d512fa48521de3bf082a04c4dd5bd0f87183089c7485012a05f200830186a094b6fed4439bac0e3d152465e6b6e23b485fbb654e80885d9a7ebee48c3bd58193a0d918b8c2a7020610da649b45ac256d24ac88ecf6f703278b9ec4414dc00bea7fa07d053b6fe5ef748cdd369413bbfdeed9a91d53a0f477efbea7ffd578f97cb200f9016c1585012a05f20083052c8c9410ed43c718714eb63d5aa57b78b54704e256024e80b9010438ed1739000000000000000000000000000000000000000000000000b0cd9280267a0000000000000000000000000000000000000000000000000000199472b496b177e100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000667f9068b24b1bb9f781e7a26b4c9a2d1439df620000000000000000000000000000000000000000000000000000000062c9fa6b00000000000000000000000000000000000000000000000000000000000000020000000000000000000000009c37319d57702b7bd7fdecf882859cd38dc864050000000000000000000000003ed846a7fa71414e286d52e09666fa233fbdc4628194a0bb72947d0d23fd76854f1616dc5c55cd25a4c1c52175db3e487d174d6f3b3a1ba043726842b04416ddbe9a59c4b13f789fbe8f8c059365fc51bedc18dcc262e48df9016e82016285012a05f200831e84809410ed43c718714eb63d5aa57b78b54704e256024e80b901045c11d795000000000000000000000000000000000000000000000a23c8a1a56ca000000000000000000000000000000000000000000000000000000915faa03b710c5e1300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000007d1b06e0e74da18870b9c4f244a170939bf4236f0000000000000000000000000000000000000000000000000000000062c9f72d0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000569f4957176ffa0dff76c507604f6a66d4b9c57800000000000000000000000055d398326f99059ff775485246999027b31979558193a08c4b5f4b96124f9ac3606e4d69491abf05c2343cfa120dbaa01fc053b0566841a037155bd69f4977d578e5f00692ed315122bf854e9776774b9bea003e7fbb78a9f901cc2a85012a05f20083046d05946cd71a07e72c514f5d511651f6808c639535396880b901642195995c00000000000000000000000041515885251e724233c6ca94530d6dcf3a20dec7000000000000000000000000a8d22026119bc8a33941853614148fda61971d4d00000000000000000000000000000000000000000000000000687711b11286b30000000000000000000000000000000000000000000000007dcd03b3afae9f8d0000000000000000000000000000000000000000000000000000577c5234d385000000000000000000000000f7d4bbfd5affc76ee8e3622b32433af635d9a0340000000000000000000000000000000000000000000000000000000062c9fa5c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c622cd7fec6148614989dcd3932dc0bb9ac06a99f6319edf907987af83d47ed1a76fab1505eccfc3248a40a8a272aa367c6fe55f09718785dc6cd94574a93f5c08193a0a3d780c9d2b926309d02221028b58a79b958d3e34387278d59a15de69c3e8ee4a0248e6ec143bafe5d7b5deabbf5a73c3ae3594153ae267acc25562f3ad71f4b34f8ab0e85012a05f200830434269427d25d982bd3ed23ade952ce1b9af9dcb614717180b844450edf95000000000000000000000000b8632bd21cf3029677f10097892b565d62ac9d040000000000000000000000000000000000000000000000056bc75e2d631000008194a009ebc3364d59073bd85c1280a6eb6ebff926d9d7a1bb1592b102225a8110c24ca0374a3a1ea4bde149c619032dc40cecb6319f3b692a3f92d6e83af2ebe28dfd3ef8ab1d85012a05f20083010a4794a0c988d9f1e7a0dda8cb63a3db12f2755556434980b844a22cb4650000000000000000000000007072c4bb7682ee1002a26f090291389488b2614400000000000000000000000000000000000000000000000000000000000000018194a00cf7b783fd91172b94b53a0610c3e8e0e280bdea05c725d2503810b303c35c2fa004c4654ac7c150ac98eb357905681172219e8cd02d66f2599a7fd75f275448ddf8ab3885012a05f2008309e0af949c2da24201c9b36628e36c0b441b4122bf5490e680b844a9059cbb0000000000000000000000002e5d398f8ccf2d52e14a8da8e87f2463139826ef000000000000000000000000000000000000000000000000000000003b9aca008194a060fe162619901c267cbccf0a897df4f308c37eabfe8b3d43f31fd861ce16d0ada04c44bee54b832bebdc72012b4d6483f844dda0e38896a6074ada4bf5f217c4f9f86b8209d085012a05f20082f2d49447504b02bf0bfd9fe02248a6221f582593e68dd5808409e1a83d8194a0ddf6fc47bcc66ad2867118228490f82277b7bc668a0cd5acba208342c813f2e3a01239d447cb6355bed688684f2566a5a193a9aed7f7ebb3c64985935c531e5cd5f86d81a485012a05f20082520894d825acc30d4ce6c7497f38d37442e8d083ac734c87050fcb9ddcd849808193a044915a8b05c24d00be05e8b4149b6b9f14ada7fc86cb9b8c4d43f8e7646e77c8a008cf8c8c1b25d866ed3698fab3056684707f21186d2b6380d4c236db2304dbeff86e82590185012a05f200825208945f3ae36b303fb3a824ba154887019f1cefeed7dd87dac9c34b512db4808193a04998c2a073e3cae318f9719bb54acfce571d8ea4010d8a7d2dfa68d9fc620faca0300e20d2ff9c99fb6d6382f96424beb9f94253c19df59de7b99a9fb01d625ddbf9016d81d385012a05f200830222279410ed43c718714eb63d5aa57b78b54704e256024e80b9010438ed1739000000000000000000000000000000000000000000000008ffb6787e8ad8000000000000000000000000000000000000000000000000149ffd80841f976be62e00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000c56fbeedea16829f7b10d4968b1b81aeca23833b0000000000000000000000000000000000000000000000000000000062c9fa6b0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d5600000000000000000000000051d9ab40ff21f5172b33e3909d94abdc6d5426798194a0a8d5b1f083511ff8533613921ef94a88841b57746e581b79be1d237abe431d7ca00bcd5f6d9a88310738f3b2c788bd29181cf8310d38e8b47ca64ec2c505d035bbf9016e82016885012a05f200830ab9ac9410ed43c718714eb63d5aa57b78b54704e256024e80b901045c11d7950000000000000000000000000000000000000000000000009fa2263741ea43e90000000000000000000000000000000000000000000000000000030f7c038c0000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000510ff1fa0eb385301a24fb70fb9faf6790679ae0000000000000000000000000000000000000000000000000000000062c9f81c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000141127b397594c542ee64a75135d652094e83f208193a034d64c07ad55492cf4c8cab235086d35449633704f8e9ceac8f9c0d08e49404aa00c9936899e1feed7eba6920f558dc0474e086cf61837249d755adea91388268bf86a1a85012a05f2008304bc6c94ffe811714ab35360b67ee195ace7c10d93f89d8c8084cd5e3c5d8193a0d8f6b522d540d410c42dce91ac157c4399e6a9b1886a70c67eb46e4600488e15a07012959d90b7b47e663297178100ac8f24a22a8d354be2ae0102fb14ada21a60f86c0485012a05f20082520894ae88284ac5c7e6806720ac904eeb5d9705e1764087662ff5b682b800808193a0d5223ae90b1085cb62f87c191688a89dc51f88e7d0067c806c4bec04a09df67ca02aa4fccc750e0d65b45e2693b362c8496f703f6ccc288ee79513bc1a6ceb451ff88c82079d85012a05f20083013db394b3c0b3d3803d6c9acf6c1af89bf1cb728f8331b680a43ec862a800000000000000000000000000000000000000000000000000000000000000008194a0b921eb516fa4208111409919a448a702f1b9d2f903d703e6a56b4e9ffdcd4700a04f15ed6e41f3b81da2e638a6932d966910f4d396f26fb6c5ddace022e7fe8a86f88b82027485012a05f20082d5d5942946d0dbc8d7ed53938706549f003df243235bea80a43ec862a8000000000000000000000000b3bc8b3b9c1821c22ebc1a68d7fed2bb0c7964918194a0bd7632650197984b271faf60f5f0775c4feb06d6f76ff16fd9256fcb1ff5e56ba04a03fbb05f8fd0c5aa1f5b28cb83a199d679cd017cef77d8009f824f37e134d7f8aa0685012a05f20082d3629441515885251e724233c6ca94530d6dcf3a20dec780b844a9059cbb000000000000000000000000f61016c036bbfda4000b11cf92bd3ba964307f1e00000000000000000000000000000000000000000000000029a2241af62c00008194a0b2295197819b246dd045bdfe23a744f821783a475f4b9e5e4ed7d98caaad403aa01272fadad267979121fe115c2d3734ca7f8ae8045d6348622455b6b2067dca7ff9016b5085012a05f20083023fe19410ed43c718714eb63d5aa57b78b54704e256024e80b9010438ed17390000000000000000000000000000000000000000000059145b26bb5ff5b40000000000000000000000000000000000000000000000000040d214d3c48e02d79900000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000edb4dce561956ca9f588a2668ffc1f24574bbb310000000000000000000000000000000000000000000000000000000062c9fa6200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000c2bfa54d6d4231b6213803df616a504767020ea00000000000000000000000055d398326f99059ff775485246999027b31979551ba0e711651cecbf462734e8c7aef282516e9498377ac9e2c3eeaf0a317e9aa56538a0074ad2bdae4743a6ffb6bc5fd1b639a5001cd5694ff5924041a09162d11f2e18f894830ab65280887fffffffffffffff94000000000000000000000000000000000000100087b37c08ecd3e620a4f340fa01000000000000000000000000be807dddb074639cd9fa61b47676c064fc50d62c8193a09b0236fa41bc02eccf70e0d81555cd8e0e7f8c7eb11e1df6aba26f8a0af701efa056ded906658de6e83e5b702cde9dab66d5c9ac35bc695f570c27443973e50515c084024cdabe diff --git a/crates/net/eth-wire/testdata/bsc_new_block_network_two b/crates/net/eth-wire/testdata/bsc_new_block_network_two new file mode 100644 index 000000000..992865fe2 --- /dev/null +++ b/crates/net/eth-wire/testdata/bsc_new_block_network_two @@ -0,0 +1 @@ +f9374af93742f9025ea0c7b06bfac42df57b5fd6f3629f8ea9f8cf5d7ad084984bf8dc450cd61e50f516a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794ce2fd7544e0b2cc94692d4a704debef7bcb61328a019a2e39a27b99905a25e35b1b72027a86f8752665b5d33345fb250618c185bdaa06c5d3a7e93e8a4fc6c3bd0b4764ed33743e1c49bd49e91ae737aebdacbba3dcca0d34158579324cf536b1306865ff66f55e0347c89e32832c7311b79ea8b5c7d17b9010002200318048017110000010085410199a130000291008801004420200100a000d0811710014084c10900908104000084398054199082d2219000f00084206849001004a0000041000d054009002100246010024011cc53048c1f401480080240129050a532222800090908000001da112800100a80100c9804ae04f042000801900014018210280000c1440018208a49012c26837418c0881401007cc00a683802209010105400440002488086488107040f14c548101880000108d2000a01426040843282000082010200c008019002b2600100800e295091c0d42a0009a40918b81200808080000341102124041814a020808a082000689200080448228400028401282e488404c36a52835a69e58462c9f58eb861d88301010b846765746888676f312e31332e34856c696e75780000005d43d2fd041a5f838caa551d336ef6385147f725135defadc5410b9e91a3ba90ea2db1341f6d48fac5324a915b9eed7511862584f6fc8f3a2b6089886d1ddfc37fa26a2c01a00000000000000000000000000000000000000000000000000000000000000000880000000000000000f934ddf86e82295d8501bf08eb00825208940ae2bd56f2231128292372cd977c81e716ac01e9880d364d0f73e9f800801ba00e8132f2b703051fce50f4ecd334ed39d2b8792de79c48aabd12c7c754d109aea07705b95ee87bf62e4a91e39b8715843bbcd95d9d56fa620765b9dcac2ba19bb4f8b3830630eb8501a8296439830f424394cc8cd14a1f7df6e7044316d17efe3f5dc403818580b849000070460000000002d13762ebef8b60000000000000000001a510f84d246af0da7fc7c976dbeb2f9b8d22e3d1c908c9b205368a332ec44dc2effc6266829c342fcd6381d95899f07e8193a0c65b88837d9acb1f33538f11e47fe1212f28c1531cfc502e21a5019f94ea9428a047245f64b40670a736c75628ace64c24afeba62255c5ba9758cc158381d4e1ccf9015482026b8501a13b8600830349af9410ed43c718714eb63d5aa57b78b54704e256024e8711c37937e08000b8e47ff36ab5000000000000000000000000000000000000000000000000027da38217777f900000000000000000000000000000000000000000000000000000000000000080000000000000000000000000444b2b8e2f9588ef765bbdc0ddf4659d36f050cb0000000000000000000000000000000000000000000000000000000062c9fa2f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000d0c4bc1b89bbd105eecb7eba3f13e7648c0de38f8193a091dd5434ed5bb69c15b057aa4d53a409f9c4d3970ef66a4e7ead7d6ca47ca236a01a6ef87f781f971517ee73a35c889bfb2ec1529a05e68c50e79828b0c5c7870cf8ad8270a9850165a0bc01831e84809400b6917e43d1ecd30d2e3f5ad592c198fc65cd0480b844360a788fe9fa3276671ba9ba3c94201010238be6a74fc1b100000000000000000000000000000000000000000000000000000000000000000000000000000000000000018193a0799ffe956c3af7aeefeb9025dadf13ea6a00bdcd95bb0dc9c4a1613910e8d4bba056bf1920fd3d2566480d852f460999219ea7d622060fdd4a7645b8f74e4a1ab7f8ed8222d6850165a0bc00832c40209435a6d4d4ec0419b4be46193a6da320d6f5e9e11780b884bb3ed43a000000000000000000000000c79d43dbeefae213910bbf574ca944a412b9adc900000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000198194a0ad896c4d5573eab97f0696ef99825abee869fc1b0361e0fde52ea04725ebb249a0317a9ae7d43201042b504dcafda1f08896a386fa11f78e324f8c3490a4925431f8ab1c85013f2ed0c083011f1494fdc7a089cd7463dd6be155a7f3f21cf10338b88880b844a9059cbb000000000000000000000000ea74125b60b3cc15f2c06f2116ef9da2acc6e8330000000000000000000000000000000000000000000000050aa25f43cf5400008193a0e256cf312b8c9b934ff71dec1162c9d70aa26b7f3957883a8db562237ded4e86a03f1511cdd69227c79b35db3f1997fc1905fb2ee632b6c171dc44dc5f1a7470fbf8ab81ea85013f2ed0c082c7909441515885251e724233c6ca94530d6dcf3a20dec780b844a9059cbb0000000000000000000000007fc5a372f9d0077d4ef4fc77b6e4214ce335112c00000000000000000000000000000000000000000000000029a2241af62c00008193a01b42d22949d13ad57e86912336b6b6c85029d193ec0b064d5f536fcf5dfe206ba0541cc4cc8e834b974185353ee2e10d2a755e80439045d29706c6027f06a14b74f88a1485012a05f200830493e0942f6fd3fb883f7a65192e24799addd20caa38c20680a411acb11000000000000000000000000000000000000000000000000000000000000000028194a0887bed365c91b32f26788065a12ce92dad7b8dd5cdc86b71b9298b564675516fa0774dd0bc10b53bae4805606ebca82ff2cbd739a8785e25f8bb1d3af1c46cd19ef86a2685012a05f20083030d4094a8c87a4b2de9bcebeadcc1ca4e6331fe28e3a37880843d18b9128194a0780f3e6493b5e5da731c4e92505ac1e5f4a3a583235be0455308eac337d8b1c0a012ffe36153af2ffcdc903123302fbbda57a8e8ca43507785c021d169b4d71ee4f8aa0b85012a05f20082ae4294e4adbc43fcde17bff2fa4dd0310e4de2b2f2f8b280b844a9059cbb0000000000000000000000007c38b9a6d0d96d50825089f241732bd02755169a00000000000000000000000000000000000000000000000053444835ec5800008194a07d8668cbb0dba90d65713b3bef445acbfbbf2f1cedd15b2f5895bbbf1b470a60a07c588d7e6ed54cf6ece59884b4bdd47b9b026763fb5ce07714cda094f0ccdd65f9018e8229e085012a05f2008306104a9410ed43c718714eb63d5aa57b78b54704e256024e80b901245c11d7950000000000000000000000000000000000000000000001c25802c492b5c903e50000000000000000000000000000000000000000000000004408932dd40c3a7200000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000feae4b05fda89a2604f20fa17c26d8cc61e07a1c0000000000000000000000000000000000000000000000000000000062c9fa34000000000000000000000000000000000000000000000000000000000000000300000000000000000000000009dbf277a50b22b24c6e6145c49db5ee659e6efc000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d568193a007d119a11602ae669e67b719858663824b08e4601bedc17975ff18de350b068aa0782a762c9b900fdf984cc222510c0f51e96b71aabbf811b5c78d52fedc95b7a7f9016e82060085012a05f200830730639410ed43c718714eb63d5aa57b78b54704e256024e80b90104791ac94700000000000000000000000000000000000000000000000000000006ee9f9a1b00000000000000000000000000000000000000000000000000255656d77c343a00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000008cb6898747c1111737333c6069d852facf412730000000000000000000000000000000000000000000000000000000062c9fa330000000000000000000000000000000000000000000000000000000000000002000000000000000000000000f275e1ac303a4c9d987a2c48b8e555a77fec3f1c000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8193a0846430e60282280f3db431ab01cd281c5d42da6c90058cfdd5782828ecd72e8fa027b6de4c05f7138af3b5a41946cf53d76c72b4c467acf9ac9050f3684091b2eaf9016e82185d85012a05f2008302bbd99410ed43c718714eb63d5aa57b78b54704e256024e80b9010418cbafe5000000000000000000000000000000000000000000000328a05b8ec83f333f2d00000000000000000000000000000000000000000000000001d876cfed9e16f000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000c66d372f4fc2a2bbcd24462186e462e7ec6fe9900000000000000000000000000000000000000000000000000000000062c9fa2300000000000000000000000000000000000000000000000000000000000000020000000000000000000000002ec44dc2effc6266829c342fcd6381d95899f07e000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8193a0d81a6a36792d69bf35c3e8b2caa38384abc49845e1606bbd5f10fbceea47de0ba0501259f515a7d4d838154369c39ccb88f8e4556b3b790f7823dc561d85cab9b3f9018e82a2d185012a05f200830f424094cc8cd14a1f7df6e7044316d17efe3f5dc403818580b90124e1bbf2d6000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000002ec44dc2effc6266829c342fcd6381d95899f07e000000000000000000000000da7fc7c976dbeb2f9b8d22e3d1c908c9b205368a00000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000002f3f14caf63581000000000000000000000000c66d372f4fc2a2bbcd24462186e462e7ec6fe99000000000000000000000000000000000000000000000000000000000000000010000000000000000000000006778bfa3904ae3386236ef397620816c90cd351f8193a0e64566e20f86023c858cc817042bf0e99078b507974e11b201d31d8a8284d782a005fb7afaddde139ddf76481a1841c8f258e3571a6fad71d5b9ef9897a4d5bfcbf8ab0385012a05f200830102ed943ee2200efb3400fabb9aacf31297cbdd1d435d4780b844095ea7b30000000000000000000000000000000000000000000000000000000000001004ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8193a031f0a1a20436fe41413d460fb710fd81a055f89242675387fd5e80c16d501af5a03e71d5b5aea32ec68df8c972caf645d0acd246f9ecdf091e7f182a2582f0a517f9054f8306b43d85012a05f2008307a12094137924d7c36816e0dcaf016eb617cc2c92c0578280b904e4c9807539000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000400010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002800000000000000000000000823ed46f91ae5ec324471050bb9467e100031c4b060f030c020a010007090406050d080b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000005ab3ca98c00000000000000000000000000000000000000000000000000000005ab9c9a6500000000000000000000000000000000000000000000000000000005abe0dd9100000000000000000000000000000000000000000000000000000005abe6713500000000000000000000000000000000000000000000000000000005ac08201400000000000000000000000000000000000000000000000000000005ac201e0c00000000000000000000000000000000000000000000000000000005ac201e0c00000000000000000000000000000000000000000000000000000005ac53a78000000000000000000000000000000000000000000000000000000005ac53a78000000000000000000000000000000000000000000000000000000005acbe774000000000000000000000000000000000000000000000000000000005acd9970200000000000000000000000000000000000000000000000000000005acfc1ca500000000000000000000000000000000000000000000000000000005ad39c20b00000000000000000000000000000000000000000000000000000005ad66500000000000000000000000000000000000000000000000000000000005adac3ac600000000000000000000000000000000000000000000000000000005ae0171dd00000000000000000000000000000000000000000000000000000000000000065a0cd3a48e9941ccf0f7c6cbec664697197accd6ee1784d80ef85c188befa05dca413fe132f11419dcf0e1101dbb3c6b2221a9a6e5ed50f163b92db3e8ad67283eb99a66eebdc6cb58bfb8d5e342aa9e3d4a29a1ec98ace97da8758e2f4ddcf7ca47a6e1099a795a2af8dd1a08794f536d1303aae944b296643104c3e0995788a14bea224abbac52f972a7c40ff25145c7592c40e1615872136419baf4d62d9bda4f54ab92d539faa797ec0346248abbceba3bc60a328eba920ddfe3fa872823000000000000000000000000000000000000000000000000000000000000000613b4d32744ea3ddaa9f6e578578b376cbda88d62fe59e5d0bb6455412a7c280572da765f9e87225238c66484fc8854e347eb6e27618d6447cda415998a1a4097663f4a2802cfc061f51cc24f3e48e74f16185f12d64e5684cbf57d2e2543455b470ef81491e97008fb22213154d72f1d1f173eefbd12752d1a1bce5c9375b40013a4b668e580f8b97d38863eac3c90f16f60f9d8ae6b9dac37574cd500dc198340c0b027c9458274eda797b640d81471582ae3c012e0e4619bcbc5989b30171e8193a0e5692ac94e4b2bec65646ed9428743576436d507f00468896554a4b57344f0b3a061570fc191e193e05678b8f6347562a9b58d43793e780584d946ffe6b38bc83af9016c1785012a05f2008303ce269410ed43c718714eb63d5aa57b78b54704e256024e80b90104791ac94700000000000000000000000000000000000000000000001b1ae4d6e2ef500000000000000000000000000000000000000000000000000000006c3e97cc1c821400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000008a1a56bc6e7c3915fd4e0da0dc640e43dabfa1f30000000000000000000000000000000000000000000000000000000062c9fa3300000000000000000000000000000000000000000000000000000000000000020000000000000000000000007eefb6aeb8bc2c1ba6be1d4273ec0758a1321272000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8193a07a6047d49a5e05239ea89b30ac6b780b2ecfc67002627ce5fbe4df0980467918a04f96598802c89e7114d5566eee83707b548158353f9b3c1db9b1ff3de5ea0ddff8891785012a05f20082d58a94ce93f9827813761665ce348e33768cb1875a970480a43ec862a800000000000000000000000014051c4fac96951d470523555e5c59d422b17c268193a04cec9bc0ad3da9a5e79dcc3f04b29a22c4674320a4cbb83ae17ed0a42f92f4eda040f6db5b3d02fc47529e1ea55f16192a059ce03b00032374aad3e416597e2b2cf8ac8201d785012a05f20082ea259497a68a7949ee30849d273b0c4450314ae26235b180b844441a3e70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008193a005768eb92476c32ce68cd280d55f16305a353308369ad47084694f42b542e8c2a06bf33ab57632260abfd7964c935eeba84ca0f8e914c9677d7f77f9cdd86c4820f8ac828f1185012a05f20082d0519462891201468a517eeec00fe72f33595a3f9047ee80b844a9059cbb00000000000000000000000078beea752ffb57a37d228f4ba526039f49dead53000000000000000000000000000000000000000000000003cb71f51fc55800008193a0302c1c0f617201e60cee8fd15cf585d0c33c32a38635b89295082fca8943c8bca014178a074af0d42f93fe0642f6f4855f37ff79ec22e1716a04acaabc4c402d02f9016c3085012a05f2008303addf9496d25e2a164037954096b81b0e06c610c5cc121c80b901045c11d795000000000000000000000000000000000000000000000000d18df9ff2c660000000000000000000000000000000000000000000000000003541c5e29dd078ef000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000080dc9141f4c2640c7a7a723b6db234ed32397e5c0000000000000000000000000000000000000000000000000000000062c9fa29000000000000000000000000000000000000000000000000000000000000000200000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000492733b1aace20be200aa9a15bcbe23b428585e48194a018a26e00ee4dc78ada1b2d3d7920453e4016bd0cd3ecaf19041f4d1b91719eafa04681255a63b8a3f4953ec4fe0a368553cf805fc964806fb9763bb48254a92a58f88c8214f885012a05f2008302e87594a0c988d9f1e7a0dda8cb63a3db12f2755556434980a42724063f00000000000000000000000000000000000000000000000000000000000000018193a06e77531160185a2f0051af78fc83b71cef1d78e2755b192aab19b1e45d1ee4c0a02eca5f95f24f3032a70ff92adf3db12b72d0c5877bbf446804f67c90b5cb3f73f9018c1d85012a05f200830377d59410ed43c718714eb63d5aa57b78b54704e256024e80b9012438ed17390000000000000000000000000000000000000000000000056a6418b505860000000000000000000000000000000000000000000000000146a73b108bf716b56f00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000009f05c5652c142b187989ff821e04d91354ef76970000000000000000000000000000000000000000000000000000000062c9fa2c0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000fea292e5ea4510881bdb840e3cec63abd43f936f8194a0d8d03bb3671d25048b0b2ed3c289d1f29d068f192d69bf420ef0f1f30671ec8fa04e7191eb2d6231c7237122731a9071d47f80c646f925f72a250b1a73dcbb9591f8eb5885012a05f2008305e92a94b81b395f30d47f3836e1986294c80d3c13ed6b7c80b88486c435020000000000000000000000006405db51c5a83b58f66e2a75264e0d3a824b6cd9000000000000000000000000000000000000000000000000000000000000181800000000000000000000000000000000000000000000000340aad21b3b700000000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d568194a04ca85dada70a6b3693fdc3c9f3a9be569fd04c9f2968783a6ca98004dcf941d3a05be6214cda1ada3160bfb6c4bb678a9afa114e4137f8b1c49e46f2f6a6cd533cf901cc0b85012a05f20083013ac29464c7f3c2c19b41a6ad67bb5f4edc8edbb3284f3480b90164486046a800000000000000000000000000000000000000000000000000000002540be400000000000000000000000000b7499a92fc36e9053a4324affae59d333635d9c30000000000000000000000002c0ac5f426d11d82b08fe262681bccb6400292150000000000000000000000002ec60943eeacf07882e87d77f0a36a12c13ae8720000000000000000000000004082b107ae0c414a7b61fe2ecdd078552c92875e00000000000000000000000000000000000000000000000000000000000000e067656c61746f6e6574776f726b2b5a4a2ac3239d27345011556a0279cf98c7940000000000000000000000000000000000000000000000000000000000000060000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000489fc76120920000000000000000000000000088f8ccc064ba2d39cf08d57b6e7504a7b6be8e4e8194a07fe6112bbb2618aca13b4ee22543c938109f16160008cbfe2616a47ed588910da061d2aff14939eba27d9dd940948cc9b4c8c330a312cd6eac5d58e44b5c29d59ff901ac2f85012a05f2008305d2ea9410ed43c718714eb63d5aa57b78b54704e256024e80b901445b0d598400000000000000000000000008aed8578daabf12d48031fa5d9727e4afd42dee000000000000000000000000000000000000000000000000f592c6ba68202fc900000000000000000000000000000000000000000000063837a9deecf25a7668000000000000000000000000000000000000000000000000005f0535c6527e16000000000000000000000000f44f0b991803ab483c4d68d6611bb74e151ecca00000000000000000000000000000000000000000000000000000000062c9f9f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b47ebe0d7c539a5744313bd2ee969869962c6d7d4a964b2fedcab93b29e510ce06f6d3d1c28074057d499d0a491cf5f4d0b07c38948575e0aeef5023f5688d8578193a03f5b58ee66c4988bbade98d483760fbea44b5455f863ca93d897db72a8c3e06da07455c01f1771c21a34c2130fe6e5062b55c658e64efa1518fcc04bea37ad3764f86b818185012a05f200830603fe9430cc0553f6fa1faf6d7847891b9b36eb559dc61880845238faf38194a079e413c6c62bfd3cf28e61924badd4706e5796ecab0f8622793abbd3a4356892a0165e4c243007d230963e12d6c640fb077a30a9ebc00b3490366bdef7fc5986dff8ac818f85012a05f20083019083949888d3d9fbc12487259d1c82665b2ffd009936c680b844a9059cbb0000000000000000000000006b81834b229dcec94ce422e62fc979c4d5b8cc1a000000000000000000000000000000000000000000000002b5e3af16b18800008193a0324f9f8d76d114c51b7a402cc4acc939161b783b5febed8590e7a3b0b55e4294a04f543360b7adbb8e431dbfc9dee6e895966041ee66599474f016b1d1e0679fe4f9016c5785012a05f200830473c6940dc614ecb00fe2f6312cd1736e61a04969a4fe7b80b9010438ed17390000000000000000000000000000000000000000000938a5ee3fc3b252c2000000000000000000000000000000000000000000000000000593f31e8bdb4a0f7d00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000c9d38f7599d73f14a53e7550d0a0da184c2093990000000000000000000000000000000000000000000000000000000062c9f6a200000000000000000000000000000000000000000000000000000000000000020000000000000000000000009d7c580e0bc4ea441db96eebc7e1440d264bce51000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d568193a07f66dcf1242257c0da7b4182db8c754a6f5207fd2c3528277725b76618b14577a0555c36bbcfc7d27d1c6653dac6fa80371b48e3ac806464c841457101f46748a9f8ab0485012a05f20083012b6e9455d398326f99059ff775485246999027b319795580b844a9059cbb000000000000000000000000ad30edd6e3d92f8b3b2163873be021643b4db4a4000000000000000000000000000000000000000000000000016345785d8a00008193a0a0185b5e39b04af3d344c93826eb9a538c0fb726f2f6b03987493d2dfb94e50ea0045ed33bf1d6f5e74128e9a3a535f343e1264283c8942044bbf07c3b5c3e0344f9012a1885012a05f20082f9109498387108842a7cfc7ba23e080030351f6ea68ac080b8c4f242432a00000000000000000000000042334cac63422ff2d199759ac2a49b053b308090000000000000000000000000ca21abb006e30e65dced097f6d0d5fe2e35d3bca000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000008194a04aab588fcbf0ac13e2bb3d6e694b30bd90557cff665b35da42742e41744c5672a050413eaa85d066cbdb1e154954efb31f02a15e83d00619e60e04304ef2eec873f901743085012a05f2008303df0f9410ed43c718714eb63d5aa57b78b54704e256024e8801fb0f256f6e02bbb90104fb3bdb41000000000000000000000000000000000000000000000025f273933db57000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000ca765d11797dbc2be704293e15c721d80f41b39c0000000000000000000000000000000000000000000000000000000062c9fa200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d5600000000000000000000000023396cf899ca06c4472205fc903bdb4de249d6fc8194a06dce796c1ad09857e01419549b7c11becba8d579819e66d84729a2d675cc09b8a05cd1cd25d5d549ee8d7403c5abc8145c3bc33551c0ec1735f85ff64dbab45297f8cc818a85012a05f2008303a5a99431485adbbc19cd61319208d747f154649df73b2180b8644962ec64000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000708a4998e16ef000008194a0cbf87f23aa48a35dd503a62e386f01eadc2aaad7d03afb07acd2f4da368d62f9a006ae5553c4387219f5fb63a7d1e937715caeb701375378807e8028ee7cc38d93f901ce82036285012a05f20083020844942058f45afbf6dd9be1fff235ed8d24e04147aa7d80b9016408e8755c00000000000000000000000026872f032f325ac58e91ba1b76078c35c212afe600000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000001a055690d9db80000000000000000000000000000000000000000000000000000000000023027c2f000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a55373237373536333939000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041498b65384b0cd18ef2665122da3ed033c8e9ef6774ea82d7cac73967c0ea44ec5e9849d11d7ffb9ef88fae73505a8559d01f5e2cccaa01875a106ad35af2349c1c000000000000000000000000000000000000000000000000000000000000008193a0255b604caacb1b43f87b9844e6e75164858b6d79392d53f8c07bac963f05ae22a075535fece190864fc310bb635479ff905d3666f6e1ebfed073d4a1cb82629b85f88c820e0085012a05f2008301404f94ce93f9827813761665ce348e33768cb1875a970480a43ec862a8000000000000000000000000054e586cfdbace9768e52ef2be7aea6ef00114728194a0177c5a506e40a55ddd1bfcfaac362ad9409c67ab47fac332dad019e83d5b216fa0753191d5383cd527a6170be2bfbc5128bc385028219b875702d3e05a8319e841f8ec822e1185012a05f2008309da3494b5574da0f5f9a236e5952425c76df08d06df2aaa80b884f6f2fc8f0000000000000000000000000000000000000000000000000000000000002910000000000000000000000000000000000000000000000000000000003d19b6e000000000000000000000000000000000000000000000000000000000724b229500000000000000000000000000000000000000000000000000000000059cabf61ca03adff54c7e16cf5f4dd777fc1e0c764e5ec32a4adc3aa182948bed07007e45dea046effe0772f30878a81411f1acf4dc7c196fca167e30453fa1689c46101dd5e4f901558208bb85012a05f200830383df9410ed43c718714eb63d5aa57b78b54704e256024e880422b56bcf110000b8e47ff36ab5000000000000000000000000000000000000000000000000000628b59fbe2dbe0000000000000000000000000000000000000000000000000000000000000080000000000000000000000000f73a7f085085a6950966def986e104e5d857a4460000000000000000000000000000000000000000000000000000000062c9fa2f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c00000000000000000000000039388b6610ece08ab35d6fb7c1f913850ae9d4698193a0ba08fcd78a83fa6263689aa5f1b4b52352f37e779f250147512815607a695e2fa04749a55cb75421ce3dfe514cc6c7bb6c79a83cecfd3b51a3c728ad2f975fb0aff87183089c6f85012a05f200830186a094b6fed4439bac0e3d152465e6b6e23b485fbb654e808885e3a02fb09085918193a030a453503b483d12c64bae73a4502da50b6bf1daeb3cff98808cf19eca584162a02c986eb6f976ec91d9d200bfc9cd651e1ac52efadc0927de2c776c7b2d848954f88c8206b585012a05f200830813af941373794f05fdfe6f97ec18a14ecadca9307c1fb880a4b6f80c610000000000000000000000000000000000000000000000001e7ebba85d7180008193a0719bad64369b9241cab218a4f4ff837c4c73222d2232626e133e90d80f150741a04b3e4285238446f468bf36e3adbf6d11cf849876ba55e3010f0de5c3eadbfe7ff9016e82013085012a05f2008303ccf09410ed43c718714eb63d5aa57b78b54704e256024e80b90104791ac947000000000000000000000000000000000000000000000bc10b014397db9e6abc00000000000000000000000000000000000000000000000006cbc589d87dfe4800000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000537d57154f29cf99471ee70ee1bdb0548b13606a0000000000000000000000000000000000000000000000000000000062c9fa3200000000000000000000000000000000000000000000000000000000000000020000000000000000000000002ec44dc2effc6266829c342fcd6381d95899f07e000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8194a0faec76ef7b9d652721d8a96a99becb51b2e9a394cded4d7fae903116ea89bbf2a03cd5c8b5b3ff7182c18eb89a7763294f8557fd3830e263c0f23c2472e05baec9f8708317d05d85012a05f20082548094fddb9fc5a59ce93d8f3cf3a3351336d7a8da9d308805a266d952cf0000808194a064ca9fa47a6810edc88a94de54ed9d2da15695f2aa3fd122b530854a945afe22a0096236d4dc7dba68d2b7fc611735500b4a98739d7edbbc2c16b43aa9ce572b79f8910585012a05f20083034fde94e7cf63b3d33a2f31f8ee1d6e36df648d38c7a36a872386f26fc10000a4db663865000000000000000000000000dec5901f6f20bc6ed44f635b04baea8d83e3772c8194a00bcfe0fd850d1d500db7620fd6304ce49340b638378cc59dcff8e1488f17458da00acbd359103be39bd6592b04ce9a8611516ac97ccf2a4c8a28c9c0b6960a99f8f86e820d3585012a05f200827b0c948e9b79405129bc1d0f29cee08f194df8f7078a0c87038d7ea4c68000808193a0630fc7f7454ff31f663c74fcd22c97a37d78b28d05478686f7f5670958f15564a06c421fa499bd1b3fbc1aa797d82fbbaaf04e9b03946ca91bd25dbfb4c3e20555f86a2785012a05f20083030d4094a8c87a4b2de9bcebeadcc1ca4e6331fe28e3a37880843d18b9128193a080199c0b0f318d3243d8e416533e77083457494e409f9024cd92fbc75c6495d9a05ce73fab8e1549749226d5b7d12f7a525da5d1df3e14c9853abdd06a9a792287f9018e82205985012a05f2008304c1379410ed43c718714eb63d5aa57b78b54704e256024e80b901245c11d7950000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000000000000221fe7d7c00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000ee85624b5e1fd1e95ae0f3d6328f502d42e4acdb0000000000000000000000000000000000000000000000000000000062c9fa340000000000000000000000000000000000000000000000000000000000000003000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d5600000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000a85c461c66038ffc8433e2a961339b7f36656e168193a06ef376ff5533944e8cdd03e8e2195f571d592693b584428f5ac9388ae607f280a005dbd8abfeb2afdb0c544e4f242fdc3a9fc3681bb7de571bf35fbc1b4a1ae7bef8913585012a05f200830247b694c63ba9cbb68dd8d777d9e097088afa10e4719934872386f26fc10000a4db663865000000000000000000000000ac9f5f8fded65360bdfdc4cc61be85a367c22a568193a03f7fe3549a47320475660bd05048f2241dc19f21e8f7a2e5818ee38406180c79a014060211dd74ba58b8f95327e3b22295cf085a5e70eafac2569698b8706139aaf8aa0285012a05f20082ae4e94e4adbc43fcde17bff2fa4dd0310e4de2b2f2f8b280b844a9059cbb0000000000000000000000007c38b9a6d0d96d50825089f241732bd02755169a000000000000000000000000000000000000000000000002a802f8630a2400008194a0f9899ff967b2e49a95bc2394bbe811f15351eadaf3587e7d6d07cd1b7f4f4cd2a02d3f681c69b8d5f0ff1dec4fd4646f4d32505ccb138de4988da07ad239a254dbf88c8201e685012a05f2008301ece89435b182cbb67688b20a5fc393bee5e83c1cb4c8c080a418c819d800000000000000000000000000000000000000000000000000000000000000018193a0a0732d1635296d980ecc5da6b5bdfd109e3e5aac57bb095fbca9efbde9881b7ea0333628f7235eb2f64eefcc1d4fb268d10a1453b2dffda92b03a6d04927623f1bf9016c0285012a05f20083044a3c9410ed43c718714eb63d5aa57b78b54704e256024e80b90104791ac9470000000000000000000000000000000000000000000001ff69554d5bf9154c000000000000000000000000000000000000000000000000000097aa69f5297dd700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000d19531ec6053418d1f0a4390b24eec301b9741b20000000000000000000000000000000000000000000000000000000062c9fa1600000000000000000000000000000000000000000000000000000000000000020000000000000000000000004e8c77df82e56dae63ee76d25239dbb9df5f570a000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8193a0fc4fb51f0cf5943cffe330e33c638d9666f4766dd5c39998f55cb8e6539d28e4a004e77e4e3e8bbc7168fbb24bd6362840289f6cce3d3f59f6fa61176c7c8f5ed7f9016e82014785012a05f200830288779410ed43c718714eb63d5aa57b78b54704e256024e80b9010418cbafe500000000000000000000000000000000000000000000000ce13e43b6f333b3d70000000000000000000000000000000000000000000000000b480d17bf2c4a7000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f4f5cea6b6f4fb923611ae29e2eeda557241e5710000000000000000000000000000000000000000000000000000000062c9fa290000000000000000000000000000000000000000000000000000000000000002000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8193a0f9d76fa86d7c29fce4075a19d0bd336b3e761899bfbd185de26d1f1340ebd7e8a01b58e04ab9f923b8e01f04bdd21c4794367159f6c156a399047a035ac16bb8c7f894830eb63d80887fffffffffffffff940000000000000000000000000000000000001000876c34ccedcae467a4f340fa01000000000000000000000000ce2fd7544e0b2cc94692d4a704debef7bcb613288193a070ed892a1952f4b126165a847e733969d9fc3f3d74e24e4a5952dbb50636cd72a038d8f2c9ebff08bb88a0860d72eb62b4edbdc04b8ce0f8c831e92d2e6635d608c084024cda96 diff --git a/crates/net/eth-wire/testdata/new_block_network_rlp b/crates/net/eth-wire/testdata/new_block_network_rlp new file mode 100644 index 000000000..665779a74 --- /dev/null +++ b/crates/net/eth-wire/testdata/new_block_network_rlp @@ -0,0 +1 @@ +fa027e2dfa027e24f9025fa063b406f42f959223066dcb49e8734db744c969b7008c6f49734d57ace882441ba01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794295e26495cef6f69dfa69911d9d8e4f3bbadb89ba0964bc630fa2f47f9f13117fbacd0b86b8002e07d6a53c4fb9ac6ff74926162d0a01b11a531f96e1e9c3530abe82f016069e17adcf1be46b83fdafed7f07552b75ba0497b339381b5cc36c4b74d5fcb8ce9227f9f39b9a3e086a81354513e0da6d352b90100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffffffffffffffffffff028401282ee28404c19ae884012889288462c9f75cb861d88301010b846765746888676f312e31372e36856c696e75780000005d43d2fd8419812d0c1993a08e684e58445adfa986fdb0d9150f7416ae73e43acf39dedf19999561a68e87ee78342fe3b9fef9c78d645a472d9d0513ac8ec90d859fa0bc00a00000000000000000000000000000000000000000000000000000000000000000880000000000000000fa027bbdf90a2b70850342770c00830dbba0941111111254fb6c44bac0bed2854e76f90643097d80b909c37c02520000000000000000000000000005ad60d9a2f1aa30ba0cdbaf1e0a0a145fbea16f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000180000000000000000000000000a531a733070a5ff4866d1327d82e403fa35290a600000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000d47f7b9452db24a2be284cd9820e59f656888c7d000000000000000000000000ceb7fdbb92b9a9e8472ba0e0ba9908835254e62b000000000000000000000000000000000000000000000001fdae623716e7e890000000000000000000000000000000000000000000000002bb59a71afbd17a88000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000005e080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a4b757fed6000000000000000000000000d47f7b9452db24a2be284cd9820e59f656888c7d000000000000000000000000a531a733070a5ff4866d1327d82e403fa35290a6000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000002625a020bcc3b8a0091ddac2d0bc30f68e6cbb97de59cd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a4b757fed600000000000000000000000020bcc3b8a0091ddac2d0bc30f68e6cbb97de59cd000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c00000000000000000000000055d398326f99059ff775485246999027b31979550000000000000000001e848005ad60d9a2f1aa30ba0cdbaf1e0a0a145fbea16f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000024432ce0a7c0000000000000000000000000000000000000000000000000000000000000080800000000000000000000000000000000000000000000000000000000000004400000000000000000000000005ad60d9a2f1aa30ba0cdbaf1e0a0a145fbea16f00000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a40597122400000000000000000000000055d398326f99059ff775485246999027b31979550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000008aad38bfb60d59eb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004470bdb94700000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000000000000000000000000002c26a12d0442e19820000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000018414284aab0000000000000000000000000000000000000000000000000000000000000080800000000000000000000000000000000000000000000000000000000000004400000000000000000000000055d398326f99059ff775485246999027b319795500000000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064d1660f9900000000000000000000000055d398326f99059ff775485246999027b31979550000000000000000000000001111111254fb6c44bac0bed2854e76f90643097d000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000008193a011d0b5abab907559e620c53ce2a3b4af6646e4e9fa2942158a1576b5c500a4d8a049a902173920f883cedb71b822cdeeed873f3e70cd375ef6e37e6ca984d55258f8ad820f5d8502540be400834c4b40949621f378c7cb96eeb2633cee1a68ebb0c3ea519180b844a9059cbb0000000000000000000000005583e95d76ec5f1eaf96a13cb8596dfaaed01b70000000000000000000000000000000000000000000000000000000034a032fe48193a0e12698d65826185f82ea97c317867a8401aa55eb28b670bfa54f9fd97ad80de1a017cbde76cdfd38af14c864f23cc44245cf208fd964cb100262d37420085abc9ff9020e820d498502540be4008325633594b0e3efa124e3158c9a4568a8501af5c9c154dede80b901a43f7658fd0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000b6000500000bdfc126d29d2c4d5d715d115675606f861718760000000000000d47e63a1398c9c88f0d33d25df593e8d8e931352a611611a2e203267f809d4af86be777583dd9856c81001e84800201001ca938272255bb00000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000dc0a01219d6612efda4e6996e7c367e86924f1640000000000000000000000000000000000000000000000007067297ca2ac6cb7000000000000000000000000000000000000000000000000000000000000000000000000000000000042011bf9913009818869a2ea8b21c375840a67e3b4aa1522b76b87e4f176e0842e786e3a18509987cb7f8bbad1303cbeb0e7eb281af63a2e15fcff7bbef7f96d0bed670000000000000000000000000000000000000000000000000000000000008193a070af037dd0b8a2ba9584d8e5e65e19c5c25e666244a2d4f8eecc03093406b098a0799dd11a287cac717179838946817b445bff22450a8b46708c8d50361f530fd8f8ed820846850165a0bc008302cf969455e53b5e38decb925a26ca5f38bdde68f373bba880b884b43d901d0000000000000000000000005f41842cff838120271d772c6994f051d418a4ad0000000000000000000000000000000000000000000000000000000000000b9500000000000000000000000000000000000000000000000053444835ec5800000000000000000000000000000000000000000000000000000000000063b9e84f8193a048e7ac69b5ece8b841985eacfcece07c7f22c945dc995665100ea33f8d1689f4a006da72750e3d068a7e975ea076007bda9a690ffdcecb21a7da2cf8252714f525f9016e8308fa4c850165a0bc0082c6f3946b6fbec7934b104e81b2046d24a990e03e17afdc80b9010449230eab000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000007130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c0000000000000000000000002170ed0880ac9a755fd29b2688956bd959f933f8000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000049951a1dcb1a4fa0000000000000000000000000000000000000000000000000042388cebe5d22c00008193a052aefd40a41f8a0c3683cede11125a75a6cae2bb6e716302d5a47ee930c44176a035935a1e3cb76dbd7956da9937c64516d2b0a47aeb2c657ce001bca918461c27f86b81d2850165a0bc00830ce2a29447d49a5222ffb910366800d33852cd7d0d65fe18808450615d0a8194a016736d99091c4827c07a9995dd73a666a19dc8f7421f94d3f6b2384948ab9db1a06264c00c709ec9fc856be5b4ca07302cdcaf5fc99a5e71ae931ea36554c4b5daf86c821489850165a0bc008303fc1a944de2b5d4a343ddfbeef976b3ed347374403850718084f69e20468193a079fa385f3596aa402705bbdc725a261c1359b4c284da9f7d1c9161a9460e4ec3a07617bd80c2eabaf6a55653a66a3ed32f04c8a290082b89ff1d41ceb82842f9fff901ee820349850147d357008304f9c5940c9adcfc5fc5c34074bd67e402c5f9cb14ba292080b90184cba9bc66000000000000000000000000698913a563be1cf25328cb9bac1b0222886fa3980000000000000000000000001b6c9c20693afde803b27f8782156c0f892abc2d00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000004625db80181b780000000000000000000000000000000000000000000000000011b4b6dccf1965fa80000000000000000000000000fbd2196b5116ea40b009526732d5cf75291fd7b1000000000000000000000000000000000000000000000000000000000000000300000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000c9882def23bc42d53895b8361d0b1edc7570bc6a00000000000000000000000012a055d95855b4ec2cd70c1a5eadb1ed43eaef6500000000000000000000000000000000000000000000000000000000000000008194a0ecf160f9aed86e07e79ee4e13693c48d0518d9664fb37c457c73d9689e948777a04d4b6ac5bf3f205f6ea99a257696b367ae490cee28b76bbfb4fc6e0f08c5f966f8ab81e2850147d357008274e494c9882def23bc42d53895b8361d0b1edc7570bc6a80b844095ea7b3000000000000000000000000b5e69c00d621792d8d959ecc9da23a8bc9ebbd9e00000000000000000000000000000000000000000000000000000000003d09008193a0145addd313fe0010895dba80fa4113ec507cfb39ad30003a14675012069ea50aa020ba4215dad641b21f431084b964d54a89e998ea219bb3e079bcc88422bb8c11f8aa42850147d3570082ac4a9455d398326f99059ff775485246999027b319795580b844095ea7b3000000000000000000000000c054290c313ed47ae42df68220350c75290766040000000000000000000000000000000000000000000000056bc75e2d631000008194a0236cc393746917e09285c6bf64730a06f75de9eecdfaf389e1b6121dd6d36c8ba04945e01a6282ac8e2821089641e07b2c914a4cec26cfcb6ec44e69cf02a1e54bf88a07850147d357008302fbbd9453b813e982dbb01fc23fead7b1207c91062c12e380a494b918de0000000000000000000000000000000000000000000025e95f52c10e499400008194a0c481f6023092b2e0ce3ab2a64d5d5690271ddb8837066c8261a37f4fe9cabb8ca031750240c92749da733f9b3bdd36448199dfe743efea233d23c2c51ae0ee781af88a6d850147d35700830350a894ee45d1ee94ca1c15f7f25f3bafe8edaec5ca5b7e80a41e83409a00000000000000000000000023766cb8a96ff2f46f664bc7d088a6306de736188194a0f5bdf7b36a350ac11ece3c5cf3c5f71c2f3067e27e5144eb0d9f6e5e4a244d11a03ceb5a084527c7d70a05ba7493c008a7e37a0251bf25dbe205ce52e9d9a68b0cf9010d82ef4a850147d3570083021b7194abd380327fe66724ffda91a87c772fb8d00be48880b8a40175b1c4990e7856c01bf032923d72f946908298ee9300f52f80703a35f27f8a77a131ab000000000000000000000000e98803e5ce78cf8aad43267d9852a4057423cb1d0000000000000000000000004df3f5aa738d208508b8132c552a6cdefbf7e4f200000000000000000000000000000000000000000000000000000000d357d4ce00000000000000000000000000000000000000000000000000000000000000fa8194a0667dd75ecda34081de59fc22860e84fd3134a811f5d8bbb4aae08985a839d321a05bcd1eaa9dc93c197df92caca1fd19fe0a59358169506b7fc1773148857349c9f8aa3e85013f2ed0c08294f19412a055d95855b4ec2cd70c1a5eadb1ed43eaef6580b844a9059cbb0000000000000000000000004cdaa92643f01cfafbe384c2f9b2823324f323e4000000000000000000000000000000000000000000000000a688906bd8b000008194a017b2eb7f7820b8fc6d9fe2e85ace9ecfdb90199bc6d452d96ce247e4e957bec5a0781d110fd832f5bf7dd2cc88bd9ce5560ad44b418aebc3ba142dc99e2dc1e4b1f86c8203c685013f2ed0c083029a9094ff133a52283e845e1483a2e1af3fcc5f8ee6b74b80843ccfd60b8193a0f5764b2b38ba3e1e843b6d251d1c3f768088cf3a57f79aaeb0e1643dc9a4b9c3a05e539979047f8af0cf43d9a5172f32a5be748d6408c3b2f6db06d299944a604af88a8085013f2ed0c083022d8c940582bfedb791fb79434a79a815f92879c18c2f8680a4e2f72829000000000000000000000000dcb9e76068e941b1739ee691a3ea385c4ee5a52e8194a0d1377151c90cf200d59063a22cf9faca38f3a58c918fa0c9fef10c8c109a3460a00bdb484c30474e8724e65bac057f372adf87f1657425c5bfc3248bb57b073ef5f9016e821b6985013f2ed0c0830224b0941b6c9c20693afde803b27f8782156c0f892abc2d80b9010438ed173900000000000000000000000000000000000000000000000000000000596e4cbc0000000000000000000000000000000000000000000000870c08972e873cfa9e00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a2c8610243aede988b522ca63f687cd914f9d4bb0000000000000000000000000000000000000000000000000000000062c9fe550000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c9882def23bc42d53895b8361d0b1edc7570bc6a00000000000000000000000055d398326f99059ff775485246999027b31979558193a03e11e8684540df05a2a3f87c0a5bead73b614fbe4f682dd543948dca020ffd78a07a9fad3c4dd46a8397107bc7be15ad888b9a284a59fa923510c9c01a34ccf20ff86c2285013f2ed0c082520894f37f5364ad012f398f736ef9e68cefd122d9ed5287071afd498d0000808194a09e2fa2baf10e220f373232158d6c9b163733b1539faf831c401808d510b00059a021b5e1fef68183720621a5084b500041d900947dd093f69b1c04406bc3157520f9023082bd9685012a05f201830493e094ae4b47b8e005f0c6aa55bd0e2790a80e6e60284382ef07b901c41cff79cd000000000000000000000000a639b012ce0e1d81eaf2efd25fb01c49a81315900000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000014467cefc7b000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d00000000000000000000000006dbc4fe79e2541b03fe4731b2579c0b7f46f09900000000000000000000000000000000000000000000000000bafc24672035e400000000000000000000000000000000000000000000001c88194dfc5a391a40000000000000000000000000000000000000000000c50db921c52bb5342cf00000000000000000000000000000000000000000000000000d363cbfdf255728000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000062c9f79a000000000000000000000000000000000000000000000000000000008193a07248b7e74e3616fe8e24ff8c94bbf02a5285059c8c98ba83c618f21079168ed2a021df472480190ea7cea9edbf84a8c8ed6192af18e41be3a625c9aa2a69aa6a56f9018f830774d085012a05f200830f424094cc8cd14a1f7df6e7044316d17efe3f5dc403818580b90124e1bbf2d600000000000000000000000055d398326f99059ff775485246999027b31979550000000000000000000000008d4c4b063e3e353d02a0ab573c33ee65a0b584c10000000000000000000000008bbdf25fca4f853c6bb90b96349eed5823f3ef2400000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000019b28d98ab4d77100000000000000000000000058daadd9ffca38ae0fed6c774eb49f8327d63acf0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000092704cce13a8501c5d92524d16d46a2bc4b1e4a8193a08e1f4a73b474435a120ca3d1fc6e3ca7002aaef4b8daedb3f30560320c86a8efa01f6c738544e041aadeb2c94a7a060692425bf4a5efa70ea6c6235e0ea7bae0fff8ac82041985012a05f20082d0519462891201468a517eeec00fe72f33595a3f9047ee80b844a9059cbb00000000000000000000000001363979237b77bf5b22d3ed5dca5fd5d45cf8b90000000000000000000000000000000000000000000000062030a54ce32400008193a0f02e2cc70c2700d787eacffc822864e6b361e7c11dab033e63fcdabd5b43e34fa03a3051dec11bdbb854037451e40bc4ad505bab5ce66a2d3345aec36221e7038ef88c8217d985012a05f2008301bad9941514c766127378ea9653f9f4428fe25f3fd256c380a4c337aa5d00000000000000000000000000000000000000000000000000000000000000038193a0ed3b84b0f316e945c18fa3ca79e1bbfed278610bc81eb01247b74ff86da5fd73a044f9a7b96ed42296d0a86659f0bfb639d392c2c6ff8250f10346928ecaa43617f9018c6e85012a05f2008303ce7d9410ed43c718714eb63d5aa57b78b54704e256024e80b901245c11d795000000000000000000000000000000000000000000000000000000000045e7f4000000000000000000000000000000000000000000000000117df4a549bd7a8f00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b8929d057f5765854d533d98403b116e2d9044f30000000000000000000000000000000000000000000000000000000062c9fbfa0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000862685aef3443df18c8b5e7e7ce2b7acb5625f7d000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d568193a0cb43efa275350d341d8dcb242fe11054d2c846c6643d20be1a1ce055d4dd15d5a04678b4db71c588339174a4149ff9e09fa301fbfa62cdfebf56c02de2753d030bf9016d819885012a05f20083025ea39410ed43c718714eb63d5aa57b78b54704e256024e80b9010438ed1739000000000000000000000000000000000000000000000006b8d87f051470000000000000000000000000000000000000000000000000000000142aab4bf90eac00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000e5e785b30ae43e7743fdcf48efac9863223a63020000000000000000000000000000000000000000000000000000000062c9fbfa0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d560000000000000000000000007130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c8193a043f8e81b2f8088279d381e9e6f4a2b261b2e826e58954ef6f54b17b5d67a0180a05e245785122f79592b94cd630b1a2a25169cc75adedfaf014137813f19d65557f9018c7b85012a05f200830566b99410ed43c718714eb63d5aa57b78b54704e256024e80b9012438ed173900000000000000000000000000000000000000000000000000000001dcb7cb80000000000000000000000000000000000000000000000000000000004469442200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000002d41466be0892498d45b4e10cf49b7a2b44bb30a0000000000000000000000000000000000000000000000000000000062c9f9ab00000000000000000000000000000000000000000000000000000000000000030000000000000000000000004a2c860cec6471b9f5f5a336eb4f38bb21683c980000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d0000000000000000000000003019bf2a2ef8040c242c9a4c5c4bd4c81678b2a18194a0152f42546b5cf89021799ec4c096b89f5937919dce063acd0501b2f4cc3bb753a0049bfac21dc1a7ce9b8a995fb5df81c76f98959f39a8041e78fa0a5c2556236cf9054f8306aece85012a05f2008307a120948f8289e5ca9a4c867ec7a257b0e9dd1132093e2380b904e4c9807539000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000400010001000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002800000000000000000000000450171b07211a6420c5fe52620a0c18b000016c0060b070902040f06080c00010d050a0e0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000022d046d40000000000000000000000000000000000000000000000000000000022d0b54a0000000000000000000000000000000000000000000000000000000022d1bb5d0000000000000000000000000000000000000000000000000000000022d1ebdb0000000000000000000000000000000000000000000000000000000022d536a30000000000000000000000000000000000000000000000000000000022d536a30000000000000000000000000000000000000000000000000000000022d53f290000000000000000000000000000000000000000000000000000000022d53f290000000000000000000000000000000000000000000000000000000022d64f710000000000000000000000000000000000000000000000000000000022d7049b0000000000000000000000000000000000000000000000000000000022d757630000000000000000000000000000000000000000000000000000000022d757630000000000000000000000000000000000000000000000000000000022d870bb0000000000000000000000000000000000000000000000000000000022d870bb0000000000000000000000000000000000000000000000000000000022daf8e90000000000000000000000000000000000000000000000000000000022df8b740000000000000000000000000000000000000000000000000000000000000006a7325e94a02c3a74dd241d29aa3fa09b510f57ca87115f196b30dad104bc3838200b0e0f171ea0352502d20e054bd764d02669ceb46926b02c94e6c067c12a2fa7de03fffc5e9e948e0174598ce90c1c2883bdd80bd870d67a5b8fb2859e372134ba5daebfc41715f5804dd4910f07086f2fd919392e490e64bf8479b6ce2059011ab6bb2a922fc3c1a356ffd26e5546c9808f7ba810732237be84c999689349eff5f91ad7c3a0c4806492b666f8f75b82404c80b501ade2121574aab9cf083700000000000000000000000000000000000000000000000000000000000000060f68b848656fae4f2bb29856419abe89c6d97da0abfcc6911e157c729f880a924d270d237b2aa9b9d1e72f68bd3e2e1922790d56cf848f23ef0b38908bd16b8d34669a5fe417a91b7d32231a0493330ba597f545d1632cfa7a52cad4f46f166544e703d1f6729f0765b47e3514d0965e513b684257d699d1a382a04f5e0427ff5652e479dddae4aef2f6bda72f4898a1379afa655525267dee1a4be1cab7a58e59cd130a428737a33e3713e27ba31e5731980a3614b58464ea4ad2551386ddb08194a0cd2427965d62a1ea72e5f7bde27836be123426c154c3b381dfea58ec74f16d93a02a8812064e3d9abae824eb505c2a9f328bbf19088c6846dfd27b2723002a2f9ff9018c0c85012a05f2008303c98c9410ed43c718714eb63d5aa57b78b54704e256024e80b9012418cbafe500000000000000000000000000000000000000000000000000000000196f178b0000000000000000000000000000000000000000000000000080df227781429400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000002609e15b99e4156d3850b72c05a990ae903d2e490000000000000000000000000000000000000000000000000000000062c9fbf400000000000000000000000000000000000000000000000000000000000000030000000000000000000000007ad7242a99f21aa543f9650a56d141c57e4f6081000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8194a045a8af1a5efdbd19c1276a981311fc4a90c51c1cde63dd89915896d6b7966ee6a024889aa0eada2d6fc276308d06b4226ddaff74fb79aee1e34bcb007ff02c4b58f88c8201dc85012a05f2008303a86b947457c120205e70e496a1a2530c477087627904be80a4db006a750000000000000000000000000000000000000000000000004bca7fe70b4993d88193a0403f9e199dbdefb49484b6885ab1c24273ef9000e5a629ff3367191ac843afe1a003a252f878a8ea3352343034e5539c7bb9424317e93adaf81c535e81dbb6150af86a2785012a05f20083030d4094a8c87a4b2de9bcebeadcc1ca4e6331fe28e3a37880843d18b9128194a08d69e793cb55ba15536393cf1a7a68c6232ea902ae3f63c4e7d8294b7b0b07fda07383b2651b9fe773bc968a8cd88f46edb6f954d31ea2c42a14835a453ab75ce6f8ae8301d4d885012a05f200830186a0944d1e90ab966ae26c778b2f9f365aa40abb13f53c80b844a9059cbb00000000000000000000000075a61b26db574ebd70781e29e3ed38645ce916b3000000000000000000000000000000000000000000000000000000006b49d2008193a00aa3177b88371aca52953b0a2b3af87e739cab1d8bf8ad273a8e094919003fb6a07d1e9ae7634426cb7afce9a226a9cb3fa59c15c343d652a221b35e5193d83a53f8ab818885012a05f200828cd794965f527d9159dce6288a2219db51fc6eef120dd180b844a9059cbb000000000000000000000000d15a8d1e62a819e84c89909202c50eff9419df9900000000000000000000000000000000000000000000001ce8bf268fbc5000008193a097c8168ee2d3b8d1a121241974f96c0118c39237f5aae7f9b01f258e8733d92ba03ee332da1cf3cea0047f0e8c2d3400ccfb2f43dabe0bd43be4a834d13e4e336af8ad82018c85012a05f2008302b68a94acfc95585d80ab62f67a14c566c1b7a49fe9116780b844a9059cbb000000000000000000000000988395c40ef430b19a808423a0cbd3a3a19bb55e000000000000000000000000000000000000000000000000ca0dffa518274ad68193a04ca0fe1730ead97c98f4b12fcc821095e1d337eb9b858a627e197639f970da36a020eb49a117de190c049036941f3748c98db179565495587580439b38dafc2c7cf901522d85012a05f2008305c08f9410ed43c718714eb63d5aa57b78b54704e256024e871ed9805b0ac7fbb8e4b6f9de9500000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000cd68a4a6bfaf300cdea95587c742cc97f488b7670000000000000000000000000000000000000000000000000000000062c9f8800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c00000000000000000000000067ee26fcd22216e055cba7fb6a62b8e12888cfa58193a0e06ab1fcc17d11c3aa054ceca37b5b96a3e4c20e0d7700ce07e35ef499f3195aa064db8325a9560c4af3e8e9f40c35947ef0835fbe7ab896f698a061edd54b8520f8cd8221a885012a05f200830186a09418b2a687610328590bc8f2e5fedde3b582a49cda80b8646ba4c138000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000014e508193a0b3c94730c342acacdf773ec54dc4a263aef1580f987553d63a6ae75198fe13d0a07c636a742ceabeb51cfd643366c36e4c5ac97f78821c9e9a293b3b828011c470f88c82032d85012a05f20083012b63941514c766127378ea9653f9f4428fe25f3fd256c380a4c337aa5d00000000000000000000000000000000000000000000000000000000000000058194a02e70a5939acab8d493cfdf6690965367338ec8907f8f4168349c6243300cfbb0a0626cf37dbc889f8610856a8bb64a841cf3aa43616524746ec0f3c343d45a759df8ad8204f785012a05f200830130ae94057aff3e314e1ca15bed75510df81a20098ce45680b844a9059cbb0000000000000000000000002fe3f38828ade957f270d7b9c054030d4e33889d00000000000000000000000000000000000000000000010f0cf064dd592000008193a065ccbdfe845f9da606b4661dc3ab6318e51a3b97927c5923d5a946051a678a95a015c88456fd8113c204e448153ca7d0acf1383593010c96a3a52c5b4cdf7bf3b0f9016e82a85a85012a05f200833d09009410ed43c718714eb63d5aa57b78b54704e256024e80b9010438ed17390000000000000000000000000000000000000000000000062030a54ce3240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000008b8278b399755c8a1118a61e09efaac75ecd7f9e00000000000000000000000000000000000000000000000000000181e4f752c70000000000000000000000000000000000000000000000000000000000000002000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56000000000000000000000000697bd938e7e572e787ecd7bc74a31f1814c212648194a0464fd213666447b9b4746543a93e470474a47d27b5999cdb8e91dbc8c551b4c6a02b04c05ff1e128d44e20c00a60251f307664f1bd42ed0891719d028c9070aa48f9038e82011685012a05f2008301e5d2944e917a7f838610819cb4596c92cff438dea463b780b90324fbee349d00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001c77342d17b7cc651ce5da727863367d93cc2922b7858289adc1705c8802dad7f940287ed8aad68c38c5e64f5ee3ac8f7ed038efdc3e9230528d1145882151930c000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b11574713d3832ee1cb69e89bc4e96081313214000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000633ebd95000000000000000000000000000000000000000000000000000000000000004600000000000000000000000055d398326f99059ff775485246999027b31979550000000000000000000000000000000000000000000000000891ccfa57f01b050000000000000000000000000000000000000000000000000000000000000160000000000000000000000000ea2e87ff1bc1e52b640452694e2f143f7f8d64be00000000000000000000000000000000000000000000000000000000003006e10000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000003fdaaeb79f834abfa8a9196431226ad4da9340f6000000000000000000000000000000000000000000000000007376940810e4fb00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008194a0d0573548b7bb99fd428c6732097d98ae5528850bef607e893d9ec5142460c791a01d3e7f416916e48ccc1b0417396846d002d9c0b4c66096c06cf6b4c35abf3e6ff88b82039f85012a05f20082db4b94685bfdd3c2937744c13d7de0821c83191e3027ff80a4beb6b128000000000000000000000000b93e50a2f1bdc9fb361ea3bb9798db7d682336318193a0fecbccc13ace874503a9eb36bc8087c37d488782e595e3ef03381fb598d1f0b7a04984d4d1b46823d74f6b4bc571e41978d712288eaf02de57248484930758cceef9018e82035b85012a05f2008303bb119410ed43c718714eb63d5aa57b78b54704e256024e80b9012418cbafe5000000000000000000000000000000000000000000000003860e639d80640000000000000000000000000000000000000000000000000000020e148622fbf67200000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000cd51e4cd1374e8371d095f15dddea8000ef362020000000000000000000000000000000000000000000000000000000062c9fbf7000000000000000000000000000000000000000000000000000000000000000300000000000000000000000082338511b087c884411d7c17145f6e172fe1b03f000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8193a06e889552c935c20cf69130f396f18c488141820e115eeb8a56bef9d63b2e9b3ea01c738e8589aad4c64a4f9eaeb3e84c128d69037b7d6924697f40973f6b59da0af8ee8326917a85012a05f200830249f094d50f284b483ae0cf9011caec5fba6273052cce5980b884ac7566840000000000000000000000009fe45936dda88c8d4c07090fc43dadc6de644f130000000000000000000000000000000000000000000000423ecba48377190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008194a0c6330361af501289824a643e120b74d650d9890b73ea52d4bca70abf8f0fab7ba035c9612040701efaa15470bf01b1c9e9991b1827e677255a042b6425201a14d2f9018e8201bd85012a05f2008304da459410ed43c718714eb63d5aa57b78b54704e256024e80b901245c11d79500000000000000000000000000000000000000000000d56059a2212f4f3359e8000000000000000000000000000000000000000000000005e668c511a1e90cbd00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000097b282f27e56d393bc38c265f269bc133f6b092e0000000000000000000000000000000000000000000000000000000062c9fbf10000000000000000000000000000000000000000000000000000000000000003000000000000000000000000158d41854b4f6a0f55051989ea5e27705c277180000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c00000000000000000000000055d398326f99059ff775485246999027b31979558193a0bf0538b6c95b5ffed9150a46b86ff63b44cd8b4410a2864b7ecb225e2d585057a022b77b82d9e260f3f0455de87c7086c37185f07dbe6c4e7c1af73e0d1b04e9d2f9017582046f85012a05f2008303f7109410ed43c718714eb63d5aa57b78b54704e256024e8755dc425a3347cfb90104fb3bdb41000000000000000000000000000000000000000000000472698b413b432000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000acf49819d7275eb9b50708874aa72ef3c3e20bb80000000000000000000000000000000000000000000000000000000062c9fbf40000000000000000000000000000000000000000000000000000000000000003000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56000000000000000000000000175facdd947c995ad547f6ad952d26826758a4da8193a05b8694b34341b4560a5d4db35ad35fbb2b0ec60f17b6592f61a2468fd47c6b89a04731e8f8e909da20b7ae410ce0954d00cb8e2ad34a9fe284491f3fca09f4f4cdf86e8301118285012a05f20082520894d4ea90cfbcb54e999a95281b5152b4d2ffcd070186b55873875b00808193a04b8520d36775af6b3eae9c19e65f9f1d474471c6db7bafcf60b0178d4f6fa5c0a0086aaad6e31e254cbbfef8efb39f9aadbd58cc0330e335a336500ffc00a3a420f901568308544d85012a05f2008303d0909410ed43c718714eb63d5aa57b78b54704e256024e88013b620e6108ff00b8e4fb3bdb410000000000000000000000000000000000000000000000000f4c5d27f1fdbc6400000000000000000000000000000000000000000000000000000000000000800000000000000000000000003287ff3b4f814f4710058e5546b05a2be5e627ef0000000000000000000000000000000000000000000000000000000062c9f7690000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000d9979e2479aea29751d31ae512a61297b98fbbf48193a02b3e958fd898bf9377b60eff109377441ba583bc1d02decf2f345ceb9d24d526a004c18db320f8b2874e4890fae0d826193547871d829a9e469cf8b4e2145e9e27f86b818b85012a05f20083017556942d7a47908d817dd359f9aba7feaa89c92a289c7e8084c885bc588193a013345ad9bb955baa84242270e405a0b7d233b05f34e66b81aa8d08bdbfe85591a02aad3b71736d2b696af69957858384c94329b23d9f163f8b52dd5357c877cb01f9016c4c85012a05f20083036faf9410ed43c718714eb63d5aa57b78b54704e256024e80b9010438ed17390000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000030a0b6ea600000000000000000000000000000000000000000000000000000000000000a00000000000000000000000009caef4553dc79db88b3de172fca0d395b4693fcd0000000000000000000000000000000000000000000000000000000062c9fbfd000000000000000000000000000000000000000000000000000000000000000200000000000000000000000055d398326f99059ff775485246999027b31979550000000000000000000000009462dd96b810d6c6384ce43e1c5501cd933512778193a0cef8092e2ad31e3bebff65015a9610d2a1b15c8a28a57caf98c62d6b45c0aa06a025b37719d5b965859623909f663e347b39e170477230ccd6b2e1072f36bec7f4f9016d81d985012a05f200830288429410ed43c718714eb63d5aa57b78b54704e256024e80b9010418cbafe500000000000000000000000000000000000000000000000029a2241af62c0000000000000000000000000000000000000000000000000000002a72688ea8afb000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000519b01527d3e27a31476a7ab037f263bf25b46d10000000000000000000000000000000000000000000000000000000062c9fbf70000000000000000000000000000000000000000000000000000000000000002000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8194a039c007a51c2a4eb70e5a61bb9d462048b3c24f4ab8c7544d6f9180e5a055b3a3a0736d4f41c87c6e067d0793a78c2a80f19c7e7f902f21c4a31c76960998afae68f86b81ad85012a05f2008301778894e2d26507981a4daaaa8040bae1846c14e0fb56bf80843955f0fe8194a0dceef8b9e1ed1e13d4a3d60a2129c873b0ea31623ed964c09f459f92be09e422a03c33a1bf3e1e249e3f43f1e8e8e561f10b8f790343cf11762716342981c5a490f8aa2485012a05f200828fef944a2c860cec6471b9f5f5a336eb4f38bb21683c9880b844a9059cbb0000000000000000000000006238872a0bd9f0e19073695532a7ed77ce93c69e000000000000000000000000000000000000000000000000000000009be333af8193a0477f6ac8185e769fb9706c843ccec930ab83645d5ba4ebfeabed5f4b8ef5f505a038c3737b25390ea9f625aeaaab18731ba7d3c4c3a315f2f0821bf6f55498edbef9016e82034e85012a05f200830288429410ed43c718714eb63d5aa57b78b54704e256024e80b9010418cbafe50000000000000000000000000000000000000000000000004563918244f4000000000000000000000000000000000000000000000000000000488131db1171f100000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000e7b4c84d05e468a646ff79351684f87bf4a3bd270000000000000000000000000000000000000000000000000000000062c9fbf70000000000000000000000000000000000000000000000000000000000000002000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8194a0b1438f42896a3b2b4412d822665e6bd2d837286bfc47cf0b9bddebebc11327d6a01b9ea4aed480cb4eeda313ad4f47e10f2857983579a5f48e2ce20b3811abd0d4f8ad8302110185012a05f200830249f0942adc3468fc4149932dd16d0244b7228aa8eead5c80b844a9059cbb000000000000000000000000ffade194fc88526c8fa08f07a8e9388eaeccf7b800000000000000000000000000000000000000000000000000000000005e9ac01ca07e24b9f0aa108011f15f865ddd50a0ae7ad11d9af1fba51d2b41ff56253ab3faa04a27f6975c9ef105ca3ec11449130b8c5b25a46935c092b6e78f54b75e7004aff8aa5885012a05f20082a185948ac76a51cc950d9822d68b83fe1ad97b32cd580d80b844095ea7b3000000000000000000000000dd129e3c00cefd4c57ac98112d9d122316f7f0a400000000000000000000000000000000000000000000000000000000000000008193a03a95fb5d147ea909ce113a0be0d5223d2ac29b910c8714d0d9dc27c6b41de7d5a0413315035350937692eead688f91df60d4b7bfa5c494c4a915366e00de23e72cf8ac8204e385012a05f2008271b294e9e7cea3dedca5984780bafc599bd69add087d5680b844095ea7b30000000000000000000000003c4257f6d4505d156ea9334acc053c729e794d6f000000000000000000000000000000000000000000000000230a9a1f39dc80008194a0c2593df048c1363e9868ab6c805364219294393e10533c6ff0d3cab4effe2de4a048bcf0e564b8796189bf5280b7c0c32be423be723b60ebee56b38bf73abf8437fa01dc0f8203a585012a05f20083a8650e941c749d5f5630cf365673bf6c0b6b0570c48da11280ba01dba4e1fb276c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000003a3e2800000000000000000000000000000000000000000000000000000000000000ed0000000000000000000000000000000000000000000000000000000000000ed9000000000000000000000000ed3396caaba818dfd3e11a73555b95a62292184f00000000000000000000000097bf43189ab1826b3a3c5b955b409b2d1d9ec632000000000000000000000000b06931cc5d5c4e4ab7c95b4879ab287fe1893085000000000000000000000000cff963efa81e9ef9be861ce94085b16a86fb7749000000000000000000000000a925c6eac6353da15f0218bf7281f8edea58a6d200000000000000000000000053323ebddb5c6052432148b321942d8f6b622a77000000000000000000000000195bddf25d69a2504e41f7ea49a88800822fdf2c000000000000000000000000b8a4c09356a61a5ff703b312ba19c1e8b6f53385000000000000000000000000912b024fa2dfc7e2cdf2335b1fd3fb4d252bc77700000000000000000000000005d1d852705815b2132d37b99fdb027bff607c49000000000000000000000000afacf3038824eb99ae79e29ecf0bed6457a32df20000000000000000000000006fb5092d5725d3a11b4750f58b0c6ed888dfc943000000000000000000000000e0f551ba90b2b87d3594c6c1ad46e5e3101423160000000000000000000000008ede2465724771b84e06f142ef96a93a9593d070000000000000000000000000238e75256284ad2d7ef70ff50110656f4bc12c310000000000000000000000003a337f40544aa399204dc3b3eea20502636b86c5000000000000000000000000b66f2f105c42afa7fea85a8de5198e1f074b63f00000000000000000000000007cdf47e49650d570077d8ef2ff4a52f785b3a7f2000000000000000000000000172df5f1172556ae14ac460d5b71f764fbfa8c130000000000000000000000002fc6bb6c625468077e9e3e01d7ce3860f9afb0f400000000000000000000000069b9db6b9d36ef5bc66f0a70399b84b1ce4a56e7000000000000000000000000211c7e1428c22c8a97a9a10f57b7264b3937f0db000000000000000000000000f1cbbcf630a4b77939da510aec75c55e7ea522560000000000000000000000005e4672fe46126de79e6d5880e1defee28f6f8ac200000000000000000000000017499ed495dfe7b02ebcdf665f89687c0ad4eb220000000000000000000000000c393787ab53a1dba5dd00cb2cb21336303bb8810000000000000000000000005ae7922d8edb5a91308223a20bc587e5004f5ed4000000000000000000000000c95fd5a4b333417f5ec180831d55f4b63fa949be000000000000000000000000c56bda0a6818791e14d6b5e9f589f10635e0d92f000000000000000000000000a60af1686ff684869f91d1b9d5702d610ff6514a000000000000000000000000621dfd894244f177b9afa91c949f186f222e54a3000000000000000000000000625726dad10d8439c9fad8742df34e6968b5ea3b0000000000000000000000005f1d75489d25e4737f439e5d750b23274e1b5455000000000000000000000000a3cca00a5e88218d6fc3678e290daeb09b2fb1e50000000000000000000000008c1c3c9ec43f6e80a816393b52ca7d31f06b712c00000000000000000000000096751522485266bfc13875f4f4f56ea565cf2257000000000000000000000000aac8405a3c4d8bba8ac6007e73ff11ac54a7eeab0000000000000000000000002fb56cdadd9658e23c2abd5883ffe87e2594c4cb000000000000000000000000153e87f911e9dbb048f6c68d5a225ac9650ca504000000000000000000000000afbc483e7420457fc4401a4bae221b441b42de4d000000000000000000000000cd3a03e20779d3b8ec4870d0e9049248269627a00000000000000000000000009cbbda094cc0fa9217b783ace7f0c103a8265cc40000000000000000000000002df9854022f8ba54bfb6f1216a397bc64216622a00000000000000000000000036a5e208670439295f8ffffdc17fcefe684254b800000000000000000000000000ca6842d2050fd7daffaed40b8c462b3ce955bb0000000000000000000000008b74dc3c1cf113f8b6286d061ddc389c6da9cad2000000000000000000000000eee70aef2c5719d8a55445e5fe8e3fa849c37b7f000000000000000000000000965201d7c68862fbd43e06eeb7333f1422c2a3960000000000000000000000009ba4e749c8889c9d664a86c2d0601dfff46ebcd30000000000000000000000000da4764d4b264758943635ab2fe1606320424eae000000000000000000000000bbf3b586206e49366d59454cad127f4acdf57309000000000000000000000000506416962077e0867e28bc677859da75ae0f41d0000000000000000000000000b3c86bfc9f9779e6460b01c2ef428a02f98aee980000000000000000000000003263b778ab8c9825e5758c4681c29e56a41219a9000000000000000000000000bb26dc6452577c09fabd8882e04d628ae49089a100000000000000000000000039f186e2b9d2420d1b27f389c62bbf27ce4aeb0b000000000000000000000000f222721477193805f6d59940f5e099d31d154dd5000000000000000000000000b6ba9809d23f7cfb271368f57a01a5010936510f000000000000000000000000402271bf5afc55178006ea14abf93c3c86f29f94000000000000000000000000cc9aa2970f43f0d82f2e466f2796825432f856d8000000000000000000000000ff3a54d2898a41528dc5c16593f76bf6e5d06b6e000000000000000000000000ff59f3a717debc1baa57ed7fe643979e0349490c0000000000000000000000009e3399efb5669e7633201bd7c9c13ebc4844eca700000000000000000000000077992f50596a7c96545aa7b514c67c700b08e8ab000000000000000000000000cd4e55a98bcc4335c79f36c177a9520b06c7c83c000000000000000000000000154ad80ee492b3f1350b9e495363971467ecdea100000000000000000000000089ca1762918fa329c04136571cf3dbc8e5ce7df7000000000000000000000000770889b67515349826554c68887d8ec71c815b5500000000000000000000000009b1edac6fb5e2a46b220ebad686aa90a4463c0f0000000000000000000000009f1881bac8bc68a9b647c02fe7cf52d001e61a470000000000000000000000005254ffed44e7fc9a23fa9bda8e8aeeb42a4e5ad3000000000000000000000000831b61b93a46f1209cd13a452b3e15aab159c7eb000000000000000000000000e243642ce57f92e2ffffb00add2c7afb886bc1b90000000000000000000000004fe5094fc3ee4042244be2b08590481dde484d9e000000000000000000000000c03c2009fa697309bc3d386287f36ba723b40acc000000000000000000000000ef492ae482b0beb98e178683b3598183b7084ca0000000000000000000000000d932e39fd1638fd7f02681b74b0c6e8918e1b3350000000000000000000000000da75c2d28b4c2244c8dcc0138781d0c39d9ebab00000000000000000000000086a4182423c8621ca1a8bf4a7e5a9a684f9d53f5000000000000000000000000571feabf75590274772e7a1eae7a2734b317d7c0000000000000000000000000318d96d25ac5ad7a40572fcf1fa25b6445e2638900000000000000000000000055f160aa230b08c729c882148daab0a932730497000000000000000000000000aa555d2abc3e4985d460fcdfae2cc027d2772aa2000000000000000000000000517aa8d863a7f99fef24a91e38561cc58671ac29000000000000000000000000a5bb6c84a07e9ee40ac630beca0079f152228ab500000000000000000000000005e05dd03e155c05c38379514cf78e5f6df4576e0000000000000000000000001107ccad19214c10624ecd7db50088c28a3167680000000000000000000000000dbb3d62f875e567da08743ce2a51b12101bd2b10000000000000000000000004bd5a8f5740cdb46cca3d3d0e15ff7717dd38914000000000000000000000000b53d6a9bb50cc536ef9183bb1e7eae25eb98c17f000000000000000000000000e778aa743348222357be075af3fdca2ebfc2d97e000000000000000000000000bd7c0eb89ce8a203c4b9c716549a401aa39dd1e000000000000000000000000004c0fcd60537d3e9a84e9965ca93f6f1486257cd000000000000000000000000f72982588a7cc3a5ab9b0818500ceaaa7624484f000000000000000000000000299febae52caf1ad0873d3741fe42891686358340000000000000000000000002d2d211895b41b0608b651f4c1e4644bfc2e994d000000000000000000000000c02a31c6cc15f8dc117b5a8b67270d1b219b2211000000000000000000000000bc7d3f3174c6ed047c2b6dd04fa160d2394325910000000000000000000000009b95ffc379eccee275004e06a78cdd5b34e3b280000000000000000000000000bef2b3b5ec7a536fd8fac293e72fc079cf0eb9f3000000000000000000000000c096e693e56d5fcc9ae8b6bc75c8114e462dd47c000000000000000000000000c14d67f538b48373505870d854b662e5b5126ae1000000000000000000000000ee3517f17dc883a15e3f8d2633dc04567749e50c000000000000000000000000ddae26877f528db4c41427a49262c9c6d9027da000000000000000000000000022c3cc1565057d88f0a0df189b35484568c129c200000000000000000000000039d9c6006f6d7fd7edc5c73a8af61d5706c5bbe5000000000000000000000000b040935cb9a44dfe96b6a742e042a1c0ebfc9cdf000000000000000000000000516296767b8026a838a70213e03dc88a172a88ba00000000000000000000000014b6bef0fbc22562fd160dfa0d44b1c835361db7000000000000000000000000dd9de19f733fca241ea2d7a939c6164c20ff1b9b000000000000000000000000b0d0563fb96f129471200f66903c147fc479f0e900000000000000000000000047127ee52447f66b9fb543200d226d74e16bd60e000000000000000000000000216216b75040f755e4cf9b12bf0a0644636325e80000000000000000000000003fe6dca44fa4ed4dfb8ffea331d7ef86afdea40c000000000000000000000000944f332238b14336002cfad799861b44374fc8ac000000000000000000000000e11b72af17cb9e72af71cd1abc08fcc6ac8d8d260000000000000000000000000d963e94fe6f31adfa1d9db2b04b08af26d5139900000000000000000000000025e5402325edbdebfbc6090d46ddbe98f9d18f55000000000000000000000000928e761907e53524f12b577eb113096406980f8a00000000000000000000000059aadc0a89871ed23367918d324e6feba00e1d6300000000000000000000000087c15d0b8f74f06e8c5d5587d7c4256615d333fb000000000000000000000000e75087b475a36dfa45ac51cd38c9f952acbcf5f000000000000000000000000023ebc0a53ed404005ba2e637d7834999090b7c96000000000000000000000000585d68c06db79517a23aee5fe8e828d8665301be000000000000000000000000cbf9db1bb6939e8bfbe0ec6e4f5f0770cbb710e000000000000000000000000072bba7450a731e11c574bd68446450ab1a200bb0000000000000000000000000862f397259439d44ffaa0dca4dd461149e4797b60000000000000000000000004a20e8c9e4d69cf76ddb9c04d7361c07ac0c8f42000000000000000000000000bda02b9e18bc716eb94c34fbaee2a9f76462cc24000000000000000000000000ba3ccad9f3446ebedbf87e83938fd68bd5d3c4d1000000000000000000000000935799462b45bf3e7acc7832919ff5ad52f359a500000000000000000000000079675da7de3df00ed90290b9bdb757847df84b61000000000000000000000000a33de1d6e63253aed0a733e4449211cf6be62ec40000000000000000000000000d87a53ea6025d8c9039b1b771c0af7248328cd8000000000000000000000000a5cecc13367c390d819112039e88a470552a942800000000000000000000000090fe764343ab9a7d2828f5dffc2d230fbf723ada0000000000000000000000003decf47aa2f3028eb4b55bd8ee50f85090ccb84700000000000000000000000047d31c409d1e0f1b658f0ae35fb9a788785a26c2000000000000000000000000c6c7212a2c33147a305e5199269e738aa569418e0000000000000000000000007f2c23f834ae4192074c27df09639f104993bdd1000000000000000000000000a162b1d27454b72fd4816c1031a925c6e6f8b5c1000000000000000000000000ec0297f0a72286c92e826e3b55bd61ad31986dfe000000000000000000000000c71f249a136728b6c6ffa09406048800c0f6c2f400000000000000000000000057742d6c41c6a4f298de9381b163213316faa67800000000000000000000000050eea1100fc80b4b74dcb1b649a26ee663a10a6c000000000000000000000000dad7eb32269b2e789729bf93f392285fa5f641900000000000000000000000003c2c9f1c70a98b2b923c5f53795be15e13006db0000000000000000000000000bc6240bf16587c5b550603259f7f5fa75a15daff0000000000000000000000000edafc56fef2d9b8598dbb8d22ddb8854b4ac1a3000000000000000000000000cfd07f1f81e8b3e0bdf8431eb555508735d4bc8a000000000000000000000000b9e5002b8469b9a5a99c2bc5850127231c73d6aa000000000000000000000000f9bc9b8c61b0ba7e5d890d9520b3b4384f71feb20000000000000000000000000a42e399b8f513a6a38b825f162558ad7507e023000000000000000000000000b1df8f1e287239db2fcc05bd8ba5052eb7b5d649000000000000000000000000d68095fb1d4fcdb5e6eed8f3f6971b656b27ab260000000000000000000000008b37b1260f55f43e55ac2c3890219d23d2009234000000000000000000000000b429b78dccead6d40fd3bd9dbe420894e6b48489000000000000000000000000566f43d4c974891988fc69a7544fcbbcd933fd460000000000000000000000008906c1375e48fb293166fcb57e34da47ebdb0858000000000000000000000000885fc82f46c9ff783126dc723e2b4574301da9890000000000000000000000009f3d49992aca05c39a910ee51733d32c3ef3c39d000000000000000000000000d701a82e981ea1fa4306ec227b1fd11d92163dc3000000000000000000000000a26f4ee51cece09eeae586cf83aaab35dd90b5070000000000000000000000007743b7ab7deedf9004227afcf14c2d96d6c7810a000000000000000000000000384f5c591d0744800aa2305fd0c3c06dd9cdc58d000000000000000000000000406b1bd2b78fe64dc8b85aa29a26c465eaba6ec00000000000000000000000009a900fdaaefa81d4a5e483a59ca2a06edbf21d75000000000000000000000000502ee0bc94baf58ec70802fc7c1000c9a9eb37c4000000000000000000000000dfbd9aaa7a2ad52a5c9145cdc09343d440cb66e8000000000000000000000000e11bab0a60acd6c4ef8d50c89c3f2137ed518331000000000000000000000000f97f3d499f7839f970fe8e5327c825d8b4253b6a0000000000000000000000004a0967f61e65e4e7d00f8d60aa66937d33308465000000000000000000000000b92f20adaaca836b0e50d5ee2097554c764115b700000000000000000000000003b9fcf48dd9b112234878c457eb7113943bbb51000000000000000000000000fb0b021a45efe78c1d489f39e6187e78b51932820000000000000000000000003638c2f4b6ef007d993b0d8c2ad0ae301f562425000000000000000000000000f1d03dbeef993d8f4c938d39bd9e7b4d5c6568f1000000000000000000000000e3155b5c01b0109c1cd038a91730e6046cc5d551000000000000000000000000626fcd74e1eef6842cabf0d9ece112a196478b030000000000000000000000002b1c5aa2bc693cd1154b65b92c52eb047573f9700000000000000000000000002110a3bc29cab77062540fe613952994665406d500000000000000000000000051f22dce9638eaf788f2c1e772c5aaa0bcfa723a0000000000000000000000001aa22ce03b4f9b35d8f7d09df95944f55096d62f00000000000000000000000018e4a4929180c5804487e1118f2c95e246c30486000000000000000000000000c9122b5099757b2733f9578cc6d7e14937f31578000000000000000000000000e4856fc6d516a566782ecf37e1c12c14674ba7ae000000000000000000000000b6d939b71c60a3378fc541169da4f72d1cb8bdff000000000000000000000000bab1c1543ab4e23017cf49289c59f6a8b6c7dbef000000000000000000000000bd13f564070224842a9d51269291651e1aa05d8a0000000000000000000000002b2c1038a1d7090243bb6f581ddb0ceb1e45165a000000000000000000000000ada7f4c55b8f8ee424b9a6b73cdad997774a49b0000000000000000000000000eb7d5e8c1c27bf0469a78b484c0cf4d265afa830000000000000000000000000491b255b2082f31af50fab90fb4da2a77136322d000000000000000000000000fbd02c50e31afe1b441958417b9466ebbb2132af0000000000000000000000003a8bae4fa00013afd3d7e6b033d52ae03732d9870000000000000000000000006a9a1868705eded9afd0e0ad894aa66db6613550000000000000000000000000d086fe1ef85d80c63b19d49fe91e3b0d97691d14000000000000000000000000e7e902bac308b42bd35fc1345fe9accdf04af39e0000000000000000000000003cf7d7cf8ca2b299759cb2ac4442706da21f4ef20000000000000000000000000fe6c1b352a24ff66bb11b70d814d126ecc0db1e0000000000000000000000007307941947fef7fee854cfd1f9f37f317f8bdec70000000000000000000000007169bd4456c703aaa32985b57c3d34333c2b11ce0000000000000000000000000237639631f2d2029b8a00392c60def5eea0e631000000000000000000000000ed35032c67e2ac2d68b30ee06724796db49f0736000000000000000000000000d29684c216312ca4f4df1c506a15cb5003e5268c000000000000000000000000245791de3126c2bb14611d602671a3a88a0ab69000000000000000000000000067afbd8a4a805f2c7c98c1e94413f1339bc07ee00000000000000000000000006a59d8a88941fc9ae97cd56a4d2ca2a02f5719f2000000000000000000000000e1d5eb31aa676c20716fdf03f95eab58131fc9b500000000000000000000000088bf91e13f42072e73ebc74587a3ab4a56c21e6b00000000000000000000000064fc3dddf052b589c9f110a8d5299d7ad6547d19000000000000000000000000a51b84fa89e0f5ab7c3b16d500ba72cc480ab459000000000000000000000000ff08c4136cd4b38033854df895052cc434224fba000000000000000000000000d451ccd2d7c216b790b29193c5e43eca3f60052c00000000000000000000000091109e5d2c7d8e6333723e1c6c49b1f719ab001c000000000000000000000000cc90de7c93e7d55097d4b97d832c5747f83a93d300000000000000000000000043e33e4d99bc3e85f22c1375e7f71ac93ba95e49000000000000000000000000dec0ade5dca494697affcf165811c9e9777afe0e00000000000000000000000086833f0a3fe230ab2b463b3518d3122389bd8dc5000000000000000000000000644c00ec7de074655f574a3f7368760e1833a1b1000000000000000000000000a02912de57ac2b853eb20ebd1cc3e219d6ffe8bb0000000000000000000000009fa693b63eef944a818adc52e7ff92b8e2f1123f000000000000000000000000989e42198b178732c91790ad2e6a3c697bc26c5c0000000000000000000000000268b848cb601ee40c75d448cac2ec11411b35be00000000000000000000000086a6176380637c15d4f1b2bdd121f9f6699c0a24000000000000000000000000ef7e3573fc998dba0cc8c6df8809999cf434e5330000000000000000000000001884ca2d681bed76ace180db62ccefc27403d978000000000000000000000000b47c79591ea57c90a70f0e694c02d242d684831d0000000000000000000000004fd97e40a485a9c51360e94bf149f9dddfd90e3a000000000000000000000000ac9ddc37446d03e3689d8837478cbc33c19b9efd00000000000000000000000007cfc2dc2c486889ad16d77f1449200c28ea641f000000000000000000000000e40951ae1a33631eec168d29180ee7832fc973f400000000000000000000000062c6c9ae27c771c59c001bae2e1880c7f44299c7000000000000000000000000f365a6e28c170d865606fcba23d0f33fec5ebb50000000000000000000000000150953375488ca7a6cd84b31261f21a315afef4a000000000000000000000000407573522b7ee7a849b38f1a5e6c15a0a9925286000000000000000000000000865671c5e85c8c4820e2b9586d036846cf223fec00000000000000000000000016f0d2e2a8f9f8b3f474481d59125a0c38c3955800000000000000000000000034294cf1ec9e8437429149beff46ee2620d6c82600000000000000000000000051736824b632ee7ad9e68763d8873fea88fdf1ce0000000000000000000000004b87795020de5f87dea03a4b15d17ef02b7039b80000000000000000000000006c161b3f3ca10119fbbc2b2afd38c65532db48e0000000000000000000000000510b832260bf41c55d11e33f9182173ccfc026a30000000000000000000000003368f98c0907c93f56cc8305929dfb70fa65a110000000000000000000000000bd24b793a604fb37039d69f77e7f5db99701235a00000000000000000000000013b7ec19b28776cf2e0836a70ce537b3c3a3a8fe000000000000000000000000e5555ad1053c948d66160eda74567c6a13e67ff1000000000000000000000000bb9f563f8ed2f4206b6aac811f60dcaeaca5037e000000000000000000000000fd93ec3d99c5ea7ec26af95c38ef2bd90d7b6b58000000000000000000000000c6c3c471e64fec8684988d04dead9a4e1f98587d00000000000000000000000004fd1a4c2b59cd0fd6d7d5c28e8b21906a35be8400000000000000000000000017852357171b20cb7c568f1a72e9e62a91e93a2c000000000000000000000000beff4a6bba38eb049bce0bc452fa8826a3bd27f5000000000000000000000000b253486b3564cf54fde8f2335cd11580a130961200000000000000000000000097664a0450581e23eee42330c718bd99c589dcc1000000000000000000000000bd06b0eb07da40963fbc41f5e00532feb2d757be000000000000000000000000087ea5ae487c4e272a3a0bd0ec03f34fb27c8887000000000000000000000000eda7e7bd7502aecb8f12293a9e5f28c9c8334e050000000000000000000000007bdb758fdd0284e8505401d8c2f2fd16c6adf5dc0000000000000000000000000dfd254ca6fa7e050b536f538a31e7e57f410f680000000000000000000000005dea4a3ca1b066cdc0ef4bd6ef31eb17f8f5e01c00000000000000000000000073e5a3a96259cd48f4e4f98beb04c8acfc7ab322000000000000000000000000c5edcc1d7f63888a35ccf12e6d48244f250bdee100000000000000000000000083f1299112b9535e6f15b9a48016ba894d956761000000000000000000000000560ad4dfe1472a4e8955c4e1d6154322e44baf8d00000000000000000000000066f5e2559f014e05428efc84ac6e288f685744b000000000000000000000000051186fc740b8095c4c89bd171bf340c3572c1907000000000000000000000000371d9e183eb3667376603454c8f095f2e012dc1b0000000000000000000000006b8c8f389154255b828477426adc19c86f028ed400000000000000000000000045ed732253cb4be913eeced35f7f8b20abdc0be5000000000000000000000000e102bb2a5ac1e7f9b851f2615f6a842743f77469000000000000000000000000c2a8db684abf843762dd19a5feab3812cc179cab000000000000000000000000d91dbb4733d235d5b3831c51be719c6573dce5fa00000000000000000000000017ce7ecdfab71889d1339c9fa7db957e0fe628a0000000000000000000000000d36f1ddc78b04cf479f4bf98a7166858146601f6000000000000000000000000388025c0a0f69312e8691dcdecea19f6d3e1ebe20000000000000000000000007b2e1c5a3d53c19723816cf3d9f1edbccff89d160000000000000000000000005400d3b385a950e602d49b92e92800587632531700000000000000000000000091004513c955f799cf92be14ca295cb5ce44481300000000000000000000000004f34e37f0b9039dd1dfadd691d5719ddc0e75de000000000000000000000000ccee7aa51f228ecd59c43d0d3d91d904d1b38e4a000000000000000000000000989f338c2b4d83340b5340bdc9bd72f9e66beaf800000000000000000000000045d73e245eacc89317bb867dc3c615b720c16fad00000000000000000000000029ad59a2f3613acd6f7f76e499dd691c625739d5000000000000000000000000bc8217249a53f09efb6799ad6a546bb59a9ed876000000000000000000000000e287c74b4e05f16fe823caeb70add22ade60707200000000000000000000000027ab00e5fbc8e26bf398821d82e51a6141fd1f56000000000000000000000000e0027d4bcaf236d24bec98241af14b2d454ca94500000000000000000000000090038765801aa949ec81cfab2ad6626b7b7c7680000000000000000000000000d2fb59782cd3d705f68201eec907e87b70c2d921000000000000000000000000d14b1067f10fc1cfb7cc3953bbf9bd40c00318690000000000000000000000008bc79436f8a327b9d494c744ac949520292f923f000000000000000000000000650c451d689f7577bc69ff0e00d7aa5fd101bbe9000000000000000000000000ebb5bf56739cb5ecd28600e89dcee8193d36805b000000000000000000000000b4b27ba71badd4b464c714b3765387c21d5a4210000000000000000000000000a447b448da300b457796b6438181e2e54e76e657000000000000000000000000b6dd46131e790fd9ed7f375b0c4e6c9456d1fd780000000000000000000000001d0fb12b7e4477cc1760ea8e1228df6b4a457976000000000000000000000000517608e920a463aeedf946b4e74b8f607a5546ba00000000000000000000000007da755ea592891e1d42659331083114381302ac0000000000000000000000005b1f67a7dd3922ee63aa498a7907ac585c76718c000000000000000000000000179df792f0b5511ba61aaec0d21a6b18d43b38b2000000000000000000000000568d2c016eb2046084417f749385ba2c1a5227cd000000000000000000000000e4b27a6e90cf74275d4949ab8e76750ababaf952000000000000000000000000aaca73a761e1ea66ac97c8ff1f8ab0b9b8f540a9000000000000000000000000be572d8a37793233babaca081e84ac557a29735f0000000000000000000000002262e88e0c8ccb4976c3311875b3305d496b737400000000000000000000000018f93dc55cc2fe7af06cb7748f00191ba9281cde00000000000000000000000040bfc5ea1bb8f0974960883d60f27872a67b43de00000000000000000000000010a8e8691540c7ed43beba9070a961b58aaa266a000000000000000000000000c4b20d8364ccb65e147a63d447b3afa09d96855d000000000000000000000000a2d526f84524f5863168e2abc8628a1e28b69e69000000000000000000000000c4513efcf9bda3a15246308dd5e669f480a3a4a4000000000000000000000000828a1425a6d3379d38b6ecff36d7632b7c9f4525000000000000000000000000edc78434c76d09e2918745e1203af2cd14b21ada000000000000000000000000cbc70154ca4f16a0aeda07b0a8211a7c39aa8333000000000000000000000000a2806df2f13370d96572a8759d8c7a08e226a351000000000000000000000000b1208669646a6ab3c4257fdbb737b090f5ab3bb2000000000000000000000000fa91534ed7290ff3f5ca0dcfb04cfaa48c79dc86000000000000000000000000ba152472e7686007bf0e8ec9c5ff3ac66156c222000000000000000000000000fd9f4e5b5a16ef2a9df1b42006f5a8a4dbeb158c00000000000000000000000065df39b215415738dd1402ce29a4072ad224a1fd00000000000000000000000067e8f78c42b8c050ccdeab7058c81cc564b7c028000000000000000000000000ac79f551016e82ba620c3a948ec948a407ace10e00000000000000000000000094f4689478ce723d5fc9dd25649e838548e44ebf00000000000000000000000082f9061c96a2b48f5ad9e6737e3711f69709c8940000000000000000000000001476909242a8c0a683e20f4262a9a14a0a508449000000000000000000000000c55766bfe1cc5ce3467891c3dfbdceb685eac8f5000000000000000000000000a4fd357d1c1de21df4f3004bd1a4f594bda1cf8c000000000000000000000000c0454bff3faf1e38a77d23596909c09e75fddd030000000000000000000000009da068b52954f87a8fa853d4a32f7d46ecf2873b000000000000000000000000e8929480ed4f01bf2abd2f057310ece29e2940f800000000000000000000000039a48cda2b47cd4d77321668dffc0a79c916b2ba0000000000000000000000007f648e2048f2f746ec3ee7dabd06d48e1411cb0f00000000000000000000000059ae6a8123d2de3f471eb1fdb77f49eeb469d817000000000000000000000000c0baae045f5109c7250bca52e4d728ede6a35fe60000000000000000000000003e5c06a13fdf01a9356afea3a6c712ab17cfcf9300000000000000000000000028469768fb95d86fde1c6663092f5c9a49313995000000000000000000000000a414a6634221d0d77f776c8281e30b82f810e74b000000000000000000000000e4eaed0b28d9f6d3265e44e285e1757000b9a5a80000000000000000000000001675b1a8cf5d209947f906293de331dd2b802c5b0000000000000000000000001ade5c24ba1f1bee294d7dba26babfd92701cc84000000000000000000000000a8a58c656418eb9ffa59e7d58fe1f4d1985bea0e0000000000000000000000006a6e8de830c5d1e48371ca8793d3b434b380fdc7000000000000000000000000399524ce5338631f76c40d1498e9436a0cb11266000000000000000000000000607581da35d0ad5481cdf28a862c45ab76947b0c000000000000000000000000e12ebf7753e1aaee68caa3cff70729b01db42e0600000000000000000000000049fe72b4a6169dcf88f6936caf96d302f3afb78400000000000000000000000003944c0128e1171c50905086e6596d4474b698660000000000000000000000003754bd6c6dcb567aefade621a4ee324848cd6eec000000000000000000000000b3f90edd521c99b38158aa3608d8f33fea8bb6070000000000000000000000003d3f3ae41e2e3c706089d7435938755b47e6b3f3000000000000000000000000a2b0f50433195d2a6bbad90b6f98f088c2b07459000000000000000000000000f78f8c5c58d03d95b35d5024c5f8b3042dc8f33b000000000000000000000000bac53b8fccb77f536c28219a2d9b111b76b1563e00000000000000000000000004043d1123858683221eaa33a8359e9a87e45504000000000000000000000000ed05fa1d0a03e7e56935b873920c118dae9c6d710000000000000000000000008f5a039e97549461902031d41868709f7f5f15de00000000000000000000000071cad746f830ee5ae32949a6bc6b8c9b4dd47555000000000000000000000000444ad2822b6f2080ff2e832ff666a343ebefafc6000000000000000000000000505afac55c77395a722537d63e6782fe00135483000000000000000000000000b53751da5aabf163ebb173e93bab1b2af6cf0c5900000000000000000000000082e92a8a6751ad4c4f538e5e69d4b8b985819e9300000000000000000000000076711cd631150ec017a66c5abc38f597b4984419000000000000000000000000e56ab26fd5ef51ef843f927aef0d1de0c1971ce7000000000000000000000000a7a2c88c779b86d8dbc4a37d87baaaf6aabea8a0000000000000000000000000e64d03d3a7886fbe189304f6c5367463f05e1be6000000000000000000000000a379fdc1c4420b3f27b4f6eaf805c5057a4ec3590000000000000000000000002a97052626089101e1222c0ce1cc2b7b0fd846f5000000000000000000000000d59ae333a56c4fa63acb76c58b48d0b1c39c5f100000000000000000000000008d05eb66e3602de3e2df626785dc6c260ac5a4d5000000000000000000000000b45be44cac4b3fa95c88097df11548b2a945b3e9000000000000000000000000e50332648a985ff110290938174d700271ecb297000000000000000000000000fdd49b52d64b0c8047c27727072495c782227b7000000000000000000000000012d066c4fcaf01a17548f7dd5d6f462fada078240000000000000000000000008ced65c311874c2505247022006367adb49f9c3e0000000000000000000000006c92fc7d2840a345eff3eaad9c494b1b94d63d2a000000000000000000000000893624662d7b1a61520028d76a62ee021df0990f000000000000000000000000f1e8c0ff94737d6aa72160330c9767f2ced5f59f000000000000000000000000858b857c04db6c05021aba52e9b1a75f4d1f29920000000000000000000000002ea507c8568dd44dba59a11bd93ee8b07da3282c0000000000000000000000002a68299d3dcd878a4f0ae71effa2cea8e9431d0500000000000000000000000003da178978686823bcfb540c20f4760473fac02e0000000000000000000000001623cf24ce602131e691680e779d339787c468c7000000000000000000000000a48472efab5e551a64e66852227fd5e28c15f755000000000000000000000000f6a4216b6db0aabe1e7097db27fc681abeff90ae000000000000000000000000fdc7fb03e43d477ee5a9fe22182671f7c69a8442000000000000000000000000ca765d11797dbc2be704293e15c721d80f41b39c000000000000000000000000cc3fb62794e60e90a1c9e0799687d9a782667be100000000000000000000000089c603faeece4fd916df893a190464c87b9f72aa0000000000000000000000001beab9eeabab46133480bd25e5c465b2a33d15bc0000000000000000000000004788bbb01e358eec494e144f25607a4c34dd46790000000000000000000000006fb8e56182a2ff6ee55ca2369f1e0b372ad33a5b000000000000000000000000134fa2cb8461a7f7580af3a2c1593096d9c4a177000000000000000000000000b5b03450eedd07c610030d9a79c5c607d2915f57000000000000000000000000794a4a08916ab0bdee6581b15bfeac8c5c780172000000000000000000000000b3df8b9f61eee7af74a53ced4e4b7d610c89d0b9000000000000000000000000e84e4ff7ce8e645a6dd0da8a0ec0b0e8eb4b07df00000000000000000000000091935f44e12c36078a63c915289f9b281e2e2389000000000000000000000000d9fb3e518d00dcbc51b1d9b04c8135dc73155023000000000000000000000000ef95d9e23344eb55e45806cd942ef0f5568c175f000000000000000000000000914cd8c9877c22fa824a74acb1a0e7745c7eb7c4000000000000000000000000bd45e56e0baee44efc5d24ab536aa3b7d15954f1000000000000000000000000ebed83a47b9414ba6115cc59c6b1146bf8f47102000000000000000000000000d54df7363363f6bee304dc7504d468b8d9f005a500000000000000000000000044c50cc5bf4faaa1c56ba006e7d4e5888e1bffdd000000000000000000000000c6699fe22f5ffc596148cc4afc241bd6765066020000000000000000000000009535ad425e6030ba26b085dbbc81c7bfbbc364ee0000000000000000000000002b14a06fb0da23eb0052a69749e0b03914b98007000000000000000000000000c6f90b30c6ef94da1654d85041d2f73fb55cdb490000000000000000000000002a689c1c8576b731761bf6d2d38dc63e32bb62d900000000000000000000000036a7081cdade263ebe219e8676e3d1c7051833ea000000000000000000000000d32bd9886bcc17f327a877ee9d4037aec6972b720000000000000000000000008d4a00f4664cce595b95bedb5817bbf8c31a241a000000000000000000000000f600622aa683b064c56e0bbe49d162e8f6ce52f30000000000000000000000007c080030e5a1bbfcb56318d88212f0fa50e41205000000000000000000000000c231390c54552f2734cb86201f9f29032ee957e00000000000000000000000001e6d84627e242a4389410afde4cdfa6c997b0ec8000000000000000000000000f7a2c755b533a5cef50a5ce87e904d81b663b542000000000000000000000000c22811e011a3c9dfea7eb4748d60ed2a708da6dd0000000000000000000000007b611089c6ea573b9660a0c135a97a5201ea4f1b0000000000000000000000006c13fc8170cbd0c5cea5c1e677512513462555a60000000000000000000000003f9dff53d55baacfccb3cc932f79949b6ac8e626000000000000000000000000f6f51c9534a805af2811eb2bf7727921956b6fb5000000000000000000000000d21da9a883445532dc4521988fd68aa723beddc6000000000000000000000000427c5473acb9b4bf5f0000713cc217dd10df78c7000000000000000000000000f96db9e799f51403bd30a16164c83f550db4ce3c0000000000000000000000006ad3926a275263ae1566ccf3f5695bf96dedae22000000000000000000000000ecbd8b99f6902a84cfe356c2ac0c2b6e05e91e19000000000000000000000000971ab112207a02f982b7d02bea75c1298ac8bd95000000000000000000000000553d718a847086c6fd15663153ecf0599790a79a000000000000000000000000942fe5df3feed24104dac171e3a205ccd8268ecc000000000000000000000000180ee1589c2515e46185ff81e0d0f7536a18f1fa00000000000000000000000010cf1f42d740a4d1711c833c8bdfee666079b7f40000000000000000000000007ad95a5b066e5cbdd2326e45f0721863490171ff000000000000000000000000f84c95f6e1e4a9750176f52c9937576f45bd465f000000000000000000000000cfabf312f9d6afcc527eb7dbc06d262ce73d01190000000000000000000000007f0b755a7a1c9c17f4ba76e1ef7103d57449cc50000000000000000000000000765c1c768724b5ca0cc16513fa16f7fd778b5e12000000000000000000000000c1906624a836a606c51995e3770ec85a999c8336000000000000000000000000f5500c8b65da082e464aa648714059198726b9880000000000000000000000006b671d1b9219d833f1462814faca152fce691144000000000000000000000000bb1c3aabe22e24c777de704207000019439e02eb000000000000000000000000b1a60c0450bdeb01d74a78f71331761fd2ffdff5000000000000000000000000810c0316558bebad085cec892589f9ffc6ecebba0000000000000000000000007535c3efe6c44668432170423c5ca42f407ef89d0000000000000000000000003a0ce6fcc27749a55bb9d2e627d0ab628b0be02a000000000000000000000000ddab0f3b3f532f099e637096d3ced665e8fc79ed000000000000000000000000469cd3a95711cc865e22848061b553637860deb2000000000000000000000000ffe5f5a1099422f84cb1847bce86fb4f535b040a0000000000000000000000006e7f01c14e93c62d51b50f052b9777a660f31cff0000000000000000000000000b9caf9ab7014bd5fedaee7a767d3a9dd715273c000000000000000000000000b2d7f9e5a3c6937170db5f672ed0292a1ad0776d000000000000000000000000be0e9824edf9c5b3c13286d5efd94f35c8be845000000000000000000000000013d57c61ef1858a3d5c8897e93ebfae77e56f600000000000000000000000000b219552b051833c098ed802529e2561bc0b396650000000000000000000000006269e84afb76a76ba54951a67ec91b305c0c8be30000000000000000000000004a2af2929fbd0615cced97b63823138cb74ded71000000000000000000000000cc28a22a9930388064d18fc0b0cd00bb8faa167b00000000000000000000000064bc3653d62af4154f40eb62dbb1ecf9b80ccca300000000000000000000000075b59387c2d8976bb5a9ea0edbe5a5c6c4aa67f6000000000000000000000000208d1262c6d644cf162d776ffb7c359b76b7be210000000000000000000000009fd9262efa6b3dc8fbeea5b00741981fec8fb3e4000000000000000000000000433ef4451f69cb06f7a0d26dc9fc343b04e6138e000000000000000000000000dd250601b9bf6a6c0240703785ec4ff201045ff6000000000000000000000000713a102886f77a2f8661c406cd7348cb80ac178e0000000000000000000000006efdd31a31c06e8db946d0a557a1badc72afc34b000000000000000000000000321c721a9ba231167d77e860e17409490e89bfe50000000000000000000000008ecf51ae2eb4861086580b279d0a0c33a0de14800000000000000000000000004c7c1eb2ea1ef1e3e72c477f3f18e3ad94bb5756000000000000000000000000e1d3b8661679cfa5634aff79c714c737365edbf50000000000000000000000009d7110893cd24abd5862427a39d629ae2a48b876000000000000000000000000ab430e5f316be175a4569a7ea53aab3994edd32d0000000000000000000000007dbb8859b9a8f9118e75227712dfd488c99dada80000000000000000000000004c1d439ca7d732d4012363f2946ef86fa404766b000000000000000000000000a2b2324afa5be9fab7621c0863aeda94769a1f410000000000000000000000008888c5057caed222bf7e92bb741827f72556af68000000000000000000000000dc5ceee82b95fd06277ed56d3b0a852719c6fcb2000000000000000000000000ed647abe5c57483d187e665ad1daff51b15cf406000000000000000000000000103deec0ea445e23ef79a0ca5d36a091bf7d564f00000000000000000000000037fe4a549542c18f6a347ffda629ad4de27b90c50000000000000000000000006fb94bf207453a8e777814949a25f293e2157a8700000000000000000000000083fe9738c80e292e31f30fb750440a3d058114e70000000000000000000000007a7d10e1dac3b9094009efc535f0d2de905eb50f0000000000000000000000000ef4ef01350a4e02d540792ef77231c4aa1f189d000000000000000000000000ec9c566f614211e68433bb9c66fee1afad73221b0000000000000000000000000de0a51a0d9c61c31464c6a8763b4607dc0ebce50000000000000000000000005610da43e0004c91f44bc2ec8e39237fcf58b594000000000000000000000000dfcdabe54c8ac70aba8aa1e7faf6136b22cfb791000000000000000000000000f3ab3805b394b10642b10c4909008ce33424819e00000000000000000000000047ff8522c668b8d000104b94ce9d322a4cc2d591000000000000000000000000abd640a362b76394b42406ba28c77b02038ab473000000000000000000000000fb89d6c9e2b7135a5e369b62af758e09233f52b6000000000000000000000000eaac43e84888ca4ecd0f271484c638805745229c00000000000000000000000051aa23e6838f23c24f551bea65e7a041e57740bf0000000000000000000000002319bd2dd4028c94f049caf50c72ecb3917d655100000000000000000000000074f04b45eb5f1ede2f89d9fecaaf84ae759c99830000000000000000000000008c687499d9ca3d65ea5cc0a47bc85abba8fe07e700000000000000000000000007a444c5853b9bf2d85bfa21ec7b5812699acca60000000000000000000000007b11eb9469ee23fbda4bf2b13bd48fc916db59b10000000000000000000000008db015dbedcfea73d8307e7f5e88437898f623e40000000000000000000000002979381c12264cc0ce5d5b6c1d67471072c56abf00000000000000000000000050eb24ffd35897e52672f043c320683881cf7e2f00000000000000000000000063dafff5005ee5068343e3e1977e2e1b56be59fd00000000000000000000000089091c87bb5bb95c96e13b38df0a03fa9c9212a700000000000000000000000026a3bda775754c3e15fdba9b1f3b2b5a71dd591b000000000000000000000000db7c4cf7979b6a3edc068543f71924566ccc39c70000000000000000000000000f1b8d1068c1db74dd60472b2174c97fca274e5b000000000000000000000000fd83e9f18344a7c10380f7c8a09747f2f0204c4800000000000000000000000050c467ae353c8a56e57e21af6ee544a675e9b95e000000000000000000000000fd04c286703b1408d7bf86ba42840f86595c9ef0000000000000000000000000faf382d67f74e4b74eb7d7601f887f99032cb4fd0000000000000000000000001951dea4424c96dcdd28bbe94b3c4b0650d43459000000000000000000000000b33e0752ac9977269e0a5fdc304bd081fa4b478d000000000000000000000000d9ca1798986ab0a1ff786e32bde948d000b51d910000000000000000000000004de3266d9991b2bf656e4774a37aec5e993ca6fb000000000000000000000000a6fdb333a203e8c2f475988884e16b7fe2a655670000000000000000000000004d9f25faa0ee2c332132d5e7a0c04eba1d8f6fb5000000000000000000000000b0b01f942bfc511efbde8f36247d20353b1f03d300000000000000000000000088210054f1be5d2a297b818556355b6da8fa351c0000000000000000000000002c2a0e99628bcd4f0bdafad4caabfc67db3b0ae1000000000000000000000000c6301247b904c21402da05d13317f6dc4a2fc31b0000000000000000000000007253d6c4db7b18f9a4bc350164a975c8aaaadead00000000000000000000000099dec507fbe6a47f52a400202085156da0a641d10000000000000000000000006479b43e005315baeb3a07d33416ad18b8cfea7500000000000000000000000066954f338bdc81c47668aef87796f3cafd81dfe6000000000000000000000000ef25555efa19ff11fffde73c6e066b361900c6e8000000000000000000000000370bd4e2713ab3ba0666db8eabee942ad7e3c876000000000000000000000000e4197ec199b7fdd5d2106e73b190c3a5b80462bf0000000000000000000000006e1e402824dbd240ebdde6e067967bc78807d2900000000000000000000000002e15c884318fbbde68039ec6220b2233deebf4f900000000000000000000000001883c7f4871a7118b737f592a6f4c174aa1dde20000000000000000000000007cdace84b1bc8cd2a4005c2b9e5f277e6241cd640000000000000000000000008f0b7ea9741a3f4000ac8a4031297f4fa94de4370000000000000000000000001f3da44c23dbddeb97c4a0362dd7c051168ed167000000000000000000000000975a9ba4e31ddf695f6cfed9eefbe94efcd585270000000000000000000000000b8a5970128b72891bd94b7adacb8f450d8d7a0c000000000000000000000000998e2c6c1cf9672beed83b8dc90776ab62ca879d00000000000000000000000042f723aa4fc07daa20872906b202c39ebbd279240000000000000000000000009351739c389220c170498ff8954e6f238e51fab50000000000000000000000000870ee957617f1ae55bc2a1c92ed2a98348b2ab5000000000000000000000000b0e29620206b1231f214911eb40f5e4b20b49f08000000000000000000000000276d2eac991603f19cec72249d049b1e3d34e0e40000000000000000000000008397e2a7684936954b417947b9ff705930ef0ec600000000000000000000000019c9b5f0dcd992e00902ce567d4cb7cd832f9d560000000000000000000000002f2da5f5a997b2c2ac161c338fbbfffd4e5cb57a0000000000000000000000004473fac135a1df2b9702a0344732d1b10540e2c1000000000000000000000000a803723869338dfe15d0de1123dc82fde0f1798400000000000000000000000092c851d2512cdab0fb652a850ff20ce819368565000000000000000000000000eb05a96138d1e8548274d37896ffe26c936f9946000000000000000000000000c2aa4c87b1dd364a8e2746ba76d38fbb7513091f000000000000000000000000014593ea571bcd95a99928d1f69baf6d9fed5762000000000000000000000000a912a6b1a87cf0ee7306f85696bfdbca2e563a92000000000000000000000000a40bfeb5be3dd20c75a8feb48ee81d93de87e118000000000000000000000000f3ec07a736b7e2ad8feaa9f1a4e501701a00db49000000000000000000000000dfd55e87388cedd8f64b84d97a159b00d4ffbb2d00000000000000000000000066d1c6e1ac241d4980c1dcfd7b90d53f2f2ffd83000000000000000000000000a86c299e3cb583c750bd974c56b0394a9da503b100000000000000000000000070dd840fa6ac7e8bc5e5f544910f79c57c13bc1e000000000000000000000000af1314d0369706cc5ff3db8e1dd2eeab7c17e985000000000000000000000000e5d4294d9867184b5c911afd2fb38a25fda6a6a200000000000000000000000092c192291020cba28b894a0b7d3543e415a3dc15000000000000000000000000c2587830cceca0c3609d6db33f17281fe49c4d52000000000000000000000000914187bec1d5c67a73f85eed8a23253cf4fd7163000000000000000000000000d7359fd6a3896678ecf4c9010de27439d7b36bf600000000000000000000000076c6b8ab965d9e94d8162674534e2f54fa047b3e0000000000000000000000007cde01afd43b0d9e46a8470f55ab566fd31d8d470000000000000000000000008be5ccf3e13e72749c8bf95bc76baa6960331eec000000000000000000000000f5dad845635676a8e0577b3dc846c96ea3cdcaf00000000000000000000000005cb57604d51183fea40de28cbd14a974175d8a45000000000000000000000000599aea054eda2f653058796d6b635512e332d25600000000000000000000000010d6b3a0e5a38721675597c460f37602da9f236a000000000000000000000000565cc3338308e07ecc54000913f8c3ee0fb1887a000000000000000000000000ea71cf635a2fa496f0faca586937be4d12e7534000000000000000000000000045ec6d4c7d5a75987ec1ef52dc83f263ef311b46000000000000000000000000f7567f6c67b5e1e43f13e780d8a58847082a4713000000000000000000000000da6f5c30c9fbc4cdb5ce12032b3d21c4d5465e3b000000000000000000000000f66097037418b5fb85a06d9d4df4934c39c367830000000000000000000000001d6ff5e2d91c66625046b6e9292e4753bb5db2f40000000000000000000000009f93d5b56c10939ba8025b1573f442a6f15fed70000000000000000000000000ba7b63fd06aba563f6e78f72c01eb402e0fd2faf000000000000000000000000043c32a813ff92243a9d52a7f9c15cf81e982070000000000000000000000000e46762aed8df9353bf8de5fd1a56476aaecf352d00000000000000000000000075297d9a6c34a41ba893a2e3fc2a2d3cc6c060410000000000000000000000009942c14b5c8b48bd2dd66c7d43e5b1855b27aa7a000000000000000000000000536356d50a88dbbab9d68a53b9f8129c3d54b9e5000000000000000000000000ec1b53cf5db3f53238f76cc9fc76317fc3ec00600000000000000000000000003f32482d41689607c081388a23a962749b7854bf000000000000000000000000b02f4b64b95882d7cb7dec4f399632dd7adae6790000000000000000000000002b8f381c9236afffd71d0611d3bbbdab1ed7643600000000000000000000000004b73b314053f1c2c51a62e9923b04d905dca36b0000000000000000000000001b895188476b12054c9004fb322e5b5162f1d95f0000000000000000000000002ba628bc06496fc531515841ed0d02c440ac52c0000000000000000000000000f3bef9166fd69871583d6fb9ded123ecf94f90dd00000000000000000000000084e925802dc99d083cef9dfac09df4e3263017330000000000000000000000003de8522db97417c883df992d8c44a9e940c7bb0a000000000000000000000000a907f600b38dc91fc2746ff921c79354ed64da6e0000000000000000000000002ccefc1a1dd97aecc20493daf41fd34865485a35000000000000000000000000f1f67294c2f5f529e166f0afa84b074122a5b9ed0000000000000000000000003f783e0ac03a2310387918b2c3e4efc29e571aa4000000000000000000000000a07f52ce6855d398ab3e9636f87e9d8fe1ce2cec000000000000000000000000ca63782f77515ee6d784cecf5c489aef147daf5d000000000000000000000000b86646d1e7092294102e5e83d20b0ca4bf784eb4000000000000000000000000867f2fda58e9322798cbb7b2f37e292092044926000000000000000000000000682861ceeeadaf7e6eadb08740387199b921777600000000000000000000000062d7a68a6dd6b0dc67d7ec4d844a8bfb3179501300000000000000000000000028ea119acf0fd97880a6b4c6e880d5a5771a3c860000000000000000000000000a33555d37a423bc38d5188de9fd2c60976cbcfd000000000000000000000000be172c17a7c16f1a4fddd266b7cb1b7f8e7740d8000000000000000000000000ad568459b98cc9677d89cdd048895affcf692ea50000000000000000000000005a29c675a30eace2c3e3783a8aed86fed1b3fdf400000000000000000000000092075ffa7113889503b9f6e7d8b5cd17ad67c3b10000000000000000000000006f0083c69e9549a66103853d178fd8028890a1d400000000000000000000000059a42ae52dbe896afd73ef9d518d8a85b3b36365000000000000000000000000149d4974d3ef38710ce3720455dabb057983968200000000000000000000000050deeeabb1dc3b55b5b6d68811021fe1564f2e05000000000000000000000000f59191bc702ba2313a95463ddc17568e9bf88485000000000000000000000000c28bcd75e33a7b17c09e18255d9fdd69fafdfbb60000000000000000000000003a5c7e264293e47b58868e71879c8c61550eaf13000000000000000000000000be279256a7518ffea499736f49d7c422baa991500000000000000000000000005500a40ae716c082215e93456a6713fdf2c6c37a000000000000000000000000433e3d4f53928682b98fa3c44be34557b4f9c0510000000000000000000000005f30391aed09d5fc857c0c7b41d5c7963581bad100000000000000000000000040a68d3a82586229f69d3d7f8aab1b844a5859a7000000000000000000000000e24d447de4dcab407a9b5b7d359d276445d5ca3d0000000000000000000000008c60b33272ebac59e2726fdc3ffba3bff08da9a2000000000000000000000000e223994fac31e6adf107604250cb2da129fb677a0000000000000000000000003fb8cfce6c83f47444421c155cee71066d9332e70000000000000000000000004befc5a7f2826e6454c88995d72b9fbd86fda62c000000000000000000000000d44ee5e36770270aa3056566bd7e6fba16031d27000000000000000000000000d7dec8bd2808294942d645ef2d7535bfa7ed87830000000000000000000000009e74e8cf4c7adf86e1dbc423119422fd5c18c53e0000000000000000000000006a43e8655eda7e0fd83f75f22b51d8a8c286e7720000000000000000000000004b41d0870459d31d12a1b3e5379d22c604de6ca000000000000000000000000000f6ff28abb6d8d4b9bbeae82d3124aaf50162c3000000000000000000000000b277da4b56f136ff460d46aa748f4ca33a6c9036000000000000000000000000c395c27d8f0ce4343d31a039975fe65aeaf2110a000000000000000000000000a664f4c583759470d7a9cfb00e7b325bf723c4f600000000000000000000000059e05a221937b9472752d62fc1dff28b60fa4bd4000000000000000000000000bc37818df094a157e1228cb9c69b80e1d854efc00000000000000000000000006e832e8243705a65c364535486ac187afcb9edca0000000000000000000000004ffe29f40dfa309152a4996f02dacc5912ebef2900000000000000000000000031b2c3c4ef7bb7e27c1da7bf5ecc5f802e7f93cb0000000000000000000000005595da5fea6beb93c93a92b94d0bd8ab4427e8ad000000000000000000000000f6e920aed3806e41b55f6daf8419c98ac56bd1c8000000000000000000000000cf27ee81313c8184d08262533c7c25629538a1cd0000000000000000000000003cad18ce39586d0e8b4162f5476d9f861650cc0c000000000000000000000000bfd9b5c7ff9ecaca2bdc66137e1ebb67345845640000000000000000000000009b4fecfc5a624c29344f9b7792f4088b1c4a8c00000000000000000000000000cbb3cde8fe037e9a341c14bf10126e2b7761f443000000000000000000000000cc71061c606b0a691f4555c82bf0ca500fcce428000000000000000000000000fc3c01a443d848afab98611cf029561ee879039f000000000000000000000000b5411ba7ff180c93fd3dc9ce47ad56558818782d000000000000000000000000b4f1641da5713323a498d8c7e78ab10bd4dfc58a00000000000000000000000051c4b6f4b4bb4b7ad90523d0da758d49d32923860000000000000000000000008df4ca311b1abbf3f10f5f59f29f163204404e01000000000000000000000000792159f657f1a7cf01f3f5e46cef3f975a1a7bd8000000000000000000000000fe1e078df4dbd441ff59c25abba08ad43bbde146000000000000000000000000013e1fa13e56be0d25ade4b3d499dcb5c8cdf60b000000000000000000000000d29c408fc07a9fa4ca514ef630bce2db659af7b900000000000000000000000044e3d35b801ef5599a437f34528cb6f73a3663c400000000000000000000000056e04259af4005b7def5566c127b7fe1d180a820000000000000000000000000300a5601cc95478ca7c44f083cf60bef3250668f00000000000000000000000076ec6b9bd8ba9f36f324741e159f65d3609693940000000000000000000000000fc0e098c287594e696581150f51782fdbc87f95000000000000000000000000ac1935d67fc9f19980c0849eb598cdc0afb5db2c000000000000000000000000425d9a7bcd129ca946c6e2993fda77c839be38620000000000000000000000008d76f71dee6c29584406fb169d5dd981265b439b00000000000000000000000030d0046385458c8accafa48a7c21b9dd0be405e300000000000000000000000065f14435934acfae40dde55706dfb759903a949c00000000000000000000000015815fbcbe6296df4b14c1dd3c5e3aa95ff5157d00000000000000000000000071103d86aa1f988e9655c8311f9279561c955d33000000000000000000000000114d47631219cda313c8ebd65c079ee8218d6d34000000000000000000000000776c5e9720090bb8ad55b0414111ead2ef6a33960000000000000000000000005e6597a908c80e7b46e4d120d001ccc9b6e2307d00000000000000000000000045b4e2c0ae5402efa698b0039187d2391a13101f000000000000000000000000b16eedce23cd7b6db0da8ce626f54935dea61210000000000000000000000000aea66228ff9a50c3c8147bff17580d8fce3b8bcb000000000000000000000000e6999259b6a80029bdb853f1ba4c6905d42e9ff1000000000000000000000000beb9fdb81e819b2e44842d5f4b03b927e671ba92000000000000000000000000b68833d15250ec6caef198033878ec4c01135ccc0000000000000000000000004f2bca03eaafe29fb378ac073091b491ec74981f000000000000000000000000122a8fa92b5a783c6b2be57318fb59ac4d5db402000000000000000000000000efc8df366b414247756ffef46e1c15348e651c53000000000000000000000000177d8fd5aea1c482f34976210f8a3808340cdddb0000000000000000000000003a8bd66fe720d65113bcea8a41af48ee0353668e000000000000000000000000c289c45d6380d90619f832d62affc538b63d9bd0000000000000000000000000a3ec753e6d6551b82ed606ca53f2c5db94b6f3ae000000000000000000000000a36f47eafdd2997508bf66466691c5042f5a22c500000000000000000000000043a30faed2c3b2f104bcbb2772432b908d5883bd000000000000000000000000a308d3f19b8aef6f45b477fc7487d25403be0536000000000000000000000000fe1b11031a5b8bc91335d31269088ee802f192a6000000000000000000000000680dfbb5c07bc0e01af07b55acc2859af5c9ff5c0000000000000000000000005326a07f7d49ce22cfcca3aa9f05c5220953ad9100000000000000000000000070296a77b20b69226173e4a305c1f9f4baa85fff000000000000000000000000f69b6746834f60ae04669d27b2eee953adebc7ea0000000000000000000000009f6f77b6f13c28a13ebc8ec6950e80bb60bf8bf00000000000000000000000005482116ab99c2ffc7b5d27181ce25e9c79888e9c000000000000000000000000aa662fd4139221d6db4c4d080245317705a9914b000000000000000000000000a2b3350e938a643a04d923d1eca131ede25a691b00000000000000000000000082826d840310559d7a66c34926d1284511545d8c0000000000000000000000000dae98e97f66c9d497cbb66d940060ec9e8a737d0000000000000000000000009958d595aaccd60faf00b96f895cb499d5c310e10000000000000000000000008edbefcbe1067b205f5613d43fd56bed882d6437000000000000000000000000d99ac44e0d5ad75442ccbc00410487e05b80433700000000000000000000000073ada51f92954651d18bb5c72f08c2cff931a34d000000000000000000000000c15f579a2ad9ef933efb04057bc65743b2f3baf2000000000000000000000000dbf26a68ac6033a0a8183dc202152f37763abffc000000000000000000000000e22026f54d95cb8270606705e0a12dda909ef957000000000000000000000000f6bb070bf6cf3de75903ab9f2d3a3c415e1aa36900000000000000000000000068d4bd132b46354ab954276ceda7667c4a51488b000000000000000000000000a2d1f9674fd58b461b63bd40cb8e49879ea80dc0000000000000000000000000dace9e6a39181e8d411ed9f6e90075016744de61000000000000000000000000f40f961207a8e19e50bb503f552070c345268c48000000000000000000000000722d1f6a6e0d901cdf48de710da3c0002f5391af000000000000000000000000a29cbbe731635b84457b40b8159a0e44ef1fddbe000000000000000000000000d116bbd6ce52fff1178984110ca00690e025dce0000000000000000000000000dc89f678837b3d26f4f87add36338bc13306ac1c000000000000000000000000008f590cfbfb2512a685b35e37cb51532c309c7f0000000000000000000000002e860f753a4530419c875cefe98258e987f5a05000000000000000000000000094a00f114f45e8d239361b956ce06e532ed02179000000000000000000000000b68695af7263ab86a41796af55c5b6dd5943dee60000000000000000000000003ac85df7bffcde753eb349b5527d9e3d15ad888d0000000000000000000000003e027f8324398197b7f58bb219c9aa0e47a82f1c00000000000000000000000030ed33a678b25c445cea1c92cb30e795eb1d0672000000000000000000000000dd57e5323e551263cfa44ba653ab6c93b26786f700000000000000000000000080264ab0b3b5e49f047f7f5bd84133d51d23709a0000000000000000000000001df101df8dd2b8d5ad89d366f504ec405564074b00000000000000000000000028877154ae425081eb4207732cbbcc055d37bacf000000000000000000000000d238d0320b67553133c38845bb195fd855369823000000000000000000000000e5b1c3a82eea43e88f9b0a974d032334b4fd89a0000000000000000000000000858d4543dcf6ba5379fc44c07af3fa56d04983d30000000000000000000000008db07e5dbe231e06a804cf5f8b6d25f5b5f4100a0000000000000000000000001b225d6eb6bb603791da43bca871ca55587e4dfc000000000000000000000000cdd094116d2018c18faa0ebced5b246b581416640000000000000000000000000ca797fb44532fccf73702554a4a3f3183311afb00000000000000000000000040c4a03c57b358c34e952e80b4d6ec5f775ffbff00000000000000000000000027e1963362185fc9425b49ca551c79ae648163a7000000000000000000000000480d719537428705437f24f9882d3ec055af64430000000000000000000000006fb171b95551342d07304bfe6dccb7f6bff86d8e000000000000000000000000c19eb5dff89ed06ad7acd8c8dfa51f10c9c30f50000000000000000000000000ef0419353293cde16931cc0d60c537522535603e000000000000000000000000c2368aa1cfd066ff104053e93c64034c19fa41fd000000000000000000000000d99a3c4a57150bdadc2925238d1941263b8f1d18000000000000000000000000b78a9fff79482a4a083bdf9952df5756d5252bc9000000000000000000000000229b7af41b69d22f971243b812e5d1e7548413ab00000000000000000000000072b3bb9adcb287dd04f7dc2705660ecc3b3ec28600000000000000000000000062554cdad7258c92fb632ec64d2f1056920f5f4d0000000000000000000000003d116237580c78c0f992aa14e8ca223279360451000000000000000000000000cc38863249c02361e2aeb0d45615e65e241f709e000000000000000000000000fc3c8ed678fbd3fe529a95d06bc968884b0d961c000000000000000000000000ac1f481d47495c89a91cd06178cd1ae1f9be642f000000000000000000000000effec8e60c4b320fd0fd485835a9de54fc0f6a4a0000000000000000000000008723254ac2d7f2adaeb22175b355a1cd709444e0000000000000000000000000a0a05761e58ac13c11036730c7854f5cfa6c6291000000000000000000000000b7acd1159dbed96b955c4d856fc001de9be598440000000000000000000000003be937de21786926006a4130dbcbc031bc359d730000000000000000000000001c0500f2f9635011bacada975d4ab10fef93e4e4000000000000000000000000c986a0e908db87d6365dfa5950af4c93741b469300000000000000000000000003dd8b905eea0d98306f772125d47923baa97be9000000000000000000000000dd65c0448b0c9d538df3b3f1004f033b3c044baa000000000000000000000000ef11a5a1f61fb3b8cc929130378a62fa5569924200000000000000000000000017c18fa95438b25b73a78559773fe109bab7e07200000000000000000000000097cdc146b0147a42599aa193c02828d05d1c665800000000000000000000000007af8845dc17d66cad79b07d30b34be3230386e6000000000000000000000000aceebedfa43cac4821fed4cc5e414aa693fd184c000000000000000000000000b8f53af5ae8388aeec906bbc5f3fd7d44859a61d000000000000000000000000641549c12f27810f9fcb13745f50a877edfbde71000000000000000000000000d57b9c043af5144060d3b22b7827312028778013000000000000000000000000e8cdfdc7e28d37fade7b08e89aa53ec0fcb04ad2000000000000000000000000adaed1eac31ea89228a06a86bd83f25fb7a2882a000000000000000000000000319af1e6f33797b76926bf46977af42340be5f9000000000000000000000000078e893256875fc581a5181319b9bc4540f8f1a1d000000000000000000000000f7b176bfe82cbf06d32a6bbe703a30071defde6d000000000000000000000000a398d299758e7cdca0a8e5826e5a4c6a0947632c00000000000000000000000027d9ed0af8c3d9335c8a8051dbadf644ca590bee000000000000000000000000b5a041a8036bd16493ace5bef0ca31e71d28efec0000000000000000000000009c8deb9db382609c884da5f802990ec7dde9e84400000000000000000000000080a1aaf5da3cca30caf53181f96c1e75a30174f4000000000000000000000000a08bc4f5cad5be67a6b0738bf6099eb4c5d751e00000000000000000000000006bb1164cba09432bf7027913a01af68fd3ae8345000000000000000000000000948dbe0166d78cfa8e0af1d91415de0fb23dcf55000000000000000000000000381be1b4b9f2f9ac7f6ecc7f6e01792412daf78b000000000000000000000000260e483a0c8b5afbf1afcc6eac8256f2b0f9fc550000000000000000000000008f0385bd31141d24c78a95ea92b429e0685abc58000000000000000000000000f95ca6d7259badc5b2ed5ccc1bf0346cb845c75600000000000000000000000063bc329428690f0dae2d5804a1e307c07b41addd0000000000000000000000004c9f6890474e40fa13e0fd0e3ab426cfe7229635000000000000000000000000623ccf28c82f82c23e897366b94960b1cfc5fcd300000000000000000000000023ca1acd898bdd7975567ef16d1304383d49171d0000000000000000000000009ef241c2a1ee48641378cc2e6ef46c8953d5f78e000000000000000000000000821cdbcf880e2240c8e955effa491509649c3a9d000000000000000000000000f1679c15075b9bbb1af069c0fc3639e319f90386000000000000000000000000efbce4a61cabd9a2ebe0eaa130e6b45e958119480000000000000000000000005bc4729c407e823f84b75b15e68a9ff7e231a959000000000000000000000000fe48d13a2783965b063af9d51e2464c7d8b2d0f2000000000000000000000000333221a5e2995b829856f75d7e8936f67cb35a20000000000000000000000000ab7143e38bd7924a1ae33270d956f752ad8c0b1e0000000000000000000000006a9bb96ea9aacd1b2269481b75047cd82edbb736000000000000000000000000a697326f3cf9a7701df68eea41f8fc0fa48d2fcd0000000000000000000000002f9f023afd3b43f6d57a3141b0926f71d0104302000000000000000000000000b38fabe926ab0452068f221697613455e08d6a250000000000000000000000004798078f95396723b7ec3274babb627f62ecfb21000000000000000000000000c9553e4073c269071cf2e4896d43bb079b8139500000000000000000000000009db2aff736f26791ba9184059cfd487f34837904000000000000000000000000de4a1e9e3973abd7c079427066fafd882e4be5860000000000000000000000001180659fec29201a1231d0a14b65c7f89ff2bb73000000000000000000000000a8af8f5ed48b1be9b832508d298b5f062b2c121c000000000000000000000000b03787637e22e7742e025d30d953e26e2f8ec02c000000000000000000000000a0bc0341c7e706c8c5cbfcdb5086fbfc635d1c3c000000000000000000000000f514a9ef18304d4bb37c997e6e762b2c8a5f45ba00000000000000000000000022e1e5282a189b784e43836f747fb7355915532f000000000000000000000000604fa95591241de0a69b6f4d9e105c89f705838a0000000000000000000000007427615ccc7c2009694ed931016692f438080def000000000000000000000000110de2fe1227bbd96e46e78722cdf80e72ef94de000000000000000000000000ff5d3dcc9b040e4dc140d37dc7f002dd63adeb600000000000000000000000001dd4897733757d704e3641472c4c01edf1ed650f000000000000000000000000f5a2affe9f12f64478b7cdefb261463d29f812de000000000000000000000000bd199111a53538f6f48642f223b3a7a89cadc0f900000000000000000000000058cd8a06839303b507b3938d46288e6e050c6d900000000000000000000000007ebfa252d45d8ebe0b1768479c258861288a57e200000000000000000000000083e1ca1cd96fa264613db96492754bc54362e3cc00000000000000000000000070a82a87228f9412fb74fa0b55d67b9dab71bc6d0000000000000000000000004c98d1064468e3fcc26009eb71864bd78ab5865b0000000000000000000000002da65ffb8326c4abef3b26643920d121c07cb34a0000000000000000000000005e035bbfb7afc88fb7203d5f8befa00b48d7e877000000000000000000000000796384bc3b7171b6227489a368f90a905706922e00000000000000000000000055e9edbe6b8f0a6ef1e8557eea48894959310bbc0000000000000000000000002a11cc2a7d51a74961821d3c667530d4dd3be6e900000000000000000000000024010d335343d1bf57326a467e80cd95ccfb9b15000000000000000000000000b3bca493fad270b2714a5aa613e0b428d345a965000000000000000000000000284133bd4fdd5c22d0bab65f624ad8a341b0c54300000000000000000000000053169ad57320f1ffad4b9b9ad8af827825092e960000000000000000000000000d9f7d56552f688702ae105e2c42637616f4dacb000000000000000000000000784bee7a756fa482934fc819c4153bddffa5ede6000000000000000000000000f1b60d5ec3ef35d9d67798b2f9863f5a30eb5f72000000000000000000000000709503116ecda8ca34154b7881ec9a59daeeafd3000000000000000000000000cdec5fd174b002a8a7e2849f3804371122122de800000000000000000000000081fee0efa4aca1ec89257f22bfa134e8fdcfcc660000000000000000000000005c3a9dbcfda0dadb8585ee2ef2f9a4b074d3e625000000000000000000000000cafe9b183350d79a751fdfb766bd3671775b84030000000000000000000000003e0fe0d62834138ab872a9e58e48f16903dc9fb20000000000000000000000007ac33d055022e52b0337c00d32c66b3c3eec891b00000000000000000000000036cb59ee5e98d518aef4ab9982f444c44ced302f00000000000000000000000012af817004235b8efc9ba0869a4a3d775b4a87f60000000000000000000000008b48eee8845ac55f9b454a6918ec911a1c0e4989000000000000000000000000770d9b83ef5f03f70b5d9c11190a77f85111e66100000000000000000000000076a87ed27ab05a182b9f679cbaaa2d1dad5a14c40000000000000000000000003dc46c5c6b75ebd2f5d96928dd1b355448ed8077000000000000000000000000a74c3fcaf49464ad6a4069a7249e8bff76e4867e0000000000000000000000009587b931d65bb8526bdd8190f17ba648e085977b000000000000000000000000dfeebb152e43ee5bbd745db84fd1cd6656f2318f0000000000000000000000004d46aa26e2e230c868b6a0d7bc5f466d4feeaae8000000000000000000000000565b9f2d209e7f501b7bf15dfa0b4431dc48c740000000000000000000000000e4f66b0861c1e00ee0a3b05402921a6dda2e81e3000000000000000000000000c11962a26fb983b98f9d77a345217abcdc938b0c000000000000000000000000aa22be0bd49ef3a4ec5957aae766015ee498024700000000000000000000000077367fe9b15d887823f28a1f6d2cf6992e96eb9a00000000000000000000000046ea28975affeeddde44c78d5fc4bcd079886e0b0000000000000000000000003029b91715be8c886eb8aecfadb9248e290082a7000000000000000000000000fa335048b8b4dd799254965f5f13a719aff9395d0000000000000000000000007128ad2ba37df9ec5310a824ebdf59e0243f599c0000000000000000000000001d84723f4f832d572988dccb3f7cecffea11b31200000000000000000000000049d378861ac58a612e5e90fa7898f1a42ff1c65300000000000000000000000068e7fbba19813e80cd712c7fabaf4defea73724d000000000000000000000000d3d477e7a4fc2d2dcd1491e3833ac35d9e504cdb000000000000000000000000156b3d9b0bf18b329ae31f954bbfdd0990a24350000000000000000000000000d84797cbc4b998d9463931e402d2bf4aeb92a6b3000000000000000000000000587bcbb4b785bf42c26aebdcaa1a8ee6af4f19440000000000000000000000008f5a209e91ed7af303073717bac71053f61b27fd00000000000000000000000069de7cceb4a7cd7618d091dcbbf94d0696f5227d00000000000000000000000061c37188a44c0dde2618e29f6d3e8c9a69f418200000000000000000000000000ab542f4bba81bc718d3f376a73d53ebc54796b6000000000000000000000000c848d068b1a417cccc9272b3ab75534fbdeaa2350000000000000000000000008639dbfd4b07746b2e02e82015325a8b86300b00000000000000000000000000785517a7d77ad5850f8b6a3ddc8b750534a3bbee000000000000000000000000813546f474a7b69945c230f178050da064c2eee0000000000000000000000000a3bafe7bf7d89f6935fada90b4ee38b75639340f0000000000000000000000002412a1d8f5033ab50bfa74148d48ba9d50210d91000000000000000000000000fb5691632cb9ddc42c4595a485f36eedd99cb2f700000000000000000000000080bdf0ac6a349db253914a1880338c10b90955e10000000000000000000000003232087e73f36547670b1f617b6adfd564e4d6fd0000000000000000000000001c2d3485950af9f56d197367a50364947ab67615000000000000000000000000fae4c69a52a44bf857fbd4891a3277a557200509000000000000000000000000af9efaa67bcb539a856c2ccc42fc9d5ecf8868ec000000000000000000000000924fe5a386c33618a8355d890490cec008380f24000000000000000000000000e401fae552139ed6c416e1f9d2acf955783515100000000000000000000000008bfc0f990147da753b8b0c6fab09fbcc490a660b000000000000000000000000a537b2b82bd585aacf3d9e2dd1209f99570ac3c7000000000000000000000000660460d27717d4859b5a39ec20c4a0be69e00ffe0000000000000000000000008c91e831446e7c5c1990924b615d5f6c916945a000000000000000000000000008bb8b3456164cc6fa510918ae73d78abeaf385f0000000000000000000000002bdbbcc567252199a71049adc5e8296a3dd5f103000000000000000000000000a7e9087cd1b818f1ed01afaf2903d8314e6733fd000000000000000000000000f07de6320ebbd7d49ed51fa70079d69c4f146675000000000000000000000000ee458a98b70368e3473f9dc3a91b22428d8e9778000000000000000000000000605e757bb01350df141dacc20de9f789fd5431e30000000000000000000000004b9cd48542bbf5714d6d36164212afe2bca291db0000000000000000000000000c6552a920e44208985be101143ac8093393901300000000000000000000000086484a3da1520a8105acda324cd862213957c297000000000000000000000000c2e8c14f5d97fe61cf61ea5bcd964dceefeb8c8c0000000000000000000000002d177a6c48b7f70060bfec479848ccd0dc950a7800000000000000000000000092eafe7bed46b6dac2b06dee53e18ed44acecc6d000000000000000000000000e8070be3ade0bdb7fcc409fb2f7cb7ec7138df3c000000000000000000000000c5d333dd0f83b5c2c92b6a2e7d9ca9bf41107a5d00000000000000000000000054dfa0930e3122186590652187ef56eedf683f4c00000000000000000000000054accd137573c4f9e3ae4c6342e41181aad8f0b5000000000000000000000000e1f5c416752520302ed6d6d793701427a8e13a95000000000000000000000000b81f0e2be226a5b0d77d7d74f900397139afad75000000000000000000000000d4416431894e7f23d83a5fc325d7c375e7e02f4f0000000000000000000000001c26bad6341ea0348b14b9c2de49c776dca2a7c4000000000000000000000000bb1ba8386d320d6b58d154b6798405e3996467030000000000000000000000008719306e2a5b31a88fef50f17e32c82f9bd9f19a000000000000000000000000a7917d9906d20ec9d8d0a12f132c7e59141e9e5d0000000000000000000000002ac1c2911628b80e193700536137d42582bc528800000000000000000000000061b14677fa442581ce45384a193e946e5602f0f40000000000000000000000004bb73bf0951551e9b1b51b3892d7d5a80eb69b3d000000000000000000000000c6dd1242218408cd40319fb11c8c1bdf89ea612e000000000000000000000000e7b2bfdb3ecbb42186347b6138965f38bc84bca1000000000000000000000000e021d2374f1b2ae957b5f5d35e3b6734e80835b3000000000000000000000000ce50fe621878d3e8f6b8c5430a856a63c2d091a50000000000000000000000001483d541313a28b9e67a7b4d5f46cf7e0e42e8d70000000000000000000000007fe988279c0474e49c621612c337791cb5b41179000000000000000000000000ae10cd7781e3b121f2c251b08caa5448a422da9d00000000000000000000000004d2b5ff6f3d6ddc404906ac1c22a685a849871000000000000000000000000059fcd3227a64febf615a24cf5506a3b68d14e2bc000000000000000000000000196aacf130474e8aa5700ae51411aa56f827ed6400000000000000000000000056f97d22a1d24c5e934aad2eac7a957ad589067f000000000000000000000000732e39347d7bdff96791f6d7a335d3e0b8aaaf5e000000000000000000000000f16df67159a119c1013280b562230274f3ed6d76000000000000000000000000cbf3f755f82f591bab0ca1f0a7aa7e588e631a5e000000000000000000000000542d9659eae89334d2790a787b9487b29a741cec0000000000000000000000007f1f4a618b1d92f8b2261e2d6c8433f5f2d9bb29000000000000000000000000150989392afe560217ff3f50be549fd8bd0a8b37000000000000000000000000b62c25d302938e03486fbaa1fce9926c7cdc1a25000000000000000000000000003873a53ac7207d90db3a1751356d4970918a77000000000000000000000000861c416f3e08f73338af370162585bb7fba04d4b00000000000000000000000024a61cade0805d06d80578a8f521a70b87f969b70000000000000000000000001d7f1f422e2f85c01733189b8fc50f6f97bc877100000000000000000000000070ff196845c1819b2ee768bb4bc5a0bd59fa51f1000000000000000000000000f7d4326e4c5acbcad5d9046bf147fabf016e4b96000000000000000000000000f4c41aa8a9e59ee455f7242fb396701b7e75c2bc0000000000000000000000007ef301a0e472bda1f839dc73c91d96e4d5c6e2730000000000000000000000001e1d5dc03936623002ad3be3acb986bfadbd74940000000000000000000000003bdab441f8c823e8d75730c8b4a6e4ac050e5639000000000000000000000000f25bbda2bf31927eec0fb684218efb6aede37e3d0000000000000000000000008a774bf02bacdc6739571450e1379c2124239f03000000000000000000000000a37e72f965b408884dfe48735081ee5aaa7a71810000000000000000000000007c6d932fb73aa2468093b39d563ebeaea22445550000000000000000000000007a09f6f650b332088559e68408718a1619d6cc6d000000000000000000000000d8a5c33380ac02692f0a92e1340b0475d4daeda30000000000000000000000008c958d0ebd743ff82203275eb5c9d2b8d83e7b82000000000000000000000000ea33d8f769d563683d2f4a54df73829886ec6a770000000000000000000000005be9a1a70da4f0565b367bb7ea69a5d5e8cfa2e000000000000000000000000056b610d29cb5e617390fd953bc2427eb578b5f94000000000000000000000000707e6bda4a5883a24e0999d8ed33ac57cc7d914d00000000000000000000000064f685da615e4ad41a5503574ab88c4a3f08dcfb000000000000000000000000a638bb05dc58ee670277f1af6600ddb00d6aa192000000000000000000000000dcb74b056b1394d93df92cf4fb5b22aadd59d5190000000000000000000000007a1ecd9b77809fb19afcc4eef7e5af8591a981e8000000000000000000000000575c30d5c20b77bea59f3602adbdd3c7f0243cb4000000000000000000000000d41efe5d95f5cae30d6cd38674f0daf79686af7c00000000000000000000000000a078da4cbdc9579b53f9ee42b6c8e3724832dd000000000000000000000000234e3f19a2991ad17109ba441ba7b47d99953a76000000000000000000000000394ba4ae963bfd710651766ef8f2a3f715fbdc820000000000000000000000002ab966d5763df474329f2787d0ea06350aaadef1000000000000000000000000b82e7938753cf6d13d747308d7b26e9aa070181c00000000000000000000000044affc09852f495c62514d9728c60042d21c146b000000000000000000000000d4432740073c92f75d5576cc21ca4c96b8b6514e0000000000000000000000008d919fc478725daa363b0945aeb4384c96640171000000000000000000000000e45c18d7507903fe574aaba06bffd535ffeced6c0000000000000000000000000e2ec6cabf907dde8aa59296d099afd52a198df5000000000000000000000000d73b9f7340c4cf2a184854946d1cae84cc57dbef000000000000000000000000ae447a6c6bb8a18b91a6778dac1ac0aa0d475b07000000000000000000000000061a22df679bda4ac35bdbab64ca814fd5182a780000000000000000000000002e5a307686fecc91b9bf6839fdb0f6e584e43a7c00000000000000000000000007b90a65750fac47014e2081a44e7de31a37ed3b0000000000000000000000008051c77c38e9f3357659452a4ba909c2125ac85d0000000000000000000000009ca3bc8a4f8b6cc7c2c7483671c500d12319962f000000000000000000000000422b66be198d597bc09f632b257e5e5652e2624f000000000000000000000000ce4eee268ba91339c96950ac14089914445dc22b00000000000000000000000057d1bebd21592610cb263c80fec25e65de1de88e000000000000000000000000c4c1f418952f47fed35e7f54b335f35024c61493000000000000000000000000413776feb0dc3c8a3bed5d8b2df51316c2a8a3c20000000000000000000000005adde6f5c9dc35208183138b7a5806a9059decd0000000000000000000000000a2b0b6d02ae40d25bd1d6ab510b3ffed877c5d3d000000000000000000000000f3d909b016a514b80da218b86ed13a02c60b6678000000000000000000000000f9090bdc0666b37ed3442c058653df23a690defa0000000000000000000000009b93fdb62f54c6fd6060e1e9f1c045147e4935780000000000000000000000001c5621329ef2d7748040fdaae74323ceca1c1c910000000000000000000000009a007bff790129e5770b8e190fb608fb7bc908550000000000000000000000007992a11132005c2684ee0c8ba04e79096a8a8afe0000000000000000000000004e54602a8a50da5991cdb7cfb446d8610f9f1ddb0000000000000000000000006165a20b0605169d18becae2e7f67ca6cb3956180000000000000000000000005dd4e42ebc930150b09eac1ecc22cb6598efca12000000000000000000000000deff676a81c4e99e6078bfdc076ad1b71fc1d56a00000000000000000000000065cb5b8334627e3784387efb4079f27ede82d5c60000000000000000000000006d6c8ca3aaa6a182c00ec7eb4c6fed5b5d793d990000000000000000000000002d3d284419a88419ed3ad4db8157d891e6a02910000000000000000000000000d5058eae8160373e54a5dc3f647c8e3f23febc8900000000000000000000000079990dbef0282c9de99a82003a9c97686d4060570000000000000000000000004677a00f121d95151442e5ec5798dd87803492660000000000000000000000002cb4fe40613dabdb47ade5562138daf538ef0e41000000000000000000000000dc22174d2f7fd5fb17bedee009c206d1dfa2c24b000000000000000000000000d2ab087e6e6b99147f0d7c9c0c2c1f0165a72906000000000000000000000000d82b65bcdd45b98fbd025ebda228c5fe62dcb6830000000000000000000000003f4fe64c95c306233104d3fa01895a79b598292b000000000000000000000000e28f62a904d8f7ca5202cb23904ae8d6d4af29800000000000000000000000008bddfe8333c80efebf2e0231902c2818225e6792000000000000000000000000ef12d1d9b7ea22d6617d86d56f155440ce0bfe5f00000000000000000000000051dfb16aeeef57123ed84410cd636c56e38ae0b20000000000000000000000006690f5f1b4e248ea8f63f6e9845fe1731e6a1661000000000000000000000000df7137bc3b44108a54b0428e59e14d124c3ddcc6000000000000000000000000a7d7e1545b91d41f8535c45226484639149f91b500000000000000000000000004315cf03ef085e6e25650487a63587fc49888880000000000000000000000006ad72372c0a46cabde969ba81749a8f200236aae0000000000000000000000000e3b0741c8790241399d62ece6b9cf0585a93f430000000000000000000000007f40f576603fa107a986e87d9cc8ca5615e2926b0000000000000000000000006c52ef15228bcf6a4373fc191c18c98d161955e80000000000000000000000006bec9c1dfdfe36c966c1b01361b849ec58853cab000000000000000000000000e410663bd02eb987f5d78896a63ea67a014dfb1400000000000000000000000044ce991422463bf69982d792f4be626f0b959dbf000000000000000000000000a39239d6312bf17744ee88b996549c7425d80abf0000000000000000000000004739097c57c17e23082f5b6bc2d316c6d560f976000000000000000000000000b3b8a1c863b5d3f40d5fded26573f4dac9ba8a1800000000000000000000000013724b6478056858964e2f171a292b0479d31a13000000000000000000000000d2f96187429e317f4a8a20f8eece9b34db6de62f0000000000000000000000000ff373dadfc4ee9361615437df06fc9c6fc8e1960000000000000000000000003170258748291334395b542d6a68a811f86fe21b000000000000000000000000e71fb55c40d8d0c190cb9dff5d2e1950129d2d0d0000000000000000000000003d711de395a3671c03d51b17d33b818ddbb6e5b100000000000000000000000039f866dac44ac2c2e09eb73a476fa6e8c4c8eac7000000000000000000000000a5cc5b142e03c32ee4b4f3aea5d5672040af6730000000000000000000000000447ca86490ceb4c42bd8b1cc005da1a1ba476d380000000000000000000000004964f02e398a77b92394c3e6380796298ef8e20a0000000000000000000000000572b427e56faad8b946c9d5582881602225c78200000000000000000000000092970563af1560b494f8ca5f08ca1fd2b0c04288000000000000000000000000dfbf608d2484eec0ad4d4a316df5de3cd89df3be00000000000000000000000076d1658652c8af87cc5061716dd5f24a403693ba0000000000000000000000005935362c0151c5a3c65e6cf91591fe1bbd6d5c11000000000000000000000000aa1b4bbe46202043885e51d8bc13b959394b21420000000000000000000000000f301a1334d609357b5b47ed7ba4c68752c1493c000000000000000000000000c3229db19a27f512d487d1096f5f2a1cff3c1cc6000000000000000000000000cc4550541eec617d282c37e5e5cd05c07cabf4bc000000000000000000000000e61e4955fe5e500f07d9a77ea76e62bdf0f5411400000000000000000000000013f555b1dfadf1075679e65f40e15fec8f7000120000000000000000000000002ee2b908df1e21c9090bf992bf54450807fcbe94000000000000000000000000c6bfec303baeada0d43ae4101817cd91e243b114000000000000000000000000a1af0443f1a4f8732e32f1eb5fa18e934976f338000000000000000000000000436990287fe5daf1091520bb637e015d21cb122f000000000000000000000000474c178e55a5ba35784805d3bc796a10f3dae55d00000000000000000000000045a7e3002ee8533c6c2307dd53066356ac7b4005000000000000000000000000e5a71a2d1b1c31184755031b6ef883bea1013684000000000000000000000000b89a19d2df7ab7c1ba7dbc9f64a174ebbccaac92000000000000000000000000b2c71605ea66fef69be9f38afba161ed514fc86d000000000000000000000000de98e572a1e2e7084eb254c5fb9af283496d4e4700000000000000000000000025497573570bdc88d002c51a10239d6b725531220000000000000000000000000ed4df7af7bb1d888890a78621e61c1f244fc76900000000000000000000000074633b7ce0b77fdba1c7218fe25e87a1986457a50000000000000000000000003fc823f9a42e14f0964679640e875214415e58970000000000000000000000004f9c53c597669a84e9c6b2333129afbadde3d5e40000000000000000000000002ce0d487df6fa7b0487a61140baf3b622ce12d810000000000000000000000007ad1dd1e10b69ced4d60f7f450b3d5ce85340b540000000000000000000000005e77a84bb2c7ee034ec3968c463edba59a716fd20000000000000000000000005cbc369f7fc7b295b4a1753dff84c4187e6af27e000000000000000000000000272f0da4ce434ccf6f8894c07f77aec97230c24200000000000000000000000023010a3a376e5842f7162517fe656e3a4b1baf1b000000000000000000000000c65a25b36cebeaf90a611ffbc6861ee068dfb4f10000000000000000000000000d5274385fd7b9b8ab856edee0d3440d670412a3000000000000000000000000bdea5b57a4550150efbce892bf1fc7628a4758d7000000000000000000000000049c7ce6fe89cbd066363984cf68767a6d2b27a3000000000000000000000000f2e831c532ad6b2c4823b67ba48a36b8490fa2ea000000000000000000000000a40b44af71e4cf692e6a0e6cc668e64043716dbc000000000000000000000000bbbfb503e5d8751456cc191f4c54189b9491d3c2000000000000000000000000fbd63c8465096eb1d626bbb3356faf3ef3b5bdd9000000000000000000000000a66a669a2fcd16f2166c93e74cdfe848e5074681000000000000000000000000d880b146fe8c48337225e2d8f51940dd549c878a000000000000000000000000d20bad8f9736d47597db636e70c7041ea056adee0000000000000000000000006cd775d08d258b7f8914b5fd19cb32ea1b6f97aa000000000000000000000000e0d18b7b907446c07d07775dad22aea7e1c2129b000000000000000000000000c9162c657886b4ff8189f67167c7d0c289eac72800000000000000000000000013ff91fe8475997f1e2ef53ae7973b3fdcce04260000000000000000000000008f27bc0d1f92fc341045061b453d80f56c7dae1c000000000000000000000000d5fb8e968fe839419f7b71f6955ac752b78a6d8e0000000000000000000000008e831d7a0b6c17dd5d970489659158028115b4c70000000000000000000000005da3527bc29a5fedc0420411bed45b2be2a6bf6900000000000000000000000005c4b88297483f8b6272e159220aa7ff5455baa3000000000000000000000000084a97f49b6d9dd8d20c44b91701e0e0323d47ad00000000000000000000000011376eb4d0d7be1e6badb82e4bbe91fadaff7926000000000000000000000000d7faa60d835c469f8b16afafbd6f7324fab51491000000000000000000000000f7a2f5350b3e0f54b404c9358634f41d30f9bbc9000000000000000000000000114121f372dd7f57bd88dc0c27124545a6aa561d00000000000000000000000010071b2c519ef160dfb6637cdcb2fe78af360dab000000000000000000000000e8745d5d9a6153a479610312aa12e9158bc1be4600000000000000000000000064108ce347f43a9863fc22bdd22de25fac2925d50000000000000000000000008d7b18e8a6ada9c18b39b90778a41d30ff1a5c900000000000000000000000009110ae930d8271406823ae2e0013c2fba2197f07000000000000000000000000035cfe8804cafc1d5068a7844d2a1e5268b99f71000000000000000000000000ab19e3f76e8f4fdb401bdc5717e8bcd912debe11000000000000000000000000b493bbb2e46a2df3021eef7aa2af0b5a9b8028290000000000000000000000005378d439cee449167e2fe032accac8fdc9161a820000000000000000000000003ae441acfac49c6003dcb5ea4754aa5a4c094b46000000000000000000000000307be12a84043fddad005268c492c25b186c9ab20000000000000000000000006ad6bd7793adf12b01bdf3a00fbff28760f37993000000000000000000000000fdd91ea168d7d4b6e51feb5b753a0cea45fb1209000000000000000000000000fb0bde4683dad00c72c3b36ebc8ba4546476944800000000000000000000000078d237009a3417ad6f0d3dd42cb066f9106868600000000000000000000000000c1c91d48b254d111d09b9f9a194672c686a2c0b000000000000000000000000abcf9eb090858b3ebcd5d679af233e50d1b6d2e80000000000000000000000001ad24f26466d10d5f04008b837467115a3ab1c430000000000000000000000001e17aa6e22f7468d81b93f2152a25de67610dfe30000000000000000000000002204a1129a85307becfff54d025478543e6079d1000000000000000000000000e181f68d0cc0595192ee6b8219ee3b2c08a40295000000000000000000000000bb7c4864a5ecd479b73d891ba736ef0a1a3249d900000000000000000000000078f76a8273f889d45b122af0c750b45aa830396900000000000000000000000012676eb90372e8617d1e3873ad953db462b8567b0000000000000000000000002a6222fd280d303a3544f4d6b151af3af06c6382000000000000000000000000a864b50a6f2e0168d3d246643e5cba1837120ddd000000000000000000000000ea765e02e75dd1993838cac9d04fa1b220e731eb000000000000000000000000acdd44a574502e6047d6ea57aa8c14f46352f4430000000000000000000000008c3e003ddb1e33606186f3f568b4219b6b82189e000000000000000000000000d925482676fe5794edd52d7babc000f3b1191ccc000000000000000000000000a8eb7039d10eeecae6f25ce84a8f09b8cb7abb7600000000000000000000000096a01f7c78d36a6d750231ee553c6933a1d20ea0000000000000000000000000691e9fbdf637e4cc7166a77d026b02e6a496afef000000000000000000000000ca9c668053d6e9a95db6763141118376ebc979fd000000000000000000000000b189448b7d27808f8a017cb4b12e0e5b20c23eb5000000000000000000000000cf400df6d24fb530805e81af2599f64c5f5a23610000000000000000000000007e5d94a349718f5de41dc0bf75c9362b1246d41500000000000000000000000045405af7291c2a13eabeba69b507740f1005eaa10000000000000000000000008fb58a906a8605d7344d8a0c5f13e5b9b1cb490700000000000000000000000021d46d57ed7c4dc22b2c318a349c8984ef796302000000000000000000000000c459285e9b0a64f20115fa5a8d197a3fadc7d1f50000000000000000000000000908172c90f9d014c98d049e7c768b20d01222510000000000000000000000005c0dcf9f0341ac3ba0250e83ebe0cd22d179110e000000000000000000000000c2e6c29fe08cfab2b83bf852150e3983b975b8cc000000000000000000000000133324bc1080e593d6ca0917104cd686d03a3235000000000000000000000000361e82fab5c53d01a8520c0f60e0209b2db1f24e0000000000000000000000008836299a25371a42bd57859f2fddc672a09753c50000000000000000000000008f349885e5c22f4aa318061c4b963cbc41b01c8c0000000000000000000000002a758c10c2693c7f9c4744eb6ac03896aad96293000000000000000000000000baccc87926ec32971e05230f0bc744ae19ece9ff0000000000000000000000002ecd3586adcb3fc49dc0994242106a27f7b2b35e000000000000000000000000a298c7dc8807afbde4129098c2a4190165c955910000000000000000000000002a22672f1723e891482e6bb905829df3ca4096490000000000000000000000007bf7a0e6eb7bd64712ecfaeae5a0fa0d1240098f0000000000000000000000004e528270e6d85ff722927ca384c1a4033e4adaac0000000000000000000000005beaa12843c73280414c7db2dfd7de4cb1abcfb4000000000000000000000000855337dc1197472a8763db2b445629c61d96cdb900000000000000000000000012bb23b9b9d9306ed7c4a4d2eae2bd6bc4d18b91000000000000000000000000072f295bd9998806e0002a95b650073878ed03540000000000000000000000009d1399698a7f5b6a37563d7ac0150744cd44e2c50000000000000000000000002197401a71453b2cb80418b0d6be77a2c89a6695000000000000000000000000ba494504d28432967146b7c878a2d08591f4058e0000000000000000000000001e427e417fb2d7c44f2769b6b54f38986b272acd000000000000000000000000ca5d7cf1ecca47a97d94b10c8f36ae57493c63c6000000000000000000000000198c96f68c25dc470ec3bdaa8e39c67c5ce24dc90000000000000000000000000cb66057eaeb34965256c27ece00fe15b6df1d1f000000000000000000000000a04c2c0545898b8cd066e4c3316efa48fd0f8913000000000000000000000000a2d7e23d85e433ca710c2febf71adb46bd7c59240000000000000000000000003fbfdad7572aeab18b0d154aec9eb987fd9296da00000000000000000000000070eff199325231a8d40aa37eca16b1dec7b534cc000000000000000000000000639aa1b5cbb1e8e500a6d446c354565c4f25c34e0000000000000000000000006006ed25a1fd726ed47457b586ee505aedb936b6000000000000000000000000a168878714d8b47351ada64df108b02fb4dcf1b900000000000000000000000075a4b743910c4de4448c28450a4b9177e1ba5cd6000000000000000000000000ace6556136079ee2c8887581f904b45dbc2f397a0000000000000000000000007bab4eaf79634d4f8af09211537bbb9bc813ac25000000000000000000000000c51941b6fa29eb8dc0e139cb8a139f83ab9dbf930000000000000000000000002a76b10d381bab14509682e506606598c33527bc000000000000000000000000dc648770b14c3d11b2eb5001fde68d109778038e00000000000000000000000087f5b4ba55bf1720ce6c8eeee9a62cf35822e270000000000000000000000000f8ea6836a64cb06cfeaee79f4b58b3cabec6cc9b0000000000000000000000006b74620cf7449a03acf97b213cde59f28de6d4370000000000000000000000005b450c9ed7a6ce9332985fad1907c35d9ab64aac000000000000000000000000af88f4bc66e253c7320cf1fea6dce28f385c46d10000000000000000000000004b285ab635dc06aa208b690851f67f549c818977000000000000000000000000bf44dc22f88ca7d13074db38d2955ea870b70508000000000000000000000000aa74fd39a25e16108f9624defe7b537e1792b865000000000000000000000000eed0f620577a4c86f6ea5b6b9f00c5837a594c98000000000000000000000000c83b255164caffa9e03494e420654380933aaaeb000000000000000000000000a0897ecc84d5efb3a6588bf50a0aa10e0caa4e6500000000000000000000000073d7ede465a034d84cdaf4b1cb7d545ad9b04e0a0000000000000000000000007cef02082d1182862e724a2ba27bfb563432b9610000000000000000000000002ee13f81320ab1ff7f822d35ab48f9bf0f4537a00000000000000000000000004cad7aac3120a6744c935b00236412ea7deecadf000000000000000000000000b60e33aa27d2c23f932ada29d595ac384a89ba98000000000000000000000000bec45b1cae9a54c074fec1369e6d95f6166c88b5000000000000000000000000ef8a4db2c0809e7b0072414b2fbb4ed5e6c33583000000000000000000000000a80716d474ba3630986dfdb04220a65abef5de16000000000000000000000000314447b7ec8f452be7e508d04eea295b9cafd18400000000000000000000000021a2b62383b8ea6ef832f4175a02239db4c73c53000000000000000000000000b9085f0740f035a61581ed6f41f365d9066be1050000000000000000000000005604c2f398d665e178c22bdbc38a2934e5585f9d0000000000000000000000006ce1737102284a7b51c2151c626e7165e3fea875000000000000000000000000144b8aaf8d7407607dcbee781c7d48f108d662110000000000000000000000004efaf9ce78a2fd4d52e6d097c58fa70f22d22a83000000000000000000000000e0fbe6592972cf856c8efe71114cc5472f45503f00000000000000000000000029fca7f9ad71f6669d328e71498c178879b999490000000000000000000000001c2d17f62c4a052b85c4f54659b72674a7646672000000000000000000000000a3bffba2b79e808a66e82c95b10364c6d54ec931000000000000000000000000cf53dd0a5a93ed59e56834074132bc4b776d0b0c0000000000000000000000002ba2888b299ec8156bc09fa0d83ad5fe2957169b000000000000000000000000237c7f7b72e23ad7bd4000aaa7a0402c77ed6fd00000000000000000000000000b735903f3180860d43eadd09f0dd9252bdf7005000000000000000000000000e6aeeeda98720663d8ae72ab0c9fb8c25057afc600000000000000000000000086339657c9802c3ef4c8e110ce397b6081d0629c0000000000000000000000003b03878ad9ab8c4922731bdfbf5caff64620d0600000000000000000000000008bfb6f603e33349f802da0916ba4af439f5867ce0000000000000000000000002d803e0de137a3b547a6b8fa8ef072070980b3cc0000000000000000000000008d8ef6b49e3065557e45d9376db397e8181ea314000000000000000000000000e9b685092440532e4f7b565898ba575ebdf50f7200000000000000000000000037e2588043863ea929db04432ac626f6aa6b84540000000000000000000000001736ffda2d523ffd271b4922b3e78cbe4b02fabd000000000000000000000000483f06ed4c2c891509a53e4e956dc07af311cd280000000000000000000000005f56329f156a9f399bbed49c4fb666366dd7b9c10000000000000000000000009b20053b8825e097a268ffdc20d550b322f3b6310000000000000000000000002df3829b35e3ef4549e34f38fac08ffe6dcf05940000000000000000000000002874ecbe89dc77d4de7cc8b60501d7c2a902266f00000000000000000000000066042db01880fb67892cbeec2b260b821d7cb9ad0000000000000000000000009d6d34811c1fef0681b1cec941628ebca2baa62300000000000000000000000030b26bb1775228ec585b1573a190871da08c5f1b000000000000000000000000eaad7dedb3dce3dcd7c80c3b6f69a8bbf969ed340000000000000000000000000d1d9bc53528cc4de487a08b4366dcfcc7374c7b0000000000000000000000006be6224d138ecbe6435299b39bd864314aaa3496000000000000000000000000ce7d218e2c76db44f4dbb9000995685dab27fb620000000000000000000000001dba38f9cd76ac1d848c1543b51507ea17031dd3000000000000000000000000e441588d34e88bed0212c5a29bbb4759ac9df4e60000000000000000000000006bb4d15108bba4c2364624787d14d0b2cedd3c41000000000000000000000000f887ac3811691cd98de4c94e3438ced66a74f07700000000000000000000000045606aa70102b8581bf2cf4f64dadafac00a10df0000000000000000000000004e2dabe504df610f07885f75f3d077ca7b01b6f900000000000000000000000085c942a9378e497e7d678a76738b0cbca3da6e760000000000000000000000005a77f9ea4d8a19f390831bcd6a4e43388e6a9e730000000000000000000000008954b51e6ff1297561d66611e3c1d2eb7f0e3ca8000000000000000000000000683c99ff8b73a8100d9502b46b114675412276b2000000000000000000000000c1204e10f5df85ce7e629a04e0656325b6ed97e4000000000000000000000000b058dad825a8e84cb453949befc4f7e77caaa65e0000000000000000000000008185074cb199f0324f1470a4401eadfdb20a202b00000000000000000000000008b1cc1be39765062beb56ede0e7a91a93470e24000000000000000000000000b4d2e1f12905c9d7d3e33bf86a1e71a68cfe2a66000000000000000000000000cc42f79b118e71ad5ec2a393484892a492f3949c000000000000000000000000bb075f51003700fb37378e5d41023fa7d372a8300000000000000000000000005df9027178c18c8d9e29fa7d89beb9bd967ea006000000000000000000000000cbba561e91d2998d64a5c37252aeeeee3436e00a000000000000000000000000ff1191aa0e9c8323033511174a54d9eed993898e000000000000000000000000aff28352c34dadf35ca3076974513b7f96f9e5d10000000000000000000000001927348b592de8f29b2845585bb6c304077773ec0000000000000000000000008caebd8954cf24b0ccbb2ca56ef64633f1fbde32000000000000000000000000f6b08948b08f5b7d60570308d33b5318981fe06f0000000000000000000000005a9479c068d84a36b2e556c6c81643bea9daa0b00000000000000000000000006a73c1b470309f5048bd2427cb0d9668304a885400000000000000000000000040dc56cf19d6b7f5b626f9e436138620ddc02658000000000000000000000000086fa86de96656c599a69fdbe5f89ea849c355dd000000000000000000000000a230072d8fdceac96320349863b7195ee27f700b000000000000000000000000b496de678057633fb6c3def8228c771caf38afd100000000000000000000000020cf7b61a5ae6f0b8e6b1b7164182daeab36a9aa000000000000000000000000a94ef93096604388645c525ed1a137cee4d5787f00000000000000000000000092624699671e137a545d4baa8f731c82cdd670de00000000000000000000000072130e46f887ae4b3f4f8fbd0806b9e7cd75820c0000000000000000000000002e62b10e28fa1e9c48ecd07de64500e3c706f5b7000000000000000000000000da0a2ac421f74b0a712ed01edf2a6ad606f1bc97000000000000000000000000f6d0fb00a27ae8f6b581aeed45a5d50acad6f7c40000000000000000000000003ae1570c9380be51dff95caf62105a7d80f59cad0000000000000000000000005c79a565b4157ce6221067f3303d2feb62cfeaa30000000000000000000000004eee3b71db744b4283291303dfe6e9dfef9c5a5c000000000000000000000000a08497ce029ae6bf682376d0efdc67eb3d709881000000000000000000000000fe474cc7e162bbac37280a01b721b28c56204dda00000000000000000000000033c1d7efe0266c307f6bfc0c01f0063624b9a3390000000000000000000000000903fbdefae36c3772d7b701a521bce50fb0ebab000000000000000000000000b8284580975c8780b748d17fe6659489317a14e2000000000000000000000000a7628cceaa08c6b7f49f46d6bc14a92a89ae7e47000000000000000000000000d1b4a75515ad5d1765461f621fd692174c49a39d000000000000000000000000e91a4e7c8cb47e89392b72e7144529eb2b49919700000000000000000000000082e466dd21579602daaaec6242bd5c1b601feeeb00000000000000000000000058c98f029901e9fc51373aa5423425d86c9a2945000000000000000000000000585755433c9c2bb3401042ea013c771ca1e7c01c000000000000000000000000f9e916c688ce0b08cf7560b2fc911c355b0a4f00000000000000000000000000ee7f7642e96d8ecde27d89edf4e04833a34576db000000000000000000000000733765ed124c989a579c113e7962e0d8c493f3a800000000000000000000000023c9bb615115e9f6f847eceaa54b4468f312beb9000000000000000000000000a913388700faae5c083ee19d7e451b9e0b5ad92600000000000000000000000043a98b31bb8780bb937c541994aacb66d12599c80000000000000000000000004f802c1b27d24118aedc2550d5e40a64bc98d52200000000000000000000000058490d227a1fb1f034e3688d02e014d1c8491c1b00000000000000000000000027ad5a04840e76524fcaabd7185f318022abd6c2000000000000000000000000fa4bc2b850919b09e6a32eca8d6facfc38ddd5770000000000000000000000003ead65ee3c7311ade62cdb2c27dae05799c6d8ac0000000000000000000000007d055fcdd958b971abfb6d6363a85f1cabdd10960000000000000000000000004a447045bb3916636a76a487b396e17d2df1bb220000000000000000000000004020cd91bd0cbb715231559593c9065091b0090e0000000000000000000000006fff8d95c76dd106bf177945eac23e53c4e59a30000000000000000000000000e96ffb5af09c5768449ea0c033c4ab4835d10d93000000000000000000000000a0db14ee386f4949270b8d11847acd5bd3cefcf70000000000000000000000003f2867f4a8a1e8777c015c738943ded2a1be54e4000000000000000000000000b757a543d1ab8b510da045b340e6502afe095b8b0000000000000000000000001cafc14b60c9276e9c2514a3ecdbaf552329053400000000000000000000000048743b808a839584b1d5ca20abd75d78bc926ece0000000000000000000000008fad3550acb79326b14591c3ea25f6374ecb3d7c000000000000000000000000778a3cd8da7160a00045aa917a48376f056649980000000000000000000000004c995e40ad5fd3773d2b7463b5b1e7d5b3a0a4fd0000000000000000000000002085997247428c3da216a02a150e34a5b651759f0000000000000000000000007b6904e8f518071b0a3d06d426ad348acda3957b000000000000000000000000a50e8fc3c25e95ade471efe57137bcca310a58020000000000000000000000004a627a77cf05ae8705d934384f40abc7bbe058ee00000000000000000000000032c34568544d2b916355ef589c2aef9234b0c13b000000000000000000000000f9c6af1125ecd3939c6d527e43a80bd4d4145f520000000000000000000000002687d3b8d27d6eb5028520f51b35e3a9b3c4636700000000000000000000000075ed94d52adc99b83cae3f770885887250adc33d00000000000000000000000033ee286187a52cf6057c9f9a857a2a1f087527f4000000000000000000000000e8549438d2c1665005592b4f9497673fcb1b663300000000000000000000000052ea8374e7fd4affc1f64e17b882498e633adef300000000000000000000000070cfae5e8013f20449c5af64de4d6d22c52129000000000000000000000000004afb14ca2c1202366e51773bb826ca1a3ecb693c00000000000000000000000061586849bc3ba7054b9b63f4c8a346b1ca0719a10000000000000000000000007330317c87a6c3804f6fcab6a64592f99d003446000000000000000000000000b5ae6cb8ec32691c77a6b230cd7e876dd1c64ec3000000000000000000000000dd2a69a740a4687a42a976377731f85d1be64431000000000000000000000000d8199ead69f53794f33e64f59c1eeea3a5858cb2000000000000000000000000171f35984189622263178935bf7d79039889560200000000000000000000000048f8882e4618b1fd8a3ac1895e9fb484ed7d2e7b0000000000000000000000002838774b47b6a974fc0ade16d2042e08bd67506400000000000000000000000017574033febb8f23fa6b3175f62eb058f717ccde000000000000000000000000087bbe5a5ceaee17eb8ca2f150354d5b6f5efdc2000000000000000000000000bf2e678d69c040f864f943186b8942fab8550388000000000000000000000000ed0cecae5d78e7a70238750e524e4460aa71861b0000000000000000000000004f3f2e0e2bc4045178fb6a58bf1f096f4955752100000000000000000000000095b6e18f9b1eb904d8026c7321d81584e0e5912700000000000000000000000065af1415e3a66cd1ea187196ff82965c536ac76700000000000000000000000020941b8901bd9787a0d175c69709e7925eb8f6fc000000000000000000000000bc8648a98b783932a2f3bf114dc025783d6d24c900000000000000000000000019045c401b6aa586f83cc7901969e4eb7c816c0700000000000000000000000033e1b43fff4d2138a5fd9786dc96994d044d0dab0000000000000000000000001653d8535708306863fbb8bb948070ee15539ea0000000000000000000000000a5ef0573fc8fffbf5552a09248f5653aec164e190000000000000000000000000353e89c8f975ef12a9532cbb423644cb73ebf520000000000000000000000003bb564e14f55b9460850dd72a3a99aca7db522e3000000000000000000000000e1eb6b4b1e4e023a42ae40d7f9d6457cdceaafd8000000000000000000000000399fe3429f12a610846c5b5b52ec2b9f796d7441000000000000000000000000e13dd110884667839d680fec2847b6fbf271ef04000000000000000000000000a0c7b4e7db993e738bf30dff1451704f88f3cde500000000000000000000000004eea56600de6956bab4808836ac30f3aaa4b37f000000000000000000000000a8faab1a17f8d09ba9b9ea8c8bb3d71eed866a470000000000000000000000001f9a3139bd5a8fd37fa601c9d9e84efcaf37677d0000000000000000000000006548e8d6a7a4b46c28334ae05f772078bead896a00000000000000000000000031ef39752dcde6330e17388b8560bcc3d0d32b860000000000000000000000007ea27f71dbc96ff140a06bb7aa0f777313d4250d000000000000000000000000d28dfe690a74d52888890f68c81e3f2822efd1d5000000000000000000000000a6bf0f7000b57cfff970fa50808edcb7f7c38c680000000000000000000000000251a17bfbcf40606dbec43e6a30b96a10cd79470000000000000000000000004645e795fa9fa7716c2d37fd1a84e79de7bc7740000000000000000000000000bd6c80fe65bb536f2f20da29d1c89e47993560da000000000000000000000000824064575ad5d63014d48af707e6b5ce672b06c100000000000000000000000003a0c20b0bdf4fee3be0583548cb0570836ad7dd0000000000000000000000002aa4cb57e0e31ee9c62e7b23dce2bc2b55a62b340000000000000000000000000b52e2a6966b1aa1800a608c44d2c9c2c2a5eb8c00000000000000000000000066581b3aeca7fbd7167bf9d798b4b040cb7168bf000000000000000000000000a3b7e63af75f4879769b239bcc0516d0a24a43fe000000000000000000000000f7c4541b75224dc2d0e7dc78f4e21784ca168ef5000000000000000000000000402a7e839e6b64f4dc12a26e47f7d9a237bcf79100000000000000000000000023ca44e8319cf4b48784881581bc5c60a7005fde000000000000000000000000cdb65cb6d5bdebc3c509f5ec0c083870d139a2510000000000000000000000004a9a7ccdf8c6f0b88a97ca4f8b01d32e6dcca3230000000000000000000000009e6b7afb8621b3a628db5aac7607919b109af7a60000000000000000000000003d730b85c5a5e6225c8c77461b1ba15ed821af600000000000000000000000006299b5435dfe400007e246ff08ce31519d5e60f400000000000000000000000004bef6bc926319efe9e5d54fe0dd7d9b4b44286a0000000000000000000000003ca30c0d3d4010935dcb2f4b9c9cbdb2b7e7c3db0000000000000000000000009ac5851263c10b6505977f4e72d4531eb6e9ec9a0000000000000000000000000e818e22e54a22f900e746b9fa3e89a563b0d6990000000000000000000000001e44e06dca53d13e0f4fddf579f7e01be0ba9c63000000000000000000000000ff33a337e4db0a04238e0e5d88297e17028e8fe10000000000000000000000002f9d1ef737eb5adb9cf0e11400a5b64555d5d29100000000000000000000000050c5cea1d3f429e7e0a70668c896a6bf6e97feea000000000000000000000000ac8cf53e7ea8d3e2909f346136fcfb06346012150000000000000000000000001636ba8e6053ba394c9be856ac9eee86dedb91e1000000000000000000000000d1d8e6f9e09f721e531c6fc4a2bb9962f3455387000000000000000000000000a5a58861144b90a543159ae6e096611cf1ed5b63000000000000000000000000e21f95a4ee1eaf97ae27c8336fbf6801c2df3651000000000000000000000000a706835f006c58192c0dd2d27d23911538d97328000000000000000000000000522caeea8dfc323b4d4c6c154b997f19e296450f00000000000000000000000083816a12a634b737ffdc7ab4cb7fe68060bfaf74000000000000000000000000ac052cf93ba098f6f12d6f11b34c9d51ea8935120000000000000000000000007f24c1c16d6bc28d5945e2e0ab25af8eb553300c000000000000000000000000650cc336bfac0394221a4793c6d7491ffd1f47470000000000000000000000003b01a5c1eb1b922f12ed691770defc7fbf2d29420000000000000000000000006c39b7634c1bdcbaf94733100b83356ee960fe1b000000000000000000000000179e959df1f524c8b4a91117c3087d897aaef29c0000000000000000000000001036245720d62d08a984a580816a63143e4e54ea0000000000000000000000007de185079f40d98c38443df4d48c7e89b463d0020000000000000000000000001a0bfe0a3f8302e3f4c584a087b1d95d50d1219400000000000000000000000069897f90d50277475b9da3b6189f5dae5ece178f0000000000000000000000003d1aed313191a5a5d8011c43e64078e7fb7c55810000000000000000000000002a43f66206b873267d1bd9baa2562cbf3749d14b000000000000000000000000289e8f0d629c53ec43d70af43139851eda83cb8a00000000000000000000000045ac8c0c7578dc604b52221de4779d7e74053bf8000000000000000000000000424870cfddc0c25c7ace9bcb6dc0b5ae489c9cfa000000000000000000000000d4875ccd8d07daa69681ae08dc8a560cabaa51e900000000000000000000000019a1932cb7b41c970fede785663add4c55fc6fdd00000000000000000000000037f6378d77f685852f68472fe8ce92bc1b7a89e8000000000000000000000000ef4f5aaf4352867b6191350549f8668b9ded7e41000000000000000000000000af8352bd75b668c350d244befb63fe74fadd0e7b0000000000000000000000004b84cda0a83a88ff097abaad26064a54f1992c6000000000000000000000000085b6a06d19301c8ec953a1ee88ad272fd8a16db2000000000000000000000000b4b92085faf2ae52842b774d08270866e9bbf209000000000000000000000000fcd121b2c9c63cfa07055238df08c7b585f1983900000000000000000000000009b9b3523d01b6a7d8b29ee93725cc444dd10feb000000000000000000000000ba9786f188d4b7e836040fb0c4b73eba29bdae440000000000000000000000009207f83aec15f98d6b9c73797d07d848bed98703000000000000000000000000f4efd6fa7a2783c86314d72f800bfe3ac408793800000000000000000000000082fec0a8f6996d69b6917844067529d93c418e8f0000000000000000000000001519feb08ee698ad776e6aaf6318115b1ad88ae8000000000000000000000000cc02bc266e285720ae89b8c8287b534910e7ed7d0000000000000000000000007459ce8ced721ab96debac0180127cef1225419300000000000000000000000021a3ee708f035445d53968db0b24f1c7a6959973000000000000000000000000aca7910382ba27ea1a9ed9e54ebc9bc5255c1fa2000000000000000000000000a0445aa76caa235e9e75f0baae9f4b02a8dea55800000000000000000000000054d1daa935b59e28b4718cdd251de4507d06dc5700000000000000000000000089138861e3bff54b31d3ffa50723f3b5de58afd2000000000000000000000000d02f4492b905c4506a9834726dab41ed46c111ae0000000000000000000000009f42cc998c4572a5ad0286d66c5f390f39c1650700000000000000000000000065e083c6a1a3b388fc749f83ed6104114d6e5e0600000000000000000000000029c44dbaaa6d218d2858d0f970167b75bb658e1e000000000000000000000000feba5a0217f11c4e564dbdcd9217c7b7d94c5bbf0000000000000000000000003ebc96b524304b42f3d93008327c16076bc20051000000000000000000000000d291492385725533b7893b22f68dda373ba61e450000000000000000000000008812bf1e28f8b89876599f2be7e712481f0fd3890000000000000000000000004587a7cb019ce91f43907ff4dfd09e3bfd726fa0000000000000000000000000423a186cc155e7018746d06775b4fdf22ea9925200000000000000000000000099781758da6e1bb5759ec3a1a2f66b07f5bae9160000000000000000000000005b40bc439e1ca062e1e62f1d793cab992358e38a0000000000000000000000004690f00cfab51b4f4c5aa2e6eb2af5bbaca44aa400000000000000000000000089658427904133c5fc71c32ff6d9f8712e3aa6eb00000000000000000000000081e792f458e5d4ab43dd60274374598495286a2f0000000000000000000000009dfbd3e2a6aaf19cd8bee07fe64f292ffab1829c000000000000000000000000803bfce89a7c7f698f46908835f727e3f65c01130000000000000000000000007e2386572fbdb46895d75db714e5448c5530e07b00000000000000000000000007f1b8af5824c14edbce2e1b79981bddbd18b97e000000000000000000000000c36261441dad62b20ec592dbd4d153ed5f8073180000000000000000000000007f5f5e0550ba791786dd8d04c9a2a0432b7300e500000000000000000000000042323e02a9466cf472ad2ead41856b505691a72c000000000000000000000000a2cacd2de70f4feca9ae83c6f169344e9e6c266800000000000000000000000047707b565e4e692cbcdfac492440bd4623b25681000000000000000000000000d725844f95bae69a0c18159fe7f26e0f104f45f3000000000000000000000000b466bbcc548e3b758e8a71c84ea4f65a306cddde000000000000000000000000b09d01ede89c374f92f44b1086ea872977d854bb0000000000000000000000009f537aeb2829ab80f04f0edbb07ccba81ee20a3e00000000000000000000000061d9434aba09af5b0a7469e3e3d014c67a0dfd15000000000000000000000000e06c10191f17b7b983f6e2fe45282f7c355f3fc5000000000000000000000000686d1286b6b8a180bc2f62acef8a3d14c490ec1900000000000000000000000045a2800b3b41263156cf45d7fc4d8e436707c2110000000000000000000000005515e2b46a977a33c25ffddfe36143df715cbd4c000000000000000000000000fb56cb7ae1ea51a51d91cdd40034af32f22019800000000000000000000000008558e2099ec8f7ec72571f24ce49a6c90c5eb4920000000000000000000000003f3484dc4c4dcd873722a128aa1f7f033e7b249c000000000000000000000000e4d9c7ada56c57120835cae4238837d057502294000000000000000000000000a5f9975f83f61a654dfce0fc7fc84e720ad20b530000000000000000000000006d90c0d1aa1198987be0b1968521122b6695430f0000000000000000000000006f977f17c2fa80af8785e988b54bf3385594ae08000000000000000000000000da11c9d70779eca1f57f898e679bc36c282a0b8a000000000000000000000000f5a1507d0d9a41be559e4ebd25962a26a2e4d85c000000000000000000000000512931a8446eee5ff9e9a40d44371fda07bbd5e70000000000000000000000003aa325d9b8851cdb963155380267dbf790ebc81d0000000000000000000000004fdfd3c1898568f2fca12a3c765bb354fa741ca70000000000000000000000006053bbffefbde52dc549bed97b58e46e3d61531f0000000000000000000000002e17c4a1731101ab8bf765e0cc46a726f9f257f5000000000000000000000000c2109b1bff84296c01d59202d33da5a6595beda3000000000000000000000000ed33799bde38d3b9a1c937eb81767273d58a3f48000000000000000000000000a5b9f6242f6cf0c55cc9475c90af79a8bc3e58aa0000000000000000000000002dbea8b91550ca234cf186c5199109949be87a65000000000000000000000000f2dc8165890d35965dbe7b0fed875883256b640800000000000000000000000046962abd737d387cfa9e2b9d75c2770f15513b05000000000000000000000000958004d2abd43a7a85c28b99fee5c1622d76ae50000000000000000000000000b7319b637fa3d84c3fc067d644556709f90c54a1000000000000000000000000d0963b49603b2ea6811cfe4bba73f0717b0a20e4000000000000000000000000f26a55ed2bcdef30f8582b8eadb3600da439719000000000000000000000000050ecdccd6d8aec2cec4c76331979791600b5c7090000000000000000000000005af70d9148d4c90d134a7ef334ac8b71f07e89aa000000000000000000000000f3316be3d1e623d3d7240b5a0ce199567461034c000000000000000000000000e21585144783181b4824d380b6e24a0eebe2b5e80000000000000000000000001b2c45937f2424c909569299a08aed0023580d260000000000000000000000005df75222a692b07c502eb6d5fba97c7c3d18bb86000000000000000000000000531bbce09c9c79de6a2215fbe178455ab222e11c000000000000000000000000ca8ba3edf7ff6626d92a910221e357cdfeb7c49a0000000000000000000000002795fce9ef45dcd908960472f2fa7ca3b838994100000000000000000000000039c39bca963085e3298f67561930b27375231622000000000000000000000000fd85ef8fdc029e9adcb5efb9f747f881365e715a000000000000000000000000ef253ae719678a22c005c37676d3425cb82ddb8d000000000000000000000000e4339968aed341bf418e59657e048f5d10de3e300000000000000000000000004c9ff5387735063dc647e7e67088fee8760383710000000000000000000000006fb5f6f41ae4efcd6581895218b6e49f1a62ee15000000000000000000000000c1bf2cd322cb003a5d87ad5b1bab1f5ef05d5365000000000000000000000000f8c5245214fb97391d5987949eae4d320414ad88000000000000000000000000ebbc7ff113a468309a3a3a24eeb1722e11a1637f000000000000000000000000c1a4da05488d96ed0325210b0acc66940cf0cf2b000000000000000000000000f0423e54e2ddf5244a5523e30b776c40eddcb55d000000000000000000000000f861d5e1cff69a3d6cdbb962837d417519d3ef27000000000000000000000000553fcb65bfce0f4a4b373c73baebd58b9a987ee7000000000000000000000000836288add6bc1c8d660891f622dad203a7663a030000000000000000000000004aa4f07e5188228f1955587a9cc492aeb44a47dd000000000000000000000000b50e9d9383ed378f74de25b4422c39994bf6d83a0000000000000000000000008f8f74e362ebe268d0068854dbe0e9a93315b8a5000000000000000000000000868f9966164e1c7b8ffb09f6d14a00de843c992f000000000000000000000000cc2aac7c5a669297101d1158f33ace925331fbcf000000000000000000000000787406616937b229fbbcfdc3d269fc35af73d503000000000000000000000000529470572ed53c954f971f892998364e363658a9000000000000000000000000832248b578d0d37b506770f6f3a7adb23ce7767100000000000000000000000076705f71acef7c7427e5890a5a85ecdef5009779000000000000000000000000924f917db69cf1bc0a6420928c04f2877c64d6fd000000000000000000000000f7a2b2d84b99946fc85c9b6f60d59c868490bafb00000000000000000000000040613800bd3e459f346e607a608db8e22ceec96e000000000000000000000000e65d6c12b49c759cbc4414e92728db6618df542d00000000000000000000000043e04e486835da6e2acad741530d4ba800eb9cc500000000000000000000000086925cafb9ae48841e2d1bc1819fc84e8cb991dc00000000000000000000000000826bc68c019238c9436c1b4bce198637299abd000000000000000000000000b438551d02b0599b3257176097c4174a94da7074000000000000000000000000e9a85eec2b2e0223c76c77a27834aaf95dc9217c000000000000000000000000a9e155b0f1c4569200bdf138df1db5693794fff2000000000000000000000000ceb9219a273d7814319ec588589529a9499925de0000000000000000000000009f831574d1ece52a0678eab2f9b7015b7225b4c60000000000000000000000004095c0b82302dadd8f5c4fc25616dd8f03c19b14000000000000000000000000236ddf1b70a9d1a3f46ebb72c0a31f9012fd1973000000000000000000000000d1648ca1f2f7742f51dca4ff64697f9f5be52ccd000000000000000000000000c975f8e22fa662def96559ca97c5c83d110171d400000000000000000000000000c119edf4fa32b0089026c4cd75ab0417d2dfa500000000000000000000000023d0ae975bce88cbc7e7ae4f5195e1f2a61fc2ed0000000000000000000000004c7dd0ed4d8abcaa7362b2c56963ad7a77119360000000000000000000000000fea5e29e63a3fe3962df719715740f8b6d6fff13000000000000000000000000ecefea403b07481e9b258647b28d61df9c339df4000000000000000000000000505e39081ed63a2f828e3c44e25dfc0bc9b43e49000000000000000000000000d021f415eb6cea22a50ffb19673ca3b346916e2d000000000000000000000000d4b463dfd1afbf01626e4e3229c93778ba87387600000000000000000000000057b3c3c40ca57a4be7e9540fdbecb5a7c57caf7f000000000000000000000000f6a8a2db5071e46fcc0311e886b1b5177ce3e81500000000000000000000000075ad89944ccc7be6e1f1e5f84a54bc163baa723a0000000000000000000000007a6198c491ecf6ba0d6850abe5418ed7194e6a0a0000000000000000000000009b47ebc0eb2a25e7b40933814d2383015ec01b70000000000000000000000000c91bc0212cfbefcf26882382c51fe0f4da3fe7780000000000000000000000003a574c1243f92fa2ae68d1488598f5ff5d06add30000000000000000000000007a62cc222485002494558060898a378eb99de87d000000000000000000000000659cd4e2e549f44564cc8887a3ee056a63bf12c90000000000000000000000006f7f77005cb6f33198daa784538f3ad7dafdf44b0000000000000000000000006bcc9a9e0bfe5471b435e65b22ae30a04f65ed5e000000000000000000000000e9ae199682dbf7d393d55e623c646aa05d1a3217000000000000000000000000bdec57162c03628cd7a88b2d87793149e43724de000000000000000000000000aac3c6056cc808fad4f9c405a8f78af8d0898998000000000000000000000000ec1e4183d935e8123a1ce4921c424e6ee1683886000000000000000000000000a344fed1a8533a07b0fe56e1ab761c3931528f0f000000000000000000000000d395d1024d3bd9eabd836bb43c4aaf0d110eeed4000000000000000000000000dbe10ec512f98ee98e2c7fe5984e197597b28d0700000000000000000000000052f8eff6ce0d318bbfc3ff9189eb5005de93c100000000000000000000000000dc6a1363541830bba61b32f2934c3d0c005e4a4b000000000000000000000000abbb394b2fec08cea6c68d224c6fb10db4f73bad000000000000000000000000472b1c7740a161be019fae7e474e1fa4c7485d4a0000000000000000000000007b91f274c73dad63c7864e2564d9f2a89bba804f0000000000000000000000009b0e6771af87fd0e03214b0d0c3c6bc6a7eae5f400000000000000000000000072b2d073c57db36b3c8e29c45d00ef670340a9fb000000000000000000000000ba299f09c55a903ef51cb4f3a547e2efa3b85841000000000000000000000000c017f28a8a0fd17c82108ff05f7b9b6c60640fb100000000000000000000000043c8c688eb2441ebe361693486c7a9c6f89f329000000000000000000000000043b2c660dd81fac65d6f9fd203983bb5da2450c2000000000000000000000000f9650612aee5c97b5f10ed4eda097ad47d053ef4000000000000000000000000e06d5fc128ae3ca4fdf834dc573bfa881aa94d3e000000000000000000000000f204fca113513cdcd2c9750de3b771ee6ab167f6000000000000000000000000c53d164eb59357742ab81febf82d314fead036ea00000000000000000000000055808932f0e4116eff286280b739182f2d53ebfc0000000000000000000000001a3df123ed4556cc5a2179739043902fbf347d1e000000000000000000000000964698ceaeca43adf755807ffeb8cbbc93a496030000000000000000000000000591900a929313ac1858f513f97ccdec7c719a0c0000000000000000000000008850248d3ee66ab31499c69165affcefb4ead73f00000000000000000000000047a88fe358ce7a9b0814e12729b6ffc8b83ed25c000000000000000000000000ae4b68e0c8a2eca727f74029190d58ae0acd2d3e000000000000000000000000f97b219234736514606b2e5ef3349c5a0d264cb300000000000000000000000085970f76adaa704aa2277e3b5a2d7fcb11ce72290000000000000000000000000a640d3f2eaaa07f859c7b9fb37b43965f032d460000000000000000000000002e5be54765df729b496c2cb9288291a63471bf2e0000000000000000000000007337184e4785ca618bd163666c030aff88507a61000000000000000000000000cdff6b556a64c547a3fa7872bab16f9f1b7854560000000000000000000000001945755eefa268770ce6b7e31c29399a55bd9ebf000000000000000000000000c73b6e9b2d8d1b5457d6a4a91e528c5156ceb0d10000000000000000000000000cfb0a230f10546e73498a1fe9e0e249f6da013100000000000000000000000031620e3fc1201dd4a7f0b249acce4a5ba3314241000000000000000000000000915d40d7281f2a380e5db4c3e3b9e7f91439d691000000000000000000000000a5d74b67c6661702c3f5f6ef7fdcb5a47a71436a00000000000000000000000045a729275b51d295c29ee7515f00c85de060441f0000000000000000000000005df3db0f7b836feab42d9fc9c3c55dea550accb7000000000000000000000000b4110b11c67e18e9613f6773f4670025530e554e0000000000000000000000005afd897dda72c69f9e6ed1324e25d50828b8b22c0000000000000000000000000a53e9f366dd2f90df923bd46246896893c8e8330000000000000000000000001c11a8634447e6cea0a6d819813fbe9bf2628302000000000000000000000000aff70c034f5bc0f9f6a73daa57113b0c1abe75bd00000000000000000000000084f314ce9c41067e7c977b0c225d504e1389e12a000000000000000000000000063c64f0123a14cb1ec0b637da90e44abfcaa9d7000000000000000000000000a40eceed1f5266c51b874e1fbdfc7e1fdd757fb10000000000000000000000006b6db5967e0ebac918080aba08ede33671c4af31000000000000000000000000ab41770a262e5b0f86e1295b605c9d5241b2c57900000000000000000000000090f2475628afed11b078e0246deedb80b3b6dc8a00000000000000000000000099f0c2ccf6658e244158e0afb087c5db92216f110000000000000000000000002a01d7ed5b86fcad176c91b2b3ce748bc88fad4400000000000000000000000036c68a73a786f1e522a17ed2241d3e682a29d61e000000000000000000000000eb935aec32f745450bde684b7e5612a44cbb0aee00000000000000000000000025200ecc96d5fbbf1a6a29c42bd290978e56fade0000000000000000000000001a6fcce79dd97b60b847f94370415e7b420e580a0000000000000000000000000650dd026d9bf382a6c187479a11c4f3a3511ba00000000000000000000000004dde1b4c6d757fffc919226bce9fa9ca0fb1602d0000000000000000000000001106c53b1cb90938bab4648330639532ae1a57e5000000000000000000000000c6eca62f5b34c49c132f5e803d987fdc0c960e1c0000000000000000000000007a12e0bf2bb1b11e22b9b39aecf05a0386a602b0000000000000000000000000b88488682604c32748640c6dde2ab94c3e905ad7000000000000000000000000f31e9487e69e7eeaf3791b6e810724712043910e000000000000000000000000a860ce9002a4707305579d70740939c26e93334b000000000000000000000000e6e977407486909d6c2aad23270058071965d916000000000000000000000000a0a609ed0c93d197f88457e307f8715e9c0b47ee000000000000000000000000ecdf1fbd10c91e8eca736a7d3296c17a168f7a3b00000000000000000000000061a3e4e2efdfaa0508e8748374220095d727ec5c000000000000000000000000e7e14c886fd9c91588ad494551de2127bcae418a000000000000000000000000e60a93b6a22e95dee2912151bb436d7a861b37f1000000000000000000000000339de2febe6311f325e544e8a59e12b3e826ba6000000000000000000000000053c74cc9d35b26dcb964d2b30fa61a404321dca80000000000000000000000006096c03597e385a5f09b76a5a973835774fa71af000000000000000000000000d54c31533761b7beb1c51a9eb9019220fd7e9d28000000000000000000000000c229ea8c8f378776402fd04057cef0dc823424fb000000000000000000000000f498e25d8e98444a51c7c391661c2a9e20dfc856000000000000000000000000def3238735fbaac8459c209a7ad4ed0d50035fd7000000000000000000000000411324226e6bb14081967749d4d10bee6de6c8ac000000000000000000000000249f4c8a0c736907ce7a1e5b444ce17bac0bdcc7000000000000000000000000ecf75a9fc674f451405767ac30d7491459669dad00000000000000000000000068b37a54547c15d42604ba0b4305afd25bc89cd0000000000000000000000000d3b5cf3549427f1cc3c90d5ff4719cd40274872a000000000000000000000000423ce17c3f44e08586178549a33858e723a20153000000000000000000000000324be40edf09ba8f57453f8a5cd31ce3b2e0686f000000000000000000000000bd2a2315b66902c7a62207b2141c7fd019f56bdf000000000000000000000000c8a74d9d99c7dfed04ffeb553d066aadc692122200000000000000000000000006864f65c07c3468724d7c770bba695e818f8d71000000000000000000000000151607f3cf7bdf5575967fbee5e57853f099729c0000000000000000000000008fae0e0da2a2ca318a0d4367d377251a6532c2c60000000000000000000000006ab83d215c9d8222173f6f8a25ac78797582213d0000000000000000000000009341acfff06ad945a7264be0d6a4daf763c666c90000000000000000000000003420726792e252ae40af1734159301572f0071b6000000000000000000000000383c0f1b96aacd539af6ef7bbf139e752579ba1b0000000000000000000000009ba968b8b6951c12925d8a93535138b5ce39089c000000000000000000000000c73d9100939aa7f5862107310e54f1d41860f6a9000000000000000000000000c8d296e2ca2e1486e162b6b9ae3c54de9e64a06f000000000000000000000000b9dc098ade81360570adf03956b2f80c53849f730000000000000000000000008dcce2978df9e2e1ad29b532baee1549578e9a72000000000000000000000000e41602d742ef3786a88e8dc5e75ce82ad9c2bd340000000000000000000000000fade8a89767d43c155f8127fb3e6cc7c91ddffd0000000000000000000000001f79204c964f3a8c3d890cae1191dae2073e1730000000000000000000000000c7d828a4293fe86a32863de9113fcf0649c1769f000000000000000000000000a16dd8a52f4c30f91c90b8bcdeeca0525ace2f15000000000000000000000000392959693518850965d6e1552c122ce3326e0a53000000000000000000000000f5a6656486201568721f34a7b843db29fae6c771000000000000000000000000c98bc97f54d5f8e28c511fd2fd9dc9211ddaa440000000000000000000000000233fb0005def0c387f36344f7a62fffde86f9d9d000000000000000000000000d05b530cc183aa108f6787bd2d5cbc245c8f8f980000000000000000000000001f10c1bcc507ece602aa91a6f107e1450c69fc620000000000000000000000001330621090b5582b36e3478fcc535b48b5922031000000000000000000000000fb009d3d563095c75dddba7698446895ccf258ef000000000000000000000000078df9b3384786b1dcb255b8e8a0be32a280e3e20000000000000000000000002ea0e2a1ec303351417c3a102f0e8b0883b91872000000000000000000000000541443356955912bd4a9ecee2026d37af09b907d0000000000000000000000003d61203ae7a4f4b7e9f4cd715c11e4128ebb1d970000000000000000000000004a9c08fd6e31c51cba16853132a669a24a8496150000000000000000000000007ef2e8d6223cf5aeba7035c62725461e3fd71cfa0000000000000000000000006342f8bc7c5cdebea452204461de694d2f03ce9f0000000000000000000000001f9e6244b3253b6dfb4fb01eb5d179799374fd110000000000000000000000005cb1aedd578e45ea142b62e95e62fcbc0ece22df000000000000000000000000d7cec593ee546c487a1dc364f5092dcef703086200000000000000000000000099992f0d4c1b7d554a8eaaf777973ff45cf21c0b000000000000000000000000727ca2d551a54c23e07490850f4fe9ec3be66b8300000000000000000000000041c7a710e95a3899a43b56040fe6b2aa8e7653160000000000000000000000009457ffe1dc1475b47b4798c292913c5bd3d81cbc000000000000000000000000772bd9fde8c5ec9b0c6335acc13701ca0fd46847000000000000000000000000f8636f4735b45768be846023ba738c7488259846000000000000000000000000173ecf99f6f1ed28226fda2214224f285e4007df000000000000000000000000f98d2dbfef0cd8d6a2b6a5047db61044bd4889210000000000000000000000006236214fa9850dbcef93c80427a3f81d60e7f163000000000000000000000000230751060d81d297866518c41329ba0fcf53e73200000000000000000000000054be9b7c847a8d580a2755570fd7f3ebf4022743000000000000000000000000893202dfe552be4c6b980f117c9ed491651e5095000000000000000000000000648648bf1274496cf33b8ccf89cf917fb59eacde000000000000000000000000aec179fe50d8d4d0ee5b36815085e390ca088af7000000000000000000000000b096db4a08147914f576e2c0fb8e48122af04bcc000000000000000000000000eca23ebdfdf663d499891a833d22956a6f65dfa200000000000000000000000022daafb17de3bdc936df453daacc66d5c32fbccb0000000000000000000000004deb6c573d3160fdc4379a46a6ca0236df9cf3fa0000000000000000000000008ece1f8ff09cb63711b7487eb86aee541d5181aa00000000000000000000000097e0a093c175c554da10e005f1409da121b6be7b000000000000000000000000bd3375c48e75b51c8cd5ef19e80d44b4d314c3ce000000000000000000000000d5276a06e394ad3dbfb5c47836125b4f0b75187f000000000000000000000000e5dd119e0f241a9a7affbce0b2fbe0ffae0950da000000000000000000000000f776998214451693dc5b1f6f02284a0348a0c935000000000000000000000000186511dceb08683201c9a2ab9e43f34796dc7dc2000000000000000000000000e7ddb5770a4ce45b117242c034dd6243089b25b8000000000000000000000000288b1a0a0329cbb551185b5ab153544292376330000000000000000000000000468799886bc9654f89d5b0c83980b77bba8db1d00000000000000000000000003e2c64e0716318d1a01d3b70f79ebec64b6e96860000000000000000000000003b8ad4c2ad77931436505cbfca5d306c3f66901a00000000000000000000000034479c2d5a2e93021329517283d89f7f500a3ede000000000000000000000000d018112dbb1ae932d13d03a615175f61ec697a2b000000000000000000000000f6514b33839475dc0fd3036b2dc37ef2b40536a7000000000000000000000000dc5a8ae45d75f31713e4d496eea4ecbc6c1dc6fd0000000000000000000000006abec904630e0d290cae756d245d03f8075442ca000000000000000000000000cb8e5a52d21f7fdf378b7f9bb59f7b9ac32b0e8a000000000000000000000000a1d2103a9db6a8dd5a3bd088aa0438bf47c2d6b3000000000000000000000000b59303d0433a984570eda6cb1b0a3898647e774a00000000000000000000000015c111fc053a6ac66e7ec6796bda2132e20aea390000000000000000000000003216726b00c72a8cb7ffca6afb3f2a7c3ed2f5c2000000000000000000000000a4195be2e27e2b28dfe088d1393f0674fdd2fe4e000000000000000000000000ee81e6fda6498f46ba97921f7728d05de36641890000000000000000000000006a0137c087fb4005ab20f97980a4552d067f76fb000000000000000000000000662e6ec5daaa8a3b890d326f4be1da5be1ee9ba60000000000000000000000000563fcd6a3f0c62921fed2318c33bab57bd478e10000000000000000000000004e34fe83b46bb3d4497b9d0349e72ccea590c3fd000000000000000000000000912dcbbdb8a30679f829f636937d62de0f808d6b000000000000000000000000a40dd5ba36228ec2fce13eec132a9c2788062cb00000000000000000000000006368094ae2747f2e6745b18884ac8c2f3610a7ff000000000000000000000000a84ebf46c36f4a5ebe44a400012315c60b3611a100000000000000000000000067092fc52e7f5766a2e99f72a0c7bbe37f4c9fca00000000000000000000000020368411f39859ee6f2bfb2b630e019337d010b900000000000000000000000048a2b4bb18563156ec7fc5a2d0da55ff4d445747000000000000000000000000478664205b22f42a4b2f8ff87f907f9f7c2d53700000000000000000000000003906150862e2c13c448003a39c2a5d53d1c853e3000000000000000000000000d9f8922e4fb3de4b1df0f4b0f2afc850e3f8379d0000000000000000000000003dd30d11501d5cfc6b935d558c56905c2d892cf20000000000000000000000005be4a197439f831cb360baea91affecb3f685de80000000000000000000000005d06a86faef80852bfb363d167a895fd032519ac000000000000000000000000e5dbe345161313ee4a05171323d20ce5133f18910000000000000000000000005a510f71c9f536b664f10fa4bbc813e7d0c48667000000000000000000000000d6a7e2b80343c84e5ad6f0eed961c0ce3e6b0bbf00000000000000000000000022e54bf1f7b81b7c6998085203fef166e0a2d003000000000000000000000000cc8ebd55a99574aef303a38b443b01cabcbdef42000000000000000000000000135123ce9f275af9270e1d7a1ea14fc90dac5981000000000000000000000000b6966da6e096a0cb8715ef61f638965dad91f7e0000000000000000000000000f96e82100f85bbb4dece29e6ff592916a2534ef40000000000000000000000003b3214a5d604e600e59e229d3b94e8168f487be0000000000000000000000000a9a6f231310a048c0de4e82cadabbe8e21f7b8350000000000000000000000004a85f2b6dfaa1388e56c3b215f903c83d3f8e4db000000000000000000000000f55db77609dac4da3e662896745f3c9f7c3b299b0000000000000000000000005ea160af66d62a664c50db0e76596ca5b0b18b610000000000000000000000008694ba72617e1e1e2648365044541e592076f26000000000000000000000000066fc7ab15402f2adc228282d29b0e809487a6685000000000000000000000000b318efa0b07afb72495cd4c89133027631e7119700000000000000000000000039c9af67ea66f60b6fd818375e36f3ca8b2029200000000000000000000000004b9aafc3243f4db61f4be7348c92443c366ae31d00000000000000000000000069ae52fd8d94a7fa5b9a69a8c113725629bf734d0000000000000000000000009e0eaa49995c09d8f9da6e6f7d21f3a2d586ef21000000000000000000000000d13f0221dd1075aa1668ee16aaec33bba4845c72000000000000000000000000dec744ce5c70b064e4c647e668a7b87a78c1ee220000000000000000000000005df8c4eb0342bf26136258975c048bcb5ab00af8000000000000000000000000293352c8c5bea78bbcfb20bea5e9dd66d5d0e359000000000000000000000000d9ebe0fbfb76e2b88cffb1acb5f6e88f1fd83ff4000000000000000000000000992fc6d8b94624acc379d8b476cc1ef60aae75ee000000000000000000000000cdef0f4b34d0b3b0af036b3a93eb34793edfa95a000000000000000000000000457ea2d2f0eb5f3f108d9ad4fbd6dea7d136a6b4000000000000000000000000b66f85670d4265f5a3e284421133b6b6d8c238b10000000000000000000000007a571dce1eee616c788954e95ff38195583495d00000000000000000000000005479c7c45655d097e966b773d796b8d974b594e70000000000000000000000009643428c4902480ac9d694d418215b04bcc92b0b000000000000000000000000120949b0f12b7360fc394d8d3640ccef093cb1c0000000000000000000000000973505f836e0128312ee2f6b42134be47b1b60cb000000000000000000000000cd1159a0a76c57b4b31520cbde78055cc13af19e000000000000000000000000914e73d6d8c911fac757a7f5ead56e4f934ae476000000000000000000000000a819344813a144fdb4c4b717cd4e8cc91d3d6726000000000000000000000000a2082c814fc2dc8dfb93764a446d047e76b1008e0000000000000000000000002a9e0f8b980a5ce0da14aebe234106763d5bdabb000000000000000000000000d3be3f089886753add400c603eb91bda12ef77b30000000000000000000000004c70410476a6515cafa768b90b31829bd15992120000000000000000000000008d2fb944f41c7400e88a60047389051098b6654a000000000000000000000000f36d53044adf970b476759c1ce1f973b2c5f59e5000000000000000000000000b164b7d2113c94a70d57ebe215d42f5bad077f4000000000000000000000000047efc1e3254acb4e07829d34fed481332ad72db9000000000000000000000000cad0ccad53a3a680b457a576bf6fb3c4089b576b0000000000000000000000007db9cdfe64a66cc6138e241e27e1ff8d32449614000000000000000000000000dde0d712f28245fec36c0d28b750df19784b68a700000000000000000000000091b4d1ceceddb382c62dbfa9060a6f5d83d627d500000000000000000000000079052174af2b5e0fe929daa03664a99308433e49000000000000000000000000161ef2dbfd0ed2da0660c801c2fbb3a1f47f9de80000000000000000000000003870b9688d5a8919c1b08989bd62c3eae2b8f122000000000000000000000000863226d9b03ee1dbb53238509f6423d6a74c5ebd0000000000000000000000002d2199bc1ab3550143d93dbce8140d6b1419ed9b000000000000000000000000b842e81a74f81ab046a27083aebb0aaca41890760000000000000000000000004124b3fe4e11d0419588abe8960ab09e3fc5bada000000000000000000000000a4b8a7bebf7f6ac9290ccd1fabc7e6fe2fc67bd7000000000000000000000000edecbfcc842452d85680cd818183aa378806430d0000000000000000000000002ded5a85c3aa4b7fd3b4fbb12bfaecd70fa02c3e000000000000000000000000ee6786bcf74e157525fa1bfde7896ff723a8d74e00000000000000000000000065bd32de259e6178063bccaf611d6740965ce9ae000000000000000000000000cfbaf55dce093e2165da5ead7c9397476c05485f00000000000000000000000038d1fb9eae876eeddab633aead79c1e3e50b38a3000000000000000000000000137938158495d50eb081fe55e47e7f6be1ae32e0000000000000000000000000f043ba72e012c74a77fad3341835a92b61e1a8960000000000000000000000009fc2ffd48c85cf6ff502bf14ad338602e4afc94e0000000000000000000000008038492b584f9e3c0cb41004ba3cabdcc84ff5a9000000000000000000000000787b2a2bc6914481b1eb09cfddbc87028a8adaa5000000000000000000000000ff526ccba06db76291d82eedc4b65ed2ae3ff9360000000000000000000000006672c4f5ca536f69a68eb480c4c815c2c90dacf5000000000000000000000000745a8214d61bac451585a9a70b10bfe2bff830ff0000000000000000000000000b3db9507053b6067f67f2f533d59248bc823836000000000000000000000000e13344f1973b3b7c3efd5bfb44c668d6d2b38b2400000000000000000000000067c09d614ea831d98553fe65899dc53bc977f5830000000000000000000000009e27b5ea3bfed7e41a4b4f7d88abdd92b4bce8ac0000000000000000000000006284dfce8adb89765f70d7b6fe3c32d22fb52060000000000000000000000000913ab119dafc48bfb864081f96956c8c688646990000000000000000000000009824a53944859feab32445b69eadffaa28df874d0000000000000000000000006750de533ada4a68f219a409cd0e0ddb125f7e750000000000000000000000005bcac4f9fee7db22bdfe5dfca1409306b60a135f000000000000000000000000c92e182a271943d09143969053fe373926b611cc00000000000000000000000013d922bbc86dbfaf965fce51940805ee643df8af00000000000000000000000032203de67299f2edd0d6c80d1be15cd4fe7ce44100000000000000000000000029c7ef993ac38ec30a121353450359ce7e7be46b0000000000000000000000003cecd2b3a12a2cff4790fcace7195706b9265d52000000000000000000000000c6f7f2a795e3b807d9e92574789da4e64e77ac9a000000000000000000000000941ebdbfe7e79c738719380e37dee975b13756f0000000000000000000000000234420d10bc95e435aa0ae09fbfaaacb4f0bbfd1000000000000000000000000c2890291d0057e542fed855d28f2c9aa0849406e000000000000000000000000a9f599e923bd82ec13096eacbec9ba2240a56cb60000000000000000000000008db5e5a0d431a21e1824788f3ae0a6c1b388c88d00000000000000000000000060e0e7c1268c3ca3df110924d25d68e6040e0caa00000000000000000000000007b5cb7b87e23cc00deeac03fd8cb27eeb6a24040000000000000000000000001adf60cc490bbb98ca3ddad81e1954ca7a5be2e10000000000000000000000003ce3dccf1875c486879630c8a7bc7b602439c690000000000000000000000000b4c0bc0b35fa3bd2b0277f37678d8117c5f97cc50000000000000000000000007f8abf177097687f858de0cec16b3c052506073f0000000000000000000000008fcee52bf7b18e9dbdbcaa6e636f6bf0a9cd3b660000000000000000000000001bc7d8f9d680dc656b4e25468b1aae65f0ac296f000000000000000000000000fb8664ad636c746a2fb5a9024111d3f08225bb920000000000000000000000005c0bdbbc2d6c92d0fed6c91c737b4f81dfb3170d000000000000000000000000843bf416ecbc796adabe0c9ae5320755234e4cb300000000000000000000000024d4566c5db0a6c0f488ec3c030bfa64a8fc4157000000000000000000000000efae0122bf2f6262635e74889aec30dd50f5da0b0000000000000000000000009f8cf1b20db7f1c204f3f518c5fb1fddb2c37c1e0000000000000000000000008f99125500e0e6943ec6c218bcfd8b387f15a9760000000000000000000000000ca9549283a26a274100638585e331d73a685dc3000000000000000000000000e084e8a66fdaaaf0916a35565e4b15728c911e6c000000000000000000000000a3e911008ec5970b56f8c1a44e4b359097258f99000000000000000000000000ff08f021b8a60dadfaaad652d2f1cbec837b940300000000000000000000000095bcb56e3e8de63f8145da7ae08e23e6382845470000000000000000000000006e9d59e325ecafb174344503ef59ffd211fcc3f50000000000000000000000001c464e2305f4b293c440ce5d9a5762c6f9868de8000000000000000000000000e602c18a5ce5f4486a8830b9d02c99f953f0de390000000000000000000000005356feade07efcd29430c9294324fa737a4c11bb000000000000000000000000433c4e42644950e2b185d848931ed91d5774ff83000000000000000000000000add440b0ad72f133dfbfeb1177eecb27256b444b00000000000000000000000091f610db0ba5be832dc684fa79237a1ae5468223000000000000000000000000ee6e24bd287fda5ba0e94c62d6fdb7e758498be2000000000000000000000000675aba074780c63c417405e4224359f03adaf69e000000000000000000000000c91b0e0205426df93327e3a72a0a5a7016e531620000000000000000000000000b47e62397d4752fad264a3fe8da74224b0edb66000000000000000000000000d2506596f4cc2c4ddfcd9293fd0da82decc17bec00000000000000000000000044d32f5a6dd7740f7d2d3708b60fe8ad41dec5a200000000000000000000000079542a1e8e8bb851200a316ee172a17824d9ef7c000000000000000000000000c4aed641a256f7205f52868b429ee02c2eb024a30000000000000000000000008a271910d5259b24620b8eb6a5e985d3f3d2eee3000000000000000000000000b7dfda1ff6e2899ea82976e2e68836c4b42412ef000000000000000000000000a83101d452502947d4f9286a703a2b35bd1e69410000000000000000000000001ec85fc69b02140d8aa40e87af68ca34674b83720000000000000000000000007d6e61d7144df9415dc061bb8969aa5c9abd62bd000000000000000000000000fb67a6a59609662330171f63142c7259f241f346000000000000000000000000cee5fe2438fb0781f496dd6d69cfc9d252df839800000000000000000000000056fa23b1f96b357bf771d9be8c879babacf96a8c00000000000000000000000045101c3d5385070bca38140cf7487e6b83f2cb22000000000000000000000000fe08759d48a34c34feac473e14408494fa04b452000000000000000000000000bc20feee122787c67ee5391bcb6f485f8a747cb400000000000000000000000078c1cb4e3bb89b24b6f69020f9b72cbb33824f540000000000000000000000007d0ed19102e5923fd3f3cc2913b1733acfb0c80e0000000000000000000000001f4474bcbfef0abbe1abde5a76e0d7a28567bbb0000000000000000000000000c38ab384da373fe820203c25cc6493c379d996b40000000000000000000000007091601bf958ecfc06b466a505c5818988165ac2000000000000000000000000f528d4dcaa7ed6ef242dad7e55b0ded40bbb0c380000000000000000000000004f88ba249388410646dd583a9417832918f2aa5c000000000000000000000000fc836321f0f655b5bfa20e700bd36aa480e73b710000000000000000000000002479970d4a6d4aaab18ca3b76f9f94958df033eb0000000000000000000000007049cfbd0898682680131bb5153aa780e76d04c100000000000000000000000002f5f2527fc6d66d9337c743eed5d5621a4d62e1000000000000000000000000956e0c35914a796de50caf27dffa748404432e2c0000000000000000000000009fe8dfaf08cd8d1c9aaf1846f96ab7e0f63bd682000000000000000000000000bb7794150df033ad3a3b0e9ce3f79ff2a9a312ae000000000000000000000000786b3d64bc98961b7577cfd8597ae44577e9a1b10000000000000000000000009fd173b16edaf2e77fbc47b554a18b4ba5d2c2870000000000000000000000004c0fc91c165c9fc2dfda5ffd36dea492d84dae92000000000000000000000000443ddf5124d358133da20fef7dc1a46fa4578f20000000000000000000000000e14466b279de99d6f4d2da9dd763f24c39f7ba03000000000000000000000000048e81a590b9440cad646013c8f1227af08d9fa40000000000000000000000002888a796b129c8baf65de310219d5725cb36e88d000000000000000000000000ff86c50b5fa75dadf3a9c54d55057aad4884c158000000000000000000000000cf265d7682a702670619d3a1959b80ee517fb85a0000000000000000000000001ede86d1465914e12c240a508c973e06b05c2cfc0000000000000000000000000c4389fed11963815b548a47ab4c5d770c807cc700000000000000000000000033a23b111b02d4128a23ac8cfd53a735112fe122000000000000000000000000057520aabee2ae75e18f529301a333262ce962ac000000000000000000000000617663031035a9e08f40f7b86d42a9cc998b89350000000000000000000000007bdf1e794c63ed8f7dc67e3f23d16d38b346c3f8000000000000000000000000c0a7486175f0ed89d6052d6ee75bea205388ad650000000000000000000000007a984222c3dec1f134ea73b51e8daf53288a00760000000000000000000000007c08d71516ede8224c5e2b7cbe18cbdbd29c5504000000000000000000000000fdb69751612144bbfab53d72e736c55dd90cf70b000000000000000000000000f55cb28376c4d84059775698af214539cfe47f7b000000000000000000000000d4d9182966eda04399598b278e0fe3c50fe38b1100000000000000000000000002078f62b4a42ccb4293a6dcb48726bf01c27ebc00000000000000000000000024bd155d4994b99623a2fa5b8cb8bd704e51239f000000000000000000000000b9c3f89216ab142b90a7f88ec8b97848e1a2e26b000000000000000000000000d6d4363a4288401df008d232842d73f10f39d75e0000000000000000000000007df4b1c67aa63b76d572db165c1fea099130b55000000000000000000000000082eda7714c72cf96d5d0016e265509889e79a495000000000000000000000000f0738ca60b910c2d554044d7001e18ccdf096be9000000000000000000000000b994f3a3c9946f2de6e6d97fd1c943fa56ad78fd000000000000000000000000eaeae8f5e9c730f620d825262f9bb2790465c5fc00000000000000000000000052bedeb72c84bbfbdefaee8775791b39ed072afc000000000000000000000000cf0b2b04ad2ab3cf47b9d39a8d16a706eaa3bb7e0000000000000000000000008b82ee355a8ac5f25cc2e4cb48f5320afb32a5c500000000000000000000000043f4ccf817ec913a6f2dc45f63e64561ad3086ce000000000000000000000000a9d77e4a1b9e70abc86e75395b70bcc33d8e9e7a000000000000000000000000f496b722e04c0a3bcc4304a218d21b6499932e550000000000000000000000008245495534fa64509dda80cf5f96e8f286090ecd0000000000000000000000005faa71c0f2bda05d3f97827a257564737fd6d9c200000000000000000000000034d0d74c2541c7177018be0ed31c122f243588a7000000000000000000000000927e496fee7836029816ac2e2c7661bb7b92982d000000000000000000000000ce385d3dc7441a99d7dc79341fb2aa90d57c0de7000000000000000000000000dd24ed01f291c67d2580737c05c10fd83f22d9a5000000000000000000000000fdf724821f54fa7a1df1deb812d12db697ba9fac0000000000000000000000009c995338998d353dd3a820538bfb8cce880dfa39000000000000000000000000fc439f6582e72ad7676da029942afc5253a0ebb6000000000000000000000000da8faa9b3356e4102272ed1a33ba8a347aa273e400000000000000000000000044fe7e394e84ca71093c69067449b8f3355f817d000000000000000000000000f0287406debc82ad2196973999e324448fb71646000000000000000000000000ffcf05f51db896742d9f26e54f7c949f51dfb5cd0000000000000000000000002400afdc819f82b8704f6d2fb49f6daf6ec911c0000000000000000000000000dd07d53f8f549146b2fcea55a0957974228ab497000000000000000000000000d9ec97856e64c93a3929b3c353599b6b7733b46a0000000000000000000000008cce9222fd6e5bf4ac7cf360493d3791bffef57100000000000000000000000038bbffac1dd8d6d163f18abbb3b706e6d36923b2000000000000000000000000741e1753765df326b4e4256997a40a41ec6e5bac000000000000000000000000f297e03aa8488b652c44b75c2f0ed529a1a349c00000000000000000000000008617f6bbcbdb183f0df0d9715705a6d0b6ed5e0e000000000000000000000000ed80848f54dbe27f9cbee72a47a5ac25cbf0ca7b000000000000000000000000b2cf95a49bc9a5efba656d2cec3133eb3faee1820000000000000000000000007e9567fbbf827ad7f55dfe556d4f54ccefff48170000000000000000000000008b85e2635c280e493c45b692848c6dbc208fd3600000000000000000000000008309101d3bcb44236d8a7005c5259fb97017494800000000000000000000000098f5812a4784919eea560e480d0991551ebbeb30000000000000000000000000f3dc9f08bbdc790816aab62be1d083fe978a1c90000000000000000000000000c941d180b4a8916a34c95d1807f07dc35122bf64000000000000000000000000be86188157f40164609a2fd41e8409a9f316be1c000000000000000000000000d24cae4b80cde1c5b6652f19f3badbdefc38fed8000000000000000000000000756c1b2ecef802a976a48443d5272a269c3ca7730000000000000000000000000ded1358acaeb6592f72864d8571337fd570e16e000000000000000000000000902f95edda2e5ae359aee00a27e87a288a65f1cd000000000000000000000000be27d73cc595cf87a0135f2b8127ef4fb4c4f188000000000000000000000000cd3c21ac58ab6bc9bc9dceba6226c18fd688517100000000000000000000000079e196d1f24a9ef171f88022dff5fb0528aee7150000000000000000000000000c567945a8969a1910b981f8aef0019cf28814040000000000000000000000006cff4e969f1b0215334026a2a1f0cb3d3b7b866200000000000000000000000092862e6f73d092c418ded2635272f47cd3f612bc0000000000000000000000009b3c7b4033bdc91def299c67d6901b09ba9f532f000000000000000000000000e458f48caebc4ca90a151fcb42c8d70e9f947b0c0000000000000000000000002c8f6e9a8365a46bedffaf23f6a550859bed95980000000000000000000000003a16fc138e2f0f7ba1cfdca862ba5c2a41decaf10000000000000000000000003da544fdd187b9e7a348869c0eb7d89e9bc5bc35000000000000000000000000db94d27dda7c995b0763051147040e466b343dd6000000000000000000000000317ac751b772f4e348852a31ee5139a7f809c6a500000000000000000000000050481327ce6c8e333cb8f15659020d7cb1bbbf74000000000000000000000000cb03dae6c10ea73b4e2c5fe67e4d9fea5ba48b37000000000000000000000000403ef84afcc357b2751f8768d01ae4a6e76cfba800000000000000000000000078f8e41ffb3f645017c4d10267cd7375f51cfce7000000000000000000000000d96a0132d9b42fd04f996de98d1689880c3f1cb80000000000000000000000008a601686477385d38798a89538ac809c9324ef0500000000000000000000000054fc1cc60e21b42f9d807b96f6d827a4e69c6ad500000000000000000000000007f77b2c741f75f04aef9a51a940c8a0ed85a186000000000000000000000000795f7e3113cd2a2cd9749a6ff01cfb0aabc3af9f000000000000000000000000a2cd7712211804bea6d63b45179c48c77e5d2a6f000000000000000000000000a45b64d98869dd431239e1743ba27d40fc36b3e7000000000000000000000000ae322cee6a4d4cf9f90dc2de4983b80bce7f4bf5000000000000000000000000b80fea4e3d9df660b5e0302c95699300ad8d9372000000000000000000000000709d88c27a5ce8c5f8f8d0ed9393631ca12cd9d7000000000000000000000000dae16c92dc9a2e3c28030191b8c46ff7c60ad09c00000000000000000000000032160a15fb32d9bedb41cb242ad5450f5fb92a5800000000000000000000000060ad7e95e275c628b17c384bee9b6647048c8c990000000000000000000000003efffae2307cdd53542e3005174de4dd850973cc000000000000000000000000a0917e3c2ad0c59afe23962ad69a552bf872cde000000000000000000000000043370c689f3a52d9bad8527e5bc9f45806c808aa00000000000000000000000073cb31a49f0c2f74ad1adbf84e15c79c173849b3000000000000000000000000099c3c1693803bf942f31c45245d9f0aa591bc800000000000000000000000000389f0ba2422a05a49984af5d4c37fdd8a4bcc0c000000000000000000000000611063e52034028174566fd8b14e0068d5fd105100000000000000000000000028a24cdbbf2b48c901a54f543d623fa25628c74b0000000000000000000000003e9131edee8585d424e36169d494e7c61df90ecd000000000000000000000000e60722760ae769ec5f8fa2c9b568f5d77ca96fb20000000000000000000000008cc88f2607ba5d0e3f87f18408a9b4cf5ae260e80000000000000000000000000c7538d7a78ac35fc504a206875c3fbe72c43a1c000000000000000000000000896dfd1b0609e7b25afe3239e0e50b3a668400660000000000000000000000000485c4912668538c1e5cc9b25e0e9d97775f83d00000000000000000000000006ad1077bd1d7c99bff0f1ebfe407f0628a7c5f2a000000000000000000000000f55611b6f62dbfeee0112a1bfecb0f78931183360000000000000000000000007a0a28da54757ece60b87fa8c874e9950592078700000000000000000000000016b378d9affdc3caa73fde2650dd8b6a3da17c9d0000000000000000000000008550fe4f2ec05f103f298d153e865937f31a67360000000000000000000000005559282761b9d8b56425e8c88b2bcfda4063bf300000000000000000000000005c277f2b86ee4c4f2bde64ceca0ec89eb4a6cf24000000000000000000000000896a15d3a0fb824c80835733316164b0f7f8ebdc000000000000000000000000099a260e3ca5b6ddc1b064e9f52d64d07d8b23500000000000000000000000004b48e11424c174897af599ca09be02a860beb84f000000000000000000000000336880416435f1f838f9d34877074a6b7ccf9121000000000000000000000000ba27e1113a93c69bbebc6396d7fd67be773ea13e0000000000000000000000009590a67ed132bd07572051ddaa9f65755db60526000000000000000000000000acbb0a35b93ab1138f8583baba1d9fd9de931b01000000000000000000000000ce77b4196b688f1d17a4508d9fc1acd7260acab500000000000000000000000018ea7f99df038c80c7b42316a37c6d3efb5bed2f0000000000000000000000007fdf2198fe1afd2017e348f766e15db54944899a0000000000000000000000004d8684c7d76383b2f9678212c38c25f088deca4f0000000000000000000000006b8b2e45a97f978774cf6621cdbef1b14b5bec1600000000000000000000000055b77c118d7a11d82add15a5322e3a8cf00c902f00000000000000000000000074a2a0edbcd718ed615a90517da3af8b1e2c68b2000000000000000000000000633bd1bb59226e4b8dc04887ddac1824c9b67e39000000000000000000000000f1d3c01a4447f0c4e526b28b8c177ad78930c25e0000000000000000000000000d9217f1f4d18b187afa836641a79c60a1e64e62000000000000000000000000c6042af7629beb0953181f91600ff2fe946c68a2000000000000000000000000bb6a11b5e195cfa6a26ebf3ee7b3a1b3beaa272a00000000000000000000000032bdcf80802f503590783a80b00e4916fa965ae6000000000000000000000000e78f94272077385a5a11055e72647c7267b872920000000000000000000000000100fbaf09f0e1448254c2199650e72171a069e300000000000000000000000041b238a3b51e475eb223d95b3cc5f30927878388000000000000000000000000d0886692c0ed211f439857e1dd03bf62648ea0f00000000000000000000000007f16cff0d70ddd5ac90459e604c110c1a2fa0faa00000000000000000000000016fb8c1e311e539c24d81561290d749eba6051c5000000000000000000000000056e48a1c6b73e7dc98d4ef335dd9778bee1e982000000000000000000000000fca390c01f121096719dadc2a0c82f4675bd8e7c000000000000000000000000407c8b87e638178c63f9afb5201517196a63cf1e000000000000000000000000f8364579e7b046bf072e88cd868382e8e2c80dea0000000000000000000000006567fe7f1634d66dacc408d27b18911ee85123c10000000000000000000000008d2294302a5fe80962a65b9b23c4d78ea8b8b18a0000000000000000000000000af80de6b881e6e0cb7717b635d07f5ab4c88843000000000000000000000000496e152e05f34ebfc9c5d9c8423bdcd999d3c65a00000000000000000000000099c842e1abcc445442a9edb8d8270cbb3bfeccd3000000000000000000000000168e9333814f44235a28621e3cc09a49978ad9a400000000000000000000000069bc9a57d4c5b89b4e953fc004706c6f83f55f81000000000000000000000000473cdb50605630cc19465fa3e892486f04bab0eb000000000000000000000000cf3dbee0f02a152cae79bb08a92b3b7855abcdf2000000000000000000000000493d238c47fc944f6e6a7be9453d03380c1681fb0000000000000000000000006ab0941d392f03f7492245e99982b329f38326b50000000000000000000000002a7678cc65cac8b1ab0f22e2c483282a0fb0b75d000000000000000000000000459ff5c701f0e769712cede7a35ea07c1d57112a000000000000000000000000d4589b693d007dbb886d78580d01c537fc5ac2a500000000000000000000000093806959b585ff3292381c044068ac4018359743000000000000000000000000c593ee1016b6bc8c7e1ac477628fbe776e7d2ec6000000000000000000000000c81af8b906335b81a30d3b5b2355fc8c2e7ba574000000000000000000000000d3c661c09a56b5fc2d8799a6fc673a901b30c568000000000000000000000000ddf373112b601766800041cdd53c036ca791b054000000000000000000000000ffea94b1c7dc2f3d915a32e663012b18c0d373ff000000000000000000000000bb0b7538e434071dde0ee07c3dbca3b5435fe96a00000000000000000000000038633010c63a35fdb9cc2cb2505f05c2dcf3ccb5000000000000000000000000948f02054da06e97a12b96154fedb46171bb281100000000000000000000000093b72cecd41940ea60541aaad6b86a744b2154b70000000000000000000000000af270a13ea7daff8d0fba36c5d2a4cd8c07bffe00000000000000000000000019aa358bad3bd8ac7d483788f3764cb555c858ec000000000000000000000000054483c7cdb269ec615d0484738f085f5a2b7ec3000000000000000000000000bd9f00a5e0a7f2094df4d820ba6074224b735053000000000000000000000000450f0c46f77a94aa4f6d65b8304ca54f2d8eece800000000000000000000000087a56a276e84c8cf583b0a1330eb8010f25ba00e000000000000000000000000e9fbfb10b9c6ba1ed16a8d5b0b46327aca526203000000000000000000000000925fd3c0c26b8428d339168236a5c88e7492dfde0000000000000000000000006a6c81bc983f9dd8c8492eb1488676260a97cd8f000000000000000000000000616690531c43e2e78f1997caa49fc99b005ff4c7000000000000000000000000d62b02784bdbe34e0ebac3ac29ecb36104a12c0f0000000000000000000000007fb3117a12f85b458c5b07ffaf6a1f2a10468faf000000000000000000000000c9eebecb1d0aff4fb2b9978516e075a33639892c000000000000000000000000b4880d648671cd4890de47282a40933750ea0f80000000000000000000000000e27e3831b910b2a0bff32c3281f50304625a6f13000000000000000000000000fab10c3b42b04f9063c6379b88e62a6d5c074aae0000000000000000000000009da8b11a969b3d54068992dd77c1986266fc5d80000000000000000000000000da824422d18dd31127c3c4887a15982f1dc2b9420000000000000000000000004faabd7c1b578803a22e82581c5e82e5fbcc50730000000000000000000000006445e4ed64c01961764ed10b469c0be97aad202a0000000000000000000000004697824061515ac653d61b89c6ba6fbf91be1ba6000000000000000000000000c63df31697cfcda5bd99b4ec24045a4a81d26bd9000000000000000000000000dfa16b0ddf15ebbccd545de0bfcb648201de6a62000000000000000000000000338e300def3a177bfbd15628bc09934a1f0235a40000000000000000000000006e5c84ad829f707c2e7d36741873bd9260ef8404000000000000000000000000ee3812f7c3f0ce067971b91b60972e9a73e6ccb60000000000000000000000001c5fa2bc87d731e0ea89cb2ba0bd3b3df119630f0000000000000000000000005a0c2a0f278d231a4ffe9a5aa0009372a697e6c0000000000000000000000000b9c99a49545bddf53ee326cdbc1f94da40d32772000000000000000000000000761dd5d8b55751e71b3bbbd6003fecbe7da840b2000000000000000000000000b9871722074e8c9fffd285a922cfb416241e8b7a0000000000000000000000008d4ad51689e35114a566ebe273ff7ac9530fb01b0000000000000000000000003a8427ce4c5e4df3cf564c77edb1f602958f678c000000000000000000000000fd07efd2197463610b76dbd700a738145fee943800000000000000000000000068752cbc10c05210efc12fbb00ed05fdb9acbc2e0000000000000000000000004de0d372681ef248fdc72f70de98f4facb24171d000000000000000000000000c87662e78f68bf47c047cb4a3af9b490865a66970000000000000000000000009e0e9c22ecbd8958b44714f0a37ff08ee58e2d580000000000000000000000000b7dbc014375cb17093ecaf371ddf81e4b2dbd7a000000000000000000000000af74cb7f9ca3ef400ea85c9349317d934684c1b80000000000000000000000008c4488b1d1f5e59225fba54843f59a98113e86bc000000000000000000000000d52fcbffdade0dec50fd52ac4e54dc3d0dc8391c000000000000000000000000fe463317fa47afd9ee58509eb377a1cffcb164bd000000000000000000000000f6beaf2d2c893509056e9b090219cab9dc0688cf0000000000000000000000007b0959606119e63fb5d3baf6a1812563bf5b5f24000000000000000000000000f64b5c6dc4a052effcf474ec98e1a949f4b7716f000000000000000000000000e99f7b2ef40ae7bbe4555f3a6bbf37f3370b4d880000000000000000000000001b198e7b6030bf819f5c51474c01d8c9e2df5f22000000000000000000000000ca6f50e5559c4561d23e02509307cb17c96996af0000000000000000000000003aa4d481c2639326605406ce415d96d7c9101f21000000000000000000000000db50cb6118c7bd9e6bcca72b33a7caa8d42fb195000000000000000000000000ebc8d5f6b66c2615e79762b95c36c35321cd1ee0000000000000000000000000115db6d1039dee5c3312f07ff12538a07076a4ad00000000000000000000000033585bfa04a4ac6d22d522bd1ad3613111c42d46000000000000000000000000015d9d1ba0fb3ce92685125ad19af485454ae65c000000000000000000000000d7223f0d917a0c9e83ca1863c56a9494ee88d85d00000000000000000000000064a7c750a0a33747aa617a266c8b6e4faf97b3ef000000000000000000000000c28f374439257a1d02ad6762343b37d58caf68a50000000000000000000000005d54bd743ae8d5ba7c51bf9b143391c13040825b000000000000000000000000f7314b4fe9a7181f2ca9b84acbf6148ed44ba4a20000000000000000000000003a9d6fd20ca4dab8077a036ff44aba7c91e9729e000000000000000000000000d9f88f46ee4ad62d8eddd52c2d7348740a9887e80000000000000000000000009e26fba5a4fd26d617ded6c7c7848ca71f63c6340000000000000000000000000d34993885cba467ba440e4eb6dce4d9d174f386000000000000000000000000fa8da5dfacafe8cb552c396d48affbb6d61731ca000000000000000000000000136d8820b2acf24e4626ee179e8673caee50a3a200000000000000000000000072222a90356e5d7ac0f9fba162dc4bc10883d83f000000000000000000000000b569817fad80939c886aee1e9243d365b2a8ee1e000000000000000000000000418f1e12124887d1a66eb735950665e8f868649f000000000000000000000000d489d20690308d30761be12441c88ce417ff28640000000000000000000000006cb8f2e7d4f573c07c8ac2976fd26b2ab14ebb37000000000000000000000000bacbbb824c78766f40a6fabe4542f6aefccdec150000000000000000000000009d38685c40f04f1e9050a5b21f20faf60040d7f80000000000000000000000001faac45f32bbab76c31ffc377844a41d9600f5db000000000000000000000000a30932a9b7e183d2c709f15d335ce9d1b57fff61000000000000000000000000d24b9528da82d078f6e9f86baf9afd3edbdbe5f3000000000000000000000000d5b5dd8aeea4ee7e03380db224d935e41ad731710000000000000000000000006c6ef9a298451cb1b837165a690c326c1ac52448000000000000000000000000e1ff0053685ff9759335d683ec0de84b9099df56000000000000000000000000941335f25f5059c31ed7979c28d496ec69e901d3000000000000000000000000a6f434c70cc301eba0262008bd3607fd183a7dce000000000000000000000000c04ca505562b674f3c4853687ced20369b70a75200000000000000000000000048c350265c641141b2e6f68e87127a5caaf6560000000000000000000000000014ec08f9c9e035e09d3522db86927f8583a73378000000000000000000000000fb93c1b8dbb04bcf012dad716ce96a82fe0da589000000000000000000000000467499775f8f9aeebd9136df8fddedfe7c48c5a500000000000000000000000090fcd097b529804dfa6b4c68baae8d8c9d24751600000000000000000000000040b6883968e599e54e9524210b64265448ed397e000000000000000000000000b5d7da87e018089e620a8b29123cd8481e4c45ae000000000000000000000000445d836d2d65b2f8b9770e7eb7c3d7ecd83eb0fd000000000000000000000000060a05995317c2564f38362c347d7c4c5aa3a94f000000000000000000000000ca55fd17c231a1bf7392e8bf88026625d715fb7b000000000000000000000000bb6e2f7227252394b1a9bea0c4b8485bc18ab8700000000000000000000000001d8b0dac8ba8fa78be04040ae079cd6ebb47ec8d0000000000000000000000000ff596f43d8f72a7178ea656192d1869db9a581b0000000000000000000000005479a730b1b5fb3642dab2075bad34fd5a3428a3000000000000000000000000db85fe0f6bdf855de08ba88c5bfb04b7e72de11e000000000000000000000000f2691eec2774ccc431d3faac72937480af62e1e90000000000000000000000005d7c645436e69e0950526d416764dd6947e8e8840000000000000000000000008ab943f82e482d6484a1ad9f61695352b7e87d8f000000000000000000000000a6ad9ed02949918db518434187cc6894607b1143000000000000000000000000e337a0d6bb4b1ff2081cbe5a4c834ffe028937d30000000000000000000000008cac95b91821f55be3b1db861c12b6af1d325f9c000000000000000000000000baa9efaf530504b27c4ec8cd6d4a94e832a78be7000000000000000000000000e1f643612641a44229b6be04c9afa1b44eabf9b80000000000000000000000007e2bed43f50f083b40833ed8363bb0b38cc2c6410000000000000000000000002e4e39cf6c47cb455d1fb3513b718e09a716a6880000000000000000000000008181b60ccc544362c791e55b55af2f4f46d5b33600000000000000000000000042b829cb93337d47df87256426a4e642b8bfab3c000000000000000000000000cd44d1ad2a9d887246f8b8ed158a4df0209778ae00000000000000000000000067e876457604aa3badeefabd6869e963ad72346c000000000000000000000000cf99b1168fe91a56da35599261165edc94953246000000000000000000000000ba57cdf5a61d6fb9b31c77b82734f6ba476cee05000000000000000000000000e68f1ddd925ec8685d29189b3dc56820137abd2c00000000000000000000000060ddc88e4b5df475dd72777dfd882a5cd7197c60000000000000000000000000fbb2506e23eeb4bf9c01864aa86bdfd77298141c0000000000000000000000007a62472735b37799ed3a8aaa6723da41f0b63cb4000000000000000000000000e2e8f4a354576143df4251b4f6997042b6cbce2c0000000000000000000000007260fde3006feac687f5f5423569b45fa9b81e1f0000000000000000000000005697c333286a384de7275afe2aba985f41f323110000000000000000000000004e231bb823fccf08535449e39a15b610ef963a01000000000000000000000000a11278e5f3b3a17e89b93ec4a2d5af3157d7667e0000000000000000000000003e76428ddebe20e10fd433176d4581fc910aca5a0000000000000000000000007e1e1f475e22ec91426cedad737caf62f573a5120000000000000000000000009b966f7d976f1558715eaf71928683f82940286d000000000000000000000000e22aafee476f9be66d338751453f3be737d283ac000000000000000000000000409b128cf9fcfb002b0ae482a6c0ec24f6201a990000000000000000000000003888a95cd31c68125215d3faff41dac6d213f9d3000000000000000000000000d038eb034e6cf0f7fd8510a13fcc353bc418ef820000000000000000000000001f71fc294b06f86f913c704961624b8c347544ef000000000000000000000000c19bd19537ea94539ef220b2a17a6b41693714c60000000000000000000000008b4e4a91c75b9846318a14e423d35e8c234bc75e000000000000000000000000f2d675e49a7b4315a69913d06478bcf761a7aa48000000000000000000000000caf3ecd68a2242b40047e8a0d3df7be9ca344d53000000000000000000000000f99b67aa7677bba49888c5446fcd94cfcc823ef40000000000000000000000001133c4624492cd224f7f4af9036445238e0843d0000000000000000000000000e85c29ed5d8b9f8647927ca51c34f8b065891c810000000000000000000000003e1f8bf228da534e909a2b46e66f1dbba1d9b60f000000000000000000000000239bc5d4865e10b8d05d343f388a54e12f4f68d000000000000000000000000095917a4de1fb21cbfd2921c47c82fc06d201de6d000000000000000000000000dc6af4365e650f3e720cf8e3d0aa581bea4b7d83000000000000000000000000a968ccd62cf33407b94575077dcf36f1d793a796000000000000000000000000b4446b994d1f4a562c1b27ef7034b5e86c033c350000000000000000000000002fa3d709a8448ec6f0a9b1944f680719165215ba00000000000000000000000067ec28f6fc0aeba9617583120d2a11cac796f41c000000000000000000000000f1fd5825d491ac7bfcd63feccb28f135725b517200000000000000000000000039b589aa5eb60d705c34e0e6359b2c183fea0bb50000000000000000000000006a7bb3fa1d337af15d5158c84b9659a3c9f7a82d000000000000000000000000936fb3b9db0fe3fa34041e74ef0d3419e460748e0000000000000000000000001fdfa78f8c1f026b54e469492a316e268d6f688600000000000000000000000028c625cae5ee9d3916b40326b08d0c49412b350700000000000000000000000003472fdad6dc47393c7b158292d89493c06a98a6000000000000000000000000192a703767879fa89e11aafa7d27c17fc77f39400000000000000000000000000d98a0fb24e696e66168b8f37827b00259b81ec3000000000000000000000000639f93aeee58281e3712b091a73c6cb918f936aa0000000000000000000000001ecdd9c3f1e6772112078ae155a3557e72600f3b000000000000000000000000d0dd8f06620455c55ba564d3ace5d3bb63652213000000000000000000000000fb5d50c08ae21b74b2c0f3dad84ec45e50e9648c000000000000000000000000d6074c565917cde8b875da659fe1e929ad35fab40000000000000000000000006cdbcaadd5bb989d3485209d73f700a5d086acab000000000000000000000000894ec6206698cb75e95aac72673afb8eed0995230000000000000000000000004699b376798f374e2828cea6cbb2f370e02843350000000000000000000000008f37571cc06dc3bc0e25973860c610afa91f0363000000000000000000000000acdc147b27dc78b0e593b2d7af93580b887bb9ef00000000000000000000000057e95a64c6bdda46cb55f8fe8fd98b73b7d43a09000000000000000000000000278af311bc3120bceeeca2a0daeee3cc40523bb4000000000000000000000000c73a0d35a995e2d1bd7be9c52d7ebd49b262242f0000000000000000000000001f1b139275abe404508ee78106cb33e96a3bf8d8000000000000000000000000276e7ae0f3d8ddc88dcb8cebb0f16a68ad83ae9b00000000000000000000000064c4e56911edf5b32027f3b56449acd86627793d000000000000000000000000a98a9c75ac298ce3f042c18fab31981e9d84f5f2000000000000000000000000a7ff0998102919e86b94cd47b85249914fe333ff000000000000000000000000a3ca368e98b768cc27c0857e877fdb72ccc393a3000000000000000000000000fd665844f7ded3c64e55a253b5374be5a22bbde9000000000000000000000000f0c9568280d67204b2a79f8dcb573a9ce0b29ab4000000000000000000000000d13367597b3f532bc07806aeafd977330575045500000000000000000000000047f5babdda6f86a995b88fec8fa3286e9559d4540000000000000000000000005b309dc91af7e804792e056b5532f48c1e10118d000000000000000000000000551e4320712b4d19f29dc3270a611cf0a9c7291f0000000000000000000000000ed72bb85904eb20a9e1ba9668c48548c6a100a4000000000000000000000000f2912cdcaa96b870a0df66cc388d402f9070e8050000000000000000000000009f5dafe4b5af4e8c84a99998efbc09290b1caab20000000000000000000000004a5b22c6996dc1d970327854b2b874965aa1fd9f000000000000000000000000cc719b366395f071e1490e0b0117744467d29e9600000000000000000000000033f26e735dcecf22d7a46baf2530f7e1b7683fa60000000000000000000000005d583ae973542fae9186e6dcf9dbae2898f2cb77000000000000000000000000c73a10c47113d93dbf2132bc324235070209ca0900000000000000000000000000a27077d6c802b7391aa97808515ad18947a5b70000000000000000000000007c638e0c5b03c9ad3bfbdb9422bdddb45d28499d000000000000000000000000cb18c58fc473210c2fb50640682a0319699b479c00000000000000000000000059730749c5c1d992a4d941fb04b390ee866ed4a30000000000000000000000004c0ef6d7810742eac1049b3e848c628062451a93000000000000000000000000d2b20d9568171cfda50460017fbf042390bedb08000000000000000000000000108f010e8dc1d972fed62e5afa5e50b725df78ca00000000000000000000000036e9bf13acf3382c85aed8a07cfef07efa1a1f0a0000000000000000000000004e4b996ea61cdec2c0712b520e05eac86e76431300000000000000000000000006f14f84f7e731eff2edc76f0622bbc46a152a8700000000000000000000000092d0234582f07e432c9a3dfae04a714c514d9e3d0000000000000000000000004197b011e02f5fe8caa70f2d38e177a59e1b8bca0000000000000000000000009a15d878b8ccac9f855ab19ea570f718e55643aa000000000000000000000000da1fdcf5e1edb1bffdbf3087fbd7fa2c7237cff100000000000000000000000080c6f263650111b7ca9b0a00b3add283706023a8000000000000000000000000f4edaa8c9ab45d05800754b2e96583754238d61e000000000000000000000000e5e33efa1ae984f77fa357363214e24ed74fb448000000000000000000000000f709614f3192d2fde618b0add41b2b2b70c8973d0000000000000000000000003278b461fa1e5032df92b5c23f416ffb423fbef9000000000000000000000000351aa2392aa68115334a01102d5edabbdcdb39e10000000000000000000000004aa940cccf0db48a05192863f5e8bce5f01208ed00000000000000000000000077b2633b0e1750b823fa28b200affabda8d21fb3000000000000000000000000a197b2aac42157668bf39d59b21d431ac9c0acb9000000000000000000000000f6bc1d338f641e7e5660e494e3712fbde9e63a98000000000000000000000000e58e9caee5697bea34a352cfd3f3ab18bfaa1dfe00000000000000000000000051d09ea8cf972b5462be0a80a4301a6d2cae7a620000000000000000000000005d8866a04a74a00538de835e60609a6704dbb2e4000000000000000000000000bd02f6397412dbb243e56b8bbad6815fa86622e40000000000000000000000003e3215e1419ffa91744ac38eccfac97473d53084000000000000000000000000d75b229acfbaa8bd7ba141605f2362158e4dc31d000000000000000000000000d6cdda0dda685d683c2e01a0935b7b5b5855a5a00000000000000000000000005b4960b648effd91bffb04547f1016f6f68002710000000000000000000000002a1c12818fce701440f03d8ada53d3a6894fefc5000000000000000000000000e736e2064e7af845e75c6370beb95d7f748d8c81000000000000000000000000b4afce86c244f1d7171a91c4098b631e1f0eddc20000000000000000000000002ac2f72a011dbf6d397960367ff9614ba9ec6ffc0000000000000000000000001a152f5df4274259cae7012ce30df8f8fe93dcce00000000000000000000000005a988d36b45f2ea1c9bdc819875f6a7eff51b4c000000000000000000000000fdd537d88b418e0752e0c9e90d152c123eab4b9c000000000000000000000000affdf4c568236b0bc1d90cd6fc2c85abf3843460000000000000000000000000d9bbc74f9524881676abf1a17388e82089ffbd790000000000000000000000003140e885f28bae8b89311222b9fad33fead23b6300000000000000000000000057ff7359790bb571b0f73a25c145889f9d31db950000000000000000000000009f3d36ca325a3d6b526b1043ccbfd339a9a59610000000000000000000000000e77419112cbbcf4f7c5e3f672b3b30b0db3e08e3000000000000000000000000d32280580815c39b5faa261507a13903db2b85d3000000000000000000000000800dc16ff6f7e4a6e8cc92257aabf8cb26668f3d000000000000000000000000449de4656c138ac6004d98b5a9224d9bf276caba0000000000000000000000004ce7b2a5d72abe01403eb867372c2ed5325744240000000000000000000000007fe984bb07ad832b4e7bcae0598c7b41bf49ef630000000000000000000000004ab43c350ba0b0d78c1c2f720cab4295c67734210000000000000000000000008ae2401b9c46361b1366ece93c7aad981064ac67000000000000000000000000237c3f59f4a5b374be36543a5736d26e23097bad0000000000000000000000008e30685c829b25fec194f5ff7102e84bf56a0f01000000000000000000000000ccca65c339c7086fdfd96ab5020e6ad4f20b1a32000000000000000000000000cd16fb18046a52ca0562e0effb5d5ac55721889a000000000000000000000000c7d6683276d5f0c5c5f5f2fe589fe41d950245680000000000000000000000007e52c25c0b56ff5813887e75fd9ed70e08c7ade70000000000000000000000007c5e7e29aa094b8fcbb479c67f3aafb9d189cea7000000000000000000000000a5c97fc59e7deedb8a3b0883243fb9f36f77eccc000000000000000000000000abacfa79ba6c1589cf52032fcf50f23e0081276f00000000000000000000000007a6015558360b0624dc226d62d1a7246ebb0f0d000000000000000000000000fe5879f3f03e9299d51c48bcc79547e3b30873c60000000000000000000000009087b7a79bc92663ab1995ab7308de6142d34869000000000000000000000000af6cb348839bf39844a251e9b3e15139105f57970000000000000000000000005a35409683dc0b918a83df171ce484c28513b05e000000000000000000000000a7a5ad57297c56463bd4aa5686742b705095b371000000000000000000000000bb3e93852fc6cb2feef659c1abfb53bc8d6efbc0000000000000000000000000837f7b255235c6ea6a21fc33a2abd8386e2cdfee00000000000000000000000052f8c17009bcf45f6a7ee8ff39e2cc13b56e79f0000000000000000000000000fdcd2cc0bd61d06b7bc6f84d31deb4c38fa6c39400000000000000000000000082a9c1e930ead3c2478358545b6ab7689ba7281e000000000000000000000000031c884a2dc6f4998454a411df5a53d07e3c58930000000000000000000000008a05b32cf8b915248ebbf4e2ba408657d6d77c3d00000000000000000000000015c46b326c3462472c50a68f3b1507e2a38a4572000000000000000000000000d371937256e77694ea6806f3d244ff752794377b000000000000000000000000d0fac2f887e3627532dd805dd0e2dae0f81927200000000000000000000000001de83f28bd162e5aec9d69c2aead582f149e6cc60000000000000000000000003c076d34b28eee6c89d39f62009e0022b50150dc000000000000000000000000747f28a5bd288141b07faa9172d1d968c9a32f5000000000000000000000000013ea38a5496920ed036996f33740f7e43a7bbeb200000000000000000000000044dc85ef840f98e3bcf50434c8d6262be235cf02000000000000000000000000f54d159207272ab6ae4f2b2ed6ce6468a71771b000000000000000000000000092392c5015bfafddd65d4753acd70fa323e913470000000000000000000000006d3c6bb69b34693f49c81986030c5930f3686b0d0000000000000000000000006cb9dc1320699823669ef2b8e7e9951c4b00bbb0000000000000000000000000c140e66f6a2a7f53ce82cfde5232bf5199d95e490000000000000000000000006abeaab4c9bc8852ef5e0f70e232a58741e6268d000000000000000000000000be40967f2452acef8363a476f0d8052a7d6473270000000000000000000000002f20793e74842639a8fbab25d616aa3f75af5c84000000000000000000000000685145c6183129d80121538f7441884ab99767f6000000000000000000000000107cb2c96d83041a39404dbf9ec8685ae2bacc370000000000000000000000006f679336a67fd72010c4e81740b971640601876e0000000000000000000000008eb3f9610c7f541dfe6a8557f9a81379ddb5929a0000000000000000000000000905dbcff9dfd41082d7bdd0b3611a631113bd49000000000000000000000000c07e2759e2608f192e8b919a76b4e15fc92028ef0000000000000000000000008d50bc574a96fb069cfee631ccc4d07b5a0fcfa3000000000000000000000000304b52d2facda5804cb12a6820100317dd017b8e000000000000000000000000ae141ab0d202eb61909c2f43bd6010811e69c1130000000000000000000000005423ec681b056fe0e1ff5c72f9ba521e1897172a000000000000000000000000b88d8a2434d0e3d87bc3b91dfac53a59c77cc55d000000000000000000000000e8ec378fe48334cbdcf22baf0df953304eb2bb360000000000000000000000000d82e284a0c036b1387697f98dcc6062b9e6a31a00000000000000000000000072fc6ae09bd0c96388439319e2cdb4261f8a43700000000000000000000000008419ff234dabbbcb9fb47784dcd2dc6878e110080000000000000000000000008e11f5b5fab364021de86dea4b7afbc25863022c0000000000000000000000008f5388f839df209fcb289006d8c26abaa6ca421800000000000000000000000006d4a62a3c7bf292b82fdc752040e85d7bb1a569000000000000000000000000447045aab2fc3b414d347f4e666489ba3514a6f50000000000000000000000003c212c34807a76a5ee35aa4ccefa5126598d43ae00000000000000000000000038606edacdf4c8f56f22ece78162ff43704b188400000000000000000000000096e3753b3f0b579cd2744e950bd1cd3fef0e6c46000000000000000000000000a93f1733cb708a4baa12ee2a09100c72ef2898dd0000000000000000000000006522d42f4711d02a74c397aa4979905094bf91da00000000000000000000000038234eed6740f72dd67bc0e81334dcaf1958c0b7000000000000000000000000fbfc4efaf93f054be862411315166ff86f0cb1a80000000000000000000000003a9cc278d8a8a4bb4d295d1b6522a9336f8a7237000000000000000000000000c8d97bc998edcac7bf76a9f88e73bafe2d31db18000000000000000000000000d693e4b9ada6280c8b41fdb0baa45ca47f848c11000000000000000000000000e6ee3ffc2cc300aa2e2a84a48e11723baf7037b2000000000000000000000000af28b95dbe51906d50d9f00d574e7a6efae534a1000000000000000000000000c6aa4157e7fb9ecb21b6d2888e3aaeaf9eb47a4b000000000000000000000000b58c4dd71427b4bcb9b1fe8acecac1e4377665cd000000000000000000000000c92c2657f4dcd820680964fc7b1aa13f016a0a23000000000000000000000000b99bce2c400aeab07af4c9de7a8959604529d7be000000000000000000000000d40a584367ac6dd4d8c3d797b79fe34167e7effe00000000000000000000000068a7a65f4b292cbdd6666aa25611d040b6001bac000000000000000000000000370f7f10468ee28b0ba4512c3eb116f3ea868ac900000000000000000000000091a3f0b8b6e4c95f6047f3c50dba7aaec88f31a2000000000000000000000000eb0ab24087e9ccffc74557a7d5ab33f3cc44704e00000000000000000000000073a4afbca98adfff7fc7e79d422d533779fc2ddd0000000000000000000000004d3986034776c908082da806d49298a6f01f88c9000000000000000000000000303f9594675ffdc8474dc62b547a5204c85a4e2600000000000000000000000068e29ce7683278351ac9d1f50bd253d5909b3e38000000000000000000000000649d8b194b269ab718adb8e6330eda98f0907a3f00000000000000000000000010bd2bd93937aa64b3cb64bbf34fb0fa62eb50c7000000000000000000000000aa3fcd1d097bd55ac57e5e10f3d401c26bbd00720000000000000000000000005d7f491d760e1292aadc255059fab35ef50bb6ec000000000000000000000000247a8f43523b39bf9aad5c821746e3e9e16f2616000000000000000000000000021fe8a6399aee00df54a383c5e6e2b9f19bcfd10000000000000000000000008f0ae118f954d4d9a88cad5979752215020f30b900000000000000000000000046a16c61dddaa01c3fb799969955802c4c6944fd000000000000000000000000a7cc30cfda27b25d5b685e2aa06268845a078d85000000000000000000000000c916f45170d2b6c076f456099ad36d89cfc6fb2f000000000000000000000000837ac71f97ccd548f2eb38f1a030d2346a87dce0000000000000000000000000ca45cc24492d510e1c323b0192107ecd1682271e0000000000000000000000009c8f66ac53a8d3452a9313d57b81d7e923456f690000000000000000000000004b4f1917f478926cea77a05c800965e5c36508fc0000000000000000000000009a02da20ed0551feecf30d1a3390c615a5a68dc800000000000000000000000021ed44481a6373073db9cb4fad9c960765745a60000000000000000000000000943f5b8b949644c9968aeb9c57798ee99dc5226b000000000000000000000000d2974b2e0cc036105c178a0e12c2d9ff841773860000000000000000000000002c953e6db75f79b079603c60139b6819c4f509bd000000000000000000000000c226e2722c6c0019e97854096e7a3e07d0cd9302000000000000000000000000fba1f9ace05ac5bdd63e38acf4a2e911e68584240000000000000000000000006ba9f39829c1e271dd995d92dd2a54069af218530000000000000000000000000469af473dbc4ae271e2cca99b26ef2cc0106f3a000000000000000000000000606c800ec0d7400f2b2a7c6c5f2bc9ff2c9a7618000000000000000000000000b00c3f23312812bf65a5e8804618dc594db526e50000000000000000000000006d1c1b78b1c6a008bea3e01526545809dc939f00000000000000000000000000e096ac68b7d3a29e11fd154ea140e83df01209f4000000000000000000000000425936e508a8605e8fd95afd9aad4bd793af4e3a0000000000000000000000006ecfacdf5c9a0cdab526a993f878bca09f5e43d50000000000000000000000006e0a3c3d1576670c3175c59813034ced443eccca0000000000000000000000006aa9ec87f908cfa6b830b59b9b58f6d49a231b1a0000000000000000000000001ee3f8f52ef5823ef5791f9b70e0889c998af57900000000000000000000000011f1092af934f0e8c4288cbd4c6d12fb8266df2400000000000000000000000074c59dfcc8d58b5669b8392bc166cea749000b9f0000000000000000000000003cad6a5fe1f9410fa1dc0e20924c58197b0629b30000000000000000000000007086f96b100bc3927bfa207ddd0004e549a70280000000000000000000000000fcc81ba5e5394c0d43bbaabe604caaed39f7a4f000000000000000000000000017dd865b8e0cc059ed4babf5e9abb3d0ac8bbe3e00000000000000000000000021f96a3251413b3d8cc0e4542e3efd615e43febb00000000000000000000000063ad3062f336a916187ea006aed6954c28c5c4270000000000000000000000005e3b099401bd97c645e68b4ba5dcc39bca980ad0000000000000000000000000cb47e767411d920330797e757a9fb66ff593d84c000000000000000000000000f027e66ef90bed40560220456d582231f208a7990000000000000000000000007f438187b5344871e754ae6342f743e751bfc81c000000000000000000000000ebae6e8aec5fa95d83a7d34a7de3e20b596e9eef00000000000000000000000058848828bfc630c081300f068d6e60f9e393420d000000000000000000000000f29c852fffc67f42d5530ce8255b4afd0c67849d000000000000000000000000d18c52913dc5fa64e9c8721d6943c45578fd61120000000000000000000000000128a2c2086ef24433fed2c795662728deeda62900000000000000000000000005f3277f48769528ad71a0f4e3cbf5429416e12a0000000000000000000000003450f202c8a29b03fda7e5cba06108acbe9aad870000000000000000000000006e6de56c42dd07ae4a9aa425768cbbd92fce109e000000000000000000000000450a9432e8d730fa1a8b62027ee75dcd7a9305f6000000000000000000000000cdc669f0a4189294b64b211ac90087044f91d69c0000000000000000000000006d3ebe370352b911a65cd6be92d80c53eced982c0000000000000000000000005d69586ec03ce9942d2253668a9634dd5217f3140000000000000000000000005def6675edf7fc8b8903455ddf64896a2e876506000000000000000000000000d532afd3976265c8c7c0a9b663446f5d9b245b400000000000000000000000009f02cb23e58f436977bc7c3509879807fd6071f4000000000000000000000000a659dd3906768261065714656e8ac1ea923f76eb0000000000000000000000002eddb2e71d7820268d73b065e94fa191c0cca78d0000000000000000000000002ea5e9e452f85f55be47504153f25740a5f3d78a000000000000000000000000ea511117b49d95b1b9c9892e770bf3ed2cf03c93000000000000000000000000379e2c29dc7fc25b34dcc7dc0657d9f3665afed1000000000000000000000000db3d25a24127d91b17d14726b75c0d142178b6ab0000000000000000000000006389533fdff6ccce60ae1e77fb366cf3cdd20a89000000000000000000000000161cee67ec61e1219a8c0760524097afa007dab300000000000000000000000066b9bfdc00945e1fe93d3b8f83399750b169868d0000000000000000000000008650cbfcb841fbf79a9926534a143dbb6252f74e000000000000000000000000d3677039a3a89b16b7b2da90795f682709493cc00000000000000000000000006fd5a1895e36769a05316bb6ce8b8242e449c27b000000000000000000000000cbcdb85db1763383d0ae582bedb567093441b7be00000000000000000000000047a7cc9de37b41ab3f835f0897cf9e5ac51cad4300000000000000000000000013d88b85b7bccd9eee0e9e9120ec1d2e7720ab7a0000000000000000000000005c89dd9bb0bd272b3c28c010c81e0fac3d65f0f4000000000000000000000000944f8e2a1a1c7299d131b7eea55b9e7afa72e0f8000000000000000000000000a6b862e71c9b4d18afbb751c922b6f6e630f71500000000000000000000000007f94ac164a8636ac184672c5bca8c638ba5592f1000000000000000000000000e766c7be84af2d9ad85a5fc992c877417e5cc2a800000000000000000000000052dbf0255a8a9fa50263e7139047931338934d830000000000000000000000003dd4e7b763f87b3ace140773ff7878cf5b2931de000000000000000000000000fa46e42d4032b7c36d769feb7da5202fc06918dc0000000000000000000000005cf46bf0bd15d954e81ec2ad26b6409cc21fb61e00000000000000000000000074e9fe218a9d04f31982aadfec6a4bc5ecace968000000000000000000000000fc5b944cd1eff2c809e3603fe50afb7d1a99016f000000000000000000000000c271e50ed3c20b4bd200018df76e636143d902290000000000000000000000008f7de6ca736d2250566a63fed37f6aec1d1b447d000000000000000000000000821950f14a6d2fbdfc233597ce88ea1b70a165bc0000000000000000000000005ff817a31c03828c9f8995fc8b70b2eab5e59acc000000000000000000000000d77f6e0ec09858164db67c7534effe36ff5a6ac30000000000000000000000007c658743db6d76bdc2c7eb676be6d15e97b72c420000000000000000000000009ee41f3dd87d4e1985ffae114fb7b27915507655000000000000000000000000cef279266456cae25c6459988b513e6e708586e5000000000000000000000000beda4b1fd55324481e4a693ee5568de30fb78f8c000000000000000000000000299eb854b3e7775a53ac608c5fd6ad68bd28c6430000000000000000000000004acae96b47b936d7a74b89aa9ea2b0f29c2f9951000000000000000000000000b540ce81fdaa249a24ed22debc13f4ec93e3d69d000000000000000000000000f1dc72faa8caa14e8b6d08d565ceb02c8c9db3350000000000000000000000004dbec081794cecf357c61ecbaa100d6a09fd4e260000000000000000000000008ac1feebf3418225060208dfe6bf6cb0930668f800000000000000000000000016c95e1ed18ca69e32e12a19606272f6e0558716000000000000000000000000b67f710fe18a14e1b49649c3c83353902d6ab002000000000000000000000000aa0718e67302146e0b1e7843ee3a5d5416008d82000000000000000000000000c9da6d373a54dd29f410da6b5ee4b915c959db6c0000000000000000000000008c7070f00c9a7f00bdd23e604fd7b605ecaf996b000000000000000000000000d404a8e650c4f012cca3fe7b4d3a776a91a15347000000000000000000000000c1fb67d4b393c99d1a39486401640f5c118e9983000000000000000000000000278567d05851066b68401ec8bd6cf29b7196652d0000000000000000000000009060574a40b2773c5bbfecfd960d70c1ec4dd527000000000000000000000000889a9a6e7a9806754c5da0f06acae71b4005c4f7000000000000000000000000d3042ec823dfd196d82d4f2d594a3ff51a487c33000000000000000000000000791a15443b297cb81ed51fb5f7c14e87f047ef460000000000000000000000008362134fd49e6240c6ddcaa1b42fd725b370e0f100000000000000000000000089d7a1f13ba970a1e49f16e1891b2972c025383a0000000000000000000000002f4093dc00ff721eeae3216024137024efd872d1000000000000000000000000fd1733a16daea6ac2191cb87763181e28d97830c000000000000000000000000ab4eec02b6bdb5b17be2c5baf5e8dcd1fc6427460000000000000000000000002e29d333b447558b1fff81515ceeecac18cca00d00000000000000000000000040db058d46836ba9c5b98a089f123108a9ecc09a00000000000000000000000051a1e4ba3cf12ddee273d95fa8c854f3e44e7544000000000000000000000000b4a863085059d7f4a89f78a3559f2b6feb42fbaf000000000000000000000000368328a6e8cd4c0aec4e6681e8adfdfccd553f0a000000000000000000000000ee65194cb39a79f1f15b99a1aae34cbf4c22c0990000000000000000000000008767145190bc210754bbc0ba21b88a1ad9f1fecd000000000000000000000000686b5e6fa20580936090a8f29fa0d0cca507bb160000000000000000000000008ab1aed05faf8119417cf91d49c7b365fcadbd060000000000000000000000003e856744d772737ea1882de6813d10d4df8e6f7e000000000000000000000000b5c5a8327a1ca7c408f739000f1c4d17928d80550000000000000000000000008fcd248737189ce2a3549655485f5e5dad692d130000000000000000000000007e0d8fa6ab6f4236fa7aed650cc512e5bf4a903e0000000000000000000000004846be46650525963260d96e3049bb373e9e8ca9000000000000000000000000eac715b8c7063b1d3662227b46cef5b14022840500000000000000000000000011153b62cac9a11f1d5cf6548db69827139d25f9000000000000000000000000713810a48f017292b7f501b44ffc29a03cbcde110000000000000000000000001f4301b67a9865573c925ab4b647da7b5d272cf300000000000000000000000059fa42fdaf40afd452670d25377e14e58f07b75a00000000000000000000000014374dc0197df42209b94902439048568e073f4c0000000000000000000000003aedf29839be1417003fe5f1d2e864a0e5af78de000000000000000000000000cb67f02045d0abf402e0e99327d83b90e53732be0000000000000000000000001741a78e9cd2310843a4010cdcbc83bfe38447310000000000000000000000002db3119cefb2ad0364736624bf8ca372fc5b83d50000000000000000000000001d64d7ac107c27e10b1dbfcce2a82d1f2ea2a7ab000000000000000000000000e0eca81a5cd2ad1d09780d65e9caeaad80eadfbb000000000000000000000000445fe772fb15e70f7a400f32b6f5cc2e4bd30b84000000000000000000000000a67740d77e9fc8a87918bb1fd5b32c2eb49403cb000000000000000000000000a53bb00bd56355fd10edcfe58c84786a561d3210000000000000000000000000d47e1133b102698fb40102155e745a040981f8ab000000000000000000000000c70956f57e020579bde878c6f04c6399ce36c9ea000000000000000000000000448237d7e6515f9ce29586a60d8630059473579800000000000000000000000055db424ad23cae8c18d5db8172fc0b83ecf3332200000000000000000000000060b4884babacfa6f0e44b6408535ebaf4a6dd343000000000000000000000000dd6867732b29a8ee6c35f75ca0177b1fb65b7764000000000000000000000000b77ef2f303081005c42d6b2f31114e960ee844970000000000000000000000004f63480c6858d2f3d3793451dc51e8e861826839000000000000000000000000ef38aa663d11b1df138f36531314ce860900f8e7000000000000000000000000fd14ae3864409b05639b6defe3b2efafee99944f000000000000000000000000d8ec6f7cdf23772491b7874335397e1defe56017000000000000000000000000f20f87f8ee80ebc525784b4cba78c90d5527b4d2000000000000000000000000dd64399d5fbdee78f95a7a3e755e3492838e542000000000000000000000000090c53780a56b7d9123fa3d9ce316dfdddad43e540000000000000000000000005143817124f4fcc41fa98eade56ddf5fbe91f537000000000000000000000000956d030d0241465c37fdb4264814665b482165670000000000000000000000006db13bc8487671b06bf73793851279f66b0f65af0000000000000000000000004558e23deb860c697be7a1107a645449bd7030b000000000000000000000000096f70eafc79b0a3b0d339db1d071756488788def00000000000000000000000078db022486a5761da515a4bac9fcad0707582c80000000000000000000000000eb1829d551ddfcadf8800d78793881a8e8f9dcbb000000000000000000000000b379cee9713fbaaf560c4b71625d2c707d1be84700000000000000000000000054e11c4905ae4c82c391bcfd1ae788844baf78be000000000000000000000000c4b48d129b701014fd2af893d68534be874440e8000000000000000000000000dd47a742b89db1cb707719ddb576fe3690f1606300000000000000000000000064f51da2bb2814d2f00632379232b01a138ab3aa000000000000000000000000453f42ed36632770c513d69d6d87628e56d475c5000000000000000000000000fc10969a536392d014be3c236c12ccc81326842000000000000000000000000008a992b12ebfec26068801f4a9ab019b731cd26500000000000000000000000038b99859c72b026cc17f6c34edc82186729749af0000000000000000000000003654b318f14eb2740baac4dffe41915e37ee38300000000000000000000000003100a42324c4bd3a6985b04d00af05d95a1e85ed00000000000000000000000019a72e69da7b8813c07524a71c3da752cf88794f000000000000000000000000db0a167d903374bb465a46e02ca2b794557160fa000000000000000000000000e6e0675b450f49dda200153cdb478f4fe06b50e50000000000000000000000007fe11904451d2667a36306c9ee9d7a0e03dd3625000000000000000000000000115d7262cc8800c2c2d611ce5713d8962cd5fc6a0000000000000000000000004608643bce0d1f22cab626e6e57fcc075295fb2400000000000000000000000091d28f9c4d5292f0de05b5ac38d0f4241350cfb0000000000000000000000000f5b71764df2686c7224ce41081f13bcadbb4b06d000000000000000000000000864f334cd3e1820123eb400fdaa298be525a561d000000000000000000000000830e57439f13db90b223c5912fec557088815cdd00000000000000000000000007c939eaf41e6032ed0465e9b6560c2a093fbe61000000000000000000000000d577832487d73b2ce5a2c50b0c283439d2b405e500000000000000000000000075fd62130179f9d0c1543298e32665aeb300189a000000000000000000000000028fbe988102e5dc171fa70c6d6731494d10020a000000000000000000000000443819beb03096bc0c427b6b21a86244c15f8026000000000000000000000000861611e744929bee7418877ea05a384cc9a138480000000000000000000000007f2b800f30ae85fdda23b9f1a02b7eb8f27f0350000000000000000000000000932ec1dbb0c71f0a0f462bfc729ad884fcc0529d000000000000000000000000e78826a3ed7c75023ea50ff54d314d38472402ae00000000000000000000000092590dfc076e46d1c9ae32c1f391e86397fe1fa0000000000000000000000000b07743ed3c84746f3d74b11566a7404115e5d57d0000000000000000000000002709e6b3bc77c275e244a524c29f98596abcadbb000000000000000000000000b3d95dce32ed0a06cd5f8990b652cfa1e97087f1000000000000000000000000dd4e9799084e3390d7febb6cde08e2aced91234400000000000000000000000092cdf2fe974caa2710df8dee6f2c0ad8fc0bdbc90000000000000000000000000c373d3ead6ae1794a2fa52eb9db93ce8d7d28b1000000000000000000000000c10dde849ad5a5d735ceaa366332735c4615347500000000000000000000000070d74be034a33f93dc8cd9ef87e3d0358e11c367000000000000000000000000fe75888602ad6f92ddfbd229b10db3fc22a963ff000000000000000000000000d4beddf36a6ce4814b42548c4449655e10d0f22c0000000000000000000000007f0fe1bb513197696969bf474b7a6d30957eac4400000000000000000000000039f970e1449caec2bd756ea7160fb956a5213b4200000000000000000000000016521be9db1b5145fc31de9504693ffc30b6a72e0000000000000000000000007916f6a124bf8900bfacb5138f782c5f67f099cc000000000000000000000000428644e9aa849b190a766f88f9e36a0f705aad830000000000000000000000005c58d770a55acf528d0c5adec445c5d6c15eb43600000000000000000000000099ff7d15f6b911e3cff42053558d6ca074ea1e8c0000000000000000000000007c3c943ee9deef18f9cbda66d6acbf17a16b7901000000000000000000000000499036aba560855b0f2ea3de63c7ec66ae5da058000000000000000000000000e9e34a0a89589e2043eca1b9a402c9d6d8227f280000000000000000000000000fcbc3950c2180ab12e910e540d967c3db18519f000000000000000000000000f84dd005d7ade43ab78e2a914963e19b83e2d8f000000000000000000000000025c9f92753d8f3160dce0d66021e1900ab8e9b3a00000000000000000000000029c110aeefd970277ab866190a7d2b78426c4140000000000000000000000000b107d8f34da86a45be9d447ec6dbdf8df228884c000000000000000000000000d0847ca656192c8c635558afb74e3eb15be93ead00000000000000000000000077711e9c5693b8277897b4909499c68f7b5843da00000000000000000000000007f934be6a21a9cc0f1d2e96e9e387b19fe75b26000000000000000000000000ca41bcc8db61a1badeef3effe3f1aaa6213600870000000000000000000000005615c9a3426c3dd8b0ba12de52b3c95e2a8b37a30000000000000000000000006f36ea61f9bab6b1f69a29d28cc81f789e0e5661000000000000000000000000c75091aca93fed4fe57f83d6041267e8bf9a652d000000000000000000000000a7167c4587c2cc2daf1e5cf1cb3e141333a60cf80000000000000000000000006f8b5f1f9b9f8cd155142ed910d480146227382e0000000000000000000000004285e6fec2ca6f41c11c46955145d04b242b3505000000000000000000000000c7cf13db25c9d4fcd1963f18e1fd1a26840622aa00000000000000000000000076ede878a30e01de644bdd8c0127e4d3403aa4ec000000000000000000000000ca1c17078a93b98f7d6b2ebf371a49af7fa52abd000000000000000000000000ad65c0b6f85dd21dfa0630afd6edc6649111484c00000000000000000000000067616558c2cca22a8278ea7df8096159deea84c90000000000000000000000006f1271069ec8af5c209ecb0e0420d8424b3d066a000000000000000000000000b0f15e8856096195735502b51fe8e41b15bf5bc700000000000000000000000068ad640efac9ed29f7380357a51938701f991901000000000000000000000000beb1829f1a07fcb01fffe9a6b8551b70ed759a12000000000000000000000000065fad24ba2e0a72ab82fc5a4319efd7c2c437740000000000000000000000002d1d0ee7d2f28d260240c16be3c433bf50a9c4fa00000000000000000000000068c1be62db5c5f5d44facf8664546c9c552b19bc0000000000000000000000000455c1a23ba0c8f9872467f70d48e941f32b257f000000000000000000000000a654b4c04ee64a80f088bd77b7f772bf5483f5d7000000000000000000000000de3e8a4608866156da24c9a84dec7261993e1ef2000000000000000000000000d0c5352505701adac52199602d9e57e06bcae9c4000000000000000000000000269c68ae2a5a63a43b736f16b5d3e74cafc56bf400000000000000000000000079c64b43930149e3ea5ba205a3bf91146fb5af1b000000000000000000000000e4111aabde27724c6b7e99e4fb6fb4de61fcbd03000000000000000000000000be8aa188f10e5f25f182fd847859b1a5d6335c1800000000000000000000000024db3ef5197efae00a70e9c594cd459c0b88494d000000000000000000000000af71f929d12f2dbc041bb29caf8e0b676dcc517f0000000000000000000000007635bfc2ee91419d8a21d2f9b79c5f060c75599f0000000000000000000000001788f727d1241b301d622ef21ff0c2867774983f0000000000000000000000009129afaabff7b47d69bd33524eb329e4bb85f3b600000000000000000000000011d06bfa3b1b0427d53f89467ea4e894a6cc4913000000000000000000000000f7e7c4c26ee500d74a1a82fa77a5de2845bbdbc5000000000000000000000000c1d509036d1dd3392037b0374745b88bf7479c410000000000000000000000005d4e89b85b19c9b51414eed14e685b3ccbf48874000000000000000000000000630c197311856283e96ea5f555970c7a619ea2430000000000000000000000007dd62b530a29ddde9026894593ac0ebff373d82d000000000000000000000000a529260af11f48d3325d81a725f98c14e464decf0000000000000000000000009998253b290c48a9224d46fb78580223b5f011a0000000000000000000000000ea663fdb82425a411b6c0c5b0b711adf8c9c0cd8000000000000000000000000fa79040b67c27e0e51c45ae4353471945e1a2d9a0000000000000000000000004f2006cb78691fade8a50c760b1112fe2fbfc7f5000000000000000000000000b08d123fe69701a7d40f036cd52bcbe25e70819900000000000000000000000026c30b8f10690ebbef939ad67cbdb1f9bf6f8e11000000000000000000000000e0c421a79378d0d68ea8a4cfba2a1585cfdd52330000000000000000000000007de0a60072cb432bc72e4ade64268e472072729c000000000000000000000000a4b0bd08686b2c77a005c196c070c6c0b80bd27a00000000000000000000000004145a309ad1aac388359e71aebecd35617bf89a000000000000000000000000850bbdb8c207d00b9f902ea70d5d5816e0ceac2c0000000000000000000000001107dcbdf9964165e295a12e907388a5e664c79d00000000000000000000000014969f68c5e5eb0eff55056905d691e33a9f21ce000000000000000000000000c2c35b5bff45e2e70c6b0ad38cc280b8b1d395ef0000000000000000000000003c2e11c71dbd6b08a95f8dcd3a0cef86aefd858b0000000000000000000000003e8c5ea1bb27cd9b6ba548d3ad2938f9ee6f78e1000000000000000000000000290ed5975719db80d07307b00c360db83ff611b4000000000000000000000000ead3ecf98b84eef262ec7342e85485a657e6eec20000000000000000000000002456d414c9d8681212d2154676ca4fbe1ef9a863000000000000000000000000e8f8fe8d128233c97cc5e7170f776a5359489bf200000000000000000000000028ee28f3e574b24756e603af47e7351755a44f05000000000000000000000000637546c92eaa5c9d430c7081ebb101b4d2fd900f000000000000000000000000fcc2e9fcfa41cd835a37be626eab5c947886486b000000000000000000000000568bae49393996d939b3d7830115994a56c50045000000000000000000000000c3e2777a2a8bf4e9f6911a3905cc12d0b8115f9d000000000000000000000000b923bf496e45159de021ea80630df1d38a8cd485000000000000000000000000cc50d7f7fab6d492a4f24302f38b023899a77b0700000000000000000000000035e0e818799759e0d079af0d74d8714d5795e72a000000000000000000000000259b6e18566cd1f4d71f5c1e784b83c72462915d000000000000000000000000126ca2db07177b1663c2360f63b9d1aaeb449e510000000000000000000000008d46d872841c754b510209dc4e04449d32f498b1000000000000000000000000ebdbde44df8f8b6cd05d04009ccaa6435a56e14e000000000000000000000000756fa675406d9308d886cccb24f1b2f49d94b676000000000000000000000000b24a35e5100f1567c9af1d2a03f2af5781105bcd000000000000000000000000715f3a372449920a46406730b157817f9a3f3b2f000000000000000000000000ee3edd99868583fee57a1ffe6627920aa7171b76000000000000000000000000f50cab4f2c908b8bb5a36eb4dfcc5ba77cef15ce000000000000000000000000a159147bff3f4f1fa19a66c3b77c504153cc09ad00000000000000000000000029b437b33f63ab451e2408d447545973bf70b818000000000000000000000000819a4fe70d3f4d12ca3635d40deb0aea212d0acf0000000000000000000000000e748164eaf62c1129ad44c8b7221da940fde7c50000000000000000000000001a34494337aec03f02537dd13d25b9b4e4169940000000000000000000000000e383e968a53882bfedc548f62f7ad96d98d16ccf0000000000000000000000002589d0fd1052127f55074303447ef519155c54e2000000000000000000000000c722d82749e03a2373da5d5aa59dd6f9ce2416c9000000000000000000000000699f76f3d6b3e386f0c711a3e25b7f4238eb0355000000000000000000000000c2e1ce6ed0c364c4893addb702812861f8c5ca7400000000000000000000000060b7d7e9512453cc6b4b6948514eeef988eeeab600000000000000000000000017074710ae18fb619dc93172602d526b23f48ad50000000000000000000000004d5321911d6b513642e0fdc991d7a5ea1278f5dd0000000000000000000000007d6b9152cd7eb99cfa7e278d09e5a649ac7633860000000000000000000000006f61ebdd49f71056c99193de9efae686325c478d00000000000000000000000013f8d08bf6c2b8251543b2f60e53ea493b6e8b8c00000000000000000000000002ddbe94093449c60995c414d1eeb02f6905d3e1000000000000000000000000f007d624233ec61567d35dd10f1a1a7347b2e2f00000000000000000000000002b184f9c6325b80e16625194558d0609031b70b40000000000000000000000007782e004e9f62ee55dbd9d826bdeac1471f4d89d0000000000000000000000003449884016a468ecf0e6efe6c1a7aeec25e6cbb200000000000000000000000093720e07dbd77bae69fbaf91dcdc73de86003e2300000000000000000000000023837df2c09d19d2865ee3e0de3458b8649064e800000000000000000000000001705e8d60b4d31205817cce30106caa68a5e6d0000000000000000000000000fe1460518b62e144038b160d19bfb3425a75bba4000000000000000000000000c002ca51f0a5ee37459e895d494b782f795ae7f30000000000000000000000003dfe7d3e46ebfed5fe86aef3768660a3dd39b53d000000000000000000000000ad312e84f8b5daf5c0b823ff98e44db606908214000000000000000000000000b4b79a3be9c93808c34cb67a7f8a6dd20f30b13a000000000000000000000000a6e2570194defb6647ccac14a4b5227008e40577000000000000000000000000805de93fef98aa0ca751a4fb50d2ec42e101e560000000000000000000000000152462591b6c19c6cb159a61848d30b295ab1ea2000000000000000000000000e9ebadb9489c0ba8c803f02ecf1ff096f8d538690000000000000000000000006229cf9e2a5b9977ae00dff189cb2f9f38387e9f00000000000000000000000030b07e9438f8991e3673a514413588544a45e00b000000000000000000000000b78602b861246f22d69519c029bd6ddf7e0272120000000000000000000000005eade75d84a1d907558f36f24dd82cca249e337b000000000000000000000000baa694c2bebab765922293d687822d84f948f00b0000000000000000000000006fac88e157807e01f92b93e2be4cd49f822db032000000000000000000000000d12c4dd749a463554aeab05c355f27359bbdfa8c000000000000000000000000485e8ceab371f82dddf1b885190fddddd8dea69900000000000000000000000076d986e8dfca2ef316f1fe183b4dc8f39e9d8cc000000000000000000000000049bdcc754988df095b961a69b6d2a8850a4847400000000000000000000000004660935a92df91094e8bd7e13be2e468dff6933d000000000000000000000000b124527a09b99a8dae5d15daf29682829b5fcf5b0000000000000000000000000458fff23434ea4fac760e2a5cab3a2845fdce7b000000000000000000000000f661ee1a3dc61ff13ad52583833ea0d95fa00f96000000000000000000000000d15e8b091e1e1cb80004b90ceb9f2c46766f73ad000000000000000000000000b3a02161bd6159aeb0be46d48c64673b4fc2fc150000000000000000000000001d84be9cca2354faaaa66901b318426df81b552a000000000000000000000000f0e623b7454d9869111fb66cb98625d670ee94240000000000000000000000000d40e1b1c3d7431cdce913d28cd0e06c6f9f52ea00000000000000000000000096068141823a3db6379ea4d2e860db85d3dccf01000000000000000000000000342b773d680eaf457e7f3700983cf6b4dc1a05cb000000000000000000000000f7da8b5f99f5e00e26ad6fa31c6a726bb02ebefa000000000000000000000000a705f9b4b1e7c7f77fa9881e6e96d283eec1b1e90000000000000000000000004026b69fa2c6f84d7a3b6e348e423a62f3ac3c590000000000000000000000005cb5b4b8d400b726abc7e6c918a4e575de8587610000000000000000000000003bdadee21c5f5dffcb631f359c8b1c5a5a14fe0e00000000000000000000000095fc706cfde8d78f101c9ef07724f4d03bed7688000000000000000000000000938bb81deea00fa9d43650b84b55e27a12e21e79000000000000000000000000a5b338daed6e7db88fa775aba2c7ce8cce0b34ff000000000000000000000000b2e601b03b1bdaadd33acb3346e410be6f3a7a78000000000000000000000000fa9f131a6fe22784ed20dc2f19c59a0926256fb4000000000000000000000000c12f147fe07813b710fcc9ad4be81eaf7f4fe5dc0000000000000000000000003cf5fee85957d5cac2e948b2eda2d28816fea64b0000000000000000000000001f351339910a682c51a01cd96ce0bb02e96d8fd1000000000000000000000000ef141b15ad08868e323657a5cfcac325291755ca000000000000000000000000b1cf262e516cd8c9ed066a22ac030ee6422c456c0000000000000000000000003b08758a604706e6c157234045eb53fd8a44ddb3000000000000000000000000aadc67651aac4d6f3cf58874818f31ae87ec2e5400000000000000000000000090f59ed9a03bda47a7c89f5308fb93aab88662da0000000000000000000000004548bad8deb17a593b4cf1b7cb4663682871a2440000000000000000000000005d4d0fe479e34abd0090509300868a984c4160df000000000000000000000000786bfbd6d732a9dea0504c7e73beb8757c2468e00000000000000000000000003da484778533eef8c4e2338f228dc37c686c21660000000000000000000000008d700c37547cbc8cd9d3c428686a343ed624d0d9000000000000000000000000140b3d5e14ecaebecb026adc8e61f057b95a08c500000000000000000000000023ae80a0e7c08fb2bba81cb1788235645135e2dc00000000000000000000000011530d2aee2f19c005667f49f122f46e9762b290000000000000000000000000019c5e31ad556abf89b5a8d09fae7ae7e76e3b1e000000000000000000000000da113387bd30073a672912595fdf7815bd43b928000000000000000000000000f632d7d6a11b352b16cbecc4ef5e2988aee9d07f0000000000000000000000002cdf6e20c975401df0b1c24bcf9a9a706cf2ee38000000000000000000000000196a5203b0066c92b8fbef3132f2b5bdf6cc1b2900000000000000000000000004f882c3f7ef57419b7cc7c6014f0e3ad133bb6e0000000000000000000000001238b85b5abbc875ebb51767019a46554885dc7200000000000000000000000017c1153d19f03bfd8efc0044bcc55fca53f44a2c000000000000000000000000d7534b6e2b008d93422eccb08e786853a53feb0d00000000000000000000000006853c62aff72d565f4bd8b134ed974264770823000000000000000000000000a91e7ac7b0d8cd850948196b0881e087807cff9a000000000000000000000000229b830ca96b6ce2776326cd42c53fbc267b70260000000000000000000000008897a5b4dad645ec2505fe160b2d67bd856ec6f80000000000000000000000006544a4927899e6bc326f2c00c43398096d5b56de0000000000000000000000006deb2e2066ae65a6cfff35eaaaee11fa897f866700000000000000000000000081e493b74340a9788ef5bb20421625614363de68000000000000000000000000fcf672449079b5baca8307f63a32b27d4d64391d000000000000000000000000def2cdb31ae84bee429412c66cc1df895d85f5de000000000000000000000000df0b79c9b6de7ac4878647c5478a221f13b04d0f000000000000000000000000961ebecc610f5bd0eabd3cc28bb462383d74ca62000000000000000000000000ee9955e05ca29356090561398de6b188e9a1bc06000000000000000000000000066be705a76f820d70359edbd55938cd22ef6c330000000000000000000000003638935534f07f0f690bcaf76342cba377d5257e00000000000000000000000021a616d3edb0c94aba87bf01543b100c1081d41c00000000000000000000000049c4a878adf77ec92a3a553d9afb2e196b855feb000000000000000000000000fec81c5d91da96b495e9ee8759fa8e68f95abdbf000000000000000000000000a76a3691e7515bd3f4ed7aca3aa9efec66f4dba4000000000000000000000000732397ab5e807bf566c9e8d7a8b86f96e1e3d11900000000000000000000000031a01907620b83d6d7817b525c331797a20cddc00000000000000000000000004212aa0379d82a4b98abe98baa9ee0ee703e2acb0000000000000000000000000cb11cb7428a768faa014e0bac43bc89e0ce99d7000000000000000000000000bc05d3fc5f591db553baf90fa4a321238f8539ed0000000000000000000000003e913f3cff35c558943e274d103e28447f85cb080000000000000000000000005b80d79a621307a87f8e6d759741b213266b7fd90000000000000000000000002d0a8d8f5075709813d7741aeed18a4618820aa0000000000000000000000000dc9ee06e80b2471bb176ea2c76808b671817be0900000000000000000000000095e80e1536942db87de2c320a4819d87f13329f70000000000000000000000009ef1e5eea13131065d64e53a0595ea487746324a0000000000000000000000000ec9bd750547b4c2250adfb09d8791cc61067d34000000000000000000000000845a64ff68fa3967339a45a3733b10a94637eb47000000000000000000000000ab61a155a4e36c1e136102816a0af95e419ff8fd00000000000000000000000064d848c7ee7fa18fdd90a7a64e2ccf964894566c000000000000000000000000dc91c251826aa74b0b6118480977764d5f4905a60000000000000000000000005d03621a2f7559043935a8955a3c7f25b3b34f070000000000000000000000002d73e4ac8f8e8ea06956649cedd183062f2b5ba70000000000000000000000000051ce590f109d4a2de032eb4610f86c91585fc7000000000000000000000000e7e312b8429c84bd575d3f2ab01a3c536d7d8d8e00000000000000000000000046b4753c3a582b90c34cd77b218b02c167cdb7120000000000000000000000008e355db874f540406812578fd4d854983ca553ee000000000000000000000000ebfc019be9b94344981e7f6058590d828103fd3f000000000000000000000000c71abe400907359296a5693361e415c3e6e6ccf7000000000000000000000000432047917c09d93feb11a7c700e702838414043e000000000000000000000000ed3bfcde3beb908f55a04b4a4913806520ecfb820000000000000000000000009270dca50936f369c9c28067578dc94d23e6386a0000000000000000000000009605d77ba261e5b8b8d16cfece6099c286cdbca7000000000000000000000000d8bc6a70afa71f63abe6ae49c4f709e3e29f9ddf0000000000000000000000006ced9966f761f0338736b0269911cee610cb736500000000000000000000000042ec81b7a210148644ccaac3d2c00b03f2831acb0000000000000000000000001d26d8716b98c589b34d1ac9363b13973be0a4d7000000000000000000000000e87f56f495d926d1f5e8c5a382411b9cf41c19dc0000000000000000000000004b3e8dd6383f6aab421d9fe4dbfa41ca801846ad000000000000000000000000b8693c5b21bd236f96f86eff5af31e7fbffd4446000000000000000000000000aad70a74f8a2f6e2bab6445764507b48071d55050000000000000000000000009c458c9d19d2bdd18d67fae736b585925553c3600000000000000000000000008e5d4cdbcc9db9740909ce9e0cc2120bee994464000000000000000000000000009274a86ceee1053a2f51ce42c825b3d6c3b8b000000000000000000000000068fb2acb581d478db566885150f4105ba200b4c600000000000000000000000012c97719d43e110fd6a60a670931ed4b358acf7b0000000000000000000000004e697c6a3fedb3fc4ba30fa172f60f7a194921770000000000000000000000005f6f7e1c4d2bb27d68bc301feb069a6a55c55a94000000000000000000000000acb7ae8937453511babd0a180a88ded53f3cc10200000000000000000000000096a9c8943461a0a017fdd5a6e03ab50095e202b3000000000000000000000000f2bf6a53610c7cdfb6933e86a66989b9efba278e0000000000000000000000004ae89d8ed0937fefe6b6d4c72bd93b94a35858dd000000000000000000000000d46f04b5218898c82366b0f72e16dd05cbb438fe0000000000000000000000003c9898d001337db6a366867687c4daa3b36b189900000000000000000000000059134ef2fbc9d17247c4527b1e554307ca4a28db000000000000000000000000aab3b7604b58b105ed5c3aebaabb2194f1a665eb0000000000000000000000003a5357a252f34c5ab1ba4c14cde2476250844ae5000000000000000000000000a47bf2eb05e8aab99ebb6a99fd1d49e23b7ec5f90000000000000000000000004c50560aefa5f44a553e42d186396f0cf2d443b10000000000000000000000006c44a118fb0712f14a3fd5830f99d3fc6b4bd0590000000000000000000000001b616fd9e4db376b50a9efe86d5687ace6b5f3a5000000000000000000000000e7a5053d8d2f336693c23cb4d63e59fff503604a000000000000000000000000cdeb1bd8855b711030627cad36e946031913b10e000000000000000000000000d4946c3a000405da7dfb75e11e1ec136d3e6a0c40000000000000000000000009edfb745f9e36d275ea5f07e1cc3096eb9254268000000000000000000000000626dd9478d916e35b0833290aaaa1d85b624fb5e000000000000000000000000495015882228a5a331adae5bc9f414dc8171c114000000000000000000000000daca863e2d1242dcc4659177beb30be86e7aeb93000000000000000000000000c78a4a09a82e35688a96cfa4152e465caf17a264000000000000000000000000331e3b479ef92b6e4f91094ba6d77f392abef15200000000000000000000000038036db3ce7ef5ab7ef45ba50fbe2c05d8fbab9c0000000000000000000000009058cffbc6237c2af2739ba058233bcf60c69cea0000000000000000000000004562c02fc49193759ab04eddfaadc2ca4e20dead000000000000000000000000e40f2e890a62271df0966a3c48f161a8bac5084f000000000000000000000000292f7d0eac56c0fd004f668b17d0f46a4757106300000000000000000000000081e9e9da0c06a3b24dbf9938b88469fe590fbf860000000000000000000000000439c806664db9298497757e4fa675c7a4e37e9d000000000000000000000000aa576e625bd602ce62c5255107f074d71e0f978f0000000000000000000000007a70d7332f0eb554cf26358665310f98486ba0ce000000000000000000000000abd48430f59f2f92deea81cb04a86382588987f7000000000000000000000000018fb1cd3eb0106b8971000609eefcd211f0b5b20000000000000000000000009242bee910e31e4bdc79c7960135fb26c78cf1d5000000000000000000000000eb7a2eff832e8be43a449b6fca51354626abcba0000000000000000000000000cca16ca48d6ccdf55447422daa0356c4413307910000000000000000000000005506e86e54162ad0c880a4a7eb5b14d4bf8989c3000000000000000000000000e743cd7be82c9cbebba157319c53ca6129a79f61000000000000000000000000db03b9ef960c48451b852a65e5254609af348a31000000000000000000000000a34988a711bf34d2e7a0490d4dc9df967347ae4d000000000000000000000000a4e69845ac8516787324f2f9d2b6dd4bde79433700000000000000000000000078edc3d5a8f3ec40b085d1cc993f2361a73f3896000000000000000000000000e7d6cec5d5a0bebb5534e9fc9a8ea570c02675350000000000000000000000006323b65b19f0a9a247d8e6f0d9d97897c2f1c075000000000000000000000000af72bbd027a0570c983b9a65f32f3c2996f90f7800000000000000000000000031735480eede9cb5cb2a04c582d95b2bca186bca000000000000000000000000b4c43ebeb3de5856bbf71338c4c8e5fd5960d3ea000000000000000000000000383559da0b23cfbe5b7893545d4db81b6beca9c900000000000000000000000062af61631988e3cd872149af6d06252fa3b2eedf000000000000000000000000f10972f01503329d65d9fc6052d1d3553fc517710000000000000000000000004063f783b7a1b25b5ddb6080726a4b3684908f35000000000000000000000000b3d07ee2a3bfc8838abe3eb5953aacbd7edfbac00000000000000000000000008ad959f380c429eea626034577dc62ed5dd99b58000000000000000000000000e72dca0dfd540601760b03da5a4f882ed55f4c6b000000000000000000000000ad4742c32863ab6180c9347802eda67fa4d50fe2000000000000000000000000aa033951112a8dac1480c7382947dead9962b4dd000000000000000000000000581fe123af5d98eed581029e8256597c7740b04e0000000000000000000000005d12a88a9fdbab847909b033201ba685899669490000000000000000000000004821dbb579ab8b5d729dd69594b148724f08d337000000000000000000000000fde6e7bc627eac52ce7968ad47d4d4015547bcb8000000000000000000000000510b4826e3e5d14afa1626fb91fae3599b95f72200000000000000000000000082a1d24a74a04ace23f99e12cb6e8ad742696e8b00000000000000000000000028dafa0269e2d617acafb7226d85def10a0c30700000000000000000000000007238a50a7a84cadd8c882ed7692186d6c1b4a23a00000000000000000000000079aa63969b23e14f1b2b8dbbdadf4d6e7a6af2090000000000000000000000001512c64795f433b5dfc64ff1f77c9586eb6d9f6e00000000000000000000000055110dd0e8e1e1aebca78410f31da8523fc850d80000000000000000000000001587871b01d3401e0c41afef2b31f375ca7e67110000000000000000000000000c24b59ac07071a8098d8c0116103d26a9e6c6290000000000000000000000004b92766ff6097c70dcc65191a16a995efbf7bfaf0000000000000000000000003d57310d163649383fdb68033d409a0231f567bd00000000000000000000000062ade9673c917d23a4f7c220244172459c7141040000000000000000000000003ef8e8000342427e0878c83d0fc6fb44b2bc5c490000000000000000000000002c575ffacfb644d5504cb4e6369d42ce465c4ee8000000000000000000000000cfab5f4f6e90c45a14c7d52ef1cd805b0db456f4000000000000000000000000dfd02fe1dae49523eff799bbb1a65a2643b040610000000000000000000000008b525d7edfe0773fe451bfaac0f9adb860c2ffa60000000000000000000000005937497dbb7b78d51e774d0d18e3f764c3fb39ac0000000000000000000000002db456d66a25ab1736c8a6f5aab90f50e75ff2370000000000000000000000003c764e8b866c48887dfc211365ed58897f89ca9a0000000000000000000000006e71677e33b7b75517217717eae44b6b7860bedb0000000000000000000000005ab7c69d8a8c3c9609fcda11258013bf74a4155a0000000000000000000000003dd6d4e87e5c933f2d8cc3379122c3dc5701c25a0000000000000000000000007603fa19dcf33f422f639a108ed6497369e36d8e0000000000000000000000007da3129cd71b7b848953e2bc11984c0b2181f889000000000000000000000000b5a80589111a3f6eaa269b988108bbe11d5e0b20000000000000000000000000a339e921b64968a9591ab64efadeb86042d07e6b000000000000000000000000e85c9d860130395da69200e8a25b34f4a8a88380000000000000000000000000234f0b8bf271bda6a0e558bc4b5175b9153981710000000000000000000000006691f555e48b691b60fc4277cdf03340916f1e9d0000000000000000000000000f7f5afc73fb764936db0ca625f84fcce2d85105000000000000000000000000f714e51bcc8f3a588a4c079a0ca0b3cb6e8aa7860000000000000000000000005bba208bb966125cd58ddef7a7900ed43a110ab6000000000000000000000000296ed2608b2e9a1a8e35ffcb7d14df98a1d8a1a90000000000000000000000005583590a430b06223fd57c5e68e2d52ffe394147000000000000000000000000de114a466d5296571d497b972ead031c4cfb7a6b000000000000000000000000a2d59bc8f12caab16a0a2276f4de5c00e483d01f0000000000000000000000002f81e89d1e8cb84f86b6333333227b6947367622000000000000000000000000e7d30b72064aaaf53338400f8f1b6ca6ac5b6d4a000000000000000000000000e7d4a0b21ceaf309b27587c6c9dc192fb8ca17cd000000000000000000000000a1a9c50950e3426123ce1fe84b238086b9225fae000000000000000000000000905ae629ac6246a555186e2dd70fa8297dfe179d0000000000000000000000003629b80a9795abcf7cf686da1c0c42bafa4c8b0f000000000000000000000000ded8ef007dbbe3db303748b90207d9f571753751000000000000000000000000d4a591c4bf144e7c97f3fbe366cd2fda57a528940000000000000000000000002852f6fbc74a00d024e95f382080c5643447996f000000000000000000000000c2409b4429339272f21c0b43646c72ab88b99ff600000000000000000000000064e82959e1e7afb1acf546c7c792d490668bfb860000000000000000000000007d26dc481b926146647627af8052c1d5f87c16cc000000000000000000000000302c469a8e85d9f6d604d5e7ca4836b86220d22f00000000000000000000000019c9f6f2d93c96a98775be272860064f18be167b000000000000000000000000e731339f793172820d973d133f17d64dc94e63e0000000000000000000000000284247adce9ee04d94c92a272120c42227ebcc98000000000000000000000000c22f06a7fa9470ef381e707174618b9a0b0702950000000000000000000000007b4680885483705e5baad299f6b8a14c80637dd6000000000000000000000000e1d47d026831640eec53a695c342aa306c890a4400000000000000000000000079bcf12dae514a19fd4f57649acf3952bd730c120000000000000000000000008d4777bf95a733d6277dd3039ecd030b426c2a540000000000000000000000007a7d5eca5b4394f43b4206004048fd0bc5084b5c0000000000000000000000000005a5aa3ec0d7c9e49ba703ff99b5b4ef1b50000000000000000000000000004d9da07d903a568e978aa66ffa1883cf5466326300000000000000000000000020d71bc6dc956718031f022b94e235ca9beaff5e0000000000000000000000004ce4ebad879cb8bb90f871375fd00a5ed152a297000000000000000000000000385c1bc5152f7ef3a91b8f8fa1bb92ed314660660000000000000000000000006ae6985647e79f02e0ceecf805ed5dcd7616a65f00000000000000000000000022b34630ab47b98fccc70e899f19f31fdc368f54000000000000000000000000bfaab38f26454cf5ae0570436415d4ad94336f430000000000000000000000005000fde996090ffaa0a9941a8af47a48f2019e120000000000000000000000002c590045721765ea6dc0e63f35c240083326c24900000000000000000000000001fd0bc13df6e0ed84ae1934a6348867fd497c6a0000000000000000000000009766cbe58d0a4b8319d3e41d80e0edefdfad0545000000000000000000000000f0596dedc5f23d14c476a8669afdfe54c3816595000000000000000000000000a7aad1e6e5f4e0c7d14480076042e0249d805e3d00000000000000000000000083c64c86b243bfa7d0ce9c2486fee62e940a74ea000000000000000000000000eeaf6ba520e842d58607d5703c28ca341a7e00720000000000000000000000000f27881b8f5ffa8b8a37c6dae79784466620804c000000000000000000000000f328810a9e970f02f27c54b77a31d51d131cb2f5000000000000000000000000e911479698cdd0b2b600510f85d8fe91bee4d3970000000000000000000000005c143dafbd49e72b72c546885efd667e8a396aa5000000000000000000000000f5a4c731bcc9cb0a572b5f466080518c93d5225700000000000000000000000064688b5365d15a1d75f187b5302cd87390ec78610000000000000000000000002e755092dd391b72ae6cea3f9c07b156b266ee0a000000000000000000000000e44f57d739cab673be63761861bc376fd17fe537000000000000000000000000700a23e1d94e98fd189325ed868e44b06d492e1600000000000000000000000065d27e5b670f68c6174077efaee1e4e6eb3ce1c9000000000000000000000000b3b022c6b5048729973c3bc81e675e52f7a86552000000000000000000000000413b3741154569050f138e83003b7ebc1ab2e5c70000000000000000000000003872981ff0aab0a74dfc2675cb7d70d2d79bccdb0000000000000000000000006a49e9c6d23b430a3828323ccc21547741e43e020000000000000000000000007c646e37b22432ad8b1cf59a3bb89f5740df6694000000000000000000000000e6ea54b683cb2edd58ce03a0544e843fe07be09100000000000000000000000005143e04ab065f7164aff84a893710200edb1c85000000000000000000000000553820d7de44158b268986bb532f6cbd5e380253000000000000000000000000b21ff2d30c280bbfc468151551b4145878219a2b0000000000000000000000008754c80ff0e67b3703f45a73eebd9a026b63f57b000000000000000000000000dd70c09b17672c856148091bc4fdc8b53d7d19db00000000000000000000000029ad2ad28abdabb877e5572b57219a594e21ebec000000000000000000000000446e9ca923eda731aac36f1239f526e706a88ed00000000000000000000000004b05d8d17182e7d66d429a7981fa4330c4707b5c0000000000000000000000004d72c9db79ae8bd1bbd68cf5add9b2ce5dea27b5000000000000000000000000f8497f5cb4460b31fd19f0ebe564042e1b727f030000000000000000000000005aa71729801a6932620f508907160a73348875090000000000000000000000004d22573bba7051a6912f82414735ad8a4d5eb9fb0000000000000000000000007c758b0dcfa9517fb1fd394b05b744354290e1a70000000000000000000000008af90dc50bc2db60c2d238ec0de4998f113f91f5000000000000000000000000f8b145f4496dbc4206a72bdcd9a6ddd7be7b807b0000000000000000000000006f69bfedcdb0f7e196c7c4e9c613597b2b9c7d3e000000000000000000000000afd7e7f47c0afad0cd70749a36243153f8559a0200000000000000000000000025f177e150d7900da1ef46cc4d30078b83cf97d800000000000000000000000066406968a7575ef072c67376c77f6d3bf95c9ce10000000000000000000000007e2ce634202c9f3b2b0eb589dd99a52f11fa403a000000000000000000000000af3861989b6470b97344ec85d5b08c7b3484ecd70000000000000000000000003cc2aa3f257bd74463c44a866c13ee4afd1cf2020000000000000000000000001906db3d14202067cc2203f9122b3e97aa113d90000000000000000000000000191da5659f66adb7159a5f9782a681b692112e74000000000000000000000000ba3e0dcee5d7e5307c6036a38013252c6fc48df3000000000000000000000000716db38e87b8126e551a4f7f6da43131b36953470000000000000000000000008adf0cedd44a0c32b9408c9bb6e7ef8ec64e9f4500000000000000000000000039cdc6393361c6b805f7f6a52a27b6ca3e12d00300000000000000000000000029893548871ff6d74b908223dda4dc01532cb93b000000000000000000000000bf8a0f7666f3f3256ef5b2092e079527070d6b4e00000000000000000000000061bfa7aa5085af34d9e956d6135c112000ca0ecd0000000000000000000000000fae0c2a679a037a67a8df0cca4714dc2c6b0694000000000000000000000000207e94589eaff644d036074e9ff8e15fd8699ae1000000000000000000000000e7c1b2d26d7f086f5f196b46c9775ba714311970000000000000000000000000bbe8f3d962266a7a92ff42adf9eb8f9ce35e1ba40000000000000000000000004017a96cffe0843cb3b4d5af4ef864318b6b1d5800000000000000000000000041fb14e6dd9ea7aa994ab2ff21da6341aceea7bf00000000000000000000000011e39e9ad30e3bb62cd89ef772b0121a9d6e6542000000000000000000000000413ca7977b5d03468f020f2c201f9cdbcfe485f300000000000000000000000025a4d4d366dff710021cf23e6a809d862391a6570000000000000000000000008a6c7854cdd996cfbd5e7a73b26060294e1023dd00000000000000000000000030d902cef763e328ccbe3f80f8bf036add21453000000000000000000000000089922b32eeb14a13e1ad9b5a4b4bc0cb5f7fb35d000000000000000000000000cc5943098936bde1dbdb0e860d36d3e26e573084000000000000000000000000ee180356dc2a2e11984782f465817e7d8216da5200000000000000000000000074b9a69473a54dc1a233cd25cfd6adba43e2227a0000000000000000000000005b39ba94aab32acb58a1c7c35827231fd72a8cd900000000000000000000000061ad45126a7bde3f685849fbb5eb09c6879e80d1000000000000000000000000cfe2743609d5f89cf1d3755637eee3f83c4f79c3000000000000000000000000266a0ee3734d31a2411665120ee3bbf73742bc81000000000000000000000000ec161ab489bb9d859ea176293724876e91662d40000000000000000000000000980c44f9c3aeeb640c2b3e9b31370d27e5c497260000000000000000000000002a5c31c3f369aa8e50e8f5bae487559deb4f37f20000000000000000000000000cfae8a8a3cb33a21488e10d1ef9ed5b09efc9c80000000000000000000000006fbaf87bb5ae49d272cca7c3ca3da9416fecd203000000000000000000000000ef66e5d981c42d8a9338f447b2fd7a3ff2a2ca320000000000000000000000000e7e542e29146212c9decd2c0cb72e2388d6606e000000000000000000000000407def0887047421fc56dca90f45fe6849a64bdd00000000000000000000000082a9c8ad338ad09337ea3c0ad5db9d1eb1cfd13800000000000000000000000076f7fd7bb9941ab4760c5a2e1f401a406f29317c000000000000000000000000572e528d0ec00ca66a938d3f768d1fec047daa8200000000000000000000000070c03e644d1ab177067a7d058a95dbe2a6fad0ea000000000000000000000000df17a7979e2b7b66f4113e1260e5172ae037feb80000000000000000000000002662346ed23be00bdb927fee7ea0e7c2951820040000000000000000000000008569a79c8af9e7d263bd187fd8d3ebc8c0668f800000000000000000000000009916345c1ad91facb70bacb5d4a5b4163a58fd61000000000000000000000000e2cd35b1cfa8182c44b087acbd4fd7d2893454f9000000000000000000000000581d03b6427777b3e75c7c835251c9664e8149bc00000000000000000000000050c6ba45e505ecf03b8d2dcb6e3c9e2af83025d1000000000000000000000000bec4bd814fc337fcfd47094d030e5698af618b080000000000000000000000000f6235812403f4ee1eb69ab99f100c6b315f75520000000000000000000000007710b725a39673b645df0f647c77f701b6596d79000000000000000000000000e75ae6d81cf56dad08a0cc3742b1805a9672848400000000000000000000000077469d707d3fdc360d2d71e49f8c300282dbf6bf00000000000000000000000009425769cea3538dea8d713bb1864e2ad7a62472000000000000000000000000ad884caebcabcd44059398500231cb0d00daa8eb0000000000000000000000005c55817c05bca83aa6150cb57f66279da10eb475000000000000000000000000ecf7066f927d2b63de0bd33e6e11aa897e6730f1000000000000000000000000557268e7d3888b530ebce86af05fc0c2f4a548a10000000000000000000000006b726e512d8bde45976b6b0753b37d17673b60a00000000000000000000000004f5ba76a66561fb432b1954338ee4f309fdf2b49000000000000000000000000f2b15d71562ecc10e4ab242c433774175b294ac500000000000000000000000039950479b9e271402052ef80d4a3b7e45a0e8ada00000000000000000000000094f0f25cb408ba8ad277d96bba7817e5872d6f60000000000000000000000000129c050cd34e41b946c6a663d4118fd3789084eb000000000000000000000000db1576aeedfce52079834c6dc9a97d8728dfd40c000000000000000000000000a07267fcee8e34a9548e41222855d3f9ed99be4b000000000000000000000000f8182dcef40ee3cfe9439650eeb1ca03e529db410000000000000000000000002d27d623e371d7e54ea8b68726b15cc07c04db4e000000000000000000000000421bad9ae3c43b4b4cef752eeca6a6761f690b630000000000000000000000004696ac73b73531211ce77c0d037540e3ed02ef79000000000000000000000000dcf7bd15c9c32bdf4ced20a1ddad601868847dc9000000000000000000000000f2c7f5117032eea5dec4a5072165eda9d222d36e0000000000000000000000005c6b49a1ee8640f1a67b1b8f36677dc75b23fd6a0000000000000000000000006f540cf8263b57967baa78e051c97d1553d409210000000000000000000000009cc59b79dc1383505f3d49b25263b84724bea8950000000000000000000000005f89f7f2ff86c0ff9e363673624db9d8a91c9686000000000000000000000000863c6c00a78f1655afe2a8726f935352e9532a7e000000000000000000000000a799230e498d5407acd2f12b05bfc3f64571517c000000000000000000000000a2eccdeff7205640b353575cad2e33c6d4685c9900000000000000000000000077fb3132530f7ae68e7095c584d201e93971077b0000000000000000000000004f6555fbbf0bf8f2972d20147690094e6cc4c635000000000000000000000000bfaf9a6d9a9a3c1f0555ed0aa25c95448276b9ca000000000000000000000000a53ae003f47a3ad9133b8089eb742f2fdcc5aaeb0000000000000000000000007ac119a0a6dc855b65c6ef493961eafe2082a206000000000000000000000000ce23ad2d1d8691121bfe7643835bacf75fb8f6f6000000000000000000000000e12492eace33d40a79899b51562748f9ee548c8c0000000000000000000000004821cda7fca37e50b80d6d24cfac23505205e6530000000000000000000000006ac511b5db18821b3a40deeb916fb763c93c07990000000000000000000000001322b0e512638eb8239aa9e982fcb369f57da860000000000000000000000000085d8b18daffcee5816bc96611d23b83957a55b6000000000000000000000000699551c12e6e18afa8eb3e04954b7a05fe027f1c000000000000000000000000dfd4ee79b6835868632926790153c0fcd318effc0000000000000000000000000398360fc36c57da7bce5f40c9c925e0e3048503000000000000000000000000798de2e16e02833ef08d8a5615791366088622e1000000000000000000000000f9a117f37baf78917378753f984688e55089724700000000000000000000000005156eee74e5fd29a77bca0294edd3f4f2536ffa000000000000000000000000669b451747464046c35c3b3b684484d501d4c3ec000000000000000000000000859edfd56a4a4dd612d5f8c43edd0b295f522445000000000000000000000000899d4d1f0cc476c63680179a38077c9ced877672000000000000000000000000df5c0fb0d25450010d155bf57a264b39a9de53b00000000000000000000000007fffe4a2df1f88cd7e0e4e9c0f0e1365b2bef3f90000000000000000000000009a99a8fbf2439701aab25b483cfadcfabee94527000000000000000000000000854215debd4a5080b2abc3dae244d8a2df24e178000000000000000000000000305888159756a84886f7277db61c6a34fc8d6c7e000000000000000000000000620df634d4b354c08046d6aa745dcd7e1a32d8a1000000000000000000000000830cce471372559c80fce07a97ff30e4e39412d6000000000000000000000000286548b3613739c360319ff6b883bba577a47991000000000000000000000000d8d5d8316e8959c901bb3e220a0a911e78941b1f0000000000000000000000005825fb4f706726f42b0330bf7ef9e3171d400ec90000000000000000000000004c5c42c7cc734a8990a23bff12c155e1508f6b79000000000000000000000000d7e0000e6d422adf9f08f28123246143b5964f97000000000000000000000000edaab3f4ff1e926e3951df52ec291da0ce43dd81000000000000000000000000aa8cabe996a4666d674a11a1e605b26fd5192503000000000000000000000000a93759d38c4a2d39a55817df5078cf1b165c891e000000000000000000000000ed70cac1b01b032c40c47c2ff4b3f0b81496527700000000000000000000000045fc85cf64bfd881d115edec1bc9d65e99d4d8ce000000000000000000000000a0583ef61f19ee0b5026a0f5ac424f36dad18b33000000000000000000000000e30dbc820ddc7a30fb7b2b4fe578f26b4d588cd8000000000000000000000000b08a1bd78376d18c6127bd6b043148c17359c038000000000000000000000000f233b75c3fb0f7967f16eafd4a33b452e646f5300000000000000000000000000172c9ea51f333788dd515244283c310a3e8983e0000000000000000000000009ba81f1e3e0e79a10d77bdeaa410ce80a7ed6b1000000000000000000000000040716b293a1f08297ff95d8b447d69b56d6a6544000000000000000000000000f8dfed3a2161ae3d541901e582dd446102846f80000000000000000000000000195510d974bf5a0491d9f98663efece3ad390475000000000000000000000000ebf66e061707d6360c7f1283760916b9b7a5057f000000000000000000000000a641ba3d4e45a0a44474ed6ad9235383b3ffe4760000000000000000000000001460dd527873989146809516c64caa3294ef21ac000000000000000000000000d3b96194317caae151b62e2f43ec91bd1f1714b5000000000000000000000000942ad9edab9db44467daae1d6b25b503e3ab0912000000000000000000000000b9681de280c6ea6632f45ff3525929f136de41fd00000000000000000000000096ed0ef0089ee71ac98b2e238298a5a3f6b207310000000000000000000000003a0ced2334b867a24dddd9aae1ac415cb34f6fde0000000000000000000000007388e77dfeec5360c96e76312846ccbf30476701000000000000000000000000c04318584302c8abdaae0fcb1faa8e6deed5d3260000000000000000000000000188eb57331b8d8e58592f59921c5f366f9fe3420000000000000000000000000de25810253fb2423ab10e1601f3c68b0d2c9cef00000000000000000000000075daffc98fd2cbd2941e1a41f618dd535d9af04a000000000000000000000000f285de8b56c56de79d631a4566793f9eb3e63adf000000000000000000000000049563f5102b765a61acb371bb0f27244a7b5b4d000000000000000000000000439f1a01380771fa59ef27060f8a29c07d3e46890000000000000000000000005bba3e341ee0e41fd1d632012660433e7c06551f0000000000000000000000005c916b7dd87d81a9c4b3941587bc3254b20236f20000000000000000000000008e30e8c12533161fcb622a3aa556e7e4893285ee000000000000000000000000c1c02177b99e2550ea97380efd1b3c7c503b0ade000000000000000000000000bb730e0ac8a57ec7fb226682cf70af64b4142699000000000000000000000000bad2218b48269319563db0aebb9c54d23b624a2c000000000000000000000000e18ec4c2e84495832b90848c1dea2dc88b73b5ce0000000000000000000000003355c32288baaa2ff453c1bdc268fa05c4d0d1f70000000000000000000000007cb1c1e95ffae0f78fbbcff60c79a1177212fde2000000000000000000000000d8270f4931fa7568b9601f8412fdbc1466ae988b00000000000000000000000044430678d3698b875fb1dbc5a8ac902ee183caf2000000000000000000000000146afcc3ef1ff13b1cda1b5f3402bd482e5c5a6e0000000000000000000000001bd78ba9a1c9c9d4c2183f955bd52a5a3fb703d0000000000000000000000000e92b16fa1d7d014283cc792da782dd112a4dc55e00000000000000000000000072a16460b9ab021d1f93ceb98e99b42030108043000000000000000000000000aa21390b079ad5fde90bb42316a4757c97c820fe000000000000000000000000c022391a9fbde750890bc7d9ad010d90d34ce967000000000000000000000000c0e9288d4469d950073b816c11cfd59d8a234846000000000000000000000000a59afbb986f1f4f67bec3851fbc402de9c8b2798000000000000000000000000fce1bb121e37ae63e638b28c23336a265e4a1213000000000000000000000000e541ae0361ae930fd9437beaef22001787897ac000000000000000000000000088c257229f5503bc62a383be6ca3f4cec04984a9000000000000000000000000fe570096874e814501a5aad2684e013f0d8a4512000000000000000000000000715e29488e314ca706f93314b18c969557bd806c0000000000000000000000009f230ccab5cb164fdb407af437582ee675aabf0d000000000000000000000000b4705d1779bddd53560e3fb6cf4f8931e996da09000000000000000000000000a930df219cd7c9424896a1deb132a695ae1567af0000000000000000000000006e0146cdac58ea84319724c5fc89a3aa566fbd3b00000000000000000000000050408c0681c6e3081e9405f898ddbab174eb93140000000000000000000000001f3dc60b447c4f9584953a679ba60609adb30959000000000000000000000000489bd098fb67168d70cdc8c62a8ceb2fcc8a8fbd00000000000000000000000013207be9939fec7252c7428fbfcd4ccc6a06099f00000000000000000000000003b2e244a21086a61cb7233a0cfaa797284c463b000000000000000000000000addb43458b7fcaa0ac1f3651afc1dac9614ac889000000000000000000000000d9f9044dd8321f64c7fb5f3622e681e4f23ad30c000000000000000000000000cfd8732eb14f2208a4a7ee1ad968592e27c269ae00000000000000000000000087f74db4b06ca4b8c929655fa9b3aed5139c0bff000000000000000000000000e16900b19f55b4858e1bef6862045f33a0fd9f230000000000000000000000008e7c869c3ea55f4701826494cc83d15885c06df600000000000000000000000005350a176741d3092b672369ec9b9706f91f900e000000000000000000000000b8170989d3fda556bf5beaacfee0cd1fe7fc1c1300000000000000000000000033abeebbd69e9239a0232a8c0e616f36ac879422000000000000000000000000a7ef149d7111cb1fd15807513c5d7eb432619675000000000000000000000000354e9055526db0a6b5b6abe6ca9606768935f98300000000000000000000000019dd7dcccd5a38538a00dba48acbdb59819ce09e000000000000000000000000b4a931aed2e594d052dc6704545e9bbc3f8256d1000000000000000000000000c7dd867fbf934a5ce58647f3b090c10fe3bc4376000000000000000000000000d53de077613307edf801e9af48328bb928e9b37a000000000000000000000000faba15efdc1c7ebc6c3580d75db42a60374f550f000000000000000000000000e0b31b06f7d2f3ab10b58f884b0ac9a851adf0c600000000000000000000000090b2d02d50ecc049adefdb3a85f75f33916498b50000000000000000000000006ac144052c94d5048a5b9f007dbff2f788da8f4300000000000000000000000093cd56b2c492f7b1931528359b5a0bb327ca517e00000000000000000000000044ba629dd048059152782359c08126ccfb99baad000000000000000000000000a90106fd3d4a60773e38fd9647b13e1080225e4c0000000000000000000000006eecf3cc74abfa3ccdaefb5dfa1bc75f33b4bac8000000000000000000000000814e09b6a1b7e7338efac08e653288d894b921ff000000000000000000000000d6c61a1e97aa2c02e2e58d7fe1bd4a1c9485932f000000000000000000000000728d352841e46fad64ba63f17826560bb713c35b0000000000000000000000005e6b95609f103c12aeffae16f8cab5829fdb95d100000000000000000000000072de8e79814e1c8fa3ebf0f81709838a174e92370000000000000000000000008d1aade42646b715470b20485e7abe43ee35c1b9000000000000000000000000c8f7533b868fc9d37af55fb3681708f0d04658f100000000000000000000000094fc35e092d191a1c07341b15d74f000b01c9692000000000000000000000000dcd57498d7e1c83abb671e10f3e7a0fb264440e5000000000000000000000000188f454ad273766d9947b0c4b092b183a823264c0000000000000000000000002e0e0296999617aa63409267902c50494b2323af0000000000000000000000005fd2c67e4c2fc8525a31d582f030022cfe12bf6c000000000000000000000000d8db5fa3846a2e8da8ac85e5e8bca226b9442730000000000000000000000000b3307b7ce74691c7a43ebab031cd4267bd556fe1000000000000000000000000d9ea89a23f780313f92e979e00de3f2fb44df6b10000000000000000000000005682a0c7b16b85622b887fdfc62d025df825c62600000000000000000000000086d85685cf56e09292e38ea0635446810caa28d00000000000000000000000004131d0e1ee2cc0d1cdab45f61a55425dbc992098000000000000000000000000913fe26ee0fcb24da2859eda7a41528bb85dadac000000000000000000000000b777d2f84d87dd1324b59ee67017e91d281ae8f1000000000000000000000000a71e7a389737ac0b93826b547e9b95b48b17b1d9000000000000000000000000ff3a6f3945cc4893e01fd6f1d35a15cf9f6980ee000000000000000000000000728727baa2a3f95a6486c267353886d9714cba13000000000000000000000000a1000a1eefe6d89c5f0949e5709373afea9fe3e10000000000000000000000001825d1241276c4f47555fe96eecec1e03a2ebbcf0000000000000000000000002773a2ef5928bdaaf4a829f046daba5ad9531761000000000000000000000000afbd1f365359f4503871e88e8abd9d016b26a610000000000000000000000000198c13c1407b136f628c65ce2425bf349580759a000000000000000000000000eaebc7c5a5ad52589b9e56e242c0f2ab92c604b700000000000000000000000036f59f7ae806fdbb3df03eaad1c1e0ba43756f0b00000000000000000000000055545e3c38087bb06ebb8bd3f8c38f70aea57b6d0000000000000000000000006b5c78a4c6f822a2d75ad03c74b81562bf43ca74000000000000000000000000db6d1c77455c8c952d0771f29ca6c29c2746809e0000000000000000000000001a3878ccd41b17dc5c49cd09b2c095484d1aeae20000000000000000000000007627236403363bdb9ae4526383390adc1684ee14000000000000000000000000977e5c49f53e663dae9b41e3c461b763ee0e9f140000000000000000000000009e881473ccd4b95a7b5d823906c7c610bb30a6a9000000000000000000000000ddca227e7e005fa952e5a981f56cdffbab74609e00000000000000000000000087ed27fd7fac80d65ba7f38fa18d9e1937353c0a000000000000000000000000895d5b434d07642f9b3dac332c78208d04a65849000000000000000000000000ae3c9fb522d4793d25f3c52c212a2043961b819a00000000000000000000000011fe174ae9fd9aae8605ed0bf07f39a8677956bc000000000000000000000000ead09669d6a623bd9d8d54c9ec33cd1e72683bda00000000000000000000000016e159826b63328e57047b34585a4df7e4605f9d0000000000000000000000006fa7163b64be864cae84e26724ea463660010f4900000000000000000000000003177f11a5071a1a47ab8b4ac681166a17dcc49300000000000000000000000000815af70f76eb2b5df0fff90987b7e6966eb560000000000000000000000000674893906532a5d870a5b2c5b68b88967cb72319000000000000000000000000025591fc87a9a544ea8a3a8fbce63926b99de16a00000000000000000000000093c946c90378dab4c82b30b65013e73543489909000000000000000000000000ddd8da07d701ff27d9aa2d29b59912e5896c9a4800000000000000000000000094b1df590c0f1d0b364c649ac1174d1bf55938800000000000000000000000005f967abe7b6d1a26d5c03cdb79cf203d9f72377c000000000000000000000000a475dc314a962084b6109d6d28f8c78b68827dab0000000000000000000000009bcf0a96dbb2c3c24b0f89f171ea6fd5d099df910000000000000000000000008691a06e1c881da855c40c69fc622d66e83cf526000000000000000000000000a6a043a62a271631b77d3613eb7496c1de2b9fc7000000000000000000000000e5c884cd164a2f0fd6ba732bef4b51ebb777646700000000000000000000000041f2503fc292e149a94fd8b2cb2d0cc3e958b85f0000000000000000000000005e8b42a0cffb2c103781fc04acc4e6bbaa303d4f00000000000000000000000074e2ab6dbe5bd790be2585bac692e7e0e7a9cc2a00000000000000000000000001a90fe0202ff60e2f89b01f5613ca1fd302ec140000000000000000000000005987a8102b08cbcd971fbe460c203d7e8db470af0000000000000000000000007aaf8136c4ac2a4aac0b72eb760bf126980be75600000000000000000000000041050107bdcb3ce457e48e590875233564a721e2000000000000000000000000c3500d96952c836399f896c69d337525cf5bd7e8000000000000000000000000af72fef4cb712f8851847d018720d725ef535de2000000000000000000000000406b92b9c42116917217cc508d03070854a83da6000000000000000000000000382d0701a991a1449fd64fa1e8675aa39ae058e4000000000000000000000000096b4cd654ef6dbcaee0b86f6077e7efdb98fcbb0000000000000000000000008820b8f1a4a4a6cdd46619030ae6182e53870efd00000000000000000000000089417253e9aa11e13092295225fe18445a6ce408000000000000000000000000efc854b89c399f4e353d88fbd111d0269f5d51200000000000000000000000004821a0ae142dd10e5c3fe7b6e1d7d931fcb6e9700000000000000000000000004823fa9179907044331396bbb2ed5cb0354e3b1e000000000000000000000000a2acf6c01d2b14ed1b426769de43973bf5e9e627000000000000000000000000133d1dc8afac25723a9afa0a599267cdec6a52240000000000000000000000006111ef74f5a88e4da2882b085ab43e2817a9bd85000000000000000000000000e2789982dbdf077a63ef6ae986ee7d3c6d64ccd90000000000000000000000002a7a59706abcf8578745b489a4282d599b02f3ee0000000000000000000000009635b7d2c86e574ef163d1f2c261e6ddb3e79d1a000000000000000000000000905c13d02bde0f06a3ac22f2cfc969472e616bbd000000000000000000000000d4224fb33f5fda3f32ac72865999eb3f01afce1f000000000000000000000000d417a22bb304058e4e00c36bdfc347b60734f4f200000000000000000000000016ebdd55fce5319b1a6229d19c3fa081c851548f00000000000000000000000090fd6bc9568a2c689178f875f027833233c154f700000000000000000000000072f2070d65243844fb3dbf3756d45ba74677ac11000000000000000000000000a6ffc85954b75e9275e73ebb168be38df5cf6586000000000000000000000000e3c78d15d7eaa78c64080f8c4d1d7a40d9484d6d000000000000000000000000b2ae72fd2d344e50c3974207ecf3efba977836f40000000000000000000000002863f2496ad751b1d7a41a83c3362dc5b914d88b0000000000000000000000008173973aaa9ad4d44719905e8cff38d0ce39cf7000000000000000000000000007fb8fa61e9d512cee7b7a3194ac42b98b4537150000000000000000000000003ab6a6546e942a1e0cd7456cc177a59622f6b3f90000000000000000000000003d7ae43d0c242e324badbe848a5e3800c68a3fc500000000000000000000000097416c7888a2e12387e403697e971d50d775416600000000000000000000000013ce66a3099132049dda8fa92d861a32225bff3100000000000000000000000066915088a2a1e8d7864eb8f485bb0be92cffe8d60000000000000000000000007f24740ee3b36a59e1cf06547b4a4ca440a8c1060000000000000000000000009d83f8ae0e231b049483fa68633b6ab40631e7a200000000000000000000000051b713e83e391cee2843c4fb66b91761b3941261000000000000000000000000c57a24f80317a8ed83836ff7e92e2513ad6e982b000000000000000000000000e5df95ba3bbbae9316afde7869baa700e8336967000000000000000000000000360b88859fdaa3929b6c906f47c7994ac79d65270000000000000000000000005521a280114e68e416b16178d733c654f00e7403000000000000000000000000aa83451cb55c709d237e9b7298fe8c03945137a10000000000000000000000008dd8fa2877996f658844bed1290a74d4815a745000000000000000000000000098547c513de1db6fbc6b8d978500ce5ef4083a4f000000000000000000000000e3136f9350fd4625c48c03b5b57563cf3f2ff5e2000000000000000000000000313596085f7fe76f5a552e66ea147cd1c9f3846400000000000000000000000038d8bc5249eaecb6a58dd56382a97c86db7520c9000000000000000000000000acfd97ec432a32326527e87bb30ba8eaa7ca21e3000000000000000000000000a0af548ca02d4f0276289ce75bea6182022c8f5d0000000000000000000000003c67971345bab09ebff8183aa15a42d6dc0b32c700000000000000000000000008f35e5771bdea74eef9f18ce1ee3cbf19f45da3000000000000000000000000efbfad623b0deeec82daf178d88b61e809d980e3000000000000000000000000fe888bfaf9ceb4122177a55d4fa584c262e71da9000000000000000000000000d6e161ba7a11e25342c021cc3891c212bd5ca85f000000000000000000000000581a2c1302d7c413286fd813a474aa7ce98246020000000000000000000000008e885ac88d0be3312a54c11d942a8288af30e23900000000000000000000000036bdca3340c3235a9b423f4a467fa400fe06ec14000000000000000000000000b30df82610e876944da7a3eb84cdbff207f55e9a000000000000000000000000b6750d79825deafa8e3a0b1128d1b6c1a081ab630000000000000000000000003e193da0b686c78ffe03266616e0f2868fea42e10000000000000000000000007da6595e3ea7eb23f6408a38dd67bb7abf5a8ffb000000000000000000000000f14e71f2811592faea1578f6364681d474aa5c92000000000000000000000000024d9f9827d076769dbbd3add1f636624fb2173d000000000000000000000000836d44b3d52cc4d96601df1142443ac2d03c61ee00000000000000000000000043328cb8f2e25e17ba03d3d5dc07e21b5bd18bf50000000000000000000000005f232caf1f15dcf2d26c3fd44d7066c36b19ecff000000000000000000000000f2db6072f6b08dc7e76cc2fddd57b5a37d635346000000000000000000000000774a50c6b1abdcb5f146b32f035c6fa8dc02dfc8000000000000000000000000afb91df87ba2a01cc6dfc0d1c8e5c0dba636b8930000000000000000000000007b88dabec0f5a7c6b3d9e371e433c7bb8b11ced5000000000000000000000000bc5cfc6aa7b55a5cd1a24f46d5fc17a35054dea3000000000000000000000000b61375e2a3c61e068fd0c0a910b08287552b0459000000000000000000000000dd17647e2953e16609499e72c8a0ecc2cb3902ff00000000000000000000000080b739d4e68862825e695271ed641203a268df6f0000000000000000000000005ed820269687ff9c68bd669d8d3d01ae6f5fde4100000000000000000000000061b32319dfda40fef50178604857edadfb24e33d0000000000000000000000004badfcaf5f736f0df9ba3a6f733fa6f1bcf297cd000000000000000000000000b17b46406f54b50b7c346bfba274c3e6dbdcadcd00000000000000000000000019f9cc9f0184668a2ae63242927d5ae6dde22e6c00000000000000000000000008785ee091836663b3570d9c6d6c67d1703fb8b300000000000000000000000059fad40332d7f346a2ce572ba1522f9ba3cdff0d0000000000000000000000002cb54eaea1fb4e01162a0b2e9a0aa8d4d72b6d0d000000000000000000000000ad3db6923a9ae4f2f34bd6163c9301fc2667058a0000000000000000000000005b6ce35d744b16f8969404f9f13ff4a0f7df14790000000000000000000000007f5f456089fb807b8777a282a29860a8e76292b5000000000000000000000000fb7c10b446449c28457ea45a3fbae79ace09c900000000000000000000000000925a876a7e312dee0634c26a306efb806c3d6c530000000000000000000000009aa155269acf56b7d45f62c4f1437a0263e1ba0c000000000000000000000000f4836334598f5070e22144e2ec04af59ab26f73700000000000000000000000088674a43a1c206699affb14773172c8d16bfa8f600000000000000000000000006390f49fc05ce19501004425c4580237aae8eaf000000000000000000000000374fbc8de9e96fa906a24b20c8ee295f8834a0380000000000000000000000001a6cbf3c669c0b4225cdf24e58da1903d30773c60000000000000000000000000c837e917be3287da7884ce07ce5db900f2a1b4b000000000000000000000000a6701538a4d512c0d4c40b3f76709ab329fda9ab000000000000000000000000930794c17e5b04e7c136625ce22af06b82649a7c00000000000000000000000062083d35b5a1fdb6e571780501745764018b899c0000000000000000000000006c4f444e98e80c24fe6121f4f1d2cc878d63669a000000000000000000000000a153c375f30a17e08cfd39856b9c661a2a78012e000000000000000000000000530c40cd9eb43ef1a92dc84ae4dbf159baf5bbe0000000000000000000000000a941d0a6135515b0df9adb34a73a3097a58c213c000000000000000000000000b81e9c861c7956a00d9c8879e174fd851538065a0000000000000000000000000075c169d8887f902cf881fedc26ad0ebc7c8c1900000000000000000000000020cb6bd777fbf5c307ea6a00cb05b9e3b6b14f720000000000000000000000006337bf475e7676df4ff3814af2d5f78235d186b50000000000000000000000004c2619b7d91380391032dc748a5e99b77a3c5d62000000000000000000000000da4a19ec84311ab1cc1011e03ffd86115f0b213600000000000000000000000009acc91ee86e4d9095e39577edb4a3255c3039a500000000000000000000000059c0fa68b6f4468a3c4b88065c3c0764ac4e3e300000000000000000000000005eedbe4c8598299d35bd4d2893398403fe462b0e000000000000000000000000f93f0aee2e436811ed31bc4dd932685d69ded97300000000000000000000000074f45d25f1bdfc92ca365cd540346e9c269fcaeb000000000000000000000000dd44e948074e9a90671662e5b5da2ac0277dfcb70000000000000000000000003960b81f479e9ef1a959535896e3c4a101aa16da0000000000000000000000005fc96fe5a7a840fcfeaea5aa507632fe428ed420000000000000000000000000755f0970822572a4de43ef37e078cac3521d39e20000000000000000000000001cda025b63260d18e51c84f81def58782af53e9f0000000000000000000000009a2585b425ff7a2c073efd09fa7bdb7af7f3a162000000000000000000000000f752c582ec4f638dae2367fff31acdfabb14cd4800000000000000000000000099f04ae836b4679321540697d769905196ad1e220000000000000000000000006c71e9c106bb0f6e3819d3e49e5d67a98ad20912000000000000000000000000366995cd9ed605a2ae3a0743ed740c364d97ebe9000000000000000000000000d963a2540a75d39a0a9e87cfb8f599ca20576a480000000000000000000000001383230d6a1d15423894e532f7a963ccd1cc31e900000000000000000000000091a49b57ca02ff3c127c429d681990de9a7ca2fb000000000000000000000000f2666d4b22dfb2ea67ed4134712ea9427df5aa810000000000000000000000008a50154eb8cee9e25d0b0f9a62a5707a29b6002b000000000000000000000000198c48f2e767eb004f59fbf5b6b205ba8d7bc4c00000000000000000000000009d6d677b94ecbbdbb12657d36c4dbdf95d718cc4000000000000000000000000fa5c80429e5d3d925053ec20150d7bf71789f02d00000000000000000000000096825da3d8807cdb95e7688c95af402c54c29f0a000000000000000000000000c89dd75fc2f665bb726bb274c72d230df06383a20000000000000000000000007f62a5f227af4c568684055d69494d94dd681ad80000000000000000000000002b5a1ae79ed3824c5615f2c56e9502282f22841d000000000000000000000000fa428499d76e5528a05aba2b2f74a2445cc47cc7000000000000000000000000f3a42d3315d70632615661c289cef0cbeb81dbb0000000000000000000000000ef59a676b326547ee9f6786c33eb379c97649be90000000000000000000000003981d1b39101879c94f2d4dccfd4820373892f4500000000000000000000000032ed5a08e70e485e24af5b5e87406db4b9b7008d0000000000000000000000003c07d64dab5005f5873f1ae4ab6adc10e96b1d95000000000000000000000000c3bf02e433a992b7ef9ae4832b5ff26f243923360000000000000000000000000507e90dbb78d6aa0b8f33541207ccf577086146000000000000000000000000d94146c2069356fbfd1d4bcab4c9f30f7b5ed185000000000000000000000000ff0be95aca2ca08d606ab6f9e92a5158813320d200000000000000000000000099a6407a63c15d79c02c5c739102c782b9d543d6000000000000000000000000758bdc413d9996f43990306e4586b62b669617d50000000000000000000000001e73f6dacdec1b7662e4424ba9057681333492ce0000000000000000000000009e027e8292e39b8661608a1071fed8f986f17035000000000000000000000000a54f4ee3d1961966f06d41a8550b3087ff55f7c30000000000000000000000003b16066ceac5ee40d746a2ef3fbafb9f66b48ac2000000000000000000000000332687ab41b7decffc9548929057450388c6184d000000000000000000000000096c52d2a441893e7145d8325c243b71c358b106000000000000000000000000f03faa1f8b2b6bc7774d320c6e40e7f1859cbda70000000000000000000000002a5660972510aafd599dd10444d575d3387e01a50000000000000000000000005b603e4090f2f5145c9fc8dec82d3c748712ba0e000000000000000000000000826c6f526cdc1dcf2259fe4a87baf94f08ebcdec000000000000000000000000f9476a51fe94d50f2628333867a30dbcc4fd9a48000000000000000000000000f4d02ea3a5c43b67ca973d93266d99d2773ad7d00000000000000000000000000f56e6eae11ac0718b8c72f9de25ec14993411db000000000000000000000000dfe6fb84c3a4ad9b2469951fd264911d378509aa00000000000000000000000095419b94c4e9145e1d06b77c8880aa037c210e3b0000000000000000000000000a9438f29bff66b155ce3a4526878db15cdfc42b000000000000000000000000da549dd17f90c91028ae753355ad11b0510456ea000000000000000000000000cf48b7a9276d06f5801e634f879c8d0a44fd518d00000000000000000000000086e2f791f595f72d46d31f4b9172e2e91f9ae5b9000000000000000000000000c08ce571d85ddc073f58b694c71c68bdb1cace7b000000000000000000000000de7bca05f1284a03a30c2265004537499516908400000000000000000000000038086cc1b5b7b5e9eabb199724343f4ea166849f0000000000000000000000001b5c7b5a7a0d470990202a1a782cc4b73cd62cb40000000000000000000000000ec0390599d6eecb1caf67eda0639b5408516b760000000000000000000000009eacfa90b3324fd81934d9392382364ca676fe08000000000000000000000000cf9f3fcd285044f0abaebaec9946faf06071f79d000000000000000000000000357ea93823611ad5541cdab40415a44c56b99029000000000000000000000000082e2d88803f69b3f1b280c3893eb5b2900d9ea2000000000000000000000000aae810ecc246a41bfa10b1e21ccc8615c7143e7b000000000000000000000000eb27cf75e2c800475abe11698ddce17681a7a70b000000000000000000000000ea4e148a7d3da9996f8153e39f290e236db29b1900000000000000000000000047b9c1592d16173a8d10afa1ba6669efa6084e1c00000000000000000000000017f42d97988ae402793ca2940473b066efb495ac0000000000000000000000006f7cde1ca4c9ce53fa67a02061e63f1f958dc73c000000000000000000000000f1fb4cd03db2b658a81b98913f7706fa74c587fc00000000000000000000000033e37a4ef606acf53c740aceb01aa87150729f120000000000000000000000001c05bd4e0a42ca53db591fd3461b79723b2e936c000000000000000000000000fcbcc39b595321b3b54f921ce8af8a82a44259120000000000000000000000005a26100fcabf977f546b1fea7785b256ccb3e301000000000000000000000000cfa4c2578ca0259d1adeb0e54759971008186ad1000000000000000000000000e81aab3c45e7314471a84322a9000fabaf5fb57d0000000000000000000000008e89ba1aadbd2555e8b04c6c388d00791d10aa2f000000000000000000000000b5472ee66248a44bca9bb2b58f540730dcf1497300000000000000000000000062be37ff3df892d8ec80fcb8f2ad74d5b857279d0000000000000000000000002541fd173cb3d30dfe12ca328b17be86d62e32c8000000000000000000000000ac8a078b5c412de917b6d24a0e03a5ebb9d983fd000000000000000000000000bef5df70280d9fc8a0bd1a077d85fe66bc107377000000000000000000000000ffc847c67e18dbf231eb6c374058b7c7f1f5f4800000000000000000000000008fddb710793d1d9bbcf98974e52e9ad03d58e9d700000000000000000000000007ea4d177eed5d6376cb99af43d0d9261d14f3ae0000000000000000000000002acbe85f5e71cb7c46b94e2cf3b817033571f56100000000000000000000000078e61e40ba1ffb5547f7ada7069cc0b8457d1e5c0000000000000000000000008c5225494787fe562ee72a7b7c4a2917ff57ec3f000000000000000000000000b9a9a04ac0c40fb20d1436be11cbcf0d6882a35b00000000000000000000000032798f0260ce772e5847056c46989d1b90cf7a0e0000000000000000000000001e96bf432225ab6932bb90e8d46b22d6b79b3ab3000000000000000000000000faa4461a12ff0073e10af16f107ccb739a2e9957000000000000000000000000bbe623ae689543ecd476aea9668e203b5145f4ca000000000000000000000000c3a0f50c1e4ead10a053d51d97d3f2f55dc996df000000000000000000000000636677b8bd8723dbaaaea7a0dc54a80b20071d07000000000000000000000000b9dad29b7bb123e49b08ad60ffe2eaecd78d890b00000000000000000000000028e4cf3e30e3781483e075c52dfe3aa5698fc138000000000000000000000000ca5b2032a6972e231d33653e24ffec9b4b19283b00000000000000000000000094664e675dfe93b6d35411ab86954b4617123f06000000000000000000000000a6e800221c41a522448baff130f069c191e7441a0000000000000000000000001213b7d721965baff1bc560c5434bf5f59aa51d0000000000000000000000000f7b9963d190d75edcec4441d4c48630992fc9f7a000000000000000000000000647d4ced435775162837d3ef325c66b138c752b5000000000000000000000000d2779012e62c8a40437a84e3a2102d6aea2b94b600000000000000000000000040ffaa04058a892ea67bf219827d32daca79c07d000000000000000000000000f65ce9fdb95ebcf2a5b9240e36f449a502baa27e000000000000000000000000c6acf325eab0ce241d100519f1fb7fc859d1704a000000000000000000000000283da3268167ec49d5a593fbf8516f48231e760e000000000000000000000000402e8b24cc6623f6030b7846fa5cd01cdeaa5ab5000000000000000000000000719c5328484b2e53cfb8d446dcc1d5923c4d08c70000000000000000000000004fae3f6178548bfe5b06df2556dedf2b8bc31789000000000000000000000000013d0c80841ad4102552cc41a293defac018272d000000000000000000000000bddb091ba429467fffaaadbab73c2045f89c98e7000000000000000000000000779988b3e5f13defebd9f386d7c393e4959f4b3900000000000000000000000017d033cf290f6bbce3f0c00c428d5c7399b41715000000000000000000000000a5d79241788ebb0a0f13b3316b16a2a37c04d9e20000000000000000000000009b258afedd29e4137120a7639928ca3174cd62f1000000000000000000000000255ebd24cd60f7fe5e66b295074f4fb6d67784df000000000000000000000000621f6b7856df17c522f47f82399e5cde8dbcce420000000000000000000000000b38e378d90d090265ba1607e4c17f764767e56e000000000000000000000000378c704823e77a49cf0da5d12a5c087eb17d6e65000000000000000000000000909137076a6d52d9253e9b95fdbbeb03a27603c30000000000000000000000007bf2e0ecc54011623b29680e0854c6b4e0954bf90000000000000000000000000443d67ada67cd52f825869f21d5f5ba2c088a850000000000000000000000000fcfb6e676c3562469dbafddd57afae6351c6452000000000000000000000000d92157952be723a16dc8f9b597a892e606bbdc62000000000000000000000000388618d30aa74b69956880032b2a8c8aaa7f641700000000000000000000000059bfa6a952182fee742e15c5482f7b65dcb44ccb000000000000000000000000c2935dbb1dd1af788aebc23a06e609d0b1a8cca600000000000000000000000097c166df3cef2d4f3e5606e2e745f3d377af97fc000000000000000000000000802a4d0d430987d421611e9e3333b14cbd142fb8000000000000000000000000de10a2d7b6c02514f8f4114d5bd8209b1d164b6900000000000000000000000067c3f27233baa2fe446509df6dc9880d10e65d3d000000000000000000000000049b8c9c2b35e7b7ec0c9770b519242f1a3a042d000000000000000000000000a1caf91020f5c7ccf13e92894445e2b5003875d7000000000000000000000000ad03344f6055956861557f194e1107732a331b0c00000000000000000000000095853add8368611746636e9e41beea3859f2287a000000000000000000000000b13de47aee72c8bf7752598f0358c4b2f5817924000000000000000000000000d1503e005e898e02a031868d829213f389e53f660000000000000000000000005db664b58e380c2cc8a9672437eaf82cf29abac00000000000000000000000005404a485a5fe8e5be64ef42a8e08bc300c63deb5000000000000000000000000f4e4e77b6a9c25e36ecfccebfb36eb14d5a9c934000000000000000000000000ff09d681b1cc675ee6f6cff0e9a0a676fb81390e0000000000000000000000005a2bbb00a0a686123c38983312fe4e2146d24333000000000000000000000000e09567a431f8f23f99dc0215b985fc322669cdc4000000000000000000000000a2180b43b2044b19a47ecbaa5afac76bc9753d0c000000000000000000000000c5b65ee9b085e3314b45632b91de27067264009c000000000000000000000000f2dd656d705069eff2ca54ff39e6bc805fdc867800000000000000000000000036ed28e6edc290aa73dbdc91f0f6646c15d957af0000000000000000000000007dca60541750e212dc13c3ddcc5b384d04661eef0000000000000000000000006fe84326aca55bac89660020f4db61761fe309f3000000000000000000000000374690337a49eb02fb50a4afc335e193c636613c0000000000000000000000005e1aebb68fcf6a48eae21ed1e94404f4625991070000000000000000000000008a79c3c6bce5ef5a0f0db903b2df0c8666dcf013000000000000000000000000a17afb8231e6700f2fb85c42e90848748a88846f0000000000000000000000003291881c4225927e2155b5bd7dd4d1b861a6606700000000000000000000000034234c2553508ed7bce49d9199f80e1744927710000000000000000000000000440552215078085d4e37572dd624c9f4fb31681b000000000000000000000000bcc5a7e2f14b9e46a554ab4dc2c206a3180faeec0000000000000000000000000f08d0f70208ba7d8fccde9da6e1025c6229402a000000000000000000000000c02147e2691a97114aa43f8abbf1c21f97aa16ba0000000000000000000000004c47e244a615d3975901a97d03ed3c2665b7c30e0000000000000000000000007b441d3e7fcadb6ef73f0ca55bd66552b6ca968f0000000000000000000000007c15800616895feeb9d1c7b9388146af76173cc3000000000000000000000000ff3b5d1673a9843561454c3d210f1cceecd507380000000000000000000000001760fa4cdef66c83dc5afdc8fa26e2eec633126b0000000000000000000000009da87639864b61866421e3cde24deca78115441f000000000000000000000000f779953cd62af3d5a3451b4831cf2d6cd5249a6c000000000000000000000000d813e8ef1d2662eece626c2761a7e524c637f3b1000000000000000000000000842bdc1329ebe01d85cda3be43c816283f5c583f000000000000000000000000bf97a4f4ccb2279aba1e330dd26d1b033a6cdfb2000000000000000000000000eadaef29c680230223d2e315580ed0bc2afb61e7000000000000000000000000c394b9f0ec10b417682d03c38e85579375abd5a2000000000000000000000000ec749c9ae48895046e79a041862e838b1e5b8766000000000000000000000000fc7107e069be7127af3e2b2642727fc379f608fa00000000000000000000000095db0f5ab9528e0b75414b4dd2d0ae800e3a3f850000000000000000000000008909e33ca43f5214d0facf698525813982d552210000000000000000000000006ad9b7a1c3e75ad4be534ac4c15b609dc132e5a100000000000000000000000037601e6b564413f6048381a64f643fb805ccf5ab0000000000000000000000004adfd73e2dba3ea5d45a07952f78bd75126cf39900000000000000000000000085e01452fb4b53fd60bdb7f2dc85408809f1286200000000000000000000000060d926c1a8958905d2840e74f35998ff79ecd63e000000000000000000000000e7f5a0e494ac651d3a5afbecdf1ec72003bb3635000000000000000000000000df94d5047c31a5798007cc4a534dbd68f2c82378000000000000000000000000b26eb4fc2958811bbd0751ce231443df1c0c2c42000000000000000000000000be3b257dad864653fc925e4f0bb92af350b17c83000000000000000000000000aed481dd6dc215f4c310e109cea52810811d8b6f00000000000000000000000074c7f6088e7acd60647388eeb58f794c6318d9d4000000000000000000000000346908bb048ff3fb520018de9cc21492a91362a00000000000000000000000005de312021bcc398555e4d1f3b33a8f6326a8e0a9000000000000000000000000fd903fc3903ab945ab1348666b656aada2d1a7060000000000000000000000004a983c7765cd3e77d6726f8cf5274e792740eb4c0000000000000000000000002caf24f38d45cc39a33532298ada8a072584a000000000000000000000000000b4b1286e7bdfd034d04bccd578269f3a7f960957000000000000000000000000aeaaaec6373d72604263dcfa5248180b9e2358dd0000000000000000000000008c46af7d12963aa2b22bdfe92ae7fd10a4dcd5a900000000000000000000000088068d57c9dfb05469fc24cb070ebb5b4c8d77130000000000000000000000005f3583fe29eb45412bfcb8a2ba6567587694d810000000000000000000000000c1f02949a5beccb56e042cde0cb28907f28a985c0000000000000000000000005f686a295714448e74383aeffffad0c225b12109000000000000000000000000be8c36981adf87f9fc323787b02b4036f280c82400000000000000000000000044a7a66228c05892a406084729ae517d0acfb48300000000000000000000000093cdd8de00e48d3e3fb2ca8f52360f9a2096b57300000000000000000000000037a71327741cac8f07ac86e79d904ca5675ac78500000000000000000000000098431e1bb55b3e8aa52ccf3acbcfd73ac64342700000000000000000000000006b504c28d4282831a945e1bb494ef077d391841e000000000000000000000000c856f3b3df06f4d6776fa46289b86e4e1c89df360000000000000000000000001c545dbab0cf6c62efd7399ec6ffab9feef5daf10000000000000000000000006567b139b5955050621186367f188cc1592dda2c0000000000000000000000005ea95c8b7b9456c6987c45b203a40e1bb0d8686300000000000000000000000064def3e44957c733c22ff00bf4f72362b4469c2f000000000000000000000000b4c7fb10ae1be52abb620504b2afbc725631a4c700000000000000000000000070d03832f2b71d0f2f3ac3b961b9c12388098a470000000000000000000000001a23609c868721bc6fda3ddd71aaec1ad377165c00000000000000000000000000f74b8028480144e7cbc4d4573a2edcc1b26ab2000000000000000000000000a47a3d278408476a4875018925e3510318fcfd4c000000000000000000000000b0e4bac5bb6ec25555e21c9ff7c2e06246811c45000000000000000000000000326f18dc73803f75f5f117fe05123f9c683ba85800000000000000000000000008cb6898747c1111737333c6069d852facf412730000000000000000000000009f05c5652c142b187989ff821e04d91354ef7697000000000000000000000000d19531ec6053418d1f0a4390b24eec301b9741b2000000000000000000000000e938efe34ba2a158938a9d51c26ee80e9c5cbf0e000000000000000000000000c4ef13f8e2255c94ee983899054780ac9329dca00000000000000000000000006ff7bc84f695672477a78f8ae718d306d37b3b12000000000000000000000000cb23b56b1151a63c71500818c109ee5c0784498f0000000000000000000000009f52c14c9b3b6e4d20cfa4b677dc6e2bbef7c19a000000000000000000000000b73469b7da7fc5c8216e1a1a61c3255989208131000000000000000000000000f33c158e4565e041d53f746acdcf009de1d81e52000000000000000000000000d23094a714fbf7141a180731d8f928d04131e2870000000000000000000000002fe889a25b7196a4e838d7d0b5a0a4cb9ee81e760000000000000000000000001649492984b1f1f1e065de75f454c482c05eb1e000000000000000000000000019aecea9d57e30bf660cbbc6ef2501affdb020c90000000000000000000000000eda3662f6ee9003417ab5f2cbd83f38615c9f79000000000000000000000000496f07c6c88a7b0f1fcc9ba750ae440ff0797786000000000000000000000000afd1e2b99dede46e37372b3bf525ff0be4a517ad0000000000000000000000000a861ca39b4b426ddf0042cd6239cc69f018467200000000000000000000000020edd6d185f0277dd614f0df2dc3a4f96d95edb2000000000000000000000000c127ede6f1e089f8a00cab36be8c823c6ac06fbf000000000000000000000000b83bb1c164b11d2c25ad360c25391c74722385310000000000000000000000006215631064a6dcf6263b6e854ad8d662325a09c5000000000000000000000000fe0c26298771f9307370e8d4829fdf4676ad7773000000000000000000000000c1059e6da1ea4b7491ec18ba006681e64c6a83de000000000000000000000000e4ad5f25d36b5176b666d3228facd292297008c3000000000000000000000000f1203ec19a3a6412ce91adb62099a13d736cc9a100000000000000000000000061cdfe7eeb59401444a01077b85816cd95d4f66300000000000000000000000037042e35f78b57d6c34ab08bbaeb548ce7c92717000000000000000000000000bab8ce6dbec298702319f6bdf631bf0ace06f54700000000000000000000000041fd855ab318f9835adfdf6f73eaca4ca40f8e35000000000000000000000000e2e1df25574b14f9a6155ebe13e4ee1efc6354190000000000000000000000002a518d6e21b767e471078362772f222bd4f06a960000000000000000000000000907b14771f2b04c5a4643e611d23f7e988bd35d000000000000000000000000edb4dce561956ca9f588a2668ffc1f24574bbb3100000000000000000000000026804c34bba5e8bec199c17c71be844e741e11f6000000000000000000000000dd979085522cada79a16da6fb20bf655ec9544fe00000000000000000000000067e43e7009aafb3713fb6f2dc0ca9b18c417e00d000000000000000000000000011da675c1271e54e2bb3438fe845e4ac0a1d9fc0000000000000000000000006420ea53b0b2d00ae232a8cea1094b0bf987597c0000000000000000000000008b5bc258251a11163fb76475d566ae2e4f25a1720000000000000000000000000d5d06d4ddcbe7e023bc0dfc3d73662404809b62000000000000000000000000097ae87b9cd450cab7118253790865c6a886ce660000000000000000000000001e8d43df013c57a267d3fa9e4e0e8ae1e8c2e3e200000000000000000000000009311d9393a9f23c75724a1ec7f998b2f219ab73000000000000000000000000b7f173ad3b2d674299e5996b7af6a8f35296a4210000000000000000000000007c1fb0eaa15b19e569e8c52dc9eaeae675d1216300000000000000000000000073f7914a860da080c2c301419d764f7a94aadfab000000000000000000000000502a9f6811e8b6dd0a254802434d944f2994ffa70000000000000000000000001dd33cb386284f7c55d9930fed7328d866c47c16000000000000000000000000d4dc7b77ea5235a8eb179c4916a76b3977c19f1100000000000000000000000024303125c37d20aed42317386c77eea2df5c8e9200000000000000000000000041c6741f56893fc194384f44f8d647485ca26fe70000000000000000000000007adaadc7099196846df4ad8103f6cd48cb33efd900000000000000000000000008f89fe96a9e81dd0383872e2cc430ceb0c8ad690000000000000000000000009ddc20de50f1a725cb142ffda8e9bd277127147a000000000000000000000000a4bd317393c062b0c1c3246a52233c1f685fcd29000000000000000000000000d6e2ccdedc1fd8069a84a91446ec4347be7dff0f0000000000000000000000002133c00583542f1dd9600fa214597a5449c0f12e00000000000000000000000006a9e25a39421e856dfe01ad8231db27f4d72cc90000000000000000000000005600e563ab9ba507a2e5c60a951e7fdc9414def9000000000000000000000000912e1ad90c6a9cf3d361a7f6ed08dc732ab065ff0000000000000000000000009388b2c064a76fab2111aeeaf82e8fbe457910d1000000000000000000000000ea9c0592f17013067c08ae8a5c53bc6bc8d64ac9000000000000000000000000761449bd0c332009b39108b9968ab7757198e33f00000000000000000000000082bcac0a9f986bf12ad52a1c7eaa5c00c3a8f69f0000000000000000000000004b652f001b80a65b06f27f83979c3e5312bf922c0000000000000000000000007f7b907b97d6637cfc4be9a16b5c5b67af518c380000000000000000000000006a4fc0fb91b94d3e7bb81d294cf1056f3ac4e2900000000000000000000000002ac995abc2d84bae3a316ab9e325c706b165eff50000000000000000000000003581078ccda47251efb8c15fcccd4bab8e356fe0000000000000000000000000f5d867ee0d6b4b9225623a1730c9ed9a7e9f45f7000000000000000000000000d4f0e0ae034dbe3e8e0120f9e9332fa0968ddcf1000000000000000000000000fa311b5c8704df69c00776d3665e67f2dc792d01000000000000000000000000a816abafc7cf48e0b699c4b998b809144cd554da000000000000000000000000eb5f8a144802ce2ddbd38afe7891a25ca6bb516000000000000000000000000084a0aa73321b626ca760a1753fccfcfa7e8cba620000000000000000000000002323a59ee9b9eeaf8f6dcfe5611dddfa04040768000000000000000000000000bc0f53766729b636e3607a32c9e84c08e282fd5f0000000000000000000000007de9213b7d6ecbdd2d2494d44d3c1276ad6ed04c000000000000000000000000aebf3503b52750dca520b94bba3a201ad797d959000000000000000000000000f220a23ed44e085525640ee580e0f6aed5d07575000000000000000000000000277c9e70df203e3838ad6a240d280e71e7ec1bc5000000000000000000000000942cbcbaa6d36cb23dd18515e47b55863ffbe7a9000000000000000000000000c57b23df461a98d7ef84a0a298b780823d7ae8eb000000000000000000000000d4d8c55df0651accbf58f1176d52dc26b384019d0000000000000000000000002a6f3c1fc9203da5fe04c9b66ed8165ae7dd75ae000000000000000000000000b11ff18fbff2047dfca2653a13fb1f57407bcb5700000000000000000000000076d31af2631c4d0405ae549cd297d5b143ff49c30000000000000000000000008b3c02cd8366b03222ad7bc173d243c9a51e37d4000000000000000000000000b0b0b5f5d10c88d14f183afa18f0b7a9573a2d710000000000000000000000005c370bea2d483e601753f3bd129ba8cbe11220cf00000000000000000000000059fc19fbbfd840a2cff80a782a9d7cad587c770e0000000000000000000000003fb1febcbdf5fa026573ceb64701153fed97c917000000000000000000000000a1e695af21375a8224eafd96c70accb23014514a0000000000000000000000009e27a870df7b6e953dafe4873092b4d7468a3616000000000000000000000000e6b8a7e1e8ddc83f120368c7559a6e929eefd9d200000000000000000000000078f1ef17ff766c10e5e9deb07181997d72a79d47000000000000000000000000864ecd0ef13acc414fa54c6b11a2a5d597b851ce00000000000000000000000051338f3632621eded318ea159e79d75a9f439112000000000000000000000000cc8ecafeb002b5dc66ab605ec9d0a4d4f9b4074a0000000000000000000000009307c853c6da83ea1672f915091779f05353e27800000000000000000000000096225d8bb655152d19259a3cd21700ad616b4850000000000000000000000000c83ee61857b3a01ee59c4a233aef2854b82436da0000000000000000000000002c5a55c4d923722a9ba8811d89410c17dd024182000000000000000000000000a9da28c9a506337ff9aa1f30170f66bb4b846f83000000000000000000000000605ff3273b82baa62fe302c3c9f948451f9cfe37000000000000000000000000d107ac33beca697a41aefe32b8a21525d6b91f9e0000000000000000000000004222ee2e920d40c2fb42450512f297b92348285e000000000000000000000000bc5cd06662ec889cc23d7d2249b2adaefc16a1eb00000000000000000000000034b9ddc5c95b6e448d04591413d17d1e1c08c65c0000000000000000000000008e14f5f5b27c029d00758ddc979e56c2a1ba4b8c000000000000000000000000c8de86eff14453c4d51ac263f2c844a366a1c586000000000000000000000000689698f08964e1bce27ce57469d6677cc3b1b83a00000000000000000000000075f1da575a3e7d0cc1eee5475d4b2d2d98ea738a0000000000000000000000000c6499541a6fbda6dc51f8b3bd3377d939517e320000000000000000000000001c7887f28b451263aaf00f22fefe2685767be436000000000000000000000000359982f4cfa59ade3f248c0427e044cba599402f000000000000000000000000bdc6e3dec73426f2cd636dd24d06ff0f948fa0a60000000000000000000000004eaedad58842ae4a2822dccee8e2bfa84f67d511000000000000000000000000f6c4d8558ac31848016ebfb20d47a37ba5bf63c3000000000000000000000000d1bee7ea0cbab932f67aa3211f9f552b87946883000000000000000000000000c0bc2950345aa13837fd08d26764f04f014c5be300000000000000000000000020dd650c5eb5bfa79461fe696c6f9d1539ccbed90000000000000000000000004911771788fe121826294b2f622cd15be991085a0000000000000000000000009112b8288bc9c8c6c7a60a8a2502273167e65d44000000000000000000000000039cc6dead9fca3be5c543fddfaa0c651acb6a1c0000000000000000000000009d33deea19a73a73732456adebf389494bf74d09000000000000000000000000804f1ad39faa8f127b8163f7d4dfcdc868fd341c0000000000000000000000000a767de33ff4612deb6e5ba230ed054e32c079fe0000000000000000000000002d37eb9e77a25104b265d4fe58e44bcbe4e2f1b900000000000000000000000042b0002ac03ad17aa2f94354fd46528f898af87000000000000000000000000056481b9f72982f9004bdfd07df94432caf4be674000000000000000000000000fe01fd60e2e61a8f5685c03e6573d1e2c75268640000000000000000000000005e90539cbd4ed08dc1ac0f4d7923dc709bd94c2c0000000000000000000000002d3e4ab196ca891981c0d1513bb0b0f9e2463ad50000000000000000000000004a713b6ef548bed6ed80c01274018cba8a14cab5000000000000000000000000c5656b677a15657c532647d892c045f1b8c268b10000000000000000000000002ca526fc340eb369462962555f76584201cb2d77000000000000000000000000ac53cbd7c7a2bc1552cb3174e7557ac4e2782fac000000000000000000000000c4f1abb1e68bb9fea11b75dd41ec63c4895f936f00000000000000000000000041ea2251a0f02a8983b72e9561e0b0a690ce90ac000000000000000000000000e83e55839674409b5baedc908958fd526761b82d00000000000000000000000003ebd98e50374a445f79ce5033ae963cc1905b8f000000000000000000000000efcc8ddd0943d6b7e251115c3b45a1066332f0710000000000000000000000009137437ffe038f6ff27d3a008871d33cdd4e057e000000000000000000000000ef57c425f34cd9f6d4e0672126e6198929a97ebb000000000000000000000000b9bd44f83b60b1c82a1b6a77f8e160b6dd8990fe000000000000000000000000b03bc882be9d218eb1823483827fd45bb7a8aa28000000000000000000000000cb82d4ab53cd71160a48bf0c085a9b2e7d2957e500000000000000000000000033056e6e3e3b79e8357f32834a9f1d9b496bd39b000000000000000000000000ea75c633c1f7cf3d660814d3411753a731ee2154000000000000000000000000bfb1737380d80a0d84d91f2080dc107fd8b68db4000000000000000000000000480dddf328d970cf161d9b43847de3c248451932000000000000000000000000e12213b06667748a406822bf5693ae2168cad28e0000000000000000000000007716aa141f71deda152e1d39ff0d6f7a07d484fe000000000000000000000000235c235c0b797372009b4bf1e63123910456889a000000000000000000000000964aa35032413cd305bd9f8467e908a356507213000000000000000000000000149eadb34ea13de8b8d4233dab47402f9db577a40000000000000000000000005240f26d821303290523c511ea46bb23fa152cc90000000000000000000000004302b6d997fea9b3942617313e689ee8e38ecae90000000000000000000000002b8ad80583ed774c28c54c800369d80d4fb94d39000000000000000000000000b7be475d2c4a7a1f932e706cc7ee70af52db89a40000000000000000000000000531aeccc21feb673d94ef78279bd87187658e5a0000000000000000000000006514ea7d7eac99267584d02b9abf34183abc814f000000000000000000000000cfa958657656a76326c5d18717ea84bd79a3a0f90000000000000000000000004a5ac131c22c3ae2b1a265dfa06375d9af3607f60000000000000000000000002b8b4aa25b8730174ae6d43ab2d431b39edfe932000000000000000000000000d63fb6749fbe8afc093c8e999318513d7c5341610000000000000000000000000971e70a27302decef8f27d30138842f118fe0d1000000000000000000000000821d89f6ca88e8ad19b9b0eaf67bce2b357076fb000000000000000000000000421886053e08c2da73477e1f573677bdd99c482d000000000000000000000000275241ff53ddf0ef59298a8b976797456adc62e50000000000000000000000000d096646bc0fc4040d9f4b5d7b9f861553e11ff3000000000000000000000000f0dbf1c14ddf00bc451aada2c7d4a2533a36573e0000000000000000000000005baefe88ea96124ff9dc338c892ea437f031bbf600000000000000000000000087965bcce7c86d284fbd3a7fba4e2bb1f7030a8f0000000000000000000000006e75eed154c473d00b763796855a9b860ab552c90000000000000000000000004e01438fa7ce59626f720b1dbb46474a76041751000000000000000000000000a896b7ccf360b5602d8b25ec69e5a272f2efe22a000000000000000000000000da06bb056e61beceaf4661901e7b335db63e6a5d0000000000000000000000004d94d1dad0258811ec98a22dcab7ccbc1fdaf95b0000000000000000000000000ee68f1dd9a62765384a42adfb5c78aa10736393000000000000000000000000c41335d84069a6f7373e95b6cccb57f932c4bb54000000000000000000000000c7ddb1764ff19f6cffd6460df81a67ab88dce0fe0000000000000000000000003d66a1e14e8f4dc763943e55603f7d17be7815270000000000000000000000005ac8268720450d150fe3c6bfc67818bed61e78d0000000000000000000000000a12ea2814e6e3e81a9834c77b8613999886619f9000000000000000000000000039e77c98e622c72c24dadad19d4f311262d29e1000000000000000000000000231de04e5f240af53f6c87101a6d9c0dffa07cae00000000000000000000000093a173c315e2e31ee7d6b5015e251d0560f6b42a000000000000000000000000b87cc2e44b467cec798ed0134181fa66de2a951500000000000000000000000082093234d698bcc0b8706267f7a4bd91131d1e76000000000000000000000000c269cc7562513f737c7f71e9c158015f6e411dd0000000000000000000000000477e7af96abdb38917d5b75d49f749c20b169b8d000000000000000000000000745f98b45e75b0522e4f82a1ca00ad83aaa6ef080000000000000000000000000cddfb7370a1d5e4b34301a579c94a53d08c1f42000000000000000000000000ff7d4a0b0ef68e8fbb66bdda41d8254fea3741260000000000000000000000003b02726b5c302c55f7f1e9295cb640a4016f99ad000000000000000000000000c8f733aabd80d5a26a3cfe8d981d52b2a1fd22230000000000000000000000004181a27c9fc8aedc1a7e0b703e6e557739f3784c0000000000000000000000006c7b8d78686d443b6e5eaaf04bda8920343162900000000000000000000000007afa9ddb53588735eef52d70cadc7859a01ee72c0000000000000000000000009c9df94ca94a758c573a956d0e73d4e1f0ff870b0000000000000000000000000dbe07a2f43198afe056cbb0d599d501be51f8ff0000000000000000000000003a1ef0c8e5c753ba392fdfa64163788cdaf05d10000000000000000000000000c514f04e95a5f64e7389b2faec9437c75cbddf5f00000000000000000000000064406318fcda66ec8ded6cc3f49096ecc8bebb6c000000000000000000000000a5349bdf90acf77b124150b30993f8b7095fd0ad000000000000000000000000034452203c44a24e05cef7f9a561b2fd30e59ba3000000000000000000000000e2a584a001168db49681f686548e9f0308880de4000000000000000000000000ef9ae945e041a4818b0f6be95a70258821b60b3f0000000000000000000000007bebdba9aba1fe903ac8169bde80a5d5d347bd1c000000000000000000000000de18fd86c7326668201eb3272cd496b117ffb5268193a026a0d8a3226a20d314f7feb037892f6987b40c8aeaa2d2072fb618351d476d3aa014a64c7514f0fb56727acaa4696a0c7f5e3b68170196ad9051598a55abe8cb9ff88c82090485012a05f2008301bad9941514c766127378ea9653f9f4428fe25f3fd256c380a4c337aa5d00000000000000000000000000000000000000000000000000000000000000058194a073bc6e8844091edbeb9547115bd19ed86ca3f8c2a505df1385a07e040f7dae77a038ebcb8f781d23870c2d318a0ef51966010d848eee41049bc9cc12431231bd03f9018c6085012a05f200830502a29410ed43c718714eb63d5aa57b78b54704e256024e80b901245c11d79500000000000000000000000000000000000000000000001f3f7e20b0d623d34b000000000000000000000000000000000000000000000000011cb17117643ac700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a6bb86ec5fab0652745e73f78ec81b306d623bad0000000000000000000000000000000000000000000000000000000062c9fbe800000000000000000000000000000000000000000000000000000000000000030000000000000000000000007fa6f63b11cc1af508cd19ba823853d6aacd9d650000000000000000000000000e09fabb73bd3ade0a17ecc321fd13a19e81ce8200000000000000000000000055d398326f99059ff775485246999027b31979558193a0f531fa0268b876f384e4463dc06b699655622ad04aab59ed44d8b2bfe9a5df38a02eed4e0006af85f38154295bd30f18813cc69b9eb22e2ec42b8217c83ecd0a50f86c8203bf85012a05f2008305bcba94ffe811714ab35360b67ee195ace7c10d93f89d8c8084cd5e3c5d8193a09062c507c3a185b1efb76f54d5a0c4062edbcfbd2df55635ca8b958c3fc1e110a0732fcf4f68d7b40c00b359e913e6d64d946599c919eea831ddcd425e53adcc11f9016c3b85012a05f200830ece529410ed43c718714eb63d5aa57b78b54704e256024e80b90104791ac947000000000000000000000000000000000000000000000000532ee0b60326aaa000000000000000000000000000000000000000000000000027bbf0357d0b29bb00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000bc5cd06662ec889cc23d7d2249b2adaefc16a1eb0000000000000000000000000000000000000000000000000000000062c9fbeb0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c001bbe2b87079294c63ece98bdd0a88d761434e000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8193a00bd0c48c86cc6f8e7af681161e89973210398509731210e9f85ed82c60566097a03b26f35e2403d3e3c94e3cfee0bd10a4c02e6e763f4f3e7ea9cca088fb403577f8cd8221a385012a05f200830168649418b2a687610328590bc8f2e5fedde3b582a49cda80b8646ba4c138000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000014e508194a08cbc05ea58be6958085abdd77d9a8ac0380ac8fdd302c928b7a9024b1cf1a9eda030f542474a30bb213d4ffa8b4b4e22287699b2a4af2dc45e78c025aac374a7f8f8ad8307322085012a05f20082f6cf946d349929affb41ba0b542a5981b24b426badf0a280b844a9059cbb0000000000000000000000005e41964a17a07d75909cebd1833b3fe691c120740000000000000000000000000000000000000000000000061b41918f6f3a50008193a00fe74187f81fc26892327e3f940a7cb876e4677828e6eec6c5f9ce2ae7da66e2a0727b7e41bb6361eb41c4b6e71111c229b19b6c691f28bbc94af69653d95953f4f8928201e585012a05f20082c2f2946bdcfca87765d14f36e99943fc5d82c2292f8b5d8702d79883d20000a475ab6937000000000000000000000000b6c4e248289624f267da5ec78395e910505b52c18193a0e1f5a02ee0cebda214b70f99cfdffa85146820e24dd33f6cd8916cf344a2a056a02addc9981e2701578868c0d00059997a3f10197b62a192ba3b9a0a1a093f7f3bf88b81b185012a05f200830115c294e2d26507981a4daaaa8040bae1846c14e0fb56bf80a43ec862a80000000000000000000000009eab088fd02c215150c491a8e90a8c93ff4cb9ad8193a0d5e2480971c2c3b6ef342b724bf9e04f189854b3cb83e361c0c366ac510098c3a07695538f9aec53cec671400f98200e3285a5f6efd0f7ac05be74e46c26076b45f88c82085385012a05f20083061a8094a4b20183039b2f9881621c3a03732fbf0bfdff1080a4b6b55f250000000000000000000000000000000000000000000000056bc75e2d631000008194a060fbcc13d3f1ef99eb379faa4cf8c93e080b26a3adb2999f385861f6d22df151a051fc83e5f8ab3c2ab18291530170abf47d0dd76c850f5f7cce7312525e38e449f9016c0185012a05f2008302d3cd9410ed43c718714eb63d5aa57b78b54704e256024e80b9010418cbafe5000000000000000000000000000000000000000000000524c659227f84a26b370000000000000000000000000000000000000000000000055add850c1c22d5b700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000a4e30002d8a0b1e1e438e91f3176fab02bd231fe0000000000000000000000000000000000000000000000000000000062c9fbfd00000000000000000000000000000000000000000000000000000000000000020000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8193a07f2ef64e9321939ede7a88afb6f9c730086f41c22d9aaaeb853c929b61dd3492a07a438e1ad15384c9567bc8ff3a33766a927eff993ad1158405cca920016a0be4f9018e82268e85012a05f2008307a12094433cdc8215c99f778df1c7cd9d725cb15cfdbda280b90124bf57e754000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b00000000000000000000000006cd679121ec37b0a2fd673d4976b09d817918560000000000000000000000003a6d8ca21d1cf76f653a67577fa0d27453350dd80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027068194a02ca16155009a9525b2a03c2b4c12302372093090a4f1a45a5a67e82f718584baa043d44ed16b59e5fe2a1f5669510385777c2524c1762b75c1e4000401db461aeff9014d8213ee85012a05f200833a6d6694fbaebcb3c22ba9acb3a64eb0be82c9a46c56deea80b8e4444412c50000000000000000000000000000000000000000000000000002540be4000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000026f7d99c7f6c65857ac913a8f880a4cb84032ab2fc5b0000000000000000000027108ac76a51cc950d9822d68b83fe1ad97b32cd580d00000000000000000000270606cd679121ec37b0a2fd673d4976b09d81791856000000000000000000002710bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8194a00764603a87e1937647f04cb8906e3160642d77bbb84f57e136872fb2c6c33b0fa07f093156f850ceea1a01db5ea42a5c6640e06084f4e80fd054e98e7599101f25f9014d8213ec85012a05f200833ab57794fbaebcb3c22ba9acb3a64eb0be82c9a46c56deea80b8e4444412c50000000000000000000000000000000000000000000000000002540be4000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000026f7d99c7f6c65857ac913a8f880a4cb84032ab2fc5b0000000000000000000027108ac76a51cc950d9822d68b83fe1ad97b32cd580d00000000000000000000270606cd679121ec37b0a2fd673d4976b09d81791856000000000000000000002710bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8193a0a6a9af6acd697945b75ad8e942b57094b2af5f245dc022efe66295f6f4943c5fa00e93885945569a6595266252e43e5034e771311376b9896827c3c550094a0202f9014d827e1b85012a05f200830a37a094cf3cf62003b5c2a33f3a647418646305850743aa80b8e41de9c8810000000000000000000000000000000000000000000000009e7045f4811490000000000000000000000000000000000000000000000000009e748040f85cf036000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000018005400320000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b00000000000000000000000006cd679121ec37b0a2fd673d4976b09d817918568193a0d08f31d3d3539abd5d05768ae8c746185347a5c5728bb883b56a64186507ae24a021de4bca14467d5729b25911ec31ef8fe41fcefd4acb7e00ccf30a699363cf8ef9014e8302a44f85012a05f200830a37a0947918fe9f8411c764681ff34cec19e372ce1de6ed80b8e41de9c8810000000000000000000000000000000000000000000000009e7045f4811490000000000000000000000000000000000000000000000000009e748040f85cf020000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000018005400320000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b00000000000000000000000006cd679121ec37b0a2fd673d4976b09d817918568193a0d01376ad23fffe15e6ce96f1b40289ccc6a9dbed78fb4bb0fb240180c7c4eadaa0188f47fd1c454532d9ede92a1eaac83b774c20fac1a1500d267f53e07e136bf6f9028e827a4985012a05f200830f4a85941420a3939a43962480ec1b2288cc5aa27cdeac1d80b90224a26c58c000000000000000000000000055d398326f99059ff775485246999027b31979550000000000000000000000000000000000000000000000912ac9c06fb300000000000000000000000000000000000000000000000000009138aa77235a68000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016b9a82891338f9ba80e2d6970fdda79d1eb0dae000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c00000000000000000000000000000000000000000000000000000000000026f70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d00000000000000000000000000000000000000000000000000000000000026f700000000000000000000000000000000000000000000000000000000000000000000000000000000000000001483767e665b3591677fd49f724bf7430c18bf8300000000000000000000000055d398326f99059ff775485246999027b319795500000000000000000000000000000000000000000000000000000000000027068194a004073be77bcaaba451bd15d008c2adfb441b71b62f449e8acbe80ee41055e58ba04aba1f5a0d2a754fd28488574fb79b046b49e98ed3a58e226beae61c03e567a7f9022e820def85012a05f2008307a124944e26e121b8f566e8faf38b9c87106573655a267e80b901c4d676d1c300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000001f54f09618444345000000000000000000000000000000000000000000000000000360051c896000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b000000000000000000000000bf83ca11abc62447226f6b3566918d3594ba38038194a07e92befe7b52d92ccd7d10599bb4b6bbd73c7e04a270230af1ebaf8c1f3a94cca0313ce197fb6c855244292c559783c6b4f18a7e87263d0991ffbe257c5700e9d5f9016e8207ca85012a05f200830c350094ca4533591f5e5256f1bdb0f07fee3be76a1aae3580b901046326d217000000000000000000000000000000000000000000000000000000000000008064d77a97d968aa94060000000000000000000000000000000000000a001900010000000000000000000000000000000000000000000000009e7045f481051ea70000000000000000000000000000000000000000000000009e745eae06d740a70000000000000000000000000000000000000000000000000000000000000003000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b00000000000000000000000006cd679121ec37b0a2fd673d4976b09d817918568194a0200714c8913784b6860b6d158896ead0b7dfa01506548dbc5b9532d0d7c0043aa05002ac0c71d6cdfc84fed9cc9e3f1eae8a8a4d59c8f0d0df4346aeb7aaa60d7ef9016e8206a285012a05f200830c350094ca4533591f5e5256f1bdb0f07fee3be76a1aae3580b901046326d217000000000000000000000000000000000000000000000000000000000000008064d77a97d968aa94050000000000000000000000000000000000000a001900010000000000000000000000000000000000000000000000009e7045f481051ea70000000000000000000000000000000000000000000000009e74589e35e226a70000000000000000000000000000000000000000000000000000000000000003000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b00000000000000000000000006cd679121ec37b0a2fd673d4976b09d817918568194a04fb29b7945ad642dda67f9eacba678ad6a53f11347eea469f73112fb7e808e1ca06a67829efe8b60de99c105ffdf6f6dea51a9c50513e6c6c37194dc5ecc7513b1f9011782132885012a05f200833d0900944b7b99bb6788c001eceb2369497e348b56be1aab80b8ae258b1b69000316b9a82891338f9ba80e2d6970fdda79d1eb0daed99c7f6c65857ac913a8f880a4cb84032ab2fc5b1483767e665b3591677fd49f724bf7430c18bf83bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8ac76a51cc950d9822d68b83fe1ad97b32cd580d55d398326f99059ff775485246999027b319795500190019000a000000000002000500010000000000000000000000000000000000000000000001762708190d3a9694818194a044bb3709a63649b57e1f6b96fee409a50d9077532b2a45b88baca48ef0fb1f44a07ac17f969396bbaa19aeb5d1802a125ad4e141566a4d288a0de0bbf80f9b8c76f9016e822bbc85012a05f200830c350094ca4533591f5e5256f1bdb0f07fee3be76a1aae3580b901046326d217000000000000000000000000000000000000000000000000000000000000008064d77a97d968aa940a0000000000000000000000000000000000000a001900010000000000000000000000000000000000000000000000009e7045f481051ea70000000000000000000000000000000000000000000000009e766c9e2acc5ea70000000000000000000000000000000000000000000000000000000000000003000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b00000000000000000000000006cd679121ec37b0a2fd673d4976b09d817918568193a0bc35e25b7ce68fbec8b1e44ff061e96a9147ec9c873b064cc9e66d4172396219a0790143869cb86e3e8531980a67932cf71075f78663567fb71f05504b5c876098f8ed82057f85012a05f200834c4b4a940000000000008afdacc486225455281f614843e780b88400000002000000000000000000030d40bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000226f7d99c7f6c65857ac913a8f880a4cb84032ab2fc5b00000000000000000002270606cd679121ec37b0a2fd673d4976b09d817918560000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d8194a05e836f8025ac817926fafb34162090017df95fda2b3a09c55b61174779669166a0171976c80bdee525eee3d148dc7b86edebbdd5d0f52a0ed18a1272cd370c4aeef9010e83011a6885012a05f200830be6e094275f8cde216dab640ca2b125fe0a7b2d3fdf110d80b8a4627dd56a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000510500000097188da10b9bd66c00000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d0a0070995581de02ea7c1957feb53e10e5d9b25b09561901afc84d7c9a6ba705a8026108d3add1471990ed5b0000000000000000000000000000008193a06a877c6312dbedfcd6cc49f1ce7f26374d9f841667746a8c59d0064e735601e4a0481a54b57984c7fa52a44fb78024f4af7d6f3c8cd74e08e4a97d0c501af2e187f9016c3085012a05f200830c350094ca4533591f5e5256f1bdb0f07fee3be76a1aae3580b901046326d217000000000000000000000000000000000000000000000000000000000000008064d77a97d968aa94070000000000000000000000000000000000000a001900010000000000000000000000000000000000000000000000009e7045f481051ea70000000000000000000000000000000000000000000000009e766c9e2acc5ea70000000000000000000000000000000000000000000000000000000000000003000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b00000000000000000000000006cd679121ec37b0a2fd673d4976b09d817918568193a0c76e7468ba202cc4ef285664f208a8593f342b2673798c1d08399ed4a7611fd4a015fa5d9b6d41d15e0e59d19b1f9256caeaa6e4450090051bad03aacaa6449f23f9012e822de485012a05f2008401312d00949f2fdd8d7201f3c8095c53af8edced0f63539f8080b8c4ac543f070000000000000000000000000000000000000000000000000000000000000060000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c00000000000000000000000000000000000000000000000000071afd498d00000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b00000000000000000000000006cd679121ec37b0a2fd673d4976b09d817918568194a0a5eeae8b13235d5cec048d40b18c23d51fde3873b7dec904f69206bf4c437fbfa0333cc2884f6c20d86f8045732a5d8e4e39441c26c55c555f88e0f6c1171911cef88382048c85012a05f20083122ef3948dcb108afc5106a56b8945cef44134e2919a8b93809b3000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b0185a600108194a0c623c7afba732d086a7a03cb2bffaed9aaf57aee091bf1ca6427c34156c1b342a00a2618957f51ba34c45bf08ae2972774d9b7fa93d9a48e398ee01f23ed58c289f8ed82051285012a05f200834c4b4a940000000000008afdacc486225455281f614843e780b88400000002000000000000000000030d40bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000226f7d99c7f6c65857ac913a8f880a4cb84032ab2fc5b0000000000000000000226fcbf83ca11abc62447226f6b3566918d3594ba38030000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d8194a0e33f89961970cd9a6d0840869fc258a402868797983baed8c77773575e5e2145a02384fa1c29554006a439b42dcd5648608878cc36155f68e06a4b9dc63e88edeaf906ae820b7085012a05f200830f424094b052f9179b2530cb4aadacc27ae87d6186af328480b90644915b4c3e000000000000000000000000000000000000000000000001c6c0611eee2a500000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000000000000000000000000000004c0000000000000000000000000000000000000000000000000000000000000054000000000000000000000000000000000000000000000000000000000000005c00000000000000000000000001e38eff998df9d3669e32f4ff400031385bf63620000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017969fab00f00000000000000000000000055d398326f99059ff775485246999027b31979550000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d0000000000000000000000000409a248742bffb605c76e456ad31b6bd840b11b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b1ae4d6e2ef50000000000000000000000000000000000000000000000000001b184ab4a13fed4000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c55534443555344542d6275790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d00000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000000000000000000000000000000000000000000300000000000000000000000016b9a82891338f9ba80e2d6970fdda79d1eb0dae000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000dd7d4f70b73c0000000000000000000000000000000000000000000000000000dd7d4f70b73c0000000000000000000000000000000000000000000000000000de20afafb395b8000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000dd7d4f70b73c0000000000000000000000000000000000000000000000000000dd7d4f70b73c0000000000000000000000000000000000000000000000000000de20afafb395b808193a0dc142176a53181ec16cc3476f5f0bcaba0f75a0b1c345004c5218cbd8a57e7eaa0645e0272c509f1232d05663fb1130efd5bc7e6d419b4d4779d9c0b0fb3b303caf89a820f7485012a05f20083122ef3948dcb108afc5106a56b8945cef44134e2919a8b9380b21001d99c7f6c65857ac913a8f880a4cb84032ab2fc5b58f876857a02d6762e0101bb5c46a8c1ed44dc160185a60185a601008194a0a4aea26a7b317ad475844fda895c815f97ee9991e260e91ec2044c3b84c67552a06cb1bc02e655cc23cf7f5582539c78a50a434dcd293a2cfb8169363c18784850f9040e820b9485012a05f200830f4240941303399489b704bb25d4a43f623988ce8aafb37280b903a4661fd827000000000000000000000000000000000000000000000001c6c0611eee2a500000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000409a248742bffb605c76e456ad31b6bd840b11b0000000000000000000000000000000000000000000001b1ae4d6e2ef50000000000000000000000000000000000000000000000000001b184ab4a13fed400000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c55534443555344542d6275790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d00000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000000000000000000000000000000000000000000300000000000000000000000016b9a82891338f9ba80e2d6970fdda79d1eb0dae000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000dd7d4f70b73c0000000000000000000000000000000000000000000000000000dd7d4f70b73c0000000000000000000000000000000000000000000000000000de20afafb395b8000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000dd7d4f70b73c0000000000000000000000000000000000000000000000000000dd7d4f70b73c0000000000000000000000000000000000000000000000000000de20afafb395b808194a08c45ec91a2e9f607f1e9889835ca39f2dc5b345610b2f7d6cb7228df9451ad10a0323ab755c5787902dcdd0738d8476d3f4badb21d075fce8e4b5804470151ae16f9016e82c91885012a05f200830493e0944c26b595169879e255a9e06fa3177a2e8c8c505e80b90104a36aa1aa00000000000000000000000000000000000000000000000000000000000026f7000000000000000000000000000000000000000000000000000000000000270600000000000000000000000000000000000000000000000000025844398d400000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b00000000000000000000000006cd679121ec37b0a2fd673d4976b09d817918568194a08fc5fd64835c5c57a28e7adb5da352846ec5d2d7cb2b2c9eb9ab9a04b31f2ac5a03d56ed41082e5fbbb996ddb665e22ee620ec73760039a9d47d6568d8bf0892adf902ee82143d85012a05f200830aae6094c6f0cbc36575ba122a0b23d4b78c57ba5cc67b1f80b902845866cc8e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009e7045f48109869b00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000000000000000000000000005cd6e6857ff68b975a7000000000000000000000000000000000000000000058d50e8c3e5b2db03832100000000000000000000000000000000000000000000000000000000000026f70000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006cd679121ec37b0a2fd673d4976b09d817918560000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d000000000000000000000000000000000000000000026329275d0eb8457fa0c3000000000000000000000000000000000000000000000282be61bc70835d26f80000000000000000000000000000000000000000000000000000000000002706000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000008194a0e62d83c5a7be81bfa6e7ee9bb5ed677fea7ce44fcfaa30b0a841683fe4974830a05fd37d471f10adae3d715a73010380ac7059e21ecdc01c185816a6941f52a6ccf901ae82312185012a05f20083041eb09439dd07ac211c33e796e6d89c4df9481e0b60ecfe80b90144f3bca872000000000000000000000000000000000000000000000001606e8bf9057ddf9300000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b0000000000000000000000000000000000000000000000000000000062c9fadc0000000000000000000000000000000000000000000005ceced6e3f86e37553a000000000000000000000000000000000000000000058c000066d745f1acd38e00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d8193a01bb9be6c8e96e04a8c1052aaa9948864957cd77347797dd65bbe14063aab71e9a07538f345fc06f8d93304b1383a297688fac94192cc1ced7f1c271687c704fa34f9016f83016c2385012a05f200830493e0944c26b595169879e255a9e06fa3177a2e8c8c505e80b90104a36aa1aa00000000000000000000000000000000000000000000000000000000000026f7000000000000000000000000000000000000000000000000000000000000270600000000000000000000000000000000000000000000000000025844398d400000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b00000000000000000000000006cd679121ec37b0a2fd673d4976b09d817918568194a03294603596ec767e592eae6a0b2ac6e4da6643b2e9846b9a708fad39be8af83fa0348ffeb178695d2291dc00a9822e30fd60bb4b4c749f53e9de77500838443a35f8d48333d79d85012a05f200830c350094a8cc4b94624b31465e777f06ee3591fd5afe582180b86a985ea7050000000000000000009e7045f48116e750bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c02190100004871e5d16d35ef4c5e2ea27277915a5a581f00910a0000009720fd2c295ca235ef7b3dcf9a2c6ec4f3d4e49c00000000000000009e71c6377381cf508193a01c91bd765c3c6f4f4bb79dce94399db34f58033bc37cdf1511404664a591fb6ca06c91c5f6d54c19d902da42d0f1e75c1cac0c1189d383acd198e5dcb89d323213f9016e82806385012a05f200830493e0944c26b595169879e255a9e06fa3177a2e8c8c505e80b90104a36aa1aa00000000000000000000000000000000000000000000000000000000000026f7000000000000000000000000000000000000000000000000000000000000270600000000000000000000000000000000000000000000000000025844398d400000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b00000000000000000000000006cd679121ec37b0a2fd673d4976b09d817918568194a0908fd758231b7e42efe85e67fff4e2fb62296972b22ad021b9dd8a5ad5b70696a010e3dcb14786e1ad085f85ce9d2a508c9f6f0871747077f814d784877fc24efbf9016f83010c0885012a05f200830493e0944c26b595169879e255a9e06fa3177a2e8c8c505e80b90104a36aa1aa00000000000000000000000000000000000000000000000000000000000026f7000000000000000000000000000000000000000000000000000000000000270600000000000000000000000000000000000000000000000000025844398d400000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b00000000000000000000000006cd679121ec37b0a2fd673d4976b09d817918568193a01a1a62894b1890d7191288e4ed851d1722539929dabd5e2f4c95045fc3aa6e75a0795a959fc1b23c78cdf5cbcd2edcd90cb0e79eae403a89664833fdc21886992cf9023082cc4c85012a05f200830493e094ae4b47b8e005f0c6aa55bd0e2790a80e6e602843826a07b901c41cff79cd000000000000000000000000a639b012ce0e1d81eaf2efd25fb01c49a81315900000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000014467cefc7b000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d00000000000000000000000006dbc4fe79e2541b03fe4731b2579c0b7f46f09900000000000000000000000000000000000000000000000000bafc24672035e400000000000000000000000000000000000000000000001c88194dfc5a391a40000000000000000000000000000000000000000000c50db921c52bb5342cf00000000000000000000000000000000000000000000000000d363cbfdf255728000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000062c9f79a000000000000000000000000000000000000000000000000000000008193a043e9096de2eeb1afa59b0b7ccbdd102e3ee2cf19e2c1c576c947c8fcec5cfa77a07bcdcaedc87751d0b7c587f2d4b783e6e68fcda51aab6f4dc2f122526fd73121f8ac821d0785012a05f20082ca8994da3d20e21caeb1cf6dd84370aa0325087326f07a80b844a9059cbb000000000000000000000000c8301fd0f8cc0170218423ca7bb1ef1eb736dcdb0000000000000000000000000000000000000000000000000002f01450db90008193a0e7d7863afb9adf277be7744dc5fd2986709ce05a053a806ee63f9645d2fa5a37a0030e65c973c33a4eaafdb9902e16b5b82431624502307ad24bac63888fdeff6cf9016e824ac785012a05f20083030d4094fcc43595bdb1e030b09591badc8bfa5cdafa523c80b90104d9bcc547000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000000000000000000000000000000e9535be04b5ae00000000000000000000000000000000000000000000000918ddf53c853ba1bc000000000000000000000000000000000000000000000002dc4f994272ccb2e00000000000000000000000000000000000000000000000000000000000001388000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000016bcc41e900008193a07919015167505a654550fed21371a478410429675fa3c0370861f9f1e365f859a049c7c17f17e7218d68582accac67ed5080f240bc1a079bac62838ff3a2d15387f9016e8261e885012a05f20083030d4094fcc43595bdb1e030b09591badc8bfa5cdafa523c80b90104d9bcc547000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000000000000000000000000000000e9535be04b5ae00000000000000000000000000000000000000000000000918ddf53c853ba1bc000000000000000000000000000000000000000000000002dc4f994272ccb2e00000000000000000000000000000000000000000000000000000000000001388000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000016bcc41e900008193a0a12f12f40990889edeb29453c51a311129889bdf4a37462ec3ddd7ad247bab32a0626a6de3183311d8000c3dcf3155ee5c37e9dcb400561e83410925cdd3ea3b20f9016e821dbf85012a05f20083030d4094fcc43595bdb1e030b09591badc8bfa5cdafa523c80b90104d9bcc547000000000000000000000000d99c7f6c65857ac913a8f880a4cb84032ab2fc5b000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000000000000000000000000000000e9535be04b5ae00000000000000000000000000000000000000000000000918ddf53c853ba1bc000000000000000000000000000000000000000000000002dc4f994272ccb2e00000000000000000000000000000000000000000000000000000000000001388000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000016bcc41e900008194a034e2bb016b0f82bb12b34f1aee38c1682a240ae9e721147a8ec93781510844e6a06973f5f7cb76b30cda31e5ddac9a0fee0286bcc2c4478dec4a74af80bce40454f8de83035b6c85012a05f20083054cf89486bc539df8be57bc4f5d362dbec48e02016b7efa80b8740000000000000000000315dc19cd3800000000002d4246924a1337780100000050960000d99c7f6c65857ac913a8f880a4cb84032ab2fc5bbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095cbf83ca11abc62447226f6b3566918d3594ba38038ac76a51cc950d9822d68b83fe1ad97b32cd580d8193a02e100d1f6e3b80851788fd083b2709cb98aa077081dcbda529b1dcdb679f42c4a0426b57117993b2704b73627410e8b12be02565f74138ccac11f0180cd2cabd46f8d48333d79e85012a05f200830c350094a8cc4b94624b31465e777f06ee3591fd5afe582180b86a985ea703000000000000000097186271a91edfbd808ac76a51cc950d9822d68b83fe1ad97b32cd580d020a000000f4379eb6ca1bd9320941769931fcafab4ea4f39e190100002b66864b8e72944bb814e924dc419b35e56f1793000000000000009719ce8a53499f8fc08193a0f8064c26822ad807389c11ac8d70327eee66227057567a33afb801ebc6d7f2c0a0411f33af6f0c3e3dc1359bf7a3849c25f759c39aad471e7984539ee342a31db0f901578302a37085012a05f20083044cb6947dd3b4d9de913a46e0b386df1f7d9fac4686575489017b05541d482e0000b8e4fb3bdb410000000000000000000000000000000000000000000001690a1119cec59000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000c29057b7fa51bbbe3d100255eaf07c4eaa5509520000000000000000000000000000000000000000000000000000000062c9f7620000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d8194a02e1d10b8421380acf2a671f854747a312d8b9d5927715677c8c4eb495d7653c9a003d21cb3ed8f9368aee2d5b59842f2dcca3cb7a0c71a3696a36333f580730a89f901ec2a85012a05f200830493e094c10358f062663448a3489fc258139944534592ac80b90184714bc8610000000000000000000000000000000000000000000000000000000000000038000000000000000000000000d6c4a8c878c7afa48388c0a7e32f4070b302ba0d000000000000000000000000000000000000000000000000000000000003365e000000000000000000000000f26e84a89cccb850bdc0d01b10ea65128e9435ef000000000000000000000000000000000000000000000000000000000059f06500000000000000000000000000000000000000000000000410d586a20a4c00000000000000000000000000000000000000000000000000000000000062f40047000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000411ff415e9bfd6091b71c48b33cf695c3175da4a29ae313ba5e87ab55097e1ce070d51933d2abea5761b1a1631d204e24412dab3037e9b2049757d35f4e2bfad301b000000000000000000000000000000000000000000000000000000000000008193a0a7b2abe6bfebba98a159d2a091e8c399cf771ee6ac67c0b8b1167ef4cdfc7991a07189ce2b9ee3fb4eaf2700bd2ddf865ee5872710e04e9392970f5dfb45568ff9f8ac82054885012a05f20082e91394a29fbc10bf1c2e7b108e8704732f4bb0b10c0da580b844a9059cbb000000000000000000000000201122b847bcb0e1f705e3de5d130a41071a6f54000000000000000000000000000000000000000000000001a600be7a0cdc94b88194a09ad4b3451b22f4a7916c7eb832b8739d5625838aaa24cb026714fb3432184076a043f9ea9d19941458baacb1b773690a4f2004468414879e1f6aae31fd45b3f4d9f8ad830177b685012a05f20082ea60946cf271270662be1c4fc1b7bb7d7d7fc60cc1912580b844a9059cbb000000000000000000000000aaf6b3fa6e5e04484e2a66b054f95f875c57f2fe000000000000000000000000000000000000000000000000000000001134b4df8193a078fac1a01e57b6802f2ac48b0f783ba95325fd5fa4d281f948794118d3dd0455a07c3612d263d5a9749947bb68afc734e2146500d9d4c8b5599b33a97723a1c2c4f9054f83049d8885012a05f2008307a12094e4de571bce6c099d9152a09231fa3c65f1a564b580b904e4c98075390000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000004000101000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000009117a1c5b124d4ea97751b080b02ce72000095200b0e0f0a060c0408070509030b020d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000005ac7c60b400000000000000000000000000000000000000000000000000000005ac816e4000000000000000000000000000000000000000000000000000000005ac9ff2c000000000000000000000000000000000000000000000000000000005ace63ffa00000000000000000000000000000000000000000000000000000005ace63ffa00000000000000000000000000000000000000000000000000000005ace63ffa00000000000000000000000000000000000000000000000000000005ad38894000000000000000000000000000000000000000000000000000000005ad38894000000000000000000000000000000000000000000000000000000005ad38894000000000000000000000000000000000000000000000000000000005ad38894000000000000000000000000000000000000000000000000000000005ad38894000000000000000000000000000000000000000000000000000000005ad38894000000000000000000000000000000000000000000000000000000005ad38894000000000000000000000000000000000000000000000000000000005ad38894000000000000000000000000000000000000000000000000000000005ad38894000000000000000000000000000000000000000000000000000000005ad388940000000000000000000000000000000000000000000000000000000000000000650f9f072bac60fa50eb50999dc6ddce3687fab626640295d0a3eef8bf21fb158c021c19c7b38480db8dbb6ca26322759c021eb66d7f1922dd8be9083e99d9d31e1f6ecbfa133543dc0eb474bff6906740dcf4c9ae9eab2bd4179880a888aa7931d0194bc45fa33db8138e0f7ff7ec73d441d5c0ef58016e8ad1aa7f8c7f27edd06298cb80e640eb27b991ba5769441283a8fa6ed8f511ae8e8d549ecb819a2e5c663d8bdc0678bc46a9f8e604e41438e9633c5bf2d9009c7ad059b60e1aa07b8000000000000000000000000000000000000000000000000000000000000000619cf1703bfd27367e098feae0b375d59e12a10e21757014096f9018f057c5dac6d4b08153a4687d98a09f501cdf4ed0b07020abf9415f728ff5d3578005cdb5c281eca44a2b280ec4fe66dda479ecccf9e39c41d85803f7b514de3e79d55b4bd5d1de081a5ea4d8834069ac536d43b226edd5615d6841af0c80a7719a0bf6beb206671bf57586a7d3dc13ac511c60c1a4d1c6895d03edcb775e62974aac2f36a5228c266976dffddb7aa28f2c772a7a98146c9bd3b6e1d969a08d71b8e92d0468194a0e761191298cbd57001f0216cd3ad2a170528a8ab92b2ad097b427c80915f6f2ca069eeddf5aa3802498c7b527723b0ea0c29d8f4e87e276e39758f63905b2dd4cef901ec5285012a05f200830b97bc944c9f660ead882b96d39e0a222c1ad18d8c065f8480b901848f309880000000000000000000000000a29fbc10bf1c2e7b108e8704732f4bb0b10c0da50000000000000000000000000c4b2b4127710360e7ae52dd07de7f9f753fb60800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003466972000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e88193a09e70fa9cb307dd58d88a6e88aed7f7a70d0acdf904aa67833677156c0304b5aaa00211eca64cb4fad72f656070c27301ed7516de7f8dcd2a40cfb7e050ffa03371f89181d085012a05f20082c2f2946bdcfca87765d14f36e99943fc5d82c2292f8b5d8702d79883d20000a475ab6937000000000000000000000000b6c4e248289624f267da5ec78395e910505b52c18194a02b6be0f89f0c9d06ca4d70e50e2ee876d4ea38f90621754d01ef0a702324cae9a07cd34b84dff97f62162fad2013af064ede43262d6bd92b4e91a0bfed8c9852eaf86b81b185012a05f20083037f89947adc54fa96c42c664a4f399911cd55339c0757d780844641257d8193a0d0447ea23c84377b7eba396f327128408c4bb21a6c6c5e2b8e8386431f22b947a00eb370f003149e0e5a355c3ff59167e7586ac93c5a6a3bdc3d417abf75ab7f85f9018d819385012a05f200830361b49410ed43c718714eb63d5aa57b78b54704e256024e80b9012438ed17390000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000f9d8cf8e3a38ae30f00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000cb82d4ab53cd71160a48bf0c085a9b2e7d2957e50000000000000000000000000000000000000000000000000000000062c9fbeb000000000000000000000000000000000000000000000000000000000000000300000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000001d2f0da169ceb9fc7b3144628db156f3f6c60dbe8194a042095c5d53284abfe3c24b0c4a6402b36ef3071cfd2cade8bb541642e27b4d97a04cfa2f0e5a18789ae6acfd31ba4f09c30daddc7927efd86b30bfc65abf48b82df8ac8229ba85012a05f20082cdfb946bdcfca87765d14f36e99943fc5d82c2292f8b5d80b84421a8384700000000000000000000000058189c77b256a32cd7e19e4a68a40587ba9d8bf700000000000000000000000000000000000000000000000000000000000000fa8193a0816331c10cfbb94c581b8b11f400cc7539e91275ae4579ce0c355f09f4407c07a00f44771c4eae4fcb4d5f559680e175b28a0ed1d5146f4d586d9afba6149aa652f88c8201e685012a05f200830114f394685bfdd3c2937744c13d7de0821c83191e3027ff80a4beb6b12800000000000000000000000000000000000000000000000000000000000000008194a0b57215d9c44dcfc107441834356e634fcb1c4d8afdb16146a2d04bdd137c6841a001f346806286cf2e5d7167c0ca54fe72789be82e974e89325eeef3ad420ea6f3f86a2785012a05f20083030d4094a8c87a4b2de9bcebeadcc1ca4e6331fe28e3a37880843d18b9128194a00cfcca529c6ea9d7395b915606630cbdc73c7ed3ad1ccaf9264aad915d772895a062e7cdc046c79c55772bbb7588664ebabbbe494af4f3b2296af58151256eebabf9016e82243a85012a05f200830271069410ed43c718714eb63d5aa57b78b54704e256024e80b9010438ed17390000000000000000000000000000000000000000000000000202303956f592d000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000a000000000000000000000000091f133ab28db5be7bdd94267f14b2968115ed87400000000000000000000000000000000000000000000021e19e0c9bab24000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000e1747a23c44f445062078e3c528c9f4c28c50a518193a05a75708393721a2f3e2044b57f011d448e3ad78eeebc258c646bf193975140caa0103520e0ce4aff6f0b25c5f5d69de655a74f05c7fbe6ee35d0cf6325f68cea54f902ee820bc785012a05f2008307b92894fcc0ae623ae1912efa5fc9dcce2cdd3b45d8fd3c80b90284ac882d06000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000001c60d94e17bab7d00000000000000000000000000000000000000000000000001cd8badb92ccf7d00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000800000000000000000000000003a6d8ca21d1cf76f653a67577fa0d27453350dd8000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000004b0f1812e5df2a09796481ff14017e60055080030000000000000000000000000000000000000000000000000000000000000080000000000000000000000000932d15b8ef9ecefd3872aa04f44c92f0d0c913a1000000000000000000000000f3e9f12df29ccd921c0143b98d32a26202f78d80000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000004b0f1812e5df2a09796481ff14017e6005508003000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8193a044945af6c22bbc63575797663aab09799af12c1320d26cfabd4bc7063bcbcf44a049babae1dcb6cb5c46fe91b180dc8d83fdf17b95efab38ce3377af8071f5e027f9016e82019085012a05f2008302c5be9410ed43c718714eb63d5aa57b78b54704e256024e80b9010418cbafe50000000000000000000000000000000000000000000000b3711f018fe454e6ec00000000000000000000000000000000000000000000000000137cce3804de2d00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000043d12fe6fd854776324b8ad52b8dd5a0d8491e020000000000000000000000000000000000000000000000000000000062c9fbf4000000000000000000000000000000000000000000000000000000000000000200000000000000000000000012bb890508c125661e03b09ec06e404bc9289040000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8194a0ce458159a226c996a8e2060fb63dd42e532cc7659394a5c1ba7526a02a71cec5a078de6640d1fd149729fe3e604c8c853b2afefabb8eec4e805751d2f62bfbcd17f9018c1385012a05f200830461549410ed43c718714eb63d5aa57b78b54704e256024e80b90124791ac94700000000000000000000000000000000000000000000000916a478871b430be1000000000000000000000000000000000000000000000000005fe1f7cb719af000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000c25fb4f11a5614ba77660baabf989c0e7e1b36c20000000000000000000000000000000000000000000000000000000062c9fc000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000af2f53cc6cc0384aba52275b0f715851fb5aff94000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8193a0ba875739dc0d0b29ee7166f71cb8ea1631b98e9c54154a6d8c59f74841dd3c1fa07589d856c73cb725c001150c8fe207f6f532bc3966316bd84c116e22486b9c75f9016e820a2d85012a05f200830266bc9410ed43c718714eb63d5aa57b78b54704e256024e80b9010438ed1739000000000000000000000000000000000000000000000006aaf7c8516d0c00000000000000000000000000000000000000000000000000001b1892ecdde6438400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000009a7d85c38dbc3e6ca620aab364a3e780a1bf1d780000000000000000000000000000000000000000000000000000000062c9fbfa0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d560000000000000000000000009a3321e1acd3b9f6debee5e042dd2411a17420028193a0779e94b4716724216bfacec0bd516c66af20de1aded6c78d89abc44b12fdf3bda0045b2901c1e2eb2e1269f7db43175e4b74ec4fced6064ea4a7e5d3790856c636f88c8203c885012a05f200832625a0941514c766127378ea9653f9f4428fe25f3fd256c380a4b637956a00000000000000000000000000000000000000000000000000000000000000038193a0e41ce1e816449766c8d39c709c90f316ff3ae99851bb35edb6d01032a90ccf53a03decc1c5fccf6845be5d4e584334f937cf7de1b902c3a6fb461fa71ae3123e96f86e8204b685012a05f20082520894c40b10179b860f88eb490715254f5f0e660c8b0d872386f26fc10000808193a0533651ea792f284ad27492688689b9823aea579d1b246efa84821dfc274ed4a8a00f3cfdda87443f5c64dc1c351b67afa579bbf11293afa6c439e28b7466a76dedf8aa8085012a05f20082be689483f41c98d028842ccc8060b4ec7738df3eb9a2e680b844095ea7b300000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8193a0b36761351f7e47b4101d9aa8d77cdf36d7eafeeb2b18531c212039e51d6ed893a02a6c99a123d1760c9906ff5e26016c6359fcfde4e8eedf3ff6deeeb593999128f88c82064e85012a05f2008301bad9941514c766127378ea9653f9f4428fe25f3fd256c380a4c337aa5d00000000000000000000000000000000000000000000000000000000000000058193a0a6e8354222d087677fedc2e5473b3d0b2dae2e96011cbdfa94d649e985198bb0a030a1a432e2e5fd035b66938ce6e6057a68cb7d1a02b30327df4e869b4771d019f895830b18e580887fffffffffffffff940000000000000000000000000000000000001000880164cfa47a2838b1a4f340fa01000000000000000000000000295e26495cef6f69dfa69911d9d8e4f3bbadb89b8194a00ca993dd2d67417b289ec9fdf693ffd20ead3f84b29c5ae9ab43e7d1022d7ef7a0420d9c2d068190a1c0354293025c3d28b9c96d370a31fa7dbb413835c34cc8a7c084024cdbca diff --git a/crates/net/eth-wire/testdata/new_pooled_transactions_network_rlp b/crates/net/eth-wire/testdata/new_pooled_transactions_network_rlp new file mode 100644 index 000000000..82864ab15 --- /dev/null +++ b/crates/net/eth-wire/testdata/new_pooled_transactions_network_rlp @@ -0,0 +1 @@ +f97380a00f44b2ee3ca14784592d3add789531ea1635f04cf22800d41f89ff92b1cac20aa017af673309df663453abb8b4999875679d386d31663c0869eeaa21f4a54d4cb6a03b542db5f7a2f50cf71cae56c4c234caafefbc9677f78b8447991055b50f2a5da06d1c14e66d366058697c6bcce63e20a3875fd69e00ee70d288517015a2f36bc0a0ba6f8da74c58ecabbc4f24eb5a3ba0b7ba7f297e5035bde3b20d065c98e5dd9ea050487fefec9cd241e062e901a43c7ec6754c93f265e8cdacaea9447ef19f5d6ba03146179a8a410628437d6b1fe5cb41ec5d92f12bfad66ed012fdd6bd6f63f5bea01f8e53b21610a9f7a3c490f7e417604e0c36b2309da32ee0ef27aa74ac0313f0a0bae1908b237967869b527074e940a30f4cac1f8bf146e316231b201775c26042a09b36530ef6d2f47fbb8bb669c5c0b99e566bcd7e0070b9043b0876401df64641a0fedfb1cb0bd7f8756bf170800ffdc46aff6ad4cca460292d866c7b890891c576a0db5dca72d80ce77dfd65ec16e45ea7c0e695b78f958160e8e8d88552a181fc52a04df48fdbc1e177284d0eb4f1ce719d7d81a7d9a8f59e71a6c57315d9439ad555a0940c73287756334b27068ae19366fbd24cbc9237e4f04bb2a76316a18fffcc28a0be95a26f31d96e809d9f9a4911cbe658b8f3bca6245172db99c11164aa962ecea0e6017511b0875e0680740a10348ab111e85f4bf80168d70e2c7c084e399659a4a0ace5910ef4b8734ba699c595d0a95a6aaf6b39f8283634b574c41d9b1bdd17e4a0a91a6b18b74df83402064f3666d4975d0434f47cc46d98a87e59ac3adb261e1ca0e7146aa34d0975574ed33fe3e1a240f718ade28c1b61d4450b98e6f8172cbd21a0d1ea6a5c5232f8deea53b3e49c4fd7ccf6419c45011df7b35839d1e4eae5c35ba009fa1de3f24d7db3a1a51e09879c0d3cdb95280d2e1d169482d0f34217ed51b6a0d2d6ede20862dbb9ca6c7c6c9827b6f251d4acdd4a2b1916ca1d19cf252bedd4a0a51c8ec4752505a09c0709fa06434671d9ac8bc71d5aee01191a2e72d09fe587a00461dde1ce9c2dacfb2211f0612169dfe1dbf2494e985cc5386e2229d4fd7303a09e346f4155d70c1bb147ae07132c6ea71299cc2cdea0df865ee1eab1b60d30b8a000c898a35f604d193bde0e6a02e0b2f623ab44187e485717390cb67778df5dd7a0da94f9dff5bc521835c262e8f5f4dc16e5e9f25bf247714eb7910b5be35a2bc7a0c1462aef7aa37588bb6b6981a9e7ef9d22ca8865b36324275b44b1dca7e71f38a0956f594efd7654eb4e5221c3ed4cf5fea46d529b39dec7b25907e2b99aec25fda0157c39d788371580f9707fed715d78831b13fcbcf6f36f000abdf73720ad1366a0fe2377dafcb8bb077ab4cfb34c8d58622953ea67496838cbbb615bacd1867a2ba0dd24095d2435ffc8f3bec4e584c9eb8d2a575d6dec63d4e49cd50df9f92f84a5a0aed1d7530945a2539833e5189a4629c5bc4f904bc2a6c16ca1cf52e3f8b0b070a080196c996da5f38cd012c53533aee252876af918cbd20b87383304b4d73180bfa00845bf3f44c80646c3bd7394219dad4153ddb6916266ab401eb80a8526f03f9fa0103b5af4d7f2868d7df3a9b10570abe734941d39d99f27774be2eab76dd435c5a01dc3dca49bbca59b1ddc50e5feab95d5aabd89cdef55446f187a1c228e58f989a0c49d174807967d4344e88ae05a3a02ffafdad21ce0e40f0e38a8b6bdccb5667ba0d802d136b926d1757ea7bb85e982c734dfde77ad9b73136b4c93033a0bc947a0a07c6a9467d7ab6b9c5cd9e7687cddf07b4c347926fa7f90236038f844444953b5a0b4d216d319f61c116a65e98abf97d8e8512be5f7c6848709a58e163a1ebcb9efa0d0830a721e049d43990e9f93b8b3eea7b61d8cdedce24abd2cb62f1771df30b8a0cf0cfe50c7cecb84bd801a16c3418eaa61755ff6af0de124e283f59f31998e79a081c55867912e551c5145737fe39ac5ac0a3b873c9d0a433b5ef25456100b540ba0f2c511b37fa7a435dd706cb0da7d2b4963835653c6a5af10859b37ccd07b1678a06ce58d25b1b80867ee9586e0db051f8d471f2a3fec7d7d8fa8d69c04918095c9a0322a63871ba897aba7504cacc082985bd7cb96bae8ba1da0d7247defc2189368a0ee39df63c499b3d71ecaed47b3567d56c2633390af2f8cb03ce5eee743841c42a0c57a5364fd29a96a80069d72af671e74dd4c07649d91926c081c9d59d738d175a08c8158875df6ba9510c6bfca408d9be688fa20a17d8afa7aec86539bce8969c0a0e0cf8e36fc932abcab63c4f29222d5a7366505b14eb4607461c61b4542cd2a3ea078112b31c9f18eff29177613620de808381b7b1ca02d07819893684b0f5ee120a027b3ffd550d0dce349a32339ca1d6761dd2850e03e9a71586e9f57478132375ea01290354a4ba2d3faea50ef1e8e1be11d28bc5292e6dac8152725e01853b6577ca02bc0f32b515df372270f780241769996a0607c6200509533b0d06ff8ee8b4653a058ac894db9f679046641d8cc1ab98b7a5e83ef4e699e361e4a25a3bf1b07d095a0e0b9acbaba71f58d9530b4be8305fecfdc1ec1dc911ec9ca895129cf84e9eb3ca0c8b35e8215f31548a0b25feb090f1a7ef9ab5eeca40baf5098a5f2527189bce3a06ec20aaa66859f8fcc01f11a3af53d6d561cee5b6f8cebe68aacdd1039115e51a039b303ee46fc36c906f5049d9641a96c55937c9a64f7caec0c06c07e8a992ca5a0eae96550bcb64ce118632afb9b05d894ed53a7edc8ecf597185cbe5fe1ee9cbba09906c3bd55d93d15523ebde90645880b3fe5118bc63d9b62ca5cb525becc48dca02cbec7a7a4de33cb4743f95fa944755a559d21b90ed0fa298426e9619d7a07ffa03ddc9636fb4e0126d6406ecde84de866b32ff627f8804d5f5e2b6b2485788ceaa03f49956b37d6b66baf9f2158dea8562a69a5d09c75b898ced0540c48132bc27aa0e5cb9b04b7826ecd48b22ae57aaf9ad3b8eafc24de7bc947a458d6c2e20f7af5a09a9eb0a92357f99da6e18bfde2b77eb3851ffbc53cd54ae8f6c37632ff6edd2ea0ed388471fc2933b143a90e4b69cdf8a57919a14d9b742d7fa18dfbe0c3d381f5a06b4f1f7bb51549f4144cfd82a784f6ddb3522a9b0e32d2ddacfc1d9364382f46a084b41a0ef257455ce73687b2b7eac46d39a0f1f7d3121210dff7d7b00bb1b6c8a0be78f975f68aeef97effa59f14b0fb97cec49866fe5985dc364429b4256f764fa0aeae6676e5e6a62be7e0c7eee23036147d2b6abe4d57db8350688761d21539c2a00d0e5ed456a2ed899ac61cab01fa9057d322bb4490e66bed8814085af97b7ea5a0f4f2425a6594109afa6de36f870f5965dbb3e9b51cc9fa0e63588910b9babf4ea084beea0af498b6c9b6ccdd1303833357016ad3bc73f9b8d75bff3deace739f7ca01e5bcc221046d9dfa802d06e47aaba839a5b4cb2efa48f41cc27cf347323a8e6a079977cf0db20c47879f358deb9c65880d52c9936bd1df1aa33180aa5252a2d0aa0045e18e415442a7c14e3d7f47e06421769b4829e3193d2d65f6b198daab0c6fea0edee133729aa3dab39980bdb1c6ba9190305a1a2092aa575ebfdaf1e8929da81a0f7db63e611fbc25af1816d7bf70aae15d3afdee92b533be038a0d64f0250e662a0c1d3ba8ad9696f19f9194772f0d0f8d4bc86c9ce3fc68d13bc6fc86f855fb0f0a001c93a6a56a10a0d15677a3372df0817ba1a4ea8de53624c0e99df563eecf71ba0a3d702b0095bdafdfbefda723a641882288a7b0becd7e2a3aebaa0033254719aa04fd75d9298448e74cb54a4640602ff2916f5cafbd07f20d7b792f92c8a5f7c40a0f0751c397aea22875977477843fad06d0073515bca916ac105cd99f037e84f36a07f04cd63f1a4e1372a94b0f5ae7d5103e539c6368fd627e2a6201a9783b46b2da051a56385c909669581efe38b2c2b0c8187c0a7d282b41bb62cc899279d12c73aa0cdaae76b292ba60e8539e61afd262cc049b16446c6bc9bbd3c680d4ad52caefda0a56f3e8bade1735b79f96ec79dfc8db2fbd04015d36b0c3a91c853a0310136dea0b6f43545514d51c3d19f0c002c397221659148fa1e2045c5cc10396c9507f8b7a0563f61b9a18d49e6dfcffca3296b1fc86ede1b3541b2fb46023dcbd99c0d99c2a09791886b54771d232d7407ab05f8d723268f994b2d3bef98e6d0b25d758d8038a0e8044cfc46381996fcbb23bfff37c51960b90caf1768882726c049209a904f2aa033772c6a53e58ee8bda2560fccb4159f75d8b3952a6107d70f22f30ddd8ce83ca0adee614c5adc42bbc78b61e4f11a73f8c18d482eba61dc30137a4645ff2855cea09091a00c5e9327cb4f557c90c58512c8a5ff7f631b7412b6b7e9776ce3d40879a04bdea3a0223d6d2f5bbd7ca0f2dae7a929e5b57d731ea8ec040d2d1bef3f111ca06cef4f2fbe8af16f1e006e616fcb834aebbc62a1aca9da0820da3e17a7738733a04598630cb728a42b8f8422b6d82c322fa780534960064b9fd2eb4850f755308ba082cdea44d27424e915484252d8b25dc0ba8ba49a098fe99f2078016e676bb04ca02fcd122843e52ceee3f9bb240d5510cb488fc3f36f1bd7bbdbbf686d9478afafa0b9c4ce1f9fc83cc276e5b5ada2689cd28713119238f5bfb12c19b5aa86aa77baa0661b2966081a375522eb186e0426760b23f8eb1883cc9502dfea5209e0c19f35a0f25b0033eb9b56f5faebe26871ad2d3e2aa39074caa55076bbf2f914da470a4da05d34e42ef6754af6f9209bdbc872f5f320c503f50e00e39295b2b36e879e15b5a07b2cdcf033b2611ef5bcb20dd2e859be5956fd83a9b738df5b208022408a5b18a01047a287e2698774dc112cbdd5e779078e806a0fcae1acefb1a39af4a41fc9f1a0151c265a72211f975d610488440a866bf8bbef50e022626f8e81f0944bdb9aefa0d9bf4d3a3aa29936552cb450d7b4d549be1f9f9c05f8d117c41d5e5930ad930da0059eb6bc61210626316b1495eaad709714b3e5aa74c35ebd40e8b86934568ef8a003c01b9ca792725c76bc6992725f351f8437682adc9e557df2c73abfb2a0fd44a0ce4ea804fdc11437bf65951c070393ee54426d541278c25cb2b9514ae003561fa0f706f2fbc4ea2ba9a32d2a5c504c0de72c31c065882475614c911398852f34fea050ebbefebbb8d28dafce9b03ecd88de51e9e93c31ad9b6e2ef6028dc5080fbcfa02e2d2aa3ec0a0919f3b303e22f70accc5f9f85c01b25f354a7d3aeac3c8062d2a065a418b4809c0c7ab69dbdaa1027f7cd3247660f1722b4e4a431cd37a46ab3e3a082878134ffb9737cf6e127331f6936e72c4d7eeef91dc6d7a40e32902713fa15a02a8b45091d03d8eb81c3cf8afba1449b56e4c0ffe3420f5ede22f9566daaf22aa0462b2840aad6c8b03ff699f513c7214be13f8915c5839fd7a75a00099ab59f6da08af45c2ab247dc31078b7bd504e8c7afbd86f0db5c03875639d0b198e5fba8eba0ebae1a2114e488b9a1ec94a600dea159afab9a53dc6eb94cbdcc4909e9a577a4a0d6410beee8352d7118fcfdffa4f00ab80081db4029655490ccf1cdd589f5c555a0b95b56df969f3c3d2d76aa0c8c374591081b019a314760aa7298e63409978a4fa0ded3984b945eea3e3d2cc7956836f235b44bb298dfeb2040227b0e83f437e5a8a0d14e9cb7c4eef749fa5a650317b6390ccdd20360efc5e45df432ce42f373f8b6a0995bbb61c8579b6bfbdee309c782cfe9fb16fbdedb19a04dd4d18810854af71fa0a72f4d1b002162af458577f204c17091c77950771a664e0402b2835ee2e6a229a0f1da4ec5bf2bc258ab6c14045aa38faf6d5418bf5573f9159b3377e3d1491c3aa0b1ec9783f501e8f8f7c6a2ad9ee917134a545ebcbaf701d515d71ec7ff15e5cba03b98089a38e3dac86eae16f91b3f6a40fa734d88857e5a358ab0db8fab86a26ea0991249d1261a202e1e09abc2537b772cf3e544bcaa7304da4a9cbaabaf23ac35a0bd80a5956ddf79cd32d5b0675cd2c02fdca08b5bf102011da7783313e8a67663a029aa349274f078a46712162b26cfec7a98adaa88735d43de3872fa0d23fa9249a03f84034550bc6be0025cfc770eebff20f530e36e7ee0a290f5918daba9b4e867a013733fa037468eb8549aaed2b947680757396e94cb9bb14d0f0d012a68682358a0707df1d48e017f11197cc7ef6286e116556f1142da87dbebebeaf5a4d9c8376ba01821afc43fad136791c2c93894f6f582a7246f1f084ef7319be32085e99ebd4ca02dbea4137691be0e0ba4deba9afb3642bcdc540419fd1e1bf4897e79f44c5765a0191e697a6425b546272bb2f7c378083fc4a46c04104aca795feec3938eefca31a0e522e7363521428b30cae00a75692bb3af7d836429259e476eaa5a27c4bc70f0a0727247fa3bdeb081ce6df692e4a647888391dc131af08963c79604d41fe97e96a02cfc42f8b49742ddf1c3b814f8c92f1d889640bb02e642dfead0bf5cfe19094ca0bff303f0f898a4699699f2369d3e1f76192121edba8c90afb0af0a39314ee20ba015ba59044a229e5d97b9b7c62c537e15a593b4b737b2377d1e681c7f5a8619d1a0a70e40ffe7e8cce634f5fa6e28bd5d07f26b5f9dd59c51bc04a5390f8de5c2aba06ae52e6d8116074d12ebdc9dc8e58d589500a654b2b79b2f0be993c04cc7829ea0fc02b2b0a74dd354cf8c8b681a8ed7ea3d9c9f6ebd57608f32dfed7aa1e07b28a0dd3451ca59f9299e75325aa14658034fc57d16dcf9d20eb9461d6cb6d531a801a035f4f8294e189e51b263c70059a6d2fe12ca636f8f605c89c58058de74a0ba7fa06be2b4470a39cf5f7529a501dd1892d066eb5f1b22931aab38d2bce25facf6dea010fe291c7776b4af12db67136e4682e8ba515d99ba7259adee656409ba6109a7a0151be59b6127b97c023442aac3f9ecce242004c53e8eb8a2ab541b348dd13703a07c7b3cc63d7cea2d9106358fec4b3b2fab02a1f722fb7395645f6d33f31a79bca02ec0ac7afeb58c47d19746543fa353071fe95d90a66f510a15c679399b4f771aa0a3010ed5175d20dee869c93b917a062f8617701a1d52b89099465e1f203dea7ba0b7ebc383635f95af5b3d0d62c069d693ca3f9ee0d5f2df41b24f5ea9d72a4e45a0d691a685350c77a4c94073dc29b05532a487a90180c66ca5e3c28d420cc875b6a01bbebdb0eb941e946c5cff25fce29f68f7526144cd300e5f726b77a9c64b0892a0a1111baa50f5727a5ff4a579d8f6b871c09ccfa9ec29341340a559eb7fd592f6a0e654016c657289ed316ee4c92c8b2574434e095a5ae679538305cb093c9f5508a067c51dba62d2f168f1c2d3f1f19021a8ed3c96ccb2c65ad9b2c9bdee3e1dd26ba09b6aa0456d55a1bcde15c5814152dc37d19326136ca6a8b48176a91a2044888ca090343f16798d2e802cbf16b6a28612c6a61023ee874fbc7b825003439ed6150ba0386fcae817e2f12c6513146e3bfad96de05e3f52f923be935f2164fa4e52f4f0a0efeb980a94cd890b5064b8526bb2289357a6fafc59379fe7e945959dda3cce40a005b1169b266eecae3fe0c2501abd66bb5a9476fc958fdbc5fc59eef0fffcfc51a02e0aee81e4c7e7e15cdd6de3dafac99bcd2a5abe2416bade8e75f8b0a5b56d21a08d6b9e068137fa14d6d64f34e2fea64397bd07ce196d666be883b02b13816914a0220bbab0242d30319bf4dce4f8c46f7944f736821cbc8d85fc25f12b57b6f6eda0656bc59a376df91bf445626a092dc45e416a097bc69d277c2f4f708f69da9567a06b1fabf4c2cc584ace050b44092ae095780ec12190a8c52c3fd3332177b32790a03de7017828b897a110563c3d7e6e5c4f79dd895566f817bbe3314c8c350a083da07d4a067cad14d25a68b7d643aa88ba90e0ec8dfaf15b1b501e41b862436aa6d0a07cb21f027248221c87ac29f8f1aa97899d57e18da2e507dfe85805160265ec98a0b0c8924ca96d6153fcaa006760e5d5c6a198ae38d33ab08f9411a993cdc6d4a7a08f49c02d9788dee9876c3f88f4f609edad47e104dbe3cab3bc5a219a8ad6884aa005f1d4d08c8193efd4ef91793e13a69c768b5ed860fd91b462b9ffc14ae62d85a0f3d8a0d3d5c53e8475287643de670074a90744091db3729d7237d3021acf1055a0c144b7109caa9cfabd06e6b4082b52324eb90b3c3f47b80563889738aaffe647a0e92245665fd3163a697e5f870c212e9cd817c79d0d7d6bf753d8a3755513c8fda0377e0a96193e45e45f318b44f189ba2eae2c1a19c113e23f88a2148534381062a07efc49b0656cc794ec2aafe8a6ab7e641a41f2b82ad4af5e0fd89a739407b5e2a0a60f0724875f2ee38efb885030f74861192d86da72abbb7e4505989ff9ff43d2a0bf954be1bd210ecaadd2280c335faba5a93ab25f9c5d1946cc47dbe440fcc860a08a3ba05e0ebdd20c93c2120f4923c2a9c64055597ed5a9c99340fe90eb15ad0da01ec1f1b8431cfe55ba616c4654e175b74ab8b8bc312f5856cf7a51f4166461bea081d9ea4ce924837b232fec1423d36614100a784f2da0e87739079b626554f15ea03e99a9c8c5b163746ab595fb219098a3291e5d5a800d83f96ee9b18c22ae2f33a0cb0fa73b101236349b406b31ea7c5c36d26bf9a23e9276a0bf22ca30110fd196a016e7266e1c78f5c5bec82feb1f6ccb78145f187c913cdf94d531ee5c3567e2f2a003dc3c84daa1764409cdc54c20062996cd751f4f3c3fca5f8ce452deb1f9242ea0261f5f0239f6c79af1a9b06d4d9bf81b879c2ae68eb053eaff18650570d306f2a0ca251808849edcd2a8834625dbd63133027e2c093279813c2fc945d7a8985b66a04184e286d33fde674b26ba450ce39b66591ed779f92745ed90437461a2434333a099bf47cea03ab14329df1d33a11bad515e84ec882a5b766e2fbe80b0d22cff85a03721b3bf807abfed358057c60546c4bfff0998b61004d4047c8e77ce5777f7c3a0bddc1b0218eaf26020ea39edc8e8b4b8e11f27ab0f9b023483048f9a55256101a0eba5dbdf2b33dc934c153dcaf7c6ecd3ac26fc131a6b5bd3a5bef5d0e3decd3ea023a8fd754c42f3f2c3882bf45630d13565e7550db8bd674c996cdc7313ed77b5a0ea4bc4adda61050c2cd58dd241c1e0b7f7c464b19b2c68ef7811a9797774d1c0a0340fa54a62e955d598069c1744605ad1cad90b6b7a2a617f3760fe960ba8cfc3a05c6bb952938372699a6d0d58d53e4c24134ea28b677437ceb309b0e258045a7fa02147508c7bfb53a24396301f66ef7369826d2c07333c3f928293579965b0777ea0ac70165a85af57bbe4c017f67d177d62c4752d9863b6f09e077c116c0881d351a07e08b3e0dafab4f4ed8d9a060d87c4fd5958686fe1b1f2ca2e628c50816372b0a0cac142cf000b2ac4236c8278a61e43b96230067841796bfc699957407b6802a7a0151b78457c7941759c5bce016b897bf0f600a784a37c08c08653c3fc9fe9a5b8a09246fab3b8af61b39f8a51ac7f492bbeb45239dd75bd21a784d9c23710d6f7eca0b275c4097b42e660fdc9939f3eafe7ce8a30e18c1c3c082cba582a6c1bf18029a06304ac0e7559c04935fa799dd8816594fc68c5f2f4a3d05adae2f7d690b750d0a08016af16c809f48bf665fc789ef78a89f831729311282c2efd60784f5ff01062a0b3e9b1a37277a08b3740e2cc3ac626f6c38d02bf19e5213f4251d32d6b6bf07ba00f634a6a80963e0cd06479055f17ddc9c877e5a897052a01c4ea7fb6defe6c2ca083aadc38999796565eac43f0745e129a37b5fd2eb157fd4f8d7b86cf3526c39aa058f1954eab45a032c897709137e6d256ece3642d1c5c5c4cc22166f414684e8ea00e0afa228723c40d3af6162faf1d18b58c521de75ed844b8d9da689febef3e13a0c301aba7ad908aa3e05361e212d90b9992d7a748f9ac0a75a29172b2a6d13b70a08cea2a48757730ff5d6b579f1780941cf8974903dc95393b5e2bec09fd14d5bfa096dffbcd8f065bb93dbbcac794ec2cc1d4282769182dd9500e6e4227469ad634a0014da1b46af037997b287ee8c9e6417661410f268ea6de382e87db6233ffc890a08469d10dfef8a0ca4486061540237a8df33963ac9f6512bc5738f830b76fdf0da01f8fe8d5b3587307a07143ee237b8e1ef71510215afea81299e2900aca47d6c3a070a01aebaa4c401ef0273c80b04a070ddb0940633497d2d7cfb43d5a4ef47c7aa02a38d7c2ed69a34a1e1bf28d3dbf2fdc2aa6a2f251a224ecc4ed5af8b82dc52ea01fd8c4047905d2d6a8b1ea6e7b2c95a193920bc310743c41ea3c6abead481531a0018b03571076ecf7a84cb44e029519f11f898ec352f043120b8a787a909a10b4a061ffe8b0a75e703462c3c1da9ed55eb18bcb8146b07e66a1d229fc2183e95dd9a0a74ba44fab7908b36409034459950a972704d20509b87a8e921c00a669447740a09036c33ca4ae74417859c08119a7c6ed0b5c339a8074b257d926fafff41af5baa00a48796346b473b87ce585b823fe4d111fa713072bc5596f2f36b51967ac51c7a017f768c1c47c61474e2a57c42367fec562c5c18376675398a37b08bdd335525ca07927a42b0753722309b6994740625ab3a50dc6b4f620656bf5dcb4ee19cf3d8fa06173501e693bcc9b54a798fce17ca40c1e9c63ce902ee57eb9c4b5b495708cf1a06ffd9119acfa1ea712dd86629dd102376138627d0f4b03bdef01528674d0af5fa06907ef44ad833c74acc5e9bd663753daec6703b5887f0917b29e443c8e0de2d8a0affef3da3ca1e43f74dc30513ce9cc5fe1dff5553fa581c75600f62f3e401095a0a118492359a400c8a27c83596fc701ebc9b7a222b456654db3773a68812f5d00a06921cfc03bd67655473dd9f841c2a357b3a4f3c0e358754c4b6a443d68107b21a09390ef9db2a59d880da115a338efb87a18a8293048496859754db538650cabbfa008b993e9c3efbc4d691e2986c83f629bd563e5b0e94e307c07b4434075e5294fa0c1579c1852575ee78129f8aca387d7a458caa0c18fae10e39632561af89d0328a0cc561e5891fbe5be4b29de7242ae31c07c2beb026316c67b89e54b5aedaea281a0a41cfa8a9968a911bf693b3742f77f82c7fe8c38a80b09db41cecc9b00e7fb70a04a8fa01eac6ec44ea156e989e3c8ee434565ffabe68254d226221464dfb5883ca053fdb9c36ece15b70a3b2a8bb7709fffe7a8b1c37555279580f9969ed78a6720a07003c5ddfed71de57e2c057b8fdff278b98993bca7de1e62d90509c220b8eb23a0168d5f5bf7ff4b08ee1f909e4b5e5203066e20f5f9302aefa92c63e88ca5257ea09ddb51316dd024e1c6178dd867a623ce75611bbd21763a86af0aec9bd46d583ca0382ed7b6179662eec760a7cc9de44c75928886f02181b46d8437e83d4c36a4b2a09d919f212a296da1ba9c067e96cf6dacf8ebfeffb0d4f0fd4f4a5b070cc278d4a02a5b6a64fd1a5f4ba5c0ef54872d2cddc33aa892d849ca6887ab57fb0b3bffffa0614a2820eb3714fcc8a16291b7151f933791e02a0f4c314f0ada002f3bca8c06a00cfd0178722cd1f01107100063ad7edeba5f1c685acccffe1beaccb6299b8fdea08b34e7d88c022e39e0434d25ec757c502ec932eaaf7d09b598ff32e120da079ba01f1a8e82713261e991e04989bf76cb8824e51d8e30f8b2f6ce34a2f477a7eaf4a05bf8b838f64d555830d4a6612af55a62abff2cccb5ebcb670e9ccf97994b9692a0c0e7fa56334f411b293cc111e8262ffc94b8291417d379b174a4e6cf4f9561d8a0fb1cbffc830a09fb3f8af801873430eb2b8bbe59fe7fd39fa5cad55241eeb0c7a0e0d9d400b2499a5ce044509d2c218425c70494ec6d75034c74df98b335566ed6a0c6373c8e6e7d0261b4e643fff1f98a9902bc0debd300917d03f685bc4d388343a0b001044087ab3158f3df27628b7252c2b485b8a0a941d7088adb97660836fbdca0e5e73d6782f4d377cafa7e60f8003ac5fb6e0c94042c4dfc5e9f8ff3837b8446a082d18ffd57149ceffd13ae4b67512715fd28a6c6a5652d9af2e17a3e55457d59a082d4701004d88929c638a1978edff870fe8c7f63932eede5a6d2377a6708e456a0086b0a91851716eec7d9398cead6c5438dc45fecbd2895a87af21838961cdf57a053f4e6fe59a2e5b5551f9e84389abd80f82a142ca045297dafb1256d481b16f5a0fd982c67468cefcb7e412f93fc896b57cb5ad2cb02d2a4ff0a74171f407b1b25a098de44d45bf71155ddf06d9981ab8e75bb2a63ce05c01f1224ee1977ad16602ea000662c7a6d5105888303a1630a2c3e03286a65897c6d1863d016309c38db3255a0cd517a7cd5c694c13385c13ee54c841d4a8327040b5598225d2aad05d33dab79a0669075df7fc00b4a2b0d08e9e92b0933f481d9ac7e338a2c2561cc1fb5f92362a08f84bd5d1969e711fc62ec7b56863f31f0bf75376f9cad65320b27e7ee283321a0ba45e3059335890c8f1a2fb51b49d184cc553a7d749d96d7ff81c0dde603cc28a00ff1c200ff4ffb95bf616fe026448f9ac86f8de60d29f158425bfb7e5ced9626a0c4fb29fd58c4d88be09b197babe47530299d83386f12b197bf629b3ae4158a7aa020660636acbaec6ffbcc4d3b20a62d7bd5b371e12b668cd8d8b61b1ca41920a0a09c74bfcd40faf3e5b75b7ef72ece5299a663f3705e127d4fde7b186fa2f3fa07a07cf95fe0f835681e7fa5e3884e39b7f91ef387d528764449c949aff513c66e13a09fdcb28b6ce1a46c54690f2efb027cbc4895dbb70a79c88dab94a3258664f275a0256b786323275efe53d46a0ac38393afb84d2400d43ca5efe9b6658c2fe688fea017ad9b4933f3f57aa3bb8ee85071e5c87cbfc0ebd52ab630cbde8ad48dd6dbeea0c97ddbb28c7e19b2f7d4b8e484d15dd2a6a5a69c93814c3ba63da343a0fa4a3da077bba04977e295ac1db1d33dfb14005756e51e1dada137f8903abf4952d19a5aa0fc941e82bdd3f5863a12834a89e74ea2514c36872c22d65ba3a37b2939bd70fba0495d8c490a87f5dad98f29e142c8def8aa99e5d0076b9d2c4dace22913b9d83ca01616ca679ad3adb0f7d2c33325e23b06ec1a24a8adec79b261bb4b66082f99daa0e3dde81c8545e30aa60e7f1cac9319aa6d0fab204972e7d89e817c865abdcc41a099a3b03f17259f30d58b9a15783d86b508297d88394184824cbbb53dcb45e9c1a0a68b792366a229f50da29cc190042c07475b3f7895c4aa9170b6c8fe6927ee54a03a06bf72fc6f5bd6d5961742e25689b347b83a5ebcdd7565e98a9448a3e5926ea0dfa3ecfa5f7399f5cdcb880272429404671ddfd69e0f5dce2351e4f691b1b044a0fdbd9399ca80f82677395381ea55ba8fbd1e283676822353edab7b22f6a3384da0b6e16bcc0141be5c0c241a060876fd3ca38e24b529f2e81ac6e3bbddd5def830a0f0b8bc2b459b960a9c5afb6ecb2cf331bd2d431a0a5c5038b9dcde562b2b5ee6a0c65cc3cfe0efddaf42df6e37b870cafe9fda50d33fe0b57a1a71b5e79b4a62a8a0a545380c5c2735dc82cc72e25ac7ca3b873626c5fb0f6b2ac3c51c59c80c27bca01426e14329f7b1b0aab4838923f06b66af9d8f4f0cb4442f2288d66ee65baec1a02bf9d379bf118bdba48d089a10829806241eaafeb13f3dd2cb2204a146d555b7a0938fdb2450c0b097ba40afb6a616a62a4dfae6a099c194ecad06b60554e4e501a0497a75f32789db59c605ad7fdc30097658d22e301a5b7deadb94e237443d0ad2a06dc1b21426af0f5be2b1ea5312f327690bfb7da825e376df9eff4c535d246ac7a039cce8e44d46d69c6314d1d6c7b945a8235663a92aa9359a77b94970710de29aa03088400769beca9e2386460e8fbf06de4a7ffcac5cecb6efbfa3236844718496a0f4a7e36a9bbde9ccd19b95496b33117b44f5d5fa6f8e103950d59b528f24a96da0b7e62a37d1125837c3ff6802e13756644363554a01cda32525191907cecd56f9a0047b8ba54f8e5f82aabf7f494aa3252814c57ce111fdaf4890c836bb333e7970a0ce8ef26b9bc649fdb206ba3187d3e5d3d457acf988fc6ab3869b33b2d3d10615a060ebc60a57156d6bff95f0024a3c405ae803ed4d64425cab3e7c9fcffcecb23aa008483b775a552896ffb4a7e2f7a21861841cd05f441a5805834da9c2cad749eca060a7b406bbf931c180d9b80851e602b24f59bf671c509f21e3892f3fc976d9cca0619e65a0c3e0f1b5a15307004e96edcd8352b8d1578f9000d6af228273f9d3c0a0fb1b002842bb68f097a87a92d723eedcef5233fb040442cb1d6f90c9e4ce399ea02e2821cae1999b46ff5a5a9b8595ef0b93c46e154a5b3642c3d8a947da514316a0fc4d03ac6856a0ad5c0d6de4ce7278bbf2553fa8dfe94d99274e6f48ee6de6dba0698a137e08d4bb48a39dd9a0925d02d006a1793c3e71d3d269688015215b42b8a0cc04c03f22f3d6e56f92333f7fa011e165cf6ffbaa1942212c4bf101e8a35683a0b4d99c1917738fff898178578372ab14be6391a044a8fb8a67f8fea40beafde9a0a0091a0c8ab652e90b5f767c92e2b05414858bcf4c4ad1418cd055bba6bc775ea05a2ec55a370b90434773976cbfd8d463ee135821bd1897bed11f9dac9ef25ca0a0677b6cda99551868cf34b82d65a7be29f840eabc01c1bb9046342d8c9932ffaaa02ff934581f0070753dbb46c98862e4abec90f5caddfa6d6d1e049af9e7ca801aa03b65bbda68b1ab923b71f7b99335ba38a8facf68b049191d3ef33798956653bda057da649a31c7be87f997dc2504da90323f31092cd5877b8c8afdcddb65f5dc9aa05d66bae00debb3a6d18970dffe73d868bbcaed0e6bf6b5d59694080477e38c1aa0be3fc5a528180166b38d410443051562cbabecaffcc2aee6cff4f668f39a7ff7a0e9828e37af8e02218d61dc9b903fd92e5fb8790bf57a1724771547079825a2ada0eb0c0d0a5ff0d41401823c29da747a0476816e81e83a37c1e671b20db0489638a0c70d414dee58b9abf5a8e496154d13078935a10c0991cdea7ac5bb99b744b05ba042353aea02b2547580eaa8d5e1525990560975f883f335b28088e259b0d4e281a04c0b67eedca504eb35c55d38df62e9728331b339e9b6e8e7859a92dab4ee472da089987bf66d9240c54cceb543578759a703e998556ac29884d8bd0f5d56115a11a0b7f93465feab07689b88ce6488acf38935a0bd2d33c862266f195004e3cd972aa0b1dfb981b85933bb41d04706a6052e64230c6d0764970d4dcdf4dcbdfd5aafcba07db19aa738e49c5de857ee8ccad4547e99bb155cf12e73cc4bbcc5e42deddd1aa059c555b3cbc1524af9c96a3208c5b0fde8715230d517578231cfa67a695c7cf6a0c23a65b849f5d5623f0ab10904bb2e6bf6f85caea7933f6864b19defb6d857b8a060f9dd06b9ca14f84cdcc82daaaa79afac288ebb5e89c160a372ef7baff49ff8a00f64940a279b4f106e4ab6d2b6cff7634aad436207aaf0bf19172db0fbdf9dcba016ac500e40f3c60b32eb8a411ef8bc05d673e6cbaa8732e189ec809a3a341977a09da6d38c44dfbba57c65121c8418d52565cf84877a787ee165557687ceaae784a0b771dbf8c07d355bf1bb5bb36b69e6df83f2a3954d52bbdb7260843b6a567303a0148de2d06f34146f301957fc9cba1b49e5ca64acfd472fce203db1bdb0e2ea06a064905d768ccf5b7148369ace58d93bb6b644dd6ce628bd01750162a63d488bdea0037df26183d2989aa62726dfa3f8985337b1b48958004485bb1fbf5d7160abdca0df36674de34de5205a0d7d113eeac8ce7eea684a0f26d6db5c905ceb00f74a04a057131a352db7f1dcfcec8692fa3e000246b8c778803423e99c5e3da48edfb757a062fcdfd34e394bb7ec025acd0cc9693a8117d7872d5a3306ee90680083f76347a03ea9f686aa39c46517f4f0ea338455cbb777e62fc0b99ee4f2b49d82a107f8cea00677ae4f9c58321f0fb6b7d3d06f1db5b7e25b56115704caccfecaeb3b20857da01ab5496e3f3c268171e0ee63c36ec11dd8c44da0e51c07e9c2da0290f4edb53ca0492e90f07ab25e97ec6bb9edc6fd39d78c45dc320da97a18344be17bd9e49faba037ecde48e446a28b9332f53b1b42061ebdd6c1dc87423b66a083b5c3bb4ac2eca0ed782ccd039f7ba8cc2c11c3c7fbab7f650d7384548df075fc85ed9efa4c9af8a042d8d4174f2c9f24bfd7137ed874ec94db3096c0004ba08860585ff0eb1a0fdca0acddff883f69f4bfad83eedee9aff8927994f11443d587429dbb0c8a17e4ca3aa0f1bc78bf6c446d6e26ae060e2ee4cb7ebbef62a30d1231b5a430b7f40e29e7caa0f9a38b8b883c34bc5372b762c3b4c8a9d4235a42e4e003368a56401006cb0ef6a0a0bc6b104514f653795151f224e720ee41fc1324c3197834ef11473c38778dafa010ba045d2867c18cc5af5a5dc6e068f4f0b8da51a85d79d050066c3c8efe8154a02782f521d86c7018840cae27e23d02bfa123c5c5fe3068be2bca34db1474c863a09f10591d0613794ab1d949f124f5fea0e912be52af76d5769dd2375615696b2da0402cd542705aca32c85e79d2ab11ed9ee9917f09f8685996a5e34e4e7f683298a051b40ac3547655e25faebc3b5aac4c271d89824368c3851b56fd12f09fa18163a04436aa342b08e2ff45273456a7dd7b18684b4f1ce6e76e0c0793a26a8b6b9df0a01a5f30f93759674ffb78323b22e1a3d8ab1b0fae69b6fb1e96934b874abf77d2a0c26f12fb95a8804a8ae9cef274279bd302d09ed021cf9b8ac21cfc12ceb226ada0224b76ebea4122ada92e4029cafd47a7f63cb5131626a1ab4f9d4e2506d8f4baa074e16d49847d0ad90d833c29c9fdbdefbd4e737d5909af4ffe874c5fb08ab0a9a00df586e3e6465b3afae4b5fb59805d71e83763b315e9c4c2bda141f46bd3695ea01b29165c3a5764aabac51433dce7bf932ace8d6ce55ce507ce26027368bfc966a0ed7b6aa97a155093342c175bdf3fedba0dda148d29318e9a3c3dfda84c2c6ec6a08700b966c1f345d9505b9a0ea0897411b9939e38ef7e3769dc557e7696811292a0fec5b32528791064f029452c38914a6c6af2d5dbee07419c7ad13eeeac73ee73a06f4cfeaa31f448d7865e1efdd443f4073dac622cc6c8db3feabfdd6e31da354ca0193efd951d5629043459529ffe18d004d4d9f6156d6fa742c1ed4841235a4b18a0390848bbe852f70b72416a401723481adac2f3861f0319070ddd5325e6776022a0bdceee600af2d858c0220edbf7d04ab3915b759927d4528dbf17693d447ad46ca08c16ef47ebe16bd805b74ccad158946a0fb2fb33a2edb605a77d1e00f4846053a08a16df9bd11683f1235070a7f63cb0d4feded7ac73539321341a90dbec7e4a19a0e22243d1166cf7df630cca5e5fc83d47f9e59af998ff5940d9413e767fef2e5da00e731531981f187f2986b62e25942e48d1bf1c94fa459f5af24e0a6fb4c062aca0be4df5e14423b369eaefdaa53262ba102d79b4a67fdb1507ed363b9faeff6cd8a01ea939691257518378f91a1c8e44aae84ab334e501d5ea8e79339d2625d6eedda08e6186d7f9ab11e8a36e0c5eba78bb6a5e6f407dc9f2b7d9838b6db7855d94d4a0862c04b62c2794e1f8e6e4c734facda468b0e1f68811dac697e7229d8b30f34ea00f7db09bcbf703618e9ae8e718cc22eca0a61a00aae343c462b50ea70df6d8bda00f6dc3cd34be4c4768f4dd8cf479c61f16ddf4dae71d253ef8373b87dd603152a04d6e08bc11c44032b2eaf1ac1fe59dac0e80622ed8efb36526d966a5392f0c58a0c30670a61c73b0ac32c71c7183c25440139498f8984aa095c3f6b7029b1f6f9ca091cd41b6511d8259fd452aa35ba4670d968f36ecf569a32b0c11c56c639f491ca0382205ab6749123b27062ecb4c114fd1300a954118528a7eaa3a43bc005ab4cca0924c2a1b157c9f4a6a53906379b28e479ab605f0b6ac499c156273a0e397001aa0fa8fcc75f97ece6881171f3391276c29e3072f683e0628005808a9cd9f3a019da0e325399bf36f9d4b9733ab5d7053959c5e50ec1aa589fbc704a1b06203d5fa95a0182da31a9424629c44e8baea4b18687c72ab369ec0740d873ec1b66d7b7139a7a08fdc2ead0b5b530f9c4b4b3c557a16f60cc64cbe62ba5919c32da1d22940f862a0f9c45db1c44c65ff4f8e8e414e784d9c2970d4e8d4abbdd7dbc2afb00f1072a1a066c4e3cdc5637e044fefe5b691e98528b2a0849b31a8b935ccbb9501201e9a70a062c68c925ce611063e0e814a9efa88a6556c0667bc1334e10015760fba003fd9a075eec9b914348d8202ec32e776725e5c58e2519a90cddd45f5c47b7c9e52f823a0f454cbbf037d73722ec7bd2a5d3b95562e48bbe636ec0ad867ceebe5355b216ba000e0e16411a29fcb00345cf691cbcaf5cf5cb4bff2f96b4d2addd3dddc876b7ba09bd0d92c18c1ecbe38e0843dfcb309bf1abd37e9ad36fab73f441cd06c3ae1c1a05f34da317248cbe70d422719197cfa988b3e40f7886f1da82b81f5068f1e4b90a0b4a6b9963e328613d14389a26c3add1dbe38f5db3788c9db23eba60837087504a00ae050ae571f53c62a35162439b0b0d85e3a2ae220db2b461ecde464fa785b7aa0bfbc046c21e9c6394abb6247b0a0193e5651d68d075bc97003b6315f5c1b13d2a08b40132a897cd1721a3f969b7032ab28a5f602833e2ec1ae82f641cd5334bcfda01a8efca125db8f62577d4593623560ad3bc3c524a4d7ab0272f4a566f78688d6a0afbbe42516dfe2f24e7b7641ae83fc78b9f6fbbf31485a5c2267db1510726ec3a06b2a911762f67acd6ecefb43993f56d64f1ef7538ed3b9adf76f8edcdf680c1ea0c2b062d2d676e395cd07fe5191f9c14a7007ce0d1b26fdb893191a69b0c4cbf7a010fea309902ffc6b5c51c31e15ae5f333bfbd09540be941bb1edb2321adc69d5a0be8d372f004419b74c409977368dd04b0accf9ee8f52513bcc7f691004b28a27a0a4eda3fe7afc419bd512e98aa0a0385abdb5c7389dc80d5b43e4da0712e66192a089222ec2f9352e2b8c1fdf3ff51fb772868bd3a4ca9a0df4e33529a9063fba30a0349f52b10f39e0402e93a8ca1c043afe24e8d60ffd13db5256f997b70241ffdea0fdef9562b951ce274c074be5f29ce69dd5f83ee83aaf1f82cdf978ebf789da75a0226d479cbab09dfb2a76f4766ef1663d7472410aeb1eea7dfe8e6931c2912668a03f8387e0d0325ef603d1b6d2e81ea6773e8b8ec6edf4637789c797939ae2e655a0d461e5dc8b33115a737ea8aa985d3d9a05fdbedfa3ea4264b308081bb5bdeb85a0cdb505a9e0de8774ff8a2ae4df340db9ab42b638ba301ff8d5127afe7b6fbb0ea023a6824e8afd9850398feaeb3bee2bb13334251ed23a63a211f96b1cbe0a265ea0c260887cd52a168f70705565de94ff44a9c87ec95041a6058cda34a9a2762e96a02e7e7a45e02f628631c4e55afcd18f72fbe8ac764735da20633975cefd4bd30aa02ee14f7bcc03d63de8cb70ac41743b5bea37eed1a560bd0635cace4f29bc38b1a00c215247bff6631a502bb05254acdf4f5362ae94022a2baf74e270cb67b9c095a0cc8b385d0eebc2480f2b57202809ce1a6d9d8c2f697babd0722986828b5e0b36a071f57f361046a14d92b3dfdff6ec1c49dee0a9def60e1a960c9116a384b3b790a01a094b41425b8c7437a525b3a14c4882d53e9b6c3701acbc9a260fbb9643082aa04b832a3e5be88f697089f05c4bae2e6a5c6062a626b85e27171b4e25ab2f5ef6a0f25211e40505531da365d860c330b43509757b58c7642dd2caac2faf383a2c8aa013250fa85ba280c52af027081f6904fd133e69ff1f14f453cf863a69bce85546a06dfe2a019f8c7efb9970b4e7af757f426994f73d024f6f02795a547476ea1b78a00dc6e517336f720f028d4b3634334969e9792e1c39c128e26c45297a48887ca7a089558dbc8dce173d482d1f351cf89efef67a4f279b6883e1d69bd8f87378e3e6a0329547d6c0dd545b1b73ddd7d00c161980fe795604396da04492afa6d33df6e8a0483228177b62d333fed9968c6659b2aa005b34cb0ea4fd9e3c9501f714ce52afa02a8f651ed936694397a4f7a66de94cbc7210d7cc5386d6556d11f354f47507d0a0bc061d22b3979c4e822345a2c9bdba5e1ce528b0648f9e6b17193d8edf678dd2a0550e441a375518f2cbf47eef76b5756202dcc4fc5e88d167001bff6eeb555871a0be2fb9e4482870b98948012b17351adf90dd0ad6858ba8e5d552084a6d93e0bba0606eb95ad4bde4287d46c1b4980204eaceae1c32c198d73ecf9d655d44a6c355a054207c57e2f1469919ccdea23fbbf10ee461935836b4ee3bbf25ff49ea32c432a0b96d05e3c8448a25013dac546c586fe483e50b29d597a1919706d8ffc2b3f0b8a00b18c2a8d69a68584464fdda58c3be455b7b1c0e4d0319e055b15ebe22db375ea0ef5768ad511fce82817520dd50be73ee0f0515f28e22b1ba193a7f0e40579f34a07301987e1fa0ee4d49f00a40687ec3adc6579eb8b775f99fd1f40b7dd339ea69a084a8cbc15bf156dd982bd6ff1357fe823ccef3e6d8b75696ad788600b09f494ba0dc906d60c350e8e704e9e330913d3fb10767eb8b0cc2e488623c8e6c44035264a0757f0bb63f6436d980fd5533cdccde1f8397d9d2b873e0f6c908281c717814bba004d24449f18d6e7d4fb1758144508e626cc549678600059633037e40b6f11aaca07ddde99e0324c4f4d43dfe35344e41fbb82b8035f770170eef1358739ee78e32a02ca05146b3960c14bbc2d99493de5a73d3a927ddc547c486fb5d3371a24b6638a084bbeb7aa67b436e39f96621230d9aec6024779c3b0daaf181bee1282979bd8ca04acd4561c589df3f79dc591df1169b4a3e064816fc79079ee6b47cb9a5988565a07920fc1dd38409cebcb93f0b2ed8078330e80266a5a248fa191cc2dfd6306fa3a01b416471de263f91a6aaa7e60c63ef36ac0a52e13c58d2f5c1518d734487dfd9a0baf8070c29d6bf90523de3b707000e74651d5d50c1104162885bd92c4cb0b4d3a0af49f426038234812212f48f038a786f01b1bdb6695c8eecd8494123085f3757a052ad0c849ada136e2d892b45ae7ef4eebe40f5fc5b54c267634a7fa3c539a960a04d840d1ec05a5647fc4706c4e35f2101a2c1d17b816d18060c0d523f6658c8d6a00c2ddb0cab7c273fba73d6980d80f8cc39afa142284b94949b3d83b4f0820615a0f93e6b1127eac7552b76ec684856ddc641dc26c0847d6dd9b6abaf47940f501ea0e608fe30cbc36885eb9ff7a9bd19f43e78b2b41dc6b4d3fb9e55fdc9f401e657a0d7eb3033b4dcefa595ca6bd9fa9b26bccda975e5373e363b99d3eceab2e58f44a0b068a6b7d6e14fbe06d9dff5bd03f2d935853ef47c819d484db234c6ca630de1a011f203308ca59ca62f7c0f3d922ee686bedca1b110a8e3ba34d721856e621e4ea094641844bb044dc8177125afb3d14d6fb3b5442f9cf2deda36c2241c0aef4104a04dd938d82af87befeced77e2f6f1954e7c3b1d5c0d9cf6403bfdad421259ca97a0799c7d3a3cb7e4bdd20d9ce2834c890eb104b21becd7636170ad088b05bef335a07531ea38583edf0c100a300a6e38cd1dbabcf597f0ffd0549c5c85f4b178227aa0965a079a0126a24f5612280da7a3d0064eaeb22f2445130c135b6c687afcfac8a0ee8d0d11fb0d99bc4ba630cb515542a9054ffabfaf2f0b9df150f5ba54205e01a0f5e986aa834a9971248b9e754c611764734dcdc6d89109cecf70068cd32df56aa06ae1e5ee8c5789e4b4fc7444c6ccda2145ea26b218c5fa893177d5b52b9ba1d2a0dbb02334e62b807a7f609203ed53490af7c039cc04c0a1ba221f60e3f1fb8805a0bf1d2b735d91052e0bd4a712a51aa17704580d29d1523932554e9bf20a2770dfa052a180e24ca7463e1c4a96143a2d069695998c2bf2dbf9782a9ea47f91447b3ca071e1a50306a5ea9bdae658d63e9fb472aa1c03c099ff51cd66fd7e6e7ab8f1afa0484dd7149ce9d291af8b52b2d6eff6ca65c75cf5871f1cce4379ded3a05a369aa0ea76c15d5a18164c0ef07ae9c3a5e17a85bfbd56cae5ebfbea2a4ca266ccc720a0d17d6bb8f0db57082ed47573b25bf45e9dbe38c58bb2db59c77f877dc5a06c61a080af037d72aa1aac5a59b036a6849e47b79c018eb7e4f87f0e76323b6c7bf4e5a0402a5a0e9f15f6c6a57c770fe6abdf36c69379c448c86f300d3bb4434c859ccda033530d4945cc6c1c760051c7a4f812f5c10ddc82b581567947020f44d76096cea02fc19b7d244df2e814128fb30a2a5af66857f292025f58a88b30386aeda45bf5a0e7060c191de2ed450a4ed9fcb7ad9aedea1ca89aef49a0fa017474ad2a0c625ea03501ba6fa616b3471e091be79785cdc4462126bf4a050849a5ec61adf96c8f76a050b1d25a60fc50c002e04f5304e76e1652c380c1ad4410dea840b32fad078d56a035d53ff72bb7ffe8d7ae4ad5161e61f7513d27f842f32806ad6db41df7ae3e56a0cceab0efce7820af9775a4ab62e113954cff5f3d8b93a9dfd835d7583e024dd8a0a2cf591e3dea97b95a823cc98a1b24836858785a36bfbfa007a05651ce11f184a0ccc9c14be9b3ded346d806e31ce998121692c1e1a77d2c4e1aff1b68c5de6969a0169f0fdc0bde2f85a8e92307ecf122f1218d02bd5ef6e5ba34f7a5e253040b18a056d17e32befdb5cd857d1f7f0391e93690cb05a7556ffc69be410054ea3f8cd7a056d0b7575b86bed77ba9876585ed742678c770bfca70e4f1f577f7cf2c4244a7a0e31d3e02e7ed4f6d83db66bb56f504d242e194b054bf4b56eb9708b5022f6deea0b9fc8d8e907ce53ea0855b00d8771bbcf7ee3706afdf8724501ad2f9d5ad707ea0acec33ccd2d7e32893493a776b2938f846fd8d44c0a21d783b6f751fb1694f6ba0606c54b853e1aac627f37964362ab818cf9728f9468dfe3bef523559bbfef1e2a0724cc4a4d7359db54f1db22677ee07be5a7ef1d338e6c161ea760314d84c5c20a06a3688e9b2a8972db68d6c1332e788fb75f9349980a48c0f2ae0da36c5c171ada07220bcedff73508511f21376b2c82648e9b48e5e0401ffc2266586a50d5af0c3a0dca735e534e5931f3f215feec7bfd13c9589d13e706637caae165da2850e17cca0fdff8f022ad2903edb62ea9805259a66222d17ccbe145bc706ff799d40a682d5a0667765ed00e8a801bd45543530ef61f80933b9b39d620571788a25b953ce72b2a0b511e6823cf0506e4127eb5ef699ffb30ce8b5a0cd24ea3306d4aae14e5f942ea0e4386cb1037645d7b68872f4139d2ef78ef1017e696b22a895e60f626e470b4ca022d0a8b521c0469f4a66f01f94a85cf1ccfd27929a169ca67288793747a4e220a0421bb8fb2c4bf69b05c05e75886ca5d051951657e73bfaf8e9c6c1569931d44fa0e0a220c24f7f4300198853d9df108943cbe52cab4fdd7521e6c294691d524624a0329d08f946a14ea33b5ff9f984384c26dd3b5ab18132c091dff83b2f408c6737a0da16dff10175b7b2817a5cf3021fb00c861e238b5e479fb9cbe7b43953c36406a0ced03a93ccaf6d1cf7cd0af3ec5ba072503dfcf7d7fe92c5a18e6e8c38834e08a0a981457679a6143749881f1592631a687c6a93dd3124002a7b2d5065cfa20f26a0599c9df54a73993033afa6519976305af121ba3a228bd79f56c56eba9a8dc8fea0bd5ccef7bd66a49d2b2415b19a4880e0a3d25584327f4fb5e65a130689180e16a04897eef8a1492b95f83261c6aa47918d686240c49dce86a17b2ac04070f96824a09382b6fd948fd12b2bb6c7af516bce169621e66830b87f9bf0137dac9743dce2a0e18cb772cf296adc012e6b3c3809ec6e55d6ba5bdb48f2215bab2cae922bc87ea0f2b5570eba9d9ae14711d21f6c1d9897b004470241ef84b4aaef7c9fc406aae0a0e147c8ec5bfd391196250b13fd4296c7939bbceb655a6dd78630b26cfc5e6e72a0b56fc13bc6573c1a8c845efd6c36f4160a0e34d51cba65972e4e3f43baa4217aa07f41075709b2c583982378d94d82f1113820c408a9c231422d32de73d0291aa3a05df84f1c7e339ee58804c3b61dff62b7deba883bf649ef94c7aa81e867d8a75ea04c107d8034ce3684d03104d9a5713f600c63a4bf39620079882e2230e937a55fa077b4a14873f7b3412b2af964870f86738dac57511051cbf5a01c183dbb9f0398a039b7b8ccd01dd9d3f945c68c5ca924be10d9552a14c7c5c83d368521ddef3797a0615a076040b6b37098bfd222922bd92d36349e29b9a561a59680836965ce1fb3a03c88300423a19af8760ab70fa97880de24f86b89f1f794d3e02a88a432668a9ba009e98e60bacff1dc8ea8252bbba29cd7bb9701ec6247fcccdb7efc3bd1c1a335a0489ae10184f520f1ea651838357316966d94422a9f4e27f97d3404e1084eceb0a006cadba142c0fec3129f0d0e6bd4dd5198594c1c2fd54527657882d93c076284a0f15f465020e3f9a9381e9dbd93cf06df86a8ced30a09c910ad5972cc9618a3fda0dc213cadfe19ecd343ec45d179a4ec0381ac0d7e87b2ff776e161e0073342658a006abd5263d89c2321aacbb4c488dadffe57337bd64e7fe431f95af489f6a12f7a01865ed6fe90d8b5ff5c3d56335bcf162a7c1a755b3ad5820f771dda4c08c241da003eaea760c2ab237a7a1b0c6d32b52d470106ab2b26013fe4300631f9fceaf30a039101a775e8a5f90c7ac02367424a54847f58d5a70adc24072daa0326905beaea0549e71d4271fbf177b0999f1ee675f0f776a6dccd7d38a724b73ff1dbccf0035a05346e042131d0d1835c2072967bb1e0db15be86acfd301f82b8b78bce960b4f3a0d31e12ed7ec45d7f187e74315f96d8491a3ed61d972dcfc137ea355299fef17aa0e949aeaca485b95d3195cfac18497cf53b1c42f2730b2f80f3298b0b6b949385a0045e18584d63b45eba56b55a1e1670a7dd590aa8fa3be805a41575bad4071ec8a08c38f2376003a081d8d583c05cce71698d8a154cf20e0afe4822fd5401bdd531a0e8a0d821b6575ad5c5558212e7cd3079b7a36bc81027cd4db0b412d66a3074c6a0af68560f5bf8bc4e37f1ef44f48e690e26b7d56bdb36d6f1125b667f6377906fa070db61f4e452cdaf20888a1756304a5124b1b2551e8cdc4c1b904e10a05646cda0083393044cb42737d2ac5295de83a014aa8f7a5e3079683d3568b666f50ce675a05609d1174e9602dc63505000db2a79e6136587c147a7d42ee5402b8a27c1edaaa0b8f3130976439aa55b0c893b98a752a0dc827ce514bb95e2d9307124473352aea059e9b05656d4d436ce813f833f1b98bcb528ddba0939cf4a32d9bb5c6878db7fa078ed7cd52b4df3d180fdeb710f5d067614e2f460e08fe10d6ccd68ad3d099aefa09696b69a32132e276cd5592400cbf1d575eceee39422dadaa50c90a77b7aab23a0dc8520d76b0667f988b37d56bb17756666044c31bd8366d1a5a824148e9ca9aba008a185564fbd5a48f35317a50e399739438a0417e276a07cc1715d98ede067e6a06c6cbff6cdd721bb86b84c5a39f4afc5362180b73f107359f2abf84c65972898a0eeec047815b1e62dd058b314537de361862f43066dd661768043cb63c29fee68a006d77b9d759fac80b5f919a15b460b59a79dbd3e03d9eeebd3ce3220af0bf5e7a075cd0daf1b75f6dc38d45fd81e386c4575da78dc4ca12c39b6b0ca98238ef0e9a0c057e85e5e6bda93d022522e5337715828552b35910d2eb7a44f1cc9f5cb4817a0ab84ecd3cb3850a55fde6f1ff7c5f6d11b0f61ec45526cf6d18669a0de5c4f46a060e1f9947a714a6c62ccc160fa5d29d13a237554fa4511c9e27e63bc2b461969a09e3afc4590a4ccfbb5743d506abe3a1a6c335a17d1a39d0bf4e29a60ded95502a04d903d5437357d3d9e9d8d12764b19d4a8c6ddae41e1fcb641108e1f0f56891ba010c440367896f516654f2de507dec82489cd673eac909a3e1e5279f632d79ae4a064b58eaec6a79208aa2229bd67c57eee0d3bc742b1b219ff4f46249ab53e3fb5a0ae48c56456e0899170cc3611b51c052fe34a2af56ff2679f89cfae286f5626c9a0514b141108df919dedb37551b549d0d5c638ab278f6e17f7472a5ea703cc9e93a0112708fc9f82fde560dea54584549aeb3c9900c846d476e4dc0a0db12dc7598ea0e1f487341a21cf8ac3d74ab692635a2c1af3be4da450c3ffac96923c8bd05b92a07e54ef9bfa14501c5276b1e1f387d9d1d3d43bd40cad2cf324761f807470227da0679469586327ab352441ec4a6e761775b3af6c8aa8cadc7d12eb29c440bc67e6a0d4dbeb711319f4cd505329c2460c66f8b4c220d339bcc4f6a92982314f4e1c1ea05959647907d6f0aba937d1718b2a0b38e4eb210f13898d622c02a1fb3a368355a04e7172dd00fe4c5e13ec9f3986845a16b29b7060ff93c21a85893f2fcfa42c7ea0fe371fd0dff07e23dccc3b797428543fef1119a7293943872cef1092ba18b645a099c828a7dcee89ac30afec70fae1023c1fabb51f35c7f3744226444a53d9251ea09913b44ec2a761cf43a44b05751d50cb65116d3c1e41913f3c4feb4d7861cdc3a0a61ba2b8cf9bc4fdf45f290d624a6c8e4cc66ebf67ae4ce3d299e879734990dfa039d2c7bb65c1eceab728cb8801d20553bd9b930901ce2b4840801ce01f9848e8a0c4d237232e74061f5d6d82bfafbcaf15d78e556fc928981631349ee990ec1597a0b2f99f666716dba56d905bd7a69670b04b0d7e2a58bea3e67497b99258c3fe0ba0c0565a32d325383ba7a8111bfdcf9066b939bff897b31117f555e27b104bb419a095509c6a5907f4c6be83c96677cc11395becfeb34fd29d6222cf26598c2aeaaba07b0299fd2386da795a6f2b5e0cce715e47c3fdc7cfb21caf537fdd12e01cdb66a0b56c2605d187826eb6bfdf271cc4d3f9c2b75432eb8f8596d8e17feb4cf2215ba0345f1380df4ff80305f93de260fd316e3094a35326938f63831712e5a26f1862a0032e44fcf991587e14dd59995882374236fe4598adafa06ef3bde89f65b50f36a0e471dd2521f0e4a1d1c5ffb64a0e40c3fa4ee31df7dd484cf0adc543a8a3115fa0354751d8799d400ae195d68b55e11e1b0f8e6c23c1c2407d7966fc863f7af9b7a08fc77ad172525ae57902b648191610a8d212fce6be39c39822a3b6b6deb2a74ca027350c807f757f882c717959e2518a61f6196781f7b95885d255de8296aa7317a0a0d1253e48c48249684e6027ab826a4045fda21f5cb50c86488fecf03376b8b5a0032b861d5988294182b0d17a24945b9c838b0bfe59730ac51c363ef3e2c46850a02412d82876cc942f4435ffd0226a13da30464d2c44eb48ea10ee65af72012b13a0104e3441bf70413c5d595362724b89d000c95171f10baa174c052bbc5d6ea15aa0c96930eaa80527aa50087ed2f7e647f1bff9cc79b4fb83ef0397dd8d3b2dbc06a092453bf07b2674679a1d22bb0b2ff03ce0fda52b12c1255a96908cd7a1443008a06336f1c758e4162fd65ed81f76c4ff9180fb8433051c60af8e061a0cd2e35db2a03064ec6c9951970972466ed3670fe25b6988f55b66e246193aaa097720236d13a0980321a7b9892cc97293f706cc114fbfc176b87cfd175ed9ca6b2100f3076944a0d36631a24919218962e9daa8fc74c15364df06bf450acdae7e12617ca87f11f7a07ea40d178f1d532b1c23222b460910306bfc32d3fa77cb7b866179372c8bba65a0964f5e9cab0e6644c6527f1e83788636f343e0d0df4cde8fb985f4e6cb924e96a067e61f18a431a0209bd2f13a27a668d01e1a6446988a86b2e5ff63185b99bb42a0a54696d1b4de82b5bfea1730c236fc8707a56fdd832f2936000e7e8958f94f0da099083f4d972296686591c0c85b272f0525e7c669628c735e642034a49cfcf10ea015d1b0e85c399577eab3913174fcd4a1b35f6e87b70c6fb5b519a9ecea7eae42a0ee0e1bcf6b5c5600239f7267111645bd62b89eac11304e39aef284ca06a537cda0e0112d8c8828dc93c9d593f05d8b31277f582f63dbe03ac54c0e72177a6b4bf2a0efdfe2f5df88a1a75e4345bce833146ef0decbf0138cf7c4f407d2e8b64345e8a093aa6d689e7b3c11636000753524ba68920047e9ddcba5490f8672b9ce11f1b4a08e7a873a06fb1b0b779c49f28bb89607038b839dd404f1eba8dbea0ddb083cb0a09c753223cf62b3cabfee1c6a3d5deddd39fd21ee8eb7a0da802bea6962a0c653a004af839600de8c3ed163c10ade2dca3bab4acc59d7c3a416fe4481fcdd570300a09101244ac7b0ab0be4b2944a2ab2eb8eef165ad362579189d2f4872ce5a46c59a06edcc73f83f749109ee1376ab39f3046d41fef3883998c32077f92a79a146fc6a0a64b6f94ed8ebe9507bcf37f2f22a100bf91a4c716607ae1f4317a3260ca7804a0744512aa19a17ad1a4fcfbe4d2e5bcaa8525f85b728ef06acdccf37f117e8eb6a09466fa9ce6a53470e78330a64aef31aae9bec2198796262d866d3c2ea38ea9cfa0259dc0868d02957cfd7b128547109f5616c8aaed5c68b058592681c95f74944fa0f9fa524c9c284c7080b092e9ead791eeac6f4722ff0c424428760ecd3f3c7bb1a0b2f7842563dad121951f77220a6734e9eadf9c6003fef2d92ec3e59c89f07909a063e545b41c420ff287a3a7abfeb523c9100e7b3c6dbcceeeb71863c9bdaa2f3aa05d947868ab6f8477e0c90b9b032bed9eebcfbda29051029a3d7c3ca536b77bfaa0b03153280bcf2f2cc3c9f9fe18c5a08573ffc6c7344a80fc483d9904eb991cfaa0de8372d062cca78208f6cba3f2fb514482f5964b8414d9713729be8bf5a046f6a032fd527117e2e0e09fb7bee63b70f1e73dda6a13f27120d28911592bbe5be347a00520b124b8a4bdfbf35de6510204618ced8527492d4e745d8b971461d0c34241a0b37bafd766f72a4f90bc194d910b1fb043388cae17cdfa4aac2f125e5a50a402a0784edab7a0fd2a708b57e542c77fadc12a6032642c8e93e48f4385880f283b2da0c8d5ecdea4d78f530d07a045c5a3aed4972634791283bae10c4d0c6122b4a418a070192bf70bf69dbb65460715901f396cf62c1919a38c60cf46b2edb71766ab1ea0e91e822c7c0943f618cd1c303968d4a661be163928565e2adbfe65c6d45694eca0ee0004ef3abf3bf2eb95f82dd1d19cba028d35c0312fc8e365e61dd20c1adfbba06dea3822bcc315009e1c5a26fd97efc2b121b32ed39c2769df8b7b7ba8de1d98a022a2739bf8cd4b2fe2221fc4342314709d6b2c32f5dc10d43891cf55be0a83eca051677a808e30ed6d35b76959b82138651d89c8e0649abde195a26cbe5fcaaa1ea01b69d2860608f638601f12a9385577aee0f8752896a03c076fd0f4466a8ca290a0c8a98d6ae0ad43f000edcc57786ce7ff633bbe54514d9a27461a52af203bbb6aa0c6ff8f7b45c663a80db2d828d6cac0a3b9d21be757cd656549823fb645d59120a0a2313cb503faf1d68d7b656bea3da027f7c8aa77fc6ac74d4118207c71e4d27aa0d3440a3dea0bd5914fb36d73e8616d7a53a01eb675897e6b4a24eaae93319a34a03b8c96102e05c1a0ca281c41a51b5f51ca3d0434685d6c3f32b2e4dc4e1eed4ba05c6bc3a4ab2c9d082f0658d18f209fb4a752421e217123b7aa053732fdb856f5a011678fb8acfb74282bf776295f3698461d8fe3bb038f9f78e5a0027361e0b3fba03c4864db560500cd39d90768482576495f3143e5746633c7bfc6f45988535406a0990e9b004b393447ce060fd2ee3a423d62c4bd68932a110f8b46971a4050034ea096351feba5f6d1bb1d30be7d468db652cbc33ddff7d6f880140f93d1611f928ca0180cb121806b52ab5ac65d9e27ad32d873578ebe546f5767514457f01420601ea0f55f1964c2850295bcc2a29ae2f7561d1c30909555eadef01254e73218a4fdc3a08f742944f742257c4d909ad46510479d7c94b1a7ef8d4b662a3eaa11609e9992a0d771bcd3e1a360c96e20be6d133040688552a53b448e68eca445b3261e1b6beba03d3038740a0083138b140d3ae4df907532dea170a1fbc493ac514e48b3566a09a061fe62898cf9b2f651221e54c0f79ab5f7fe097b38154d194dd21fac06f50096a053edcc84b01c7fd4532d0f84168078d09bfbff05d6aecee16d1bc031fbd63f69a0a55576f1cc391092332f9dbdb98691697e4d14499e4ad1ef1517b15bb544b8aaa0fdfb414a32eee7a467537f49fdef47d1c52281854b2d6d169c871802167f60eda013f9029385eacfac67219c0d5c1656feea637e9c8189eaa18cc4c8aae2c3c3aea07a296d6391a12db2bac500dbceb3cad33548ea8c93172560a976ba2195113c84a0bf56b32fbcb856da8ad9c8faa2cb0c42cb0573d383c074e62097c8f067386e97a0160fe189b99b19faa19c654dd566883fbc5a2a3a926add307b0dc8450d109ad8a0dfbeec6254a1f5c1c81352eee806ba438f6148dfeb190a9212c19878dfcb1861a0dc32bda6c2f8fbd76defae498679898ee81d8054a2605bc55afd91c5b2de1162a0b0affca8cff25589a7c3208e812be3b11f1c068e50904f6b0b99b350feca0332a0b1423e5d87d964c6d4e0ff4a4ad12015b2fe401f840c8b0723d13d517ff65daaa086843631e4cbe14a03ada76b1ddfdc5097f831979eabd98203bdba11915e3fdfa04ccd65d0a9420b8e1ffe35341db798dacbbeb62b43df6a71c965f2cb5a46facfa0a6eb14ea293c555b3b611005b44389509ac2b8ad211ef2025b213a1b62e9799da0968086584dd43dac00260effa547c85d7d7e4a01f79589b3663aa68f1d8b09ada069cbc608a37210bbff06ebdecf108f1333311d7cca0d91a09773b812876f228ca06b235f86a517b5a07b92d2ab060fe8a14c60f520fcbd3a466e1a8bbeed1bd3caa081dabe99a2175793479b26c343b3433300fc4a4b627b3db80ca8e664ec6b51d4a0bf43c2be60c3ec36ada75e1e0bfa182ef42811de617b27fb3abd52d3a0aaae5ba0b60a2139bf1a54eeff44afb38abda9e958f5242caffaf571957e0b958f0e6487a01f0fade98d1d59d95292cbf47aa40984be25fae7b14acaef97f130e03a825b4ea0e14d05c082c419204df0a08ae9485218679a932ff5f257976b029c0d13c3894da0151d8af6352da7fba1fada8052877c21ab37bec5acf90868023e16232f649e61a0a8a51f51f748d5926050c9270240cafffc6b1f4f6361756b9f321ccce86e67a1a0c357773674c4b78e36e8e485f9177ed38db3a63c616fea9dae41e4a271e0c9d2a0c55d8f387f3282d7feb8669ad47899be205ed499435e5df2018d6495e0871fb7a0f8142b886654304bcfc8efcc43eb87bc8b95e4397953463b5a201a2022e1eaaba0b19c3eec310b813efeafc27adbd33831f5685e4a617b90030f80794fefed65b9a0462e80b1f31034d51cb0c46327769afa968eee5277ad9dc7c27d47713e333efda0c3266458cf54331b901d73f856ebe5c83d9b9d8bfcb26a9d6319ec857c26d0a6a07b2722adce66c1583ce7e25b213b95ac5fde774166508a0744f72b37ee5cb84ea0c3c5a289af32ee4af01b2d989cbd98dbb83e25e77ec95434c78c624c38f2299da07c98e479112b81f903b1c35b541d83065acdc14d5d3310d10df1ce1e6bf92defa0e7d76cdb45396fe517943cab37f8d8724e4d8f2769d8c2dc10b3903ccc6a7b2aa038a1f6fe9a9f777d728eb9168fcd83d88aceee0beb083f28fef0fd9d92ca5bbca088fb8b99931d39aa6fe64aced8ff007dd34997614d265afb67f486aa04ea97d4a0f3fc8553b626f339eabc866fabddf16c2b95c99cea5182c3a3a2f978f6bf580ba08fdd177f929f1e0edff5f1a28fe04096550fec500f189d00f45584ba4b1b75daa0a9633d8953177978f896093ad577e3827dcb367402c7f4432a8062f3b4e3cdb0a0124469afa55b5e0d7f1c5cefa800c5ee29c0e12427c97729ef139db5bb97d927a0a9ac919367f9f37207b264ae4d07cfcc6494ff6442d674310c5f6fd8c0bcd6b3a057bac7e89e2dbf6b5b1d8e9801a7b95c7c9242960b65f47ee44223f3facb7ff6a06d7ea68141b2ee6cbe12013b7d1b9dab30e334767d049d2f63e68d378451f2eba04645216de8b21758c0eb0c6dda1428ef3a46ff4f347f5fa42f86b2cb3aef88b0a032528394764dce7027d36d3cb9d1fb673a01d8e8448c4a7b7e46beae53b314f5a0db4417c8d2024233336fef43433cd82da11c353061c6bf4ae0c344f7121e3a1da05aa3a76786ebefe35205712e89ec5c104f5d8f92540fdfa44f6d00a0375f9386a07e999da64da8a182fd3da2a4b9f1659adc0c13e13a296b5305e6844606983880a0a266c7b28567d2022e1d511b2d16c299fba80fc34d05d6313540e29ee61b3a8aa0d91590f815be7daf12e1119749c54120d198fa345450f387c277827d82ee4989a0e36c4186adc19fe64a88774de02372d13f3bffa05dc5d7becadf49bdcbf31f49a030fc830ca54057d87e6989b34be62dc52136e47f3469af7fec49f406c27de3aaa09c3afbb06bdd750834558cc6e4d62e81ccb9952b070495ec2d1c5b2950ef35a4a01a7ccbeece924a187c84fd9f0aa960a63df8fa866cba396c58ba903b046ac367a060ea19444d4a4059288967058da090d8360dc32a4b82ac74ac91dbb3094e6a4fa09043217b00c76e17975a2de5984819cf9d8ea8fe438a03662478a8f7019b54d5a006877a2181d414280d0994d8d1df043b63c212cad1f810f78624ec9beb013e60a09fa57f18528d442257d0e215e672acdc29c1a1b73245371bac7eabbf4bed665da06300b8df307f18c1f936f1a0969e2234b8f6681bcf34c5e41c5345414cb4c862a0d9c13e1a168989186b3edaf4a491b913d365e9d9ac0e1a232cd650589e847562a082179d8e57a03f2563cec6244ef191e475bd1888a5960430c63ed92dfa42a021a0f97ce53812fabacc5bcb74dfb4b7f4f3cb82754d9ceb3c1d8923b0bd6d0d855ea01018b29f8fffe7b00a9f5a545f01e0586b856e464e84a06158673eb354f59949a07a33b3220f8b52e922e91641f4eee9882b08224162ada26bc63c4956c0f06d55a08aeff496df378d53458d96b1f8d660967ece97e3ed887f03e0d0014d6b9560aaa05a0bf7a19c1fc2e8bff360cd1cf55fa8e558ac43b488002530022968379b1116a0d61e7a24512bf43c5ce4b1c0ebc803ca5c1f4f42f24bcd770ab6c713b93a0c5ca0d0d8b823fee145a8472cf9a05ac905c0e033fffd490288a881e6c5cfa7206dc0a05a1f4f802fe53bb52ef1fb54a1f6a22518744a5867f33c8f2b5636918f6866b0a0a154f8597de532fbd4eeba8b5b01747a1b274a105b3cf67299d79bfbab8a04aca038319355e761d3ea156cba2e42771648fcd50150d9127438665eb59b2c288ecaa0e579c33dccc9ab735b5d6c1d31cda41ef83ca8c19be2716a857f678778a97961a06b17bbf99c58d7294926f759b41cd7fc1c24896de54eb3dd85c515b162e43754a00b3a8a7aa0a503c24787306e7376b98d334021e0e2618817ed8dda2fd35a1385a0f5d85580f8f2ddc5f002023180c73ec8c5bf011f9a7779082c090aa5f84396aaa001125dcce0a073a590f53974a95b7e3be1186cd0c5a7bf9f7d717986ebfdbf85a097cd6bcbac186de85cabca6b051f69f175d7b1eea7aa465df90773c864e38519a0bf180b0dc5c8ce00792c829d963f2643705dea0d9219e678a1afb0763f14b234a0d0d17a30e5ac30800020301e726a6b495409f3b6f0095da4b3c7836d54ffa363a04ac5ba52c4054059fd0ea0dcd86ca1a544b06ec24a6e4941f1ccded68dd0a25aa0f335fd1fbde9dbe11955316f26c4243220fa97c704b5bc798c001bc64bae2a33a06695a338ad912410b14107ff9f233f7d7f0d1e4de933b73a95c52eb16a4bb4aba0e4a8babc298ae2ce9fcd58428d88eea9befb664221160ced5af0b70aa4496585a0d694b014ab1a1367ca54365629c487977aad9da926cd33aedc5dc8bca90e0f79a0a4060c823a3ceb2e0d8791ef9278174c7e386ca3da64591f9bca7dfd540bcd20a00d5351ce755169b479f56ea79f0a2bcf18173f9fdb33f650e32f3f08b8594540a016fb930d045a2ce0d65f08881f95565d388f3841a75fce303924fa0da41a205ea0241506844f411f4c848993c63119eaf3f563a57fff11756662adec2bc92ca74ba08e3ba526ea78d4c3972d2c36caa22a3afe5414149f13e7116bedfb44a41cf58fa0da73ea22aa6701dcb224b18dc07107d3537a6965456305dc489354b2656bb020a0056b2685764ce4a00f79c868d7fb763b036cc996da656a6072c5caa7d9cc58ada03e73d1459df1685be3942698c59805466e778a97e1c196d96d26f5bff272850fa037abd10e68b20be84ae636abafef078c034226b0ad37e33126956fff99399665a0d371816c3f3acd73ee34e6e857825eeaa6f066a13db12bdefcd22aea70d4df6da0f80046a889ff0383ea40f1576f439fcc446b4216d14756440498012474518878a08653bf3e00244a1d9e890c632ae7c358235b2d4605aee1351ea8a44d501ef45ca0535297af633f7ab2c3b5413811a550205d1b5948be09b421c4f4bd7289ca6e4ea0fc70e888efd6f260e3082c2da461bbd92b0add4ec52208780e07fdc75b9ea4cfa0b4e69451aef31d6683035ec8dbe8f82e8dc460c3217fc5a789e0df03461c4686a045cd2e4addba821184d1280fcc2748c4e3aaba803ce87b6f2390c800c512a386a0d0d4a171848be3efb3f775250551e59771d7415aefecaa9f3ccfce101ffc1d73a0463d42a5d2aee560df0b33321baf453a37db8b2dc2473010f664f383f94a1125a038d85a23bb62def812bec4061fe6c6787a59ef9f1dfbfd727531c5f017d97bcba0182ee70f634bb5e1cc42a4aaa2e3670ad5b24d53a97db2dfef18708221febc9fa021487176f1c427fa9cf7e4d8ec2bdb8f28a1d92511a937d028543fc591f196b1a0bc6dcf63734e2184c84fe81930f18e01298471b78d9e8ad8f0e74bb7d5e4f2f5a007170555c564a45c199864bd4945124f6d3479a1478dcd2aa801d0a4ac26c5efa0daf77b011361fb0340d01107a0615ac00bded83a91afb1a479cd43ba804ff5f3a0b990d7e925ced66aa0a1016a9e40475b9f6b96613cd9e9d48325ca1e96813982a0f8ffd1fafbb06abbc06fa9145ea6f95227a2eaaca050e87e5c4923141680d974a04f52070a673f36474185c152170e2aa87b8d5d46c795fbad4164b6b44c3001aca0fb2f287fd3eb505fe82e8aed173c3d59dbe50d156a114f57ab7d25b98bf70c09a07b013b1367893b3ed5fcc1af193a59500e0f00cd61c99fbeb833af64c30d1e75a056a6123b3b689f679cbe53b504bc1cb69c8fabc67aff8b16354f3c15498d983ea010d5af16b16d5f9ea7b792fca84b430409509d1697852f88c6976d97b2edd345a0e644f4491760567ddcf3445bee4de35f3845fd934d8f83771239f633a12cbe33a0dfdbbf206545b198a957343237ffc9d86d581c116b3444201071d3e847f781e7a05456256a65258cb04ab9b165b11486eec8b035e3107757be2e4a93cb225f9ee0a04106acae08ca62cd43acba11b2aec467358025997fcdba6a0787076fa325ce02a06e2ba8b5bd9978e07a0efdc2d23e4d63447c45bb733af1e34fd60bc53ae06e03a0269b3afa7f8fbdb8c2dd9f7ef336819ea610e198a0c628489fbbe12649a83e97a072b2cc9c13fe0afefddcf4568fcdb282bf6e1e48c879c30638c8971338b3f51aa0f1660537d4e9def76aa2e006279731a929131ee67541428cc5a05dbb7e5d880fa08eff01ff6acc4ccd77220f4f93a945d8412905edb997194f8395139f1326c4eda0b4f71fe9cf8dab906ed2d01a3e0508dcf742c223676737733e1884b69c6643a0a0726f7360e8c1f820e0108a49f0e57cebc64a6916364681d1801191b3a1c82e5ba0cd7867c7f800846f1436c9e5b491d69f80c22a14bd0023dcda3bd53bfd96a34fa06a904e12d37f986e5b03c13c67b073383d7c6d63f772526f1962d41c31801773a033120586936a4576a20b7c994c8a71d91be07662744b27d80cdcb38400cf9ee1a089decb2c7cd4c54290876f601168198ecfdf5b4f8451314b00c88df5e0f9703ba0b75dcfe2f45e525dad8631a0e8d14ed1d53d2d71400bbcb0d9e76a4f35f153a5a0e9defd4ac6c1736a72e3ccb923f47cc62509107b97c74148cf88cd9cbd33cd13a06ca72cfcd7bb8afd018b99959919db19d4bd66d20259a660062b4d51818a21efa06f73ebfe7840330bb47258994fb4b30a32b6612520c8e7370ae9456ca59b3473a0308b5215f0f4bd6d7aba1f401f2011b5e4e65ac5d168646b5ff972c6c380455ca0c0a72d1a37c47c591fffe89a3a51b3c82dfca208fa62d7e8fbf42342d667a297a0fb88be7d6e65ff90c9107d5dba879e0a3c70241f69cf7bfd19ac98697d923e0ea0e82af49311d5c4c9163a2b33f4133140403e1e4f9e80ccda5f626eb7f900b014a0ecbecf81f0bce5a2577bf57fbbfd92618455a0a7f904bb36670ede7fdde56871a008a4ccb3401458319aaf43b142fd61353f5e0c379e36367b22806ec970d61029a01b422c3da28eab5114e0eebff20604a1f7f6c2307c26dbe428a9bbf2440b54a7a01ccc566df9957a351b94e6badf00ca7b0dd9cfd0b9ac9483f1b7d54cdc771952a01275e883b601cbabc0ed5182f0075f9826c962145cbc51a6ceef352099262b65a00c5659720afa94a75e2391358f5a5a640af55d56925590e8b15150fddf95a785a08403b1a33a930cc2ac885ae7805bf4fc82163ddd3d131009132bb18bac9c9726a03608476a9ef3ee048755be6b20ca322483af45c5504f7a4485028205fb35959aa02d8c7f2656b4c6d7523d5061741696e9fd4eaf4230efd0ed8d366cc7706c5106a04cf6e99932af6908c57776d1e35a2eef61831da15bafc453f09348aa8a671d6da06e6259c2de2b599da18ac60246fd7922ee19d00d70fa09e93013acc8ce4725c9a0cfd54539fdd3e55d19b62cd8cfb82d8b37b96c1cac577f52fce9272ef5ec4e0aa0e22818f14352216c1ef00c926ee1c6a66355639955dd61445fbdcad1742917cea074f495b4e2b90f01e6731231b70f84e764d32cd2028def3677ebd28a567137f9a0d65ed8360b90654d9ff09817ccfc81274d73ce620d2b45345a166608dbcd7e62a0e1d3d2fda928eed0783068b46e5a793b1b433e401a1c73ee018c682224034d91a0471d6725d4279c287321c3b11e6eca4f305f173689ba700b442e030094bfd1c4a09f51f52023d8cbd0faf36052004bae251c80bc04ea72e9d0be5fcaae072b5115a01ac214c9333c83bb7f1e22ed6a1db018ece57fe89e69c92391451734c995bc17a050d04335bbe96d621cab8ae63d6bf83d08c05402ee3764beb475abb8ed4bfd07a0868f0b94f89a590814709a947f8e506c5dc8c19b383e48888caea8959bc48944a029f5fd8c7649be7993f0706b8a99d647d758176707400d042033e7c2101b9164a0183cdb31c3d5a4b17443192b225edea13b488c4fc282388fb29d197bcc1a8c19a09ad6656e1f4a905d84de49201b8a3e6fa20a4c78e4cce9ad13462cff063c3aa1a0c045e0c6f74df3ec8288c969af744835a14ce3ce3a1bb10ce81f76c05be60b44a078ab90ea4fd36dce589bac77777b792a5ccc43850608ff4fcfd578603cb48842a0c5ad24abce5320ccbe9ffa5c8133d8af70252be308303c32340923d73ac110bda0ffce3296650e658067dcb8e6ab299cd3884c95c7c41709059929e63849e8d9eda07a8c0d2abb5df60fa306421c5018d883eb4a20d5bf5c5cdaecb79020667c7e88a036e11554c1b7fd4f2efe9cac0aff16b5e5a24ed87f8f4571b977908c5c293fd7a0a2d430ed2e8b19f4262d9abd3f97593adfde21b5ded244e5ee4cb665b00241f6a01036332bbe6d91f1d95b091c25c6d1a89c300c91af5f0beac559b3ae66035e33a0f1b370c4e2886049951a4b356d49e5496530968c9f311ebe0eb0ec89375fe395a0afc37774762d4a230837583c343e8c6fb1e3ea5bae08e318c37d28e74813d5cda0a2681122f6385acb3ed5d9c3a9973df73d13e48a35ce366066778ce6d2a23805a0e7e7339d86166d8517caf3377cd108a08f1481243d034b3eaaf9f5ee8bfd83fea0a5635efd0c0946dc2f3f021de40c1613d064b951a26f4d52659c6826e8737d08a0ddbc23f88f4d68ee376d9198c2c881cdf64647b05a36e16baab432fb298636fea070fb3aba528f131e2602eb394136eaf21db5909ce77c3eaca61ec5b726a430f0a04900d8896e88b827e30f7d51f68230f8aaae89b24d1be6421aeed242e8dae48ba00bcaf22158cbce0ebebf29ebf6dd54909d8bb6cd0dab300ad1c0fa3f73b6590ba085a0f3f3e40d4916b97f9323e0595b2ad10b09713034892a0c53a0aa2dfc4963a01b05e1ee15631eae3626723e06243fb733aff88d80228d960a3bb3b49ce77a62a0a2911e8452c86eb45d8e4d780de5a1082709adbe07261934497d120cf3ffa4d8a04e008668c69ad6b812d70c8dd98141a85195c60ca86cfe485dd424b41073efeda04057bcfcc079383462a649dfc694cfca9e76a1d2c1530a1857adac0970b1bb11a07c4836edde03b839c0509e3795719ab87ba1357248053fef415d8a8aebe16623a0216385782f93e091d4ce20ca36ec4293b96168c73d11f280ca2cca3704cda61ba0341627f021b86594488091c9b999bfe7847765a9bd8046bc9f1e69c312901450a085cc3a04e043c65a7edbd1eaa61b91812ca50b66738c0fd273e53ec7859f2088a05d4c9b0cfba987424286cf6a6a397ac1b0fa7c48d7b89c5c4abea1f0adff6067a09cddbb729ca17d00e9ca694aa2300b321c95ceb2d1e876ebe8b26ca6c845f5b2a08be981c466356086859c96c3346f40097edcd7901c5cea64e68534d1132d6b1aa07cda41f6779d988c7b75061719505ee97123ae0abb30f77c495a9f6f1668b55ca0e651f36b7483172d0c64fd547f718e3f0609d953b6b00d41dc87ae554b543bb7a0f72e99d064e163eb44f171dc7a2bff9ae3df91160f14dffc60ac8fa93741264fa00e7803aae718e399b563d8d7687b679a501daa35644c39c1f0fa9c5fae55fe89a05a3e52e06624c1d7fc84b833518c6e00176a2d1d2f25a6208f475639c730343fa0c010d290c981fec36eabf3a82685e56b5ea7c0e89e429fe87f0a565d7dd5ef24a0014fdf3d810d65cfee45529da3803625d4a0709720712213eaea6b1e470bf824a027740030f0d986e7c946f476456fac729d041e1381afe09079716180a8506339a09bbff6fd6fceefde0c7f4fc81eeab2380f5da013b2cc160b155b33795450eaefa0e9ce5e56461984fea128de3fc7c6ec192675d350e72db7807d3603ced104e2c4a0da7080d84f8829f66aaac6899ba9a00b787fdbfa2c6312b9e4045a77175df7e1a0fe5c95b03ec72633ed3fd72f554696499e0d823ac6abd98ed69d6f1434654fd4a01412cdabfc69832dd12fc0b84edec544a4745f8a44907938611984c73db40156a082f062814f2b5f1d5e1e8fb282c34bc7a840b0090944abe93248d11c46bb5eaca063442ea701b3790e76cd008b5e73efb0b78ba0f22f27d1cdbdb2f23264deeecba04617398e4eb2dab652b3340d4de11c90f9763c52367e60982e7dde79a0633108a08a1916ed67f078bc376e1314aaa9013fe58effc2d4506f40df6aceae99cf02bba0ba60da8e92c7f32841a51a76737517227dc46eedc1ece62421a64527258f850ba0bfaf7be316b3dcfd56aa2134f87c4918433fe97865973d3cda8134d94f085170a0455754136240057d7b046ec74624c62661d5a8fc7d6e23e6868bf6a64dd4fcc6a046569ac67c8893772cffb89797eb7055f076f4927c66a7d973bf6f77ebd59e83a0f75c3cba5f425242f3bf755442c843146e72eb989d1916dd0400f2094840c81da0e92af39fe731bf93bd4567a2a943639364f9c6445d5a064fc042eddfe07def8ba00cf606392a986f1a06419513d46249608f0735d2959afc65d6abafb457be3d1ca00bdff66285a006d10d2ed0d3dcfa20e134e12d1a58ff5b4cd67bed9348228636a00ffe811b6375290a2c07467e2b0cfdc09a4531f328cf554a6ad6e1dd0b614211a0ac21db06e0bdd7f65c720c1d52f8e022d99c55cd91b40684f6abef0382451597a032c4b2557f49bb94dcd1220d0f4388c8c5ea81e3a5b142e7806852155cce5b95a0bec62fcf8e6188051d0893c4b0fd3964e21560dd9cf633679a57902b71302b5aa04032999eea5d3895ed9e8794dc75c06603ef481373719c8239858c0d6315fb67a06386b39a7180c99fb0f2908223099d2a497fb761b6dfab856462a7d0502f2130a0982ff2587272d9e59bdf056bcc0b60332f6045e2c8eb57e7bbee1f21e13b4c2fa0f10ae3220d23a49a4c1a1cbb09c8d8217da0da15b4a925914f381ad6100450fda046aafbfdbc71f74aef502dcd48acf795ea7fd8ef9f8fedc1f221c9ec3f3cee13a04b277612d7a769389446d286242d92e7d078c2ae60ff4178eaa75b779d443a8ba07cd715e9e70fbb69ce66bf1d42199b9542db7d9f0420bcdb587bdb4bc0726ceba07f34f213531525b16bcba58ecbdfa1c6d6c52bdd2bf25886ce052fb1049dc72aa08641b6c27b4976c08361516a0f333368a22562391b252381c0e8ceebc1f417caa0970a3749286507e915eb3c28a2e3dc6e4a09085f5297394783f5834cdc8e0ccba01da7fcc16886aded3372a598b39f9775576b83e67135a27c3ac9e82263669e9fa0abb8c92465176d14f3b8e3ec9cacdd18eae399a580c91406cb13cfff93f56cd2a0d3e95844fcf8cc57f9ae1ef9f0f626d662d5196c8976f3eac038c1800a581a15a0ed34d30a026757cfca3c4a5e64c0682128d8adc4ba5815211f89981956a2486aa013b835ba889abe64d63ee75d0ba49761f42b5dab700852adc008b1a553df464fa0e39dc67cce22f331cade7482594d34ce9053a4663c874060de4f2457b776c07aa014c5b6e2669c8fba7ef19b976d24210d1d985f3681d15c55d55f0a8e2a487c75a049a578ce36a3f9d51dd7fb3fe658e986c501d78814178c138a020d4b1d02a75fa0d2a90088d17c873fdb5dc0844d8f0861d792a646875331c82c528de148bafdc8 diff --git a/crates/net/eth-wire/tests/new_block.rs b/crates/net/eth-wire/tests/new_block.rs new file mode 100644 index 000000000..dcf896387 --- /dev/null +++ b/crates/net/eth-wire/tests/new_block.rs @@ -0,0 +1,31 @@ +//! Decoding tests for [`NewBlock`] +use reth_eth_wire::NewBlock; +use reth_rlp::Decodable; +use std::{fs, path::PathBuf}; + +#[test] +fn decode_new_block_network() { + let network_data_path = + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("testdata/new_block_network_rlp"); + let data = fs::read_to_string(network_data_path).expect("Unable to read file"); + let hex_data = hex::decode(data.trim()).unwrap(); + let _txs = NewBlock::decode(&mut &hex_data[..]).unwrap(); +} + +#[test] +fn decode_new_block_network_bsc_one() { + let network_data_path = + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("testdata/bsc_new_block_network_one"); + let data = fs::read_to_string(network_data_path).expect("Unable to read file"); + let hex_data = hex::decode(data.trim()).unwrap(); + let _txs = NewBlock::decode(&mut &hex_data[..]).unwrap(); +} + +#[test] +fn decode_new_block_network_bsc_two() { + let network_data_path = + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("testdata/bsc_new_block_network_two"); + let data = fs::read_to_string(network_data_path).expect("Unable to read file"); + let hex_data = hex::decode(data.trim()).unwrap(); + let _txs = NewBlock::decode(&mut &hex_data[..]).unwrap(); +} diff --git a/crates/net/eth-wire/tests/new_pooled_transactions.rs b/crates/net/eth-wire/tests/new_pooled_transactions.rs new file mode 100644 index 000000000..c80f2cf10 --- /dev/null +++ b/crates/net/eth-wire/tests/new_pooled_transactions.rs @@ -0,0 +1,13 @@ +//! Decoding tests for [`NewPooledTransactions`] +use reth_eth_wire::NewPooledTransactionHashes; +use reth_rlp::Decodable; +use std::{fs, path::PathBuf}; + +#[test] +fn decode_new_pooled_transaction_hashes_network() { + let network_data_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("testdata/new_pooled_transactions_network_rlp"); + let data = fs::read_to_string(network_data_path).expect("Unable to read file"); + let hex_data = hex::decode(data.trim()).unwrap(); + let _txs = NewPooledTransactionHashes::decode(&mut &hex_data[..]).unwrap(); +} diff --git a/crates/primitives/src/lib.rs b/crates/primitives/src/lib.rs index cf761b8a1..ded31ad8f 100644 --- a/crates/primitives/src/lib.rs +++ b/crates/primitives/src/lib.rs @@ -24,7 +24,7 @@ pub use jsonu256::JsonU256; pub use log::Log; pub use receipt::Receipt; pub use transaction::{ - AccessList, AccessListItem, Transaction, TransactionKind, TransactionSigned, TxType, + AccessList, AccessListItem, Signature, Transaction, TransactionKind, TransactionSigned, TxType, }; /// Block hash. diff --git a/crates/primitives/src/transaction/mod.rs b/crates/primitives/src/transaction/mod.rs index 8a1091a7f..3603cd587 100644 --- a/crates/primitives/src/transaction/mod.rs +++ b/crates/primitives/src/transaction/mod.rs @@ -7,7 +7,7 @@ pub use access_list::{AccessList, AccessListItem}; use bytes::Buf; use ethers_core::utils::keccak256; use reth_rlp::{length_of_length, Decodable, DecodeError, Encodable, Header, EMPTY_STRING_CODE}; -use signature::Signature; +pub use signature::Signature; use std::ops::Deref; pub use tx_type::TxType; @@ -501,9 +501,9 @@ impl Decodable for TransactionSigned { // keep this around so we can use it to calculate the hash let original_encoding = *buf; - let header = Header::decode(buf)?; + let first_header = Header::decode(buf)?; // if the transaction is encoded as a string then it is a typed transaction - if !header.list { + if !first_header.list { let tx_type = *buf .first() .ok_or(DecodeError::Custom("typed tx cannot be decoded from an empty slice"))?; @@ -545,8 +545,11 @@ impl Decodable for TransactionSigned { r: Decodable::decode(buf)?, s: Decodable::decode(buf)?, }; - let hash = keccak256(original_encoding).into(); - Ok(TransactionSigned { transaction, hash, signature }) + + let mut signed = TransactionSigned { transaction, hash: Default::default(), signature }; + let tx_length = first_header.payload_length + first_header.length(); + signed.hash = keccak256(&original_encoding[..tx_length]).into(); + Ok(signed) } else { let mut transaction = Transaction::Legacy { nonce: Decodable::decode(buf)?, @@ -562,8 +565,10 @@ impl Decodable for TransactionSigned { transaction.set_chain_id(id); } - let hash = keccak256(original_encoding).into(); - Ok(TransactionSigned { transaction, hash, signature }) + let mut signed = TransactionSigned { transaction, hash: Default::default(), signature }; + let tx_length = first_header.payload_length + first_header.length(); + signed.hash = keccak256(&original_encoding[..tx_length]).into(); + Ok(signed) } } }