From 1d6f8dcab41d229ff9ec5b3940f285c57a9fc5c5 Mon Sep 17 00:00:00 2001 From: Ana Hobden Date: Tue, 18 Jun 2019 16:10:30 -0700 Subject: [PATCH 1/5] Add proptest support Signed-off-by: Ana Hobden --- Cargo.toml | 7 +- rust-toolchain | 1 + src/kv.rs | 22 ++- .../{integration_tests => integration}/mod.rs | 28 +-- tests/integration/raw.rs | 82 +++++++++ tests/integration_tests/raw.rs | 161 ------------------ tests/test.rs | 14 +- 7 files changed, 136 insertions(+), 179 deletions(-) create mode 100644 rust-toolchain rename tests/{integration_tests => integration}/mod.rs (95%) create mode 100644 tests/integration/raw.rs delete mode 100644 tests/integration_tests/raw.rs diff --git a/Cargo.toml b/Cargo.toml index db8158ec..522d7a24 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,10 @@ edition = "2018" default = [] # Enable integration tests with a running TiKV and PD instance. # Use $PD_ADDRS, comma separated, to set the addresses the tests use. -integration-tests = [] +integration-tests = ["property-testing"] +# Enable propery testing features with `proptest`. +property-testing = ["proptest", "proptest-derive"] + [lib] name = "tikv_client" @@ -28,6 +31,8 @@ serde = "1.0" serde_derive = "1.0" tokio-core = "0.1" tokio-timer = "0.2" +proptest = { version = "0.9", optional = true } +proptest-derive = { version = "0.1.0", optional = true } [dependencies.kvproto] git = "https://github.com/pingcap/kvproto.git" diff --git a/rust-toolchain b/rust-toolchain new file mode 100644 index 00000000..bba994f5 --- /dev/null +++ b/rust-toolchain @@ -0,0 +1 @@ +nightly-2019-06-01 \ No newline at end of file diff --git a/src/kv.rs b/src/kv.rs index 1fb7f412..17ab4bae 100644 --- a/src/kv.rs +++ b/src/kv.rs @@ -4,6 +4,15 @@ use std::ops::{ Bound, Deref, DerefMut, Range, RangeFrom, RangeFull, RangeInclusive, RangeTo, RangeToInclusive, }; use std::{fmt, str, u8}; +#[cfg(feature = "proptest-derive")] +use proptest::{collection::size_range, arbitrary::any_with}; +#[cfg(feature = "proptest-derive")] +use proptest_derive::Arbitrary; + +#[cfg(feature = "proptest-derive")] +const PROPTEST_KEY_MAX: usize = 1024 * 2; // 2 KB +#[cfg(feature = "proptest-derive")] +const PROPTEST_VALUE_MAX: usize = 1024 * 16; // 16 KB use crate::{Error, Result}; @@ -56,7 +65,11 @@ impl<'a> fmt::Display for HexRepr<'a> { /// accept an `Into`, which means all of the above types can be passed directly to those /// functions. #[derive(Default, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] -pub struct Key(Vec); +#[cfg_attr(feature = "proptest-derive", derive(Arbitrary))] +pub struct Key( + #[cfg_attr(feature = "proptest-derive", proptest(strategy = "any_with::>((size_range(PROPTEST_KEY_MAX), ()))"))] + Vec +); impl Key { #[inline] @@ -170,7 +183,11 @@ impl fmt::Debug for Key { /// accept an `Into`, which means all of the above types can be passed directly to those /// functions. #[derive(Default, Clone, Eq, PartialEq, Hash)] -pub struct Value(Vec); +#[cfg_attr(feature = "proptest-derive", derive(Arbitrary))] +pub struct Value( + #[cfg_attr(feature = "proptest-derive", proptest(strategy = "any_with::>((size_range(PROPTEST_VALUE_MAX), ()))"))] + Vec +); impl Value { #[inline] @@ -239,6 +256,7 @@ impl fmt::Debug for Value { /// Many functions which accept a `KvPair` accept an `Into`, which means all of the above /// types (Like a `(Key, Value)`) can be passed directly to those functions. #[derive(Default, Clone, Eq, PartialEq)] +#[cfg_attr(feature = "proptest-derive", derive(Arbitrary))] pub struct KvPair(Key, Value); impl KvPair { diff --git a/tests/integration_tests/mod.rs b/tests/integration/mod.rs similarity index 95% rename from tests/integration_tests/mod.rs rename to tests/integration/mod.rs index f304a669..4d13751a 100644 --- a/tests/integration_tests/mod.rs +++ b/tests/integration/mod.rs @@ -1,14 +1,14 @@ -// Copyright 2019 TiKV Project Authors. Licensed under Apache-2.0. - -mod raw; - -use std::env::var; -const ENV_PD_ADDR: &str = "PD_ADDR"; - -pub fn pd_addr() -> Vec { - var(ENV_PD_ADDR) - .expect(&format!("Expected {}:", ENV_PD_ADDR)) - .split(",") - .map(From::from) - .collect() -} +// Copyright 2019 TiKV Project Authors. Licensed under Apache-2.0. + +mod raw; + +use std::env::var; +const ENV_PD_ADDR: &str = "PD_ADDR"; + +pub fn pd_addr() -> Vec { + var(ENV_PD_ADDR) + .expect(&format!("Expected {}:", ENV_PD_ADDR)) + .split(",") + .map(From::from) + .collect() +} diff --git a/tests/integration/raw.rs b/tests/integration/raw.rs new file mode 100644 index 00000000..bce7d63e --- /dev/null +++ b/tests/integration/raw.rs @@ -0,0 +1,82 @@ +// Copyright 2019 TiKV Project Authors. Licensed under Apache-2.0. + +use crate::{arb_batch, integration::pd_addr}; +use proptest::{arbitrary::{any, any_with}, collection::size_range, proptest}; +use futures::executor::block_on; +use tikv_client::{KvPair, raw::Client, Config, Value}; + +proptest! { + #[test] + fn point( + pair in any::(), + ) { + let client = block_on(Client::connect(Config::new(pd_addr()))).unwrap(); + + block_on( + client.put(pair.key().clone(), pair.value().clone()) + ).unwrap(); + + let out_value = block_on( + client.get(pair.key().clone()) + ).unwrap(); + assert_eq!(Some(Value::from(pair.value().clone())), out_value); + + block_on( + client.delete(pair.key().clone()) + ).unwrap(); + } +} + +proptest! { + #[test] + fn batch( + kvs in arb_batch(any::(), None), + ) { + let client = block_on(Client::connect(Config::new(pd_addr()))).unwrap(); + let keys = kvs.iter().map(|kv| kv.key()).cloned().collect::>(); + + block_on( + client.batch_put(kvs.clone()) + ).unwrap(); + + let out_value = block_on( + client.batch_get(keys.clone()) + ).unwrap(); + assert_eq!(kvs, out_value); + + block_on( + client.batch_delete(keys.clone()) + ).unwrap(); + } +} + +proptest! { + #[test] + fn scan( + kvs in arb_batch(any::(), None), + ) { + let client = block_on(Client::connect(Config::new(pd_addr()))).unwrap(); + let mut keys = kvs.iter().map(|kv| kv.key()).cloned().collect::>(); + keys.sort(); + // If we aren't getting values this is an empty vector, so use dummy values. + let start_key = keys.iter().cloned().next().unwrap_or(vec![0].into()); + let end_key = keys.iter().cloned().last().unwrap_or(vec![0].into()); + + block_on( + client.batch_put(kvs.clone()) + ).unwrap(); + + let out_value = block_on( + client.scan(start_key..=end_key, 10240) // Magic max number is TiKV intrinsic + ).unwrap(); + + // Since TiKV returns empty keys as tombstones in scans, we just check we can find all the items. + assert!(kvs.iter().all(|kv| { + out_value.iter().find(|out| kv == *out).is_some() + })); + + block_on( + client.batch_delete(keys.clone()) + ).unwrap(); + } +} \ No newline at end of file diff --git a/tests/integration_tests/raw.rs b/tests/integration_tests/raw.rs deleted file mode 100644 index 62eac24b..00000000 --- a/tests/integration_tests/raw.rs +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2019 TiKV Project Authors. Licensed under Apache-2.0. - -const NUM_TEST_KEYS: u32 = 100; -use crate::integration_tests::pd_addr; -use tikv_client::{raw::Client, Config, Key, KvPair, Value}; - -fn generate_key(id: i32) -> Key { - format!("testkey_{}", id).into_bytes().into() -} - -fn generate_value(id: i32) -> Value { - format!("testvalue_{}", id).into_bytes().into() -} - -async fn wipe_all(client: &Client) { - let test_key_start = generate_key(0); - let test_key_end = generate_key(NUM_TEST_KEYS as i32 - 1); - client - .delete_range(test_key_start..test_key_end) - .await - .expect("Could not delete test keys"); -} - -async fn connect() -> Client { - let client = Client::connect(Config::new(pd_addr())) - .await - .expect("Could not connect to tikv"); - wipe_all(&client).await; - client -} - -async fn test_empty(client: &Client) { - let test_key_start = generate_key(0); - let test_key_end = generate_key(NUM_TEST_KEYS as i32 - 1); - - assert!(client - .scan(test_key_start..test_key_end, NUM_TEST_KEYS) - .await - .expect("Could not scan") - .is_empty()); -} - -async fn test_existence<'a>( - client: &'a Client, - existing_pairs: &'a [KvPair], - not_existing_keys: Vec, -) { - let test_key_start = generate_key(0); - let test_key_end = generate_key(NUM_TEST_KEYS as i32 - 1); - - for pair in existing_pairs.iter().map(Clone::clone) { - let (key, value) = pair.into_inner(); - assert_eq!( - client - .get(key) - .await - .expect("Could not get value") - .expect("key doesn't exist"), - value.clone(), - ); - } - - for key in not_existing_keys.clone().into_iter() { - let r = client.get(key).await.expect("Cound not get value"); - assert!(r.is_none()); - } - - let mut existing_keys = Vec::with_capacity(existing_pairs.len()); - let mut existing_key_only_pairs = Vec::with_capacity(existing_pairs.len()); - for pair in existing_pairs.iter() { - let key = pair.key().clone(); - existing_keys.push(key.clone()); - existing_key_only_pairs.push(KvPair::new(key, Value::default())); - } - - let mut all_keys = existing_keys.clone(); - all_keys.extend_from_slice(¬_existing_keys); - - assert_eq!( - client - .batch_get(all_keys) - .await - .expect("Could not get value in batch"), - existing_pairs, - ); - - assert_eq!( - client - .batch_get(not_existing_keys) - .await - .expect("Could not get value in batch"), - Vec::new(), - ); - - assert_eq!( - client - .scan(test_key_start.clone()..test_key_end.clone(), NUM_TEST_KEYS) - .await - .expect("Could not scan"), - existing_pairs, - ); - - assert_eq!( - client - .scan(test_key_start.clone()..test_key_end.clone(), NUM_TEST_KEYS) - .key_only() - .await - .expect("Could not scan"), - existing_key_only_pairs, - ); -} - -#[runtime::test(runtime_tokio::Tokio)] -async fn basic_raw_test() { - let client = connect().await; - - test_empty(&client).await; - - assert!(client.put(generate_key(0), generate_value(0)).await.is_ok()); - let existing = &[KvPair::new(generate_key(0), generate_value(0))]; - test_existence(&client, existing, vec![generate_key(1), generate_key(2)]).await; - - let empty_pairs = Vec::new(); - assert!(client.delete(generate_key(0)).await.is_ok()); - test_existence( - &client, - &empty_pairs, - vec![generate_key(0), generate_key(1), generate_key(2)], - ) - .await; - - let pairs: Vec = (0..10) - .map(|i| KvPair::new(generate_key(i), generate_value(i))) - .collect(); - assert!(client.batch_put(pairs.clone()).await.is_ok()); - test_existence( - &client, - &pairs, - vec![generate_key(10), generate_key(11), generate_key(12)], - ) - .await; - - let keys: Vec = vec![generate_key(8), generate_key(9)]; - assert!(client.batch_delete(keys).await.is_ok()); - let mut pairs = pairs; - pairs.truncate(8); - test_existence( - &client, - &pairs, - vec![generate_key(8), generate_key(9), generate_key(10)], - ) - .await; - - wipe_all(&client).await; - test_existence( - &client, - &empty_pairs, - pairs.into_iter().map(|x| x.into_inner().0).collect(), - ) - .await; -} diff --git a/tests/test.rs b/tests/test.rs index 3bcc3962..5f4271c9 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -3,4 +3,16 @@ #![feature(async_await)] #[cfg(feature = "integration-tests")] -mod integration_tests; +mod integration; + +#[cfg(feature = "proptest")] +use proptest::strategy::Strategy; + +#[cfg(feature = "proptest")] +const PROPTEST_BATCH_SIZE_MAX: usize = 16; + +#[cfg(feature = "proptest")] +pub fn arb_batch(single_strategy: impl Strategy, max_batch_size: impl Into>) -> impl Strategy> { + let max_batch_size = max_batch_size.into().unwrap_or(PROPTEST_BATCH_SIZE_MAX); + proptest::collection::vec(single_strategy, 0..max_batch_size) +} \ No newline at end of file From ed3d1ab7a9f966bd08084aa4240b3f20300d10d8 Mon Sep 17 00:00:00 2001 From: Ana Hobden Date: Tue, 18 Jun 2019 16:32:18 -0700 Subject: [PATCH 2/5] fmt Signed-off-by: Ana Hobden --- src/kv.rs | 22 ++++++++++++++-------- tests/integration/raw.rs | 16 ++++++++-------- tests/test.rs | 7 +++++-- 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/kv.rs b/src/kv.rs index 17ab4bae..74d5347d 100644 --- a/src/kv.rs +++ b/src/kv.rs @@ -1,13 +1,13 @@ // Copyright 2019 TiKV Project Authors. Licensed under Apache-2.0. +#[cfg(feature = "proptest-derive")] +use proptest::{arbitrary::any_with, collection::size_range}; +#[cfg(feature = "proptest-derive")] +use proptest_derive::Arbitrary; use std::ops::{ Bound, Deref, DerefMut, Range, RangeFrom, RangeFull, RangeInclusive, RangeTo, RangeToInclusive, }; use std::{fmt, str, u8}; -#[cfg(feature = "proptest-derive")] -use proptest::{collection::size_range, arbitrary::any_with}; -#[cfg(feature = "proptest-derive")] -use proptest_derive::Arbitrary; #[cfg(feature = "proptest-derive")] const PROPTEST_KEY_MAX: usize = 1024 * 2; // 2 KB @@ -67,8 +67,11 @@ impl<'a> fmt::Display for HexRepr<'a> { #[derive(Default, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] #[cfg_attr(feature = "proptest-derive", derive(Arbitrary))] pub struct Key( - #[cfg_attr(feature = "proptest-derive", proptest(strategy = "any_with::>((size_range(PROPTEST_KEY_MAX), ()))"))] - Vec + #[cfg_attr( + feature = "proptest-derive", + proptest(strategy = "any_with::>((size_range(PROPTEST_KEY_MAX), ()))") + )] + Vec, ); impl Key { @@ -185,8 +188,11 @@ impl fmt::Debug for Key { #[derive(Default, Clone, Eq, PartialEq, Hash)] #[cfg_attr(feature = "proptest-derive", derive(Arbitrary))] pub struct Value( - #[cfg_attr(feature = "proptest-derive", proptest(strategy = "any_with::>((size_range(PROPTEST_VALUE_MAX), ()))"))] - Vec + #[cfg_attr( + feature = "proptest-derive", + proptest(strategy = "any_with::>((size_range(PROPTEST_VALUE_MAX), ()))") + )] + Vec, ); impl Value { diff --git a/tests/integration/raw.rs b/tests/integration/raw.rs index bce7d63e..055198ec 100644 --- a/tests/integration/raw.rs +++ b/tests/integration/raw.rs @@ -1,9 +1,9 @@ // Copyright 2019 TiKV Project Authors. Licensed under Apache-2.0. use crate::{arb_batch, integration::pd_addr}; -use proptest::{arbitrary::{any, any_with}, collection::size_range, proptest}; use futures::executor::block_on; -use tikv_client::{KvPair, raw::Client, Config, Value}; +use proptest::{arbitrary::any, proptest}; +use tikv_client::{raw::Client, Config, KvPair, Value}; proptest! { #[test] @@ -15,12 +15,12 @@ proptest! { block_on( client.put(pair.key().clone(), pair.value().clone()) ).unwrap(); - + let out_value = block_on( client.get(pair.key().clone()) ).unwrap(); assert_eq!(Some(Value::from(pair.value().clone())), out_value); - + block_on( client.delete(pair.key().clone()) ).unwrap(); @@ -38,12 +38,12 @@ proptest! { block_on( client.batch_put(kvs.clone()) ).unwrap(); - + let out_value = block_on( client.batch_get(keys.clone()) ).unwrap(); assert_eq!(kvs, out_value); - + block_on( client.batch_delete(keys.clone()) ).unwrap(); @@ -74,9 +74,9 @@ proptest! { assert!(kvs.iter().all(|kv| { out_value.iter().find(|out| kv == *out).is_some() })); - + block_on( client.batch_delete(keys.clone()) ).unwrap(); } -} \ No newline at end of file +} diff --git a/tests/test.rs b/tests/test.rs index 5f4271c9..84af126a 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -12,7 +12,10 @@ use proptest::strategy::Strategy; const PROPTEST_BATCH_SIZE_MAX: usize = 16; #[cfg(feature = "proptest")] -pub fn arb_batch(single_strategy: impl Strategy, max_batch_size: impl Into>) -> impl Strategy> { +pub fn arb_batch( + single_strategy: impl Strategy, + max_batch_size: impl Into>, +) -> impl Strategy> { let max_batch_size = max_batch_size.into().unwrap_or(PROPTEST_BATCH_SIZE_MAX); proptest::collection::vec(single_strategy, 0..max_batch_size) -} \ No newline at end of file +} From 325022ee83235ff41f70b9769c5a1a2b821a2329 Mon Sep 17 00:00:00 2001 From: Ana Hobden Date: Wed, 19 Jun 2019 15:56:30 -0700 Subject: [PATCH 3/5] Make proptest feature more consistent Signed-off-by: Ana Hobden --- src/kv.rs | 18 ++++++------ tests/integration/raw.proptest-regressions | 2 ++ tests/integration/raw.rs | 33 ++-------------------- tests/test.rs | 6 ++-- 4 files changed, 16 insertions(+), 43 deletions(-) create mode 100644 tests/integration/raw.proptest-regressions diff --git a/src/kv.rs b/src/kv.rs index 74d5347d..3239e8b4 100644 --- a/src/kv.rs +++ b/src/kv.rs @@ -1,17 +1,17 @@ // Copyright 2019 TiKV Project Authors. Licensed under Apache-2.0. -#[cfg(feature = "proptest-derive")] +#[cfg(feature = "property-testing")] use proptest::{arbitrary::any_with, collection::size_range}; -#[cfg(feature = "proptest-derive")] +#[cfg(feature = "property-testing")] use proptest_derive::Arbitrary; use std::ops::{ Bound, Deref, DerefMut, Range, RangeFrom, RangeFull, RangeInclusive, RangeTo, RangeToInclusive, }; use std::{fmt, str, u8}; -#[cfg(feature = "proptest-derive")] +#[cfg(feature = "property-testing")] const PROPTEST_KEY_MAX: usize = 1024 * 2; // 2 KB -#[cfg(feature = "proptest-derive")] +#[cfg(feature = "property-testing")] const PROPTEST_VALUE_MAX: usize = 1024 * 16; // 16 KB use crate::{Error, Result}; @@ -65,10 +65,10 @@ impl<'a> fmt::Display for HexRepr<'a> { /// accept an `Into`, which means all of the above types can be passed directly to those /// functions. #[derive(Default, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] -#[cfg_attr(feature = "proptest-derive", derive(Arbitrary))] +#[cfg_attr(feature = "property-testing", derive(Arbitrary))] pub struct Key( #[cfg_attr( - feature = "proptest-derive", + feature = "property-testing", proptest(strategy = "any_with::>((size_range(PROPTEST_KEY_MAX), ()))") )] Vec, @@ -186,10 +186,10 @@ impl fmt::Debug for Key { /// accept an `Into`, which means all of the above types can be passed directly to those /// functions. #[derive(Default, Clone, Eq, PartialEq, Hash)] -#[cfg_attr(feature = "proptest-derive", derive(Arbitrary))] +#[cfg_attr(feature = "property-testing", derive(Arbitrary))] pub struct Value( #[cfg_attr( - feature = "proptest-derive", + feature = "property-testing", proptest(strategy = "any_with::>((size_range(PROPTEST_VALUE_MAX), ()))") )] Vec, @@ -262,7 +262,7 @@ impl fmt::Debug for Value { /// Many functions which accept a `KvPair` accept an `Into`, which means all of the above /// types (Like a `(Key, Value)`) can be passed directly to those functions. #[derive(Default, Clone, Eq, PartialEq)] -#[cfg_attr(feature = "proptest-derive", derive(Arbitrary))] +#[cfg_attr(feature = "property-testing", derive(Arbitrary))] pub struct KvPair(Key, Value); impl KvPair { diff --git a/tests/integration/raw.proptest-regressions b/tests/integration/raw.proptest-regressions new file mode 100644 index 00000000..4a7a90ef --- /dev/null +++ b/tests/integration/raw.proptest-regressions @@ -0,0 +1,2 @@ +cc 41dbd920d0c2c5f1c1f5a0b6d1b6d2ddde11a7152d01ef26fb8171be8d84d29d # shrinks to kvs = [KvPair(0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001AB74E45D7EF209B7DA92268B61C98B872067D1E8B9EF6C95C70C7142ED7B11543A8CB76B2BCC915B1388C44ED75E946751CDCCC79B71C79D07A54AB1875886AECD9368E531FE11D28E1374536550EE1C67950C8B6501F69A2B927B91FADDC12FD599F03966C9FF6706A68AE0D6F6E131EC8225B7EC8D09463402CF4C19E6A4CE20F7550C7FC0737B7D485ADFD865AA140B4452BDAB0448B6AA6D5EDD24DE99999A535A00B18800A32C6A7CC541ADE0CED5139E1CA40448EB079626CBCA21DFB1D7DCCEEA6875271AAB419287F3F3C195FA6270D4C3CC0EF9BFB5FADAD1AF247608904B39AD28FC5BF61576F99C6B798F5DB9D356F2F182722812599BA59A5B1A82E247FD521B230BA85A03E36B909C1E89554F44ABA209FE861FD455E4AFA985336D5233D8E4F3F7A3A3B66269B806EB0014515E552D8C4EB7B3669329282E0A8A453FD0B2D9551160C0E4EF1BB5E49E75DBF48A865A9067FDFC41073F4361E923B349E3DFD636A4D3CE6EC8F4C020C9BEC5105B666A4E0E31A95F6A8CD0566003A6C98349C8828BA2D4C1E53054A97BD3B7957EDFBAF2DD60B9F04A0575C7A0EFB1797EA11A9E36B9105504D240BFF2FFE30164B5AE5888F7AB1E5EA5BA0136FC6E07F795236960EC1A5DDC08E94B5DF1269783C7BE254CB7DD3A957DD9E12289A4FB722E4FE0D02AFE02AAECF125175D0681A9D4604662B08FF060221323E0A82F7586F2C30168766DD035FCDB0CF26FD712DDA701DB9E7DB93552D355DEF9A48A4FC9308E8F36A288C2DF0475EEAD6F5763811E2DC3887EB01000E24DCD26994FF4B085E442F43B327E584165D1810FC7DE78DFD945F30C8DD4445B7BC3FB6BFFA7C9E32220C39BCF10589E4B84907096A4BBA32423AA1C5CC1F0F7BCD900B89EDC7670F0B8F8F65F742DA427B1439237545681CCFE36856578C1C5F5364E78AA06272AA619536E6FAA7C86605DC42CC5EEEB017968A075479D078818DE7A8855BD05A97010FB3EB351CD3636960551D99828C795C32D83D6754CC747EB402CC1547906FD6F0963EF49B1AF12E9C52CDD195602BD0AEC53D8C94D9CFF84D481315BA27A13CAD31BEA7C1456947D75C8E7D3B837DF3FCABCF90232BF64DB91B2A36B2DB9CF02533AA95D4D16C18C0B4F8BCC3A0162974EB808F10872B07F622E474490730AA6806276C09E2CF71E142CDE896FA733B68781812F5DB0BEE967340C728E0EDFB9F2A9C8DE6C6FAA8FC2408322630D678FAF984150590290639E58580D04900AE0F5DA626775031AC4BA811C0B06EEFB1E1E5ABC61D732F5353A1BE4CBC3125C93A2C1F0D885F4951E6386FB0A31FE0649E238E2B71B2C73A0BA4E0513A0990955C904172E40E90B7272832891260EF1417A8A76E28ED1787B5C414E5014A68DFDECFB7E72D6CC51ECDE5AF32DD3AE098874C75945ABC8822C01615B12BBEB31A4DCFA5A09FB8C62E80F460627C1F7479301B38F51A32144AF9FAF70C61E9B2BDF9D5683E80D13E7647AC6B5D87A52F92D914A5853F6FD63B09C3363B735D54F21391AF88D4928A2240D8403D8EDFDA0FB38E8F08A00473012F48B2564044CF4CC32FF4439F5FB5AAC6F771A5E1D7DDBA2F6B341639E728B8744278BD8433735454BE2EC2E3A34097B32A13E9FCD7EBE643E72DF40AD97E50C9178FBE3519D6F086FBB5C2A7D3E2DB426287EDAC19FA95BE293B6E9C692840D8AEACFCD94A914DEBCCF10E957984214824CA539A2EEADDF78F1D7FDDCD2F48B7C4ADE917091784297861FE349395B8B41C7D33370271E67CA80A842A0C292C3437CD113FA205F6E9541ACA4EB40405E252E0E48534F44E9F9D12299557B1C17330F9B1F26C3FA3F46C0400E5C2EAB14761FEE02E4B90AAF9A3A970B79F9F0A840B31FDEF8B6067AF30B4D5FCF2DD95DD4DA588C7F391D466E6B294009B6DFA39B8CAB365141277FC893CF0A94FDF1506453E7F52445F38D65F592AC30D36DC63E9A1F645DF3690971807157F90D19B8CD5636BB8CD4A29192FB2E48851CE679A2F7143DBF699F86DA48B04D6339B2BE4BA104A22DE94DC4D50E1B08AB3853A3477416C8166E9467BFDD0C940E296C5EF3C2E7E3280D238833470F524E306D824A2DA2AC854C4C0830C39BC6243B49AC55F0BF07BD8A33F6065AF21E3405F1632C57CAFEC8CB883971CB3534DCCCF11BA04293D6C42E04C7994D6C97658282DF87A07A2502846A81F08A40059C3A604E1B7CA8F581499E43D130D6F0FB9A3FB773142E4E8C4B57CCCC1DB9E63C5BD9B6F457056998EA527D58A456B26277F576E5C2F6549DD0D8A5C6996B268166510846A8E707D8B6279E962AC411431891ED1541F7CE7920C72ABE743C5826EBF3CA5E1A7A78BA25D87A82E062DF0886AF1BF9A488933270A8521D8749E0ABBA2FE75B4BBD0A8FE8EB96101502A886B9F14828971F8AEEC9974375CD1304DF248CF8D88B29298DF5E46D6BC79DB884F98BB0B994BB759283E5944F8981D5FCE30075579A0C0803A8E8C351E9366B5663C9EC5EAE47C2C7312FF97305BBE4CBF3470E350A000C67CD61244C296378C374CE1B362731F34CFEA1916CA0E3EDF2472C1B1C0F9773C72681614A113CA973C19CFB21E1A40148279B2A85D18FEFD13973729A09F057DABB6BA73489973A73DFBE8209649D31F490434864A5121B84E, 6B83E0D0D6F2A83FEE2C47641DBF8CC5A79B855C4AC33ED3B1E0395901DDAF65B8783AADA5392E03726A47A2D61F0E9285FF97CC3B355A87D3DDE4C8F3C5742AACF2049F22B7C4A682FFC4A798457FC0D135A2ADCC9622C9B2801F139743ABEF06C6508ADE89B2D4843D1E576B3E7BB74DF2EE217D338A1E21FB2A35E92CB231DB5F8F0F23A009811925F104FF3E44B7BE4741AFA744E85A40A0D5FDFFECBE4C53F753374EB3D29AD3559A82652D19586FCC63EEC545C196DD73EA7E15D46294C6C2241EC7BABBB575423615DC565772D3BB11C06791D0FC2EB85FBD265374D9695FC578C6F850C3FF8FD095BB4A09ABE72ECA28C1B8CE2B96608E0A32A0C368B356A70B7ABFFC8611C011AF354B528D79EE10D130A37F24ED9FA01A29F92F540DAD0A92ED65EA5D7EF9EF89437F4C8A7A33A11BD681D38E711A3A9551D2B88CE435BFCE168CA2C604A625A227681D38000BA4736F1B806605DF407C506E8CC2014CA50F6FDBD24E8A00B6F20899931E3B2A39CAE49A1E83B0E344CACAD494803655DE1A1F947DB08DDCDF86B3018C96945B42CF5129391BE6E8D185840153E48EBE922590FE57A93F00568AAD1866A53FA57ABC15DB1AFDCAB572FBA446209161C4F067CCB4E40BC6207C533FEAED99729EFF79C2D917780EEEB0AABDB3F36F263146598AF125A19E6C16A8EF7F38703DAFA1D79B8042D89C1DFB4ACE5DE61E3A8F6841AB6CEE4FD76096FD1124C1E868D939E14092C323B27E48CEFF2BFEA7F265AEB59652D1D5C8588004CEEACFAFDEF431906ABAA559E33F7A4CD81C89593423D936F59E81968A79E84C044AB5785FE7DFAAEC537E8723BABA2FF69465610ABDE6D4878BAA741328C6B9FE78D422D9CF7F5394A4B9A0DB22897DFF7CDA52EFCA90EFC1FB490BF43A674225B25EA558EBC006E87EC93EA10E239DF8CB4B52CD07BCF21A551BE7C2F00DB95C1DFDA962D6EE6246722127F20306029EDB2D724BF3FE5257C4E57B8A1FF5DD381F6876EB3300FB113CDCD5CD14915C7D11EDC130B490D38C9E9E89015FEE5A9BCD1B92059F0D89B987B0ABC8E94FFB5BC55D94815D654BECDA3D457494500296082AA84D6DD240DCB0971C6E800EF150EE6BE710157CB996C69F747E467DE81AE686127D8D30B936CF0564E6007298610D26C161A148299F88AEC13866149E2A709E5E6D762764EC274D43772722DFD40480FFA3A0C266945BDA4C24CBDED1D12AFF830E7B13EDEA1D8F4EB9461B89C672FDAD405E2C16F7054BE6B2FF76032C67F1FE54105B82D9C497BBE9BD0CC0C749E3E63D68A9756853B8711CF2EB128C156C4D17D8756BC40B24E48BECA4CA14E622ECA29BD6F11703A7B25DB653F1B2A6919482BF5BF346543777F11DA087478344083357F6BCA716776E239928B078744EBB2943B260D4F452C6CE33147AA362E0D1D5F4E6331AC3030F067839F08E347ED48ACA7734905C5936DB5240A2265CDCFDCF1412EA907F92CB1DCB706B28EBEA58BE1C100709CD1A964073FC5A31D32A8AA74A05676DFEFC162EDD5050300EC363182CBA81170F96CED92AD16241A9E3F26E63D739A927E272FD28992162FF8CB770AA4643364DD91CDEDE65459EB42D1F36850DB63FE8EFE0267D8A024C1E34BEFE2B2A689BE39AFACC0CCC0A3151F63E04D35080156A0480ECFC7F8A6F97E54CE55FD435AA59E5E92609E7F7299BABA8BB6D81404301B1E058942CEA27ADD56DA3D52AD56E3E6A93685E6805F6890648722E9F3496B1C056F5D9C0FDC120CC1817546EF0B8AAD02CADDE382D6A7B99B072F7C73039E2DC9AE759D8F8BE1FB82042637EF9757E8C9991D37CA39FD6968B45063FBDBCACF0C8EB5C3B25502B229CE1FB5A9BE8B72AF31CC05E4B8010D0FBD4C1E2091C30B0BD6E41A52885C83F5C8183F60E28B603712E0C3E8376CA8483B5AC08602CD9CAA621C98B2CF8A817BA8E10ECC544D4B81E966DA066F92627BAA8289D5F328A5576FD7EC15F0DE9DDFB687FE7068C61992F7DBAF8A0E8796AED257CC692B0A9F6812DBA2A200944700BB394F6A8B1EDF399C9E227A62900800FD278B3637383B7901E98BDADF1004205BE314DF14F1AD454BC6C14C2E793BCDAF7A0BB1001E93E9569AB0B609EFF037DD51E711DA89E6C7CDDAB29A298C18FCA1DCBD0C16F82CA03CBDAC13E363753AFDDED2E2DC9213561297E18FBCCECB4CE98C200445660DE8166DA867ACC1C0DCE44849AE83D5F41BDFC686FE14D4D25013394EC50525C364DF6F41DD08A5F2E3184E526D8D585810CF1D49BE77BE6A7E240056085F04367588DEA354D3DB6DB85D05CA7295E2FBDB9BFB36CCE268C7629F7CCFEAA7F00B3CE6BD9AA01F093F7268E51930FEC557480471836EE92D31A203DE4DA9E407ACCA3A5C9EEE7F7D3A8897FF34D9BD0F338391F4B8D94EE0950A9C911B7E7893356CB053ACC4CB8392C395742A1658FA3B763ED8C9546FBEE373DA85243CF8133A37B215AE21FDA607B9ABA0D5F90335BE5C85869952DEAC79736716A3EAF9463D169FFD411E9778F63A9391355A45DC95F33E29FA3764BA667210CC7BBAAF2ED852A654B669AEF0C38D62A749A46E873500496625416BF9C161326310F991FD4769FE0DAB5C0FD402CF98FA46D15D2AECC3BB610825E044E45A1BB54560D557FB06BCFE01F313FA3911938D45A2C4243F1018745551E0ED2DA3A303ACEF762DE0FB35C0ADC3B6A4C9A3D5B5C2F9ED0AFC34B9F920071C943310DD7C323AE3F8B9C70DE3C174742055A2A8EBB76E6EA0B0026F2E3B4B6548F52AD08BEF3088FFAE731FF53E7788F8D884A62B80644CABD28B7AD3C76BCCD001620F7093989B61989E4EE7DFEB6AD0B27534BA6857138A022DAFCACAAE943730609C6145FBFABE9A3786C6B7DFE4D3AA4841FCEEDA92BB5FD0BC2F2007FBDFE06D81518C6E58511A004E64E1F543EF787DAD7F79BCC45E9934E5EAC442967ACAE71D3F081C6D15748DC3EDC44F7D82D14AF6E3351DB88A1EBA6F1E4F0B204032EFF17130B02DB6A376388E6361753BAE5519835EA85AB3FF8380EA84C1D0E7013E70671664988923C7CC327E6BC9A1A65C4A1AD9F9237E17E7CD94B40AB4D054CCD0C8FC4189D6B0569FAB7EECBF198ACD0EA6B5ED379AB7FC1F590A2E02F43D0E8C724358828609BD78BB61DBFC78F3649A47D4CC8478C0CB44412F80DCA0C2D5F7F236B680CCA5DF94BF73AB0304A133E97A3EB0B2300C297D8F0EDD0409E7DAD33E5847E1E26A25D5D44F52997BFA0EF940DC1BE0CC7D259BA529678204877CF03EA474CC599EE30B870719699B04D6FA7A30D48D7401B8090C6A086237968AF7CD0EC1BA36546455DE03305A783BA0FE2E25BA10AA68FB70011AD2B5846B6707979361EB31024E656E317B456977B0A9B3ADF1C65DB2C82C9682C5116820DD3C0AD0FAE8B85E2EFC2E1595385A5962B02FEE60B67918EFAAB22F3834C1D1D330876DA9D0DE085286E81039E7AFEEDFEEE395B63D01FCA953321D208FB45E22C63EB425A70AA7481703CF8880BD384F83A76699DAEEA51A2C92F8066EB8DD316C046B845428AF8C26B889DDC7A71733276A33562EB3C325D36E2D8FF1B9711C88D8CCB0CD5463DC83FFF914796DE796365CAD6285B61A754AB9640CEC2FEE32FED63CE1CC234283E7CF61AE43C6B67108B043A0FAD2D0DF8C086A588400FA28BB38761D4A826DE0BB84EB49E6792005FA9779E282B895A3CCE9869E7435F987FFD64C6D622980E0AF9EDC14188955005D2ADADAF8A567C5351164DEA3A60BEB97EA82894540D8259E9B32A2B57EA038AA18C55EDE0E5C2572666AFC4C6A4AE913F9A5D86A4DB6A5CCAA5F5CC3FFBA1585D672C650DB03015D1FF553947255C80782C25CB4F0069AE3CA31968BF0484C15089C48AE25164D5011E2D3F57210AADC2F3AE03EB5ECEE136B254E61113CDFFB50BAFD9AC234F731D02BC6AE807CD07403F5D6C38795868FF4E0768B51D631009C38DBCC0AE3DEBA181E58650FE0F03FD38CC8494DC7EF1DF1C1DDF81F2AA1184AF612D4F1547EC48D9042222C6B38AEC70E22E9FCEE30A52D25F04C7C9E5605F931C4E0B019355447E6E6CBA22365EC77548575879D52F4CED4C09E2A8447D01585EEECFDF2E2269264064C981E66F41F66E18D76C759ED0B4B55D45C00CFAD582B6B6782E36FD03F0B67455D7E6F29C7CF16C88F438B4F137D8667194FC18E0252C37501DB1955BBAF3912B515316E0E528E86F00EC1122242A4703B8428F3B16F9DF12C2E697D6F0276AE9229B510EE06975CFE0A1FD1D1E045F5BE217F99F52BC3F7D17A144D3B1D0ECBD2823AF171B3950F8B8D0E753B83154B358311D790B09FE27BA372B4C1AA49AC1AAA2E0F8966FE78E963EDBFAFE4BDA79B9961C7A606F710166B624424AB6F27F5FB1F16B1FAB2BE2BDE5BB83B2B2D69C2344F0862409D0E107C34CB90D614BFCF8A502CD68D4E887EE38632A5904BE424D2603B9396F8A50EAB5006F6514A1434AE30493970579D1518E0600CF45659025EB6EBD6A00C3AB8A4E1714194788BC5B75D04569B0C7247A16F29C605C51A19C06366E96EDDCFB320A6B5E6A7F2D39E393054D7417931167A8986C1FA71DD31B74E74F5FDF91D5E3B5A3FCF380783A0CF7963DD1600A6F9032493D1672C021D654A6AFDB6368594B1109F126896123190BE1E8F1C8D04BCEC3EBD295E9A984EB9EFC2E47F70F013D8446EA9051F420103FB6A7B3857A6B593A3B12B6060587350B4D5C7D1C086A261297FDCE6DFAD752C288CA67FF618CC90F723EB3EE89AFD9CF3B88C1104694F888CD5E2C514AA1A5EB2FBD7475F222A64179E2B5C86510D347C100B5AFEB599766656A42EF3DC40421B0BFCA4BD36A836C0B68D96A313E13AAC8D3199990047D724C51A51F6AEEA1CCB93F2C93D044A1F0FA0516181E873D9E4BA88DBD833D2A3B0C0E0370A63A936EA9B8D8B5251D157C56B564562343B4FAD0B98704DCDB74829450A557E257E9DCC3E2B53A46FF7A5C3EC07708E53038EAA861229340F4A724AFD506A6E7E5E900C76F32305F8E11B27DAF02CFA6D828B98C1029D6099AAEDE294D5922B077B21E52CA5EB5AF73B3807FD3A7B90CD6F38B93DA1C8A2A6D2978FA0CAD2E84074E9AE560FC976AD64EA00D3213F629225D4710E9DC02C4E642E405B7F239DD49181EDC10F67370BEE305D058F3D2E63164C0762922BB0762530DE815BC15F0552198D4A028CCA36034CC8677AD85E875E4B86243C61B98F5954C240142F21A2AE0147D9003E5FC6B31C072175CF41B964CABE34C8629BF8B23F8D660161E40029372D540475671D4C0F4B8B6F5FF44036B6DAE66153C8FCCECA98D90DF68A0B5374C7433A69DF6C59A75CFD4C154EEDB0B2345C56DE4E481F13663E4EA98930F5C1CFBAD938F9E4B222335BD73090425C97A03D92534E49EC69F836DF4FDD188D54694C77538345B8C120F9C8888DC996D3BDD0257AC2321AFED6D67E31DD3794A6B75B5DBAFE9D0CDD8B10AE6137E0191E500BCFFFF0B306BF17F744B3289AC0F9820460ABF83F3E49AE133298CCDC1E442B6D528325E21D8F3ADF87FAE29FC6102BDA0C3822BAE89E349F603ECF2079852B78D3E52E65391F276DC762A5768449F53F0B449A8D4846A75F945A32741C15BE3D298994F280F7DB83048F10935444055E91213E696EA40D88C38C5409CFFC434718179F5B89209015CD1F3C38C92583B36AC4EBE1742187A214D712B646C8F5426E56C6677CF8E5EDF163CF115F591C3C90F18D6DC5B12D409B4C8EE89388E9F2565915F786A6653F15A97412AC47E599711D5DD12BE26014E264C0A07F787C8F2BF4B877B6033BEB9FB3B27779167D33B9C62964CF8C897C926026792110D61F64B2321902EE8F20B45122D143348EBA27F1457D6363985B1040B22356A0E168C0DFDBF53963E97AC904148BE56D66EBC5D0323CB9490A6FA4D495A3DF5D2DF49609D29D3E84D750DBE1B8274E4597CE48175EB4F86A2939F060B5F754A3B0585B77024BDBBBD6F3FB82617FEC49E94B2F7349BD732D237D0CB58AEEB8B90A77DAD55E72F216AD9977882C14BA4B4C95692D126CBC943D146B768CA54A11BA55BFC4B495A2D4772DB59105CEB4D39D45121AD66EF9F80A6003F4AC7C1AF1E2B511C56653B9885D5E770BCF6F0C9C684F76A7F85042AABE8D2508786B8AD4601C3405CF4066B346717A517E1C3769BDB730E07DF2868D2149577D2B64523DC4B06A49F5AAB12CD86EBFE026F9891C3E22D244E041ED4D4CCBCC20D7A7AF333DBDDE7240A7A7856F032DF54C5488B794DF729C29C93BDF15BF4EFA9FF5BEC2E45E61BD13F469E024131123646BECBED43AAAB8EC67E9729D1BD21F801195E67A7964D8F1664E538796679EAD42829082A51A6BBB3F94EC9A8B5DBBF235042DA706634C4A0A5869567F0F08C87D4B27F5DF31069740330165C164FDECDAEFD30F81675118674525ACDE56D34A4076882CDBDD95D6874FDDB250E83075D3E194FAF55C4D4DA5CFFE63BCA5C85813B10AB95552D5C10CCBC5E65F837CE40895048282A9FF3A29B33015278F3E4ECE29E96958D64681E4BCF13354B8F92C53A5B50C4B5EF2B86B5F4C759A5A7E0B769E6B31B7A3B08246D46EA9CA1D68D14ADDA69D25A272B3C97F1C6DE366D57BCBA83A0EEE43E786873CD8B76DA1B300650D4B96694183788AD94E9AD9D1BC74AFC1135D8AD1CD6D75A57FBF92D4DC0F5DEA537F4F889B95711B2ABA899C89A7FB307734972B05D20297E2E97876D7CA6C42BE0BA7F17FCCD6D9DAC33149A5AA45A069E5F88ED1C80218B8791514759DB0F425C0DE57BA6425B750FCA0A8EEA5D5331F5820B980BF57CB0319124658221988D9717A15CC3FC28A580CC99316422F9FE19B14D395F89188B787FA698DB9A1C61DC039AC061342C82969D85E3413BC4DDD0F1F5FF8566B0701B8BBF4CACE3C1D7F33901FFC2985263251A851565A637EF0C566839966D02B2E945DF230CB33A6566E59ED96A6C350BC3139A708E65767E1ED2B3A96A7A91F0965EF75A19F2006BD75575F164689653C21C936E33EFEE47C9360723BDC4FFA7819DAA4665D24ABFF3E59E7558E2A7509E721758D9D7A1C4D5273B59FCEA74F9457518D45A665F252E626D19BF2441E7CB5E2266D1676923AA76B3E316DFB82BAE5A984D735295A0C99E0990530E08AC0DD3A35349A4FBA081F91A3DEF7144CD6E8B1F57BA716DF4058888343854D92D4ECC0B1B9A01995527E798A02FA81459A89EE6E877D89A61A845CA3B00F1649288158F6926DE90066A6B2A4D2E8E45242C4471886C9385AA5AA07F2C01B942C889A325F6369A68F5809ED4F5C7C680640A067E49987BEFAE1A365922F9212D52DAC23015E967CBBBE79AC06E6E2A12708373F91DEA468E9EA84F2F959ED66B0AB99F882735038EE9257993B27609AF21465A7D48B9935723DD3344EDD3F5469FDEA5B3BEC13559143CEB560C9A9C87E67F7D0F0583B086A73E2C7DEB6697711B0B054F8F944618893A2CB681246953997129BC03301A2863C86539112E2E30C0DD5D674B6F6D6EDC911CA57990E3FAF4320819893D04CE320B5449A49C8D65905F2927D270A9701355AFE93A4B83EF6D8E503A8A808380CFAE60D585D2498F5B2ADC141F5B22C454B69998C109FACFC96B4B807262DF363D6C7BB634129A64B02B12D4460833F2133F860D17C000B595355915CB366F9390BF806937F2171A86B62C696C085507234CF0BA8E637A80F3AF848AC0910B022D813AE3CABEF61811755487111647B6351D22250615F0B0E7FC695C9B3EA81DDDFE1A3BC655BB85A8D8398613DFA594E4FCE5EC512CDF5E7658898B6D2D1803ADCC55E5565689501AB62A9F257464A6A3F7028215BA93D072D85D37BEE12B82CA0E4643FDE342A8A050B5C43E20637E5FE63EB7B51843B46FBD6996AD1F652752F705ADD0E267D6939E089D5DA4D3BF9E4A5F22A4EF0206141E01CDA406690B4325B134F14DC623D6BC650DB415E92E598589651F4EB5D3875A13E4E1DCC300DAF1FAE97298635D455B92BB556DC11583AD19F5E293A29D00C0EF9DE624A7A4E766B54773FEC52A7207C407768C4B0AC365F05F7FC1A44B4A8D355A7D3B21DCF8CD9BD6FD773E4C73C86DC661916C6349BD75478BD3B9132C7E39F1DC2EB780B07C59BF3F683E36EE29F8559D28DA710F67144CB7CC6BA6468C699036CD6CAF1C4E1EDFC41C2DC6B5BACC6A5F3270A60B6C7C25A7DE0BE1BEFF0019124F8A07F89D05EFA040FB3262AAE2AA0ACEC2B32EDDB750FFE715552E735F9A99AB6DC233BBA022EBA7EC073C42C04BAA40E193CA7DC4A6EA0EE8DC4BD0CB0DA08BBFE19BAF30E1D7FA89961E74BD45DF1AD6567DC4E185E8F6BD887265409662F89143601AD84AE88C7288DA54A5DDD3608B3AF5741CBB3E5E20E80BA7C2190AEA567F1B28E9150CF0A3CB684D246E76A291398E6B474EE7202CFAEF2BD0223845BD8C4E625CCB608C71DD75621E7D07CC89AB4EE263156E86456F525120105B935DD63C83CFA74D5949FA70A179E55782BEED041A78BB3547042DF0209BB567A7C18B1B56208A79AB0F44479AF565AFACE5161E3214F0DF8D5460D783AB3A418AEDEBA61A6DF00F63715FB723E18FB42FD348A0AF2A6AC80328E1B8DE14105DEDC76BCA401322292FBFECD6F7176E9FCA74A2F83FBC9A8B92DE949D317089063411FD58042883993E19A159ABE62CC2908F73AA57BEC9EA526DA4C4761CF408BD5BD5A039C980B7939BF43FF7BDF5D994F5687D0E5515A981453F026A4790159FEE9F9CB0487C4B0A262DA31341ED17BF784B1255B0E33B91F5132BCD6325532566F0DA6447255AB7FB392ACFDC003ACB14CEC6FBCF6687804C23042E681116661F4A2DBE566FE1671BB315BBF82EF397FD13E13AAFF232056A14090D6F009410E1A716BE3D9F625B9949D5FB4FCC43C610A418ECE3DF07AE9ED346FCB72D37D4CB7FA92570E3E06FFC9069AE5618539C55A6D7A947B35BC6DE1124127BB790B204A6AABBEDC38719068800789352591731DAF4AA66DF2F68711564B3A72EFF65BC78DF6983C5912A701E1FA426152EA52146E8F12D132094842483A3CE880B94BB0F22AD27DEE4B65ED45EDB0972B5BDEC5F40B04BE73A9F0247D9D7D0CF3ECC6BA233FF378AE9EDA5ADE4BC599E55561F74E2657667CE9AB7F03EA653522071AF0AA66BE92539BEE33B1E511771F7E360CD3A525C2D39C6623F85E692052F8FC4FE1A66848537FB72C9FB9A90E173C7126529BB34C80ED2A968A4A789A47ABB62009E0301E841F8062C729E3D4327EC2E31A6BF7EBA0D267D6728E846501BC058FB0A0563FE90E3C802DC09A41BA8792FE80617D906512E4BF1EDCC5FF92E22EAA7941A72267A79A5CD604EBD6EAA5C2FF5B56FCAFB67F126A55AD85E5CF52AB6EC8196C7E91E09C6816C9AEDD16728E59F2067107B5FA5499019AD3FD48AE8DA9C365A063CF0EFA5359C480572EBF1AFA1042726622BAD996BA77659A89F2845A2BB1223D0F1F73DF0A587209BAD78D3F0EBF023B62C26C5CE0E3F86538407B2AF25543A96C9F02FF1065109F591E314F004AD427CB01BC3F26E3B9BB5503334F9920C4F493011383549427CED599E1A153B523B6DE1CB51EF33477ED6CC36F473B854A33C1267089E28BD2B680E5FD769AC9DEB2383FFCB5C3FF79058382B41149962DF0345A633C29F294EA4F4736DF9559B643E87278EBE5EA74429D339E846941C862DC97648C78B98963D32D525D61D44B04A0F289CA845599E14F6AE1201773588C135C1439357A5889A3AEF9BE740002C23A02E4C7AD5719579BA9F4D948392CA4219307ED04FFD32B35BAEF80F3AC5AE698D4D319DEDA9B0B67EABF460751D38C568682DE919663F4C1F57C899E097A9D03B38CB0D9375CC6DDD14D24C617E5AB482C6C592C4143A922816CF62FACDB9B4BB29D9B2F968A84CDC443D1DE0ED3D1DC0D16629BAA9F0953381C523C7D0CF7F8B32898E1B50BE1415047710B00BA76DF8AB0239483CAD28DE31B582ACA72608E0A5692E63AFB56CE10341350ED09514ECDBEB62958ED0C833A1FDE4F924535C75B5CB898FA680ECC7FAE84AECB4D9F832C0C71A912BF4252A651B8F30229EC9B5458E726CC03A2E368280595AD5AA7CD682EDD195C90977F2823B754073523CAF5E64A1BC9762C304CA04FA0AB13DD8C87EB8B8612EF5BD06E27DFBF470367522E9A72ED44A8506A3DA9BB58540C953FF23ABD17C28FC59D2D309B8E1557CAA38F91AC50B64D55B1DA04BB07C65C2F2681BD3D52E0FF0478B9EE0DC352A655B42E98810B18661548C53525752C9A16BBF8AFCEECD482A2DD5AEFACD3B47F69A1AFCC1823AE5F3BF9BEF33C84330086E1F9681622CC683A4981A8B1580978E01E26A1C0B519602C68553C5672170EA2B15EA7CD5B93413B781A9E0177E76F296BECBBCF15BF5EA213E5BFC08D53FC4874AA84A98DD2DF4DA81D4755BC3DCF6B9B17B733FC5AB26CE1E936576FFAED87A1E7651FD56DFB27BCC8D9C8011D848639D39CF40E15B9962444848AE257F8F86660610CD6A7D8CD84F58E0A7703C3B395C9AA0828D9DCC5958B8C15D1FCB3CE5804C402C26C8D05C03C898CD70411A0BA1B35A1B27FB5CB409FD8831B6EAD0300CF480526091607829E459A48E8A9D98AFB1F2972177811931D2B63DA27C6B2F3681257A5827B5791907688A2B1EB7D0C9262D963E01DB02D48842C8549B83E224F652842710E0EE330ED15EEE24C650E6AE086FFC3888A7419213CF4998FA0570C9DD9EB0FC6800AB968A1833DF66FFA3DC03603E5F2149BD6D13494AE5784122889FC38950979677FD8E4B5D444746F83FE91CF3D8EAF8569F8FB11EE8F62B25FD533AE715D5B9ED034B7AAF6C46927B3AEC95F71DE54D02AD35FB3AD6E9DFA08A8425906C0FF3E92DB6E183B28ED853555079D4C2AE8A45E7C40D62295E2B3DE027FDBF4F140F4BDE7B0BF4C3A1A03DAA49EC5B0F002647D6B78918FDA1CFD3F521AFD8AE9C379FDC44324AAF3FA915F2BA898E818A3468940627561FDD8A6B30A9A645F3C97EDD6A19EF197FA89DA191DB94DC5D40B5B9BFE0790B708D71CEAFAC6A89EE87D3DC79100572043EC7A3F748CAFDC180A5C24F1BC8993EF083EB6451D43F864E0354EC70CD0EC1C30469AA98B082DB5A40EE16D844DF965EF20843082546D535DD47EDAB1280435E7B2C79365F8055C8CF12405CA35630398D9AEDE768E553CB218C383C8B21111A2F470DFE4165580622B31C068B037FDA136D110640DF483B38DE7A6555983D3BE2E846B630B4B3D987DC0928B67A6E3E98FDA516063A68D37E7A1554858634989E0FEF034D0CB99C39C641E266225F05417D161BF00F7C88B19F80B4CF1070DA072315548548E78D8F6A8F989CA697130A2782E15CA61C0640A4FDB5BC0660B988F5BAC3D0DCF3BA4D5CEA1BA70A0B33EFE90950709FBE4AB2010206F41FD6BF565CC5DD01EE9DA3EDAA1B7E75A4878EA047849C4CD0DDA9E6913B906D6F076972207D6961054F8445ECB022F35B08E55DEF2D8D839110AB06C6B4B013105E1A7AA9B169779F2D53DAFD7A37E51F287CC338B96E0600989D51D28133C1957219BBEBECDA76140127C778FE3B0793ECF99F0C5F73C473DC2BB03FB2FA7151B3C2F6A3FD821BB507DA6CFB895E8D64D0656FB7DED605E3102DB049F8879BA3684FF2D7D8ED092B6A8565D2EACF07A5AB17F03D886464B038476B3DB29EDFC404E29A509FCE677D8B3AF3085B6FB21AE952870179F3F786EDA333F1EC27ADE6F318D76AAA84CBED768595F6A5425CB898F36C5E7CDB038C1149CF0A84F8EA568FAE16BAE702964A5A44FE14E03CE780A13E167A385770AF2CBBCCDF79E28DEFCF14B996B11BD34B9A7E54A1D4418709EA7E775AC5AF1DF7DBF7CD9C2BCA3A7F586F86CB5F9A4D3EFC9D31D10CA126EF19BF977FEEAA8D3348E67C360855A908A51C97AB6BEFC0EA600AF4E1385B720069D0CA24FC46B5C93EAC8461A707246C68CAB6AD0C44387FAEDE5794943555A16872A14320BB48BCD420E0EBEA1622DB498C73D57905A9E7285D39588B76195F00E61474F5954C61D56615F484CDDFC73E75A74B6C1F0F9BCB367386C665A91853A5970ABD505C0F41ED557BA19EC5C351F2F29C1532D5ADBDBA53BA8AEF597DB09A79D904FFE94ABEEB45FC1BA0695C25931DB6CAD8210CCFDC98D7302A6BB106A0DDBF72886ECDD30AF9C7588A916EA5332F8B6CAFFCD029CD006BACD820BA5011E67EC47F70F1923D59BC7808EC32231CF66E5AA51B0D72FF01B909DFE1D7D98F1DD36DC5E01A0D7F846736DC4A5A30495C8510AFA324731FF33CA15A92830AA3D13C1A2AF3E0C5B838C85C7B70B57F54990E30DF01F571E890B3039E8E1C4D43C592A19343620407A952EB2F59F58F29CC3A1C1C9F583BE7C9D2B5BC922491A89F41D668D31BB3DE84D605A8156D2D0B67B0E8CB5DD07B4C8D708021CEA1B27D2A9EA468763FB93F0F42DF9709BA3789FFB987E64A498D6F303DE5C9D3F088733025EC227BE7B686828AC8C1B1039FF01337AC863AB058FAD3ABCEB69EE0048C611D1DB52BC6A9AE900FD90A72C4BEDA0371DDF016310E42F50BAB2D5588FD7FFAEE532B01D84962DFEB8B282DB4C309164EC0C1EF9D4ECF4FD832884B33BC78C2FDB0533B9AAEEC0D491DAFFE536475E45A0D65E7196D988D25C91339A85EE546FBE7FE7263D20F8676FAF1191A5971B8F67FE7DC952C0C086BE913FC6C499ED1D9BD1D8AC5726B10AEC4DEA6E34A6A64D8354CAB41787E5DF44223B3A31A077C3D4D1415BA840A66A25C06F42277F83EE7B09889687DA8979DD1106DBD3FDBB22D41EF1B42A223705E8A8D2B10BC89B7B1BD7C84A73A4F9829186964BD48B995DE9DF22B0A8DCB64D47AF3814E719CB1782F5E6E6189FAABC5CE8D31CC24CA2DB2CF17515ABA2EC8A4BE892ACD07E65B4731AB84EE0F1E43EC7EF4418C7B1A4E02CA77A0354A6F1815A66B1287D8D544F4E38DFA27EB1E7D0423B5D59A503B5C847C1FB96AD5A7AB04BFA1ACE47A3A0994209E110309934CA4DF0B57D5308803BAE15E2C8B570ED67F36925B4E1F30E8235B16EAADA619DDFEA3CAF85C3C5213ED8592E9375F85B4E65FEFFD0F45A6CFEDFAC6B9BDEC97F930A3D911255C79A75A83C6885BCA0FA7F756D5AB4E47BAEED2236C9DD950A95ACC57A1B41F670AFF2704073D6346312A7AD568EFB22DAD387C025362CAB8E769ABCD795758E961265BE9B7C556BC7DE8CE6DF98AB3EF2B5BF02B0031B6B5D4135502266F1CEF37666301FC8184128C6A04CB8F7A8CFFE1026DDF690259B5347F94018E3859C8177DCDE906B89DC821A419B501399D3095668A0F4501CEA64A9F5BAEC4AF85E1F8FF58A9B0DB9071ED7C39D2F41F0ECADFEA2A764CDB3CF7474476C677D30E71E7F9AAFD2DF9ACE1E77D2CADFA44491AA9FE0765C3210CF15C7E8E45588680D69F31EEFB88DEFBE41D7FD5B18CE125587BBE4E06CADDC70CF947626551D0AA9F4DB229FD15AAA4F52E66D1A5F3EFCF051AF6380FF81D1E360353E3B3B68F1912FDF46E4BAC7B65AFB475498B22FC98E684BDCCD7B0AED31BC6E18AE3623AE92D057E70E5CB867B4FFB328E8E28E2B0C30E8E194980BAA9E1F0B1B2026A1293472E195ED757013C71874AE2466DC43462A88CB6B60853A6789A73F990E785580C90EB9F08344DC7A34D41E4246CDA7C75EB1A72F80E38B5B93A4C0DB02C7B66EAC9B513D80D155B29E5C7DF2C2A5A87A476F97E70B645EF35DE65A20D4539FF8479AADB40299253EFFC5AE4C9EA867C35EB163DD3684DC035A4631135599E50F4868713E273A148ADC67F00EF2C4895C84DDA3F4DCCF53A439884B6B71EC845DFF6C16898F44617B44C2500C99ACD0F67B95537D367CA58C774E685B35B6DAC4F0BC1EB91419072F19781B050DAD0540FF2E5E8AA54A53B60FC092A2EAB95D100E415B2360371C95E77A5D6104BB63406E41265C3CA1E83CD6A1163A0EC6EB027D4F2E276C2515FC6841198B8BC5512CAA8FD9EA7C8E069CA76099B79C94D418A03E4A56712B045DB555A4AD93CEDC4E1BE383A6E362CBF87E78F5845A8331CEA2AFFE61782FB19EE58EF7B04EF7EF02E233AC8F62B880FCA00F4D5B32C3FEE0AC7650B2E1A4557615E5AC5AE273D74AF7D7CE431249C35ED4A9BB11A810B25CFE6A4E4BADB406BBB992A96BC5C7C9020F9000F99587D12969A4FEBFFDF8D85E2CA1CB8B1660A47965BC391A0220FF7DECD820EE57A063F62DCD57D7B6754A32EAFF0B87C16F970E4918C28E787D02CAB2859FE644671EFB29F93AB2E89E5E3123411DD4AC5D37A522D20C3689899BD44278E130111CDB85ACA25E5226B418EE22A6F2FE92A79DE62569C517BF7734ADAD7EF95372436E1B2830B6F25D2F135A0B54EC09CD63AF8DBDEE68DFD96694934F78472447FC622DA5EE6E265C97ED3718FA80414EC4AD4DDEE15AA1CD2F313FE89EF8ABAD21CD92705FEF444D2B1B2854FFE5D08B43228DED3EFE9676CFEC43A0EDDF8F50797F14EBDF72EFEEC3CB9C3EB6EE12C1B5DC0F6C336D5795C6578A2530E5F13CEE49C6D6D1B64F6A041E0A1F37D2236D56D90C9B8D68B7CD628761ACAA17FA4DF27739D0BE4A1A588A51D2099A8686A50EADE2B9F842A1DCB600425522D7491A1C0D9A3D9AF3A7A234DAA98459401E0AFC2316D06302099546E6BE7E1828022C5ABABF0DC8E23A7463D3DA4FE9F847EDBE16A33327837903FA18C1C64C4576D7167F212E8A87248510838E2C03757A435977599947352BBDAFFCCB2B6B521CD8D8C646034C63918BA2C0156703F43FCD1239FA2384171DE9D828E84ACED409C314241E8AFB5258FACB359D07A803DBAE2CAF129FC6376C24163CFC07618335569E940F940054705E090A09B069EEA4F3CAEB4D94E92EA415311659E6160AAB3347F8FEC4AB90644A820DDCEACD0C588D0CACE69E942007E14525993894C1C2181E9525B81E860291901BB2F8E5A15550163D7DAD0E507AC707AC6F4D4876C053B3F278660052C2944314879CDEA622929650238CFB092CE03C3DED9AEE7E6CBA6A2000AAF506ACDD83E366608EC9946E5FF060C9F00242BB1ADE386A818DCB313338F49B132E9BC6CAC89763B546435C4553E98E0CB8F89D990422E577BF62F3C36EDC0BE8301230804AD302D93EAC9A465DA3CA4A02DA6E2404E8799496514FBB2B2C3D8E2C76E4A082B0ACC5851AFEFBBB1F31F1759F7910C111CA177CC83F8E7D6B3442F0FD9E75679812EDCC99A64C2741A764E8516B78F61EF9DE840D365857034AEC7F97A8ACBFA9E785F74AE9F41A4D40228D8E111FD033A69D8C28498FC9F2ED5ED50E14B53C46040F78267202F887ACCB92D3F8D6EDF9D7362A1292F2910690029B1E9F710A5DF6452268C1743AB29ADF453CBFDA3266277C692D4EEBF8AB8BC00EF021A207D7C7AADBDA9F4906C1A3561073664BA878DF2EB444CD5450D1DD0F0599FB9B2B44710DB378F6383B71BCE684AE0C25CA794663AB30480A63778D4AC0C75735E8B4EB06668D3B0AC29127FD1B68DFDE23B522C9BBCE5617B72059BF415E9CD7B10426C5DA294DB8D093C08E534F8C84B3B51493D9051DEFC129FFCFB69ADC521CD5782862033B226A6DE0CC41DA75BAA715923B59391CC182555C8898D1E4AE1BE4C9E746F270D337C6417FDC5E5889212EDE6E866307AD468C166C9A633A859C0F8AF37E961953BE11D5F55897FA96529A9DEE26C8087B36BD92F22D96BD6329418BE6828383A84A15D8F8C13DB212FD2269F68EB8EAFD10BD558B8478303BDCEF8DFF557733C2A6ABE744A8341CD77B2932C757FBF7115238B7F09E4919A00C73935DEC23530C06C9DBA099871C55E744B8C7B7FFBABF71CDEE2C19D50C3FAF6FE05B915DA333179039CD78AD91CD1BD858364307D563FFBD014B7A7D7BE12D65B306D33B8203FC0153351E56AC64E854E000A9F417DBB21B68559C7B5FF644EEF32E6C75C05D97CEBA299E1DB69B02402C1C131CC2C3B95389908818BE251D6EBEB01404F9F747AC67295DDC7EF8155CBBCC358B5BA9E01BF48F8448CD2412507DC7CFFB3C89E38AA2768413ECAD8BA4F4559860BEB06F26D9A2C38870D6DC4496EE1E0FBBFB039FD7B179494EB850504B2C5FCBC01DA65C1EC511673E1F96EBE3033FD1029001EC3EA9F72B4167DA60272DDFFEC2E1FAA1272FE5EC8D3AE575DE9A1A9CEB6C60AE5796EC312B3ED8C1205DCC87BADECE1AAE43CC91305A585585B6343C206FCCAD2E58C779CCF023DC9A1C85004F7052D818EEFD6E8C5151547F0ED460A0813F3126865EBA34F1D85045A1BC2A513B5283A44A9B40E294D97C5D703E67AD3FB48AB32F355D8D861F0ACD087A41FF6413CC58059AB24C4FA265F7F84298E3CF748C9B06472F0BA6CBAC88C50185A8B404DC18DB1C03CA39B46405AA0BAA64FEC776401E07C2D927ABF209BE6D9E87CFC619845B9759B9C5BB90C8285879B8D4BDEC45206A84B3E84E7523B50B621A8C3644B51BAD0BA61D3663DA1F45B32CE235596BD45AEC60ECBC3557724B0455942CAC937B69F2E4B6F08652588712DA02E97B466BB474627702AA26DE3B1F206CCAE95B47DCA27936384CE34B9568DF00A45E162A9ED7F82AA7274BBF242313FC8ED9010EAA46BB267302C8E7794D43B45C4F085755D217DBC5B317569A55756CE46BB2B031C61920CFA7882CC8053F6D9330C7E661A65F58CD56AC4707C803BF2F1807485229215238BAF5861802346C916CEED0850675BA98B7324A38AB8092DD79C47CE520D6D3C9FEED510683D934F91F5462FFD4B0629D436AAD8DAC4595B9995151C5CAF6F6B1154CD0C87D2C13B68322648D8A9BFE815EDEDA117D1E5F5F0664A34876F895D33058DFFBC4AA21469499C2A0CE898759C1D2FADC8DB4AC395D9E292570F5160FF572693671F1E5A9B82EF0E3EFBBBAF411E85E04ED61A78781B7C2B39CEA6AE5BFE8E7A8C3B315D5FF8F0B58B94552396653107E6FB09D016469F96C81655DE37B7141DFD1CA8E3B98DB02EC587E03F5B16555BD19D905C004564AB7F4C75C186AC09947B18F46722C0F9AD829C3F7A1133ED40045C027DCA71542729BF88A180F07CC1D5C76B9DD65CB2CE9BBD7D515BF9229A58B75897FE274D4E49A6772825CE90E7D156A17F3AEB4D7319A7205144033AB9DF67BC7B3BAAAA90045988B9257FC7810E2AEBCEC20FC341F9B8135CD40E480FEC431E561DAEA7EC0615C957E8866BE6F4DD5308BC37542B7D7079D4B5FB84D0E795F1737DA6B3E1BFF7B5E75065EF42F9C3101ED348A53E50092A5CD5FE525AD85151C5CFEB0E704BB502276E620B2CF2F800301EB5BA8EED3E3422AA2856A39E416111BCE54A3512CA4822BF7511F0610C8E02FCE1975E6C3DB7749C128D8CA90B9D981FB0D568A2152858F5EE42B7436D62A92A99396049856D10D5F11B7F2EB81796ED51D028FD91F5EB6673F8A3441DB98DC7DBE574B363CD79FF215DFED4292204450140CECF2A7C359BD4612EC460623B16E27D5730DFE7FF44F955E044949E14545B75739A92AFB52BBFCA67DD2776A6B7CAD2D05820E621B5E7D985C1DC9E475B3F780EEF9D2587799691331F6188B99B1757F0F917A678E89789F24BC7AB9862DA4EF0C626EF365C63565F6C08DE0AC058AB13C92A0112FB450EC75A61CEC9C980B7E53450BC6D2F7D9C376FC03BB340048104FCE8B51FE447AE9A53E2C722A5E010DEAB5902D292E58D3A7E27094F848A873A906A4AE52E85B9F3DEDD4FC52D14C50674F6D74D1D3FEF5AE468F2813A7F6D088852BB40C606B6636BFFAE27D35FFC4B3D711C49F41227CCA4A488DEFE2063B0BBD563CA536E082F03E3F455BF943CDB26913F085309A75F30B97B7E960833831FC7FCB830F7B97F414B112A89F4EC4C353D1E103861569AC12EC06E6EC0B19A7514EE7EDB1B13A5ACE3B99336E2767CFA898452E374650520E1AA8CF2FC3F9B511621AD1644F5B37513B39588B831DDED1BE9C0FD3F65C5D6965A9B46724140D6DD467CEA6C298D5668F4A0B9D290E9953FF93C3641A438AE3438C1BC8E27FC857D28961039F19C289BAAE96F03E0C0095531E1C3391650E7635D1D3FFAD3DFD7A671275BE8E02046F7F31AC8547565E404B48982C1F60997748070C3E7015CCC711F7D48AB6C52DEC2743E6D4DA04DDE4CBD0768B5D31AC19065BAD75415364AFA060667FED1E6A388671CAFF1E25819676F423DFD330269EEF52060011C3C3295FF9E51CF89DF63B4372D2DEB03E467E79562D3FA75F480203A62A4E7569C4C1396FB6AA19A076A40E3AC8254D7F91EC3CF7C8E10FF3454CE6F6D553077235C87EDA8BDFED0BCEA48F7BF961019EC221B4FF3D59DE2DBCB2866CE418253D54A28588DDEB98783FBDC94D8935E12DF9A5145D2534249678975CD9F69BDADDE8AF71B40EBB528A7E751D216D068D2328F7AFF43C3D7AE3F17D9412A1BFB15382D38775BAF9098EBCD27914FC014F5315175F009A734BF1ACA062F91B9727762F31856BD254BAAE38A19D9B72F7AF370A6A9DFED0D4532A1D767BAF65C8E2A9A5F892CE07C6049C74CC9F8FE16473A2EB37A19D1F1EAF7B53B6819199159628A7A8632028B5F16058C80A40EC8CAA9838ACAF818FA08A0DACA93765203B1E297A44054864057C3EC5DB3BD46A00D6B03C9604C79004F3D86042961934A754E4D0FDF0DAC205977D737AD3990CA6AD6D7D4199CA18D6567CEE0559E4E377018E238EDB94D3C3B0860FBB7723906E690799A5B7532D4A45D985A8743A8427C24943366E0883E0491AC8449A6A4A545FA966E213A01B3769E8053E9ABEEB23915C634B6BE45E928FB055F401C0C007859BE9DD9E708750C1B92DF8BDC571B1704E6741A5136E360A99EE1C6E7FF2181527BF2A796154ED3C2ACF03D735E01E1C7A87654C9B905D45172F9B1E2917D3E8EC07EE6358F0F648F53405CDB788535E8E74F6F09588810FC36BA5C48A94A93EDD9BB54C68C1B3D3F32E86FECFD9EF67A40BFE649C3575117E09B2229274E018486B7D08345FD1B1192D079856720F496F3FF6F683696C83CC50C6680BD358AC714B334B56931256E5BADB0500388E8E6AF4137C357B8CA7992B97BBB768CDE9E0E270321BB053268C023E5F4514058665622FB73999E677FA2D4A80C93C9E4D63AD4E3AB6F5148EE529AB497B394A99D14CDBA89AD68746D218655D1A67CC12C2D2950799EABDA1DCB5440FB2A6B00B3DCEF9A24C870551281ADFD4E8CF1002D58891C94200BB8E453999F4B72EC4268DA4FB43687339BAA35C08F61B3102CFE56F6E853C8241901C279293E587E93B169340EC2D5B58576128F5AA09EA7AEFBC68E866E8E4DB1DFCDC41E78D9612DC5E81CAE5CB71ABF9C31E5E169EFCCAEA15974BC70A0F29EF6ADEB2A17CBF5AAE065B614D48D83A2CB05BEA7015A07B49D2EDABDE9C8B82123B3E6387B129B96F794C34460D000231717F2FD369C71B5D409C27767995CBF84C7D6C9DA16DF3C208FBD87D965B800696283F572C77B52FE8A0308A508B459E85268A97805BA08FDCB95B4DC12FBFF83FCF190C3E16933BAD5C039F7791762BE6F05C356045DC4CD7366546D2AD3B17C168340A61498D12E71BBD9566BC22D64D7E7E667F75760E5A8E717F6C405F0CC5BDB436F2B5BE05DEF578AEBF96F71E6DC7F5DDBDEBB717EFB8D54653E1BFA7C7EDC602ED55C3FCBC044526FBE1D116F9B3DD410CA59043B75BA4D576334F4F4CD8AEAE9C89E5403690DF4CCB569021F7A9C13BF49AA9433AA2FD7BB9D7A58833BA5D709A31650D5BCA4564D60F14057BE727530080941B919F23A199D68F924840FFAA44BAD9DBEBB8D82B3A297DBADFF1AFF99F13464B5E4DE76D6C203B0642EBD338D4FE80C876FFF3E69B3477B9A93CA5FC82AB6117B7364DFC8C2AD8FEBF4002F66825FDB756ADF7E0AFC03590A6DCFDFBA75E1BD32398CE22E59A726C6AE679B6C1A46AF7AA8330F40D4B57F031DC54875DD9D147847464A08FEA4E39111727CAF04CF53693D619B3FFC3ABAE12C4510B518F42485B34B8E71145973B1492343F6E4174C997FDDD6DF15FD3415D4039A57CE4437CC572317758B62D9716DF5C29B5616E2A6AE873E13D904DB9C220A839627B5646EA72BA24A8299A922C6342FF49E2EEF4D206F9D54AE4BFDC1A5AADBE03DA7B409EA24EE5D26BDA89FD7EE9BFAB724AACEFD8F06AD9439A593F8ED7B90877C23D78B12FF2CE809C1022BE3FAA0C8F1748914D9E17AFCCCA4E2455A47F44F1F0FEDA9BA1B1E954FC8A095F0EFF9F6478816DB4EE6B3C503D3581B8720C9F0C93CB12C9C023AAB51D9FB6B2A110FBD55E9EE5A2F472EF8634D2DBB76D12DA536FCACA27FD93813BA66FA70AB1D92DD348BEDACAC8344D994C72BDDD806697663CD3A0F1C7BD576F9DF31B76D224E1E30E7B1F283FC68F2A64233FF332EC954416B31EB46AA71E80B3559041E78B81A4081CAFC4AAA2E3A5BB61477033A95CEC207DD113A3D883ED3C989E18C3688A66C1446F9C3538C907DE2BB207974334DE3EFB1E274D7D08335902ECAC0F7C2F99618F7555A16131DF197B75A3CAE9D5FB73BCF85B847D6ACC379CB8F8E41763D492B68F5ED1CD4337B32642F16A85DC4FE56C2DA0A99D67276F79B6B987D929F24CB01C3961D99FDD14C65CB1F6723429AD62D2EEABDD842BC3DD43E6EC78A98904B1D48C1A17F9337DC8BBC124DB016F40F74F5181FD02260B49F285F9D53EBC6398857C5385AEAA584D8D992E70EC6AF00FA0C62C353029059F2B654B7C397A3C3C6547DC76E37652D10AE435D7C6BA3EBDED800DCFCDBAEF9AFDE0BF04F251BFE992F5DD469A677DF55B012180F62516C8E779F69C175A4D72D1EE0F7D2E1E03D0906C36F945259FC3E3296EBF156DA26060CF0EE7ECAB8F27DAD13C73C1B980C0F0118BFE458FAE614A8A16E69B561D27C90E5EFE9EF5631702A504986D75E0657CAE0BD63362782DEEE233205F25E3ADF600C2B3FC1CF000A193AAB2B9FBB74D95A43DD2C8A27043D300D772D99C783EA0F9A347E8AE4F92751EA1B803399F2ED14AE1A57A261FB53F6AE323CA89EEC6E9B91CB252C21ED46F64B8E1852BEF4966C8E3D00F255E9C6A037FD0CE263C41D8755B3CDB2105CE8D491069C86FBACBF031723018AEBB0C4E069A360B3FE91678DF190D4275E43F00D048BACD55436D380A291D8236F4ABC43E44548C8322C2DF584621CCE30EADF8CD9C7819E48CA77366CEB8AD41F4326A9E2CDB72C0215EBC18F0DCB1D902E1B8C990E5A2F3DC4FB47493F2D0B785E82A88F5ABC35B771E15CE53239AA7C8C988CE44547696B55700EB6F1D3101178DDD1E028F242793FEE7013026F4F68F1DC4C236F66CEA654274C05BB94FAF01CE7689F5760AC80541E99B79DADC73A28D73E690BC26DCE3554FDE5372675798F5CB6F2F4B025DB8C7BD4AD217745CC93EDE4970C1AE4672EDD892A0BD6CBB9ACFD071DE3CB72ECC871E976FDBDB28E38DB51E9D336623D1470F40842B3B27B910EA659C1619F7F3536DE8FCC2D58DCADE7D63FF602FFF222CFE4EF868119591B948BB62927AD1535391338C3AF301D986B585FC34672C883586B8DD1C6E00019A2AFF9173A9D68071BA0026BF42ABBB0C5D46A38A4479B1684B3932D9E94BA59EA824E86EE0C57D4BEB28AA35D3274193F70E9F121971FB80E532F8DC6DA9F34F4E2F72608C7AC2B44995ED4038064AC2A1516142EE5943502F524CDB21078A7F858DC8000B966952B17EF13ACA9DF297D08699345C3B32243809301B41AF3BDBDBE3D77C71B812B06D173B3590652905D6171A72B450E6C4B864F7B92593E2E220AEB1E402D5BF082981EFC7A9CCD4B8CAABB6D0A796F1EFDE96F7B66EF3248CB59EBC50C0A9AB6ACA798F74758916694BBF53916E309071CE9F0831B8D9E8A64F8A2B1CA210750E3846B3700A2EF8994C0B4A0C9D0C0F07437EC4C38D6013910018674B0B585F3BFB21C1FFC7F1A9E795334DD1EDB7513328DEDA91895DC26FC2EB692F540648490F9A8E58E098389F5CB4C6490865F017161B9AA8D1807B904757647D964C59549018B372E1EB052CF8B89BE00D401E1B6728352B21BA6B53F3A17F96324306754B92EDB9C741F1F15F2A6D33D8B4943016F9801D97A36312B669A27AA570D8569EE30F0065E5FE34E6C1E3FA7E83346FCA37A2670C3CAB3DBD79468559B599BAC5C3F93F3E168A7457B53064DD7750FAEAD1926BC8810F56CDED669D99233516D89DED0375054FB3F5E89BD560CC84E6785EF307446140C4B4877BBA0678B6C399135160F0261667337B14D77B00A82C45DF9F76671076F2D912C3676C20FCF661B0315F2384316ABC2E9EBC4EC853AB29BC6B5ABCA4B86E1F9E1B52CBAC7ECC0E952C3E733A51E26B636B2DC3AD3A2FDF51050A40068276DDDA60626CBD3AAB87C9AB8FF9D0EAA0312A8BE97CF8657B3B08CB714D5609550C5AA8E03FD5215B254023593E966B1F3E53DAFE738E964A0DDBAF149EF3268AE162ABCFBF6C38145C0BD8543FCF726EEFF5FAAC72D535D7CABC3FC311E7A3B80C08B6DB2E28002C9B35424585F0D25CC77FF3EE4AC9C316075B750080B69FD8D845D15E3CEC24545A2B4321D934F40A8DBF766DC4A0602783060A75995E2233A2729A0269167DE4B5F08F94B6F6C96B9F5F45C55BAFBE84B9033EF950960FD157A75A748CB75762779A77A8D1D53B8AA9BA75D8708E705C71C14FE19486A5FC7B021C4BCED3300E267840E827C4F25396896D49E8186970E0D015EC169C60898229F6FA432229796B968741BB194E2E8ABAE3A366380633148855500D9D4AA905ECB4096A5E619F18FB4DBE4DEB3AABBDF4CEC02E5CC796097D78693BBB5D36434475AC33F9B584DF705B42C3B29B819CFB4A08FB8E0C613CC028113365B39E0EB74D186DA1DD57448F5653D3115B392F26B8391A7A5C34CC3BB4E8C78F86DB178229151F24AC7AC574B3C0B7A8915CA5D5F1E7FEE120D5B3F2A4F4FEB433D36BFD8A989B167E640EA494AC0D48FB4E5), KvPair(D38110FACE3FEFFA7D21492178E0040277F3A1EF050D2D782C947305310BA22D3BF1DDF6F38F8DE31E825F2AE9CF2A04DCDA0425E87E58F405A03C0542524C0C4D9B5EC4DD8ABA3B8FFE909340A3FD9CE479BADFF9E941ABFE31B8A121DACD5308464A9484F649EE3B7CD7EEB508CB8C4B0B5738223E323FDBCAAE9C316841C249CD971C55113D749BFB427748C783D350896A924CB85DBACFDC9452E38C89A7BFD75916C2F2BDBB939A2AD20929DCB5912EF9DB64A336949DB918D3697AE540E64AE6460B1CBA8B7A54A5DF2F46A553154990B0C827949ED1B06A23F0F647F356F69BDE45F75AD10380ED080954CC04C5956960D4ED68CFC1E1DF6E27F2736136F0B4FAF11D949FD32F0720B61CA925E6C594711C6387EE131F12CC1A92D12DF6E3FB9B1FA73A9A9CB3EB1659B8C058EE0324CE283355194B537860CC98C06DA09BB6EC5527BF1A83E0E1161AC3AF5EB1E6CFFC9F775110A2002F27AF2F4FD6FAC97C1A9D18D5A2160B3A1BAFE228D177A515547EF91F37060489BF4A0472A33E027193142942D9482CF3A9398E4A694AACC6C5EE12313E6E81FF801EF85E12DEA9023652CB8EF90EAC5D3CBC2B4E5C45F95EFCB0D1D0D19FFEF153932C6587DD2949D006F8C7869B4C3BD78CF03B5B33083A349E26952AD23F6D4ACB6F331913D132E1D8D55C7328B567869777E446822DAED3B8181348465FBE3C7B1390B7E08C0CD78E4F80BFDEAAAC6910474A87C975454F3203EE6BF1010FB0EE4C903ED7DBEC197FA7FE045AF98050C454C180920DB8C01A0D34DE4F9D754181709058B59196038D82650D00EAD9FCFFE06279540C78CE3F43387B1BCF9610A9E2E29CCE711DF3FD5411F59670A35DEAAE73DFA53DEEB6D759E51B8D071A4C040CF5B7035AC50254CC57EC5B5E7B8775C87B77E243B3E0046C81224019133B5D8ED3B545BF5725D9ED0489DE62682722656ECE54263906F86A377ABD1B24ED9984D41F32917998BC571C1CF4165F8DDC2E98BB8E50B13F39E5D082752989A288129B0EA97ECAA86C3A88A23603874718BE0299BD043DA772FC05CF890A5ED14F62EEE939133F933A43B5F52D26B4908CFA82329A1F657D800A449226A4740613D814116E5C021325108EE1EE34AF38EC7D09911AFDFFAD5DE9B27FDB3132A74DBACD7B977297850E43DDA99EBEEE3C4231E034C9F05AAC20D957EF30DA7491DBABCD311CB68A32F39AD08836BEC4C7AA867424A1C29E453E8188366697A5FC106993C33CEE90F805B2D490CD1688C39A0B2B65AF4D51D5078B701F1CD64317CCF00F33C2B9988C2A52F5525482BBAA85165CF2EFE789767211846058DD33FD42781C98F7ABAC166348CB648E53C793061980077C50330A76CC90227E0A6E906F68494928898EB9CE51635086DF89C38A7E6337A05752D6AEEA7E3F4C0ABACBA38904440D33CA847A19F2126B3EFED11FDDC22D9E8093DF6449942BFEA7C8A73D3305CCD363B89DEB974D6821ED3A4D344769816F01B77E41A3DBA68ECC37CA8B3DDA77496017669193657B5DCCFCA3F4E407F80216B0846834C459C9E053C9663DBD5D9CB5782450211E678B1A0B06DBE56F5DC1F55009CA40BE07A297B9175B2E4A3B76C6892AAAA82B3D365F91EA93199F8D56CC130B34E350C070B7FF6BDF64E0E24B0943CBBD352EB58ABD68EFD37C9CF4DD73E78629DD6461BCB8AB180AC91DC0FF37FA82FBA6D69318E56D311D975C728763852F5E62A1393A30DFCBABF3716235CB30F86FEABD8A426BDC8C63C06981754DDF73722B1582A894E3AE68A0B51C86346C7C3253DB52006E2C5683062FE2290BB8D232FF116369D640509FB15314516ADBB86223A2527A479DF52270A49BF8DEF5CB11F55142E70C8C32506599940324EF2B063E62ECF4556B2EB84B7DE2B1D51BD9E0ECFA0D705B7DCD614D083B85D939712523E10A48119F73065CC1A3E3B11C0AC1898E5088EABF96F344F2DD9DA5A939A0A10BD03CA1205DB5C8BE2F9C62421A5A225CCE10D7B4DC8C78357B90E890028759A08235BC04435693FADF18613AA1FD9BDE6F740ADC673A0D136EA5B0CA329E25EB671B1D6E633960A858646D4EFAA3CF786CC0B334DE204A8A909D482EB7105D64F9DA8FFE942B7D926D4B36A57EB51BD0528147A461DA88EC96A860628360B0674C17CE4E9905BB019EB0F24D91A434E98F8B243862E78C150E1F14AC41312385728A6B952019EBFAF9870761BCCFC500FBE7B3089CEFC8229670AFE768BB0BFAAC7637ED104C0029495DACD8E14F14EFC59FC6BDC5B1C9F0CCB75157A742512ACE939468521F325CA91731FC449AC0E3295056C5B095F78E48C119E2E76B1F7484BFDE850625442CA09A43FA77C37B6784E32EEB4B798334A253D008FA0A47E701E6933235BE31D6024647482377E5B004E8C17E45698A5B50388D9AB504A9D7C5E00B1D0FC6FE96C3D4C2A4A02E639C4504A840F543D1E71905C8F6B068FA2CB12C111891D5F819E39052625CE30BC6E7D8E1D7F5AE63F8CD5928BE541C611BF9F520D52EC9C8EBB9124E02D4FC597A889DC69541FFDFBA5462F3F8E866E5AEAD9E23927EBB1CE901B3236D528FD098D9AFA25104108EE32D2EAC08D3CED96351E2B7CBD630EEC414A851A211B514AA7EEC41B4E9C17AC13DBA8E48C4BCA2DFA0639B433202B6168463EA3FD00453CE3D64A9798F8F1DE6F103D9D422ACA764696D073D00BEFA4E3ACF66A5482E6337B7753E2458E01760BBC158F5820EEA05B0C9BA5A690341B4E7C50C502F10E2ABBCDD2298951BD36949A8182C390D8BD189B490D00256E2FA6E91672140301A24D58804447425521DB32124B4CE4B7BA4E8FCF083FB4BF2DF307C71256E33AA25C89ECA7B9A57ACED8B, 5FE204B7A229B595CFBE9E93C2E5C02B95F3C43028D9D171AB62ADE74C1B3E067236F2AA3D4D74712DC8DF8A18AC767DCC56A75C181ACF967AE0A632FE381A1A45E240DC53E028D93B451375F0280CC0FBBB9892833606D0C11608CB1CF25839A631CB3B3D9C78257E2A8913AB28F4678EDB3DA85D2DBAD33D1D276254ED19DD43E20FBAADD63BC5755DAADE2B4E72A05B8635E67FE6407971D143047E4068A5ED9EE081722E4A6DE28B388E048C0CD4B32AF4F7DA518EED724A119AA98A113CB0E912F4B9E603B25CDB094BBF58099BACA878DC7DEDA6D99FEE785765EDF75B80BCD271514C4D0B5E77D40F8B46EE1AAC446242A67BD9185BE20B0207C3E64061311A5487733BB827320551F7795E960F8775092A5A0AC177F253286263A65EC1C017EDAE80B9515F52140D65E2098E55FEA9031B39A18CAACB87290E4DE01CF42AC140BC6B7EAF10BA09354FDE9284BFB6039550EB6347CB79DB73F9F77B5F0F9B894A58F329CB2A67E56A48504644285D45E4EBAB1B2D3B5BB46B1F33D92B3487C912C4B303C76A5EFCA68D573947E1DA13FCA77ADC2423BFCC659B67076BCE01D8C754BBB52E1C43B6414C2DABF6EF7649FE16D1A36A271CA34F11AB7CDF8BBCD7C4B5505E614B434C91FDA185F62EE2927A170165ED4A7C5C26AC407062AFE9F4B421843E9D029EAFDEBEAB062821CF3B58BB68033B14B2877D9ACB681CA61DE6D6335615E5F9A91801E19742CC3E21EF70CAAF69B9AAE54CA8D8945BFA1047910D40A61D3EF1EDE25CC88666767AD11732670DA64BA6226707146A8A802E2698D794FBFDB1DB7A7A40B65D73082500F5AD19121479FD93E461917DE68C2680D01BFCB0480E9CE88FAD5983EC87187411197AEC83148FFE6CC2C2E900BF0D5C13FA42C384A548AF9F2D31874BA26B1B73DD9CC6181C9F2AECE4C360685F81080EDFA3958176B2365E99F73AED57E0A439044AB15C134B67C44541AA41865B2F85D3BCCABF7F4A5848CE5A6A52EF86593FD859094BC808F074A72C90B451C09C092CC9DB271A224D2C959EC0911C41025E4F1C09F902E8992909BBE227FB1043B54E7006B37AE10CB9930E891FDA4EB5F1CED75FAA83825AD007EDC4627C6B65D419045D2FB8F7F149A25FB1EB24FA1BF29F2F48E1B6E83328C964BB91BBF628D7E6BF75523253B7DFCF808EC466D9399C058856A7ADF9A0B6142521F0B833136DDB24E1B79A2A404CDC2E79E4B575F6A321502D200F93A9FAE868262DC742704E04C90DE5BE58301D050579F68CB1E4030B7CD36C26FA085B3BB63A5F96599E0CB9DD1F5F57F61285BE55B02CF6E97FF2F016DA20480E8FE1CA5F49F6796FF2D651B5286E0FAD5C7103C81A85879267EA189A5AFA6791CC2FBF2CF6A573BD357A973CDCAAD2D355B8811395897D91FBC6DD2499A288CBAA8ECD382D51FA18899BEE6FC0BBD8BC267EFDA05D02658DF00E67A7E66E91BA93FD15E089774DB3E0D4248DA9FC3FB66310A2DB63A439BC6C3BF860AB966F8C38DF3BA5C37C9F8FC5D73D45C3F73FEA4FB837475BE21FF484DD6B2A582AB1B9574FBC02636E3AC06FA795E11266FABA382AE7BDFEB1D495A2D853BE7E4E9CED55C16FF5BB41AF0D1D2C37AC4BA1E418A4E56C9466ACAE2DA8898B7A677D1BFFD88ABE59EB8781390A679F63E1F9DAEED9977BA579DE3C94021654DF42E006A390EE99EE84DBE90DBD10FE85F041ACCFC5276F207C6D41AB4C5F630C6FA945E85052BD4A108EF4022BB94913883CC45D845BD3EF08E727758DAB762DB902F26D9B1C129EEB7D2B9BE3A085E6F098C6BB4D86BEF8F53381F5EA9460F7D8F1BB6C445DA6E03BF6B915983BF12F9583E904AF9EE21C255DC55E8E260C81548EAA30B358A1BD131075F321906A709BCCFF5D0BB3FEA379910E88D010A28437F5A2E9C2B1A338CADC636D02358D27CC63E8ADBDAD7501B7F0CA51AEFBA3AE8B0A4E3FBBF0515D79965D94C2F1FD9B58AC42D577CCB4C6C9E53F3CB3DB3C1106DA446D39B85F858C92DF7135669DEF1BE7FC179E8FADBF5A090485423A1DD1BA75DF8026CAEBDA10A3FFFAC3948436A1788C4A104F9B33940ECFC8DDEEE47796405E468D76910C1548421881D3958D23922A37C3A1517F4CCA1AC6CC48BC714EA376E74A806FF2AFEDD84CB0255F9AC00B834B7BFE02AF8C0FF81D919961E76DDED90C960494EA6AEA2732AF307E05F3F6FF84C0D1F4B77FADFD59575E6595ABF0F1DABD29241F86E8EC2C01BA96F49C3E0A1B0FF74F00483ACB5F7C7F03B324512C31519A409FD4FE8F981AEA5165627429C67AD014941F48F8D56482CBED2B869762FB9A006A548ED3545BFB413BB44F73119E5431DA6750FE737EB2B281F0908E52860237863A6C0DE32506D807E5F04727AD7E12FDAD08A5F4831A6051578BDFF782CEB147375FDDC0CF93662129BAF7F1D8A5B06FE65933B0DBF9E0A93C5E90CB297AAEF59494C16403FAD06E236F045B8B063AE64B007BFA9F1FFDAD98C02ACF6FC5F91B2A95A593CC8695D2D9A128CB1337736E77F7BECE933C2E7D4B4C9DC56795FE20C48CD64709FBCD3F9AFB717B3675236DA4C28BFBA173CDEEED15B78DB53AEB8394E2D5CBB2E42DA6BAEA284221D256E390DDD3B1D3684B30D0CDA6E51B24348ED907CF3590C5FF106645D12428BA978B69515999D05D1413AFA822D7291C6CD13118D6062F4396D00994CADF1CCA3CB8D4922A669A3229A4414C935331491E9514F633F556940AED6408B54C03D12196B72FE6D0549D296FE2AD90B7FB7BB0ECB47F5424EA13D8C086C4433AF620C0130FC4F37500C3C1878EB81EAD1D6930D51CBF7D4C735809A3D9E9708EA2D27532CDFA7F7DF9951DC11F62A5795A41D5D4B229C438329BE96BB3C64E1EBD4530BDF2B214F51E5A801B24B62489AA77EA2273213E3D1CAF4317ABA96018FCEC42E1F9C54CC4EDD5C5DC785779336A5D25F793B576A3AD1B29CA7CCD326C923DF987F2FB4D792D22DBB0CADE7E58166950825F13D40F9FEAEE2F97B37B10D82229666EF5EFC2CEE3C735B472736B3661BE75D498439D9D57DABD2D53824CCF3D34065D2AA92E92A91EC2F6EEFC36C11D9DA0FB4676E1A8283FB53BAE2C937546FC2C789AF1021B4D24928B01EB5550D934322B37FD2F34078C9BF558E48B51C04A2C01EC41ADF9808F29212277F3A7A2E31DED4328ADC01577A1B74F3BAAB5568CE33A29D33444C894A0F46645F1492928C4C72FE687C1BC081AFBA6EAD4CB844AFC2A1A01FB76A15050E7954FD54463380A19B7F903333080DF7E06C197F5C6FCCD8A80F708DF3D33AF85AF97BDF579AC11FF9ABA420A11699C5559685A08EFB87A855C01FA5AC67127EFC6BE74D05E2D5BBCB368D0636E5A3D2C26C9B8B3C92C4E030324B605C8322623B5E90D806E31A0800866855CAC5B3A2A7F557FFF27AF8F65C230864CB4D66587EF829AB646F9A5A7C7967FE158BF959DD625FA9CA2A526D59F70900F1EE7D9702FBFCC5A0EB21A39FE852CAEC05B4FE426D6A791C84C24C050C0CB3FF3E36665757C5ADB8050C087B0971D0C4FF378B9E85391936B3BC8F4243124AEC810537184023290B2C69A51A2F57A3E81EAA9B4B922A880753EED0F548D79D0F318F70BA69C5F9B387CE9A498BA7B098E96A70E9BEF7AD52CA2EE47FE52872EAC84EBBFB7D31B741FF04FD28F6B52B8CCD36F76F986C8D6805A864D94486DCDDC603DDE5DD73415AD8FEF6F85CFFED5DE9BC6649F837D3A4BD48EF924E35A87C00EB4255212B15B03BBFD52E4658ABF68B15AE11AC09240B542C1CCD3DF6C016CA8D1C028285FD2B804038371275509F17108B71E3BB5424C0171A4AC427F506542007C1C7D1549CB5E14B81102B108F8A922649746CDD1470C337F1BBF330DDEF7F3ADFD737271F5A8B60964FD4E91A791ACDEFAE94C53DC0141833F4F1B8AFC084A9912C76C26B5D6ED693E6489141B57600970881ADBAEEC82F529F84A82B06E4744F71B6137278E7BD784F8A72A44C1A928E703AEF1B89D6C3DEEEE66A198B9B16DFE6A617ABAEFB6885315B2EAA147E74F1C72B0A9DBE2FBD3E14CAC073078DF37E2C99A3BD25940F6AF61A58AF7922869C709552CA5737F0A1155BD0A9931978E53ADE28D19391F6461B9F4793ADCE5B486E1999C4421B1D45E02318020EF5575CEBE3357B09208DE7878CDFD82DC69D0027B7FB839838B03A6C4003E555B09C90A89FA516F63A2B31F911A7AE4452E0BC8A0A5CFDC10E2A9D055A88AEB9BA43706EC2AAAD851CE129B00841576E43CD833710F1A1F31AE08BB1750579A95A3E6681D8A34E535252FC4E43BE979EEB9C0F77B8B4B981658983501C5D14B5E163A0CF8D208AD09398941B621CAE5CB8514E8F9655F2422DE3DE4D2929E99505B2400EC2EC1D46C18BAFC12796F8308F92F0E117A0C0EFC3F4E5A8A57111CE220B4C01D14B062D293AA84933EC9630E41F90308C2C583B51990C91C3F07E81CEC92B99EC397A2759F61096063ECF9C8414AF3204AF475C81A648E2423A4644D24F6E5D51518B851CBF674AC618F40DD2D56C613FFC2C22C3E030BE3DB671186EF6CC478534B932EE78168AB5406E1A0BA5D18E0AB2996295908C0146DECAD3550F4CD1436AD4E8868A75CF3D9B9EEC53AB9B46B260E9D0E55654C2B03BB0ABBB85261B82706488694D5BFE2EAEBA96F7678D7D109BFF3726D62F19CF3AC9F896009302D77C145450C3BFADB0FE91DCCB7ACAD3C9E191D90D502C52DB5E420599FF21C3075BD89EB8B4F9661174F5081DF8F7EAF1C2316839A2B40C4272F2B9EB277ABC06F0B2C39DB4FB813B3F2595F644D372FEF9DC30E8A1E5DFB5349C0EC229A1E23891F7A5BDFD44FEE7EDE82E78D58D9BE5098791D0CBF012EBEAD2955268BF7E7728D01B2ECA9D4DDEF741151CA80387A6DD48827295725E0F93099CBD2031C70863A857774C9935DF97D4958EEC618D5D3D36CF3658533AEB75BE80AE391F644D1A3E77C62F4319D300EA3A76D31FA74D6C3DD17052B2F9EB1982D54F5B0E47390E410908914F5DEC73AC33D1F50CBAB62C63F72D0BD2F62497917ABFB516ECA4BAE16BD9C7021E46CC1728EB4D859A4FFB7D46AD094D29408EB1B95211CD5B035E683761CA1F65303EAEBCCAC24FF1BC7A7E665A618A30BE7F82A0739F196D53F317C07805C5DDA29A186138C69210AFD8CFA8FF970E13254D6E6E489A87A9729A921A71B879C1A37BDE87D47D43720CC90DE973F84E6A4DB608F2F8F4100FCEBD5169B11F2AD8747A7DD203335D1C678DE6F9AE138D223CB961B3DA9204AD6F8729126FE4FAE3EFCE29BF299876854406C5CF5842F8DCC276BCB3D641E6AE81776B59C04040514AB3546C8FA783C70449FA95DCD9D29F1450542D6B8FAC43779FBA0149A93E99856F621BD5D64E8B9EDF2FAD0CC1A2808D771675FB7E9B3791226BF5BE7F36168242C6B8007ADBBC5DBAB25142F25F5A7EF763AE8EDC087C786BDFCD1BD5F31858FE49793937064C1F42F6ED8ED00C7EAF01301C94767FF4F91DE496E768F68D901B23B4E94E89DD9388878C38500F03518A2F033530864F5665AFDF0BE981977596DB5CEAAECB059A9D7D3BD3672811A337C7AED6220D2FD31C6C96413A299D249A79984126EB65D99837E099E4DD3877E349AFD21CFD8A2794F3366DE73D7D782B9C3FED4A09CA9F3B5AEB7A7D9A5B2F5118348E0BED8655FB9B13A8530431B76B1DBFD98A454FE75FE813C48896EF6C21426485E5FCD08ED7E995D09725E93A904523FEE50E74D7F51C258C918112EE8F7FEFE509D501937735EDEDE219ECFD93974F2CBFB8D16114F8FDF7A3C9A74FC874E2B0C407682878DE2CF703E4201DBA071FCCD6063E8EC21E923DEFE934F98A02609935827CD1C249717F8140EA3F6CF4A43B1C5F8398ADE08F27B5A5F823D50A13B86CF33B9BFE894F8B787E216E95494BD094DDE54E09D91749F15DFD88B904A233344FA8548E3289B4792D293490F55E4143ADDC2E67BFBF45D5C964E726288AAF88AA6C5D4D5797074203A29E82D4DB48255BCA1E00BBA0AF9D8944BDCE8169E090A273D99307C9AE848CB9EE53F6F36F292BDC0D19DF4CF3F034FAD5834A07D429AD20E0F8D9485B8206F31B14860A852535206E0C5217C39FE878E19DF4FE4203EE97CBC38C6BEFED5D38BE046533268207A4B562455AE075CD1F3A29F829FFF2439544894898F6534C7911BC03EAC085FE5EB819D273408CC7220555FD48A3F9953532D65D4D2D5514BFFB8AE8E90FAC99C866D1C6C67346898BDAA952C69B08BFB6E361E0FE8F2AF33111EAF23C8C6141F419154499C7EB0B04FA1E4FA87E23CA341B747DDCFBBF1F3E1915F50304C22DFC393598DD3496E3CA9A4771A9FC7D89134D35B2AFA4B0B44617E172D2BDC374ADE0EEA78F3D6F219AB53FCAE74E24D4ECB33A789C834430DA32AF106E22B1583EFFC7F6F8345BB4D9256385666A11C38C97FDFB6EC51240CF1D55784EE2CA3300CB148F0E53237C53A0D3E3EDE4B0EEACD4A8AC935FA20F3D9A10E6539150D12FEE7E62D867AD2F03A87B88051248896333266AF94340AF859AADA733E730984DD01707D269CE02A080DFC8DDACD68CF302F9F7389E2A77DABF7DD0910D55CCFCDFE8D35F2F22AEF0D8CC5390DD4DB8AEB81078AE0C105B60D4E225FB8B6E20002F8E783C929E905B6F5ACBE01A769962AC35B5AA1FD0CF1E96BA06860944A61F2DC2290D5B26760D9C8E23CEB226B0FEE5ABE6AE533FF1D4D49419C61FC7272AEDCEBE19BBFBD4642F780D683F32B7BC1225CEBDAE2903EB1A3CC850C1D018C90C65932F49858618F36A7349B4F54623B554C894E03B6647DE63DA2A1AB23C9F40EAEFD412DE0DDE8F5CF14B4FCA6CB296517682F073E8333325032B57625970A7A6E322FD8EDB15AEA5E120E26507D73110D6AE509C0B35A57E3C32A7381FF8BEFB1460C54D091466068EEE818F4057F9EE7C14E4C6A283D8C4FF6CA855EEAE8FB6CCF8C0EF5643EC98E265F4FD4FF618E05B8CEA359DD3E36578F7497D30510BE5A17E2AA79EEF3832D33678886640ABD47591B38A2D508E405C88AE4E31CE9EB570CDEB94CCA0331364FBC73D5D34D09DE45E2DDA3C2B74AD89681B66678D1CFD6C90BAF38999FB45156082DFFBA4E3A715DA76E2453713465CB39854579A9E5F6130233FE091D1C7ADBC100F99B63CFF8E8DE66E9C3740EDC2534EEC37E8EAF76ACE5B22896A8FBED67995C69EA53D192ABDEF66334DD14F9B22CE97FE60B2CB7E351C5C07B32D87E866B9B17FCBC5DF1DEDA755C5E51AC4CD6B2EE6E1634BB1C9BAF1E29D603927339C4C92369F48D7D1FA44E7DFF73F5CD539D41D2ADCC936304909C7ADA17DDB810650D98DFEF2F7E5AB1CF4D38B9CB06B1061E9978D626B8AC1C3123BAC6C9118F3CE12C3577080BBDE54EC6ACADC2D3AC80B4585E1836836B26B158319AC90785D4D839E1F71EF80ECE8C8187D2CE769145162301CC65E91783E50BEA1E575261CBDC90C66AA1938B5E2F394453A17FA147AC81A4BE3F3E1642ECAC6945A18F6545DB08444F08D304F6D51FDF94F326207B3F2F4BFA7B76EF272C0E23DEB5D2CEB74248843ED5F22D55256A1D58E733E7B2DE68CBA8282A2E2DBC7A7722B6C776D44EDC08076B33F7A5CE336349136D9EE1EF0868D34F2D12BEC0C2A337ED811FAFF9848F1684D4666A705C5CD7F1312031771F7CA1A55AFCFA4B6AA820E903625DE2735C441DF434FCF48EE75510F71368D01C05E752A9FCD7A3988060EB1DCCECC6D4511415B0138097E6507A96151DB1CC395FEEB7036A9C224EC19E07CD77C5F4B42A8B12F4F2C7D34D1904278CC71C3F09910B0B07A9E8542F6CACDC038C0634BBFF44865C714D2E1F0A185ED83E835764BAF9BF7082EE7ADE32F6A3114FD3474AD734033A016F349C5DC63EF57C691B44522D46948B0F6319BE2675AB17282D20AD19B0F9FCA2DEC800F938DF78842B42C865DB3E636F64506351520357C6E3955DB71EF01C9C6A49A8A93E09B010138C35D33652943218722762EE56EFA6020CF6B39B4A09ABD5E1D25679460DBCA8B49CD027B76233D2F811917243F9F4A92E4C3646412F02D223FBFB7CCCF527C90CDE43BD51EED87602252A81EAAE91B9A25DB0A28EC3D4037698FC7517A6DEF0731FE531BB10B6602D8A9E0361EC89BF0B0B066E8B5AE983FC2AD9F14117EEAAA77B4859B1280BBF66D2410759BB6E23554CF4CB3D847CB11376C3D226C519C7F03D56BBFA3AA5AAB73DF9092017E89641BD252213205F526D84BBA512EFC115B5FC417EA55B3C93573BDC4B5ADCA8EC25928D162CF4F72C1AF62E3B80E9A1C2EEB72FBB75BCDBFA4C6F70588A0B720277B40FAE8E2DE108B37E6FD85EB0B7EDEDA76FF1B5711288AFE1BB1676C72D8480785682328264784449663B918B4AF5AFBE088BA01590DA61864FF45A37E50AB9F5C7E1CC6DA5F0A639C83685C8C249DB718515E1977FD9C915184CC7AA40A657AF7E46C92A240E7E3778CB2A8B584E4C4A144A68ED79A83B733C6E05B4B4194A2E16C91A35BA119A2CB35A0F91BDDD231D5263873F7B22D2304B9F1540097435EBEE2E42BC09555AFFEA67642DC3BFABF8AA89B4159298EC9C37ED59064DC41D786C11724B7C2BFA41F749B85C7B2F2E3D91033C5504BB9EF2F4AEB250CCCBC14786797FFB55CB65F644BCD313C39029B6D18E2617620CABD4BC25A0F2F78C934E2D0C565D89E150287B24CE1822B68A5438C21962F13E79967782F04B935FDAC2AC659A20A53AE39E2AD3106B4F1E106811FC2A20603F1E75F57C8C845AE97B9B7D32CC53A95E34BA118CD05CC80CF51D7A88456CAF3874F3EB795C180333B47AB7BB05AA3571920C26222F6B71C095B240ABA2787FBB541CC60B715672A94FE8AFA6A9F361DE4375A30D71421A579192CD0F4C5E06D9F7B9CDB982DDEF2196E8CEA59891EBAC822F235A48631D9EEDC231C5BE886DC79B0C180C47002CCD3C62AD95B749CD96C23130FCFC5BCFB247713C13942A628A6580FC8FF29ABC38AC5F8F08D8ED45A2D7C13B3B68978EAE715CA474B7AF8C7B50D43D3E4606AFB2D95A2A6C8EB272D1C7402A566E2197048177DCE2073E2D0834536F87E8AF1EF1E6CB6CA7D6F85179BD252DEFE38B3B391D29C341846E022844AD31F85C5ACD5682B65A613B6E5C42B70599D82BBDB9204121FCDA723F47366D4DDD66B4119A1C93FFBCB210CDD08CE3957DFC1E8828EECCFB148E05AB7927E13EB91F9C0C89F87CAB7A4A867E48F01734120C7FAE0EE88C11F34C70016BD43D73C9E2F9A1F5E8D89DBFB27008DD28BEA0117CDEAAC94731C113342C68103E94B4C011980519BF11AFF997F5D6A040AB896AEC10626C9A0ACA644D1EB2BF1427AE27AB481F4CB04201DCA6E6E8965DBE51BEC727638F049437234FB1071C1C2FAA3B539132265E4EF8B2EDDBA171BA29E3DBF5A889357F4B150D7739441C93777CAF3A92D1EC4DC949D08ACE5DB6CDD1C68EC0DE3671FCCFA6B0E9E6D3CAF68DD68E726884BCB2F76B70465D7448EA83ECD8DC9F057333E2850C5BCBA539D9507EDA87B423957E92CDDE81B90E3CDFEE9C4B6E2616B7B69B205C5F8AD0306E72DF2F3B7E0FF3CF8802C5ED03B0EC22C52E16EA3AFC45111B9B6F395DECB78BA3D848A9C80D686B18DD2366AAA04884D4F99170124E566C5DC1A44001B4837FDB7DD9A19B7D8E89A5BA36AF596424C4060D4E688CA80D890EB0D4EA79F479DDCC54E36578E7E8945BCBB3CF93763FDF482C1695BB8BAFED9EEE71F5BE4C9161BA9887F5F781FC013EFEB99328CEA6277B3993354D23E430DD7082CB5DB44AA8619CC0ED4063B1EFEC1DF763BFF4B75F9A17CBEA5AA8A4708494DDF69CA935A81BA00C515296FB15760E6D8B5DED6F2345209C4F511F86410A07AB209192926833A6FCCA58F252ECC8E5BC5A88E29F50F7233AC56E9968692969E878DEE5E6B7FB9D3B6B1F4D22479E5C2F4A550F510B4B934E7885ECF831BACEBCD2C3BDE448D18B49F7FD01B38C25A017DC2E68E2874AB8DF9A818FB114AC5BCCA9F27B7D1FF9D4BF6960F59D9EEAAC8E58A43C9FC378E4AA89D7AC90D8979E526B84562C74C526E9B2E1D56FB4A9E0EA399AFD82902E35684FFB19BC923A8D9F017525E3A6A337E9A4495E6184A90147218D49A9DE853D172E3B783F4507233AA6E2E2842DBB6767701BB9C12B486F2D9317D31DF80327873C415DA9A19C06929E2BDA26CD5C0E5E812AA7BFEB76694B6514FB2D28D26000CA6BD22DE7CAE811EC1849D00DBDE2A569883B6EAC5F0511C2B820F8E65B95121B71A47EE3B4188C9463DFAE2A85FC1FC0CF4AF3F980DABBC77C791BEC52A519AAA8042AB87654F9E3C858EDD282136266122A5D74C6614B4052719D5574E4FC5CDF2E8357F3598CE4D99D2EF073BA9F1D8D74F89692C353C3A20A8A2BC183492B7F71A5C611940591D06C358BC8B1562635B163875450782074AB2F6CD69D46E16C3104C007FE39FC982E7FF14DD050E83572DCDB8821A4C530AAB9E9047428FD9663A3FC4EFE406962C1261E2A10557C85D0AC176041E90B9081F4AB89724AE25B3993072D534E8FC8BEEB6DD3E492F44A66DD6C5756A9159B34D0A8D6E2DCCA32C6FA915736A14307CEE84E944CD5231A63EF62D06C4689DD03DEA2217A5673357F8F23FE8BCB648EAAC7898486F1FE7AEC63F579B2428C58B5DB72EAB52AFAFD9F0DB4BF5F267442A8E1461C7F2DB4AE9CAC2B50588CF3589EC84CE196B225264E102F48001196DC858C6D3A3FDD32D6302CA8FBC73E70020C432C1EBD18189D2F597C5D0A21422F3EF07668B75D40BD676B49B8EB0EBB7BD6D49FD3CA73F5FE19E501D1184D29C7AECB97CE81AF7B9F82FFCBB4A560340F37040593267D2E306E060E5BC4FD655E5719A50737EFA410E567AFDB3DD75FCDFB6F24754CBFC9DCF60206CA7E0E49EFA0477B60F55B10D637F9A85457EFF7E5855503438CA7EDF4AB23FACB7E5D670CBD0A8E6E16410AA9151456EF3BEC8725C2CAFB03A6F5E00D8703BD4235BCE970FF06CCEFA0920A50EC0230928A5E2B0B9FF5BE5CFF319D663B7CC7050FA756400E89718748BD9300D5FEADC139DCF639549EE7354F5247FA1C3B2D1A0968E8228785E3ADAC098853B33C836424527B22C5EEB1A29BE624F42E0EA57D5E35E1102E28235F77CB934741CF9FB05673C5C6A4DB29207036BEF490EDD4E2FEDE624930D5006576BE05100B56432CE0D1E080ECB9A76A02E47FC974DCD7796BFEA47E4F5194EE57C173ED7E0D9FFBF92563B07FAEC1CF8BBE9A600288B86E157ADC15B11EABC9A08AD965D9FE2DF4EDB3C8C99532F5019236475C340514DD790449BA750A46EE640001D08D54A6B62808325A2BC69169C8837DE2D9C1B5A1D694CAB32C30BA554021C1A503FB3219A6651F5F0F2D35A243B99B19D9E9A2C6F37F4C16AB010969C8876F89DDC0FDA201D7A334842B03BCBE332033BB1C10C6E104C9867E2E223E390D8950D080144063EE006B74019BA13AAF04FE902D12C1A9EFF68C80C95A81D14CDFAB7DE9151FBD2B1F19D76925186B92A4EF59653179A1EEEB4E2EE2232997EF93D1759D1C21D1D4CFCC584436744A43D15D6E77D081F0EEE4371FC684D60325E1884B647854CE5540FBE166E2899065F33DD64C72E212459BDC38424737C04475617EB8C2338494F7CF475967C4494100AC33F828397A208B905433F721E6081AAA1416BD9C9D73383CE192E5AF843C140A65A79B1FFB5258A6BB39DF008AC8B5BCC236448F9DC958F916AAB9143C0F7EABCAD0FC95DDDCF4327920485B7C538CBBD1FC0BF365AEE7B749BD1B89BA1929E7A97DBA40B54127A9324309B6DF7FA8667B417B73404628A792E23986A61BDEC549242C31547EAE5F79A2AA714E14C769AFA8AE600489C1AEFDE18E1DA5725E9442918C11C953AAC9B81337912EBCB30FF022DA730F163E2E55A9345CFD4F14A32F233ABBF8582FF9065F176C86941E3ADB7828BF544D8FEC0C439EAACE7E98863CC4A3F0E9BC1B045BA2C7E5E4DAA590474FDA2499800A532848E51AC6C1EC1F932461520AE8EEB55AB57E042553E9AB74D46F72B187B2A68724189FF0F3BAC2F7B3DDFE1285910782C5A37FFE2E4554B59F8A7E09E20C21E1C90FC2E28825E353F1F6B6C1B4F5D01197A0F693D7B2A88FB9847E98670F2FC971FE6C99AAD5CCE3661C6B2E703AA01E19629C412E5F008F2F9B70D6B302FF729321BCEC4521B84DE752AF38EF58BD7B3BFFAE7AEC3A575B9A92982DB5636FAF6E0BA98E431D6AAA8C628A9A705BF784DD9A7EB6B62E3EF46C1A1F53D53DEC3943692E5C8662550495426AF124E84DBAF87473D696ACD35B718C6444D7476B698537E6F63D5C273708B9810DECFE31FFB7162FBAF52219B4E84610DB4A0FF605F65DA4BE55145935ACE7FB29C8A10EA8E758AF6B96EA29E25A44B87D593F86CE992ECD35814AA89F056950442A75D5E57B1F98D4D62F1CC7797CD392E21C57F0B2C281B34CA66B15C0900FA89439F6C4D098291F57993647491574F6DCC4013E56C3B5DA96722339DF35007EF543064E681C24C477C27DCE4AE2398D66A457F6E4DF5D9EE4FB30FA0D72966ED2D6CECF1EA66E1A55C5D7A243DA715D8D84CC6A0F4B2A3AAF3B0FC7B71264DAA333CAB0A1D0486C71F6D6980C3558FD76F6D4E1F55152DD061211C5C99C11BEA37D7D87A20CEE76206AB2630A0BECD56643F54D3C6CA98C3BBEE30F37499980F5F22C2AD8993744FB7237A879A559F52744B3F847B7CA7DAC39542096A42BC12C05B80C8BE58EF70D5566DD46B5BB06E17A4C80B404BEEA6E4B2896F9890C7C8CD89A3C440F5B255324DFB097D08E7EC2555B02465FCABFAE901C15B56BE5BCDB12FEA408043290E94905149144AA2A31DB81DD948B3D802901D791F9B3E130E4A12CE628EE46DE4F0672B3822D353345F052643EB66C72C333226A879BEE7B7A7B7F4493B0DB9A572B0FFE72403171357C0CB273F6BE673E8C3B3D7278C9F80ABCDBD26DFA3BB3F9AC7A0D327D405F8B4D426A32D632E2F0C73A925246D82EBFE190AFFB86A7BA01260409109185B1E300D46D177BF9AAF1F25EC6D8EC66D9427D88A65282AE6B04952AB07667D207B430AABDC2DCA8488E312B97BC32CEBA215FDAAD121850136CDFB90A9F0F5F751E085B791ED986E565950D7CA21FC475C26A2DFDBF327AC28814B40AE36C46E8EE1F494F81A7C8BA7265965627BAD718E0752D83535470827C484A73634A4D0B2402B8D6A89B12DD5B68CF3FE99970B5CFADA99FE4CFC9DA7E6877035D99570338CFDB88A0CB15418DD190BFFE313DF575CDB6D2B7905EF5301552D31EE3C685298D72F812B78347B5E628FD7373FD8B22D87AF88946CC65BF37A5EF7B016EA03DF5F45F3137B9BA347AC3C2A11BCB65C545C6848552FDFB7C75B6A7EA95C9C8E1815E97707E0A22853C76660D043354B17DA55CEF0C1498F27ABE15A5BEAD08247D058B61E7C70D261D44A7D7591CB72E11BFB48E54CBFEE14B010A2E92A8BBF90E2EF93D5624DDB5018A0D6A49C46B16DE834A085C2F5404736171FC0615F552656D546ABC17A017F13809CD6483A8D8CB68AC1CACD143C3D769D0AF70E55593D56AD9B07EF177CA2B4FC96000F26A690F44B376809BBB70FB04B871734BE3A74263CCCE1EB23833597304FE5B2685BFDEDA46B6CF056A97A60702F5D711C13A8B8AF1A5962754B22E3500BF9422B89938203D0CF1EA3B91556AE1AA105D50462826A67FFFABE257D2225E592B1103BC2D51174667D9E9D4DE6D5C529F5C923B46B191A46DED5917F54CE04141F6F0049C317BE9DB9CDB47D0C70F294509A4EBD1C5DC0E18E859AB33BE15AD2A96C5ED6CBCF285C4642EA48AA8C75F7EA6280DA7B6415B21ED4CD03817A21D6F024F325984BA191B90CA15370B6A3101AE75DD63B04F38AE2F36BC2F725F603543572CC0E8A7B0C7AC96A9C1171442973301A3B42CC76627B2F14248AAF8D403655CD569C5F899F8A787C84F476D4721814405B3D2BA6BE3717000FA36727E6AA5F8FB09B0BC1E8DB937C9C82AB4435E3B01006C4CA1E1CCDDD53EE493A10650FBF33BA906C3570AE5BE0921CE430B6B3FB21D549E9C0A96EB305EFD1ABBFF2B77F897FADBEBBA98177CF3C53AA57BB25221C91BB1021E1AA94BE8088785700D564152209C6E8783AE5AE1DF60232240044A5C93FDF7F020FDA923C10AE51766AB0827D079337A3B0F4A8A0D5A49CC384859F3155710B5011C7777C847CF9C3EFE456538D758A2D7C73B1641CB36AC8B459BF4CFDD04658A5DE8E843CCF891D079C55FC046315C21484B67CF1AFEFBD43C3D54D6D4A835D62315B1356B4FF11F28B15FC41832AE5E49A3735CC49416D2454DCE87BD0EF30DB2A2BB1A2C632B30FEDCAAF0BF8A8BCD99FC814C263972B3AA53AF9932BC7F896259DAA8BF081E8D8425D44C2007C7ECB4904FE0B244DBEAD13529CF1041D11AB7CCCD43370F98BF10EC59742FC35B45122988DDCDB952FBF8B2F8CE6D260051453644D3BD192BE2373064CDB81DE110CACB9B9FF9E931A6D437C92641D417468404E0F2AFB89E4C274E709D9CB0253A1A97C9A127A54F05D1F5D193C131FFEBF024BC00BC3251AF6DA19B1C987986F1ED3FF0B901C425617F7BCD3B0C268EAA9967A41F176C6CA86B0FBD244A5C8DAD43ED4F43994EF151756917B1517D1A680069F650C4AAF6E850E57FB61F67294BC158BD016DA6F5EA6B4B268A392888761D714A5E864AEA9D5D15C14506B3FB5D10752C49DA0F6C44585D1C4BE2BDBFB56D724E9B9AB05593DFF5F69D0E015687613137920AED43E0491CF985004CA4B0F1D5A15A91D1F455A3089134457366BBF4E2DA08D7EF6BB25291ACF832589C2F04C2D9F9FC22408A91FA514CA995BC0E535A04A29EA98A7BE3E5517FEA02DC6205E824119B90D760F33547B6CD415B83199875726C5069B7C617899E649131E02F1BDC889F9D1F95D291785674130AEC81AFCC1CB19AC76F3D58336F4CF40FFBE51DDEE309453727B842F47A4B911BFE120EFF38FCC19766DD461A4FA4C829CB338EC741A5E8A9DE2A38307AC6AE6CF28FA2412887F286697E30597C07AD5597249BDA4A1C98880E7087756127B0A15B3A8AEE1F54A384BDDF87B3B35CDA46589712C97E06BD23C8198D08147F44F2080C8F23D138F2619D7BDE81A0C236E3D88BC8031E83F4E4283B7901F5D34E8E8B9E3FC510D02FC2317F35C40AC647E9DD5E0E5DF9ED5017660343348DFDF19FC64781ED8ECDA072E53180CE853573AC341047C046E332AF0968527873F515F889EC219DD307855622F17B4B8EED0844B71E793FC06A97313C90423B4FD7F995CF0E9F2731C2FD695E5F3935A3036A699F9C33064F4870EECD2AD23FAE2895764676E76E41766562E722E810D4815E00338FC84A1CADDE2640E79FC2949A59D7F6449945F363EFDDCB12282644DDCC8CE0DD9F01284AA38DECADD0737A2B2B1CE497B71AAA6CDD1E45C62F1141467FD0DEAA6BF6DEDD357336FD287F4FEB6D0828026CBE453261F87C9915EFE928093AB0D90D5294C28B73ADA21E313FF1D8E309328A305C38A7A1ED5D07A4FF238D1B33C52D4C22AE075EE3110B03FC2C283D5CF597E15F79340D6692EC4AFB28EABC62CB61DBD035F5CC551BD0C4549EA2A9F2EED4BACD4B71D8AF6CCB405B91C882CA18BE64FAA1A9F400FAB9EC5F626BF5CD497E2353642DE9FB80891FDA4514D7B4097EFAE7FAEF7767C0FAAAEBB48EA1AAF8C9C2112D50DB2BC4F106AB78115183A2FADD4A7D607497971A24F0C6D6B2177B24B84DF528EAE1130ED13DDCC6AE3B92F9EAEF26F9A6F756BAEC2B36A16CE2E77BED50E6BBB14FAD592243C5244A8600F640E17DCF3BD855B80DDC9A81FA0CF9EE1ACB22865EC4AB9A30DA2A05BA47415AB653B8394CF4A86FE150BD162FBE58975F719C90FEDB7F446360529D23F283491B1281B60C69697C4C614514FDCAD6E23576A62B3242FED11BC9BFA1F3EA95E97137706B294EE2A0C01F79A3A0F5742EA4FD05E628C2DBEE416777B4D574694068FA51D6ECCCA9496089A2FE2399341F5C46BDEAF50F760799F763EC9EF1D05214DCD90A1F861687E4F9832F5913D9A9AD529C6E100C9F09564CA56DF7D4037853A2BF33932E11502CEAC534F76FDF1C2397A8462DFBD8D5F679330C84624E74DBC7EE55B1ACE26230EA4DD2C627E938635E6EA6941728439966D576106B64128B97097AAC623EEAE390DDEB7B74D699AD4D360134ACD19D0023DEC4D60B4BA04202812433B5D63AA0F1F83316B07620CFA7F318A56B71D25100C110262741FE13A8CCC4DD01788DBC9FD52C77A687A013449F0F1B45B7044E1541B9FCB21AC9AC0E2B1399ED58EAA319C23A1A0FD56BCF733BCEC648F09C6E070F12834EF5C9DC99C3828EA7B0804DD7702D18FA318EEB7312E782E86F4EE84BB7BAA6CD06E64BFE5DE5577498DBA798E054740221CCF4C6E62AC1491DEDEF2DD6302DB0A5D664CD0C16EC7F0E4DE11C5AB7F0D66DDB07BC3939B5CE151692C6C9E80BEC9E38870EDBEC8AB9B0BEB31897B1EA69F8FC6580DA08EE995A001CAFB21C57F5D485B40F582128A50CE70229C7DC3F2844CA91F6ED40AB5EC0E3DED76E12C284E28B282A6473353590A797989B5FC70C67EA67BEDBE3BF5F67EE60935073AB5735889D9178225AC3B0F50774759E3575B360D6AA9CED82B497FC3A9790E48731222D0A95C2E507434C41652084BA61B7A6E8D77F7316AD9E8528C85006495FC87CFD0B9647E2AE1332D402C0F3234D22DBDD54301990DC76A01CF680D5A3DD52C14BA68F3FE125C63F603D8B2586FA0040FC5AC417E13FB3C5507ABD35C8F512F7862F4746EB4BC72D9E89392BBE4D1EBDA3521DC930CF3D8FF0EE4574047F283A57B6043B1FEDB805D2965574D472642B715D882EB82B480D98CE5E9B26FAE37B5944F66B923083AF784017156CC864C4945AD41B07F85BE8EC2706C7AED37E1690214F6817E05F7F59C05238A6F918C59FE2BA7B0C34D6E7455906F75D881F3FD6CADCA2CB93982199495A575DDED30CBE212C42ACE1052DFEAE088C1747124A9C99F9C4C069B60F5AFCF2EBBC1E7DC2FD23947D188307028845D011579448BAF20FF5FE1F16DD71503B0AE11E0F6439178C25D4E322CD5FA89A7808845A6B2998AC7DBD663D3C53B13C1CDB9FE4B32E7496895D711A5609785612FFF52706D271DE0FAE48A0BBB6631DC16C38C88154DE0C10119EF95389F1C02A6A3B5FBC1C1C046A424A59F6C46BA529475EDD0D30AEC43F20FE89C1E26F3D5096CEE0FAC9E4FBC43BAAACD3E87CFDA9C551B3FC82E86255915B8C9FD1A5527A5CFF5D8CBA8F575EF371BF1390D19CCC411650C9493CC6BFD500A27BAA03F8F01F453DE41847416AC623C4DE7445528AD052363D965E9814D56F9F0B5CA2EC2D9BD120733B3C3B6703DC19AFD6C8642CEDED36224322E42A5801C64D818AE1C5D90B3D635D4D7243E548ABDC2AE4F914CFFC41C365C6B53FE9C80252B147DBF5F3456FEB93195D2D046B5DC587500479A8ECEB01F2849939D90D5504B7DBADC8B0D43088BAC7E258F9800FAC5EA19730069AF99A29445831B6919CAC0EAEB4CEFBC1CFBD19DD0EE6C428D9FFFC473753DEFC309881136FEC44FCFEC03F34E126E55D67CE76FC4F9890C713A702D02E9B1640BFECD9AC1850D1239877C5B1FFEDDC00A6165E2F14FACF31216624DD20CCAAF3788C480AC82605C1296335CEB21B50D7296D44FEED0DBAC52CE329045396DEC372053D87DABDEA537A18A5BF0F69DD1540C3399BE3B1D2D665AEAAD0F7F933E938297F6E4C3FBCA16A0FAF058E28ADEE97318C32E83E3EAD37B621D857AA7FBEFEFBE137A20EEFF96ED0A140C1049F647EF4C55CC11931D641179AD6A7D094870D72569058780715CFF87E861945A317F9A24AB98629CF691F4A10EFF98AAEBC7F2AE590804DA80375C6393F8AF0D414CADE4BA5EE089E63BB7E7A91D67CA1C722CF4431EED82238B2B696DBDA87FBA9F7B5CDF6F3EC242A17BFA86C67EC2B5075644C0C1B9CF29F1DDA58D7209538F09BC6F43D03CBFE2235C24D985A4FCD2F3FFD59A420B7605E577CBF823AD3B67ED0B395A2DE00C2B7DAF8EA0E99562A58FC5FA462A24E137385A59F3568C60F6690A99B044A7B94769546071541A3AFBCCDB2FA3AB630D6C1D27263406288B95E30E4EAA56E3C9D45737869F4FC3BC1138A6CB61DC6E71EE750D2425DD9C4AC21537286419FB51C18400B24136182C0916AC8B627A986C8A2A434E00780BAD1B4C094B5E6D3F996B5A3C92737183026E92DCE003E137ADB6ECC851D9CA25E80586A89F1838AAB58299240FE7D2DA07F5FE8AB250140104C3C9E6E86B180C4C12DA9BB75F688E40881B4AC1DAE7976DAE6BC7EB987D4E8F04E598A6C52946D316A7D08F36B44DC04BB8DA0C59EAA16F4C9440F59AF43BCDC4E24B014A90D5371C6DC3F743EDEE15EE6B2F866E5FE1E8368BD9048B46F0E77AD52E9FD502A27D55B5DC23450AF75D58853D66B31B7CB4BFA8AB5202726917704FC9FD0C8A850D9F4B6655F9E37E2CC8C3D1F49CCABA2376C34CFE253E833196DB43C5EA7DA4FF0A6718D64E1E9101948B8376C6FA969F999E576D732EB0A64624BE49B955F6A2804C450572D18B350F7A00B44B93B25FF966F13318684C40F3F86BCE7D7C1DA40F8264E1FB98BDD856C4DC47B4C842CD88C4B66FF4A50C6CA8F2328704F6BF8096BBBDF87C4D1EB552D36E38A24F5FFB1E523F80AAEA5484025AA671DF8D8EC43858FA2FD37E04F4BBB333E57605B11D0E059D38F74A82B3AF7ACA98B884E95EC0A1F20FB387D48DE3CE0BEADE443EBF2EB6D3F8F222A96329DA381B191160CBCD5C23F73229E6637BA9799795B1C042BFB0413E28FBD710207CCD23AD2B547F29854BD6910FBC127614BC6CDAD950FA30AF753F6A4B0DDB0690E6EB35AF5F70B592B62E35BCCA207914EBA06F316462300923E9AACE30F5AFD7F012A9890DA17641EAFCE27B92F58DF5FA470AD5D8006C59709B0EC39DBBD469CAD055194A18420898A4D4E0A335B88B09FEB818A93B873D423E5E6287BE4D448BCE09686D86FB160D011995C0F790CB2F30E193299AC4B42F667A84F6C22C5DDEEB9D41EB3F06DBFCE886F048654B5DDEBFDE21BDE0E1CD508E3E0970EE739C2CD712A3C45E533C29F8EAB8000D81A5B87742CB25C3AD8043250477253023B68BEE1EB6B69A4ED3141A872043FD64CDDD7D95B8EE2A4E6B72D59D56855F091ED1B4751750C207D2722A7F41B55A6106CABFCE998EFC0B5E60A006D085F88EBD9F0F77F6E0E238559F46CCAAD02CF9CE11EBD4C92456F124FF25B7A363FA59E01BEA344212BD9DBCA96AEF377412592663CB968F7B7C4EDBD7E2054AF7394FDA32AFD6100B685913081E8D47B5BF349FB2A2B806688E699B3C65FE0A81F5EBCD875117D378B97C20E0C21BE5E0F8710A4B1546466E0E614B3B25AF36A8A6701AABF2E604FE804E030A3C8E102A6F72A0F56388613DD520BC5459B1F3F0CD96C01DC8C78012D88234419F7CFAE367C89C0E07ABE7E5F3866D1ED6213B9B5B0040F7E3991A95F85FD97286D2190AF0034C809E317378168BB6A5262AE684450A769E3ADBF51F9BB108F75BC9EDB0FB2144C68DDF83F7F646E3EF4DC384048C903C2B31560BAC3B25DD204CED7321EF816B49AE0F697CCD94A028BE70C5DE2AFCB5291EF3ACD1F59827FD01401C2F3EA391F42999A0E51B8F6559B8D883F7BB08721AE4C46E4F54B26E2EA5B4A7E3AAD113C206F062C2963DE66A8CA7127B8F4A82F601082C26B782C3EF5FDA57218C7A5627874B1399BA88C0472CB9332EA318472549BE1D4497A01FCA266A64E051C848D01A0CCAD9A93516B79DA7B04604FE8A6A00BAFF3916228477B165F1D5A18E2A8A245E0406D574A430ADBF4D13872117646406FA22DFD726CED69BA2113A3FCB28B0803F4062E49659B143517FF320DBF1AE08FCB18F851189D61C781CCABB11B6D4673255C9683D8BF5EA483E486F0C138DCB7D5D5CFABAAFF12A431FF3AE20CCB444BF34BF6D80088BCB440CC0AE32CE01C628DB1692DB13AEE2EE8B9F122404F8BCD73BD2D63006D95A7B736B8306C7A65E35B8677396A7E2E92A5B5D9BD9DBB57A8074F515A9232E3EACD989D1E09E88B6A027ECAFCF107224943A6E6700F848C315971E921B7B5F75E36618EABA3B6373970D26E83EA17E2D33F7FA2CB45CF3D6F7490A5C758E9B3C8238854FD74ADE1BEBA05E8AD07FCD0524CE2DBF5D4CB270ECAB2FC56BE66632E6BCB25E21DD481F15365639154BB85B3BE86E5686D746D562E32F7E98D286858BF5491925EFC67EE4D1417C0A2AB8DA4B1A564BA693885871A89B0F208B446EDBC7EA338070192A9AA693661538736D2054F53B1A38734900DD264145CBD067B753694C07E119FCCD60824966C7405EA98F29F04B7749B66F20C15B2D6395F30A0B6D57D8864826ABFC60E2384295988D43412D33EFCEC8B7CC110F64D7C2BAA8FDA08BA7D710B817878C6603B8D6E151DE5A009C0ACE5B2F0727BDFC6928DB63298F50B502D667D4E89D993639694FD478B92D234213445D3F1C59890425A7707842A996A0259B7B672E83CE77D25F70C98353420168FDF009BEEECBC2E2BC6BFA803992D547FE88BAB7FA58457E7CE192CD5121D29BB897DC90169FDAA0B29F109552DA7E297924C473FF63DFF3C9F61814C7700043721F2B3CCD5F100179A4F7D0AEA8A0E8D9611B83AD495B131D546A49593CAE6F9E2FD0DB6E52AA49590AC922FED0354AE1C6657D767A487A1FD1E5EDA26DE1B32BDAC32692AE4A5CB3D1A337839410E2A6042CE5CB9DC873B8C645B57928AB2CB0F108C0807E2B77AB8CADEF680A70C530C71A88353FFF363D05623FD34C481434ECE1F228BD495B3B3A7BBB5BCFAEFE53CE7C2295F4988CB107AC15002FA528C4D1E5C052616C42B4AD89308379EF3358840588149ED75C8A6688BBA0B40BABABC5872AE33327657B2B122E3369ABD13C639AD4571CC9F618859ED9DC5D2308F51D32F55C5599762D5367F6D9467990F9F4663677BB28F82B1B5DF6F9B13F301D49E46209212582AEB0CB1FB19D8492EB89C57CFD8ADBF17A5690FFA9B5A352F063B5B87A9CFDB46FE6A81DACD7202114EADACA2263C6D9179C1F8430395730C782221155B723B4DD3FF5918E16109C672DA73F5F28C47044B0DBF913EFA0CD46C3E04056CD08CA9E85F51B2E6107333090099C08D750E8AF59394D9C5E06C65A5AE4B50A75DEA60B3CF6749A1B8E8AAC40CDE6F5CDD2D2562AF91D9931AAEAA6E62D2D5BAA2779AAA499A517BA0BFA087B45F651F48544B3256654CC57027901FAE4998DBF047DE9BF2A6E460FA0731B2CD89680290F5E3FC567BA9BFE4EA7FB687A4399C8D16335A6F74F9E585C79B3417397047DF5150901FEFE0526D63935327FE2B983D5CE04E7CD64BF5A5A03433E7ADA82E8915D806F59C5E741051EE24F4BF4E2AAE26F3AEC9F25D86BC58E1A678E8D9327C0D93A5DF6A239D8033B8B7FCC648332FC6031653BA0016CEA349DAD6586411EBECC8181C30F1A79F1319999E1BECA4844229FE63F83BEF8BBDB8F9542517A36ADC380D75B8E95A09E24712520078704377F3462766B75910DE19B39B506D9C675DF776DDB819EE8FC5D91A54651A744218F9875076A05E780AA0335A0F910AA6E008D8C4E9765DD3AE3972CDB31BC069FE3391D1C35841B4EFAB1127CEE92F817EBA272B38A38383A401EA80C454680EEDEE7BD4E0BDAE2A7E332119FD8095D3E397AA04778BD08C910DF6FD24693B310B11C1684C727CB710213657E6A62B4AE15CF67FD1F2486C54B0C0D8B360D7C3050896952240DA42740D740FA77B42A84CD130F2662294EE96962F199407B28EC1E70D3FF25AFDD662586D16FD6452B4A4978B224DAAD6DA5FEB7B1EE141B347B73A4481370EB4B21C87AFB5E45C4CDFAEA61DDE09B05FE5DEDC1175C4479AEAD73C13166750C202F51C77BF1AC342CA6618E318DA97405C410A90212AC99A6C20DC2B144F52B2DFB7D7842C36C68277BFD2D261221B3A5F210EE5B94ABACA49654689670F854FED33C39F31ECB064D5BC667A6DBA28F2E9AAFC5C9D5156E08D2118FA87E77EA91D66F03AE8AACCFA213D6F7206A0668297DCD00D26C3DDD9ECA57C7A45CD6C2AE1CC62C483462C4E5F5368D931FFCACDEFC1FE43E954FBA4D9C2F8C169CD2E29612E3C33DEADF118A9304813EA1B8846624E8B6BF0F2853FCB8DD9876194C4D4178E08FEF17ADC6647058107E4C4147E6F66D991F0CA5CF612BC86FE3120F1BFC6E1FD3CB0DF1CD031CDF26C2019961D55C9A05E94A689BBE8614916416787EF00961E7722BB9367DBA4CB30DA9EA5B3526680DADA907E3EA0F369FF11EAAE0AF25229AD2331980A1AF475A5737EB2335B5A9D6989AB5BEE7EF8EE973CEE859EB88DE0C54F95285486D8F0A49ADCC8B6A4C0E83BAC016465D23DD76C9987F1A61A1D4EEA33487F7A72A6EB5004D77E9F1C31A29CB076D0C7026655FB17B20D027D5FA9A324CD90C29F3301AC4038B7FC347B733A6D0E138A4DE864B611BF9CDC69C54671F21AB1B632DEAA62312A31EBF1B867B1A535CD0B4F11B592DCAD57B9107B429137CD06ABF24F1C1A51F536058FD1F0CA298FB9F7A6BA9FD8E833D00876534C9B733EF2155E0FACDAC0ED6F29A559D79D2F28773ADA0FB16B702487C5A0CD11CB2C323D933F46D9D44E4DBDDCACA06003AB994EBFBCA9F08704BE1EF2B56715DD9BA063AD6645C06C9D09B336EF0AAAE3E5514220369BF4211727FEDFD10C01B7241218BA4E8EBA796BDB0FF91A57A4B23E7EDF4B8C5A24B66CAF8F4E864D411C73DC3702D669A6486352B916BAD9C23C0D425951CEC1CFE7B9F25B03D0DE236FB253A9155B16EE13523B89636B24CFE5308E184F1FCCB359ED160EC42C4DB719A1E71F04025BE614C2271D71A84D492287CD9EE38AAA8547DE64FC5F94FACAEDFD580A6E16B62F2CFC)] +cc 1bb30904f71d0f8ea16145a7188c1a5d936112be60d0f28e9c58759f00f01fc0 # shrinks to kvs = [KvPair(00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007C0D66CA566EB914DADC2FC0A83CFFE29FFC322DAB92AE28C96AE080941B4680C83072A9C6A58B9B2A64B0E34998D40B90CA6718228C5008D788605CC71CBFD1EEBB44238DF4B74EC55767EC3AF6F93F801B236830394244F787701E5830D67D56138133FEE2E0F839724A0D0BB8399069C10210ED181359D4527DB30399EB0E69B64703B802EBDE39FCCC7C6AF085B60FE885D33D4E7BC324E73B2E7C23AA2C6B21084BC7A97A5AFC938C6F04520B592B21563DD0E69DBE211555715E52E8B5E5990F64F331F61200F4E13F19BA68949FF24A641D6EA3CF6D367478552BD1C492AD674502FF0929DFBF31A0839BC42C99EE053F48A1B03CA3E42872224272759B3DAF15ABB1A454BE93BD34B30AB570CB554E29475FED7348181501F09E93CEB14C9D72C369ED3EF82E5DCD0188AC512A67DF1FBC3661A31443E2773B58C7C71DEFAB0AEB101D11FF4299A8D31F5FFE092C93A9F8E774329D0ADDE16E0BC418D7F0931C59F83D1B5A4CC640171CE3D46E6E23B6FC842D47C51B8212D2BD1E20B718C679D44750A4211100D655FE8F5255136B2851062DFCDB560443DD44E7E50A962B01939303BB0811B36D574F2E849295F9C2B8F57E3816B8AC52A2ACA29E73287D24C733180E4BDF6B817B83BDEB1BF5BF255ADBD110499E989E4B51C3FFC4AD79EEF97D6C29D9F61AB7943CE31D7F0F13F20D5F03DEC09389F60095740C2BF1CF56FA07E5C9A26B78209326F38153A92E5D7EE7B86A03C0C3EFDA69C22133A3F85A4EC7C0AEC7288B16A8AB4E7CAACCD7CA993B14C76EF8F3D91EEC82F6207A6EDD8C87EB48A3FE81333CDF7833128E3D5796195B0243E6B9F2494F8A59A35269CF0F7DD14CC784D6989097CD135420D1D9E550076FD9908FF062DEE018C187B131D500BEB78C243D7AA3AFF33A26127B0433C0B984B303B844FC237F7BBB9021389E48DD2294D2ED5A177479FDC92797A878F12C040C5CEE961424AD2F0F7F40297B70BB77E055B4CBFFD74EADB5A918B94FD0E56A50E7481B3F7F68BF08C7F2B711E5EC42A21D9F49A43977416B51CF51C5AF920EAA3FE55224CC6F17F7D3BFDC74AA3298AAE0869F5D3BC81C6E935A3A3CAE436C2CD4202CC35ED72FAFDF7C8417DCE4C94600F9B66639564A815DA2A5B3740C6AE7FB498BC8A74E8517A6BDB22208C327B36714507E2644542AB7E302DC883E92C56FAC3AFCFB8DB7B9CA26EA638A2092A56BF2DCE629B85CC434DEF0CA7FD2A2C788D09C6B7FC43E110CF5D11A1CDF05075A96EE366D5711B2EA8FA4DD95384CF7B334DA7367B8752EAE2431A50B9844E8527139A75976877C4E2072024196B8E8320E19A7ADD119A71B2849DDE92F7AFE465E25ED04519274010F44EFC1BA8216111F02552E71177D6CB4615455DDACBB7C3AB523D6A6EB4F6612BFFA8E27A0AFA3900CA480249DA23C9E04B3380CFEDD9ED8DA0AE7B4EE42F0CB47F5DCE52E92A8A698C507B307DA0450E59676852DB19EF26E69A7D46A3E7F8D0A9757CDDD1A0D762E3DA25D1941335A5968D5E5748B2107AA9E0261C3FFB5A1460A3F446FB0EE68DF53648BE52EF7B652D69C647116D0BD790E9500FE3BACB3EEF167AB27B82293D2E7BFB4B4A1D00DE5F7589B4B5E4CD64E45ABDE561E214518702A73E2B783F3E6F2A941DBFE987D9B6697BA81DBC041CA143B666DE0788AA6031E571E3A670677B777F18514A10BCCC0488F728F5A22404A42AEF74466B6AC12E52A0ECBDDCF90AC863E0102D75A2D082B363183FEBBBBFDD80EBBA189CBCFF9C43F2D3D7FF11504A9D904169D2D7AB5446DC9809BA0FCD39512D084206D4084DDFBF6DA1F680A4B2242757D88EF7F43B5851BC3A06E090DB77725984D9729ACC1BF788531A2FE2CB8D9D4D73D7690E1BDB5091CE315623B8689934676564564073EE6166AF3F23D80A79AFB7A71E95E325628D387F7DA20874D7AA4FC7658CD145C34D4EE236154BE2E91C562041790A7758AB214E6190522008EC999A9C653B0E0D76019E0ECA49F21769B8614F2AB17980437011426805105A9ECA1BC6D63EF94924FBB3357451AB44552DD2D760562F7549823D5A166051AE3EF75B3B75371DFA53CF50B041B7D4DD21EB354161D494B11C065A21906E48091C35092C5E643ACC5F2248AEEDF5890E6AFFABA6DBF90A503569A92461998E68B5116016797D3928FA11C77962F302D911BC8FA4B76EFEDDF94B482C770897238CEEB8181DD1FC75C04AFC149C4467B36AC7930E429EA32A2ADB7FEB2F3D77525A7A9852BDC7DE0AC1231234C29918E9510947F76EEF8819DC0537B61DC3C3309644706F17FB375A054233EA5BBCA6B35E323BE1E05E5364BB1A667A6ED00108CB398656F661B7364EA1A935E6D0F2A738A0A2C10A82DC3A52D226757D3CDB99D78C21EB5B5005E280D10D81E254F2F35BD26B7D617EA54CAF70D9A51BF7C90748D2F68BFE8957CDB1F31B44331B5051B36C66CE771EA46B7736451F6F8FF75E43FB53AAFDC1A5683632E7372CBDFE536C62CA1BBAC58DE8F4CF02E5AE8BB1A4C9BE9C706DF52AA96414902F3809E4F80ECDA6FBC15B7EBC3A1CCDC7533FE3206ED2A9F79565990D276B8F7190B140B59732490C2EB0800A72C69726798473EB50556A8AE27EB83ECF187C2951A79CF578DEDF38655097A45A82779945, 241444AEAABEAE7395D9D45A13F4E9DD7ADAFC586AFDCD888FC425442155000CC3EE52074633D710492E504E9DB868A89AB838054A0559AF248A187E2476EC4F602E8CD0BE15DDDF6A2859F4DA35D3C53125B2CA538BE0876A75D5688601AC8275F618C380AD9B0E04257A8D452267F7A047F714307C956B1022C8DD64E00393F630F507DC5F81015740F835907AD2C9ED43B354F521A1E6255AB00A64FB4551ECD6C23D33AB79C19E42ADEE42A3A615B9C5ED38E2D85B623E56968C403DDF5B9F609E7C46BAC0CD1C9BADFAF6056786E2CD006F30C4C6E7D9147A5A65CC220E4FDC7BD20885C7939E5C68A9882DDF634322C705A86253A08ADBAD510673A2214B81922FFE03D448E64642AA96B1CF438F3EFE202223A0B1A3F2E3E9B36168949EA5D8F2416B4FFDA7D85222CCD257B27C9C33C826B3C2ED78993889BAAE3B63FC285327B3FC2FD6C19B43F83079C61AF4ECB9E4F66794CC94E7C52D6B90262DEC934B8C0959E66F33DBABCA1A2FD627FF8CB39C2948F5AF53637CF5E7B8B584337BED32977F621A34D8DEF950563A0BEE1A5F1A799C3892FA568ACE83A2BCBB436E462524D5DAAEC71C0747E7F9300CA761FE122D3BA493132AF2097D56591F283136BD53C8FE56F60CFED6B3C5D0C16DD2E51C0D5AD3083014C871D60B96A531230F88428176855ECB77BE30303013DE0942C4E05C71A98D24512C4F8BD9260AE700474BD7C874B0C174A541AE1726C1B7FE3C51626339095D6CB3A426D7EE98DF4043FAAC01D39CE7B76E183B47E0B8692DAEAC3F854C88B98D6B4F97C6CADE81928A1D3CBF7523EE0271C258AFDA8C3F056BEBAF92E2DA0F3FB8418F96C23C8E932ABB4D501B73A7E7B63B30E06DA99BB6CFF7C4D6CEED74A0733D0732364F37171D4F18E38CDFD47746FDAF0255A32DDF66716CA0EFCDE83F9A29F52903BE8702F291F84736DA4F364E8753CDFD7E65BEF13FC81AC3EC12AB12606012F45B2B75BBCB8A0AB2978CF70BCB823360222E8EEF1C9DC227B22EA0820D47DCFBD82E8C5803D23A5CB44DED9999433997B6D761F076F7C3F3B47CE7662A8CB26CAFD6E3C9E10300D53B1167CF3F3A1E72DA2EFEA913204D50836E83CE09F2E19762C3EC9DE86273FA0714DC55C478938684EE5253D6F01AD5806346CB4F89CBF419899BF9343BC70F1D03D424BBF8C78819CCFA3BCD3849D7DF5AD3FF8A900A4C1701B237E3A89330C5B2573F007614EBE0294726A68380BD9FCF1BFB5D23FD4C3C419759A787D739460D8316EEC0E7F90FAFCC87E0A6284177861ABC177A9E2AE7AB2A9D5C89F71EB29A23EEE0216B393F7CA9444127D3D67E33582CB2A4FE9210D228987250EDB9EAC7E6B04C47969DD66761D8D5337A21A059A9D85B1FA7E208BABA48F3B9FD6CD8DD88CBC0C875D90E2DE5BC6AAEFE553C6407C743BBEC4294ADAAB4BFE1547A0D2933A34B1DD559A8691159191892CD60A5A76F4E3897C50F513612AA87652069DC013CFD17DEEEA948BACC3C57FE23D60F105F01176FBDA62815F3DB9E18E9CE884EF0D81B7580E62CFE2D31CF2441A9E871A029AB4DDE1FD4244F8CE136F82EFAEA73B0786A3F73FCE37CB584E5BEEA151F5FE5DCCD0B6AC29CA440E038AC5AFC718132289B9EAB54B82C9E1058D6EA5948A26A3968D2EB1A9CE4A16912659284D13183EA0EDF4C286278CAC51EA1FF5948EDF1EE38D030F2CEE9B1A3C6844E13F99855097C3F8CA7D5DD581360C43DB5AB2990198DA07B9C1FB44E9116BBF9BF649ECCEE171ED8EF0A7677ED18A7DB5F6D353F4B520AD6C3BC73E6B569489FD9194109EA8825581528A01BA8262D5F35B0E1BEC0F6659193C8FB7804514509149CD935669208924718B842857EF0287FFC3B660725F9D1E0EFA2BB71839B80B08C967F46B1705EF139D259D295128EADA7F026AAA74ED8459E68CA6308E0C53E2A0A396566B8D06F5AB3CC8EA69DDA610777E9EAE05A6F76C6D67755A5F912DDA05B7D16A585724967808A11626FCA521372662DB9D05774DB9E228C6363F2C44E4A230D911A2FE0E3DE4246822C8DF0C50AF3AF051340F1EF4B174E43F43E37DA1FE74C2951467F0C20F86D6D5A22E58FDE8921E3C0531B45C4B9BA8AA2AD5733E8E56EBFC537CEC56B4C49F6ADE79D2352E8111212ABC7DD5DD34A2165A5458E95136DD3F842AD6C3FA509C6FB83E0B0D2414C9ED8049B5F4270ACFDD614396B2B3A0DBA6019925FBA20FC8154FF406455FB8B03C4EB2000E6871929ED49F7ED737FDE770CE277A644A120191899AE968B3A9D3A791FB3CFFDCDDB16CD975A1EEC2B2A0D8E1603C2958A2DAE2098284BC2D59AEED82FC629201B0451C026971FFB8A1ABCD93B4D7579A69C1F8B97270DC05BEC61E99AB8275F76EE9AF9EB02EED91D0E918789F629B8D096BC2B5BDD125CC0F31349FEBF107333D846D3889F742DD78BA62B8A8B751B1ACFA1644B8727301A33FB3AD3F39BBA2B0D19B03A8113F405342E77E641EC409CF1CE145EC055DF9EF754F6437AC4A0587D75457D2E4C8238402628B97D31E9E30C5963E033B572F09C6DB76D13A0932AEFD8697A5B10C41AEAF6D678C62ED614FEA9291C726DD30C685121C340309EE241427194FF06DA499C51C73E973E28A23B74A3EEB1446D0C8380F4988D9A6D2052284BF34BD9FAA8AF84CB16A5A5ABFE55DB1E6EC42980FDEF74FC1D060ECC94EF22A4C7D17D575E30B7E4D12C536A4680309D81FB57E316AD292859BFCAFC4F97F3D9A18BB3DC890B1777961DACE74817BAB968B4B2AF1B42A6C63BCED9C8FB9F42C6B46C33AD248CC834F1E1BC2AFF46FFB2F206FE7C3723652713B3D0BB4BC68AE474EF885309029DF5D4F6454DCA314F509878CC1B9F49646392A97806F60FAA3EC73B5A3A02031FF3AD3ABE7657D5F0A44C23308EB0E586F3AA5B5BCE66EAC3CB5251352E3EE90D769500CAB469A25EF8178E9D72949A6133D14EDCA6131511AE8502F6018B489AEDA359701A6BF54E3BD90BE1EDD2D7BE5C47B633B17B8A5A2FAAD421B6D3580BB0BA320D2BA4DE768F49600543B22EFA9A2D132917BA77A8D55B977E228A7E69AF209C52AAD943A830F130CC13F02E51DEDEA9E56E56383ED33074BCB96AF87937E33BF66F2B66E723796CE58193D16BC26FAC16ACBCA60D0A78F5C14BD0C59496C90F9F7FDEA0CA2D3276D108145ACF828EB4CB7D883DA1F62E4B7AD3C1674A4DAD35E6F1B70E3E3D963B5414468393323913785347E5A000FAB972F10C29C94B70AEE80C5BBF2937285C658B4146FBA71C40760AB8B4E99F53E4A8E4ECB9FB3508C008B9B72867D3324B546FDB4BF7E859E4389A93C9D506E03888EAB2304649083BA1A91067ADD560C126373A0D89227DD2B73063DEA8027AD89D84B358824B261995DE64CD7E6750ED6B9CAAE882516AA6A4B36ED59EA9EB93E8653AEC18984086E137F411CD7072C1EFBEF567D93E7DD85D06194EB27489F94AC06B635147BE3F75C1CC3B23DB283C712D3DC4EC0582B9847D0C33678B231100082318A845CDF7A9877C7AC8ABB55086C9E237BDB9B0AC84B3FB601B9871E7DD24E7CBA5A0992A55CD707026BC6FCCDBC6353DF9449E7A1A9DE439827F67A9C16C8FB0D0118CFA946F3DE3525DD3F0D4487176DFEBD113249F541E9D1CC6FA82B979F36378808668F8F7EE802538893F31989792D9031981046D932998F055DC6CB75B5B526122CF4F149A055856FA6942EA4FF97B7D2C3B0580188FAC319F0469A7235A364AED91CF6B6C3B756FDB8C8C69A69A2A803DA8A780A803BD73AAA75E7F0F7039FAACD3CB72212CB45FF24095637786111AFFC67B826A00C4891E15B24FB3BE49B50564D53FD3B879BF99004FB8ACAA2C5B8D18D820E1D0F5EB884FEAB9F7EAF6FCD092E22A8A3EB42C9389FD8C7D6F3C1EDB7294C202D376469580D9B30DE9DE7F97E7B46A5F4EFEABE169548835FD076FBBD5D605098D98790DB90464DB5E333C67894DB88FB1DB3E40C4BDCB61CA871DFCC8F690B4C3D28DA355A8DE012A3E1E148AF86020A1FA1DB83A166CD006DB50DDFA4A56A34D6C5BB3ACC1C9615987A672A95F5F7DE40832CD1511A56D5CF678FAB5AF6F9A4C5286EA945EB56EFA0A41F62DD7C1A9F6CB803BD699F40C18494EAF6C22FE9095FC3DD97DA37C2ECE2B28DA6F05BE6C13389D7A3151C68FC0B7045EF8FE39690E60EE68528E1ABE83BC2739B79E317061F6470FAC89E47E43D228ED4C49DA0F22E7497FAEF7F03F50F102DA55625A327CBE7AA6428DABCDEEA4F75E0D8C5998168C8EA1F75CE3CBADA9BE3D43C8AB3F941994B3CA98B38FAA824362A93FD29EA922D472330BE1E2C594B5FCF53EC5970CC562254E6D37AE0E93295D03AAD0121A251EB4F160E564CA4EF3543665D7556B06C256228EA834D1620726171B6CDC506CEF0DD5A1C9127B99F6904D7F8675264D5BBE770BB7C4B5AA8FA8415D6E54F7ACE60643EE372B6892D8EFDC0F7754B926053D47C9C9F4B5CB4B7F3F878ED3465D9B5A850F5A3C48B7C3E3090558955E6DFC7188C65C8DBFEC2C9A2892CC33C1D1E8445CFD677EE2D2C224F4F0C1A3C1A1DB0E23309B895DD4DA78F2A0590D69633AFE4A951A401AD96C9D09246FCEE450B99FB4E428D44EE236050EC0E095132B2FDCE9330C2E5B8950C49B97302914E5E2A5121929F5782A8A3E61B0E992A3EED526B2007E75105250BA2A16D5E3A60DB14305305528F8BD53432CCE3751564508EC18AC4A0C391E03941DD48BD99656B8C6841D22098FD83F496000EE5D9AE831BD8B68998BF4314D23B11CAC8951B03AD92E1D84CD86C984135A37CFDE0DD1950050D8D16459DEC017964EC74EC511E8AFD2105FF6541AC53A2B6C574D7F185B6076133664FA459DDDF5ED38C94DBC291474FCAAE0288038E70CD4330E8F6300D61736A1DF86DA10612C20365F15D46C06241CC938726F06EECC7958E886BF2529117C1557FF1DECF263A0ADC364614A263082F58B77FBBC606B7C3ECD8EB470A625915A833AC53DE4C7EC98C29AAF7777CEEF6D6CA7CA7CB1EEB15F84B668C4753922674A6135D8EFB1C7D52E289C81A5C4B3B3F318FF0172DDF30818F2E91DC57DA202CE43F4AA88B9D2CCFB524E8D1292ECB8B9CACB07218CB9B6B49A86DC278296110EEECB6E1EBD1DB1B4BB67E0B2C554745F89293F882ABF5130D8F770D390D75090150501F6799F3D9DC71E3B7CFA07C92026FE41E6ED6DBDC719E031A369A36FB6A30ABB8D6495FD2110DBE01BD0B2C383A6DF43F0F523D74EAA782FB0FEC7E48F723257CE02A2B50B50708DC284C8A0C02BD0DCF65561582B7D1E3CB3E02DC8F141206CE9F0293381CDBB494B490546A49B29F4D4329573B0982A876F3F7E172CF5224CDB14F3B1552D6A54137B8CCB9E2AB8725EC890C0831926DE5561D4AA042683A9818E287D864A1D8330F35DE45E4315A5675D0093496581B731CD3578A2AAE6375254D460DAD48BF30403CAF083D0B0C65E4ECAC6D7593E2F8B859D3CF9628E495233106EC7A0CFA8BAEFA69F5F734E815EA443F8C9BD6738FA094A23B3D15A306E2956C636F7D3C04A2C9CB41FD8DC10D20ACCF8D7C7E69FFDD3A38C3747D91947190B86A98C0144EF2215D2A96C8430A896F6028BACF0777B2413C5E5F0BAE4ED954084A6EA94FF18D1B20192C10D849AAA0923A6F2DFCE704C4D94F52EF8BC8B67BDD079457AC7A73BA53024B22BB5A6E19A958D75004916C328E6A0E22E49ED27D2F77CE3C7580634573748568890A4DB8035E438A2F5757555FE548ED4B5F3516FF86FF50E4D79AFBD4A8D072DD6C846013ED936929E1A7585BDB638ABF694293490BA81A5B11F6BE3F362375233C14A57EFA49E45CE059D8A1B22F45234D9FA381D4960FBE043F959541CA3740B0950CB221E9DA417709EEB09629F8E45F461E1F5D5AE137F22DCED05B608001ED05999D21B49491A7C1AD46F380EEA808B02F0BA507333C3DE22C142E63EC11E4F56D60877D659DABC4234EECE8EEE8D0A6E9608611705AFD5C78543BB1340E22EBBA620934EC0F1AAF9828E2480D5638FA8A85F793768A9703136A764D604FD18A246A8C80A7D337FE9C7539BD07033C3130A806652B684E3A0FA92C4F16BB67983C4927C2A61783E37A9560B3625AFCAB3398480B1FE736B4C6D44BD9D2D3C7D6B975C026F42139A741D2391A8D27322471E8DB96D4B3DF5579821A6E417CAC05C570494B0BAE1763CC7F6332E166B5C685B3AAB5ADAF3EAB57E903332C4AA80D59B70A84980BD6318C7621C56A0089C209E24EF20B5560FD0060BD79143DAA45BFEFD78B6F8D2601516D2CEFA50C308FB164FB5D602F6E256D54991F9D6946A9FAE6A3DD06FB510445C0CAF5685017F69BC4D71A370058E1F782E0F33D714ADBE582EEFAC43C527024E5789DB17601EBA9B9AB06899D5D5A966343BC8ACED5CF34972E2AD21FCFFC1FA9FB03BE79E70AF209651B756F0040851AAC48EEE1864A20DF70397ACA8F656F368A5D8CA46047BFC3854D50CA4344C266F98FB69903745CF79794B7E44203F9DF3CF5C1AEFA7C28810EC9B172CF5E945D9E5BA48EBD8CB0B006407B997D240E223B923D467D4D9A1BFB67DA359D2D908C405F6A74D63363ABF665562A8332AE25D33761F2D0554B0BFBDD5A588478BB8C2CDB08A1F119CF149333DE9E20E7E2853BE35856E1AAA11D24D8E3C86123962AB7D4EFC1804125966E93344C4B1313ED8EB101A8477A3AD7584413303FF85BE8874D7C820E7ECA6F52967FEDC61887F59EAAE77C57793F5968A99C26E41DA1785A509E7510223C379601D2C78935ED30C4628963F902A11D55AA2080571A660461AC3757F3EF206FC1DBE5E0BF1492C9AE313315687ABE8650D69B138B407413D4C89DD8DDE5D12B57CB35F311A558587764F6C45748E61BC5A88FCC24B93416C666792BDD7193F85D8683A15399A2866F5BBC09816BD360D4B05F7068E20721F184FF18D5488CF0A2BC491BDFE06E26D5CEC6C3F5DBD515E40CE9ED7B3856EBCEA6E83A18AC521BC43115F4B51D0EED9E0F13E48F70EABF138DE66FD6CAAB7070F7D2E285313AB689AAA75729CC57347532F0493F23BE6DBC579A6602A9F9CE06E1E072A525E5A213419159F67950E1FDF674B04DA765E0A3FB246C5132A32B0D69EFB9756E33658C340BB4420706576DF61946EFA154AC4D436A5C1C1C05D6CA151F70D523E8864298035ECFFE5C5C4F6466E88421BEA2DCD444FC59D70CF5E0D5B2C830A747A8F85358E5BBC0ECE48375333E274EC44C9180C1A5ED71838A8F237DFCAA3784D82F3D8006A34226C4C7C5757B104662E0F61F03B92A5741D95A873F7E7DF9A5D9C404F95CEBDEE4963626D50B6BB5776F9451D7F38506F9593E6D6FD541D62581CDA16FE531352B4C7DD6C250528E504461CFF289919F6788618A064C38E4AB89B83344D5360DA43C7D4046DEBA5C43F42CB24CAA43E46F646396DC6EC016DF030BCB8C7DF834809E63EC2322D5FAADA886CEF96701DDB000D0A959C431A5025D31F5929ACC001D5C57FE38344E17E929C14E48671FFCDF9F6F8683F0402DF85B2DD8E2C2CA17DCA3AE8BCC883B2E113892E85B08FC801F236752BB349A062078943305EFC809245897DBCBC64D5198F49FB5BD7D668B7E2F9842AE5C8C1C43BE3A2D80ADB37751F1FD2AA39746673183108BB214812E609996DE7508D3D71C86D4D781786598770673950EC15470368B632A5941C896B433031B52091BD6031AB3E8B0049295001022CFF096641A3F6F8871261B438F4B07C5F832BA26EA96CE3AE9FE1C40C3796BA37D21713D74535BEC12030F3CE18360A7C92BA87C0EF1FE7AE8822CC0DDCE359247AD7800A80FA5FACCFE06E24CBA430E0B602BCFAD4B9C2998A28CACA07BDB865178D81DCC10A95DC06883464098A104AABA3EC1DFF08669AC903D13FE5A3479EB60DE922398A855FD9D4B94F0D9AFE93D42395D12AB9E64DDC3C3AADBA41E179BB399C39C3475801842541497468EA8D2FD8E0922D2C4F72D6A0DC05A3842716B2BC1C7D578827E2239B5FD9592E592EFC891855446FD1E52BDDF49DD94454941EAE8502E7088D50559B0AB954E0C382D999B45C728B4E52996CB40DD27A9DB89643E64D7D9286E9B1C9E5C00BAFEF42F9E77CBDF94A9F1CAC81711CEE5547FAB583D3D2ED696EFDA12FE718F592A1B871D409EEECBFF4B0AA27FD958AAA68E07661DD2DB04922C64BE82359AEC1AA7A276BFB6DB2AD425A0750404739407EEBF3902ED066673C716BEFDCAC42CF83BCB42F295733B55DC9BAAE8A8ECFDCCFBE90DD8871482B55AE00F46CFBEA337B6C3D77D8D9206D4958655026F416A65781F2188E0FEB119515AFE9778EBC0FA7AF8BA05E2502F2058FF09405D86C11B7C0A2485B6BE37A39F51D9EA44B402AAC31370738A4368304996038E588D99CE8C065057819CAB2D1588E3550919027482691077A78E142ECCC2AF0B3B5F5BF16A00EEE8348FDF2D5D9A2491F601F89D3561D0D5DE1FB59F760DF00F286CB5C6F241ED5FB80180D823BE9EAEE26EFD264AF1FB9133B1F925BF8CC4E8E2F0B22D51FBFE5A931E7AC1DE53A7E3E0BE8519C4E67C6E0A148DECCD55BF2BB07A52097F59EE4FDB80FBD473DCA8DA1D892037D2DD8DC30718B5903F737D09157014D250287159EFF1A921F7F71742648227DA27A06C17F02618DC9818EFD4177E022157208DCF3500609B129E7DCE44E1594760234533160688984B4CFF5BDA54210B1A4FCC2FA040FE75D5F296B2BFB39AF1454BF63E5AFC30C9E6F490025B34E0702EF4E4D522F3CF7ED99FA590575562D0F94239EAE2D71527F106E55F82A2272A5C08E523BF27B5926FDBBB43A014A78B6554FA534A76986D966512BB7A04EE734ABE28981F1D6B6240630D0C65ABFFE7BFD71B689B5FEDCACD9EB79CF921AE28ACFFB66D962DC901D40E1674C572C5B703E5E1336AD48BDE5E7990BB4E4AC93428B27FBD0664EA3622D867AC892E49DB06E50943FDD0B979858CE81428D46822DF0D07F07B011AC8A440EDF3F6CA700E5786F38FE75589FC7887B3740F2E470160956119B2DB57BA804DFCAD3FE17773124ACCBD4719FDBE0A7CDAF47E5D4610AE4F48D6F7BA48F28796C4197CE6316EC626444D993F54FECCCD82A2EF12E8F7CA3F2719C4E46EEE5EFF4CF1316416DB1BB0DCF3D58A430FBF5308CB9482CE2B9970A1A2E2938E4D96B4EFCE02F45BCF434A59B63675DD3ECD3968ED5945EBEFBB0A8EF03B60DA1D8D9DB1BD8AE9D68EB994846E72014A54ED25F80B4128DC2BD78C0AD77746CFD233F40394CEF99EEC80D24F5549CDCA004C0318007D7734C8738090AB7D0D4C79ACF8A8C2088090FEC798E5F6996E5AE8E82DDADA9C258BA19544B2B89AC89A0ED5137C4B4E795A29B0BBEFE25E6E1F9BDFC08AD3447432557C277F95E8CF7BFB976EDA8C017EFAFC97E4DFF5C777ABD0BB0EEB305A3E84EF9A6BE87818F126D24D84C3675AD365C4615FC6115E8AC0E0B5AAB841EC9395FE2F7D6185BD11C414ACC54C52C1495B8651B1AF19FFDA8144EC23BBFF6FEF10C7951B3C38C424B761FCBC7B84401964D19AA18AABCECDE41D2F042AD1FDCA39E98760AADA5893F95EDDCCF85CF3D4D83D890E6EBBCE915930EC7DD439B33B83012AFAA6E27C438FB7C81DFE07B27FEB9CEF18322132A76330A10ED9D1F30F64002774962849F70862008E090142B3A23A97F3F7BBE4B0726892B0E9DEC9BCF6952DB55A15506621B3141E9E5C01A18B299E30F0A3B72068B46F353E5FB4DF407F4201D063889932B3A7CE19D2341B9E03CFBBFB8A7BCEC0D23D0C7D76D12F56E80B732B2DD6BDD24043A1054873F72D0197F8592DBBF33FBCC6C80CBD0658271B870C04D2601A9BEB77897105F07446EDAF79F405B61B60F0F2209BB55F234E60D40C6C6306CB0267CB9E81583E03ACA80E8303BF49C9665D63B7F56445DD15C508953C7CA64470143EB324495FF9FF600BA51919313796CA38799842E089272EFACA20A6C91134E9A9822E9CB9A7CD115C3F13FBEB409F4C67EBFEE160A4CE2BDCCFCC696C2D9811D7A608B6FB1F9E2E53B6F599BCAE6556C30450854664F1F5715D70529DACC7491FB7E8ECBFFC5975D58AAC04F2376E7B779AB7D69AA48334CEE5D1F4DC426D60023F89A239BFAAFA9D86F74885B911A92B3AD51A1E636B35CA540918DE7E0C994B43A9E7F26B37D31572B05146400334A1881B37C2953059AB051978E55796FD9423B71323D7B1A26755C89B8DF464F1F5C04619102B1F1328BB525A56EE0C4F9D38CB72E985F2B67C82D628B650FB49907AE754287768A31A0128982FDB1D6B0F07A25E8BA86B4176A34F03EFE87FFF09980A900345EBE5B1B59D40CF3DAE7719972C1A2EAC52FDC73DB1BD55A34F7BD7DF411B40C031E27C87B33412A2C29F6AF4A1ACB0AA2F8DF104A089247AF157AED10E8CF0FB13CDFA8F5A50CB58AC7C6FA245803B2E3F8DD1B01A8DD80B9460F66BD11BAFE154FA482E7721D6167E959954B224B84463B488BDB934009665188F72ED7819939F3CC9C0D2F5D3253E21F0CEF4E738952BABDF16C6A6C8906806A6AEA7BF9DD44AB3F3990C31F75FAB41F16A5B0B168AE2CB2B125CD69AC58A903111C57029C73C1D9383AA9E6EB5171D57E2B08898554A880CB2C50B6D6CAF043E5A12C3098C7CD4AB7544E2B3F8AD7E55D0B9C403BF1541CB6B4313B1D762AF27EC440BD203CE00CD84A7EFDC0FC60AEF4962FFB071603CF5778247432DA797DD029CECD9DA3287BBF0547DA66623F816DA20590845B627C47211ACD8A531541D319EC6208E9032BA3111FB91EFD47C1B032E0F80B5735CBC0C89ECC9257634BE1A866208EAE7264B5814D03F137756DD1067DAEDA013F1B5E36AA0C9251FC32E34C8551FC9F80C710AF5C835BB91466C5E2B711A54F7CA95DC298C5E7C54483A2F88D6621BDBD57A0BE5E3F7C7EE8198F1DC9C9FA09CBBEF5E659B702631A616DC489138D12409724BD0A92FA4B145BBAC657F88049DBD6282CB8803263AFE84F7B9B57CD4FE8769A1CED9B9739FC547677C4ACA7F17249E3DD02FC740FD05D8A299913B7ABF14D55F20D22335256894A29BCBFEDFFF8B367BCAF99E9A372B4AC9D1B9B177EA0EA053B52CD1A63DB7FE8082E64FBB26248A523CF7234650FEF6DB9740C463D8D50E634C6243B59B46EA5B96F573485B7CEF23941A9F1435928FBBC975C80E8B339A819F9967E5D3337A4A78E128E96EBDB6955C9908637AF86308DD0100AF934DBC40CB5541D46A20E73E8DD98A645958E17C9A044D173FEC94E8320EE3DC4040C6B88F4972B6A15F0EA3E05EA83747828C9091D4F4664F6EB9056CBAF3B8F2378F03C32CD3DAB3C230E8E126542D50C5C5EBFFDB3251BE962809D629F3B679681162DD206BCD4549211BF1972A88E8F6635C38AD1205D8D6C1B225D67922BA068ABF676FB823FB486C8F96DFFB6E76B5B52AA892BD80C217AB8D252840932BB17042C5807A5B0EFB741383F98451C5C6CE535DA391F88CFB17D5AF1D00E1C26F4B0D002C22244385BF894E4CCA1B4893840E94CE93F18C15D521F94ED57BEECEA77E2983FFE3B7F3AB5E70918A163C22753C5FA8930A6A8F8F736C97C4DA02BCEB267AA4C1835258928D44971FEDFE722BF406F8712AC67A739C91C766CCADEE60A1D2DFDE9BCE424B6B860E0552A61D48CDB070E5415FC098737781FEB8833B0CD7343FFBC0BF3EAA0DDA98B68A0AC02BBFB1EC9F7005AE2A9325BD614EFC1ADD2C9A6EFF01F8C50A7F1CF53DDE180148DC8E02FA93A4723AC3C28198A1A31AABA76FEA79B8FB239B74D925F24B6910F2F20650A7E311FA100EFD86C95F878663FF0777F21C7F03A2CB4157FFC959DC29DF1514509683BDEA652440E72DA7C1E7E7E8098C9625B68FA1E4CFE9503AE601F5BB8F910AB660923085CD1E8CC4124CF84DFD71CB09BF42CD7527AFAAE9B5CA9FC33E05A311BA717F912A3A013D32E4279566519B03031E03C2C24546D2A06C2385174F3B3B89ADD199C06AE71006E78267AEAD64A62F0C34F746A8A3891DFC175FC3E9D5927079B4FC7B96226B3CD5858DBDFEB40E407F70A3D51833442C6BAE46D084AF86C671ABB5962B2801F8B8046A331984C47A39F8CDE43E259EF66844DA60A5AD4A6D05C5ABBA619D848DC090E26A9A7B529B954924586BACD764A854A8D85D700ADCA517826A795A6738B6963DFB994271FD9D82B8A635BD15022415255B7BC8E18B55330434441AC1FF17E63193E85E89BD1035FDAB0A334FDC6E9A975731AAE09E96B37B28B36CD1B0AC1AC04826F350521D43EB50DF1F4F0E31A65710E82DDAC2EA292F90F28A126E5415C9DC233564485603A76B58A65AAA2933025425A6B0BFC685A2D2C25984919C528C25671EC0BE7E38FDAF43608717AF3B51284F69C11A1AC5A55A3A4C6A60592CE8D61FF9ADDA32670C88425856077416EE7D1FE69FD6C4B9648D9FDC14A7C24CF766FD6D93D9606AE771AD770001C2B9FA31BFCE71E5F9A938B87CDDEFD09C6C9106E3218077D2EB08154ACABFBFD317E7E236F60648A4535C3092E658323AAB4CCA6C28593C492E8895645209D9AB9E32F6F4C8E1949BDBECA30A9EF5896C0490C3F2CB2F13F2B3E25A2160B7325D2E4DFF1706D890F21509DBECF4A4664CC29B1F88B5C72F3CF1CE3D3E63BCED39B90258A778110ACBA4B03717C691EA5977CE1CA1D98D1F1BD1D0AB0D8EDA1BC26138B2D72284F2E3C5FD6BC18ED5F39BF5AA9B3C2EA00E74DDBEBF9A997922BBC2D0DC4BB386B3853DF9A04013CD5216C53811199BEA9FB79D199AFB4B679912FFA419E13BEA5CF090403F203BB6C779586BB9554ED00D66F61AE91C0196342FE6BBF95B4431685753D99BA39BAC3B2CE8579A6D894FAA8768AD36EC9EE991277AD1C4D28AECB89117EB76ED762EDBAF62B65917DBEC6E2C818041746895DE87477F5F803AE273BE67C849FE2EAF5F794B8CD37C7074F84D7535785FAB27696C7B9A421CDC8B98DAAE49212FD470E1CE20FBBBDF8661A0FCB3BD2EB385EE45346BF732F45995CC70DD580987BDD45879B2EC6BB8FCC293C6BC4EF1CF476DCA71CEEC270E4C791B0E451939CB308CAA63A7FEF21276401CC74F5A3DEB20F617957E30C29B66287C827DA87475BCDC645B9E391D5AD133531EACE5D2F4FC386196A8EA550DF9E8200B4F0F1AFC45B6E4B5381C0CEF250C46C6E5FC4AF261D067367CA80B2BB22B06E69289215482524D3797ED57D9CFFFB5FA3D77B2F98F5FD1FC329245CF1366174314F5640B1F2DD68A04CF3EF2F585375C999170C0C1205AE4E6F998F96AA95AA157001A30233FED18AD9D6B7F8019871C7F81FDF551E5EB661A118C2B76362DD2522E84E3328740DC7C7AF9E64CD862A4E13C1AB992CFC859999172149A53BDC278A4DDC47272FE5BBAE444E79E63DA121DEA3C266A571AA7C3B89A9A19D75E56D1A4461F3DEC87EC788E9EECDD1E7739C72AE945DD531DA6D8FDB436D1DC255A34AFED5E59DD2E4CB27EF3581754077A3811A78E39A42E4D8F369CC8642BF8B32CCFC25A445787B6F74ABEABC01120AA5A9394080C055248EC7319C4B3E24A772426ED5F30F273D38DCAB85BADC3A708257BE665E82011004E6264AF4998872F411B2D87730890EA1E058975C74238EA794EF1C90D94B437920EF739B7FBB81A79E81DCA06481FDEFD704BC0854C6BFCD1A9AD039A91A44D4570EB252CAB9F835597853C299677629EAB629AD5C9209C9CAAAEAB03385C055AC0B21C4F4E55AAEFF883E794A87DE5B3F2EEF63D3AEE6311A298989190D24CD529F2B6ED191B480244B85F9EF249AFC1827C3BD33129D62C6DDB6AED04C3E89AD4A2E5735D2BA24DC2F0A7B893F78686839B913FB6141E899E4001D3A492E0E85175C502C0366625FC57CE691E10275F29B608C404511CD902ECD43D17CC8F523A2B70C645E833767951B8E426B74A60BF8B83B18AB7C032365BC46ECBCC8E40AC7E5301CB86B7E95DAC91994505DC031C186FD4C51B574CF8C79A3B9EB9BABB2CB816AECA7139AE9F0BC4103EF2CFB2D7A5E6FEC7E2D356183A527DC01BE41C0E824A720B76CCB50FF8C4EE3D713F1B0E9E0DE6394965205B1BCCD32DF97A753AFBD80E813585D01B8529A7982BD912B48C77AFF39EE1ED716E825638901D5EF2AB8DC002FE63A2DDBAFA7854B4DB4945C1DA8098AF8923AE136844264F02A3E4317E09B516E23A76ACAAF6978D68FB3A6AFC006BE42E30ECF87DFACC8C8E188AE5383C0843514662E7A64167558FB75BC273E55C23770020B338F8458B6DB89D82CDDA453F509556CE73FCF185478CE2E01EE65126F8864BA2FD4920FEB42F6B486E42C6114A2C2AB4C0F74D45E40F5389275949FA1A029DB76A3EAAC2E9595633ED2E35A9FDDABB7F38384D03A2D6E0B936A550DF8FFE6B935B1D50F0221D278107C13B2C3B7EAE1AF02FF13267208E653805CC21516B951EDB98D8DE14B6E66A07494C5E14EBC044ADF009D214DBDD80A8475EE72025715074EFE612023394AC8FDCDA6DD407A877C57192AFEA3F237CAF34A8B2E7AFDF173EDCB08524086720339F31857E1152EA473B74B66E6967A1585F01BF1B3979DDC42F77496DEDCB7794515EB8C6A8C81ED2A8D61E8E528FA888E3F8DC8577247254674184473D332E8CF234BDEF5D83D72C26AB450B95D001E4B6C66F9F754BC1E53FB8A3D60F3F0D3526D3C5A2312F924753A7955520CBC8E5444CE1D6A338F6CCF771F319ED9E368CDC0DC6D833F55DE0CB3E2B31F477DA72D37554768D4C023297BBC4545A70CBD5FE8FDD7AB9145B8B05AFDC8A4161A452C2BE5D5916BB7DFE59291EA421E771DDFF25FC37A36F8D81D93D7738DCAC73672883BAB49E7D527EE021AEC468744A6FAA16A472BB6B7FFBF1A6F62E605B22DC66DB9048900EF77B5FE38F7665FB8A2BAB7AC144851561318893561749AF1388F33DBE1E47AADB5BAEFD0C7147964FA8BD4CE448B49FF238B786B04940AC36655F8EDA394E7521800592CFB1EEBDD26A4C03EEE79F3265F412FB70A32824C4200F15D7A66A26D4FA394D8B6A54713C149899DE87C403BB98150FA7AA514435730D9EF1B9D48A6A706EE5247DFB47A0D8BBD1FD37161803F568C9718A2E8FD579E891360C90746DA7702608F36FDCCBD82FA7FBE212EB64D5878984F2F319E19FB79D0CFE39E8A1504FDF8941C9B5F7EB8A1B51D70710B8864D1201834D25534F252F6CAE0DFD6DB67D5C5EB0A3035FCD62375CDB4B2C279DB51EB40F69DD5C7BDE6A6CDB21148416498BE88F6CEE8AF8673E204B69690B3AC1CA8FD5788C4891596676D25EF5A71B569E51E7973EF0D9DAAFEDDA720462F19847801205C705C8E1B82370B02F9DA1B2B6AE120295C447657332C7FD7EC5356846697B21F1EE52B6AB55BF8C06B8B59E28BF5593A40CA7DB868E4D67419A4B0060D3E1D0AC9AE5462C40EC3258A1F9375E20CB6136149CA1F7E41BDFDC89EF2D6A03A203D5117A09B36F7F4F248498636722B403C8AE95FEE953C8FE41655B020DEEFEFD901C6D2D8438C6D6C2D92835B5F01DB46E27AD8F4E68107C22F0EBC7E0CF94E46F370A74BE792A8970C98D28F9FB42511F1E81BC6ADEA21BBAD33C134CF36190B3A889AC956BD146EFA6F789B2A1B244AFC2584814B5E45218DC53A5F2D6A2824964D2A3D140E9D7D87612FBD3D3CA694E1DC003F00EF8926946733B1CFD8EEE9051C8D00D8FAA36CF0F6D71318E26DDF5B9C968F6D29C9B5FF1C0AB458A6CDA05FE7FA6B6676BF58EDF034F6973551D17D457A2161E7A640A541BF6846B6367C64AC3666C38E26ED39DA9EECD4389FB8E669CF50F93C7DF263D3FFBF5FE32DA66D3E55723E50D0EB09CCCC08E7B2CD948E673581BA2EA42B3D5C29D571939E61CC5FA23AA9E3A63B0C3056DA5BC968C4A53391160581426C109269121986F5AC10DAD7D12137BB66CF635E484E52E5ACC823E70F3234C1DCE8243E32E24B3A08F2830EAEA3D576A5B77B1E2647EFF5A7BEAF10A872B1AD56ABEB82A78DA11B559C4AE53FE9E1851819FFA1C4421C721407B0BE40FCDFC7ECEBF01F659A42824D880A98D097C9CAE9DA01612F7ECF773571928219011D1677C149022D759A81625D59346733A0D6EC4EA5792E44990C9FD09D54E8F5E59097BB1E41DB16DFAD94EF9890579AC18AE3F5E89F1AABCF33A8D924B91FD0E9A81751512BD12D799B3FB2C9701CD2885188046D6F14CF25A19C8ACF3047D04C761607C96C336E86ECF75F97F606A38FFD0A80922BADA4B61D28EC0A6C9E7B6F9EE41B06423A822E9C62A186899B161ABB9EC266D3B284514B4B51BE49D767C0C694FC4C755BFE6A0EC9E86C9CA84E737DF7E5CF7A923FD3EC1DB87C3789E2A933F74142A58B2989C3F0C44BF805877A3EA924A717EA013765251C58CCEE84CE1F2C33296C856930A28514CC7941A140A0DEA691AC8CF2EF4A87EF006BF8CF20B1194BB4317E0E2923DD0861F980A1CB619BB4E3DF70AA314D351AB094D5257BCE5549FB6C3DA95917CA803FC3ACBF562E445B228D106D859519857616A8EEFC0C6CB70C46DD04AE7F2CB4C1F714872573E96EA499CF0FE910B0E6F8D2B3C0EF00680FC3FEC51A9CF0DC986BC386656ABD5C7967F34705F8C7C8A723C12329DFB0B9D31933FEF3403FA986C621DA51ADD1C53C9114DCD20812EF51FAF31622F8328D265B7AD68C228B9D75E5E54851DB23EAC865D9C606D9B5926F9075852ABBAC1023CC0B81063B9044859C387D6B6DC0A4B3F88D89FE2599875C97FBC1B7A7A79D4BA7D6A3AE603A046CB67D501F4406627F8A144537777835C049BB6BB44736ECD9E5667297AF28BABADB6BD7E1E7D615AE2EE97F20A6A990D3ACCA311C1FDD84B1196D67CC93443CF29057CA1F9A05DC6E99AAA736C5692FDFDB8885D9D4DE668859B8B4677B000BBB44CF1FB78F4195265B85B3B24432D1E527CA0649405B2A008F0F4B040890E4C53E9D3891EC1DC23571CD9A4FF462D6AA1CB7539291544AC69AEF500EDA72311D8181C6BC7D20F85C50CBFC611B8B3F566CFF379CD767D1B205BF82666C1F0E287C164951AF091F5E722F2951394262C4AAC9E80B1A2ED3C218C58895E4967C8A37E9ADDAE27AFECB045776B4FEC091AB68ED34FF9AB40027D4D9D76CD5DCB13D72CF567551740DCB3C34F951C7E9BE8D553AB580916496EB81162571FB29EA8C1F2F3D32953CC1AB8E335ADCB0B5ADF5C21831543A93E4A5C439E80696E8417609B3C4EC785EB8037F1B126CAE09C72D9728C19D0F2458925685EF7B5CAE3356568A6FBAB30E380CB9AA128FDB0E435743288139530136E19F3B0563E357F1826368356D6846D71670B355C05AAA285CB484FE0EA1CEA574073F9984B7DDA727E7F20CB1931FE40C548EE98FDFB80014F9ABF32A9391C489EB21A87736011953285AF60C5D67FAD923894AA19BD2F9810645F3E8394739C366ECD74A93A1455268C26A9A64684A783AFCF415C96C1A60CCDF629A48D570C1AEEBD989D20D0D8AD131F5FCFEC173DEC4A78901939446FBE62505B7A8ECD6358BCFE561BED8A99939ADFBB581B53A2CBC8CD8DBB60F8C71313047609BA15FD2EE5F9777D1C97F43DB9B012C4125E8AD424B0B41B7E4A89376E5579B33B916D8C1262F4DF24E14AD53F421220E0F9ACD07891A2B6A2AC335585E1B4E4C6BDE4BA667FFBD99AE05E7C129FEE519C33E64EAE8E30EFBC6A7B7C4BF6DF5D60B1FD14DF183671950900B14AF92E5C929B94D8C854FD8D4F4F76D394706DE91F6294E8006D51079C23C7A88F63C01F20A5C364C0B085744C03762A62C49072501C055B59C55A09B0D26E163841F6E6FCBDB963A63DD3CD822A5F13C2BC9F854C8B587360DAA8AE6F7A35D7C5343FE06ACB6D3948C9F73C0B5AA554CE556DCC9A3C579FE92CC7FCFCEFF49E5C6F76C77440D81741BB8E562435FAED2D4751EB8BE7B199C3847C2EA3B175C43267402D81F5BA90E78F75903C3DFB121AEAC89AB598190B843F81E30595FF60D4C1EEA46E1619D6634DA6E09AC2E88EBB8B3D30FCFD58C0DF7CF0842DA610BFEE3BA6ACFB38226C4573E78E4DA1C09BFA52C3F85E06A3478ECEACBE21CFB0F47B2241DBBC2B5AB1F5A5A31033DBDDAFB5666AE4E7C0C25BAAE472E8E33835358D398161745C96E44613F6A97A4B04E91877C7DD75C484994F62F05221DC8A8C0A3AB04099DA12656A6C26FBBD9F5F70A4B566459B93BDD36BA225B78E55DB2D459F51681CBDD91B8F1E1370D3772B40D3242E2BB8843B3A94C8EA2AE221C955D5AFFE60070F4C3F76FE6BA7DF38F1D3931F9334E6ED6966673DF05E0AB707D5C1FFB0CFE906B7FD38C0D817BFACE7DC245CF0D484C170CFA53E25B694B23F2155AEF8A42CFA30AE7C9782C63F751BB05733E59980FE89E8E0A5016CFB99DCDD57F937E8E33B9C7C6D0FA8A20563DA1EDCD2B626169D09F57C0C9820AF2610B392E7F87B3426EC91C2938A668E63405216770106447799173EEBDE83C5395DEF3FB371E87BD4E4AFA141BB2B0B1F64B3D8A594534E88936B6C8C7BF49E8085454C63088AE3B895170331C7CF9A4E6B9B54ECC675F7206E269353738652650E35D4473B191C101ADEFA5DC56983A3039D30FFF67CF4847161838791368291DBE05B9936B58F6D250F973003C5F3DEA5BA77B7467EB8878032F6998FED39E5ABE2E7720B6FB7BD158020C96BEACF55084CF913156C3CF1A1EA50262010C36CBD346ED429FF495E53EA0F4E5C0BB9F017A99E518E6526D9DBB59A081F6485D5D849BC5216D5D307E1F06052180AB3D860B4AB9F152D1237B76EB9000450F1C13AC97657506DC1A6E36B48ED40A0A7A0EA8957CACE628A68C6A73ABBFCE2CAFA0CF635F0764E95A9D509C8B1461D06ACC604D86EE7C3693FEAC9609E5675793C78D683E1A70E5B0F2C5626CEF20F945B54EF1ADD102C66E6BC038F5BA6056688507937CB77F7D7669F454DAC9155BD507F6191B85F2887F089D56960C028B45301CCA09E121A4AE13E66079E18E4E387D0872CB4D85E232B7ACD510C63945A54B3ED558069325C41FF162C608F8591C1DFCDFA676216FBCE4BFAC7A4A9D7597C3389A5F8D8598673BD0FFAD2840FC5BCC624CC967B11C9207787101F6585BBAD087BAAF08D8E431952319F06E41A4E31455FEE24993FF2C1FA873A1A3DEDD9BF5C27CFA05DB1F4C45E6560AF35308692FA3FF2F17C2363276C8FAFD753F155FFFB1350F308F3190BBFC7255E30ED456A65322A9B234611B14C969DA8183B898E089C5F65B4D86B1F86C4284ADC4A22BFEC95EA559F572680CC5F5FD5563B3975142AB500936BA8FA630360209F66D2FA7CC6966FC2B35CA04BCA1E94526F40A38616FFA970ED067BF5F5C464261770F62C0F0334CF3E8C0D96DC69F134912DF477E38F94D4FE968A8F3045F1369C2DD7A2A44F870BA789BDF7F6194222BBF5BCBA2B31889424DD1C25357FA4E15C09C682B8DBCA475A4D270B11BB3401C946484448380B8FA8286614CAAA2B20E26AEED69CE3C80DFEB5A784E55B80DDA3B8E723BF509459C6CB7E2EBBD69B1ECE2121D1CC917D2F5E01A91723F39974B45E4F9D7F2D242EA4A7E319DA8E3B3ECA3BFCCD328E4A28F1AFC296553F3FA1CD3E9078DC9190C269EB9898B1FCB2F3991CF5E4AD9C730DB5757FD84EB1126F3086C624FAF0B5AC8013F1DCD1A5EC1615053346F4B69C826DE03519ED72E4142E2F4C2BFC31FAB3C0497ABE043450CE29FA628AFF6A92A2F6CFEC37AF978FDBA93CCAF2D68BCC172A768F4BE02D2B267A7AA1D2D3A48EAE734C4576113F07791797ECAF59C06A396B075BAB7B675AD3E7AD634911AE85DEA47E2A00A8715EF923674268BCC0CAC41A451657C1DBF39704825D4F27B8CD44BABF94D5B707148EE96D5821C9635C605198FDAE4C917E1F90BBF8D64C49B20494A60F70108FEABFB277EDC2E6815DA2A0BF3C370F78CE3247EE9FA355D12D950EBC32297999FC4591AF544D99F5C4A40C89B171DA9183D36C82F3BAB27248FFA3AA6A011FCEBE6F43A59A5A704CC3EFA834F51BD1867947B770242D4BAA56B9D91962BCF56232B0B59E377ED4D50961F1CA706105C3E0050056AFF3417261509FBA3BCFC8B4A7A0483A9FB8C3128B66BF92ACE3D3100039EB02DAC9D0DFF4FEC0DEE9097947D4FC4666E423B92BED88C17526738C34FC67366055E8EE9FF2604072B658899C7361F7F9911D7EBFF4634B5E07371C55C7B22860435AC3D8A0E98F3A93A30B963D54D12C4EC2CC3CBD40970E5D7409EC0105618AF7362D7A2FE7F99BAE26920FB767721A48CCBF783920789E196D2D4C63943055E1277257C2262B2CEF506DD4379E691363B0DD256ACC51252EB88FC234E56FB12BB40FC3BB45D85E86A1F6CF46EA8F47A1F411BB5B3FCC667E0332B7228ECD6DF209BA9B0F301C6F13BE9A9F7013757350728626F505771E3C31C50B1112B7E752023DC1D61C07EA859AB880E20307F12AEE47818CD68D5709B37F43781EA3E66F15AA9334D94CAAE7BB44855A366FDBF5268A07572DAEDF0A7A4D1DED63900C0FD2AD0AA4D37176D1D17206EF61A02FA57030E19D1DC492257F19959C5B6A0585C7A0B23C4A7F30D788C08949C1AD547247D6DDBB4B6F15CF52947DC8DAB0401E5ED34599A529459732FBF2327B2E879870559BC244F7FD874EC81AF5237C73AA097573E14AD3A0DB57B1C448139055335F09C75AD1FB0EEC5DE0965A54878E52F5024113A49C19A20A80C5360343CFE0025597A6741FA20B956AC0385200ED97CA531463E8059D6DD14A39F91EF0B5C8D421088D902F77FFB128DBE6CAC50F5F8E27E04EE1C2201ED6C9785A07780D59F7EA9869B0516AD02F40905E40073E590250DDE9F683CC9648303ED7B948FFAD53195F1EDFB176E89D93852DBD53A9FBAD27C161DF01D435354F7F31F73BF9E60B35325F65E65210DDE2B09C6F3C5F54DB6E7A486696BE104DFC84EE57ABACBFDC20123288B989E5460C19C1B856D5C261A4A5CBD99023CE4DB8D9FFCD0E8308F29E8473376E77EDE8AE41A613E1902305906058508F108B0CF51763A0D27F964F96E09986131CA98B21760AEF38E5E4F2B560168E60284B939149E7BCAEC279DA2B0136BDFF79F7955D640885D88E4F181082BACEE67519FB46D5D1F7CBE3520DA496FEE0CC96F5CEB8A7225C095EC0C4041CB7908556F04F82094B07A1C8DA459C303967C5174F90B21CECAEB07DF39837C040A730AE74086AF92DA36F354FF692892AE73C6B08E43606E4D55BD179A163CD09E5DDC243DDB0F12F7BDBC4854BEBC2A960FCA8A0CA465B5281C1D6BE67FC34E326E7FCFD212486028A8EA86FEF847C11DDEA2B6108B2F2B353B652E4F7324EADF70AFB50328A911FBEE616F0985905EC636C4FA0CE4E082BA2C62C3D0434C3A6D104DC6AC9FFDD5BECD466CC4541F827CF493F4AF34DD667EFB9A4D25E8C5BF7495920E9196FB7C2A96E2D7FB39C53B6D4CCA70E9FA8B3CE2AB55A668B8BC361C397BA9A70BA70C1A9501D33030620D22DA3B7E82ED3ACCC97FA5F9A0509D9BA9F94A18C46DE857071F1F0C7EECC3F70AFB062D600DBED5FA054FB7146A7BFAC7ABF8D83EC3FB2ED7157C39F0DDD443345A6F93F748675C6B7DA170FF956EAF5D5D1A1360991FC1F09EF12BFB7C9D19A2E73C642B302D593FC2DB75E1734E6099DEE22007CD4DD68A192522C3A276BB3B309B213889FF8D814B9444BCC3CA5C5A7A048376414F7AFBFF5D8A750B35A9E40D272B8219B2946132855D3ABD605046708D53D47E793D4EF21C6499F2A1A3C910E412A62440E885F5EB3C518EA71CFAA528E4FF641FD4C9D290C99CD57E26C54DE8444572EC02CADED0B0C00343EA2FBBCB3B81FA703B804EFEE75819F9D31BC442AFCF7E67CD8E875944F8A20C9BD47744FDE61F3E6EF89A367E42D4191639DF5A0250A30C00E7505842AB8BD2A8FFED9B69D951F4239C2A3766B8970F0599A03E135C14092A015351EA04D6A96FC33CA1EE9170C449A04C23526882FCBA6FF198D725CC235965D4C0951C4826F02B6D60795282D22FDCE26434C4601F78F7C00C7EE19A09A79660F2EA2594247CFCCB95DA4C86E6C898FDC80DA3E14534E574BDD5F258A31D9AF628E1D32FC839A7E377A72F2F6F55EA21F0CAA1C550ECB6AA5638E1F1C8DE3AC695D075F8F6C8BE38EE60DB05F600085DCBAE4D3288E212C6E666ADDB3AB87E1B0458A7E0092E6FF1E05467986FC07D82FA7FC23EBDA89DADD6540C7912274661DC6F206167AE0A5984F45BB352983069B7069771C2AD238D544863214724F66C360D4F9D46C7801F08AB4FA0D069FA36CB3B3B4613C267FEF202906255DED4495A608837F1C4FF9A589F6944DFEE31F5710AEB39534D958BDB766A6EFCF0C1BA0F3ED09821D37787EF987DC9A45D9B2FC033E27949350E47AA1D09AE3815D991132944D2FD6D5588191E0ADE6F802C255B889579932EE8170DAF50AA1CEED2D20991891851222DDB6D6BC7698D6B61476D168EE469F08B24F41FDC6CD10E0C280E38646C01C0EE3217D0E890D6F4955D1790061262DC1CB24299A9C0DA6467E0D6A0E5CC1634ED4859DE6C4A062B28DFAFE81BC04EB60F67C05EE84E47E7AF8D02370289FA1648DEEB06F3D23DB805EF31D0949C3818B3C2865D255B1A0BCF17B29AE0D4A4AAD89C8403AB75FAC8E857174E6DBEF4C305C1A9EDF8B424BF66C2467D7A6FA1668E7DF58C64A40F1A8628336B3712EFD3F3CA904006A0126B1B913F5204873BD268DF27FD184DF61E062186EAC04A2C45380027529E9D13BE06794C749B6FA7BD4F042A726B352B11A37602F0F45B1D44A6260F8538897A52C6824DAFD404500477C35531D819F865E85EA278200EE6910031BD37EF7B570B9DB38189AA2AAEAE317AB175D9206BF9BF4A6D6BBBEAD65579DD91F7CDF1CB9601E0F9AFC75AD31059D7B512A5167250ABC51105D6766E9BB68BED3A797127BCCBC7948D5F02D2B615C8DEB39C19AE3E10D4DBABFBE196F593504C54E6D75BB61EF9A3DB76EF), KvPair(FF5BC68663482440764F0BE4BEB5779A3BBD25D8ECB9759B5CBC8E1757F2D942BD2A6B6FF6992B4AC96754C718C8E4FBE93F720A65FF55113BD1AA67F42D1097388379EE0EDA7EC728649D505A5AE29B695C250CEE9DFC2DA45E690C058D670F27A2860181B0A94008277C6FFE271D78AA2282F5AE0EB6E2BADFDBE864B7702EE818C4DEC16355F8F7B465354E122127AE79401D02D7E2DD37B34CA91292EFEE636BBA89EEA25F0A819E14DF445454E9E1D2320BE45EB04F41E7528E37CA0F1A178461BDA2673FDEB63740DA92D248000BCDCB2847EBBAC5C21B79003956E82103629FF5DEA52167B1CF43290E946C647BC711C3697DFB154135A94EEA6B46D1B796D0FD1443BA772A5977236D9E870EF02933AD2326A61BBECC2CA8546DE6D1F76E6EAF2B81131FC8617B7E851FA1B5803323C9F21852F01E74905BF39D47E60C8D3C0B21214FBEF6DFD4FE2626D0FEEBDC9989D1EF3B702AA6ECC3B75F137C1B8A7EC5FA16B4453BF5CC04DEA3EF0A3BD2103B69B34B61B4AFD7727B4B4CCF21C1E995505245208C966947AAE6663BBEBACC1B35ECBF9A1A41D5C3D20A39F4A88CCA2928A0F0C5CC41E154392723BDD41D2B715209544F17D92ECF340B09A54F04D6D5586B1D1C0CB958E30B491FB2FE2FE19DB3C78DA9952901E75F9ADA75D7A0243229EA639622C9067923EE57132EF6FA501D53D474DE8A7E176A13387D0DEF2E69243610120FCA1DBD17612D0BBAC8FA1C3109C9B05676A0A15D89FF579FC5DA01CCECD196953B1D9755216668DFA68DE51D3AC3A3914F49EC8936FAC566255D4A8297A2479414540F4564D2C93EF3B503A1AF1D945AA7E27B406F6D4073076FDFF5E9726A52881A0434E0D4C7ADE6663712E795E0CDB4B9434F54ECCFBD5B925DD6AAEC89D10A8D301F72B72E833FC0515C5F9B4C1C8C18205D10DCF91CE71A804A4E550330312336FE93DACBB95D1874B159488B28DE11BC3070ABA6B0E8C174D37396230570A280B334A471FEEBC31FC7D0AEA051B8229945513018B67AB27CC65803C9A348E1F4CB486833B82DA5A034749A8E69E441A249A794116184BF00D45CE0556A2AA969CD5E65042C0C513703CB68AEBA85D4FDA1BA6E1EEC3518E170D72434FCFEAC0AD11C57A7C210B341A7DE1E9BE8AFA85791BE4C8AE5B5EB15CA249C279F9489F52CF3A038ED3457E7473383D49AAAFBC70FDEB4107D31AD6E048D163B0F06EC50C3AAAA543E89E415EC570AD74E1A2E2A31A4DAF64DC5414CFE24CAF993ADECF997785D4988725016CB888AFC642F49ED7A6360AD642C9090A7232CDA6A458BFFAD73CC1FA1D0B2013573F7E99B274B07726E4408318E6385A9412CF07A26DD03B71F89EE436C6111AA18A139A5ECC2D7897E50402BFC7FDB3F5A800DB9D056841D4288E3589F1D6679F8E57510C9708C845788C14AC206EB9E35A6C5847696104E7E929106608C7B6B6621384C83E0571CDF27C072BA023DD559D9CA9F3855D94D943744B0F76F5159630FC43AC0A4C629791B542FFEC5AAD592F306EA5DB29EB92864CA8A66526C288235AEAC007AFBC9689860E1133FD61202C2F7A227BAC73D771C4E8ACE8306900A033B009DF6FE2CF49E7F0729A6A40265502AD45B7C7219A7B4EFA04BD30716C4859916AEC58FBF1FBFF4C961F1EAD5741891EBFE4BC58BAB3A85B6F45BA08D9F3AB2FFBC9D65152A4C96D1B4689859673D7D6AEF2C3677C43374F21376C54DFE31E7C5BA6AE1E1EDED490D5C9E5086C481A4582722601BAAA1AEC0E94DB4EB5C0CA81E4B694D8DFCBF640611F0D448F9BDEE544102B7BD135063785601334C853D7CA2C57E9248704C3950FA9C6122276F95F0600E6A7D57E8A6CBA00CA7EAB30ED303C594194E3F184F29EDC7D733C405E8127D403A5F7BED0AB15DF402497BDFEE4E74DC5926B55E6029ADBCCFDEE7DEAEA5CAA11FBB761FFCF27AC79EECDC61B0690A7BF98F7ED1B1528C975D951F6393A46CCDCF0F7A5E6B85884B21C5D048FFBB2583F3F5B4C9217285E477906306CDA3135332C12056BDE7BB8081C95048D3BED7949F4715AFED89BC9AF89C14A73D3CB33DB4CB9883DFF2222D56F6733A8A9A4A8FD877B991A65B9DE80D001083E0C425472099E5997396BA9CA6914E818922671DADD8674A7F730110BD8207A18A3C2258E7E9EFD40FF3CCE03B752D20BE794499520FB06E41A39CB298C80CF0A3BEA97DBC108AFB911482F74C14DD80522C9C19ADB1FC233C9E7175C597DCBDB8520FC104C7C35590F63FF21E6B361D3C413A048316AD43014E940FEDA9D9B21689D7E23A4811A2E6EC0E56FD082F7D04CA75F31C949E687CD04F0145EBC1930A1E8C59A79A3E4372F9C45D20385C44634746B64D205E5F2A978BC076EF3E1CD89C9735B42BC8813B92B0F6051EAFA0EB589B34CF51DE7497FC9BAD8884714C8DF0A32C8FFA6A256DA3205474432496624D260B44A2BF0D34A1AC5AEC0510BAD958C4B257D52B889AC5A30518F65BB7928E9C98FE3738BB8765758A4BC5D88411A11F321BEB72D93EBD4FC8BAF886C2F0CBD8A804B357FEAF1D1BD42C03833E98977FE3FD43D1E9B41B4E9A341656FF980FB5CCDE9E2B0BEC574C55CF8BF129AF8BDC6742473F4770C381438DB303DB425712E8E5B6E92D3488871A211C272A00F11692AE8C0DDF1B588E76514BBFFB2D59976FEE6A7A4867E1259B4D822999294DCDD58346A8A7F2570D511BEB5673C783715E95AE283DED64E7C2ADEC924EB7E7DB4E19899C26E2D0F2F6A8D8FBC6137AC7319BCC1DFCD871C02F62F5DDBE62F09467619DCFB1BA60C33DDDF3D550FD69CE34BB4E079C8E852AF3BEF391FB4ED63B5F7264B1A2847F7162C78936428C07534EC4E25F8852, 2C5C08472D8697604CE4164BF35F46EA41C43F7D7B6E2AD8CF2374F4560AFE25425F16D3D77AAED1D1353128DC65254B7EFF0BB1FD657D1DEF96B3D01BFEC7D5608DD147AC2959D418B9569D353EDFCA254B72D6418C0C2738A587D059AFBE62F51B1E4D510194A1D9ADE042043A6E9598EA8DA930A53C68C1D03BF58C93C7E185547B057CD7D348BB41A033B3B67587AEF3852473BA722A65F9248FD3F9B61E7BF7D92D36743D54C700F765F4FA70AAE74FE8D9BCBD2BD0E31CB6205A8B816A492EA5071393E56AFA50E228518F4F7F97F9E8F996FFC8DBCFBF277165EC8D44436EE7B5A88A868D9A4127C4905B0AEB9EB832AF02785C8C0CB1CD248CDBA318AC58240D6D1A881E38A8BE6D3D45628C939A7B8140F8FF4932E10D1B046AF297BC86E46B83EA2246A2D9D9D66DA5D52294F2C94CCDD145D41F97A270403A7477C2C84DDD98B46C72A63184F39054D53516827E2BAC7F335A698E3A0C88B1F2A4AC9D582A6E5701E7897B552BD450A93A10F0C7F82A8E5A892846A5FA427BBEFE843A6CB0080A85E6CAFDE5D0647B58D38E0E10CD7ED5A2BE95510C04287D5DED1C4E24B04F01705A4303AB437C4FC342FA1E171EED0878C60C47050DD784EBD5A04452563369A6E79E8E4DFD8810AEA0D39A7FAE0F3904023EF1F5FD9024491A060F3B8D44B040C98FC86EA9F1E822EABA43E8F6AC1EC90DC0D6606B6839B1905A049B90019099F4F3255BC913EB1F9B00A7254A19FE569D02082F6BD3BAF80EC41F2FA27E84310161912A576D78D3649C80D9706F1C66D37B7CA3901ADE3296B39DA44BB93B6D0F37ABEF6C3D04C2799789F970F3EE5EB81C6AB3E6ACA43273EB13B4C501484E457ADB7BE38F9B38EDDF186348B34093C6AA679588ACBE5ED6E953983886A46EA8931F9056FD07B6A1EF1602357782407378E31C5E2CB5E3D5A4C304F9DB82795063266EA230A0BBE61E05F5446E079BC049701B6A88F18187AEE9518FB7E5C66D93529AA9C7BD0443A62E8D125FB3763E12CD898DAE7505C4FF87C381F6A5752024238B23DBDAA8E611977E377EBABF90E9B4555CFB614D57C57FE689E32BC89F293E29B0F705EEB5B84A9619AF59D338CB5EFEBAD7A9ADF85EA014BC988BE4B2F7EFA1E7CB57976211E82D13CAE10FC4AA9967E50B0D9968A5C1B66A934C8D0AB24A363A11D788BA4D89510B2A2A4A97AFCD673F497EBC24CCA44EA9CD23820D90BF0745B1F1D718943791EEBA98B6588D1C74824B9BE74A8051FB3AA5302E51199726AC001F2D4043C5596C8111D6FC69E95B19D85BCF37146DD4F0D056C24A64A22B681F84312831CEAFE9FF26A4D28437EF97B4F6EFBE5E7DB0DC528C8EDC82C7D7EA520BA109FE6EBC253E0A1BDFC6F3532A64CF51DB4486920B02C0501BCF1673B2D5F8A8D18BA2E2EF7EB3CB6C3850485E6AB6E5A51CE3F6A3A16012B2DAAD69FC228AA12BDDB6FF754141B86250182E972B32C6CAC219BFB4D5E10C86D6DBCD491E259A4335B302105707F7C1119818A768209EEB22B0BB28B1CFC63C2F32F8D8CF608FE88F1BCF4C10AC7E9E4E50EC711C91685889A2EF2A1F90DE04C101D153A25A618E4B8060378F5A2F0FB362FC33DEA150B1B7836327CD3533F4EED3383CF4E95BFDD875A35EFDE7EB2CEA161777A3F03563619CC38207403034A49FFE698D8C83358F0126F35A64C7EE5910E8E32A46E207F0EC67850AC7682FE10D42993D94EBD8BBE2EF6AA02BF6C652CCCB1E4ACA4D780E75D03957D61FCE534EE2D1D6EAF7659FA8446FFFCC8F035D2F0D961B03A46AAEF56E5657B41788C0534954B485FE6D101ADD2A5A2E908D7BCE8EDE43EB2B4F400D836C49CDAAB9AB57798AD6A96F7102B750AC6A4126BA58390867D5C6F6C28DE86DFB43DDD5951D792C3E3AD6896AEE19F93875BD749A72E4FAA47629D374664D1133E7D7EE7090374EF93EA480B2B52B03C8B02A966183E9FDA66BCB33EE61213D9EB021A6CD07B173A49331B81784CF1D2F27F6329B561F4798D40E666B15EF80E8D451CC7F8CF7108EDD3FA81FE2DF212B8009BAB8D00D1A085AC92329286B4ABAD956389244EEBF3005CD05DF9CB20E162AAD66AC17F8294835D570FBD9AE0E77E96DFE069B78999F5680EFCFB2CBD55B430B2B2FDBC9158D2258B9F17E6ABD13FA31B3A48A25CC0C6F7504FBD0DCA11AE23B144CB66B0A5F7796585DD1B68867F1B12A7C8E762BE54CE4D2461F2D3E310C5CDC8B5C82420FCC8443A7CAE668BACFEFEB95D2CD545BD068E30293D685A0D9CE5D4E8C08546BC5074B217F538EE266D7E13347DE916561CA5A7DF233F5D811516AB2577425251D298267512DCB43F42A70FB61D7B51964910DB134805F87699B8E445B1E6EB8B4C068AD4818F0085B8270929E8CC554654B241AE1728D673DDDAF3F475BAE19D291E79D650991591AB70789142DE029D4393F7D448C971AB1D7339B3E437C190D565E955B1164E59A20A4B69CCEB535D97177DF38E530228DAC66F2EE0D598EE80D149179645A1E976D3132FBF69B9949769C18ED344E8CCCB8F02CB6316697520D352394DE8E9CDB1BAA08539E38933604EE1E85C53A36D4C7A10A68374DA71FCF7583B7D46EA9B6F6CE4768EE48E22DC912A61B4CF07DEDA1366A68851A1146539BCE4C63945CA7FCCDD97BE89CA4DCB7962C301916B6CD2765B4498EF11986856893538BEFC1F96A5E7410D3BB3FE2503BDD9AC00F5CCAEAE6C6BA3F8A7E9E2956093A274D108397D07E837D26B56286AFD441EE8C0A0691AB32C270BA494DE9A5B5375F92E5EA859DF58D9B72C783AF94B8A150BBC226D0BA8045F4EEE4B52BC0B04C1908991BCE5FCEDCB6E0DE08F748CEF4B58AF51BEC906DC006286EA619541B07F210ABF0645DD714BC6988768B1B1CA8D38CCF260C9FF09C2F254021C6687AE459EF65CE6B46C85D903BDDA04872F3C13AF37BBB06C7DCAD6CE00F59EDAE31684513BA2A5687612E2A294D84766CA5ED8A1EEB3123B6E0B3467802FAA813FA1890FCFBCFEC2488A486FA010357D2C6D6871322C774A23567A6308E51386CAC99149FF875B1DDDBBBF11126E0DE8B4F2CB2699389C2DDAAF850831A5C252DED5DE30A9D34320557ECF5000F0369D42AE25D80FF6E46E64B1F651D10BBF3B4139BAAA7621F64CC646A18227F843ECEF814C7DD8D45F45DD8BB65E83A472555ED66171DD72F419DF83C359454FE8B1A2B2C7D152829D662457B4EAD628AAD14890BEB2DF4D96CF57DC582B1C8DF0CC702F1ACD21EEA984165F56E8579B72A22CF0FCD6D2854466390800B33BF11A77673142CC7FBF91F961207F4843775475380ED05CF22BA17F20163185FB08E4AA6C3D7105887A4BBC863D72CAE35E6CF4DA79B35FA3CBA15F63E27405CBD44C9B8C969C0E5967A54F2F8630AE99FF270A64E20C57D8953BE5AD786D265B4817537E8C27A258C2C7728F051D5F1AD120C57C127213AD72B25C5E4C5022F874949F526E21D61ADD6F982A6F1A1506CD9F7A5DB2BAB8FA0B8F25D22D53FDA23ACC3162050BEFC0EC790DA7DBE27A3DB0AC6AE456F77C12B389E2120A808D4E23D15217FCD36EE9C1E8A7BDA4692D38E46DDD6F3684B72BE842F7F6AB48C547356C78FE049D1A1EB3EBBE8829098C724F971EFDC2CBE8B436595D89FF1B0D7CC7B7798C21DAF185064BCC779B232911C449F291D32D1E7476C6226FE3FA9C177F90A9CA2C763E0B7682A826CB0CFF2E08A3B01FBCB10D252B3591E9A6B3EAAE2F5DBDE6C21463B70EC9534725810333224B64F35A280573157EE9825D47A1EB1CEF2DC36A2CDCB2A4590D07560A1559D78EBD6E90B3706E0735B33DA46EF1EC94B03FF6621A6AA7816C1460690EB732467780ED5C79DF228E55A8326443E9E2E4DC1D0D871EB82399AF7D17ED64FEAFA3F30DB2672F5870FD1E44F69A347A612B6C04CDFB2C1276ADDAEDD3ECB6FADD65301411723B6204FC43B4F9E25B075AD855B07AC05709875B1FFF959C6609E6756597BB6C0883E7BAC72805ADE3A0B349ED8AF94D6364FE326572AFD117B5F684B02C457E295A29840C8199F3F3B97B80468F01100C78CDE5C98B8CDAC46871B86A3C95D43D793F7C83DCB4B9A59B9399209F50C8B3F2A77F3F159834A0E482AD481642625AF4E7712A106504D127E79387375733B61CF7312BE5129EEF3E44F891BA785105A7847EBD53BB1A848A9629EC9BFBD5B19664231C826062498AB6364A68C739F3A656A42E67EC1B4F2C621A116F0E7D212EAF3FD257C81957FC5B4114B97F552FFA8012C1A3434A5770A3703D2D654C7BD65DDB74DBEB1B48C1709F016DBE18952CDD3C37039C2E29B045A25E495E3C5FA0C393A62F06AEE26E0D224066AB6EAF523ADF0F8C9886FC1C250C5C6F3C18F070245C4A518190EE3120C66C5EAD868BCFBC979C622CE7549D2273B4F01ED44D7BBE297F9F74BC1928FFE92B3F0D3D9732B1E2D5B6C625FE63A6BBCD1826EDA6621B5963C7BFDE0BFF62CD2CFCC8B732D7E5D4B3766863628B9145E0087129625410FA09C01FE09EBA6EC5F4EECBB6B1AEF279B3177068ADD6BD2CEBEA5AC3C0DEA609F8A2236B83E8707F26FC9894C1E14514613257DAD01A4A7416E83E6A66A1976AAD7B34C99CBEEC9DDE7F34CBAF7F507D58418D7625F2DDD1786D2B038E3FF40097FA14F3355DFE8D4E20D89F7A7A44E92FCD79310D74C4BBC9EE6F452A6E047AAFF90BC282BEA7D5A588B02F935663F18220CDB7EEB895247E47323645DAB943C8C96164478DF2D091139CB931B9A6FC79B635BF28E92B3A07FE76940852EC99CFF085E0322B66ED8A81CAA1BD6C18E339834F11C975978654646B9333B974395496A04AAA52403883BE005628BA99A840C3911A315821FC160432118E2E00C9C7789FDFEDD75DA9CEB2B6C0A7EC562F5F71CD5721BBE0A851BAC8226BE2574673CB0287490AE4DB0D704933509FD09EEDBF31504EC7AF1692D82DD75BCE73E894A15C12DDAC3A9E3C056286271055A3FFBAE98908372E2E438856259FCFC66D0360493BE9171A539FD566A21675D8E31866A0075380D4AA2C535C07AE46C9B3BD832F6C8F6FB28FDA24AFDA4793F82FF3B83E1862F35FB1D3977A619EA2DBB11118AADDE5A7F0FD03C5D4450CDBB2C6F863C949EA48FEEBAC4D2266CE9881C52DBB111BE6A3BD52DF04D05D183938F54B2F44E9E0A45952FC13BA325B6C3B2B2CAC2C7F81CABB1AB46103E5425E7EF2B28C430B54C5CB920671D4E4B91BD51AA805E29269A4B6844042305AD822B857EC7FA98BC8A87D6E619E4B530DD8F122D7A53960689C9C9B04D2D71AB085DE51B44AB06265BC33C29FDA1E6B3D7BECE52DAB5E449E40E8C4BF6F1BE881F40B322C61439C6968712BAA003698F17E1DB4CEDBB70596A40D0125CFF5810E9A5ABF9809D0EF41DCF0C6E6B1D186C27FF1A926655E22198DD11362CD73E7BD3981A1E76A9D818CA44F30CC0D6FD7A40AFB6D35F6E950529BE20926FE0C23BE0E8AEB8142C124704A2CF44761F2CECEBB25A6DBFED2514756C48BDA8224E3EB4CC3E4BEA170F2BA51974DAAAFFF07A59BCEB24682E565CADD9B78D6205312FE4C5AD95B3EDA5F47CF4709D4DF2E0F16C11D2750B33A794242D3156428EC0F9DEB288681FE8DD60D866D762EB3E6A2FCFFC322188AE5E88A2BA4B20F4B70A9253A91DB4C7EEC762378B0CA2B4B8CCA13685CD882ECC0B90D3185B7DB2AC26C8D0B67FC00DE5843F0549EE6A1F74492DC57D7658EAD9A9CFD7654A918497E31DB6654D9C2A6EF587A90A1AC119824E6CA32B8B5FF5C64B4E339A4EAAFA6772E38390ACD56D5BEE9E357A0F61B48071E498F38D7088B10FCFBCA48B9EF55FE7F4BCD96BF9573C059F0262B4FB2026EBF583A5CF9792B3019C455161BE2CDDA9C7AE37E9A81732C59CB5EFD99F97AEB490E19D9F342970845FAF665850B178038EBC539957C8107203FD5950A61BE4AB73A2B2B5BFCD96467DB57A4CD9195FCA698960CDA54067FA9CD4AC1AA0F25C48E6B8D720CFA5EB2239B57D29F46BC3F7A087FE3F8EBCD5C111B9D76118B5AC7201180EAF66F114A988559F445414633758767DF45F3F5875CEC31A2F45D79E7B0FBC4D6277237C7C29F5327D53B139CE663865F2121483BC47F66E18BD954CD47F5B068A53042F4A58306EA83EA9486DEB18C742B7A77BE5DF346D76F54FB7AD6993FDE47BCF8757DA8419B505746C6E45BE7C3652FEF9BACBE462E96D54BD2B9922308BD704814EFE8D225B6E16F311440AB476B853E302BD204B855FFD373F13359529F032EEDD2F7F8B490CDC98F904CE3A4EF5872EE296907233C51AC9F021EF38EF6912C097E78FF9087C1CC53605739D327341DA3D86E083A6EAD5AD15D8FED763C8FF85A8C7651885C90C5E3353175B6C638482498A6346C9F71813D0F328C694E759211CFCEAF1403057FAF267F13B39E329E4202E521A0FE519CA60B19FE9D40AC09A51E0A030BE0B6E2DB2858C51097FE796BE443A8E96604CD15946CB4B4F8B8C960779145866A366B287B72D2E8CBE9620B7A33DD03E877217ACF4CC5CC6D4E9491E7F2697F8EAAA6202A46B44EA06C6AAC842814AEE56935DB5CC06541F62815130172632F04961BD6EAD0B5BAEE423695A1CA48BC376A26B4320A8EA292B3DA2D6D7CD3972C9192CD14FF93BD258EECBE842D5C55F1D2B5F19645020C109FE840D0B68A9CAC77B05880D9B03434366C7F22F625E72F06920D008156526BFD868B1D786E1078985AC80FD25BC0B04A638E8937CA6D16F8DA7933A15C391BE19A5095B7BFE69198DD59D6F21F4638E1A3E32E90E2BAF2164E0EEBA461D3A0F4A5048F8D6DDAB45A3245DE54BD7FAAD500F49AE88B1C17EA2D8636FB06860089E33A796F988E5B3CA294C2C86A376C89506DD9847B0ABF993A1AE9A2C71AA5FE644310BE77933001DC1A5F16A87857A8B2B6F6CEAAB59A7304F2499123904C19B8ADE071F09682B1E7167481CE4EEE4B08FC7E474E20E907B01B104543C6E5972DDD167F193D85F86786E23788D2E6463CADA1991BB79C6E10BA498B820AEE6DE359A42D458F35C44E44168E7E6D4918603860C0DF49C353C15A1D51E82335C670A613FC8E08E3D1286B23CFAFA3A1017594D1DF28BE699FE78D2E75C5F9FB9654498C438DD853372E9CEF8D6528EFB05EF347FF6B37D1191A6CDF9C940BBE066C07EB899881F7593FF8B01EBEA058656B9CB5114D739FBFB74C0055B1222BD216C7350B810BD97FE40967FEDAA26DA7F6291B83D151B35FA94B3367510A6CEDC5C65AD3EE48F55F21F524F80E40C549BFE13514D7A94A9A1682A8BAB4DE8E447CFDE7C1D6940A8F97F941988F1C47D39FD4D482AD002E9570D999017E9A49D8C6D6EECA7E8E3D72798497C4FEAA48D29B3153B67EFD040A0CDE15B604CA6EE746EE9450C36567EF61050EE981E6FFB07A717E8801A4A0EC16EB14ED63655C10CE7236D9184F8C755BA2F0E64EFB26EBA9D7E82F419C220A6CFC0A508261D4AC636D0DFF9086E49CC52986D06B492EDF5E68AB72D622C9B8058F0BC7D3F17ADF22B7CCDB7EDFB9EDD519B8426EE91C499A0A3BBD946BEE69C961C0F73BC21C6FA21A04401BFDB91F2BADBDD4AE172E5CB895A0F7242B0632D868F78C7BF26FC77F21EB613B417FB53B7AF524258A5D93450F6470C9F6D0E7E544046398D3FE848AF7AAA9A72595971A644E8722A60681FE0634E8E4B57DBC22A12D2E0EFD6270F74BEAA1E2E81CFBF480C6DC96D935CC541D8B259EB1673E70549E2A1AD489C7EF0C583D9C7B273562D76808854B4A7954141B5B4C68A1D70F44ABC22ACA25E5A5F9DD7FF5A25CC5231FED61E068577E063696C87AE84E85717DEB8D8197D2D5A495263357C0F2292E33092CE01B5B37A154EE63D5971AF75BCC4634038AAD23C09187AF4BFF08844D44201EA5AC3F3E109B77E4DEABA5E2647F2624FBC432FC2710170E9722373E749E10C883759E408B383404C1F967A630CB5573E78A160CA19B3667A01E95D4CAF35D3CECAED779F4E7A2EF867C06260370D5ABEFF1A266DF6F47216D5784882513DF6ADFD3ACD5CC78692923F98178E635CF1F5E19E76F43CCC371931AEB66066F3590E2BEB5525A75CDC67BF793EB4BDB7D9F4F92448F4E21F0766EF3CD3514DE305ABE4FF302CB0294D5D1E2D370EF5D94DD0DFC13859026150D33B287D3375D851A611C86A130ECAF9134AA001B88464D4CA94F9A93095A8EE7910DD851C22C802943376FD0B4A2D6B379378EA0F0E66B43D277613CEC6CFEF2447B34E0E693E50FAF38A7EF0845F000C859137A2EEEFDF6FAFCC6608267DEC2C3A84178DBB453D7501A065131A2390F50BE6991C946099E7F21C993E41BFF29071969D48C849EFB6DAA6337196CF637F0C818E085618428D2FB3AFBBE3B8A69556DA558F2E6893A6D7D2A0978B315F4E9BE5D08E01CDA5F0BF11B72FFE1C3D360D4F990D21EFB8419DDCFB68C8C45EC9A709CABA4283131B0CC3BFF66D190CA38E9226E93E765EC7F4216ADA8C94CD5171B15E22B84F8697C8FE20EDDFC5DC10F25C38A81B82F51C5B0653F09863BFD0B75C3DDF36E60C2DCA24DB404EB87EA4EA26E64EFBEC5F1393769C774B7F65B21010EF415C1EE27EF5BF610E2917A604C28C3169D7E16FCFA98C5FE90487F91519476065E8442AFAF0D2AB94CA67CB5CA81BDB6B7AF85A53291B841D5B4687DD4D053D408DF118D80A453EBB01EAF214B8F3E7A9165CCD5E60E49B238DA0AC14628B5BE9F005DB0A03710E6F41927A177A65AC042296CF1468263092EC0C00A12B852C2D8223F2E81FFA9E1D5E962168A8491E976C49A27B2E290B0E9515C37F7D17EF6208DE746BCEE8E4365D0B34D34A6E080E9B3C3AEC5A92D68EFE9052AE42C3B3ECC717A3F8DD7B47036BA8CE5A30BE1D02C30E3FAB33D5D572537ADFFD1BE2D4A39A8207B785BF50DFEB3E73DBA6389BA64E8BF130582B52C618757A553E0EFA4A4003CB31F444EFD0A9BAD80E3CD259AFFF8E60C677F3FF228B383EABC851FC4797CF199663DCD2F913FD7BEBAFC7BEDBC4B095B0BB24C4CE3AC0F1F5B531C619C90A2B337C32D296115151601DE80359ECE926BA3AEE0182C999C4F4C5D1E36DD8FE8CD25A52B48B62B3AF7119085BF96E4CCB3B1ED9CF37A6A59CF5BBFF61207AD4B7581859D591419F35C98568A548339F60864AA3C358CE7C1CC1CFC4B79A5D35430B0A86B6EB7000B6B32DD5C57332A15F8FEA52C8799B647B1B322EA866FF9163C3CF9BB4E7E841AA44CD97D78467726EC8D1E114D7792C81370C2D7ECB7B4EDAC20FD1DC3DAF24134A22A76E1A87AAE611337FD7391EE34AF115137F960E0EB8E031F0FB61CA8BF0872BB985725BB2F98E1DA2E665F5E687C48EA9218F76F33BA9D47A41FC30168F6678F3E2AC5FB3523704119DB133E5920C2B869B983E7BF27D7BE9A82DB7D115761DD0E929F75518255ACA5236DB99421CFC49F2BBBC9F136AAAFCA13CAB9AA97E03A1E216F999EABA32603B9616E12B92E024FE7B5EFA43D73CDEE41E7B61492019661473F0B52A214CFFD9E3481C5045693E156C73DDBADDE7709F6763CEC313FC4AE9B1488EA00CEDE97EB75C4E09C1E3ABF70AA3A5CBC8A4229195BC236EA2C50F11AEC714E1B3802063C73028F3B31AE116729E56461F189A3882BAB42B5EDBB79456B8647A0E2ED59325F5C354FEA4F27B5BB3A7718C984797264EC05B7C970B1BD0336F69CCF02C1D5DE97E9A7D8DBD09F0648DF7197CCCAA932D8B496BCFBCF800E33AE3CC846EF0ECAB3F885563BDB5BB05D2C0F00945BAF58C8B8448B6BB230CBA2E6DC29B671CF1F8CD8417C917CE797D201647FB2FE5FCCC45E5FF2809846806D6B3845F29DE3EA0147A4DB71398409D8F0C8DF92835FA1415B555D7C366164547AB1750198B98C3D0085B2588BE21C69B08F50259B25CB8B4E72AE4FAB2E5A1C8B1896E9E3D0412BE26A5722276FBD149125D0F26DEEF84A8DF83D05BAFABAFB850BE9F1724EB957E9611F38EAE958CA7E852173062F50183D4CBA763AD4B5AA54F264620F7C544C022AE7D749A2C55E9BEA951DEA0C0E861F99F4A99551E54BF2E400314C412EEA77A10C1866733C59A8998E25B8964CA4B1905944E43DA766D47C2F8302DA9C1E550F17F25D2E38E5720FCA2089A489A6654E79ED793273C196BCC99E42BBF85F4F339B04440A1AF9DA2D1D8E8104FD77017DB41E45B0187878BCA3E680CC35027DAA9EFCF23C8D4ABC81545353AF37800712738C4273711ED699D3843157AA784884EB0A0C3D818E9AAEC4A1D69462D6B0A5FF90875CAF50701DCFCD425C5D885208A9D498276D48C59FAEEDFED3BEBF144096014857E165B1A509C21C8832D3876258103B913E7E0F6B0DC40A8F51729B78797C4C834C01DA6F6EE3725DBABA6F7C13B2C13A4BBA185B0CEDE8704887303ADDF12DEA1D67E64552E60A9B138D77FF302EAD168BEF13F691296F3E5101DF1B3B270C911A4AEF86ACFF07C01F6DF3F24B4633248D1096CE6C2E09E9E6A97D62B0EEB416C0D5A61A1F6F2587E2D2431621F6C9AA8C6717D00FBBCDEF8542E87E1E92FF557D441AE208B1DE83D8B28BBDD30734EF5919A5CA7A5397851BFEEB155B041E032E22EC7B4232E859AB8F36DDBA05D6A76CD0BF641BCB3FF638174DE6E50EFD0D5ED484B690DA6A54C0A8C74F29B9841A6CAE9EC9D4A8B6C3BEB6A6D9BF330E6D5B75A7CB997364C1C5801F518D43AE9A440B1E3743E6E5C99F9F7C89280743F57241ABAF2382A872A88F0FE37FCA0187A6A3360C764A33B721A4346891890C809975864285E6C0C7D0E90CE8841CD9805DED0B8896C48735710B21E331C28C4D40E04240894121DFD1B562CC338125E90371E86C25456232B6E02243B176EBFF9F8559ABB55A3EE19AEDF4B286CEF45677B25E6422FB0F8553432FC850922A97ABE435E6A4E18E7A4E226384915758310AE4309E2289B2D5DD628BDC3C0ADF375E28A0020B650839603A3200E28F4D95511BCB9241A73458037F6388E008060362D4217DD08E09A9B6795C5084B9FB1961EE70D3D2E41818E71B7947351B0AFD08F0FC781B209E067F39DC34754AF3224960DABA8B3916394689DB94126F0CCB67E33235F94ED1CD9C40207EB06330FBC868765569CDE9A5F203CCB69E636A0933096742642C9300E5A888619FF102E2EA0E911AE2CA885BF810ECCC238A25FB11BB311C205CEA817CED64EFDC4F77CFD02873877501A91DB612A4A52759EFEFAD0FAE56833ACC0DE7E2A1A2EE3C2A5E76295C5043BA5B16B36E3CBBCF9FA9E2818D0C41DD926C36ECB5D1A7099330B9D9FE083CA783DB9677A6F9ECA83CA211EF17951ECA3D940F94F607379180F79DEE81FEBDE5E1C1FD6D686957F4027261A7F6D486EB62B59A098581374207B981608B38B73B864F545DB823730399521E31B358144FC9FFC61CD56B5DD634927971CE3766231561060035D77E665159CE8FEC2EA4A94AC5BEF1B95EA615784FB9A7AABDBA0142BC995F9CBAFDC0E3938F98294B4DCB2ED60D43F6F6FE6576AC5CC40C4D22F20BBE582D545AB1CD1E60C5290B6FF34A44072BAAD4D679D246DCFC780E7E5C65171EE19BB07FAB4D7C58331BB681D9C06E5EEAEB01471508D3C947427CED80D21FDED9A71BA686235CCE9E0023F9F4659FBF6E4C7F98BF2CC3C6BBC53BB8C37B00A0E56A256D59F229583D9D57C4FEAB6C765F42C4D82B07062AC50DDE87F4F53807F3C91483AFDF335D7CDC31975DD9F8C3778292DAABA1F99019A7022B7E7F37CC41B2C17170514776378C21958AC54ECB2DA290D0F1708218099AB540208D952BE0531A55BB909B768F59EF4EBB24C09CD34BBEA8074ED43E28368FB3CA9A5E69A609F7148B9CD4F682391C5BE7436C4AED751AD820C076263AD331B2D0E495C18D47EC470A57F1EC998C595EA4DC5250E796DB11849FB200FF6EF82775BB8543C75A653FDBFDB0B1BD3993E69D3DFC95EAEF5DF352BF8A83D8DCABCD863A43D1FB08E12DC651956303A7406DBE7ADC1F79620708744C322373E6CA02C7BDEB10154B7A565D49251DEE42EAF83DA8D63A8B5F98B7CAB26F58B90C8C799B5964D7F1E1A84E6BDE1BB6EE3DBE7E51256DF0C1B079FEE929B59B95449A7F6BE55873F9A3D7AC66253F95291D507CBA46623468375826AAA783B5E7702D1C20E1365EBC0867D1B864E34E481FB78481F1CC820818F983201153D1E2BF63FD95A3C0B3148B9DBD8C62D826FED610D8BF836FBFE6BF04022D5E53D7D976E4F27E42B7E5FF909C333407B1A806A46A3481513E7390EEFE2A3638AEED516FBED8C36FC4EAF1D5B972D6389563124AF5B1E9465F1471157CB9E2BF79ECFB501EB19624BD79772F3D2740092DA95EBB1C089879C3A1C2F01D98519A0A493523DE0237FB64E3451806A9309ACA84EA2B1F94A855B307E4FB924398623A9C97740D35FEF31F83E92912BEBAE803A41AAE67F04554891E48B50E66989EFD501DE494BD7BC6692E127FAF027E609688AEB6F2CC6344074BB70658F1672C473D08840C91CB4E93D96B64A928B72AB03024A6390021A79A7539B599E6717A4D5251C0A04FD19AD086FD07D0F339FCEA7F225AEC577D92453BD431D379E106C3A1ECF0C1C7CDB871AD797D029D5E2080C6671E59B72499FE54673E036754C82D842A6B13D46B0391B8ACED009B1EF1B715FABAD82AF113633FF0EC06173465134A2D764BFE15F6397EE5E014654D70177F35B854F70D50DC8F56D33D17FA64C69D92761340DBBD89AA3FEEC93C75FFD48DEA3E17AE5C96A7C3034450FEF114B6B7AEAEB8D81EC85481EAAE95B0D97D9F57E13AB0B81F2DDD4D885C82A30FB469F05EB7818AEC3FEE8B43E235A10B0008713B8E89681C11D5C7E650CD0BE94A9EB663D96DC948FD549F2C7711D708BD99F99BB019DE5E4A97559A8701C0087497832715CF97C8A7327E1E9C13AE83E7B4938FF972EA7B5E2FE8584EEBB8010819DBB169DE79B4ECD37D1FFB0C4E1320C24905FED9878E2F229248ADB0E605AD08A90B1E2D9C544C6F8BB18E7C98069BEB30451D5C4256B891DFFE4DA23957D543A350DC4E4E8F3FC97F21B4FC9CF8AAC50F54C858C8409B6098561E511ED3E032F95BC9D023C08ADE8B042E6E9833F7DA4DC51BF1EB68086961DEF6B68BACD268E00A21FCEE89DE3BF34AD6FBA19EB5A11B6E1F06D43DA32B55DFD6B3D509406B13D035FB234D735808941844CD3FA032DBB8D59256D0612138D01BE4FF22531797728A50A32C7F0EA8F66CC9348B87F3FEF119DE37F1AD943779F866900FEA0C4332A01CBB078B788879A5350F49007C58E6EEC2FD259F3B381294C545E309E38FDA1674719C49F3783CA9724338A3F99133471156CE1EA78B45DB26894C86D9F2F5867394412B92D6E361856F6FAE16A72F4A65296C7374273C010DCFB8EE6B7C726F996AB33D92F9766143A567A950325B281002FFB04482DE776FDE82C01B16B518AF6AABA43A4058FEC43EDF2B6D4882B07010E828138DCEF726A31AC1292179759D79A939E95682A704018DC57E0EAFEDFA45EFC3340043C31967EC4494CCC463D7B364B1C50F0FDA0948A07C32544A4A600743704CDA90A4CDACFF75B63607DCA06709882D5EB601A6A1ED5DA9BACED4B1D2230EA421738420F0A1BF1D7A977A1DA4B1EFF49B62C62EDD19DBE34AC69B354CBBA4196A705D4855E18421C95440C9310B09121EDEC91163CEA6BC47A82C94277EA04A1C2EC7DDF60F06DFD3BE6451F166FB8296155B55DCBAC3DA3F3E2F3CA88F71E261E3AADB818AF30E452C6F01C80BE844A776D2144937CE606798E957F785C8163F32FE386A1F20F8386A5F8D84F00AF74C079252F995DB3DE808EAEF4B5E65093EFA31B2423173178855C612035E30CE567178014F8FE0DD26A98057404EB588E13B31F8349E3FE2DBCE5D5688A4852DF694111E4AD810DB2A07FAF4E9465AFE8B359647BD9D57184A5EC9E89059FD32E0DC4ABFD840F57AF1470AF20BD340653C7ECF403F3C97410245FF1F62A2B7342010249399286C5E1501BCAF9DA3C981FD5BC859B4C8BC9B95C81BF1F3FB8775330674066FD7085DF90624E0D9A52143AFC74BFD756BEF5006CB98E956E2690537634FA7F5C80A1A30E0660B56354EB3D384E04E5CA32F66D4A974BB2A152BE95CEA1743FB99F1251A3C2BC6BE4ECCD58388A2674E88F7A7A76FB7B975BC742B9A42D17C4614F572DE540940A86F00B92DECC15ECAFD086B810DFE9B7176BD73432163FFF3984363FEC2992E399C01F7E0338B477A70C1B2959D3FCC2316BDB81B04E8096DE1D8254054279401D2343C674E7DF22893B0908B5A92EB8DB68688056CEE7546841D2239E45DEAA0EFB32AB28225EEEF9E7D38F9C2D208C70AF60859489099272DA4B92F2D38AB7AAEE300C7310DDB37B16BC210A4A289DA074B86690720B8C6B4E23BF3D7BA013584E8D15A85057352F58B46C21859DAAACD82B0324392BC1300987219AD84FDC4E093C4A2CDBE48D53B7F361A3820ABB85FD681467E488643814606E61C2D2136EFAFA3F7EA9D78EF1A6B23D2144FBC7293933C416595EA172A1B1826368EE4356B1AD6B523FF92E7DB829F152415CBFD9E0624CD5C004FDD07E8671CF0BEB42DA6E78D8214EC5C2EEE05EC3FAAEF89938FE7382AD00509B0596FDE1063AC8735D7F3CA8AD7088619EE6C5D7C95E4B7092034D7F689F4FD61A20CFEB45BB60EFE27880F059BCBF62937A931955CAF47DEF2B53E76140855EED0C7E5AE302B0F98B2946A77E73044EE0E31A52958CA326E30128DC739EEEB484AA1D26E94A458D90850CABCD258316AC6B12F1F2D2FD5D7A47DAFCBDF15F0185A86ED554DD04CDF76968E2DCD616902AA9146DA306888B14ED9E4D804A74A604CC36BA487F43579516AB15A63A1C4DA568D5A393EEDBB9937EBB92BB4D705FC0077002EA12C1295C97842CD23B1D4FFA348258E8B0C6E70561AB3F3326993E9D470AABA1E022AE5C705664D217D902C9AC932CAC09C1FDBA0082C466021CE0D122CF2A6C8D13345E27D663701918A863E068002C844210458B00EB316B66739B601E8EFFD1DCBAFC1BB455ADFC60CE9A4968AE81BC05ED2A0EED4F5AD04CC0D607F1B583CA8FE24D8BC617A7E00DB317CB631D846874DAF675E3648BACC41F5A457BF4267BC2869DA328C20DC94E8517A972FDD2B014EBE3FF3B3FB3D9CA0FF59DECC6AFC35F1B41096B7D57866F714CC7D808A8482C62C8CCC3A8C893712D63FFFCBF9B9ED774A83769CCC036C45E309E98CF478EF4833BAF83FDF74B5D16F75773AED391325E3DC0721833629C86E61FF7861971E6F473E3733E5A30D39B9B89CFF76B2061246EE26224E668E392FF04BE54C766DD5CB20D3F0B4B91F49956EBD7EFE8BAEB79E5415131D4B1D5A6141540217C1C1DB973655EAC4F0297F61A36B88B9C00A011B61B06141A76C3A5F1DD1A4F5A20357A1D9AB17CC8168363CC6DF3B85D878DF1140534D862F7C44D19F006230D35968487FA5E31D3A12C280B1CF7389E73D6700F6DCB97CBE1A480488F4D6FD1E473855B032CD37E868A2DB96203A757FFE376297F964BA68772DBB8092BF1BFBE205B70C8463BBD7D08D30FF1423D88B98C0B004ED286642A2FCBCE87CDA0E96A8C3C0A988FA56B65A91CA5693038F7638833660DF07A091BEDD2E810179FD8FB019A3DC6415AC84DFF99937E6906BAFE0FB22210B3D931421F70208C09C5CD63D5BF7E7AF6A8600E170FA9DEE129185F982709ED3EDD7EB9C226C06F2C20097415A76523DE32409AF86603832DD5E003C68E2737B504F6B5AF83F57C132F70E3258D0F3EB7251CA074D54A0E54838D9C98FC4F3661BD86B1F57B86DFE1D0F33C0B56FF4B65F4940EAC5BC26CCC7B1E71E92F19D371C1C731E4DA01A4EE8CB28865B1D9D75030EE44B32EFE2B313F85F4693102CA08C3D93B1D6C7F10B90A5ABC6A988FA47AAA0AAE734DEF028CC63E946282CB0D8A07C27F591E061FD76E094B5CA0F0E0FBAC212D13056CE39DA481626BA768FB8809CB7C5289B05A9AFBE106157E34376E8121C0FCA036DBC2D9B193DF14F4CDF44F82FB4EA6F3B63A53605EF600BF0D121322E83729E464284D6C43585733820D2D1F21B6FD73C54793A99389B1F4C99B97170CFCB44C5A8D51B0E9CB56FC7CC4233D38076CEE5DC5890B0A4FA63C823679875882EEE5317C2B80A3F71B3149976798B268E7B470073A4F5D18E973090C2F67A20A2F4BC63A747177EADD7D40F45186A38870004FE36F2556B963ED7B0A58B844A3081FA5D7E5AA9D3D949D9011D7F4353BEABFDE4B48771BA39E93AB6B1D978C85D4B4052863B45CD9A3D512276542858C39231D69188A663B17D06C31BC5E7E8703A7071965509CD981994E2A42412C4F50696D2D589C52058463B574E0875AC6B30309664524B634A37057EE680D100349D3824674B9C1762ED4190F08CFF74ECD62321FA95D54237207FFBD0B7DC25F578E804E797FB0998DD333A664DEF15D0E795D982C11FBF9E113D0B39C6020425603399D6EC0D96A8BE0E1E5FEA9364D13DFB6B930F75D5621C5C594F5D95AFE2FB2B9EAD40A39A844F846BF2A031DF500C362F5CFF614F64530BC9788F81BF06BFD555340BD68AA5FF66CD60E9350E47FEAE071B35F92DDABEF15597397AE41F8ACC41A872B63DFFE0DCC68B993A709D7EC9E7566EC10229D8B50F9DD623D87736ED4111E8B9C2E75B1F51749DE34B8E1E59D568C3FC23A270764996707878ED061D173487DB97363C3E93969C7006C3DF0BD2EFAC2F79F669B2C424F3B369C2481E80D00820C64E4A95840ED115AB8CCCC399DCD3E39848D64B7C80BD87C4A1451488FC3F037592ED6D48B623B180238842DB72DD924D78CA6F7760A5F9A6CEBDF8D09A634737CFF3997A1D12733B690B13D23EF9345A121E3B836EB82505A653E9D36039E6A92AC78817A8F1C4A875A80278AC0D3922FD3158D7C5C413937DE1727F4223FE009B53FCBEA7CDF30121C4CC74A28BF98EEE9F4BCE4A4417E0A5DA818DF313AC540FF5720A143E29AF566A5880885C90C80DA4C05BDAF09D799496FC44F6DF24C1DAC267907E529C347FC482A6E2C2FADF92DD573DC312C5718581994F43FD865DA8C8C2A42B7F8CE688D4F071419F651E06CD4EB1BAE7241778CBBCAE8BEC2FC1DEEF514E65C6DA71BAC3DABA113C59708C0E7FDC60DA2B40817706779F834B584BAD5963D3015AC62C59CCCA73E506406D96618257A377C11B803DC107225B8B783489A8417114751055F944A4A74D17529A38C8B566174EE8E15785AC7C42603DB07FB0DB00EF854FEB88CDDCBF10852F482318A2BE58E5702F4036159CAA714D95757AF9153401F49B7F8EBEAE2688D488D34E24E5D379628162CCEEEE6EF04000E60D04CE3E8C9259CC3AF92C579716BDEFA8A961DDFFF2144F53EE120D3D76010B11F216FC5CBF51E5E11FF588F1F3FF3D01A1618AD760C78E85A0D07E7D0973AE314E35A670881BFF37016F96015F1E37685424F4F6FA824491B73005745197AC003EC1DF30AC82B630F4250336E00E89FE3FDF56C523FA207CC53E8B784C63122AFC59D8595089D15313BF54A3A7DBF66982DF64E54521D6BEC5A03FD2B16A091B147F61FEE5A939C4FDBB885BCD5D035AC8EB585426D8E1BC39C0BBE3F4B7EFF92409038C4C15D0558DB0CF7C0D84D24557C4CE5C267D7AB6CC9020BED6D437A6C43E0DC11971F01186A21F238934E43A1075B8AD47EF4E20E7E5BB7D2A95DA5944E92A2ED12350F5E15E1E044D8975661D9A6B64B8B398AA05C56F7BD0DB7C625915A08CFBB79AAB867218DF8D4BFBE75F41E8EA894CB7A4C00D621BC1E50971074A0D4E6932AF83B4F23B75443AA0056A5EEE8D07EE3F36B57230ECFE05A214452CF688B169B6C42897601112AC82D18C5A7347E1253ECF1508083258218AF091A745989976E90239F81D1F0ACCA1A41E8714C90A91056FEF9531CAE1E81536BA63C9ACB679A2CAAA8870FB7B9ADD8ABF5552D7769E82573FF51298B94AF725004E4F6C1B09E708B1D230B2AA1A4DBDB444FA8C29E3004B26F4E86BF56F441F2032CDB82914A84696DF3EB42B331E8A6EB63399396D002A903272254CD968951078194EDE878A987F7E422C8736F63CBC8D86E2FCFC8DD36C37109655932A0488E4A4B4A715481D2B8655CB6AF7F7A04B5896469DDF7049EF3FA21808DC151A9E78D6F2772579B18FFA95A57851DC51908A4F8CB8E4F763738C2CC8392BE47584CB860ECD500EE7E8E98645102CC4D4E9203EA2B9BBBC2E742574E88C3F9120D60166FB3F00B690DAA15EFCA580C6F7FC9D31ADCBF9C82345BCD93EEE45C0E6FE63015E194077C6253DE65837DA91C9042CF0F8B6660AAF60827FD0E8789EACD540BF76ED58005640A3E2FE29BE25C9D1C5F0CEDEE459A02F6A729F6810ECBA2FF12E5E9E13AA5AA63BE9983770E15333FCA6E0AC090346568CEA196DEB430F3487DAD4976E7AE428CC1C7AFC67BC98339C30700F5572704C1A4435A30C1442B7D7094A77C4BA0100C0477C418F865630E4D1D2E646184F0AE9F4947A045BB657A6D41B81D340115EA3F49EEBA85ADAC8B6A05BE73DD3C744E57F204CF8EDC33F6D7C4FE19956178176C262EF2EC567DE41E8762128FFECC2FB0026E84D849B1386F53126497D95819EE9F1424D1739264781C865D032844B58EA2CF7EE842957D92D610572CBF6E0CAE832A4CD043D9F6F38D614D7A5FB73E5DA58726DD4E9AD3BA4A2DE7A97AA579E8650947E8CCEF5F652D58063306696CAAF9F20C7D99B563F8E447229A0BA4195E9A341D11E883885FC82F1003BEB133E065A2E50F5D30B8759249CF0F62296F4E1DBF954DE96AE5D74E8B0F73CA6AA70086DFA9CE2634B96488C53FDBEFC496B13276A1BC60CB5EA9F0EA229235B4B69E9CFE110C831AAC0D567119A89E2CB2C2D6B4275B5529F70FFE4648016D91D82E050B1874C946AE0DCA1E16B070A5ED0EF171A9C6C9D8EB424A22F6F4BB9F1023C1CADC1144F152F548C5760C40B735649E12AF0361934F84B0EA65F746743582DF2EF8D21DC482C65766D08B9D7D63DD85ACBCCED02E5A27DAEBC239E803DCAF95633FB5ED73BEE6AFD692A9AC3459D1A9C27B3D2D37A56F78ED900B40C1D8D45CE8A058801924770B9EF467EC554E3F9F24A22542A33E8590B462604B59E7DB3CF2E496338874B2AFF9F7F59FF6BAD15AA0B0511F13C6027EB0BA68B429A3E4750736EC01066DFBCCFD34D2DEBDDB3737F01F05AA5254781FDFE5EE54279442C9F375E1A861508A00282EA973A69AE06E014C8488D674ADEF1AF6FE829F36A7867EF579E4E19574D35D37CD674F45085DE6969A382A080942C07F449B08E50B55EE7650CB87F8EB9E40EB6B8A695E0C4F63454A8C6B8749ECDC5DD9F7B711A40DC8627348356E18CF4D66363904B8E85E5FA9B5E6020F153130F378500B7D4B442BADA3F9AE130FA3760F2C68A83865523668B6F944572C075A9389221D61709BC8B883EA6505B959F8FB8EBDDC364C0065BE387E6D2BAAE51768D7859A2775A5651691B271EA999F1D810E42A5818AF0AB9650AF06B6A3F836A105204B9AD18D81D522DB01F991A755F0F01D61CF73C9F1906D3153AED4BB864F04AACAAA269FCACAAD42C9A9A9CF06424BA935E44819D3513A755871C226CA6CE6390DEDE7004947FB9F2923918C66B96F4E5BA8EB136375250312676F9B3593F28E468ABA06C4606D53AFE470AD5D09C0F2345FE3212EDE7F467AAA68BADE6A7810020515E56BCFD7324A1B9D18B99404CCE8B6C1C746C04FB8C612688DE080652D865838F14C4F34E0E45DABE95D4A3A33BB4A717D89624D0F2F2372736054FE23D8C7326E19A2CAF5CD667F49FAF6AB8BAE6DA004910968942D8AE33BE6038DB69DD108F69E42080D64E674F181A70B313573AE5F30401805B022BF3979590F2ADBC16FD78A324EB55F1C27F851CDAFF83BD93121C85E947A95ED94E499BDABEAD1FB1139E6562BE84D4AA8437DE5896967F673FEE1D6287DD51197E3C338E7C07A4E5FCA9351A16338D6DB0FE20BDCF95ABD6512D35140A9C49EC46B2A960A2AC8FF44E026BCC737F99C557E754C075E04A88C3DB823AA7C19220836EEFDB23ACE86EF0435444E21BACE4A655D86FC6ACA3B5A460707020C607A81472947DCDF6A7F815A87D8455F3818C8F0B85239E77D8B5660BA143721915104D39B488C7559F49455C1A8F1FA4A412EFE41A7097E5E5880423CA2CDC6DF87ADFFFCDF7E737684388106A5D8D5977C63DF3039E36B3C25E7A0C662806C527B2C82791784A4B3B154A7C8A97E3C39FFC0094DA2246625156ACE1E9AB71B37218EBE36C0BAD77EF6D63E89CE00309F555F7743ABD970C6CC986F423150A9BC7BB00D038F6DCE156F9B95805D67DCCE8805CF42BE4A2167638DD7C0A167E48C57F3F644CD9F9FAFCB05D5CF35B6EF3B3088AF2C946382E3DDE0C6E321EB1C1860769C3081FD54A749DF2B530986066A239ABBE70E06CF001F3F6CD08C8DE7B5E697507F08EBC10F9C5878EA7199993688E3BDB120EDB290784C7BE37382531C7C13BF6DBAAC0BEB174B85EEC766643B8302EA96B471F464E2F8CDC76DB7E0F62F6EE469BFC129815EB58A685C5CE05334874A4A1522C65FE61F86D45FF5F9C25BBE13591206750D63F02B0D1DEE58A467C4384A8765FB8426DD1D74F0A8DC60D29F621E23940BBC183645D662C35CC09A122BB54C176B9EB519289396E8385CF86F30B6DEB37E12A8ACA3A53EEE6214C509857FA05C7F429CFB103AC809EB7DF12C8A585038A583FD42F1B21994BF0F8AF8528EBD5AA99D5846F14F8D19138C6217448552E5C1872D39652EF8BEF7266DFE2E6BEB0449A9BCFA77A2F6780E949E038700F10939DA8F392CA5CC2261431E06CDB99015971D1D433C2A9B571C4BF240849A02C2836003F12C5A9F5E83827505A87E003C7746B77483113BA88D2E07FCD1F97F6AC841894EE8D6482240028C7A157618E17621D768D606221703AFABEC81EF892FBC94E6DED5F46B8EC0649EAB2C39DBD77533F31075A0B0F6ECF298F00185CDC8538EC0C841FEF0CE18BEF2EC9770BB4D5DABA0D9A1B4132A6510398F33D24FF7C941A4BE206A89B32B525F9DC93D9718FA9D9FB59C669774B61BC831681FF6A4E33702675BE9FFE4FD77746376610F2F05CC4A28AD3C5BFA09B14D355205C098BDA1B4F88C235423031812C1156BD74DCD4660F4E5E6422C2F6321F5315AC87203EC6E30DC0D67389A03474B5DA34865A87F523B33E730ED94DC026F69F9F41CE197B8CB3A3EF2582BBB01734E6903BF36D20D13A61B9139E59E53C3BBB25304213EEE8809459359E0DB59AE82A35ADD2A58B710E3E2A035AFD21BBF4FB068BB73E4E74C477A92F9A4DB51842D23A78C4228126CF68278610C21F32B5F8D09B0A4AFFF5326D48DC4ACCAE6C3CBB4350288A996F3724D11907341D3EAACA116865423DE64BE5E92343C1D89F2F5A4CADB6AD0222E02670D013FA5791FE0B4705D59C1ECDCCD38308726F0F4E00B0F03925C80D3861660589507AAD6477FE6584F790E9DCF27F6194926502CE5615D0B0E5C902DCEC0DE05463F2F0A9D0602A960664139A84C4B1311EF1F52A9075CEDF145948900BDA7C68E9B4B9D924A2DB8EFE24DCB9139194F2A46E56CA4AB3A09C3C1B73C3ABF3D704149FACB705C1B01A9C46AA6FB9D007FD42CF02AC589996119ED3B47DD9A1692E6CDD6FE24B4E225052887C4F7E4C7B4E6AD028945B1463674E4E3F98233813D240B1B12D11930ABD79A5BDD07EC6D8E58F1DE410E243B1529CD5C2147B09B6C28C08D7A0DFD771F86FAD7BFD1DBC38FE5C2A345522B3E624C34C480C478AF2DF148927CAC9F5546D577670CA5588ECA4837E992B294955A0BA0D9DA55ECA60AB94F67C76DB514D02C3578C29F7C44177FE8F13CE692EF6BC1FE5C6815AF1938DE46CB2477ACB8EE16E4160BC86E352C75DD56CFF90E2A769D4B4B8F672299FE860153C348CF7D999DD0950FA93CDA4383A0A4D818A619F0B389DF693C41CC6A4FCFA0EFFB65E888E7CCE514663DF9AF1EBEF615C8B83474F216DE2FC580D08FC9739786464088520079A00B25A7FC6C434AFBBBC0198998039220A196E57822897A468328CA530B7D3F75017AE791DE1066F3AFF33B8A7882A2A1748AEA0E77A31808BC87080BCCEE871367B4774C99707E40EA8FAA17F686E7D3B2CB328683D2F8FF0CC98D69431291E656BC0FA69574F42425D1809C127713EB8A879DC04C817880F1357E0E598326952CEBA158E07D87EB204134734EBD549A97263502D87ABEDB71D4EF21AB599D2E109D732C3C7873B86D6779C4040E5D98894D14230F1F0E9C20626F3F93D7E760A323598D86881B8019904D1071E04D91385CFA14D7F5BCE1FA5AC61AF0DF27BB45283695EC0695B837D5F022935100406797AE1F5C5796820028D7FB6AEA36002A18B6074992AC4CBE3EEAA9E8045DD22A69E12955E8C119D40AA5520237AB1AABA3486B3B0066EBF2592AC250863BFFA8C10C975C28A0F02B238C65DE78C27E798274745C36028C6987C0CF40695F8CC059EA21DD4B737FD2EE4497A1902616EE96B99D75FB2C21ACF85B8848A19C80D6076254A2E72AEB1F827C47CA9CADE9B4F85DD998F21C475D2A5924D6FBC1B2D64673B4E8B27554D752A023340DEE948E41C206B3F4DB042898C45C595F6462857C66EAE1D900A43DDD449B3063F5DCEB76FF5015EC3CE0A149E8444596E4F86ACF2E8BD1847DF3278257F159C76DBDF6F535CA2C2A5B07510A57EE5D1028AEE54616A5267C7193430C6764184E76A7A851D12B19C77FBDFB57C24AD2E003210457EFF8FD3FB1BE013CE0D35B20B8DA2755368D7380EB6BC0202CFE91F3BEE11D5D585C617081271E5434CD79D9271855EB96E920393A9749F386FBC4A246ECCB0A46FCF8B3F584438258D27C0E6CE875947FB0B6B0FFC0C77379A997E39D0D22AA0136972F82118EC91E2DB4540113168156E524BBC95DD0034901BC1E7DBB97DCF302EF)] diff --git a/tests/integration/raw.rs b/tests/integration/raw.rs index 055198ec..55e0f235 100644 --- a/tests/integration/raw.rs +++ b/tests/integration/raw.rs @@ -6,6 +6,7 @@ use proptest::{arbitrary::any, proptest}; use tikv_client::{raw::Client, Config, KvPair, Value}; proptest! { + /// Test single point (put, get, delete) operations on keys. #[test] fn point( pair in any::(), @@ -28,6 +29,7 @@ proptest! { } proptest! { + /// Test batch (put, get, delete) operations on keys. #[test] fn batch( kvs in arb_batch(any::(), None), @@ -49,34 +51,3 @@ proptest! { ).unwrap(); } } - -proptest! { - #[test] - fn scan( - kvs in arb_batch(any::(), None), - ) { - let client = block_on(Client::connect(Config::new(pd_addr()))).unwrap(); - let mut keys = kvs.iter().map(|kv| kv.key()).cloned().collect::>(); - keys.sort(); - // If we aren't getting values this is an empty vector, so use dummy values. - let start_key = keys.iter().cloned().next().unwrap_or(vec![0].into()); - let end_key = keys.iter().cloned().last().unwrap_or(vec![0].into()); - - block_on( - client.batch_put(kvs.clone()) - ).unwrap(); - - let out_value = block_on( - client.scan(start_key..=end_key, 10240) // Magic max number is TiKV intrinsic - ).unwrap(); - - // Since TiKV returns empty keys as tombstones in scans, we just check we can find all the items. - assert!(kvs.iter().all(|kv| { - out_value.iter().find(|out| kv == *out).is_some() - })); - - block_on( - client.batch_delete(keys.clone()) - ).unwrap(); - } -} diff --git a/tests/test.rs b/tests/test.rs index 84af126a..ab521146 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -5,13 +5,13 @@ #[cfg(feature = "integration-tests")] mod integration; -#[cfg(feature = "proptest")] +#[cfg(feature = "property-testing")] use proptest::strategy::Strategy; -#[cfg(feature = "proptest")] +#[cfg(feature = "property-testing")] const PROPTEST_BATCH_SIZE_MAX: usize = 16; -#[cfg(feature = "proptest")] +#[cfg(feature = "property-testing")] pub fn arb_batch( single_strategy: impl Strategy, max_batch_size: impl Into>, From 9021984017bb4f31abbce78f87a5c639b5e45cb2 Mon Sep 17 00:00:00 2001 From: Ana Hobden Date: Thu, 20 Jun 2019 11:28:20 -0700 Subject: [PATCH 4/5] Fixes #69 Signed-off-by: Ana Hobden --- Cargo.toml | 2 +- tests/integration/mod.rs | 10 ++++++++++ tests/integration/raw.rs | 2 ++ tests/test.rs | 2 +- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 522d7a24..2d92c39f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,4 +46,4 @@ features = ["push", "process"] clap = "2.32" tempdir = "0.3" runtime = "0.3.0-alpha.3" -runtime-tokio = "0.3.0-alpha.3" +runtime-tokio = "0.3.0-alpha.3" \ No newline at end of file diff --git a/tests/integration/mod.rs b/tests/integration/mod.rs index 4d13751a..4be17afc 100644 --- a/tests/integration/mod.rs +++ b/tests/integration/mod.rs @@ -1,5 +1,15 @@ // Copyright 2019 TiKV Project Authors. Licensed under Apache-2.0. +// All integration tests are deliberately annotated by +// +// ``` +// #[test] +// #[cfg_attr(not(feature = "integration-tests"), ignore)] +// ``` +// +// This is so that integration tests are still compiled even if they aren't run. +// This helps avoid having broken integration tests even if they aren't run. + mod raw; use std::env::var; diff --git a/tests/integration/raw.rs b/tests/integration/raw.rs index 55e0f235..5466e98a 100644 --- a/tests/integration/raw.rs +++ b/tests/integration/raw.rs @@ -8,6 +8,7 @@ use tikv_client::{raw::Client, Config, KvPair, Value}; proptest! { /// Test single point (put, get, delete) operations on keys. #[test] + #[cfg_attr(not(feature = "integration-tests"), ignore)] fn point( pair in any::(), ) { @@ -31,6 +32,7 @@ proptest! { proptest! { /// Test batch (put, get, delete) operations on keys. #[test] + #[cfg_attr(not(feature = "integration-tests"), ignore)] fn batch( kvs in arb_batch(any::(), None), ) { diff --git a/tests/test.rs b/tests/test.rs index ab521146..7092251e 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -2,7 +2,7 @@ #![feature(async_await)] -#[cfg(feature = "integration-tests")] +#[cfg(feature = "property-testing")] mod integration; #[cfg(feature = "property-testing")] From bc57b20e18c4b0422aea9cd2bd3d1a93b4c5b417 Mon Sep 17 00:00:00 2001 From: Ana Hobden Date: Tue, 2 Jul 2019 11:11:12 -0700 Subject: [PATCH 5/5] fmt Signed-off-by: Ana Hobden --- Cargo.toml | 1 - src/kv/kvpair.rs | 2 +- src/kv/value.rs | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 532602ec..f7e14462 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,6 @@ default = [] # Use $PD_ADDRS, comma separated, to set the addresses the tests use. integration-tests = [] - [lib] name = "tikv_client" diff --git a/src/kv/kvpair.rs b/src/kv/kvpair.rs index 4fc96a74..607e32fe 100644 --- a/src/kv/kvpair.rs +++ b/src/kv/kvpair.rs @@ -100,4 +100,4 @@ impl fmt::Debug for KvPair { Err(_) => write!(f, "KvPair({}, {})", HexRepr(&key.0), HexRepr(&value.0)), } } -} \ No newline at end of file +} diff --git a/src/kv/value.rs b/src/kv/value.rs index e4fd7726..36c4c94a 100644 --- a/src/kv/value.rs +++ b/src/kv/value.rs @@ -98,4 +98,4 @@ impl fmt::Debug for Value { Err(_) => write!(f, "Value({})", HexRepr(&self.0)), } } -} \ No newline at end of file +}