diff --git a/crates/chia-bls/benches/cache.rs b/crates/chia-bls/benches/cache.rs index e8c92f75c..15494b888 100644 --- a/crates/chia-bls/benches/cache.rs +++ b/crates/chia-bls/benches/cache.rs @@ -28,7 +28,11 @@ fn cache_benchmark(c: &mut Criterion) { c.bench_function("bls_cache.aggregate_verify, 0% cache hits", |b| { let mut cache = bls_cache.clone(); b.iter(|| { - assert!(cache.aggregate_verify(pks.iter().zip([&msg].iter().cycle()), &agg_sig)); + assert!( + cache + .aggregate_verify(pks.iter().zip([&msg].iter().cycle()), &agg_sig) + .0 + ); }); }); @@ -37,7 +41,11 @@ fn cache_benchmark(c: &mut Criterion) { c.bench_function("bls_cache.aggregate_verify, 10% cache hits", |b| { let mut cache = bls_cache.clone(); b.iter(|| { - assert!(cache.aggregate_verify(pks.iter().zip([&msg].iter().cycle()), &agg_sig)); + assert!( + cache + .aggregate_verify(pks.iter().zip([&msg].iter().cycle()), &agg_sig) + .0 + ); }); }); @@ -46,7 +54,11 @@ fn cache_benchmark(c: &mut Criterion) { c.bench_function("bls_cache.aggregate_verify, 20% cache hits", |b| { let mut cache = bls_cache.clone(); b.iter(|| { - assert!(cache.aggregate_verify(pks.iter().zip([&msg].iter().cycle()), &agg_sig)); + assert!( + cache + .aggregate_verify(pks.iter().zip([&msg].iter().cycle()), &agg_sig) + .0 + ); }); }); @@ -55,7 +67,11 @@ fn cache_benchmark(c: &mut Criterion) { c.bench_function("bls_cache.aggregate_verify, 50% cache hits", |b| { let mut cache = bls_cache.clone(); b.iter(|| { - assert!(cache.aggregate_verify(pks.iter().zip([&msg].iter().cycle()), &agg_sig)); + assert!( + cache + .aggregate_verify(pks.iter().zip([&msg].iter().cycle()), &agg_sig) + .0 + ); }); }); @@ -64,7 +80,11 @@ fn cache_benchmark(c: &mut Criterion) { c.bench_function("bls_cache.aggregate_verify, 100% cache hits", |b| { let mut cache = bls_cache.clone(); b.iter(|| { - assert!(cache.aggregate_verify(pks.iter().zip([&msg].iter().cycle()), &agg_sig)); + assert!( + cache + .aggregate_verify(pks.iter().zip([&msg].iter().cycle()), &agg_sig) + .0 + ); }); }); diff --git a/crates/chia-bls/src/bls_cache.rs b/crates/chia-bls/src/bls_cache.rs index f375465cc..dfba45011 100644 --- a/crates/chia-bls/src/bls_cache.rs +++ b/crates/chia-bls/src/bls_cache.rs @@ -1,11 +1,9 @@ -use std::borrow::Borrow; -use std::num::NonZeroUsize; - -use clvmr::sha2::Sha256; -use lru::LruCache; - use crate::{aggregate_verify_gt, hash_to_g2}; use crate::{GTElement, PublicKey, Signature}; +use clvmr::sha2::Sha256; +use lru::LruCache; +use std::borrow::Borrow; +use std::num::NonZeroUsize; /// This is a cache of pairings of public keys and their corresponding message. /// It accelerates aggregate verification when some public keys have already @@ -29,6 +27,9 @@ impl Default for BlsCache { } } +pub type PairingInfo = ([u8; 32], Vec); +type AggregateVerifyResult = (bool, Vec); + impl BlsCache { pub fn new(cache_size: NonZeroUsize) -> Self { Self { @@ -44,11 +45,18 @@ impl BlsCache { self.cache.is_empty() } + pub fn update(&mut self, new_items: impl IntoIterator) { + for (key, value) in new_items { + self.cache.put(key, value); + } + } + pub fn aggregate_verify, Msg: AsRef<[u8]>>( &mut self, pks_msgs: impl IntoIterator, sig: &Signature, - ) -> bool { + ) -> AggregateVerifyResult { + let mut added: Vec<([u8; 32], Vec)> = Vec::new(); let iter = pks_msgs.into_iter().map(|(pk, msg)| -> GTElement { // Hash pubkey + message let mut hasher = Sha256::new(); @@ -72,10 +80,11 @@ impl BlsCache { let pairing = aug_hash.pair(pk.borrow()); self.cache.put(hash, pairing.clone()); + added.push((hash, pairing.to_bytes().to_vec())); pairing }); - aggregate_verify_gt(sig, iter) + (aggregate_verify_gt(sig, iter), added) } } @@ -112,7 +121,7 @@ impl BlsCache { pks: &Bound<'_, PyList>, msgs: &Bound<'_, PyList>, sig: &Signature, - ) -> PyResult { + ) -> PyResult<(bool, Vec)> { let pks = pks .iter()? .map(|item| item?.extract()) @@ -148,15 +157,11 @@ impl BlsCache { #[pyo3(name = "update")] pub fn py_update(&mut self, other: &Bound<'_, PyList>) -> PyResult<()> { for item in other.borrow().iter()? { - let (key, value): (Vec, Vec) = item?.extract()?; + let (key, value): (Vec, [u8; 576]) = item?.extract()?; self.cache.put( key.try_into() .map_err(|_| PyValueError::new_err("invalid key"))?, - GTElement::from_bytes( - (&value[..]) - .try_into() - .map_err(|_| PyValueError::new_err("invalid GTElement"))?, - ), + GTElement::from_bytes(&value), ); } Ok(()) @@ -185,11 +190,11 @@ pub mod tests { assert!(bls_cache.is_empty()); // Verify the signature and add to the cache. - assert!(bls_cache.aggregate_verify(pks_msgs, &sig)); + assert!(bls_cache.aggregate_verify(pks_msgs, &sig).0); assert_eq!(bls_cache.len(), 1); // Now that it's cached, it shouldn't cache it again. - assert!(bls_cache.aggregate_verify(pks_msgs, &sig)); + assert!(bls_cache.aggregate_verify(pks_msgs, &sig).0); assert_eq!(bls_cache.len(), 1); } @@ -208,7 +213,7 @@ pub mod tests { assert!(bls_cache.is_empty()); // Add the first signature to cache. - assert!(bls_cache.aggregate_verify(pks_msgs.clone(), &agg_sig)); + assert!(bls_cache.aggregate_verify(pks_msgs.clone(), &agg_sig).0); assert_eq!(bls_cache.len(), 1); // Try with the first key message pair in the cache but not the second. @@ -219,7 +224,7 @@ pub mod tests { agg_sig += &sign(&sk2, msg2); pks_msgs.push((pk2, msg2)); - assert!(bls_cache.aggregate_verify(pks_msgs.clone(), &agg_sig)); + assert!(bls_cache.aggregate_verify(pks_msgs.clone(), &agg_sig).0); assert_eq!(bls_cache.len(), 2); // Try reusing a public key. @@ -229,7 +234,7 @@ pub mod tests { pks_msgs.push((pk2, msg3)); // Verify this signature and add to the cache as well (since it's still a different aggregate). - assert!(bls_cache.aggregate_verify(pks_msgs, &agg_sig)); + assert!(bls_cache.aggregate_verify(pks_msgs, &agg_sig).0); assert_eq!(bls_cache.len(), 3); } @@ -251,7 +256,7 @@ pub mod tests { let pks_msgs = [(pk, msg)]; // Add to cache by validating them one at a time. - assert!(bls_cache.aggregate_verify(pks_msgs, &sig)); + assert!(bls_cache.aggregate_verify(pks_msgs, &sig).0); } // The cache should be full now. @@ -278,6 +283,10 @@ pub mod tests { let pks_msgs: [(&PublicKey, &[u8]); 0] = []; - assert!(bls_cache.aggregate_verify(pks_msgs, &Signature::default())); + assert!( + bls_cache + .aggregate_verify(pks_msgs, &Signature::default()) + .0 + ); } } diff --git a/crates/chia-bls/src/lib.rs b/crates/chia-bls/src/lib.rs index 8fd08f823..53853dace 100644 --- a/crates/chia-bls/src/lib.rs +++ b/crates/chia-bls/src/lib.rs @@ -12,6 +12,7 @@ mod signature; mod parse_hex; pub use bls_cache::BlsCache; +pub use bls_cache::PairingInfo; pub use derive_keys::*; pub use error::{Error, Result}; pub use gtelement::GTElement; diff --git a/crates/chia-consensus/src/gen/condition_tools.rs b/crates/chia-consensus/src/gen/condition_tools.rs new file mode 100644 index 000000000..5f95a5575 --- /dev/null +++ b/crates/chia-consensus/src/gen/condition_tools.rs @@ -0,0 +1,194 @@ +use crate::consensus_constants::ConsensusConstants; +use crate::gen::opcodes::{ + ConditionOpcode, AGG_SIG_AMOUNT, AGG_SIG_ME, AGG_SIG_PARENT, AGG_SIG_PARENT_AMOUNT, + AGG_SIG_PARENT_PUZZLE, AGG_SIG_PUZZLE, AGG_SIG_PUZZLE_AMOUNT, +}; +use crate::gen::owned_conditions::OwnedSpend; +use chia_protocol::Bytes; +use chia_protocol::Coin; + +pub fn make_aggsig_final_message( + opcode: ConditionOpcode, + msg: &[u8], + spend: &OwnedSpend, + constants: &ConsensusConstants, +) -> Vec { + let mut result = Vec::::with_capacity(msg.len() + 96); + result.extend(msg); + match opcode { + AGG_SIG_PARENT => { + result.extend(spend.parent_id.as_slice()); + result.extend(constants.agg_sig_parent_additional_data.as_slice()); + } + AGG_SIG_PUZZLE => { + result.extend(spend.puzzle_hash.as_slice()); + result.extend(constants.agg_sig_puzzle_additional_data.as_slice()); + } + AGG_SIG_AMOUNT => { + result.extend(u64_to_bytes(spend.coin_amount).as_slice()); + result.extend(constants.agg_sig_amount_additional_data.as_slice()); + } + AGG_SIG_PUZZLE_AMOUNT => { + result.extend(spend.puzzle_hash.as_slice()); + result.extend(u64_to_bytes(spend.coin_amount).as_slice()); + result.extend(constants.agg_sig_puzzle_amount_additional_data.as_slice()); + } + AGG_SIG_PARENT_AMOUNT => { + result.extend(spend.parent_id.as_slice()); + result.extend(u64_to_bytes(spend.coin_amount).as_slice()); + result.extend(constants.agg_sig_parent_amount_additional_data.as_slice()); + } + AGG_SIG_PARENT_PUZZLE => { + result.extend(spend.parent_id.as_slice()); + result.extend(spend.puzzle_hash.as_slice()); + result.extend(constants.agg_sig_parent_puzzle_additional_data.as_slice()); + } + AGG_SIG_ME => { + let coin: Coin = Coin::new(spend.parent_id, spend.puzzle_hash, spend.coin_amount); + + result.extend(coin.coin_id().as_slice()); + result.extend(constants.agg_sig_me_additional_data.as_slice()); + } + _ => return result, + }; + + result +} + +pub(crate) fn u64_to_bytes(val: u64) -> Bytes { + let amount_bytes: [u8; 8] = val.to_be_bytes(); + if val >= 0x8000_0000_0000_0000_u64 { + let mut ret = Vec::::new(); + ret.push(0_u8); + ret.extend(amount_bytes); + Bytes::new(ret) + } else { + let start = match val { + n if n >= 0x0080_0000_0000_0000_u64 => 0, + n if n >= 0x8000_0000_0000_u64 => 1, + n if n >= 0x0080_0000_0000_u64 => 2, + n if n >= 0x8000_0000_u64 => 3, + n if n >= 0x0080_0000_u64 => 4, + n if n >= 0x8000_u64 => 5, + n if n >= 0x80_u64 => 6, + n if n > 0 => 7, + _ => 8, + }; + Bytes::new(amount_bytes[start..].to_vec()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::allocator::make_allocator; + use crate::consensus_constants::TEST_CONSTANTS; + use clvmr::chia_dialect::LIMIT_HEAP; + use clvmr::Allocator; + use hex_literal::hex; + use rstest::rstest; + + #[test] + fn test_validate_u64() { + let mut a: Allocator = make_allocator(LIMIT_HEAP); + for v in 0..10000 { + let ptr = a.new_small_number(v).expect("valid u64"); + assert_eq!(a.atom(ptr).as_ref(), u64_to_bytes(v as u64).as_slice()); + } + for v in 18_446_744_073_709_551_615_u64 - 1000..18_446_744_073_709_551_615 { + let ptr = a.new_number(v.into()).expect("valid u64"); + assert_eq!(a.atom(ptr).as_ref(), u64_to_bytes(v).as_slice()); + } + } + + #[rstest] + #[case(AGG_SIG_PARENT, 10000)] + #[case(AGG_SIG_PUZZLE, 261)] + #[case(AGG_SIG_AMOUNT, 100_000_000_005)] + #[case(AGG_SIG_PUZZLE_AMOUNT, 410)] + #[case(AGG_SIG_PARENT_AMOUNT, 909)] + #[case(AGG_SIG_PARENT_PUZZLE, 10_061_997)] + #[case(AGG_SIG_ME, 1303)] + fn test_make_aggsig_final_message(#[case] opcode: ConditionOpcode, #[case] coin_amount: u64) { + use std::sync::Arc; + + use chia_protocol::Bytes32; + + use crate::r#gen::conditions::Spend; + + let parent_id: Vec = + hex!("4444444444444444444444444444444444444444444444444444444444444444").into(); + let puzzle_hash: Vec = + hex!("3333333333333333333333333333333333333333333333333333333333333333").into(); + let msg = b"message"; + + let mut expected_result = Vec::::new(); + expected_result.extend(msg); + + let coin = Coin::new( + Bytes32::try_from(parent_id.clone()).expect("test should pass"), + Bytes32::try_from(puzzle_hash.clone()).expect("test should pass"), + coin_amount, + ); + + match opcode { + AGG_SIG_PARENT => { + expected_result.extend(parent_id.as_slice()); + expected_result.extend(TEST_CONSTANTS.agg_sig_parent_additional_data.as_slice()); + } + AGG_SIG_PUZZLE => { + expected_result.extend(puzzle_hash.as_slice()); + expected_result.extend(TEST_CONSTANTS.agg_sig_puzzle_additional_data.as_slice()); + } + AGG_SIG_AMOUNT => { + expected_result.extend(u64_to_bytes(coin_amount).as_slice()); + expected_result.extend(TEST_CONSTANTS.agg_sig_amount_additional_data.as_slice()); + } + AGG_SIG_PUZZLE_AMOUNT => { + expected_result.extend(puzzle_hash.as_slice()); + expected_result.extend(u64_to_bytes(coin_amount).as_slice()); + expected_result.extend( + TEST_CONSTANTS + .agg_sig_puzzle_amount_additional_data + .as_slice(), + ); + } + AGG_SIG_PARENT_AMOUNT => { + expected_result.extend(parent_id.as_slice()); + expected_result.extend(u64_to_bytes(coin_amount).as_slice()); + expected_result.extend( + TEST_CONSTANTS + .agg_sig_parent_amount_additional_data + .as_slice(), + ); + } + AGG_SIG_PARENT_PUZZLE => { + expected_result.extend(parent_id.as_slice()); + expected_result.extend(puzzle_hash.as_slice()); + expected_result.extend( + TEST_CONSTANTS + .agg_sig_parent_puzzle_additional_data + .as_slice(), + ); + } + AGG_SIG_ME => { + expected_result.extend(coin.coin_id().as_slice()); + expected_result.extend(TEST_CONSTANTS.agg_sig_me_additional_data.as_slice()); + } + _ => {} + }; + let mut a: Allocator = make_allocator(LIMIT_HEAP); + let spend = Spend::new( + a.new_atom(parent_id.as_slice()).expect("should pass"), + coin_amount, + a.new_atom(puzzle_hash.as_slice()) + .expect("test should pass"), + Arc::new(Bytes32::try_from(coin.coin_id()).expect("test should pass")), + ); + + let spend = OwnedSpend::from(&a, spend); + + let result = make_aggsig_final_message(opcode, msg, &spend, &TEST_CONSTANTS); + assert_eq!(result, expected_result); + } +} diff --git a/crates/chia-consensus/src/gen/mod.rs b/crates/chia-consensus/src/gen/mod.rs index 246d2bd15..263a83e24 100644 --- a/crates/chia-consensus/src/gen/mod.rs +++ b/crates/chia-consensus/src/gen/mod.rs @@ -1,5 +1,6 @@ mod coin_id; mod condition_sanitizers; +pub mod condition_tools; pub mod conditions; pub mod flags; pub mod get_puzzle_and_solution; diff --git a/crates/chia-consensus/src/large_spendbundle_validation_test.clsp.hex b/crates/chia-consensus/src/large_spendbundle_validation_test.clsp.hex new file mode 100644 index 000000000..9df1ce763 --- /dev/null +++ b/crates/chia-consensus/src/large_spendbundle_validation_test.clsp.hex @@ -0,0 +1 @@ +ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff0f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff1f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff2f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff3f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff4f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff5f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff6f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff7f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82008f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82009f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200a080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200a180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200a280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200a380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200a480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200a580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200a680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200a780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200a880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200a980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200aa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200ab80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200ac80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200ad80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200ae80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200af80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200b080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200b180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200b280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200b380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200b480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200b580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200b680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200b780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200b880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200b980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200ba80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200bb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200bc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200bd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200be80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200bf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200c080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200c180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200c280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200c380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200c480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200c580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200c680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200c780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200c880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200c980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200ca80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200cb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200cc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200cd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200ce80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200cf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200d080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200d180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200d280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200d380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200d480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200d580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200d680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200d780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200d880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200d980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200da80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200db80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200dc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200dd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200de80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200df80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200e080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200e180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200e280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200e380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200e480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200e580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200e680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200e780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200e880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200e980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200ea80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200eb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200ec80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200ed80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200ee80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200ef80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200f080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200f180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200f280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200f380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200f480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200f580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200f680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200f780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200f880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200f980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200fa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200fb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200fc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200fd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200fe80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8200ff80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82010f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82011f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82012f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82013f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82014f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82015f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82016f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82017f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82018f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82019f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201a080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201a180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201a280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201a380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201a480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201a580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201a680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201a780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201a880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201a980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201aa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201ab80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201ac80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201ad80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201ae80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201af80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201b080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201b180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201b280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201b380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201b480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201b580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201b680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201b780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201b880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201b980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201ba80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201bb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201bc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201bd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201be80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201bf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201c080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201c180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201c280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201c380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201c480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201c580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201c680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201c780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201c880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201c980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201ca80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201cb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201cc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201cd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201ce80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201cf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201d080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201d180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201d280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201d380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201d480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201d580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201d680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201d780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201d880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201d980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201da80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201db80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201dc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201dd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201de80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201df80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201e080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201e180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201e280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201e380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201e480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201e580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201e680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201e780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201e880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201e980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201ea80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201eb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201ec80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201ed80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201ee80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201ef80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201f080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201f180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201f280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201f380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201f480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201f580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201f680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201f780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201f880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201f980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201fa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201fb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201fc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201fd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201fe80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8201ff80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82020f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82021f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82022f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82023f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82024f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82025f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82026f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82027f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82028f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82029f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202a080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202a180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202a280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202a380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202a480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202a580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202a680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202a780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202a880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202a980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202aa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202ab80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202ac80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202ad80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202ae80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202af80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202b080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202b180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202b280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202b380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202b480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202b580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202b680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202b780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202b880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202b980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202ba80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202bb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202bc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202bd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202be80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202bf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202c080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202c180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202c280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202c380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202c480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202c580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202c680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202c780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202c880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202c980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202ca80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202cb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202cc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202cd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202ce80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202cf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202d080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202d180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202d280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202d380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202d480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202d580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202d680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202d780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202d880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202d980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202da80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202db80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202dc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202dd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202de80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202df80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202e080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202e180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202e280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202e380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202e480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202e580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202e680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202e780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202e880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202e980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202ea80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202eb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202ec80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202ed80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202ee80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202ef80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202f080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202f180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202f280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202f380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202f480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202f580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202f680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202f780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202f880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202f980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202fa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202fb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202fc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202fd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202fe80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8202ff80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82030f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82031f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82032f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82033f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82034f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82035f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82036f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82037f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82038f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82039f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203a080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203a180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203a280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203a380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203a480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203a580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203a680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203a780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203a880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203a980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203aa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203ab80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203ac80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203ad80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203ae80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203af80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203b080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203b180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203b280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203b380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203b480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203b580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203b680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203b780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203b880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203b980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203ba80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203bb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203bc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203bd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203be80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203bf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203c080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203c180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203c280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203c380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203c480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203c580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203c680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203c780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203c880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203c980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203ca80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203cb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203cc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203cd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203ce80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203cf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203d080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203d180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203d280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203d380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203d480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203d580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203d680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203d780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203d880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203d980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203da80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203db80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203dc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203dd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203de80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203df80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203e080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203e180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203e280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203e380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203e480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203e580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203e680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203e780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203e880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203e980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203ea80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203eb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203ec80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203ed80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203ee80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203ef80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203f080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203f180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203f280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203f380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203f480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203f580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203f680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203f780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203f880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203f980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203fa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203fb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203fc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203fd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203fe80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8203ff80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82040f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82041f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82042f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82043f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82044f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82045f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82046f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82047f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82048f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82049f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204a080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204a180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204a280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204a380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204a480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204a580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204a680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204a780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204a880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204a980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204aa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204ab80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204ac80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204ad80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204ae80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204af80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204b080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204b180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204b280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204b380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204b480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204b580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204b680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204b780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204b880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204b980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204ba80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204bb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204bc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204bd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204be80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204bf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204c080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204c180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204c280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204c380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204c480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204c580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204c680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204c780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204c880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204c980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204ca80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204cb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204cc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204cd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204ce80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204cf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204d080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204d180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204d280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204d380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204d480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204d580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204d680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204d780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204d880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204d980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204da80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204db80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204dc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204dd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204de80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204df80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204e080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204e180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204e280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204e380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204e480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204e580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204e680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204e780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204e880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204e980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204ea80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204eb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204ec80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204ed80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204ee80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204ef80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204f080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204f180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204f280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204f380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204f480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204f580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204f680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204f780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204f880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204f980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204fa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204fb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204fc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204fd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204fe80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8204ff80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82050f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82051f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82052f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82053f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82054f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82055f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82056f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82057f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82058f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82059f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205a080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205a180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205a280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205a380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205a480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205a580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205a680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205a780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205a880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205a980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205aa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205ab80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205ac80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205ad80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205ae80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205af80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205b080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205b180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205b280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205b380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205b480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205b580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205b680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205b780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205b880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205b980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205ba80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205bb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205bc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205bd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205be80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205bf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205c080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205c180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205c280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205c380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205c480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205c580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205c680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205c780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205c880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205c980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205ca80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205cb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205cc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205cd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205ce80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205cf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205d080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205d180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205d280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205d380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205d480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205d580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205d680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205d780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205d880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205d980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205da80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205db80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205dc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205dd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205de80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205df80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205e080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205e180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205e280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205e380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205e480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205e580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205e680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205e780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205e880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205e980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205ea80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205eb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205ec80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205ed80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205ee80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205ef80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205f080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205f180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205f280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205f380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205f480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205f580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205f680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205f780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205f880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205f980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205fa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205fb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205fc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205fd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205fe80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8205ff80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82060f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82061f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82062f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82063f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82064f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82065f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82066f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82067f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82068f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82069f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206a080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206a180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206a280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206a380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206a480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206a580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206a680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206a780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206a880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206a980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206aa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206ab80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206ac80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206ad80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206ae80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206af80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206b080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206b180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206b280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206b380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206b480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206b580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206b680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206b780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206b880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206b980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206ba80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206bb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206bc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206bd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206be80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206bf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206c080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206c180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206c280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206c380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206c480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206c580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206c680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206c780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206c880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206c980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206ca80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206cb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206cc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206cd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206ce80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206cf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206d080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206d180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206d280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206d380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206d480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206d580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206d680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206d780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206d880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206d980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206da80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206db80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206dc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206dd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206de80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206df80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206e080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206e180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206e280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206e380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206e480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206e580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206e680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206e780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206e880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206e980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206ea80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206eb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206ec80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206ed80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206ee80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206ef80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206f080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206f180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206f280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206f380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206f480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206f580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206f680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206f780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206f880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206f980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206fa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206fb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206fc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206fd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206fe80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8206ff80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82070f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82071f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82072f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82073f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82074f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82075f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82076f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82077f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82078f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82079f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207a080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207a180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207a280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207a380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207a480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207a580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207a680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207a780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207a880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207a980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207aa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207ab80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207ac80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207ad80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207ae80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207af80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207b080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207b180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207b280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207b380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207b480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207b580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207b680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207b780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207b880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207b980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207ba80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207bb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207bc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207bd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207be80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207bf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207c080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207c180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207c280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207c380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207c480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207c580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207c680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207c780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207c880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207c980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207ca80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207cb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207cc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207cd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207ce80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207cf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207d080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207d180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207d280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207d380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207d480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207d580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207d680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207d780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207d880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207d980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207da80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207db80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207dc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207dd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207de80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207df80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207e080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207e180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207e280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207e380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207e480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207e580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207e680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207e780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207e880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207e980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207ea80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207eb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207ec80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207ed80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207ee80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207ef80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207f080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207f180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207f280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207f380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207f480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207f580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207f680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207f780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207f880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207f980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207fa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207fb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207fc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207fd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207fe80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8207ff80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82080f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82081f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82082f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82083f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82084f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82085f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82086f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82087f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82088f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82089f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208a080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208a180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208a280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208a380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208a480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208a580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208a680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208a780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208a880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208a980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208aa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208ab80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208ac80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208ad80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208ae80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208af80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208b080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208b180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208b280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208b380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208b480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208b580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208b680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208b780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208b880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208b980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208ba80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208bb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208bc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208bd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208be80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208bf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208c080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208c180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208c280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208c380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208c480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208c580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208c680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208c780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208c880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208c980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208ca80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208cb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208cc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208cd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208ce80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208cf80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208d080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208d180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208d280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208d380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208d480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208d580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208d680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208d780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208d880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208d980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208da80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208db80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208dc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208dd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208de80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208df80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208e080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208e180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208e280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208e380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208e480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208e580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208e680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208e780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208e880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208e980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208ea80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208eb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208ec80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208ed80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208ee80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208ef80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208f080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208f180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208f280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208f380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208f480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208f580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208f680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208f780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208f880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208f980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208fa80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208fb80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208fc80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208fd80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208fe80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff8208ff80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82090f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82091f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82092f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82093f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82094f80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095080ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095180ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095280ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095380ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095480ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095580ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095680ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095780ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095880ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095980ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095a80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095b80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095c80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095d80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095e80ffff33ffa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ff82095f8080 \ No newline at end of file diff --git a/crates/chia-consensus/src/spendbundle_validation.rs b/crates/chia-consensus/src/spendbundle_validation.rs index 6f4d939e9..8058274be 100644 --- a/crates/chia-consensus/src/spendbundle_validation.rs +++ b/crates/chia-consensus/src/spendbundle_validation.rs @@ -1,7 +1,78 @@ -use clvmr::{ENABLE_BLS_OPS_OUTSIDE_GUARD, ENABLE_FIXED_DIV}; - +use crate::allocator::make_allocator; use crate::consensus_constants::ConsensusConstants; +use crate::gen::condition_tools::make_aggsig_final_message; use crate::gen::flags::{ALLOW_BACKREFS, DISALLOW_INFINITY_G1, ENABLE_MESSAGE_CONDITIONS}; +use crate::gen::opcodes::{ + AGG_SIG_AMOUNT, AGG_SIG_ME, AGG_SIG_PARENT, AGG_SIG_PARENT_AMOUNT, AGG_SIG_PARENT_PUZZLE, + AGG_SIG_PUZZLE, AGG_SIG_PUZZLE_AMOUNT, +}; +use crate::gen::owned_conditions::OwnedSpendBundleConditions; +use crate::gen::validation_error::ErrorCode; +use crate::spendbundle_conditions::get_conditions_from_spendbundle; +use chia_bls::BlsCache; +use chia_bls::PairingInfo; +use chia_protocol::SpendBundle; +use clvmr::{ENABLE_BLS_OPS_OUTSIDE_GUARD, ENABLE_FIXED_DIV, LIMIT_HEAP}; +use std::sync::{Arc, Mutex}; +use std::time::{Duration, Instant}; + +// currently in mempool_manager.py +// called in threads from pre_validate_spend_bundle() +// returns (error, cached_results, new_cache_entries, duration) +pub fn validate_clvm_and_signature( + spend_bundle: &SpendBundle, + max_cost: u64, + constants: &ConsensusConstants, + height: u32, + cache: &Arc>, +) -> Result<(OwnedSpendBundleConditions, Vec, Duration), ErrorCode> { + let start_time = Instant::now(); + let mut a = make_allocator(LIMIT_HEAP); + let sbc = get_conditions_from_spendbundle(&mut a, spend_bundle, max_cost, height, constants) + .map_err(|e| e.1)?; + let npcresult = OwnedSpendBundleConditions::from(&a, sbc); + let iter = npcresult.spends.iter().flat_map(|spend| { + let condition_items_pairs = [ + (AGG_SIG_PARENT, &spend.agg_sig_parent), + (AGG_SIG_PUZZLE, &spend.agg_sig_puzzle), + (AGG_SIG_AMOUNT, &spend.agg_sig_amount), + (AGG_SIG_PUZZLE_AMOUNT, &spend.agg_sig_puzzle_amount), + (AGG_SIG_PARENT_AMOUNT, &spend.agg_sig_parent_amount), + (AGG_SIG_PARENT_PUZZLE, &spend.agg_sig_parent_puzzle), + (AGG_SIG_ME, &spend.agg_sig_me), + ]; + condition_items_pairs + .into_iter() + .flat_map(move |(condition, items)| { + let spend_clone = spend.clone(); + items.iter().map(move |(pk, msg)| { + ( + pk, + make_aggsig_final_message( + condition, + msg.as_slice(), + &spend_clone, + constants, + ), + ) + }) + }) + }); + let unsafe_items = npcresult + .agg_sig_unsafe + .iter() + .map(|(pk, msg)| (pk, msg.as_slice().to_vec())); + let iter = iter.chain(unsafe_items); + // Verify aggregated signature + let (result, added) = cache + .lock() + .unwrap() + .aggregate_verify(iter, &spend_bundle.aggregated_signature); + if !result { + return Err(ErrorCode::BadAggregateSignature); + } + Ok((npcresult, added, start_time.elapsed())) +} pub fn get_flags_for_height_and_constants(height: u32, constants: &ConsensusConstants) -> u32 { let mut flags: u32 = 0; @@ -38,7 +109,15 @@ pub fn get_flags_for_height_and_constants(height: u32, constants: &ConsensusCons mod tests { use super::*; use crate::consensus_constants::TEST_CONSTANTS; + use crate::gen::condition_tools::u64_to_bytes; + use chia_bls::{sign, G2Element, SecretKey, Signature}; + use chia_protocol::{Bytes, Bytes32}; + use chia_protocol::{Coin, CoinSpend, Program}; + use clvm_utils::tree_hash_atom; + use hex::FromHex; + use hex_literal::hex; use rstest::rstest; + use std::sync::Arc; #[rstest] #[case(0, 0)] @@ -51,4 +130,287 @@ mod tests { expected_value ); } + + #[test] + fn test_validate_no_pks() { + let test_coin = Coin::new( + hex!("4444444444444444444444444444444444444444444444444444444444444444").into(), + hex!("3333333333333333333333333333333333333333333333333333333333333333").into(), + 1, + ); + + let solution = Bytes::new( + hex!( + "ff\ +ff33\ +ffa02222222222222222222222222222222222222222222222222222222222222222\ +ff01\ +80\ +80" + ) + .to_vec(), + ); + let spend = CoinSpend::new(test_coin, Program::new(vec![1_u8].into()), solution.into()); + let coin_spends: Vec = vec![spend]; + let spend_bundle = SpendBundle { + coin_spends, + aggregated_signature: Signature::default(), + }; + validate_clvm_and_signature( + &spend_bundle, + TEST_CONSTANTS.max_block_cost_clvm, + &TEST_CONSTANTS, + 236, + &Arc::new(Mutex::new(BlsCache::default())), + ) + .expect("SpendBundle should be valid for this test"); + } + + #[test] + fn test_validate_unsafe() { + let sk_hex = "52d75c4707e39595b27314547f9723e5530c01198af3fc5849d9a7af65631efb"; + let sk = SecretKey::from_bytes(&<[u8; 32]>::from_hex(sk_hex).unwrap()).unwrap(); + + let test_coin = Coin::new( + hex!("4444444444444444444444444444444444444444444444444444444444444444").into(), + hex!("3333333333333333333333333333333333333333333333333333333333333333").into(), + 1, + ); + + let solution = hex!("ffff31ffb0997cc43ed8788f841fcf3071f6f212b89ba494b6ebaf1bda88c3f9de9d968a61f3b7284a5ee13889399ca71a026549a2ff8568656c6c6f8080").to_vec(); + // ((49 0x997cc43ed8788f841fcf3071f6f212b89ba494b6ebaf1bda88c3f9de9d968a61f3b7284a5ee13889399ca71a026549a2 "hello")) + + let spend = CoinSpend::new(test_coin, Program::new(vec![1_u8].into()), solution.into()); + let msg = b"hello"; + let sig = sign(&sk, msg); + let coin_spends: Vec = vec![spend]; + let spend_bundle = SpendBundle { + coin_spends, + aggregated_signature: sig, + }; + validate_clvm_and_signature( + &spend_bundle, + TEST_CONSTANTS.max_block_cost_clvm, + &TEST_CONSTANTS, + 236, + &Arc::new(Mutex::new(BlsCache::default())), + ) + .expect("SpendBundle should be valid for this test"); + } + + #[test] + fn test_go_over_cost() { + let test_coin = Coin::new( + hex!("9dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2").into(), + hex!("9dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2").into(), + 1_000_000_000, + ); + let my_str = include_str!("large_spendbundle_validation_test.clsp.hex"); + let solution = hex::decode(my_str).expect("loading known file"); + // this solution makes 2400 CREATE_COIN conditions + + let spend = CoinSpend::new(test_coin, Program::new(vec![1_u8].into()), solution.into()); + + let coin_spends: Vec = vec![spend.clone()]; + + let spend_bundle = SpendBundle { + coin_spends, + aggregated_signature: G2Element::default(), + }; + let result = validate_clvm_and_signature( + &spend_bundle, + TEST_CONSTANTS.max_block_cost_clvm / 2, // same as mempool_manager default + &TEST_CONSTANTS, + 236, + &Arc::new(Mutex::new(BlsCache::default())), + ); + assert!(matches!(result, Ok(..))); + let result = validate_clvm_and_signature( + &spend_bundle, + TEST_CONSTANTS.max_block_cost_clvm / 3, // lower than mempool_manager default + &TEST_CONSTANTS, + 236, + &Arc::new(Mutex::new(BlsCache::default())), + ); + assert!(matches!(result, Err(ErrorCode::CostExceeded))); + } + + #[test] + fn test_validate_aggsig_me() { + let sk_hex = "52d75c4707e39595b27314547f9723e5530c01198af3fc5849d9a7af65631efb"; + let sk = SecretKey::from_bytes(&<[u8; 32]>::from_hex(sk_hex).unwrap()).unwrap(); + + let full_puz = Bytes32::new(tree_hash_atom(&[1_u8]).to_bytes()); + let test_coin = Coin::new( + hex!("4444444444444444444444444444444444444444444444444444444444444444").into(), + full_puz, + 1, + ); + + let solution = hex!("ffff32ffb0997cc43ed8788f841fcf3071f6f212b89ba494b6ebaf1bda88c3f9de9d968a61f3b7284a5ee13889399ca71a026549a2ff8568656c6c6f8080").to_vec(); + // ((50 0x997cc43ed8788f841fcf3071f6f212b89ba494b6ebaf1bda88c3f9de9d968a61f3b7284a5ee13889399ca71a026549a2 "hello")) + + let spend = CoinSpend::new(test_coin, Program::new(vec![1_u8].into()), solution.into()); + let msg = b"hello"; + let mut result = msg.to_vec(); + result.extend( + [ + test_coin.coin_id().as_slice(), + TEST_CONSTANTS.agg_sig_me_additional_data.as_slice(), + ] + .concat(), + ); + let sig = sign(&sk, result.as_slice()); + let coin_spends: Vec = vec![spend]; + let spend_bundle = SpendBundle { + coin_spends, + aggregated_signature: sig, + }; + validate_clvm_and_signature( + &spend_bundle, + TEST_CONSTANTS.max_block_cost_clvm, + &TEST_CONSTANTS, + 1, + &Arc::new(Mutex::new(BlsCache::default())), + ) + .expect("SpendBundle should be valid for this test"); + } + + #[test] + fn test_validate_aggsig_parent_puzzle() { + let sk_hex = "52d75c4707e39595b27314547f9723e5530c01198af3fc5849d9a7af65631efb"; + let sk = SecretKey::from_bytes(&<[u8; 32]>::from_hex(sk_hex).unwrap()).unwrap(); + //let pk: PublicKey = sk.public_key(); //0x997cc43ed8788f841fcf3071f6f212b89ba494b6ebaf1bda88c3f9de9d968a61f3b7284a5ee13889399ca71a026549a2 + // panic!("{:?}", pk); + + let full_puz = Bytes32::new(tree_hash_atom(&[1_u8]).to_bytes()); + let test_coin = Coin::new( + hex!("4444444444444444444444444444444444444444444444444444444444444444").into(), + full_puz, + 1, + ); + + let solution = hex!("ffff30ffb0997cc43ed8788f841fcf3071f6f212b89ba494b6ebaf1bda88c3f9de9d968a61f3b7284a5ee13889399ca71a026549a2ff8568656c6c6f8080").to_vec(); + // ((48 0x997cc43ed8788f841fcf3071f6f212b89ba494b6ebaf1bda88c3f9de9d968a61f3b7284a5ee13889399ca71a026549a2 "hello")) + + let spend = CoinSpend::new( + test_coin, + Program::new(vec![1_u8].into()), + Program::new(solution.into()), + ); + let msg = b"hello"; + let mut result = msg.to_vec(); + result.extend( + [ + test_coin.parent_coin_info.as_slice(), + test_coin.puzzle_hash.as_slice(), + TEST_CONSTANTS + .agg_sig_parent_puzzle_additional_data + .as_slice(), + ] + .concat(), + ); + let sig = sign(&sk, result.as_slice()); + let coin_spends: Vec = vec![spend]; + let spend_bundle = SpendBundle { + coin_spends, + aggregated_signature: sig, + }; + validate_clvm_and_signature( + &spend_bundle, + TEST_CONSTANTS.max_block_cost_clvm, + &TEST_CONSTANTS, + TEST_CONSTANTS.hard_fork_height + 1, + &Arc::new(Mutex::new(BlsCache::default())), + ) + .expect("SpendBundle should be valid for this test"); + } + + #[test] + fn test_validate_aggsig_parent_amount() { + let sk_hex = "52d75c4707e39595b27314547f9723e5530c01198af3fc5849d9a7af65631efb"; + let sk = SecretKey::from_bytes(&<[u8; 32]>::from_hex(sk_hex).unwrap()).unwrap(); + + let full_puz = Bytes32::new(tree_hash_atom(&[1_u8]).to_bytes()); + let test_coin = Coin::new( + hex!("4444444444444444444444444444444444444444444444444444444444444444").into(), + full_puz, + 1, + ); + + let solution = hex!("ffff2fffb0997cc43ed8788f841fcf3071f6f212b89ba494b6ebaf1bda88c3f9de9d968a61f3b7284a5ee13889399ca71a026549a2ff8568656c6c6f8080").to_vec(); + // ((47 0x997cc43ed8788f841fcf3071f6f212b89ba494b6ebaf1bda88c3f9de9d968a61f3b7284a5ee13889399ca71a026549a2 "hello")) + + let spend = CoinSpend::new(test_coin, Program::new(vec![1_u8].into()), solution.into()); + let msg = b"hello"; + let mut result = msg.to_vec(); + result.extend( + [ + test_coin.parent_coin_info.as_slice(), + u64_to_bytes(test_coin.amount).as_slice(), + TEST_CONSTANTS + .agg_sig_parent_amount_additional_data + .as_slice(), + ] + .concat(), + ); + let sig = sign(&sk, result.as_slice()); + let coin_spends: Vec = vec![spend]; + let spend_bundle = SpendBundle { + coin_spends, + aggregated_signature: sig, + }; + validate_clvm_and_signature( + &spend_bundle, + TEST_CONSTANTS.max_block_cost_clvm, + &TEST_CONSTANTS, + TEST_CONSTANTS.hard_fork_height + 1, + &Arc::new(Mutex::new(BlsCache::default())), + ) + .expect("SpendBundle should be valid for this test"); + } + + #[test] + fn test_validate_aggsig_puzzle_amount() { + let sk_hex = "52d75c4707e39595b27314547f9723e5530c01198af3fc5849d9a7af65631efb"; + let sk = SecretKey::from_bytes(&<[u8; 32]>::from_hex(sk_hex).unwrap()).unwrap(); + + let full_puz = Bytes32::new(tree_hash_atom(&[1_u8]).to_bytes()); + let test_coin = Coin::new( + hex!("4444444444444444444444444444444444444444444444444444444444444444").into(), + full_puz, + 1, + ); + + let solution = hex!("ffff2effb0997cc43ed8788f841fcf3071f6f212b89ba494b6ebaf1bda88c3f9de9d968a61f3b7284a5ee13889399ca71a026549a2ff8568656c6c6f8080").to_vec(); + // ((46 0x997cc43ed8788f841fcf3071f6f212b89ba494b6ebaf1bda88c3f9de9d968a61f3b7284a5ee13889399ca71a026549a2 "hello")) + + let spend = CoinSpend::new(test_coin, Program::new(vec![1_u8].into()), solution.into()); + let msg = b"hello"; + let mut result = msg.to_vec(); + result.extend( + [ + test_coin.puzzle_hash.as_slice(), + u64_to_bytes(test_coin.amount).as_slice(), + TEST_CONSTANTS + .agg_sig_puzzle_amount_additional_data + .as_slice(), + ] + .concat(), + ); + let sig = sign(&sk, result.as_slice()); + let coin_spends: Vec = vec![spend]; + let spend_bundle = SpendBundle { + coin_spends, + aggregated_signature: sig, + }; + validate_clvm_and_signature( + &spend_bundle, + TEST_CONSTANTS.max_block_cost_clvm, + &TEST_CONSTANTS, + TEST_CONSTANTS.hard_fork_height + 1, + &Arc::new(Mutex::new(BlsCache::default())), + ) + .expect("SpendBundle should be valid for this test"); + } } diff --git a/tests/test_blscache.py b/tests/test_blscache.py index 9cf9bce0b..9f8472eb6 100644 --- a/tests/test_blscache.py +++ b/tests/test_blscache.py @@ -1,11 +1,100 @@ -from chia_rs import G1Element, PrivateKey, AugSchemeMPL, G2Element, BLSCache +from chia_rs import ( + SpendBundle, + CoinSpend, + Program, + G1Element, + GTElement, + PrivateKey, + AugSchemeMPL, + G2Element, + BLSCache, + Coin, + ConsensusConstants, + validate_clvm_and_signature, +) +from chia_rs.sized_bytes import bytes32 +from chia_rs.sized_ints import uint8, uint16, uint32, uint64, uint128 from typing import List from chia.util.hash import std_hash from chia.util.lru_cache import LRUCache +from chia.types.blockchain_format.program import Program as ChiaProgram from chia.util import cached_bls as cached_bls_old import pytest +DEFAULT_CONSTANTS = ConsensusConstants( + SLOT_BLOCKS_TARGET=uint32(32), + MIN_BLOCKS_PER_CHALLENGE_BLOCK=uint8(16), + MAX_SUB_SLOT_BLOCKS=uint32(128), + NUM_SPS_SUB_SLOT=uint32(64), + SUB_SLOT_ITERS_STARTING=uint64(2**27), + DIFFICULTY_CONSTANT_FACTOR=uint128(2**67), + DIFFICULTY_STARTING=uint64(7), + DIFFICULTY_CHANGE_MAX_FACTOR=uint32(3), + SUB_EPOCH_BLOCKS=uint32(384), + EPOCH_BLOCKS=uint32(4608), + SIGNIFICANT_BITS=uint8(8), + DISCRIMINANT_SIZE_BITS=uint16(1024), + NUMBER_ZERO_BITS_PLOT_FILTER=uint8(9), + MIN_PLOT_SIZE=uint8(32), + MAX_PLOT_SIZE=uint8(50), + SUB_SLOT_TIME_TARGET=uint16(600), + NUM_SP_INTERVALS_EXTRA=uint8(3), + MAX_FUTURE_TIME2=uint32(2 * 60), + NUMBER_OF_TIMESTAMPS=uint8(11), + GENESIS_CHALLENGE=bytes32.fromhex( + "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + ), + AGG_SIG_ME_ADDITIONAL_DATA=bytes32.fromhex( + "ccd5bb71183532bff220ba46c268991a3ff07eb358e8255a65c30a2dce0e5fbb" + ), + AGG_SIG_PARENT_ADDITIONAL_DATA=bytes32.fromhex( + "baf5d69c647c91966170302d18521b0a85663433d161e72c826ed08677b53a74" + ), + AGG_SIG_PUZZLE_ADDITIONAL_DATA=bytes32.fromhex( + "284fa2ef486c7a41cc29fc99c9d08376161e93dd37817edb8219f42dca7592c4" + ), + AGG_SIG_AMOUNT_ADDITIONAL_DATA=bytes32.fromhex( + "cda186a9cd030f7a130fae45005e81cae7a90e0fa205b75f6aebc0d598e0348e" + ), + AGG_SIG_PUZZLE_AMOUNT_ADDITIONAL_DATA=bytes32.fromhex( + "0f7d90dff0613e6901e24dae59f1e690f18b8f5fbdcf1bb192ac9deaf7de22ad" + ), + AGG_SIG_PARENT_AMOUNT_ADDITIONAL_DATA=bytes32.fromhex( + "585796bd90bb553c0430b87027ffee08d88aba0162c6e1abbbcc6b583f2ae7f9" + ), + AGG_SIG_PARENT_PUZZLE_ADDITIONAL_DATA=bytes32.fromhex( + "2ebfdae17b29d83bae476a25ea06f0c4bd57298faddbbc3ec5ad29b9b86ce5df" + ), + GENESIS_PRE_FARM_POOL_PUZZLE_HASH=bytes32.fromhex( + "d23da14695a188ae5708dd152263c4db883eb27edeb936178d4d988b8f3ce5fc" + ), + GENESIS_PRE_FARM_FARMER_PUZZLE_HASH=bytes32.fromhex( + "3d8765d3a597ec1d99663f6c9816d915b9f68613ac94009884c4addaefcce6af" + ), + MAX_VDF_WITNESS_SIZE=uint8(64), + MEMPOOL_BLOCK_BUFFER=uint8(10), + MAX_COIN_AMOUNT=uint64((1 << 64) - 1), + MAX_BLOCK_COST_CLVM=uint64(11000000000), + COST_PER_BYTE=uint64(12000), + WEIGHT_PROOF_THRESHOLD=uint8(2), + BLOCKS_CACHE_SIZE=uint32(4608 + (128 * 4)), + WEIGHT_PROOF_RECENT_BLOCKS=uint32(1000), + MAX_BLOCK_COUNT_PER_REQUESTS=uint32(32), + MAX_GENERATOR_SIZE=uint32(1000000), + MAX_GENERATOR_REF_LIST_SIZE=uint32(512), + POOL_SUB_SLOT_ITERS=uint64(37600000000), + SOFT_FORK2_HEIGHT=uint32(0), + SOFT_FORK4_HEIGHT=uint32(5716000), + SOFT_FORK5_HEIGHT=uint32(0), + HARD_FORK_HEIGHT=uint32(5496000), + HARD_FORK_FIX_HEIGHT=uint32(5496000), + PLOT_FILTER_128_HEIGHT=uint32(10542000), + PLOT_FILTER_64_HEIGHT=uint32(15592000), + PLOT_FILTER_32_HEIGHT=uint32(20643000), +) + + def test_instantiation() -> None: bls_cache = BLSCache() assert bls_cache.len() == 0 @@ -126,29 +215,25 @@ def test_cached_bls_flattening(): assert cached_bls.aggregate_verify(pks, [b"foobar"] * n_keys, aggsig) assert len(cached_bls.items()) == n_keys - gts = [ - bytes(pk.pair(AugSchemeMPL.g2_from_message(bytes(pk) + b"foobar"))) - for pk in pks - ] + gts = [pk.pair(AugSchemeMPL.g2_from_message(bytes(pk) + b"foobar")) for pk in pks] for key, value in cached_bls.items(): assert isinstance(key, bytes) assert isinstance(value, bytes) - assert value in gts - gts.remove(value) + reconstructed = GTElement.from_bytes(value) + assert reconstructed in gts + gts.remove(reconstructed) cache_copy = BLSCache() cache_copy.update(cached_bls.items()) assert len(cache_copy.items()) == n_keys - gts = [ - bytes(pk.pair(AugSchemeMPL.g2_from_message(bytes(pk) + b"foobar"))) - for pk in pks - ] + gts = [pk.pair(AugSchemeMPL.g2_from_message(bytes(pk) + b"foobar")) for pk in pks] for key, value in cache_copy.items(): assert isinstance(key, bytes) assert isinstance(value, bytes) - assert value in gts - gts.remove(value) + reconstructed = GTElement.from_bytes(value) + assert reconstructed in gts + gts.remove(reconstructed) def test_cached_bls_repeat_pk(): @@ -214,3 +299,49 @@ def test_bad_cache_size(): expected_exception=OverflowError, match="out of range integral type conversion attempted", ) + + +def test_validate_clvm_and_sig(): + cache = BLSCache() + puz_reveal = Program.to(1) + coin = Coin( + bytes.fromhex( + "4444444444444444444444444444444444444444444444444444444444444444" + ), + puz_reveal.get_tree_hash(), + 200, + ) + + sol_bytes = bytes.fromhex( + "ffff32ffb08578d10c07f5f086b08145a40f2b4b55f5cafeb8e6ed8c3c60e3ef92a66b608131225eb15d71fb32285bd7e1c461655fff8568656c6c6f8080" + ) + # ((50 0x8578d10c07f5f086b08145a40f2b4b55f5cafeb8e6ed8c3c60e3ef92a66b608131225eb15d71fb32285bd7e1c461655f "hello")) + solution = Program.from_bytes(sol_bytes) + coin_spends = [CoinSpend(coin, puz_reveal, solution)] + sk = AugSchemeMPL.key_gen( + bytes.fromhex( + "52d75c4707e39595b27314547f9723e5530c01198af3fc5849d9a7af65631efb" + ) + ) + sig = AugSchemeMPL.sign( + sk, + ( + ChiaProgram.to("hello").as_atom() + + coin.name() + + DEFAULT_CONSTANTS.AGG_SIG_ME_ADDITIONAL_DATA + ), # noqa + ) + + new_spend = SpendBundle(coin_spends, sig) + + (sbc, additions, duration) = validate_clvm_and_signature( + new_spend, + DEFAULT_CONSTANTS.MAX_BLOCK_COST_CLVM, + DEFAULT_CONSTANTS, + DEFAULT_CONSTANTS.HARD_FORK_HEIGHT + 1, + cache, + ) + + assert sbc is not None + assert additions is not None + assert duration is not None diff --git a/wheel/generate_type_stubs.py b/wheel/generate_type_stubs.py index 8c8ee653f..9da1c1cd0 100644 --- a/wheel/generate_type_stubs.py +++ b/wheel/generate_type_stubs.py @@ -305,6 +305,14 @@ def confirm_not_included_already_hashed( proof: bytes, ) -> bool: ... +def validate_clvm_and_signature( + new_spend: SpendBundle, + max_cost: int, + constants: ConsensusConstants, + peak_height: int, + cache: Optional[BLSCache], +) -> Tuple[SpendBundleConditions, List[Tuple[SpendBundleConditions, List[Tuple[bytes32, bytes]]]], float]: ... + def get_conditions_from_spendbundle( spend_bundle: SpendBundle, max_cost: int, diff --git a/wheel/python/chia_rs/chia_rs.pyi b/wheel/python/chia_rs/chia_rs.pyi index 4fc806c61..696ad8c69 100644 --- a/wheel/python/chia_rs/chia_rs.pyi +++ b/wheel/python/chia_rs/chia_rs.pyi @@ -49,6 +49,14 @@ def confirm_not_included_already_hashed( proof: bytes, ) -> bool: ... +def validate_clvm_and_signature( + new_spend: SpendBundle, + max_cost: int, + constants: ConsensusConstants, + peak_height: int, + cache: Optional[BLSCache], +) -> Tuple[SpendBundleConditions, List[Tuple[SpendBundleConditions, List[Tuple[bytes32, bytes]]]], float]: ... + def get_conditions_from_spendbundle( spend_bundle: SpendBundle, max_cost: int, diff --git a/wheel/src/api.rs b/wheel/src/api.rs index 7ab98ef3c..cc016e0f1 100644 --- a/wheel/src/api.rs +++ b/wheel/src/api.rs @@ -13,7 +13,9 @@ use chia_consensus::gen::solution_generator::solution_generator_backrefs as nati use chia_consensus::merkle_set::compute_merkle_set_root as compute_merkle_root_impl; use chia_consensus::merkle_tree::{validate_merkle_proof, MerkleSet}; use chia_consensus::spendbundle_conditions::get_conditions_from_spendbundle; -use chia_consensus::spendbundle_validation::get_flags_for_height_and_constants; +use chia_consensus::spendbundle_validation::{ + get_flags_for_height_and_constants, validate_clvm_and_signature, +}; use chia_protocol::{ BlockRecord, Bytes32, ChallengeBlockInfo, ChallengeChainSubSlot, ClassgroupElement, Coin, CoinSpend, CoinState, CoinStateFilters, CoinStateUpdate, EndOfSubSlotBundle, Foliage, @@ -51,6 +53,7 @@ use pyo3::types::PyList; use pyo3::types::PyTuple; use pyo3::wrap_pyfunction; use std::iter::zip; +use std::sync::{Arc, Mutex}; use crate::run_program::{run_chia_program, serialized_length}; @@ -67,8 +70,8 @@ use clvmr::serde::{node_from_bytes, node_from_bytes_backrefs}; use clvmr::ChiaDialect; use chia_bls::{ - hash_to_g2 as native_hash_to_g2, BlsCache, DerivableKey, GTElement, PublicKey, SecretKey, - Signature, + hash_to_g2 as native_hash_to_g2, BlsCache, DerivableKey, GTElement, PairingInfo, PublicKey, + SecretKey, Signature, }; #[pyfunction] @@ -358,6 +361,30 @@ fn fast_forward_singleton<'p>( )) } +#[pyfunction] +#[pyo3(name = "validate_clvm_and_signature")] +pub fn py_validate_clvm_and_signature( + new_spend: &SpendBundle, + max_cost: u64, + constants: &ConsensusConstants, + peak_height: u32, + cache: Option, +) -> PyResult<(OwnedSpendBundleConditions, Vec, f32)> { + let real_cache = cache.unwrap_or_default(); + let (owned_conditions, additions, duration) = validate_clvm_and_signature( + new_spend, + max_cost, + constants, + peak_height, + &Arc::new(Mutex::new(real_cache)), // TODO: use cache properly + ) + .map_err(|e| { + let error_code: u32 = e.into(); + PyErr::new::(error_code) + })?; // cast validation error to int + Ok((owned_conditions, additions, duration.as_secs_f32())) +} + #[pyfunction] #[pyo3(name = "get_conditions_from_spendbundle")] pub fn py_get_conditions_from_spendbundle( @@ -413,7 +440,8 @@ pub fn chia_rs(_py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> { m.add_function(wrap_pyfunction!(confirm_included_already_hashed, m)?)?; m.add_function(wrap_pyfunction!(confirm_not_included_already_hashed, m)?)?; - // multithread validattion + // spendbundle validation + m.add_function(wrap_pyfunction!(py_validate_clvm_and_signature, m)?)?; m.add_function(wrap_pyfunction!(py_get_conditions_from_spendbundle, m)?)?; m.add_function(wrap_pyfunction!(py_get_flags_for_height_and_constants, m)?)?;