From 7370776af13efff08eecc121eb196a4a4772ee0b Mon Sep 17 00:00:00 2001 From: Marek Kotewicz Date: Thu, 26 May 2016 18:24:51 +0200 Subject: [PATCH] Bloomchain (#1014) * use bloomchain crate in blockchain module. remove obsole chainfilter submodule * update database version to 6.0 * removed redundant line * simple db migration * make migration slightly more functional * bloomchain migration * migration version is just a single unsigned integer * updated migration v6 * parity migration * db migration * removed hardcoded migration dir * replace ptr::copy with clone_from_slice, removed potential endianess problem from trace/db.rs * removed superfluous line * blockchains log blooms config is not exposed any more --- ethcore/src/blockchain/blockchain.rs | 183 ++- ethcore/src/blockchain/bloom_indexer.rs | 102 -- ethcore/src/blockchain/cache.rs | 6 +- .../mod.rs => blockchain/config.rs} | 33 +- ethcore/src/{ => blockchain}/extras.rs | 205 +--- ethcore/src/blockchain/mod.rs | 11 +- ethcore/src/blockchain/update.rs | 5 +- ethcore/src/blooms/bloom.rs | 62 + ethcore/src/blooms/bloom_group.rs | 74 ++ .../group_position.rs} | 36 +- ethcore/src/blooms/mod.rs | 25 + ethcore/src/chainfilter/blooms.txt | 739 ------------ ethcore/src/chainfilter/chainfilter.rs | 197 ---- ethcore/src/chainfilter/indexer.rs | 155 --- ethcore/src/chainfilter/logs.txt | 1013 ----------------- ethcore/src/chainfilter/tests.rs | 283 ----- ethcore/src/client/client.rs | 2 +- ethcore/src/client/config.rs | 2 +- ethcore/src/client/test_client.rs | 2 +- ethcore/src/client/trace.rs | 2 +- ethcore/src/db.rs | 36 +- ethcore/src/lib.rs | 4 +- ethcore/src/migrations/extras/mod.rs | 5 + ethcore/src/migrations/extras/v6.rs | 84 ++ ethcore/src/migrations/mod.rs | 3 + ethcore/src/tests/helpers.rs | 2 +- ethcore/src/trace/block.rs | 16 + ethcore/src/trace/db.rs | 40 +- ethcore/src/verification/verification.rs | 2 +- parity/main.rs | 39 +- parity/migration.rs | 186 +++ util/src/migration/db_impl.rs | 23 +- util/src/migration/manager.rs | 12 +- util/src/migration/mod.rs | 1 + util/src/migration/tests.rs | 13 +- 35 files changed, 772 insertions(+), 2831 deletions(-) delete mode 100644 ethcore/src/blockchain/bloom_indexer.rs rename ethcore/src/{chainfilter/mod.rs => blockchain/config.rs} (61%) rename ethcore/src/{ => blockchain}/extras.rs (59%) create mode 100644 ethcore/src/blooms/bloom.rs create mode 100644 ethcore/src/blooms/bloom_group.rs rename ethcore/src/{chainfilter/bloomindex.rs => blooms/group_position.rs} (55%) create mode 100644 ethcore/src/blooms/mod.rs delete mode 100644 ethcore/src/chainfilter/blooms.txt delete mode 100644 ethcore/src/chainfilter/chainfilter.rs delete mode 100644 ethcore/src/chainfilter/indexer.rs delete mode 100644 ethcore/src/chainfilter/logs.txt delete mode 100644 ethcore/src/chainfilter/tests.rs create mode 100644 ethcore/src/migrations/extras/mod.rs create mode 100644 ethcore/src/migrations/extras/v6.rs create mode 100644 ethcore/src/migrations/mod.rs create mode 100644 parity/migration.rs diff --git a/ethcore/src/blockchain/blockchain.rs b/ethcore/src/blockchain/blockchain.rs index 77d638deb..6fb9161d5 100644 --- a/ethcore/src/blockchain/blockchain.rs +++ b/ethcore/src/blockchain/blockchain.rs @@ -17,41 +17,23 @@ //! Blockchain database. use std::sync::atomic::{AtomicUsize, Ordering as AtomicOrder}; +use bloomchain as bc; use util::*; use header::*; -use extras::*; +use super::extras::*; use transaction::*; use views::*; use receipt::Receipt; -use chainfilter::{ChainFilter, BloomIndex, FilterDataSource}; +use blooms::{Bloom, BloomGroup}; use blockchain::block_info::{BlockInfo, BlockLocation, BranchBecomingCanonChainData}; use blockchain::best_block::BestBlock; -use blockchain::bloom_indexer::BloomIndexer; use types::tree_route::TreeRoute; use blockchain::update::ExtrasUpdate; -use blockchain::{CacheSize, ImportRoute}; -use db::{Writable, Readable, Key, CacheUpdatePolicy}; +use blockchain::{CacheSize, ImportRoute, Config}; +use db::{Writable, Readable, CacheUpdatePolicy}; -const BLOOM_INDEX_SIZE: usize = 16; -const BLOOM_LEVELS: u8 = 3; - -/// Blockchain configuration. -#[derive(Debug)] -pub struct BlockChainConfig { - /// Preferred cache size in bytes. - pub pref_cache_size: usize, - /// Maximum cache size in bytes. - pub max_cache_size: usize, -} - -impl Default for BlockChainConfig { - fn default() -> Self { - BlockChainConfig { - pref_cache_size: 1 << 14, - max_cache_size: 1 << 20, - } - } -} +const LOG_BLOOMS_LEVELS: usize = 3; +const LOG_BLOOMS_ELEMENTS_PER_INDEX: usize = 16; /// Interface for querying blocks by hash and by number. pub trait BlockProvider { @@ -129,7 +111,11 @@ pub trait BlockProvider { #[derive(Debug, Hash, Eq, PartialEq, Clone)] enum CacheID { Block(H256), - Extras(ExtrasIndex, H256), + BlockDetails(H256), + BlockHashes(BlockNumber), + TransactionAddresses(H256), + BlocksBlooms(LogGroupPosition), + BlockReceipts(H256), } struct CacheManager { @@ -137,6 +123,14 @@ struct CacheManager { in_use: HashSet, } +impl bc::group::BloomGroupDatabase for BlockChain { + fn blooms_at(&self, position: &bc::group::GroupPosition) -> Option { + let position = LogGroupPosition::from(position.clone()); + self.note_used(CacheID::BlocksBlooms(position.clone())); + self.extras_db.read_with_cache(&self.blocks_blooms, &position).map(Into::into) + } +} + /// Structure providing fast access to blockchain data. /// /// **Does not do input data verification.** @@ -144,6 +138,7 @@ pub struct BlockChain { // All locks must be captured in the order declared here. pref_cache_size: AtomicUsize, max_cache_size: AtomicUsize, + blooms_config: bc::Config, best_block: RwLock, @@ -154,8 +149,7 @@ pub struct BlockChain { block_details: RwLock>, block_hashes: RwLock>, transaction_addresses: RwLock>, - block_logs: RwLock>, - blocks_blooms: RwLock>, + blocks_blooms: RwLock>, block_receipts: RwLock>, extras_db: Database, @@ -163,19 +157,9 @@ pub struct BlockChain { cache_man: RwLock, - // blooms indexing - bloom_indexer: BloomIndexer, - insert_lock: Mutex<()> } -impl FilterDataSource for BlockChain { - fn bloom_at_index(&self, bloom_index: &BloomIndex) -> Option { - let location = self.bloom_indexer.location(bloom_index); - self.blocks_blooms(&location.hash).and_then(|blooms| blooms.blooms.into_iter().nth(location.index).cloned()) - } -} - impl BlockProvider for BlockChain { /// Returns true if the given block is known /// (though not necessarily a part of the canon chain). @@ -210,28 +194,36 @@ impl BlockProvider for BlockChain { /// Get the familial details concerning a block. fn block_details(&self, hash: &H256) -> Option { - self.query_extras(hash, &self.block_details) + self.note_used(CacheID::BlockDetails(hash.clone())); + self.extras_db.read_with_cache(&self.block_details, hash) } /// Get the hash of given block's number. fn block_hash(&self, index: BlockNumber) -> Option { - self.query_extras(&index, &self.block_hashes) + self.note_used(CacheID::BlockHashes(index)); + self.extras_db.read_with_cache(&self.block_hashes, &index) } /// Get the address of transaction with given hash. fn transaction_address(&self, hash: &H256) -> Option { - self.query_extras(hash, &self.transaction_addresses) + self.note_used(CacheID::TransactionAddresses(hash.clone())); + self.extras_db.read_with_cache(&self.transaction_addresses, hash) } /// Get receipts of block with given hash. fn block_receipts(&self, hash: &H256) -> Option { - self.query_extras(hash, &self.block_receipts) + self.note_used(CacheID::BlockReceipts(hash.clone())); + self.extras_db.read_with_cache(&self.block_receipts, hash) } /// Returns numbers of blocks containing given bloom. fn blocks_with_bloom(&self, bloom: &H2048, from_block: BlockNumber, to_block: BlockNumber) -> Vec { - let filter = ChainFilter::new(self, self.bloom_indexer.index_size(), self.bloom_indexer.levels()); - filter.blocks_with_bloom(bloom, from_block as usize, to_block as usize).into_iter().map(|b| b as BlockNumber).collect() + let range = from_block as bc::Number..to_block as bc::Number; + let chain = bc::group::BloomGroupChain::new(self.blooms_config, self); + chain.with_bloom(&range, &Bloom::from(bloom.clone()).into()) + .into_iter() + .map(|b| b as BlockNumber) + .collect() } } @@ -257,7 +249,7 @@ impl<'a> Iterator for AncestryIter<'a> { impl BlockChain { /// Create new instance of blockchain from given Genesis - pub fn new(config: BlockChainConfig, genesis: &[u8], path: &Path) -> BlockChain { + pub fn new(config: Config, genesis: &[u8], path: &Path) -> BlockChain { // open extras db let mut extras_path = path.to_path_buf(); extras_path.push("extras"); @@ -274,18 +266,20 @@ impl BlockChain { let bc = BlockChain { pref_cache_size: AtomicUsize::new(config.pref_cache_size), max_cache_size: AtomicUsize::new(config.max_cache_size), + blooms_config: bc::Config { + levels: LOG_BLOOMS_LEVELS, + elements_per_index: LOG_BLOOMS_ELEMENTS_PER_INDEX, + }, best_block: RwLock::new(BestBlock::default()), blocks: RwLock::new(HashMap::new()), block_details: RwLock::new(HashMap::new()), block_hashes: RwLock::new(HashMap::new()), transaction_addresses: RwLock::new(HashMap::new()), - block_logs: RwLock::new(HashMap::new()), blocks_blooms: RwLock::new(HashMap::new()), block_receipts: RwLock::new(HashMap::new()), extras_db: extras_db, blocks_db: blocks_db, cache_man: RwLock::new(cache_man), - bloom_indexer: BloomIndexer::new(BLOOM_INDEX_SIZE, BLOOM_LEVELS), insert_lock: Mutex::new(()), }; @@ -461,21 +455,21 @@ impl BlockChain { { for hash in update.block_details.keys().cloned() { - self.note_used(CacheID::Extras(ExtrasIndex::BlockDetails, hash)); + self.note_used(CacheID::BlockDetails(hash)); } let mut write_details = self.block_details.write().unwrap(); - batch.extend_with_cache(&mut write_details, update.block_details, CacheUpdatePolicy::Overwrite); + batch.extend_with_cache(write_details.deref_mut(), update.block_details, CacheUpdatePolicy::Overwrite); } { let mut write_receipts = self.block_receipts.write().unwrap(); - batch.extend_with_cache(&mut write_receipts, update.block_receipts, CacheUpdatePolicy::Remove); + batch.extend_with_cache(write_receipts.deref_mut(), update.block_receipts, CacheUpdatePolicy::Remove); } { let mut write_blocks_blooms = self.blocks_blooms.write().unwrap(); - batch.extend_with_cache(&mut write_blocks_blooms, update.blocks_blooms, CacheUpdatePolicy::Remove); + batch.extend_with_cache(write_blocks_blooms.deref_mut(), update.blocks_blooms, CacheUpdatePolicy::Remove); } // These cached values must be updated last and togeterh @@ -496,8 +490,8 @@ impl BlockChain { } } - batch.extend_with_cache(&mut write_hashes, update.block_hashes, CacheUpdatePolicy::Remove); - batch.extend_with_cache(&mut write_txs, update.transactions_addresses, CacheUpdatePolicy::Remove); + batch.extend_with_cache(write_hashes.deref_mut(), update.block_hashes, CacheUpdatePolicy::Remove); + batch.extend_with_cache(write_txs.deref_mut(), update.transactions_addresses, CacheUpdatePolicy::Remove); // update extras database self.extras_db.write(batch).unwrap(); @@ -673,44 +667,38 @@ impl BlockChain { /// Later, BloomIndexer is used to map bloom location on filter layer (BloomIndex) /// to bloom location in database (BlocksBloomLocation). /// - fn prepare_block_blooms_update(&self, block_bytes: &[u8], info: &BlockInfo) -> HashMap { + fn prepare_block_blooms_update(&self, block_bytes: &[u8], info: &BlockInfo) -> HashMap { let block = BlockView::new(block_bytes); let header = block.header_view(); - let modified_blooms = match info.location { + let log_blooms = match info.location { BlockLocation::Branch => HashMap::new(), BlockLocation::CanonChain => { - ChainFilter::new(self, self.bloom_indexer.index_size(), self.bloom_indexer.levels()) - .add_bloom(&header.log_bloom(), header.number() as usize) + let chain = bc::group::BloomGroupChain::new(self.blooms_config, self); + chain.insert(info.number as bc::Number, Bloom::from(header.log_bloom()).into()) }, BlockLocation::BranchBecomingCanonChain(ref data) => { let ancestor_number = self.block_number(&data.ancestor).unwrap(); let start_number = ancestor_number + 1; + let range = start_number as bc::Number..self.best_block_number() as bc::Number; - let mut blooms: Vec = data.enacted.iter() + let mut blooms: Vec = data.enacted.iter() .map(|hash| self.block(hash).unwrap()) .map(|bytes| BlockView::new(&bytes).header_view().log_bloom()) + .map(Bloom::from) + .map(Into::into) .collect(); - blooms.push(header.log_bloom()); + blooms.push(Bloom::from(header.log_bloom()).into()); - ChainFilter::new(self, self.bloom_indexer.index_size(), self.bloom_indexer.levels()) - .reset_chain_head(&blooms, start_number as usize, self.best_block_number() as usize) + let chain = bc::group::BloomGroupChain::new(self.blooms_config, self); + chain.replace(&range, blooms) } }; - modified_blooms.into_iter() - .fold(HashMap::new(), | mut acc, (bloom_index, bloom) | { - { - let location = self.bloom_indexer.location(&bloom_index); - let mut blocks_blooms = acc - .entry(location.hash.clone()) - .or_insert_with(|| self.blocks_blooms(&location.hash).unwrap_or_else(BlocksBlooms::new)); - assert_eq!(self.bloom_indexer.index_size(), blocks_blooms.blooms.len()); - blocks_blooms.blooms[location.index] = bloom; - } - acc - }) + log_blooms.into_iter() + .map(|p| (From::from(p.0), From::from(p.1))) + .collect() } /// Get best block hash. @@ -728,29 +716,14 @@ impl BlockChain { self.best_block.read().unwrap().total_difficulty } - /// Get block blooms. - fn blocks_blooms(&self, hash: &H256) -> Option { - self.query_extras(hash, &self.blocks_blooms) - } - - fn query_extras(&self, hash: &K, cache: &RwLock>) -> Option where - T: ExtrasIndexable + Clone + Decodable, - K: Key + Eq + Hash + Clone, - R: Deref, - H256: From { - self.note_used(CacheID::Extras(T::index(), H256::from(hash.clone()))); - self.extras_db.read_with_cache(cache, hash) - } - /// Get current cache size. pub fn cache_size(&self) -> CacheSize { CacheSize { blocks: self.blocks.read().unwrap().heap_size_of_children(), block_details: self.block_details.read().unwrap().heap_size_of_children(), transaction_addresses: self.transaction_addresses.read().unwrap().heap_size_of_children(), - block_logs: self.block_logs.read().unwrap().heap_size_of_children(), blocks_blooms: self.blocks_blooms.read().unwrap().heap_size_of_children(), - block_receipts: self.block_receipts.read().unwrap().heap_size_of_children() + block_receipts: self.block_receipts.read().unwrap().heap_size_of_children(), } } @@ -779,7 +752,6 @@ impl BlockChain { let mut block_details = self.block_details.write().unwrap(); let mut block_hashes = self.block_hashes.write().unwrap(); let mut transaction_addresses = self.transaction_addresses.write().unwrap(); - let mut block_logs = self.block_logs.write().unwrap(); let mut blocks_blooms = self.blocks_blooms.write().unwrap(); let mut block_receipts = self.block_receipts.write().unwrap(); let mut cache_man = self.cache_man.write().unwrap(); @@ -788,13 +760,11 @@ impl BlockChain { cache_man.in_use.remove(&id); match id { CacheID::Block(h) => { blocks.remove(&h); }, - CacheID::Extras(ExtrasIndex::BlockDetails, h) => { block_details.remove(&h); }, - CacheID::Extras(ExtrasIndex::TransactionAddress, h) => { transaction_addresses.remove(&h); }, - CacheID::Extras(ExtrasIndex::BlockLogBlooms, h) => { block_logs.remove(&h); }, - CacheID::Extras(ExtrasIndex::BlocksBlooms, h) => { blocks_blooms.remove(&h); }, - CacheID::Extras(ExtrasIndex::BlockReceipts, h) => { block_receipts.remove(&h); }, - // TODO: debris, temporary fix - CacheID::Extras(ExtrasIndex::BlockHash, _) => { }, + CacheID::BlockDetails(h) => { block_details.remove(&h); } + CacheID::BlockHashes(h) => { block_hashes.remove(&h); } + CacheID::TransactionAddresses(h) => { transaction_addresses.remove(&h); } + CacheID::BlocksBlooms(h) => { blocks_blooms.remove(&h); } + CacheID::BlockReceipts(h) => { block_receipts.remove(&h); } } } cache_man.cache_usage.push_front(HashSet::new()); @@ -806,7 +776,6 @@ impl BlockChain { block_details.shrink_to_fit(); block_hashes.shrink_to_fit(); transaction_addresses.shrink_to_fit(); - block_logs.shrink_to_fit(); blocks_blooms.shrink_to_fit(); block_receipts.shrink_to_fit(); } @@ -824,7 +793,7 @@ mod tests { use rustc_serialize::hex::FromHex; use util::hash::*; use util::sha3::Hashable; - use blockchain::{BlockProvider, BlockChain, BlockChainConfig, ImportRoute}; + use blockchain::{BlockProvider, BlockChain, Config, ImportRoute}; use tests::helpers::*; use devtools::*; use blockchain::generator::{ChainGenerator, ChainIterator, BlockFinalizer}; @@ -840,7 +809,7 @@ mod tests { let first_hash = BlockView::new(&first).header_view().sha3(); let temp = RandomTempPath::new(); - let bc = BlockChain::new(BlockChainConfig::default(), &genesis, temp.as_path()); + let bc = BlockChain::new(Config::default(), &genesis, temp.as_path()); assert_eq!(bc.genesis_hash(), genesis_hash.clone()); assert_eq!(bc.best_block_number(), 0); @@ -868,7 +837,7 @@ mod tests { let genesis_hash = BlockView::new(&genesis).header_view().sha3(); let temp = RandomTempPath::new(); - let bc = BlockChain::new(BlockChainConfig::default(), &genesis, temp.as_path()); + let bc = BlockChain::new(Config::default(), &genesis, temp.as_path()); let mut block_hashes = vec![genesis_hash.clone()]; for _ in 0..10 { @@ -900,7 +869,7 @@ mod tests { let b5a = canon_chain.generate(&mut finalizer).unwrap(); let temp = RandomTempPath::new(); - let bc = BlockChain::new(BlockChainConfig::default(), &genesis, temp.as_path()); + let bc = BlockChain::new(Config::default(), &genesis, temp.as_path()); bc.insert_block(&b1a, vec![]); bc.insert_block(&b1b, vec![]); bc.insert_block(&b2a, vec![]); @@ -941,7 +910,7 @@ mod tests { let best_block_hash = b3a_hash.clone(); let temp = RandomTempPath::new(); - let bc = BlockChain::new(BlockChainConfig::default(), &genesis, temp.as_path()); + let bc = BlockChain::new(Config::default(), &genesis, temp.as_path()); let ir1 = bc.insert_block(&b1, vec![]); let ir2 = bc.insert_block(&b2, vec![]); let ir3b = bc.insert_block(&b3b, vec![]); @@ -1046,14 +1015,14 @@ mod tests { let temp = RandomTempPath::new(); { - let bc = BlockChain::new(BlockChainConfig::default(), &genesis, temp.as_path()); + let bc = BlockChain::new(Config::default(), &genesis, temp.as_path()); assert_eq!(bc.best_block_hash(), genesis_hash); bc.insert_block(&first, vec![]); assert_eq!(bc.best_block_hash(), first_hash); } { - let bc = BlockChain::new(BlockChainConfig::default(), &genesis, temp.as_path()); + let bc = BlockChain::new(Config::default(), &genesis, temp.as_path()); assert_eq!(bc.best_block_hash(), first_hash); } } @@ -1106,7 +1075,7 @@ mod tests { let b1_hash = H256::from_str("f53f268d23a71e85c7d6d83a9504298712b84c1a2ba220441c86eeda0bf0b6e3").unwrap(); let temp = RandomTempPath::new(); - let bc = BlockChain::new(BlockChainConfig::default(), &genesis, temp.as_path()); + let bc = BlockChain::new(Config::default(), &genesis, temp.as_path()); bc.insert_block(&b1, vec![]); let transactions = bc.transactions(&b1_hash).unwrap(); @@ -1137,7 +1106,7 @@ mod tests { let b2a = canon_chain.with_bloom(bloom_ba.clone()).generate(&mut finalizer).unwrap(); let temp = RandomTempPath::new(); - let bc = BlockChain::new(BlockChainConfig::default(), &genesis, temp.as_path()); + let bc = BlockChain::new(Config::default(), &genesis, temp.as_path()); let blocks_b1 = bc.blocks_with_bloom(&bloom_b1, 0, 5); let blocks_b2 = bc.blocks_with_bloom(&bloom_b2, 0, 5); diff --git a/ethcore/src/blockchain/bloom_indexer.rs b/ethcore/src/blockchain/bloom_indexer.rs deleted file mode 100644 index a672a5445..000000000 --- a/ethcore/src/blockchain/bloom_indexer.rs +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -use util::numbers::H256; -use chainfilter::BloomIndex; - -/// Represents location of block bloom in extras database. -#[derive(Debug, PartialEq)] -pub struct BlocksBloomLocation { - /// Unique hash of BlocksBloom - pub hash: H256, - /// Index within BlocksBloom - pub index: usize, -} - -/// Should be used to localize blocks blooms in extras database. -pub struct BloomIndexer { - index_size: usize, - levels: u8, -} - -impl BloomIndexer { - /// Plain constructor. - pub fn new(index_size: usize, levels: u8) -> Self { - BloomIndexer { - index_size: index_size, - levels: levels - } - } - - /// Calculates bloom's position in database. - pub fn location(&self, bloom_index: &BloomIndex) -> BlocksBloomLocation { - use std::{mem, ptr}; - - let hash = unsafe { - let mut hash: H256 = mem::zeroed(); - ptr::copy(&[bloom_index.index / self.index_size] as *const usize as *const u8, hash.as_mut_ptr(), 8); - hash[8] = bloom_index.level; - hash.reverse(); - hash - }; - - BlocksBloomLocation { - hash: hash, - index: bloom_index.index % self.index_size - } - } - - /// Returns index size. - pub fn index_size(&self) -> usize { - self.index_size - } - - /// Returns number of cache levels. - pub fn levels(&self) -> u8 { - self.levels - } -} - -#[cfg(test)] -mod tests { - use std::str::FromStr; - use util::hash::{H256, FixedHash}; - use chainfilter::BloomIndex; - use blockchain::bloom_indexer::{BloomIndexer, BlocksBloomLocation}; - - #[test] - fn test_bloom_indexer() { - let bi = BloomIndexer::new(16, 3); - - let index = BloomIndex::new(0, 0); - assert_eq!(bi.location(&index), BlocksBloomLocation { - hash: H256::new(), - index: 0 - }); - - let index = BloomIndex::new(1, 0); - assert_eq!(bi.location(&index), BlocksBloomLocation { - hash: H256::from_str("0000000000000000000000000000000000000000000000010000000000000000").unwrap(), - index: 0 - }); - - let index = BloomIndex::new(0, 299_999); - assert_eq!(bi.location(&index), BlocksBloomLocation { - hash: H256::from_str("000000000000000000000000000000000000000000000000000000000000493d").unwrap(), - index: 15 - }); - } -} diff --git a/ethcore/src/blockchain/cache.rs b/ethcore/src/blockchain/cache.rs index 722f83c16..819676ca5 100644 --- a/ethcore/src/blockchain/cache.rs +++ b/ethcore/src/blockchain/cache.rs @@ -23,8 +23,6 @@ pub struct CacheSize { pub block_details: usize, /// Transaction addresses cache size. pub transaction_addresses: usize, - /// Logs cache size. - pub block_logs: usize, /// Blooms cache size. pub blocks_blooms: usize, /// Block receipts size. @@ -33,5 +31,7 @@ pub struct CacheSize { impl CacheSize { /// Total amount used by the cache. - pub fn total(&self) -> usize { self.blocks + self.block_details + self.transaction_addresses + self.block_logs + self.blocks_blooms } + pub fn total(&self) -> usize { + self.blocks + self.block_details + self.transaction_addresses + self.blocks_blooms + self.block_receipts + } } diff --git a/ethcore/src/chainfilter/mod.rs b/ethcore/src/blockchain/config.rs similarity index 61% rename from ethcore/src/chainfilter/mod.rs rename to ethcore/src/blockchain/config.rs index d85fc20f9..9e70ff904 100644 --- a/ethcore/src/chainfilter/mod.rs +++ b/ethcore/src/blockchain/config.rs @@ -14,22 +14,23 @@ // You should have received a copy of the GNU General Public License // along with Parity. If not, see . -//! Multilevel blockchain bloom filter. +//! Blockchain configuration. -mod bloomindex; -mod chainfilter; -mod indexer; - -#[cfg(test)] -mod tests; - -pub use self::bloomindex::BloomIndex; -pub use self::chainfilter::ChainFilter; -use util::hash::H2048; - -/// Types implementing this trait provide read access for bloom filters database. -pub trait FilterDataSource { - /// returns reference to log at given position if it exists - fn bloom_at_index(&self, index: &BloomIndex) -> Option; +/// Blockchain configuration. +#[derive(Debug)] +pub struct Config { + /// Preferred cache size in bytes. + pub pref_cache_size: usize, + /// Maximum cache size in bytes. + pub max_cache_size: usize, +} + +impl Default for Config { + fn default() -> Self { + Config { + pref_cache_size: 1 << 14, + max_cache_size: 1 << 20, + } + } } diff --git a/ethcore/src/extras.rs b/ethcore/src/blockchain/extras.rs similarity index 59% rename from ethcore/src/extras.rs rename to ethcore/src/blockchain/extras.rs index 6b6bb13b0..619706c00 100644 --- a/ethcore/src/extras.rs +++ b/ethcore/src/blockchain/extras.rs @@ -16,10 +16,12 @@ //! Blockchain DB extras. +use bloomchain; use util::*; use header::BlockNumber; use receipt::Receipt; use db::Key; +use blooms::{GroupPosition, BloomGroup}; /// Represents index of extra data in database #[derive(Copy, Debug, Hash, Eq, PartialEq, Clone)] @@ -30,65 +32,40 @@ pub enum ExtrasIndex { BlockHash = 1, /// Transaction address index TransactionAddress = 2, - /// Block log blooms index - BlockLogBlooms = 3, /// Block blooms index - BlocksBlooms = 4, + BlocksBlooms = 3, /// Block receipts index - BlockReceipts = 5, + BlockReceipts = 4, } fn with_index(hash: &H256, i: ExtrasIndex) -> H264 { - let mut slice = H264::from_slice(hash); - slice[32] = i as u8; - slice + let mut result = H264::default(); + result[0] = i as u8; + result.deref_mut()[1..].clone_from_slice(hash); + result } -pub trait ExtrasIndexable { - fn index() -> ExtrasIndex; -} +pub struct BlockNumberKey([u8; 5]); -impl ExtrasIndexable for H256 { - fn index() -> ExtrasIndex { - ExtrasIndex::BlockHash - } -} +impl Deref for BlockNumberKey { + type Target = [u8]; -impl ExtrasIndexable for BlockDetails { - fn index() -> ExtrasIndex { - ExtrasIndex::BlockDetails - } -} - -impl ExtrasIndexable for TransactionAddress { - fn index() -> ExtrasIndex { - ExtrasIndex::TransactionAddress - } -} - -impl ExtrasIndexable for BlockLogBlooms { - fn index() -> ExtrasIndex { - ExtrasIndex::BlockLogBlooms - } -} - -impl ExtrasIndexable for BlocksBlooms { - fn index() -> ExtrasIndex { - ExtrasIndex::BlocksBlooms - } -} - -impl ExtrasIndexable for BlockReceipts { - fn index() -> ExtrasIndex { - ExtrasIndex::BlockReceipts + fn deref(&self) -> &Self::Target { + &self.0 } } impl Key for BlockNumber { - type Target = H264; + type Target = BlockNumberKey; - fn key(&self) -> H264 { - with_index(&H256::from(*self), ExtrasIndex::BlockHash) + fn key(&self) -> Self::Target { + let mut result = [0u8; 5]; + result[0] = ExtrasIndex::BlockHash as u8; + result[1] = (self >> 24) as u8; + result[2] = (self >> 16) as u8; + result[3] = (self >> 8) as u8; + result[4] = *self as u8; + BlockNumberKey(result) } } @@ -100,6 +77,46 @@ impl Key for H256 { } } +pub struct LogGroupKey([u8; 6]); + +impl Deref for LogGroupKey { + type Target = [u8]; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +#[derive(Debug, PartialEq, Eq, Hash, Clone)] +pub struct LogGroupPosition(GroupPosition); + +impl From for LogGroupPosition { + fn from(position: bloomchain::group::GroupPosition) -> Self { + LogGroupPosition(From::from(position)) + } +} + +impl HeapSizeOf for LogGroupPosition { + fn heap_size_of_children(&self) -> usize { + self.0.heap_size_of_children() + } +} + +impl Key for LogGroupPosition { + type Target = LogGroupKey; + + fn key(&self) -> Self::Target { + let mut result = [0u8; 6]; + result[0] = ExtrasIndex::BlocksBlooms as u8; + result[1] = self.0.level; + result[2] = (self.0.index >> 24) as u8; + result[3] = (self.0.index >> 16) as u8; + result[4] = (self.0.index >> 8) as u8; + result[5] = self.0.index as u8; + LogGroupKey(result) + } +} + impl Key for H256 { type Target = H264; @@ -108,22 +125,6 @@ impl Key for H256 { } } -impl Key for H256 { - type Target = H264; - - fn key(&self) -> H264 { - with_index(self, ExtrasIndex::BlockLogBlooms) - } -} - -impl Key for H256 { - type Target = H264; - - fn key(&self) -> H264 { - with_index(self, ExtrasIndex::BlocksBlooms) - } -} - impl Key for H256 { type Target = H264; @@ -174,88 +175,6 @@ impl Encodable for BlockDetails { } } -/// Log blooms of certain block -#[derive(Clone)] -pub struct BlockLogBlooms { - /// List of log blooms for the block - pub blooms: Vec -} - -impl HeapSizeOf for BlockLogBlooms { - fn heap_size_of_children(&self) -> usize { - self.blooms.heap_size_of_children() - } -} - -impl Decodable for BlockLogBlooms { - fn decode(decoder: &D) -> Result where D: Decoder { - let block_blooms = BlockLogBlooms { - blooms: try!(Decodable::decode(decoder)) - }; - - Ok(block_blooms) - } -} - -impl Encodable for BlockLogBlooms { - fn rlp_append(&self, s: &mut RlpStream) { - s.append(&self.blooms); - } -} - -/// Neighboring log blooms on certain level -pub struct BlocksBlooms { - /// List of block blooms. - pub blooms: [H2048; 16], -} - -impl Default for BlocksBlooms { - fn default() -> Self { - BlocksBlooms::new() - } -} - -impl BlocksBlooms { - pub fn new() -> Self { - BlocksBlooms { blooms: unsafe { ::std::mem::zeroed() }} - } -} - -impl HeapSizeOf for BlocksBlooms { - fn heap_size_of_children(&self) -> usize { 0 } -} - -impl Clone for BlocksBlooms { - fn clone(&self) -> Self { - let mut blooms: [H2048; 16] = unsafe { ::std::mem::uninitialized() }; - - for i in 0..self.blooms.len() { - blooms[i] = self.blooms[i].clone(); - } - - BlocksBlooms { - blooms: blooms - } - } -} - -impl Decodable for BlocksBlooms { - fn decode(decoder: &D) -> Result where D: Decoder { - let blocks_blooms = BlocksBlooms { - blooms: try!(Decodable::decode(decoder)) - }; - - Ok(blocks_blooms) - } -} - -impl Encodable for BlocksBlooms { - fn rlp_append(&self, s: &mut RlpStream) { - let blooms_ref: &[H2048] = &self.blooms; - s.append(&blooms_ref); - } -} - /// Represents address of certain transaction within block #[derive(Clone)] pub struct TransactionAddress { diff --git a/ethcore/src/blockchain/mod.rs b/ethcore/src/blockchain/mod.rs index 62196825f..13b7c61eb 100644 --- a/ethcore/src/blockchain/mod.rs +++ b/ethcore/src/blockchain/mod.rs @@ -16,17 +16,20 @@ //! Blockchain database. -pub mod blockchain; mod best_block; mod block_info; -mod bloom_indexer; +pub mod blockchain; mod cache; -mod update; +mod config; +pub mod extras; mod import_route; +mod update; + #[cfg(test)] mod generator; -pub use self::blockchain::{BlockProvider, BlockChain, BlockChainConfig}; +pub use self::blockchain::{BlockProvider, BlockChain}; pub use self::cache::CacheSize; +pub use self::config::Config; pub use types::tree_route::TreeRoute; pub use self::import_route::ImportRoute; diff --git a/ethcore/src/blockchain/update.rs b/ethcore/src/blockchain/update.rs index 6be2647d3..029d0d377 100644 --- a/ethcore/src/blockchain/update.rs +++ b/ethcore/src/blockchain/update.rs @@ -2,7 +2,8 @@ use std::collections::HashMap; use util::numbers::H256; use header::BlockNumber; use blockchain::block_info::BlockInfo; -use extras::{BlockDetails, BlockReceipts, TransactionAddress, BlocksBlooms}; +use blooms::BloomGroup; +use super::extras::{BlockDetails, BlockReceipts, TransactionAddress, LogGroupPosition}; /// Block extras update info. pub struct ExtrasUpdate { @@ -17,5 +18,5 @@ pub struct ExtrasUpdate { /// Modified transaction addresses. pub transactions_addresses: HashMap, /// Modified blocks blooms. - pub blocks_blooms: HashMap, + pub blocks_blooms: HashMap, } diff --git a/ethcore/src/blooms/bloom.rs b/ethcore/src/blooms/bloom.rs new file mode 100644 index 000000000..29f055c10 --- /dev/null +++ b/ethcore/src/blooms/bloom.rs @@ -0,0 +1,62 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +use bloomchain as bc; +use util::rlp::*; +use util::HeapSizeOf; +use basic_types::LogBloom; + +/// Helper structure representing bloom of the trace. +#[derive(Clone)] +pub struct Bloom(LogBloom); + +impl From for Bloom { + fn from(bloom: LogBloom) -> Self { + Bloom(bloom) + } +} + +impl From for Bloom { + fn from(bloom: bc::Bloom) -> Self { + let bytes: [u8; 256] = bloom.into(); + Bloom(LogBloom::from(bytes)) + } +} + +impl Into for Bloom { + fn into(self) -> bc::Bloom { + let log = self.0; + bc::Bloom::from(log.0) + } +} + +impl Decodable for Bloom { + fn decode(decoder: &D) -> Result where D: Decoder { + Decodable::decode(decoder).map(Bloom) + } +} + +impl Encodable for Bloom { + fn rlp_append(&self, s: &mut RlpStream) { + Encodable::rlp_append(&self.0, s) + } +} + +impl HeapSizeOf for Bloom { + fn heap_size_of_children(&self) -> usize { + 0 + } +} diff --git a/ethcore/src/blooms/bloom_group.rs b/ethcore/src/blooms/bloom_group.rs new file mode 100644 index 000000000..6fa1d0761 --- /dev/null +++ b/ethcore/src/blooms/bloom_group.rs @@ -0,0 +1,74 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +use bloomchain::group as bc; +use util::rlp::*; +use util::HeapSizeOf; +use super::Bloom; + +/// Represents group of X consecutive blooms. +#[derive(Clone)] +pub struct BloomGroup { + blooms: Vec, +} + +impl From for BloomGroup { + fn from(group: bc::BloomGroup) -> Self { + let blooms = group.blooms + .into_iter() + .map(From::from) + .collect(); + + BloomGroup { + blooms: blooms + } + } +} + +impl Into for BloomGroup { + fn into(self) -> bc::BloomGroup { + let blooms = self.blooms + .into_iter() + .map(Into::into) + .collect(); + + bc::BloomGroup { + blooms: blooms + } + } +} + +impl Decodable for BloomGroup { + fn decode(decoder: &D) -> Result where D: Decoder { + let blooms = try!(Decodable::decode(decoder)); + let group = BloomGroup { + blooms: blooms + }; + Ok(group) + } +} + +impl Encodable for BloomGroup { + fn rlp_append(&self, s: &mut RlpStream) { + Encodable::rlp_append(&self.blooms, s) + } +} + +impl HeapSizeOf for BloomGroup { + fn heap_size_of_children(&self) -> usize { + self.blooms.heap_size_of_children() + } +} diff --git a/ethcore/src/chainfilter/bloomindex.rs b/ethcore/src/blooms/group_position.rs similarity index 55% rename from ethcore/src/chainfilter/bloomindex.rs rename to ethcore/src/blooms/group_position.rs index 22785495e..f698ca4e5 100644 --- a/ethcore/src/chainfilter/bloomindex.rs +++ b/ethcore/src/blooms/group_position.rs @@ -14,27 +14,29 @@ // You should have received a copy of the GNU General Public License // along with Parity. If not, see . -//! Represents bloom index in cache +use bloomchain::group as bc; +use util::HeapSizeOf; -/// Represents bloom index in cache -/// -/// On cache level 0, every block bloom is represented by different index. -/// On higher cache levels, multiple block blooms are represented by one -/// index. Their `BloomIndex` can be created from block number and given level. -#[derive(Eq, PartialEq, Hash, Clone, Debug)] -pub struct BloomIndex { - /// Bloom level +/// Represents BloomGroup position in database. +#[derive(PartialEq, Eq, Hash, Clone, Debug)] +pub struct GroupPosition { + /// Bloom level. pub level: u8, - /// Filter Index - pub index: usize, + /// Group index. + pub index: u32, } -impl BloomIndex { - /// Default constructor for `BloomIndex` - pub fn new(level: u8, index: usize) -> BloomIndex { - BloomIndex { - level: level, - index: index, +impl From for GroupPosition { + fn from(p: bc::GroupPosition) -> Self { + GroupPosition { + level: p.level as u8, + index: p.index as u32, } } } + +impl HeapSizeOf for GroupPosition { + fn heap_size_of_children(&self) -> usize { + 0 + } +} diff --git a/ethcore/src/blooms/mod.rs b/ethcore/src/blooms/mod.rs new file mode 100644 index 000000000..9d8a71d71 --- /dev/null +++ b/ethcore/src/blooms/mod.rs @@ -0,0 +1,25 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +//! Bridge between bloomchain crate types and ethcore. + +mod bloom; +mod bloom_group; +mod group_position; + +pub use self::bloom::Bloom; +pub use self::bloom_group::BloomGroup; +pub use self::group_position::GroupPosition; diff --git a/ethcore/src/chainfilter/blooms.txt b/ethcore/src/chainfilter/blooms.txt deleted file mode 100644 index 204186ec3..000000000 --- a/ethcore/src/chainfilter/blooms.txt +++ /dev/null @@ -1,739 +0,0 @@ -300054 0x00000000000000000000000000000000000000000000020000001000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -300059 0x00000020000000000000000000000000000000000000000002000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000002000 -300221 0x00000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000008000000001000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -301826 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -303166 0x00000000000000000000000000000000000000001000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000808000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000020000000001000000000000000000000000000000000000000000000000000000000000000000 -303345 0x00000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020000000000000000000000000000000000000000000008000000001000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -303379 0x00000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000800000000000000001000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000080000000006000008000000000000000000080000000000000000000000000000000000000000001000000000000000000000008000000000400000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000800000000000000000000000000000000000002004000000000000 -303388 0x00000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000800000040000000001000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000080000000006001008000000000000008000080000000000000000000000000000000000000000001000000000000000000000008000000000400000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000800000000000000040000000000000000000002004000000000000 -303621 0x00000000000000000000008000000000200000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000080000000000000000000000080000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000 -303670 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000400200000000000000 -303674 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000040000000000000000000000000000000000000000000000000000000000000000000000001000000000000200000000000000 -303683 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000400200000000000000 -303689 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000000400000000000000000000000000000000000000000000000000000000001000000000040200000000000000 -303692 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000400000000000000000000000000000000000000000000000000000000001000000000040200000000000000 -303716 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000040000000000000000000000000000000000000000000000000000000000000000000000001000000000000200000000000000 -303717 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000040000000000000000000000000000000000000000000000000000000000000000000000001000000000000200000000000000 -303748 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000400200000000000000 -303756 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000000400000000000000000000000000000000000000000000000000000000001000000000040200000000000000 -303758 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000400000000000000000000000000000000000000000000000000000000001000000000040200000000000000 -304090 0x00000000000000000000000000000000100000000000000000000000000000000000000000000000000200000000000000800000000000000000000000040000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000003000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000 -304095 0x04000000000000000000000000000000100000000000000000000000000000000000000000000000000200000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000008000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000 -304107 0x00000000000000000000000000000000100000000000000000000000000000000000000000000000000200000000000000800000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008800000000000000000400000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -304113 0x00000000000000000000000000000000100000000000000000000000000000000000000000000000000200000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000002000000000000000000000000000000000000000000000000003008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -304222 0x00000000000000000000000000000000100000000000000000000000000000000000000000000000000200000000000000800000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000800000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -304245 0x00000000000000000000000000000000100000000000000000000000000000000000000000000000000200000000000000800000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000080000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -304247 0x000000080000000000000000000000800000020000000000000000000000000000000000000000000202000000000000008000004004000000000000000000000000000000000000000000000200000000200000000080000000000000000000000004000000000000000000000000000000001040000000000000000000000000000004000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c0002000000000000000000000000000000001000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -304312 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000020000000000002000000000000000000040000000000000200000000000000000000000000000000000000000000000000000000000000000000000000 -304319 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000100000000000020000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000080000000000000000000000000008000000000000000000000000000000000008000000000000000000000000000000000000020000000000002000000000000000000040000000000000200000000000000000000000000000000000000000000000000000000000000000000000000 -304367 0x00000000000000000000001000000000000000000400020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000100000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -304375 0x00000000004000000000001000000000000000000400020000000800000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000020000000000000000000000000000000000000000000000000008000000000000010000000008000000000000000000000000000000000008000800000000000000000000000100000000000000000000000000000000000000000100000000000000002000000000002000000040010010000000000000000000000000000000000000000000000000000000000000000000000000000000000 -304407 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000002000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -304431 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -304433 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -304608 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000400000000000000000000040000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000 -304609 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000400000000000000000000040000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000 -304788 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -304794 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -304819 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -304835 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000002000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -304849 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -304856 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000002000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -304862 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000002000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -304872 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -304881 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -304902 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -304996 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -304999 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000002000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305006 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -305010 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000002000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305425 0x00000000004000000000000000000001000000000000020000000000000000000000000000000000000000000000000000000000008000000080000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010400000048000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000400000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305445 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000080000100000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305448 0x00000000004000000000000000000000000000000000020000000000000000000004000008000000000000000000000000000000000000000000000000000800000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000080000100000000002000000000000000000040000000000000000000000100000000000000000000000000000000000000000000000000000000000000000 -305450 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000080000000000000000000000000000020000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000004000000000000000000000000000 -305452 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000002000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000080000000000000000000000000000020000000000000000000000000000000000000000000008002000000000000000000040000000000000000000000000400000000000000000000000000000000004000000000000000000000000000 -305454 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000001000000040000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305457 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305463 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000200080000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305464 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000008000000000000000000000000000000000240000000200480000000000000000000000000000000000000000000000000000002000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305468 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008080000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000008800000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305488 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000002000000000000008000000000000010000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305492 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000008000000000000000000000000000000008040000000000000000000000000000002000000000001000000000000000000000000000400000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000200000000000000000000000000000000000000000000 -305501 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000008000000000000000000040000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 -305502 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000008000000000000008000000000000000000040000000001000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000080000000000000000000000000000000000010000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 -305510 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000044000004000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305616 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305620 0x0000000000400000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000040000000000000080000000000000000000000000000800000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000040000000001000000000a000000000000000010000000000000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305622 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000080000000000000000000000000200000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000080000000000000 -305624 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000001000000000000000080000000000000000000000000200000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000004000000000000000000000000004000000000000000000000000000000000000080000000000000 -305626 0x00000000004000000000100000000000000000000000020000000000000000000000000002000000000000000000000000000000200000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000004000000000002000000000000002000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305627 0x00000001000000000000000000000200000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000040000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305629 0x00000001004000000000000000000200000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000040000000002000000000000000000040000000000000000001040000000000000000000000000000000000000000000000000000000000000000000 -305634 0x00000000005080000000000000000000000000000000020000400000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008020000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000400000000000000000000000 -305826 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000400000000000000002000000000000000000840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305827 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000100000000000000000000000000040000000000000000000000000000000000000000000000000000000000000040000000000000000000000010000000008000000000000000000000000000000100008000000000000000000000000000000000000000000000000000000000000000000000400000000000000002004000000000000000840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305829 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000008000000000080000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000080000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305834 0x00000000004002000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000008000000000080000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000020000000000000000000000000000008000000000000000000000000000000000000000000000080000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -305839 0x00000000000000000000000000000000000010000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000080000000000000000000000000000000000000000000000000000000000000 -305841 0x40000000004000000000000000000000000010000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000008000000008000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000080000000000000000000000000000000000000000000008000000000000000 -306889 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -307290 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -307508 0x00000000000000000000000000000000000000000000020000000000000000000000200000000000400000000000000000000000000000000000000000000000002000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -307509 0x00000000004000000000000000000000000000000000020000000000000000000000200000000000400000000000000000000000000000000000000000000000002000000000000000008000000000000000000000000000000000040000000000040000000000000000000000000000000000000000000000000000000000000000000000000010000000008000010000004000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -307513 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000004000000000000000000000000010000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000200000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -307519 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000001000000000000002000000000000000000040000000000000000000000000000000000000000000080000000000000000000000000000000000000000000 -307528 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000020000000000000000000000000000000000000000000000000000000000000000100000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -308010 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020000000000080000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000 -308115 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000040000000000000000000000000000000000000000000000000000000000000000000000001000000000000200000000000000 -308124 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000400200000000000000 -308127 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000040000000000000000000000000000000000000000000000000000000000000000000000001000000000000200000000000000 -308157 0x00000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000020000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000 -308183 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000002020000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -308190 0x00000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000020000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000 -308216 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000002020000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000 -308224 0x00000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000020000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000 -308257 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -308265 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -308267 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -308268 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -308285 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -308599 0x00000000000000000000000000000000000000000000080000000000000800000000000000000010000000000000000000200002000000000000000000000000000000000000000000020000001000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004010010000002000000000000000400000000000000000000000000000000000000000000040000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -309175 0x00000000002000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -309177 0x00000000002000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -309184 0x00000000002000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -309186 0x00000000002000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -309190 0x00000000002000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -309194 0x00000000002000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -309198 0x00000000002000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -309417 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -309881 0x00400000000000000000000000000000000000000000004000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000 -309883 0x00400000000000000000000000000000000000000000004000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000 -309892 0x00400000000000000000000000000000000000000000004000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000 -310069 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000002000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -310114 0x00400000000000000000000000000000000000000000004000000000000000000000000000100000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -310116 0x00400000000000000000000000000000000000000000004000000000000000000000000000100000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -310177 0x00400000000000000000000000000000000000000000004000000000000000000000000000100000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -310533 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000002000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -310589 0x00000000000008000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -310592 0x00000000000008000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -310599 0x00000000000008000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -310601 0x00000000000008000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -310604 0x00000000000008000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -311317 0x00000000002000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -311758 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -311858 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -311859 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -311865 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -311888 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -312096 0x00400000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000200000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -312124 0x00400000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000200000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -312367 0x00400000000000000000000000000000000400000000004000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -312371 0x00400000000000000000000000000000000400000000004000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -312383 0x00400000000000000000000000000000000400000000004000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -313355 0x00000000000008000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -313368 0x00000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000002000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -313507 0x00000000000000000000000000000000000000000200000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -313526 0x00000000000000000000000000000000000000000200000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -313724 0x00000000000008000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -313789 0x00000000000008000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -314190 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -314375 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000008000000000000000008000400000000000000000000000000 -315698 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -315705 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -315780 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -316726 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000400000000000000000000000020000000000000000000000000000000000000000000040000000000000000 -316747 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -317179 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000040000000000000000000000000000000000000000000000000000000000000000000000001000000000000200000000000000 -317522 0x04000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000800000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000006001008000000000000008000080000000000000000000000000000000000000000001000000000100000000000008000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000040000000000000008000002004000000000000 -317526 0x00000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -317536 0x00000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000020000000000800000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000006000008000000000000000000080000000000000000000000000000000000000000001000000000000000000000008000000800400000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000002004000000000000 -317567 0x00000000000000200000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000001004000000000000000004000000020000000000000000000000000000000000000000000000000000000000000000000000000000000001000040000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -317588 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -317597 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000400000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -317606 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -317610 0x00000000000000200000000000000000000000000000000000020000000000000000000000000000000000400000000000000000000800000080000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000001044000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000400000000000000000000000000000000000000000000000000000000000000000000440000000000000000 -317643 0x00000000000000200000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000010000000000000000000000000000004000000000020000000000000000000000000000000000000000000001004000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000040000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -317646 0x00000000000000000000000000000000000000000000000000004000000000000000000000000000000000400000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000010000000000000000000000000000004000000000020000000000000000000000000000000000000000000001000000000000000000004000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -317660 0x00000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000800000000000000001000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000080000000006000008000000000000000000080000000000000000000000000000000000000000001000000000000000000000008000000000400002000000000000000000000000000000000000000000000000000008000000000000000000000000000000000800000000000000000000000000000000000002004000000000000 -317957 0x00000000000000000000000000000000000000000200000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -318030 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -318032 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -318033 0x00000000001000000000000000000000000000000000000000000000000000000000000800000008000000000000000000000000000000000000800000000000000001000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000004000000000000000080000000006000000000000000000000000080000000000000000000000000000000000000000005000000000000000000000000000000008400000000000000000000000000000000000000000000000000008000000000000000000000000020000000000000800000000000000000000000000000000000002004000000000000 -318034 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -318036 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -318063 0x00000000001000000000000000000000000000000000000000000000000000000000000800000008000000000000000000000000000000000000800000040000000001000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000080000000006000000000000000000000000080000000000000000000000000000000000000000005000000000000000000000000000000008400000000000000000000000000000000000000000000000000008000000000000000000000000040000000000000800000000000000000000000000000000000002004000000000000 -318074 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000100000010020000000000000000000200000000000000000080000000020000000000000000000800000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000008000000000000000000000000000000000000000000000000000008000000000000000000000000020000000000000000000000000000000000000000000000000102000000000000000 -318096 0x04000000001000000000000000000000000000000000000000000000000000000000000800000008000000000000000000000000000000000000800000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000080000000006000000000000000000000000080000000000000000000000000000000000000000005000000000100000000000000000000008400000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000008000002004000000000000 -318137 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -318528 0x00000000001000000000000000000000000000000000000000000000000000000000000800000008000000000000000000000000020000000000800000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000080000000006000000000000000000000000080000000000000000000000000000000000000000005000000000000000000000000000000808400000000000000400000000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000002004000000000000 -318627 0x00000000001000000000000000000000000000000000000000000000000000000000000800000008000000000000000000000000000000000000800000000000000001000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000004000000000000000080000000006000000000000000000000000080000000000000000000000000000000000000000005000000000000000000000000000000008400002000000000000000000000000000000000000000000000008000008000000000000000000000000000000000800000000000000000000000000000000000002004000000000000 -318639 0x00000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000800000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000002000000000000000000000010000000000000004800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000080000000000000000000000000 -318650 0x00000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000800000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000010000000000000004000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000 -318653 0x00000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000004000000000000000000000000080000000000000000000000000000000000000000000000000000000200000000000000000000000000800000000000000000000000000000000000000000000000000000000000010000000000000000000000000800000000000000000000000000000000000000000000000000000 -318904 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -319523 0x00000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000400000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -321346 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -321884 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -321900 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000400000000000000000000000020000000000000000000000000000000000000000000040000000000000000 -322038 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -322041 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -322043 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -322047 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -322048 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -322056 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -322059 0x00000000001000000000000000000000000000000000000000000000000000000000000800000008000000000000000000000000000000000000800000000000000011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000080000000006000000000000000000000001080000800000000000000000000000000000000000005000000000000000000000000000000008400000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000002004000000000000 -322083 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -322090 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -322108 0x04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010020000000000000000000200000000000000000080000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000080000000000000000000000000000000000000000004000000000100000000000000000000008000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000008000100000000000000000 -322121 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000010000000000100000010020000000000000000000200000000000000000080000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000001080000800000000000000000000000000000000000004000000000000000000000000000000808000000000000000400000000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000100000000000000000 -322122 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000100000010020000000000000000040200000000000000000080000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000080000000000000000000000000000000000000000004000000000000000000000000000000008000000000000000000000000000000000000000000000000000008000000000000000000000000040000000000000800000000000000000000000000000000000100000000000000000 -322128 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010020000000000000000000200000000000000000088000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000080000000000000000000000000000000000000000004000000000000000000000000000000008000002000000000000000000000000000000000000000000000008000008000000000000000000000000000000000800000000000000000000000000000000000100000000000000000 -322454 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008010000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000010000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000080000000000000000000000000000000000000000000000000000000000000000000000000 -322509 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008010000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000080000000000000000000000000000008000000000200000000000000000010000000000000000000000000000000000000000000000000000000002000000000200000000040000000000000080000000000000000000000000000000000000000000000000000000000000000000000000 -322550 0x00000000000000000000000000000000000000000200000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -322749 0x00000000001000000000000000000000000000000000000000000000000000000000000800000008000000000000000000000000000400000000800000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000080000000006400000000000000000000000080000000000000000000000000000000000000000005000000000000000000000000000000008400000000080000000000000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000002004000000000000 -322750 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000080000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000020000000000000040000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -322752 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000008000000000000000000080000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000080000020000000000000040000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000080000000000000000000000 -322758 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -322760 0x00000004004000000000000000000000000000000000020000000000000000000000100000000000000000000000000000000000000000000000000000000000010000000000000000008000000000000000000000000000000000040000000000002000000000000000000000000000000000000000000004000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -322764 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000001000000000000000000000000000000000000000000000000000000000000001000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000020000000000000000000000000000000 -322765 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000400000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000001000000000000000000000000000000000000000000000000000000000000001000000000000000002000000000200000000040000000000000000000000000000000000000000000000000000000020000000000000000000000000000000 -322767 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080000000000000000040000000000000000000000000000000000000000000002000000000000000000000000000000000000000000 -322768 0x00000000004000000000000000000000000000000000120000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000400000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080004000000000000040000000000000000000000000000000000000000000002000000000000000000000000000000000000000000 -322774 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000008000000000000000000000000000000000000000000000000000000000000000000002001000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -322776 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000010000000000000000000000000040000000000000000000000000000000010000000008000000000000000000000000000000000009000000000000000008000000000000000000000000000000000000000000000000000000000000000000002001000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -322777 0x00000000004000000000008000100000000000000000020000000000000002000000000000000000000000000000000000000004000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000020000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000001000000000000000000000000000000000000000000000000 -324029 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -324316 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000004000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -324318 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000 -324322 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000400000000000000000000000000000000000000000000000000000008000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -325807 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -326760 0x00000000000000000000000000000000000000000000000000000040000000000000001000000000000000000000000000008000000000000000000000000000000000008000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000002000000000000008000000000000000 -327103 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -327105 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -327227 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000400000000000000000000000020000000000000000000000000000000000000000000040000000000000000 -327399 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -327544 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -327690 0x00000000000000000000000000000100000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -328002 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000200000000000 -328269 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -328529 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -328585 0x20000000000000000000100000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -328870 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -329480 0x00000000000000000000000000000000000000000000020000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000200000000000000000000000020000000000000000000000000000000000000000000 -329484 0x00000000004000000000000008000000000000000000020000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000040000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000200000000000000000000000020000000000000000000000000000000000000000000 -329485 0x00000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -329491 0x00000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -329513 0x00000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -329519 0x00000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -329659 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000020000000000000000000000000000000000000000000000000000000000020000000010000000008000000000000000000000000000000000008000000400000000000000000000000000000000000000000000000000000000000000000000000000000002000000080000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000020000000 -329667 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000100000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000002000000000000000000000000000000000000000000 -329668 0x0000000000400000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000004000000000000010000000000000000000000000000000000000000000000000001000000000000000000001000000000c000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000002000000000000000000800000000000000000000000 -329673 0x00000000004000001000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000004000000000000000000000000000000000000000000000000004000000000000000000010000000008000000000000000000000000000002000008000000000000000000000000000000000000000000000000000000000000000000000400400000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -329740 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000010000000000000 -329749 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000008000000000000000000000000000000000000000002000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -329750 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000008000000000000000000000000000000000040000000040000000000000000000000010000000000000000000000000000000000000000000000000000010000000008000000000000000000000080000000000008000000000000000000000000000000000000000002000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000400000000000000000000000000000000000000000000 -329824 0x00000000000000000000000000000000000000000000200000000000000000000000001000000000000000000000000000008000000008000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -329964 0x00000000000000000000000000000000000000000000000000000000100000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -330023 0x00000000000000000000000000000000000000000000000000000000100000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -330207 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000004000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000200000000000000000000000008000000000000000 -330473 0x00000000000400000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000001000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -330511 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000002000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000400000000000000000000000020000000000000000000000000000000000000000000040000000000000000 -330579 0x00000000000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000001000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -330683 0x00000000000000000000000000000000000000000000080000000000004000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -330919 0x00020000000000000000000000000000000000000000000000000000000000000008001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -331009 0x00000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -331542 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000100000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000004000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -332007 0x00000000000000000000000000000000000000000000000000000200000080000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008200000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -333256 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000400000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000010000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -333294 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -333583 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000200000000000000000000000000000000000000000000000000010008000000000000000 -333640 0x80000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000004000000008000000000000000000000000000000000000010000000000000000000000000000000000008000000000000000 -334263 0x00000000000000080000000000000000000000000000000000000000000000000100001000000000000010000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -334279 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000040000020000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000 -334883 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000 -334915 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000004000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000 -334919 0x00000020000000000000000000000000000000000000000000000000000000000000001000000000000020000000000000008000000000000000000000000000000000000020000000000000020000812000002000000000000000000000000001000000000000000000000000000000400000000000000000000000000000000000000000000000040000800000000010000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000008000400000000008000000000000000 -335076 0x00000000000000001000000000000000000000000000000000000000000000000000001000000000000000000100000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -335348 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000080000000008000000000000000000000040000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000008000000000 -335643 0x00000000000008000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -335649 0x00000000000008000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -335652 0x00000000000008000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -335684 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000002000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000 -336089 0x0000000000000000000000000000000000000000000000000000000000020000000000100000000000000000000000000000800000000000000000000000000000000000000000000000000000000080200000a000000000000000000000000001000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -336231 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336234 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336242 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336243 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336244 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336245 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336247 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336248 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336255 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336260 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336263 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336264 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336266 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336334 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336336 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336337 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336338 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336439 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336451 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336452 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336453 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336461 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336495 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336497 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336507 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336508 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336509 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336510 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336518 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336520 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336521 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336522 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336526 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336527 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336528 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -336543 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000080000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000040000000000000000000200000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000 -337012 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000001000000000000000000000000400000000000000802000002000000200000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -337642 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000408000000000000000000000000000000000040000080000000000000000080000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000020000000000000000002000000000000000000040000000000000001000000000000000000000000000000000000000000000000000000000000000000000000 -337647 0x00000000000000000000000000000000000000000000020000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000800000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -337649 0x00000000004000000000000000000000000000000000020000000000000080000000100000000000000000000000000000000000000000000000000000000000000000000000000000008002000000000000000000000000000000040000000000000000000000000000000800000000000000000000000000000000000000000000000002000010000000008000000000000000000000000000000000008000000000000000000000000000000000200000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -337653 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000040000000000000000000040000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -337654 0x00000000004000000000008000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000002000000000000002000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000020000040000000000000000000040000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -337655 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000040000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000400000000040000000000000000000000000000000000000000000000000000000000000000000000 -337656 0x00000000004000000000000000000000000400000000020000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000008000040000000000000000000000000000040000000000000000000000000000000000000000000000000000004000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000400000000040000000000000000000000000000000000000000000000000000000000000000000000 -337663 0x00000000004000000000000000000000080000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000001000000000000000000000000000050000000000000000000000000040000000000000000000000000000000000000000004000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000080000000000000000000000000000000000000 -337664 0x00000000000000000000000000000000000000000000020000000010000000000000000000000000001000000000000000000000000000000000000000000000000200000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -337669 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000020000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000008000000000 -337672 0x40000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000020000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000020000000000000010000000008000000000000000000000000008000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000008000008000000000 -337731 0x00000000000000000000000020000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000800000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -338275 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010004000200000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -338281 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010004000200000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -338336 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -338424 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008004000000000000000000000000000000000000100000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -338435 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000008000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000004000000000000000000000000010000000000000000000000000000000000000 -338439 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000010802000002000000000000000000000000001000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000040000000000000000000000000000000000000000000000008000000000000000 -338661 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -338991 0x00000000000000000000000000200000000000000008000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000400800000000000000000000000000000010000000000000000000000000000000000000000000000000 -339173 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002400000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000002000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -339369 0x00000020000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000 -339427 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000020000000000000000000001000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -340633 0x00000000000000000000000000000000000000000000020000000004000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000008000000000000001000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -340635 0x00000000004000000000000000000000000000000000020000000004000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000008000000000000001000000000000200000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000001000000000200000000000000000000000000000000000000000000000000000000000000000000 -340653 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000001000000002000000000000000000040000000000000000000000000000000000000000000000000000000010000000000000000000000000000000 -340658 0x0000000000400000000000000000000400000000000002000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000001000000000800000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000100000000a000000000000000000040000000000000000000000000000000000000000000000000000000010000000000000000000000000000000 -340674 0x00000000000800000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000100000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040080000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -340675 0x00000000004800000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000100000000000000000000000000000000000000000000000000000000000000000000000000000002000010000000000000040080000000000000000000000000000000000002000000000000000000080000000000000000000000000000 -340685 0x00000000000000000000000000000000000000000000020010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000008000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -340686 0x00004000004000000000000000000000000000000000820010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000010000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000008000000000000040000000000000000000000000000000000000000000000000002000000000000000000000000000000000000 -340700 0x00000000004000000000000000000000000000000000020001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000080000000000000000000000000000000000008000000000000000000000000000000000000000000002004200000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000001000 -340708 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000008000000000000000000000000000040000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000080000000000000000000000000000000000000 -340710 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000008000000000000000000000000000040000000000000100000000000000000800000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000400000000000000000000000000000000000000000000000000002000002000000000000040000000000000000000000000000000000000000000000000080000000000000000000000000000000000000 -340712 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000080040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000008000000000200000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -340713 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000080840000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000028000000100000000000000000000000000008000000000200000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000001000000000000000000000 -340718 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000100000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000002000000000000 -340719 0x00000000004000000000000000000000000000000000020000000040000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000008000000000000080000002000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000100000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000002000000000000 -340727 0x00000000004000000000040000002000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000200000000000080000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000002000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000001000000000000000000000000000000 -340728 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000002000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000100000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -340835 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -340988 0x00000000000000000010000000000000000000000010000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000010000000000008000000000000000 -341695 0x00000000000000000000000010000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000001000000000000000000000000000000000000000000000000000000000008000000000000000 -341985 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000100000000000004000000000000001000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -341997 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104000000000004000000000000001000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -342001 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000100000000000004000000000000001000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -342004 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000100000000000004000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -342007 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000004000000000000001000000040000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -342008 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000004000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -342026 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000002000000004000000000000000000000000000000000000000000000000000000001000000000000000000004000000020000080000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000004000000000000000000000000000000000000000000000000000400000000000000000 -342027 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000400000000000000000 -342033 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000400000000000000000 -342035 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000400000000000000000 -342036 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000400000000000000000 -342041 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000 -342047 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000100000000000000000000000000000000002000000104000000000044100000000000001000002000000000000000000000001000000000000000000004000000000000080000000000000000000000000000000000000002000000000000000000000000020000000000000040000000000000000000000000000004000000000000000000000000000000000000000000000000000400000000000000000 -342053 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000040000000000000000 -342080 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000400000002000000000000000000000000000000000000000000040000000000000000000001040000000000000000000000000000000080000000010000000000000000000000000000000000000000000000000000000020000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000440000000000000000 -342101 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000 -342107 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000040000000000000000 -342111 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000040000000000000000000000040000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000040000000000000000 -342115 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000 -342118 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000400000002000000004000000000000000000000000000000000000000000000000000000001000000000000000000004000000000000080000000010000000000000000000000000000000000000000000000000000000020000000000000040000000000000000000000000000004000000000000000000000000000000000000000000000000000400000000000000000 -342125 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000040000000000000000 -342140 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000008000000000000000000080000000000000000800000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000 -342141 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000040000000000000000 -342145 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000400000002000000000000000000000000000000000000000000040000000000000000000001040000000000000000000000000000000080000000010000000000000000000000000000000000000000000000000000000020000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000440000000000000000 -342162 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000040000000000000000 -342173 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000040000000000000000 -342188 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000040000000000000000 -342272 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000400000000000000000 -342386 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000008000000000000000000000000000000000000000000000000000004000000000000000000000000000008000000000000000000000000001000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000010000000004000000000000000000000000010000000000000000000400000000000000000 -342399 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000 -342466 0x00000000000000000000000000000000000000000000000000002000000000000000001000000000080000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -342601 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000040000000000000000000000040000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000040000000000000000 -342616 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000008000000000000000000080000000000000000800000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000 -342618 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000008000000000000000000080000000000000000800000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000 -342924 0x00000000000000000000000000000000000010000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -342964 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000000000000002000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -343006 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000080000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000 -343021 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000004000000000000000000000000000000000000000000000000080000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000 -343059 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000008000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -343079 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -343083 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000040000000000000802000002000000000000000000000000001000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -343133 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -343162 0x00000020000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000100000000000000000000000000008000400000000000000000000000000 -343185 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000008000400000000000000000000000000 -343339 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000080000000000000000802000002000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -343946 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -343966 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -343971 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -344121 0x00000000000000000000000000000000000000000000000000000040000000000000001000000000000000000000000000008000000000000000000000000000000000008000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000002000000000000008000000000000000 -344164 0x00000000000000000000000000000000000000000000000000000040000000000000001000000000000000000000000000008000000000000000000000000000000000008000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000002000000000000008000000000000000 -344839 0x00000000000000000000000000000000000000000000000000000000000000000200001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000008000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -345506 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -346112 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -346392 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -346395 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -346398 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -346425 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -346448 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -346451 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -346454 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -346464 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -346466 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -347014 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000400000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -347301 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000200000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000002000000000000000000000000000000000000000000000000000000000000000008000000000000000 -347333 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000200000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000002000000000000000000000000000000000000000000000000000000000000000008000000000000000 -347613 0x00000000000000000000000000000000000000000800000000000000000000000000000000000000000001000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010004000000002000000000000000000000000000000000000000000000000000000001000000040000000000000000000000800000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000001000000000000000000000 -347700 0x00000000000000000000000000000000000000000000000000000000002000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400010000000000000 -347705 0x00000000000000000000000000000000000000000000000000000000002000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400010000000000000 -347711 0x00000000000000000000000000000000000000004000000000020000002000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040010000000000000 -347853 0x00000000000000000000000000000000000000000000000000000000002000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000 -347953 0x00000000000000000000000000000000000000000000000000000000002000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000080000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000 -347958 0x00000000000000000000000000000000000000004000000000020000002000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040010000000000000 -347960 0x00000000000000000000000000000000000000000000000000020000002000000001000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040010000000000000 -348019 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -348244 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000004000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -348443 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000400000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -348675 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000080000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000400100000000000000000000000000000000000000000000000008000000000000000 -348743 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -348936 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000100000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000002000000000000000000000000000000000000000008000000000000000 -350544 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -351473 0x00000000000000000000000000000000000000000000000000000000002000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000 -353157 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -353181 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000004000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000400000000000000000 -353196 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000080000000000000000000000000000000000000040000000000000000 -353273 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000080000000000000000800000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000 -353276 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000080000000000000000000000000000000000000040000000000000000 -353359 0x00000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000200000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000100000040 -353360 0x00000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000040 -353361 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008002400000000000000000000000000 -353367 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000080000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000008000000000000000 -353370 0x02000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000 -353438 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004000000000000000000000000000000080000000000000000000000000000000000000000000000000002000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000040 -353443 0x0000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000a000400000000000000000000000000 -353447 0x00000028000000000000000000000080000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000 -353479 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000002000001000000000000000000000000100000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -354071 0x02000000000000000000000000000000000000000000020000000000000000000000000040000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000001000000000020000000000000000000000200000000000000020000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000 -354151 0x00000000000000000000000000000000000000000000002000000000000000000000400000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004040000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000080000000400000000000000000000000000000000000000000000000000000000000000000000000000000 -354162 0x00000000000000000000000000004000000000000000000000000000000000000000410000000000200000000000000002000000000002000000000040000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000 -354233 0x00000000000000000000000000000000000000000000000000000000000000000000400040000004000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024040000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000400000000000000000000000040000000000000000000000000000000000100000000000000000 -354585 0x00000000000000000000000000000000000000000000000000100000000000000000400000000000200000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004001000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000 -354866 0x00000000000000000000000000000000000000000000000000001000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000001 -356461 0x00000000000000000000000000200000000000000000000000000000010000000000000000000000000000000000000000202000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -356488 0x00000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000200000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000020000000000000080000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000 -356513 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000100001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000080000000000000a00000000000000000000000 -356526 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -356535 0x00000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000 -356543 0x00000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000800080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000 -357195 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -357579 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -357588 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -357590 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000200000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -357592 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -357600 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -357622 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -357630 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -358290 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000400000002000000004000000000000000000000000000000000000000000000000000000001000000000000000000004000000000000080000000010000000000000000000000000000000000000000000000000000000020000000000000040000000000000000000000000000004000000000000000000000000000000000000000000000000000400000000000000000 -358426 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000 -358556 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -358811 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000400000000000000000000000000000000002000000000008000000000000000 -359114 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -359375 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000100000000000000000 -359378 0x00000020000000000010000000000000000004000000000000000200400000000000000000000000000000000002000000000000000000020000000000000000000000000000000000000000000000010000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000040000000000040010000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000400000000000 -359538 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000 -361585 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -361588 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -361732 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000842000002000000000000000000000000001000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000080000000000000000000000000000000000000000000000000000008000000000000000 -361757 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000040000000000000000000000040000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -361775 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000008000000000000000000080000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -362002 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000010000000000000000000000000802000002000000000000000000000400001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -365791 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000040 -365793 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000010000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000400010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000 -369141 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000200000000000000000000000000000000000000000000000000000000000000000008000000000010000 -369239 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -369249 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -369253 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -369259 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -369261 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -369263 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -369274 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -369426 0x00000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000200000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000100000040 -369428 0x20000020000000000000000000800000000004000000000000000200400000000000000040000000000000000000000000000000000000020000000000000000000000000000000000000000000000010000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000040000000000000010000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000008000400800000000000000000000000 -369431 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000400000000000100000000000040 -369538 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000040 -369540 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000008000400000000000000000000000000 -370399 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000001000000000000802000002000000000000000000000000001000000100000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -370517 0x00000000000000000000000000000080200000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000080004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -370545 0x00000000000000000000000000000080200000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000080004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -371190 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371280 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371286 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371288 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371299 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371307 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371327 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371329 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371352 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371360 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371362 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371369 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371378 0x00000000000000000000000000000080200000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000080004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -371450 0x00000000000000000000000000000080200000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000080004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -371489 0x00000000000000000000000000000080000080004000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -371509 0x00000000000000000000000000000080000080004000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -371532 0x00000000000000000000000000000080000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371658 0x00000000000000000000000000000080000080004000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -371660 0x00000000000000000000000000000080000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371876 0x00000000000000000000000000000080000080004000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -371904 0x00000000000000000000000000000080000080004000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -371906 0x00000000000000000000000000000080000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371912 0x00000000000000000000000000000080000080004000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -371914 0x00000000000000000000000000000080000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371918 0x00000000000000000000000000000080000080004000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -371931 0x00000000000000000000000000000080000080004000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -371933 0x00000000000000000000000000000080000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371938 0x00000000000000000000000000000080000080004000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -371940 0x00000000000000000000000000000080000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -371973 0x00000000000000000000000000000080000080004000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -372006 0x00000000000000000000000000000080000080004000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -372014 0x00000000000000000000000000000080000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -372847 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -374209 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -374225 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -374365 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000010000000000000000000000000000000000000000000000000000000020000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -374388 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020001000000000000000000000200000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -375079 0x00000000000000000000000000000080000080004000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -375093 0x00000000000000000000000000000080000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -375401 0x00000000000000000000000000000000000400000400000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -375440 0x00000000000000000000000000000000000400000400000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -375447 0x00000000000000000000000000000000000400000400000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -376493 0x00000000000000000000000000000080000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -376573 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -376588 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -376644 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -376650 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -376668 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -376906 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -377026 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -377139 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000001000000000000080000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000080000000000000000000000000000000000000040000000000000000 -377506 0x00000000000000000000000000000080000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -377523 0x00000000000000000000000000000080000080004000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -377525 0x00000000000000000000000000000080000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -377581 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000040 -377586 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000000000000000000000000000040000000000000000000000100000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000 -377608 0x00000000000000000000000000000000000000000200000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -377627 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000080000000000000000000000000000000000000040000000000000000 -377629 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000080000000000000000000000000000000000000040000000000000000 -377703 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000001000000000000080000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000080000000000000000000000000000000000000040000000000000000 -377730 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -377746 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000004000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000400000000000000000 -377877 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000400000002000000004000000000000000000000000000000000000000000000000000000001000000000000000000004000000000000080000000010000000000000000000000000000000000000000000000000000000020000000000000040000000000000000000000000000004000000000000000000000000000000000000000000000000000400000000000000000 -377894 0x00000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -377905 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000400000002000000004000000000000000000000000000000000000000000000000000000001000000000000000000004000000000000080000000010000000000000000000000000000000000000000000000000000000020000000000000040000000000000000000000000000004000000000000000000000000000000000000000000000000000400000000000000000 -377917 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000040000000000000000 -377922 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000040000000000000000000000040000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000040000000000000000 -377925 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -378345 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -378347 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -379027 0x00000020000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000008000400000000000000000000000000 -379032 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000 -379039 0x08000020000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000 -379158 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000400000000000000000002000040000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -379161 0x00000400004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000040000000000000000000000000000000000000000000010000000008000000000000000000000000000000020008000000000000000000000000000000000000000000000000000000000000000000400000000000000000002000040000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -379163 0x00000000000000000000000000000000000000000000020000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000008000010000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000080000000000000000000000000000000000000000 -379164 0x00000000004000000000000000000000000000100000020000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000008000010000000000000000000000000000040000000000001000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000100000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000080000000000000000000000000000000000000000 -379167 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000004 -379170 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -379171 0x00000000004000000000000000800000000000000000020000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000008000000000000000000000000000002000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000004 -379172 0x00000000000000000010000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000200000000000000000000000000000000000000000000000000000000000000000000000 -379176 0x00000000004000000010000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000100000000000000000000000000000000000000000200000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000040000000000000000000000000000000002000000000000000000040000000000000000200000000000000000000000000000000000001000000000000000000000000000000000 -379180 0x00000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000800000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -379182 0x00000000004080000000000002000000000000000800020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000800000000000000000000050000000008000000000000000000000000800000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -379210 0x00000000000000040000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000004000000000000000000000400000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -379212 0x00000000004000040000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000200000000000008000000000000000000000000000000000000000004000000000000000000000400000000000000000000002000000000000000000040002000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -379214 0x00000001000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000080000000000000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -379216 0x00000001004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000008000000000000008000000000000000000000000000000000040000000000000000000000000000000000020000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000080000000000000000000000000000000000000000020002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -379217 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000800000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000020000000000000000000000000000000000000000000000000000000000000000 -379219 0x00000000004000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000008000000000000000000000000010000000000000000010000000008800000000000000000000000000000000008000020000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000000000020000000000000000000000000000000000000000000000000000000000000000 -379220 0x00000000000000000000000000200000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000100000000000100002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -379224 0x00000000004000000000000000200000000000000000020000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000008000000000000000040000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000008000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000100000000000100002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000400000000000000 -379235 0x00000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000040000000000000000080000000000000000000000000000000000000000800000000000000000000000000000 -379237 0x00000000004000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000040000000000000000000000000000000000000100000000008000000000000000000000000000000000000010000000008008000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000080000000000000040000000000000000080000000000000000000000000000000000000000800000000000000000000000000000 -381271 0x00000000000000000000000000000080000080004000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000004000000000000000000000000002000000000000000000400000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -381276 0x00000000000000000000000000000080000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -381689 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -382200 0x00000020000000000000000008000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000 -382217 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000400000010000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000 -382644 0x00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000200000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000002000000000000000000000000000000000000000000000000000000000000000008000000000000000 -383284 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -383337 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -383354 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -383361 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -383427 0x00000000000000000000000000000000000004000800000000000000000000000000000000000000000001000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000800000001000000000008000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000040000000000000000000 -383466 0x00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -383469 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000001000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -383515 0x00000000000000000000000000000000000004000800000000000000000000000000000000000000000001000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000800000001000000000008000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000040000000000000000000 -383519 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000800000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000002000000000000000000000000000 -383630 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000400000000000000000 -383760 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000010000000000000000000000000000000000000000000000000000000020000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -383802 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000080000000000400000000000000000 -383815 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000000001000000000000000000004000000000000000000000010000000000000000000000040000000000000000000000000000000020000000100000040000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -383844 0x00000000000000000000000000000000100000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -383852 0x00000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000002000000000000000000000000000400000000000000004000000000000000080000000000000000000000000000000000000001000000000000000000004000000000000000000000010000000000000000000000000000000000000000000000000000000020000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -383859 0x00000000000000000000000000000000000000804000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000002000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -383864 0x00000000000000000000000000000000000000800000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000080000000000000000040000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -383968 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000001000000000000080000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000080000000000000000000000000000000000000040000000000000000 -383973 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000 -384127 0x00000000000000000000000000000000000004000800000000000000000000000000000000000000000001000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000800000001000000000008000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000040000000000000000000 -384138 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -384149 0x00000000000000000000000000000000100000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -384173 0x00000000000000000000000000000000100000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000400000000000000000000080000000000000000000000000000000000008000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000001000000000000000000005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000800000000000000000000000000000400000000000000000 -384301 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000040000000000000000000000000000000000000000400000000000000000 -384422 0x00000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000400000000000000000 -384506 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000400000000000000000 -384511 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000400000000000000000 -384546 0x00000000000000000000000000000000000004000800000000000000000000000000000000000000000001000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000800000001000000000008000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000040000000000000000000 -384771 0x00001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000800000 -384825 0x00001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000 -384861 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000100000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -384917 0x00000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000400000000000000000 -384923 0x00002000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000001000000 -384965 0x00000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -385067 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000008000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000400000000000000000 -385073 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000008000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000400000000000000000 -385356 0x00002000000000000000000000000000000000010000000000000000000000000000000400000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000004000000000000000000000000000000004000000000000000000000000000000000000000000000000000000001000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000001000000 -386571 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -386620 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000 -386736 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000040000000000000000000000000000010000000020000000000000000000000000000000000000000000000000000000000000000010 -386786 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000280000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000040000000000000000000000000000010000000040000000000000000000000000000000000000000000000000000000000000000010 -386795 0x04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000040000000000000000000000000000000000040000000000000000000000000000010000000000000000000000000000000000000000000000000000008000000000000000000010 -386804 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000040000000000400000000000000000000000040000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000010 -386812 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000040000000000000000008000000000010000000000000000000000000000000000000000000000000000000000000000000000000010 -386818 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000800000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000040000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000010 -386899 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000080000000000000000000000000000040000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000010 -386939 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000002000000000000000000000000000000000000000200000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000010000000020000000000000000000000000000000000000000000000000000000000000000000 -386945 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000020000000000000000000800000000000000000000000000000000000000000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000 -386975 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000100000000000000000020000000000000000000000000000000000000000000000000000000000000000000 -387011 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000010000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000 -387014 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000001000000000000000000000040000000000000000000000000000000000000000000000040000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000 -387016 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000400000000800000000 -387032 0x04000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000 -387044 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000020000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000020000000000000000000000000000000000000000000080000000000000000000000 -387045 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000400000000800000000 -387206 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -387225 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -387241 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -387276 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000008000000000000000004000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000021000000000000000000004000000000000000000000400000000000000000000000000000000080000000000000000000000000000000000000040000000000001000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -387284 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000040000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -387365 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000440000000000000000 -387615 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000800008000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -387627 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000800000000000000000400000000000000000 -387641 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800008000000000000000000000001000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -387648 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000800008000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -387654 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000800008000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -387658 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000800008000000000000000000000001000000000000000000000000000000000000000000000000040000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -387683 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000800008000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -387688 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000800008000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -387690 0x00000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000800008000000000000000000000001000000000000000000000000000000000000000000000000040000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -387761 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000 -388108 0x00000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -388111 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000800000000 -388150 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000800000000 -388246 0x00000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000001000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000 -388285 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -388296 0x00000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000001000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000 -388516 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -388860 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000020000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000 -388893 0x00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000008000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000001000000000000000000000000000008000000000000000020000000000000000000010000000000001000000000000000000000000000000000000000000000000000000000000000400000000000000000 -388894 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000020000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000 -388907 0x00000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000104000000000004000000000000001000000000000000000000000000001000000000000000000004080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000004000000000000000400000000000000000 -388909 0x00000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000400000000000000000 -388912 0x00000000000000000000000000000000000000004000000000020000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000000000000000000000000004000000000000000040000000000000000 -388918 0x00000000000000000000000000000000000000000000000000020000002000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000040000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000004000000000000000040000000000000000 -388923 0x00000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000008000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000001000000000000000000000080000000000000000000000000000000000000000000000000000000000008000000000000000020000000000000000000000000000000001000000000000000000000000000000000000000000000004000000000000000400000000000000000 -388940 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000020000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000 -388971 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000004000000000000000000000000000000000000000800000000000000000000000000000000000 -388990 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000 -389012 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000 -389158 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000 -389206 0x00000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000400000000000000000 -389238 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -389277 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000100000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000400000000000000000 -389292 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000800000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -389301 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000020000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -389309 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000020000000000000000000000000000000000000000000000000000000008000000000000000000080000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -389324 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000008000000000000000000000000004000000000000000000000000004000000000000000000000000000000000000000000000000000000001000000000000800000024000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000440000000000000000 -389328 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -389343 0x00000000000000000000000000000000000000004000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000020000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000040000000000000000 -390001 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000001000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -390004 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000200000000000000000000000000000000000000020000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -390024 0x00000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -390042 0x00000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -390236 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -390306 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000001000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -390867 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -391685 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000800000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000002000000000000000000000000000 -391690 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000800000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000002000000000000000000000000000 -391691 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000800000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000002000000000000000000000000000 -391697 0x00000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000040000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000 -391713 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000 -391849 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000100000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000400000000000000000 -392002 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000 -392097 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000020000000000000000000000000000000000000000000000000000000008000000000000000000080000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -392104 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000010000000000000000000000000000000000000000000000000000000020000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -392110 0x00000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000 -392294 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000004000000000000000000000000000000000000000000000000000000000 -392697 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000010000000000000000000000000000400000000000000000 -392960 0x00000000000000200000400000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000002000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -392970 0x00000000000000200000400000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000002000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -392990 0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000002000000000000000000000000000000100000000000000000100000000000000000000000000000000000000000000000000000000000002000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -393302 0x00000010000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000400000000000000000 -393370 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -393752 0x00000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000 -394354 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000800000024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -394389 0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000002000000000000000000000000000000100000000000000000100000000000000000000000000000000000000000000000000000000000002000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -394390 0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000002000000000000000000000000000000100000000000000000100000000000000000000000000000000000000000000000000000000000002000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -394391 0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000002000000000000000000000000000000100000000000000000100000000000000000000000000000000000000000000000000000000000002000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -394393 0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000002000000000000000000000000000000100000000000000000100000000000000000000000000000000000000000000000000000000000002000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -394394 0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000002000000000000000000000000000000100000000000000000100000000000000000000000000000000000000000000000000000000000002000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -394395 0x00000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000002000000000000000000000000000000100000000000000000100000000000000000000000000000000000000000000000000000000000002000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -394426 0x00000000000000200000400000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000200000000000000000000000000000000000000000000000000000000000000000000000008000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -394800 0x00000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000100000010000000000000000000000000000000000000000000000000000000000020000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000400000000000000000000000000 -395595 0x00000000000000000000000000000000000000000000000000000000000100000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000800000000000000000000000000000000000000000000000000000000000000000008000000000000000 -395969 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -396348 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000010000000000000000000000000000400000000000000000 -397108 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000004000000004000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000 -397588 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000004000000004000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000 -397591 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000004000000004000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000 -398412 0x00000000000000000000000000000000000000000000000000000000001000000000001000000000000000000000000000008000000000000000000000000000000000000000000000000000000000802000002000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000000000000000080000000000000000000800008000000000000000 -398456 0x00000020000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000 -398477 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -398679 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040100000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -398968 0x00000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020200000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000 -398972 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000400000000000000000 -399058 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000200000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000 -399804 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000010000000000000000000000000000400000000000000000 -399849 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000004000000004000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/ethcore/src/chainfilter/chainfilter.rs b/ethcore/src/chainfilter/chainfilter.rs deleted file mode 100644 index 387d750fd..000000000 --- a/ethcore/src/chainfilter/chainfilter.rs +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -//! Multilevel blockchain bloom filter. -//! -//! ```not_run -//! extern crate ethcore_util as util; -//! extern crate ethcore; -//! use std::str::FromStr; -//! use util::sha3::*; -//! use util::hash::*; -//! use ethcore::chainfilter::*; -//! -//! fn main() { -//! let (index_size, bloom_levels) = (16, 3); -//! let mut cache = MemoryCache::new(); -//! -//! let address = Address::from_str("ef2d6d194084c2de36e0dabfce45d046b37d1106").unwrap(); -//! -//! // borrow cache for reading inside the scope -//! let modified_blooms = { -//! let filter = ChainFilter::new(&cache, index_size, bloom_levels); -//! let block_number = 39; -//! let mut bloom = H2048::new(); -//! bloom.shift_bloomed(&address.sha3()); -//! filter.add_bloom(&bloom, block_number) -//! }; -//! -//! // number of updated blooms is equal number of levels -//! assert_eq!(modified_blooms.len(), bloom_levels as usize); -//! -//! // lets inserts modified blooms into the cache -//! cache.insert_blooms(modified_blooms); -//! -//! // borrow cache for another reading operations -//! { -//! let filter = ChainFilter::new(&cache, index_size, bloom_levels); -//! let blocks = filter.blocks_with_address(&address, 10, 40); -//! assert_eq!(blocks.len(), 1); -//! assert_eq!(blocks[0], 39); -//! } -//! } -//! ``` -//! -use std::collections::{HashMap}; -use util::hash::*; -use chainfilter::{BloomIndex, FilterDataSource}; -use chainfilter::indexer::Indexer; - -/// Should be used for search operations on blockchain. -pub struct ChainFilter<'a, D> - where D: FilterDataSource + 'a -{ - data_source: &'a D, - indexer: Indexer, -} - -impl<'a, D> ChainFilter<'a, D> where D: FilterDataSource -{ - /// Creates new filter instance. - /// - /// Borrows `FilterDataSource` for reading. - pub fn new(data_source: &'a D, index_size: usize, levels: u8) -> Self { - ChainFilter { - data_source: data_source, - indexer: Indexer::new(index_size, levels) - } - } - - /// internal function which does bloom search recursively - fn blocks(&self, bloom: &H2048, from_block: usize, to_block: usize, level: u8, offset: usize) -> Option> { - let index = self.indexer.bloom_index(offset, level); - - match self.data_source.bloom_at_index(&index) { - None => return None, - Some(level_bloom) => match level { - // if we are on the lowest level - 0 => return match offset <= to_block { - // take the value if its smaller than to_block - true if level_bloom.contains(bloom) => Some(vec![offset]), - // return None if it is is equal to to_block - _ => None - }, - // return None if current level doesnt contain given bloom - _ if !level_bloom.contains(bloom) => return None, - // continue processing && go down - _ => () - } - }; - - let level_size = self.indexer.level_size(level - 1); - let from_index = self.indexer.bloom_index(from_block, level - 1); - let to_index = self.indexer.bloom_index(to_block, level - 1); - let res: Vec = self.indexer.lower_level_bloom_indexes(&index).into_iter() - // chose only blooms in range - .filter(|li| li.index >= from_index.index && li.index <= to_index.index) - // map them to offsets - .map(|li| li.index * level_size) - // get all blocks that may contain our bloom - // filter existing ones - .filter_map(|off| self.blocks(bloom, from_block, to_block, level - 1, off)) - // flatten nested structures - .flat_map(|v| v) - .collect(); - Some(res) - } - - /// Adds new bloom to all filter levels - pub fn add_bloom(&self, bloom: &H2048, block_number: usize) -> HashMap { - let mut result: HashMap = HashMap::new(); - - for level in 0..self.indexer.levels() { - let bloom_index = self.indexer.bloom_index(block_number, level); - let new_bloom = match self.data_source.bloom_at_index(&bloom_index) { - Some(old_bloom) => old_bloom | bloom.clone(), - None => bloom.clone(), - }; - - result.insert(bloom_index, new_bloom); - } - - result - } - - /// Resets blooms at level 0 and forces rebuild on higher levels. - pub fn reset_chain_head(&self, blooms: &[H2048], block_number: usize, old_highest_block: usize) -> HashMap { - let mut result: HashMap = HashMap::new(); - - // insert all new blooms at level 0 - for (i, bloom) in blooms.iter().enumerate() { - result.insert(self.indexer.bloom_index(block_number + i, 0), bloom.clone()); - } - - // reset the rest of blooms - for reset_number in block_number + blooms.len()..(old_highest_block + 1) { - result.insert(self.indexer.bloom_index(reset_number, 0), H2048::new()); - } - - for level in 1..self.indexer.levels() { - for i in 0..blooms.len() { - - let index = self.indexer.bloom_index(block_number + i, level); - let new_bloom = { - // use new blooms before db blooms where necessary - let bloom_at = | index | { result.get(&index).cloned().or_else(|| self.data_source.bloom_at_index(&index)) }; - - self.indexer.lower_level_bloom_indexes(&index) - .into_iter() - // get blooms - // filter existing ones - .filter_map(bloom_at) - // BitOr all of them - .fold(H2048::new(), |acc, bloom| acc | bloom) - }; - - result.insert(index, new_bloom); - } - } - - result - } - - /// Returns numbers of blocks that may log bloom. - pub fn blocks_with_bloom(&self, bloom: &H2048, from_block: usize, to_block: usize) -> Vec { - let mut result = vec![]; - // lets start from highest level - let max_level = self.indexer.max_level(); - let level_size = self.indexer.level_size(max_level); - let from_index = self.indexer.bloom_index(from_block, max_level); - let to_index = self.indexer.bloom_index(to_block, max_level); - - for index in from_index.index..to_index.index + 1 { - // offset will be used to calculate where we are right now - let offset = level_size * index; - - // go doooown! - if let Some(blocks) = self.blocks(bloom, from_block, to_block, max_level, offset) { - result.extend(blocks); - } - } - - result - } -} diff --git a/ethcore/src/chainfilter/indexer.rs b/ethcore/src/chainfilter/indexer.rs deleted file mode 100644 index a10bb69d2..000000000 --- a/ethcore/src/chainfilter/indexer.rs +++ /dev/null @@ -1,155 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -//! Simplifies working with bloom indexes. - -use chainfilter::BloomIndex; - -/// Simplifies working with bloom indexes. -pub struct Indexer { - index_size: usize, - level_sizes: Vec, -} - -impl Indexer { - /// Creates new indexer. - pub fn new(index_size: usize, levels: u8) -> Self { - if levels == 0 { - panic!("Indexer requires at least 1 level."); - } - - let mut level_sizes = vec![1]; - level_sizes.extend_from_slice(&(1..).into_iter() - .scan(1, |acc, _| { - *acc = *acc * index_size; - Some(*acc) - }) - .take(levels as usize - 1) - .collect::>()); - - Indexer { - index_size: index_size, - level_sizes: level_sizes, - } - } - - /// unsafely get level size. - pub fn level_size(&self, level: u8) -> usize { - self.level_sizes[level as usize] - } - - /// Converts block number and level to `BloomIndex`. - pub fn bloom_index(&self, block_number: usize, level: u8) -> BloomIndex { - BloomIndex { - level: level, - index: block_number / self.level_size(level), - } - } - - /// Return bloom which are dependencies for given index. - /// - /// Bloom indexes are ordered from lowest to highest. - pub fn lower_level_bloom_indexes(&self, index: &BloomIndex) -> Vec { - // this is the lowest level - if index.level == 0 { - return vec![]; - } - - let new_level = index.level - 1; - let offset = self.index_size * index.index; - - (0..self.index_size).map(|i| BloomIndex::new(new_level, offset + i)).collect() - } - - /// Return number of levels. - pub fn levels(&self) -> u8 { - self.level_sizes.len() as u8 - } - - /// Returns max indexer level. - pub fn max_level(&self) -> u8 { - self.level_sizes.len() as u8 - 1 - } -} - -#[cfg(test)] -mod tests { - #![cfg_attr(feature="dev", allow(similar_names))] - use chainfilter::BloomIndex; - use chainfilter::indexer::Indexer; - - #[test] - fn test_level_size() { - let indexer = Indexer::new(16, 3); - assert_eq!(indexer.level_size(0), 1); - assert_eq!(indexer.level_size(1), 16); - assert_eq!(indexer.level_size(2), 256); - } - - #[test] - fn test_bloom_index() { - let indexer = Indexer::new(16, 3); - - let bi0 = indexer.bloom_index(0, 0); - assert_eq!(bi0.level, 0); - assert_eq!(bi0.index, 0); - - let bi1 = indexer.bloom_index(1, 0); - assert_eq!(bi1.level, 0); - assert_eq!(bi1.index, 1); - - let bi2 = indexer.bloom_index(2, 0); - assert_eq!(bi2.level, 0); - assert_eq!(bi2.index, 2); - - let bi3 = indexer.bloom_index(3, 1); - assert_eq!(bi3.level, 1); - assert_eq!(bi3.index, 0); - - let bi4 = indexer.bloom_index(15, 1); - assert_eq!(bi4.level, 1); - assert_eq!(bi4.index, 0); - - let bi5 = indexer.bloom_index(16, 1); - assert_eq!(bi5.level, 1); - assert_eq!(bi5.index, 1); - - let bi6 = indexer.bloom_index(255, 2); - assert_eq!(bi6.level, 2); - assert_eq!(bi6.index, 0); - - let bi7 = indexer.bloom_index(256, 2); - assert_eq!(bi7.level, 2); - assert_eq!(bi7.index, 1); - } - - #[test] - fn test_lower_level_bloom_indexes() { - let indexer = Indexer::new(16, 3); - - let bi = indexer.bloom_index(256, 2); - assert_eq!(bi.level, 2); - assert_eq!(bi.index, 1); - - let mut ebis = vec![]; - for i in 16..32 { - ebis.push(BloomIndex::new(1, i)); - } - - let bis = indexer.lower_level_bloom_indexes(&bi); - assert_eq!(ebis, bis); - } -} diff --git a/ethcore/src/chainfilter/logs.txt b/ethcore/src/chainfilter/logs.txt deleted file mode 100644 index 2127af242..000000000 --- a/ethcore/src/chainfilter/logs.txt +++ /dev/null @@ -1,1013 +0,0 @@ -300054 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4d617274696e0000000000000000000000000000000000000000000000000000 -300059 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000059 -300221 0xef2d6d194084c2de36e0dabfce45d046b37d1106 0x02c69be41d0b7e40352fc85be1cd65eb03d40ef8427a0ca4596b1ead9a00e9fc -301826 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -303166 0xef2d6d194084c2de36e0dabfce45d046b37d1106 0x6c692d39f4045f32ff9259df5b527f0ebf04abdbbb44231574a0e5398ff21fae 0x0000000000000000000000000000000000000000000000000000000000000738 -303345 0xef2d6d194084c2de36e0dabfce45d046b37d1106 0x02c69be41d0b7e40352fc85be1cd65eb03d40ef8427a0ca4596b1ead9a00e9fc -303379 0xe881af13bf55c97562fe8d2da2f6ea8e3ff66f98 0x1250e52636eed438f884679df55d2911cf41764cf8b2da1bd22d29b0eb14f80e 0x0000000000000000000000001db3439a222c519ab44bb1144fc28167b4fa6ee6 0x0000000000000000000000000000000000000000000000000000000000000000 -303379 0xe881af13bf55c97562fe8d2da2f6ea8e3ff66f98 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba 0x0000000000000000000000001db3439a222c519ab44bb1144fc28167b4fa6ee6 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 0x0000000000000000000000000000000000000000000000000000000000000000 -303388 0xe881af13bf55c97562fe8d2da2f6ea8e3ff66f98 0x1250e52636eed438f884679df55d2911cf41764cf8b2da1bd22d29b0eb14f80e 0x000000000000000000000000abad6ec946eff02b22e4050b3209da87380b3cbd 0x0000000000000000000000000000000000000000000000000000000000000001 -303388 0xe881af13bf55c97562fe8d2da2f6ea8e3ff66f98 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba 0x0000000000000000000000001db3439a222c519ab44bb1144fc28167b4fa6ee6 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 0x0000000000000000000000000000000000000000000000000000000000000001 -303621 0x584aeb8bcb61e5c1a84d167c2511abf581713495 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 0x00000000000000000000000071353366b3ca768968ea084167655e1cc09938f2 0x000000000000000000000000302f330f8fb5f122b388acb8d85ccb0e712bb5ff -303670 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -303674 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -303683 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -303689 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -303689 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -303692 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -303692 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -303716 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -303717 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -303748 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -303756 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -303756 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -303758 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -303758 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -304090 0x9c667b7ea8ac2a0cc7e73544625d692f72175489 0x17eed4a0a175f46e59877d4b2bd56f2ed7d59d3d1b2dfa7b0867183c528423f8 0x0000000000000000000000000000000000000000000000000000000000000001 -304095 0x9c667b7ea8ac2a0cc7e73544625d692f72175489 0x17eed4a0a175f46e59877d4b2bd56f2ed7d59d3d1b2dfa7b0867183c528423f8 0x0000000000000000000000000000000000000000000000000000000000000002 -304107 0x9c667b7ea8ac2a0cc7e73544625d692f72175489 0x17eed4a0a175f46e59877d4b2bd56f2ed7d59d3d1b2dfa7b0867183c528423f8 0x0000000000000000000000000000000000000000000000000000000000000003 -304113 0x9c667b7ea8ac2a0cc7e73544625d692f72175489 0x17eed4a0a175f46e59877d4b2bd56f2ed7d59d3d1b2dfa7b0867183c528423f8 0x0000000000000000000000000000000000000000000000000000000000000004 -304222 0x9c667b7ea8ac2a0cc7e73544625d692f72175489 0x17eed4a0a175f46e59877d4b2bd56f2ed7d59d3d1b2dfa7b0867183c528423f8 0x0000000000000000000000000000000000000000000000000000000000000005 -304245 0x9c667b7ea8ac2a0cc7e73544625d692f72175489 0x17eed4a0a175f46e59877d4b2bd56f2ed7d59d3d1b2dfa7b0867183c528423f8 0x0000000000000000000000000000000000000000000000000000000000000006 -304247 0x4d498b18abcf83a15d3364d7419a4ef382982c7d 0x7d596234f9de8bba372a6b76656b35620eb6a5211bb764a81b1891567aed662a 0x0000000000000000000000000000000000000000000000000000000000000067 -304247 0x9c667b7ea8ac2a0cc7e73544625d692f72175489 0xe1a3670bcee4a697f1f4341b87487549f80e87998434bb9c2c08c73966d0766d 0x0000000000000000000000000000000000000000000000000000000000000006 0x0000000000000000000000000000000000000000000000000000000000000067 0x0000000000000000000000004d498b18abcf83a15d3364d7419a4ef382982c7d -304312 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x506c616e657468657265756d0000000000000000000000000000000000000000 -304319 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x506c616e657468657265756d0000000000000000000000000000000000000000 0x0000000000000000000000008394a052eb6c32fb9defcaabc12fcbd8fea0b8a8 -304319 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x506c616e657468657265756d0000000000000000000000000000000000000000 -304367 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x7261626269740000000000000000000000000000000000000000000000000000 -304375 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xc86aa3e5b1bc5a674de25655f9a3ccf734594e22d008e71d7ede3fe5c93e1384 -304375 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x7261626269740000000000000000000000000000000000000000000000000000 0x000000000000000000000000f50466e3f27955334fff159e9d6e325c11eb85d6 -304375 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x7261626269740000000000000000000000000000000000000000000000000000 -304407 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xc86aa3e5b1bc5a674de25655f9a3ccf734594e22d008e71d7ede3fe5c93e1384 -304431 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -304433 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -304608 0x7d00703c96bcd2b2af420cf165241396528b5e99 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -304609 0x7d00703c96bcd2b2af420cf165241396528b5e99 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -304788 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -304794 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -304819 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -304835 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xc86aa3e5b1bc5a674de25655f9a3ccf734594e22d008e71d7ede3fe5c93e1384 -304849 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -304856 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xc86aa3e5b1bc5a674de25655f9a3ccf734594e22d008e71d7ede3fe5c93e1384 -304862 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xc86aa3e5b1bc5a674de25655f9a3ccf734594e22d008e71d7ede3fe5c93e1384 -304872 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -304881 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -304902 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -304996 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -304999 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xc86aa3e5b1bc5a674de25655f9a3ccf734594e22d008e71d7ede3fe5c93e1384 -305006 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -305010 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xc86aa3e5b1bc5a674de25655f9a3ccf734594e22d008e71d7ede3fe5c93e1384 -305425 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x427573696e657373000000000000000000000000000000000000000000000000 -305425 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x427573696e657373000000000000000000000000000000000000000000000000 0x000000000000000000000000b48dafc23dc5f232f2e7a35a2d2bb1b4ab02c48a -305425 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x427573696e657373000000000000000000000000000000000000000000000000 -305445 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4574686572000000000000000000000000000000000000000000000000000000 -305448 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x4574686572000000000000000000000000000000000000000000000000000000 0x000000000000000000000000b56aea97a14a10f536fa4f770b900e12231a018e -305448 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4574686572000000000000000000000000000000000000000000000000000000 -305450 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x46756e64696e6700000000000000000000000000000000000000000000000000 -305452 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x46756e64696e6700000000000000000000000000000000000000000000000000 0x000000000000000000000000ace8a25b438c0d8c16cf578ddeb015fd1f714896 -305452 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x46756e64696e6700000000000000000000000000000000000000000000000000 -305454 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x436f696e00000000000000000000000000000000000000000000000000000000 -305457 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x7266696b6b690000000000000000000000000000000000000000000000000000 -305463 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x6461690000000000000000000000000000000000000000000000000000000000 -305464 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x6461690000000000000000000000000000000000000000000000000000000000 0x000000000000000000000000968ea5eed1d40486a7f87991c3299d383a8e85d2 -305464 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x6461690000000000000000000000000000000000000000000000000000000000 -305468 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x77656966756e6400000000000000000000000000000000000000000000000000 -305488 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x5265776172647300000000000000000000000000000000000000000000000000 -305492 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x5553440000000000000000000000000000000000000000000000000000000000 -305492 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x5553440000000000000000000000000000000000000000000000000000000000 0x000000000000000000000000b52f670a662fc87e9a976f50f7ed7c056b369684 -305492 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x5553440000000000000000000000000000000000000000000000000000000000 -305501 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x496e737572616e63650000000000000000000000000000000000000000000000 -305502 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x496e737572616e63650000000000000000000000000000000000000000000000 0x0000000000000000000000004db56c006f6d9e2edf742438c7a7dc032a5c3025 -305502 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x496e737572616e63650000000000000000000000000000000000000000000000 -305510 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x5365780000000000000000000000000000000000000000000000000000000000 -305616 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x43616d706169676e000000000000000000000000000000000000000000000000 -305620 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x43616d706169676e000000000000000000000000000000000000000000000000 0x00000000000000000000000076ff1940d6c15ae2ef8436de7564485770356076 -305620 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x43616d706169676e000000000000000000000000000000000000000000000000 -305622 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4769667463617264000000000000000000000000000000000000000000000000 -305624 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x4769667463617264000000000000000000000000000000000000000000000000 0x000000000000000000000000f8aaa4ccb80d0e047e9293619b47160e2c3b82d8 -305624 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4769667463617264000000000000000000000000000000000000000000000000 -305626 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4c6f616e73000000000000000000000000000000000000000000000000000000 -305626 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x4c6f616e73000000000000000000000000000000000000000000000000000000 0x000000000000000000000000569a16c067a308a5ea90b15a7caeae8705500569 -305626 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4c6f616e73000000000000000000000000000000000000000000000000000000 -305627 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x53686f7070696e67000000000000000000000000000000000000000000000000 -305629 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x53686f7070696e67000000000000000000000000000000000000000000000000 0x00000000000000000000000068057d1adb313d52890691adf051df3000a3d57d -305629 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x53686f7070696e67000000000000000000000000000000000000000000000000 -305634 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4164647265737300000000000000000000000000000000000000000000000000 -305634 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x4164647265737300000000000000000000000000000000000000000000000000 0x000000000000000000000000ea5511d3653d36fb55b53948d23e55a23c4fead7 -305634 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4164647265737300000000000000000000000000000000000000000000000000 -305826 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4d6f6e6579000000000000000000000000000000000000000000000000000000 -305827 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x4d6f6e6579000000000000000000000000000000000000000000000000000000 0x000000000000000000000000ef15babca7a972f141556571e5b08e3175cf97b2 -305827 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4d6f6e6579000000000000000000000000000000000000000000000000000000 -305829 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x436f75706f6e7300000000000000000000000000000000000000000000000000 -305834 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x436f75706f6e7300000000000000000000000000000000000000000000000000 0x000000000000000000000000a6cee167a6c4a531c6d16fdff7aa2de9f861cb07 -305834 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x436f75706f6e7300000000000000000000000000000000000000000000000000 -305839 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4163636f756e7400000000000000000000000000000000000000000000000000 -305841 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x4163636f756e7400000000000000000000000000000000000000000000000000 0x0000000000000000000000000ec0d6547c59c38a9105525f0c10ec4d4a0b1afb -305841 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4163636f756e7400000000000000000000000000000000000000000000000000 -306889 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -307290 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -307508 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x5858580000000000000000000000000000000000000000000000000000000000 -307509 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x5858580000000000000000000000000000000000000000000000000000000000 0x000000000000000000000000a61bfbbe1af5fde18193ffeffe9254b939d6de96 -307509 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x5858580000000000000000000000000000000000000000000000000000000000 -307513 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x537572696e616d65000000000000000000000000000000000000000000000000 -307519 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x546f797300000000000000000000000000000000000000000000000000000000 -307528 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x5757570000000000000000000000000000000000000000000000000000000000 -308010 0x37c8f253d780913bc2b2d63c4f13f991a9ce7880 0x02c69be41d0b7e40352fc85be1cd65eb03d40ef8427a0ca4596b1ead9a00e9fc -308115 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -308124 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -308127 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -308157 0xd202f28e78e9802a95fe5b3d26785257fcf8493b 0xfb989cb0d132b51483b9258c1befbe92caa5f5b046af3dfdcc617dcf425af493 -308183 0x58db357c28947271c883b11bab4caaa445e0ebc0 0x02c69be41d0b7e40352fc85be1cd65eb03d40ef8427a0ca4596b1ead9a00e9fc -308190 0xd202f28e78e9802a95fe5b3d26785257fcf8493b 0xfb989cb0d132b51483b9258c1befbe92caa5f5b046af3dfdcc617dcf425af493 -308216 0x59a964f830b3593af88b3d5b2835938d7985fbae 0x02c69be41d0b7e40352fc85be1cd65eb03d40ef8427a0ca4596b1ead9a00e9fc -308224 0xd202f28e78e9802a95fe5b3d26785257fcf8493b 0xfb989cb0d132b51483b9258c1befbe92caa5f5b046af3dfdcc617dcf425af493 -308257 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -308265 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -308267 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -308268 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -308285 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -308599 0xc699608dd050d140e37cd402efe8343abcce6cd3 0x9ce147531995c591b0b50012b20f7f6d0dea75281159a58b8637542388f14626 0x00000000000000000000000048175da4c20313bcb6b62d74937d3ff985885701 0x00000000000000000000000023b666fd0ef4778c7557c3e33b126c1f10211941 0xffffffffffffffffffffffffffffffffa0e7153557ae4b988c928492845e7919 -309175 0xfae0d03c4e98022a8c5f35843925d36baf0e51b3 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -309177 0xfae0d03c4e98022a8c5f35843925d36baf0e51b3 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -309184 0xfae0d03c4e98022a8c5f35843925d36baf0e51b3 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -309186 0xfae0d03c4e98022a8c5f35843925d36baf0e51b3 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -309190 0xfae0d03c4e98022a8c5f35843925d36baf0e51b3 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -309194 0xfae0d03c4e98022a8c5f35843925d36baf0e51b3 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -309198 0xfae0d03c4e98022a8c5f35843925d36baf0e51b3 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -309417 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -309881 0x80603decb9f6326b05fec23c9a830d6cf506aa88 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6 -309883 0x80603decb9f6326b05fec23c9a830d6cf506aa88 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6 -309892 0x80603decb9f6326b05fec23c9a830d6cf506aa88 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6 -310069 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xc86aa3e5b1bc5a674de25655f9a3ccf734594e22d008e71d7ede3fe5c93e1384 -310114 0x89c7776f8ae736ce12a0b3309bcea8b4d24bfb12 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6 -310116 0x89c7776f8ae736ce12a0b3309bcea8b4d24bfb12 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6 -310177 0x89c7776f8ae736ce12a0b3309bcea8b4d24bfb12 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6 -310177 0x89c7776f8ae736ce12a0b3309bcea8b4d24bfb12 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6 -310177 0x89c7776f8ae736ce12a0b3309bcea8b4d24bfb12 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6 -310533 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xc86aa3e5b1bc5a674de25655f9a3ccf734594e22d008e71d7ede3fe5c93e1384 -310589 0x5f4c010748a890c8a28a4858fe7b07048d194380 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -310592 0x5f4c010748a890c8a28a4858fe7b07048d194380 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -310599 0x5f4c010748a890c8a28a4858fe7b07048d194380 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -310601 0x5f4c010748a890c8a28a4858fe7b07048d194380 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -310604 0x5f4c010748a890c8a28a4858fe7b07048d194380 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -311317 0xfae0d03c4e98022a8c5f35843925d36baf0e51b3 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -311758 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -311858 0xb912acab51206235b6082bcbd2cb88a5fb485a8f 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -311859 0xb912acab51206235b6082bcbd2cb88a5fb485a8f 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -311865 0xb912acab51206235b6082bcbd2cb88a5fb485a8f 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -311888 0xb912acab51206235b6082bcbd2cb88a5fb485a8f 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -312096 0xb7871c70fcba963f502f5b25ca39932820f23206 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6 -312124 0xb7871c70fcba963f502f5b25ca39932820f23206 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6 -312124 0xb7871c70fcba963f502f5b25ca39932820f23206 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6 -312367 0x5e50225b8dccefd89dcbae96e73f71e59a4e2529 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6 -312371 0x5e50225b8dccefd89dcbae96e73f71e59a4e2529 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6 -312383 0x5e50225b8dccefd89dcbae96e73f71e59a4e2529 0xe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6 -313355 0x5f4c010748a890c8a28a4858fe7b07048d194380 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -313368 0xb70ca79ffad5f6ddff259bd07089a9c771e32711 0xc86aa3e5b1bc5a674de25655f9a3ccf734594e22d008e71d7ede3fe5c93e1384 -313507 0x8465dac1172b6abe303bead4d06125aed72ea01c 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -313526 0x8465dac1172b6abe303bead4d06125aed72ea01c 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -313724 0x5f4c010748a890c8a28a4858fe7b07048d194380 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -313789 0x5f4c010748a890c8a28a4858fe7b07048d194380 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -314190 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -314375 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x000000000000000000000000000000000000000000000000000000000000005a -315698 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -315705 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -315780 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -316726 0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -316726 0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -316747 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -317179 0x035e62c27a2338d6ed147ec45d2779990a4c3b00 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -317522 0xe881af13bf55c97562fe8d2da2f6ea8e3ff66f98 0x1250e52636eed438f884679df55d2911cf41764cf8b2da1bd22d29b0eb14f80e 0x000000000000000000000000abad6ec946eff02b22e4050b3209da87380b3cbd 0x0000000000000000000000000000000000000000000000000000000000000002 -317522 0xe881af13bf55c97562fe8d2da2f6ea8e3ff66f98 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba 0x0000000000000000000000001db3439a222c519ab44bb1144fc28167b4fa6ee6 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 0x0000000000000000000000000000000000000000000000000000000000000002 -317526 0xb4a953f12f7418ed498a782ba47e5a7f5967091c 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -317536 0xe881af13bf55c97562fe8d2da2f6ea8e3ff66f98 0x1250e52636eed438f884679df55d2911cf41764cf8b2da1bd22d29b0eb14f80e 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 0x0000000000000000000000000000000000000000000000000000000000000003 -317536 0xe881af13bf55c97562fe8d2da2f6ea8e3ff66f98 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba 0x0000000000000000000000001db3439a222c519ab44bb1144fc28167b4fa6ee6 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 0x0000000000000000000000000000000000000000000000000000000000000003 -317567 0xb4a953f12f7418ed498a782ba47e5a7f5967091c 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -317567 0xc630a71b2dfbcc621affd33257132b50adbe1cd0 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -317588 0xc630a71b2dfbcc621affd33257132b50adbe1cd0 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -317597 0xc630a71b2dfbcc621affd33257132b50adbe1cd0 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -317597 0xc630a71b2dfbcc621affd33257132b50adbe1cd0 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -317606 0xc630a71b2dfbcc621affd33257132b50adbe1cd0 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -317610 0xc630a71b2dfbcc621affd33257132b50adbe1cd0 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -317610 0xb4a953f12f7418ed498a782ba47e5a7f5967091c 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -317610 0xc630a71b2dfbcc621affd33257132b50adbe1cd0 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -317643 0xb4a953f12f7418ed498a782ba47e5a7f5967091c 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -317643 0x1c776e19850998177a7e33f6496c368bcabdce54 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -317646 0x1c776e19850998177a7e33f6496c368bcabdce54 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -317646 0xc630a71b2dfbcc621affd33257132b50adbe1cd0 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -317660 0xe881af13bf55c97562fe8d2da2f6ea8e3ff66f98 0x1250e52636eed438f884679df55d2911cf41764cf8b2da1bd22d29b0eb14f80e 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 0x0000000000000000000000000000000000000000000000000000000000000004 -317660 0xe881af13bf55c97562fe8d2da2f6ea8e3ff66f98 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba 0x0000000000000000000000001db3439a222c519ab44bb1144fc28167b4fa6ee6 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 0x0000000000000000000000000000000000000000000000000000000000000004 -317957 0x8465dac1172b6abe303bead4d06125aed72ea01c 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -318030 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -318032 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -318033 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0x1250e52636eed438f884679df55d2911cf41764cf8b2da1bd22d29b0eb14f80e 0x0000000000000000000000000000000000000000000000000000000000000000 0x0000000000000000000000005ed8cee6b63b1c6afce3ad7c92f4fd7e1b8fad9f -318033 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba 0x0000000000000000000000001db3439a222c519ab44bb1144fc28167b4fa6ee6 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 0x0000000000000000000000000000000000000000000000000000000000000000 -318034 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -318036 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -318036 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -318063 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0x1250e52636eed438f884679df55d2911cf41764cf8b2da1bd22d29b0eb14f80e 0x0000000000000000000000000000000000000000000000000000000000000001 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 -318063 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba 0x0000000000000000000000001db3439a222c519ab44bb1144fc28167b4fa6ee6 0x0000000000000000000000005ed8cee6b63b1c6afce3ad7c92f4fd7e1b8fad9f 0x0000000000000000000000000000000000000000000000000000000000000001 -318074 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0xcfa82ef0390c8f3e57ebe6c0665352a383667e792af012d350d9786ee5173d26 0x0000000000000000000000000000000000000000000000000000000000000000 0x0000000000000000000000001db3439a222c519ab44bb1144fc28167b4fa6ee6 -318074 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0xd73429fe3d5eae9e487e60af3e9befceddbdbd53695543a735e2d8face8269d3 0x0000000000000000000000000000000000000000000000000000000000000000 -318096 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0x1250e52636eed438f884679df55d2911cf41764cf8b2da1bd22d29b0eb14f80e 0x0000000000000000000000000000000000000000000000000000000000000002 0x0000000000000000000000005ed8cee6b63b1c6afce3ad7c92f4fd7e1b8fad9f -318096 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba 0x0000000000000000000000001db3439a222c519ab44bb1144fc28167b4fa6ee6 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 0x0000000000000000000000000000000000000000000000000000000000000002 -318137 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -318528 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0x1250e52636eed438f884679df55d2911cf41764cf8b2da1bd22d29b0eb14f80e 0x0000000000000000000000000000000000000000000000000000000000000003 0x0000000000000000000000001db3439a222c519ab44bb1144fc28167b4fa6ee6 -318528 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 0x0000000000000000000000005ed8cee6b63b1c6afce3ad7c92f4fd7e1b8fad9f 0x0000000000000000000000000000000000000000000000000000000000000003 -318627 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0x1250e52636eed438f884679df55d2911cf41764cf8b2da1bd22d29b0eb14f80e 0x0000000000000000000000000000000000000000000000000000000000000004 0x0000000000000000000000005ed8cee6b63b1c6afce3ad7c92f4fd7e1b8fad9f -318627 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 0x0000000000000000000000001db3439a222c519ab44bb1144fc28167b4fa6ee6 0x0000000000000000000000000000000000000000000000000000000000000004 -318639 0x82afa2c4a686af9344e929f9821f3e8c6e9293ab 0x17af63cbc1fd2f415358d4edda52ede90159c09397285dcedaecb33c5a6d5e02 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 -318639 0x82afa2c4a686af9344e929f9821f3e8c6e9293ab 0x82add6dcb5f515082d024c78eb6496fd6d7e1a037e33403f23188b6c568336e8 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 -318650 0x82afa2c4a686af9344e929f9821f3e8c6e9293ab 0x82add6dcb5f515082d024c78eb6496fd6d7e1a037e33403f23188b6c568336e8 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 -318653 0x82afa2c4a686af9344e929f9821f3e8c6e9293ab 0xc0c8fdc5261cd471b4cf986e1dc55c83e67bab22ff35c3a1e32ab700b8b7eef7 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 -318904 0xc630a71b2dfbcc621affd33257132b50adbe1cd0 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -319523 0x7b6556b40a5a4d40118387495314f4445986239c 0x6c2b4666ba8da5a95717621d879a77de725f3d816709b9cbe9f059b8f875e284 -321346 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -321884 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -321900 0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -322038 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -322041 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -322043 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -322047 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -322048 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -322056 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -322059 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0x1250e52636eed438f884679df55d2911cf41764cf8b2da1bd22d29b0eb14f80e 0x0000000000000000000000000000000000000000000000000000000000000005 0x0000000000000000000000005ed8cee6b63b1c6afce3ad7c92f4fd7e1b8fad9f -322059 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 0x0000000000000000000000001db3439a222c519ab44bb1144fc28167b4fa6ee6 0x0000000000000000000000000000000000000000000000000000000000000005 -322083 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -322090 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -322108 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0xcfa82ef0390c8f3e57ebe6c0665352a383667e792af012d350d9786ee5173d26 0x0000000000000000000000000000000000000000000000000000000000000002 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 -322108 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0xd73429fe3d5eae9e487e60af3e9befceddbdbd53695543a735e2d8face8269d3 0x0000000000000000000000000000000000000000000000000000000000000002 -322121 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0xcfa82ef0390c8f3e57ebe6c0665352a383667e792af012d350d9786ee5173d26 0x0000000000000000000000000000000000000000000000000000000000000003 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 -322121 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0xd73429fe3d5eae9e487e60af3e9befceddbdbd53695543a735e2d8face8269d3 0x0000000000000000000000000000000000000000000000000000000000000003 -322121 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0xcfa82ef0390c8f3e57ebe6c0665352a383667e792af012d350d9786ee5173d26 0x0000000000000000000000000000000000000000000000000000000000000005 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 -322121 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0xd73429fe3d5eae9e487e60af3e9befceddbdbd53695543a735e2d8face8269d3 0x0000000000000000000000000000000000000000000000000000000000000005 -322122 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0xcfa82ef0390c8f3e57ebe6c0665352a383667e792af012d350d9786ee5173d26 0x0000000000000000000000000000000000000000000000000000000000000001 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 -322122 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0xd73429fe3d5eae9e487e60af3e9befceddbdbd53695543a735e2d8face8269d3 0x0000000000000000000000000000000000000000000000000000000000000001 -322128 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0xcfa82ef0390c8f3e57ebe6c0665352a383667e792af012d350d9786ee5173d26 0x0000000000000000000000000000000000000000000000000000000000000004 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 -322128 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0xd73429fe3d5eae9e487e60af3e9befceddbdbd53695543a735e2d8face8269d3 0x0000000000000000000000000000000000000000000000000000000000000004 -322454 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x63726f0000000000000000000000000000000000000000000000000000000000 -322509 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x63726f0000000000000000000000000000000000000000000000000000000000 0x000000000000000000000000d388d8671ac6edb904d91c1585dedbd6895b9ef8 -322509 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x63726f0000000000000000000000000000000000000000000000000000000000 -322550 0x8465dac1172b6abe303bead4d06125aed72ea01c 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -322749 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0x1250e52636eed438f884679df55d2911cf41764cf8b2da1bd22d29b0eb14f80e 0x0000000000000000000000000000000000000000000000000000000000000006 0x0000000000000000000000005ed8cee6b63b1c6afce3ad7c92f4fd7e1b8fad9f -322749 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba 0x000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa96045 0x0000000000000000000000001db3439a222c519ab44bb1144fc28167b4fa6ee6 0x0000000000000000000000000000000000000000000000000000000000000006 -322750 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x41756374696f6e00000000000000000000000000000000000000000000000000 -322752 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x41756374696f6e00000000000000000000000000000000000000000000000000 0x000000000000000000000000fd5c601a0d48ad075724af920a83b907d24620dd -322752 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x41756374696f6e00000000000000000000000000000000000000000000000000 -322758 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4d6f727467616765000000000000000000000000000000000000000000000000 -322760 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x4d6f727467616765000000000000000000000000000000000000000000000000 0x000000000000000000000000f32d6e7a9ae9c3d59b642fcfa95c0f03c0706561 -322760 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4d6f727467616765000000000000000000000000000000000000000000000000 -322764 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x457363726f770000000000000000000000000000000000000000000000000000 -322765 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x457363726f770000000000000000000000000000000000000000000000000000 0x000000000000000000000000091a096c2c75cd3bd6a80a8104a4c71a6f028483 -322765 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x457363726f770000000000000000000000000000000000000000000000000000 -322767 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x47756172616e7465650000000000000000000000000000000000000000000000 -322768 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x47756172616e7465650000000000000000000000000000000000000000000000 0x000000000000000000000000439061363c1502dcb8ce7b08dab39b5aa321adf2 -322768 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x47756172616e7465650000000000000000000000000000000000000000000000 -322774 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x53616665436f6e74726163747300000000000000000000000000000000000000 -322776 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x53616665436f6e74726163747300000000000000000000000000000000000000 0x0000000000000000000000002e6bfa82463744c2b1254f119fa101bc924f6f0b -322776 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x53616665436f6e74726163747300000000000000000000000000000000000000 -322777 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x53616665436f6e74726163740000000000000000000000000000000000000000 -322777 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x53616665436f6e74726163740000000000000000000000000000000000000000 0x0000000000000000000000009a5cb02980fbae601ed890f01d38be76a47d8eeb -322777 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x53616665436f6e74726163740000000000000000000000000000000000000000 -324029 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -324316 0x4d8875b5058c6bf9db0fba172114299eaa476a9d 0x8f38ec1c60ec4afc7e3dd2c41a94c0983104d82de715c0212bbfe4aca17ea3fb -324318 0x4d8875b5058c6bf9db0fba172114299eaa476a9d 0x5b6450564c0cb96f02986ab222d919319391faea73418fec4158904af177cdeb -324322 0x4d8875b5058c6bf9db0fba172114299eaa476a9d 0x80bb6e5f203cdbe2810b6446806301f07413ca83c2a9c7b0c1cc5b89853a55dd -325807 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -326760 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x0000000000000000000000002b051365221244a2baefb07e7ac1a291893e0867 -326760 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x0000000000000000000000002b051365221244a2baefb07e7ac1a291893e0867 -327103 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -327105 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -327227 0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -327399 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -327399 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -327544 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -327544 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -327690 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x00000000000000000000000041c32b2f3c0e04b20d2c4f1605f0abc33c3cad67 -327690 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x00000000000000000000000041c32b2f3c0e04b20d2c4f1605f0abc33c3cad67 -328002 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x000000000000000000000000000000000000000000000000000000000000005b -328269 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -328529 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -328529 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -328585 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000d51059a3dedfa8032a64361a883a53e26ed6941c -328585 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000d51059a3dedfa8032a64361a883a53e26ed6941c -328870 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -328870 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -329480 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4368696e61000000000000000000000000000000000000000000000000000000 -329484 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x4368696e61000000000000000000000000000000000000000000000000000000 0x00000000000000000000000080f3a701a57961f57752397d24a45f87127c361a -329484 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4368696e61000000000000000000000000000000000000000000000000000000 -329485 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x00000000000000000000000076b0f6b32c66c317699067f2d938bcf669f380ce -329485 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x00000000000000000000000076b0f6b32c66c317699067f2d938bcf669f380ce -329491 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x00000000000000000000000076b0f6b32c66c317699067f2d938bcf669f380ce -329491 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x00000000000000000000000076b0f6b32c66c317699067f2d938bcf669f380ce -329513 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x00000000000000000000000076b0f6b32c66c317699067f2d938bcf669f380ce -329513 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x00000000000000000000000076b0f6b32c66c317699067f2d938bcf669f380ce -329519 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x00000000000000000000000076b0f6b32c66c317699067f2d938bcf669f380ce -329519 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x00000000000000000000000076b0f6b32c66c317699067f2d938bcf669f380ce -329659 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x5469636b65740000000000000000000000000000000000000000000000000000 -329659 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x5469636b65740000000000000000000000000000000000000000000000000000 0x0000000000000000000000009f26df964012d16fdea7485bd4b7042b3007e217 -329659 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x5469636b65740000000000000000000000000000000000000000000000000000 -329667 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x446174696e670000000000000000000000000000000000000000000000000000 -329668 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x446174696e670000000000000000000000000000000000000000000000000000 0x000000000000000000000000f5f5d1595aa8eca29cfdc9b62357f01c33d9bf20 -329668 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x446174696e670000000000000000000000000000000000000000000000000000 -329673 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x43616e6479000000000000000000000000000000000000000000000000000000 -329673 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x43616e6479000000000000000000000000000000000000000000000000000000 0x000000000000000000000000f41830acc2a73021ff1c3381ac570b95d79d21d0 -329673 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x43616e6479000000000000000000000000000000000000000000000000000000 -329740 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x000000000000000000000000000000000000000000000000000000000000005c -329749 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x57616c6c73747265657400000000000000000000000000000000000000000000 -329750 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x57616c6c73747265657400000000000000000000000000000000000000000000 0x0000000000000000000000002fed81f556a6f7478249fadbb68621467e21d38c -329750 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x57616c6c73747265657400000000000000000000000000000000000000000000 -329824 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x0000000000000000000000005c08761401d1a0904897c978787aa615a96e955c -329824 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x0000000000000000000000005c08761401d1a0904897c978787aa615a96e955c -329964 0xb8af70f84bfda39ccb2858f4fc54eca1b63dd519 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -330023 0xb8af70f84bfda39ccb2858f4fc54eca1b63dd519 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -330207 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000e0ed85f0cab17dba645bf4fe745ca29359c2c21b -330207 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000e0ed85f0cab17dba645bf4fe745ca29359c2c21b -330473 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x00000000000000000000000042244ccb6c7c889901960e60125ead7c2af685f8 -330473 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x00000000000000000000000042244ccb6c7c889901960e60125ead7c2af685f8 -330511 0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -330511 0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -330579 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000c550f754865b1ad138b660c9802ee8b039abb05b -330579 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000c550f754865b1ad138b660c9802ee8b039abb05b -330683 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000cffa3a1af763ccb260f4bf081f8a1bfddfdb89e0 -330683 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000cffa3a1af763ccb260f4bf081f8a1bfddfdb89e0 -330919 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a4145a98b12b717078b96821124d781c563511ca -330919 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a4145a98b12b717078b96821124d781c563511ca -331009 0x53bccda5dcacc0b10b7c4145b0aa6581330b8635 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -331542 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x0000000000000000000000003090aef28f1a9a4d1d9f9b8fc26d28ad1240214f -331542 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x0000000000000000000000003090aef28f1a9a4d1d9f9b8fc26d28ad1240214f -332007 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000aa3e4fd68c8fabd386fc571f9656e50dba5dd384 -332007 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000aa3e4fd68c8fabd386fc571f9656e50dba5dd384 -333256 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x0000000000000000000000009dca2265990b7ad9ac5c3a55157f1fc9d18381bc -333256 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x0000000000000000000000009dca2265990b7ad9ac5c3a55157f1fc9d18381bc -333294 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -333583 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000ff6c2227335eb7d5b29d86a8f78f35d4b9bafd3a -333583 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000ff6c2227335eb7d5b29d86a8f78f35d4b9bafd3a -333640 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000601ee21411eba5a5bc9d1c6298822a1a7b9e2286 -333640 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000601ee21411eba5a5bc9d1c6298822a1a7b9e2286 -334263 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000691ee952cf68d9abc488e42f5c1f95c020651333 -334263 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000691ee952cf68d9abc488e42f5c1f95c020651333 -334279 0xbd0edfbac386c9964f8f013d65d7dad5382d9cd7 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -334883 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x000000000000000000000000000000000000000000000000000000000000005d -334915 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x000000000000000000000000000000000000000000000000000000000000005e -334919 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x000000000000000000000000000000000000000000000000000000000000005f -334919 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x0000000000000000000000007d1ecf34b360f75280b83abc04f654ac99c7bd9c -334919 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x0000000000000000000000007d1ecf34b360f75280b83abc04f654ac99c7bd9c -335076 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000367a3da4c3aa4c4b9de2c01bdca8075593c7ff1e -335076 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000367a3da4c3aa4c4b9de2c01bdca8075593c7ff1e -335348 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x0000000000000000000000009d8048c450677dcd0b6c37c6a989a54a2a506a27 -335348 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x0000000000000000000000009d8048c450677dcd0b6c37c6a989a54a2a506a27 -335643 0x5f4c010748a890c8a28a4858fe7b07048d194380 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -335649 0x5f4c010748a890c8a28a4858fe7b07048d194380 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -335649 0x5f4c010748a890c8a28a4858fe7b07048d194380 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -335652 0x5f4c010748a890c8a28a4858fe7b07048d194380 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -335684 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000d80b5d0763ceaf00e3c457c54acc880a6317d057 -335684 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000d80b5d0763ceaf00e3c457c54acc880a6317d057 -336089 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000866d22bf02ad128c2e015a27ed39c7f5f0bd65f3 -336089 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000866d22bf02ad128c2e015a27ed39c7f5f0bd65f3 -336231 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336234 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336242 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336243 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336244 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336245 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336245 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336247 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336248 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336255 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336260 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336263 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336264 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336266 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336266 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336334 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336336 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336337 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336338 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336439 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336451 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336452 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336453 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336453 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336461 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336495 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336497 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336497 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336497 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336507 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336508 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336508 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336508 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336508 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336508 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336509 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336510 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336510 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336510 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336518 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336520 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336521 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336522 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336526 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336527 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336528 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336528 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336543 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -336543 0x5dc2e401e29ea16e51ebcecaef129c15fed5a5e8 0xd456720fd185d4060f5cea4d82775d2af95048c1e10f227ec35bae950a4be2a8 0x0000000000000000000000008674c218f0351a62c3ba78c34fd2182a93da94e2 -337012 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000f2c453692a6f46cffd30943fe9bee65cac3622d7 -337012 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000f2c453692a6f46cffd30943fe9bee65cac3622d7 -337642 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x456475636174696f6e0000000000000000000000000000000000000000000000 -337642 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x456475636174696f6e0000000000000000000000000000000000000000000000 0x00000000000000000000000002ef13dd4479f121b4636bc3d7ea9da774b3ed74 -337642 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x456475636174696f6e0000000000000000000000000000000000000000000000 -337647 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x50686f6e65000000000000000000000000000000000000000000000000000000 -337649 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x50686f6e65000000000000000000000000000000000000000000000000000000 0x0000000000000000000000003210743d3b82ec01338c50d64ce97de5e8ec94bb -337649 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x50686f6e65000000000000000000000000000000000000000000000000000000 -337653 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x506f6b6572000000000000000000000000000000000000000000000000000000 -337654 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x506f6b6572000000000000000000000000000000000000000000000000000000 0x000000000000000000000000d0dc4dac9c29cacd9dcd6d7f7ca97e04b0ba6e09 -337654 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x506f6b6572000000000000000000000000000000000000000000000000000000 -337655 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x50726f7065727479000000000000000000000000000000000000000000000000 -337656 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x50726f7065727479000000000000000000000000000000000000000000000000 0x00000000000000000000000097eb80f6d0777baa9bbcc8722b43e3e88d00efaf -337656 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x50726f7065727479000000000000000000000000000000000000000000000000 -337663 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x53616c6573000000000000000000000000000000000000000000000000000000 -337663 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x53616c6573000000000000000000000000000000000000000000000000000000 0x0000000000000000000000004ad03d890ef08dbae952527c829d0dde8d31c3b7 -337663 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x53616c6573000000000000000000000000000000000000000000000000000000 -337664 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4d61726b65740000000000000000000000000000000000000000000000000000 -337669 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x486f757365000000000000000000000000000000000000000000000000000000 -337672 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x486f757365000000000000000000000000000000000000000000000000000000 0x0000000000000000000000000ec0d6547c59c38a9105525f0c10ec4d4a0b1afb -337672 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x486f757365000000000000000000000000000000000000000000000000000000 -337731 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000f80675f372ff20d0a5f3bc82a51c8fb9fb5022cd -337731 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000f80675f372ff20d0a5f3bc82a51c8fb9fb5022cd -338275 0x9f918d46c929f12a229b6084566384ee26805b4d 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -338281 0x9f918d46c929f12a229b6084566384ee26805b4d 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -338336 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -338424 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x00000000000000000000000008a66d1381b139ec676e522aeab6fd82cc78567d -338424 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x00000000000000000000000008a66d1381b139ec676e522aeab6fd82cc78567d -338435 0x8056338e73fde306bb5d9aedec7f4a7b8637c9e7 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -338439 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x00000000000000000000000065e9201879e2a6ff7da133f0c573a8fe5d9da7ca -338439 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x00000000000000000000000065e9201879e2a6ff7da133f0c573a8fe5d9da7ca -338661 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -338661 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -338991 0x0e5e2b9341341ade98f510ad9a744e01f3b29f03 0x1cf7652f1f9289dc41763c5bd36534c9772d48aa26021274d212f227d4b69765 0x0000000000000000000000000000000000000000000000000000000000000060 -339173 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x00000000000000000000000049f47bc027e273e21f46000c49971919b3e15773 -339173 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x00000000000000000000000049f47bc027e273e21f46000c49971919b3e15773 -339369 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000060 -339427 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000f3b83292f3e56f4aec1e3c44128d0f1a9d824559 -339427 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000f3b83292f3e56f4aec1e3c44128d0f1a9d824559 -340633 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x42697447656d7300000000000000000000000000000000000000000000000000 -340635 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x42697447656d7300000000000000000000000000000000000000000000000000 0x000000000000000000000000c34f6222062c65e35d4b0fc26d718738582118a6 -340635 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x42697447656d7300000000000000000000000000000000000000000000000000 -340653 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4469616d6f6e6473000000000000000000000000000000000000000000000000 -340658 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x4469616d6f6e6473000000000000000000000000000000000000000000000000 0x0000000000000000000000004e971507462271eadb8aac0d20312099f6d52947 -340658 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4469616d6f6e6473000000000000000000000000000000000000000000000000 -340674 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x476f6c6400000000000000000000000000000000000000000000000000000000 -340675 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x476f6c6400000000000000000000000000000000000000000000000000000000 0x000000000000000000000000eb26edf39a4ad0a3b8d6a9804b4e2a7b47d3017b -340675 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x476f6c6400000000000000000000000000000000000000000000000000000000 -340685 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4469676978000000000000000000000000000000000000000000000000000000 -340686 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x4469676978000000000000000000000000000000000000000000000000000000 0x0000000000000000000000000b3765d911cbf67fd92f4d3e5cc25211ddc743de -340686 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4469676978000000000000000000000000000000000000000000000000000000 -340700 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x426f617264726f6f6d0000000000000000000000000000000000000000000000 -340700 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x426f617264726f6f6d0000000000000000000000000000000000000000000000 0x000000000000000000000000c8cfec0ee1d4802daaae1bebb07aa7c44931e633 -340700 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x426f617264726f6f6d0000000000000000000000000000000000000000000000 -340708 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x45786368616e6765000000000000000000000000000000000000000000000000 -340710 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x45786368616e6765000000000000000000000000000000000000000000000000 0x0000000000000000000000005492f79ca66506bc751862ba35a9121d8b28532d -340710 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x45786368616e6765000000000000000000000000000000000000000000000000 -340712 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x426974636f696e00000000000000000000000000000000000000000000000000 -340713 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x426974636f696e00000000000000000000000000000000000000000000000000 0x000000000000000000000000a9033165b71f08ac82c53d5f982b463ca5301c15 -340713 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x426974636f696e00000000000000000000000000000000000000000000000000 -340718 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x426974636f696e73000000000000000000000000000000000000000000000000 -340719 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x426974636f696e73000000000000000000000000000000000000000000000000 0x000000000000000000000000f301f8e2cc1bab42ced9902f1fcd1a25303823db -340719 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x426974636f696e73000000000000000000000000000000000000000000000000 -340727 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4d61696c00000000000000000000000000000000000000000000000000000000 -340727 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x4d61696c00000000000000000000000000000000000000000000000000000000 0x0000000000000000000000004143c2f1563da14b2c09559ef5144b4c6ca268fe -340727 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x4d61696c00000000000000000000000000000000000000000000000000000000 -340728 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x456d61696c000000000000000000000000000000000000000000000000000000 -340835 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -340988 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x0000000000000000000000008db600d7c92b0182ec527d8972d9e4d67d82e62a -340988 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x0000000000000000000000008db600d7c92b0182ec527d8972d9e4d67d82e62a -341695 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000351be7a8b083e7e3e3c16744a1fea3420064f60a -341695 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000351be7a8b083e7e3e3c16744a1fea3420064f60a -341985 0xbda7aeb6d2002efe360b6467275ef01e77d15497 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -341997 0xbda7aeb6d2002efe360b6467275ef01e77d15497 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -342001 0xbda7aeb6d2002efe360b6467275ef01e77d15497 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -342004 0xbda7aeb6d2002efe360b6467275ef01e77d15497 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -342004 0xbda7aeb6d2002efe360b6467275ef01e77d15497 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -342007 0xbda7aeb6d2002efe360b6467275ef01e77d15497 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -342007 0xbda7aeb6d2002efe360b6467275ef01e77d15497 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -342008 0xbda7aeb6d2002efe360b6467275ef01e77d15497 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -342026 0xc630a71b2dfbcc621affd33257132b50adbe1cd0 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -342026 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -342027 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -342027 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -342033 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -342035 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -342036 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -342041 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -342047 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -342047 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -342047 0xbda7aeb6d2002efe360b6467275ef01e77d15497 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -342053 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -342053 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -342080 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -342080 0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -342080 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -342101 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -342107 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -342107 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -342111 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -342111 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -342115 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -342118 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -342118 0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -342125 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -342125 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -342140 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b -342141 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -342145 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -342145 0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -342145 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -342162 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -342162 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -342173 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -342173 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -342188 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -342188 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -342272 0x65eb93c4e0854e3b00a64cd18c176a7fd54dc50f 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -342386 0x65eb93c4e0854e3b00a64cd18c176a7fd54dc50f 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -342386 0x8056338e73fde306bb5d9aedec7f4a7b8637c9e7 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -342399 0x65eb93c4e0854e3b00a64cd18c176a7fd54dc50f 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -342466 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x00000000000000000000000014a986e0b8943efe13e2f3514878dcd1fe08a677 -342466 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x00000000000000000000000014a986e0b8943efe13e2f3514878dcd1fe08a677 -342601 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -342601 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -342616 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b -342618 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b -342924 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000144c12d635ded35f0e0576564b95cf08045cb3ee -342924 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000144c12d635ded35f0e0576564b95cf08045cb3ee -342964 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000c36d3ccea8fb30b8f2c66af05bc3b5433d59168d -342964 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000c36d3ccea8fb30b8f2c66af05bc3b5433d59168d -343006 0x4bcd0591897025a0c42d500b4c37b11de6d96a3c 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -343021 0x4bcd0591897025a0c42d500b4c37b11de6d96a3c 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -343059 0xcf8470d3388a198418e02aaf8e37392cfbc18867 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -343079 0xcf8470d3388a198418e02aaf8e37392cfbc18867 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -343079 0xcf8470d3388a198418e02aaf8e37392cfbc18867 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -343083 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x0000000000000000000000006fa4aa0d8ce57b5325b1d04708db281bbe95b23b -343083 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x0000000000000000000000006fa4aa0d8ce57b5325b1d04708db281bbe95b23b -343133 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -343162 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000061 -343185 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000062 -343339 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000b9e893dc7da0b5b3eb9678d4860fb885f92be9cf -343339 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000b9e893dc7da0b5b3eb9678d4860fb885f92be9cf -343946 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -343966 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -343971 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -344121 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x0000000000000000000000002b051365221244a2baefb07e7ac1a291893e0867 -344121 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x0000000000000000000000002b051365221244a2baefb07e7ac1a291893e0867 -344164 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x0000000000000000000000002b051365221244a2baefb07e7ac1a291893e0867 -344164 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x0000000000000000000000002b051365221244a2baefb07e7ac1a291893e0867 -344839 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x0000000000000000000000001c3b909facd70e74c5697f1329c2d0cc0dd5ac3e -344839 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x0000000000000000000000001c3b909facd70e74c5697f1329c2d0cc0dd5ac3e -345506 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -346112 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -346112 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -346392 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -346395 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -346398 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -346425 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -346448 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -346451 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -346454 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -346464 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -346466 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -347014 0xd2d8d510980ef02fb2c3b79479d9b57d3bc7e2e7 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -347301 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000848e4dc353b9962471cd6506adc206f001e15fec -347301 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000848e4dc353b9962471cd6506adc206f001e15fec -347333 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000848e4dc353b9962471cd6506adc206f001e15fec -347333 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000848e4dc353b9962471cd6506adc206f001e15fec -347613 0xad8d3a5d2d92eb14bb56ca9f380be35b8efe0c04 0x4c13017ee95afc4bbd8a701dd9fbc9733f1f09f5a1b5438b5b9abd48e4c92d78 0x5858585858585858580000000000000000000000000000000000000000000000 0x0000000000000000000000000075f6703dad72b3e89f3243b2666a7f1bd815c0 -347700 0xebd81a08ded0efaba8ef51924fb967b64aa85399 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -347705 0xebd81a08ded0efaba8ef51924fb967b64aa85399 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -347711 0xebd81a08ded0efaba8ef51924fb967b64aa85399 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -347711 0xebd81a08ded0efaba8ef51924fb967b64aa85399 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -347853 0xebd81a08ded0efaba8ef51924fb967b64aa85399 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -347953 0xebd81a08ded0efaba8ef51924fb967b64aa85399 0xc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b -347958 0xebd81a08ded0efaba8ef51924fb967b64aa85399 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -347958 0xebd81a08ded0efaba8ef51924fb967b64aa85399 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -347960 0xebd81a08ded0efaba8ef51924fb967b64aa85399 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -347960 0xebd81a08ded0efaba8ef51924fb967b64aa85399 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -348019 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -348244 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000fae49cd796d28e8eca3fd701f86864940270a6fe -348244 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000fae49cd796d28e8eca3fd701f86864940270a6fe -348443 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x0000000000000000000000001819c2a9ff0b2ebdc677b6e8f4ee5c2bd6b73dae -348443 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x0000000000000000000000001819c2a9ff0b2ebdc677b6e8f4ee5c2bd6b73dae -348675 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000fc039dc8cdba96ab8ceb01c972375b71ddcc6b2e -348675 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000fc039dc8cdba96ab8ceb01c972375b71ddcc6b2e -348743 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -348936 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000b3303a4f7ef21aed2325856caa14417e91ee5404 -348936 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000b3303a4f7ef21aed2325856caa14417e91ee5404 -350544 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -351473 0xebd81a08ded0efaba8ef51924fb967b64aa85399 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -353157 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -353181 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -353196 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -353196 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -353273 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0xc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b -353276 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -353359 0xe2d560cc321a4e09e182693d45a3836ffd27a1bd 0x302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c -353359 0xfd5ff05cb15b2e8cddd0e96912a5dee8044b9374 0x302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c -353360 0x991c5b56fffb2e45444b5fc5be9304ac9576849b 0x302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c -353361 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000063 -353367 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000064 -353370 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000065 -353438 0x52c6b42c37818ee7d562b52396685710b19801ec 0x302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c -353438 0xf9da1908cc2280578b2639e3a4576dc77624868b 0x302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c -353443 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000066 -353447 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000067 -353479 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000aadd74f71770fbef7325860bce13cff05e3ad1c9 -353479 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000aadd74f71770fbef7325860bce13cff05e3ad1c9 -354071 0x36290e3f7c0e074a9e80cd6eb2f36b77411c19d7 0xa192e48a82f18ef1c93e722713426e5733e98d5b2858ba5c7457faf4a8297dab 0x000000000000000000000000b834e3edfc1a927bdcecb67a9d0eccbd752a5bb3 0x0000000000000000000000000000000000000000000000000000000000056917 -354151 0xdb15058402c241b04a03846f6fb104b1fbeea10b 0x5ca1bad5a7f3ee229aa045a13d9936a9a5f7f70067a0e39bdb8a6c0086b1544c 0xb56c4a1a61178e44bb3c424e54fccd7a48926c8ee43735cfa297f51c116344f1 -354162 0xdb15058402c241b04a03846f6fb104b1fbeea10b 0x5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62 0x000000000000000000000000d3cda913deb6f67967b99d67acdfa1712c293601 0x000000000000000000000000afbc7cedd81c694e8033b101a0b49bfc1e5176e2 -354233 0xdb15058402c241b04a03846f6fb104b1fbeea10b 0xed1062ba7ed13514b41ef115d3c324f50dcd644da75ee5659e9ae97071774f1e 0x000000000000000000000000b834e3edfc1a927bdcecb67a9d0eccbd752a5bb3 0xb56c4a1a61178e44bb3c424e54fccd7a48926c8ee43735cfa297f51c116344f1 -354585 0xdb15058402c241b04a03846f6fb104b1fbeea10b 0x884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364 0x000000000000000000000000afbc7cedd81c694e8033b101a0b49bfc1e5176e2 -354866 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x0000000000000000000000009b75587d8d49477de8b6e845ccb40d970bf8701a -354866 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x0000000000000000000000009b75587d8d49477de8b6e845ccb40d970bf8701a -356461 0x84be9f9c3e3dc0721d628a3b8ef55fbe096c0495 0x0000000000000000000000000000000000000000000000000000000000000060 -356488 0xf0ea74d3e2743e880dcf12e731d6bdd5788a548c 0xf2fb068683a2e3c90600f0aab753f44a2340e65156afd0f69518d72b55354ece 0x0000000000000000000000000000000000000000000000000000000000000060 -356513 0x69e3eab0a888f72c161d1f2e4e97eb8f0089af88 0x3fbfa2086703ed2c0e6065c0a6d81aa1ffdf01229d542d9f132b6696db6c66f1 0x9c22ff5f21f0b81b113e63f7db6da94fedef11b2119b4088b89664fb9a3cb658 -356526 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -356535 0xaf40044f727b3975174ed30d21a850b2f8619f11 0x7465737400000000000000000000000000000000000000000000000000000000 -356543 0xaf40044f727b3975174ed30d21a850b2f8619f11 0x3963323266663566323166306238316231313365363366376462366461393466 -357195 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -357195 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -357579 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -357588 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -357590 0xcf8470d3388a198418e02aaf8e37392cfbc18867 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -357590 0xcf8470d3388a198418e02aaf8e37392cfbc18867 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -357592 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -357600 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -357622 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -357630 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -358290 0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -358290 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -358426 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -358556 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -358556 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -358811 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000b76246acebd335e1af9e2073f684ff6c555816c6 -358811 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000b76246acebd335e1af9e2073f684ff6c555816c6 -359114 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -359114 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -359375 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000068 -359378 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000069 -359378 0x4d6387f3b967da39b11de111158d49754c31985d 0x2dba1d9e78f3192742fc9d510383d669fe8a4fa03d039bd7382ef67119078af7 0x0000000000000000000000000000000000000000000000000000000000000012 -359538 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x000000000000000000000000000000000000000000000000000000000000006a -361585 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -361585 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -361588 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -361588 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -361732 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x00000000000000000000000030d9803d6754bd9ad6d3a9990ca7a07af8745d5a -361732 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x00000000000000000000000030d9803d6754bd9ad6d3a9990ca7a07af8745d5a -361757 0xcf8470d3388a198418e02aaf8e37392cfbc18867 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -361757 0xcf8470d3388a198418e02aaf8e37392cfbc18867 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -361775 0xcf8470d3388a198418e02aaf8e37392cfbc18867 0xc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b -362002 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x00000000000000000000000013a85703f391b8c9abb8068be03ff4d6aebd11eb -362002 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x00000000000000000000000013a85703f391b8c9abb8068be03ff4d6aebd11eb -365791 0xfd5ff05cb15b2e8cddd0e96912a5dee8044b9374 0x302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c -365793 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x000000000000000000000000000000000000000000000000000000000000006b -369141 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x0000000000000000000000006407c4286dc1c84aab28720eea596212c026450e -369141 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x0000000000000000000000006407c4286dc1c84aab28720eea596212c026450e -369239 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -369249 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -369253 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -369259 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -369261 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -369263 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -369274 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -369426 0xe2d560cc321a4e09e182693d45a3836ffd27a1bd 0x302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c -369426 0xfd5ff05cb15b2e8cddd0e96912a5dee8044b9374 0x302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c -369428 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x000000000000000000000000000000000000000000000000000000000000006c -369428 0x4d6387f3b967da39b11de111158d49754c31985d 0x2dba1d9e78f3192742fc9d510383d669fe8a4fa03d039bd7382ef67119078af7 0x0000000000000000000000000000000000000000000000000000000000000013 -369431 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x000000000000000000000000000000000000000000000000000000000000006d -369538 0xfd5ff05cb15b2e8cddd0e96912a5dee8044b9374 0x302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c -369540 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x000000000000000000000000000000000000000000000000000000000000006e -370399 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x00000000000000000000000071dcbc554dada022fdd31333f8883e953240f0b0 -370399 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x00000000000000000000000071dcbc554dada022fdd31333f8883e953240f0b0 -370517 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -370517 0x36517ccf7a16266de8b7cbd60db1f45a23f1eaf1 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -370545 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -370545 0x36517ccf7a16266de8b7cbd60db1f45a23f1eaf1 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -371190 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -371280 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -371286 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -371288 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -371299 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -371307 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -371327 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -371327 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -371329 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -371352 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -371360 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -371362 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -371369 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -371378 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371378 0x36517ccf7a16266de8b7cbd60db1f45a23f1eaf1 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -371450 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371450 0x36517ccf7a16266de8b7cbd60db1f45a23f1eaf1 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -371489 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371489 0xd53096b3cf64d4739bb774e0f055653e7f2cd710 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -371509 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371509 0xd53096b3cf64d4739bb774e0f055653e7f2cd710 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -371532 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371658 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371658 0xd53096b3cf64d4739bb774e0f055653e7f2cd710 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -371660 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371876 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371876 0xd53096b3cf64d4739bb774e0f055653e7f2cd710 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -371904 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371904 0xd53096b3cf64d4739bb774e0f055653e7f2cd710 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -371906 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371912 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371912 0xd53096b3cf64d4739bb774e0f055653e7f2cd710 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -371914 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371918 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371918 0xd53096b3cf64d4739bb774e0f055653e7f2cd710 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -371931 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371931 0xd53096b3cf64d4739bb774e0f055653e7f2cd710 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -371933 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371938 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371938 0xd53096b3cf64d4739bb774e0f055653e7f2cd710 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -371940 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371973 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -371973 0xd53096b3cf64d4739bb774e0f055653e7f2cd710 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -372006 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -372006 0xd53096b3cf64d4739bb774e0f055653e7f2cd710 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -372014 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -372847 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -374209 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -374225 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -374365 0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -374388 0x7fb091d48426f54f6fb8d1a43f8e33f80454f4e3 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -375079 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -375079 0xd53096b3cf64d4739bb774e0f055653e7f2cd710 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -375093 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -375401 0x4bca74810cc4917a7dee954d21221b72fd87d3d7 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -375440 0x4bca74810cc4917a7dee954d21221b72fd87d3d7 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -375447 0x4bca74810cc4917a7dee954d21221b72fd87d3d7 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -376493 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -376573 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -376588 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -376644 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -376650 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -376668 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -376906 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -377026 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -377026 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -377139 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -377139 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -377506 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -377523 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -377523 0xd53096b3cf64d4739bb774e0f055653e7f2cd710 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -377525 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -377581 0xfd5ff05cb15b2e8cddd0e96912a5dee8044b9374 0x302777af5d26fab9dd5120c5f1307c65193ebc51daf33244ada4365fab10602c -377586 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x000000000000000000000000000000000000000000000000000000000000006f -377608 0x8465dac1172b6abe303bead4d06125aed72ea01c 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -377627 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -377627 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -377629 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -377629 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -377703 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -377703 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -377730 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -377730 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -377746 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -377877 0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -377877 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -377894 0xb4a953f12f7418ed498a782ba47e5a7f5967091c 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -377905 0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -377905 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -377917 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -377917 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -377922 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -377922 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -377925 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -378345 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -378345 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -378347 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -378347 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -379027 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000070 -379032 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000071 -379039 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000072 -379158 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x77656c6661726500000000000000000000000000000000000000000000000000 -379161 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x77656c6661726500000000000000000000000000000000000000000000000000 0x000000000000000000000000266d8a3bfa7536f3f921da30824e47c561dd66cc -379161 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x77656c6661726500000000000000000000000000000000000000000000000000 -379163 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x736f636965747900000000000000000000000000000000000000000000000000 -379164 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x736f636965747900000000000000000000000000000000000000000000000000 0x000000000000000000000000435a8f8bbed708ca75aa1c8ca7091fa1a3c03782 -379164 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x736f636965747900000000000000000000000000000000000000000000000000 -379167 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x6461707000000000000000000000000000000000000000000000000000000000 -379170 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -379171 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x6461707000000000000000000000000000000000000000000000000000000000 0x000000000000000000000000f81f0d1f4cacb0a419dba6fa897a121f61347c84 -379171 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x6461707000000000000000000000000000000000000000000000000000000000 -379172 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x6e6574776f726b00000000000000000000000000000000000000000000000000 -379176 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x6e6574776f726b00000000000000000000000000000000000000000000000000 0x00000000000000000000000030ce983f55cfa6742a1270e263ff33010fb82790 -379176 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x6e6574776f726b00000000000000000000000000000000000000000000000000 -379180 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x7765697472616465720000000000000000000000000000000000000000000000 -379182 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x7765697472616465720000000000000000000000000000000000000000000000 0x00000000000000000000000003477c75a6b22c58f8e65ecfb97219541c16aacf -379182 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x7765697472616465720000000000000000000000000000000000000000000000 -379210 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x7065657200000000000000000000000000000000000000000000000000000000 -379212 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x7065657200000000000000000000000000000000000000000000000000000000 0x000000000000000000000000a5fcbfe7e0fe1a8f97772e3ff2433df651c3cd40 -379212 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x7065657200000000000000000000000000000000000000000000000000000000 -379214 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x6c65646765720000000000000000000000000000000000000000000000000000 -379216 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x6c65646765720000000000000000000000000000000000000000000000000000 0x0000000000000000000000001bfa9c5206cf2f2d6218468200da6a6b2488f5f1 -379216 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x6c65646765720000000000000000000000000000000000000000000000000000 -379217 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x6964656e74697479000000000000000000000000000000000000000000000000 -379219 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x6964656e74697479000000000000000000000000000000000000000000000000 0x000000000000000000000000420ec54a21967d9813cd184fa32783b61897b097 -379219 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x6964656e74697479000000000000000000000000000000000000000000000000 -379220 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x72657075746174696f6e00000000000000000000000000000000000000000000 -379224 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x72657075746174696f6e00000000000000000000000000000000000000000000 0x000000000000000000000000d9b2f59f3b5c7b3c67047d2f03c3e8052470be92 -379224 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x72657075746174696f6e00000000000000000000000000000000000000000000 -379235 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x6c6f747465727900000000000000000000000000000000000000000000000000 -379237 0x33990122638b9132ca29c723bdf037f1a891a70c 0xf63780e752c6a54a94fc52715dbc5518a3b4c3c2833d301a204226548a2a8545 0x6c6f747465727900000000000000000000000000000000000000000000000000 0x0000000000000000000000001f6cc3f7c927e1196c03ac49c5aff0d39c9d103d -379237 0x33990122638b9132ca29c723bdf037f1a891a70c 0xa6697e974e6a320f454390be03f74955e8978f1a6971ea6730542e37b66179bc 0x6c6f747465727900000000000000000000000000000000000000000000000000 -381271 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -381271 0xd53096b3cf64d4739bb774e0f055653e7f2cd710 0x0cee94601ab1f1d758b126c873d5328735356f811c80bdf6af62fe2534db51b6 -381276 0x6acc9a6876739e9190d06463196e27b6d37405c6 0xf7eba460ce397de720ba4749bd9c125fec27d45ef68e15fffe706e8c211a7f5c -381689 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -382200 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000073 -382217 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000074 -382644 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000848e4dc353b9962471cd6506adc206f001e15fec -382644 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000848e4dc353b9962471cd6506adc206f001e15fec -383284 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -383337 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -383354 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -383361 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -383427 0xad8d3a5d2d92eb14bb56ca9f380be35b8efe0c04 0x19dacbf83c5de6658e14cbf7bcae5c15eca2eedecf1c66fbca928e4d351bea0f 0x000000000000000000000000f44058ffe3b8e3a6344e95a7dba8929d5b94bae2 0x4141414141494948490000000000000000000000000000000000000000000000 -383466 0x7f1d234e281ff8421b2b0650a9b8f85b5d73bd59 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -383469 0x51b6b4f5b270fa093198a984c3fce5ea607a94e7 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -383515 0xad8d3a5d2d92eb14bb56ca9f380be35b8efe0c04 0x19dacbf83c5de6658e14cbf7bcae5c15eca2eedecf1c66fbca928e4d351bea0f 0x000000000000000000000000f44058ffe3b8e3a6344e95a7dba8929d5b94bae2 0x4141414141494948490000000000000000000000000000000000000000000000 -383519 0x5067247f2214dca445bfb213277b5f19711e309f 0x6e7287b110b0d2f738952766cb4d4281ce49164b34e66493ebaf76c6c75c0adf -383630 0x513d9cfdf8c3f7c08006a4828e9319bafff2e556 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -383760 0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -383802 0x04a163c9e3cadc6341ac0340403b42c83e384832 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -383815 0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -383815 0xce4484b6d988a27ec9da967f84320c89194dd56b 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -383844 0x285b28d0c11c5bd3a039f3c26c887e2f8f177dc6 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -383852 0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -383852 0xbf871ee17553ca56382a0dda5256760a0a979e62 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -383859 0xbf871ee17553ca56382a0dda5256760a0a979e62 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -383859 0xbf871ee17553ca56382a0dda5256760a0a979e62 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -383864 0xbf871ee17553ca56382a0dda5256760a0a979e62 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -383864 0xbf871ee17553ca56382a0dda5256760a0a979e62 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -383968 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -383968 0xf01d37496e1ad7f30bdc17f0dd55b7b19e53f767 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -383973 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -384127 0xad8d3a5d2d92eb14bb56ca9f380be35b8efe0c04 0x19dacbf83c5de6658e14cbf7bcae5c15eca2eedecf1c66fbca928e4d351bea0f 0x000000000000000000000000f44058ffe3b8e3a6344e95a7dba8929d5b94bae2 0x4141414141494948490000000000000000000000000000000000000000000000 -384138 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -384149 0x285b28d0c11c5bd3a039f3c26c887e2f8f177dc6 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -384173 0x285b28d0c11c5bd3a039f3c26c887e2f8f177dc6 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -384173 0x81e4c09f8d140521e2265b42d99fc2fb868a5b14 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -384301 0x03131e9dc0d42f57c92c3ae39e79a9abac75d9bb 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -384422 0x4e96c7985c2f260ae9fdd12fd7f78364f16af2ce 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -384506 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -384511 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -384546 0xad8d3a5d2d92eb14bb56ca9f380be35b8efe0c04 0x19dacbf83c5de6658e14cbf7bcae5c15eca2eedecf1c66fbca928e4d351bea0f 0x000000000000000000000000f44058ffe3b8e3a6344e95a7dba8929d5b94bae2 0x4141414141494948490000000000000000000000000000000000000000000000 -384771 0xac4df82fe37ea2187bc8c011a23d743b4f39019a 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -384825 0xac4df82fe37ea2187bc8c011a23d743b4f39019a 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -384861 0x9dfb24cf9ef6b885a7d130b5a92002985954b8e6 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -384917 0x4e96c7985c2f260ae9fdd12fd7f78364f16af2ce 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -384923 0xe291a9e17fd310b860f665dbdd8375144bdd6ecd 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -384965 0xc833e49ac9d0315778d616cbb583a8b1b3bf2d73 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -385067 0x3a360d9e2919714547623e4bc9504242b816d2d8 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -385073 0x3a360d9e2919714547623e4bc9504242b816d2d8 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -385356 0xe291a9e17fd310b860f665dbdd8375144bdd6ecd 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -385356 0xc833e49ac9d0315778d616cbb583a8b1b3bf2d73 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -386571 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -386620 0xdcf421d093428b096ca501a7cd1a740855a7976f -386736 0xa8637b2df8ca339818314b7def756ed19ae4d5e3 0x722f20d265a4f5c6387c6ce92203442cdcb6d30b5e188f3649f0d5cbdf9d87fb 0x0000000000000000000000000000000000000000000000000000000000000000 -386786 0xa8637b2df8ca339818314b7def756ed19ae4d5e3 0x722f20d265a4f5c6387c6ce92203442cdcb6d30b5e188f3649f0d5cbdf9d87fb 0x0000000000000000000000000000000000000000000000000000000000000001 -386795 0xa8637b2df8ca339818314b7def756ed19ae4d5e3 0x722f20d265a4f5c6387c6ce92203442cdcb6d30b5e188f3649f0d5cbdf9d87fb 0x0000000000000000000000000000000000000000000000000000000000000002 -386804 0xa8637b2df8ca339818314b7def756ed19ae4d5e3 0x722f20d265a4f5c6387c6ce92203442cdcb6d30b5e188f3649f0d5cbdf9d87fb 0x0000000000000000000000000000000000000000000000000000000000000003 -386812 0xa8637b2df8ca339818314b7def756ed19ae4d5e3 0x722f20d265a4f5c6387c6ce92203442cdcb6d30b5e188f3649f0d5cbdf9d87fb 0x0000000000000000000000000000000000000000000000000000000000000004 -386818 0xa8637b2df8ca339818314b7def756ed19ae4d5e3 0x722f20d265a4f5c6387c6ce92203442cdcb6d30b5e188f3649f0d5cbdf9d87fb 0x0000000000000000000000000000000000000000000000000000000000000005 -386899 0xa8637b2df8ca339818314b7def756ed19ae4d5e3 0x722f20d265a4f5c6387c6ce92203442cdcb6d30b5e188f3649f0d5cbdf9d87fb 0x0000000000000000000000000000000000000000000000000000000000000006 -386939 0x523c43c44671e34c1e7a9a619420b191fb009db1 0x722f20d265a4f5c6387c6ce92203442cdcb6d30b5e188f3649f0d5cbdf9d87fb 0x0000000000000000000000000000000000000000000000000000000000000000 -386945 0x7ff1fa4c4bb95760dda000b5856bc22db681e989 0x0000000000000000000000000000000000000000000000000000000000000000 -386975 0xc48d9595221e591bf7a785591f928b6df08fee7a 0x0000000000000000000000000000000000000000000000000000000000000000 -387011 0x07f1d608c18dc12e6ee4487be4d01571315dbef1 0x0000000000000000000000000000000000000000000000000000000000000000 -387014 0x07f1d608c18dc12e6ee4487be4d01571315dbef1 0x0000000000000000000000000000000000000000000000000000000000000001 -387016 0xa72cd306bd6bc58922dcfed48cb1474f323860a9 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -387032 0x07f1d608c18dc12e6ee4487be4d01571315dbef1 0x0000000000000000000000000000000000000000000000000000000000000002 -387044 0x91b876c8614495fb9272a95edecc92938e5e2da6 0x0000000000000000000000000000000000000000000000000000000000000000 -387045 0xa72cd306bd6bc58922dcfed48cb1474f323860a9 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -387206 0x680a79579b69df391a4d23a7ba219b4d020736dc 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -387225 0x680a79579b69df391a4d23a7ba219b4d020736dc 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -387241 0x680a79579b69df391a4d23a7ba219b4d020736dc 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -387276 0x680a79579b69df391a4d23a7ba219b4d020736dc 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -387276 0x4b94fb373ec3a87f79f6de32ad730806020c94f1 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -387284 0x680a79579b69df391a4d23a7ba219b4d020736dc 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -387365 0x72c39a1286deaffbc3058cea4f9598bf0f2f6cf6 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -387615 0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -387627 0x2a31114378a3093d29aa387bfe3829d9f1f4c2a8 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -387641 0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -387648 0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -387654 0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -387654 0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -387658 0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -387658 0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -387683 0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -387688 0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -387688 0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -387690 0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -387690 0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -387761 0x97e58c7d37cba1a1e2ecbb2a5b23f8d127b6892d 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -388108 0x33921ef3eeffb23d68802e43e8110ab6c2fff774 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -388111 0xbec795614eda3b5ccd2e32070b4ace745ce801c4 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -388150 0xbec795614eda3b5ccd2e32070b4ace745ce801c4 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -388246 0xed6523382d41982604b845e5b94dd7fa0060198d 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -388285 0x329e2382db65ef312ca68a6c8ef549e68d051e06 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -388296 0xed6523382d41982604b845e5b94dd7fa0060198d 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -388516 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -388860 0xa36dcbd8877c08dc245ca08577368ef87a0c917e 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -388893 0xa36dcbd8877c08dc245ca08577368ef87a0c917e 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -388893 0xf2d850b176ddf0b6c1411d68ef96d2d8b7b0b480 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -388894 0xa36dcbd8877c08dc245ca08577368ef87a0c917e 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -388907 0xbda7aeb6d2002efe360b6467275ef01e77d15497 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -388907 0x2caa3e6931413fba516a377a43cadd94e197bbfa 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -388909 0x2caa3e6931413fba516a377a43cadd94e197bbfa 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -388912 0x2caa3e6931413fba516a377a43cadd94e197bbfa 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -388912 0x2caa3e6931413fba516a377a43cadd94e197bbfa 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -388918 0x2caa3e6931413fba516a377a43cadd94e197bbfa 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -388918 0x2caa3e6931413fba516a377a43cadd94e197bbfa 0xe7c957c06e9a662c1a6c77366179f5b702b97651dc28eee7d5bf1dff6e40bb4a -388923 0xa36dcbd8877c08dc245ca08577368ef87a0c917e 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -388923 0x2caa3e6931413fba516a377a43cadd94e197bbfa 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -388940 0xa36dcbd8877c08dc245ca08577368ef87a0c917e 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -388971 0x2a31114378a3093d29aa387bfe3829d9f1f4c2a8 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -388990 0x892140413344e49d9eaf54db38126d973fa167f6 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -389012 0x892140413344e49d9eaf54db38126d973fa167f6 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -389158 0x892140413344e49d9eaf54db38126d973fa167f6 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -389206 0xe358b3b9f29c67cb810c5184e6fde27d66ce036c 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -389238 0x72c39a1286deaffbc3058cea4f9598bf0f2f6cf6 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -389277 0x534c5a8c34ad4e150581c50ded1bbfa5f22b1800 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -389292 0xcab01dedaa9e87d03e5eff6dedab9ad98298ccc6 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -389301 0xcab01dedaa9e87d03e5eff6dedab9ad98298ccc6 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -389301 0xcab01dedaa9e87d03e5eff6dedab9ad98298ccc6 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -389309 0xcab01dedaa9e87d03e5eff6dedab9ad98298ccc6 0xc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b -389324 0xcab01dedaa9e87d03e5eff6dedab9ad98298ccc6 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -389324 0x72c39a1286deaffbc3058cea4f9598bf0f2f6cf6 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -389328 0x72c39a1286deaffbc3058cea4f9598bf0f2f6cf6 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -389343 0xcab01dedaa9e87d03e5eff6dedab9ad98298ccc6 0xe1c52dc63b719ade82e8bea94cc41a0d5d28e4aaf536adb5e9cccc9ff8c1aeda -389343 0xcab01dedaa9e87d03e5eff6dedab9ad98298ccc6 0x1733cbb53659d713b79580f79f3f9ff215f78a7c7aa45890f3b89fc5cddfbf32 -390001 0xecc72aac2791ee973bf607781a33a341b41e58c0 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -390004 0xecc72aac2791ee973bf607781a33a341b41e58c0 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -390024 0xd5babb9f28a9e7c78735c9c955d5626159f1be70 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -390042 0xd5babb9f28a9e7c78735c9c955d5626159f1be70 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -390236 0x54dcd97a77d12fb42a9ef839a3cdba0c1e92841a 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -390306 0xecc72aac2791ee973bf607781a33a341b41e58c0 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -390867 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -391685 0x5067247f2214dca445bfb213277b5f19711e309f 0x6e7287b110b0d2f738952766cb4d4281ce49164b34e66493ebaf76c6c75c0adf -391690 0x5067247f2214dca445bfb213277b5f19711e309f 0x6e7287b110b0d2f738952766cb4d4281ce49164b34e66493ebaf76c6c75c0adf -391691 0x5067247f2214dca445bfb213277b5f19711e309f 0x6e7287b110b0d2f738952766cb4d4281ce49164b34e66493ebaf76c6c75c0adf -391697 0xe358b3b9f29c67cb810c5184e6fde27d66ce036c 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -391713 0x534c5a8c34ad4e150581c50ded1bbfa5f22b1800 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -391849 0x534c5a8c34ad4e150581c50ded1bbfa5f22b1800 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -392002 0x81e4c09f8d140521e2265b42d99fc2fb868a5b14 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -392097 0xcab01dedaa9e87d03e5eff6dedab9ad98298ccc6 0xc7fb647e59b18047309aa15aad418e5d7ca96d173ad704f1031a2c3d7591734b -392104 0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -392110 0xa076155806214a73f37f5fcd8025036d92f6a3fb -392294 0xac9560da030bc57c70c90274d8ffe4ba6aea1846 0x0000000000000000000000000000000000000000000000000000000000000000 -392697 0xc4395759e26469baa0e6421bdc1d0232c6f4b6c3 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -392960 0x6466e3c6157ba0724234f8a09c77ac08fff8828c 0xd4665e3049283582ba6f9eba07a5b3e12dab49e02da99e8927a47af5d134bea5 0x00000000000000000000000016893e10b99a59afd2c60331e0b49241d4d4d7cc -392970 0x6466e3c6157ba0724234f8a09c77ac08fff8828c 0xd4665e3049283582ba6f9eba07a5b3e12dab49e02da99e8927a47af5d134bea5 0x00000000000000000000000016893e10b99a59afd2c60331e0b49241d4d4d7cc -392990 0x6466e3c6157ba0724234f8a09c77ac08fff8828c 0xadec52fcd1408589179b85e44b434374db078b4eaf793e7d1a1bb0ae4ecfeee5 0x00000000000000000000000016893e10b99a59afd2c60331e0b49241d4d4d7cc -393302 0x8ec0d0bbce4349e2d34586e2de392caa73532d3f 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -393370 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -393752 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x00000000000000000000000076b0f6b32c66c317699067f2d938bcf669f380ce -393752 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x00000000000000000000000076b0f6b32c66c317699067f2d938bcf669f380ce -394354 0xcab01dedaa9e87d03e5eff6dedab9ad98298ccc6 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -394389 0x6466e3c6157ba0724234f8a09c77ac08fff8828c 0xadec52fcd1408589179b85e44b434374db078b4eaf793e7d1a1bb0ae4ecfeee5 0x00000000000000000000000016893e10b99a59afd2c60331e0b49241d4d4d7cc -394389 0x6466e3c6157ba0724234f8a09c77ac08fff8828c 0xadec52fcd1408589179b85e44b434374db078b4eaf793e7d1a1bb0ae4ecfeee5 0x00000000000000000000000016893e10b99a59afd2c60331e0b49241d4d4d7cc -394390 0x6466e3c6157ba0724234f8a09c77ac08fff8828c 0xadec52fcd1408589179b85e44b434374db078b4eaf793e7d1a1bb0ae4ecfeee5 0x00000000000000000000000016893e10b99a59afd2c60331e0b49241d4d4d7cc -394390 0x6466e3c6157ba0724234f8a09c77ac08fff8828c 0xadec52fcd1408589179b85e44b434374db078b4eaf793e7d1a1bb0ae4ecfeee5 0x00000000000000000000000016893e10b99a59afd2c60331e0b49241d4d4d7cc -394390 0x6466e3c6157ba0724234f8a09c77ac08fff8828c 0xadec52fcd1408589179b85e44b434374db078b4eaf793e7d1a1bb0ae4ecfeee5 0x00000000000000000000000016893e10b99a59afd2c60331e0b49241d4d4d7cc -394391 0x6466e3c6157ba0724234f8a09c77ac08fff8828c 0xadec52fcd1408589179b85e44b434374db078b4eaf793e7d1a1bb0ae4ecfeee5 0x00000000000000000000000016893e10b99a59afd2c60331e0b49241d4d4d7cc -394393 0x6466e3c6157ba0724234f8a09c77ac08fff8828c 0xadec52fcd1408589179b85e44b434374db078b4eaf793e7d1a1bb0ae4ecfeee5 0x00000000000000000000000016893e10b99a59afd2c60331e0b49241d4d4d7cc -394393 0x6466e3c6157ba0724234f8a09c77ac08fff8828c 0xadec52fcd1408589179b85e44b434374db078b4eaf793e7d1a1bb0ae4ecfeee5 0x00000000000000000000000016893e10b99a59afd2c60331e0b49241d4d4d7cc -394394 0x6466e3c6157ba0724234f8a09c77ac08fff8828c 0xadec52fcd1408589179b85e44b434374db078b4eaf793e7d1a1bb0ae4ecfeee5 0x00000000000000000000000016893e10b99a59afd2c60331e0b49241d4d4d7cc -394395 0x6466e3c6157ba0724234f8a09c77ac08fff8828c 0xadec52fcd1408589179b85e44b434374db078b4eaf793e7d1a1bb0ae4ecfeee5 0x00000000000000000000000016893e10b99a59afd2c60331e0b49241d4d4d7cc -394426 0xdb30622d51e8d6221f0b1cbde57d4734387d7ca1 0xd4665e3049283582ba6f9eba07a5b3e12dab49e02da99e8927a47af5d134bea5 0x00000000000000000000000016893e10b99a59afd2c60331e0b49241d4d4d7cc -394800 0x7011f3edc7fa43c81440f9f43a6458174113b162 0x66d0ee9ee580464eb06bb7adef164c593ad3173da5b9937511307bb4646d392e 0x0000000000000000000000000000000000000000000000000000000000000075 -395595 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000d1f35f7250a922150c0e879eaf0cb5f0f7dd47c3 -395595 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000d1f35f7250a922150c0e879eaf0cb5f0f7dd47c3 -395969 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -396348 0xc4395759e26469baa0e6421bdc1d0232c6f4b6c3 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -397108 0xb372018f3be9e171df0581136b59d2faf73a7d5d 0xff74e91598aed6ae5d2fdcf8b24cd2c7be49a0808112a305069355b7160f23f9 -397588 0xb372018f3be9e171df0581136b59d2faf73a7d5d 0xff74e91598aed6ae5d2fdcf8b24cd2c7be49a0808112a305069355b7160f23f9 -397591 0xb372018f3be9e171df0581136b59d2faf73a7d5d 0xff74e91598aed6ae5d2fdcf8b24cd2c7be49a0808112a305069355b7160f23f9 -398412 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x39d732521214059f57de4c0f92879304394ef7c5e530a8708b7113a42f9f0878 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -398412 0xc7696b27830dd8aa4823a1cba8440c27c36adec4 0x44bbf497379e88194e67c38a8b2e628ef3803579306f3fd2177ce81afb3d743f 0x000000000000000000000000a2792b9f27a466a635649f551a4109a179b00fbf -398456 0xfadd0c5d206310344a31711da36ac89a7baeb388 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -398477 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -398679 0xfa15b8c872f533cd40abfd055507f2907bcf1581 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -398968 0xe82f5f7db7bf9bad426505c654e8d13b609f527c 0x16cdf1707799c6655baac6e210f52b94b7cec08adcaf9ede7dfe8649da926146 -398972 0x6f7ff1690f64973fffc848f5cf101b446acb1c27 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -399058 0x6f7ff1690f64973fffc848f5cf101b446acb1c27 0x92ca3a80853e6663fa31fa10b99225f18d4902939b4c53a9caae9043f6efd004 -399804 0xc4395759e26469baa0e6421bdc1d0232c6f4b6c3 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c -399849 0xb372018f3be9e171df0581136b59d2faf73a7d5d 0xff74e91598aed6ae5d2fdcf8b24cd2c7be49a0808112a305069355b7160f23f9 diff --git a/ethcore/src/chainfilter/tests.rs b/ethcore/src/chainfilter/tests.rs deleted file mode 100644 index 560662829..000000000 --- a/ethcore/src/chainfilter/tests.rs +++ /dev/null @@ -1,283 +0,0 @@ -// Copyright 2015, 2016 Ethcore (UK) Ltd. -// This file is part of Parity. - -// Parity is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Parity is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Parity. If not, see . - -use std::collections::HashMap; -use std::io::{BufRead, BufReader, Read}; -use std::str::FromStr; -use util::hash::*; -use util::sha3::*; -use chainfilter::{BloomIndex, FilterDataSource, ChainFilter}; - -/// In memory cache for blooms. -/// -/// Stores all blooms in `HashMap`, which indexes them by `BloomIndex`. -pub struct MemoryCache { - blooms: HashMap, -} - -impl Default for MemoryCache { - fn default() -> Self { - MemoryCache::new() - } -} - -impl MemoryCache { - /// Default constructor for MemoryCache - pub fn new() -> Self { - MemoryCache { blooms: HashMap::new() } - } - - /// inserts all blooms into cache - /// - /// if bloom at given index already exists, overwrites it - pub fn insert_blooms(&mut self, blooms: HashMap) { - self.blooms.extend(blooms); - } -} - -impl FilterDataSource for MemoryCache { - fn bloom_at_index(&self, index: &BloomIndex) -> Option { - self.blooms.get(index).cloned() - } -} - -fn to_bloom(hashable: &T) -> H2048 where T: Hashable { - let mut bloom = H2048::new(); - bloom.shift_bloomed(&hashable.sha3()); - bloom -} - -#[test] -fn test_topic_basic_search() { - let index_size = 16; - let bloom_levels = 3; - - let mut cache = MemoryCache::new(); - let topic = H256::from_str("8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba").unwrap(); - - let modified_blooms = { - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - let block_number = 23; - filter.add_bloom(&to_bloom(&topic), block_number) - }; - - // number of modified blooms should always be equal number of levels - assert_eq!(modified_blooms.len(), bloom_levels as usize); - cache.insert_blooms(modified_blooms); - - { - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - let blocks = filter.blocks_with_bloom(&to_bloom(&topic), 0, 100); - assert_eq!(blocks.len(), 1); - assert_eq!(blocks[0], 23); - } - - { - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - let blocks = filter.blocks_with_bloom(&to_bloom(&topic), 0, 22); - assert_eq!(blocks.len(), 0); - } - - { - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - let blocks = filter.blocks_with_bloom(&to_bloom(&topic), 23, 23); - assert_eq!(blocks.len(), 1); - assert_eq!(blocks[0], 23); - } - - { - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - let blocks = filter.blocks_with_bloom(&to_bloom(&topic), 24, 100); - assert_eq!(blocks.len(), 0); - } -} - -#[test] -fn test_reset_chain_head_simple() { - let index_size = 16; - let bloom_levels = 3; - - let mut cache = MemoryCache::new(); - let topic_0 = H256::from_str("8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba").unwrap(); - let topic_1 = H256::from_str("8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dbb").unwrap(); - let topic_2 = H256::from_str("8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dbc").unwrap(); - let topic_3 = H256::from_str("8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dbd").unwrap(); - let topic_4 = H256::from_str("8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dbe").unwrap(); - let topic_5 = H256::from_str("8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dbf").unwrap(); - - let modified_blooms_0 = { - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - let block_number = 14; - filter.add_bloom(&to_bloom(&topic_0), block_number) - }; - - cache.insert_blooms(modified_blooms_0); - - let modified_blooms_1 = { - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - let block_number = 15; - filter.add_bloom(&to_bloom(&topic_1), block_number) - }; - - cache.insert_blooms(modified_blooms_1); - - let modified_blooms_2 = { - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - let block_number = 16; - filter.add_bloom(&to_bloom(&topic_2), block_number) - }; - - cache.insert_blooms(modified_blooms_2); - - let modified_blooms_3 = { - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - let block_number = 17; - filter.add_bloom(&to_bloom(&topic_3), block_number) - }; - - cache.insert_blooms(modified_blooms_3); - - - let reset_modified_blooms = { - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - filter.reset_chain_head(&[to_bloom(&topic_4), to_bloom(&topic_5)], 15, 17) - }; - - cache.insert_blooms(reset_modified_blooms); - - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - assert_eq!(filter.blocks_with_bloom(&to_bloom(&topic_0), 0, 100), vec![14]); - assert_eq!(filter.blocks_with_bloom(&to_bloom(&topic_1), 0, 100), vec![]); - assert_eq!(filter.blocks_with_bloom(&to_bloom(&topic_2), 0, 100), vec![]); - assert_eq!(filter.blocks_with_bloom(&to_bloom(&topic_3), 0, 100), vec![]); - assert_eq!(filter.blocks_with_bloom(&to_bloom(&topic_4), 0, 100), vec![15]); - assert_eq!(filter.blocks_with_bloom(&to_bloom(&topic_5), 0, 100), vec![16]); -} - -fn for_each_bloom(bytes: &[u8], mut f: F) where F: FnMut(usize, &H2048) { - let mut reader = BufReader::new(bytes); - let mut line = String::new(); - while reader.read_line(&mut line).unwrap() > 0 { - { - let mut number_bytes = vec![]; - let mut bloom_bytes = [0; 512]; - - let mut line_reader = BufReader::new(line.as_ref() as &[u8]); - line_reader.read_until(b' ', &mut number_bytes).unwrap(); - line_reader.consume(2); - line_reader.read_exact(&mut bloom_bytes).unwrap(); - - let number = String::from_utf8(number_bytes).map(|s| s[..s.len() -1].to_owned()).unwrap().parse::().unwrap(); - let bloom = H2048::from_str(&String::from_utf8(bloom_bytes.to_vec()).unwrap()).unwrap(); - f(number, &bloom); - } - line.clear(); - } -} - -fn for_each_log(bytes: &[u8], mut f: F) where F: FnMut(usize, &Address, &[H256]) { - let mut reader = BufReader::new(bytes); - let mut line = String::new(); - while reader.read_line(&mut line).unwrap() > 0 { - { - let mut number_bytes = vec![]; - let mut address_bytes = [0;42]; - let mut topic = [0;66]; - let mut topics_bytes = vec![]; - - let mut line_reader = BufReader::new(line.as_ref() as &[u8]); - line_reader.read_until(b' ', &mut number_bytes).unwrap(); - line_reader.read_exact(&mut address_bytes).unwrap(); - line_reader.consume(1); - while let Ok(_) = line_reader.read_exact(&mut topic) { - line_reader.consume(1); - topics_bytes.push(topic.to_vec()); - } - - let number = String::from_utf8(number_bytes).map(|s| s[..s.len() -1].to_owned()).unwrap().parse::().unwrap(); - let address = Address::from_str(&String::from_utf8(address_bytes.to_vec()).map(|a| a[2..].to_owned()).unwrap()).unwrap(); - let topics: Vec = topics_bytes - .into_iter() - .map(|t| H256::from_str(&String::from_utf8(t).map(|t| t[2..].to_owned()).unwrap()).unwrap()) - .collect(); - f(number, &address, &topics); - } - line.clear(); - } -} - -// tests chain filter on real data between blocks 300_000 and 400_000 -#[test] -fn test_chainfilter_real_data_short_searches() { - let index_size = 16; - let bloom_levels = 3; - - let mut cache = MemoryCache::new(); - - for_each_bloom(include_bytes!("blooms.txt"), | block_number, bloom | { - let modified_blooms = { - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - filter.add_bloom(bloom, block_number) - }; - - // number of modified blooms should always be equal number of levels - assert_eq!(modified_blooms.len(), bloom_levels as usize); - cache.insert_blooms(modified_blooms); - }); - - for_each_log(include_bytes!("logs.txt"), | block_number, address, topics | { - println!("block_number: {:?}", block_number); - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - let blocks = filter.blocks_with_bloom(&to_bloom(address), block_number, block_number); - assert_eq!(blocks.len(), 1); - for (i, topic) in topics.iter().enumerate() { - println!("topic: {:?}", i); - let blocks = filter.blocks_with_bloom(&to_bloom(topic), block_number, block_number); - assert_eq!(blocks.len(), 1); - } - }); -} - -// tests chain filter on real data between blocks 300_000 and 400_000 -#[test] -fn test_chainfilter_real_data_single_search() { - let index_size = 16; - let bloom_levels = 3; - - let mut cache = MemoryCache::new(); - - for_each_bloom(include_bytes!("blooms.txt"), | block_number, bloom | { - let modified_blooms = { - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - filter.add_bloom(bloom, block_number) - }; - - // number of modified blooms should always be equal number of levels - assert_eq!(modified_blooms.len(), bloom_levels as usize); - cache.insert_blooms(modified_blooms); - }); - - let address = Address::from_str("c4395759e26469baa0e6421bdc1d0232c6f4b6c3").unwrap(); - let filter = ChainFilter::new(&cache, index_size, bloom_levels); - let blocks = filter.blocks_with_bloom(&to_bloom(&address), 300_000, 400_000); - // bloom may return more blocks, but our log density is low, so it should be fine - assert_eq!(blocks.len(), 3); - assert_eq!(blocks[0], 392697); - assert_eq!(blocks[1], 396348); - assert_eq!(blocks[2], 399804); -} - - diff --git a/ethcore/src/client/client.rs b/ethcore/src/client/client.rs index 80e423d0b..27081471e 100644 --- a/ethcore/src/client/client.rs +++ b/ethcore/src/client/client.rs @@ -32,7 +32,7 @@ use env_info::LastHashes; use verification::*; use block::*; use transaction::{LocalizedTransaction, SignedTransaction, Action}; -use extras::TransactionAddress; +use blockchain::extras::TransactionAddress; use filter::Filter; use log_entry::LocalizedLogEntry; use block_queue::{BlockQueue, BlockQueueInfo}; diff --git a/ethcore/src/client/config.rs b/ethcore/src/client/config.rs index 7acea0070..e0b867903 100644 --- a/ethcore/src/client/config.rs +++ b/ethcore/src/client/config.rs @@ -15,7 +15,7 @@ // along with Parity. If not, see . pub use block_queue::BlockQueueConfig; -pub use blockchain::BlockChainConfig; +pub use blockchain::Config as BlockChainConfig; pub use trace::{Config as TraceConfig, Switch}; pub use evm::VMType; use util::journaldb; diff --git a/ethcore/src/client/test_client.rs b/ethcore/src/client/test_client.rs index b75ab9ea0..a60218a31 100644 --- a/ethcore/src/client/test_client.rs +++ b/ethcore/src/client/test_client.rs @@ -25,7 +25,7 @@ use header::{Header as BlockHeader, BlockNumber}; use filter::Filter; use log_entry::LocalizedLogEntry; use receipt::{Receipt, LocalizedReceipt}; -use extras::BlockReceipts; +use blockchain::extras::BlockReceipts; use error::{ImportResult}; use evm::Factory as EvmFactory; diff --git a/ethcore/src/client/trace.rs b/ethcore/src/client/trace.rs index ef11ffb39..15920dea9 100644 --- a/ethcore/src/client/trace.rs +++ b/ethcore/src/client/trace.rs @@ -6,7 +6,7 @@ use util::{Address, H256}; use header::BlockNumber; use trace::DatabaseExtras as TraceDatabaseExtras; use blockchain::{BlockChain, BlockProvider}; -use extras::TransactionAddress; +use blockchain::extras::TransactionAddress; use super::BlockID; impl TraceDatabaseExtras for BlockChain { diff --git a/ethcore/src/db.rs b/ethcore/src/db.rs index 2c5f7c73a..d38ce3041 100644 --- a/ethcore/src/db.rs +++ b/ethcore/src/db.rs @@ -29,6 +29,28 @@ pub enum CacheUpdatePolicy { Remove, } +pub trait Cache { + fn insert(&mut self, k: K, v: V) -> Option; + + fn remove(&mut self, k: &K) -> Option; + + fn get(&self, k: &K) -> Option<&V>; +} + +impl Cache for HashMap where K: Hash + Eq { + fn insert(&mut self, k: K, v: V) -> Option { + HashMap::insert(self, k, v) + } + + fn remove(&mut self, k: &K) -> Option { + HashMap::remove(self, k) + } + + fn get(&self, k: &K) -> Option<&V> { + HashMap::get(self, k) + } +} + /// Should be used to get database key associated with given value. pub trait Key { type Target: Deref; @@ -43,7 +65,7 @@ pub trait Writable { fn write(&self, key: &Key, value: &T) where T: Encodable, R: Deref; /// Writes the value into the database and updates the cache. - fn write_with_cache(&self, cache: &mut HashMap, key: K, value: T, policy: CacheUpdatePolicy) where + fn write_with_cache(&self, cache: &mut Cache, key: K, value: T, policy: CacheUpdatePolicy) where K: Key + Hash + Eq, T: Encodable, R: Deref { @@ -59,7 +81,7 @@ pub trait Writable { } /// Writes the values into the database and updates the cache. - fn extend_with_cache(&self, cache: &mut HashMap, values: HashMap, policy: CacheUpdatePolicy) where + fn extend_with_cache(&self, cache: &mut Cache, values: HashMap, policy: CacheUpdatePolicy) where K: Key + Hash + Eq, T: Encodable, R: Deref { @@ -88,9 +110,10 @@ pub trait Readable { R: Deref; /// Returns value for given key either in cache or in database. - fn read_with_cache(&self, cache: &RwLock>, key: &K) -> Option where + fn read_with_cache(&self, cache: &RwLock, key: &K) -> Option where K: Key + Eq + Hash + Clone, - T: Clone + Decodable { + T: Clone + Decodable, + C: Cache { { let read = cache.read().unwrap(); if let Some(v) = read.get(key) { @@ -109,9 +132,10 @@ pub trait Readable { fn exists(&self, key: &Key) -> bool where R: Deref; /// Returns true if given value exists either in cache or in database. - fn exists_with_cache(&self, cache: &RwLock>, key: &K) -> bool where + fn exists_with_cache(&self, cache: &RwLock, key: &K) -> bool where K: Eq + Hash + Key, - R: Deref { + R: Deref, + C: Cache { { let read = cache.read().unwrap(); if read.get(key).is_some() { diff --git a/ethcore/src/lib.rs b/ethcore/src/lib.rs index c5fae168e..1d4ddadbc 100644 --- a/ethcore/src/lib.rs +++ b/ethcore/src/lib.rs @@ -108,7 +108,9 @@ pub mod spec; pub mod views; pub mod pod_state; pub mod engine; +pub mod migrations; +mod blooms; mod db; mod common; mod basic_types; @@ -123,8 +125,6 @@ mod account_db; mod action_params; mod null_engine; mod builtin; -mod chainfilter; -mod extras; mod substate; mod executive; mod externalities; diff --git a/ethcore/src/migrations/extras/mod.rs b/ethcore/src/migrations/extras/mod.rs new file mode 100644 index 000000000..c4d4790dc --- /dev/null +++ b/ethcore/src/migrations/extras/mod.rs @@ -0,0 +1,5 @@ +//! Extras database migrations. + +mod v6; + +pub use self::v6::ToV6; diff --git a/ethcore/src/migrations/extras/v6.rs b/ethcore/src/migrations/extras/v6.rs new file mode 100644 index 000000000..9b97e594b --- /dev/null +++ b/ethcore/src/migrations/extras/v6.rs @@ -0,0 +1,84 @@ +use util::migration::Migration; + +/// This migration reduces the sizes of keys and moves `ExtrasIndex` byte from back to the front. +pub struct ToV6; + +impl ToV6 { + fn migrate_old_key(&self, old_key: Vec, index: u8, len: usize) -> Vec { + let mut result = vec![]; + result.reserve(len); + unsafe { + result.set_len(len); + } + result[0] = index; + let old_key_start = 33 - len; + result[1..].clone_from_slice(&old_key[old_key_start..32]); + result + } +} + +impl Migration for ToV6 { + fn version(&self) -> u32 { + 6 + } + + fn simple_migrate(&self, key: Vec, value: Vec) -> Option<(Vec, Vec)> { + + //// at this version all extras keys are 33 bytes long. + if key.len() == 33 { + // block details key changes: + // - index is moved to the front + if key[32] == 0 { + return Some((self.migrate_old_key(key, 0, 33), value)); + } + + // block hash key changes: + // - key is shorter 33 -> 5 bytes + // - index is moved to the front + if key[32] == 1 { + return Some((self.migrate_old_key(key, 1, 5), value)); + } + + // transaction addresses changes: + // - index is moved to the front + if key[32] == 2 { + return Some((self.migrate_old_key(key, 2, 33), value)); + } + + // block log blooms are removed + if key[32] == 3 { + return None; + } + + // blocks blooms key changes: + // - key is shorter 33 -> 6 bytes + // - index is moved to the front + // - index is changed 4 -> 3 + if key[32] == 4 { + // i have no idea why it was reversed + let reverse = key.into_iter().rev().collect::>(); + let mut result = [0u8; 6]; + // new extras index is 3 + result[0] = 3; + // 9th (+ prefix) byte was the level. Now it's second. + result[1] = reverse[9]; + result[2] = reverse[4]; + result[3] = reverse[3]; + result[4] = reverse[2]; + result[5] = reverse[1]; + + return Some((result.to_vec(), value)); + } + + // blocks receipts key changes: + // - index is moved to the front + // - index is changed 5 -> 4 + if key[32] == 5 { + return Some((self.migrate_old_key(key, 4, 33), value)); + } + } + + Some((key, value)) + } +} + diff --git a/ethcore/src/migrations/mod.rs b/ethcore/src/migrations/mod.rs new file mode 100644 index 000000000..1473ced9c --- /dev/null +++ b/ethcore/src/migrations/mod.rs @@ -0,0 +1,3 @@ +//! Database migrations. + +pub mod extras; diff --git a/ethcore/src/tests/helpers.rs b/ethcore/src/tests/helpers.rs index 3cc19aeb8..7262da9e8 100644 --- a/ethcore/src/tests/helpers.rs +++ b/ethcore/src/tests/helpers.rs @@ -17,7 +17,7 @@ use client::{BlockChainClient, Client, ClientConfig}; use common::*; use spec::*; -use blockchain::{BlockChain, BlockChainConfig}; +use blockchain::{BlockChain, Config as BlockChainConfig}; use state::*; use evm::Schedule; use engine::*; diff --git a/ethcore/src/trace/block.rs b/ethcore/src/trace/block.rs index c85073d96..bc53f77e2 100644 --- a/ethcore/src/trace/block.rs +++ b/ethcore/src/trace/block.rs @@ -1,3 +1,19 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + use util::rlp::*; use basic_types::LogBloom; use super::Trace; diff --git a/ethcore/src/trace/db.rs b/ethcore/src/trace/db.rs index 40d1ad4d8..d540f1b6e 100644 --- a/ethcore/src/trace/db.rs +++ b/ethcore/src/trace/db.rs @@ -16,7 +16,7 @@ //! Trace database. use std::ptr; -use std::ops::Deref; +use std::ops::{Deref, DerefMut}; use std::collections::HashMap; use std::sync::{RwLock, Arc}; use std::path::Path; @@ -27,7 +27,7 @@ use header::BlockNumber; use trace::{BlockTraces, LocalizedTrace, Config, Switch, Filter, Database as TraceDatabase, ImportRequest, DatabaseExtras, Error}; use db::{Key, Writable, Readable, CacheUpdatePolicy}; -use super::bloom::{TraceGroupPosition, BlockTracesBloom, BlockTracesBloomGroup}; +use blooms; use super::flat::{FlatTrace, FlatBlockTraces, FlatTransactionTraces}; const TRACE_DB_VER: &'static [u8] = b"1.0"; @@ -38,7 +38,7 @@ enum TraceDBIndex { /// Block traces index. BlockTraces = 0, /// Trace bloom group index. - BlockTracesBloomGroups = 1, + BloomGroups = 1, } impl Key for H256 { @@ -54,6 +54,17 @@ impl Key for H256 { } } +/// Wrapper around blooms::GroupPosition so it could be +/// uniquely identified in the database. +#[derive(Debug, PartialEq, Eq, Hash, Clone)] +struct TraceGroupPosition(blooms::GroupPosition); + +impl From for TraceGroupPosition { + fn from(position: GroupPosition) -> Self { + TraceGroupPosition(From::from(position)) + } +} + /// Helper data structure created cause [u8; 6] does not implement Deref to &[u8]. pub struct TraceGroupKey([u8; 6]); @@ -65,16 +76,17 @@ impl Deref for TraceGroupKey { } } -impl Key for TraceGroupPosition { +impl Key for TraceGroupPosition { type Target = TraceGroupKey; fn key(&self) -> Self::Target { let mut result = [0u8; 6]; - result[0] = TraceDBIndex::BlockTracesBloomGroups as u8; - result[1] = self.level; - unsafe { - ptr::copy(&[self.index] as *const u32 as *const u8, result.as_mut_ptr().offset(2), 4); - } + result[0] = TraceDBIndex::BloomGroups as u8; + result[1] = self.0.level; + result[2] = self.0.index as u8; + result[3] = (self.0.index << 8) as u8; + result[4] = (self.0.index << 16) as u8; + result[5] = (self.0.index << 24) as u8; TraceGroupKey(result) } } @@ -83,7 +95,7 @@ impl Key for TraceGroupPosition { pub struct TraceDB where T: DatabaseExtras { // cache traces: RwLock>, - blooms: RwLock>, + blooms: RwLock>, // db tracesdb: Database, // config, @@ -218,7 +230,7 @@ impl TraceDatabase for TraceDB where T: DatabaseExtras { let mut traces = self.traces.write().unwrap(); // it's important to use overwrite here, // cause this value might be queried by hash later - batch.write_with_cache(&mut traces, request.block_hash, request.traces, CacheUpdatePolicy::Overwrite); + batch.write_with_cache(traces.deref_mut(), request.block_hash, request.traces, CacheUpdatePolicy::Overwrite); } // now let's rebuild the blooms @@ -233,7 +245,7 @@ impl TraceDatabase for TraceDB where T: DatabaseExtras { // traces database is corrupted or incomplete. .map(|block_hash| self.traces(block_hash).expect("Traces database is incomplete.")) .map(|block_traces| block_traces.bloom()) - .map(BlockTracesBloom::from) + .map(blooms::Bloom::from) .map(Into::into) .collect(); @@ -241,10 +253,10 @@ impl TraceDatabase for TraceDB where T: DatabaseExtras { let trace_blooms = chain.replace(&replaced_range, enacted_blooms); let blooms_to_insert = trace_blooms.into_iter() .map(|p| (From::from(p.0), From::from(p.1))) - .collect::>(); + .collect::>(); let mut blooms = self.blooms.write().unwrap(); - batch.extend_with_cache(&mut blooms, blooms_to_insert, CacheUpdatePolicy::Remove); + batch.extend_with_cache(blooms.deref_mut(), blooms_to_insert, CacheUpdatePolicy::Remove); } self.tracesdb.write(batch).unwrap(); diff --git a/ethcore/src/verification/verification.rs b/ethcore/src/verification/verification.rs index ba7ef3bd4..6511a8ddd 100644 --- a/ethcore/src/verification/verification.rs +++ b/ethcore/src/verification/verification.rs @@ -228,7 +228,7 @@ mod tests { use util::*; use header::*; use verification::*; - use extras::*; + use blockchain::extras::*; use error::*; use error::BlockError::*; use views::*; diff --git a/parity/main.rs b/parity/main.rs index 36972e609..e87828f64 100644 --- a/parity/main.rs +++ b/parity/main.rs @@ -62,20 +62,28 @@ mod informant; mod io_handler; mod cli; mod configuration; +mod migration; -use ctrlc::CtrlC; -use util::*; -use std::time::Duration; +use std::io::{Write, Read, BufReader, BufRead}; +use std::ops::Deref; +use std::sync::{Arc, Mutex, Condvar}; +use std::path::Path; use std::fs::File; +use std::str::{FromStr, from_utf8}; use std::thread::sleep; -use std::io::{BufReader, BufRead}; +use std::time::Duration; +use rustc_serialize::hex::FromHex; +use ctrlc::CtrlC; +use util::{H256, ToPretty, NetworkConfiguration, PayloadInfo, Bytes}; use util::panics::{MayPanic, ForwardPanic, PanicHandler}; -use ethcore::client::{BlockID, BlockChainClient}; +use ethcore::client::{BlockID, BlockChainClient, ClientConfig, get_db_path}; use ethcore::error::{Error, ImportError}; use ethcore::service::ClientService; +use ethcore::spec::Spec; use ethsync::EthSync; use ethminer::{Miner, MinerService, ExternalMiner}; use daemonize::Daemonize; +use migration::migrate; use informant::Informant; use die::*; @@ -96,7 +104,10 @@ fn execute(conf: Configuration) { return; } - execute_upgrades(&conf); + let spec = conf.spec(); + let client_config = conf.client_config(&spec); + + execute_upgrades(&conf, &spec, &client_config); if conf.args.cmd_daemon { Daemonize::new() @@ -121,10 +132,10 @@ fn execute(conf: Configuration) { return; } - execute_client(conf); + execute_client(conf, spec, client_config); } -fn execute_upgrades(conf: &Configuration) { +fn execute_upgrades(conf: &Configuration, spec: &Spec, client_config: &ClientConfig) { match ::upgrade::upgrade(Some(&conf.path())) { Ok(upgrades_applied) if upgrades_applied > 0 => { println!("Executed {} upgrade scripts - ok", upgrades_applied); @@ -134,9 +145,15 @@ fn execute_upgrades(conf: &Configuration) { }, _ => {}, } + + let db_path = get_db_path(Path::new(&conf.path()), client_config.pruning, spec.genesis_header().hash()); + let result = migrate(&db_path); + if let Err(err) = result { + die_with_message(&format!("{}", err)); + } } -fn execute_client(conf: Configuration) { +fn execute_client(conf: Configuration, spec: Spec, client_config: ClientConfig) { // Setup panic handler let panic_handler = PanicHandler::new_in_arc(); @@ -145,10 +162,8 @@ fn execute_client(conf: Configuration) { // Raise fdlimit unsafe { ::fdlimit::raise_fd_limit(); } - let spec = conf.spec(); let net_settings = conf.net_settings(&spec); let sync_config = conf.sync_config(&spec); - let client_config = conf.client_config(&spec); // Secret Store let account_service = Arc::new(conf.account_service()); @@ -399,7 +414,7 @@ fn execute_import(conf: Configuration) { DataFormat::Hex => { for line in BufReader::new(instream).lines() { let s = line.unwrap_or_else(|_| die!("Error reading from the file/stream.")); - let s = if first_read > 0 {str::from_utf8(&first_bytes).unwrap().to_owned() + &(s[..])} else {s}; + let s = if first_read > 0 {from_utf8(&first_bytes).unwrap().to_owned() + &(s[..])} else {s}; first_read = 0; let bytes = FromHex::from_hex(&(s[..])).unwrap_or_else(|_| die!("Invalid hex in file/stream.")); do_import(bytes); diff --git a/parity/migration.rs b/parity/migration.rs new file mode 100644 index 000000000..76bf494ab --- /dev/null +++ b/parity/migration.rs @@ -0,0 +1,186 @@ +// Copyright 2015, 2016 Ethcore (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +use std::{fs, env}; +use std::fs::File; +use std::io::{Read, Write, Error as IoError, ErrorKind}; +use std::path::PathBuf; +use std::fmt::{Display, Formatter, Error as FmtError}; +use util::migration::{Manager as MigrationManager, Config as MigrationConfig, MigrationIterator}; +use util::kvdb::Database; +use ethcore::migrations; + +/// Database is assumed to be at default version, when no version file is found. +const DEFAULT_VERSION: u32 = 5; +/// Current version of database models. +const CURRENT_VERSION: u32 = 6; +/// Defines how many items are migrated to the new version of database at once. +const BATCH_SIZE: usize = 1024; +/// Version file name. +const VERSION_FILE_NAME: &'static str = "db_version"; + +/// Migration related erorrs. +#[derive(Debug)] +pub enum Error { + /// Returned when current version cannot be read or guessed. + UnknownDatabaseVersion, + /// Returned when migration is not possible. + MigrationImpossible, + /// Returned when migration unexpectadly failed. + MigrationFailed, + /// Returned when migration was completed succesfully, + /// but there was a problem with io. + Io(IoError), +} + +impl Display for Error { + fn fmt(&self, f: &mut Formatter) -> Result<(), FmtError> { + let out = match *self { + Error::UnknownDatabaseVersion => "Current database version cannot be read".into(), + Error::MigrationImpossible => format!("Migration to version {} is not possible", CURRENT_VERSION), + Error::MigrationFailed => "Migration unexpectedly failed".into(), + Error::Io(ref err) => format!("Unexpected io error: {}", err), + }; + + write!(f, "{}", out) + } +} + +impl From for Error { + fn from(err: IoError) -> Self { + Error::Io(err) + } +} + +/// Returns the version file path. +fn version_file_path(path: &PathBuf) -> PathBuf { + let mut file_path = path.clone(); + file_path.push(VERSION_FILE_NAME); + file_path +} + +/// Reads current database version from the file at given path. +/// If the file does not exist returns DEFAULT_VERSION. +fn current_version(path: &PathBuf) -> Result { + match File::open(version_file_path(path)) { + Err(ref err) if err.kind() == ErrorKind::NotFound => Ok(DEFAULT_VERSION), + Err(_) => Err(Error::UnknownDatabaseVersion), + Ok(mut file) => { + let mut s = String::new(); + try!(file.read_to_string(&mut s).map_err(|_| Error::UnknownDatabaseVersion)); + u32::from_str_radix(&s, 10).map_err(|_| Error::UnknownDatabaseVersion) + }, + } +} + +/// Writes current database version to the file. +/// Creates a new file if the version file does not exist yet. +fn update_version(path: &PathBuf) -> Result<(), Error> { + let mut file = try!(File::create(version_file_path(path))); + try!(file.write_all(format!("{}", CURRENT_VERSION).as_bytes())); + Ok(()) +} + +/// Blocks database path. +fn blocks_database_path(path: &PathBuf) -> PathBuf { + let mut blocks_path = path.clone(); + blocks_path.push("blocks"); + blocks_path +} + +/// Extras database path. +fn extras_database_path(path: &PathBuf) -> PathBuf { + let mut extras_path = path.clone(); + extras_path.push("extras"); + extras_path +} + +/// Temporary database path used for migration. +fn temp_database_path() -> PathBuf { + let mut dir = env::temp_dir(); + dir.push("parity_migration"); + dir +} + +/// Default migration settings. +fn default_migration_settings() -> MigrationConfig { + MigrationConfig { + batch_size: BATCH_SIZE, + } +} + +/// Migrations on blocks database. +fn blocks_database_migrations() -> Result { + let manager = MigrationManager::new(default_migration_settings()); + Ok(manager) +} + +/// Migrations on extras database. +fn extras_database_migrations() -> Result { + let mut manager = MigrationManager::new(default_migration_settings()); + try!(manager.add_migration(migrations::extras::ToV6).map_err(|_| Error::MigrationImpossible)); + Ok(manager) +} + +/// Migrates database at given position with given migration rules. +fn migrate_database(version: u32, path: PathBuf, migrations: MigrationManager) -> Result<(), Error> { + // check if migration is needed + if !migrations.is_needed(version) { + return Ok(()) + } + + println!("Migrating database {} from version {} to {}", path.to_string_lossy(), version, CURRENT_VERSION); + + // get temp path + let temp_path = temp_database_path(); + // remote the dir if it exists + let _ = fs::remove_dir_all(&temp_path); + + { + // open old database + let old = try!(Database::open_default(path.to_str().unwrap()).map_err(|_| Error::MigrationFailed)); + + // create new database + let mut temp = try!(Database::open_default(temp_path.to_str().unwrap()).map_err(|_| Error::MigrationFailed)); + + // migrate old database to the new one + try!(migrations.execute(MigrationIterator::from(old.iter()), version, &mut temp).map_err(|_| Error::MigrationFailed)); + } + + // replace the old database with the new one + try!(fs::remove_dir_all(&path)); + try!(fs::rename(&temp_path, &path)); + + println!("Migration finished"); + + Ok(()) +} + +/// Migrates the database. +pub fn migrate(path: &PathBuf) -> Result<(), Error> { + // read version file. + let version = try!(current_version(path)); + + // migrate the databases. + if version != CURRENT_VERSION { + try!(migrate_database(version, blocks_database_path(path), try!(blocks_database_migrations()))); + try!(migrate_database(version, extras_database_path(path), try!(extras_database_migrations()))); + } + + // update version file. + update_version(path) +} + diff --git a/util/src/migration/db_impl.rs b/util/src/migration/db_impl.rs index 760babe3c..9adf22a4a 100644 --- a/util/src/migration/db_impl.rs +++ b/util/src/migration/db_impl.rs @@ -17,9 +17,30 @@ //! `kvdb::Database` as `migration::Destination` use std::collections::BTreeMap; -use kvdb::{Database, DBTransaction}; +use kvdb::{Database, DatabaseIterator, DBTransaction}; use migration::{Destination, Error}; +/// Database iterator with `Item` complient with migration `Manager` interface. +pub struct MigrationIterator { + iter: DatabaseIterator, +} + +impl From for MigrationIterator { + fn from(iter: DatabaseIterator) -> Self { + MigrationIterator { + iter: iter + } + } +} + +impl Iterator for MigrationIterator { + type Item = (Vec, Vec); + + fn next(&mut self) -> Option { + self.iter.next().map(|(k, v)| (k.to_vec(), v.to_vec())) + } +} + impl Destination for Database { fn commit(&mut self, batch: BTreeMap, Vec>) -> Result<(), Error> { let transaction = DBTransaction::new(); diff --git a/util/src/migration/manager.rs b/util/src/migration/manager.rs index 8bf264350..bd21d1637 100644 --- a/util/src/migration/manager.rs +++ b/util/src/migration/manager.rs @@ -76,10 +76,6 @@ impl Manager { pub fn execute(&self, db_iter: D, version: u32, destination: &mut Destination) -> Result<(), Error> where D: Iterator, Vec)> { - if self.is_latest_version(version) { - return Ok(()); - } - let migrations = try!(self.migrations_from(version).ok_or(Error::MigrationImpossible)); let mut batch: BTreeMap, Vec> = BTreeMap::new(); @@ -104,11 +100,11 @@ impl Manager { Ok(()) } - /// Returns true if given string is equal to latest known version. - pub fn is_latest_version(&self, version: u32) -> bool { + /// Returns true if migration is needed. + pub fn is_needed(&self, version: u32) -> bool { match self.migrations.last() { - Some(last) => version == last.version(), - None => true + Some(last) => version < last.version(), + None => false, } } diff --git a/util/src/migration/mod.rs b/util/src/migration/mod.rs index e37406e2d..83d42d098 100644 --- a/util/src/migration/mod.rs +++ b/util/src/migration/mod.rs @@ -23,6 +23,7 @@ mod manager; mod tests; pub use self::manager::{Error, Config, Manager}; +pub use self::db_impl::MigrationIterator; use std::collections::BTreeMap; /// Single migration. diff --git a/util/src/migration/tests.rs b/util/src/migration/tests.rs index 1738f5467..b20e18cc9 100644 --- a/util/src/migration/tests.rs +++ b/util/src/migration/tests.rs @@ -70,6 +70,7 @@ fn one_simple_migration() { } #[test] +#[should_panic] fn no_migration_needed() { let mut manager = Manager::new(Config::default()); let keys = vec![vec![], vec![1u8]]; @@ -79,7 +80,6 @@ fn no_migration_needed() { let mut result = BTreeMap::new(); manager.add_migration(Migration0).unwrap(); manager.execute(db, 1, &mut result).unwrap(); - assert!(result.is_empty()); } #[test] @@ -117,3 +117,14 @@ fn second_migration() { manager.execute(db, 1, &mut result).unwrap(); assert_eq!(expected_db, result); } + +#[test] +fn is_migration_needed() { + let mut manager = Manager::new(Config::default()); + manager.add_migration(Migration0).unwrap(); + manager.add_migration(Migration1).unwrap(); + + assert!(manager.is_needed(0)); + assert!(manager.is_needed(1)); + assert!(!manager.is_needed(2)); +}