From 1b5ee22b10d4e995e55429df8ebad0383803e34f Mon Sep 17 00:00:00 2001 From: Tran Manh Duy Date: Wed, 21 Aug 2024 09:35:20 +0700 Subject: [PATCH 1/7] feat: Aptos Settelement Layer (#7) * feat(aptos_settlement_client): update state kzg & update state & verify inclusion * test(aptos_settlement_client): add update_state, state_block_number unit test * fix: dependencies * refactor code * feat: add submodule ionia * feat(aptos_settlement_client): update state kzg & update state & verify inclusion * test(aptos_settlement_client): add update_state, state_block_number unit test * fix: dependencies * refactor code * feat: add submodule ionia * refactor code * refactor code --------- Co-authored-by: Steve Nguyen --- .cargo/config.toml | 2 + .github/dependabot.yaml | 6 + .gitmodules | 3 + Cargo.lock | 12416 +++++++++++----- Cargo.toml | 65 +- crates/da-clients/ethereum/src/config.rs | 4 +- crates/da-clients/ethereum/src/lib.rs | 4 +- crates/orchestrator/Cargo.toml | 6 +- crates/orchestrator/src/config.rs | 6 +- .../src/data_storage/aws_s3/mod.rs | 5 +- crates/orchestrator/src/data_storage/types.rs | 3 +- .../orchestrator/src/database/mongodb/mod.rs | 15 +- crates/orchestrator/src/jobs/da_job/mod.rs | 50 +- .../src/jobs/job_handler_factory.rs | 3 +- .../src/jobs/state_update_job/utils.rs | 3 +- crates/orchestrator/src/queue/sqs/mod.rs | 2 +- crates/orchestrator/src/tests/config.rs | 5 +- .../src/tests/data_storage/mod.rs | 9 +- crates/orchestrator/src/tests/database/mod.rs | 10 +- .../orchestrator/src/tests/jobs/da_job/mod.rs | 4 +- crates/orchestrator/src/tests/jobs/mod.rs | 2 +- .../src/tests/jobs/proving_job/mod.rs | 2 +- .../src/tests/workers/utils/mod.rs | 8 +- .../src/workers/data_submission_worker.rs | 11 +- crates/orchestrator/src/workers/mod.rs | 11 +- crates/orchestrator/src/workers/proving.rs | 6 +- .../gps-fact-checker/src/fact_info.rs | 8 +- crates/settlement-clients/aptos/Cargo.toml | 24 + crates/settlement-clients/aptos/src/config.rs | 21 + crates/settlement-clients/aptos/src/helper.rs | 25 + crates/settlement-clients/aptos/src/lib.rs | 331 + .../clients/interfaces/validity_interface.rs | 16 +- .../ethereum/src/clients/validity.rs | 4 +- .../ethereum/src/conversion.rs | 4 +- crates/settlement-clients/ethereum/src/lib.rs | 40 +- .../settlement-clients/ethereum/src/types.rs | 12 +- .../starknet/src/conversion.rs | 8 +- crates/settlement-clients/starknet/src/lib.rs | 82 +- ionia | 1 + 39 files changed, 9148 insertions(+), 4089 deletions(-) create mode 100644 .cargo/config.toml create mode 100644 .github/dependabot.yaml create mode 100644 .gitmodules create mode 100644 crates/settlement-clients/aptos/Cargo.toml create mode 100644 crates/settlement-clients/aptos/src/config.rs create mode 100644 crates/settlement-clients/aptos/src/helper.rs create mode 100644 crates/settlement-clients/aptos/src/lib.rs create mode 160000 ionia diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 00000000..bff29e6e --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,2 @@ +[build] +rustflags = ["--cfg", "tokio_unstable"] diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml new file mode 100644 index 00000000..9ac75914 --- /dev/null +++ b/.github/dependabot.yaml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: "gitsubmodule" + directory: "/" + schedule: + interval: "daily" \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..257edb86 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "ionia"] + path = ionia + url = git@github.com:sota-zk-labs/ionia.git diff --git a/Cargo.lock b/Cargo.lock index bd538040..c5f84aa5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,33 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" + +[[package]] +name = "abstract-domain-derive" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "addchain" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e69442aa5628ea6951fa33e24efe8313f4321a91bd729fc2f75bdfc858570" +dependencies = [ + "num-bigint 0.3.3", + "num-integer", + "num-traits 0.2.19", +] + [[package]] name = "addr2line" version = "0.21.0" @@ -17,6 +44,16 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + [[package]] name = "aes" version = "0.8.4" @@ -28,13 +65,27 @@ dependencies = [ "cpufeatures", ] +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + [[package]] name = "ahash" version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", ] @@ -46,7 +97,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "getrandom", + "getrandom 0.2.15", "once_cell", "version_check", "zerocopy", @@ -61,6 +112,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + [[package]] name = "allocator-api2" version = "0.2.18" @@ -87,38 +144,37 @@ dependencies = [ [[package]] name = "alloy" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9134b68e24175eff6c3c4d2bffeefb0a1b7435462130862c88d1524ca376e7e5" +checksum = "3f4a4aaae80afd4be443a6aecd92a6b255dcdd000f97996928efb33d8a71e100" dependencies = [ - "alloy-consensus 0.1.2", + "alloy-consensus 0.2.1", "alloy-contract", - "alloy-core 0.7.6", - "alloy-eips 0.1.2", + "alloy-core 0.7.7", + "alloy-eips 0.2.1", "alloy-genesis", - "alloy-network 0.1.2", - "alloy-provider 0.1.2", + "alloy-network 0.2.1", + "alloy-provider 0.2.1", "alloy-pubsub", - "alloy-rpc-client 0.1.2", - "alloy-rpc-types 0.1.2", - "alloy-serde 0.1.2", - "alloy-signer 0.1.2", + "alloy-rpc-client 0.2.1", + "alloy-rpc-types 0.2.1", + "alloy-serde 0.2.1", + "alloy-signer 0.2.1", "alloy-signer-local", - "alloy-transport 0.1.2", - "alloy-transport-http 0.1.2", + "alloy-transport 0.2.1", + "alloy-transport-http 0.2.1", "alloy-transport-ipc", "alloy-transport-ws", - "reqwest 0.12.5", ] [[package]] name = "alloy-chains" -version = "0.1.21" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd47e5f8545bdf53beb545d3c039b4afa16040bdf69c50100581579b08776afd" +checksum = "01828af9e8fb20a85b1caf6570d84ee93595d6cbd9e8ea96bda3a4e27a55a4fa" dependencies = [ "num_enum", - "strum 0.26.2", + "strum 0.26.3", ] [[package]] @@ -129,38 +185,39 @@ dependencies = [ "alloy-eips 0.1.0", "alloy-primitives 0.6.4", "alloy-rlp", - "sha2", + "sha2 0.10.8", ] [[package]] name = "alloy-consensus" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a016bfa21193744d4c38b3f3ab845462284d129e5e23c7cc0fafca7e92d9db37" +checksum = "04c309895995eaa4bfcc345f5515a39c7df9447798645cc8bf462b6c5bf1dc96" dependencies = [ - "alloy-eips 0.1.2", - "alloy-primitives 0.7.6", + "alloy-eips 0.2.1", + "alloy-primitives 0.7.7", "alloy-rlp", - "alloy-serde 0.1.2", + "alloy-serde 0.2.1", "c-kzg", "serde", ] [[package]] name = "alloy-contract" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e47b2a620fd588d463ccf0f5931b41357664b293a8d31592768845a2a101bb9e" +checksum = "3f4e0ef72b0876ae3068b2ed7dfae9ae1779ce13cfaec2ee1f08f5bd0348dc57" dependencies = [ - "alloy-dyn-abi 0.7.6", - "alloy-json-abi 0.7.6", - "alloy-network 0.1.2", - "alloy-primitives 0.7.6", - "alloy-provider 0.1.2", + "alloy-dyn-abi 0.7.7", + "alloy-json-abi 0.7.7", + "alloy-network 0.2.1", + "alloy-network-primitives", + "alloy-primitives 0.7.7", + "alloy-provider 0.2.1", "alloy-pubsub", "alloy-rpc-types-eth", - "alloy-sol-types 0.7.6", - "alloy-transport 0.1.2", + "alloy-sol-types 0.7.7", + "alloy-transport 0.2.1", "futures", "futures-util", "thiserror", @@ -180,14 +237,14 @@ dependencies = [ [[package]] name = "alloy-core" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5af3faff14c12c8b11037e0a093dd157c3702becb8435577a2408534d0758315" +checksum = "529fc6310dc1126c8de51c376cbc59c79c7f662bd742be7dc67055d5421a81b4" dependencies = [ - "alloy-dyn-abi 0.7.6", - "alloy-json-abi 0.7.6", - "alloy-primitives 0.7.6", - "alloy-sol-types 0.7.6", + "alloy-dyn-abi 0.7.7", + "alloy-json-abi 0.7.7", + "alloy-primitives 0.7.7", + "alloy-sol-types 0.7.7", ] [[package]] @@ -204,24 +261,24 @@ dependencies = [ "itoa", "serde", "serde_json", - "winnow 0.6.13", + "winnow 0.6.18", ] [[package]] name = "alloy-dyn-abi" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6e6436a9530f25010d13653e206fab4c9feddacf21a54de8d7311b275bc56b" +checksum = "413902aa18a97569e60f679c23f46a18db1656d87ab4d4e49d0e1e52042f66df" dependencies = [ - "alloy-json-abi 0.7.6", - "alloy-primitives 0.7.6", - "alloy-sol-type-parser 0.7.6", - "alloy-sol-types 0.7.6", + "alloy-json-abi 0.7.7", + "alloy-primitives 0.7.7", + "alloy-sol-type-parser 0.7.7", + "alloy-sol-types 0.7.7", "const-hex", "itoa", "serde", "serde_json", - "winnow 0.6.13", + "winnow 0.6.18", ] [[package]] @@ -239,28 +296,29 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d6d8118b83b0489cfb7e6435106948add2b35217f4a5004ef895f613f60299" +checksum = "d9431c99a3b3fe606ede4b3d4043bdfbcb780c45b8d8d226c3804e2b75cfbe68" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "alloy-rlp", - "alloy-serde 0.1.2", + "alloy-serde 0.2.1", "c-kzg", "derive_more", + "k256", "once_cell", "serde", - "sha2", + "sha2 0.10.8", ] [[package]] name = "alloy-genesis" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "894f33a7822abb018db56b10ab90398e63273ce1b5a33282afd186c132d764a6" +checksum = "79614dfe86144328da11098edcc7bc1a3f25ad8d3134a9eb9e857e06f0d9840d" dependencies = [ - "alloy-primitives 0.7.6", - "alloy-serde 0.1.2", + "alloy-primitives 0.7.7", + "alloy-serde 0.2.1", "serde", ] @@ -278,12 +336,12 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaeaccd50238126e3a0ff9387c7c568837726ad4f4e399b528ca88104d6c25ef" +checksum = "bc05b04ac331a9f07e3a4036ef7926e49a8bf84a99a1ccfc7e2ab55a5fcbb372" dependencies = [ - "alloy-primitives 0.7.6", - "alloy-sol-type-parser 0.7.6", + "alloy-primitives 0.7.7", + "alloy-sol-type-parser 0.7.7", "serde", "serde_json", ] @@ -301,11 +359,12 @@ dependencies = [ [[package]] name = "alloy-json-rpc" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61f0ae6e93b885cc70fe8dae449e7fd629751dbee8f59767eaaa7285333c5727" +checksum = "57e2865c4c3bb4cdad3f0d9ec1ab5c0c657ba69a375651bd35e32fb6c180ccc2" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", + "alloy-sol-types 0.7.7", "serde", "serde_json", "thiserror", @@ -331,24 +390,36 @@ dependencies = [ [[package]] name = "alloy-network" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc122cbee2b8523854cc11d87bcd5773741602c553d2d2d106d82eeb9c16924a" +checksum = "6e701fc87ef9a3139154b0b4ccb935b565d27ffd9de020fe541bf2dec5ae4ede" dependencies = [ - "alloy-consensus 0.1.2", - "alloy-eips 0.1.2", - "alloy-json-rpc 0.1.2", - "alloy-primitives 0.7.6", + "alloy-consensus 0.2.1", + "alloy-eips 0.2.1", + "alloy-json-rpc 0.2.1", + "alloy-network-primitives", + "alloy-primitives 0.7.7", "alloy-rpc-types-eth", - "alloy-serde 0.1.2", - "alloy-signer 0.1.2", - "alloy-sol-types 0.7.6", + "alloy-serde 0.2.1", + "alloy-signer 0.2.1", + "alloy-sol-types 0.7.7", "async-trait", "auto_impl", "futures-utils-wasm", "thiserror", ] +[[package]] +name = "alloy-network-primitives" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec9d5a0f9170b10988b6774498a022845e13eda94318440d17709d50687f67f9" +dependencies = [ + "alloy-primitives 0.7.7", + "alloy-serde 0.2.1", + "serde", +] + [[package]] name = "alloy-primitives" version = "0.6.4" @@ -365,7 +436,7 @@ dependencies = [ "k256", "keccak-asm", "proptest", - "rand", + "rand 0.8.5", "ruint", "serde", "tiny-keccak", @@ -373,9 +444,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f783611babedbbe90db3478c120fb5f5daacceffc210b39adc0af4fe0da70bad" +checksum = "ccb3ead547f4532bc8af961649942f0b9c16ee9226e26caa3f38420651cc0bf4" dependencies = [ "alloy-rlp", "bytes", @@ -387,7 +458,7 @@ dependencies = [ "k256", "keccak-asm", "proptest", - "rand", + "rand 0.8.5", "ruint", "serde", "tiny-keccak", @@ -411,7 +482,7 @@ dependencies = [ "auto_impl", "dashmap", "futures", - "lru", + "lru 0.12.4", "reqwest 0.12.5", "serde_json", "tokio", @@ -420,21 +491,22 @@ dependencies = [ [[package]] name = "alloy-provider" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d5af289798fe8783acd0c5f10644d9d26f54a12bc52a083e4f3b31718e9bf92" +checksum = "3f9c0ab10b93de601a6396fc7ff2ea10d3b28c46f079338fa562107ebf9857c8" dependencies = [ "alloy-chains", - "alloy-consensus 0.1.2", - "alloy-eips 0.1.2", - "alloy-json-rpc 0.1.2", - "alloy-network 0.1.2", - "alloy-primitives 0.7.6", + "alloy-consensus 0.2.1", + "alloy-eips 0.2.1", + "alloy-json-rpc 0.2.1", + "alloy-network 0.2.1", + "alloy-network-primitives", + "alloy-primitives 0.7.7", "alloy-pubsub", - "alloy-rpc-client 0.1.2", + "alloy-rpc-client 0.2.1", "alloy-rpc-types-eth", - "alloy-transport 0.1.2", - "alloy-transport-http 0.1.2", + "alloy-transport 0.2.1", + "alloy-transport-http 0.2.1", "alloy-transport-ipc", "alloy-transport-ws", "async-stream", @@ -443,7 +515,7 @@ dependencies = [ "dashmap", "futures", "futures-utils-wasm", - "lru", + "lru 0.12.4", "pin-project", "reqwest 0.12.5", "serde", @@ -455,13 +527,13 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702f330b7da123a71465ab9d39616292f8344a2811c28f2cc8d8438a69d79e35" +checksum = "3f5da2c55cbaf229bad3c5f8b00b5ab66c74ef093e5f3a753d874cfecf7d2281" dependencies = [ - "alloy-json-rpc 0.1.2", - "alloy-primitives 0.7.6", - "alloy-transport 0.1.2", + "alloy-json-rpc 0.2.1", + "alloy-primitives 0.7.7", + "alloy-transport 0.2.1", "bimap", "futures", "serde", @@ -474,24 +546,24 @@ dependencies = [ [[package]] name = "alloy-rlp" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b155716bab55763c95ba212806cf43d05bcc70e5f35b02bad20cf5ec7fe11fed" +checksum = "26154390b1d205a4a7ac7352aa2eb4f81f391399d4e2f546fb81a2f8bb383f62" dependencies = [ "alloy-rlp-derive", - "arrayvec", + "arrayvec 0.7.4", "bytes", ] [[package]] name = "alloy-rlp-derive" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8037e03c7f462a063f28daec9fda285a9a89da003c552f8637a80b9c8fd96241" +checksum = "4d0f2d905ebd295e7effec65e5f6868d153936130ae718352771de3e7d03c75c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -516,15 +588,15 @@ dependencies = [ [[package]] name = "alloy-rpc-client" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b40fcb53b2a9d0a78a4968b2eca8805a4b7011b9ee3fdfa2acaf137c5128f36b" +checksum = "5b38e3ffdb285df5d9f60cb988d336d9b8e3505acb78750c3bc60336a7af41d3" dependencies = [ - "alloy-json-rpc 0.1.2", - "alloy-primitives 0.7.6", + "alloy-json-rpc 0.2.1", + "alloy-primitives 0.7.7", "alloy-pubsub", - "alloy-transport 0.1.2", - "alloy-transport-http 0.1.2", + "alloy-transport 0.2.1", + "alloy-transport-http 0.2.1", "alloy-transport-ipc", "alloy-transport-ws", "futures", @@ -569,45 +641,47 @@ dependencies = [ [[package]] name = "alloy-rpc-types" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f2fbe956a3e0f0975c798f488dc6be96b669544df3737e18f4a325b42f4c86" +checksum = "e6c31a3750b8f5a350d17354e46a52b0f2f19ec5f2006d816935af599dedc521" dependencies = [ "alloy-rpc-types-engine", "alloy-rpc-types-eth", - "alloy-serde 0.1.2", + "alloy-serde 0.2.1", + "serde", ] [[package]] name = "alloy-rpc-types-engine" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd473d98ec552f8229cd6d566bd2b0bbfc5bb4efcefbb5288c834aa8fd832020" +checksum = "ff63f51b2fb2f547df5218527fd0653afb1947bf7fead5b3ce58c75d170b30f7" dependencies = [ - "alloy-consensus 0.1.2", - "alloy-eips 0.1.2", - "alloy-primitives 0.7.6", + "alloy-consensus 0.2.1", + "alloy-eips 0.2.1", + "alloy-primitives 0.7.7", "alloy-rlp", "alloy-rpc-types-eth", - "alloy-serde 0.1.2", - "jsonwebtoken", - "rand", + "alloy-serde 0.2.1", + "jsonwebtoken 9.3.0", + "rand 0.8.5", "serde", "thiserror", ] [[package]] name = "alloy-rpc-types-eth" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "083f443a83b9313373817236a8f4bea09cca862618e9177d822aee579640a5d6" +checksum = "81e18424d962d7700a882fe423714bd5b9dde74c7a7589d4255ea64068773aef" dependencies = [ - "alloy-consensus 0.1.2", - "alloy-eips 0.1.2", - "alloy-primitives 0.7.6", + "alloy-consensus 0.2.1", + "alloy-eips 0.2.1", + "alloy-network-primitives", + "alloy-primitives 0.7.7", "alloy-rlp", - "alloy-serde 0.1.2", - "alloy-sol-types 0.7.6", + "alloy-serde 0.2.1", + "alloy-sol-types 0.7.7", "itertools 0.13.0", "serde", "serde_json", @@ -626,11 +700,11 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d94da1c0c4e27cc344b05626fe22a89dc6b8b531b9475f3b7691dbf6913e4109" +checksum = "e33feda6a53e6079895aed1d08dcb98a1377b000d80d16370fbbdb8155d547ef" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "serde", "serde_json", ] @@ -650,11 +724,11 @@ dependencies = [ [[package]] name = "alloy-signer" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58d876be3afd8b78979540084ff63995292a26aa527ad0d44276405780aa0ffd" +checksum = "740a25b92e849ed7b0fa013951fe2f64be9af1ad5abe805037b44fb7770c5c47" dependencies = [ - "alloy-primitives 0.7.6", + "alloy-primitives 0.7.7", "async-trait", "auto_impl", "elliptic-curve 0.13.8", @@ -664,17 +738,17 @@ dependencies = [ [[package]] name = "alloy-signer-local" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40a37dc216c269b8a7244047cb1c18a9c69f7a0332ab2c4c2aa4cbb1a31468b" +checksum = "1b0707d4f63e4356a110b30ef3add8732ab6d181dd7be4607bf79b8777105cee" dependencies = [ - "alloy-consensus 0.1.2", - "alloy-network 0.1.2", - "alloy-primitives 0.7.6", - "alloy-signer 0.1.2", + "alloy-consensus 0.2.1", + "alloy-network 0.2.1", + "alloy-primitives 0.7.7", + "alloy-signer 0.2.1", "async-trait", "k256", - "rand", + "rand 0.8.5", "thiserror", ] @@ -689,7 +763,7 @@ dependencies = [ "alloy-signer 0.1.0", "async-trait", "k256", - "rand", + "rand 0.8.5", "thiserror", ] @@ -702,63 +776,63 @@ dependencies = [ "const-hex", "dunce", "heck 0.4.1", - "indexmap 2.2.6", + "indexmap 2.3.0", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", "syn-solidity 0.6.4", "tiny-keccak", ] [[package]] name = "alloy-sol-macro" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bad41a7c19498e3f6079f7744656328699f8ea3e783bdd10d85788cd439f572" +checksum = "2b40397ddcdcc266f59f959770f601ce1280e699a91fc1862f29cef91707cd09" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "alloy-sol-macro-expander" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9899da7d011b4fe4c406a524ed3e3f963797dbc93b45479d60341d3a27b252" +checksum = "867a5469d61480fea08c7333ffeca52d5b621f5ca2e44f271b117ec1fc9a0525" dependencies = [ - "alloy-json-abi 0.7.6", + "alloy-json-abi 0.7.7", "alloy-sol-macro-input", "const-hex", "heck 0.5.0", - "indexmap 2.2.6", + "indexmap 2.3.0", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.66", - "syn-solidity 0.7.6", + "syn 2.0.72", + "syn-solidity 0.7.7", "tiny-keccak", ] [[package]] name = "alloy-sol-macro-input" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32d595768fdc61331a132b6f65db41afae41b9b97d36c21eb1b955c422a7e60" +checksum = "2e482dc33a32b6fadbc0f599adea520bd3aaa585c141a80b404d0a3e3fa72528" dependencies = [ - "alloy-json-abi 0.7.6", + "alloy-json-abi 0.7.7", "const-hex", "dunce", "heck 0.5.0", "proc-macro2", "quote", "serde_json", - "syn 2.0.66", - "syn-solidity 0.7.6", + "syn 2.0.72", + "syn-solidity 0.7.7", ] [[package]] @@ -767,16 +841,17 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0045cc89524e1451ccf33e8581355b6027ac7c6e494bb02959d4213ad0d8e91d" dependencies = [ - "winnow 0.6.13", + "winnow 0.6.18", ] [[package]] name = "alloy-sol-type-parser" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baa2fbd22d353d8685bd9fee11ba2d8b5c3b1d11e56adb3265fcf1f32bfdf404" +checksum = "cbcba3ca07cf7975f15d871b721fb18031eec8bce51103907f6dcce00b255d98" dependencies = [ - "winnow 0.6.13", + "serde", + "winnow 0.6.18", ] [[package]] @@ -793,13 +868,13 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a49042c6d3b66a9fe6b2b5a8bf0d39fc2ae1ee0310a2a26ffedd79fb097878dd" +checksum = "a91ca40fa20793ae9c3841b83e74569d1cc9af29a2f5237314fd3452d51e38c7" dependencies = [ - "alloy-json-abi 0.7.6", - "alloy-primitives 0.7.6", - "alloy-sol-macro 0.7.6", + "alloy-json-abi 0.7.7", + "alloy-primitives 0.7.7", + "alloy-sol-macro 0.7.7", "const-hex", "serde", ] @@ -824,11 +899,11 @@ dependencies = [ [[package]] name = "alloy-transport" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245af9541f0a0dbd5258669c80dfe3af118164cacec978a520041fc130550deb" +checksum = "3d0590afbdacf2f8cca49d025a2466f3b6584a016a8b28f532f29f8da1007bae" dependencies = [ - "alloy-json-rpc 0.1.2", + "alloy-json-rpc 0.2.1", "base64 0.22.1", "futures-util", "futures-utils-wasm", @@ -837,6 +912,7 @@ dependencies = [ "thiserror", "tokio", "tower", + "tracing", "url", ] @@ -855,12 +931,12 @@ dependencies = [ [[package]] name = "alloy-transport-http" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5619c017e1fdaa1db87f9182f4f0ed97c53d674957f4902fba655e972d359c6c" +checksum = "2437d145d80ea1aecde8574d2058cceb8b3c9cba05f6aea8e67907c660d46698" dependencies = [ - "alloy-json-rpc 0.1.2", - "alloy-transport 0.1.2", + "alloy-json-rpc 0.2.1", + "alloy-transport 0.2.1", "reqwest 0.12.5", "serde_json", "tower", @@ -870,13 +946,13 @@ dependencies = [ [[package]] name = "alloy-transport-ipc" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "173cefa110afac7a53cf2e75519327761f2344d305eea2993f3af1b2c1fc1c44" +checksum = "804494366e20468776db4e18f9eb5db7db0fe14f1271eb6dbf155d867233405c" dependencies = [ - "alloy-json-rpc 0.1.2", + "alloy-json-rpc 0.2.1", "alloy-pubsub", - "alloy-transport 0.1.2", + "alloy-transport 0.2.1", "bytes", "futures", "interprocess", @@ -889,15 +965,15 @@ dependencies = [ [[package]] name = "alloy-transport-ws" -version = "0.1.2" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c0aff8af5be5e58856c5cdd1e46db2c67c7ecd3a652d9100b4822c96c899947" +checksum = "af855163e7df008799941aa6dd324a43ef2bf264b08ba4b22d44aad6ced65300" dependencies = [ "alloy-pubsub", - "alloy-transport 0.1.2", + "alloy-transport 0.2.1", "futures", "http 1.1.0", - "rustls 0.23.10", + "rustls 0.23.12", "serde_json", "tokio", "tokio-tungstenite", @@ -907,9 +983,9 @@ dependencies = [ [[package]] name = "amq-protocol" -version = "7.2.0" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051d4d77904272e9be7e292607378dc9900d15b8d314bfd3ed4b82fdd84f125" +checksum = "0f0234884b3641db74d22ccc20fc2594db5f23d7d41ade5c93d7ee33d200960c" dependencies = [ "amq-protocol-tcp", "amq-protocol-types", @@ -921,9 +997,9 @@ dependencies = [ [[package]] name = "amq-protocol-tcp" -version = "7.2.0" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3d51dd36e67d757c9ba80a7b2a2a2a69254c1dbe4d8c631824ec7f5b69f60e" +checksum = "265dca43d9dbb3d5bbb0b3ef1b0cd9044ce3aa5d697d5b66cde974d1f6063f09" dependencies = [ "amq-protocol-uri", "tcp-stream", @@ -932,9 +1008,9 @@ dependencies = [ [[package]] name = "amq-protocol-types" -version = "7.2.0" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0acdd47054ced8b9bc89ee0dbb42ccc8028de48d8658b24de4c255a226c9bfec" +checksum = "c7412353b58923fa012feb9a64ccc0c811747babee2e5a2fd63eb102dc8054c3" dependencies = [ "cookie-factory", "nom", @@ -944,9 +1020,9 @@ dependencies = [ [[package]] name = "amq-protocol-uri" -version = "7.2.0" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17881b7575dab3e71403f28a3e50b71f0d1bd026829abca3c48664522ce0df0" +checksum = "2be91352c805d5704784e079117d5291fd5bf2569add53c914ebce6d1a795d33" dependencies = [ "amq-protocol-types", "percent-encoding", @@ -968,11 +1044,20 @@ dependencies = [ "libc", ] +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", @@ -985,33 +1070,33 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -1024,173 +1109,407 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" +name = "aptos-aggregator" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "aptos-logger", + "aptos-types", + "bcs 0.1.4", + "claims", + "move-binary-format", + "move-core-types", + "move-vm-types", +] [[package]] -name = "ark-ec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +name = "aptos-api-types" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "ark-ff 0.4.2", - "ark-poly", - "ark-serialize 0.4.2", - "ark-std 0.4.0", - "derivative", - "hashbrown 0.13.2", - "itertools 0.10.5", - "num-traits 0.2.19", - "zeroize", + "anyhow", + "aptos-config", + "aptos-crypto", + "aptos-framework", + "aptos-logger", + "aptos-openapi", + "aptos-resource-viewer", + "aptos-storage-interface", + "aptos-types", + "aptos-vm", + "async-trait", + "bcs 0.1.4", + "bytes", + "hex", + "indoc 1.0.9", + "move-binary-format", + "move-core-types", + "once_cell", + "poem", + "poem-openapi", + "poem-openapi-derive", + "serde", + "serde_json", ] [[package]] -name = "ark-ff" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +name = "aptos-bitvec" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "ark-ff-asm 0.3.0", - "ark-ff-macros 0.3.0", - "ark-serialize 0.3.0", - "ark-std 0.3.0", - "derivative", - "num-bigint", - "num-traits 0.2.19", - "paste", - "rustc_version 0.3.3", - "zeroize", + "serde", + "serde_bytes", ] [[package]] -name = "ark-ff" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +name = "aptos-block-executor" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "ark-ff-asm 0.4.2", - "ark-ff-macros 0.4.2", - "ark-serialize 0.4.2", - "ark-std 0.4.0", + "anyhow", + "aptos-aggregator", + "aptos-drop-helper", + "aptos-infallible", + "aptos-logger", + "aptos-metrics-core", + "aptos-mvhashmap", + "aptos-types", + "aptos-vm-logging", + "aptos-vm-types", + "arc-swap", + "bcs 0.1.4", + "bytes", + "claims", + "concurrent-queue", + "crossbeam", + "dashmap", "derivative", - "digest 0.10.7", - "itertools 0.10.5", - "num-bigint", - "num-traits 0.2.19", - "paste", - "rustc_version 0.4.0", - "zeroize", + "fail", + "move-binary-format", + "move-core-types", + "move-vm-types", + "num_cpus", + "once_cell", + "parking_lot 0.12.3", + "rand 0.7.3", + "rayon", + "scopeguard", ] [[package]] -name = "ark-ff-asm" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +name = "aptos-block-partitioner" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "aptos-crypto", + "aptos-logger", + "aptos-metrics-core", + "aptos-types", + "bcs 0.1.4", + "clap 4.5.14", + "dashmap", + "itertools 0.13.0", + "jemallocator", + "move-core-types", + "once_cell", + "rand 0.7.3", + "rayon", + "serde", +] + +[[package]] +name = "aptos-cached-packages" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "quote", - "syn 1.0.109", + "anyhow", + "aptos-framework", + "aptos-package-builder", + "aptos-types", + "bcs 0.1.4", + "move-core-types", + "once_cell", ] [[package]] -name = "ark-ff-asm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +name = "aptos-config" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "quote", - "syn 1.0.109", + "anyhow", + "aptos-crypto", + "aptos-global-constants", + "aptos-logger", + "aptos-secure-storage", + "aptos-short-hex-str", + "aptos-temppath", + "aptos-types", + "arr_macro", + "bcs 0.1.4", + "byteorder", + "cfg-if", + "get_if_addrs", + "maplit", + "num_cpus", + "poem-openapi", + "rand 0.7.3", + "serde", + "serde_json", + "serde_merge", + "serde_yaml 0.8.26", + "thiserror", + "url", ] [[package]] -name = "ark-ff-macros" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +name = "aptos-crypto" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "num-bigint", - "num-traits 0.2.19", - "quote", - "syn 1.0.109", + "aes-gcm", + "anyhow", + "aptos-crypto-derive", + "ark-bn254", + "ark-ec", + "ark-ff 0.4.2", + "ark-groth16", + "ark-std 0.4.0", + "base64 0.13.1", + "bcs 0.1.4", + "blst", + "bulletproofs", + "bytes", + "curve25519-dalek", + "curve25519-dalek-ng", + "digest 0.9.0", + "ed25519-dalek", + "ff 0.13.0", + "hex", + "hkdf 0.10.0", + "libsecp256k1", + "merlin", + "more-asserts", + "neptune", + "num-bigint 0.3.3", + "num-integer", + "once_cell", + "p256 0.13.2", + "poseidon-ark", + "rand 0.7.3", + "rand_core 0.5.1", + "ring 0.16.20", + "serde", + "serde-name", + "serde_bytes", + "sha2 0.10.8", + "sha2 0.9.9", + "sha3 0.9.1", + "signature 2.2.0", + "static_assertions", + "thiserror", + "tiny-keccak", + "typenum", + "x25519-dalek", ] [[package]] -name = "ark-ff-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +name = "aptos-crypto-derive" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "num-bigint", - "num-traits 0.2.19", "proc-macro2", "quote", "syn 1.0.109", ] [[package]] -name = "ark-poly" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +name = "aptos-dkg" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "ark-ff 0.4.2", - "ark-serialize 0.4.2", - "ark-std 0.4.0", - "derivative", - "hashbrown 0.13.2", + "anyhow", + "aptos-crypto", + "aptos-crypto-derive", + "aptos-runtimes", + "bcs 0.1.4", + "blst", + "blstrs", + "criterion", + "ff 0.13.0", + "group 0.13.0", + "hex", + "merlin", + "more-asserts", + "num-bigint 0.3.3", + "num-integer", + "num-traits 0.2.19", + "once_cell", + "pairing", + "rand 0.7.3", + "rand_core 0.5.1", + "rayon", + "serde", + "serde_bytes", + "sha3 0.9.1", + "static_assertions", ] [[package]] -name = "ark-secp256k1" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c02e954eaeb4ddb29613fee20840c2bbc85ca4396d53e33837e11905363c5f2" +name = "aptos-drop-helper" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "ark-ec", - "ark-ff 0.4.2", - "ark-std 0.4.0", + "aptos-infallible", + "aptos-metrics-core", + "once_cell", + "threadpool", ] [[package]] -name = "ark-secp256r1" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3975a01b0a6e3eae0f72ec7ca8598a6620fc72fa5981f6f5cca33b7cd788f633" +name = "aptos-experimental-runtimes" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "aptos-runtimes", + "core_affinity", + "libc", + "num_cpus", + "once_cell", + "rayon", +] + +[[package]] +name = "aptos-framework" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ + "anyhow", + "aptos-aggregator", + "aptos-crypto", + "aptos-gas-algebra", + "aptos-gas-schedule", + "aptos-move-stdlib", + "aptos-native-interface", + "aptos-sdk-builder", + "aptos-types", + "aptos-vm-types", + "ark-bls12-381", + "ark-bn254", "ark-ec", "ark-ff 0.4.2", + "ark-serialize 0.4.2", "ark-std 0.4.0", + "bcs 0.1.4", + "better_any", + "blake2-rfc", + "bulletproofs", + "byteorder", + "clap 4.5.14", + "codespan-reporting", + "curve25519-dalek-ng", + "either", + "flate2", + "hex", + "itertools 0.13.0", + "libsecp256k1", + "log", + "lru 0.7.8", + "merlin", + "move-binary-format", + "move-cli", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-docgen", + "move-model", + "move-package", + "move-prover", + "move-prover-boogie-backend", + "move-prover-bytecode-pipeline", + "move-stackless-bytecode", + "move-vm-runtime", + "move-vm-types", + "num-traits 0.2.19", + "once_cell", + "rand 0.7.3", + "rand_core 0.5.1", + "ripemd", + "serde", + "serde_bytes", + "sha2 0.10.8", + "sha2 0.9.9", + "sha3 0.9.1", + "siphasher", + "smallvec", + "tempfile", + "thiserror", + "tiny-keccak", ] [[package]] -name = "ark-serialize" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +name = "aptos-gas-algebra" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "ark-std 0.3.0", - "digest 0.9.0", + "either", + "move-core-types", ] [[package]] -name = "ark-serialize" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +name = "aptos-gas-meter" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "ark-serialize-derive", - "ark-std 0.4.0", - "digest 0.10.7", - "num-bigint", + "aptos-gas-algebra", + "aptos-gas-schedule", + "aptos-logger", + "aptos-types", + "aptos-vm-types", + "move-binary-format", + "move-core-types", + "move-vm-types", ] [[package]] -name = "ark-serialize-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +name = "aptos-gas-schedule" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "aptos-gas-algebra", + "aptos-global-constants", + "move-core-types", + "move-vm-types", + "paste", + "rand 0.7.3", +] + +[[package]] +name = "aptos-global-constants" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" + +[[package]] +name = "aptos-infallible" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" + +[[package]] +name = "aptos-ledger" +version = "0.2.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "aptos-crypto", + "aptos-types", + "hex", + "ledger-apdu", + "ledger-transport-hid", + "thiserror", +] + +[[package]] +name = "aptos-log-derive" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ "proc-macro2", "quote", @@ -1198,4789 +1517,7551 @@ dependencies = [ ] [[package]] -name = "ark-std" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +name = "aptos-logger" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "num-traits 0.2.19", - "rand", + "aptos-infallible", + "aptos-log-derive", + "aptos-node-identity", + "backtrace", + "chrono", + "erased-serde", + "futures", + "hostname", + "once_cell", + "prometheus", + "serde", + "serde_json", + "strum 0.24.1", + "strum_macros 0.24.3", + "tokio", + "tracing", + "tracing-subscriber 0.3.18", ] [[package]] -name = "ark-std" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +name = "aptos-memory-usage-tracker" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "num-traits 0.2.19", - "rand", + "aptos-gas-algebra", + "aptos-gas-meter", + "aptos-types", + "move-binary-format", + "move-core-types", + "move-vm-types", ] [[package]] -name = "arrayvec" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +name = "aptos-metrics-core" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "anyhow", + "prometheus", +] [[package]] -name = "ascii-canvas" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" -dependencies = [ - "term", +name = "aptos-move-stdlib" +version = "0.1.1" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "aptos-gas-schedule", + "aptos-native-interface", + "move-core-types", + "move-vm-runtime", + "move-vm-types", + "sha2 0.9.9", + "sha3 0.9.1", + "smallvec", ] [[package]] -name = "asn1-rs" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ad1373757efa0f70ec53939aabc7152e1591cb485208052993070ac8d2429d" +name = "aptos-mvhashmap" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "asn1-rs-derive", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits 0.2.19", - "rusticata-macros", - "thiserror", - "time", + "anyhow", + "aptos-aggregator", + "aptos-crypto", + "aptos-types", + "aptos-vm-types", + "bytes", + "claims", + "crossbeam", + "dashmap", + "derivative", + "move-binary-format", + "move-core-types", + "move-vm-types", + "serde", ] [[package]] -name = "asn1-rs-derive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7378575ff571966e99a744addeff0bff98b8ada0dedf1956d59e634db95eaac1" +name = "aptos-native-interface" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", - "synstructure", + "aptos-gas-algebra", + "aptos-gas-schedule", + "aptos-types", + "bcs 0.1.4", + "bytes", + "move-binary-format", + "move-core-types", + "move-vm-runtime", + "move-vm-types", + "smallvec", ] [[package]] -name = "asn1-rs-impl" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +name = "aptos-node-identity" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", + "anyhow", + "aptos-types", + "claims", + "once_cell", ] [[package]] -name = "assert-json-diff" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" +name = "aptos-openapi" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ + "percent-encoding", + "poem", + "poem-openapi", "serde", "serde_json", ] [[package]] -name = "assert_matches" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" - -[[package]] -name = "async-attributes" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" +name = "aptos-package-builder" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "quote", - "syn 1.0.109", + "anyhow", + "aptos-framework", + "itertools 0.13.0", + "move-command-line-common", + "move-package", + "tempfile", ] [[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +name = "aptos-protos" +version = "1.3.1" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", "futures-core", + "pbjson", + "prost", + "serde", + "tonic 0.11.0", ] [[package]] -name = "async-channel" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +name = "aptos-resource-viewer" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", + "anyhow", + "aptos-types", + "aptos-vm", + "move-binary-format", + "move-bytecode-utils", + "move-core-types", + "move-resource-viewer", ] [[package]] -name = "async-executor" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8828ec6e544c02b0d6691d21ed9f9218d0384a82542855073c2a3f58304aaf0" +name = "aptos-rest-client" +version = "0.0.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "async-task", - "concurrent-queue", - "fastrand 2.1.0", - "futures-lite 2.3.0", - "slab", + "anyhow", + "aptos-api-types", + "aptos-crypto", + "aptos-infallible", + "aptos-logger", + "aptos-types", + "bcs 0.1.4", + "bytes", + "hex", + "move-core-types", + "reqwest 0.11.27", + "serde", + "serde_json", + "thiserror", + "tokio", + "url", ] [[package]] -name = "async-global-executor" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +name = "aptos-runtimes" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "async-channel 2.3.1", - "async-executor", - "async-io 2.3.3", - "async-lock 3.4.0", - "blocking", - "futures-lite 2.3.0", + "rayon", + "tokio", +] + +[[package]] +name = "aptos-scratchpad" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "aptos-crypto", + "aptos-drop-helper", + "aptos-experimental-runtimes", + "aptos-infallible", + "aptos-metrics-core", + "aptos-types", + "bitvec 1.0.1", + "itertools 0.13.0", "once_cell", + "rayon", + "thiserror", ] [[package]] -name = "async-global-executor-trait" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33dd14c5a15affd2abcff50d84efd4009ada28a860f01c14f9d654f3e81b3f75" +name = "aptos-sdk" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "async-global-executor", - "async-trait", - "executor-trait", + "anyhow", + "aptos-cached-packages", + "aptos-crypto", + "aptos-global-constants", + "aptos-ledger", + "aptos-rest-client", + "aptos-types", + "base64 0.13.1", + "bcs 0.1.4", + "ed25519-dalek-bip32", + "hex", + "move-core-types", + "rand_core 0.5.1", + "serde_json", + "tiny-bip39", ] [[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +name = "aptos-sdk-builder" +version = "0.2.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "async-lock 2.8.0", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite 1.13.0", - "log", - "parking", - "polling 2.8.0", - "rustix 0.37.27", - "slab", - "socket2 0.4.10", - "waker-fn", + "anyhow", + "aptos-types", + "bcs 0.1.4", + "clap 4.5.14", + "heck 0.4.1", + "move-core-types", + "once_cell", + "serde-generate", + "serde-reflection", + "serde_yaml 0.8.26", + "textwrap 0.15.2", ] [[package]] -name = "async-io" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" +name = "aptos-secure-net" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "async-lock 3.4.0", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite 2.3.0", - "parking", - "polling 3.7.2", - "rustix 0.38.34", - "slab", - "tracing", - "windows-sys 0.52.0", + "aptos-logger", + "aptos-metrics-core", + "aptos-protos", + "bcs 0.1.4", + "crossbeam-channel", + "once_cell", + "serde", + "thiserror", + "tokio", + "tonic 0.11.0", + "tonic-reflection", ] [[package]] -name = "async-lock" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +name = "aptos-secure-storage" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "aptos-crypto", + "aptos-infallible", + "aptos-logger", + "aptos-temppath", + "aptos-time-service", + "aptos-vault-client", + "base64 0.13.1", + "bcs 0.1.4", + "chrono", + "enum_dispatch", + "rand 0.7.3", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "aptos-settlement-client" +version = "0.1.0" dependencies = [ - "event-listener 2.5.3", + "alloy 0.2.1", + "anyhow", + "aptos-sdk", + "aptos-testcontainer", + "async-trait", + "color-eyre", + "dotenvy", + "hex", + "log", + "mockall 0.13.0", + "once_cell", + "settlement-client-interface", + "test-log", + "tokio", + "utils", ] [[package]] -name = "async-lock" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +name = "aptos-short-hex-str" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "event-listener 5.3.1", - "event-listener-strategy", - "pin-project-lite", + "mirai-annotations", + "serde", + "static_assertions", + "thiserror", ] [[package]] -name = "async-object-pool" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeb901c30ebc2fc4ab46395bbfbdba9542c16559d853645d75190c3056caf3bc" +name = "aptos-speculative-state-helper" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "async-std", + "anyhow", + "aptos-infallible", + "crossbeam", + "rayon", ] [[package]] -name = "async-process" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +name = "aptos-storage-interface" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "async-io 1.13.0", - "async-lock 2.8.0", - "async-signal", - "blocking", - "cfg-if", - "event-listener 3.1.0", - "futures-lite 1.13.0", - "rustix 0.38.34", - "windows-sys 0.48.0", + "anyhow", + "aptos-crypto", + "aptos-experimental-runtimes", + "aptos-logger", + "aptos-metrics-core", + "aptos-scratchpad", + "aptos-secure-net", + "aptos-types", + "aptos-vm", + "bcs 0.1.4", + "crossbeam-channel", + "dashmap", + "once_cell", + "parking_lot 0.12.3", + "proptest", + "proptest-derive", + "rayon", + "serde", + "thiserror", + "threadpool", ] [[package]] -name = "async-reactor-trait" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6012d170ad00de56c9ee354aef2e358359deb1ec504254e0e5a3774771de0e" +name = "aptos-table-natives" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "async-io 1.13.0", - "async-trait", - "futures-core", - "reactor-trait", + "aptos-gas-schedule", + "aptos-native-interface", + "better_any", + "bytes", + "move-binary-format", + "move-core-types", + "move-table-extension", + "move-vm-runtime", + "move-vm-types", + "sha3 0.9.1", + "smallvec", ] [[package]] -name = "async-signal" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794f185324c2f00e771cd9f1ae8b5ac68be2ca7abb129a87afd6e86d228bc54d" +name = "aptos-temppath" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "async-io 2.3.3", - "async-lock 3.4.0", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix 0.38.34", - "signal-hook-registry", - "slab", - "windows-sys 0.52.0", + "hex", + "rand 0.7.3", ] [[package]] -name = "async-std" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" +name = "aptos-testcontainer" +version = "0.1.0" +source = "git+https://github.com/sota-zk-labs/aptos-testcontainer?branch=master#ba2cfc2a0656e11204b40fe29f7c6b781ee7ab45" dependencies = [ - "async-attributes", - "async-channel 1.9.0", - "async-global-executor", - "async-io 1.13.0", - "async-lock 2.8.0", - "async-process", - "crossbeam-utils", - "futures-channel", - "futures-core", - "futures-io", - "futures-lite 1.13.0", - "gloo-timers", - "kv-log-macro", - "log", - "memchr", - "once_cell", - "pin-project-lite", - "pin-utils", - "slab", - "wasm-bindgen-futures", + "anyhow", + "base64 0.22.1", + "rand 0.8.5", + "regex", + "testcontainers", + "thiserror", + "tokio", + "walkdir", ] [[package]] -name = "async-stream" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +name = "aptos-time-service" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", + "aptos-infallible", + "enum_dispatch", + "futures", + "pin-project", + "thiserror", + "tokio", ] [[package]] -name = "async-stream-impl" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +name = "aptos-types" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", + "anyhow", + "aptos-bitvec", + "aptos-crypto", + "aptos-crypto-derive", + "aptos-dkg", + "aptos-experimental-runtimes", + "aptos-infallible", + "ark-bn254", + "ark-ff 0.4.2", + "ark-groth16", + "ark-serialize 0.4.2", + "arr_macro", + "base64 0.13.1", + "bcs 0.1.4", + "bytes", + "fixed", + "fxhash", + "hashbrown 0.14.5", + "hex", + "itertools 0.13.0", + "jsonwebtoken 8.3.0", + "move-binary-format", + "move-bytecode-verifier", + "move-core-types", + "move-table-extension", + "move-vm-runtime", + "move-vm-types", + "num-bigint 0.3.3", + "num-derive", + "num-traits 0.2.19", + "once_cell", + "passkey-types", + "poem-openapi", + "poem-openapi-derive", + "quick_cache", + "rand 0.7.3", + "rayon", + "ring 0.16.20", + "rsa", + "serde", + "serde-big-array", + "serde_bytes", + "serde_json", + "serde_with 3.9.0", + "serde_yaml 0.8.26", + "strum 0.24.1", + "strum_macros 0.24.3", + "thiserror", ] [[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" +name = "aptos-utils" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" [[package]] -name = "async-trait" -version = "0.1.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +name = "aptos-vault-client" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", + "aptos-crypto", + "base64 0.13.1", + "chrono", + "native-tls", + "once_cell", + "serde", + "serde_json", + "thiserror", + "ureq", ] [[package]] -name = "async_io_stream" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +name = "aptos-vm" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ + "anyhow", + "aptos-aggregator", + "aptos-block-executor", + "aptos-block-partitioner", + "aptos-crypto", + "aptos-crypto-derive", + "aptos-experimental-runtimes", + "aptos-framework", + "aptos-gas-algebra", + "aptos-gas-meter", + "aptos-gas-schedule", + "aptos-infallible", + "aptos-logger", + "aptos-memory-usage-tracker", + "aptos-metrics-core", + "aptos-move-stdlib", + "aptos-mvhashmap", + "aptos-native-interface", + "aptos-table-natives", + "aptos-types", + "aptos-utils", + "aptos-vm-logging", + "aptos-vm-types", + "ark-bn254", + "ark-groth16", + "bcs 0.1.4", + "bytes", + "claims", + "crossbeam-channel", + "derive_more", + "fail", "futures", - "pharos", - "rustc_version 0.4.0", + "hex", + "move-binary-format", + "move-core-types", + "move-vm-runtime", + "move-vm-types", + "num_cpus", + "once_cell", + "ouroboros", + "rand 0.7.3", + "rayon", + "serde", ] [[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +name = "aptos-vm-logging" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "aptos-crypto", + "aptos-logger", + "aptos-metrics-core", + "aptos-speculative-state-helper", + "aptos-types", + "arc-swap", + "once_cell", + "serde", +] [[package]] -name = "auto_impl" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +name = "aptos-vm-types" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", + "anyhow", + "aptos-aggregator", + "aptos-gas-algebra", + "aptos-gas-schedule", + "aptos-types", + "bcs 0.1.4", + "bytes", + "claims", + "either", + "move-binary-format", + "move-core-types", + "move-vm-runtime", + "move-vm-types", + "rand 0.7.3", + "serde", ] [[package]] -name = "autocfg" -version = "1.3.0" +name = "arc-swap" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" [[package]] -name = "aws-config" -version = "1.5.1" +name = "ark-bls12-381" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ac9889352d632214df943e26740c46a0f3da6e329fbd28164fe7ae1b061da7b" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" dependencies = [ - "aws-credential-types", + "ark-ec", + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-crypto-primitives" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3a13b34da09176a8baba701233fdffbaa7c1b1192ce031a3da4e55ce1f1a56" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-relations", + "ark-serialize 0.4.2", + "ark-snark", + "ark-std 0.4.0", + "blake2", + "derivative", + "digest 0.10.7", + "rayon", + "sha2 0.10.8", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff 0.4.2", + "ark-poly", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits 0.2.19", + "rayon", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.6", + "num-traits 0.2.19", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint 0.4.6", + "num-traits 0.2.19", + "paste", + "rayon", + "rustc_version 0.4.0", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint 0.4.6", + "num-traits 0.2.19", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint 0.4.6", + "num-traits 0.2.19", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-groth16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ceafa83848c3e390f1cbf124bc3193b3e639b3f02009e0e290809a501b95fc" +dependencies = [ + "ark-crypto-primitives", + "ark-ec", + "ark-ff 0.4.2", + "ark-poly", + "ark-relations", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "rayon", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "hashbrown 0.13.2", + "rayon", +] + +[[package]] +name = "ark-relations" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00796b6efc05a3f48225e59cb6a2cda78881e7c390872d5786aaf112f31fb4f0" +dependencies = [ + "ark-ff 0.4.2", + "ark-std 0.4.0", + "tracing", + "tracing-subscriber 0.2.25", +] + +[[package]] +name = "ark-secp256k1" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c02e954eaeb4ddb29613fee20840c2bbc85ca4396d53e33837e11905363c5f2" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-secp256r1" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3975a01b0a6e3eae0f72ec7ca8598a6620fc72fa5981f6f5cca33b7cd788f633" +dependencies = [ + "ark-ec", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint 0.4.6", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-snark" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d3cc6833a335bb8a600241889ead68ee89a3cf8448081fb7694c0fe503da63" +dependencies = [ + "ark-ff 0.4.2", + "ark-relations", + "ark-serialize 0.4.2", + "ark-std 0.4.0", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits 0.2.19", + "rand 0.8.5", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits 0.2.19", + "rand 0.8.5", + "rayon", +] + +[[package]] +name = "arr_macro" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c49336e062fa2ae8aca17a2f99c34d9c1a5d30827e8aff1cb4c294f253afe992" +dependencies = [ + "arr_macro_impl", + "proc-macro-hack", + "proc-macro-nested", +] + +[[package]] +name = "arr_macro_impl" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c6368f9ae5c6ec403ca910327ae0c9437b0a85255b6950c90d497e6177f6e5e" +dependencies = [ + "proc-macro-hack", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "arrayref" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" + +[[package]] +name = "arrayvec" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" +dependencies = [ + "nodrop", +] + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "ascii-canvas" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" +dependencies = [ + "term", +] + +[[package]] +name = "asn1-rs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +dependencies = [ + "asn1-rs-derive", + "asn1-rs-impl", + "displaydoc", + "nom", + "num-traits 0.2.19", + "rusticata-macros", + "thiserror", + "time", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", + "synstructure", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "assert-json-diff" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "assert_matches" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" + +[[package]] +name = "async-attributes" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.1.0", + "futures-lite 2.3.0", + "slab", +] + +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-io 2.3.3", + "async-lock 3.4.0", + "blocking", + "futures-lite 2.3.0", + "once_cell", +] + +[[package]] +name = "async-global-executor-trait" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33dd14c5a15affd2abcff50d84efd4009ada28a860f01c14f9d654f3e81b3f75" +dependencies = [ + "async-global-executor", + "async-trait", + "executor-trait", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2 0.4.10", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" +dependencies = [ + "async-lock 3.4.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.3.0", + "parking", + "polling 3.7.2", + "rustix 0.38.34", + "slab", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-object-pool" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aeb901c30ebc2fc4ab46395bbfbdba9542c16559d853645d75190c3056caf3bc" +dependencies = [ + "async-std", +] + +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", + "blocking", + "cfg-if", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.34", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-reactor-trait" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6012d170ad00de56c9ee354aef2e358359deb1ec504254e0e5a3774771de0e" +dependencies = [ + "async-io 1.13.0", + "async-trait", + "futures-core", + "reactor-trait", +] + +[[package]] +name = "async-signal" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfb3634b73397aa844481f814fad23bbf07fdb0eabec10f2eb95e58944b1ec32" +dependencies = [ + "async-io 2.3.3", + "async-lock 3.4.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.34", + "signal-hook-registry", + "slab", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-std" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" +dependencies = [ + "async-attributes", + "async-channel 1.9.0", + "async-global-executor", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-process", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite 1.13.0", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + +[[package]] +name = "async-stream" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "pharos", + "rustc_version 0.4.0", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "auto_impl" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "aws-config" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caf6cfe2881cb1fcbba9ae946fb9a6480d3b7a714ca84c74925014a89ef3387a" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-sdk-sso", + "aws-sdk-ssooidc", + "aws-sdk-sts", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand 2.1.0", + "hex", + "http 0.2.12", + "hyper 0.14.30", + "ring 0.17.8", + "time", + "tokio", + "tracing", + "url", + "zeroize", +] + +[[package]] +name = "aws-credential-types" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16838e6c9e12125face1c1eff1343c75e3ff540de98ff7ebd61874a89bcfeb9" +dependencies = [ + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "zeroize", +] + +[[package]] +name = "aws-lc-rs" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae74d9bd0a7530e8afd1770739ad34b36838829d6ad61818f9230f683f5ad77" +dependencies = [ + "aws-lc-sys", + "mirai-annotations", + "paste", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0e249228c6ad2d240c2dc94b714d711629d52bad946075d8e9b2f5391f0703" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", + "libc", + "paste", +] + +[[package]] +name = "aws-runtime" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87c5f920ffd1e0526ec9e70e50bf444db50b204395a0fa7016bbf9e31ea1698f" +dependencies = [ + "aws-credential-types", + "aws-sigv4", + "aws-smithy-async", + "aws-smithy-eventstream", + "aws-smithy-http", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand 2.1.0", + "http 0.2.12", + "http-body 0.4.6", + "percent-encoding", + "pin-project-lite", + "tracing", + "uuid 1.10.0", +] + +[[package]] +name = "aws-sdk-s3" +version = "1.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "558bbcec8db82a1a8af1610afcb3b10d00652d25ad366a0558eecdff2400a1d1" +dependencies = [ + "ahash 0.8.11", + "aws-credential-types", "aws-runtime", - "aws-sdk-sso", - "aws-sdk-ssooidc", - "aws-sdk-sts", + "aws-sigv4", + "aws-smithy-async", + "aws-smithy-checksums", + "aws-smithy-eventstream", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "bytes", + "fastrand 2.1.0", + "hex", + "hmac 0.12.1", + "http 0.2.12", + "http-body 0.4.6", + "lru 0.12.4", + "once_cell", + "percent-encoding", + "regex-lite", + "sha2 0.10.8", + "tracing", + "url", +] + +[[package]] +name = "aws-sdk-sqs" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3587fbaf540d65337c2356ebf3f78fba160025b3d69634175f1ea3a7895738e9" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "http 0.2.12", + "once_cell", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sdk-sso" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6acca681c53374bf1d9af0e317a41d12a44902ca0f2d1e10e5cb5bb98ed74f35" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "http 0.2.12", + "once_cell", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sdk-ssooidc" +version = "1.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b79c6bdfe612503a526059c05c9ccccbf6bd9530b003673cb863e547fd7c0c9a" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "http 0.2.12", + "once_cell", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sdk-sts" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e6ecdb2bd756f3b2383e6f0588dc10a4e65f5d551e70a56e0bfe0c884673ce" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-query", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "http 0.2.12", + "once_cell", + "regex-lite", + "tracing", +] + +[[package]] +name = "aws-sigv4" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5df1b0fa6be58efe9d4ccc257df0a53b89cd8909e86591a13ca54817c87517be" +dependencies = [ + "aws-credential-types", + "aws-smithy-eventstream", + "aws-smithy-http", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "crypto-bigint 0.5.5", + "form_urlencoded", + "hex", + "hmac 0.12.1", + "http 0.2.12", + "http 1.1.0", + "once_cell", + "p256 0.11.1", + "percent-encoding", + "ring 0.17.8", + "sha2 0.10.8", + "subtle", + "time", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-smithy-async" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62220bc6e97f946ddd51b5f1361f78996e704677afc518a4ff66b7a72ea1378c" +dependencies = [ + "futures-util", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "aws-smithy-checksums" +version = "0.60.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598b1689d001c4d4dc3cb386adb07d37786783aee3ac4b324bcadac116bf3d23" +dependencies = [ + "aws-smithy-http", + "aws-smithy-types", + "bytes", + "crc32c", + "crc32fast", + "hex", + "http 0.2.12", + "http-body 0.4.6", + "md-5", + "pin-project-lite", + "sha1", + "sha2 0.10.8", + "tracing", +] + +[[package]] +name = "aws-smithy-eventstream" +version = "0.60.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6363078f927f612b970edf9d1903ef5cef9a64d1e8423525ebb1f0a1633c858" +dependencies = [ + "aws-smithy-types", + "bytes", + "crc32fast", +] + +[[package]] +name = "aws-smithy-http" +version = "0.60.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9cd0ae3d97daa0a2bf377a4d8e8e1362cae590c4a1aad0d40058ebca18eb91e" +dependencies = [ + "aws-smithy-eventstream", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http-body 0.4.6", + "once_cell", + "percent-encoding", + "pin-project-lite", + "pin-utils", + "tracing", +] + +[[package]] +name = "aws-smithy-json" +version = "0.60.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4683df9469ef09468dad3473d129960119a0d3593617542b7d52086c8486f2d6" +dependencies = [ + "aws-smithy-types", +] + +[[package]] +name = "aws-smithy-query" +version = "0.60.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2fbd61ceb3fe8a1cb7352e42689cec5335833cd9f94103a61e98f9bb61c64bb" +dependencies = [ + "aws-smithy-types", + "urlencoding", +] + +[[package]] +name = "aws-smithy-runtime" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce87155eba55e11768b8c1afa607f3e864ae82f03caf63258b37455b0ad02537" +dependencies = [ "aws-smithy-async", "aws-smithy-http", - "aws-smithy-json", - "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", - "aws-types", "bytes", - "fastrand 2.1.0", - "hex", - "http 0.2.12", - "hyper 0.14.29", - "ring", - "time", + "fastrand 2.1.0", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "http-body 1.0.1", + "httparse", + "hyper 0.14.30", + "hyper-rustls 0.24.2", + "once_cell", + "pin-project-lite", + "pin-utils", + "rustls 0.21.12", + "tokio", + "tracing", +] + +[[package]] +name = "aws-smithy-runtime-api" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e086682a53d3aa241192aa110fa8dfce98f2f5ac2ead0de84d41582c7e8fdb96" +dependencies = [ + "aws-smithy-async", + "aws-smithy-types", + "bytes", + "http 0.2.12", + "http 1.1.0", + "pin-project-lite", + "tokio", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-smithy-types" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe321a6b21f5d8eabd0ade9c55d3d0335f3c3157fc2b3e87f05f34b539e4df5" +dependencies = [ + "base64-simd", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http 1.1.0", + "http-body 0.4.6", + "http-body 1.0.1", + "http-body-util", + "itoa", + "num-integer", + "pin-project-lite", + "pin-utils", + "ryu", + "serde", + "time", + "tokio", + "tokio-util", +] + +[[package]] +name = "aws-smithy-xml" +version = "0.60.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d123fbc2a4adc3c301652ba8e149bf4bc1d1725affb9784eb20c953ace06bf55" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "aws-types" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5221b91b3e441e6675310829fd8984801b772cb1546ef6c0e54dec9f1ac13fef" +dependencies = [ + "aws-credential-types", + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "rustc_version 0.4.0", + "tracing", +] + +[[package]] +name = "axum" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +dependencies = [ + "async-trait", + "axum-core 0.3.4", + "bitflags 1.3.2", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "sync_wrapper 0.1.2", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf" +dependencies = [ + "async-trait", + "axum-core 0.4.3", + "axum-macros", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "tokio", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 0.2.12", + "http-body 0.4.6", + "mime", + "rustversion", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 0.1.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00c055ee2d014ae5981ce1016374e8213682aa14d9bf40e48ab48b5f3ef20eaa" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "az" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" + +[[package]] +name = "backtrace" +version = "0.3.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base-encode" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a17bd29f7c70f32e9387f4d4acfa5ea7b7749ef784fb78cf382df97069337b8c" + +[[package]] +name = "base16ct" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" +dependencies = [ + "outref", + "vsimd", +] + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "basic-cookies" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67bd8fd42c16bdb08688243dc5f0cc117a3ca9efeeaba3a345a18a6159ad96f7" +dependencies = [ + "lalrpop", + "lalrpop-util", + "regex", +] + +[[package]] +name = "bb8" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10cf871f3ff2ce56432fddc2615ac7acc3aa22ca321f8fea800846fbb32f188" +dependencies = [ + "async-trait", + "futures-util", + "parking_lot 0.12.3", + "tokio", +] + +[[package]] +name = "bb8-redis" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4094bc17b933090cfded54315a86db01d67ec999583d4bab894c520f8c097d1f" +dependencies = [ + "async-trait", + "bb8", + "redis", +] + +[[package]] +name = "bcs" +version = "0.1.4" +source = "git+https://github.com/aptos-labs/bcs.git?rev=d31fab9d81748e2594be5cd5cdf845786a30562d#d31fab9d81748e2594be5cd5cdf845786a30562d" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "bcs" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b6598a2f5d564fb7855dc6b06fd1c38cff5a72bd8b863a4d021938497b440a" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "bellpepper" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae286c2cb403324ab644c7cc68dceb25fe52ca9429908a726d7ed272c1edf7b" +dependencies = [ + "bellpepper-core", + "byteorder", + "ff 0.13.0", +] + +[[package]] +name = "bellpepper-core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8abb418570756396d722841b19edfec21d4e89e1cf8990610663040ecb1aea" +dependencies = [ + "blake2s_simd", + "byteorder", + "ff 0.13.0", + "serde", + "thiserror", +] + +[[package]] +name = "better_any" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b359aebd937c17c725e19efcb661200883f04c49c53e7132224dac26da39d4a0" +dependencies = [ + "better_typeid_derive", +] + +[[package]] +name = "better_typeid_derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3deeecb812ca5300b7d3f66f730cc2ebd3511c3d36c691dd79c165d5b19a26e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "bimap" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bincode" +version = "2.0.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f11ea1a0346b94ef188834a65c068a03aec181c94896d481d7a0a40d85b0ce95" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.69.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools 0.12.1", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.72", + "which", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + +[[package]] +name = "bitvec" +version = "0.20.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848" +dependencies = [ + "funty 1.1.0", + "radium 0.6.2", + "tap", + "wyz 0.2.0", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty 2.0.0", + "radium 0.7.0", + "serde", + "tap", + "wyz 0.5.1", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2-rfc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400" +dependencies = [ + "arrayvec 0.4.12", + "constant_time_eq 0.1.5", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "constant_time_eq 0.3.0", +] + +[[package]] +name = "blake2s_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "constant_time_eq 0.3.0", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "block-padding 0.2.1", + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blockifier" +version = "0.5.0" +source = "git+https://github.com/Moonsong-Labs/blockifier?branch=msl/derive-clone#d16e46b73acfb22540325b66fd7a4cefd8dcbaff" +dependencies = [ + "anyhow", + "ark-ec", + "ark-ff 0.4.2", + "ark-secp256k1", + "ark-secp256r1", + "cached", + "cairo-felt", + "cairo-lang-casm", + "cairo-lang-runner", + "cairo-lang-starknet-classes", + "cairo-lang-utils", + "cairo-vm 0.9.3", + "derive_more", + "indexmap 2.3.0", + "itertools 0.10.5", + "keccak", + "log", + "num-bigint 0.4.6", + "num-integer", + "num-traits 0.2.19", + "once_cell", + "phf", + "rstest 0.17.0", + "serde", + "serde_json", + "sha3 0.10.8", + "starknet-crypto 0.5.2", + "starknet_api", + "strum 0.24.1", + "strum_macros 0.24.3", + "thiserror", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel 2.3.1", + "async-task", + "futures-io", + "futures-lite 2.3.0", + "piper", +] + +[[package]] +name = "blst" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4378725facc195f1a538864863f6de233b500a8862747e7f165078a419d5e874" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + +[[package]] +name = "blstrs" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a8a8ed6fefbeef4a8c7b460e4110e12c5e22a5b7cf32621aae6ad650c4dcf29" +dependencies = [ + "blst", + "byte-slice-cast", + "ff 0.13.0", + "group 0.13.0", + "pairing", + "rand_core 0.6.4", + "serde", + "subtle", +] + +[[package]] +name = "bollard" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a063d51a634c7137ecd9f6390ec78e1c512e84c9ded80198ec7df3339a16a33" +dependencies = [ + "base64 0.22.1", + "bollard-stubs", + "bytes", + "futures-core", + "futures-util", + "hex", + "home", + "http 1.1.0", + "http-body-util", + "hyper 1.4.1", + "hyper-named-pipe", + "hyper-rustls 0.27.2", + "hyper-util", + "hyperlocal", + "log", + "pin-project-lite", + "rustls 0.23.12", + "rustls-native-certs 0.7.1", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "serde", + "serde_derive", + "serde_json", + "serde_repr", + "serde_urlencoded", + "thiserror", + "tokio", + "tokio-util", + "tower-service", + "url", + "winapi 0.3.9", +] + +[[package]] +name = "bollard-stubs" +version = "1.45.0-rc.26.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7c5415e3a6bc6d3e99eff6268e488fd4ee25e7b28c10f08fa6760bd9de16e4" +dependencies = [ + "serde", + "serde_repr", + "serde_with 3.9.0", +] + +[[package]] +name = "bson" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a88e82b9106923b5c4d6edfca9e7db958d4e98a478ec115022e81b9b38e2c8" +dependencies = [ + "ahash 0.8.11", + "base64 0.13.1", + "bitvec 1.0.1", + "hex", + "indexmap 2.3.0", + "js-sys", + "once_cell", + "rand 0.8.5", + "serde", + "serde_bytes", + "serde_json", + "time", + "uuid 1.10.0", +] + +[[package]] +name = "bstr" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "bulletproofs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40e698f1df446cc6246afd823afbe2d121134d089c9102c1dd26d1264991ba32" +dependencies = [ + "byteorder", + "clear_on_drop", + "curve25519-dalek-ng", + "digest 0.9.0", + "merlin", + "rand 0.8.5", + "rand_core 0.6.4", + "serde", + "serde_derive", + "sha3 0.9.1", + "subtle-ng", + "thiserror", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "bytemuck" +version = "1.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +dependencies = [ + "serde", +] + +[[package]] +name = "bytes-utils" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" +dependencies = [ + "bytes", + "either", +] + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "c-kzg" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf100c4cea8f207e883ff91ca886d621d8a166cb04971dfaa9bb8fd99ed95df" +dependencies = [ + "blst", + "cc", + "glob", + "hex", + "libc", + "serde", +] + +[[package]] +name = "c_linked_list" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b" + +[[package]] +name = "cached" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b195e4fbc4b6862bbd065b991a34750399c119797efff72492f28a5864de8700" +dependencies = [ + "async-trait", + "cached_proc_macro", + "cached_proc_macro_types", + "futures", + "hashbrown 0.13.2", + "instant", + "once_cell", + "thiserror", + "tokio", +] + +[[package]] +name = "cached_proc_macro" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b48814962d2fd604c50d2b9433c2a41a0ab567779ee2c02f7fba6eca1221f082" +dependencies = [ + "cached_proc_macro_types", + "darling 0.14.4", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cached_proc_macro_types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" + +[[package]] +name = "cairo-felt" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae932292b9ba497a4e892b56aa4e0c6f329a455180fdbdc132700dfe68d9b153" +dependencies = [ + "lazy_static", + "num-bigint 0.4.6", + "num-integer", + "num-traits 0.2.19", + "serde", +] + +[[package]] +name = "cairo-lang-casm" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6296d5748288d9fb97175d31aff9f68ea3f602456923895e512b078e9a2210a0" +dependencies = [ + "cairo-lang-utils", + "indoc 2.0.5", + "num-bigint 0.4.6", + "num-traits 0.2.19", + "parity-scale-codec 3.6.12", + "serde", +] + +[[package]] +name = "cairo-lang-compiler" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7be5083c3328dad2248a94f0a24b3520c588e7d3bd5891770e4c91d3facade3" +dependencies = [ + "anyhow", + "cairo-lang-defs", + "cairo-lang-diagnostics", + "cairo-lang-filesystem", + "cairo-lang-lowering", + "cairo-lang-parser", + "cairo-lang-project", + "cairo-lang-semantic", + "cairo-lang-sierra", + "cairo-lang-sierra-generator", + "cairo-lang-syntax", + "cairo-lang-utils", + "salsa", + "smol_str", + "thiserror", +] + +[[package]] +name = "cairo-lang-debug" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a3cbf67fd766cb7ed48b72e6abf7041857518c9b9fd42475a60c138671c6603" +dependencies = [ + "cairo-lang-utils", +] + +[[package]] +name = "cairo-lang-defs" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b284e41dfc158dfbdc02612dbfdb27a55547d23063bdc53105eeec41d8df006" +dependencies = [ + "cairo-lang-debug", + "cairo-lang-diagnostics", + "cairo-lang-filesystem", + "cairo-lang-parser", + "cairo-lang-syntax", + "cairo-lang-utils", + "itertools 0.11.0", + "salsa", + "smol_str", +] + +[[package]] +name = "cairo-lang-diagnostics" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6314b24901af8be75cd0e1363e3ff1a8020066372501f4cfc9161726b06ec2a" +dependencies = [ + "cairo-lang-debug", + "cairo-lang-filesystem", + "cairo-lang-utils", + "itertools 0.11.0", +] + +[[package]] +name = "cairo-lang-eq-solver" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f95f5c8f7ea75580d164b5304251022e3d47f43fc1c778a01381b55ca9f268c" +dependencies = [ + "cairo-lang-utils", + "good_lp", +] + +[[package]] +name = "cairo-lang-filesystem" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e58b80f0b413ef1320358fde1a0877fc3fbf740f5cead0de3e947a1bc3bfd4" +dependencies = [ + "cairo-lang-debug", + "cairo-lang-utils", + "path-clean", + "salsa", + "serde", + "smol_str", +] + +[[package]] +name = "cairo-lang-lowering" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abe6d604a06ea96c05b3666f2e8fac63cb8709e13667de272912f81db004a16b" +dependencies = [ + "cairo-lang-debug", + "cairo-lang-defs", + "cairo-lang-diagnostics", + "cairo-lang-filesystem", + "cairo-lang-parser", + "cairo-lang-proc-macros", + "cairo-lang-semantic", + "cairo-lang-syntax", + "cairo-lang-utils", + "id-arena", + "itertools 0.11.0", + "log", + "num-bigint 0.4.6", + "num-traits 0.2.19", + "once_cell", + "salsa", + "smol_str", +] + +[[package]] +name = "cairo-lang-parser" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaf1c279de47a77422f81b8a98023cd523cf0ae79f7153d60c4cf8b62b8ece2f" +dependencies = [ + "cairo-lang-diagnostics", + "cairo-lang-filesystem", + "cairo-lang-syntax", + "cairo-lang-syntax-codegen", + "cairo-lang-utils", + "colored", + "itertools 0.11.0", + "num-bigint 0.4.6", + "num-traits 0.2.19", + "salsa", + "smol_str", + "unescaper", +] + +[[package]] +name = "cairo-lang-plugins" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1177a07498bdf45cba62f0c727388ff7433072847dbf701c58fa3c3e358154e" +dependencies = [ + "cairo-lang-defs", + "cairo-lang-diagnostics", + "cairo-lang-filesystem", + "cairo-lang-parser", + "cairo-lang-syntax", + "cairo-lang-utils", + "indent", + "indoc 2.0.5", + "itertools 0.11.0", + "salsa", + "smol_str", +] + +[[package]] +name = "cairo-lang-proc-macros" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c90d812ec983c5a8e3173aca3fc55036b9739201c89f30271ee14a4c1189379" +dependencies = [ + "cairo-lang-debug", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "cairo-lang-project" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3985495d7e9dc481e97135d7139cfa098024351fb51d5feef8366b5fbc104807" +dependencies = [ + "cairo-lang-filesystem", + "cairo-lang-utils", + "serde", + "smol_str", + "thiserror", + "toml 0.8.19", +] + +[[package]] +name = "cairo-lang-runner" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc7c5969d107d24dbd7612ab7afec65d25475fe51d4bb708e3c773f2346c92b" +dependencies = [ + "ark-ff 0.4.2", + "ark-secp256k1", + "ark-secp256r1", + "ark-std 0.4.0", + "cairo-felt", + "cairo-lang-casm", + "cairo-lang-lowering", + "cairo-lang-sierra", + "cairo-lang-sierra-ap-change", + "cairo-lang-sierra-generator", + "cairo-lang-sierra-to-casm", + "cairo-lang-sierra-type-size", + "cairo-lang-starknet", + "cairo-lang-utils", + "cairo-vm 0.9.3", + "itertools 0.11.0", + "keccak", + "num-bigint 0.4.6", + "num-integer", + "num-traits 0.2.19", + "smol_str", + "starknet-crypto 0.6.2", + "thiserror", +] + +[[package]] +name = "cairo-lang-semantic" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5cfadbb9ca3479a6b5c02c0a125a5747835ba57a2de9c4e9764f42d85abe059" +dependencies = [ + "cairo-lang-debug", + "cairo-lang-defs", + "cairo-lang-diagnostics", + "cairo-lang-filesystem", + "cairo-lang-parser", + "cairo-lang-plugins", + "cairo-lang-proc-macros", + "cairo-lang-syntax", + "cairo-lang-utils", + "id-arena", + "indoc 2.0.5", + "itertools 0.11.0", + "num-bigint 0.4.6", + "num-traits 0.2.19", + "once_cell", + "salsa", + "smol_str", +] + +[[package]] +name = "cairo-lang-sierra" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74a57492267a5a8891866b6e48cdefa508b5f05931a5f8eaf004b9de15b1ffd6" +dependencies = [ + "anyhow", + "cairo-felt", + "cairo-lang-utils", + "const-fnv1a-hash", + "convert_case 0.6.0", + "derivative", + "itertools 0.11.0", + "lalrpop", + "lalrpop-util", + "num-bigint 0.4.6", + "num-traits 0.2.19", + "regex", + "salsa", + "serde", + "serde_json", + "sha3 0.10.8", + "smol_str", + "thiserror", +] + +[[package]] +name = "cairo-lang-sierra-ap-change" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fdbb4bd95477123653b9200bd4e9dceae95a914f6fe85b2bed83b223e36fb5a" +dependencies = [ + "cairo-lang-eq-solver", + "cairo-lang-sierra", + "cairo-lang-sierra-type-size", + "cairo-lang-utils", + "itertools 0.11.0", + "num-traits 0.2.19", + "thiserror", +] + +[[package]] +name = "cairo-lang-sierra-gas" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "882cb178f1b79aabf70acce1d87b08d569d8a4b0ce8b1d8f538a02cdb36789db" +dependencies = [ + "cairo-lang-eq-solver", + "cairo-lang-sierra", + "cairo-lang-sierra-type-size", + "cairo-lang-utils", + "itertools 0.11.0", + "num-traits 0.2.19", + "thiserror", +] + +[[package]] +name = "cairo-lang-sierra-generator" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d80c9d29e6d3f4ab60e698ebe2de84dcf90570c3dd1cfa7b01bd5c42470331c" +dependencies = [ + "cairo-lang-debug", + "cairo-lang-defs", + "cairo-lang-diagnostics", + "cairo-lang-filesystem", + "cairo-lang-lowering", + "cairo-lang-parser", + "cairo-lang-semantic", + "cairo-lang-sierra", + "cairo-lang-syntax", + "cairo-lang-utils", + "itertools 0.11.0", + "num-traits 0.2.19", + "once_cell", + "salsa", + "smol_str", +] + +[[package]] +name = "cairo-lang-sierra-to-casm" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ac02c90be2630ae861db6af226090da92741020519768332dd2c07e24d94c75" +dependencies = [ + "assert_matches", + "cairo-felt", + "cairo-lang-casm", + "cairo-lang-sierra", + "cairo-lang-sierra-ap-change", + "cairo-lang-sierra-gas", + "cairo-lang-sierra-type-size", + "cairo-lang-utils", + "indoc 2.0.5", + "itertools 0.11.0", + "num-bigint 0.4.6", + "num-traits 0.2.19", + "thiserror", +] + +[[package]] +name = "cairo-lang-sierra-type-size" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d102b10989f9637b1c916dd950cbd1bd8bb1b6a7aaa1a3035390be0683b92d85" +dependencies = [ + "cairo-lang-sierra", + "cairo-lang-utils", +] + +[[package]] +name = "cairo-lang-starknet" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a27921a2bf82d191d28afd570b913341080c8fc25c83bf870dbf1252570b1b41" +dependencies = [ + "anyhow", + "cairo-felt", + "cairo-lang-compiler", + "cairo-lang-defs", + "cairo-lang-diagnostics", + "cairo-lang-filesystem", + "cairo-lang-lowering", + "cairo-lang-plugins", + "cairo-lang-semantic", + "cairo-lang-sierra", + "cairo-lang-sierra-generator", + "cairo-lang-starknet-classes", + "cairo-lang-syntax", + "cairo-lang-utils", + "const_format", + "indent", + "indoc 2.0.5", + "itertools 0.11.0", + "once_cell", + "serde", + "serde_json", + "smol_str", + "thiserror", +] + +[[package]] +name = "cairo-lang-starknet-classes" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8623b076ef3569e4262da5da270a84658b1ff242fe0c9624fbe432e7a937d101" +dependencies = [ + "cairo-felt", + "cairo-lang-casm", + "cairo-lang-sierra", + "cairo-lang-sierra-to-casm", + "cairo-lang-utils", + "convert_case 0.6.0", + "itertools 0.11.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits 0.2.19", + "once_cell", + "serde", + "serde_json", + "sha3 0.10.8", + "smol_str", + "starknet-crypto 0.6.2", + "thiserror", +] + +[[package]] +name = "cairo-lang-syntax" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c62f5bd74e249636e7c48d8b95e6cc0ee991206d4a6cbe5c2624184a828e70b" +dependencies = [ + "cairo-lang-debug", + "cairo-lang-filesystem", + "cairo-lang-utils", + "num-bigint 0.4.6", + "num-traits 0.2.19", + "salsa", + "smol_str", + "unescaper", +] + +[[package]] +name = "cairo-lang-syntax-codegen" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a744747e9ab03b65480265304490f3e29d99e4cb297e39d0e6fdb047c1bc86a7" +dependencies = [ + "genco", + "xshell", +] + +[[package]] +name = "cairo-lang-utils" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6f98e8769412907ceb106c21c70907cc0c87ca0a2a44c82b6229a695a6f9b48" +dependencies = [ + "hashbrown 0.14.5", + "indexmap 2.3.0", + "itertools 0.11.0", + "num-bigint 0.4.6", + "num-traits 0.2.19", + "parity-scale-codec 3.6.12", + "schemars", + "serde", +] + +[[package]] +name = "cairo-type-derive" +version = "0.1.0" +source = "git+https://github.com/keep-starknet-strange/snos?rev=4b4b3cdb614f9a6b736ff1b21a5ea75c87b7d83c#4b4b3cdb614f9a6b736ff1b21a5ea75c87b7d83c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "cairo-vm" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d90d260c5b0c0812f02fcbdc21eb0d5908fcecdca888fb779b54c3967f7f88bf" +dependencies = [ + "anyhow", + "bincode 2.0.0-rc.3", + "bitvec 1.0.1", + "cairo-felt", + "generic-array", + "hashbrown 0.14.5", + "hex", + "keccak", + "lazy_static", + "mimalloc", + "nom", + "num-bigint 0.4.6", + "num-integer", + "num-prime", + "num-traits 0.2.19", + "rand 0.8.5", + "rust_decimal", + "serde", + "serde_json", + "sha2 0.10.8", + "sha3 0.10.8", + "starknet-crypto 0.6.2", + "starknet-curve 0.4.2", + "thiserror-no-std", +] + +[[package]] +name = "cairo-vm" +version = "1.0.0-rc5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e09134ea1e0be6c1fbd330f0945df0512fa70944fd0b3ecc2f74a6008f01e9da" +dependencies = [ + "anyhow", + "ark-ff 0.4.2", + "ark-std 0.4.0", + "bincode 2.0.0-rc.3", + "bitvec 1.0.1", + "cairo-lang-casm", + "cairo-lang-starknet", + "cairo-lang-starknet-classes", + "generic-array", + "hashbrown 0.14.5", + "hex", + "keccak", + "lazy_static", + "nom", + "num-bigint 0.4.6", + "num-integer", + "num-prime", + "num-traits 0.2.19", + "rand 0.8.5", + "rust_decimal", + "serde", + "serde_json", + "sha2 0.10.8", + "sha3 0.10.8", + "starknet-crypto 0.6.2", + "starknet-types-core", + "thiserror-no-std", + "zip", +] + +[[package]] +name = "cassowary" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "castaway" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" + +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher", +] + +[[package]] +name = "cc" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "504bdec147f2cc13c8b57ed9401fd8a147cc66b67ad5cb241394244f2c947549" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits 0.2.19", + "serde", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "chrono-tz" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" +dependencies = [ + "parse-zoneinfo", + "phf", + "phf_codegen", +] + +[[package]] +name = "chunked_transfer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" + +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half 2.4.1", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "claims" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6995bbe186456c36307f8ea36be3eefe42f49d106896414e18efc4fb2f846b5" +dependencies = [ + "autocfg", +] + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap 0.11.0", + "unicode-width", + "vec_map", +] + +[[package]] +name = "clap" +version = "4.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c937d4061031a6d0c8da4b9a4f98a172fc2976dfb1c19213a9cf7d0d3c837e36" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85379ba512b21a328adf887e85f7742d12e96eb31f3ef077df4ffc26b506ffed" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim 0.11.1", +] + +[[package]] +name = "clap_derive" +version = "4.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "clap_lex" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" + +[[package]] +name = "clear_on_drop" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38508a63f4979f0048febc9966fadbd48e5dab31fd0ec6a3f151bbf4a74f7423" +dependencies = [ + "cc", +] + +[[package]] +name = "cmake" +version = "0.1.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +dependencies = [ + "cc", +] + +[[package]] +name = "cms" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b77c319abfd5219629c45c34c89ba945ed3c5e49fcde9d16b6c3885f118a730" +dependencies = [ + "const-oid", + "der 0.7.9", + "spki 0.7.3", + "x509-cert", +] + +[[package]] +name = "codespan" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3362992a0d9f1dd7c3d0e89e0ab2bb540b7a95fea8cd798090e758fda2899b5e" +dependencies = [ + "codespan-reporting", + "serde", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "serde", + "termcolor", + "unicode-width", +] + +[[package]] +name = "color-eyre" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55146f5e46f237f7423d74111267d4597b59b0dad0ffaf7303bce9945d843ad5" +dependencies = [ + "backtrace", + "color-spantrace", + "eyre", + "indenter", + "once_cell", + "owo-colors", + "tracing-error", +] + +[[package]] +name = "color-spantrace" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" +dependencies = [ + "once_cell", + "owo-colors", + "tracing-core", + "tracing-error", +] + +[[package]] +name = "colorchoice" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" + +[[package]] +name = "colored" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +dependencies = [ + "lazy_static", + "windows-sys 0.48.0", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "futures-core", + "memchr", + "pin-project-lite", "tokio", - "tracing", - "url", - "zeroize", + "tokio-util", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", ] [[package]] -name = "aws-credential-types" -version = "1.2.0" +name = "const-fnv1a-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" + +[[package]] +name = "const-hex" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16838e6c9e12125face1c1eff1343c75e3ff540de98ff7ebd61874a89bcfeb9" +checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" dependencies = [ - "aws-smithy-async", - "aws-smithy-runtime-api", - "aws-smithy-types", - "zeroize", + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", ] [[package]] -name = "aws-lc-rs" -version = "1.7.3" +name = "const-oid" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7d844e282b4b56750b2d4e893b2205581ded8709fddd2b6aa5418c150ca877" -dependencies = [ - "aws-lc-sys", - "mirai-annotations", - "paste", - "zeroize", -] +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] -name = "aws-lc-sys" -version = "0.18.0" +name = "const_format" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a2c29203f6bf296d01141cc8bb9dbd5ecd4c27843f2ee0767bcd5985a927da" +checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" dependencies = [ - "bindgen", - "cc", - "cmake", - "dunce", - "fs_extra", - "libc", - "paste", + "const_format_proc_macros", ] [[package]] -name = "aws-runtime" -version = "1.3.1" +name = "const_format_proc_macros" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c5f920ffd1e0526ec9e70e50bf444db50b204395a0fa7016bbf9e31ea1698f" +checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" dependencies = [ - "aws-credential-types", - "aws-sigv4", - "aws-smithy-async", - "aws-smithy-eventstream", - "aws-smithy-http", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-types", - "bytes", - "fastrand 2.1.0", - "http 0.2.12", - "http-body 0.4.6", - "percent-encoding", - "pin-project-lite", - "tracing", - "uuid 1.8.0", + "proc-macro2", + "quote", + "unicode-xid", ] [[package]] -name = "aws-sdk-s3" -version = "1.38.0" +name = "constant_time_eq" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ecec5514e9d9c76c5e9489ca65ab9055ae0b3c49da3a1afd452c57cb68734fb" -dependencies = [ - "ahash 0.8.11", - "aws-credential-types", - "aws-runtime", - "aws-sigv4", - "aws-smithy-async", - "aws-smithy-checksums", - "aws-smithy-eventstream", - "aws-smithy-http", - "aws-smithy-json", - "aws-smithy-runtime", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-smithy-xml", - "aws-types", - "bytes", - "fastrand 2.1.0", - "hex", - "hmac", - "http 0.2.12", - "http-body 0.4.6", - "lru", - "once_cell", - "percent-encoding", - "regex-lite", - "sha2", - "tracing", - "url", -] +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] -name = "aws-sdk-sqs" -version = "1.36.0" +name = "constant_time_eq" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3587fbaf540d65337c2356ebf3f78fba160025b3d69634175f1ea3a7895738e9" -dependencies = [ - "aws-credential-types", - "aws-runtime", - "aws-smithy-async", - "aws-smithy-http", - "aws-smithy-json", - "aws-smithy-runtime", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-types", - "bytes", - "http 0.2.12", - "once_cell", - "regex-lite", - "tracing", -] +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" [[package]] -name = "aws-sdk-sso" -version = "1.29.0" +name = "convert_case" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da75cf91cbb46686a27436d639a720a3a198b148efa76dc2467b7e5374a67fc0" -dependencies = [ - "aws-credential-types", - "aws-runtime", - "aws-smithy-async", - "aws-smithy-http", - "aws-smithy-json", - "aws-smithy-runtime", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-types", - "bytes", - "http 0.2.12", - "once_cell", - "regex-lite", - "tracing", -] +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] -name = "aws-sdk-ssooidc" -version = "1.30.0" +name = "convert_case" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2ec8a6687299685ed0a4a3137c129cdb132b5235bc3aa3443f6cffe468b9ff" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" dependencies = [ - "aws-credential-types", - "aws-runtime", - "aws-smithy-async", - "aws-smithy-http", - "aws-smithy-json", - "aws-smithy-runtime", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-types", - "bytes", - "http 0.2.12", - "once_cell", - "regex-lite", - "tracing", + "unicode-segmentation", ] [[package]] -name = "aws-sdk-sts" -version = "1.29.0" +name = "cookie" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "458f1031e094b1411b59b49b19e4118f069e1fe13a9c5b8888e933daaf7ffdd6" +checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" dependencies = [ - "aws-credential-types", - "aws-runtime", - "aws-smithy-async", - "aws-smithy-http", - "aws-smithy-json", - "aws-smithy-query", - "aws-smithy-runtime", - "aws-smithy-runtime-api", - "aws-smithy-types", - "aws-smithy-xml", - "aws-types", - "http 0.2.12", - "once_cell", - "regex-lite", - "tracing", + "percent-encoding", + "time", + "version_check", ] [[package]] -name = "aws-sigv4" -version = "1.2.3" +name = "cookie" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5df1b0fa6be58efe9d4ccc257df0a53b89cd8909e86591a13ca54817c87517be" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" dependencies = [ - "aws-credential-types", - "aws-smithy-eventstream", - "aws-smithy-http", - "aws-smithy-runtime-api", - "aws-smithy-types", - "bytes", - "crypto-bigint 0.5.5", - "form_urlencoded", - "hex", - "hmac", - "http 0.2.12", - "http 1.1.0", - "once_cell", - "p256", + "aes-gcm", + "base64 0.22.1", + "hkdf 0.12.4", + "hmac 0.12.1", "percent-encoding", - "ring", - "sha2", + "rand 0.8.5", + "sha2 0.10.8", "subtle", "time", - "tracing", - "zeroize", + "version_check", ] [[package]] -name = "aws-smithy-async" -version = "1.2.1" +name = "cookie-factory" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62220bc6e97f946ddd51b5f1361f78996e704677afc518a4ff66b7a72ea1378c" -dependencies = [ - "futures-util", - "pin-project-lite", - "tokio", -] +checksum = "9885fa71e26b8ab7855e2ec7cae6e9b380edff76cd052e07c683a0319d51b3a2" [[package]] -name = "aws-smithy-checksums" -version = "0.60.10" +name = "cookie_store" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b30ea96823b8b25fb6471643a516e1bd475fd5575304e6240aea179f213216" +checksum = "387461abbc748185c3a6e1673d826918b450b87ff22639429c694619a83b6cf6" dependencies = [ - "aws-smithy-http", - "aws-smithy-types", - "bytes", - "crc32c", - "crc32fast", - "hex", - "http 0.2.12", - "http-body 0.4.6", - "md-5", - "pin-project-lite", - "sha1", - "sha2", - "tracing", + "cookie 0.17.0", + "idna 0.3.0", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", ] [[package]] -name = "aws-smithy-eventstream" -version = "0.60.4" +name = "core-foundation" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6363078f927f612b970edf9d1903ef5cef9a64d1e8423525ebb1f0a1633c858" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ - "aws-smithy-types", - "bytes", - "crc32fast", + "core-foundation-sys", + "libc", ] [[package]] -name = "aws-smithy-http" -version = "0.60.9" +name = "core-foundation-sys" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9cd0ae3d97daa0a2bf377a4d8e8e1362cae590c4a1aad0d40058ebca18eb91e" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core_affinity" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622892f5635ce1fc38c8f16dfc938553ed64af482edb5e150bf4caedbfcb2304" dependencies = [ - "aws-smithy-eventstream", - "aws-smithy-runtime-api", - "aws-smithy-types", - "bytes", - "bytes-utils", - "futures-core", - "http 0.2.12", - "http-body 0.4.6", - "once_cell", - "percent-encoding", - "pin-project-lite", - "pin-utils", - "tracing", + "libc", + "num_cpus", + "winapi 0.3.9", ] [[package]] -name = "aws-smithy-json" -version = "0.60.7" +name = "coset" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4683df9469ef09468dad3473d129960119a0d3593617542b7d52086c8486f2d6" +checksum = "f4c8cc80f631f8307b887faca24dcc3abc427cd0367f6eb6188f6e8f5b7ad8fb" dependencies = [ - "aws-smithy-types", + "ciborium", + "ciborium-io", ] [[package]] -name = "aws-smithy-query" -version = "0.60.7" +name = "cpufeatures" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fbd61ceb3fe8a1cb7352e42689cec5335833cd9f94103a61e98f9bb61c64bb" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ - "aws-smithy-types", - "urlencoding", + "libc", ] [[package]] -name = "aws-smithy-runtime" -version = "1.6.2" +name = "crc16" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce87155eba55e11768b8c1afa607f3e864ae82f03caf63258b37455b0ad02537" +checksum = "338089f42c427b86394a5ee60ff321da23a5c89c9d89514c829687b26359fcff" + +[[package]] +name = "crc32c" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a47af21622d091a8f0fb295b88bc886ac74efcc613efc19f5d0b21de5c89e47" dependencies = [ - "aws-smithy-async", - "aws-smithy-http", - "aws-smithy-runtime-api", - "aws-smithy-types", - "bytes", - "fastrand 2.1.0", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "http-body 1.0.0", - "httparse", - "hyper 0.14.29", - "hyper-rustls 0.24.2", - "once_cell", - "pin-project-lite", - "pin-utils", - "rustls 0.21.12", - "tokio", - "tracing", + "rustc_version 0.4.0", ] [[package]] -name = "aws-smithy-runtime-api" -version = "1.7.1" +name = "crc32fast" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30819352ed0a04ecf6a2f3477e344d2d1ba33d43e0f09ad9047c12e0d923616f" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ - "aws-smithy-async", - "aws-smithy-types", - "bytes", - "http 0.2.12", - "http 1.1.0", - "pin-project-lite", - "tokio", - "tracing", - "zeroize", + "cfg-if", ] [[package]] -name = "aws-smithy-types" -version = "1.2.0" +name = "criterion" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe321a6b21f5d8eabd0ade9c55d3d0335f3c3157fc2b3e87f05f34b539e4df5" +checksum = "b01d6de93b2b6c65e17c634a26653a29d107b3c98c607c765bf38d041531cd8f" dependencies = [ - "base64-simd", - "bytes", - "bytes-utils", - "futures-core", - "http 0.2.12", - "http 1.1.0", - "http-body 0.4.6", - "http-body 1.0.0", - "http-body-util", - "itoa", - "num-integer", - "pin-project-lite", - "pin-utils", - "ryu", + "atty", + "cast", + "clap 2.34.0", + "criterion-plot", + "csv", + "itertools 0.10.5", + "lazy_static", + "num-traits 0.2.19", + "oorandom", + "plotters", + "rayon", + "regex", "serde", - "time", - "tokio", - "tokio-util", + "serde_cbor", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", ] [[package]] -name = "aws-smithy-xml" -version = "0.60.8" +name = "criterion-plot" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d123fbc2a4adc3c301652ba8e149bf4bc1d1725affb9784eb20c953ace06bf55" +checksum = "2673cc8207403546f45f5fd319a974b1e6983ad1a3ee7e6041650013be041876" dependencies = [ - "xmlparser", + "cast", + "itertools 0.10.5", ] [[package]] -name = "aws-types" -version = "1.3.3" +name = "crossbeam" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5221b91b3e441e6675310829fd8984801b772cb1546ef6c0e54dec9f1ac13fef" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" dependencies = [ - "aws-credential-types", - "aws-smithy-async", - "aws-smithy-runtime-api", - "aws-smithy-types", - "rustc_version 0.4.0", - "tracing", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", ] [[package]] -name = "axum" -version = "0.6.20" +name = "crossbeam-channel" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ - "async-trait", - "axum-core 0.3.4", - "bitflags 1.3.2", - "bytes", - "futures-util", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.29", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "sync_wrapper 0.1.2", - "tower", - "tower-layer", - "tower-service", + "crossbeam-utils", ] [[package]] -name = "axum" -version = "0.7.5" +name = "crossbeam-deque" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "async-trait", - "axum-core 0.4.3", - "axum-macros", - "bytes", - "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "http-body-util", - "hyper 1.3.1", - "hyper-util", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "sync_wrapper 1.0.1", - "tokio", - "tower", - "tower-layer", - "tower-service", - "tracing", + "crossbeam-epoch", + "crossbeam-utils", ] [[package]] -name = "axum-core" -version = "0.3.4" +name = "crossbeam-epoch" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http 0.2.12", - "http-body 0.4.6", - "mime", - "rustversion", - "tower-layer", - "tower-service", + "crossbeam-utils", ] [[package]] -name = "axum-core" -version = "0.4.3" +name = "crossbeam-queue" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "http-body-util", - "mime", - "pin-project-lite", - "rustversion", - "sync_wrapper 0.1.2", - "tower-layer", - "tower-service", - "tracing", + "crossbeam-utils", ] [[package]] -name = "axum-macros" -version = "0.4.1" +name = "crossbeam-utils" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00c055ee2d014ae5981ce1016374e8213682aa14d9bf40e48ab48b5f3ef20eaa" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.66", + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio 0.8.11", + "parking_lot 0.12.3", + "signal-hook", + "signal-hook-mio", + "winapi 0.3.9", ] [[package]] -name = "backtrace" -version = "0.3.71" +name = "crossterm" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" dependencies = [ - "addr2line", - "cc", - "cfg-if", + "bitflags 1.3.2", + "crossterm_winapi", "libc", - "miniz_oxide", - "object", - "rustc-demangle", + "mio 0.8.11", + "parking_lot 0.12.3", + "signal-hook", + "signal-hook-mio", + "winapi 0.3.9", ] [[package]] -name = "base-encode" -version = "0.3.1" +name = "crossterm_winapi" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17bd29f7c70f32e9387f4d4acfa5ea7b7749ef784fb78cf382df97069337b8c" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi 0.3.9", +] [[package]] -name = "base16ct" -version = "0.1.1" +name = "crunchy" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] -name = "base16ct" -version = "0.2.0" +name = "crypto-bigint" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "typenum", +] [[package]] -name = "base64" -version = "0.13.1" +name = "crypto-mac" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] [[package]] -name = "base64" -version = "0.21.7" +name = "crypto-mac" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "4857fd85a0c34b3c3297875b747c1e02e06b6a0ea32dd892d8192b9ce0813ea6" +dependencies = [ + "generic-array", + "subtle", +] [[package]] -name = "base64" -version = "0.22.1" +name = "csv" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] [[package]] -name = "base64-simd" -version = "0.8.0" +name = "csv-core" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" dependencies = [ - "outref", - "vsimd", + "memchr", ] [[package]] -name = "base64ct" -version = "1.6.0" +name = "ctr" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] [[package]] -name = "basic-cookies" -version = "0.1.5" +name = "curl" +version = "0.4.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67bd8fd42c16bdb08688243dc5f0cc117a3ca9efeeaba3a345a18a6159ad96f7" +checksum = "1e2161dd6eba090ff1594084e95fd67aeccf04382ffea77999ea94ed42ec67b6" dependencies = [ - "lalrpop", - "lalrpop-util", - "regex", + "curl-sys", + "libc", + "openssl-probe", + "openssl-sys", + "schannel", + "socket2 0.5.7", + "windows-sys 0.52.0", ] [[package]] -name = "bb8" -version = "0.8.5" +name = "curl-sys" +version = "0.4.74+curl-8.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10cf871f3ff2ce56432fddc2615ac7acc3aa22ca321f8fea800846fbb32f188" +checksum = "8af10b986114528fcdc4b63b6f5f021b7057618411046a4de2ba0f0149a097bf" dependencies = [ - "async-trait", - "futures-util", - "parking_lot 0.12.3", - "tokio", + "cc", + "libc", + "libnghttp2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", + "windows-sys 0.52.0", ] [[package]] -name = "bb8-redis" -version = "0.14.0" +name = "curve25519-dalek" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4094bc17b933090cfded54315a86db01d67ec999583d4bab894c520f8c097d1f" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" dependencies = [ - "async-trait", - "bb8", - "redis", + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", ] [[package]] -name = "bigdecimal" -version = "0.3.1" +name = "curve25519-dalek-ng" +version = "4.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" dependencies = [ - "num-bigint", - "num-integer", - "num-traits 0.2.19", + "byteorder", + "digest 0.9.0", + "rand_core 0.6.4", "serde", + "subtle-ng", + "zeroize", ] [[package]] -name = "bimap" -version = "0.6.3" +name = "da-client-interface" +version = "0.1.0" +dependencies = [ + "async-trait", + "axum 0.7.5", + "color-eyre", + "mockall 0.13.0", + "starknet", +] + +[[package]] +name = "darling" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core 0.13.4", + "darling_macro 0.13.4", +] [[package]] -name = "bincode" -version = "1.3.3" +name = "darling" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ - "serde", + "darling_core 0.14.4", + "darling_macro 0.14.4", ] [[package]] -name = "bincode" -version = "2.0.0-rc.3" +name = "darling" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f11ea1a0346b94ef188834a65c068a03aec181c94896d481d7a0a40d85b0ce95" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "serde", + "darling_core 0.20.10", + "darling_macro 0.20.10", ] [[package]] -name = "bindgen" -version = "0.69.4" +name = "darling_core" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" dependencies = [ - "bitflags 2.5.0", - "cexpr", - "clang-sys", - "itertools 0.12.1", - "lazy_static", - "lazycell", - "log", - "prettyplease", + "fnv", + "ident_case", "proc-macro2", "quote", - "regex", - "rustc-hash", - "shlex", - "syn 2.0.66", - "which", + "strsim 0.10.0", + "syn 1.0.109", ] [[package]] -name = "bit-set" -version = "0.5.3" +name = "darling_core" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ - "bit-vec", + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", ] [[package]] -name = "bit-vec" -version = "0.6.3" +name = "darling_core" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.72", +] [[package]] -name = "bitflags" -version = "1.3.2" +name = "darling_macro" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core 0.13.4", + "quote", + "syn 1.0.109", +] [[package]] -name = "bitflags" -version = "2.5.0" +name = "darling_macro" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core 0.14.4", + "quote", + "syn 1.0.109", +] [[package]] -name = "bitvec" -version = "1.0.1" +name = "darling_macro" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "funty", - "radium", - "serde", - "tap", - "wyz", + "darling_core 0.20.10", + "quote", + "syn 2.0.72", ] [[package]] -name = "block-buffer" -version = "0.10.4" +name = "dashmap" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ - "generic-array", + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core 0.9.10", ] [[package]] -name = "block-padding" -version = "0.3.3" +name = "data-encoding" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" -dependencies = [ - "generic-array", -] +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] -name = "blockifier" -version = "0.5.0" -source = "git+https://github.com/Moonsong-Labs/blockifier?branch=msl/derive-clone#d16e46b73acfb22540325b66fd7a4cefd8dcbaff" +name = "der" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ - "anyhow", - "ark-ec", - "ark-ff 0.4.2", - "ark-secp256k1", - "ark-secp256r1", - "cached", - "cairo-felt", - "cairo-lang-casm", - "cairo-lang-runner", - "cairo-lang-starknet-classes", - "cairo-lang-utils", - "cairo-vm 0.9.3", - "derive_more", - "indexmap 2.2.6", - "itertools 0.10.5", - "keccak", - "log", - "num-bigint", - "num-integer", - "num-traits 0.2.19", - "once_cell", - "phf", - "rstest 0.17.0", - "serde", - "serde_json", - "sha3", - "starknet-crypto 0.5.2", - "starknet_api", - "strum 0.24.1", - "strum_macros 0.24.3", - "thiserror", + "const-oid", + "zeroize", ] [[package]] -name = "blocking" -version = "1.6.1" +name = "der" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ - "async-channel 2.3.1", - "async-task", - "futures-io", - "futures-lite 2.3.0", - "piper", + "const-oid", + "der_derive", + "flagset", + "pem-rfc7468", + "zeroize", ] [[package]] -name = "blst" -version = "0.3.12" +name = "der-parser" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62dc83a094a71d43eeadd254b1ec2d24cb6a0bb6cadce00df51f0db594711a32" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" dependencies = [ - "cc", - "glob", - "threadpool", - "zeroize", + "asn1-rs", + "displaydoc", + "nom", + "num-bigint 0.4.6", + "num-traits 0.2.19", + "rusticata-macros", ] [[package]] -name = "bollard" -version = "0.16.1" +name = "der_derive" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aed08d3adb6ebe0eff737115056652670ae290f177759aac19c30456135f94c" +checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" dependencies = [ - "base64 0.22.1", - "bollard-stubs", - "bytes", - "futures-core", - "futures-util", - "hex", - "home", - "http 1.1.0", - "http-body-util", - "hyper 1.3.1", - "hyper-named-pipe", - "hyper-rustls 0.26.0", - "hyper-util", - "hyperlocal-next", - "log", - "pin-project-lite", - "rustls 0.22.4", - "rustls-native-certs 0.7.0", - "rustls-pemfile 2.1.2", - "rustls-pki-types", - "serde", - "serde_derive", - "serde_json", - "serde_repr", - "serde_urlencoded", - "thiserror", - "tokio", - "tokio-util", - "tower-service", - "url", - "winapi", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "bollard-stubs" -version = "1.44.0-rc.2" +name = "deranged" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709d9aa1c37abb89d40f19f5d0ad6f0d88cb1581264e571c9350fc5bb89cf1c5" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ + "powerfmt", "serde", - "serde_repr", - "serde_with 3.8.1", ] [[package]] -name = "bson" -version = "2.11.0" +name = "derivation-path" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8a88e82b9106923b5c4d6edfca9e7db958d4e98a478ec115022e81b9b38e2c8" +checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ - "ahash 0.8.11", - "base64 0.13.1", - "bitvec", - "hex", - "indexmap 2.2.6", - "js-sys", - "once_cell", - "rand", - "serde", - "serde_bytes", - "serde_json", - "time", - "uuid 1.8.0", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "bumpalo" -version = "3.16.0" +name = "derive_more" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case 0.4.0", + "proc-macro2", + "quote", + "rustc_version 0.4.0", + "syn 2.0.72", +] [[package]] -name = "byte-slice-cast" -version = "1.2.2" +name = "des" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" +checksum = "ffdd80ce8ce993de27e9f063a444a4d53ce8e8db4c1f00cc03af5ad5a9867a1e" +dependencies = [ + "cipher", +] [[package]] -name = "byteorder" -version = "1.5.0" +name = "deunicode" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "339544cc9e2c4dc3fc7149fd630c5f22263a4fdf18a98afd0075784968b5cf00" [[package]] -name = "bytes" -version = "1.6.0" +name = "difference" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" + +[[package]] +name = "digest" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "serde", + "generic-array", ] [[package]] -name = "bytes-utils" -version = "0.1.4" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "bytes", - "either", + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", ] [[package]] -name = "bzip2" -version = "0.4.4" +name = "dirs" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "bzip2-sys", - "libc", + "dirs-sys", ] [[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" +name = "dirs-next" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" dependencies = [ - "cc", - "libc", - "pkg-config", + "cfg-if", + "dirs-sys-next", ] [[package]] -name = "c-kzg" -version = "1.0.2" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf100c4cea8f207e883ff91ca886d621d8a166cb04971dfaa9bb8fd99ed95df" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ - "blst", - "cc", - "glob", - "hex", "libc", - "serde", + "option-ext", + "redox_users", + "windows-sys 0.48.0", ] [[package]] -name = "cached" -version = "0.44.0" +name = "dirs-sys-next" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b195e4fbc4b6862bbd065b991a34750399c119797efff72492f28a5864de8700" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ - "async-trait", - "cached_proc_macro", - "cached_proc_macro_types", - "futures", - "hashbrown 0.13.2", - "instant", - "once_cell", - "thiserror", - "tokio", + "libc", + "redox_users", + "winapi 0.3.9", ] [[package]] -name = "cached_proc_macro" -version = "0.17.0" +name = "displaydoc" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b48814962d2fd604c50d2b9433c2a41a0ab567779ee2c02f7fba6eca1221f082" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ - "cached_proc_macro_types", - "darling 0.14.4", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.72", ] [[package]] -name = "cached_proc_macro_types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" - -[[package]] -name = "cairo-felt" -version = "0.9.1" +name = "doc-comment" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae932292b9ba497a4e892b56aa4e0c6f329a455180fdbdc132700dfe68d9b153" -dependencies = [ - "lazy_static", - "num-bigint", - "num-integer", - "num-traits 0.2.19", - "serde", -] +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] -name = "cairo-lang-casm" -version = "2.6.4" +name = "docker_credential" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6296d5748288d9fb97175d31aff9f68ea3f602456923895e512b078e9a2210a0" +checksum = "31951f49556e34d90ed28342e1df7e1cb7a229c4cab0aecc627b5d91edd41d07" dependencies = [ - "cairo-lang-utils", - "indoc", - "num-bigint", - "num-traits 0.2.19", - "parity-scale-codec", + "base64 0.21.7", "serde", + "serde_json", ] [[package]] -name = "cairo-lang-compiler" -version = "2.6.4" +name = "doctest-file" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7be5083c3328dad2248a94f0a24b3520c588e7d3bd5891770e4c91d3facade3" -dependencies = [ - "anyhow", - "cairo-lang-defs", - "cairo-lang-diagnostics", - "cairo-lang-filesystem", - "cairo-lang-lowering", - "cairo-lang-parser", - "cairo-lang-project", - "cairo-lang-semantic", - "cairo-lang-sierra", - "cairo-lang-sierra-generator", - "cairo-lang-syntax", - "cairo-lang-utils", - "salsa", - "smol_str", - "thiserror", -] +checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" [[package]] -name = "cairo-lang-debug" -version = "2.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a3cbf67fd766cb7ed48b72e6abf7041857518c9b9fd42475a60c138671c6603" -dependencies = [ - "cairo-lang-utils", -] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] -name = "cairo-lang-defs" -version = "2.6.4" +name = "dotenvy" +version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b284e41dfc158dfbdc02612dbfdb27a55547d23063bdc53105eeec41d8df006" -dependencies = [ - "cairo-lang-debug", - "cairo-lang-diagnostics", - "cairo-lang-filesystem", - "cairo-lang-parser", - "cairo-lang-syntax", - "cairo-lang-utils", - "itertools 0.11.0", - "salsa", - "smol_str", -] +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] -name = "cairo-lang-diagnostics" -version = "2.6.4" +name = "downcast" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6314b24901af8be75cd0e1363e3ff1a8020066372501f4cfc9161726b06ec2a" -dependencies = [ - "cairo-lang-debug", - "cairo-lang-filesystem", - "cairo-lang-utils", - "itertools 0.11.0", -] +checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" [[package]] -name = "cairo-lang-eq-solver" -version = "2.6.4" +name = "dummy" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f95f5c8f7ea75580d164b5304251022e3d47f43fc1c778a01381b55ca9f268c" +checksum = "7e57e12b69e57fad516e01e2b3960f122696fdb13420e1a88ed8e210316f2876" dependencies = [ - "cairo-lang-utils", - "good_lp", + "darling 0.20.10", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "cairo-lang-filesystem" -version = "2.6.4" +name = "dunce" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e58b80f0b413ef1320358fde1a0877fc3fbf740f5cead0de3e947a1bc3bfd4" -dependencies = [ - "cairo-lang-debug", - "cairo-lang-utils", - "path-clean", - "salsa", - "serde", - "smol_str", -] +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] -name = "cairo-lang-lowering" -version = "2.6.4" +name = "dyn-clone" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abe6d604a06ea96c05b3666f2e8fac63cb8709e13667de272912f81db004a16b" -dependencies = [ - "cairo-lang-debug", - "cairo-lang-defs", - "cairo-lang-diagnostics", - "cairo-lang-filesystem", - "cairo-lang-parser", - "cairo-lang-proc-macros", - "cairo-lang-semantic", - "cairo-lang-syntax", - "cairo-lang-utils", - "id-arena", - "itertools 0.11.0", - "log", - "num-bigint", - "num-traits 0.2.19", - "once_cell", - "salsa", - "smol_str", -] +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] -name = "cairo-lang-parser" -version = "2.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf1c279de47a77422f81b8a98023cd523cf0ae79f7153d60c4cf8b62b8ece2f" +name = "e2e-tests" +version = "0.1.0" dependencies = [ - "cairo-lang-diagnostics", - "cairo-lang-filesystem", - "cairo-lang-syntax", - "cairo-lang-syntax-codegen", - "cairo-lang-utils", - "colored", - "itertools 0.11.0", - "num-bigint", - "num-traits 0.2.19", - "salsa", - "smol_str", - "unescaper", + "orchestrator", + "reqwest 0.12.5", + "serde_json", + "testcontainers", + "tokio", + "tokio-stream", + "tokio-util", + "url", ] [[package]] -name = "cairo-lang-plugins" -version = "2.6.4" +name = "ecdsa" +version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1177a07498bdf45cba62f0c727388ff7433072847dbf701c58fa3c3e358154e" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" dependencies = [ - "cairo-lang-defs", - "cairo-lang-diagnostics", - "cairo-lang-filesystem", - "cairo-lang-parser", - "cairo-lang-syntax", - "cairo-lang-utils", - "indent", - "indoc", - "itertools 0.11.0", - "salsa", - "smol_str", + "der 0.6.1", + "elliptic-curve 0.12.3", + "rfc6979 0.3.1", + "signature 1.6.4", ] [[package]] -name = "cairo-lang-proc-macros" -version = "2.6.4" +name = "ecdsa" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c90d812ec983c5a8e3173aca3fc55036b9739201c89f30271ee14a4c1189379" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ - "cairo-lang-debug", - "quote", - "syn 2.0.66", + "der 0.7.9", + "digest 0.10.7", + "elliptic-curve 0.13.8", + "rfc6979 0.4.0", + "signature 2.2.0", + "spki 0.7.3", ] [[package]] -name = "cairo-lang-project" -version = "2.6.4" +name = "ed25519" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3985495d7e9dc481e97135d7139cfa098024351fb51d5feef8366b5fbc104807" +checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" dependencies = [ - "cairo-lang-filesystem", - "cairo-lang-utils", "serde", - "smol_str", - "thiserror", - "toml", + "signature 1.6.4", ] [[package]] -name = "cairo-lang-runner" -version = "2.6.4" +name = "ed25519-dalek" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc7c5969d107d24dbd7612ab7afec65d25475fe51d4bb708e3c773f2346c92b" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" dependencies = [ - "ark-ff 0.4.2", - "ark-secp256k1", - "ark-secp256r1", - "ark-std 0.4.0", - "cairo-felt", - "cairo-lang-casm", - "cairo-lang-lowering", - "cairo-lang-sierra", - "cairo-lang-sierra-ap-change", - "cairo-lang-sierra-generator", - "cairo-lang-sierra-to-casm", - "cairo-lang-sierra-type-size", - "cairo-lang-starknet", - "cairo-lang-utils", - "cairo-vm 0.9.3", - "itertools 0.11.0", - "keccak", - "num-bigint", - "num-integer", - "num-traits 0.2.19", - "smol_str", - "starknet-crypto 0.6.2", - "thiserror", + "curve25519-dalek", + "ed25519", + "rand 0.7.3", + "serde", + "serde_bytes", + "sha2 0.9.9", + "zeroize", ] [[package]] -name = "cairo-lang-semantic" -version = "2.6.4" +name = "ed25519-dalek-bip32" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5cfadbb9ca3479a6b5c02c0a125a5747835ba57a2de9c4e9764f42d85abe059" +checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" dependencies = [ - "cairo-lang-debug", - "cairo-lang-defs", - "cairo-lang-diagnostics", - "cairo-lang-filesystem", - "cairo-lang-parser", - "cairo-lang-plugins", - "cairo-lang-proc-macros", - "cairo-lang-syntax", - "cairo-lang-utils", - "id-arena", - "indoc", - "itertools 0.11.0", - "num-bigint", - "num-traits 0.2.19", - "once_cell", - "salsa", - "smol_str", + "derivation-path", + "ed25519-dalek", + "hmac 0.12.1", + "sha2 0.10.8", ] [[package]] -name = "cairo-lang-sierra" -version = "2.6.4" +name = "either" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74a57492267a5a8891866b6e48cdefa508b5f05931a5f8eaf004b9de15b1ffd6" -dependencies = [ - "anyhow", - "cairo-felt", - "cairo-lang-utils", - "const-fnv1a-hash", - "convert_case 0.6.0", - "derivative", - "itertools 0.11.0", - "lalrpop", - "lalrpop-util", - "num-bigint", - "num-traits 0.2.19", - "regex", - "salsa", - "serde", - "serde_json", - "sha3", - "smol_str", - "thiserror", -] +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] -name = "cairo-lang-sierra-ap-change" -version = "2.6.4" +name = "elliptic-curve" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fdbb4bd95477123653b9200bd4e9dceae95a914f6fe85b2bed83b223e36fb5a" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ - "cairo-lang-eq-solver", - "cairo-lang-sierra", - "cairo-lang-sierra-type-size", - "cairo-lang-utils", - "itertools 0.11.0", - "num-traits 0.2.19", - "thiserror", + "base16ct 0.1.1", + "crypto-bigint 0.4.9", + "der 0.6.1", + "digest 0.10.7", + "ff 0.12.1", + "generic-array", + "group 0.12.1", + "pkcs8 0.9.0", + "rand_core 0.6.4", + "sec1 0.3.0", + "subtle", + "zeroize", ] [[package]] -name = "cairo-lang-sierra-gas" -version = "2.6.4" +name = "elliptic-curve" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "882cb178f1b79aabf70acce1d87b08d569d8a4b0ce8b1d8f538a02cdb36789db" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ - "cairo-lang-eq-solver", - "cairo-lang-sierra", - "cairo-lang-sierra-type-size", - "cairo-lang-utils", - "itertools 0.11.0", - "num-traits 0.2.19", - "thiserror", + "base16ct 0.2.0", + "crypto-bigint 0.5.5", + "digest 0.10.7", + "ff 0.13.0", + "generic-array", + "group 0.13.0", + "pem-rfc7468", + "pkcs8 0.10.2", + "rand_core 0.6.4", + "sec1 0.7.3", + "subtle", + "zeroize", ] [[package]] -name = "cairo-lang-sierra-generator" -version = "2.6.4" +name = "ena" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d80c9d29e6d3f4ab60e698ebe2de84dcf90570c3dd1cfa7b01bd5c42470331c" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" dependencies = [ - "cairo-lang-debug", - "cairo-lang-defs", - "cairo-lang-diagnostics", - "cairo-lang-filesystem", - "cairo-lang-lowering", - "cairo-lang-parser", - "cairo-lang-semantic", - "cairo-lang-sierra", - "cairo-lang-syntax", - "cairo-lang-utils", - "itertools 0.11.0", - "num-traits 0.2.19", - "once_cell", - "salsa", - "smol_str", + "log", ] [[package]] -name = "cairo-lang-sierra-to-casm" -version = "2.6.4" +name = "encoding_rs" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ac02c90be2630ae861db6af226090da92741020519768332dd2c07e24d94c75" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" dependencies = [ - "assert_matches", - "cairo-felt", - "cairo-lang-casm", - "cairo-lang-sierra", - "cairo-lang-sierra-ap-change", - "cairo-lang-sierra-gas", - "cairo-lang-sierra-type-size", - "cairo-lang-utils", - "indoc", - "itertools 0.11.0", - "num-bigint", - "num-traits 0.2.19", - "thiserror", + "cfg-if", ] [[package]] -name = "cairo-lang-sierra-type-size" -version = "2.6.4" +name = "enum-as-inner" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d102b10989f9637b1c916dd950cbd1bd8bb1b6a7aaa1a3035390be0683b92d85" +checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" dependencies = [ - "cairo-lang-sierra", - "cairo-lang-utils", + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "cairo-lang-starknet" -version = "2.6.4" +name = "enum_dispatch" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27921a2bf82d191d28afd570b913341080c8fc25c83bf870dbf1252570b1b41" +checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" dependencies = [ - "anyhow", - "cairo-felt", - "cairo-lang-compiler", - "cairo-lang-defs", - "cairo-lang-diagnostics", - "cairo-lang-filesystem", - "cairo-lang-lowering", - "cairo-lang-plugins", - "cairo-lang-semantic", - "cairo-lang-sierra", - "cairo-lang-sierra-generator", - "cairo-lang-starknet-classes", - "cairo-lang-syntax", - "cairo-lang-utils", - "const_format", - "indent", - "indoc", - "itertools 0.11.0", "once_cell", - "serde", - "serde_json", - "smol_str", - "thiserror", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "cairo-lang-starknet-classes" -version = "2.6.4" +name = "env_filter" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8623b076ef3569e4262da5da270a84658b1ff242fe0c9624fbe432e7a937d101" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" dependencies = [ - "cairo-felt", - "cairo-lang-casm", - "cairo-lang-sierra", - "cairo-lang-sierra-to-casm", - "cairo-lang-utils", - "convert_case 0.6.0", - "itertools 0.11.0", - "num-bigint", - "num-integer", - "num-traits 0.2.19", - "once_cell", - "serde", - "serde_json", - "sha3", - "smol_str", - "starknet-crypto 0.6.2", - "thiserror", + "log", + "regex", ] [[package]] -name = "cairo-lang-syntax" -version = "2.6.4" +name = "env_logger" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c62f5bd74e249636e7c48d8b95e6cc0ee991206d4a6cbe5c2624184a828e70b" +checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" dependencies = [ - "cairo-lang-debug", - "cairo-lang-filesystem", - "cairo-lang-utils", - "num-bigint", - "num-traits 0.2.19", - "salsa", - "smol_str", - "unescaper", + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", ] [[package]] -name = "cairo-lang-syntax-codegen" -version = "2.6.4" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a744747e9ab03b65480265304490f3e29d99e4cb297e39d0e6fdb047c1bc86a7" -dependencies = [ - "genco", - "xshell", -] +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "cairo-lang-utils" -version = "2.6.4" +name = "erased-serde" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f98e8769412907ceb106c21c70907cc0c87ca0a2a44c82b6229a695a6f9b48" +checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" dependencies = [ - "hashbrown 0.14.5", - "indexmap 2.2.6", - "itertools 0.11.0", - "num-bigint", - "num-traits 0.2.19", - "parity-scale-codec", - "schemars", "serde", ] [[package]] -name = "cairo-type-derive" -version = "0.1.0" -source = "git+https://github.com/keep-starknet-strange/snos#04f64d46fc58106711ec5328433ad54aef43d5cf" +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", + "libc", + "windows-sys 0.52.0", ] [[package]] -name = "cairo-vm" -version = "0.9.3" +name = "eth-keystore" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d90d260c5b0c0812f02fcbdc21eb0d5908fcecdca888fb779b54c3967f7f88bf" +checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" dependencies = [ - "anyhow", - "bincode 2.0.0-rc.3", - "bitvec", - "cairo-felt", - "generic-array", - "hashbrown 0.14.5", + "aes", + "ctr", + "digest 0.10.7", "hex", - "keccak", - "lazy_static", - "mimalloc", - "nom", - "num-bigint", - "num-integer", - "num-prime", - "num-traits 0.2.19", - "rand", - "rust_decimal", + "hmac 0.12.1", + "pbkdf2 0.11.0", + "rand 0.8.5", + "scrypt 0.10.0", "serde", "serde_json", - "sha2", - "sha3", - "starknet-crypto 0.6.2", - "starknet-curve 0.4.2", - "thiserror-no-std", + "sha2 0.10.8", + "sha3 0.10.8", + "thiserror", + "uuid 0.8.2", ] [[package]] -name = "cairo-vm" -version = "1.0.0-rc3" -source = "git+https://github.com/lambdaclass/cairo-vm#5d1181185a976c77956aaa4247846babd4d0e2df" +name = "ethbloom" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" dependencies = [ - "anyhow", - "ark-ff 0.4.2", - "ark-std 0.4.0", - "bincode 2.0.0-rc.3", - "bitvec", - "cairo-lang-casm", - "cairo-lang-starknet", - "cairo-lang-starknet-classes", - "generic-array", - "hashbrown 0.14.5", - "hex", - "keccak", - "lazy_static", - "nom", - "num-bigint", - "num-integer", - "num-prime", - "num-traits 0.2.19", - "rand", - "rust_decimal", - "serde", - "serde_json", - "sha2", - "sha3", - "starknet-crypto 0.6.2", - "starknet-types-core", - "thiserror-no-std", - "zip", + "crunchy", + "fixed-hash 0.8.0", + "impl-rlp", + "impl-serde 0.4.0", + "tiny-keccak", ] [[package]] -name = "castaway" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" - -[[package]] -name = "cbc" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +name = "ethereum-da-client" +version = "0.1.0" dependencies = [ - "cipher", + "alloy 0.1.0", + "async-trait", + "c-kzg", + "color-eyre", + "da-client-interface", + "dotenv", + "mockall 0.12.1", + "reqwest 0.12.5", + "rstest 0.22.0", + "serde", + "starknet", + "tokio", + "tokio-test", + "url", + "utils", ] [[package]] -name = "cc" -version = "1.0.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" +name = "ethereum-settlement-client" +version = "0.1.0" dependencies = [ - "jobserver", - "libc", - "once_cell", + "alloy 0.2.1", + "async-trait", + "c-kzg", + "color-eyre", + "dotenv", + "mockall 0.12.1", + "reqwest 0.12.5", + "rstest 0.22.0", + "serde", + "settlement-client-interface", + "snos", + "tokio", + "tokio-test", + "url", + "utils", ] [[package]] -name = "cexpr" -version = "0.6.0" +name = "ethereum-types" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" dependencies = [ - "nom", + "ethbloom", + "fixed-hash 0.8.0", + "impl-rlp", + "impl-serde 0.4.0", + "primitive-types 0.12.2", + "uint", ] [[package]] -name = "cfg-if" -version = "1.0.0" +name = "ethnum" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" [[package]] -name = "chrono" -version = "0.4.38" +name = "event-listener" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "num-traits 0.2.19", - "serde", - "windows-targets 0.52.5", -] +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] -name = "cipher" -version = "0.4.4" +name = "event-listener" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" dependencies = [ - "crypto-common", - "inout", + "concurrent-queue", + "parking", + "pin-project-lite", ] [[package]] -name = "clang-sys" -version = "1.8.1" +name = "event-listener" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ - "glob", - "libc", - "libloading", + "concurrent-queue", + "parking", + "pin-project-lite", ] [[package]] -name = "cmake" -version = "0.1.50" +name = "event-listener-strategy" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ - "cc", + "event-listener 5.3.1", + "pin-project-lite", ] [[package]] -name = "cms" -version = "0.2.3" +name = "executor-trait" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b77c319abfd5219629c45c34c89ba945ed3c5e49fcde9d16b6c3885f118a730" +checksum = "1a1052dd43212a7777ec6a69b117da52f5e52f07aec47d00c1a2b33b85d06b08" dependencies = [ - "const-oid", - "der 0.7.9", - "spki 0.7.3", - "x509-cert", + "async-trait", ] [[package]] -name = "color-eyre" -version = "0.6.3" +name = "eyre" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55146f5e46f237f7423d74111267d4597b59b0dad0ffaf7303bce9945d843ad5" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" dependencies = [ - "backtrace", - "color-spantrace", - "eyre", "indenter", "once_cell", - "owo-colors", - "tracing-error", ] [[package]] -name = "color-spantrace" -version = "0.2.1" +name = "fail" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" +checksum = "fe5e43d0f78a42ad591453aedb1d7ae631ce7ee445c7643691055a9ed8d3b01c" dependencies = [ + "log", "once_cell", - "owo-colors", - "tracing-core", - "tracing-error", -] - -[[package]] -name = "colorchoice" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" - -[[package]] -name = "colored" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" -dependencies = [ - "lazy_static", - "windows-sys 0.48.0", + "rand 0.8.5", ] [[package]] -name = "combine" -version = "4.6.7" +name = "fake" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +checksum = "1c25829bde82205da46e1823b2259db6273379f626fc211f126f65654a2669be" dependencies = [ - "bytes", - "futures-core", - "memchr", - "pin-project-lite", - "tokio", - "tokio-util", + "deunicode", + "dummy", + "rand 0.8.5", + "serde_json", ] [[package]] -name = "concurrent-queue" -version = "2.5.0" +name = "fastrand" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ - "crossbeam-utils", + "instant", ] [[package]] -name = "const-fnv1a-hash" -version = "1.1.0" +name = "fastrand" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" [[package]] -name = "const-hex" -version = "1.12.0" +name = "fastrlp" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94fb8a24a26d37e1ffd45343323dc9fe6654ceea44c12f2fcb3d7ac29e610bc6" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" dependencies = [ - "cfg-if", - "cpufeatures", - "hex", - "proptest", - "serde", + "arrayvec 0.7.4", + "auto_impl", + "bytes", ] [[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - -[[package]] -name = "const_format" -version = "0.2.32" +name = "ff" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ - "const_format_proc_macros", + "rand_core 0.6.4", + "subtle", ] [[package]] -name = "const_format_proc_macros" -version = "0.2.32" +name = "ff" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", + "bitvec 1.0.1", + "byteorder", + "ff_derive", + "rand_core 0.6.4", + "subtle", ] [[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - -[[package]] -name = "convert_case" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" - -[[package]] -name = "convert_case" -version = "0.6.0" +name = "ff_derive" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +checksum = "e9f54704be45ed286151c5e11531316eaef5b8f5af7d597b806fdb8af108d84a" dependencies = [ - "unicode-segmentation", + "addchain", + "cfg-if", + "num-bigint 0.3.3", + "num-integer", + "num-traits 0.2.19", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "cookie-factory" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9885fa71e26b8ab7855e2ec7cae6e9b380edff76cd052e07c683a0319d51b3a2" - -[[package]] -name = "core-foundation" -version = "0.9.4" +name = "fixed" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +checksum = "85c6e0b89bf864acd20590dbdbad56f69aeb898abfc9443008fd7bd48b2cc85a" dependencies = [ - "core-foundation-sys", - "libc", + "az", + "bytemuck", + "half 2.4.1", + "typenum", ] [[package]] -name = "core-foundation-sys" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" - -[[package]] -name = "cpufeatures" -version = "0.2.12" +name = "fixed-hash" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" dependencies = [ - "libc", + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", ] [[package]] -name = "crc16" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "338089f42c427b86394a5ee60ff321da23a5c89c9d89514c829687b26359fcff" - -[[package]] -name = "crc32c" -version = "0.6.8" +name = "fixed-hash" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a47af21622d091a8f0fb295b88bc886ac74efcc613efc19f5d0b21de5c89e47" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" dependencies = [ - "rustc_version 0.4.0", + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", ] [[package]] -name = "crc32fast" -version = "1.4.2" +name = "fixedbitset" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" -dependencies = [ - "cfg-if", -] +checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" [[package]] -name = "crossbeam-utils" -version = "0.8.20" +name = "fixedbitset" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] -name = "crunchy" -version = "0.2.2" +name = "flagset" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "b3ea1ec5f8307826a5b71094dd91fc04d4ae75d5709b20ad351c7fb4815c86ec" [[package]] -name = "crypto-bigint" -version = "0.4.9" +name = "flate2" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" +checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" dependencies = [ - "generic-array", - "rand_core", - "subtle", - "zeroize", + "crc32fast", + "libz-sys", + "miniz_oxide", ] [[package]] -name = "crypto-bigint" -version = "0.5.5" +name = "flexi_logger" +version = "0.27.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +checksum = "469e584c031833564840fb0cdbce99bdfe946fd45480a188545e73a76f45461c" dependencies = [ - "generic-array", - "rand_core", - "subtle", - "zeroize", + "chrono", + "glob", + "is-terminal", + "lazy_static", + "log", + "nu-ansi-term 0.49.0", + "regex", + "thiserror", ] [[package]] -name = "crypto-common" -version = "0.1.6" +name = "flume" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" dependencies = [ - "generic-array", - "typenum", + "futures-core", + "futures-sink", + "spin 0.9.8", ] [[package]] -name = "ctr" -version = "0.9.2" +name = "fnv" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] -name = "curl" -version = "0.4.46" +name = "foreign-types" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e2161dd6eba090ff1594084e95fd67aeccf04382ffea77999ea94ed42ec67b6" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "curl-sys", - "libc", - "openssl-probe", - "openssl-sys", - "schannel", - "socket2 0.5.7", - "windows-sys 0.52.0", + "foreign-types-shared", ] [[package]] -name = "curl-sys" -version = "0.4.72+curl-8.6.0" +name = "foreign-types-shared" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29cbdc8314c447d11e8fd156dcdd031d9e02a7a976163e396b548c03153bc9ea" -dependencies = [ - "cc", - "libc", - "libnghttp2-sys", - "libz-sys", - "openssl-sys", - "pkg-config", - "vcpkg", - "windows-sys 0.52.0", -] +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] -name = "da-client-interface" -version = "0.1.0" +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "async-trait", - "axum 0.7.5", - "color-eyre", - "mockall 0.12.1", - "starknet", + "percent-encoding", ] [[package]] -name = "darling" -version = "0.13.4" +name = "fragile" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core 0.13.4", - "darling_macro 0.13.4", -] +checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] -name = "darling" -version = "0.14.4" +name = "fs_extra" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] -name = "darling" -version = "0.20.9" +name = "funty" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" -dependencies = [ - "darling_core 0.20.9", - "darling_macro 0.20.9", -] +checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" [[package]] -name = "darling_core" -version = "0.13.4" +name = "funty" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", ] [[package]] -name = "darling_core" -version = "0.14.4" +name = "futures-channel" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", + "futures-core", + "futures-sink", ] [[package]] -name = "darling_core" -version = "0.20.9" +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.11.1", - "syn 2.0.66", + "futures-core", + "futures-task", + "futures-util", ] [[package]] -name = "darling_macro" -version = "0.13.4" +name = "futures-io" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ - "darling_core 0.13.4", - "quote", - "syn 1.0.109", + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", ] [[package]] -name = "darling_macro" -version = "0.14.4" +name = "futures-lite" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", + "fastrand 2.1.0", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", ] [[package]] -name = "darling_macro" -version = "0.20.9" +name = "futures-macro" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ - "darling_core 0.20.9", + "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] -name = "dashmap" -version = "5.5.3" +name = "futures-sink" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core 0.9.10", -] +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] -name = "data-encoding" -version = "2.6.0" +name = "futures-task" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] -name = "der" -version = "0.6.1" +name = "futures-timer" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" -dependencies = [ - "const-oid", - "zeroize", -] +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] -name = "der" -version = "0.7.9" +name = "futures-util" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ - "const-oid", - "der_derive", - "flagset", - "pem-rfc7468", - "zeroize", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", ] [[package]] -name = "der-parser" -version = "9.0.0" +name = "futures-utils-wasm" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" -dependencies = [ - "asn1-rs", - "displaydoc", - "nom", - "num-bigint", - "num-traits 0.2.19", - "rusticata-macros", -] +checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" [[package]] -name = "der_derive" -version = "0.7.2" +name = "fxhash" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fe87ce4529967e0ba1dcf8450bab64d97dfd5010a6256187ffe2e43e6f0e049" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", + "byteorder", ] [[package]] -name = "deranged" -version = "0.3.11" +name = "gcc" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", - "serde", -] +checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" [[package]] -name = "derivative" -version = "2.2.0" +name = "genco" +version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +checksum = "afac3cbb14db69ac9fef9cdb60d8a87e39a7a527f85a81a923436efa40ad42c6" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "genco-macros", + "relative-path", + "smallvec", ] [[package]] -name = "derive_more" -version = "0.99.18" +name = "genco-macros" +version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +checksum = "553630feadf7b76442b0849fd25fdf89b860d933623aec9693fed19af0400c78" dependencies = [ - "convert_case 0.4.0", "proc-macro2", "quote", - "rustc_version 0.4.0", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] -name = "des" -version = "0.8.1" +name = "generic-array" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdd80ce8ce993de27e9f063a444a4d53ce8e8db4c1f00cc03af5ad5a9867a1e" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ - "cipher", + "typenum", + "version_check", + "zeroize", ] [[package]] -name = "deunicode" -version = "1.6.0" +name = "get_if_addrs" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339544cc9e2c4dc3fc7149fd630c5f22263a4fdf18a98afd0075784968b5cf00" +checksum = "abddb55a898d32925f3148bd281174a68eeb68bbfd9a5938a57b18f506ee4ef7" +dependencies = [ + "c_linked_list", + "get_if_addrs-sys", + "libc", + "winapi 0.2.8", +] [[package]] -name = "digest" -version = "0.9.0" +name = "get_if_addrs-sys" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +checksum = "0d04f9fb746cf36b191c00f3ede8bde9c8e64f9f4b05ae2694a9ccf5e3f5ab48" dependencies = [ - "generic-array", + "gcc", + "libc", ] [[package]] -name = "digest" -version = "0.10.7" +name = "getrandom" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", + "cfg-if", + "js-sys", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] -name = "dirs" -version = "5.0.1" +name = "getrandom" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ - "dirs-sys", + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] -name = "dirs-next" -version = "2.0.0" +name = "ghash" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" dependencies = [ - "cfg-if", - "dirs-sys-next", + "opaque-debug", + "polyval", ] [[package]] -name = "dirs-sys" -version = "0.4.1" +name = "gimli" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", + "aho-corasick", + "bstr", + "log", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", ] [[package]] -name = "dirs-sys-next" -version = "0.1.2" +name = "globwalk" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" dependencies = [ - "libc", - "redox_users", - "winapi", + "bitflags 2.6.0", + "ignore", + "walkdir", ] [[package]] -name = "displaydoc" -version = "0.2.4" +name = "gloo-timers" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", ] [[package]] -name = "doc-comment" -version = "0.3.3" +name = "good_lp" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +checksum = "3198bd13dea84c76a64621d6ee8ee26a4960a9a0d538eca95ca8f1320a469ac9" +dependencies = [ + "fnv", + "minilp", +] [[package]] -name = "docker_credential" -version = "1.3.1" +name = "google-cloud-auth" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31951f49556e34d90ed28342e1df7e1cb7a229c4cab0aecc627b5d91edd41d07" +checksum = "3bf7cb7864f08a92e77c26bb230d021ea57691788fb5dd51793f96965d19e7f9" dependencies = [ + "async-trait", "base64 0.21.7", + "google-cloud-metadata", + "google-cloud-token", + "home", + "jsonwebtoken 9.3.0", + "reqwest 0.11.27", "serde", "serde_json", + "thiserror", + "time", + "tokio", + "tracing", + "urlencoding", ] [[package]] -name = "doctest-file" -version = "1.0.0" +name = "google-cloud-gax" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac81fa3e28d21450aa4d2ac065992ba96a1d7303efbce51a95f4fd175b67562" +checksum = "8cb60314136e37de9e2a05ddb427b9c5a39c3d188de2e2f026c6af74425eef44" +dependencies = [ + "google-cloud-token", + "http 0.2.12", + "thiserror", + "tokio", + "tokio-retry", + "tonic 0.10.2", + "tower", + "tracing", +] [[package]] -name = "dotenv" -version = "0.15.0" +name = "google-cloud-googleapis" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" +checksum = "db8a478015d079296167e3f08e096dc99cffc2cb50fa203dd38aaa9dd37f8354" +dependencies = [ + "prost", + "prost-types", + "tonic 0.10.2", +] [[package]] -name = "dotenvy" -version = "0.15.7" +name = "google-cloud-metadata" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" +checksum = "cc279bfb50487d7bcd900e8688406475fc750fe474a835b2ab9ade9eb1fc90e2" +dependencies = [ + "reqwest 0.11.27", + "thiserror", + "tokio", +] [[package]] -name = "downcast" -version = "0.11.0" +name = "google-cloud-pubsub" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" +checksum = "1da196da473976944d408a91213bafe078e7223e10694d3f8ed36b6e210fa130" +dependencies = [ + "async-channel 1.9.0", + "async-stream", + "google-cloud-auth", + "google-cloud-gax", + "google-cloud-googleapis", + "google-cloud-token", + "prost-types", + "thiserror", + "tokio", + "tokio-util", + "tracing", +] [[package]] -name = "dummy" -version = "0.7.0" +name = "google-cloud-token" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e57e12b69e57fad516e01e2b3960f122696fdb13420e1a88ed8e210316f2876" +checksum = "8f49c12ba8b21d128a2ce8585955246977fbce4415f680ebf9199b6f9d6d725f" dependencies = [ - "darling 0.20.9", - "proc-macro2", - "quote", - "syn 2.0.66", + "async-trait", ] [[package]] -name = "dunce" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +name = "gps-fact-checker" +version = "0.1.0" +dependencies = [ + "alloy 0.2.1", + "async-trait", + "cairo-vm 1.0.0-rc5", + "itertools 0.13.0", + "starknet", + "thiserror", + "url", + "utils", +] [[package]] -name = "dyn-clone" -version = "1.0.17" +name = "group" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +dependencies = [ + "ff 0.12.1", + "rand_core 0.6.4", + "subtle", +] -[[package]] -name = "e2e-tests" -version = "0.1.0" +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ - "orchestrator", - "reqwest 0.11.27", - "serde_json", - "testcontainers", - "tokio", - "tokio-stream", - "tokio-util", - "url", + "ff 0.13.0", + "rand 0.8.5", + "rand_core 0.6.4", + "rand_xorshift", + "subtle", ] [[package]] -name = "ecdsa" -version = "0.14.8" +name = "h2" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ - "der 0.6.1", - "elliptic-curve 0.12.3", - "rfc6979 0.3.1", - "signature 1.6.4", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.3.0", + "slab", + "tokio", + "tokio-util", + "tracing", ] [[package]] -name = "ecdsa" -version = "0.16.9" +name = "h2" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" dependencies = [ - "der 0.7.9", - "digest 0.10.7", - "elliptic-curve 0.13.8", - "rfc6979 0.4.0", - "signature 2.2.0", - "spki 0.7.3", + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap 2.3.0", + "slab", + "tokio", + "tokio-util", + "tracing", ] [[package]] -name = "either" -version = "1.12.0" +name = "half" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" [[package]] -name = "elliptic-curve" -version = "0.12.3" +name = "half" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" dependencies = [ - "base16ct 0.1.1", - "crypto-bigint 0.4.9", - "der 0.6.1", - "digest 0.10.7", - "ff 0.12.1", - "generic-array", - "group 0.12.1", - "pkcs8 0.9.0", - "rand_core", - "sec1 0.3.0", - "subtle", - "zeroize", + "cfg-if", + "crunchy", ] [[package]] -name = "elliptic-curve" -version = "0.13.8" +name = "hashbrown" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "base16ct 0.2.0", - "crypto-bigint 0.5.5", - "digest 0.10.7", - "ff 0.13.0", - "generic-array", - "group 0.13.0", - "pkcs8 0.10.2", - "rand_core", - "sec1 0.7.3", - "subtle", - "zeroize", + "ahash 0.7.8", ] [[package]] -name = "ena" -version = "0.14.3" +name = "hashbrown" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "log", + "ahash 0.8.11", ] [[package]] -name = "encoding_rs" -version = "0.8.34" +name = "hashbrown" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "cfg-if", + "ahash 0.8.11", + "allocator-api2", + "serde", ] [[package]] -name = "enum-as-inner" +name = "headers" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" +checksum = "322106e6bd0cba2d5ead589ddb8150a13d7c4217cf80d7c4f682ca994ccc6aa9" dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", + "base64 0.21.7", + "bytes", + "headers-core", + "http 1.1.0", + "httpdate", + "mime", + "sha1", ] [[package]] -name = "enum-as-inner" -version = "0.6.0" +name = "headers-core" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" +checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 2.0.66", + "http 1.1.0", ] [[package]] -name = "env_filter" -version = "0.1.0" +name = "heck" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" dependencies = [ - "log", - "regex", + "unicode-segmentation", ] [[package]] -name = "env_logger" -version = "0.11.3" +name = "heck" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "humantime", - "log", -] +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] -name = "equivalent" -version = "1.0.1" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] -name = "errno" -version = "0.3.9" +name = "hermit-abi" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", - "windows-sys 0.52.0", ] [[package]] -name = "eth-keystore" -version = "0.5.0" +name = "hermit-abi" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" -dependencies = [ - "aes", - "ctr", - "digest 0.10.7", - "hex", - "hmac", - "pbkdf2 0.11.0", - "rand", - "scrypt 0.10.0", - "serde", - "serde_json", - "sha2", - "sha3", - "thiserror", - "uuid 0.8.2", -] +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] -name = "ethbloom" -version = "0.13.0" +name = "hermit-abi" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" -dependencies = [ - "crunchy", - "fixed-hash", - "impl-rlp", - "impl-serde", - "tiny-keccak", -] +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] -name = "ethereum-da-client" -version = "0.1.0" +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" dependencies = [ - "alloy 0.1.0", - "async-trait", - "c-kzg", - "color-eyre", - "da-client-interface", - "dotenv", - "mockall 0.12.1", - "reqwest 0.12.5", - "rstest 0.18.2", "serde", - "starknet", - "tokio", - "tokio-test", - "url", - "utils", ] [[package]] -name = "ethereum-settlement-client" -version = "0.1.0" -dependencies = [ - "alloy 0.1.2", - "async-trait", - "c-kzg", - "color-eyre", - "dotenv", - "mockall 0.12.1", - "reqwest 0.12.5", - "rstest 0.18.2", - "serde", - "settlement-client-interface", - "snos", - "tokio", - "tokio-test", - "url", - "utils", -] +name = "hex-literal" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] -name = "ethereum-types" -version = "0.14.1" +name = "hidapi" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +checksum = "798154e4b6570af74899d71155fb0072d5b17e6aa12f39c8ef22c60fb8ec99e7" dependencies = [ - "ethbloom", - "fixed-hash", - "impl-rlp", - "impl-serde", - "primitive-types", - "uint", + "cc", + "libc", + "pkg-config", + "winapi 0.3.9", ] [[package]] -name = "event-listener" -version = "2.5.3" +name = "hkdf" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f" +dependencies = [ + "digest 0.9.0", + "hmac 0.10.1", +] [[package]] -name = "event-listener" -version = "3.1.0" +name = "hkdf" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", + "hmac 0.12.1", ] [[package]] -name = "event-listener" -version = "5.3.1" +name = "hmac" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", + "crypto-mac 0.8.0", + "digest 0.9.0", ] [[package]] -name = "event-listener-strategy" -version = "0.5.2" +name = "hmac" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" dependencies = [ - "event-listener 5.3.1", - "pin-project-lite", + "crypto-mac 0.10.0", + "digest 0.9.0", ] [[package]] -name = "executor-trait" -version = "2.1.0" +name = "hmac" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a1052dd43212a7777ec6a69b117da52f5e52f07aec47d00c1a2b33b85d06b08" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "async-trait", + "digest 0.10.7", ] [[package]] -name = "eyre" -version = "0.6.12" +name = "hmac-drbg" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ - "indenter", - "once_cell", + "digest 0.9.0", + "generic-array", + "hmac 0.8.1", ] [[package]] -name = "fake" -version = "2.9.2" +name = "home" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c25829bde82205da46e1823b2259db6273379f626fc211f126f65654a2669be" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "deunicode", - "dummy", - "rand", - "serde_json", + "windows-sys 0.52.0", ] [[package]] -name = "fastrand" -version = "1.9.0" +name = "hostname" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" dependencies = [ - "instant", + "libc", + "match_cfg", + "winapi 0.3.9", ] [[package]] -name = "fastrand" -version = "2.1.0" +name = "http" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] [[package]] -name = "fastrlp" -version = "0.3.1" +name = "http" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ - "arrayvec", - "auto_impl", "bytes", + "fnv", + "itoa", ] [[package]] -name = "ff" -version = "0.12.1" +name = "http-body" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ - "rand_core", - "subtle", + "bytes", + "http 0.2.12", + "pin-project-lite", ] [[package]] -name = "ff" -version = "0.13.0" +name = "http-body" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ - "rand_core", - "subtle", + "bytes", + "http 1.1.0", ] [[package]] -name = "fixed-hash" -version = "0.8.0" +name = "http-body-util" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ - "byteorder", - "rand", - "rustc-hex", - "static_assertions", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "pin-project-lite", ] [[package]] -name = "fixedbitset" -version = "0.4.2" +name = "httparse" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" [[package]] -name = "flagset" -version = "0.4.5" +name = "httpdate" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdeb3aa5e95cf9aabc17f060cfa0ced7b83f042390760ca53bf09df9968acaa1" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] -name = "flate2" -version = "1.0.30" +name = "httpmock" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "08ec9586ee0910472dec1a1f0f8acf52f0fdde93aea74d70d4a3107b4be0fd5b" dependencies = [ - "crc32fast", - "libz-sys", - "miniz_oxide", + "assert-json-diff", + "async-object-pool", + "async-std", + "async-trait", + "base64 0.21.7", + "basic-cookies", + "crossbeam-utils", + "form_urlencoded", + "futures-util", + "hyper 0.14.30", + "isahc", + "lazy_static", + "levenshtein", + "log", + "regex", + "serde", + "serde_json", + "serde_regex", + "similar", + "tokio", + "url", ] [[package]] -name = "flume" -version = "0.11.0" +name = "humansize" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" dependencies = [ - "futures-core", - "futures-sink", - "spin 0.9.8", + "libm", ] [[package]] -name = "fnv" -version = "1.0.7" +name = "humantime" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] -name = "foreign-types" -version = "0.3.2" +name = "hyper" +version = "0.14.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" dependencies = [ - "foreign-types-shared", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.7", + "tokio", + "tower-service", + "tracing", + "want", ] [[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" +name = "hyper" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ - "percent-encoding", + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.5", + "http 1.1.0", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", ] [[package]] -name = "fragile" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" - -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - -[[package]] -name = "funty" -version = "2.0.0" +name = "hyper-named-pipe" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +checksum = "73b7d8abf35697b81a825e386fc151e0d503e8cb5fcb93cc8669c376dfd6f278" +dependencies = [ + "hex", + "hyper 1.4.1", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", + "winapi 0.3.9", +] [[package]] -name = "futures" -version = "0.3.30" +name = "hyper-rustls" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", "futures-util", + "http 0.2.12", + "hyper 0.14.30", + "log", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "tokio", + "tokio-rustls 0.24.1", ] [[package]] -name = "futures-channel" -version = "0.3.30" +name = "hyper-rustls" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" dependencies = [ - "futures-core", - "futures-sink", + "futures-util", + "http 1.1.0", + "hyper 1.4.1", + "hyper-util", + "log", + "rustls 0.23.12", + "rustls-native-certs 0.7.1", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.0", + "tower-service", ] [[package]] -name = "futures-core" -version = "0.3.30" +name = "hyper-timeout" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +dependencies = [ + "hyper 0.14.30", + "pin-project-lite", + "tokio", + "tokio-io-timeout", +] [[package]] -name = "futures-executor" -version = "0.3.30" +name = "hyper-tls" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ - "futures-core", - "futures-task", - "futures-util", + "bytes", + "hyper 0.14.30", + "native-tls", + "tokio", + "tokio-native-tls", ] [[package]] -name = "futures-io" -version = "0.3.30" +name = "hyper-tls" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.4.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] [[package]] -name = "futures-lite" -version = "1.13.0" +name = "hyper-util" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.4.1", "pin-project-lite", - "waker-fn", + "socket2 0.5.7", + "tokio", + "tower", + "tower-service", + "tracing", ] [[package]] -name = "futures-lite" -version = "2.3.0" +name = "hyperlocal" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +checksum = "986c5ce3b994526b3cd75578e62554abd09f0899d6206de48b3e96ab34ccc8c7" dependencies = [ - "fastrand 2.1.0", - "futures-core", - "futures-io", - "parking", + "hex", + "http-body-util", + "hyper 1.4.1", + "hyper-util", "pin-project-lite", + "tokio", + "tower-service", ] [[package]] -name = "futures-macro" -version = "0.3.30" +name = "iana-time-zone" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", ] [[package]] -name = "futures-sink" -version = "0.3.30" +name = "iana-time-zone-haiku" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] [[package]] -name = "futures-task" -version = "0.3.30" +name = "id-arena" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" [[package]] -name = "futures-timer" -version = "3.0.3" +name = "ident_case" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] -name = "futures-util" -version = "0.3.30" +name = "idna" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", + "matches", + "unicode-bidi", + "unicode-normalization", ] [[package]] -name = "futures-utils-wasm" -version = "0.1.0" +name = "idna" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] [[package]] -name = "genco" -version = "0.17.9" +name = "idna" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afac3cbb14db69ac9fef9cdb60d8a87e39a7a527f85a81a923436efa40ad42c6" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ - "genco-macros", - "relative-path", - "smallvec", + "unicode-bidi", + "unicode-normalization", ] [[package]] -name = "genco-macros" -version = "0.17.9" +name = "ignore" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "553630feadf7b76442b0849fd25fdf89b860d933623aec9693fed19af0400c78" +checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata 0.4.7", + "same-file", + "walkdir", + "winapi-util", ] [[package]] -name = "generic-array" -version = "0.14.7" +name = "im" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" dependencies = [ + "bitmaps", + "rand_core 0.6.4", + "rand_xoshiro", + "sized-chunks", "typenum", "version_check", - "zeroize", ] [[package]] -name = "getrandom" -version = "0.2.15" +name = "impl-codec" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "161ebdfec3c8e3b52bf61c4f3550a1eea4f9579d10dc1b936f3171ebdcd6c443" dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", + "parity-scale-codec 2.3.1", ] [[package]] -name = "gimli" -version = "0.28.1" +name = "impl-codec" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec 3.6.12", +] [[package]] -name = "glob" -version = "0.3.1" +name = "impl-rlp" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] [[package]] -name = "gloo-timers" -version = "0.2.6" +name = "impl-serde" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +checksum = "4551f042f3438e64dbd6226b20527fc84a6e1fe65688b58746a2f53623f25f5c" dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", + "serde", ] [[package]] -name = "good_lp" -version = "1.8.1" +name = "impl-serde" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3198bd13dea84c76a64621d6ee8ee26a4960a9a0d538eca95ca8f1320a469ac9" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" dependencies = [ - "fnv", - "minilp", + "serde", ] [[package]] -name = "google-cloud-auth" -version = "0.13.2" +name = "impl-trait-for-tuples" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bf7cb7864f08a92e77c26bb230d021ea57691788fb5dd51793f96965d19e7f9" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ - "async-trait", - "base64 0.21.7", - "google-cloud-metadata", - "google-cloud-token", - "home", - "jsonwebtoken", - "reqwest 0.11.27", - "serde", - "serde_json", - "thiserror", - "time", - "tokio", - "tracing", - "urlencoding", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "google-cloud-gax" -version = "0.17.0" +name = "include_dir" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cb60314136e37de9e2a05ddb427b9c5a39c3d188de2e2f026c6af74425eef44" +checksum = "24b56e147e6187d61e9d0f039f10e070d0c0a887e24fe0bb9ca3f29bfde62cab" dependencies = [ - "google-cloud-token", - "http 0.2.12", - "thiserror", - "tokio", - "tokio-retry", - "tonic", - "tower", - "tracing", + "glob", + "include_dir_impl", + "proc-macro-hack", ] [[package]] -name = "google-cloud-googleapis" -version = "0.12.0" +name = "include_dir_impl" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a0c890c85da4bab7bce4204c707396bbd3c6c8a681716a51c8814cfc2b682df" +dependencies = [ + "anyhow", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indent" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f1a0777d972970f204fdf8ef319f1f4f8459131636d7e3c96c5d59570d0fa6" + +[[package]] +name = "indenter" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8a478015d079296167e3f08e096dc99cffc2cb50fa203dd38aaa9dd37f8354" -dependencies = [ - "prost", - "prost-types", - "tonic", -] +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] -name = "google-cloud-metadata" -version = "0.4.0" +name = "indexmap" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc279bfb50487d7bcd900e8688406475fc750fe474a835b2ab9ade9eb1fc90e2" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ - "reqwest 0.11.27", - "thiserror", - "tokio", + "autocfg", + "hashbrown 0.12.3", + "serde", ] [[package]] -name = "google-cloud-pubsub" -version = "0.23.0" +name = "indexmap" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1da196da473976944d408a91213bafe078e7223e10694d3f8ed36b6e210fa130" +checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" dependencies = [ - "async-channel 1.9.0", - "async-stream", - "google-cloud-auth", - "google-cloud-gax", - "google-cloud-googleapis", - "google-cloud-token", - "prost-types", - "thiserror", - "tokio", - "tokio-util", - "tracing", + "equivalent", + "hashbrown 0.14.5", + "serde", ] [[package]] -name = "google-cloud-token" -version = "0.1.2" +name = "indoc" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f49c12ba8b21d128a2ce8585955246977fbce4415f680ebf9199b6f9d6d725f" -dependencies = [ - "async-trait", -] +checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" [[package]] -name = "gps-fact-checker" -version = "0.1.0" -dependencies = [ - "alloy 0.1.2", - "async-trait", - "cairo-vm 1.0.0-rc3", - "itertools 0.13.0", - "starknet", - "thiserror", - "url", - "utils", -] +name = "indoc" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" [[package]] -name = "group" -version = "0.12.1" +name = "inout" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "ff 0.12.1", - "rand_core", - "subtle", + "block-padding 0.3.3", + "generic-array", ] [[package]] -name = "group" -version = "0.13.0" +name = "instant" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ - "ff 0.13.0", - "rand_core", - "subtle", + "cfg-if", ] [[package]] -name = "h2" -version = "0.3.26" +name = "internment" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "6ab388864246d58a276e60e7569a833d9cc4cd75c66e5ca77c177dad38e59996" dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap 2.2.6", - "slab", - "tokio", - "tokio-util", - "tracing", + "ahash 0.7.8", + "dashmap", + "hashbrown 0.12.3", + "once_cell", + "parking_lot 0.12.3", ] [[package]] -name = "h2" -version = "0.4.5" +name = "interprocess" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "d2f4e4a06d42fab3e85ab1b419ad32b09eab58b901d40c57935ff92db3287a13" dependencies = [ - "atomic-waker", - "bytes", - "fnv", + "doctest-file", "futures-core", - "futures-sink", - "http 1.1.0", - "indexmap 2.2.6", - "slab", + "libc", + "recvmsg", "tokio", - "tokio-util", - "tracing", + "widestring 1.1.0", + "windows-sys 0.52.0", ] [[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.13.2" +name = "io-lifetimes" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "ahash 0.8.11", + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", ] [[package]] -name = "hashbrown" -version = "0.14.5" +name = "ipconfig" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "ahash 0.8.11", - "allocator-api2", - "serde", + "socket2 0.5.7", + "widestring 1.1.0", + "windows-sys 0.48.0", + "winreg 0.50.0", ] [[package]] -name = "heck" -version = "0.3.3" +name = "ipnet" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] -name = "heck" -version = "0.4.1" +name = "is-terminal" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.52.0", +] [[package]] -name = "heck" -version = "0.5.0" +name = "is_terminal_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] -name = "hermit-abi" -version = "0.3.9" +name = "isahc" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" +dependencies = [ + "async-channel 1.9.0", + "castaway", + "crossbeam-utils", + "curl", + "curl-sys", + "encoding_rs", + "event-listener 2.5.3", + "futures-lite 1.13.0", + "http 0.2.12", + "log", + "mime", + "once_cell", + "polling 2.8.0", + "slab", + "sluice", + "tracing", + "tracing-futures", + "url", + "waker-fn", +] [[package]] -name = "hermit-abi" -version = "0.4.0" +name = "itertools" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] [[package]] -name = "hex" -version = "0.4.3" +name = "itertools" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" dependencies = [ - "serde", + "either", ] [[package]] -name = "hex-literal" -version = "0.4.1" +name = "itertools" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] [[package]] -name = "hickory-proto" -version = "0.24.1" +name = "itertools" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner 0.6.0", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.4.0", - "ipnet", - "once_cell", - "rand", - "thiserror", - "tinyvec", - "tokio", - "tracing", - "url", + "either", ] [[package]] -name = "hickory-resolver" -version = "0.24.1" +name = "itoa" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243" -dependencies = [ - "cfg-if", - "futures-util", - "hickory-proto", - "ipconfig", - "lru-cache", - "once_cell", - "parking_lot 0.12.3", - "rand", - "resolv-conf", - "smallvec", - "thiserror", - "tokio", - "tracing", +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jemalloc-sys" +version = "0.5.4+5.3.0-patched" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac6c1946e1cea1788cbfde01c993b52a10e2da07f4bac608228d1bed20bfebf2" +dependencies = [ + "cc", + "libc", ] [[package]] -name = "hmac" -version = "0.12.1" +name = "jemallocator" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "a0de374a9f8e63150e6f5e8a60cc14c668226d7a347d8aee1a45766e3c4dd3bc" dependencies = [ - "digest 0.10.7", + "jemalloc-sys", + "libc", ] [[package]] -name = "home" -version = "0.5.9" +name = "jobserver" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ - "windows-sys 0.52.0", + "libc", ] [[package]] -name = "hostname" -version = "0.3.1" +name = "js-sys" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ - "libc", - "match_cfg", - "winapi", + "wasm-bindgen", ] [[package]] -name = "http" -version = "0.2.12" +name = "jsonwebtoken" +version = "8.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" dependencies = [ - "bytes", - "fnv", - "itoa", + "base64 0.21.7", + "pem 1.1.1", + "ring 0.16.20", + "serde", + "serde_json", + "simple_asn1", ] [[package]] -name = "http" -version = "1.1.0" +name = "jsonwebtoken" +version = "9.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" dependencies = [ - "bytes", - "fnv", - "itoa", + "base64 0.21.7", + "js-sys", + "pem 3.0.4", + "ring 0.17.8", + "serde", + "serde_json", + "simple_asn1", ] [[package]] -name = "http-body" -version = "0.4.6" +name = "k256" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", + "cfg-if", + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", + "once_cell", + "sha2 0.10.8", + "signature 2.2.0", ] [[package]] -name = "http-body" -version = "1.0.0" +name = "keccak" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ - "bytes", - "http 1.1.0", + "cpufeatures", ] [[package]] -name = "http-body-util" -version = "0.1.2" +name = "keccak-asm" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +checksum = "422fbc7ff2f2f5bdffeb07718e5a5324dca72b0c9293d50df4026652385e3314" dependencies = [ - "bytes", - "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "pin-project-lite", + "digest 0.10.7", + "sha3-asm", ] [[package]] -name = "httparse" -version = "1.8.0" +name = "kv-log-macro" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] [[package]] -name = "httpdate" -version = "1.0.3" +name = "lalrpop" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" +dependencies = [ + "ascii-canvas", + "bit-set", + "ena", + "itertools 0.11.0", + "lalrpop-util", + "petgraph 0.6.5", + "pico-args", + "regex", + "regex-syntax 0.8.4", + "string_cache", + "term", + "tiny-keccak", + "unicode-xid", + "walkdir", +] [[package]] -name = "httpmock" +name = "lalrpop-util" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" +dependencies = [ + "regex-automata 0.4.7", +] + +[[package]] +name = "lambdaworks-crypto" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08ec9586ee0910472dec1a1f0f8acf52f0fdde93aea74d70d4a3107b4be0fd5b" +checksum = "7fb5d4f22241504f7c7b8d2c3a7d7835d7c07117f10bff2a7d96a9ef6ef217c3" dependencies = [ - "assert-json-diff", - "async-object-pool", - "async-std", - "async-trait", - "base64 0.21.7", - "basic-cookies", - "crossbeam-utils", - "form_urlencoded", - "futures-util", - "hyper 0.14.29", - "isahc", - "lazy_static", - "levenshtein", - "log", - "regex", + "lambdaworks-math", "serde", - "serde_json", - "serde_regex", - "similar", - "tokio", - "url", + "sha2 0.10.8", + "sha3 0.10.8", ] [[package]] -name = "humantime" -version = "2.1.0" +name = "lambdaworks-math" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "358e172628e713b80a530a59654154bfc45783a6ed70ea284839800cebdf8f97" +dependencies = [ + "serde", + "serde_json", +] [[package]] -name = "hyper" -version = "0.14.29" +name = "lapin" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" +checksum = "209b09a06f4bd4952a0fd0594f90d53cf4496b062f59acc838a2823e1bb7d95c" dependencies = [ - "bytes", - "futures-channel", + "amq-protocol", + "async-global-executor-trait", + "async-reactor-trait", + "async-trait", + "executor-trait", + "flume", "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2 0.5.7", - "tokio", - "tower-service", + "futures-io", + "parking_lot 0.12.3", + "pinky-swear", + "reactor-trait", + "serde", "tracing", - "want", + "waker-fn", ] [[package]] -name = "hyper" -version = "1.3.1" +name = "lazy_static" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "h2 0.4.5", - "http 1.1.0", - "http-body 1.0.0", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", + "spin 0.9.8", ] [[package]] -name = "hyper-named-pipe" -version = "0.1.0" +name = "lazycell" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b7d8abf35697b81a825e386fc151e0d503e8cb5fcb93cc8669c376dfd6f278" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "ledger-apdu" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe435806c197dfeaa5efcded5e623c4b8230fd28fdf1e91e7a86e40ef2acbf90" dependencies = [ - "hex", - "hyper 1.3.1", - "hyper-util", - "pin-project-lite", - "tokio", - "tower-service", - "winapi", + "arrayref", + "no-std-compat", + "snafu", ] [[package]] -name = "hyper-rustls" -version = "0.24.2" +name = "ledger-transport" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +checksum = "1117f2143d92c157197785bf57711d7b02f2cfa101e162f8ca7900fb7f976321" dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.29", - "log", - "rustls 0.21.12", - "rustls-native-certs 0.6.3", - "tokio", - "tokio-rustls 0.24.1", + "async-trait", + "ledger-apdu", ] [[package]] -name = "hyper-rustls" -version = "0.26.0" +name = "ledger-transport-hid" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" +checksum = "45ba81a1f5f24396b37211478aff7fbcd605dd4544df8dbed07b9da3c2057aee" dependencies = [ - "futures-util", - "http 1.1.0", - "hyper 1.3.1", - "hyper-util", + "byteorder", + "cfg-if", + "hex", + "hidapi", + "ledger-transport", + "libc", "log", - "rustls 0.22.4", - "rustls-native-certs 0.7.0", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.25.0", - "tower-service", + "thiserror", +] + +[[package]] +name = "levenshtein" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libloading" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", ] [[package]] -name = "hyper-rustls" -version = "0.27.2" +name = "libm" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libmimalloc-sys" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23aa6811d3bd4deb8a84dde645f943476d13b248d818edcf8ce0b2f37f036b44" dependencies = [ - "futures-util", - "http 1.1.0", - "hyper 1.3.1", - "hyper-util", - "rustls 0.23.10", - "rustls-pki-types", - "tokio", - "tokio-rustls 0.26.0", - "tower-service", + "cc", + "libc", ] [[package]] -name = "hyper-timeout" -version = "0.4.1" +name = "libnghttp2-sys" +version = "0.1.10+1.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +checksum = "959c25552127d2e1fa72f0e52548ec04fc386e827ba71a7bd01db46a447dc135" dependencies = [ - "hyper 0.14.29", - "pin-project-lite", - "tokio", - "tokio-io-timeout", + "cc", + "libc", ] [[package]] -name = "hyper-tls" -version = "0.5.0" +name = "libredox" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bytes", - "hyper 0.14.29", - "native-tls", - "tokio", - "tokio-native-tls", + "bitflags 2.6.0", + "libc", ] [[package]] -name = "hyper-tls" -version = "0.6.0" +name = "libsecp256k1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" dependencies = [ - "bytes", - "http-body-util", - "hyper 1.3.1", - "hyper-util", - "native-tls", - "tokio", - "tokio-native-tls", - "tower-service", + "arrayref", + "base64 0.13.1", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.8.5", + "serde", + "sha2 0.9.9", + "typenum", ] [[package]] -name = "hyper-util" -version = "0.1.5" +name = "libsecp256k1-core" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "hyper 1.3.1", - "pin-project-lite", - "socket2 0.5.7", - "tokio", - "tower", - "tower-service", - "tracing", + "crunchy", + "digest 0.9.0", + "subtle", ] [[package]] -name = "hyperlocal-next" -version = "0.9.0" +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf569d43fa9848e510358c07b80f4adf34084ddc28c6a4a651ee8474c070dcc" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" dependencies = [ - "hex", - "http-body-util", - "hyper 1.3.1", - "hyper-util", - "pin-project-lite", - "tokio", - "tower-service", + "libsecp256k1-core", ] [[package]] -name = "iana-time-zone" -version = "0.1.60" +name = "libsecp256k1-gen-genmult" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", + "libsecp256k1-core", ] [[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" +name = "libz-sys" +version = "1.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" dependencies = [ "cc", + "libc", + "pkg-config", + "vcpkg", ] [[package]] -name = "id-arena" -version = "2.2.1" +name = "linked-hash-map" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] -name = "ident_case" -version = "1.0.1" +name = "linux-raw-sys" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] -name = "idna" -version = "0.2.3" +name = "linux-raw-sys" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] -name = "idna" -version = "0.4.0" +name = "lock_api" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "autocfg", + "scopeguard", ] [[package]] -name = "idna" -version = "0.5.0" +name = "log" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "serde", + "value-bag", ] [[package]] -name = "impl-codec" -version = "0.6.0" +name = "lru" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" dependencies = [ - "parity-scale-codec", + "hashbrown 0.12.3", ] [[package]] -name = "impl-rlp" -version = "0.3.0" +name = "lru" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" dependencies = [ - "rlp", + "hashbrown 0.14.5", ] [[package]] -name = "impl-serde" -version = "0.4.0" +name = "lru-cache" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" dependencies = [ - "serde", + "linked-hash-map", ] [[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +name = "majin-blob-core" +version = "0.1.3" +source = "git+https://github.com/AbdelStark/majin-blob?branch=main#ac23e1584a81ee144fdc7d6912bcc5f1bf6f8818" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "lazy_static", + "majin-blob-eip-4844", + "majin-blob-types", + "num-bigint 0.4.6", + "num-traits 0.2.19", + "serde", + "serde_json", ] [[package]] -name = "indent" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f1a0777d972970f204fdf8ef319f1f4f8459131636d7e3c96c5d59570d0fa6" - -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +name = "majin-blob-eip-4844" +version = "0.1.3" +source = "git+https://github.com/AbdelStark/majin-blob?branch=main#ac23e1584a81ee144fdc7d6912bcc5f1bf6f8818" dependencies = [ - "autocfg", - "hashbrown 0.12.3", + "lazy_static", + "num-bigint 0.4.6", + "num-traits 0.2.19", "serde", + "serde_json", ] [[package]] -name = "indexmap" -version = "2.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +name = "majin-blob-types" +version = "0.1.3" +source = "git+https://github.com/AbdelStark/majin-blob?branch=main#ac23e1584a81ee144fdc7d6912bcc5f1bf6f8818" dependencies = [ - "equivalent", - "hashbrown 0.14.5", + "majin-blob-eip-4844", + "num-bigint 0.4.6", + "num-traits 0.2.19", + "rstest 0.19.0", "serde", + "serde_json", ] [[package]] -name = "indoc" -version = "2.0.5" +name = "maplit" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" [[package]] -name = "inout" -version = "0.1.3" +name = "match_cfg" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "block-padding", - "generic-array", -] +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" [[package]] -name = "instant" -version = "0.1.13" +name = "matchers" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "cfg-if", + "regex-automata 0.1.10", ] [[package]] -name = "interprocess" -version = "2.2.0" +name = "matches" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67bafc2f5dbdad79a6d925649758d5472647b416028099f0b829d1b67fdd47d3" -dependencies = [ - "doctest-file", - "futures-core", - "libc", - "recvmsg", - "tokio", - "widestring", - "windows-sys 0.52.0", -] +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] -name = "io-lifetimes" -version = "1.0.11" +name = "matrixmultiply" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +checksum = "916806ba0031cd542105d916a97c8572e1fa6dd79c9c51e7eb43a09ec2dd84c1" dependencies = [ - "hermit-abi 0.3.9", - "libc", - "windows-sys 0.48.0", + "rawpointer", ] [[package]] -name = "ipconfig" -version = "0.3.2" +name = "md-5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ - "socket2 0.5.7", - "widestring", - "windows-sys 0.48.0", - "winreg 0.50.0", + "cfg-if", + "digest 0.10.7", ] [[package]] -name = "ipnet" -version = "2.9.0" +name = "memchr" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] -name = "is_terminal_polyfill" -version = "1.70.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +name = "merlin" +version = "3.0.0" +source = "git+https://github.com/aptos-labs/merlin#3454ccc85e37355c729ba40e6dac6e867ddf59f5" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] [[package]] -name = "isahc" -version = "1.7.2" +name = "metrics" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" +checksum = "7b9b8653cec6897f73b519a43fba5ee3d50f62fe9af80b428accdcc093b4a849" dependencies = [ - "async-channel 1.9.0", - "castaway", - "crossbeam-utils", - "curl", - "curl-sys", - "encoding_rs", - "event-listener 2.5.3", - "futures-lite 1.13.0", - "http 0.2.12", - "log", - "mime", - "once_cell", - "polling 2.8.0", - "slab", - "sluice", - "tracing", - "tracing-futures", - "url", - "waker-fn", + "ahash 0.7.8", + "metrics-macros", + "portable-atomic 0.3.20", ] [[package]] -name = "itertools" -version = "0.10.5" +name = "metrics-macros" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "731f8ecebd9f3a4aa847dfe75455e4757a45da40a7793d2f0b1f9b6ed18b23f3" dependencies = [ - "either", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "itertools" -version = "0.11.0" +name = "mimalloc" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +checksum = "68914350ae34959d83f732418d51e2427a794055d0b9529f48259ac07af65633" dependencies = [ - "either", + "libmimalloc-sys", ] [[package]] -name = "itertools" -version = "0.12.1" +name = "mime" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ - "either", + "mime", + "unicase", ] [[package]] -name = "itertools" -version = "0.13.0" +name = "minilp" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +checksum = "82a7750a9e5076c660b7bec5e6457b4dbff402b9863c8d112891434e18fd5385" dependencies = [ - "either", + "log", + "sprs", ] [[package]] -name = "itoa" -version = "1.0.11" +name = "minimal-lexical" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] -name = "jobserver" -version = "0.1.31" +name = "miniz_oxide" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ - "libc", + "adler", ] [[package]] -name = "js-sys" -version = "0.3.69" +name = "mio" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ - "wasm-bindgen", + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", ] [[package]] -name = "jsonwebtoken" -version = "9.3.0" +name = "mio" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" +checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" dependencies = [ - "base64 0.21.7", - "js-sys", - "pem", - "ring", - "serde", - "serde_json", - "simple_asn1", + "hermit-abi 0.3.9", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", ] [[package]] -name = "k256" -version = "0.13.3" +name = "mirai-annotations" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" + +[[package]] +name = "mockall" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43766c2b5203b10de348ffe19f7e54564b64f3d6018ff7648d1e2d6d3a0f0a48" dependencies = [ "cfg-if", - "ecdsa 0.16.9", - "elliptic-curve 0.13.8", - "once_cell", - "sha2", - "signature 2.2.0", + "downcast", + "fragile", + "lazy_static", + "mockall_derive 0.12.1", + "predicates", + "predicates-tree", ] [[package]] -name = "keccak" -version = "0.1.5" +name = "mockall" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "d4c28b3fb6d753d28c20e826cd46ee611fda1cf3cde03a443a974043247c065a" dependencies = [ - "cpufeatures", + "cfg-if", + "downcast", + "fragile", + "mockall_derive 0.13.0", + "predicates", + "predicates-tree", ] [[package]] -name = "keccak-asm" -version = "0.1.1" +name = "mockall_derive" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47a3633291834c4fbebf8673acbc1b04ec9d151418ff9b8e26dcd79129928758" +checksum = "af7cbce79ec385a1d4f54baa90a76401eb15d9cab93685f62e7e9f942aa00ae2" dependencies = [ - "digest 0.10.7", - "sha3-asm", + "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "kv-log-macro" -version = "1.0.7" +name = "mockall_derive" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +checksum = "341014e7f530314e9a1fdbc7400b244efea7122662c96bfa248c31da5bfb2020" dependencies = [ - "log", + "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "lalrpop" -version = "0.20.2" +name = "mockall_double" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" +checksum = "f1ca96e5ac35256ae3e13536edd39b172b88f41615e1d7b653c8ad24524113e8" dependencies = [ - "ascii-canvas", - "bit-set", - "ena", - "itertools 0.11.0", - "lalrpop-util", - "petgraph", - "pico-args", - "regex", - "regex-syntax 0.8.4", - "string_cache", - "term", - "tiny-keccak", - "unicode-xid", - "walkdir", + "cfg-if", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "lalrpop-util" -version = "0.20.2" +name = "mongodb" +version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" +checksum = "ef206acb1b72389b49bc9985efe7eb1f8a9bb18e5680d262fac26c07f44025f1" dependencies = [ - "regex-automata 0.4.7", + "async-trait", + "base64 0.13.1", + "bitflags 1.3.2", + "bson", + "chrono", + "derivative", + "derive_more", + "futures-core", + "futures-executor", + "futures-io", + "futures-util", + "hex", + "hmac 0.12.1", + "lazy_static", + "md-5", + "pbkdf2 0.11.0", + "percent-encoding", + "rand 0.8.5", + "rustc_version_runtime", + "rustls 0.21.12", + "rustls-pemfile 1.0.4", + "serde", + "serde_bytes", + "serde_with 1.14.0", + "sha-1", + "sha2 0.10.8", + "socket2 0.4.10", + "stringprep", + "strsim 0.10.0", + "take_mut", + "thiserror", + "tokio", + "tokio-rustls 0.24.1", + "tokio-util", + "trust-dns-proto", + "trust-dns-resolver", + "typed-builder", + "uuid 1.10.0", + "webpki-roots 0.25.4", ] [[package]] -name = "lambdaworks-crypto" -version = "0.7.0" +name = "more-asserts" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb5d4f22241504f7c7b8d2c3a7d7835d7c07117f10bff2a7d96a9ef6ef217c3" +checksum = "1fafa6961cabd9c63bcd77a45d7e3b7f3b552b70417831fb0f56db717e72407e" + +[[package]] +name = "move-abigen" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "lambdaworks-math", + "anyhow", + "bcs 0.1.4", + "heck 0.4.1", + "log", + "move-binary-format", + "move-bytecode-verifier", + "move-command-line-common", + "move-core-types", + "move-model", "serde", - "sha2", - "sha3", ] [[package]] -name = "lambdaworks-math" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "358e172628e713b80a530a59654154bfc45783a6ed70ea284839800cebdf8f97" +name = "move-binary-format" +version = "0.0.3" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ + "anyhow", + "backtrace", + "indexmap 1.9.3", + "move-bytecode-spec", + "move-core-types", + "ref-cast", "serde", - "serde_json", + "variant_count", ] [[package]] -name = "lapin" -version = "2.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fae02c316a8a5922ce7518afa6b6c00e9a099f8e59587567e3331efdd11b8ceb" +name = "move-borrow-graph" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" + +[[package]] +name = "move-bytecode-source-map" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "amq-protocol", - "async-global-executor-trait", - "async-reactor-trait", - "async-trait", - "executor-trait", - "flume", - "futures-core", - "futures-io", - "parking_lot 0.12.3", - "pinky-swear", - "reactor-trait", + "anyhow", + "bcs 0.1.4", + "move-binary-format", + "move-command-line-common", + "move-core-types", + "move-ir-types", + "move-symbol-pool", "serde", - "tracing", - "waker-fn", ] [[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +name = "move-bytecode-spec" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "spin 0.5.2", + "once_cell", + "quote", + "syn 1.0.109", ] [[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - -[[package]] -name = "levenshtein" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" - -[[package]] -name = "libc" -version = "0.2.155" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" - -[[package]] -name = "libloading" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +name = "move-bytecode-utils" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "cfg-if", - "windows-targets 0.52.5", + "anyhow", + "move-binary-format", + "move-core-types", + "petgraph 0.5.1", + "serde-reflection", ] [[package]] -name = "libm" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" - -[[package]] -name = "libmimalloc-sys" -version = "0.1.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7bb23d733dfcc8af652a78b7bf232f0e967710d044732185e561e47c0336b6" +name = "move-bytecode-verifier" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "cc", - "libc", + "fail", + "move-binary-format", + "move-borrow-graph", + "move-core-types", + "petgraph 0.5.1", + "serde", + "typed-arena", ] [[package]] -name = "libnghttp2-sys" -version = "0.1.10+1.61.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "959c25552127d2e1fa72f0e52548ec04fc386e827ba71a7bd01db46a447dc135" +name = "move-bytecode-viewer" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "cc", - "libc", + "anyhow", + "clap 4.5.14", + "crossterm 0.26.1", + "move-binary-format", + "move-bytecode-source-map", + "move-disassembler", + "regex", + "tui", ] [[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +name = "move-cli" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "bitflags 2.5.0", - "libc", + "anyhow", + "clap 4.5.14", + "codespan-reporting", + "colored", + "move-binary-format", + "move-bytecode-viewer", + "move-command-line-common", + "move-compiler", + "move-compiler-v2", + "move-core-types", + "move-coverage", + "move-disassembler", + "move-docgen", + "move-errmapgen", + "move-model", + "move-package", + "move-prover", + "move-stdlib", + "move-unit-test", + "move-vm-runtime", + "move-vm-test-utils", + "once_cell", + "tempfile", ] [[package]] -name = "libz-sys" -version = "1.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" +name = "move-command-line-common" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", + "anyhow", + "difference", + "dirs-next", + "hex", + "move-core-types", + "num-bigint 0.3.3", + "once_cell", + "serde", + "sha2 0.9.9", + "walkdir", ] [[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +name = "move-compiler" +version = "0.0.1" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "anyhow", + "bcs 0.1.4", + "clap 4.5.14", + "codespan-reporting", + "hex", + "move-binary-format", + "move-borrow-graph", + "move-bytecode-source-map", + "move-bytecode-verifier", + "move-command-line-common", + "move-core-types", + "move-ir-to-bytecode", + "move-ir-types", + "move-symbol-pool", + "once_cell", + "petgraph 0.5.1", + "regex", + "sha3 0.9.1", + "tempfile", +] [[package]] -name = "lock_api" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +name = "move-compiler-v2" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "autocfg", - "scopeguard", + "abstract-domain-derive", + "anyhow", + "bcs 0.1.4", + "clap 4.5.14", + "codespan-reporting", + "ethnum", + "flexi_logger", + "im", + "itertools 0.13.0", + "log", + "move-binary-format", + "move-bytecode-source-map", + "move-bytecode-verifier", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-disassembler", + "move-ir-types", + "move-model", + "move-stackless-bytecode", + "move-symbol-pool", + "num", + "once_cell", + "petgraph 0.5.1", ] [[package]] -name = "log" -version = "0.4.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +name = "move-core-types" +version = "0.0.4" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "value-bag", + "anyhow", + "bcs 0.1.4", + "bytes", + "ethnum", + "hashbrown 0.14.5", + "hex", + "num", + "once_cell", + "primitive-types 0.10.1", + "rand 0.8.5", + "ref-cast", + "serde", + "serde_bytes", + "thiserror", + "uint", ] [[package]] -name = "lru" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +name = "move-coverage" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "hashbrown 0.14.5", + "anyhow", + "bcs 0.1.4", + "clap 4.5.14", + "codespan", + "colored", + "move-binary-format", + "move-bytecode-source-map", + "move-command-line-common", + "move-core-types", + "move-ir-types", + "petgraph 0.5.1", + "serde", ] [[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +name = "move-disassembler" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "linked-hash-map", + "anyhow", + "clap 4.5.14", + "colored", + "move-binary-format", + "move-bytecode-source-map", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-coverage", + "move-ir-types", ] [[package]] -name = "majin-blob-core" -version = "0.1.3" -source = "git+https://github.com/AbdelStark/majin-blob?branch=main#ac23e1584a81ee144fdc7d6912bcc5f1bf6f8818" +name = "move-docgen" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "lazy_static", - "majin-blob-eip-4844", - "majin-blob-types", - "num-bigint", - "num-traits 0.2.19", + "anyhow", + "clap 4.5.14", + "codespan", + "codespan-reporting", + "itertools 0.13.0", + "log", + "move-compiler", + "move-core-types", + "move-model", + "once_cell", + "regex", "serde", - "serde_json", ] [[package]] -name = "majin-blob-eip-4844" -version = "0.1.3" -source = "git+https://github.com/AbdelStark/majin-blob?branch=main#ac23e1584a81ee144fdc7d6912bcc5f1bf6f8818" +name = "move-errmapgen" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "lazy_static", - "num-bigint", - "num-traits 0.2.19", + "anyhow", + "move-command-line-common", + "move-core-types", + "move-model", "serde", - "serde_json", ] [[package]] -name = "majin-blob-types" -version = "0.1.3" -source = "git+https://github.com/AbdelStark/majin-blob?branch=main#ac23e1584a81ee144fdc7d6912bcc5f1bf6f8818" +name = "move-ir-to-bytecode" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "majin-blob-eip-4844", - "num-bigint", - "num-traits 0.2.19", - "rstest 0.19.0", - "serde", - "serde_json", + "anyhow", + "codespan-reporting", + "log", + "move-binary-format", + "move-bytecode-source-map", + "move-command-line-common", + "move-core-types", + "move-ir-to-bytecode-syntax", + "move-ir-types", + "move-symbol-pool", + "ouroboros", ] [[package]] -name = "match_cfg" +name = "move-ir-to-bytecode-syntax" version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "anyhow", + "hex", + "move-command-line-common", + "move-core-types", + "move-ir-types", + "move-symbol-pool", +] [[package]] -name = "matchers" +name = "move-ir-types" version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "regex-automata 0.1.10", + "hex", + "move-command-line-common", + "move-core-types", + "move-symbol-pool", + "once_cell", + "serde", ] [[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" +name = "move-model" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "anyhow", + "codespan", + "codespan-reporting", + "internment", + "itertools 0.13.0", + "log", + "move-binary-format", + "move-bytecode-source-map", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-disassembler", + "move-ir-types", + "move-symbol-pool", + "num", + "num-traits 0.2.19", + "once_cell", + "regex", + "serde", +] [[package]] -name = "matchit" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +name = "move-package" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +dependencies = [ + "anyhow", + "clap 4.5.14", + "colored", + "itertools 0.13.0", + "move-abigen", + "move-binary-format", + "move-bytecode-source-map", + "move-bytecode-utils", + "move-command-line-common", + "move-compiler", + "move-compiler-v2", + "move-core-types", + "move-docgen", + "move-model", + "move-symbol-pool", + "named-lock", + "once_cell", + "petgraph 0.5.1", + "regex", + "serde", + "serde_yaml 0.8.26", + "sha2 0.9.9", + "tempfile", + "termcolor", + "toml 0.7.8", + "walkdir", + "whoami", +] [[package]] -name = "matrixmultiply" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "916806ba0031cd542105d916a97c8572e1fa6dd79c9c51e7eb43a09ec2dd84c1" +name = "move-prover" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "rawpointer", + "anyhow", + "atty", + "clap 4.5.14", + "codespan-reporting", + "itertools 0.13.0", + "log", + "move-abigen", + "move-command-line-common", + "move-compiler", + "move-compiler-v2", + "move-docgen", + "move-errmapgen", + "move-model", + "move-prover-boogie-backend", + "move-prover-bytecode-pipeline", + "move-stackless-bytecode", + "once_cell", + "serde", + "simplelog", + "toml 0.7.8", ] [[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +name = "move-prover-boogie-backend" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "cfg-if", - "digest 0.10.7", + "anyhow", + "async-trait", + "codespan", + "codespan-reporting", + "futures", + "itertools 0.13.0", + "log", + "move-binary-format", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-model", + "move-prover-bytecode-pipeline", + "move-stackless-bytecode", + "num", + "once_cell", + "pretty", + "rand 0.7.3", + "regex", + "serde", + "tera", + "tokio", ] [[package]] -name = "memchr" -version = "2.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" - -[[package]] -name = "metrics" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b9b8653cec6897f73b519a43fba5ee3d50f62fe9af80b428accdcc093b4a849" +name = "move-prover-bytecode-pipeline" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "ahash 0.7.8", - "metrics-macros", - "portable-atomic 0.3.20", + "abstract-domain-derive", + "anyhow", + "codespan-reporting", + "itertools 0.13.0", + "log", + "move-binary-format", + "move-core-types", + "move-model", + "move-stackless-bytecode", + "serde", ] [[package]] -name = "metrics-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "731f8ecebd9f3a4aa847dfe75455e4757a45da40a7793d2f0b1f9b6ed18b23f3" +name = "move-resource-viewer" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "anyhow", + "hex", + "move-binary-format", + "move-bytecode-utils", + "move-core-types", + "serde", ] [[package]] -name = "mimalloc" -version = "0.1.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9186d86b79b52f4a77af65604b51225e8db1d6ee7e3f41aec1e40829c71a176" +name = "move-stackless-bytecode" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "libmimalloc-sys", + "abstract-domain-derive", + "codespan-reporting", + "ethnum", + "im", + "itertools 0.13.0", + "log", + "move-binary-format", + "move-core-types", + "move-model", + "num", + "paste", + "petgraph 0.5.1", ] [[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "minilp" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82a7750a9e5076c660b7bec5e6457b4dbff402b9863c8d112891434e18fd5385" +name = "move-stdlib" +version = "0.1.1" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ + "anyhow", + "hex", "log", - "sprs", + "move-binary-format", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-docgen", + "move-errmapgen", + "move-prover", + "move-vm-runtime", + "move-vm-types", + "sha2 0.9.9", + "sha3 0.9.1", + "smallvec", + "walkdir", ] [[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +name = "move-symbol-pool" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "adler", + "once_cell", + "serde", ] [[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +name = "move-table-extension" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", + "better_any", + "bytes", + "move-binary-format", + "move-core-types", + "move-vm-runtime", + "move-vm-types", + "sha3 0.9.1", + "smallvec", ] [[package]] -name = "mirai-annotations" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" - -[[package]] -name = "mockall" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43766c2b5203b10de348ffe19f7e54564b64f3d6018ff7648d1e2d6d3a0f0a48" +name = "move-unit-test" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "cfg-if", - "downcast", - "fragile", - "lazy_static", - "mockall_derive 0.12.1", - "predicates", - "predicates-tree", + "anyhow", + "better_any", + "clap 4.5.14", + "codespan-reporting", + "colored", + "itertools 0.13.0", + "move-binary-format", + "move-bytecode-utils", + "move-command-line-common", + "move-compiler", + "move-core-types", + "move-ir-types", + "move-resource-viewer", + "move-stdlib", + "move-symbol-pool", + "move-table-extension", + "move-vm-runtime", + "move-vm-test-utils", + "once_cell", + "rayon", + "regex", ] [[package]] -name = "mockall" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c28b3fb6d753d28c20e826cd46ee611fda1cf3cde03a443a974043247c065a" +name = "move-vm-runtime" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "cfg-if", - "downcast", - "fragile", - "mockall_derive 0.13.0", - "predicates", - "predicates-tree", + "better_any", + "bytes", + "fail", + "hashbrown 0.14.5", + "lazy_static", + "lru 0.7.8", + "move-binary-format", + "move-bytecode-verifier", + "move-core-types", + "move-vm-types", + "once_cell", + "parking_lot 0.12.3", + "serde", + "sha3 0.9.1", + "tracing", + "triomphe", + "typed-arena", ] [[package]] -name = "mockall_derive" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af7cbce79ec385a1d4f54baa90a76401eb15d9cab93685f62e7e9f942aa00ae2" +name = "move-vm-test-utils" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 2.0.66", + "anyhow", + "bytes", + "move-binary-format", + "move-bytecode-utils", + "move-core-types", + "move-vm-types", + "once_cell", + "serde", ] [[package]] -name = "mockall_derive" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "341014e7f530314e9a1fdbc7400b244efea7122662c96bfa248c31da5bfb2020" +name = "move-vm-types" +version = "0.1.0" +source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 2.0.66", + "bcs 0.1.4", + "bytes", + "derivative", + "itertools 0.13.0", + "move-binary-format", + "move-core-types", + "serde", + "smallbitvec", + "smallvec", + "triomphe", ] [[package]] -name = "mockall_double" -version = "0.3.1" +name = "multer" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1ca96e5ac35256ae3e13536edd39b172b88f41615e1d7b653c8ad24524113e8" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 2.0.66", + "bytes", + "encoding_rs", + "futures-util", + "http 1.1.0", + "httparse", + "memchr", + "mime", + "spin 0.9.8", + "tokio", + "version_check", ] [[package]] -name = "mongodb" -version = "2.8.2" +name = "named-lock" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef206acb1b72389b49bc9985efe7eb1f8a9bb18e5680d262fac26c07f44025f1" +checksum = "40a3eb6b7c682b65d1f631ec3176829d72ab450b3aacdd3f719bf220822e59ac" dependencies = [ - "async-trait", - "base64 0.13.1", - "bitflags 1.3.2", - "bson", - "chrono", - "derivative", - "derive_more", - "futures-core", - "futures-executor", - "futures-io", - "futures-util", - "hex", - "hmac", - "lazy_static", - "md-5", - "pbkdf2 0.11.0", - "percent-encoding", - "rand", - "rustc_version_runtime", - "rustls 0.21.12", - "rustls-pemfile 1.0.4", - "serde", - "serde_bytes", - "serde_with 1.14.0", - "sha-1", - "sha2", - "socket2 0.4.10", - "stringprep", - "strsim 0.10.0", - "take_mut", + "libc", + "once_cell", + "parking_lot 0.12.3", "thiserror", - "tokio", - "tokio-rustls 0.24.1", - "tokio-util", - "trust-dns-proto", - "trust-dns-resolver", - "typed-builder", - "uuid 1.8.0", - "webpki-roots 0.25.4", + "widestring 0.5.1", + "winapi 0.3.9", ] [[package]] @@ -6014,10 +9095,53 @@ dependencies = [ ] [[package]] -name = "new_debug_unreachable" -version = "1.0.6" +name = "neptune" +version = "13.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06626c9ac04c894e9a23d061ba1309f28506cdc5fe64156d28a15fb57fc8e438" +dependencies = [ + "bellpepper", + "bellpepper-core", + "blake2s_simd", + "blstrs", + "byteorder", + "ff 0.13.0", + "generic-array", + "log", + "pasta_curves", + "serde", + "trait-set", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nix" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "no-std-compat" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" + +[[package]] +name = "nodrop" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" [[package]] name = "nom" @@ -6036,7 +9160,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ "overload", - "winapi", + "winapi 0.3.9", +] + +[[package]] +name = "nu-ansi-term" +version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c073d3c1930d0751774acf49e66653acecb416c3a54c6ec095a9b11caddb5a68" +dependencies = [ + "windows-sys 0.48.0", ] [[package]] @@ -6045,7 +9178,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" dependencies = [ - "num-bigint", + "num-bigint 0.4.6", "num-complex 0.4.6", "num-integer", "num-iter", @@ -6055,16 +9188,45 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.5" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" +dependencies = [ + "autocfg", + "num-integer", + "num-traits 0.2.19", + "rand 0.7.3", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits 0.2.19", - "rand", + "rand 0.8.5", "serde", ] +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits 0.2.19", + "rand 0.8.5", + "smallvec", + "zeroize", +] + [[package]] name = "num-complex" version = "0.2.4" @@ -6090,6 +9252,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "num-integer" version = "0.1.46" @@ -6116,7 +9289,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64a5fe11d4135c3bcdf3a95b18b194afa9608a5f6ff034f5d857bc9a27fb0119" dependencies = [ - "num-bigint", + "num-bigint 0.4.6", "num-integer", "num-traits 0.2.19", ] @@ -6127,14 +9300,14 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e238432a7881ec7164503ccc516c014bf009be7984cde1ba56837862543bdec3" dependencies = [ - "bitvec", + "bitvec 1.0.1", "either", - "lru", - "num-bigint", + "lru 0.12.4", + "num-bigint 0.4.6", "num-integer", "num-modular", "num-traits 0.2.19", - "rand", + "rand 0.8.5", ] [[package]] @@ -6143,7 +9316,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "num-bigint", + "num-bigint 0.4.6", "num-integer", "num-traits 0.2.19", ] @@ -6179,22 +9352,22 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -6256,17 +9429,23 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "oorandom" -version = "11.1.3" +version = "11.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" + +[[package]] +name = "opaque-debug" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", "foreign-types", "libc", @@ -6283,7 +9462,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -6294,9 +9473,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" dependencies = [ "cc", "libc", @@ -6314,7 +9493,7 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" name = "orchestrator" version = "0.1.0" dependencies = [ - "alloy 0.1.2", + "alloy 0.2.1", "arc-swap", "assert_matches", "async-std", @@ -6327,7 +9506,7 @@ dependencies = [ "bincode 1.3.3", "bytes", "c-kzg", - "cairo-vm 1.0.0-rc3", + "cairo-vm 1.0.0-rc5", "color-eyre", "da-client-interface", "dotenvy", @@ -6336,7 +9515,7 @@ dependencies = [ "futures", "hex", "httpmock", - "hyper 0.14.29", + "hyper 0.14.30", "lazy_static", "log", "majin-blob-core", @@ -6345,27 +9524,50 @@ dependencies = [ "mockall_double", "mongodb", "num", - "num-bigint", + "num-bigint 0.4.6", "num-traits 0.2.19", "omniqueue", "prover-client-interface", - "rstest 0.18.2", + "rstest 0.22.0", "serde", "serde_json", "settlement-client-interface", "sharp-service", "snos", "starknet", - "starknet-core 0.9.0", + "starknet-core", "starknet-settlement-client", "strum_macros 0.26.4", "thiserror", "tokio", "tracing", - "tracing-subscriber", + "tracing-subscriber 0.3.18", "url", "utils", - "uuid 1.8.0", + "uuid 1.10.0", +] + +[[package]] +name = "ouroboros" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1358bd1558bd2a083fed428ffeda486fbfb323e698cdda7794259d592ca72db" +dependencies = [ + "aliasable", + "ouroboros_macro", +] + +[[package]] +name = "ouroboros_macro" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7d21ccd03305a674437ee1248f3ab5d4b1db095cf1caf49f1713ddf61956b7" +dependencies = [ + "Inflector", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -6397,13 +9599,13 @@ dependencies = [ "der 0.7.9", "des", "hex", - "hmac", + "hmac 0.12.1", "pkcs12", "pkcs5", - "rand", + "rand 0.8.5", "rc2", "sha1", - "sha2", + "sha2 0.10.8", "thiserror", "x509-parser", ] @@ -6416,7 +9618,42 @@ checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" dependencies = [ "ecdsa 0.14.8", "elliptic-curve 0.12.3", - "sha2", + "sha2 0.10.8", +] + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa 0.16.9", + "elliptic-curve 0.13.8", + "primeorder", + "sha2 0.10.8", +] + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group 0.13.0", +] + +[[package]] +name = "parity-scale-codec" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" +dependencies = [ + "arrayvec 0.7.4", + "bitvec 0.20.4", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive 2.3.1", + "serde", ] [[package]] @@ -6425,21 +9662,33 @@ version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ - "arrayvec", - "bitvec", + "arrayvec 0.7.4", + "bitvec 1.0.1", "byte-slice-cast", "impl-trait-for-tuples", - "parity-scale-codec-derive", + "parity-scale-codec-derive 3.6.12", "serde", ] +[[package]] +name = "parity-scale-codec-derive" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "parity-scale-codec-derive" version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", "syn 1.0.109", @@ -6483,7 +9732,7 @@ dependencies = [ "libc", "redox_syscall 0.2.16", "smallvec", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -6494,9 +9743,9 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.2", + "redox_syscall 0.5.3", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -6521,7 +9770,35 @@ dependencies = [ "regex", "regex-syntax 0.8.4", "structmeta", - "syn 2.0.66", + "syn 2.0.72", +] + +[[package]] +name = "parse-zoneinfo" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" +dependencies = [ + "regex", +] + +[[package]] +name = "passkey-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "499cff8432e71c5f8784d9645aac0f9fca604d67f59b68a606170b5e229c6538" +dependencies = [ + "bitflags 2.6.0", + "ciborium", + "coset", + "data-encoding", + "indexmap 2.3.0", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.8", + "strum 0.25.0", + "typeshare", ] [[package]] @@ -6531,7 +9808,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" dependencies = [ "base64ct", - "rand_core", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "pasta_curves" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e57598f73cc7e1b2ac63c79c517b31a0877cd7c402cdcaa311b5208de7a095" +dependencies = [ + "blake2b_simd", + "ff 0.13.0", + "group 0.13.0", + "hex", + "lazy_static", + "rand 0.8.5", + "serde", + "static_assertions", "subtle", ] @@ -6553,18 +9847,18 @@ version = "0.12.0" source = "git+https://github.com/Moonsong-Labs/pathfinder?rev=49a2de4ef52726d1fb5ef906ff95f48af8076169#49a2de4ef52726d1fb5ef906ff95f48af8076169" dependencies = [ "anyhow", - "bitvec", + "bitvec 1.0.1", "fake", "metrics", - "num-bigint", + "num-bigint 0.4.6", "paste", "pathfinder-crypto", - "primitive-types", - "rand", + "primitive-types 0.12.2", + "rand 0.8.5", "serde", "serde_json", - "serde_with 3.8.1", - "sha3", + "serde_with 3.9.0", + "sha3 0.10.8", "thiserror", "vergen", ] @@ -6574,9 +9868,9 @@ name = "pathfinder-crypto" version = "0.12.0" source = "git+https://github.com/Moonsong-Labs/pathfinder?rev=49a2de4ef52726d1fb5ef906ff95f48af8076169#49a2de4ef52726d1fb5ef906ff95f48af8076169" dependencies = [ - "bitvec", + "bitvec 1.0.1", "fake", - "rand", + "rand 0.8.5", "serde", ] @@ -6586,13 +9880,32 @@ version = "0.12.0" source = "git+https://github.com/Moonsong-Labs/pathfinder?rev=49a2de4ef52726d1fb5ef906ff95f48af8076169#49a2de4ef52726d1fb5ef906ff95f48af8076169" dependencies = [ "anyhow", - "num-bigint", + "num-bigint 0.4.6", "pathfinder-common", "pathfinder-crypto", - "primitive-types", + "primitive-types 0.12.2", "serde", "serde_json", - "serde_with 3.8.1", + "serde_with 3.9.0", +] + +[[package]] +name = "pbjson" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "048f9ac93c1eab514f9470c4bc8d97ca2a0a236b84f45cc19d69a59fc11467f6" +dependencies = [ + "base64 0.13.1", + "serde", +] + +[[package]] +name = "pbkdf2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +dependencies = [ + "crypto-mac 0.8.0", ] [[package]] @@ -6602,9 +9915,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ "digest 0.10.7", - "hmac", + "hmac 0.12.1", "password-hash", - "sha2", + "sha2 0.10.8", ] [[package]] @@ -6614,7 +9927,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", - "hmac", + "hmac 0.12.1", +] + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", ] [[package]] @@ -6644,23 +9966,67 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.10" +version = "2.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" +checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" dependencies = [ "memchr", "thiserror", "ucd-trie", ] +[[package]] +name = "pest_derive" +version = "2.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.72", +] + +[[package]] +name = "pest_meta" +version = "2.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" +dependencies = [ + "once_cell", + "pest", + "sha2 0.10.8", +] + +[[package]] +name = "petgraph" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" +dependencies = [ + "fixedbitset 0.2.0", + "indexmap 1.9.3", +] + [[package]] name = "petgraph" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ - "fixedbitset", - "indexmap 2.2.6", + "fixedbitset 0.4.2", + "indexmap 2.3.0", ] [[package]] @@ -6683,6 +10049,16 @@ dependencies = [ "phf_shared 0.11.2", ] +[[package]] +name = "phf_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +dependencies = [ + "phf_generator", + "phf_shared 0.11.2", +] + [[package]] name = "phf_generator" version = "0.11.2" @@ -6690,7 +10066,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" dependencies = [ "phf_shared 0.11.2", - "rand", + "rand 0.8.5", ] [[package]] @@ -6703,7 +10079,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -6747,7 +10123,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -6785,6 +10161,17 @@ dependencies = [ "futures-io", ] +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der 0.7.9", + "pkcs8 0.10.2", + "spki 0.7.3", +] + [[package]] name = "pkcs12" version = "0.1.0" @@ -6801,45 +10188,169 @@ dependencies = [ ] [[package]] -name = "pkcs5" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6" +name = "pkcs5" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e847e2c91a18bfa887dd028ec33f2fe6f25db77db3619024764914affe8b69a6" +dependencies = [ + "aes", + "cbc", + "der 0.7.9", + "pbkdf2 0.12.2", + "scrypt 0.11.0", + "sha2 0.10.8", + "spki 0.7.3", +] + +[[package]] +name = "pkcs8" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +dependencies = [ + "der 0.6.1", + "spki 0.6.0", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der 0.7.9", + "spki 0.7.3", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "plotters" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3" +dependencies = [ + "num-traits 0.2.19", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7" + +[[package]] +name = "plotters-svg" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "poem" +version = "3.0.1" +source = "git+https://github.com/poem-web/poem.git?rev=809b2816d3504beeba140fef3fdfe9432d654c5b#809b2816d3504beeba140fef3fdfe9432d654c5b" dependencies = [ - "aes", - "cbc", - "der 0.7.9", - "pbkdf2 0.12.2", - "scrypt 0.11.0", - "sha2", - "spki 0.7.3", + "anyhow", + "bytes", + "chrono", + "cookie 0.18.1", + "futures-util", + "headers", + "http 1.1.0", + "http-body-util", + "hyper 1.4.1", + "hyper-util", + "mime", + "multer", + "nix", + "parking_lot 0.12.3", + "percent-encoding", + "pin-project-lite", + "poem-derive", + "quick-xml", + "regex", + "rfc7239", + "rustls-pemfile 2.1.3", + "serde", + "serde_json", + "serde_urlencoded", + "serde_yaml 0.9.34+deprecated", + "smallvec", + "sync_wrapper 1.0.1", + "tempfile", + "thiserror", + "time", + "tokio", + "tokio-rustls 0.25.0", + "tokio-stream", + "tokio-util", + "tracing", + "wildmatch", ] [[package]] -name = "pkcs8" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +name = "poem-derive" +version = "3.0.0" +source = "git+https://github.com/poem-web/poem.git?rev=809b2816d3504beeba140fef3fdfe9432d654c5b#809b2816d3504beeba140fef3fdfe9432d654c5b" dependencies = [ - "der 0.6.1", - "spki 0.6.0", + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "syn 2.0.72", ] [[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +name = "poem-openapi" +version = "5.0.2" +source = "git+https://github.com/poem-web/poem.git?rev=809b2816d3504beeba140fef3fdfe9432d654c5b#809b2816d3504beeba140fef3fdfe9432d654c5b" dependencies = [ - "der 0.7.9", - "spki 0.7.3", + "base64 0.22.1", + "bytes", + "derive_more", + "futures-util", + "indexmap 2.3.0", + "mime", + "num-traits 0.2.19", + "poem", + "poem-openapi-derive", + "quick-xml", + "regex", + "serde", + "serde_json", + "serde_urlencoded", + "serde_yaml 0.9.34+deprecated", + "thiserror", + "tokio", + "url", ] [[package]] -name = "pkg-config" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +name = "poem-openapi-derive" +version = "5.0.2" +source = "git+https://github.com/poem-web/poem.git?rev=809b2816d3504beeba140fef3fdfe9432d654c5b#809b2816d3504beeba140fef3fdfe9432d654c5b" +dependencies = [ + "darling 0.20.10", + "http 1.1.0", + "indexmap 2.3.0", + "mime", + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "regex", + "syn 2.0.72", + "thiserror", +] [[package]] name = "polling" @@ -6872,20 +10383,42 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + [[package]] name = "portable-atomic" version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e30165d31df606f5726b090ec7592c308a0eaf61721ff64c9a3018e344a8753e" dependencies = [ - "portable-atomic 1.6.0", + "portable-atomic 1.7.0", ] [[package]] name = "portable-atomic" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" + +[[package]] +name = "poseidon-ark" +version = "0.0.1" +source = "git+https://github.com/arnaucube/poseidon-ark.git?rev=6d2487aa1308d9d3860a2b724c485d73095c1c68#6d2487aa1308d9d3860a2b724c485d73095c1c68" +dependencies = [ + "ark-bn254", + "ark-ff 0.4.2", + "ark-std 0.4.0", +] [[package]] name = "powerfmt" @@ -6895,9 +10428,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "precomputed-hash" @@ -6907,9 +10443,9 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "predicates" -version = "3.1.0" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b87bfd4605926cdfefc1c3b5f8fe560e3feca9d5552cf68c466d3d8236c7e8" +checksum = "7e9086cc7640c29a356d1a29fd134380bee9d8f79a17410aa76e7ad295f42c97" dependencies = [ "anstyle", "predicates-core", @@ -6917,20 +10453,30 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" +checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" [[package]] name = "predicates-tree" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" dependencies = [ "predicates-core", "termtree", ] +[[package]] +name = "pretty" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9940b913ee56ddd94aec2d3cd179dd47068236f42a1a6415ccf9d880ce2a61" +dependencies = [ + "arrayvec 0.5.2", + "typed-arena", +] + [[package]] name = "prettyplease" version = "0.2.20" @@ -6938,7 +10484,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.66", + "syn 2.0.72", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve 0.13.8", +] + +[[package]] +name = "primitive-types" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e4722c697a58a99d5d06a08c30821d7c082a4632198de1eaa5a6c22ef42373" +dependencies = [ + "fixed-hash 0.7.0", + "impl-codec 0.5.1", + "impl-serde 0.3.2", + "uint", ] [[package]] @@ -6947,13 +10514,23 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ - "fixed-hash", - "impl-codec", + "fixed-hash 0.8.0", + "impl-codec 0.6.0", "impl-rlp", - "impl-serde", + "impl-serde 0.4.0", "uint", ] +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + [[package]] name = "proc-macro-crate" version = "3.1.0" @@ -6987,28 +10564,54 @@ dependencies = [ "version_check", ] +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro-nested" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" + [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] +[[package]] +name = "prometheus" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot 0.12.3", + "thiserror", +] + [[package]] name = "proptest" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" +checksum = "b4c2511913b88df1637da85cc8d96ec8e43a3f8bb8ccb71ee1ac240d6f3df58d" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.5.0", + "bitflags 2.6.0", "lazy_static", "num-traits 0.2.19", - "rand", - "rand_chacha", + "rand 0.8.5", + "rand_chacha 0.3.1", "rand_xorshift", "regex-syntax 0.8.4", "rusty-fork", @@ -7016,6 +10619,17 @@ dependencies = [ "unarray", ] +[[package]] +name = "proptest-derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf16337405ca084e9c78985114633b6827711d22b9e6ef6c6c0d665eb3f0b6e" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "prost" version = "0.12.6" @@ -7036,7 +10650,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -7053,20 +10667,67 @@ name = "prover-client-interface" version = "0.1.0" dependencies = [ "async-trait", - "cairo-vm 1.0.0-rc3", + "cairo-vm 1.0.0-rc5", "gps-fact-checker", - "mockall 0.12.1", + "mockall 0.13.0", "snos", "thiserror", "utils", ] +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457" +dependencies = [ + "idna 0.3.0", + "psl-types", +] + +[[package]] +name = "qstring" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" +dependencies = [ + "percent-encoding", +] + [[package]] name = "quick-error" version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +[[package]] +name = "quick-xml" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quick_cache" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb55a1aa7668676bb93926cd4e9cdfe60f03bb866553bcca9112554911b6d3dc" +dependencies = [ + "ahash 0.8.11", + "equivalent", + "hashbrown 0.14.5", + "parking_lot 0.12.3", +] + [[package]] name = "quote" version = "1.0.36" @@ -7076,12 +10737,31 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "radium" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" + [[package]] name = "radium" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + [[package]] name = "rand" version = "0.8.5" @@ -7089,8 +10769,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha", - "rand_core", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", ] [[package]] @@ -7100,33 +10790,80 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core 0.6.4", ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ - "getrandom", + "either", + "rayon-core", ] [[package]] -name = "rand_xorshift" -version = "0.3.0" +name = "rayon-core" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "rand_core", + "crossbeam-deque", + "crossbeam-utils", ] -[[package]] -name = "rawpointer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" - [[package]] name = "rc2" version = "0.8.1" @@ -7170,7 +10907,7 @@ dependencies = [ "native-tls", "percent-encoding", "pin-project-lite", - "rand", + "rand 0.8.5", "ryu", "sha1_smol", "socket2 0.4.10", @@ -7191,11 +10928,20 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "bitflags 2.5.0", + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", ] [[package]] @@ -7204,16 +10950,36 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" dependencies = [ - "getrandom", + "getrandom 0.2.15", "libredox", "thiserror", ] +[[package]] +name = "ref-cast" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "regex" -version = "1.10.5" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", @@ -7273,19 +11039,22 @@ checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ "base64 0.21.7", "bytes", + "cookie 0.17.0", + "cookie_store", "encoding_rs", "futures-core", "futures-util", "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.29", + "hyper 0.14.30", "hyper-rustls 0.24.2", "hyper-tls 0.5.0", "ipnet", "js-sys", "log", "mime", + "mime_guess", "native-tls", "once_cell", "percent-encoding", @@ -7300,10 +11069,12 @@ dependencies = [ "tokio", "tokio-native-tls", "tokio-rustls 0.24.1", + "tokio-util", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", + "wasm-streams", "web-sys", "webpki-roots 0.25.4", "winreg 0.50.0", @@ -7321,11 +11092,10 @@ dependencies = [ "futures-core", "futures-util", "h2 0.4.5", - "hickory-resolver", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.3.1", + "hyper 1.4.1", "hyper-rustls 0.27.2", "hyper-tls 0.6.0", "hyper-util", @@ -7337,7 +11107,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile 2.1.2", + "rustls-pemfile 2.1.3", "serde", "serde_json", "serde_urlencoded", @@ -7370,7 +11140,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" dependencies = [ "crypto-bigint 0.4.9", - "hmac", + "hmac 0.12.1", "zeroize", ] @@ -7380,10 +11150,34 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" dependencies = [ - "hmac", + "hmac 0.12.1", "subtle", ] +[[package]] +name = "rfc7239" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b106a85eeb5b0336d16d6a20eab857f92861d4fbb1eb9a239866fb98fb6a1063" +dependencies = [ + "uncased", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi 0.3.9", +] + [[package]] name = "ring" version = "0.17.8" @@ -7392,13 +11186,22 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", "spin 0.9.8", - "untrusted", + "untrusted 0.9.0", "windows-sys 0.52.0", ] +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + [[package]] name = "rlp" version = "0.5.2" @@ -7409,6 +11212,26 @@ dependencies = [ "rustc-hex", ] +[[package]] +name = "rsa" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +dependencies = [ + "const-oid", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-traits 0.2.19", + "pkcs1", + "pkcs8 0.10.2", + "rand_core 0.6.4", + "signature 2.2.0", + "spki 0.7.3", + "subtle", + "zeroize", +] + [[package]] name = "rstest" version = "0.17.0" @@ -7445,6 +11268,18 @@ dependencies = [ "rustc_version 0.4.0", ] +[[package]] +name = "rstest" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b423f0e62bdd61734b67cd21ff50871dfaeb9cc74f869dcd6af974fbcb19936" +dependencies = [ + "futures", + "futures-timer", + "rstest_macros 0.22.0", + "rustc_version 0.4.0", +] + [[package]] name = "rstest_macros" version = "0.17.0" @@ -7472,7 +11307,7 @@ dependencies = [ "regex", "relative-path", "rustc_version 0.4.0", - "syn 2.0.66", + "syn 2.0.72", "unicode-ident", ] @@ -7489,7 +11324,25 @@ dependencies = [ "regex", "relative-path", "rustc_version 0.4.0", - "syn 2.0.66", + "syn 2.0.72", + "unicode-ident", +] + +[[package]] +name = "rstest_macros" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e1711e7d14f74b12a58411c542185ef7fb7f2e7f8ee6e2940a883628522b42" +dependencies = [ + "cfg-if", + "glob", + "proc-macro-crate 3.1.0", + "proc-macro2", + "quote", + "regex", + "relative-path", + "rustc_version 0.4.0", + "syn 2.0.72", "unicode-ident", ] @@ -7504,12 +11357,12 @@ dependencies = [ "ark-ff 0.4.2", "bytes", "fastrlp", - "num-bigint", + "num-bigint 0.4.6", "num-traits 0.2.19", - "parity-scale-codec", - "primitive-types", + "parity-scale-codec 3.6.12", + "primitive-types 0.12.2", "proptest", - "rand", + "rand 0.8.5", "rlp", "ruint-macro", "serde", @@ -7529,7 +11382,7 @@ version = "1.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1790d1c4c0ca81211399e0e0af16333276f375209e71a37b67698a373db5b47a" dependencies = [ - "arrayvec", + "arrayvec 0.7.4", "num-traits 0.2.19", ] @@ -7617,7 +11470,7 @@ version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys 0.4.14", @@ -7631,7 +11484,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", - "ring", + "ring 0.17.8", "rustls-webpki 0.101.7", "sct", ] @@ -7643,25 +11496,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" dependencies = [ "log", - "ring", + "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.102.6", "subtle", "zeroize", ] [[package]] name = "rustls" -version = "0.23.10" +version = "0.23.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" dependencies = [ "aws-lc-rs", "log", "once_cell", - "ring", + "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.102.6", "subtle", "zeroize", ] @@ -7673,10 +11526,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727a826801254b6cfcd2508a0508c01b7c1bca21d3673e84d86da084781b83d5" dependencies = [ "log", - "rustls 0.23.10", - "rustls-native-certs 0.7.0", + "rustls 0.23.12", + "rustls-native-certs 0.7.1", "rustls-pki-types", - "rustls-webpki 0.102.4", + "rustls-webpki 0.102.6", ] [[package]] @@ -7693,12 +11546,12 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" +checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" dependencies = [ "openssl-probe", - "rustls-pemfile 2.1.2", + "rustls-pemfile 2.1.3", "rustls-pki-types", "schannel", "security-framework", @@ -7715,9 +11568,9 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" dependencies = [ "base64 0.22.1", "rustls-pki-types", @@ -7725,9 +11578,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" [[package]] name = "rustls-webpki" @@ -7735,20 +11588,20 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring", - "untrusted", + "ring 0.17.8", + "untrusted 0.9.0", ] [[package]] name = "rustls-webpki" -version = "0.102.4" +version = "0.102.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" dependencies = [ "aws-lc-rs", - "ring", + "ring 0.17.8", "rustls-pki-types", - "untrusted", + "untrusted 0.9.0", ] [[package]] @@ -7853,7 +11706,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -7868,10 +11721,10 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" dependencies = [ - "hmac", + "hmac 0.12.1", "pbkdf2 0.11.0", "salsa20", - "sha2", + "sha2 0.10.8", ] [[package]] @@ -7882,7 +11735,7 @@ checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" dependencies = [ "pbkdf2 0.12.2", "salsa20", - "sha2", + "sha2 0.10.8", ] [[package]] @@ -7891,8 +11744,8 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring", - "untrusted", + "ring 0.17.8", + "untrusted 0.9.0", ] [[package]] @@ -7925,11 +11778,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -7938,9 +11791,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" dependencies = [ "core-foundation-sys", "libc", @@ -7993,31 +11846,88 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.203" +version = "1.0.205" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "e33aedb1a7135da52b7c21791455563facbbcc43d0f0f66165b42c21b3dfb150" dependencies = [ "serde_derive", ] +[[package]] +name = "serde-big-array" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11fc7cc2c76d73e0f27ee52abbd64eec84d46f370c88371120433196934e4b7f" +dependencies = [ + "serde", +] + +[[package]] +name = "serde-generate" +version = "0.20.6" +source = "git+https://github.com/aptos-labs/serde-reflection?rev=73b6bbf748334b71ff6d7d09d06a29e3062ca075#73b6bbf748334b71ff6d7d09d06a29e3062ca075" +dependencies = [ + "bcs 0.1.6", + "bincode 1.3.3", + "heck 0.3.3", + "include_dir", + "maplit", + "serde", + "serde-reflection", + "serde_bytes", + "serde_yaml 0.8.26", + "structopt", + "textwrap 0.13.4", +] + +[[package]] +name = "serde-name" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12c47087018ec281d1cdab673d36aea22d816b54d498264029c05d5fa1910da6" +dependencies = [ + "serde", + "thiserror", +] + +[[package]] +name = "serde-reflection" +version = "0.3.5" +source = "git+https://github.com/aptos-labs/serde-reflection?rev=73b6bbf748334b71ff6d7d09d06a29e3062ca075#73b6bbf748334b71ff6d7d09d06a29e3062ca075" +dependencies = [ + "once_cell", + "serde", + "thiserror", +] + [[package]] name = "serde_bytes" -version = "0.11.14" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_cbor" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" dependencies = [ + "half 1.8.3", "serde", ] [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.205" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "692d6f5ac90220161d6774db30c662202721e64aed9058d2c394f451261420c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -8028,17 +11938,18 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.3.0", "itoa", + "memchr", "ryu", "serde", ] @@ -8054,6 +11965,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_merge" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "606e91878516232ac3b16c12e063d4468d762f16d77e7aef14a1f2326c5f409b" +dependencies = [ + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "serde_path_to_error" version = "0.1.16" @@ -8082,14 +12004,14 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "serde_spanned" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" dependencies = [ "serde", ] @@ -8134,19 +12056,19 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" +checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.2.6", + "indexmap 2.3.0", "serde", "serde_derive", "serde_json", - "serde_with_macros 3.8.1", + "serde_with_macros 3.9.0", "time", ] @@ -8168,22 +12090,34 @@ version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ - "darling 0.20.9", + "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "serde_with_macros" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" +checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" dependencies = [ - "darling 0.20.9", + "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", +] + +[[package]] +name = "serde_yaml" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" +dependencies = [ + "indexmap 1.9.3", + "ryu", + "serde", + "yaml-rust", ] [[package]] @@ -8192,7 +12126,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.3.0", "itoa", "ryu", "serde", @@ -8235,9 +12169,22 @@ dependencies = [ [[package]] name = "sha1_smol" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] [[package]] name = "sha2" @@ -8250,6 +12197,18 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sha3" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "keccak", + "opaque-debug", +] + [[package]] name = "sha3" version = "0.10.8" @@ -8262,9 +12221,9 @@ dependencies = [ [[package]] name = "sha3-asm" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9b57fd861253bff08bb1919e995f90ba8f4889de2726091c8876f3a4e823b40" +checksum = "57d79b758b7cb2085612b11a235055e485605a5103faccdd633f35bd7aee69dd" dependencies = [ "cc", "cfg-if", @@ -8283,13 +12242,13 @@ dependencies = [ name = "sharp-service" version = "0.1.0" dependencies = [ - "alloy 0.1.2", + "alloy 0.2.1", "async-trait", - "cairo-vm 1.0.0-rc3", + "cairo-vm 1.0.0-rc5", "gps-fact-checker", "hex", "prover-client-interface", - "reqwest 0.11.27", + "reqwest 0.12.5", "serde", "serde_json", "snos", @@ -8298,7 +12257,7 @@ dependencies = [ "tracing", "url", "utils", - "uuid 1.8.0", + "uuid 1.10.0", ] [[package]] @@ -8307,6 +12266,27 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" +dependencies = [ + "libc", + "mio 0.8.11", + "signal-hook", +] + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -8323,7 +12303,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ "digest 0.10.7", - "rand_core", + "rand_core 0.6.4", ] [[package]] @@ -8333,14 +12313,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest 0.10.7", - "rand_core", + "rand_core 0.6.4", ] [[package]] name = "similar" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640" +checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" [[package]] name = "simple_asn1" @@ -8348,18 +12328,39 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" dependencies = [ - "num-bigint", + "num-bigint 0.4.6", "num-traits 0.2.19", "thiserror", "time", ] +[[package]] +name = "simplelog" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bc0ffd69814a9b251d43afcabf96dad1b29f5028378056257be9e3fecc9f720" +dependencies = [ + "chrono", + "log", + "termcolor", +] + [[package]] name = "siphasher" version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" +[[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + [[package]] name = "slab" version = "0.4.9" @@ -8369,6 +12370,16 @@ dependencies = [ "autocfg", ] +[[package]] +name = "slug" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bd94acec9c8da640005f8e135a39fc0372e74535e6b368b7a04b875f784c8c4" +dependencies = [ + "deunicode", + "wasm-bindgen", +] + [[package]] name = "sluice" version = "0.5.5" @@ -8380,12 +12391,24 @@ dependencies = [ "futures-io", ] +[[package]] +name = "smallbitvec" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3fc564a4b53fd1e8589628efafe57602d91bde78be18186b5f61e8faea470" + [[package]] name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +[[package]] +name = "smawk" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" + [[package]] name = "smol_str" version = "0.2.2" @@ -8395,31 +12418,53 @@ dependencies = [ "serde", ] +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "snos" version = "0.1.0" -source = "git+https://github.com/keep-starknet-strange/snos#04f64d46fc58106711ec5328433ad54aef43d5cf" +source = "git+https://github.com/keep-starknet-strange/snos?rev=4b4b3cdb614f9a6b736ff1b21a5ea75c87b7d83c#4b4b3cdb614f9a6b736ff1b21a5ea75c87b7d83c" dependencies = [ "anyhow", "assert_matches", "base64 0.21.7", - "bitvec", + "bitvec 1.0.1", "blockifier", "cairo-lang-casm", "cairo-lang-starknet", "cairo-lang-starknet-classes", "cairo-type-derive", - "cairo-vm 1.0.0-rc3", + "cairo-vm 1.0.0-rc5", "env_logger", "futures", "futures-util", "heck 0.4.1", "hex", - "indexmap 2.2.6", - "indoc", + "indexmap 2.3.0", + "indoc 2.0.5", "lazy_static", "log", - "num-bigint", + "num-bigint 0.4.6", "num-integer", "num-traits 0.2.19", "pathfinder-common", @@ -8428,14 +12473,14 @@ dependencies = [ "reqwest 0.11.27", "serde", "serde_json", - "serde_with 3.8.1", - "serde_yaml", + "serde_with 3.9.0", + "serde_yaml 0.9.34+deprecated", "starknet-crypto 0.6.2", "starknet-gateway-types", "starknet_api", "thiserror", "tokio", - "uuid 1.8.0", + "uuid 1.10.0", "zip", ] @@ -8446,7 +12491,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -8505,17 +12550,22 @@ dependencies = [ "num-traits 0.1.43", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "starknet" -version = "0.9.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f8002bf3d750dd2c0434aca8b5e88e2438cd6c452f4c18f34d0a8a9f42cb1a" +checksum = "1e633a772f59214c296d5037c95c36b72792c9360323818da2b625c7b4ec4b49" dependencies = [ "starknet-accounts", "starknet-contract", - "starknet-core 0.9.0", - "starknet-crypto 0.6.2", - "starknet-ff", + "starknet-core", + "starknet-crypto 0.7.1", "starknet-macros", "starknet-providers", "starknet-signers", @@ -8523,13 +12573,14 @@ dependencies = [ [[package]] name = "starknet-accounts" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8e39a5807a735343493781dd5e640c4af838de470b0a73f420bed642fdc2ff1" +checksum = "eee8a6b588a22c7e79f5d8d4e33413387db63a8beb98be8610138541794cc0a5" dependencies = [ "async-trait", "auto_impl", - "starknet-core 0.9.0", + "starknet-core", + "starknet-crypto 0.7.1", "starknet-providers", "starknet-signers", "thiserror", @@ -8537,53 +12588,36 @@ dependencies = [ [[package]] name = "starknet-contract" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4996991356cd0e9499c663680eba7e77de4109e4995f652c1608899a65c09ee" +checksum = "a5f91344f1e0b81873b6dc235c50ae4d084c6ea4dd4a1e3e27ad895803adb610" dependencies = [ "serde", "serde_json", "serde_with 2.3.3", "starknet-accounts", - "starknet-core 0.9.0", + "starknet-core", "starknet-providers", "thiserror", ] [[package]] name = "starknet-core" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b15034c07557615f6bea248cb2ac91a103f56792c515319025a5edc4de2a60e" -dependencies = [ - "base64 0.21.7", - "flate2", - "hex", - "serde", - "serde_json", - "serde_json_pythonic", - "serde_with 2.3.3", - "sha3", - "starknet-crypto 0.6.2", - "starknet-ff", -] - -[[package]] -name = "starknet-core" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ed286d637e34fb8ae1cd2f9615120ec8ff38d1cffd311ed7fdd497cdd2bd01f" +checksum = "d506e02a4083290d13b427dfe437fd95aa8b56315c455bb2f9cdeca76620d457" dependencies = [ "base64 0.21.7", + "crypto-bigint 0.5.5", "flate2", "hex", "serde", "serde_json", "serde_json_pythonic", "serde_with 2.3.3", - "sha3", - "starknet-crypto 0.6.2", - "starknet-ff", + "sha3 0.10.8", + "starknet-crypto 0.7.1", + "starknet-types-core", ] [[package]] @@ -8594,13 +12628,13 @@ checksum = "d3f2175b0b3fc24ff2ec6dc07f5a720498994effca7e78b11a6e1c1bd02cad52" dependencies = [ "crypto-bigint 0.5.5", "hex", - "hmac", - "num-bigint", + "hmac 0.12.1", + "num-bigint 0.4.6", "num-integer", "num-traits 0.2.19", "rfc6979 0.4.0", - "sha2", - "starknet-crypto-codegen", + "sha2 0.10.8", + "starknet-crypto-codegen 0.3.3", "starknet-curve 0.3.0", "starknet-ff", "zeroize", @@ -8614,18 +12648,38 @@ checksum = "2e2c30c01e8eb0fc913c4ee3cf676389fffc1d1182bfe5bb9670e4e72e968064" dependencies = [ "crypto-bigint 0.5.5", "hex", - "hmac", - "num-bigint", + "hmac 0.12.1", + "num-bigint 0.4.6", "num-integer", "num-traits 0.2.19", "rfc6979 0.4.0", - "sha2", - "starknet-crypto-codegen", + "sha2 0.10.8", + "starknet-crypto-codegen 0.3.3", "starknet-curve 0.4.2", "starknet-ff", "zeroize", ] +[[package]] +name = "starknet-crypto" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2a821ad8d98c6c3e4d0e5097f3fe6e2ed120ada9d32be87cd1330c7923a2f0" +dependencies = [ + "crypto-bigint 0.5.5", + "hex", + "hmac 0.12.1", + "num-bigint 0.4.6", + "num-integer", + "num-traits 0.2.19", + "rfc6979 0.4.0", + "sha2 0.10.8", + "starknet-crypto-codegen 0.4.0", + "starknet-curve 0.5.0", + "starknet-types-core", + "zeroize", +] + [[package]] name = "starknet-crypto-codegen" version = "0.3.3" @@ -8634,7 +12688,18 @@ checksum = "bbc159a1934c7be9761c237333a57febe060ace2bc9e3b337a59a37af206d19f" dependencies = [ "starknet-curve 0.4.2", "starknet-ff", - "syn 2.0.66", + "syn 2.0.72", +] + +[[package]] +name = "starknet-crypto-codegen" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e179dedc3fa6da064e56811d3e05d446aa2f7459e4eb0e3e49378a337235437" +dependencies = [ + "starknet-curve 0.5.0", + "starknet-types-core", + "syn 2.0.72", ] [[package]] @@ -8655,6 +12720,15 @@ dependencies = [ "starknet-ff", ] +[[package]] +name = "starknet-curve" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56935b306dcf0b8f14bb2a1257164b8478bb8be4801dfae0923f5b266d1b457c" +dependencies = [ + "starknet-types-core", +] + [[package]] name = "starknet-ff" version = "0.3.7" @@ -8662,12 +12736,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7abf1b44ec5b18d87c1ae5f54590ca9d0699ef4dd5b2ffa66fc97f24613ec585" dependencies = [ "ark-ff 0.4.2", - "bigdecimal", "crypto-bigint 0.5.5", - "getrandom", + "getrandom 0.2.15", "hex", - "num-bigint", - "serde", ] [[package]] @@ -8681,44 +12752,45 @@ dependencies = [ "pathfinder-common", "pathfinder-crypto", "pathfinder-serde", - "primitive-types", - "rand", + "primitive-types 0.12.2", + "rand 0.8.5", "reqwest 0.11.27", "rstest 0.18.2", "serde", "serde_json", - "serde_with 3.8.1", - "sha3", + "serde_with 3.9.0", + "sha3 0.10.8", "thiserror", "tokio", ] [[package]] name = "starknet-macros" -version = "0.1.7" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95d549d3078bdbe775d0deaa8ddb57a19942989ce7c1f2dfd60beeb322bb4945" +checksum = "f4fe4f8d615329410578cbedcdbaa4a36c7f28f68c3f3ac56006cfbdaeaa2b41" dependencies = [ - "starknet-core 0.10.0", - "syn 2.0.66", + "starknet-core", + "syn 2.0.72", ] [[package]] name = "starknet-providers" -version = "0.9.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a4bd1c262936543d6d14d299f476585e8c9625a4e284d9255b54f1c2e68e64a" +checksum = "59c85e0a0f4563ae95dfeae14ea0f0c70610efc0ec2462505c64eff5765e7b97" dependencies = [ "async-trait", "auto_impl", "ethereum-types", "flate2", + "getrandom 0.2.15", "log", "reqwest 0.11.27", "serde", "serde_json", "serde_with 2.3.3", - "starknet-core 0.9.0", + "starknet-core", "thiserror", "url", ] @@ -8734,7 +12806,7 @@ dependencies = [ "lazy_static", "mockall 0.12.1", "reqwest 0.12.5", - "rstest 0.18.2", + "rstest 0.22.0", "serde", "settlement-client-interface", "starknet", @@ -8746,29 +12818,30 @@ dependencies = [ [[package]] name = "starknet-signers" -version = "0.7.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c5eb659e66b56ceafb9025cd601226d8f34d273f1b826cd4053ab6333ff0898" +checksum = "c17da2139119dbe3aacf1d5d4338798a5c489d17f424916ceb9d2efd83554f87" dependencies = [ "async-trait", "auto_impl", "crypto-bigint 0.5.5", "eth-keystore", - "rand", - "starknet-core 0.9.0", - "starknet-crypto 0.6.2", + "getrandom 0.2.15", + "rand 0.8.5", + "starknet-core", + "starknet-crypto 0.7.1", "thiserror", ] [[package]] name = "starknet-types-core" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe29a53d28ff630e4c7827788f14b28f9386d27cb9d05186a5f2e73218c34677" +checksum = "ce6bacf0ba19bc721e518bc4bf389ff13daa8a7c5db5fd320600473b8aa9fcbd" dependencies = [ "lambdaworks-crypto", "lambdaworks-math", - "num-bigint", + "num-bigint 0.4.6", "num-integer", "num-traits 0.2.19", "serde", @@ -8783,9 +12856,9 @@ dependencies = [ "cairo-lang-starknet-classes", "derive_more", "hex", - "indexmap 2.2.6", + "indexmap 2.3.0", "once_cell", - "primitive-types", + "primitive-types 0.12.2", "serde", "serde_json", "starknet-crypto 0.5.2", @@ -8824,6 +12897,12 @@ dependencies = [ "unicode-properties", ] +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + [[package]] name = "strsim" version = "0.10.0" @@ -8845,7 +12924,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -8856,7 +12935,31 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", +] + +[[package]] +name = "structopt" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" +dependencies = [ + "clap 2.34.0", + "lazy_static", + "structopt-derive", +] + +[[package]] +name = "structopt-derive" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" +dependencies = [ + "heck 0.3.3", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -8867,9 +12970,18 @@ checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" [[package]] name = "strum" -version = "0.26.2" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.3", +] + +[[package]] +name = "strum" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ "strum_macros 0.26.4", ] @@ -8887,6 +12999,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.72", +] + [[package]] name = "strum_macros" version = "0.26.4" @@ -8897,14 +13022,20 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "subtle-ng" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" [[package]] name = "svix-ksuid" @@ -8914,7 +13045,7 @@ checksum = "66f014385b7fc154f59e9480770c2187b6e61037c2439895788a9a4d421d7859" dependencies = [ "base-encode", "byteorder", - "getrandom", + "getrandom 0.2.15", "time", ] @@ -8931,9 +13062,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" dependencies = [ "proc-macro2", "quote", @@ -8949,19 +13080,19 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] name = "syn-solidity" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d71e19bca02c807c9faa67b5a47673ff231b6e7449b251695188522f1dc44b2" +checksum = "c837dc8852cb7074e46b444afb81783140dab12c58867b49fb3898fbafedf7ea" dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -8975,6 +13106,9 @@ name = "sync_wrapper" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] name = "synstructure" @@ -8984,7 +13118,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -9029,19 +13163,42 @@ dependencies = [ "cfg-if", "p12-keystore", "rustls-connector", - "rustls-pemfile 2.1.2", + "rustls-pemfile 2.1.3", ] [[package]] name = "tempfile" -version = "3.10.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if", "fastrand 2.1.0", + "once_cell", "rustix 0.38.34", - "windows-sys 0.52.0", + "windows-sys 0.59.0", +] + +[[package]] +name = "tera" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab9d851b45e865f178319da0abdbfe6acbc4328759ff18dafc3a41c16b4cd2ee" +dependencies = [ + "chrono", + "chrono-tz", + "globwalk", + "humansize", + "lazy_static", + "percent-encoding", + "pest", + "pest_derive", + "rand 0.8.5", + "regex", + "serde", + "serde_json", + "slug", + "unic-segment", ] [[package]] @@ -9052,7 +13209,16 @@ checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" dependencies = [ "dirs-next", "rustversion", - "winapi", + "winapi 0.3.9", +] + +[[package]] +name = "termcolor" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +dependencies = [ + "winapi-util", ] [[package]] @@ -9061,11 +13227,33 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +[[package]] +name = "test-log" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dffced63c2b5c7be278154d76b479f9f9920ed34e7574201407f0b14e2bbb93" +dependencies = [ + "env_logger", + "test-log-macros", + "tracing-subscriber 0.3.18", +] + +[[package]] +name = "test-log-macros" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "testcontainers" -version = "0.18.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2c9b71635ab25d4f789a86678d114a4f390467c8b93fd7feeaf7c443732a511" +checksum = "5f7d80fe0008971413157e67062150cbf508b92f0eb525b9f49de1aec4267f24" dependencies = [ "async-trait", "bollard", @@ -9078,10 +13266,10 @@ dependencies = [ "log", "memchr", "parse-display", - "reqwest 0.12.5", + "pin-project-lite", "serde", "serde_json", - "serde_with 3.8.1", + "serde_with 3.9.0", "thiserror", "tokio", "tokio-stream", @@ -9089,24 +13277,54 @@ dependencies = [ "url", ] +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "textwrap" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd05616119e612a8041ef58f2b578906cc2531a6069047ae092cfb86a325d835" +dependencies = [ + "smawk", + "unicode-width", +] + +[[package]] +name = "textwrap" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7b3e525a49ec206798b40326a44121291b530c963cfb01018f63e135bac543d" +dependencies = [ + "smawk", + "unicode-linebreak", + "unicode-width", +] + [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -9181,6 +13399,25 @@ dependencies = [ "time-core", ] +[[package]] +name = "tiny-bip39" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" +dependencies = [ + "anyhow", + "hmac 0.8.1", + "once_cell", + "pbkdf2 0.4.0", + "rand 0.7.3", + "rustc-hash", + "sha2 0.9.9", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -9190,11 +13427,21 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -9207,21 +13454,20 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.38.0" +version = "1.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" dependencies = [ "backtrace", "bytes", "libc", - "mio", - "num_cpus", + "mio 1.0.1", "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", "socket2 0.5.7", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -9236,13 +13482,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -9262,7 +13508,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f" dependencies = [ "pin-project", - "rand", + "rand 0.8.5", "tokio", ] @@ -9293,7 +13539,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pki-types", "tokio", ] @@ -9331,7 +13577,7 @@ checksum = "c6989540ced10490aaf14e6bad2e3d33728a2813310a0c71d1574304c49631cd" dependencies = [ "futures-util", "log", - "rustls 0.23.10", + "rustls 0.23.12", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -9355,54 +13601,111 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.14" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.14", + "toml_edit 0.22.20", ] [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.3.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.5.40", +] + [[package]] name = "toml_edit" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.3.0", "toml_datetime", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.22.14" +version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" +checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.3.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.13", + "winnow 0.6.18", +] + +[[package]] +name = "tonic" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" +dependencies = [ + "async-stream", + "async-trait", + "axum 0.6.20", + "base64 0.21.7", + "bytes", + "flate2", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "hyper-timeout", + "percent-encoding", + "pin-project", + "prost", + "rustls 0.21.12", + "rustls-pemfile 1.0.4", + "tokio", + "tokio-rustls 0.24.1", + "tokio-stream", + "tower", + "tower-layer", + "tower-service", + "tracing", + "webpki-roots 0.25.4", ] [[package]] name = "tonic" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e" +checksum = "76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13" dependencies = [ "async-stream", "async-trait", @@ -9413,21 +13716,35 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.29", + "hyper 0.14.30", "hyper-timeout", "percent-encoding", "pin-project", "prost", - "rustls 0.21.12", - "rustls-pemfile 1.0.4", + "rustls-native-certs 0.7.1", + "rustls-pemfile 2.1.3", + "rustls-pki-types", "tokio", - "tokio-rustls 0.24.1", + "tokio-rustls 0.25.0", "tokio-stream", "tower", "tower-layer", "tower-service", "tracing", - "webpki-roots 0.25.4", + "zstd 0.12.4", +] + +[[package]] +name = "tonic-reflection" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "548c227bd5c0fae5925812c4ec6c66ffcfced23ea370cb823f4d18f0fc1cb6a7" +dependencies = [ + "prost", + "prost-types", + "tokio", + "tokio-stream", + "tonic 0.11.0", ] [[package]] @@ -9441,7 +13758,7 @@ dependencies = [ "indexmap 1.9.3", "pin-project", "pin-project-lite", - "rand", + "rand 0.8.5", "slab", "tokio", "tokio-util", @@ -9482,7 +13799,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -9502,7 +13819,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" dependencies = [ "tracing", - "tracing-subscriber", + "tracing-subscriber 0.3.18", ] [[package]] @@ -9526,6 +13843,25 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" +dependencies = [ + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.3.18" @@ -9533,15 +13869,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "matchers", - "nu-ansi-term", + "nu-ansi-term 0.46.0", "once_cell", "regex", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", "tracing", "tracing-core", "tracing-log", + "tracing-serde", +] + +[[package]] +name = "trait-set" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b79e2e9c9ab44c6d7c20d5976961b47e8f49ac199154daa514b77cd1ab536625" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "triomphe" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6631e42e10b40c0690bf92f404ebcfe6e1fdb480391d15f17cc8e96eeed5369" +dependencies = [ + "serde", + "stable_deref_trait", ] [[package]] @@ -9553,7 +13913,7 @@ dependencies = [ "async-trait", "cfg-if", "data-encoding", - "enum-as-inner 0.4.0", + "enum-as-inner", "futures-channel", "futures-io", "futures-util", @@ -9561,7 +13921,7 @@ dependencies = [ "ipnet", "lazy_static", "log", - "rand", + "rand 0.8.5", "smallvec", "thiserror", "tinyvec", @@ -9595,6 +13955,19 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "tui" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccdd26cbd674007e649a272da4475fb666d3aa0ad0531da7136db6fab0e5bad1" +dependencies = [ + "bitflags 1.3.2", + "cassowary", + "crossterm 0.25.0", + "unicode-segmentation", + "unicode-width", +] + [[package]] name = "tungstenite" version = "0.23.0" @@ -9607,14 +13980,20 @@ dependencies = [ "http 1.1.0", "httparse", "log", - "rand", - "rustls 0.23.10", + "rand 0.8.5", + "rustls 0.23.12", "rustls-pki-types", "sha1", "thiserror", "utf-8", ] +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + [[package]] name = "typed-builder" version = "0.10.0" @@ -9632,6 +14011,28 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "typeshare" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f17399b76c2e743d58eac0635d7686e9c00f48cd4776f00695d9882a7d3187" +dependencies = [ + "chrono", + "serde", + "serde_json", + "typeshare-annotation", +] + +[[package]] +name = "typeshare-annotation" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a615d6c2764852a2e88a4f16e9ce1ea49bb776b5872956309e170d63a042a34f" +dependencies = [ + "quote", + "syn 2.0.72", +] + [[package]] name = "ucd-trie" version = "0.1.6" @@ -9656,15 +14057,83 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" +[[package]] +name = "uncased" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b88fcfe09e89d3866a5c11019378088af2d24c3fbd4f0543f96b479ec90697" +dependencies = [ + "version_check", +] + [[package]] name = "unescaper" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0adf6ad32eb5b3cadff915f7b770faaac8f7ff0476633aa29eb0d9584d889d34" +checksum = "c878a167baa8afd137494101a688ef8c67125089ff2249284bd2b5f9bfedb815" dependencies = [ "thiserror", ] +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" +dependencies = [ + "unic-ucd-segment", +] + +[[package]] +name = "unic-ucd-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" version = "0.3.15" @@ -9677,6 +14146,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unicode-linebreak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" + [[package]] name = "unicode-normalization" version = "0.1.23" @@ -9698,24 +14173,63 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +[[package]] +name = "unicode-width" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" + [[package]] name = "unicode-xid" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + [[package]] name = "unsafe-libyaml" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "untrusted" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" +[[package]] +name = "ureq" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b8b063c2d59218ae09f22b53c42eaad0d53516457905f5235ca4bc9e99daa71" +dependencies = [ + "base64 0.13.1", + "chunked_transfer", + "log", + "native-tls", + "once_cell", + "qstring", + "serde", + "serde_json", + "url", +] + [[package]] name = "url" version = "2.5.2" @@ -9761,17 +14275,17 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom", + "getrandom 0.2.15", "serde", ] [[package]] name = "uuid" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ - "getrandom", + "getrandom 0.2.15", "serde", ] @@ -9787,17 +14301,33 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" +[[package]] +name = "variant_count" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae2faf80ac463422992abf4de234731279c058aaf33171ca70277c98406b124" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "vcpkg" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "vergen" -version = "8.3.1" +version = "8.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27d6bdd219887a9eadd19e1c34f32e47fa332301184935c6d9bca26f3cca525" +checksum = "2990d9ea5967266ea0ccf413a4aa5c42a93dbcfda9cb49a97de6931726b12566" dependencies = [ "anyhow", "cfg-if", @@ -9807,9 +14337,9 @@ dependencies = [ [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vsimd" @@ -9851,12 +14381,24 @@ dependencies = [ "try-lock", ] +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + [[package]] name = "wasm-bindgen" version = "0.2.92" @@ -9878,7 +14420,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", "wasm-bindgen-shared", ] @@ -9912,7 +14454,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -9923,6 +14465,19 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +[[package]] +name = "wasm-streams" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "web-sys" version = "0.3.69" @@ -9960,12 +14515,41 @@ dependencies = [ "rustix 0.38.34", ] +[[package]] +name = "whoami" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" +dependencies = [ + "redox_syscall 0.4.1", + "wasite", + "web-sys", +] + +[[package]] +name = "widestring" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" + [[package]] name = "widestring" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" +[[package]] +name = "wildmatch" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3928939971918220fed093266b809d1ee4ec6c1a2d72692ff6876898f3b16c19" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + [[package]] name = "winapi" version = "0.3.9" @@ -9984,11 +14568,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -10003,7 +14587,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -10021,7 +14605,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -10041,18 +14634,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -10063,9 +14656,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -10075,9 +14668,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -10087,15 +14680,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -10105,9 +14698,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -10117,9 +14710,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -10129,9 +14722,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -10141,9 +14734,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" @@ -10156,9 +14749,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.13" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" dependencies = [ "memchr", ] @@ -10202,6 +14795,12 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wyz" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" + [[package]] name = "wyz" version = "0.5.1" @@ -10211,6 +14810,16 @@ dependencies = [ "tap", ] +[[package]] +name = "x25519-dalek" +version = "1.2.0" +source = "git+https://github.com/Tranduy1dol/x25519-dalek?branch=zeroize_v1.7#d98aca90959611359089b2194874faa200d55977" +dependencies = [ + "curve25519-dalek", + "rand_core 0.5.1", + "zeroize", +] + [[package]] name = "x509-cert" version = "0.2.5" @@ -10260,24 +14869,34 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d422e8e38ec76e2f06ee439ccc765e9c6a9638b9e7c9f2e8255e4d41e8bd852" +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -10297,7 +14916,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.72", ] [[package]] @@ -10309,15 +14928,15 @@ dependencies = [ "aes", "byteorder", "bzip2", - "constant_time_eq", + "constant_time_eq 0.1.5", "crc32fast", "crossbeam-utils", "flate2", - "hmac", + "hmac 0.12.1", "pbkdf2 0.11.0", "sha1", "time", - "zstd", + "zstd 0.11.2+zstd.1.5.2", ] [[package]] @@ -10326,7 +14945,16 @@ version = "0.11.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" dependencies = [ - "zstd-safe", + "zstd-safe 5.0.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +dependencies = [ + "zstd-safe 6.0.6", ] [[package]] @@ -10339,11 +14967,21 @@ dependencies = [ "zstd-sys", ] +[[package]] +name = "zstd-safe" +version = "6.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" +dependencies = [ + "libc", + "zstd-sys", +] + [[package]] name = "zstd-sys" -version = "2.0.11+zstd.1.5.6" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index b715e867..b807d875 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,7 @@ members = [ "crates/settlement-clients/settlement-client-interface", "crates/settlement-clients/ethereum", "crates/settlement-clients/starknet", + "crates/settlement-clients/aptos", "e2e-tests", ] @@ -22,24 +23,38 @@ authors = ["Apoorv Sadana <@apoorvsadana>"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [workspace.dependencies] -num = { version = "0.4.1" } +alloy = { version = "0.2.1", features = ["full"] } +arc-swap = { version = "1.7.1" } async-trait = { version = "0.1.77" } -alloy = { version = "0.1.2", features = ["full"] } axum = { version = "0.7.4" } axum-macros = "0.4.1" bincode = "1.3.3" -color-eyre = "0.6.2" c-kzg = "1.0.0" +color-eyre = "0.6.2" dotenvy = "0.15.7" futures = "0.3.30" -mongodb = { version = "2.8.1" } +hex = "0.4.3" +httpmock = { version = "0.7.0" } +itertools = "0.13.0" +lazy_static = "1.4.0" +log = "0.4.21" +mockall = "0.13.0" +mongodb = { version = "2.8.2" } +num = { version = "0.4.1" } +num-bigint = { version = "0.4.4" } +num-traits = "0.2" omniqueue = { version = "0.2.0" } -reqwest = { version = "0.11.24" } -rstest = "0.18.2" +once_cell = "1.19.0" +reqwest = { version = "0.12.5" } +rstest = "0.22.0" serde = { version = "1.0.197" } serde_json = "1.0.114" -starknet = "0.9.0" +stark_evm_adapter = "0.1.1" +starknet = "0.11.0" +starknet-core = "0.11.1" tempfile = "3.8.1" +testcontainers = "0.21.1" +test-log = "0.2.16" thiserror = "1.0.57" tokio = { version = "1.37.0" } tokio-stream = "0.1.15" @@ -48,19 +63,8 @@ tracing = "0.1.40" tracing-subscriber = { version = "0.3.18" } url = { version = "2.5.0", features = ["serde"] } uuid = { version = "1.7.0", features = ["v4", "serde"] } -httpmock = { version = "0.7.0" } -num-bigint = { version = "0.4.4" } -arc-swap = { version = "1.7.1" } -num-traits = "0.2" -lazy_static = "1.4.0" -stark_evm_adapter = "0.1.1" -hex = "0.4" -itertools = "0.13.0" -mockall = "0.12.1" -testcontainers = "0.18.0" - # Cairo VM -cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm", features = [ +cairo-vm = { version = "1.0.0-rc5", features = [ "extensive_hints", "cairo-1-hints", ] } @@ -69,22 +73,31 @@ cairo-vm = { git = "https://github.com/lambdaclass/cairo-vm", features = [ # can deserialize our snos input json into a StarknetOsInput struct. # TODO: update back to the main repo once it's merged # Sharp (Starkware) -snos = { git = "https://github.com/keep-starknet-strange/snos" } +snos = { git = "https://github.com/keep-starknet-strange/snos", rev = "4b4b3cdb614f9a6b736ff1b21a5ea75c87b7d83c" } # Madara prover API -madara-prover-common = { git = "https://github.com/Moonsong-Labs/madara-prover-api", branch = "od/use-latest-cairo-vm" } -madara-prover-rpc-client = { git = "https://github.com/Moonsong-Labs/madara-prover-api", branch = "od/use-latest-cairo-vm" } +madara-prover-common = { git = "https://github.com/Moonsong-Labs/madara-prover-api", branch = "main" } +madara-prover-rpc-client = { git = "https://github.com/Moonsong-Labs/madara-prover-api", branch = "main" } # Project da-client-interface = { path = "crates/da-clients/da-client-interface" } ethereum-da-client = { path = "crates/da-clients/ethereum" } -settlement-client-interface = { path = "crates/settlement-clients/settlement-client-interface" } ethereum-settlement-client = { path = "crates/settlement-clients/ethereum" } +settlement-client-interface = { path = "crates/settlement-clients/settlement-client-interface" } starknet-settlement-client = { path = "crates/settlement-clients/starknet" } -utils = { path = "crates/utils" } -prover-client-interface = { path = "crates/prover-services/prover-client-interface" } gps-fact-checker = { path = "crates/prover-services/gps-fact-checker" } -sharp-service = { path = "crates/prover-services/sharp-service" } orchestrator = { path = "crates/orchestrator" } +prover-client-interface = { path = "crates/prover-services/prover-client-interface" } +sharp-service = { path = "crates/prover-services/sharp-service" } +utils = { path = "crates/utils" } + +aptos-sdk = { git = "https://github.com/aptos-labs/aptos-core" } +aptos-testcontainer = { git = "https://github.com/sota-zk-labs/aptos-testcontainer", branch = "master", features = [ + "testing", +] } + +[patch.crates-io] +merlin = { git = "https://github.com/aptos-labs/merlin" } +x25519-dalek = { git = "https://github.com/Tranduy1dol/x25519-dalek", branch = "zeroize_v1.7" } diff --git a/crates/da-clients/ethereum/src/config.rs b/crates/da-clients/ethereum/src/config.rs index b50604b2..34370036 100644 --- a/crates/da-clients/ethereum/src/config.rs +++ b/crates/da-clients/ethereum/src/config.rs @@ -1,6 +1,8 @@ use std::str::FromStr; -use alloy::{network::Ethereum, providers::ProviderBuilder, rpc::client::RpcClient}; +use alloy::network::Ethereum; +use alloy::providers::ProviderBuilder; +use alloy::rpc::client::RpcClient; use async_trait::async_trait; use da_client_interface::DaConfig; use url::Url; diff --git a/crates/da-clients/ethereum/src/lib.rs b/crates/da-clients/ethereum/src/lib.rs index 68c933bd..e48f5ca7 100644 --- a/crates/da-clients/ethereum/src/lib.rs +++ b/crates/da-clients/ethereum/src/lib.rs @@ -20,8 +20,8 @@ pub struct EthereumDaClient { #[async_trait] impl DaClient for EthereumDaClient { async fn publish_state_diff(&self, _state_diff: Vec>, _to: &[u8; 32]) -> Result { - // Here in case of ethereum we are not publishing the state diff because we are doing it all together in update_state job. - // So we don't need to send the blob here. + // Here in case of ethereum we are not publishing the state diff because we are doing it all + // together in update_state job. So we don't need to send the blob here. Ok("NA".to_string()) } diff --git a/crates/orchestrator/Cargo.toml b/crates/orchestrator/Cargo.toml index e5121529..8ef6ac0e 100644 --- a/crates/orchestrator/Cargo.toml +++ b/crates/orchestrator/Cargo.toml @@ -34,7 +34,7 @@ ethereum-settlement-client = { workspace = true } futures = { workspace = true } hex = { workspace = true } lazy_static = { workspace = true } -log = "0.4.21" +log = { workspace = true } majin-blob-core = { git = "https://github.com/AbdelStark/majin-blob", branch = "main" } majin-blob-types = { git = "https://github.com/AbdelStark/majin-blob", branch = "main" } mockall = { version = "0.13.0" } @@ -52,7 +52,7 @@ settlement-client-interface = { workspace = true } sharp-service = { workspace = true } snos = { workspace = true } starknet = { workspace = true } -starknet-core = "0.9.0" +starknet-core = { workspace = true } starknet-settlement-client = { workspace = true } strum_macros = "0.26.4" thiserror = { workspace = true } @@ -71,6 +71,6 @@ with_sqs = ["omniqueue"] [dev-dependencies] assert_matches = "1.5.0" +httpmock = { workspace = true, features = ["remote"] } hyper = { version = "0.14", features = ["full"] } rstest = { workspace = true } -httpmock = { workspace = true, features = ["remote"] } diff --git a/crates/orchestrator/src/config.rs b/crates/orchestrator/src/config.rs index 447b25ec..66b4d285 100644 --- a/crates/orchestrator/src/config.rs +++ b/crates/orchestrator/src/config.rs @@ -1,8 +1,5 @@ use std::sync::Arc; -use crate::data_storage::aws_s3::config::{AWSS3Config, AWSS3ConfigType}; -use crate::data_storage::aws_s3::AWSS3; -use crate::data_storage::{DataStorage, DataStorageConfig}; use arc_swap::{ArcSwap, Guard}; use da_client_interface::{DaClient, DaConfig}; use dotenvy::dotenv; @@ -19,6 +16,9 @@ use utils::env_utils::get_env_var_or_panic; use utils::settings::default::DefaultSettingsProvider; use utils::settings::SettingsProvider; +use crate::data_storage::aws_s3::config::{AWSS3Config, AWSS3ConfigType}; +use crate::data_storage::aws_s3::AWSS3; +use crate::data_storage::{DataStorage, DataStorageConfig}; use crate::database::mongodb::config::MongoDbConfig; use crate::database::mongodb::MongoDb; use crate::database::{Database, DatabaseConfig}; diff --git a/crates/orchestrator/src/data_storage/aws_s3/mod.rs b/crates/orchestrator/src/data_storage/aws_s3/mod.rs index 990a5d0a..aed1882f 100644 --- a/crates/orchestrator/src/data_storage/aws_s3/mod.rs +++ b/crates/orchestrator/src/data_storage/aws_s3/mod.rs @@ -1,5 +1,3 @@ -use crate::data_storage::aws_s3::config::AWSS3ConfigType; -use crate::data_storage::DataStorage; use async_trait::async_trait; use aws_sdk_s3::config::{Builder, Credentials, Region}; use aws_sdk_s3::primitives::ByteStream; @@ -7,6 +5,9 @@ use aws_sdk_s3::Client; use bytes::Bytes; use color_eyre::Result; +use crate::data_storage::aws_s3::config::AWSS3ConfigType; +use crate::data_storage::DataStorage; + /// Module for AWS S3 config structs and implementations pub mod config; diff --git a/crates/orchestrator/src/data_storage/types.rs b/crates/orchestrator/src/data_storage/types.rs index 0fc1a6fb..31270558 100644 --- a/crates/orchestrator/src/data_storage/types.rs +++ b/crates/orchestrator/src/data_storage/types.rs @@ -1,6 +1,7 @@ +use std::collections::HashMap; + use cairo_vm::Felt252; use serde::{Deserialize, Serialize}; -use std::collections::HashMap; /// This struct represents the contract changes that will be in `StarknetOsOutput` /// as a vector. diff --git a/crates/orchestrator/src/database/mongodb/mod.rs b/crates/orchestrator/src/database/mongodb/mod.rs index 4d53f243..19cdf65f 100644 --- a/crates/orchestrator/src/database/mongodb/mod.rs +++ b/crates/orchestrator/src/database/mongodb/mod.rs @@ -1,18 +1,13 @@ -use async_std::stream::StreamExt; -use futures::TryStreamExt; use std::collections::HashMap; +use async_std::stream::StreamExt; use async_trait::async_trait; use color_eyre::eyre::eyre; use color_eyre::Result; -use mongodb::bson::{Bson, Document}; -use mongodb::options::{FindOneOptions, FindOptions, UpdateOptions}; -use mongodb::{ - bson, - bson::doc, - options::{ClientOptions, ServerApi, ServerApiVersion}, - Client, Collection, -}; +use futures::TryStreamExt; +use mongodb::bson::{doc, Bson, Document}; +use mongodb::options::{ClientOptions, FindOneOptions, FindOptions, ServerApi, ServerApiVersion, UpdateOptions}; +use mongodb::{bson, Client, Collection}; use uuid::Uuid; use crate::database::mongodb::config::MongoDbConfig; diff --git a/crates/orchestrator/src/jobs/da_job/mod.rs b/crates/orchestrator/src/jobs/da_job/mod.rs index 592e6ad1..5b8a3a24 100644 --- a/crates/orchestrator/src/jobs/da_job/mod.rs +++ b/crates/orchestrator/src/jobs/da_job/mod.rs @@ -7,7 +7,7 @@ use color_eyre::eyre::WrapErr; use lazy_static::lazy_static; use num_bigint::{BigUint, ToBigUint}; use num_traits::{Num, Zero}; -use starknet::core::types::{BlockId, FieldElement, MaybePendingStateUpdate, StateUpdate, StorageEntry}; +use starknet::core::types::{BlockId, Felt, MaybePendingStateUpdate, StateUpdate, StorageEntry}; use starknet::providers::Provider; use thiserror::Error; use tracing::log; @@ -179,13 +179,13 @@ pub fn fft_transformation(elements: Vec) -> Vec { transform } -pub fn convert_to_biguint(elements: Vec) -> Vec { +pub fn convert_to_biguint(elements: Vec) -> Vec { // Initialize the vector with 4096 BigUint zeros let mut biguint_vec = vec![BigUint::zero(); 4096]; // Iterate over the elements and replace the zeros in the biguint_vec for (i, element) in elements.iter().take(4096).enumerate() { - // Convert FieldElement to [u8; 32] + // Convert Felt to [u8; 32] let bytes: [u8; 32] = element.to_bytes_be(); // Convert [u8; 32] to BigUint @@ -206,7 +206,7 @@ fn data_to_blobs(blob_size: u64, block_data: Vec) -> Result let mut blobs: Vec> = Vec::new(); - // Convert all FieldElements to bytes first + // Convert all Felts to bytes first let mut bytes: Vec = block_data.iter().flat_map(|element| element.to_bytes_be().to_vec()).collect(); // Process bytes in chunks of blob_size @@ -231,27 +231,27 @@ pub async fn state_update_to_blob_data( block_no: u64, state_update: StateUpdate, config: &Config, -) -> color_eyre::Result> { +) -> color_eyre::Result> { let state_diff = state_update.state_diff; - let mut blob_data: Vec = vec![ - FieldElement::from(state_diff.storage_diffs.len()), + let mut blob_data: Vec = vec![ + Felt::from(state_diff.storage_diffs.len()), // @note: won't need this if while producing the block we are attaching the block number // and the block hash - FieldElement::ONE, - FieldElement::ONE, - FieldElement::from(block_no), + Felt::ONE, + Felt::ONE, + Felt::from(block_no), state_update.block_hash, ]; - let storage_diffs: HashMap> = + let storage_diffs: HashMap> = state_diff.storage_diffs.iter().map(|item| (item.address, &item.storage_entries)).collect(); - let declared_classes: HashMap = + let declared_classes: HashMap = state_diff.declared_classes.iter().map(|item| (item.class_hash, item.compiled_class_hash)).collect(); - let deployed_contracts: HashMap = + let deployed_contracts: HashMap = state_diff.deployed_contracts.iter().map(|item| (item.address, item.class_hash)).collect(); - let replaced_classes: HashMap = + let replaced_classes: HashMap = state_diff.replaced_classes.iter().map(|item| (item.contract_address, item.class_hash)).collect(); - let mut nonces: HashMap = + let mut nonces: HashMap = state_diff.nonces.iter().map(|item| (item.contract_address, item.nonce)).collect(); // Loop over storage diffs @@ -263,7 +263,7 @@ pub async fn state_update_to_blob_data( // @note: if nonce is null and there is some len of writes, make an api call to get the contract // nonce for the block - if nonce.is_none() && !writes.is_empty() && addr != FieldElement::ONE { + if nonce.is_none() && !writes.is_empty() && addr != Felt::ONE { let get_current_nonce_result = config .starknet_client() .get_nonce(BlockId::Number(block_no), addr) @@ -278,7 +278,7 @@ pub async fn state_update_to_blob_data( // block number and hash // @note: ONE special address can be used to mark the range of block, if in future // the team wants to submit multiple blocks in a single blob etc. - if addr == FieldElement::ONE && da_word == FieldElement::ONE { + if addr == Felt::ONE && da_word == Felt::ONE { continue; } blob_data.push(addr); @@ -294,7 +294,7 @@ pub async fn state_update_to_blob_data( } } // Handle declared classes - blob_data.push(FieldElement::from(declared_classes.len())); + blob_data.push(Felt::from(declared_classes.len())); for (class_hash, compiled_class_hash) in &declared_classes { blob_data.push(*class_hash); @@ -308,7 +308,7 @@ pub async fn state_update_to_blob_data( } /// To store the blob data using the storage client with path /blob_data.txt -async fn store_blob_data(blob_data: Vec, block_number: u64, config: &Config) -> Result<(), JobError> { +async fn store_blob_data(blob_data: Vec, block_number: u64, config: &Config) -> Result<(), JobError> { let storage_client = config.storage(); let key = block_number.to_string() + "/" + BLOB_DATA_FILE_NAME; let data_blob_big_uint = convert_to_biguint(blob_data.clone()); @@ -332,7 +332,7 @@ async fn store_blob_data(blob_data: Vec, block_number: u64, config /// DA word encoding: /// |---padding---|---class flag---|---new nonce---|---num changes---| /// 127 bits 1 bit 64 bits 64 bits -fn da_word(class_flag: bool, nonce_change: Option, num_changes: u64) -> FieldElement { +fn da_word(class_flag: bool, nonce_change: Option, num_changes: u64) -> Felt { // padding of 127 bits let mut binary_string = "0".repeat(127); @@ -364,7 +364,7 @@ fn da_word(class_flag: bool, nonce_change: Option, num_changes: u6 // Now convert the BigUint to a decimal string let decimal_string = biguint.to_str_radix(10); - FieldElement::from_dec_str(&decimal_string).expect("issue while converting to fieldElement") + Felt::from_dec_str(&decimal_string).expect("issue while converting to Felt") } #[cfg(test)] @@ -385,7 +385,7 @@ pub mod test { use majin_blob_types::state_diffs::UnorderedEq; use rstest::rstest; use serde_json::json; - use starknet_core::types::{FieldElement, StateUpdate}; + use starknet::core::types::{Felt, StateUpdate}; use crate::tests::common::init_config; @@ -404,9 +404,9 @@ pub mod test { #[case] num_changes: u64, #[case] expected: String, ) { - let new_nonce = if new_nonce > 0 { Some(FieldElement::from(new_nonce)) } else { None }; + let new_nonce = if new_nonce > 0 { Some(Felt::from(new_nonce)) } else { None }; let da_word = da_word(class_flag, new_nonce, num_changes); - let expected = FieldElement::from_dec_str(expected.as_str()).unwrap(); + let expected = Felt::from_dec_str(expected.as_str()).unwrap(); assert_eq!(da_word, expected); } @@ -552,7 +552,7 @@ pub mod test { let nonce = entry.nonce.clone(); let response = json!({ "id": 1,"jsonrpc":"2.0","result": nonce }); let field_element = - FieldElement::from_dec_str(&address).expect("issue while converting the hex to field").to_bytes_be(); + Felt::from_dec_str(&address).expect("issue while converting the hex to field").to_bytes_be(); let hex_field_element = vec_u8_to_hex_string(&field_element); server.mock(|when, then| { diff --git a/crates/orchestrator/src/jobs/job_handler_factory.rs b/crates/orchestrator/src/jobs/job_handler_factory.rs index 5a4daef3..8f4d8a34 100644 --- a/crates/orchestrator/src/jobs/job_handler_factory.rs +++ b/crates/orchestrator/src/jobs/job_handler_factory.rs @@ -49,7 +49,8 @@ pub mod factory { /// /// - We create the MockJob /// - We return this mocked job whenever a function calls `get_job_handler` - /// - Making it an Arc allows us to return the same MockJob in multiple calls to `get_job_handler`. This is needed because `MockJob` doesn't implement Clone + /// - Making it an Arc allows us to return the same MockJob in multiple calls to + /// `get_job_handler`. This is needed because `MockJob` doesn't implement Clone pub async fn get_job_handler(job_type: &JobType) -> Arc> { // Original implementation let job: Box = match job_type { diff --git a/crates/orchestrator/src/jobs/state_update_job/utils.rs b/crates/orchestrator/src/jobs/state_update_job/utils.rs index 1d92c9a4..c696b06c 100644 --- a/crates/orchestrator/src/jobs/state_update_job/utils.rs +++ b/crates/orchestrator/src/jobs/state_update_job/utils.rs @@ -1,6 +1,7 @@ +use color_eyre::eyre::eyre; + use crate::config::config; use crate::constants::BLOB_DATA_FILE_NAME; -use color_eyre::eyre::eyre; /// Fetching the blob data (stored in remote storage during DA job) for a particular block pub async fn fetch_blob_data_for_block(block_number: u64) -> color_eyre::Result>> { diff --git a/crates/orchestrator/src/queue/sqs/mod.rs b/crates/orchestrator/src/queue/sqs/mod.rs index 1598189a..9c30ee49 100644 --- a/crates/orchestrator/src/queue/sqs/mod.rs +++ b/crates/orchestrator/src/queue/sqs/mod.rs @@ -1,12 +1,12 @@ use std::time::Duration; -use crate::queue::job_queue::JOB_PROCESSING_QUEUE; use async_trait::async_trait; use color_eyre::Result; use omniqueue::backends::{SqsBackend, SqsConfig, SqsConsumer, SqsProducer}; use omniqueue::{Delivery, QueueError}; use utils::env_utils::get_env_var_or_panic; +use crate::queue::job_queue::JOB_PROCESSING_QUEUE; use crate::queue::QueueProvider; pub struct SqsQueue; diff --git a/crates/orchestrator/src/tests/config.rs b/crates/orchestrator/src/tests/config.rs index ebe60256..954fd0cb 100644 --- a/crates/orchestrator/src/tests/config.rs +++ b/crates/orchestrator/src/tests/config.rs @@ -1,10 +1,7 @@ use std::sync::Arc; -use crate::config::{build_da_client, build_prover_service, build_settlement_client, config_force_init, Config}; -use crate::data_storage::DataStorage; use da_client_interface::DaClient; use httpmock::MockServer; - use prover_client_interface::ProverClient; use settlement_client_interface::SettlementClient; use starknet::providers::jsonrpc::HttpTransport; @@ -12,6 +9,8 @@ use starknet::providers::{JsonRpcClient, Url}; use utils::env_utils::get_env_var_or_panic; use utils::settings::default::DefaultSettingsProvider; +use crate::config::{build_da_client, build_prover_service, build_settlement_client, config_force_init, Config}; +use crate::data_storage::DataStorage; use crate::database::mongodb::config::MongoDbConfig; use crate::database::mongodb::MongoDb; use crate::database::{Database, DatabaseConfig}; diff --git a/crates/orchestrator/src/tests/data_storage/mod.rs b/crates/orchestrator/src/tests/data_storage/mod.rs index d127917a..6eea74e9 100644 --- a/crates/orchestrator/src/tests/data_storage/mod.rs +++ b/crates/orchestrator/src/tests/data_storage/mod.rs @@ -1,12 +1,13 @@ -use crate::data_storage::aws_s3::config::{AWSS3ConfigType, S3LocalStackConfig}; -use crate::data_storage::aws_s3::AWSS3; -use crate::data_storage::{DataStorage, DataStorageConfig}; -use crate::tests::config::TestConfigBuilder; use bytes::Bytes; use rstest::rstest; use serde_json::json; use utils::env_utils::get_env_var_or_panic; +use crate::data_storage::aws_s3::config::{AWSS3ConfigType, S3LocalStackConfig}; +use crate::data_storage::aws_s3::AWSS3; +use crate::data_storage::{DataStorage, DataStorageConfig}; +use crate::tests::config::TestConfigBuilder; + /// This test checks the ability to put and get data from AWS S3 using `AWSS3`. /// It puts JSON data into a test bucket and retrieves it, verifying the data /// matches what was originally uploaded. diff --git a/crates/orchestrator/src/tests/database/mod.rs b/crates/orchestrator/src/tests/database/mod.rs index 58866582..d18054f5 100644 --- a/crates/orchestrator/src/tests/database/mod.rs +++ b/crates/orchestrator/src/tests/database/mod.rs @@ -1,11 +1,13 @@ -use crate::config::{config, Config}; -use crate::jobs::types::{ExternalId, JobItem, JobStatus, JobType}; -use crate::tests::config::TestConfigBuilder; +use std::sync::Arc; + use arc_swap::Guard; use rstest::*; -use std::sync::Arc; use uuid::Uuid; +use crate::config::{config, Config}; +use crate::jobs::types::{ExternalId, JobItem, JobStatus, JobType}; +use crate::tests::config::TestConfigBuilder; + #[rstest] #[tokio::test] async fn test_database_connection() -> color_eyre::Result<()> { diff --git a/crates/orchestrator/src/tests/jobs/da_job/mod.rs b/crates/orchestrator/src/tests/jobs/da_job/mod.rs index 1390e46e..3d42ca87 100644 --- a/crates/orchestrator/src/tests/jobs/da_job/mod.rs +++ b/crates/orchestrator/src/tests/jobs/da_job/mod.rs @@ -11,7 +11,7 @@ use da_client_interface::MockDaClient; use mockall::predicate::always; use rstest::rstest; use serde_json::json; -use starknet_core::types::{FieldElement, MaybePendingStateUpdate, PendingStateUpdate, StateDiff}; +use starknet::core::types::{Felt, MaybePendingStateUpdate, PendingStateUpdate, StateDiff}; use std::collections::HashMap; use uuid::Uuid; @@ -96,7 +96,7 @@ async fn test_da_job_process_job_failure_on_pending_block() { let internal_id = "1"; let pending_state_update = MaybePendingStateUpdate::PendingUpdate(PendingStateUpdate { - old_root: FieldElement::default(), + old_root: Felt::default(), state_diff: StateDiff { storage_diffs: vec![], deprecated_declared_classes: vec![], diff --git a/crates/orchestrator/src/tests/jobs/mod.rs b/crates/orchestrator/src/tests/jobs/mod.rs index d1748feb..8569640c 100644 --- a/crates/orchestrator/src/tests/jobs/mod.rs +++ b/crates/orchestrator/src/tests/jobs/mod.rs @@ -16,11 +16,11 @@ pub mod proving_job; #[cfg(test)] pub mod state_update_job; -use assert_matches::assert_matches; use std::collections::HashMap; use std::sync::Arc; use std::time::Duration; +use assert_matches::assert_matches; use mockall::predicate::eq; use mongodb::bson::doc; use omniqueue::QueueError; diff --git a/crates/orchestrator/src/tests/jobs/proving_job/mod.rs b/crates/orchestrator/src/tests/jobs/proving_job/mod.rs index 6eeaaef7..35ddd7fa 100644 --- a/crates/orchestrator/src/tests/jobs/proving_job/mod.rs +++ b/crates/orchestrator/src/tests/jobs/proving_job/mod.rs @@ -1,12 +1,12 @@ use std::collections::HashMap; -use crate::config::{config, config_force_init}; use httpmock::prelude::*; use prover_client_interface::{MockProverClient, TaskStatus}; use rstest::*; use uuid::Uuid; use super::super::common::{default_job_item, init_config}; +use crate::config::{config, config_force_init}; use crate::jobs::constants::JOB_METADATA_CAIRO_PIE_PATH_KEY; use crate::jobs::proving_job::ProvingJob; use crate::jobs::types::{JobItem, JobStatus, JobType}; diff --git a/crates/orchestrator/src/tests/workers/utils/mod.rs b/crates/orchestrator/src/tests/workers/utils/mod.rs index edb9307a..3624c24b 100644 --- a/crates/orchestrator/src/tests/workers/utils/mod.rs +++ b/crates/orchestrator/src/tests/workers/utils/mod.rs @@ -1,10 +1,12 @@ +use std::collections::HashMap; + +use mockall::predicate::eq; +use uuid::Uuid; + use crate::database::MockDatabase; use crate::jobs::constants::JOB_METADATA_CAIRO_PIE_PATH_KEY; use crate::jobs::types::{ExternalId, JobItem, JobStatus, JobType}; use crate::jobs::MockJob; -use mockall::predicate::eq; -use std::collections::HashMap; -use uuid::Uuid; pub fn get_job_item_mock_by_id(id: String, uuid: Uuid) -> JobItem { JobItem { diff --git a/crates/orchestrator/src/workers/data_submission_worker.rs b/crates/orchestrator/src/workers/data_submission_worker.rs index 3c2d4331..66d7d88b 100644 --- a/crates/orchestrator/src/workers/data_submission_worker.rs +++ b/crates/orchestrator/src/workers/data_submission_worker.rs @@ -1,10 +1,12 @@ +use std::collections::HashMap; +use std::error::Error; + +use async_trait::async_trait; + use crate::config::config; use crate::jobs::create_job; use crate::jobs::types::{JobStatus, JobType}; use crate::workers::Worker; -use async_trait::async_trait; -use std::collections::HashMap; -use std::error::Error; pub struct DataSubmissionWorker; @@ -38,7 +40,8 @@ impl Worker for DataSubmissionWorker { let latest_data_submission_id: u64 = latest_data_submission_job_id.parse()?; let latest_proven_id: u64 = latest_proven_job_id.parse()?; - // creating data submission jobs for latest blocks that don't have existing data submission jobs yet. + // creating data submission jobs for latest blocks that don't have existing data submission jobs + // yet. for new_job_id in latest_data_submission_id + 1..latest_proven_id + 1 { create_job(JobType::DataSubmission, new_job_id.to_string(), HashMap::new()).await?; } diff --git a/crates/orchestrator/src/workers/mod.rs b/crates/orchestrator/src/workers/mod.rs index 785b1e2d..eb0ad793 100644 --- a/crates/orchestrator/src/workers/mod.rs +++ b/crates/orchestrator/src/workers/mod.rs @@ -1,7 +1,10 @@ -use crate::{config::config, jobs::types::JobStatus}; -use async_trait::async_trait; use std::error::Error; +use async_trait::async_trait; + +use crate::config::config; +use crate::jobs::types::JobStatus; + pub mod data_submission_worker; pub mod proof_registration; pub mod proving; @@ -20,8 +23,8 @@ pub trait Worker: Send + Sync { async fn run_worker(&self) -> Result<(), Box>; // Assumption - // If say a job for block X fails, we don't want the worker to respawn another job for the same block - // we will resolve the existing failed job first. + // If say a job for block X fails, we don't want the worker to respawn another job for the same + // block we will resolve the existing failed job first. // We assume the system to keep working till a job hasn't failed, // as soon as it fails we currently halt any more execution and wait for manual intervention. diff --git a/crates/orchestrator/src/workers/proving.rs b/crates/orchestrator/src/workers/proving.rs index 4ec85b91..7fcb7194 100644 --- a/crates/orchestrator/src/workers/proving.rs +++ b/crates/orchestrator/src/workers/proving.rs @@ -1,9 +1,11 @@ +use std::error::Error; + +use async_trait::async_trait; + use crate::config::config; use crate::jobs::create_job; use crate::jobs::types::{JobStatus, JobType}; use crate::workers::Worker; -use async_trait::async_trait; -use std::error::Error; pub struct ProvingWorker; diff --git a/crates/prover-services/gps-fact-checker/src/fact_info.rs b/crates/prover-services/gps-fact-checker/src/fact_info.rs index e7156ef9..d0aff512 100644 --- a/crates/prover-services/gps-fact-checker/src/fact_info.rs +++ b/crates/prover-services/gps-fact-checker/src/fact_info.rs @@ -8,7 +8,7 @@ use cairo_vm::types::builtin_name::BuiltinName; use cairo_vm::types::relocatable::MaybeRelocatable; use cairo_vm::vm::runners::cairo_pie::CairoPie; use cairo_vm::Felt252; -use starknet::core::types::FieldElement; +use starknet::core::types::Felt; use utils::ensure; use super::error::FactCheckerError; @@ -26,12 +26,14 @@ pub struct FactInfo { pub fact: B256, } -pub fn get_fact_info(cairo_pie: &CairoPie, program_hash: Option) -> Result { +pub fn get_fact_info(cairo_pie: &CairoPie, program_hash: Option) -> Result { let program_output = get_program_output(cairo_pie)?; let fact_topology = get_fact_topology(cairo_pie, program_output.len())?; let program_hash = match program_hash { Some(hash) => hash, - None => compute_program_hash_chain(&cairo_pie.metadata.program, BOOTLOADER_VERSION)?, + None => Felt::from_bytes_be( + &compute_program_hash_chain(&cairo_pie.metadata.program, BOOTLOADER_VERSION)?.to_bytes_be(), + ), }; let output_root = generate_merkle_root(&program_output, &fact_topology)?; let fact = keccak256([program_hash.to_bytes_be(), *output_root.node_hash].concat()); diff --git a/crates/settlement-clients/aptos/Cargo.toml b/crates/settlement-clients/aptos/Cargo.toml new file mode 100644 index 00000000..15d676fa --- /dev/null +++ b/crates/settlement-clients/aptos/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "aptos-settlement-client" +version.workspace = true +edition.workspace = true +authors.workspace = true + +[dependencies] +alloy = { workspace = true } +anyhow = "1.0.86" +aptos-sdk = { workspace = true } +aptos-testcontainer = { workspace = true } +async-trait = { workspace = true } +color-eyre = { workspace = true } +dotenvy = { workspace = true } +hex = { workspace = true } +log = { workspace = true } +mockall = { workspace = true } +once_cell = { workspace = true } +settlement-client-interface = { workspace = true } +tokio = { workspace = true } +utils = { workspace = true } + +[dev-dependencies] +test-log = { workspace = true } diff --git a/crates/settlement-clients/aptos/src/config.rs b/crates/settlement-clients/aptos/src/config.rs new file mode 100644 index 00000000..1b22c350 --- /dev/null +++ b/crates/settlement-clients/aptos/src/config.rs @@ -0,0 +1,21 @@ +use dotenvy::dotenv; +use settlement_client_interface::SettlementConfig; +use utils::env_utils::get_env_var_or_panic; + +pub struct AptosSettlementConfig { + pub node_url: String, + pub private_key: String, + pub module_address: String, + pub chain_id: String, +} + +impl SettlementConfig for AptosSettlementConfig { + fn new_from_env() -> Self { + dotenv().expect("Failed to load .env file"); + let node_url = get_env_var_or_panic("APTOS_NODE_URL"); + let private_key = get_env_var_or_panic("APTOS_PRIVATE_KEY"); + let module_address = get_env_var_or_panic("APTOS_MODULE_ADDRESS"); + let chain_id = get_env_var_or_panic("CHAIN_ID"); + AptosSettlementConfig { chain_id, node_url, private_key, module_address } + } +} diff --git a/crates/settlement-clients/aptos/src/helper.rs b/crates/settlement-clients/aptos/src/helper.rs new file mode 100644 index 00000000..5eff60f7 --- /dev/null +++ b/crates/settlement-clients/aptos/src/helper.rs @@ -0,0 +1,25 @@ +use std::time::SystemTime; + +use aptos_sdk::transaction_builder::TransactionBuilder; +use aptos_sdk::types::chain_id::ChainId; +use aptos_sdk::types::transaction::{SignedTransaction, TransactionPayload}; +use aptos_sdk::types::LocalAccount; + +pub(crate) fn build_transaction( + payload: TransactionPayload, + sender: &LocalAccount, + chain_id: ChainId, +) -> SignedTransaction { + let i = sender.increment_sequence_number(); + let tx = TransactionBuilder::new( + payload, + SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs() + 60, + chain_id, + ) + .sender(sender.address()) + .sequence_number(i) + .max_gas_amount(30000) + .gas_unit_price(100) + .build(); + sender.sign_transaction(tx) +} diff --git a/crates/settlement-clients/aptos/src/lib.rs b/crates/settlement-clients/aptos/src/lib.rs new file mode 100644 index 00000000..eab09f11 --- /dev/null +++ b/crates/settlement-clients/aptos/src/lib.rs @@ -0,0 +1,331 @@ +#![allow(missing_docs)] +#![allow(clippy::missing_docs_in_private_items)] +use std::str::FromStr; + +use aptos_sdk::crypto::HashValue; +use aptos_sdk::move_types::account_address::AccountAddress; +use aptos_sdk::move_types::identifier::Identifier; +use aptos_sdk::move_types::language_storage::ModuleId; +use aptos_sdk::move_types::u256::U256; +use aptos_sdk::move_types::value::{serialize_values, MoveValue}; +use aptos_sdk::rest_client::aptos_api_types::{EntryFunctionId, ViewRequest}; +use aptos_sdk::rest_client::Client; +use aptos_sdk::types::chain_id::ChainId; +use aptos_sdk::types::transaction::{EntryFunction, TransactionPayload}; +use aptos_sdk::types::LocalAccount; +use async_trait::async_trait; +use color_eyre::eyre; +use mockall::automock; +use settlement_client_interface::{SettlementClient, SettlementVerificationStatus}; + +use crate::config::AptosSettlementConfig; +use crate::helper::build_transaction; + +pub mod config; +pub mod helper; + +pub struct AptosSettlementClient { + pub client: Client, + pub account: LocalAccount, + pub module_address: AccountAddress, + pub chain_id: ChainId, +} + +const STARKNET_VALIDITY: &str = "starknet_validity"; +const UPDATE_STATE: &str = "update_state"; +const UPDATE_STATE_KZG_DA: &str = "update_state_kzg_da"; +const STATE_BLOCK_NUMBER: &str = "state_block_number"; + +impl From for AptosSettlementClient { + fn from(config: AptosSettlementConfig) -> Self { + let client = Client::new(config.node_url.parse().unwrap()); + let account = LocalAccount::from_private_key(&config.private_key, 0).unwrap(); + let module_address = config.module_address.parse().expect("Invalid module address"); + let chain_id = ChainId::from_str(&config.chain_id).expect("Invalid chain id"); + + AptosSettlementClient { client, account, module_address, chain_id } + } +} + +#[automock] +#[async_trait] +impl SettlementClient for AptosSettlementClient { + #[allow(unused)] + async fn register_proof(&self, proof: [u8; 32]) -> eyre::Result { + unimplemented!("hee-hee") + } + + async fn update_state_calldata( + &self, + program_output: Vec<[u8; 32]>, + onchain_data_hash: [u8; 32], + onchain_data_size: usize, + ) -> eyre::Result { + let sequencer_number = self.client.get_account(self.account.address()).await?.into_inner().sequence_number; + self.account.set_sequence_number(sequencer_number); + + let payload = TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new(self.module_address, Identifier::new(STARKNET_VALIDITY).unwrap()), + Identifier::new(UPDATE_STATE).unwrap(), + vec![], + serialize_values( + vec![ + &MoveValue::Vector( + program_output.iter().map(|s| MoveValue::U256(U256::from_le_bytes(s))).collect::>(), + ), + &MoveValue::U256(U256::from_le_bytes(&onchain_data_hash)), + &MoveValue::U256(U256::from(onchain_data_size as u128)), + ] + .into_iter(), + ), + )); + + let signed_txn = build_transaction(payload, &self.account, self.chain_id); + + let tx = self + .client + .submit_and_wait(&signed_txn) + .await + .expect("Failed to submit update state transaction") + .into_inner(); + let transaction_info = tx.transaction_info().unwrap(); + log::info!( + "update_state_calldata finished: hash={}; gas={}", + transaction_info.hash.to_string(), + transaction_info.gas_used + ); + + Ok(transaction_info.hash.to_string()) + } + + #[allow(unused)] + async fn update_state_with_blobs( + &self, + program_output: Vec<[u8; 32]>, + state_diff: Vec>, + ) -> color_eyre::Result { + unimplemented!("hee-hee") + } + + async fn update_state_blobs( + &self, + program_output: Vec<[u8; 32]>, + kzg_proof: [u8; 48], + ) -> color_eyre::Result { + let payload = TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new(self.account.address(), Identifier::new(STARKNET_VALIDITY).unwrap()), + Identifier::new(UPDATE_STATE_KZG_DA).unwrap(), + vec![], + serialize_values( + vec![ + &MoveValue::Vector( + program_output.iter().map(|s| MoveValue::U256(U256::from_le_bytes(s))).collect::>(), + ), + &MoveValue::vector_u8(kzg_proof.to_vec()), + ] + .into_iter(), + ), + )); + + let signed_txn = build_transaction(payload, &self.account, self.chain_id); + + let tx = self + .client + .submit_and_wait(&signed_txn) + .await + .expect("Failed to submit update state transaction") + .into_inner(); + + let transaction_info = tx.transaction_info().unwrap(); + log::info!( + "update_state_blobs finished: hash={}; gas={}", + transaction_info.hash.to_string(), + transaction_info.gas_used + ); + + Ok(transaction_info.hash.to_string()) + } + + async fn verify_tx_inclusion(&self, tx_hash: &str) -> eyre::Result { + let client = self.client.clone(); + + let hash = HashValue::from_str(tx_hash.strip_prefix("0x").unwrap())?; + let txn = client.get_transaction_by_hash(hash).await?; + + let response = txn.into_inner(); + match response.success() { + true => Ok(SettlementVerificationStatus::Verified), + false => Ok(SettlementVerificationStatus::Rejected(format!("Transaction {} have been rejected.", tx_hash))), + } + } + + #[allow(unused)] + async fn wait_for_tx_finality(&self, tx_hash: &str) -> color_eyre::Result<()> { + unimplemented!("hee-hee") + } + + async fn get_last_settled_block(&self) -> eyre::Result { + let client = &self.client; + let request = ViewRequest { + type_arguments: vec![], + arguments: vec![], + function: EntryFunctionId::from_str( + format!( + "{}::{}::{}", + self.account.address().to_string().as_str(), + STARKNET_VALIDITY, + STATE_BLOCK_NUMBER + ) + .as_str(), + ) + .expect("Invalid function name"), + }; + let response = client.view(&request, None).await?.into_inner(); + + let block_number = response.first().unwrap().as_str().unwrap(); + Ok(block_number.parse::()?) + } +} + +#[cfg(test)] +mod test { + use std::collections::HashMap; + + use aptos_sdk::crypto::ValidCryptoMaterialStringExt; + use aptos_sdk::move_types::u256; + use aptos_sdk::types::chain_id::NamedChain::TESTING; + use aptos_testcontainer::test_utils::aptos_container_test_utils::{lazy_aptos_container, run}; + use settlement_client_interface::{SettlementClient, SettlementVerificationStatus}; + use test_log::test; + + use crate::config::AptosSettlementConfig; + use crate::helper::build_transaction; + use crate::{AptosSettlementClient, STARKNET_VALIDITY}; + + use super::*; + + const REGISTER_FACT: &'static str = "register_fact"; + const FACT_REGISTRY: &'static str = "fact_registry"; + const INIT_CONTRACT_STATE: &'static str = "initialize_contract_state"; + + async fn aptos_init_state(settlement_client: &AptosSettlementClient) { + let payload = TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new(settlement_client.account.address(), Identifier::new(STARKNET_VALIDITY).unwrap()), + Identifier::new(INIT_CONTRACT_STATE).unwrap(), + vec![], + serialize_values( + vec![ + &MoveValue::U256(u256::U256::from(0u128)), + &MoveValue::Address(AccountAddress::ZERO), + &MoveValue::U256(u256::U256::from(0u128)), + &MoveValue::U256(u256::U256::from(0u128)), + &MoveValue::U256(u256::U256::from(0u128)), + &MoveValue::U256(u256::U256::from(0u128)), + ] + .into_iter(), + ), + )); + let tx = build_transaction(payload, &settlement_client.account, settlement_client.chain_id); + let tx = settlement_client.client.submit_and_wait(&tx).await.expect("Failed to init state!").into_inner(); + let transaction_info = tx.transaction_info().unwrap(); + log::info!( + "update_state_blobs finished: hash={}; gas={}", + transaction_info.hash.to_string(), + transaction_info.gas_used + ); + } + + async fn aptos_fact_registry(settlement_client: &AptosSettlementClient, fact: &str) { + let payload = TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new(settlement_client.account.address(), Identifier::new(FACT_REGISTRY).unwrap()), + Identifier::new(REGISTER_FACT).unwrap(), + vec![], + serialize_values(vec![&MoveValue::vector_u8(hex::decode(fact).unwrap())].into_iter()), + )); + let tx = build_transaction(payload, &settlement_client.account, settlement_client.chain_id); + let tx = settlement_client.client.submit_and_wait(&tx).await.expect("Failed to registry fact!").into_inner(); + let transaction_info = tx.transaction_info().unwrap(); + log::info!( + "update_state_blobs finished: hash={}; gas={}", + transaction_info.hash.to_string(), + transaction_info.gas_used + ); + } + + #[test(tokio::test)] + async fn test_update_state_calldata() -> anyhow::Result<()> { + run(1, |accounts| { + Box::pin(async move { + let aptos_container = lazy_aptos_container().await.unwrap(); + let node_url = aptos_container.get_node_url().await.unwrap(); + + let module_account_private_key = accounts.get(0).unwrap(); + let module_account = LocalAccount::from_private_key(module_account_private_key, 0).unwrap(); + + let config = AptosSettlementConfig { + node_url, + private_key: module_account_private_key.to_string(), + module_address: module_account.address().to_string(), + chain_id: TESTING.id().to_string(), + }; + let settlement_client = AptosSettlementClient::from(config); + + let mut named_address = HashMap::new(); + named_address.insert("starknet_addr".to_string(), module_account.address().to_string()); + aptos_container + .upload_contract( + "../../../ionia", + &module_account.private_key().to_encoded_string().unwrap(), + &named_address, + false, + ) + .await + .unwrap(); + + let sequence_number = settlement_client + .client + .get_account(settlement_client.account.address()) + .await? + .into_inner() + .sequence_number; + settlement_client.account.set_sequence_number(sequence_number); + + aptos_init_state(&settlement_client).await; + + aptos_fact_registry( + &settlement_client, + "38a811b0f756a978eda5dd75bdaecc4942f7eba409805c88edf1442dcaea2cdc", + ) + .await; + + let program_output: Vec<[u8; 32]> = vec![ + u256::U256::from(0u128).to_le_bytes(), // Global root + u256::U256::from(0u128).to_le_bytes(), // Message offset + u256::U256::from(1u128).to_le_bytes(), // Block number offset + u256::U256::from(1u128).to_le_bytes(), // Block hash offset + u256::U256::from(0u128).to_le_bytes(), // Config hash offset + u256::U256::from(0u128).to_le_bytes(), + u256::U256::from(0u128).to_le_bytes(), + u256::U256::from(0u128).to_le_bytes(), + ]; + let onchain_data_hash = u256::U256::from(1u128).to_le_bytes(); + let onchain_data_size = 1usize; + + let result = settlement_client + .update_state_calldata(program_output, onchain_data_hash, onchain_data_size) + .await + .expect("Failed to submit blob!"); + log::info!("result = {:#?}", result); + + let verify_inclusion = settlement_client.verify_tx_inclusion(result.as_str()).await.unwrap(); + log::info!("verify_inclusion = {:#?}", verify_inclusion); + assert_eq!(verify_inclusion, SettlementVerificationStatus::Verified); + + let block_number = settlement_client.get_last_settled_block().await.unwrap(); + log::info!("block_number = {:#?}", block_number); + Ok(()) + }) + }) + .await + } +} diff --git a/crates/settlement-clients/ethereum/src/clients/interfaces/validity_interface.rs b/crates/settlement-clients/ethereum/src/clients/interfaces/validity_interface.rs index 7b8a31a1..37bf76b0 100644 --- a/crates/settlement-clients/ethereum/src/clients/interfaces/validity_interface.rs +++ b/crates/settlement-clients/ethereum/src/clients/interfaces/validity_interface.rs @@ -1,16 +1,14 @@ use std::sync::Arc; +use alloy::network::Ethereum; +use alloy::primitives::{I256, U256}; +use alloy::providers::Provider; +use alloy::rpc::types::eth::TransactionReceipt; +use alloy::sol; +use alloy::transports::http::Http; +use alloy::transports::{RpcError, TransportErrorKind}; use async_trait::async_trait; -use alloy::{ - network::Ethereum, - primitives::{I256, U256}, - providers::Provider, - rpc::types::eth::TransactionReceipt, - sol, - transports::{http::Http, RpcError, TransportErrorKind}, -}; - use crate::types::LocalWalletSignerMiddleware; // TODO: should be moved to Zaun: diff --git a/crates/settlement-clients/ethereum/src/clients/validity.rs b/crates/settlement-clients/ethereum/src/clients/validity.rs index 8ed89c5b..575c6748 100644 --- a/crates/settlement-clients/ethereum/src/clients/validity.rs +++ b/crates/settlement-clients/ethereum/src/clients/validity.rs @@ -1,6 +1,8 @@ use std::sync::Arc; -use alloy::{network::Ethereum, primitives::Address, transports::http::Http}; +use alloy::network::Ethereum; +use alloy::primitives::Address; +use alloy::transports::http::Http; use crate::clients::interfaces::validity_interface::StarknetValidityContract; use crate::types::LocalWalletSignerMiddleware; diff --git a/crates/settlement-clients/ethereum/src/conversion.rs b/crates/settlement-clients/ethereum/src/conversion.rs index c86eb89a..ea4ab011 100644 --- a/crates/settlement-clients/ethereum/src/conversion.rs +++ b/crates/settlement-clients/ethereum/src/conversion.rs @@ -1,7 +1,7 @@ use alloy::primitives::U256; -/// Converts a `&[Vec]` to `Vec`. Each inner slice is expected to be exactly 32 bytes long. -/// Pads with zeros if any inner slice is shorter than 32 bytes. +/// Converts a `&[Vec]` to `Vec`. Each inner slice is expected to be exactly 32 bytes +/// long. Pads with zeros if any inner slice is shorter than 32 bytes. pub(crate) fn slice_slice_u8_to_vec_u256(slices: &[[u8; 32]]) -> Vec { slices.iter().map(|slice| slice_u8_to_u256(slice)).collect() } diff --git a/crates/settlement-clients/ethereum/src/lib.rs b/crates/settlement-clients/ethereum/src/lib.rs index dde57309..68603087 100644 --- a/crates/settlement-clients/ethereum/src/lib.rs +++ b/crates/settlement-clients/ethereum/src/lib.rs @@ -3,35 +3,34 @@ pub mod config; pub mod conversion; pub mod types; +use std::fmt::Write; +use std::path::{Path, PathBuf}; +use std::str::FromStr; +use std::sync::Arc; + use alloy::consensus::{ BlobTransactionSidecar, SignableTransaction, TxEip4844, TxEip4844Variant, TxEip4844WithSidecar, TxEnvelope, }; use alloy::eips::eip2718::Encodable2718; use alloy::eips::eip2930::AccessList; use alloy::eips::eip4844::BYTES_PER_BLOB; -use alloy::primitives::{Bytes, FixedBytes}; -use alloy::{ - network::EthereumWallet, - primitives::{Address, B256, U256}, - providers::{PendingTransactionConfig, Provider, ProviderBuilder}, - rpc::types::TransactionReceipt, - signers::local::PrivateKeySigner, -}; +use alloy::network::EthereumWallet; +use alloy::primitives::{Address, Bytes, FixedBytes, B256, U256}; +use alloy::providers::{PendingTransactionConfig, Provider, ProviderBuilder}; +use alloy::rpc::types::TransactionReceipt; +use alloy::signers::local::PrivateKeySigner; use async_trait::async_trait; use c_kzg::{Blob, Bytes32, KzgCommitment, KzgProof, KzgSettings}; use color_eyre::eyre::eyre; use color_eyre::Result; -use mockall::{automock, lazy_static, predicate::*}; +use mockall::predicate::*; +use mockall::{automock, lazy_static}; use rstest::rstest; -use std::fmt::Write; -use std::path::{Path, PathBuf}; -use std::str::FromStr; -use std::sync::Arc; - -use crate::clients::interfaces::validity_interface::StarknetValidityContractTrait; use settlement_client_interface::{SettlementClient, SettlementVerificationStatus, SETTLEMENT_SETTINGS_NAME}; -use utils::{env_utils::get_env_var_or_panic, settings::SettingsProvider}; +use utils::env_utils::get_env_var_or_panic; +use utils::settings::SettingsProvider; +use crate::clients::interfaces::validity_interface::StarknetValidityContractTrait; use crate::clients::StarknetValidityContractClient; use crate::config::EthereumSettlementConfig; use crate::conversion::{slice_slice_u8_to_vec_u256, slice_u8_to_u256}; @@ -100,11 +99,7 @@ impl EthereumSettlementClient { &KZG_SETTINGS, )?; - if !eval { - Err(eyre!("ERROR : Assertion failed, not able to verify the proof.")) - } else { - Ok(kzg_proof) - } + if !eval { Err(eyre!("ERROR : Assertion failed, not able to verify the proof.")) } else { Ok(kzg_proof) } } } @@ -249,7 +244,8 @@ async fn prepare_sidecar( fn get_txn_input_bytes(program_output: Vec<[u8; 32]>, kzg_proof: [u8; 48]) -> Bytes { let program_output_hex_string = vec_u8_32_to_hex_string(program_output); let kzg_proof_hex_string = u8_48_to_hex_string(kzg_proof); - // cast keccak "updateStateKzgDA(uint256[] calldata programOutput, bytes calldata kzgProof)" | cut -b 1-10 + // cast keccak "updateStateKzgDA(uint256[] calldata programOutput, bytes calldata kzgProof)" | cut + // -b 1-10 let function_selector = "0x1a790556"; Bytes::from(program_output_hex_string + &kzg_proof_hex_string + function_selector) diff --git a/crates/settlement-clients/ethereum/src/types.rs b/crates/settlement-clients/ethereum/src/types.rs index 3415ee0a..6ec5914c 100644 --- a/crates/settlement-clients/ethereum/src/types.rs +++ b/crates/settlement-clients/ethereum/src/types.rs @@ -1,11 +1,7 @@ -use alloy::{ - network::{Ethereum, EthereumWallet}, - providers::{ - fillers::{ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller, WalletFiller}, - Identity, RootProvider, - }, - transports::http::{Client, Http}, -}; +use alloy::network::{Ethereum, EthereumWallet}; +use alloy::providers::fillers::{ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller, WalletFiller}; +use alloy::providers::{Identity, RootProvider}; +use alloy::transports::http::{Client, Http}; pub type LocalWalletSignerMiddleware = FillProvider< JoinFill< diff --git a/crates/settlement-clients/starknet/src/conversion.rs b/crates/settlement-clients/starknet/src/conversion.rs index 816999ea..3c3f34fb 100644 --- a/crates/settlement-clients/starknet/src/conversion.rs +++ b/crates/settlement-clients/starknet/src/conversion.rs @@ -1,9 +1,9 @@ -use starknet::core::types::FieldElement; +use starknet::core::types::Felt; -pub(crate) fn slice_slice_u8_to_vec_field(slices: &[[u8; 32]]) -> Vec { +pub(crate) fn slice_slice_u8_to_vec_field(slices: &[[u8; 32]]) -> Vec { slices.iter().map(slice_u8_to_field).collect() } -pub(crate) fn slice_u8_to_field(slice: &[u8; 32]) -> FieldElement { - FieldElement::from_byte_slice_be(slice).expect("could not convert u8 slice to FieldElement") +pub(crate) fn slice_u8_to_field(slice: &[u8; 32]) -> Felt { + Felt::from_bytes_be_slice(slice) } diff --git a/crates/settlement-clients/starknet/src/lib.rs b/crates/settlement-clients/starknet/src/lib.rs index abcd10df..ab3eb795 100644 --- a/crates/settlement-clients/starknet/src/lib.rs +++ b/crates/settlement-clients/starknet/src/lib.rs @@ -1,37 +1,31 @@ -pub mod config; -pub mod conversion; - use std::sync::Arc; use async_trait::async_trait; use color_eyre::eyre::eyre; use color_eyre::Result; use lazy_static::lazy_static; -use mockall::{automock, predicate::*}; -use starknet::accounts::ConnectedAccount; -use starknet::core::types::{ExecutionResult, MaybePendingTransactionReceipt}; -use starknet::providers::Provider; -use starknet::{ - accounts::{Account, Call, ExecutionEncoding, SingleOwnerAccount}, - core::{ - types::{BlockId, BlockTag, FieldElement, FunctionCall}, - utils::get_selector_from_name, - }, - providers::{jsonrpc::HttpTransport, JsonRpcClient}, - signers::{LocalWallet, SigningKey}, -}; -use tokio::time::{sleep, Duration}; - +use mockall::automock; +use mockall::predicate::*; use settlement_client_interface::{SettlementClient, SettlementVerificationStatus, SETTLEMENT_SETTINGS_NAME}; +use starknet::accounts::{Account, Call, ConnectedAccount, ExecutionEncoding, SingleOwnerAccount}; +use starknet::core::types::{BlockId, BlockTag, ExecutionResult, Felt, FunctionCall}; +use starknet::core::utils::get_selector_from_name; +use starknet::providers::jsonrpc::HttpTransport; +use starknet::providers::{JsonRpcClient, Provider}; +use starknet::signers::{LocalWallet, SigningKey}; +use tokio::time::{sleep, Duration}; use utils::env_utils::get_env_var_or_panic; use utils::settings::SettingsProvider; use crate::config::StarknetSettlementConfig; use crate::conversion::{slice_slice_u8_to_vec_field, slice_u8_to_field}; +pub mod config; +pub mod conversion; + pub struct StarknetSettlementClient { pub account: SingleOwnerAccount>, LocalWallet>, - pub core_contract_address: FieldElement, + pub core_contract_address: Felt, pub tx_finality_retry_delay_in_seconds: u64, } @@ -49,15 +43,15 @@ impl StarknetSettlementClient { let provider = Arc::new(JsonRpcClient::new(HttpTransport::new(settlement_cfg.rpc_url))); let public_key = get_env_var_or_panic(ENV_PUBLIC_KEY); - let signer_address = FieldElement::from_hex_be(&public_key).expect("invalid signer address"); + let signer_address = Felt::from_hex(&public_key).expect("invalid signer address"); // TODO: Very insecure way of building the signer. Needs to be adjusted. let private_key = get_env_var_or_panic(ENV_PRIVATE_KEY); - let signer = FieldElement::from_hex_be(&private_key).expect("Invalid private key"); + let signer = Felt::from_hex(&private_key).expect("Invalid private key"); let signer = LocalWallet::from(SigningKey::from_secret_scalar(signer)); let core_contract_address = - FieldElement::from_hex_be(&settlement_cfg.core_contract_address).expect("Invalid core contract address"); + Felt::from_hex(&settlement_cfg.core_contract_address).expect("Invalid core contract address"); let account = SingleOwnerAccount::new( provider.clone(), @@ -76,18 +70,18 @@ impl StarknetSettlementClient { } lazy_static! { - pub static ref CONTRACT_WRITE_UPDATE_STATE_SELECTOR: FieldElement = + pub static ref CONTRACT_WRITE_UPDATE_STATE_SELECTOR: Felt = get_selector_from_name("update_state").expect("Invalid update state selector"); // TODO: `stateBlockNumber` does not exists yet in our implementation: // https://github.com/keep-starknet-strange/piltover // It should get added to match the solidity implementation of the core contract. - pub static ref CONTRACT_READ_STATE_BLOCK_NUMBER: FieldElement = + pub static ref CONTRACT_READ_STATE_BLOCK_NUMBER: Felt = get_selector_from_name("stateBlockNumber").expect("Invalid update state selector"); } -// TODO: Note that we already have an implementation of the appchain core contract client available here: -// https://github.com/keep-starknet-strange/zaun/tree/main/crates/l3/appchain-core-contract-client -// However, this implementation uses different FieldElement types, and incorporating all of them +// TODO: Note that we already have an implementation of the appchain core contract client available +// here: https://github.com/keep-starknet-strange/zaun/tree/main/crates/l3/appchain-core-contract-client +// However, this implementation uses different Felt types, and incorporating all of them // into this repository would introduce unnecessary complexity. // Therefore, we will wait for the update of starknet_rs in the Zaun repository before adapting // the StarknetSettlementClient implementation. @@ -111,10 +105,10 @@ impl SettlementClient for StarknetSettlementClient { ) -> Result { let program_output = slice_slice_u8_to_vec_field(program_output.as_slice()); let onchain_data_hash = slice_u8_to_field(&onchain_data_hash); - let mut calldata: Vec = Vec::with_capacity(program_output.len() + 2); + let mut calldata: Vec = Vec::with_capacity(program_output.len() + 2); calldata.extend(program_output); calldata.push(onchain_data_hash); - calldata.push(FieldElement::from(onchain_data_size)); + calldata.push(Felt::from(onchain_data_size)); let invoke_result = self .account .execute(vec![Call { @@ -135,22 +129,16 @@ impl SettlementClient for StarknetSettlementClient { /// Should verify the inclusion of a tx in the settlement layer async fn verify_tx_inclusion(&self, tx_hash: &str) -> Result { - let tx_hash = FieldElement::from_hex_be(tx_hash)?; + let tx_hash = Felt::from_hex(tx_hash)?; let tx_receipt = self.account.provider().get_transaction_receipt(tx_hash).await?; - match tx_receipt { - MaybePendingTransactionReceipt::Receipt(tx) => match tx.execution_result() { - ExecutionResult::Succeeded => Ok(SettlementVerificationStatus::Verified), - ExecutionResult::Reverted { reason } => { - Ok(SettlementVerificationStatus::Rejected(format!("Tx {} has been reverted: {}", tx_hash, reason))) - } - }, - MaybePendingTransactionReceipt::PendingReceipt(tx) => match tx.execution_result() { - ExecutionResult::Succeeded => Ok(SettlementVerificationStatus::Pending), - ExecutionResult::Reverted { reason } => Ok(SettlementVerificationStatus::Rejected(format!( - "Pending tx {} has been reverted: {}", - tx_hash, reason - ))), - }, + if tx_receipt.block.is_pending() { + return Ok(SettlementVerificationStatus::Pending); + } + match tx_receipt.receipt.execution_result() { + ExecutionResult::Succeeded => Ok(SettlementVerificationStatus::Verified), + ExecutionResult::Reverted { reason } => { + Ok(SettlementVerificationStatus::Rejected(format!("Tx {} has been reverted: {}", tx_hash, reason))) + } } } @@ -166,10 +154,10 @@ impl SettlementClient for StarknetSettlementClient { let duration_to_wait_between_polling = Duration::from_secs(self.tx_finality_retry_delay_in_seconds); sleep(duration_to_wait_between_polling).await; - let tx_hash = FieldElement::from_hex_be(tx_hash)?; + let tx_hash = Felt::from_hex(tx_hash)?; loop { let tx_receipt = self.account.provider().get_transaction_receipt(tx_hash).await?; - if let MaybePendingTransactionReceipt::PendingReceipt(_) = tx_receipt { + if tx_receipt.block.is_pending() { retries += 1; if retries > MAX_RETRIES_VERIFY_TX_FINALITY { return Err(eyre!("Max retries exceeeded while waiting for tx {tx_hash} finality.")); @@ -199,6 +187,6 @@ impl SettlementClient for StarknetSettlementClient { if block_number.is_empty() { return Err(eyre!("Could not fetch last block number from core contract.")); } - Ok(block_number[0].try_into()?) + Ok(block_number[0].to_le_digits()[0]) } } diff --git a/ionia b/ionia new file mode 160000 index 00000000..3a15977d --- /dev/null +++ b/ionia @@ -0,0 +1 @@ +Subproject commit 3a15977d749128ebb993ff388405477d305427c6 From 8952ecc8b802acce2ec8e7edc857f94a565906ae Mon Sep 17 00:00:00 2001 From: Steve Nguyen Date: Wed, 21 Aug 2024 04:42:27 +0000 Subject: [PATCH 2/7] feat: pull request template --- .github/auto_assign.yml | 22 ++++++++++++++++++++++ .github/pull_request_template.md | 13 +++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 .github/auto_assign.yml create mode 100644 .github/pull_request_template.md diff --git a/.github/auto_assign.yml b/.github/auto_assign.yml new file mode 100644 index 00000000..67c38620 --- /dev/null +++ b/.github/auto_assign.yml @@ -0,0 +1,22 @@ +# Set to true to add reviewers to pull requests +addReviewers: true + +# Set to true to add assignees to pull requests +addAssignees: true + +# A list of reviewers to be added to pull requests (GitHub user name) +reviewers: + - Draply + - 0x5ea000000 + - hduoc2003 + - zk-steve + - Tranduy1dol + - VanhGer + +# A list of keywords to be skipped the process that add reviewers if pull requests include it +skipKeywords: + - wip + +# A number of reviewers added to the pull request +# Set 0 to add all the reviewers (default: 0) +numberOfReviewers: 0 \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..4b812da5 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,13 @@ +# Check List + +- [ ] Don't forget to squash commits into meaningful chunks before merging +- [ ] Check every test passed. +- [ ] Did you split imports into std, third parties, and custom parts? +- [ ] Format your code. + - [ ] cargo fmt + - [ ] cargo clippy + - [ ] `taplo fmt --config taplo/taplo.toml` +- [ ] Check unwrap, expect(). +- [ ] Check clone(). +- [ ] Check your commit messages. +- [ ] Have you added meaningful comments. \ No newline at end of file From a94cb7c37b1a151e8102e40d7692417876805e00 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:59:29 +0700 Subject: [PATCH 3/7] Bump ionia from `3a15977` to `fe4cd5a` (#10) Bumps [ionia](https://github.com/sota-zk-labs/ionia) from `3a15977` to `fe4cd5a`. - [Commits](https://github.com/sota-zk-labs/ionia/compare/3a15977d749128ebb993ff388405477d305427c6...fe4cd5a49b87b997985356b7e514250712010797) --- updated-dependencies: - dependency-name: ionia dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- ionia | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ionia b/ionia index 3a15977d..fe4cd5a4 160000 --- a/ionia +++ b/ionia @@ -1 +1 @@ -Subproject commit 3a15977d749128ebb993ff388405477d305427c6 +Subproject commit fe4cd5a49b87b997985356b7e514250712010797 From 98c9e0521b696dead746b3815fc7bb8315b7f918 Mon Sep 17 00:00:00 2001 From: tranduy1dol Date: Thu, 1 Aug 2024 06:25:31 +0000 Subject: [PATCH 4/7] feat: Aptos Da Client --- .env.example | 7 + .github/auto_assign.yml | 2 +- .github/dependabot.yaml | 2 +- .github/pull_request_template.md | 8 +- .github/workflows/coverage.yml | 1 + .github/workflows/linters-cargo.yml | 7 +- .github/workflows/pull-request.yml | 4 +- .github/workflows/rust-build.yml | 3 +- CHANGELOG.md | 2 + Cargo.lock | 896 ++-- Cargo.toml | 36 +- crates/da-clients/aptos/Cargo.toml | 20 + crates/da-clients/aptos/src/config.rs | 48 + crates/da-clients/aptos/src/helper.rs | 25 + crates/da-clients/aptos/src/lib.rs | 282 ++ .../aptos/test_utils/hex_block_630872.txt | 1 + crates/da-clients/aptos/trusted_setup.txt | 4163 +++++++++++++++++ crates/orchestrator/Cargo.toml | 4 +- crates/orchestrator/src/config.rs | 11 +- .../src/jobs/state_update_job/mod.rs | 2 +- crates/settlement-clients/aptos/src/lib.rs | 8 +- crates/settlement-clients/ethereum/src/lib.rs | 6 +- crates/settlement-clients/starknet/src/lib.rs | 1 + docker-compose.yml | 27 + 24 files changed, 5049 insertions(+), 517 deletions(-) create mode 100644 crates/da-clients/aptos/Cargo.toml create mode 100644 crates/da-clients/aptos/src/config.rs create mode 100644 crates/da-clients/aptos/src/helper.rs create mode 100644 crates/da-clients/aptos/src/lib.rs create mode 100644 crates/da-clients/aptos/test_utils/hex_block_630872.txt create mode 100644 crates/da-clients/aptos/trusted_setup.txt create mode 100644 docker-compose.yml diff --git a/.env.example b/.env.example index 259562b5..939e352e 100644 --- a/.env.example +++ b/.env.example @@ -33,3 +33,10 @@ SQS_JOB_VERIFICATION_QUEUE_URL= # S3 AWS_S3_BUCKET_NAME= AWS_S3_BUCKET_REGION= + +#APTOS +APTOS_NODE_URL= +APTOS_PRIVATE_KEY= +APTOS_MODULE_ADDRESS= +APTOS_CHAIN_ID= +APTOS_CRS_PATH= \ No newline at end of file diff --git a/.github/auto_assign.yml b/.github/auto_assign.yml index 67c38620..dfded597 100644 --- a/.github/auto_assign.yml +++ b/.github/auto_assign.yml @@ -19,4 +19,4 @@ skipKeywords: # A number of reviewers added to the pull request # Set 0 to add all the reviewers (default: 0) -numberOfReviewers: 0 \ No newline at end of file +numberOfReviewers: 0 diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml index 9ac75914..db664508 100644 --- a/.github/dependabot.yaml +++ b/.github/dependabot.yaml @@ -3,4 +3,4 @@ updates: - package-ecosystem: "gitsubmodule" directory: "/" schedule: - interval: "daily" \ No newline at end of file + interval: "daily" diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 4b812da5..6eca61be 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -4,10 +4,10 @@ - [ ] Check every test passed. - [ ] Did you split imports into std, third parties, and custom parts? - [ ] Format your code. - - [ ] cargo fmt - - [ ] cargo clippy - - [ ] `taplo fmt --config taplo/taplo.toml` + - [ ] cargo fmt + - [ ] cargo clippy + - [ ] `taplo fmt --config taplo/taplo.toml` - [ ] Check unwrap, expect(). - [ ] Check clone(). - [ ] Check your commit messages. -- [ ] Have you added meaningful comments. \ No newline at end of file +- [ ] Have you added meaningful comments. diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 92598ab7..ae5b7524 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -41,6 +41,7 @@ jobs: - name: Run llvm-cov run: | + sudo apt install build-essential cmake pkg-config libudev-dev cargo llvm-cov nextest --release --lcov --output-path lcov.info --test-threads=1 - name: Coveralls diff --git a/.github/workflows/linters-cargo.yml b/.github/workflows/linters-cargo.yml index 96172230..d69cdcae 100644 --- a/.github/workflows/linters-cargo.yml +++ b/.github/workflows/linters-cargo.yml @@ -18,6 +18,7 @@ jobs: - uses: Swatinem/rust-cache@v2 - name: Format and clippy run: | - cargo fmt -- --check - cargo clippy --no-deps -- -D warnings - cargo clippy --tests --no-deps -- -D warnings + sudo apt install build-essential cmake pkg-config libudev-dev + RUSTFLAGS="--cfg tokio_unstable" cargo fmt -- --check + RUSTFLAGS="--cfg tokio_unstable" cargo clippy --no-deps -- -D warnings + RUSTFLAGS="--cfg tokio_unstable" cargo clippy --tests --no-deps -- -D warnings diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 84d6c35c..b337364d 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -4,9 +4,9 @@ name: Workflow - Pull Request on: workflow_dispatch: pull_request: - branches: [main] + branches: [aptos] push: - branches: [main] + branches: [aptos] jobs: linters: diff --git a/.github/workflows/rust-build.yml b/.github/workflows/rust-build.yml index f7cb3e08..0aa99829 100644 --- a/.github/workflows/rust-build.yml +++ b/.github/workflows/rust-build.yml @@ -19,4 +19,5 @@ jobs: - name: Build the project run: | - cargo build --release --workspace + sudo apt install build-essential cmake pkg-config libudev-dev + RUSTFLAGS="--cfg tokio_unstable" cargo build --release --workspace diff --git a/CHANGELOG.md b/CHANGELOG.md index 008be38a..3e7c7723 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - Tests for DA job. - Added generalized errors for Jobs : JobError. - Database tests +- Aptos DA client, Aptos-compatible workflow. ## Changed @@ -29,6 +30,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - Orchestrator :Moved TestConfigBuilder to `config.rs` in tests folder. - `.env` file requires two more variables which are queue urls for processing and verification. +- Shifted Unit tests to test folder for DA job. ## Removed diff --git a/Cargo.lock b/Cargo.lock index c5f84aa5..90852789 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,7 +11,7 @@ checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" [[package]] name = "abstract-domain-derive" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "proc-macro2", "quote", @@ -44,6 +44,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "aead" version = "0.5.2" @@ -139,7 +145,7 @@ dependencies = [ "alloy-signer-wallet", "alloy-transport 0.1.0", "alloy-transport-http 0.1.0", - "reqwest 0.12.5", + "reqwest 0.12.7", ] [[package]] @@ -169,9 +175,9 @@ dependencies = [ [[package]] name = "alloy-chains" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01828af9e8fb20a85b1caf6570d84ee93595d6cbd9e8ea96bda3a4e27a55a4fa" +checksum = "5b515e82c8468ddb6ff8db21c78a5997442f113fd8471fd5b2261b2602dd0c67" dependencies = [ "num_enum", "strum 0.26.3", @@ -483,7 +489,7 @@ dependencies = [ "dashmap", "futures", "lru 0.12.4", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde_json", "tokio", "tracing", @@ -517,7 +523,7 @@ dependencies = [ "futures-utils-wasm", "lru 0.12.4", "pin-project", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde", "serde_json", "tokio", @@ -551,7 +557,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26154390b1d205a4a7ac7352aa2eb4f81f391399d4e2f546fb81a2f8bb383f62" dependencies = [ "alloy-rlp-derive", - "arrayvec 0.7.4", + "arrayvec 0.7.6", "bytes", ] @@ -563,7 +569,7 @@ checksum = "4d0f2d905ebd295e7effec65e5f6868d153936130ae718352771de3e7d03c75c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -576,7 +582,7 @@ dependencies = [ "alloy-transport-http 0.1.0", "futures", "pin-project", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde", "serde_json", "tokio", @@ -601,7 +607,7 @@ dependencies = [ "alloy-transport-ws", "futures", "pin-project", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde", "serde_json", "tokio", @@ -776,11 +782,11 @@ dependencies = [ "const-hex", "dunce", "heck 0.4.1", - "indexmap 2.3.0", + "indexmap 2.4.0", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", "syn-solidity 0.6.4", "tiny-keccak", ] @@ -796,7 +802,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -809,11 +815,11 @@ dependencies = [ "alloy-sol-macro-input", "const-hex", "heck 0.5.0", - "indexmap 2.3.0", + "indexmap 2.4.0", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", "syn-solidity 0.7.7", "tiny-keccak", ] @@ -831,7 +837,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "syn 2.0.72", + "syn 2.0.75", "syn-solidity 0.7.7", ] @@ -923,7 +929,7 @@ source = "git+https://github.com/alloy-rs/alloy?rev=68952c0#68952c00372b4c388c7e dependencies = [ "alloy-json-rpc 0.1.0", "alloy-transport 0.1.0", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde_json", "tower", "url", @@ -937,7 +943,7 @@ checksum = "2437d145d80ea1aecde8574d2058cceb8b3c9cba05f6aea8e67907c660d46698" dependencies = [ "alloy-json-rpc 0.2.1", "alloy-transport 0.2.1", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde_json", "tower", "tracing", @@ -1111,7 +1117,7 @@ checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "aptos-aggregator" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-logger", "aptos-types", @@ -1125,7 +1131,7 @@ dependencies = [ [[package]] name = "aptos-api-types" version = "0.0.1" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-config", @@ -1155,7 +1161,7 @@ dependencies = [ [[package]] name = "aptos-bitvec" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "serde", "serde_bytes", @@ -1164,7 +1170,7 @@ dependencies = [ [[package]] name = "aptos-block-executor" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-aggregator", @@ -1199,14 +1205,14 @@ dependencies = [ [[package]] name = "aptos-block-partitioner" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-crypto", "aptos-logger", "aptos-metrics-core", "aptos-types", "bcs 0.1.4", - "clap 4.5.14", + "clap 4.5.16", "dashmap", "itertools 0.13.0", "jemallocator", @@ -1220,7 +1226,7 @@ dependencies = [ [[package]] name = "aptos-cached-packages" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-framework", @@ -1234,7 +1240,7 @@ dependencies = [ [[package]] name = "aptos-config" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-crypto", @@ -1264,7 +1270,7 @@ dependencies = [ [[package]] name = "aptos-crypto" version = "0.0.3" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aes-gcm", "anyhow", @@ -1315,17 +1321,35 @@ dependencies = [ [[package]] name = "aptos-crypto-derive" version = "0.0.3" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "aptos-da-client" +version = "0.1.0" +dependencies = [ + "alloy 0.2.1", + "anyhow", + "aptos-sdk", + "aptos-testcontainer", + "async-trait", + "c-kzg", + "color-eyre", + "da-client-interface", + "dotenvy", + "lazy_static", + "tokio", + "utils", +] + [[package]] name = "aptos-dkg" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-crypto", @@ -1357,7 +1381,7 @@ dependencies = [ [[package]] name = "aptos-drop-helper" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-infallible", "aptos-metrics-core", @@ -1368,7 +1392,7 @@ dependencies = [ [[package]] name = "aptos-experimental-runtimes" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-runtimes", "core_affinity", @@ -1381,7 +1405,7 @@ dependencies = [ [[package]] name = "aptos-framework" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-aggregator", @@ -1404,7 +1428,7 @@ dependencies = [ "blake2-rfc", "bulletproofs", "byteorder", - "clap 4.5.14", + "clap 4.5.16", "codespan-reporting", "curve25519-dalek-ng", "either", @@ -1449,7 +1473,7 @@ dependencies = [ [[package]] name = "aptos-gas-algebra" version = "0.0.1" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "either", "move-core-types", @@ -1458,7 +1482,7 @@ dependencies = [ [[package]] name = "aptos-gas-meter" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-gas-algebra", "aptos-gas-schedule", @@ -1473,7 +1497,7 @@ dependencies = [ [[package]] name = "aptos-gas-schedule" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-gas-algebra", "aptos-global-constants", @@ -1486,17 +1510,17 @@ dependencies = [ [[package]] name = "aptos-global-constants" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" [[package]] name = "aptos-infallible" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" [[package]] name = "aptos-ledger" version = "0.2.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-crypto", "aptos-types", @@ -1509,7 +1533,7 @@ dependencies = [ [[package]] name = "aptos-log-derive" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "proc-macro2", "quote", @@ -1519,11 +1543,10 @@ dependencies = [ [[package]] name = "aptos-logger" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-infallible", "aptos-log-derive", - "aptos-node-identity", "backtrace", "chrono", "erased-serde", @@ -1543,7 +1566,7 @@ dependencies = [ [[package]] name = "aptos-memory-usage-tracker" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-gas-algebra", "aptos-gas-meter", @@ -1556,7 +1579,7 @@ dependencies = [ [[package]] name = "aptos-metrics-core" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "prometheus", @@ -1565,7 +1588,7 @@ dependencies = [ [[package]] name = "aptos-move-stdlib" version = "0.1.1" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-gas-schedule", "aptos-native-interface", @@ -1580,7 +1603,7 @@ dependencies = [ [[package]] name = "aptos-mvhashmap" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-aggregator", @@ -1601,7 +1624,7 @@ dependencies = [ [[package]] name = "aptos-native-interface" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-gas-algebra", "aptos-gas-schedule", @@ -1615,21 +1638,10 @@ dependencies = [ "smallvec", ] -[[package]] -name = "aptos-node-identity" -version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" -dependencies = [ - "anyhow", - "aptos-types", - "claims", - "once_cell", -] - [[package]] name = "aptos-openapi" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "percent-encoding", "poem", @@ -1641,7 +1653,7 @@ dependencies = [ [[package]] name = "aptos-package-builder" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-framework", @@ -1654,7 +1666,7 @@ dependencies = [ [[package]] name = "aptos-protos" version = "1.3.1" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "futures-core", "pbjson", @@ -1666,7 +1678,7 @@ dependencies = [ [[package]] name = "aptos-resource-viewer" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-types", @@ -1680,7 +1692,7 @@ dependencies = [ [[package]] name = "aptos-rest-client" version = "0.0.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-api-types", @@ -1703,7 +1715,7 @@ dependencies = [ [[package]] name = "aptos-runtimes" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "rayon", "tokio", @@ -1712,7 +1724,7 @@ dependencies = [ [[package]] name = "aptos-scratchpad" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-crypto", "aptos-drop-helper", @@ -1730,7 +1742,7 @@ dependencies = [ [[package]] name = "aptos-sdk" version = "0.0.3" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-cached-packages", @@ -1752,12 +1764,12 @@ dependencies = [ [[package]] name = "aptos-sdk-builder" version = "0.2.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-types", "bcs 0.1.4", - "clap 4.5.14", + "clap 4.5.16", "heck 0.4.1", "move-core-types", "once_cell", @@ -1770,7 +1782,7 @@ dependencies = [ [[package]] name = "aptos-secure-net" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-logger", "aptos-metrics-core", @@ -1788,7 +1800,7 @@ dependencies = [ [[package]] name = "aptos-secure-storage" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-crypto", "aptos-infallible", @@ -1819,7 +1831,7 @@ dependencies = [ "dotenvy", "hex", "log", - "mockall 0.13.0", + "mockall 0.12.1", "once_cell", "settlement-client-interface", "test-log", @@ -1830,7 +1842,7 @@ dependencies = [ [[package]] name = "aptos-short-hex-str" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "mirai-annotations", "serde", @@ -1841,7 +1853,7 @@ dependencies = [ [[package]] name = "aptos-speculative-state-helper" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-infallible", @@ -1852,7 +1864,7 @@ dependencies = [ [[package]] name = "aptos-storage-interface" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-crypto", @@ -1879,7 +1891,7 @@ dependencies = [ [[package]] name = "aptos-table-natives" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-gas-schedule", "aptos-native-interface", @@ -1897,7 +1909,7 @@ dependencies = [ [[package]] name = "aptos-temppath" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "hex", "rand 0.7.3", @@ -1906,7 +1918,7 @@ dependencies = [ [[package]] name = "aptos-testcontainer" version = "0.1.0" -source = "git+https://github.com/sota-zk-labs/aptos-testcontainer?branch=master#ba2cfc2a0656e11204b40fe29f7c6b781ee7ab45" +source = "git+https://github.com/sota-zk-labs/aptos-testcontainer?branch=master#c52b8185d59c08ba04cc10bd8e3255765306bcbf" dependencies = [ "anyhow", "base64 0.22.1", @@ -1921,7 +1933,7 @@ dependencies = [ [[package]] name = "aptos-time-service" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-infallible", "enum_dispatch", @@ -1934,7 +1946,7 @@ dependencies = [ [[package]] name = "aptos-types" version = "0.0.3" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-bitvec", @@ -1989,12 +2001,12 @@ dependencies = [ [[package]] name = "aptos-utils" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" [[package]] name = "aptos-vault-client" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-crypto", "base64 0.13.1", @@ -2010,7 +2022,7 @@ dependencies = [ [[package]] name = "aptos-vm" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-aggregator", @@ -2060,7 +2072,7 @@ dependencies = [ [[package]] name = "aptos-vm-logging" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "aptos-crypto", "aptos-logger", @@ -2075,7 +2087,7 @@ dependencies = [ [[package]] name = "aptos-vm-types" version = "0.0.1" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "aptos-aggregator", @@ -2419,9 +2431,9 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "ascii-canvas" @@ -2456,7 +2468,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", "synstructure", ] @@ -2468,7 +2480,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -2541,7 +2553,7 @@ checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ "async-channel 2.3.1", "async-executor", - "async-io 2.3.3", + "async-io 2.3.4", "async-lock 3.4.0", "blocking", "futures-lite 2.3.0", @@ -2581,9 +2593,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.3" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" +checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" dependencies = [ "async-lock 3.4.0", "cfg-if", @@ -2591,11 +2603,11 @@ dependencies = [ "futures-io", "futures-lite 2.3.0", "parking", - "polling 3.7.2", + "polling 3.7.3", "rustix 0.38.34", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2658,11 +2670,11 @@ dependencies = [ [[package]] name = "async-signal" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb3634b73397aa844481f814fad23bbf07fdb0eabec10f2eb95e58944b1ec32" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.3.3", + "async-io 2.3.4", "async-lock 3.4.0", "atomic-waker", "cfg-if", @@ -2671,7 +2683,7 @@ dependencies = [ "rustix 0.38.34", "signal-hook-registry", "slab", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2721,7 +2733,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -2738,7 +2750,7 @@ checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -2777,7 +2789,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -2788,9 +2800,9 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "aws-config" -version = "1.5.4" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf6cfe2881cb1fcbba9ae946fb9a6480d3b7a714ca84c74925014a89ef3387a" +checksum = "4e95816a168520d72c0e7680c405a5a8c1fb6a035b4bc4b9d7b0de8e1a941697" dependencies = [ "aws-credential-types", "aws-runtime", @@ -2808,7 +2820,6 @@ dependencies = [ "fastrand 2.1.0", "hex", "http 0.2.12", - "hyper 0.14.30", "ring 0.17.8", "time", "tokio", @@ -2829,38 +2840,11 @@ dependencies = [ "zeroize", ] -[[package]] -name = "aws-lc-rs" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae74d9bd0a7530e8afd1770739ad34b36838829d6ad61818f9230f683f5ad77" -dependencies = [ - "aws-lc-sys", - "mirai-annotations", - "paste", - "zeroize", -] - -[[package]] -name = "aws-lc-sys" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f0e249228c6ad2d240c2dc94b714d711629d52bad946075d8e9b2f5391f0703" -dependencies = [ - "bindgen", - "cc", - "cmake", - "dunce", - "fs_extra", - "libc", - "paste", -] - [[package]] name = "aws-runtime" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c5f920ffd1e0526ec9e70e50bf444db50b204395a0fa7016bbf9e31ea1698f" +checksum = "f42c2d4218de4dcd890a109461e2f799a1a2ba3bcd2cde9af88360f5df9266c6" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -2874,6 +2858,7 @@ dependencies = [ "fastrand 2.1.0", "http 0.2.12", "http-body 0.4.6", + "once_cell", "percent-encoding", "pin-project-lite", "tracing", @@ -2882,9 +2867,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.42.0" +version = "1.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558bbcec8db82a1a8af1610afcb3b10d00652d25ad366a0558eecdff2400a1d1" +checksum = "4abf69a87be33b6f125a93d5046b5f7395c26d1f449bf8d3927f5577463b6de0" dependencies = [ "ahash 0.8.11", "aws-credential-types", @@ -2917,9 +2902,9 @@ dependencies = [ [[package]] name = "aws-sdk-sqs" -version = "1.36.0" +version = "1.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3587fbaf540d65337c2356ebf3f78fba160025b3d69634175f1ea3a7895738e9" +checksum = "4dee5603f3843d25559e670bed478c613ad0feb489db8e20f92d1e51227c3b58" dependencies = [ "aws-credential-types", "aws-runtime", @@ -2939,9 +2924,9 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.36.0" +version = "1.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6acca681c53374bf1d9af0e317a41d12a44902ca0f2d1e10e5cb5bb98ed74f35" +checksum = "11822090cf501c316c6f75711d77b96fba30658e3867a7762e5e2f5d32d31e81" dependencies = [ "aws-credential-types", "aws-runtime", @@ -2961,9 +2946,9 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.37.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b79c6bdfe612503a526059c05c9ccccbf6bd9530b003673cb863e547fd7c0c9a" +checksum = "78a2a06ff89176123945d1bbe865603c4d7101bea216a550bb4d2e4e9ba74d74" dependencies = [ "aws-credential-types", "aws-runtime", @@ -2983,9 +2968,9 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.36.0" +version = "1.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e6ecdb2bd756f3b2383e6f0588dc10a4e65f5d551e70a56e0bfe0c884673ce" +checksum = "a20a91795850826a6f456f4a48eff1dfa59a0e69bdbf5b8c50518fd372106574" dependencies = [ "aws-credential-types", "aws-runtime", @@ -3118,9 +3103,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.6.2" +version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce87155eba55e11768b8c1afa607f3e864ae82f03caf63258b37455b0ad02537" +checksum = "0abbf454960d0db2ad12684a1640120e7557294b0ff8e2f11236290a1b293225" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -3162,9 +3147,9 @@ dependencies = [ [[package]] name = "aws-smithy-types" -version = "1.2.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe321a6b21f5d8eabd0ade9c55d3d0335f3c3157fc2b3e87f05f34b539e4df5" +checksum = "6cee7cadb433c781d3299b916fbf620fea813bf38f49db282fb6858141a05cc8" dependencies = [ "base64-simd", "bytes", @@ -3319,7 +3304,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -3338,7 +3323,7 @@ dependencies = [ "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.7.4", "object", "rustc-demangle", ] @@ -3516,29 +3501,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bindgen" -version = "0.69.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" -dependencies = [ - "bitflags 2.6.0", - "cexpr", - "clang-sys", - "itertools 0.12.1", - "lazy_static", - "lazycell", - "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "syn 2.0.72", - "which", -] - [[package]] name = "bit-set" version = "0.5.3" @@ -3626,7 +3588,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec 0.7.6", "constant_time_eq 0.3.0", ] @@ -3637,7 +3599,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec 0.7.6", "constant_time_eq 0.3.0", ] @@ -3693,7 +3655,7 @@ dependencies = [ "cairo-lang-utils", "cairo-vm 0.9.3", "derive_more", - "indexmap 2.3.0", + "indexmap 2.4.0", "itertools 0.10.5", "keccak", "log", @@ -3756,9 +3718,9 @@ dependencies = [ [[package]] name = "bollard" -version = "0.17.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a063d51a634c7137ecd9f6390ec78e1c512e84c9ded80198ec7df3339a16a33" +checksum = "d41711ad46fda47cd701f6908e59d1bd6b9a2b7464c0d0aeab95c6d37096ff8a" dependencies = [ "base64 0.22.1", "bollard-stubs", @@ -3777,7 +3739,7 @@ dependencies = [ "log", "pin-project-lite", "rustls 0.23.12", - "rustls-native-certs 0.7.1", + "rustls-native-certs 0.7.2", "rustls-pemfile 2.1.3", "rustls-pki-types", "serde", @@ -3814,7 +3776,7 @@ dependencies = [ "base64 0.13.1", "bitvec 1.0.1", "hex", - "indexmap 2.3.0", + "indexmap 2.4.0", "js-sys", "once_cell", "rand 0.8.5", @@ -3869,9 +3831,9 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.16.3" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" +checksum = "6fd4c6dcc3b0aea2f5c0b4b82c2b15fe39ddbc76041a310848f4706edf76bb31" [[package]] name = "byteorder" @@ -4159,7 +4121,7 @@ checksum = "0c90d812ec983c5a8e3173aca3fc55036b9739201c89f30271ee14a4c1189379" dependencies = [ "cairo-lang-debug", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -4431,7 +4393,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6f98e8769412907ceb106c21c70907cc0c87ca0a2a44c82b6229a695a6f9b48" dependencies = [ "hashbrown 0.14.5", - "indexmap 2.3.0", + "indexmap 2.4.0", "itertools 0.11.0", "num-bigint 0.4.6", "num-traits 0.2.19", @@ -4447,7 +4409,7 @@ source = "git+https://github.com/keep-starknet-strange/snos?rev=4b4b3cdb614f9a6b dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -4547,21 +4509,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.8" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504bdec147f2cc13c8b57ed9401fd8a147cc66b67ad5cb241394244f2c947549" +checksum = "72db2f7947ecee9b03b510377e8bb9077afa27176fdbff55c51027e976fdcc48" dependencies = [ "jobserver", "libc", -] - -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom", + "shlex", ] [[package]] @@ -4665,17 +4619,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "clang-sys" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" -dependencies = [ - "glob", - "libc", - "libloading", -] - [[package]] name = "clap" version = "2.34.0" @@ -4693,9 +4636,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.14" +version = "4.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c937d4061031a6d0c8da4b9a4f98a172fc2976dfb1c19213a9cf7d0d3c837e36" +checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" dependencies = [ "clap_builder", "clap_derive", @@ -4703,9 +4646,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.14" +version = "4.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85379ba512b21a328adf887e85f7742d12e96eb31f3ef077df4ffc26b506ffed" +checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" dependencies = [ "anstream", "anstyle", @@ -4722,7 +4665,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -4740,15 +4683,6 @@ dependencies = [ "cc", ] -[[package]] -name = "cmake" -version = "0.1.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" -dependencies = [ - "cc", -] - [[package]] name = "cms" version = "0.2.3" @@ -4984,9 +4918,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core_affinity" @@ -5011,9 +4945,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" dependencies = [ "libc", ] @@ -5331,7 +5265,7 @@ dependencies = [ "async-trait", "axum 0.7.5", "color-eyre", - "mockall 0.13.0", + "mockall 0.12.1", "starknet", ] @@ -5404,7 +5338,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -5437,7 +5371,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -5504,7 +5438,7 @@ checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -5544,7 +5478,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.0", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -5639,7 +5573,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -5692,7 +5626,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -5712,7 +5646,7 @@ name = "e2e-tests" version = "0.1.0" dependencies = [ "orchestrator", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde_json", "testcontainers", "tokio", @@ -5869,7 +5803,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -5966,7 +5900,7 @@ dependencies = [ "da-client-interface", "dotenv", "mockall 0.12.1", - "reqwest 0.12.5", + "reqwest 0.12.7", "rstest 0.22.0", "serde", "starknet", @@ -5986,7 +5920,7 @@ dependencies = [ "color-eyre", "dotenv", "mockall 0.12.1", - "reqwest 0.12.5", + "reqwest 0.12.7", "rstest 0.22.0", "serde", "settlement-client-interface", @@ -6118,7 +6052,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "auto_impl", "bytes", ] @@ -6218,13 +6152,13 @@ checksum = "b3ea1ec5f8307826a5b71094dd91fc04d4ae75d5709b20ad351c7fb4815c86ec" [[package]] name = "flate2" -version = "1.0.31" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" +checksum = "9c0596c1eac1f9e04ed902702e9878208b336edc9d6fddc8a48387349bab3666" dependencies = [ "crc32fast", "libz-sys", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -6290,12 +6224,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - [[package]] name = "funty" version = "1.1.0" @@ -6392,7 +6320,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -6471,7 +6399,7 @@ checksum = "553630feadf7b76442b0849fd25fdf89b860d933623aec9693fed19af0400c78" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -6739,7 +6667,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.3.0", + "indexmap 2.4.0", "slab", "tokio", "tokio-util", @@ -6748,9 +6676,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", @@ -6758,7 +6686,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap 2.3.0", + "indexmap 2.4.0", "slab", "tokio", "tokio-util", @@ -7127,7 +7055,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "httparse", @@ -7180,9 +7108,7 @@ dependencies = [ "http 1.1.0", "hyper 1.4.1", "hyper-util", - "log", "rustls 0.23.12", - "rustls-native-certs 0.7.1", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -7466,9 +7392,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" +checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -7554,7 +7480,7 @@ dependencies = [ "socket2 0.5.7", "widestring 1.1.0", "windows-sys 0.48.0", - "winreg 0.50.0", + "winreg", ] [[package]] @@ -7565,11 +7491,11 @@ checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi 0.4.0", "libc", "windows-sys 0.52.0", ] @@ -7680,9 +7606,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] @@ -7842,12 +7768,6 @@ dependencies = [ "spin 0.9.8", ] -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "ledger-apdu" version = "0.10.0" @@ -7893,19 +7813,9 @@ checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" [[package]] name = "libc" -version = "0.2.155" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" - -[[package]] -name = "libloading" -version = "0.8.5" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" -dependencies = [ - "cfg-if", - "windows-targets 0.52.6", -] +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libm" @@ -7993,9 +7903,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.18" +version = "1.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" +checksum = "fdc53a7799a7496ebc9fd29f31f7df80e83c9bda5299768af5f9e59eeea74647" dependencies = [ "cc", "libc", @@ -8248,6 +8158,15 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + [[package]] name = "mio" version = "0.8.11" @@ -8262,9 +8181,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ "hermit-abi 0.3.9", "libc", @@ -8316,7 +8235,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -8328,7 +8247,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -8340,7 +8259,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -8399,7 +8318,7 @@ checksum = "1fafa6961cabd9c63bcd77a45d7e3b7f3b552b70417831fb0f56db717e72407e" [[package]] name = "move-abigen" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "bcs 0.1.4", @@ -8416,7 +8335,7 @@ dependencies = [ [[package]] name = "move-binary-format" version = "0.0.3" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "backtrace", @@ -8431,12 +8350,12 @@ dependencies = [ [[package]] name = "move-borrow-graph" version = "0.0.1" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" [[package]] name = "move-bytecode-source-map" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "bcs 0.1.4", @@ -8451,7 +8370,7 @@ dependencies = [ [[package]] name = "move-bytecode-spec" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "once_cell", "quote", @@ -8461,7 +8380,7 @@ dependencies = [ [[package]] name = "move-bytecode-utils" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "move-binary-format", @@ -8473,7 +8392,7 @@ dependencies = [ [[package]] name = "move-bytecode-verifier" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "fail", "move-binary-format", @@ -8487,10 +8406,10 @@ dependencies = [ [[package]] name = "move-bytecode-viewer" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", - "clap 4.5.14", + "clap 4.5.16", "crossterm 0.26.1", "move-binary-format", "move-bytecode-source-map", @@ -8502,10 +8421,10 @@ dependencies = [ [[package]] name = "move-cli" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", - "clap 4.5.14", + "clap 4.5.16", "codespan-reporting", "colored", "move-binary-format", @@ -8532,7 +8451,7 @@ dependencies = [ [[package]] name = "move-command-line-common" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "difference", @@ -8549,11 +8468,11 @@ dependencies = [ [[package]] name = "move-compiler" version = "0.0.1" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "bcs 0.1.4", - "clap 4.5.14", + "clap 4.5.16", "codespan-reporting", "hex", "move-binary-format", @@ -8575,12 +8494,12 @@ dependencies = [ [[package]] name = "move-compiler-v2" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "abstract-domain-derive", "anyhow", "bcs 0.1.4", - "clap 4.5.14", + "clap 4.5.16", "codespan-reporting", "ethnum", "flexi_logger", @@ -8588,6 +8507,7 @@ dependencies = [ "itertools 0.13.0", "log", "move-binary-format", + "move-borrow-graph", "move-bytecode-source-map", "move-bytecode-verifier", "move-command-line-common", @@ -8606,7 +8526,7 @@ dependencies = [ [[package]] name = "move-core-types" version = "0.0.4" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "bcs 0.1.4", @@ -8628,11 +8548,11 @@ dependencies = [ [[package]] name = "move-coverage" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "bcs 0.1.4", - "clap 4.5.14", + "clap 4.5.16", "codespan", "colored", "move-binary-format", @@ -8647,10 +8567,10 @@ dependencies = [ [[package]] name = "move-disassembler" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", - "clap 4.5.14", + "clap 4.5.16", "colored", "move-binary-format", "move-bytecode-source-map", @@ -8664,10 +8584,10 @@ dependencies = [ [[package]] name = "move-docgen" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", - "clap 4.5.14", + "clap 4.5.16", "codespan", "codespan-reporting", "itertools 0.13.0", @@ -8683,7 +8603,7 @@ dependencies = [ [[package]] name = "move-errmapgen" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "move-command-line-common", @@ -8695,7 +8615,7 @@ dependencies = [ [[package]] name = "move-ir-to-bytecode" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "codespan-reporting", @@ -8713,7 +8633,7 @@ dependencies = [ [[package]] name = "move-ir-to-bytecode-syntax" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "hex", @@ -8726,7 +8646,7 @@ dependencies = [ [[package]] name = "move-ir-types" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "hex", "move-command-line-common", @@ -8739,7 +8659,7 @@ dependencies = [ [[package]] name = "move-model" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "codespan", @@ -8765,10 +8685,10 @@ dependencies = [ [[package]] name = "move-package" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", - "clap 4.5.14", + "clap 4.5.16", "colored", "itertools 0.13.0", "move-abigen", @@ -8799,11 +8719,11 @@ dependencies = [ [[package]] name = "move-prover" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "atty", - "clap 4.5.14", + "clap 4.5.16", "codespan-reporting", "itertools 0.13.0", "log", @@ -8826,7 +8746,7 @@ dependencies = [ [[package]] name = "move-prover-boogie-backend" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "async-trait", @@ -8855,7 +8775,7 @@ dependencies = [ [[package]] name = "move-prover-bytecode-pipeline" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "abstract-domain-derive", "anyhow", @@ -8872,7 +8792,7 @@ dependencies = [ [[package]] name = "move-resource-viewer" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "hex", @@ -8885,7 +8805,7 @@ dependencies = [ [[package]] name = "move-stackless-bytecode" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "abstract-domain-derive", "codespan-reporting", @@ -8904,7 +8824,7 @@ dependencies = [ [[package]] name = "move-stdlib" version = "0.1.1" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "hex", @@ -8927,7 +8847,7 @@ dependencies = [ [[package]] name = "move-symbol-pool" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "once_cell", "serde", @@ -8936,7 +8856,7 @@ dependencies = [ [[package]] name = "move-table-extension" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "better_any", "bytes", @@ -8951,11 +8871,11 @@ dependencies = [ [[package]] name = "move-unit-test" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "better_any", - "clap 4.5.14", + "clap 4.5.16", "codespan-reporting", "colored", "itertools 0.13.0", @@ -8979,7 +8899,7 @@ dependencies = [ [[package]] name = "move-vm-runtime" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "better_any", "bytes", @@ -9003,7 +8923,7 @@ dependencies = [ [[package]] name = "move-vm-test-utils" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "anyhow", "bytes", @@ -9018,7 +8938,7 @@ dependencies = [ [[package]] name = "move-vm-types" version = "0.1.0" -source = "git+https://github.com/aptos-labs/aptos-core#06900559ea5f03b380b1637b861cdab34501ed2d" +source = "git+https://github.com/aptos-labs/aptos-core#362b812120a2f0f659ea9857d70b674db77b2111" dependencies = [ "bcs 0.1.4", "bytes", @@ -9367,7 +9287,7 @@ checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -9462,7 +9382,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -9494,6 +9414,7 @@ name = "orchestrator" version = "0.1.0" dependencies = [ "alloy 0.2.1", + "aptos-da-client", "arc-swap", "assert_matches", "async-std", @@ -9648,7 +9569,7 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "bitvec 0.20.4", "byte-slice-cast", "impl-trait-for-tuples", @@ -9662,7 +9583,7 @@ version = "3.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "bitvec 1.0.1", "byte-slice-cast", "impl-trait-for-tuples", @@ -9770,7 +9691,7 @@ dependencies = [ "regex", "regex-syntax 0.8.4", "structmeta", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -9792,7 +9713,7 @@ dependencies = [ "ciborium", "coset", "data-encoding", - "indexmap 2.3.0", + "indexmap 2.4.0", "rand 0.8.5", "serde", "serde_json", @@ -9995,7 +9916,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -10026,7 +9947,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.3.0", + "indexmap 2.4.0", ] [[package]] @@ -10079,7 +10000,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -10123,7 +10044,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -10152,9 +10073,9 @@ dependencies = [ [[package]] name = "piper" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", "fastrand 2.1.0", @@ -10307,7 +10228,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -10319,7 +10240,7 @@ dependencies = [ "bytes", "derive_more", "futures-util", - "indexmap 2.3.0", + "indexmap 2.4.0", "mime", "num-traits 0.2.19", "poem", @@ -10342,13 +10263,13 @@ source = "git+https://github.com/poem-web/poem.git?rev=809b2816d3504beeba140fef3 dependencies = [ "darling 0.20.10", "http 1.1.0", - "indexmap 2.3.0", + "indexmap 2.4.0", "mime", "proc-macro-crate 3.1.0", "proc-macro2", "quote", "regex", - "syn 2.0.72", + "syn 2.0.75", "thiserror", ] @@ -10370,9 +10291,9 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.2" +version = "3.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b" +checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" dependencies = [ "cfg-if", "concurrent-queue", @@ -10380,7 +10301,7 @@ dependencies = [ "pin-project-lite", "rustix 0.38.34", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -10477,16 +10398,6 @@ dependencies = [ "typed-arena", ] -[[package]] -name = "prettyplease" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" -dependencies = [ - "proc-macro2", - "syn 2.0.72", -] - [[package]] name = "primeorder" version = "0.13.6" @@ -10650,7 +10561,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -10669,7 +10580,7 @@ dependencies = [ "async-trait", "cairo-vm 1.0.0-rc5", "gps-fact-checker", - "mockall 0.13.0", + "mockall 0.12.1", "snos", "thiserror", "utils", @@ -10946,9 +10857,9 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.15", "libredox", @@ -10972,7 +10883,7 @@ checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -11065,7 +10976,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "sync_wrapper 0.1.2", - "system-configuration", + "system-configuration 0.5.1", "tokio", "tokio-native-tls", "tokio-rustls 0.24.1", @@ -11077,21 +10988,21 @@ dependencies = [ "wasm-streams", "web-sys", "webpki-roots 0.25.4", - "winreg 0.50.0", + "winreg", ] [[package]] name = "reqwest" -version = "0.12.5" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" dependencies = [ "base64 0.22.1", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "http-body-util", @@ -11112,7 +11023,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "sync_wrapper 1.0.1", - "system-configuration", + "system-configuration 0.6.0", "tokio", "tokio-native-tls", "tower-service", @@ -11120,7 +11031,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg 0.52.0", + "windows-registry", ] [[package]] @@ -11307,7 +11218,7 @@ dependencies = [ "regex", "relative-path", "rustc_version 0.4.0", - "syn 2.0.72", + "syn 2.0.75", "unicode-ident", ] @@ -11324,7 +11235,7 @@ dependencies = [ "regex", "relative-path", "rustc_version 0.4.0", - "syn 2.0.72", + "syn 2.0.75", "unicode-ident", ] @@ -11342,7 +11253,7 @@ dependencies = [ "regex", "relative-path", "rustc_version 0.4.0", - "syn 2.0.72", + "syn 2.0.75", "unicode-ident", ] @@ -11378,11 +11289,11 @@ checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" [[package]] name = "rust_decimal" -version = "1.35.0" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1790d1c4c0ca81211399e0e0af16333276f375209e71a37b67698a373db5b47a" +checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" dependencies = [ - "arrayvec 0.7.4", + "arrayvec 0.7.6", "num-traits 0.2.19", ] @@ -11509,8 +11420,6 @@ version = "0.23.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" dependencies = [ - "aws-lc-rs", - "log", "once_cell", "ring 0.17.8", "rustls-pki-types", @@ -11521,13 +11430,13 @@ dependencies = [ [[package]] name = "rustls-connector" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727a826801254b6cfcd2508a0508c01b7c1bca21d3673e84d86da084781b83d5" +checksum = "2a980454b497c439c274f2feae2523ed8138bbd3d323684e1435fec62f800481" dependencies = [ "log", "rustls 0.23.12", - "rustls-native-certs 0.7.1", + "rustls-native-certs 0.7.2", "rustls-pki-types", "rustls-webpki 0.102.6", ] @@ -11546,9 +11455,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" +checksum = "04182dffc9091a404e0fc069ea5cd60e5b866c3adf881eff99a32d048242dffa" dependencies = [ "openssl-probe", "rustls-pemfile 2.1.3", @@ -11598,7 +11507,6 @@ version = "0.102.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" dependencies = [ - "aws-lc-rs", "ring 0.17.8", "rustls-pki-types", "untrusted 0.9.0", @@ -11706,7 +11614,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -11846,9 +11754,9 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.205" +version = "1.0.208" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33aedb1a7135da52b7c21791455563facbbcc43d0f0f66165b42c21b3dfb150" +checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2" dependencies = [ "serde_derive", ] @@ -11921,13 +11829,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.205" +version = "1.0.208" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692d6f5ac90220161d6774db30c662202721e64aed9058d2c394f451261420c1" +checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -11938,16 +11846,16 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] name = "serde_json" -version = "1.0.122" +version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" +checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" dependencies = [ - "indexmap 2.3.0", + "indexmap 2.4.0", "itoa", "memchr", "ryu", @@ -12004,7 +11912,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -12064,7 +11972,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.3.0", + "indexmap 2.4.0", "serde", "serde_derive", "serde_json", @@ -12093,7 +12001,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -12105,7 +12013,7 @@ dependencies = [ "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -12126,7 +12034,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.3.0", + "indexmap 2.4.0", "itoa", "ryu", "serde", @@ -12248,7 +12156,7 @@ dependencies = [ "gps-fact-checker", "hex", "prover-client-interface", - "reqwest 0.12.5", + "reqwest 0.12.7", "serde", "serde_json", "snos", @@ -12372,9 +12280,9 @@ dependencies = [ [[package]] name = "slug" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd94acec9c8da640005f8e135a39fc0372e74535e6b368b7a04b875f784c8c4" +checksum = "882a80f72ee45de3cc9a5afeb2da0331d58df69e4e7d8eeb5d3c7784ae67e724" dependencies = [ "deunicode", "wasm-bindgen", @@ -12460,7 +12368,7 @@ dependencies = [ "futures-util", "heck 0.4.1", "hex", - "indexmap 2.3.0", + "indexmap 2.4.0", "indoc 2.0.5", "lazy_static", "log", @@ -12688,7 +12596,7 @@ checksum = "bbc159a1934c7be9761c237333a57febe060ace2bc9e3b337a59a37af206d19f" dependencies = [ "starknet-curve 0.4.2", "starknet-ff", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -12699,7 +12607,7 @@ checksum = "2e179dedc3fa6da064e56811d3e05d446aa2f7459e4eb0e3e49378a337235437" dependencies = [ "starknet-curve 0.5.0", "starknet-types-core", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -12771,7 +12679,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4fe4f8d615329410578cbedcdbaa4a36c7f28f68c3f3ac56006cfbdaeaa2b41" dependencies = [ "starknet-core", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -12805,7 +12713,7 @@ dependencies = [ "dotenv", "lazy_static", "mockall 0.12.1", - "reqwest 0.12.5", + "reqwest 0.12.7", "rstest 0.22.0", "serde", "settlement-client-interface", @@ -12856,7 +12764,7 @@ dependencies = [ "cairo-lang-starknet-classes", "derive_more", "hex", - "indexmap 2.3.0", + "indexmap 2.4.0", "once_cell", "primitive-types 0.12.2", "serde", @@ -12924,7 +12832,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -12935,7 +12843,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -13009,7 +12917,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -13022,7 +12930,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -13062,9 +12970,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.72" +version = "2.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +checksum = "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9" dependencies = [ "proc-macro2", "quote", @@ -13080,7 +12988,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -13092,7 +13000,7 @@ dependencies = [ "paste", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -13118,7 +13026,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -13129,7 +13037,18 @@ checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", "core-foundation", - "system-configuration-sys", + "system-configuration-sys 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658bc6ee10a9b4fcf576e9b0819d95ec16f4d2c02d39fd83ac1c8789785c4a42" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "system-configuration-sys 0.6.0", ] [[package]] @@ -13142,6 +13061,16 @@ dependencies = [ "libc", ] +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "take_mut" version = "0.2.2" @@ -13246,7 +13175,7 @@ checksum = "5999e24eaa32083191ba4e425deb75cdf25efefabe5aaccb7446dd0d4122a3f5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -13324,7 +13253,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -13454,14 +13383,14 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.2" +version = "1.39.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" dependencies = [ "backtrace", "bytes", "libc", - "mio 1.0.1", + "mio 1.0.2", "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", @@ -13488,7 +13417,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -13638,7 +13567,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.3.0", + "indexmap 2.4.0", "serde", "serde_spanned", "toml_datetime", @@ -13651,7 +13580,7 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap 2.3.0", + "indexmap 2.4.0", "toml_datetime", "winnow 0.5.40", ] @@ -13662,7 +13591,7 @@ version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ - "indexmap 2.3.0", + "indexmap 2.4.0", "serde", "serde_spanned", "toml_datetime", @@ -13721,7 +13650,7 @@ dependencies = [ "percent-encoding", "pin-project", "prost", - "rustls-native-certs 0.7.1", + "rustls-native-certs 0.7.2", "rustls-pemfile 2.1.3", "rustls-pki-types", "tokio", @@ -13769,15 +13698,15 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -13799,7 +13728,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -14030,7 +13959,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a615d6c2764852a2e88a4f16e9ce1ea49bb776b5872956309e170d63a042a34f" dependencies = [ "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -14163,9 +14092,9 @@ dependencies = [ [[package]] name = "unicode-properties" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" +checksum = "52ea75f83c0137a9b98608359a5f1af8144876eb67bcb1ce837368e906a9f524" [[package]] name = "unicode-segmentation" @@ -14181,9 +14110,9 @@ checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" [[package]] name = "universal-hash" @@ -14401,34 +14330,35 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if", "js-sys", @@ -14438,9 +14368,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -14448,22 +14378,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "wasm-streams" @@ -14480,9 +14410,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", @@ -14503,18 +14433,6 @@ dependencies = [ "rustls-pki-types", ] -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix 0.38.34", -] - [[package]] name = "whoami" version = "1.5.1" @@ -14590,6 +14508,36 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -14766,16 +14714,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "winreg" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "ws_stream_wasm" version = "0.7.4" @@ -14896,7 +14834,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] @@ -14916,7 +14854,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.75", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index b807d875..9439e6bf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,7 @@ members = [ "crates/orchestrator", "crates/da-clients/da-client-interface", "crates/da-clients/ethereum", + "crates/da-clients/aptos", "crates/prover-services/prover-client-interface", "crates/prover-services/gps-fact-checker", "crates/prover-services/sharp-service", @@ -24,36 +25,26 @@ authors = ["Apoorv Sadana <@apoorvsadana>"] [workspace.dependencies] alloy = { version = "0.2.1", features = ["full"] } -arc-swap = { version = "1.7.1" } async-trait = { version = "0.1.77" } axum = { version = "0.7.4" } axum-macros = "0.4.1" bincode = "1.3.3" -c-kzg = "1.0.0" color-eyre = "0.6.2" +c-kzg = "1.0.0" dotenvy = "0.15.7" futures = "0.3.30" -hex = "0.4.3" -httpmock = { version = "0.7.0" } -itertools = "0.13.0" -lazy_static = "1.4.0" log = "0.4.21" -mockall = "0.13.0" mongodb = { version = "2.8.2" } num = { version = "0.4.1" } -num-bigint = { version = "0.4.4" } -num-traits = "0.2" omniqueue = { version = "0.2.0" } once_cell = "1.19.0" reqwest = { version = "0.12.5" } rstest = "0.22.0" serde = { version = "1.0.197" } serde_json = "1.0.114" -stark_evm_adapter = "0.1.1" starknet = "0.11.0" starknet-core = "0.11.1" tempfile = "3.8.1" -testcontainers = "0.21.1" test-log = "0.2.16" thiserror = "1.0.57" tokio = { version = "1.37.0" } @@ -63,8 +54,19 @@ tracing = "0.1.40" tracing-subscriber = { version = "0.3.18" } url = { version = "2.5.0", features = ["serde"] } uuid = { version = "1.7.0", features = ["v4", "serde"] } +httpmock = { version = "0.7.0" } +num-bigint = { version = "0.4.4" } +arc-swap = { version = "1.7.1" } +num-traits = "0.2" +lazy_static = "1.4.0" +stark_evm_adapter = "0.1.1" +hex = "0.4" +itertools = "0.13.0" +mockall = "0.12.1" +testcontainers = "0.21.1" + # Cairo VM -cairo-vm = { version = "1.0.0-rc5", features = [ +cairo-vm = { version = "=1.0.0-rc5", features = [ "extensive_hints", "cairo-1-hints", ] } @@ -82,16 +84,18 @@ madara-prover-rpc-client = { git = "https://github.com/Moonsong-Labs/madara-prov # Project da-client-interface = { path = "crates/da-clients/da-client-interface" } ethereum-da-client = { path = "crates/da-clients/ethereum" } +aptos-da-client = { path = "crates/da-clients/aptos" } -ethereum-settlement-client = { path = "crates/settlement-clients/ethereum" } settlement-client-interface = { path = "crates/settlement-clients/settlement-client-interface" } +ethereum-settlement-client = { path = "crates/settlement-clients/ethereum" } starknet-settlement-client = { path = "crates/settlement-clients/starknet" } +aptos-settlement-client = { path = "crates/settlement-clients/aptos" } -gps-fact-checker = { path = "crates/prover-services/gps-fact-checker" } -orchestrator = { path = "crates/orchestrator" } +utils = { path = "crates/utils" } prover-client-interface = { path = "crates/prover-services/prover-client-interface" } +gps-fact-checker = { path = "crates/prover-services/gps-fact-checker" } sharp-service = { path = "crates/prover-services/sharp-service" } -utils = { path = "crates/utils" } +orchestrator = { path = "crates/orchestrator" } aptos-sdk = { git = "https://github.com/aptos-labs/aptos-core" } aptos-testcontainer = { git = "https://github.com/sota-zk-labs/aptos-testcontainer", branch = "master", features = [ diff --git a/crates/da-clients/aptos/Cargo.toml b/crates/da-clients/aptos/Cargo.toml new file mode 100644 index 00000000..50228d88 --- /dev/null +++ b/crates/da-clients/aptos/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "aptos-da-client" +version.workspace = true +edition.workspace = true + +[dependencies] +alloy = { workspace = true } +anyhow = "1.0.86" +aptos-sdk = { workspace = true } +async-trait = { workspace = true } +c-kzg = { workspace = true } +color-eyre = { workspace = true } +da-client-interface = { workspace = true } +dotenvy = { workspace = true } +lazy_static = { workspace = true } +tokio = { workspace = true } +utils = { workspace = true } + +[dev-dependencies] +aptos-testcontainer = { workspace = true } diff --git a/crates/da-clients/aptos/src/config.rs b/crates/da-clients/aptos/src/config.rs new file mode 100644 index 00000000..b0edc99b --- /dev/null +++ b/crates/da-clients/aptos/src/config.rs @@ -0,0 +1,48 @@ +use std::path::Path; +use std::str::FromStr; + +use aptos_sdk::rest_client::Client; +use aptos_sdk::types::chain_id::ChainId; +use aptos_sdk::types::LocalAccount; +use async_trait::async_trait; +use c_kzg::KzgSettings; +use dotenvy::dotenv; + +use da_client_interface::DaConfig; +use utils::env_utils::get_env_var_or_panic; + +use crate::AptosDaClient; + +#[derive(Clone, Debug)] +pub struct AptosDaConfig { + pub node_url: String, + pub private_key: String, + pub module_address: String, + pub chain_id: String, + pub trusted_setup: String, +} + +#[async_trait] +impl DaConfig for AptosDaConfig { + fn new_from_env() -> Self { + dotenv().expect("Failed to load .env file"); + let node_url = get_env_var_or_panic("APTOS_NODE_URL"); + let private_key = get_env_var_or_panic("APTOS_PRIVATE_KEY"); + let module_address = get_env_var_or_panic("APTOS_MODULE_ADDRESS"); + let chain_id = get_env_var_or_panic("APTOS_CHAIN_ID"); + let trusted_setup = get_env_var_or_panic("APTOS_CRS_PATH"); + + Self { chain_id, node_url, private_key, module_address, trusted_setup } + } + + async fn build_client(&self) -> AptosDaClient { + let client = Client::new(self.node_url.parse().unwrap()); + let account = LocalAccount::from_private_key(&self.private_key, 0).unwrap(); + let module_address = self.module_address.parse().expect("Invalid module address"); + let chain_id = ChainId::from_str(&self.chain_id).expect("Invalid chain id"); + let trusted_setup = + KzgSettings::load_trusted_setup_file(Path::new(&self.trusted_setup)).expect("Failed to load trusted setup"); + + AptosDaClient { client, account, module_address, chain_id, trusted_setup } + } +} diff --git a/crates/da-clients/aptos/src/helper.rs b/crates/da-clients/aptos/src/helper.rs new file mode 100644 index 00000000..5eff60f7 --- /dev/null +++ b/crates/da-clients/aptos/src/helper.rs @@ -0,0 +1,25 @@ +use std::time::SystemTime; + +use aptos_sdk::transaction_builder::TransactionBuilder; +use aptos_sdk::types::chain_id::ChainId; +use aptos_sdk::types::transaction::{SignedTransaction, TransactionPayload}; +use aptos_sdk::types::LocalAccount; + +pub(crate) fn build_transaction( + payload: TransactionPayload, + sender: &LocalAccount, + chain_id: ChainId, +) -> SignedTransaction { + let i = sender.increment_sequence_number(); + let tx = TransactionBuilder::new( + payload, + SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs() + 60, + chain_id, + ) + .sender(sender.address()) + .sequence_number(i) + .max_gas_amount(30000) + .gas_unit_price(100) + .build(); + sender.sign_transaction(tx) +} diff --git a/crates/da-clients/aptos/src/lib.rs b/crates/da-clients/aptos/src/lib.rs new file mode 100644 index 00000000..91fb1d78 --- /dev/null +++ b/crates/da-clients/aptos/src/lib.rs @@ -0,0 +1,282 @@ +#![allow(missing_docs)] +#![allow(clippy::missing_docs_in_private_items)] + +use std::str::FromStr; + +use alloy::primitives::FixedBytes; +use aptos_sdk::crypto::HashValue; +use aptos_sdk::move_types::account_address::AccountAddress; +use aptos_sdk::move_types::identifier::Identifier; +use aptos_sdk::move_types::language_storage::ModuleId; +use aptos_sdk::move_types::value::{serialize_values, MoveValue}; +use aptos_sdk::rest_client::error::RestError; +use aptos_sdk::rest_client::{Client, PendingTransaction, Transaction}; +use aptos_sdk::types::chain_id::ChainId; +use aptos_sdk::types::transaction::{EntryFunction, TransactionPayload}; +use aptos_sdk::types::LocalAccount; +use async_trait::async_trait; +use c_kzg::{Blob, KzgCommitment, KzgProof, KzgSettings, BYTES_PER_BLOB}; + +use da_client_interface::{DaClient, DaVerificationStatus}; + +use crate::helper::build_transaction; + +pub mod config; +pub mod helper; + +const STARKNET_VALIDITY: &str = "starknet_validity"; +const BLOB_SUBMISSION: &str = "blob_submission"; +const MAX_BLOB_PART_SIZE: usize = 32768; + +pub struct AptosDaClient { + pub client: Client, + pub account: LocalAccount, + pub module_address: AccountAddress, + pub chain_id: ChainId, + pub trusted_setup: KzgSettings, +} + +#[async_trait] +impl DaClient for AptosDaClient { + async fn publish_state_diff(&self, state_diff: Vec>, _to: &[u8; 32]) -> color_eyre::Result { + let data = prepare_blob(&state_diff, &self.trusted_setup).await?; + + let (blobs, commitments, proofs) = data + .into_iter() + .map(|(blob, commitment, proof)| { + ( + blob.to_vec() + .chunks(MAX_BLOB_PART_SIZE) + .map(|part| vec![MoveValue::vector_u8(part.to_vec())]) + .collect::>(), + MoveValue::vector_u8(commitment.to_vec()), + MoveValue::vector_u8(proof.to_vec()), + ) + }) + .fold((vec![], vec![], vec![]), |(mut blobs, mut commitments, mut proofs), (blob, commitment, proof)| { + blobs.push(blob); + commitments.push(commitment); + proofs.push(proof); + (blobs, commitments, proofs) + }); + + // Build and sign transaction + let sequence_number = self.client.get_account(self.account.address()).await?.into_inner().sequence_number; + self.account.set_sequence_number(sequence_number); + let mut txs = vec![]; + + let starknet_identity = Identifier::new(STARKNET_VALIDITY).unwrap(); + let blob_submit_identity = Identifier::new(BLOB_SUBMISSION).unwrap(); + + for i in 0..BYTES_PER_BLOB / MAX_BLOB_PART_SIZE { + let payload = TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new(self.account.address(), starknet_identity.clone()), + blob_submit_identity.clone(), + vec![], + serialize_values(vec![ + &MoveValue::Vector(blobs.first().unwrap().get(i).unwrap().to_vec()), + &MoveValue::Vector(commitments.clone()), + &MoveValue::Vector(proofs.clone()), + ]), + )); + let tx = build_transaction(payload, &self.account, self.chain_id); + txs.push(tx); + } + + // Submit transaction + let pending_transactions = txs + .into_iter() + .map(|tx| { + let client = self.client.clone(); + tokio::spawn(async move { Ok::(client.submit(&tx).await?.into_inner()) }) + }) + .collect::>(); + + let mut results = Vec::with_capacity(pending_transactions.len()); + for handle in pending_transactions { + results.push(handle.await?); + } + + // Wait for transaction + let results = results + .into_iter() + .map(|pending_tx| { + let client = self.client.clone(); + tokio::spawn(async move { + let pending_tx = pending_tx?; + let transaction = client.wait_for_transaction(&pending_tx).await.unwrap().into_inner(); + let transaction_info = transaction.transaction_info().unwrap(); + Ok::(transaction_info.hash.to_string()) + }) + }) + .collect::>(); + + // Handle "wait for transaction" threads and combine the transaction hash + let mut hashes_combined: String = "".to_string(); + for handle in results { + let hash: String = handle.await?.unwrap(); + hashes_combined.push_str(&hash); + } + + Ok(hashes_combined) + } + + async fn verify_inclusion(&self, external_id: &str) -> color_eyre::Result { + let hash_id = external_id.to_string(); + + let hashes = hash_id.split("0x").filter(|&s| !s.is_empty()).map(|s| s.to_string()).collect::>(); + + let txs = hashes + .into_iter() + .map(|hash_ptr| { + let hash = HashValue::from_str(hash_ptr.as_str()).unwrap(); + let client = self.client.clone(); + tokio::spawn(async move { + let tx = client.get_transaction_by_hash(hash).await?; + Ok::(tx.into_inner()) + }) + }) + .collect::>(); + + for tx in txs { + let tx = tx.await?.unwrap(); + if !tx.success() { + return Ok(DaVerificationStatus::Rejected(format!( + "Transaction {} failed", + tx.transaction_info().unwrap().hash + ))); + } + } + + Ok(DaVerificationStatus::Verified) + } + + async fn max_blob_per_txn(&self) -> u64 { + // This value is set to 1 due to the MAX_TRANSACTION_SIZE + 1 + } + + async fn max_bytes_per_blob(&self) -> u64 { + // 4096 * 32 + 131072 + } +} + +async fn prepare_blob( + state_diff: &[Vec], + trusted_setup: &KzgSettings, +) -> color_eyre::Result, FixedBytes<48>, FixedBytes<48>)>> { + let mut result = vec![]; + + for blob_data in state_diff { + let mut fixed_size_blob = [0; BYTES_PER_BLOB]; + fixed_size_blob.copy_from_slice(blob_data.as_slice()); + + let blob = Blob::new(fixed_size_blob); + + let commitment = KzgCommitment::blob_to_kzg_commitment(&blob, trusted_setup)?; + let proof = KzgProof::compute_blob_kzg_proof(&blob, &commitment.to_bytes(), trusted_setup)?; + + result.push(( + FixedBytes::new(fixed_size_blob), + FixedBytes::new(commitment.to_bytes().into_inner()), + FixedBytes::new(proof.to_bytes().into_inner()), + )); + } + Ok(result) +} + +#[cfg(test)] +mod test { + use std::collections::HashMap; + + use alloy::hex; + use aptos_sdk::crypto::ValidCryptoMaterialStringExt; + use aptos_sdk::move_types::u256; + use aptos_sdk::types::chain_id::NamedChain::TESTING; + use aptos_testcontainer::test_utils::aptos_container_test_utils::{lazy_aptos_container, run}; + + use da_client_interface::DaConfig; + + use crate::config::AptosDaConfig; + + use super::*; + + const INIT_CONTRACT_STATE: &str = "initialize_contract_state"; + + async fn aptos_init_state(da_client: &AptosDaClient) { + let payload = TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new(da_client.account.address(), Identifier::new(STARKNET_VALIDITY).unwrap()), + Identifier::new(INIT_CONTRACT_STATE).unwrap(), + vec![], + serialize_values( + vec![ + &MoveValue::U256(u256::U256::from(0u128)), + &MoveValue::Address(AccountAddress::ZERO), + &MoveValue::U256(u256::U256::from(0u128)), + &MoveValue::U256(u256::U256::from(0u128)), + &MoveValue::U256(u256::U256::from(0u128)), + &MoveValue::U256(u256::U256::from(0u128)), + ] + .into_iter(), + ), + )); + let tx = build_transaction(payload, &da_client.account, da_client.chain_id); + da_client.client.submit_and_wait(&tx).await.expect("Failed to init state!"); + } + + #[tokio::test] + async fn test_aptos_da_client() -> anyhow::Result<()> { + run(1, |accounts| { + Box::pin(async move { + let aptos_container = lazy_aptos_container().await.unwrap(); + let node_url = aptos_container.get_node_url().await.unwrap(); + + let module_account_private_key = accounts.first().unwrap(); + let module_account = LocalAccount::from_private_key(module_account_private_key, 0).unwrap(); + + let config = AptosDaConfig { + node_url, + private_key: module_account_private_key.to_string(), + module_address: module_account.address().to_string(), + chain_id: TESTING.id().to_string(), + trusted_setup: "./trusted_setup.txt".to_string(), + }; + let da_client = config.build_client().await; + + let mut named_address = HashMap::new(); + named_address.insert("starknet_addr".to_string(), module_account.address().to_string()); + aptos_container + .upload_contract( + "../../../ionia", + &module_account.private_key().to_encoded_string().unwrap(), + &named_address, + false, + ) + .await + .unwrap(); + + let sequence_number = + da_client.client.get_account(da_client.account.address()).await?.into_inner().sequence_number; + da_client.account.set_sequence_number(sequence_number); + eprintln!("sequence_number = {:#?}", sequence_number); + + aptos_init_state(&da_client).await; + + let data = vec![hex::decode(include_str!("../test_utils/hex_block_630872.txt")).unwrap()]; + + let result = da_client + .publish_state_diff(data, &u256::U256::from(0u128).to_le_bytes()) + .await + .expect("Failed to submit blob!"); + eprintln!("result = {:#?}", result); + + let verify_inclusion = da_client.verify_inclusion(result.as_str()).await.unwrap(); + eprintln!("verify_inclusion = {:#?}", verify_inclusion); + assert_eq!(verify_inclusion, DaVerificationStatus::Verified); + Ok(()) + }) + }) + .await + } +} diff --git a/crates/da-clients/aptos/test_utils/hex_block_630872.txt b/crates/da-clients/aptos/test_utils/hex_block_630872.txt new file mode 100644 index 00000000..4cc833e7 --- /dev/null +++ b/crates/da-clients/aptos/test_utils/hex_block_630872.txt @@ -0,0 +1 @@ +70a7f8fbac93666b6af18890f8cfbf659b7815948d27a6631d55e6920f43c6ae41ea84bd6df091e1d87cb357974e8ab1980abb3ad04ea751148709b6e10d84e14ba82298a6924aec387b1534d46c83b00480f3e5b260c0e8741a9c81f0c723bf1099801096dd7ef49faffaca915d18bff674fe04edab90ead0b7d3a25e5fa32269d47c2c5f9a749e9d39011405687fd5ddb05511863959baa6436cefc107b6ab51e7c79d8060ed5ddafafe19643fe0793fb31340dfd0e6ca716cf4228cb72943328907be4f824ffa6c65b0933f1a19c5b47408bca3b8d02b8f150e4f8e7fb7560484b488732d0e2c4cd8437d1d024e6f812417e83f0db959d4d0c688e4cf811a6a54adc9ce10049ec3afe788f55206949ecd64247b2ac724a8ba29cc588e2cd4714f128a5c9e2ae66ca645bebe72d1df7103387186d0cc2b417cbca5e277578d1a060c69bf0019da98be23ec01d77340507f8f31a18fae5a8231674616c686a72836aa40004e5553e3942aaed35f872643096e3ff392fc1a4393bc6053782bf0472004e924bd7074e069437d9ae35740406f56ffdd909b4354d4b8d7a5246e3f71796307b732497b34af9bc91d9c484d61a168cce2f896af3c7d831eb346075e699fd9edf5260e29deb4175b7f4227af4f874fc864a2cc27a1815852d837dc9e507469cc5327b2488f6fc33e659ce97b322d506b9a567262f73e6232a883e2701b3346a5db4d7872c01f3ac90021ec2b24a1fe53e45a6e2f8c612c6a88e764b30b42c7026df60c15ca042d813fbe671aedce864e6d78ca1d82f5b58fd5b8ca9d66d83c0484751c970ba7bf9d80313703f610957e561d8727d097a9f4f706365913686c9b9ef0543c2db745e9123ca3a6f9568c4a57b63ea932d58be0bdbe759e6c480af1ae3526b51b4e872ca23bc3e3482b6b070b1b055ecb744dccec277d4a06994117ab604e7e7699ae655e9680dde9c343c503db6bdd1dd0eebadae7db9920f79f831fad0aab22881ff70392b4436a57689b1aa3bb0b225e1859bc4bbeb1605274d49b670de57fc3be35ddf84f4cc5cc146743d9d3d46d76c124f8cccd026495872b55d3631110018ff810e68851fff88addbc4667f3d0537a98d0012b5942d8e3de1aeaf8e18642bedeece687ff946aa8f9a80f5631739b5426ee02291b706126c870c5a9b00ea6cbdc8d8bcc39763c8105a1b54246e94bd8797f9542c936d2a0bf3a589c82f74439ab6d5a0dced8b0ca0f6e90bea314f311395869e6d472a0e05f8e26408a5a7fe04bdfdd7041cd0d0e200e029de1452683a71cb930300e0b8b4ea7929100f555350f86181d5ea8a277b861aa0ce8bf2b6d025ca4dde11b3c6b9cdaacd8447104c689f072ccd3a8520e7119bc3a168f59cce0809e90f2506ad3940ec65ece052e90a873b4ed196208bdc71e898b70de49e6959f0f22384fd49ca2e351666f4bdba6a2d2dec12ad602a7a143643df701aed364a9ae6bd603dc80932edc2e1db64adf00b8ec9f3026779a1828674d879eedfb875ef734745209401ff54fa61e5876693c76f4bdd9cba146ac77fc7abf7dd37cd5d758d60b0f5ba42995b3eb98c88c21993ef6c1f6d2608f2ebbbb6e4450c6c46e18fff3a410cd928d4b187ce689ebf9699a85b3c7f1496364196288695151b6bc98b29b9631eda8a6e6520f628b6b17f37d1a3c4354bcc6c31a9ff1c3bce10ea46eabe5df1bb386bf98fff42ab413aac7cda13b4ebd35d9a8cf497f3479dbff00ce3401156f68e6fb5bf1da565bc6865fbf6ebcc42055378ad3716a3c405e137acee435da06f93e3195026a973ec5e8d20969fbc4e9e07ace02828fd362ad9647a0d1c2e5720cb99c5148dab43cae3cb6c4362a98a86c8d07d2704e3bdb8bb66334b8bc4412bb4dc9809898e4c435aa8f1694e1c7dc08d5393f81931fc4c0e8923c5a0c837133fa9224c652b586da11c84c44450e2065d579cc879c44bae83c9855a7ab8e3d61cb773f45074f2324d4cec1443488bb338ef78f55c06ea351cc63a2ea6a330675255661ed43c15b60168a2d0fe63415fa970de9cd3677579346f1a6eb5d144ffeeda8a5a3380d729f27bd0de6718ac9fe4a010fbdb1f6aa554b88309c543c5e3ad51e852f2b8a9c3a1751cc5b923859348751a0364f1b9a54da9615ee10e51aab58d737efbc6812042921e319e19b1267123985dcbf8a99436f1c7301b1d55cea2d13bba342bc31d713d1430e59d86c1bf930a48bfeff3b5069d504edc3036011c9091acaf8377f7e94c7dc99836459ba15aa8573a46fc6234fac0545d3f14a5de1d4d5d3085740747a141176be33cb0fbf6f03dd40edd0f80a1be207a1ce2a1c1f40d616d26d557e14f5e3285ebebdace18707189b2eb835491758f01d1a1863bcee25922d5622e224a18630ff0c7317c33a63adf9d7344edd28447b8dee565a871ead5201654be76dbfe42c142f2508f337dc9a5633c115941e5e80506701de33b61f2b601fd56c8fe88d7802d6eb3d37887313b7aae48bb8f5943a34a46bc4a3c42382850eb272a8e90ba4cec279f9d5edf4a0b329753e246fed3328ea0af26a601a39b2656dfc7652b845866293d0d1014a5d6b2f9b775ee4369a8fc21aee405e008b6bdd6742a776e0eb224aa2017634f56ce127745680f60c07778d452dbb9ecbb9757fe8e752ce74567a31593fbc921aac528587e165d0ce44458754b7b85da92e11034838a0d439d7f9b86f7587ffd97e947652d340f4587dcc485464e8d1af046b32b6d856492900109f93594be9d1c02c039152bfbab5d19ce64ac63be26019c5cc9894c9d42dfedeb63cb6eb138a6055c36b4d989dada73b6c18a0f5599c1b17dbd4f4c31e629f58036c22ab9ab7c6d26123e780646373eceb5969f583da7c3195fc0a7649b97f022bfa4720218f72f1ff71044caa3e984ecc2faaeffb953817ee1ec57ea326fa219926a59ae558c4a07165b20f8364939dd901e4fcd9804e6c3a5285db16a302d12bc3efc1e97462fb5031894ec69e24ee2c1af287483528eb3fc7c01ec4d31bb0a9b67670d39a4fa9e58d115160690f636935740099ceed7c7e0172b77a6983e6ebb204761f24ececfc1dd25cd6a401c0b80d7936d765e2e0c4b0f6b738808afb7ad447ed8af73a991ac65c0825e37f037c71a81c0d2b4b97e5b4e69cb359214e49006d06ec30844ce9de777f1e2bad30fe6ab333ddd3b1055aaff770f6ece2ada573ba2a40f3137d51f036a428539c92eb3b622b2ea8aa7aadf5754906729debae0a483ce2ac52454134ff23408890fc1e1e5f47f76b93f2250879f6a8e2cf12b7e88f0c047969aa774d72891f00d10965604044d0c854586e95ec09e15597b7c43c1d51a524f3da45ccf1ccc9a020527c04f2457deaf9a3d177a7c51cbad7c52fb61661977781a0bb043ac5e2b7258e81504f155565159578ec23a136657ab89848b9af3a7cbd9c4fd1c85d61a06a875d065055b079e4232d53e6120aab6825adc6dcd43082540d0ea9c695cd3ea08d1747658c4650af0a3eaf433b1f0fb25fa5b9f9b00ad16e1e992f9151e85c4e43de173ea294c2042ee2dfb520bfacd08061e4380c77412b7ab559f42b6a352f91d717260dcad4a232f1707b12e3b68bf7dc3d0ee418aceee09dff273690481f57b562c087436a665437f06a6c92c1a47f6f0aaa37774e8c59c4914dda2adcb87250399b4c7e90a27df214da1fa49d74ec9e7f9da5c8044074483f0a212cecc903541681abb06d77be03e8c0e58d29b40b5151b406a22f0b40ea197296d087473d4c0722d2939b64be3a80f002befdd886f8829d52aef6a41e6c11f658ade3798a0b1f6b4eeac71dca636659b90a35ed060de1209daad45521a56296e01a869638f66dff84e9d6c31b955c1941fbd494a634b1fe794f93236d1716b428dfb0b0e2770d9106ab434ede2293a2beb4cfc858ec1b61ed0ea695dcca3448f35b9f26dfba1dce7a59939ebcf81cd10c6c812074385af1e0862a85144e1c723480a0f222b44ec2c09a5c0c199ea98b5c381017bc8ceaba608216131abfe36c58aade1766b3724541f8a4722c4fc6dcc4b220b6417c963ca6662386baaa2b3b07ba72e01c8123bee6c1b049075a2786d7dcdc5fb5d7e803006e5648e2f1cf26de224bfe78ab2603bddcebfb3e98a8730d75afc30af5d54bdf25f4812e8840df1f0695eb6929478321b2885546b4360f1bf08f283dc9cac93324fb2b35d0ed92851f8ee4bb47556d831f1e7bb6d01dd69afeaa5dce6db323daee273101926cab3c37da8af7904a3398b55af9abfbdba0832f6c83bdc03559a65f5174fc9e9bdcea6dbcc60c576cd5b3e88311b413f12eee606580b332b84693415d69979a87eed1e9b19cd77f355800f52a3c4e2e0e5cea63bab250ff05dfd0559f75f6eb67ada2bea42a471f20faa8778b1a8b6e8880f1e7a759f1a49585106c509f4ffe4485ad99978b9b783378aab8a68630cb239963a5f9bcec1a0f1a823036554c90594878e792b3640833786958cc6a775c1bad5d87ab8a69f77ba456ca921ff533c4b5a2dfb027e4fc37752e72d93445dece40e4503b85762a4d0f930115c76be67f6c3650099994d73b31be3cc2b542d1ca9525f61b2c87a08824e522002663993f375ea01de6f33d2814086ee22cdc1d12c5471947b73b1b131264625dc93cb844c207892fc2dd4846a77b62976ffeae116e59469a8da75c7798aa7e6c66955a5b071df977fd31e15b56a6ea5661070d41075373ee2161cf7d7e0ef7cd51b7047acec831357a9a62047766bec8c4c103418d7bbbd767e96ce0c9c79dcf9558e61c56a051e55307a20cf2edc36fd9cde676bbd6318bf6f06d4684973d7b67829b8a9fe5c0e249a0ff301c43e27225d8a7020215c390b400700c8db47b34bbaf09e74460085ed98e301ab5dc9ee3c5002828aaf62d6f3ee56955f7e9cfeaf07ae9b42f894c2078b17e25010af7a4d153fcf659d8da89cd33f06cd17349ab0b27bb475bd0905da2edb92d5f53f38a21c5d36c21730598a3d57b89d3df6c5a44b1e8e77b8829adfd25c6202a7d0e4bce490720905aa77d697bd064cbc8354bf8ec01d846bcf586afabcb0ec95373df626221e6904aaa5a560c0670dbcac230dd8b36ae50844e23395b465a828027ed4595dd9554b67a67c14e278379fd450b7dc538b1974ec857bbe6be1d774765b9e6b970dec02c463a182206b70a6acbb6bb41826ed1f0fa3e078aa014d0ac696f4bff305e71b07660a0a0ebf171d0f41a55dfbf1747a7904935bbd0585b394d8a3ea36bd32cbb5729d025b9767fcb534834b5cba4374b563372c5084e515579a8b1aaa8f90bdd269403b7ad5a8947ecb7f75198c15a780086db76513d75c42de4cc173e092183134b51c14432f07ab3f86ad1795fcddc616585118a326859438a1cd7fac28457d4f4c54093b128a1a24b28eaab90ec284994e6e5eb6e2468a2893b7185dca1408d6c343355e338b3b8626b46e67bb2fc592f9dd53757e3d056d593a121e0141c54f3f91dab93889b6f2af6e82bee0c16674a1e1215295b2b212cb5f6e0cb0522efaced1a92f0cc43a53c36b6c2b9bfb7ed887ee0d959b8fc9f7e175e786dbad2a5fcf2e4c3822adc361aa7a5ce1f854890358e2aa100ee3636e02363cc5dc2f1cc83fc73ee9bbcefaff6be54eff32afb92f379f25421913e4800352040f1775a317f476e40279f84791359f563f95293799dbadea463ddf0547d931e9537df02603f706a137503bfe7fc96e9320e6bcc527920478e4bffb11791c896818bd68ce4e728d5d4ec06f34dd1ffa29c970620f6613a47cd3ad3221b5e9b843f03127399683f9a2a6a88689a54500e8817852efc95d9b36a39fb8cb4c11133b863e6cdd096d78b295259e4050648adfd8572580b5b04b7a3345f5bbee76ec09bd77cf69b87f58ab1fa639edab9aa3cc3f9622c43302d90a723c8c1a76210a77e832b669b8cadf7586a1dcca8b679d7fd429c8f77b985a7961ea5b2800955f7994e35c34a6de12ecdce9ec543ae7abb77ab571a5aee484f09142847cf1deaeb589358441fe41ff94ca8dded31e308a856c33fac51120bb6911a6763cb7c5d6d45b61ef57b8f9e5d89c882012eb7183b3ab98d27a30a156785111615d0b9ca6d66859cfe8e75d97ee837efff02b16cc7e02870975d7eff7bbd6578e1064b4cd8ffd926e6218f22eb3d70e9922a631edbd289bd37176ca29cd7526ece27942ed6d8c686234c03e56df0a9dff2c9b2697a1c4391648d360e54b921de4adfbff979b9857ca8b5ce38c9bf4794a9cedf74c835c9caebe1826cec7d5314365bd1b1a42f88593b6024aeaf03d26de995f2793a6c1b4aed92610032305c420d9aa56fc1c3bbba628d28ee5b21105eba9679ce05822c09e39d68beed37220ff1c4b6cd36f5ec8ce9438212d0e4ff711c1fd44c38814ca8ec1ddeb4f87b45adcf48d50b9e8be9ef5ddce8ed60d6569b0e4efeeb8095516b16351513765641e91b6e73f705cbc72be218b21079f9095987f2a3effb9325f5a0648d44293a438fde973dec69f184de07886b2240cace4fdb1f18d47bf0b44be24fdad8fe7f40679aefc8c371b27c4dd655d9f6413feb0c7ff4c8d6ea03f722e097f995552113a51d771e56bd74f8545e7d26069bfca20f0a335e0f9b3f8235818131363b8a02dbf9bcf735295990ff176a38c92e1ac0e7efcd5bfe1db261d9d47b0652fd761e3eefff4d0895ac2a48d5aa9b0bee62605693b8c913b11e6dcb12efe622d8f630a9df5938516c8ffcf0730dcc64a8561d0e1f4aa1f1993695529636df45ca803f3cec2be9fd74499cb4eeef746703ea373e33c4dcb4149221b5e6ccf8eec4a01921174bffd216da8b91848f298492ea53e14ac804c1652c9eebaaee5f2fe14710072c3e626b3c89100544f4a82ecfb80155e92502ef5778707b3475bbfec5750624f6c23afaedeea0c5133c5311905f7e758b18c392bf63c9623f5db089fd4b37f94185c01ac4dbab1054c9e7c90f9efbbbe028016b667491c653e19a744db26133ad748d1417b2278725d892c5342306f8be2c295cb6d5cbe7536d4b6806454f10bf978883a9e69e86d0bf8e9874eaf75808b10625ebfdcadc8f7d43aec465099101e1d752a8fafeb45274a8f059491f44c2be428f84a299f2877b77aec83a6834a6fe09c531ee857514578f9a8afeacc5fbcd39798019ef55eca31208045f5a719a3e0a0e46e9d23cc9944cf0ac178cec31363af4f72780af50b73148c99f60ab37cf0516075dc28a7a32e0a546a79a768d64359b277d385ab4f03344f5b0674ea807cba63956cc2529448e9a2447921d5742208aeed9ff898d6bd7ce52a85c83479c4f7a15ec6a7f5cc6e8c6331f01ca3a110127f1219a280ea78420587b197df12923cac2da404bb018929c083288e0efb95fd2acce652d8a369dd4dbaf59a257fbcb08a9f5c32635ad8239149b187bac79bf9268079a103a66b95f993156986a1bd5ffb76b44d7d6dce142d5c50aef135ce551ce4d2aaf10a788a57a513bd0be7464576eaea2fa750c86e89e7fe1b88c9520be914c7fb7c20210205e3e14fe02daf0a8cae04009741b7ca2441e9e450ef9d2f1e70ecdc237323371d1de1b97feeded5b47cc88da4283bffa4eddddeeaa01790f0a2cabab37f5957999bf0bb42c547c12f2bcb650131136185105533b756365af9b4f9e3487ad7bcdbb481c0a63c09b53b85c5ac401c2c2437a775499121d673e3e6f8897a399e99f994d42403a5e990d0d0804ae42c77379cab5c4ac7e1432e902985ad5e1ad865a63575075a2fb804b027627abf5db27596839f4fd05068fa6bfef24e57b37e203825711a4eec7b334f835cae642189821d134c6759cca224cec9d5538bf1ad028cc190a4b0f5ac689037864243cf7d60481f2f226a6b30f72f593878586c5cd10be6d5fb6b6120ef0e69a652b6bcc8074d34bf287db16f6b19b38841d2ee1e33656683d504bcd77795ece217dabbf7e1a62c955b55fdb650bbe3516245c2eea33f896678f722f23530c9e263e1b9345a3462ebe38114669f345dd5e310bcecb00193d10e54a38944cf14d1eec532b459976a7764c7bfbf8730572948545a4edd0c2f052c5e49b68b962e44654c966b4b3f56268fd9deacaac7197a099bb0c6737c6a85e307ed31b6899fcca15c5fad36457a9c42742426e9e58570efd04868138cbf54ac9fdfe2b690e8919857dfd602ad985c5c69a3383ad17aae2efa255eb686c5d213e34cbe4976afadc6d6784eb511da4e7c7da4ea174a9427d718bc9dacfe4a739b5fa00df26fdc18534f5c8095674812cf20ea7d2055964e1c96ea6c5345ca813ab28a89d53ffb763ea919c442d9801a63f8bd6159d20f9045b51808d6c61c545959e1f40432ac43d5c0e744b50b578f8d0144c48feda3437369bb75c44739b5785273a99cfc1f38d04f1cfde62e971861761bb6e54fd1275a6aa14c550e9bb195ea49cb95191e680ae772488d0ff94c5ac8fb584dda728a4b8275d8b762c550c9b6e647aee73d0a62d9f8bea08062be84d57513ef20cf56459930d6d8bd75e26cf129b4720f7dcc7b4c520f9e6f2d3e402e6657a8bdea41fb0d1f438274c256ea9922889c673ac3366dedc3ac4ccbf24737484b1130ae0eb5c91ed5dc67298096aea52c5e34b2bb291fd479ee2957fe33d75dd78eeac6b51dfe47b542666801edf93b676d161d5682d9a83784381f9120cf9a1175093009051eb8f5fe5a7ef3b4edafd08f4f9119855b5d92b20686211dd52c898a661cabf8015144fae7f1718f5587920d204fedbe9b58cb17d11964afac56100298612b377289a3f50ce9d5ab80c57ffaccc67032baf412e3d8075f1eb63d3db7fcfa54d99ec0247a34aa914fd18af373842753f8b34f3d5ba0dd28385a1abce60ed8150a98b1bad65d02a491f53f72630d7d631feb817cebed2279c9b5564f0dfaf1283e62c7abf18a1114d99d58da2917043ce6b9988f1f34b1639a99ca2492827ee24edf999e15203925734a80cf13779a04d3f0f3425a8cbf73c76c43d929179d4628b317984e3de8f0a4bc673f7fa90e8453d30f11c0ce71952f10aa6a94a10da0f98f7c7a404f3fa67f5605457cf6caf6c21a72ae9d588ea23009829d111f182b8498f962812defa07050bc20de9fa400c2230db399508677999e7ab7d55ff3db34ce331a6d63eba6d1c1265e876f498a40f5a1904054c6b48328a020ce5b31f363eeac498262dc669fe365b2f45cd7040bdf2eabf5c23a86535d826c32ff1bbde28ec884956d6c6444b94aa624728a3062a7616e30699153deb5cfe4abbfb463c121582f74398b833a1e6028206733266aa3765269b46a197226cec5204b9270dfae419ee8c38b968f0ce81b40cd41782cdd8d85c0836eebceef1a433a81e0b6830ca9af693bfb42e2d279c1d537c28495c6320a24e9a34fb5960f381f7478ed1e071ab9ab248760e6fbb6e710e8df7d6975913219301f9035b8e13a1bcd48e86e2bed1a76e10363e2c39c8f714f6b4401ae4fc069301201db4c65e7ea3eefb2188f8e9bbabd6e00c42235d1d77f6549fe24de93041fa89bc957feb0f1d779cf2055040deccab6603a7ca30a809246d802a8c0ed40c1849a2b2ab13040e12e6a702758f4e3be04e60f2e28c11779775a24a9a88ce2fb757eda6f4eb1ae87a3b02bb557a9b2dc9b2335384bc5b0569c90e9a618669896eb018777f34dad24f97d8b3f89542dabce51d292c4663f1d524b6a1b9f08f0a3701274489d1e2dfb93db66ac6c497cfe9585399b16c2d6a077dde7072c0678f9e18981bdc428a0d8d88d12443e4d02ce29a18e6bc6bb05da86349b4d611bfa59941e2f3f3a9c7c21f8c60ba7bacaaaab21f2f0690214fbeb42813efb735dfb65b1755290d0945f2ef8094aa4e80e585e66747f22db061ad185409e638dd935e0bcfccab8f7c2570b0b5e19e192d1c7947935ea8a8d14a0e07e5e1ec31ebe97a7f253f86fbe559c93b32eba64cd51607ac194c480453a83b8e333883654246a2699b81553e16d0ff4c9515b570a7e814e9e2288627b324468492908430ef909af865cf47b76bbbbce8edc2735858986680cf3862332b311d315204bdd82924ef30e38c75f9ee3cfcb91f89dcb2815997086e0d0fa5f9f908916efc8dce49feac2b1f49f3ff16155cf0a8327415c021bbdd633397984386caf961f6ab9f16eb81941e5b08d3530ae85e58213ff006842e206530a39569c08f03839578abe085573cccf4e5c3683277e85b711978c769e162ef54248286ae4039b810288c9c38cd597ffcf4d37b7da3fcbb534ff2591dea16c432be38b8cf2d836f5bd94e8692776156942869e34dd018d0a14af111ace79c3710428556b6b6d0e0616c5ba05bfe335550208926c2e0c65b68cb02aadb9d2eae3fe9df987a3e333c83ff1b1111bd813b7791fa6316beacd6d49a2dc0e62bb4654c80d6dbf6367b5918a157a1e1d672d17a3922cce1c945e1b8d8dfbb22000d6f32521b08fe99027e460e58888cdc039198fac5cea66423d141bb2d74d94c3e7d19168484f6ce8458f278e045dfdfadec6f040fb975a9bad22914dbd1072fcaf04da049cb1e63b9975c3f8d67e86c5cb99c97778633becfbd972c01ac4ffb8e2e214fb17f2a26b6939d231674cbc867f289954d7fdf5d3024f639ec406bb10bd92bdf2db2df7545b5dfb4e8614757536b9dbe3a0ba4e2f6a5dec71ef396e411884eaf98f27c33b857ca6c257bdedd880cae3c130e04db933ade316d59f349059551e7ac23a7ec0ef9f5c5d0405a9565fc74d46890933bd607276fb6edb9c62d8c4621f1f54d7599c33c350d3575e89dda95347e3a53f69d3475cfb31dc385adcc671a5145ef2c4389783ac059123263a6a36d3dfb350a3342cd9fb92a6f61bb045b213c2d14379200fc49b8e19937b40b0c820f0f64c3d85af0ec2ab28fdfa6f3663656d57fc5ee6eb9c19723faba8055517a85445a5defb4c62e96a8c6d2892e6ab7d0033acac275ea9eca6a09d1ad8636490fa3862d67d7de2d590a51e8100c38d0416895b645bd328278633912cba982b0c70dbec8a8c6e9dc1c2279e0a818206a1649410b873da615296fabd7531f300239a23f462b57f9c90360bbf252f51cf325e953123196e1f29b80202bc455c84c36bcb030f5b9ad58d8758c459d5216061f3d50dc915881a1ae09ea5fbf9e72feb5d164ea9fc423ddcc38771ce625227752356b44fc70b9827463c0ea80b49f50218d738fe18acb79fbbd7328184063257fde2020d7f86a7e44a57c7217b642317bbdf172c17725ecf16d362d662f4633dc057180baf96ec85ee06cc0bfb56b4c3664d535f0601dbb44b3e60c43391ce71b8c5b74e6da12df8b74aa9968449d9ac46c813891af3a9dae2462a0174831ad2e7831394994783a7a8158b2469eb4060c4c800e8aabcfeacbd33bd35bef02b7f5b2219b4bddac04f73067506855dce1e24352b82c7d127f7d2585c40f1b23e3e9850431239fa696b7326fe59930172992f07dc849df1e853650e95fc06b31ce417cf9b81aefb690bf47c60ee6c947f431179416b31efeae80e750de0ecc3c34cc835a612449bf02b22a113b59ca6cb3f30e8aae4a55430196e0e2a5436203e28ed42d87ad36b6a016254c4e4c013ca5e9322bb83232fc6dc706f9f91ab75afd4217f97194040214ad0f987e21bb759be822cce4fbdc94c6ac8b8420b4dd192f77ddff7b60af26ed52722c714a005a39843879eb16878878cee2be64b0d35fb6981e1274a9ec402466abece73b6e92c64e0dc5d173394189e3ed72c40ff8266f0d4f5bf1045e60c21b3f93f25a4f9255d99cd6994f0dee3974ff3bc5681b20cc452ba31a132cb53fb070ee19de54ef70759c0da3ee416ea71bf43937d670567ba1af780dc6be734fd5d0bb7cfab505143409a957994f8e0e6111eb90a19271330604035584d624c34c369e398ace49a76322be8f18cab23b52bffe6b79d65cf64bf7bc2012bbf8e8017884b18cfe2903c7c68d2f2eadc7f09162ea29674b25288040c636cca2c7cb0f7d890198db4d727753fcc5ca41f09ae25441bcbf92212adc386bfa4db1a18230edc70e4c9016c6994c1a02e7a73e4db67a619cd5cb1a1759c15c327016f844ca816bc3e90345246fad36755ed89f39f895cfe417f25d455a66b649972fc178793d64709a482ccff435640d91a3a3f2a8e27a2c8a145430990f2aa0fb20fc56668a558aeec62edb146a62b8e624fd5de1712b7312416dceb3814e3dbe23b9a92314f8fe7c2c54fb7d74231d7fdf0cd105a90dfa7d090f7085afefd1a62861b346d64e1f025809a9fd2b3d99d8f867023a01702bfe9b6266baf0683bf5ac82d60643826a3e0271765748583a3995283e67df6af03b492cd9e57e1a83ec9199d5307fabab9e3ea1e5419df26a892f906c546cdf733205091670f8c33c1505285b6759cd8bcf16f0997c07b511252c9a08552b3fb24d8648875bf062adbdc66e283d07cff58dc29ed3c03de5ee6252fe3f61afd6d42eae203a3eab4599db64dac9f831fbc37688277f624a3b9ccc9fa5f9dd2f7be557ba0d392cf6657a40136bb175ee56119039a8e98602a71fcded8f5f74fbe8c75f461027b8d2bd09a9e33f371a9a55894463a08e7d3d90208f489f83ebca830a8c9f245cfa5eb08d148535d5f6410a72d0cfb4d6cfc8c481bf4ce1fadffa0cf8782313c283506164312d3136e003099d4afebc7fa790ab29a0c6b00f3f0387b7c29616c8fb67b5668622b06f188c6543f068f0b13eae618dbdf6f1f9084ebe6c22990121237bb6b091b629a2e52fadc327a3f767b0e0af3cf21a994b63203cec66f745c7d32bccf8f98a1ddc96903e484361f59f3b676f2bf470b3231f63d4ef097504b2b15fde96fb828688ad69e7a0bf7e4aa8b6184488a9ac9d3947d7a83e03a56f135d9a223a91f141929534232054a644272ae4d97b73cd40525b8fb01e11fc6e07812dd9e8823807840f12afbd3200741522dd34f23148990abb11055239293decd26d20bd3ddb5608a0800647232d66bbb9fe8b8afd7d1dd984c5ca2f06741b84ac06ca9f3e03579bb0c36e3d2e9386d9ec6fa0a5b7a11d9d81f9721ca2683d22d9b9f383f15eef7c730e8607b86f8e34d93c77edadf2b27dbc34ef7e25032548b68030f38fec950b6c4e18b22e0b8875fc1052952f2a52e884fa75551a87190d7e2439a50acfa8c22b0c105a2c250bcc3503264696325664d40acf9786b25adc32265e41e08f6856b2e7e7f46ec5ba53585dcd166ce3d2b117d811920bf047c282148ce2a9ab69622160fed4491ee5ca84b8aaa19d678a5b90681a9a625534d4e62f605b8db1bc1c6e4efb6db16c5a018940b2218fe85ba8d97b14771d9c052c03d1cd885ae1a1943cc2f801c289e1168da4f39e6044a474c398f2dae3790d58415fefc268594be5ffded09ce9783416d6522fa99a2b942502425d568d3b194ee10b3144e639bc522dd3b5381ebc17dc7f5c1a468edcd891c4ee588b14ab5f8a2bf49780f4a407943157434b5db16a464e6c33dfe6c22c03d5769b6e01eb16604b06f314c2cb87ddeeb22c22e7f8f0ce324afa52ab2e5b6a508cdacdc9e9510c113e82f008b19d1db40b79afd8d37a7c3c3a293da2f642799d55d9efa35624abf4611b931fa166f628eaec4c655c26e21f7f103eabbe33652559cdd2cff002bc5190a71e575fd1e37c1924d7b980bc68dff286354e6d9241c67c2192de72197cd72f57f12a404898f623ffcd0bcf773cdd54810abc7260928f3ff57e71425986bc944ffb3621e16dc616b57553c55f8053ce918bc546b6260990ffa872b22a3f230a0cde5a61d26151770e3ff7a8a80f046746b0e72847e6755521fcc61455738a6bed8893fb6b4b988f765e300593e6367383a5c5b9a8469912cd96d89d6004a7919944a21086f79beaea5d242995224c2b5145920d1aa0600a5728a4ac4adfd1019dae21b07922126e94e301b5e1b3e3ecb7c21053318998c4cf56506549ebaf7f762d54db3417efd1ecdd20500a80f1840652f023f5bbfe784e99dbfd60c9ead997257573eee36d0794a29a3d6eb114bb02709128416cf3f49de29ca11b709a1f9ea468aa6f42cbc465dc8e8ffee6a5fad808e11f364873eff872b76232996afff431374bc07155929f67291f192c2fbde6fb1f0a3dea49873cfa14c6503690cd1087c8b9701df85562ccef3811bb09d773eeee213a3d9ff46c43515427fd3c6edb492790ccbafdd2f919eeb23f589abece8d688660fbd744e2dfd3b943f1e1a4173578b27871568d209e79a3ff4d0832f941b86d30ba47f62d80d55524f2a8369cbc53747c37a77597dc9f9f928e9b3e782b5a94bde100458e3d368c449a873cc9d74e84c8d636d5a47879c3544cdc7b95e78df1fa9a6b0136ca1f0039853983e2ef99ba81adc60e4ce57f58876aaed17258ab18df17f6421e6af7c75a9ba7c4bb6def94a9422a0a8d72de174caf4b572f2ab48cc8ece4846d1abd2a361c7a1376f0becadc2c4a15cdee6155c04e47cbdd402a5a8fbba18525d9162d48f97be90466eb1576fec39b820dea5c331eca29888ddae23f0793a73c09beaf3b23a4be52c55055441dc82ae9295e1b764d7add679e74776f73a5c9e2dd3d49717342ed798f3a12bf5cf96c3d0bf5b61110f9549906cd8aaa451a69b4108ec14c3d224af40ddbd51667e139bbecbe0d1fb06d2f574bf8a95596706eeb769e280dce9d1fcc123f87d08935d5fdeb5ee903536eec7eb26ce6755ca2364f67061c3772599ef23a759e59f33d31f347266b0123f9b68cc2ca6e17b303f068549aad5fc2028058c175d848c65fc55402d8fac4ad472dafa51b2fbe89c3ce6d096a6421349c50a1c8d0e9782e78ef5b7819151964d9dd8e720887df893098b8b7042f469eb5924db2bda5f70b14f619d16f4b4a6c705810f4c9d6b2a31560569fd6c24b606cd07dbe889e7aed7cc9e2465fc44551871cc2e232a18c80136cb4d96a0b0bf0e8b106e96f939aa1fea450c3ca21d6b93a7b03f028a7ed336a631b7182e527701592a021f71cca3b8136c35471662adb20acd383d4d8f178d85900a67c2551858035ba9615e5b0ba0a0ff402f635b6a8a0245f9726e0277ee52b2f11f5d759796bcbc6ebbcb6cc07a846224f8e3c7889bbee62bce6b0f68732b8ea59db5e154f4b89933e6a69d326fbadebcbb986156e72e96d59f85bf3e09c7a50de0bd1141472292adc36681779ecf899a0a6677476748cd42609b91f886b7bb549ba033bcddeda4707778024b5c93dd85c273ee11887cb9d5bec37877e0110280146d9654cda8ab9cf7cfbacaead58129623ce264723aa7cfddae5596f36f54ca33389137f23281e62e4efc340fea3fe576a445ad7d4fb06527abe9d0a638d1dc9a5c90bd46aa6b152a02a84935f012135c6b60ba3bd778f5f48de7f631d95e114a8e7285af0b8038095fdf059311ef983261d6398cf0dde449e8994a7115e4ed493bc695f8e4ac6670148377700259b8acea44718ad634fa3b0351bd6dcbc825e2f5b3f40b960817694b16d33b19c49396bc3d1ab94034e9ae4027365cb3125932aac0b0e6958aa7cf0a54884ed281a104a2fed12422bfcd13cf0f7eee1e91b5d3a2c60260bdadf103e515c44afde5645dfb75b00f778498e11a804c56c076f41b31a31d2ddeb2f767e8c513ddcd43d1976b305c7c5cb1fbd95f9df1d1842ff23bdc46cf62b1b73f43f682312d67da17045aa610f70eb647cdd1b51f51b1d86baef3707bb0f4b6a378f248409a41bcee7660b4fb3fc7067aa66ae86375df7620564e60cee51669d783fc66dbf108594951dea6c06bed025a06f5d9b60d3126c838fa71ee82c67eb54af23e16bb09d1820802a40015fb163642fe19d56871c976467e64e5013146ff3200191946669e9bc085616e411dba9b94abec8a696e933fc09d465b7601f5b35391321d719cbac375a51d0b1d6f4c7aba6ad4a3160743868de3b738f2d8deb902e359ff71b373deed4f353e0de2e4e8a52c174e04c2cab58a638483b46b978e4011e9c2a3be22b5badafaf8e5530676f2ce7d2a962decaea475e4d72f72d77fcba695343778af59ffb8a0b4c199a379027a3a983b0b1674afae56fde989d7ee76655621245611e330d12efcd0c937c589491608326fa35c990a017f3420fd90348312f51bd9704a1966223826a7bd43e21933b08f8172a3b8b3811fcf88af5a45bcb6da0a2a0209b8ed3d615b5536d389af12daa1215e7fe196d5ba3445cb48e8f9b1cc6ce6761e5a30240ba32b3dbf62359a27ba54182f577436de72839fb4dd6573a64a1debd419442f9031014251472a7dde31f0fed14b58756501149f0192380710bd65925730ef5d7fd0c68159bb2502de42637be76b5622b6f0d14934375f49c50201178d336137511e3a5d7582cedbff1b42340fa147e48485ad8c6dbe6650e3f153dce20554f328410223128bd85301bd0d1b921be263948239fb72d96116f8949e2d815627ced2fdee680bb11bf8c4541afa71533f0651c3d684c809e75ef7c6da8eda5b3a0e68b72cfc4dcd50248bb5ae1866c9a972e3d2c75abc8dd75ada9740264b46daafcbbe7bbe11c4713abdfcb9d7d5bdd84733850a1f0b0caa3e9b8ddbe6d5ee4762b495c993f6db088ea474df76ea1574306ec4d099edf69e120783adb5818684678153558c3efc89569c0bbf792b692e41f42925320278aab2fff9c7380d2fcfd95720a4537829bacb6b09b622e9c135906ba80e62844d2dd163be2c1e84dbc19a915bea14d821eefa0f15e4fb9459a7f09a541f27c3e4b65e51b7fe2e56e3b6968b59fd21397fdcaf0a9e2e096c6d73b5cc9bffe66cdcecd03a22538655123f271811e607d2ee492a75fc6253a0c5f423ef64040ff172b8c010f0fcc06e5eecdad764e896da7b17567f94bfb4cd304005be44a37a88d3f18b7d6ad12ddbbd7fc290b9d976e02566a07c022bc78ab8396278ee6d90c434c849dfde9a0de70fc3fc0e854a209066486901a187d6b9df5ad4ac62a019fb9110dc6379b54c9b8837b978d73d103d8f878a97aa1528839a0200e8189d6e570828787bb18e5bc16713b7bc783810380b426bb2423f5dededda64cf5639137e016309007478fd936d00e7049d7c9767c8c960ebbbe615f4f215a154c609b502340daedf09df0ac0d37d3fabef7fd7f8110af679521632975e7e64da2364db88e3ca58e1a484d59c6a8f47d51708329a0f6c09549e3d0cc0a4948139d4960e6a3aa4112eab3552fbc11088dc2a7c3ccb90f9e2b414eaa6f08d8164d4d5838790c48cf5e54d1bf4b2c3c16fb70bd5ff6789c49a26ecd946c06bb880e42157572aa6cf00c00e818f75b7c48633a5e337cbc891b7aa7e4ee66815f660a7abdf2e81681a49a2d27e77c284d7a1440f36819364cd45cfc4b81c7046b263954c6afd61ecdf001cc7a98fa6dfb523790725b6990b4bc6a17677607c10d9f6966d8908edc42b39b1f5f99bbf71af920c0ac358d60f9f9a3a2454c9e8c5d643931a1a0efcc62af635cffae171eb807ff5cf19bfa7e896eb48d18fda683ee5d4f756e307ad3e987182a45eb248e4878bcfd90c93b6ad326537054c98813065162a9fb92b17736ed634c1eb39e94ed35b0c516badaf20ee100fba5ad2d3c079a425adf470b199ebb3ac4d2b3bc389d81a6a8ac35a99cbd8ef7c89c8b9b37209315ee953f11c9453ff2e6a7cb02c11c48d53ece940c9d627b7478b1c5684ce2ed5cd900592d2104d91dece0402485ff0511be5e5b6c9801d80830b64112b8b50d18ad584e846cd1bd845d6c13930e16f9c4d965fcb79542ebcabbf5f679d0168b213e0a2507df03d0d8af14609932e33f38f8f725c305fe7432c0d5e6dc97aa714437ef0f421d7ee07b62b5756c77722087887eeca15d2f780ed528682bbde1bb5ce8d71eb291edd55ece7b9f2f12723ba507bbc960dff7be0d85079b5d00c94128d403f57fb3031e6b3fbaeee14a378d94bf606a74580940ac8b8d64d4aff7c54e033843e713a0a2ce22ed0f82c5dcd13d1041db0970cb60c93ea6ca8785a3f05dbc9c451ab4832d17ac7573eaccdf763de92db6fa1fe47a7b294ba8969798b322e71cb2ed1325178ff5e7b9b45bbbef57e5208afe0bba0f7a47ee3dd4a9a0ce5e7c8345fda5f4d8929d2b6b78bcc578fc8adc2edacff53393ca7cf93e9781d0101b0ffafcf6890dda3c5d1a44134f749a69f38176a1c9d1d9ec400b65f5f3106baedd1d77c3f83db3bcd35bfeeea7e55564bb00986b76ca79d604abde8c41955aec2b6f4e7237c5bf999a88a11c41e004a3ee36c7ad0f12225731298e6d344268b0fd122b60fd737b866543774783c996fe1144081f164a91efcd0c73e558b251075eb1e2109773cada408c4872d03dd9039c2d6504c48c3685376340c2c6aa57801c71d44fc224b191799360c1d4691e6d5faf3ad90ea2b3e4f7fd0865518f50f5edb5ef7db99ad69e06e3250a4c922f720cea2549b68e7627efa12fa8a6ca024842a554717e3b49c7b94352e12c78e81a2274cb47e361fd9e5b0661f46a3d65f2a009545a1b8169a0431e27cc26ff9b6ff7aac9dba4183b4590c9ca62f89d342f4af9412c9a1055c00fdcaacc2513fd0f5160e629bfebc4a5a4fc6af630e301e29457c85d17142b728ba1229cfe22e7cbbe1673e4b733e74b7de8bfb12f400586922a00cd19a04e11a8a3e976a452b6c6a7c849ff6a889eaf334f231867d75c0c70df41ff08ea201849bc6109b5e5816552f14f04883a0205b802c7f6bf942b1a9291cc12b3a2f2ebcd1c06e73b18433e5bc2f33e19886b7a60d9d408cc5817d07134d64bcc633ddec9d2f5e6e59358d0da662ba616417a68010dc479fe73466decd0b68bcd21954caa0ff0e98ca5b2ce88cdc6854ecb111c36fe9e823f8457ae7bfb133b0a83fe0d89f1277817d63d68facc5564d21696084c216c1f7a1b59a5e8474076ce8eab02bf5e7458924fa2c37f7168b63bfe015f7867a749657c4453417041c3249261799c00ac47c9a4da47098a3a1ba62754499b27dd73da911a6daaf6084fa49e5b271cd2f85f2e1e573377acea4d6c9c29d007c600284c8c0c9ebacb8fdb08d4016d0ea73ff2a9f407864a213c377d4347ddf3f390959f3c038446662ede3d80f2b3a75f2ce8e3cf2980881fe10d9d01d40b4cc05143befa3c71ad4f52e171019335a1a52aa7af3c2357d4018db3e583bfb66758fcec62c600d553ac73017ab560179e136cd4771f4e7cfa61003f80c0a3181cc04b867bf455d1fc7444bdc663480b4149e327bb6ebcb3b41701161eb4efa623746c11191c2a3c2d713d5940de53e416a13415536d43ddc9ddb499a99f3d6d6b44081381c70fc5bd8e3408d003a745dcb5ba4af09403fdd7653293606604e7794cd0edf00f114fc7636f2018ba0dea12ea8e3a51f5205ff00d83f79fbdcc25d3cae27c3c5206c82cd7e4a50cb910b8c5e548cac9e05ceecfbf78a045ea52e44cdf6f772ceb15b1bcbec443699c70fce4fcf484db6baf0858194924cfc3db75aa874b9f48f9053b865f6c68e501f76dcf7da4fa1138c4481a4a6e61f2a02e2361b0274e8d26351de08ff6612c8b27d2bd21d19f34c298503baf68d85487271c1872afb514fa046003a172992270e6be6802e5a69cb0bd1133f799a808e6b4fa842ab284963b4eafff197230c92b3fe44accbb11cb909d059446f0caf7f3500a53eedcc5f37f6c5998391675eba62eada12afc4c99a818e8f060306e0ea4e4b7a891aeec70c507f438685c8b470171717a0be375eabc22e0567fd760768b22f70dc750a99e10077cbb109c8e04832e6c4b0b6f5ff6434817e0bb562a02426c8da5e217779e9603ccaca6f1d6628f89b0764fa7646449c9ae3c0a05a52b86e2b1c505f73e92d727e25611062db9f100fd2c25e3465df6e49b0fecfa53c464d3a054a204b501be4435d9f5ff05038a27ce9aa0d468d4349fed5c4b1374c5fc25e3b8bd8fea4d4f1b5a858d757a0c6f4e71183188d6e532904e1033819e8ab5a8f83f396dc49f7b6ac3607fc306067b5fd362dc636292b3b7322471b6cdb8589eab7eaa9fb5da6133d6800a242c483206b9f6415cf157119e9da8567badea096b4f1076e8f58049234e46b017e6bc3cd6a13e1d6070d3f3376b79c6bc78e22d18567ebb8d574d323d0a4524e4ccac9eec08329b014fc58a66c9adf83df072259bde28b053affcdd47a7b4b01dcc2d189b6f8f46839fedf752d22c6ce33669f7deb14ee35b2a009b55eb9f775dd0c241a79b3103de5983fe0f0f34e7acf1e34deef4839c42d6d8844dc42795efcdd3c0e88d201bd3ff95f7fe0eb599a50ef0c97053af4a9c02ee3c6ff5b5460c973d873095b39a63cfe3f0fb437aedd13d16972e43a4877b3849263045b927b95da8a1fef19a84a9816b7e4fcf28d48c665f25d68690bb7d40e5ef13a7088ac2622640a5c30b5c3c05fc5f9646c68f0160af87d46025abc13f503e663ed68d40a54e0c9dc744f559f1f4b30ff6e002e4baa2d7fb9724ea4da296f30fd2fd1228a4eaac7183740209902b294a85b979c9fc4ebd7b59a4b45a58c550456e126a2fff4e5293a1480f1731654d441b54826bb801e9203806dafc72671131d32307b89c4d9db870620c2208849cd62d86d1d7d3a6ea067a550cdaf53d033a19a2ffa1e40ed2d157bad602ee339f7c3d024d5a1e34064edcce64b142d42b2f4a5bd94da243b6657e3ee7dab7991285d77e269ed7e44ea63c3c06daaa3d861e26f89498bce52a080377eeb447ce341f7480e83e6ceace35a4fa088b4653392aa643a9d518a179a8b45a89ef607aa70e12397309f3b378cbca91c2a208979733f6c731c651ff530963b49a9395174995fe64a49a4d440f705ef278e0bafe2b447840cf17cfb7eaf9d258c0564f5c7269e2894ff82d56ef5efcf6c2fcbabead5a1b70c25cbb43e021b5d3c606178895973ecb7a1f5ae5f20979297bdd7f27c25ec161296703819f00d8a4c1ec6cd8d26bc2673397de33f1c7c5c492033d60cc5c128e78beacc0fc3eb82fa67dc99f8aa42ae81fc811a61e4c0de6d32a2fa4ee20bd299d0f7079142bc12ffd965cad5380ad60bfa1e8d33c47d4ac050d964e19278ad7af213cd6bdfded81660a14d50633d865436a221d60232d314c2fed1523315e0b6febb4782dfd9f3b82dbc02280937c7daa88533bb105b9035d91c14b373c024d0f624401c4dc69e75644033c3a7d4cd36a219fe036a3b472887c87449a14d81381d582df13a90d0a4b219943e7cbb55bfb5f97d1c97b244d3e40cf163416d1bb83ce4b6138e0e20edcb66cb78a01b65534c02ce6bda018f9402266716e44605b9fdd8d9e14939f5f149c820f6eb8594edc79a8fc603bbd7b9681dd7cb516ca32cb849c7eb415b897269fcbcfdbf1bcc0b64466fe2f3f20dd0585ad750e62b6af6282de3d90d7e278562d588aab714d0f3b65ec4fb24a777c7613ae75b2478d0a619bf0bb8e8b2aa081e4743ea3f3ab6ccde18705e0e001f8f209f396643a0ae5b284abaaada4d0bb199440a9f7b5ce8ad47eb381e548e08a26a3f4f22b029adfe4c043a52ec76236e67db4fe7aed9261d4ee1fac79e736f04d42f7c37e5437c7d60ca91ec2989c9cf5de09ace269af368a1bc6331a3093d5a23bed34ad6a3ee457ec39d737a630fd31d3730707abaaef1faf069568fbce50dede6b4eed165e2cf5b09f66b65fc467d6b9951c0bdcae185ea349375af5ed4067211f07f96cc715912f7d6866a7fbdb42d8ee7669017473fb485abe655f4b4834de8cba596bac3e96bc6bc5c2485304f00e537d6a4b4556aded01942e0f8a86aa6d4fec7e1887704fbf3a9ab594888b00d07946568a7e539e9d98d42632df506890672cf24fd23b67bca8ef8649df12935cf706fb6d6dfd49ed73219fbaafc310ee00ab983941779a13e0f1c5c6b606427f88f008a9b44905f9d2289cecda58f5567098ef53deb89becf4766ca1ce5cdd9df37266adf5a5f8915dbfb09179233b26a397c83bf8e03c338921bb183f2f81d7927edfa682d092f5ca4c4b29db5f038c038ae001cf0bbba988fdd2bba1ff95bad6f4f12aac6ec7acfbfd349f50e3615ba1a5aa223ba697512f829d2729e610e4a989f8f015036690bf0905fe1e8f252aae2a9c6cd567086c408244002cc5b83e32b24f44903e14d8c8864d9850bc8ea36c63eb704e0e502a821c5942c0a7c75fa80444a16ee08e975c18bb3f66e75543506ab232c615602016be423a09c0c3ad08623c065d7bce894677c25de77ec67c19d911392f0f54ef12728c759ee3c616403eeeed41784d3bec45be798f01fe5606fdd31c77ddc6ff8312f60dfb77278e5495d2161768b1789deeb1e183a8b7aa969d5029cba272607e1607580ae250d57d79d32f70294f7aa7ffcfc5f2f508177044fa1bb17383b7488609e45c38092ee25941d9ff1b4182b9b61911e75f09eff9ec3b2fe3907b465697885bda99f9f42fee13ca815222f7200d837f6e11d9f77f3c8e5f6ada5b197cc873945fe4bad9968e09996cafce4b05bdc86354d88f5d1b8de85d9fd55971bcf8d8a30e4fb469bd787f80da626f3528d3b5ef822bd04253de64660461bb49844a8debad33f5407fd892936d3042d3af52a7be2f62189af3fc292df355e4d39d0bf227f4a711375aec7c4352df8a0cf2a6fedd997f0ef27266232d663523f0c06917e1eef959f2ce5cd1cde0e52cb9a6c89e0393361a70b1ec4d5aa65938aa9fd4fdece9b23eee2c46d5a47d755f537a7c012de199ad28f91f375f5f7657c90f079a8305cfdbccf50a290aa20750d7d30446a24056504841e54d6c3bc2446774ac89fc55bc445329b5723ed4d6d764e40f87e9d4d9dfc0439113178d89cb4bd1b859565cdbeb1afc9220f5aa9a87b643dc9830ecc036995e5af30a28bc7f119257e8802c444c145ab51d95a4af2b03c5f1a356e3d54280a791262735a607c33134a724f0e0dee48087851f8fedb898bc873b3168d90939111d5c59024b639383ca65438282c6c36c23543290aec26e403916d4ff7b4a14ede6136fb6fcf329a2dae08653ab3a6498784f7f3af7ad60537339f74d8e8ae1fd530724720ce99095e048a851f0d9e2c6866aaea0dc7f81b6793ecf2a9b1f318b057a495bb56614cf64bd001bcb1f7e2b5785eae7829809d5d8050c92a24462ab066f395b92d22ba3bd630e1fe6867a007606387181271c36b06372acea05298ce55162b738738f68f8a7a5822f818ec885657609a5713ffd814a7e3cc967da56566e07e36486ef9ed55faab7d178d22b0c5af33da67ae2494ccb8aae7970fa8c0fc81087bef975fe313b374c08978fd8876074afaa01446bf0bad454cefe9f57478e3115543c5a6209210b79bca1b231e21e3b90bc9ef77becdfeae10f640d4fb7471ac17c1e11611148dd0d257ec53859e9fde15aa805600cfab8ac74c9898c6fb519c9d31bbd5e1902f2e108199258dba2ffcda21c5924ece63d7db1a0e185578b63e3d8c38b2a49b07172e9a5e29baf7867b2ddba7581defdda5e6df85887f805488c8f677176d3d5f5e6c16d3be4133563448cd2b5bb2b2ad9bfebfa4e39847848a4f2cf960bd324ecb9159268d4f6539a88fd0d214c79e790cfc90790eef7461b8d7edbcedecf6dbd811d62812237235f621c290bbb18d47806387ec31f347d3e80fdd59b3ca3f554338a5dce4c9983a7b45cae5f71ff310ac554e4e30e3f40015fb5440d5da12e8a6d42f041322d7d11fdf1b7825a76846affecb2cee1da964e61246e19cff78761aca7a7df98ea4bd790249bddbd3e81f96c7d995e73f9ad4b6f137af33788687ad6f8b86cdf3310c4ffceccd14b8f171b0bf7143093c3000a544ab2e847057e3236b7f1cfd4a8f1e6814c79c8651e13a1340aedd5f95a650ef2ccb40660061dc89ba1f5882402ca080c58337bc9b432d171b6e4877f76eb732ff36695edbabb30688ce56083c073eeead73d476735a5a3449667a1a75dce2ad27202596555ebb4251cf3e7212aececf7a3500ac388cefbef0082660238941737c5c15b9c578e5d9e9998652ee2ca1e92f87eb075293e98d67afab949b0581cf234fe0c68697e3e94cfafc82566f9b4392832c0c07839ea9ab3b2a88cdfa41454765ffc52d80b2bc7c8a68b147814dd36370e55c7ef898022de5b7ea078b8290d2f4100b101ce344e8c324027213b6e133f8c9f533e7b9495dae12a762a1924e7e73fa3fa3b6e3ab427df58af1003e5c30f19c19f7fafd73deea1619ce5573c7748a412b69f20fd39de2c0ef0e9443ba848a0817315a225308788f4cfe2756f9d0c3bf729e96ae979852a059e44e820778901d702c0818e6633bfe52f267c3813874c762355c2276be64c142b76300ba9e5cb71b1aebb10dde9a36562db510f1b2ab607b91239f45e05334a6474b5db612b029542365e34c6cdf011d63c5b168288d1f311ba13977f5b04d6b41c84bb7ae96ff53466c8f6133fac6ad525d86af100db35a18a8a8462388c75a0d39befa4553145761cef7259d5e1b06746f85d43de25a37c7379c35dfd4944e475a26453d87328c0a79fe772a23e3b2b08480a8bfe0313d41579718c843d8aae6f4c994c9977b3b6f030016daae3e0b957d22ad96399f776f8ea18b8abf442e618e1dc0b24284462c5d06e687022176af8c726834a9945652676a0d705b5d7559a45dfcc81d2852bfba18d87caeaa822f8c21c5207a467724d34c03540c1c733857bd032814e5a22a431f981339a129237ce623d7daade61fff4e4501207dd540030f6653ee783df04ec3bbcedc5caff1ef3258769c971ae4d09df97cfd20090bfb400121c3f59ba56ef8ce1a596fec64a8868cc2d8f08ae39b5617a45d2b0cbf40635d29359a90c5089484dcd4571dff5f959fb82dd313bd3b9ece0f7f6d789aceda26158cdac6ea06c6df0faf4d641fe4b28e2edab2839eb0e457b12aaf71a69567c3a2fc4d79fa1d8e1fef4619070fd833e44d4e90253738f71aa7c89a098f4d504a8857d537d7c1a1fffea7983218ea71adcc03559a50d9c35b3f6d9e52ef48a896e79327669be78d8132cfda94e360869aee110a0491279005aa79a56f36833e18273fccf9de825f0914f9333692a3650c62302d34cbcea79d8a12e787dc9f2fdd350bcee9cb46ab3377217ab7ab05f4495af5bc53ca556c6792273fbeb2af506b936c6905c9c0abe4aa0f71525b6995bcff203e7d1364446bd4228e1b12b036cf665467059028ac9aeabe010bbcc351d9c6f10e689b6aca5fc68370d7308078cbe15ca22278549d16910b5a1081e7e2213bb0c92aad2ae989dc7b67daa8a33d814de63b06a75c39de57e212bf9620d06412b9f4b4ba8fc05d9d04d91ea261e41b30d2bd81fc33c4a78279049421aa53b5a5837f347afba782ae3709b0b18d88b882aa2e5d2a94a32b7fbb940b126893481d81b8ad45a3f8e511a202be4ff69bdfc39350e4db84d42cf8e57b323eee8486d053346d65d1899c11590bef0c1888547b16b12b0e737dc85502c0ea44c561129bc8a144769cdd971ac8b0cf82f07112a1e939dcafc36d7bb3f228d204f304a6527bb0ab7210be8f11b0359258bd9286d4611904c3a5acb21157f9dfb30032982edd94b269113a5ef8febab4497aead23a0b08d8885637ceb8c5225fc04d50b2b9c559a57607b813b548782582c611505a2781824812adb0afa9f47463be122f140bf73d1d143ae9ced7489dd050b39f5708004b5951558cf55bdc012775107b972120614715e2729da3be62cc171238812e8f0792890c1b83a6cce2dc269529ad3c54b4bf8e30175174475842e9104b2b3dcdf4533c354118a59699119bd63e889ed05e9aab8676df771623aed222c665c50474ab2ccccc693727383b2df6e5c9fdd67d842828afd5521a0163e616020078a408159f9dfdef5ceebb1030405141b0d2d7954a41de28ebfca9d8beac818a4bafb4c8c0b195d04e9676fd27638a1036ad66e444bf839599eb366286a40648149db735a4ce2b7a5f6fc8c2934183230f99f31f4e50739bba0cf15187f8750160c383f0e1ad7cdabe1c5b44aa311ec2b17605926c989eff008b6328c40538871d6264e5a8c374024f43c5bd301569f2a27f09b175c0892e7795f55f6d9f74f566a01dd85031f6ed9cb4a9358bd3f402ca494b6e2cd33ef64ffca272e92f230637fc70645e73cff50ddb2431d0d04267b455acd50e7d694d5c51f0a3e03e4abd9a536686ccfcae522daefd6a71f374008e3e3f510c9e631300ab7c26a6a14a2e5a2a2342185a4784ec17dd4fb26204b4119ddfb7ece73bab54c80236f10565a40616a7dba762beb1663fb7e81b44ceab939f5f3f1aefa5ad9a7d227e1e1305c99a3eebdbde4d363f1f53a596baa42a3f1c7ee2d45254793685e752918665286cc71fcc037a6471078100bdc5a7d0626c83f3b2f2eaff683f1083575a023caa1debc86cb8a863651f3f2d693ee12448f89e7f75e8dd2cd2353c980561f4540d04689dd72e85c14f9bb97dba3a9a52a7f30d7752cf298f929af486aa5e17df63ed54012b2412c40a4232a28df728f32a11a5622096170db8c72143ed5c2246d2390f088649b039f4afa5d1f4192044e63107f0c6d9e3fed720ed087a6684f951a5054e8956240c7be3a1cc78da6001b975e709e70e72467c79a99795c2c0d1587b0f0ee970c7966b323c4d7c1baef6924bc7685e0cafd15fe11adba2b04247e2d40e6ddcb743c057c2a4278017e07547d9ed012f18ad06737a94927dfb27da10ea1d2a3f90be7cbe17dcca9c85b0c63222109ee1984a58fabd5848348f9ed23d2212472a3b69134d576f7e0b263560a5232aae88eabe5621a5d010d54e0050a3cf590fc22cc32515894c1629571953058bf5bd910ce12e8e6143e48970d4234af83a1c1e8aec0e4a4453a1f5b67fe441cfe5c488e5c8bc2d2efbe113e98e3456dd3603f3f78a0fe7050ec17d9923e0d29e34d4b84bc5a21c3e939aea75274221bab86bfef828fff494303bb6741a3157ee15a639306e0643e3ad6fee6536da4a7eeae22b6a36e9de17ac33a3b39e2366a063ac14aba2c9fd27e3179e91df06375addf76b01ae8c47bc07680a4d3416d4f0ad9fdef285dcbc1d26c49e2bceb1f00d9dd1916dac7aae0e5afbb14cdd15930fc3b28aeda2a13cac284ce39a0508828e5e377bd9f0b1b0d3208d9b0bd2934f1541155e1e03be825aeebd988f45d26280d10714e641045b7ee1f80f5023f0daba2850f142ee3e67e50272ff6b67d9cec62a0b7f8162dd9cc4c4869b8096e2b26c1eab60813ad467dc2b70b02e62be9748f46ddf2e9e030454d18ec1d6afc01cb90fb1c1832329b15c6b12b48660d29e7ab0ee63f2238780731af491c06a250fac22fc105c4bf44f78f2507d1aa79ac0b9a816d98ac7e04c7ee68a13406de709952c307e75f3dec102c259a1c2a1be8d5198642b0204c38a6e563d2b2c85f1c304a02fbd000e169bc283de523d1206804698ebd563dc6c14927dce4bded491bc9a8b0f6bdf9993ea5d738d456c717a98e28ab0c82d52adc04e0f268207377721edb141d1f3e8a9d15d6c022c5444e0dfb1968a2298fcb01a941be9469876219cd317ce444e7e11cd2437545032827063fab511b26365ddffd84bb0ee20db61b3e8bf589f193ebcfa57d31c11cd69b0abe2ef6d3ab5bb4e956eb8b0102753b0956a2f502089fca26fbde4737210e188a833391dcf47650e173ba84e77ceee924e0e9bb6449236f00f4844ebfc2477f2da7a59045dbed668c73e7286e42c7e630e7b68ab5b7a685234dd2a323dd2512bfdc54f4b7b76cb347697220bfb726e9033bf918722444a016df3e84ec593cb25aa1673453660c4cabf6eb8449c7c3e43c325535997e17c40f9e2d662b5404c604887f19435784d588a1f2a81dc510212646a3f36be57e5abbe8facdbc0147ea0ebed9eeab005f0f8dc0163e013fa152088a55c7044d6e0719bc77ddc5294751d2e38f1475e80d3f77f664307422ef3242f780ac399aabcfbf1fa2d5bd7d9e703974eea61ef9c2ce23c656edcb1b4ab700ae02bec07b3ad3b19f98e06edd2cba5584ae427f6068d6521fd529fbaac74b27985711fb992d8be19490317ec5477bfde92d2572f7ad836a485e0bdc50e94873dcc998f138874783563f917dbdd65defa669433ea34740f5394163a0e5a9511913d8755b9ce3da8e2e1495faf162d2a4db979dd53e4bd71cf2df66bf0a660041165e1a7ee166d842ca4c11a3573ee79d7c3696897d10d7226fdf499b3fa6702b5f513021bc100d47af22fa967dc305cc181b30401eb5587246186c3b40227720231f2a14025b994a7dfa5e853eb073b636172db71f05879adf1dca652a0ad71ae492db7a14b0f948fd43f811d62c316acccebf3ef5abbefe8deb317cae098e5bbe0178fe6da339f51c812688f60d3d2ee632d950b4bd13ba106505e8ecee164657234e19ff636b17d2112b0af9c6ddc6727c8d16385c5418b5ac1e8e7eeef453dac496cab1dbfc9d40b3869f328d3d0a29cc191a58e31eba05779aec2216b4259d3843cf8db56b24b6e9553d48a5f6f32aae77c10fca01bffa2509543156d64bc1a7771ea46a67a3a189f326094fd7c9199d06b3967ffc6656ae1fb3a8af5d2f637179fd93cb725590f6ef66d3d8a308c6adb04b37fe1612a5ccf90b8be4456ac5490c7b1a8a2f04b857ff7b5f729bfbf8fc394b171fa7cf192f3ebccae60009589860c188c3b3e989b18cfd845c1cf97fba0896d265952eac1a4692d9fad60b9a854e393c192a7392f0accfb38ebe397563a7d72d893cc106fb98b0a64d624b118217da9867abe5743b8309978ef5193b185fe4c22027eadf493c6c429ff1142f40bc6fcda07f777c4a4ea8c7559bc6af3af5385948282aaa1b577f1754bc180a0be4e6f8d45d851afc181a7693a3f8ba6e9ec43f3db9f6fba2281e99d9652a33ae47488e11f8342aba3eb244f610c1cd5f1fe4a8aa7db8b41224999b37f44a488971ea44b2bf18466f962b3a0a7c8b1acee48620f1fc3b39dfb4f80f59ad07fbabee76fc0bf3de0538f78d5d89f7b3790fae4643c43a725d9ea4225fe2f66459f10c3237d663b5a093e0f40f857dc9f4bd0eb8285b4124ff4960dfb20e6d696a925cee3e443afd45a6f9cd372a30b69e4cfdee27ce0bbbee1ba456eb98440a84b376e6bba6223ed8f267e391b85ac5f7ed8b464faae631ad4e9eb7ca75346c06a6c25501781609c5dc400e3c52e53eaceaa971648237adafefe2fde63f3f2fae0104e1938fa3830a6f50036699cae8798ed1dd90cc078fc6801f21ad4b297034a7cf7506125e614c5889a1d67600df372562d0e9d27bede14da8238ea7965f7491f3fb06159e191c290d115faee9e2e70b9bec22de4c2bc40cfb9388531417b327ef244be503aaee7d7c173e204db6e18e89a96bdef1ce2a4d36a21e4591008569e09467b3bd4e0fe3b51379c996fc5100b71fe645f4bdb37ed9ec0284392b47540dd9a9a3d305e3734fa27be182475ae36ff4b1e88a3c6dbf45b8104d6008f969b48980d832d2a948f76fb811fafb8a2ece347f2421418726d1cec95c774c6f0728dabca7725500ae08d816f5d914ae361154fc88d56a665065cb8b4af3013580004c82ce2e41357a0e8f886f72170796a270211c7172ab378bb6132a03577a0dabca053a537bc2d3f0f8805d2fb4dce583a5874ed6335ff43db6a631be180d529acd69359a237ae48be8e88e276c910478ad5858c6d28281ae867e8cdc6a98d7967062889288e4f446eb72235ec14bc2f206420eda55fe8b092d2931e55846a30a42d8a1612a36d5c606f52cb39d4e10cf2f9079412203c558ec204a982beb0aaa1705850da16b2ab79a698b44929d9c05c581c03f1cbb9f0a9235a66465c77ddbc9256b259b7749446c6c11e0fd3dcc118e797b20ca3b96f408bde366587476ee7197680c08c190b6ee2b595574464e9149e77b6d7181bde39249d24825509f0d2625db2ecc4b81b1bf5a5b73678975561eef5bb4ec408c3ef6148bb24cf3495862da2ef5abe5989e3479c42187353dc8a31100ea60b670cf32001a1332dafda0570c84454c7d3c20f0ca2da1692c7bd6f83d4a4d2000210360a83e89010db8189001f15b551584c408008990bcbf3ac8669c696aebd0df9fcc6977f83bac642872815d046fb12ed0bb54fbff36b5def0f5da2b1f88577eab27653e18459cf7d951d2b740bca2813e6925ca83fa088433b1629eec644cd5734ed60c5a0fa3891f0d7a60fd6ca552f95867ca4df50a9538e6c7946cfd2acfc6047bd27c34f721bbbe9319267b94f45670c753ddb210c68fe6d7dc219f34c5ccd49becb7404e1e504177829e49e8dfb90409eecf46de250bb8460c67e415f9677a4e482452c565fa4dbfb4901c00f472d902386ae1d1fa6a53fa3fb5941f37ee69d7c7dc437d8a06a5df2f45294e13f8e903c4b2d36202bcc4f043091c447fe9430d70bd0d8f3c5532181c168f898df5d89f5ac2bdd7c1c055cd2e9cc4cc7009c8539afa3843135f90f8413440f81d788934a50af4f17aefeba7f37a3d8066842c08ffc36179f733a2abc8accd5ee2f6f9bc904de6d879a43338b2aec69c143f9fea17303efd4a2bdc0595eed92d3464b0d50108d250b34b44aa395654dcf5c2bdc566e64bcdb3547b965a87e9e3a91885a2d8b739d033df4555e21712f44853c23bb2f3320457b80569422883a81177fd6959dc6bf3c255fc497e8b91222a00432efd9871dab910e31e0a5f66d6753d1784e621693d4dc01bdcd7058555516524d3f6af3da4795b9863db4efde77071e7fa5d395c8c6892b1292e6589b0db04146486cc332a66ce39aa6f2a9c9bee77f2b3752af7463c1c9b984394a73bf53c574ce34b722a504680eed9fed810334c278fee8dc0fa3a5a8c718cee516eb3212408fc5e1368c2d2f0381a184ef20f3c8f3727bf6fa39ece04a1cc839a51102e9a96d247518cbcc92d68cd55285d24fe3e950cd052d2f152d98428f399df0fd8060ce5ce6aa85d695f5ae94cd5267af3ac59386119e9d346114fc9f3f82940ae893cda72539a62eba5ea7dbe999e1c69b9a4a6af82cc4b517701b4986d3611abaf207380170b08c011baebc8de8c3f0b1c0a9ae396a63bc9a7945275b6212e16178e26ad17df0bb2f52d833552b41bd0072bd607b5e91d3787d79788cce820e51b7fb77b3f285526f7ffcadd6b1d810baf5cc61860d7dbea37a93cdd5c738b3734bd980c50067fb6d7ecdbe0c46215360a6aad7c03904e79928a1a2bb05039088e1b2b73680ab5e04a39a707c881e099cb5cabf873cf78941024fa27dfcd234474600d5f2297a802a2a5e24bfb122d4da3204ccfb5a0b1debc728187a1d16682e23eebde4def1f2ea9f3f4b50bd35311569799d8e1d02700fa235c25b1d27d6dc3090a8f71c3f077b037a6a2935f5b92a493e5ad741321b1477b23c6f0c15d448a02c34424d41259ecc82907b0cb241ac76b619294c30b0ccb495b524295398d6db929c473d92ce9645912de5874f8e8047c16e584d046a07358881b6473b7bd8c5de35c3f6a2bf6fc2145d80c29b9e53892fa8a6a2ebbf50aa514ea7ce7ba0e3f45cc9a3ca98295d311cb8a6bc3e49daa2c52b425c52c4285b0e6897adf26b5eaf744aa1a5e5ed23b855bbd331f9a2d51dd6cf9373b22bbd2a1028b4cbee8815421bf110ae9c5be4a9649abf0c1d583b4d90a25bef15d1f968f05cc51bc459c13ac7bda2ccdd472e4a6bdeb3a1497342bee97574c986f9666e90ab81d917518201f7c6b2e1c1d366ca2c08f51df318f2aa00b121356ed658d6a98ea517bd4dfa0af01fa6e3faa0d4d22da505e83dc8ceca232caa796f67a2a9ba190f7144a1b892320a115a6d74d1221ea15e34cb1957b8771ec1d3c686766cd819944cbc1f23dfeeb0e7092ca8d4b23c575c8f81fdc008301a48e7e3c9661ed3dc54f02eb208d159746009aae5e4bf1ee7f746bc357a9f530b9305ee4b2aa95130d7221ef15d5b14c34485555063a605eddc904953c14d6cca5f74d46867264ab9239d4898c306d141d68dbe414e741bbf40cf37cb5499ed95e6e67638892685c68cc54d22fb2adc25e4dab71b0ad5238a4117628afaca9cf993e1e2de5a84b462467fa706327d496f33f43c4e5347619d1f4dc32393fb86e09369af5b8c9e25950fbe2ec69ad69981d01794b9d41b34412bc30fb5153725cbf074dd3876680989ddfb220818713fd361a7852c8f6310a9f3118fa614fd2a446aeb0177e503abd5f51ad4bdd5cf2adfa4d7cd1057613936fc2e9704a8bfb0a8b1e78c5117793a15fb7fc52e5eb18d6d10538642b7eca7b8170c7e773e3c026d61c732645f839258350de99c079ecb0a5094bacf87fec3b1f79a27bceaac56fa4e88a7bd67ad63fac55f6f65fb5cd8f3e4b07f25fc7049754af9fb3955c3b8eeaa6535ab392d65c87e59b10d77147a7c508636650a5d659ed579f1732077360f3f0c31b36aaf22d380a2056d6912a90c521b4d72992d76c4e74ef57955cca8fe856becc60b08a8fbd99d1268d71be5fc150e8e9a29f3a64c87b248c3b7a5701e3e08b930340fc35415a0ec6a8f662a0876cc27a453968e421ffe22013aabf143943f2c941af925792dc0335b7f316ca961f3b4aa1fea631455df3748272baec158fe4c67d3753a16f29a45f0f5ffcbc7344ecd48741e58c32a93d2d368b854c5065b2b3d8d1cb02e45ad3daaa76e5fdca2f2ff3c9a1e3f783cbd68c05efb8777feac30a98d4f73ca552aa07e8da216aa91c6aaeddead2d91d70a0d9c90a2f17bad9c57c932029c2892eea2792d8352541728fd880bdec3a49afb0b4a6f2067b0429c78264cc19baa467dde95619f0cf380a06f02b868f31ca08b0bb5cdcad102c4f6988f75845ec46aff0e86080ee06a161015e63479162b254dbf74b4136255014b6ca88872e328fe46acc9a6e9a92a108de36c7c3aa94d32f00e2fb7c7f2376c8239a94f0dc18666852dd885a7a03fc5281c99319c897bcdad4b41210e9eccd4235804497f2fe24b34790ee169e5272475849f2def9e4204174fc4fe7685fd28296f693abaa1b624d6a2497ad1d676961a26d32f060efd0e507e4189d119a3c76cb44d479389db54b9bac71439e935729d803f494f65fa67677fdd582fa6430f066f07cb2d8da30b8175e0a21064acf07539b5e54bfe9bcda23298df12f258fa1e07b1567aed723dfd2dcb6ba71df1a5b5b83986749d5b0bf1edd1840a6cfc70b38d6cf60c702cb9bc87caf54804d5a3fc3560ca2802225ebe731f2f2baeb468729dfbe68c2e9a1350162cdd8153aba299f83c0e60d8cce77d77dde6bcb86e8f13690adc4299f6c152b490e9123932719623b4913e7c7873799a3dbb4963466db4d59e8c9381c31105d37da6473a4d2477b3d7e8821c70bac5149400f994c2f4d7b114b3e145da9b3e8cb7e15d5640727c2f925bb9f1da2f43598b1599081dade3aa9559cd1d476eb816e5a61f339f105e829a4213ee9bc8fd2633250f679e9a4591125ee3b6806de103470fabc2a810febe05ac050dc10e9428ca881109fd799a64b9a2a8ed835c9a20fe5666c784b5d5fe45fa850d4eec51c9259a38b5e462d9905da42d7066df69048868fda33c367ebfbcd8d31df8aec08e378e2108448e53e3584b375730d3f8c7a5d9e740a0503d65c348172b7844e8a83575dd7223a9bc8d1f60bd305e993e2e3b7cbed37ba3a1041f3909428815518dd9f49a2b375bc13c030303470346b9fd56d78b3979c23b37683249ba8094b79a6d57597059e04201eeaecc0af475e2c76b6316ebb21601357a0ca9b585aa3a1157e7f75b87ed55ec10260da13f400c880ea3f08a8fb72eb94aca23066fa492b9915215aa8f21ee0d01275cd59d3a67e3cbcf0257cc55b9addb16cf11e1b52b1b6b36cbaed23a96a34c880b45b780dc62f9f1d26145c215e2fb5095f4661ac0f113e51aee84a5ebb8dd87dc3c5201cd5bb3475b50e671b1217d502cffc750f338e03a30fec39d101aaf46b38004938d3bde8c5eafd182186b80050babdc5789b4fa164473a4f087bc32ff34fc73486861f9f038160bd339327e6b5ad83db8d22c8559c1d7517c0b6d12d95891d5c8d4d7afb3b9f016f5524dcab84ef539292476628fb485976fc39aaec03cede215c17d00b79fd44c9130d0542b1116886232cae4e142211a5b285322a4ca19ea709c0d177146c93e72ae57407e0af989f16d1f12b26544aeda378ea7d244d5de39eac76b7641ae3273510f0384cef672ab38f893083a870eb5a751750f8b97222ae1de9b095833eff649828a38c98954edb7eb589a9da7f82c92ee572434f47b5e83e826aeda2a0552c3068742f8ca06fbe743c17bf3b053e774c6bb6e2681afaec19543194c95988527bce4a2af11cff4f26b2f6ab4cfcbfe29f9145c06e3dc60630c64b9e53309e0fd67ead79e647583b868ac0643278124b708a7987f12c0e09d62c84c2533a432203ee7c0fb51e635a4421df61a054e2969d9e2fd6793fb89ce77f7a08a640974c333f2b4a310b4e1b337489cf2b24fbe2ec3410f5ba0b3630b9abf08fcc296e336beea1f9d91b80c61cf4cc05ed8cfc1f70e9cfe3243e3176bee69edc7888a910fa11285d1a8c9b45e67fde4c6a3c65c44d63b2c323812301858e2468597c960176f9094a0ba0420890d0a62725dec4d0aa666350b111d128bc98b8147778f15f487427f2898d4de33a1eaa3f610c1da8bac4849e53c90808fa91b814b4cd2c5bd5527797ee85bb101571234fd90875e0a80a8da41f7be3e660ad37ccdc8200608a48cb878de7ab021f1cf9d07113f9764ec97a43da0dea149eb3219d40acc614e460135e46c79fabb9e63e91d0782235e2c2d251557fe9aa2a6ca7e305d3c64ccf19c3d3a93698116ca8f44f1e899c80da2fac2ad82c5701c682482d57a4646442bb7cf1237f59c9925fd0d205c319a29c7428ffd893de8f275cb6ad780f400c4918eb2061893054046461ea61021502bcb3387edd942fc37e4f2579b37d4b6eb8ec2c95bae56f44d8526467dcf8d8818cbe4c0c87f036455badcf19d3027d485c0f9015681fe401dfc824b93001ba11a3f8987d8b73ab20f8d8066034f4b5130e7fdee98ca14c8fcf31045b17ba296c051bca39fc74aa32eccccdeb01d300286d584c1fe7299dfd95f738e15e136d860abd3b734610f65ca539254fe7d0fd26089c0ff7b7f750f801260272f166d3282ab439e81ba7bdf46994a7e48f6e4d62af0b99e7537f3c4e2778148dc3478a684c556521d576731078602cba2b1dca6651ab921b870e157fe13928732e6eb95c6488885174173c1243170c538b03253e89c0fad62a5f3a0d486ce5962e91342c0c8c530e39a5fa9312debefe920df358b81e49907163fc205f5b2b445c51c2a0fa21619f320a0ec0466ac3da2c38f8271ed99377874673585ff40956b7d797ee71e4e3adca1d7f662069e4be26249861f4ac2815f9b2587b968fee46a21f0aacb7b91c3c36058e8d37d395cf2c37c4303b48210e7f1c60039489c892b7b735b7acbf376659c849642807887b4f6e6367688b7302fe435785d6ec44d33348c7239ee38d4c70bf68abbccab6a4bbbe1e2cdb46960191605527e84308c270a8b6bf1e2d09e7a69fcdfab6c4071cf9f52828a5974f07b16b146592d33537f9a9b70d41d43b225349cacdfd1d5106f1fb5d2eafdde8869b65baa532b92f3cce7bbf43394ed559f96353f0417f9dea44c515696192ff755163db243fd6ae53a0f22f37401508395daa59dfe5f8fef8cc66c0467814130b7e34ef65242de74d3851579fe30cab5455750281ddbb7b9e8e65f018194a2be90e571e5983f7d67d15fc69b418599bd1d639bc6a609b0c49034352715537daea81257ace8ec2eac82de375a47c27edcbd4b7b04504772e04debfca1c91fa1d1586b7c735bcadfc0cef6fdb900e7ced467614a3f00929a3f0f308c053917394c55734df98678291125b8cd0b58e46c46568624e21e1d57613033519626b5bc2a020e71f98b004e228c2e8d6c5e31f5e740f281084fb1e1bc02ae7b85b39b0c5640b6734e34a9d4432d7848e8a5a478451f524368cb8c75faa09b8b119e15b2d2f1a3d584951d030dba5d2eb4d5f399609c934e1b0f86ed73cbb925b3e1df843ea496ab80d9ee1d245ef0fe21e1f71781ccddd0cceb60cfa80ebf0175c42889fa4d8f063e15c6ab6333d95d11c5418d0241c20815c44789e286a0d952677c8c25c5a2040aed89e6d83837d96dd0d91ebc5d1bf5fe5a0dcda219d78266e2d176423d4f34778f18fe40568d8154dcd5f4999d41b594579e0618263ea45688aa1d06b802c84ba13ada5fca4fa295d1c2e348328e3a9564ca431003ff4bf43664d8999aabd1560c8e49dbd95f5db23606dfe23e98e8a0b4b21cab01764fa3f31a952172c1313b84566490ab1cb74bf6801d24c7bba2a2c7fd647449a62785e844f5cf4c45ec1179a99e9958f74a2ac8713c2d6285e481304b93542821a3638c29bc5f480409fbf553134db5e680221e723bf67bb601755d7f1f8be320f3302fecf13118fdd9f9a5734b9ae38b0601b59f07cee7a2bbb2781626c2306736259516ac1d2e551416db81b5d6ec14a6b2bdcee1aecdcd9bfac2933fb8c06ebfa6f9b030ad010abcf77b3cb4615d9d8d45654da72d0e49a015af01f4b65684efd442b8eb63751d0364ffde5aea04b0110224608bfdcf1c44ec073e88a5e8587316f79fc665778ef108748a2e4bfc4a4bedf10745d1e60588a8e1408897cbcec7b41d10911230031df07463918b0b3591bfb7329973ba532d0e3f68421ce2fcbf24ebe81e37846d540988d19d0503d98469c31065ade4a41699d7c489cf290895b39f5f4cf39fabe6ff0697c137e184683d037b5405d9f372f7c6b3f0b464a7f5a0b6be9f78afe82e8cbd7728f45fbf217c415df2d8c4b37940bcb6e2679776e6e4546a38320c8b897bef97f2c76a024eedfd1dad3bef816b6e20ddecbc50a99ef0bd0c9a5aa1891d5b28186ed8b649e317f043d7851a2bb3eabe42f79685ad6bf1549e2ccb414c219a3a0f5bf938f385dc633b56f70e2209688eed9dd7225d84f0ca43478f762aec0252215f3f1dd7ad50e9a9863ddcfaf4b125d3cff3275fa3b0bed56519ba2ab664c4bcefce4f2142309a5394ffaba3dc06d6df14243d5105737cc9b4e45f19dfbed0d6c0240221d225a8f2654697b57205bbff483cb3fcd3933cfc8197dab2668e8d61f9d934ef6b7c86655c686b9d67ede1be4c93acc42fd58b19768b12fe9bd4defa2d36b05ecd7cc6d1c88848e16f93b6caefae24ef258636fe68e9191873cc2f20aae0387dbc30601709ddaf5491882b6c5554ccd3d93176f2e6e73a90f0e5b9145c18706bdc70f79040b753247b4a971bafbe8e38aa0290892aff8740be6e812cdc440fec6ce3ba65486d2adddf25b7946ba96f9fcb7239f8d814694fde459271250a62f28901ec670acc04e0efe2f8c52ffe057420b4e5ef3d437b4a7b63a45ed489222ae67bd7f608db1c64a5dc209e809fbfef961136a18f5922dfe980ef90a2a1bd2dc7d36784e082ae6f95b72546cfec59ad34e57b5e9f34d182df0c48268490f7ddfcbb00d02b1d7fc1b4da3b2b0c1571ef1b41f77b585c8e0ef3310235cf4047a6b4a3a45ab4b846906e978daac46f888f04e641b54da1c4ed0c376c4efaf6034f90e3dd2ad8fd55071e9d53bd0ba620c998a420b3aa4cace69f14b157a9bb15db36c83d782d3d72f4111c0a509c513ec76230d749751b4995e539e5f6891ad57d8a1bdc4f3a49c9b484e146ea992839b886e05ab1916af2ee2f69774e53dc270afed43b038c349d263d32168880c2074beee4117e47711387d9879548459efbd26739e5c4153137c126c4954c22b5a9be498421d9f17a514ac92ef6d467a3dfb60e47eac912f85eaac91cbb77d14c2452a51473fbff6faf22dc906bf45dfbeec8eca663979a05e803582bd553279a2d383516bbc0ec8a5eca528b96af794a6f21561bf34ad87865074f51a5752247a0c781a1f158bbad314c9ee38983f7446ed3a16967e6e603ba1fb0e804b3cade9bf68db43b61fd0eaf1b673fb25049d30df46b5900273bf448f0e63b1506bd20f25bb70402390a46c6903c76f42165916d21a939eff81bd64eaf3fea7f9a313f532d38244acc739bf18b522dc348055044282ab1c80b32988fc361868678f16128eb80e48b7e5dd8bbc1276d64c96ebdacd23c8940830e117cae41244ac1a5c87c2ad70280fa36fd519a293373eb65d1a5d073508df9ba29c8e64665731fe79ecf5c4996d4d1424fe85f28a39a24bb41313cf4bf74ded53c2acaaa8746d097f7f242e96303f206fb5582376674541caf9aca663b26325047472d4f5dba8c68c78c29adb62229c7ad2cca11fe57cfeb6d97e783279a7a5ed99addbfd07a336f24a375ca634fe4ad17c6bf8bde97a318d24e75ea145acf1865514ecafd910e451f7fe80ac277899ddf6fa68218a341b9213b44bfab8ed29a59e90a3fa33d008fc2fb7d76a07b9676e50b2cf3c58bc27febd24d430244e9b2a9f8c7a9f7cffcd863a3429342d4916d2da7ac76ba65cc75049f48c7e42fc5c907c87a0d001f1270896fff6e24c3fb92d2919b0a56ac4d218864d972197656ebaee592e90ecae053a31035ae9538a0811456aedc715a041604668964a60761f8e4d935ca629e14aaa85a9697e5d443bc9937a5549eb142e5a4f8f8e1b721d155cedb28541510798f6941ecc100fc3ea7ef10e64616ed84e55f13473644b487e034dd5a60962d0fa74719facfc505c502e303d54d2c09d510275876473dbc8fa3f2c262459012a808b15e37d9c53773f7f8abfae2dce4f791f392f98049c2889cbd842a66e1ce9a4b9d94306e4261ea20dc4129a2d734cfe2b1a6522e084c4579b8f50a1af7a9515d5c23d107a5d341b68e64e630b366d23641eef4eff92bd910332b8a6821a62a7110e98caba250153c7d48831bd73c4eb17ed0da7c7cfb7ce3baae83c1f1a79f1295cc4f9be1489462201aeb565a68776758fd3583b4ea918c094f7abed4848ab0f4c3db4541bd0cc3a435838901f4b683d54033a00786f047792799b10d624900ae1a533c16568534ee196bf01c2ebb79f73b899e5b937fe892fd34be5639e022cdc5aa90a633e43d4e4fdd3fee9de34e89a90e79196a64e490958b6e9430d66094a86a8e840882cc1e675bec0c96959fc8b39c0ae372bb982375c7c75f8d0a6a1a8adb768386f222b91ddfae5ee0ffa0de7fb58e10ac6f4b32914f94fec85fd21f3ca1a546824a090f3f1e156db461fa49e1ad9d16cd27f19506883620a8bca0a227fbe00290eccae5a9bd6ceaa0797087dca7aae4c8625f8c9e9a52241eb5e7c2d883ac30e3fe8e083046accb83405be8dce81861a925770456b9370bf3d79a1109a54f138ae4f9dbff42be7c339d06f51e1eeb53229b81132940f61c45e0d465166e2952b1b2c35807fd824fe7cf644542d3156ad117379027f8a1747f3a9e4b444571342d0021acc90a568a7d7db53c146fe57978e19ef3b4620c49f78c5078b51e52b01fb5ee37af93759f4bf0671c77c557bf05c6d569746d35b1f37ff38ac6ba9e4033087a140759b6beafe54cc38baa05dfe6028b80c4fb66df7df7c41e8bb3e7a3d1ae37b37c1d8c22a7bb72cb9839802ebe3c5b1bfa5abfed1c6361f712da8321340b9282b3205360cb0f5626161f90b5bc487d62f05feefdc395c48351f904946ccd62c189e6ce28fff87f52af807243588f69a404e334ebc4d4ec692a5743651529af69974da9a1cb174248cb2d81bd7acda2fd606132ff45e7f7bff8c993f122bd4c8d4f812eb8adea143942162e3111e74eaebd8bd3d970ee831a4ce4d626d2d847886f3de7a3215bf8179791eaf93e03ec852a0e7d385ea9b20da5996d360ca5dda5f98289478372edc21ec2891440c785cb598c4df6e0899b8bec9aa2f668a8ab286f01a20d5355678ea0b7a8341abacfc1e3de9c3496d04128fab9ac25e637adf2393fc42dd83b33acf3510e4d6363e949f10f65deb048895798959a364674d3de64f6a42e11282bcdd144504716c3b141dd28cb56a42c7610571bdf41a1d8d1a542381a33103f1135af73e6a6bd46e2b52379047e89f8f53c6b98d9b3e3a7d56107c2be087a59f48e5d847a4d5c8d8f8185e0a3580723aab31780050536f2571bdd9548247ea1fa9336428f4c7245f3a5ea9d42b41e834de8c7a6d253058f871e22b89d4015af08c764f201a8144d153015e5786edd5130002f12f3b65416d028a9b974b5bbbfb9853eb6508de6ce424b40ce615c76c4d4180c3bd854b59a005feefc850395f2dc281b17398e4fca8535eb32eca47ccca703650fcf548a44ae0bda2e5e8780cec4324e3095eb837467c8cc72fac8d851a8a9303c6400563266cd21af62402a483f62df1958fd1ff02463374a4311f3a20588b5205d83edd42b99ff17b4bf1bd0816e122618c19ad98d47dfa132fc78a922892a371d46bcd122f8d4527f2cc5589e97840b79fec2953264dd8313e74207d22ace7506857568aa5193fcbd209638e17441708ff9c80b22809ef65d7fbd7b1dd7a314d426cda17039e0caa97fd1e1d4386f9b85c038784242e8531640680ad81e82606710559af229dd02fcfe29e6e0cc86108b35c61f3e637402f3e30bfc33e8cb1dbcf4361bdc3b06b93c765441df9c56c316ccfacd51f1c0c20cc023aa785567628f9219a0672e0c33b5830ae7ae51e7bc7a7bf79ead82694bea1b17e91732b945b8f6c00778b73609aa01e403c945c25de79f9c8f31eada785425714fb4cacb6e2f66edef6d16fb1fb674a1d75e1a3c1585e0d154f6750a055fc39065d9a5895ec7a4135db399135eb66b34f84202406b254174f70ddf29dcc895f8319d40c1658d76defc93d14c374e7164f615f3e1760f30c1bf3dfbf9241cf12b3476faaa6aa9f719540b37f6f8ab49d5e503600c70a7b5c1d44b9f73350c74e114faf133a39192749c74f17e39e9a825a96a07f15c500ee5f6d4ffa3ca4717d3f5157dadd398a1bbc73f30533ff09bfb3b6e645a43e8a1e2f86d12b8408ff5c8399dc934150e815fa56837f79b4d8dad894bef35fe5e99f6dcf24e98c59021d5aa147e4bb12766d651a0ef5f8b70636cf46b358404e869dd1eb85a32579651e944cbddab998d44edb5daf49491770fad85e94651b371c84e24255caa117166284881bed75e1dc55794296940d04417769ffdbd9d5e416d1fb2cb90eff938091cf9a5cb163b0be5f90131d537a65d06f75e73cbb381d950173a1f8ba9387448d193c0f2edcc990493ee7a623d6589ef2be4531e808e39de029996d453fb8cc308f8282a965f8f12a7a9bd3f87dec431b6e3ed8e55bc266fc5390a5fcfcb4c42faf8fc407498dd1239bd59a09e490dcb68cc07305c88e29ed192ee91f82abee075dc6d5e9772724368da99f0c6b44ef4762aaee1b58ff524260f0207acdc4002f58b5ad32018d6c3eee30780b4497c651ac896153ed7441e89c1082b1cce977ae2a7b81bd6442e72a72ad0bb36cc997bc611882c0e04d07403abbc1c64046d397c8bc1e4da5ad46028a28d6d47938ff55aab75f5331d0244443fcd36e5ebe5cd75b88706c8274410feced4d82b780984f6b1974a5b40fef27ec9ba30adab04a43b783e0f78e178c383ecc9abfdd0bc60bfe49424c0f23cab955c57fc5a68b5506ba1663d28d803219bc58cbd983f52047f561bc4e4a388e0ffb43d99a6d59e39a3db82ad1fc5ee64702a3dd79c0bad6c74ae4a63127fa241b9d6fe7541db57e9f6866cfe48af87d04168a8aabf04ecabeb0ffcc1ced0acf7cdd81d98d82f1da55a50f2be1371a7459921379ab4bb7ee61114226a6e1f8717cbf5575fbb6320daf51cd564e4850f212d546597fe4ba15bd524aa48ea60d02e1de081db1d09d655bdf81662f229fc37135985d156e63f78cdb81b94f7ae4b49ccb4a4f8e24256b59f64c9ffcf6c8c7592dd8f1c76356106e798c31abcdcb1bfeff8248653e3299ea5c22faed6beaad2ed0fe90db97a5b833f00800262445d167b05f5ce3300635be0dd0cfc1ea0ca7486cc5a0eef90abdc8aa197fdcb850c3d348cf2f3f2aeb975cf878fa7dc1b73237a05bf43db590fbdf7c859a38ad6867fa0ae59484a3db01480a8a2b32c9b977667ab9cfc17414f59b3b22d02316fbec5ee17e06f3eace61a15c506ebf30263b3a8fef05f6c0529fa61f14754f611fa4ab48e10fd88b50d536b225c31ab070802d7c49977a9f7f7d43dca468db9ef2c32dac8d6a369546c351b071b9429c4e461314cd36bd2e61dbd08e28cee21028feabc84f0bdd5cb7f56d804010954111213d93a6c7295e6f42c6d5e6f2bfe889f59dfe1fe39d3896e6c2c7be52b50adec2626844ff8326aab7f7c39f1a2c6730f8760180089f50651faabc28de7a270a2e22f7e9573cf8a8ccca9b652e1cb76e9f752126ae44968412159b86e056b7bc2734113ddb09decc1652110199830a7fb8464e7710c0e4329b0e9cb46fb68a1695065c84fd4601d41948dbfea05839f97304370560f7926eaa08e6a3a4f9bc001e18a5a81a0ae343c010fce65bb1a76f91f2555014e5a9bf986d6af98a6568c2b94c84c2fd4ff45047af4d08bc2b95719ff25966e8f5e9a08aced5de5de2552e9a23adbf7b9ef9ea49193d5788d5b29ed2457fd0e48e0f99087db9329d1831e688727e18b5ffdf0ba9338372674dfd73c595cb39e0d02ee6bebae632e3f0bbb6172e10b1c574bbc974743a74381e1d825c57b62d30ce4d30cf775f7d4a0e11338d5d5eaefaa34f0906d0b53951dfe0d56238a9c0de346ba75b4299aeba08766fde2f391d4456c345b2b7e1e5cd549eb36d2395d4ae94282b8a5161f7fa1de74e16454f8079c8b90cdc454cbf382b62bf1b3b420a9a4316bce9ba7f3cfffab5bb4c57101806e5543ca52cff200b8937f4d2c8e773f6faad782497c2a7fb11329b1b085a400c089f0910d95b2d82d06adb8a0b1e5b1b401607c95f29549cebf0b2bf3efe539c3025f9bd3545da5d4acb0d19a69ad9a29c79132c3aa5ea801539008c3e8d4ff5f2a15fcdf8f55b77002054f0068bcb5446fc095d1972602e007f99d301ff6f708869f17353d3e400c06d8f1529050fbb75fff3f6c8bd3e9fa393f4de5584d827972a721bfd17f052449dea5817ae07930f36027c82d56f6d0bce5648014a0be58763b603d33bd459bb0c62262c36cade76ac08c0feb038896ae6e9f4657925ee40975326b2e786522546e5b23631da6921044571d33405c2d4f2f6374c5741c4a9ba970aca43bca06cf2914c0629722413b894d0f1ebe8ede7581792163f8db151737dd7ae1df577c090f50d1321885cfe5a3eb051343c298f89a7ff406acc11a723db4094702ebddbc00c5306839f7da3dff8f98651df904b128bcb02fa6c967bd351803955ff833cfa2317e0d69a6b969b2a7077c1b21756b513de0e112f6e114d17cf2a9293025c9ba271984f619902c3f7d4b6a8a532b05aea0e420fc09b00e4f7bb0686c18a0508954ff03a7658d239d44b70c2e7382128b557733fce620e8cc130535384064f673c671e54474d13713f34b1488a741013302f08cfff643436983b0dbc2e770c1616eb8358b69a2aa6474250b37171dc59876a07f9dd35870d9a302f033cfd96ab24e83c7f146f8e69d7fb729b8f370fa5ecc8628ec13832c2cc9220924deefa7e9e0602b049439d5b60f22664c487285a6fd167eb29ae21a090df4917e280391a8772c73153784cef02db4e831cc3b9b00e7241dab9fb0d067f9715d9e2f145c921070bb82d1c621c2c73dc0835c25177a9ca10cb5f81491519676925193bd7d02aec783f582784228e226aa10ca25fdc230c01116ecb19e3f129bc35ea06de82a69ad6efd570efd1e48aca333d1afdc9c73a363651611b7b119accb2a2ea28a1b16b35c6283eaa6453c7dc59b995ae0b53390f93671c7d3902733e0c9702448e13045001b73126b336f3ecafde09ab546bb804526423555aa1b3eba77ec50c85f6cbef8e272853ff5f334baf9802b012ef902c7585503044bbe412f48adc9d1dda317db7061e6a1ac63f80f2aa5a9c4dabb7163be09ecb36634f8abfb8de8e34d6988e89ed1404ce1d396f5b8508bf70d20d42050a89ed054b61ded629f4293d29a1324f2d36fe630491fbc091bd62fc898738659caafe0d036cae0a9b4f7c2bbaf64766b2bd25e478f1a427d31d022fb7ad12b973b82d04f5569a519468c63c6794ba4595a20524a4df1d84f2f33184d52d4e4725118199b1e26f3c9aa3ea196755ad3109576af1b6fb845167e94cda0e8b117bd6d4968c35ab143c29d27637ee4607e87602578b81c4ceacbdecfd57d1ae6eb9c18971543b46b637656197328c2c7db7d31879b90551573b1ec2b5a649c30ad1715272139c24d64c44385952d8beb688a373c054389df7481908ac23dcc70d620bc95fbbe843450dbd1c050be680f198fc63f3706d32543b122fa9290147646f3b4015d427eaf3c6c941ca80ace7db6411a4e4d82f9715c80bfd5969c85e39ead29b9400bc578965129bc9b424684b29fdfa09603395e80dfe60f7b8d0b63510b1e9b1770dfa64f5ab4d501dac28efe68bfcfeefd16079f831837fbcf48464764cb6a20263b657ab8948a420973d5b0d1f3f65c4cf337f16e4689cf7e72d1cbc0de6b6466f24d5f571b319806431b12ea6f16e391d7f3325155243cf28ab203fcc372fcc3bb6423b011339d2cc880876fa53423ac2460549af473a8a7f611b52fa267012caa06ed0f4e9c8752076d0e6a91e9f24761894a0125b3fd98f006127e33481958dd3dc6e666c85ca015eed8268e1b2fd92c63555dd2c7e765d36202ad4dadcfb393149029be57b6248cf1a29186b36a0db51a907459a75d32d36654bdf5d8517c3da0f490f9a301ecbad77eb2785bda514c7b2d53e848b55b86618c309098c3bee8549eeb917e7ca42cece7401278aea1e2bf98174c717be5eab1b99bd3709fc57d3ceb22b6af49aeaa8f0a3286ed901043da7b281624d39f50003c16838d3ba097f01809a985cf5cee3a8bdb44e8c65388b5f6c27755dbc2fc838b4294895b4ec4d23ad97446fbb53db606fa76b35d9d141fc429fdea6d69b274a2d37b0ca83dc4608348daf5566b5a53ea113f519587f473c8a1920654bfa8009bf2c8e9d43c24191ab106191bd1d41eb23f012f2f67e83ded3b04ba7745c954a88e7ad81e1496a2fb9e12a38ec66f52062540c925ef6c5299867a10cb44bb614398d46bade8b777c025dd46bee1a799d8d0e1bf6beb3a3b6a4d5d424a372da2360866149d2fd8b64a181184cf926dd297dcf56893e22a417ac75097e06e32f1324ad3b60380185404fad5a0172174b2e0a22ee304b22adfea27b74da72fc1128c1ed50997957df49c2cafba30a2278096a23e52fd56402329699504993068c6a66ea746d4dc893dd01f9b4747cfc8e3a440705ec0a8447d351a785e761e4523a50e83ff3c4e0dc02d8f02af21a9cf96134b7d8e95c45042f42a74e30b8a42c2c4c8b22cae1a6f95dbd63a04c107a310a638e52fb28f1d83f742cdba2287c124db82f710945cb845fba583d2a3e40a8857c66d3e42d05863f4d76d581f59d9b29260e1888053de68231d2c8c4bd5b0c29b06695915519c74eb09e61c3a13bbe26ed218ec8284284051f4a64f3dee5961550f63d4140041cd1dd3b0632bdc26f7071c4bff4801ff5ca3e0c6523ce38b89d136f9eca3a1e48c52df4cc416200e94ba689c6e2f0926b108951886eca4b48dd991c1871d6adc5e8bb3edde425ddbf6bcb99cda165e28bee055e0ccd8a160b07ff5dfaf6e987042d1ecb4eef3ab0680ff3ae26cbbeb2ec3dd6a5961336113bb3ea3f29c8f66d12a6dcf63a0080b6536c6c1826eb6d27b717aa6214efdf4dffd630bbd66ed40504cd1098f089f32f8023c3951d41ecf28bc065b78c5e729deb1dc862324a5e14dddba04624dbc6b8b84601c370729d3242524115fa16c52be7091d3e4b142f2e35e90a40d01c517355344d7e5cde718e141f5997343311bf954045f7c67b323b8c6269ca6dfa9e82323e9c2a75c85aca7dbc4381da510421398a69e874d13f13b7371f3f5aac64a7076a82a3c6b10d9af887101e21f3239f46b7d001f537c676cecb4c52ebf6b811a60023afab7cca97e29e29c1fabcf3f550d98dd89ecd1bff229086e0b8d53eb6a471618429acabb8ab36cb2c162061aa1c65c35e9e9de8a180a3e5b3bb17a822384ced3210ff0bb35888b04bd7c913a8d239189f00408b28ebb9812626aa10287135c09d15eccce419f0571005db63c6d2ab445b918bf57b81031a9b89c6e8955811b4ca42628ba76a2ad1a054a449646c8e64d1384d03bf3c24e6841ace64281a61e2cde5284594e5a0c6e6ec829879b8b04127d7068e16233ed48b1bdeecccb61688bc7ff7cbdfc7c2bbfab3748ff5d991458db21f98744b9b3ccef0e72531cb5d7ded1277530796bef091ed2ac840da5240501afe6d5c38040b6bfb7afc64574e62c22bfaa7ad52384588a6f157a29e17f07a5c277efa1a5929d500c93d4abc31e735b598d364f7c2b66fff04aa90985b6bef952b3282c479c57ad862e6dbf33348f91ebe5c6f265a9e8b64afee8550c54644271047608bc19ef68ed88e023c153a126ee75070e74a9f6facb5f55e868d22291e026dc4c4cac20c9e012a3fa01c83b684098af2b65a531364cb157401859bd2fbc9e1ffa95ade9f9f288654330cb76043a13abbc4585ae5e02141ff4f2eae561882980801bd434b427561158f71adc88e9d2a7378a0c0d2c66c8611f894d80d7db926ae210d39295cf40e4fc719281447e1da490bfc949b87837f4b50df0c525737abddd396bfb0155c5dd04152325ddb63610868f4c2a3162ea116114420ce8fb050ab88703504f934b2158034a19e99d5e108c5477ca964d2465a8c3dfcd1355b7082646840c61b2a11f6f72f1647d08b6e7dee0713cf460837d8f84cd897b71019bf3d7cb64b93053d1dae0e9fa45a64fcb5e02860334012491f88cfa93b9110face5114254394c4fcdbc20c43d7fc3bf1f699375a0af968c500d0285da29642e09e0b049dd16456be31ea0938212b0e2a55af04fec0e05cba88642c2b2f156e578d18beb5ef343b61a2970d58bd077c2fd19ae32f503203a5bc15788300e63c3d4b644c85eccb6e19d8b1369ac9ce812a75e53d6eb1319554db973b26914fc0b681f5fcb28ab1e7445cf8227fd5ac1b6e865288b2037138c2cb5d3c2e6be3f7080a10c19e46acb3b6dd253158b27606f7d6daf2d03f7055cf3486b12f0dcca444fd14d0aa8087c02fe6b4331117c20a995f18b3bf7f4caaa1ec098d66fe23a7072b3a076017bf81bab0d718e10dd7e0d212e2d2e570c3327c78b88d5104ef8bb4c717e3b08c5397cafeab63ede8a3af05ebfbbb223fb7964e688d9822afd93c7feda88acd074ec1cb48bf49ea61a9ea838b88195e0b4a0a33bf10fd52a4943ee9533d3833f8e1bcea71a75620f831b04af06ad22ab48a9fb8db6e8a1bd0e85f3d0c43a9a2e7db6eb8eb9640217f0bdafd767882233b14a360fa1f05cf5b7c94944d84d85a537cf9449a0429821734398605c21174521a74fa36be96f9c6152507cc089a83e64e734a163306681c678b3828959c755ff4c06aa627871c4c30aa32b8cdfeaf1e3f42de5d4806cba9bc50a593e74db3956d014b65b74388c84e6d65617a1c99750c41c0458a37cf5e9efdc0b4c363134a21b2b655164229dc1489dd6af02658d0721e1b5a2401bc301110fc78cb69bc8d78792a8ffc82c76e6aa7b50e8e84d75d81681e54705820929cc06aef1963dfa292adcf781c212f2037a7c3605655076ab0524b29d83c480a3a5cb1543a4a512067ef17271de24e49d28d8868b26b8a0d6aefd2f08c01a88499afe84b46eb8ee7b89ec00067f7a088679f36d4c076d57d0c93b924bf4aeaf7927031f769ad9670dace0b2234ddb2eb9bc9a1139fbb1b52fdc8356e7d4710bce50e71b165f8b529203f8724a549f8011fbf809deb4cdc7521b8284836282a5841774d7fc5b5bcb1a40a564922c810452fb3fd8fd259d754d242ede376657c1a84001c3b83f41ec3d34f0abbdf8b7a00a6ffab9c2337efaf31d10b507e37a6db0908478236eba5353d5420d71df5d1485c0dd3d5cf0f213c7c61fd53681869f81d6ccc233ae12862d2f916a0c69cb175b03f65a7b9fd86e559ef7afd5b6758668be3da159b778b69a1d3943f983f78b3ec9a4fe976439a93a28d428f51044edf11a514be0fbbf4719e1ebd9107d284054914aa896467c9466e463295c10e788e4df61b94c5b6ea81682c3f6ce4419c99f1fdd0986297f27e65637946ab645d01f66c7637580d028905ddedbb4946bc667d78f84e8d3cd7321373178c7b49b6484e612a3ff6f50ea745099e9ba9d72ba4febe5488ff301084df0ad1ca2066143cc009fae03503264223aab715497226cadcfbcaba9b184a3ecd486071d821883c4816a976705598525d15b5affd0c764c75c3e0dd708fdf1b1d0a69c0893c1062b042e2942aecf8c90a8191b132656f57d56bc3c8885380296bdf08cf7b2c16c26a45a406f177544b99a774e3e8d17ff7377528da7366dd433ada41045f103e6392f942f6ce2d39bf080ed9ba6a508672a5c01e68deab01250b4a008a1f6672919bddd1e8031e0ba6b3a632458cf15429f7404acf68f8ff3df5f1a2869b2aa10394c6c6728f985b88ac294c9dd4f2ebcf20da9bc12e02025a98012b10c909bd125ee85aa506e551edbeecd70be0fe7aa501440584446efa0dc100a0da5232312d5e073b96e34f876a6ab0328cb60ee1f9d5d7e78ccf83e4c3cff81737be330e0db4c341b43d2440e846073192f5a544af410c749f7d688999032c13682432809c857a3c960e7d8fc6ce8f87513f4118670658590428d81f117af67fbe715c59f6ce1927ee22352fb9d457586ddc7d5e0d7e37b0f60ae7492f5093ba22835a3e2bb5f7546cb3e37291586178abfcee616c635ebb782eb7590dee9e516ee504b71cd18288264d1f09041e57f159d09e5a63118527dfe671bc79350e21b1dd415827760b828da380b074cdef280a7372c3518f361f6700e2a7bed01757be040cd161e0e948e950d8de7afc3289dde5584a7c6e1d936305634ddc301d8c762066b1af2e5512ff7b226b82feb2474ccc983b9b4d003789a40e5ece511abc35582b998e6d6a5583e818a92dc79095d20b4f402677ec1d014f78c3ba82825987bd3b91b0bfe1f34dbe3e80d06d8b0e7b4ec6dbc61b17e33c039fec0f75fd0893113c65fa22fb3c1e371c3b566b88fbca2a94bf4247a4da218b399682e3427df8f6185c77b3421d4af363126d3ad7c254d8a4b2e84134389575cb74634216867d0462bf2fbb268c3537b67b0704977b89b8b5cf0d8e4e6fe869fe145d30fc13665d3262d4c270254cbaf98a631e7713c76f4096289c2ac8807b2167ea31822b0a68145f88c788961b5ed8528cb7f6d16e545182df757452ca4d4892cbae38bb05c95772bb5a614112c774f73ed53e2871a721884a474e38bd395b8212697b900cdd0e686c782cd0edf9b24ac6ee12ce73f4e87a26dd859670642f27ca2f460224a5654dd3d364f28427a0383b2cde2b33308d307fd457fe44297a863f4878177c646250a5966b5a35f792732f3035806109b67d15c497e3515f6caf5c5e0c5f84813e8899f9c60043cb7a962ecc5cc0512e8ef05cdbe5aa023fb07c9fc7d47205bc1c6e46db9db4f7bfcc6573a3a4ea32747e3b34df4e53259e97719936906d99e72f70194a11367f5d677121365397d9e36fda1d2dace0a28ba84c1b43f9d349d8527f1add83ad9faa395163cd14e3ffe25c280a654667f85eed9b3dc51c85288564791038d008a4a044a5ea0339dd277a522808de14e6c705156dfb1feff7140342d528e53d40ca9d035d25081d8a825e03d397abae1aac737bc6e90b4f5cc6d44d65bdb62691f795d0a82f41dd7c77458ed48009bb41d045106cb3a398ed27c6487b1bf3ea2acbd2c0ffc6cf3c95454a7ac96cf65f292467e7a5d44328ab293b1a7e13cdd68ba088c074941b2e63d6f47d3791c21421ddd9e10d72c03ff23d200c493c66b6e4a778d3b2e98c59a742548b2aedc0d06e6a60bec6946eee52ce4b728cf7a3f35a46b5220d4143949695b711d0056efed5fe516e1df63d7fc00c443f1f9700fd28d970c34e28c39f9943a38eb1caeda54be9fa64365be964c182c71943592d1275099777b7b6115c5197abe9e05506e1d5332b631a8e0031c6a5db159aacbcd60993d37f3d51c4508289c8f8341dff88fb45ecbb302cf934f098725cde38e70ce7ad5cfaefe94b27640e99e9d1b4a744560bc8c50b3790b83ba13468c35653fe1823401a60a124043f94af186a446f1f24fd19fdc228c9d1b9a695185cb097e4d36b635dfb830ba650931c7b707dad0ef2325bf442693f377f2af3070be4e8f36031a18669bc01cdadbc107cf1f96125b9d541a98ee0f2b933d8f0686e31cd9c7f197fd0fed82d45d29fd8ee78d2276b8d63cd1cd7fe98a4390646148ccd1d0d92f32ef2148c777d68b2b3c1184fa4a5068ad3d8d003137250cf3c6822a71ef9d1ec734c8132efbfcda5593d641062a970bff00da17db0092e36eb4ab98bab11ce21223cccc08b3b7e2ff325d223110745772ee2d04d8b79010da421fcd5d72793688bf5ffca31dce1ebdae2dcfb61adb8c66a8b77f1aa432f0a6402f1a8032c0e7a646ed86ab0d8fdbf8e286f93d53fe186050e18c9dbb5e1418a6ce33893cd457f7010c8d74999cb5cc213387e9b9feab4b61ac22944f9a713755ac6141de8df28c4b10dadf635a0303d15657b3cb9de8c884b3b187cec699b1704a404fc504fcbad323da4c038367b7b61972e3c8107f102a1da996cb6bece17512589da3e82dd9e9e79d7840fe59b3ee83a536a0320f46ac719898593b2c9dc011b5bbc891a7c7fe46b1c4a04d02050c4424f76fdc330c947de47a1b8bd950f06cc716bc08d8754e36bfe93cfe35a3182ef036c6a1dc544d1ceb7b4f34bbb393ef9ab6454a301124e51b9385aacd58481b8b8ec6eea3bfbbf6724e8f8b37b6b5d42d125a1505b049556669cbabc1a78fe144e3b65e999d55ebd06337069745f0fb728b79ff9c037ac4ac3491382c861a655ff2161f5cb08b11d7179badc595b39be1d93e76e8c260a0bc8a9910014f5e19a1f506726bc11e6fd07dba53d6e9d5e1e518d5c2e9edd6e6c76b72d1e24ac9d95858d545dc19ad77df0a60e3932985f94c8ad92b180b603f3d487d5fd61d39a5a342da9d54a208b4733c09a3c06fb364a7b26e64ba4030514e72b240ee6343bea79af482a5ad5d040a3af2bcdcc312224d4d1c593095cd6a99586564dbd0d1ebec1b04a3e657c24b58095e59db0123f38bf27f4fa6782549426a6c8f554a29c449a7af1521e9a29fddc9b2a46ce5212f6604291907d2e3ccfa3351c7e7125f83c1974508f0673245ad8f39ade5f8c689fa16abac6d95635bf0aaceef284890800a33e37cb3ce8d499ae282af51a8637282db61cf4a8f89669dd2bf09ca85c7d6190d8fc53b830301e3576f9a26f4c33a08f29f648556d2a932e8c9bf37cd299b1ce7a9bc0fbb8d8efac6acd879dad1d0a163d3db41a18058fdcab7a537fb388ea227f6f69af6bd9f349ee8f5c6dd05b1fcc2b2990677219368bd2417cc2490ed043a2a3890fc612e7042d39d1c3be038c733f95491ae4a00535976de05e66feb33ce6941eefb38a438291aeec999c733a91c4506d202d651864e179d0c8eb3e27b3abe5635b2d97747631c8f0d4c356bce840dffbae93073471746ac0f4d97a841c699a270d06120564c472de768631a0bab28c4f5df13b38774f4442794c93d1bafed36fe32fe876221263b96cb227290710477f42c5804503587c6e99dd123d418c585348fdeaede7564b9604e6171b039c6bedb6bc5ae98fd1f0ae579465327a745a0ebcf91828ff7f147200692b2c0e432b13b16522623dcaacef9953b26c48e9ecfda545fb24055b403d79c703c8bf81190daa584eea98084395da1aaebad056145490183f76cb23ea9f1f300156d28f96fabd275d92b2b3aef6f010d7a8a8e591e776a0964dea5b3736ab401f98e1da0290a94d64bd36b940c805d0c512c6ddd8f5edcbdfff6b1d82c6d15d610aeca16c9dc9f4b0a2e3fc2f7f0dfbbda1544186323984247e3048b20d9a9a589090f19a92c0b0b593693a508de0d34496a98c508bb72e10f62207db9aa5e51769ca8442a99d539ba0320f5049bb2e4e88f0b60a746116c6937be1ce8b6ed96d0ee03ecfce6e6d09c5a568ac6d82490e84f0f0f4b059ef51edd286285dc5fd5b2243b3d969e3c0eadf32f88d3de5302444d904d2b42c6b66c7fc69236a2c0f17a4f022ab0ee5583c13bcb5096c3ace12f0727003753c59e89e3e99640fb6a33d7645e347f1f13dee658c85db3418af78099a342d05ad52d5fcb7ceac551133407be2e7c5cc39f31346618df4cff4caf51516da4b7841d5469c9c2a0b20b2685e15212c3de6ffff9f93ac70de5de58481760fd1f5d2ece6249e536cf95aea066ad0c845aa315c545df538cce28bc7bc30a455fdd2c309795a1041efe779e262200d098389621877d577d79192e1978d830afefa9af0b9718e3e2eb9a4df26a622152d38aa263e7cb51603d9fa8c6e4eac48ccca19dcf6ffdf2666ded08d85603cdf57b3cf74bbe7b3e6705c1431ca8055ccf3f71115a8829c7bbf007c8fd0f06e3d7d61c7fffe72b1d611936429664c4d10e3edabc2429847556dc6bac53ec463f107f0bddb97ca51331dcef5cc9d0b9a9dd4140aa77b66135ecf013f2a50255fe794a89b20d700c53e51ebc7a5dc5236d91a93839368868884a8bd076c9d23102de2762f1b4f811a1674c8facf63bff6ae4650dcfce26dba0c818d332d5f9d610b2c8712d3726803302c05dcdb917a147a5a0ebca0495d331777881ed255220dd5d8db85a9a659175d506b26005daba7ddd1107433d9cd179d565f39fe6383208806db250f1dc675a52eb3dd75d9ade0b7a4378d6d8a0ae9e0ab71812866f2129b367a5011cb25464783e92a84b864d56fe194d8a6f76a3577ceadf0808032444e406bf6169a2d51a262add777c7d12d54e7a503010d8f497f4db97046fbfb06c871dc92f6f6f53ad94d9cdcd7b89e36002d1697b22d01bb5d1e06a49698c93d7651abe58e3af0dbc1266f3cbb4f190bcb5d63768b44b61e424e04a46f30686c075693077bd27a36d78823beeff895cd26732a944f05d2b0f705d38ecc854a01588430d941c55fce7f11fc47ce0817381056c10fe548a09136bfeef6ad65512df595b69d29361e5586038d941e9673d46ef8cb03e0e5355c0900c7c70966bd3a781b7979684c122468d8125d25a4d7668eec8222ee549cd9f3c8a55210f3b6486da4fedcf64e40071301375896c2dd336d34991c5874417db3bb5cb22ba88616a9dc1ddf569faf3e717dd903b02df5ddb5e79d06263d62ced5abe832a57ee366970b2573eeded3b667f20d8a27fe7414dbd1c68f877d4db85250d1ff378ca2155768de38eb705c177c67df29ebe0baf06d07bb06dbfc2d326144a385b61e960b9f5a0748d01a73700076e488417dcc6efe978e9fcb38719e1cd7380e5ff5495654255674118aa974fb919233734b30848df5575e233ae82dbf993e809b9ddb65efd411e82122cc1e0a76da07d83b011630b148cdbf5485b3eac49f06776a03082ca4ea23f9b6c449ee0085f0bc472c1c7bae0e284e8478b4b0a1749940274f11d1266695907cb0650ca8b7a4d4a032b7b0efc45b97f84956dea19b469da6f0723e61063df63db249c337c9706d18a149b2751ef66a9ad30bb6d5a651872a135caabd00eb27cabdd8506969d327183dbb5c1c934ab236ebf52c93715fd1e9fb0d8b51afe447567635425280deb9f9faa39ebfadde8c01ce78c46c7826c6af3e7082e2fb98719791668506b4a9496ec7e24dd54709c7125676708bad65ef70ca68c1d823f86b05467f4ad1dbc8616944233aba77ce197ab34df649a3dd68fcd93f76329fe560496846cc6a8140262c3e8c7191443f87f4dc1af750debcc28c9c3d39acdeb2266e6279175f043ac5d61896e3212686eeb60d21d3457501a702c9550da6958b6aa131fe8124f1b4960b8955e81955f7ca0b880abf86d6ccce8e172179973d595ff4147988843b570dc85ec507edb99732a601a5a8b03e3258ad013d00d591e189090f9d20598444b0dd1ff6a3e07215b5c187cc2062a294377fbc30ff1b3b265d3c59ef793a2b21d46c804055b4197c2653837583287288712cbc47079a76e0a8d7668d5e2d498874c5f674a5e8c3049361461cb3c3c054ed57d71db5159fa6a738f002817ab35169cb316843e2d8be351ffbea539d715bd3a8ed41bc980e502c1f318a9b8fd2dee2c6bad671d33242d3f71cb791b9d124b2b4223bd45434746533b88c8a664d90cee3d8ada4700cff8c61b9e454cdc11b95b2b2214cb9fa5307ae54fca3d429300e290144cbf7e096fa0ad5ec4fd0238dca475a6540571384d27271d5c5690bec21043b28eb4c8b4a2969e7e9c37c335722d1905a914cd19b16263eaec623a40c9d47db3d6ea8c995aaa046c064e6decdedb58c42603e6d971c71f6bf0e08ba338041a9477d54cb035e5695da8991d31191b0126f775faf7fd6cc9a2bc42b2024892e90b4ac341fbcc99362f76da548c608716a355443ead57af75cd3515ef6cc60ad6e6956ccf5d249405dde52bcb0537fef2326f1c808be7595f973bb08f6e5e0b66907c9ca963d08aa2b08cfdc5f4dd364f00faf0fd7363078e4ec0bcc070bcffd9cdb8d5821fc10dd663db8d67a9f7f7ee465981631d8646f5422a864c6b15b3227af81643e3431e6613a71d938a417b59216a4b599c07bdb367a17aef3d8b41b2f214f32af90d84d4a2dcfd865a69b9e470512deca244257ed2f042262bb470f7884916ed63162a3149cbd6c20adcc73296e9433752230a29a069f876e26ee3eeddcbcde722957334be828898aaff49456588c35c55ad4a526d3f8d464472994acf8ac21bd61b1defeae2fd9378d5f82e4344aade96c973d0102f5f0fa35316d6479eebf7b847a6280bc34b359b6e6026765f84d368f92541ac508376887fc034c125b0f09058588a983b6d4ca622a441a2588fd7a1a9f8967366c74a38d787b883f68b13297f9b71adac18a3de1ed906866dc7dce2c85e621731ef09c327df0ba2ce496dfe47d1cfeae5101b9f5e5358d5fe6d8a8ad1982d352a55e727df3c457bb8b311144b60ef82276e9ebcb639f3b6d33da7e18a5016c40f6dbdff73a3580b1f6b4ce4bfd72e2c80cad2cfec654e125d100536ca8bc051bb63852788b6ea963a97a74ef4f9d19c599661cda43cc2b1207e2f1d48072f29c0e41eb5fb84a9be19011e4ce8ba421fbafae66eb4cff6514b900e02493af543f938ff661965491f0e0a2a0fe1e91da346af64c1da5a67c247a676fcd435688abb033c88c508ce34238dbf41aafd4c03c851352f28be6193922ef7c47eb46e1c38b534a0a32ef939f5978127be43505a8577ece67b712a622c6c95fd5af152f9d434be4d525a78f233c0eee5351d1401a79f151382a694527f088021c96b2785988dde7c5d3a811e3d58cbae96df5bef1168c0c75b4446d67c19156a4f4d7e955271da44ca424d2514a8a1929a7d0b2de4f88b7f67d1e8d2f03dcfd75a8b4f21e2a130bd9cf5a885e3ed5a66eb09190fb941ce55d0b11556ddcd1e43c6d571ca8e5e535029f3da4ba5c9f447a1fc849b99d530c2744ac250153a0bc429de6bb20bd64f3e54324bb3220e31c1ac77a72f938f45e511c309e5905c05981cbe132de40646fad87378de4a0ee250896eefa7c6ac1759b1ff69e48643c9dad31232dce6623bb7fc9ac762d55faf311418a3d413f61124596d1d82c9e84e5c8679c5273529157a04a6a04871fe75c39c75b2ca1a1d88100c8ff7454fa4fcbce95c97f01c4e956a0b950908bf8cdd991f3d95e1bea1613ec7ebee31847409c648a2131864733e812d331e13695f0ebd6e3a4084205b1dbf09913271254541d4b6bdf5d2e171bf6ebc61108f07fa28e48fb8f73a6751a0b27d5d74b5374e12a24c81b721894fdd24f07fe06e3ddd7d03fce2cc29e3fe866e17f48d15370039a3b568ba0796ab09dc04059d1adcc46fcbd34e064df8e069719542d5d328cb7ef936052a94fdc665525c93c4ddb07986b2faafcda1a4022389eb37b1d031f087d915fffb794a5381ae56f53a27867a72064db49b181c0806bce4f992351fce0f1cc9b3b459e8baf0a1a753436686e93ffc33789d57f77e0a543daedce46b61bd848577f7081d6914d1c313c35f14f4fecb0edf1a8141d5119424f896f4e92a693c02f503cf33796d5d7de4c4769c4f14af5813a695957a05fa71d87b130425dcd8a88d5d2e7694f36fde8f1a9304c0321c7f492bd941d833b64d7a01c6c82cf9c614ef9efbe597a5f0c6a966a848ba011b2e877c146241c62d8d889a62c47d3c4351235aa242dfd6d3dc073d70ba7e87838a0aef21c5b1a12fe1404110370868292f6dfb1cbed2cf5ac214501b6dcd0515d6a9c4b86f944ad6046b3cc6b6de796205ee89c881a8b6424f00d551153476c34a8740dad718912308c41bc045f3265e596bc7169b5b62934f58c16b7f3ed46b9201ebaf145bcae31c272a3554477f4d18489bc2eadd2b429d9533b27701da6b1c952db577f9afbe7a593180d795ccc8d92d6cd237d95295c9d7eaef5b02c3c3b551ea73beff7d841baa65a72afde513529b172fe2b24a211162cfea870c8f0a6be953727cbb2fb5bd1e0843cbe15d414bb1afeb5ace9d053e726f68c5eaa0b4f5df203a4ba3fcf3217f330685ca949c10046a0cf20fcb62b147f94c32f3ef75328fa7fd6031a6b7c79aa2d4101307728d3b1e7c74c380677ed04110356c47b01f61fc1a45ab4bb055ac58d5dcd5a80dd884d1420772618d173ee195ede36fc9fee42b9f695e97a077f75fc1966491db4800b7d49597bde2eb1c0609c4185e4ec0e3c5a85f112421f1064df297f674ea5598fdcb26e6b8153040a8fcd0c67a1aa4c0d79c07425bbb16f03603b82eefc1fcf1b97909fec4ea351ac7545ba9e21b095b8744765fb6bc915968748e6e80db596738aab1171dc49fefd8eadb54ce4eccbc1797e0ab45fdd06eb40214043e82772e07eb8abf626e2695cf8529ed237db16d2fef02586f4c6334f8c3d177ff84b634979a148335aedb8b2d48734fd44cd723f145518f12e5ef545243c708253471655fd3bb9e62c92e1736e052fd0457259aca12d450574734777d91221261e542ff775466cf2238ee5fc491e60adb67e6e9c921b2efdc509edcbdc17c71c43c24d0c5c2018d7337191317ac4023de0b53f961e4210dbb1982ebbdc0e905d0935f03187d48a5c4950834d2de11875a5fbbff5564610c55925878e5d1bbcbfe8678cc99a67272d87f6e827da59d5dfbb20d3a7e0249c39862e6c56cd357945669fc58749b66d67b521cab06be3d2ec54c21638cb50ad30fa0211adcb3abfa290993baf662fb9e33affbb85b7cbf39eeb1744c3c67a99f6a7355df7e126c73e244dd0d530b60dd6549a810d98fd5f7da193073a19de38c338fd2ffffe34f4d32c0dd2e18808581a34d805d8200a2cb3682e5644803b518819977f554b3d1753c30ee79c19b49e702625a0463ebfa3253012c9fd06fdfc1f8f7804e83532887cf184a3178b5a2329ca4b6fdd5adcb973ed9e4cf78b2227e76c6797f5fc275330122212c057641256bd8dc2f230b8ebd5bf021e443bf4d8d5efa81dbb7027c05b69deaa124a49fe471066b4b8f8e7458962d93b52d1c49d60cb01e942a35e0feceb440f537bf64f55f9e86f3c03977a7dc0a08c5c4a463abcf0fa79b1fc5db346296343b34647b563862e7abf707118ee9608a22073b80958b25dc0add2658888fc4bf811dc8f442701fc60204567830cc5fa69c5c260cbd96fad94fe8a287796488fb2638c7344d6efbe636f03757d2940d80051012e0d69dd934887ae3e4f8fffaa5c2a507ea53f4e53780ddc4ca9250035426f1486bb818a129949386005c1f0ea53013e37dbb48783c846a757e642b4f066edfad6a30a4c992a92131346db8ba1308fcdf72a61444bb9fbe5f9fe23ad1716cc38c11049581d2bee560e63db161e98c68e5b780fbfd800f1afcb2ca14e83a7dc3bf81f8c4b475fc28f6a36961ada1089b1e0f2b5d54c20f99ceabf99df873cf21ac901c68991ddf7aa2671697fc420cf6188cb87171f2bc1241982a0afec78e53443c0baa6cdaa42be6775a91c841381dbd22d7ca9af595dc518a66eeee1f6845999406c83a154e53e64e3970c11f122a9eb7d74db12597f1d0ddf3aeaa2ef11b81117a7232620aac66d1c4b1c8c012446b76f123d33c60f4e0ee9819ba2d7e5a56496790e4b45fd70207b5ec9967900880d63e76c0adc74b7d2f63e7eaad84604c6d2a8171575fae0221a7dc8942c7ab52233e6785cdbf27a8fd5d7f8f3b1a9df1588859357120bf129a000b56db4219c81b81a0a02b1aae4c084da3911e6d6df37d5566cc89ac665383113605a5df9770ccbfb79a2baa14035613b393fda86e23a4cb491d385868369fdf61714f978477283565b15ab2f81e9bf412054322b83d9b9d639dbc84a882f3c97a1d0f771038b881d957749e394a2942fec87e33a0252ab880a65f9d9bd66687164cafd042c5dc5186973f051ed6e0687f82fff12210f0733c6030582d444c41f90d456e07ce29cfa376f34cf1bd46f3b8614b2b891af29dd4489c535af4734bcdd3dbe506a86d719f580aae92b2e69cc0164b83647c7b49aca98e3f37154308e4ba4deafa053ff1e2e3fa6e58dd1699d469bb3b975a108bfb99387faf33e7f3ed38c5e75f9390a3bede5a8a5f7cc614ba0351ad23a1428723ca8dda2330b1a07e6853aef79a942bea2ab94d3204877e82936b89917c27c395248f75ec151c08b9865acc955deca77c5ddfc97e4106a54d2d6428fd20d116cec14d559ba3191456d8e672b59a7e68e29605692a6a17c92517a5156f164ffb3a2bce36c96122f7d8d2999cb6087a8e2eea32ac68b043a8ced5090e78ae6411d739e1f9c6f1b5599833e5ff37ecbd281beaf4ace39ad8bae3934423f69e6c6c300e48295d242b868978af916d2c09fc464b55bef49cc890ede783a8ad47878868076c9b60e65a8abc4b7668e092707ddcdca8a728bde27c617d1067bbc2caf365da6e813074950f835a2307407121c2fe43a54cfb170937997b74850f6027d388ba5ac50185783f7d1b3cb35591dfdc6991dd1b8af667f44d31dd0fc07d47ca90c744e9f7c34d060d6842f4c253abcbd2a757177b817bd4a09c001bbf0fcb46daf94f5aa6e0cdeb0a16589bd91f3edbe29056b1622dd7509eb17e96b35655f1cac3872914263922dbef6aa62b7ba1525c47a15c9a24d19812b35eef456d3b10b126e95d35e433d03dfe02ce47444256421508a0e7adc79a43196639538cbfd81e7c94e1a25139d6d11110a5a55b7d10d6ac4d38a33c19830cf0f366ada77bdebd71ce50239614043b59654e9a09c45fa9b70d302dd16beb3d07cd867ffbea305facca07d223a29ff922dfec3ff62f5d360d5dd4bc82080c2a4fade8f465ff0126209980bac0590b73a9471e8ad5da959cf15f0f4918c4ef81fdfa2709895bf883ffa3f90f8634c34b220a17fa8ed2a9014a103b62db3a2954d1339f065f2f1d316dbb4ad4b231766f8f6f56b330e7e48dc59ecc4658e4da0bb5ffe9b349b686bae8fb3cc57413171c9ea729e265b5691c2395540ee040c1f2473f69c15ce26f3c912f14c83244e4c2c1e9f7a045d3cbff894fe51f50a8f34f302d233b4871e20807676d51d213f70d85ced8bde36de444102aaa15553d2c70d04ce87a9c43188d3450d3e80388ffad1b4357b7ab7bf7348e418f483ee115d2148a7a0ab1a07dc86de59300d3c21e9840bf47952a9e6c49097f72675e901d4fb4ea122d5e6aab2391d0dafbd63a99140ed6ae23b2973dafff3bfb0182bd96a41b19115b35ddb0be3373aa1f63eb6405c87a2e1fda2885616a2438717d3778e33d4f01bf584fdccf66efc2c075c1da3251e04137dda264ac80aeff82b54c84195028e855db2e604df822202ca42d76049ce7eac4864288a2eedcf315b5477d53fb5ba9969026dcbcd69af35dc3caa8008a508afd186c6808ae03de8dd4e8cacd0caacc1e9f14f295d83302d952b4fb84083d8240256e700141d3c368dd4425d56b2c6fb011d1191560c3dce65066aa90b2840b38e555c2dc5fe322ed2b04fa9215b7ed9ccc7bcb9569f34b5b157cba7dafa21bbd4f3c52920552f2ee05773aa31816f81356ec00ee3dcd6d3e462d0b14360b1144935d9b4857e15478aa43baaa2961fe1b97a838e7a13cd2a9f28407d14c63b5c2f7434fcc1cf42a8265a26f6f8558f71f5768aac3c0ba30eb42f269d93338c36b55bca66591c53662a292bb5bd807c094e1931cf790f1be3790244b588c5f82ff7d31618e48d450ffe74a026f91eef314edaa3626b07e1b0c946f23eca0676a89dd54b57f491020f602c5d45577b11481cb8630e3fd9266c1a6e69f5f26a256937e4701db44cd9d4cbf6119fb57dac920ec5726dee7e683433115d4412c6daaf268a46edf0aed945469141eff42d4fd3e5e0706618cf5048253f2236a352115f898c57193e01217bcac16046bea434a92a956c27f2a4432aec58d5335568b7e0929bd8b2f258e0fb62fa47b6a3c4275aab3c34fc585c5af03371758b7296cfc5a8fe3c249ee76672a3a61a2db576a75ea8b9fd55b13e71dcf95a4c98b844178b5c60631c5c924d037bcf0ef9028e4bb628d54c0f1630188b6f64ca779070d909b2c79cdff2e70b5635f3d75a3e89287d362533aea35ab8a0051d91e94bb5d963171c5c953333ca0a2cfc2f9da34757b2515ac369790b6912dd2b628ac71441d1d2a2e31839e7aaa8782ff227b19c92bddf0635576fff6f34b91229535b6e6f59b56b25028760d85e13dba40be9364c7b0dbf3f3676f83f1a010e42710566c0071bf46cb1d8d1399df203aeff21feb80bf22ba22b337247a8b915cd0519cc0617fed644848a4686c4494cc8e0cb499c14de8b9e647399a246022edc2f376e9dd7f4dea844bca6fdd6a186ef2b77e05a951f92d5ebe0c1add9632655a4206c2f879f139f21548a60919b7f7d942a1165a51377eb3854d41e43a54967a4b31d216eebd3df35a1f0525f0d46762678c9f6779c4bca0849c9d0e52d7294e04a0426b616aa76de3d9a2ffe94c87a036b07a2e7f5bac446ededaea79b2cce36b7d52f611a72d940fb654fd3aff596630b3b94cfabf91f80ba50ddf9563ecad996f42ba6725e3d1fe4d59b93c582be50e06c96f990fc0f9860db22d3174c146a44d3a077e41a92eb9aa0dc91b991f4f0e160129d462525b5b35f0a44614e896f4e507edeb777813e0602a24ba054953a12ae857cc5669281bf824e0ad52a7725d436d38d5a810ca96f8555a3df55a0308f4a4644e70e11a571560d5d67603505788500146787cb84d3405a30db4cd6b3c31bfb6e96c9fd1ad8231d9e103a5df0b95abe1391d8353f13c335ba05d9aa1527a30df9a5ded2f09d64ae27ca1f2cffd13cf965264295fbb0a26781a17c9216745d29598e3cd174013d67476c252eecb3a069b94b00a5b26a1e3931299ebaaf7d3f892a8985d2e7d37f1388cd37d8d26daee837feb462c23a335c31497459ca2968da3e2fc660f94f40991cb92118e33acd4b1bb7a401595a776b0116bff5afeb264d75c5006882470e94037140bd0d3e43882398d13ef08b21f9ad717c53859ec17c4a7b54c805a89c30cb7c3cb7667e9557d733c065f27104fff30f98d76553616a16f25c876ffa202cc20b2542df3178176003e0ec5f42fe3966287ea7538cb34373e981d4ed8c546c2e3231616f1b0518825ede5cc374297e4bc0b1d2122f5d84352004500e7a2773af8324f0a932988ca7d56a242e540d786dc807e40b9133793efcf969f619a5b0724131438d5440d157fb855beaeaa429d3672496f8979256182299b3cef3192e0e413b095de62a39dfae2f68f934ed82c522bdcda21be89dbd747f39be038920ebd7209d84b6a214921805501efd058322db038b0f57e325f7eb4fdcd6237df904e45f6619b0520fb8011b53e1918cb7bd48420f844e3b190eb41cc1717049ee1eab35b4abac22c5c3b47b48e886aa5ecddff51c64d711d6e2d7580a559a30a3d35a0892a344286aade9fb80aa71e613c6207e6e5662d9dc2904a11201bf90f48bc54826dbd3d903bd7dd878a51a561acc931cdcbe5fd98d9c29e0dfd05ebbbcb8800846e401ad3f2ca939c5936ff8240eb5cd802fe145629debfed7a034df4b02930128b41a58c42371ab6c4d21477adf4a69d54038f521b5eebe8a9f3299cd1e892b0718553adb96474534d0618682f15e1aee1dbc1bbaa4acb1a22559cf36f2dd2b6e30672c1961b4662150abd0beb9458fb5e3fc0fc4c5782ce3c9609231e4692a1830d0ee383befcff740bb6bba804c5b1cced652bc9d773888d9f4c03a101d70b4fff64019e551ed6b25f71b27098d1d86ecb2773f85c6af6ac0dddc7ef4b56b044dfda85b41558fb711a336277bb27004adedd4fc467996d7268c3a7f954241b9c7e35f02a69701f7640e47ba0ab279a0d861d4e820c49e02b6ce047d73aa6d2ff9ce4f7eebd24daf6f1c9cb10f4d2200a8a80c096a8715f1233cafc6a2363d780f455011efacb35d5c03e2fcbe1393e645af7b123ac9c1e0ab2209ce9a6f63a2a3986a23b4227e93c3ec3913b9cb96861d56814dc8798235b5d4cc37421728095d1a6d4c7a05797aa185be036d731f6e7ce7393c743cc8c08cfd026efe3721dfacc52af2f921b0ac4f458377f445b0d1ac4da18ea0e1f21251d0b71efc731dda88b1c4fc55dfdc12428b77c29879766878e11b09dc50073aadba896833792c141e47300352a09398e10fea607522f103eafaac8634308cd738121e79aff1290ca4f7542327b5e8e6d94734e622724f908322fcb8d1ac747af510861c036a234233b211b81a0a107b3a69810bbb7b0e076998c4c4766bde9609ed9f72eac464a8bad61039b414c32cbe1d0468e727076c5c3a023e1be2425cc59a69484c52413d6f61bf6178e4276b6dc56197a4c32f8d7d89a6f3997848e9036e6233b9d970110c29099da86c055ab6c7f97555edcb9f3c607d74fb9d844f15c3343290274dd1156d20baaf92f511582c43206b898047c8105fa6d0fcbbc283a8bc747ab63fdd2c646a6e480b0f7e464484a05855d7cca68e0ae1d56870bc914a0c65c406588596c3962a7a9ba96918aa635fc46cb343da974a544f5d2a470356e9f06af160de56978136f05fb24f434c1f12e9dc19c2569d8200201f3389ad2c55375bef447a3a77a5475f6d9952faffd5baa0c0164701cfa6f4a72fab54b0bb543f51d453eeb5bde148d90ac296cccb315c1070781aff1fd48bb79fcfb113ba9f0189fa23435aa3b92c429e3d388b6f4d9ce005ee0e61683de45f7f34e37abbc490cb0839f4b121431271cb5c3046c71c824dc549f9fe8582096979031956e954f8094205f1525721f2ff8ae9276e9f24f098471e2789b878d7def692fb0952d3244739105dc08afe3a116a4cf2c0e99a6eef1f2dbdb03c34237880e28ffdced3c2dd1e5abc1931353517ae8acbd7c8feda48611291f5b6b53283c87a063081810b91bf4369a6f115b106c5d57d9cdd2ae2d80b274467e5c5f11afca441652c4820d56e3f1d45cc8df671d236f41799514da6ca7c25589c344a30d8aa86ca8a0e8a31bf24a5b6feed14b16fe8490db71641d212c56c9addfe99db5a1fa6d9c927b6b928433af71e7f19a75f85555faab290d5920263ddc74ab986347143168852d9b51e44b71ec184486b1c59df39c01f83cc8ab780e9599502540a9776551c0ea87a1234d7ddff46c5e949310c33fb49dea88019e9456f7e33574dd3b85c5a81cd22ab4d6aa6cd82796fcdae61a56203a766325c2adf79f8e9bfe0f21159703ff842c61696e07f0b1206375110e9bfe4962d65716ad8c5df6e383aea5c4f906d0c6a7c4be1305549967e2a02b8c16c12484795d00001643e795abc7ef5ee49ea36d7796d8286e779bc1b1ec69b980d2a109d63cd46cef097f76744e2646fab5788336b32fab5d7b32c9000e58a8c1b49fa0b9a0f584182880a623d3a8025f6de3b53b66f40b94f160716403247c6c623bc03edbdfcadc7d311830aeffa4e683c9f0f1448585b5c41c520a945776672139c6fcb897a6748da1676cec5579ad919f3e697654afd119dc37eae3c910e9687227e4798c8c54738fd2e28fc40b8f19aded6523dfb75e919ed88eb17308f556dbb33e11bf1bc84096a01fdf80600a6eae1ab161414cbd3d492ce74da5cb6c854010d09892e182c65a165ebe8fde196132cd8154a0caf1e28535032e931b2081f0bdcaa1b2918f5fa6d207eaf11c5097e8a86730a3b8eaf6e6fbbecf96bd4f03c4961194d4b7830e04652dcf2e0ea1ccc1b724454bd60b2b6fe8d154c20dd8960fe24370026c6e7c4076e62d48ad0a0ef78ac5714fedaba3f6684c3afa2ca516d28cd4e51b28813c6118ee734fb8ca025ddc7fb590be853b3446392a8161b145abf4aee5d90e3c32389816598a071b57448a8c06d6b7314c15e909f9b260ea458ff62d1f39df2b6b45fe9aa4dd722742c97459c269f0efb948faf51a0575b24784fcfbeba864b804f5710d180f900c68cc9b6da71f96a215449e2b6a4379cdd7f8cfb05bd49b2f119f2da46c49f16f6d0ddd08d521ae474fd86e9f9c9feca2b122a6847a63118fa84f17e3feb8f7e8144c466c71d19dc71ed32bc26f4b1feb3f1aa38689982c7474fee9923c663148326fa49ad1d00e63e6f9fa10b225e8d8098ecea4b0f60f66f825ff56886e52ca23c99987402f44c67dba2eee89ee407a553ccb9a19d2865f71b7a81a53081f256239f96a935fc16839c87da9b3f566c0db9779ed7a1a4430386204700aeaee28d1f154dd040c868ffda0f24831b653a8b4ed45b9ada20fcde6556f8185acbd9ef3e48bc3c2f4d088cb0619f9b6c287b551aa626970544864321cc99b089d742a3c600eeb91f6989b107b7a5229a78720c8479ce5644d3bca262d15f2a192e80bbdfa7fcdf444cf8abe7ec7a45548aa9d8a3fa56cb39cff86334b46ef0e9fa44c4223f916634780f52e6e155d3653285f2e34e98fa0ff951ec6de022999b56db495af6819015f414d29d2441618769922bc2f71a42ebefaada4e4b6394bd02bcaafdf181bb050e3470051dcb015cbc71f94e063067d4eeb47e741b993e75fc720d1a70b216149963ea5a29c1b4d814c4e654e22ae31b00d9ab3944c4c25aaa7abf62ce6aad7219841aeb1fb200508be755a4866025194566e2d0635a8a80056efd1fd9abd533b610e85a986d55e8c6fca51bce06be7e1ad4bc7442f527aeb75b8cf572b4313fcaeb637dc3a19fdca08dee8564417ddfc031e805825418bfcaed7b42fa5c49255c05e977988b1d46a2960e2a91cacb6649370e73d8f5255f0811358980520a4b45b5f7b9c27629f61ab7177e994c1036c132cc77661824f6836f6572fdfd0b4fd6e03a28b9fee983d9bfe7051aabb78aca5a2532861113082e184f7b53d6a66185b87b5e852074d5f396f952c3c2c63706419d7eebc583ddb646968b550f144a4e71243ec9b6ea491534f643934953117f0c4ecb81be7c401a8017819da8e81dbf86400484a22d8a5bf8e98c81142380a2e2e126d30ff6ebd0278a54c8a7bb2206c21ee623217d4a4e8aeec50ea325b961be5d3abdbcffd5c5a55170dae4842bc63773ff90751a35a8f77bd5432b605e73230a0b64e2ee916ac1c724bb0eb459b9f8f8fc9de259a413749e05af5b1a5f2760e8ed526c214f79ff1da3634d846580982cabe678c4d59f7f94ffddb6453e1d0a1f1a1cca51e88eb42bb5a7384908edbbf5d802b94f5a629c251fc0a91fa13e931708d431a20a09bf3775ad49c245bce48b7af8591ba99dd2d873e39705c8e89e35ed3d411757443842836017066cf11d93e5a1e0a62a5c74be16256b74f6461c235bdab925fdec4dc3660de6ff6f03e1d5ceb4595ca5289a199c3c60b2bf0f0bc3bab1749d195cb355f9aaac6c17fe463cd29f60d8688215a7b84d3d1277d668bb834b480ce90248aabb42b963188c4b3ec931ab0e19042f50a527d955e731ca8b7cdaca4a039b4b9528ecc0d12de463fe869e2646827ae27a71438b2da7dd6d4bff65eb2d975393799f45e92f2af6957a4c93d97d27270ea3661e7845fdc4854350eae43794d2d09fea5b0fe26373945884a09d9867c9a5bf24359408f8232712159104e791cea4a707ba515f7346a46727b55de5baafafad97e5219113358c0bc070bdb23041cad17d20c0a016e1e1ba3c3dd8d3cae63973afaf0ee4cdc3cf4068abb0b4e1101c7c3857ff57134c0415a4134c228e82160799058bf73620a576bfc782324fd195e2aad8c984077e0f8bc247659f5f1aaa256836db08f086c3940226f7f264107f3d40aede012484a88f6da42c514aaa3b7759db6f028ac1db428a73e138e8047a0045b9699605b2ab9f1c0c786d934a90727f8744d63173d81753fa1b42562273690c5d890e01c0ff9a31629dc60944fd4d67f7d91afbd43ab9d53f1bce5ff42f17d6700aa716a14ff7787237fe216a170a7b050757ae35c699bfd280cd4fb1d474c5c98f2e6ee026e16e1cc34cb6322b07227b974dbf7510f04c606494d133d7768ede9af16c1c7c643cbce22f671d4ccc08b17cef868271da3e17ca55d6771031a6db50272c054d279dbedf74baa0ce8f79b651d7d45b0596e3e44440b75e9d7d06332ffa1c7744c6856212cd2c6500cda18c2c916335fce0a7f4f8be7d3a2fca7cebda3567e511a524e2c61d70217b64fd956f034002816b3823a0ac36316e02ab3f1ee403799f48b532f86e3d0a09db1c930a3c9c0ee4df90848d38b69fc0ee7c94535708e9e5a5259ef0c07040a3903a072dfb6fae26683144c3dbcc7dcd584690aaa452b202ac4eb73003cb26961807522f543615e9b5aef3d6f61cbc1aa9b5264d0d1a8146aaaf204fc871284f8d7e9d4a1778958c07398d738e0d7acb7cd24279953cdaed3207bf629bc091e62c762926e27a3771decb13541486b4a165692f2dc20c5cd0e83934439f68ed110670c1e45fc7ab74236680f97b71ecfeac715de2c120994a6450bd3a4b3bc69a781f146d121130222d7ed4412fe26b982391bd54063840fb5ce48a899c4b4f4b8fca8a7ee7546ed5a179e60d352ae8b3f9cde386dd1ac98dad17a3d0c3fd195e9b365c2720fd6fa12f1e4fe9832decf6d00cd24a7854a0eb76e442ad5eaee69cc0c731a7782b8ba3f3fcf189af8590d06d733b218f48d85ed3a90fb4dc0766251ec5f4c8c91c791ed33ac220f70bd655fafe67335e1a48c6be57ead3228ac03e1e50998f5de6b4a5aa48dc8447d15f45354568022e44e3a4c481225dd9ca582801b0604c357e47cdb2dcdf4aff236722b13fac05e768b055659ac0b39acb806e6e14a84c7e1344f8ae646410d8c57869a159488c4a43a9919f6cdcdfb607d96f6797648f23eabbb3b34cab8aa475d5c2c7bffc0b3b0467349d43e02765f7909578ca521746408beca5257f2b857e0f112a1c36964c62c55fe5f3b21433c336c1b251f867a1239a8aa1a0eb6f69bca83271ada2458542130e810bdac52e5eb976e98f48c5d06f5b5aab569c470abc1fc7216689fd83258f1f29d7f96cc3bd0607dc8801a24939f634e77b04f481ed39d00e698a3d9a65e842bf842150cef411f924f1713c113b98e0d3fb373a822cd6e69ab0843ab52f3b83e8799eedac6f25ec5fc3b2716d48bd11c24cb582c7b624f3a138422d9b3a7a18e53ed60ccd72cc2ff478307dda0c18e2509d243ab35504cc022ca02f525e9844f635c5a83628fbde6113ddcb4b15c8d3227f97d12d22be10d98946141d1985075db7a5f66a4a362dad7b7f35fc69a56600ea9de116f3e01902fc1a0b19114869c516ca42589010530fea3cd08be52062b8d8fc650e194e5b06cb6dd7f25c474f4590c14ef31e0f39e128d03459f297efb4f128c9bdf7dafc8c4a9d71815d9093ba589f83827250481c2f2e107a73dc37e6cff33a35b08c06f30cbabffe23e1ba7a7807b0372ae6fd23fd10e1845af2e6eb20c9a93f4ffeb42a6ee73e6a135735a6a7076098cc2d1f40c6913beba53c27b14447f22d28a074326dc02c5f5fc38e7434d19418706e3338b263ca7908caaefadc1fff329284fd30060b80e81d8568b364e1dda342a77aa0cfce18d0a226802ae75d560342eb6a777671c05b298b8584b77e37fee5e0b70f69f0e4a017b34eba38c47c18f7651a3f580d26c017300a616fd793253de0b59f5555bc127b1eaabb0e8cb37170661e107f64b723639f29b408c3ce57fa2a7a4448116795b8c95eef8c4eaf34af93501a6cddc50643e6361e866c956b358fab6d27e4ec3e52caead2a57e9b596079537242f7a0ec5b2eca04c01105720167e475f3562b98031c3b36b8e29846323bd7dcfa9b640e54be9cf08cda1250a80ca79a911411d2cf0f2ef1aae062d676dc06cd76f1b293528d1f8bb7a451773cfda8a2ecbc592ccf069b2ba4ac697c0e82f8689113c28c3ddf9b1872ea7fa93104264eaa4e6905baa382f39aef7b7cd70f1e8d267e3486398758556dcd13827e344529bcf0ad9db70273c7d9cb03f1dc8b80cfb579a0d02ada2dd09f0be0cb05054f7059d04a75c4f8422b1013f3eb0dc796f2d67b8cf665ba0f8e303b70188f02842fbbfe76bfff4b58804ca7cbc0e7d9f26fea60490329a06e34e95624c67d1c488f385eac0053d58ba63692ffc6c94e963c1c3b8ba6416bed99032e93a51abca5f1a51d83e3c5347ac0fc535ec6a74b9f6f947a109c3edbc629310095fda37d9e47b106c9b748fb0cdadb785d906bcf1f7a5189d69714ccb3a618310daaba3c12f78418711712e7e08984afcd8e6d6675b3a14a6d8f360ada253a3838eb093d469e375ead6cb07642bb09954c0b881ae6918aa027014327ad3e49e4d1cf1fa1b55c1bbdbef7b55447c1dcd8638c611adf4b44a0de3860ae71d4774941ec50f1a2f89da4855fa4343bdd0c8c4e11b1fc0134685cc54a638d2b1f6355b668fada6ff1099f9b84ff63444a7794de5a8fd699e28082fd9e31a89be7bf4cb66974861391f978d5cc5839d00e6d4fa6862e1e1fcd7d3b7a0020aad276e75f55f450bdf7618221260ee9e0a1edaf36da2ca6628cb63218a04060a7c014e0012b6dc0906cee5e3322743976ab3889d1f19b3bcabcf8664e2e3345610e34dc78c54d9631326bed055c1ccc2ad4e62f57d263d49a64e8c46aaf337144110d84cc84db1c1a245f6ec5b6e5616e3218c50641cb76e9dcfbb504164a240c8949f774a2fcef093ba14bd686bec7ef9802af9a53ca73502f7b34a4071900307bdcc126f93db523fe55d9bb3c43cfd2603c93e4e61709a49854d95d5ede525d73c915f95e1622e2d3da7b5fce04d31c76d851ecfbc30109d17f211f693914f2c5b3a141291e70ba2d5681dc5d524ad9fd2323028fa965e07bb86d7130fc65db8ebe08caa57fc99851d9b61562c9b3601b150e6d9529d20c92ba8bb8b9bc52436a7eb3e4a5bfe4b28a88c9a09a992d06b65c5e37df7917532d5f5c8a02f154e91efbb8af22d69fa118ab582234e8f7b3892c9b227ca4f20c096a15d6078a061547b7ec3fa37baf1844eb78e7e5b928c529a2987a25a9570c8fcc250c2d060eea3ced7fe02372e2fafa96dc7bb9acf3907aaa0f9ba36120301da11c98325163fe005840996db7681a30e97ed51abd17a3c77bf8c348ad25b44a4a94599fe6400acb660d3b7cf1b92bc1e481d2e3739d38256602b61d13f46b4bf9dab6969a53f6d580e245f8e4d87d1d778004643fc9a53f84502f9f45e692832d10d3964306c9cdac74ccef79da0c182220e86129f599912e6d178d69ea067666f3079f3d1ce9efe53ce0160b6d66be2e7401359aca0d3d6eccd518561fa56eacd18a20233701c3899d1eae21ab08b5afc725aecabd68fd5fe8ccd4943c8b21a8f1a5b1a460ea2b4d2b97f75f4c87290130877179e616e66a577a76195ca388a340a5c27631b8bea768c9d79fb74ebe26cf674a402c3ac614ab2cbc87062ac3b0893419ad64e8240c30546d815cc00b2038641b90afb10d88540ed3de634d14b15a705ba00f95593c75f21308afab1a611602f74b51fd8ad98e62bb9651b24b1eb307433b577da81671f28b1936feb0aab67a71af9f30137f31f748c3797f414b794ba02c18b8c5fb9b391c5bdf76db4aae630e40956e6d76206d9d62dbbcc4ae2014eb55131985159c4dc5c9ec3f9b65bd3a59ad019434ce89e44925c05645a58a5bab5f384516db412a8cbea80cafbab4c1f752e414a0eeed6444e8c3c0b30e20d2912a2e3acf6fb4c9e90baa83aed0fae14110db1b93ebaddd5dd4b6dea9b8179ec64432fb6f3415631bce40fd8b7df4c71e638290f48994ba6646aa98866bec7c94484c86c18fb033c6608c543d51f5fe2bd7ac9b6f2a151eac57c7ca8bc073a6c3dd4c351c756d516a8ec09ffda6b02d04eb8cf35e56d2d1c903ee2e5c07aaa1e82e0c6e6d949805548f8f9fb62362e917a7a2a330f2d2d643ca11eca1f6576334f83fe059b84a802ef9df96852c1994878bbd99c9320ffe5bd52160f6126ee86ee61d7e8035122af02a4b169712549d7cca4ec2cd1cec917099322fea6f82068e152c2398995bc7500921e98b24db954968e543d391a6605b8521c1a10ae97ccf6d0e09fd758a5978195e8de119f1d78f95ec441889a5e4ae09a58b12c1cd5be35902900c1d58c55344ad1d363ef230d059cd8597729a3d3538579115567065263729d517c80092942207548cd50c5ae89cb97352de1663c45cfd63c748b1b60861493facc0a5c7c6a437dbc62043b6d05619c67d8b601dbd5b3a2408f105686be26c70919d15d34c97a61cc2d48d9847ebd52f310d8bf42869b4a19590906b09ce0453f85dc342726dedd1ca774e9c663ebb48e391624a0cb86526ea2a9dc94d305265c6a421cccebe6be77404d3963832a3dab32448769158a278ecbf31205d822804a48b86bd4ac5cf28bf0b5a20cd363c3b2667180d6def3600036442e2c00e408481df711994c261115e91489989500cf772428ad1683ca37f5b32fe40db3d21d14acc4475c43cfc1b6622336f4129bcb3417771985ddf4beba609d73475543d769357b50803e985bfecd2fe62cfe778574e28805a59b688384106118d570162b4f3314a3af30ed66da3e01194ed77a5a8765a466b092e64f517c3e75c3bf35ed6d450cc355513e716200a848a858a3fab9ea40375053e2005b11e8a876b67212c0dfb489be6a4277ff0d6989bad100a2225c45c11bd4b6a51fe06f3fb19d4679fe8b965dc84cca9d3745bbaa1725cd34c6f67892698e49d2317bad493f35207b85bfa092a38626f394c5026bc5625583a4e68b3d012a97807089ed56c36be0f592e5a85bd0e543637c67d0bdf0e2380ab30041d29d2e28aace11f21eabb436282fccda1afe3aedd5a696ca55fb45b19e6cbb570a762932c1dc8017e2b159a2d76e01fc153fcf844e06c032389b17731d3b14ffa01685dd666913f0319c91972dc9c7244f3c092acf90eb316252e08698ebd208e1812b987e6dbc1673b6b9247f6bf4b1571db9298a3fed3d8ebff8464496f37b519145df11d5e283e968827455f167414dd7a180deb23767ba7353638c5f4f04ae072decbb19b9fac55e64805d1ee6f2182ebfe97dfd8bee0186c8a9d537c402050b618c053563ccffb66b61acb55d413ab03e0297162b781b5eea35843b76ffaeba4e685a1d1dc37930c4e3cfc126b82587907216b59b004da1efae033084c9ca7611f0b36af2c434b88f857848eaa375289a8cfb408acc1ec6e85d4e8548edb1d09e16bdc6c85752b704e6c0e23c533247c241420238e927aecfb19cf9702b43a26b5647cee32c962cb2a0d8f8697684dba3d1d29d45b2110017a85a79b464648fb6c1add1f5275d29126165a5f12e38551d81edf01407fb56f4db4ea7f136399d18d31f9f786965476595972bea030e9c6a80a69c5995c2cd2a80b974ef40c695a7a3fb1ae7488072cce165e6b5589372623903ffe0f799c2ea673bf2232918516a6668944ff900366e24f102b2c711b9ac317ced338c891ca8517a3f0e2f838de411698c9d46b8517d83e0d983af56bf4de347831ef24ea002d1eb2353ad6ac3edeb7f4e056c95f855b505d0704f9b9637ff2c818043bc90247d05b52bd93c3034ad312baab082380e5245dc4a231c35f1bd42814bae2e1e8d69aa24e30a76ccd52082e20002a0a4e7a216df93df40537da6ec01b75b640d039fb31e4d3517726d03bfeb1d2976e7c8153c5edf81b995db896a023958e0ee44576497009362dfdac398cb1ac335ef5f12bfa7aa87402d70dcaabf4738ce237366c925398c5f3323d19652a2991c48bba35896266fa9c92b0251ec099f2bc76d6b6426b05fbed0b5a353db9b27b12d3b056d0983b7998a1fa0ca0ab3fb9d0cd708a201142aecde818c9372ff6932fb01b5c3064981f97e3beb6c95ec34cb64790d2f3e3f7b1f52f8f328aeaaa725d17ff588142686b529f61e28a584afc062771ec35e0e46a1d26faeff6c8e2211ec51c4bcf96668a19b923a745010e9f42789034b4963b3c855073eae6ac94d0e58b610a519f073ac1f6e22fa07379accd3c8492940b0fbd856e2b2117427fffad6c32580cbbc2d7bc468b296c6a49efd47cd20426f78b7863bb35805723c90f610c6b0017e3a314b4ada082041dbf44c1b27cf11cf6e15e9398a07569372829e9ab78004491c713545d40473ddae248966d0eb39dfd35493366b1bfba8ccd46198a142cad019fe7c2a1ac0573288d16b8635e6a6f70b249630f6d256b1c48cbb28ef76225556d635f7642ccdb78b7f914e104951212d02e2e96954b3d2c57c3971a8923e37697fbd22f0db57af894ce2e86231072ede042c4e7484984d052f63b0a8b24cd6e33f5ce0ac9d741f4ac29736166254188d236f7eb1fd5c9d6f11a57295e29cd4a0e591430a2f60b44e3a0e0e796205fc14b6c7b1081e604741f5f44af4a6ce0e4b049e76718544d3e223cdc6821bda53865304ba506f3d022399715a478611e0b0540a910a42f840bf70786935540536ebf6ed323c2c332f899b6f891712b5099bc3f6fe6898c2d861d94bf004788a1fe519c130b8635049c398101c19f324ca28d59cd141676f77defc4693379da6c05e00fa5ecaf12094398e2be120428754600ca9e091e0d5be0adf46af9b3bd83f44cda3542051437603f6f42c9a947a16fd23c547ef8f01f9b09c661fe310ee72605e036ab188727dbd7cbad70e13c006fb0b5bb4652d01cc83403dc2d4040dee183cd5297f710f08e4fe38bb3b3244441479cbe36103cbb7c6d65fc60190b2f460f44a1bf0ebf61c9d6d8614d295a3d951a06b5335f69a64447ce38d5b9b9d23c8e50f59ef52ba2390e3ab4ebcc556bce4fc2c6e1804559b625b4287c2503f37591dcfebeab04469fde4fa7f8c266042ccfee50a7ab778567a477cb6dea818f14e4d4c641c22ca77d644eb77af54b0de480267e9c689b0c13d15fa73671d62a9ffa62dcc60d2463cf7e6dee28c32f5dd00e5312f94f51a19a7d07454ae2fee018de1be684d00a3f8e2171f48445187bce9b519923ca55c297589ea3d8c1a523732176ca081985dac7569d2c17ca0f8171f3159c29de625752bfd747a6e5ce53e3b798165d4f710df3eb892954cc32a994930a5d0d558aaceede6ab80f0e7172f17cf939876d9f38d18acdfd01993ffa043925c187dbf9f25ba153df19d6f0ce90d267693ebcd2077a862d63652d37f449297277e047fae785c9f6faaac0d14e84cdf7547fc4f407672faf7757794cf01cfb7e8998aff86347b343b735e1f4c55f01f9e975130d6906ad395c1d14608a81243e13089bd79ab6b3ddbc28585db3ab6738ca81949887909aa53eb74d480ade84e7d989f664d28362556e27f0fcf09d9fee558fb9f11fa6d5c996a07a0b8fe80dea07c411229588ba1595849a734af7cc879d1ec095b2bdc99a12b57e6288ced9c7394700ab6273ae0b044b0eee338fad338dd3a6eb7bd867b6191e950916e3fa0e84ab06c35785d2b02e2356c9a561184d6b802003163f05b09f413e7102f321551ba257d8ace2653aeaf597099cd75af99bc1d1ddfbcb4af1d3adf12b7490d569e133e92ed675672934fc0f885b1c9859d802d699f46b2eefb2c6b7696d96f6531fcdebbb4a536461af63eec031641068b4bdc4f20a74015f3b098a58f7ef7aefda378a3476c19123d45f9beeec571cafd2720c30bcf793ec461b1b084dd493abf4b39fd9d065475b9032f661f9d62e89a14940163fa9d4627c3ff34a518699ba6a093565abe681ab5f28d648405966df334b1794501a58ab4d4ae73a392bcd23bbbf363bb4d313a9cdf04645ab77bdd29fc83be70bb364b50e0e9857049d93c829c05c18cd6746eff6f787d2742c50a1542bec62528efadd3d74bf2e8dfbde2349b2e197b3abbd36a639f26d003770d590cad5bce819193863c12d7350a119de973577f4364865c658134856753f9ccb16750d0bd61dd64e193ae60108b43fb9079eac89383a4ff88159301990f076fc5c13ba9230b453f5cc9b0a5d9b37423db65437a760ff3648111dc859a722b1f90f0ff71d41f28a087ec14031c11513897f262c6cc0f357278c087150ed95f76ff7ef821bbd09251bd02840135b710876544b9d7e3f987f0e2f2ca21300015ff00fade5a409e72c48fb4de013c663b4ee2ce57a5289d347379fdd580f6060b5d8b3c7243c61088851b16adf2bf397233cd5b20471120373477187244fcada891298798b02212fa02819c2594914ae5bd894f859bc4d6a8299c153e1e1c8bdd709bf1666b204e36d3a06a2b902cd0092d57d6d76c892256b3530a708ab8b012a1194ff73082b642c41b60d1c05fb91ec8908bcf3f6df72d03095178291445dbee226e1943cc5c3cfb6f0b8916994287f1b8ce2b049fabc919a7773e79d5372c288b9147e8a94777557745b2b0e7dbde4685345881755ce17e093665be5652cdd8a3d97356ab298cb9dffd3c81a8658807427abbd0fe65e59762c990e64cc8062f304600452808dce2c8d43af6160df0a645b57a3aa9debf17dcda5311a225de04ddeb37b47c2e55499e802073887142053fc6cb1e4e7630b73408dac8d42dd40cab2aa20a2089588fa6d288a3a2af8807dee81637f4b8148f05ed6280cfef8701286ce1a4d3fddb228add62c0eb005023323d80cf47f63ec0b700776c329ec5a0c9fa7a522a3e4c533cce8fe54ab7a92054718b332fdb0b792ed00af3d2b6e4fe7de92d432da13f7bd54a32b275cb0dd4d6be31951e15d3191df19d3744c523a03ba4a1d48ca537a66ed056d237faab81240063b34063e4ded6452483ead1d1830a322059fb127a37857f86457cf1fccea69c8456949257714d18dad0ad529b058cf7d838b7f9263efcb20bf13c79ae32d71455fff73207b71908794e8eb9dc9115d566721809c198507470648fe759a1bffc55efe8594e8f78803a83dda361979fb10ad3860fadfa7d75839457c7a7cbd1b0991e6cb34a739a55224ce01f248e8ef23dc15ac5f0824e1cf1c3cce6108259b419b931ee5581cc7b1db34a0251e6e401c39144b812410e9e0fb718e396fda23eb50da42a8af8c80d96b9d5faa49d6122c97358b9254019c3e6d1f844e9af76edb724c3698b8bf57696315f5cfe9ab9d33869ee7eb04ce808ae966472c182d47c4883b9358a8e7cf75155a6872c94d83f3adc4e86288e9b4a18c4bb38c5388098a83f9631e14770642b96efc305eff4265faf9c5e6a6360c83ec581a06ba2f72ad5578ebdb27b24a62d5fad04f61d31047ae1e6ef247db39dffe467399657f135a6bdee801644c494310b192f0ba8d35402b7b208070bc5b2f88696f312cccd0e2415c994f23ed4f55e27b6bacd152f14f3f51a00cee135a84f34f5ccf92400be34a5d7f70fa2d1959e9055cf434bcd4b2c1c0ba32421f1fce19384221dd43cdd19f99b32ed7da47e11e7b5b2871f9fd1db6c7f3f2b9e454dd6263906d8589264a3e97dfb4fd05c63c6b153c1d25d41e33e4c1add80de81f8f0729b91ca8a093f7bd9d25e6b0c63622ac49d041a3e539cafc763669e8514f186363f51d54528bc5ef63fe38702c00cd8ef63c83f8aae45f4db2bde122820b5a122c9f810c85b4613f3034cdd3b6764cb8b92204c5859ab2c8befba034667986493de2c845b6d5fa2d6a36e8ef60684c170b899f9d370805336db0697224158ada4231815a391700bc7be0318e613de57df18b6b01aab45afac88701abeaa9c310719edaa598ecec96861d331bbd7b7ce14dd1b4915816a37c3e4cb972a59890781d9c29a18a18d2734c5f84bd1f580ebdc7930adb062e0576c82c2d1168d92dd117e3dae63e6a13ff2dd7c60a16a9c995c7275102464b1a7182b9bc5e14a5b02b33054d358b9a900d27dfdf714e3e7f21a2c0c00be8cbdc860abd3498ee96efbf5067317fe985410c88152c4f154d96b3d51b8084492f99a3c9057011cafa8bd22587948c0ea7258b1363262950a07c39138cd4eaedfedb42b5879325387dd1524e71e86a5021084f6ecdbc98227409ea57d406da5d3c9d933570df5e9a17bdb726f1f892807651ef8a407a60dc4d17e4e1d780fb65f6950546cc8232fa49eb083323ba71687c445f94a3b6967605a033120d9273aa96657fb3197b979fccc54c6b9882a131e87fdb86647bbe9e8912b8c31038990dcc0b433949b88a50568b6e4dbccbf17ddbde216314a893fb539f4359cc2a63c69ff1b4aa0727315392065f496c1daa709591b0ac428fb619b833765657d93e621dffe80b12b3a7a649b916149a79e97a8e25a98850cf10cea289d6b007e301084a828bce1dbb5375558e8169d73b6a2b13a2787ceef9bfea9b0119ecfef40b2011be77c3e38575bdebd5dc0790dbde1d9466bb82839950b44ff5e692a92614ed7f2784544338cd67dda0de399634f30501be4fe54a3adc7de8a507af1179bcb9f2a8fafca969800c30d0a302e9977b2f4405c1f91acc5f9e9fa6dd7e59f5cb85916db51ad8b4defb8c4b1b63f8322bd10490a5e59fe16473fd524f3ec4325a00c4b20632305de6f923b8422eb50831aa9813874836f02fd4c251c3b829bf482b3323fb077491b4ac232e8a6c75f24b9836d337fe83c76f17cdd7505f74213bd84faceb32cf7965824922ff69262ff4aa42f48b7aa97e2d2921a1ca9ab8ddfb8c97ae80283ba5a00cb6bc3567899a8892f7c1f537c6655bb4d5d877a7c960d678168d6da5de8eb4288c3cd92c600793fbe021fdc86d720774018d702a5584ecee3cfcf2458d148504026d3d202294df0829f529be843caf0fe9927afb2b9d83a5acefe19af3dca13904f7a0316018a780b22dad713b2e321d91b0d866eb5d11a26062a5520945d76cb089ab3a3e28586e3d6dbd44dbee40b453ab375d32302519603d94c44978193fd238fd4d4faf303381276fe44ec3175bc74991c69f4e8a8dcc1260a1602c10baa3a4a373ab522c2dba616511feedbd8530e5fe6ba1deab6a267fb829911bf54b96f73e3ad2c0798e23427fd15834e6e2e3dc310c8716441b6cddbf81f6913be583f8295b8d31a368382a8e68a31f35e5856e31eb3836cdf9d19f3f10ab89d44aca338206814304579123e41c61977a398d46e60810103b018af0934ea73bbd1bb4a21958afb3798818482da1ad4dfb1a945b6990edbc4f3a8d95b536dd7019557345de191564ff60979c68ba5a4a59314904f49d8fcdeb57a4c6c0757a1e36c5a83f956aa7d3d18d8086c16fb26aab927287fe6911dcbcc06eab0ccd9b1a45ef772cbf023372133506446122e009b1b68bb7412f2e156f51d7e81078d116ad8d21a4a7670960eaced647c06540193d0587219d23a600264fe9ebfc53076b1b2441df14272b1740b93cc75f351aca7b77bff5a6f7f1162e526a31cc2e32b4e9a5d7933f5129e1c51433e45936219c15e6e7e0940baf4f2d4b364f47fd00c4e12a9146d95ac574918f127786ac0f8ef5c4feb93b9d3995fdb3281ce70e175fc976fe8f0a4f91cfbbffaadcd95d3e371057cf00987df354b7a6755b67dade6a11f3f9491c3edaba13310163fa84cc6e4819f90c4e9b9c18af02cbd02b332fee7ba78288d75633f05d417ea7402861f65de44d0a94c5fcd810e4255c0552bc61edbe2c69a429c2491b5c2985351e07b53bf5869c71bb2214cd53a733f1a584d4cc0d0b15ad6180eb5ac68e602e821017e25f2dabc083c4460d2c437d251d3e85749580c1642efd61d4ed1a2b0e9d6bd0ee8a0ae729e593d051e9c3777e949f9f8ffbcdd84d467b29062ff15cb7b13853409cf0fa702447bd480e7a8e9289818ad5b5c897571d155cd594b36ef4761527b829e78c1fe28ceff51addb2a48b15fc3f9227b3bb2b8ebea9be403b9ca2c553497800eb58f6c34f3671324c4dc139ef26a9492137439598ddc06fcc61a6b205cd232d542541927381351c099d9831d7baabfcf8ae675bec216ab2a9ecaeac65b729be15c20bce47bfe249980bf0e046f56cb6e34a071bd9a39f4660c1b7fb5e046289f310f3031cd0e904f8df0fa4e46e55e7231439f357634b196d650fb3daf217630698567b2caec0ac7105c4a06f4a190eb75d5295d71ac1d57aa2759c08144dd6da86cdc774954a80fedb0aa2347dfa389b595c2e79938497813cc7dd75834fd9b2105e6d45cbd2e80940682bedbbbe3240805b59289e96d129789a31074ce1c5280c6f62b29a6d9ca17b9851a6fc836c446e6477137855f214412507ca2cf07bc3aacd66da3cd8475b3cbe950dbae407d4416e0aa66f2b7445afb9d33b76738375c7dfce6c3a8bc602ead02d4750021aff511f56c9e9af464ffa0325672759d1aaa39dffa3da234df615d82e106c98c188a2683049e968f87e0b823902c9822ca323e847d3e1caeae1da3355f22d29d57fde604f6e9a23d21e59f26402bc47ddfa4b1682a54cf97148ce54f77bb7387df4114fa3025f42a3e6b6b292c8abb6f6b987602b833b579bd2e1b1e832f1371d96e11da19e1ef9ea6350fccee3189f65c081b6102561e50280873d24441d9bebe1601e223e377d378d5ace661bfdebbae4090c709e0139418e15e249ecf5d318ec2635ac371d32a846b2a1140168321320e3b17e3c20bcc6578c8a52ab2138ce242b00d5d5cb2ce90222a3c7a5aced53a034dbfa0e0111be93dcfa142fc55869a411650648d46e783aa652835ebf98eaba5ac77088dff6da0a790a6af611681f0ff914df5f37a592e9a3b3a4217b650026edcc932b181624e452f4c079cac5c7fa6926cf8e4129b014cdac921850246da47f055048937e0ddd3ec9684eae91b390051f5fec5f2d8b7daedf4e26cf6992310808b06cd9a1e374dda286e1c7d9407c9809ef8f5de30ff3ed027c73df9f6cee2c085c76ac28be3d4abdd0723572f7a57d642eb365e05a14615741e6207e6bda2242b6ff7fcdddce2361bc5519733f29b1032790eb8f1d3e3fb82b8f6094e3cf61032b3f78fbd6772481a295433793972f24c2dacf11d01f52d1c07b704b880b61eb8e4e6469939b0b5093d192b3f42d7a37fc6117f6dda103c6941d6d0b5b044d8fbe039db204a54780820f5582f303e74dedede42a5721dab42bf25475a0ff56aecfffa02ab54dcafa495c9a5d4202a25cb5b71ea5083295055f7bc4c8435e658c68975ed96072b3ee8e1c73109780d009cf665b7c5e182e4ffc633b357e09de4c05c6c38dab015b4906748f1b41ee530f8d2db93e450ee98bfd27e6048d0dfbc3cbd4043e17c61f1a7d80892cad8cf803d5795a70feacf45b72b92ccca9286b155d4dd2b277a00912df00a30d620737285d7a6cf9d83922bdaa8184b5af06683e70255c100f13ddeb135d4a5bef38d35564df3e60e0629ac54751a65eacc3948e3bac06e5290169a95a230a4e80d15670e7fd522263985d678034d947e8161ef27e301d5145036e5bdefd97341715822b359119cfd0c821b410d7dc499f2d29acdbfeae5e46127a2a86572b9f237ec25850a84de877233332825adcc448b3de289ae779c513944ee4f3150618f0900947e18c29cb5465126f7e4556ae5eb75c323a8435aff1f5eb5ae1ec5f3d20e0b96db747d8ccc8db7bb929cfee9992f4c8e499a86fa4899cf95629aafef1ac32d8385c2cb1a6683e2484b0d9ed7f98319e3777eab8defd7f5852460f1627827bf747fded3f48f315cbbfc21db964c8d8a14521ed13e1cecb2c3e5e0ac6df36eec5608fe12bf919a56f4b55c33011bfea441523554157dff79256361125b87672b9268192e37be38acbf3a95e3828789786727b46b263ba006c054eef61495d303c1fc9b69cf433c2f26868cff565947c5e046481444d7a673b53ba75f6ee7de0fc39a3c7b44df0df03459ac4fa8326a552092dbcdb775a4ce738ce759d94a1f74f2a9de5aac5e944415bdfd17b7ca0d2853c2f3fc39a81266ce95b4821ae30412167cdaf1ce6835c7f5f9e80f4f59044ab6ff27a90380cdddb269704647f9f905321472e9ece818fe887888da3286bb6627dc55b39f6d3d63fcc74669301c63e973806d496f4b15ba71178aaf323256226c47243a1de88608fe1cbf4464530f76c132e6475a7e176b38c40133b7e502efc3c9b5443e6e0db3a63ceccc461324f4a2a13721340002b0b3948b339dde9a1e9eef07efc525a5b33e1288fc4e074d3574d22b9b56ade7eefadc39d0064fe3f0e942b1d10a6bbc2e35b9c3d2afb8da1c768c8c7c06ca4b883a6bd44b80eb6d6d90650e0b2de213c5a02a21931272c0b2246a62d9662d07c73349168cc19c0f85a095a205ae9dc12d4a8c1b52bd98903a96e76ca101a8ee40296dacbab41a5bfe5d9517cecd9a239e281334b814e594f87601d489dcc8da738fa93dd672b37859173da1566f24f14f1b7cdf6cf4c4744366f727c861fbaf4a271f6c1e6457d4d7f124f9d5ff0f0632c894c78f3bed1dc116f9686ba18813b496f7016ed7ae6d8f95f18debf6f37fa6ac37d150a0fe97b5621f70db14cb91e5de0a04a02f1002b57eef24e7377787b3fa3f3541bb3d37b2b11b0eb685c22eccb8b76e2143f0f0f69782b625c5b456ec0c482d275e3f285490f9ae10129134069fe8487cda996d1e6ccb8157ce7a8b1d6080849a92328fcbf02b615fd9d29bd103e4eea88f0b3bb851d92690e9c25bb18b31c12443d8f38a11e162b690f36746888c25bd8550fad268ef5b6abbbc7821be20e10fdf78c8add27d6fcbe4bcc550b510d1d1615a7ef5d7a986ab920a87d71ae1406f0cf166bfa55426e4415f8ae34f36bde3afb2850a1028a78fe4a0b4043e33f57938f78bfa316a95d09d9cc5c370d38bb098260e5c635fdad7556d9c1c6c82e12d17e87276f538d15e11f0df218a01a2447a20af409286bbae63bf6ca097df31b702e2413c620dbaf6000ef1cc0fc3b262b47af560cdd1d30c13ad1720ff4dec7b1d5b2b7bf58ef72a8d5fe81975023c8eb1647764830db2a7bc2462f92eb8421cc23ed62a95e76530a9a605d2d7afc43b384cc46812ed81cc477d0c03be869c365c32b0bfc317c2f2a908b4451946c46543c84aa490d065acf1ca837f03ba3a4fef3ee95ad67cccd5b2b8e63830cae6dd2c8fcf0ad7c450ff6ccb5897c2a2525427d7b310c544b838679cb440e96b377b355e48f7ff63a41033c0f24c754ef17f9d3871e96400e95b810ec9aedcbae74cdaae97a57ad5c119df64439c7816686f0b0008233292aa6d5bd0fe2633f1f6f042455280994ca56733fb0437e5f341e57d1d1e067181d02821c5fadb30a50683a677c81d37e982f38f17244befe9cf7af7ed1cbd432188154a128f86b6dff088ffdafec90acf8f9851b05f7d8d3d81b933d282b3845dbe9122e9f4f8ccfc54b1313762d059d63b657382dfc164070cbf046cab43c37a9334345cdf0d6d0da6a896fc36a6a2731dd9e911537f0353e89abe8977e535367a4ab7c8a9f5d379b7dd77d70a7b9576e7010030a01cf7f39075d4b03b3a3331ede39ace3fd737b4801e3058055bedc7add485e8bec0ad906f71fa5a183ea372bec665db589d053d64756f20a2c5f0d74d7737205ad6c6e8aebf8d712d30249cb839a3caa67f9471268acde031dfb77fcadf59cd8d35b291345063fa3c14d49b09a2a21e70e2b1b219330cf117c1f9a8495de4be6d0f112f983fb12d8bfe13f76e964f28f9442ad8a2eb3783c0dd04bc3538c2688316f1e95146a998da23c34a06ea2927f0992ba1ffb2ebfc00228a32613d23e11f5915838432a327e063e495b9454d9519b3281243bb582bdc36da4a4e5533783375716a5193356801e81711778ab594693ebd71e702b99cc61ee3b36b45f88868dfb385befdc679e09bf3a1ee640f13a30e4128bc40b835c1d7dfdbdb18e021b9b71fad0313c2f843d9703138fd8112ee841320f587d59fc6369e519be81966eca37cdf6db113672eb875751642a1a95d2b6251bb0d70c0c105169cdfb8baccad138be13dadd511eb80a47a6d6abc44949bbcd7c697d0fb43705a41563c1ea10d15e85e4a4241cb2aa7744a44222960f256b8948ee459b5b21a8c554aec2d172a79e159534f084770f09724e0abf478397cde182b0bb66a12297ab839b68eb77f88c23ce0e69a8398948675a9c2b7921cb422c2970e8e9fb9949e25e32d2d50cace54caca16403fb1c4b108a50d73a4a94f68d9a1f28cd86b637b9ec4abd89dcf0aac3d0e21da4ce70d13fb91c1023686398e4c778dd3626c5dcfffe02ab400931bf5e5eca156a0a368a07ba6f65571a726cdc93d631577cd04450426febd5ce2b462adbbfc3aa6b95a751eac65f17392f7f1baabb3af4cc2d39a38d2aaddacf25b12af3e38b84e3da392ac974d38c77471e6444072293d509012a2afd5c811d0172706b20960e103c1f5fdab581f0e2ddf76ebafaaa9c0041807c3d0ac99f4a1343cab2a797a492b85648023f5d2a35badd1f3d1733e4e878c03eaa9f95656e788b3164ac703dbd09591f6b85bd137d96f8639a923d10cc161a7e881aaddd7d91589446f63d6a2a6b0a2e37413a3b1af32697e25e56a7ac0b79d49d400ab6d01f15dc7dc8573326c5043ffec2a9ecf8bfcb1ed3e9cb485c5bf993046f61239ac9945d983d37c76646614308f59d257721bb126c008807fde4f9c6c8adf95c3549189a4698cc747b96d75bde5f0f6381fe7267b7ed1517c38c49aa8ccfeb05c6068d75ad15b559810f184578a2c8d6edd32a6a57ab3ad6b6488d99fddd2324366323aacf651aa14971a722621230d1db7c9d291025c7b56b6c2882fba026276f3ca3b579cf67638498d0041b6f95ab3a63bd83aa7c50e45102578ec233213b6eb9f0529d670803ad9fd356f58c8e794b60593350646a2b37225be3a7644c548fdfb0d8d6bcffb9df6a2c057508c08e7e7e5b98d3d55acc891472011c359ca9343761ad265e67925108be3ca05ecffba0fdda7eb13b7f8ca291ae4723a3c5210a27b7d4e79f915dcf39a4271852729d800fe103f77e8b095fcc745272547b1c73803a04e4d500ec6929f045d16a2ec09a6472951205f561c13eb09daa37beab9a450f1fadc4e261b13eaa71a93ec3faab989a59378c3b04fd050a74084287a4a02d72cdc306b94f412833369edf9b60cdb6dc40482354309dc3a35b904c29dc20e983c7215fb810ddf3b90567a2cd82dde8e77828f2a7f1c44277fdd44ac54ba5169e4a2d76a9d2d96c3b1d94758477af1942f1cda0074f1b2ae60558ef215e630e8eb277bd004b8744fe39c7acdb211dcd642f6838407271f10d75721df5b8b792c32a02442955b15d6a61f819935aebb1864061e696f63314b637e89d5129422bca1a23fa60062d040e174df2d823a5c4b6322f731e1eb78607fe37509056c1046b1364ccf95af9fc3a68ea718a04435e6226e8279634ba72140497dfcf7a6eaf1a679f303ac1042b805b1ace5dbe152d9990adab5bb92f6f5aff6882de772112e948069e6d5fd765a21bc5d3a79b24557657b2f57447ed1d6a8102fa625fe2ca7deece35b6e60ff94f0c465b8865ed100b2c1a80510ea3f2bdec508b8f5c1304d25bf8df7c891a7de911b392e72cbd4478e101e0f700f6326ce86bbda8edfaf307195414b1650450587007f8993b2b7f9f5658ae57b49f39fbcb441c183968ff99e4f16a0f1fb52ece2ae6d2aacee4fb48c6f278f1ec874d99954dade73dbb654a9f2f1341bff16a5523245b94507ca99c4a44762629b07753ec1aa9bd2508dee453f990a5f0e0dd741c382abe189b733121f097014fdaa3e82a6aea06b1535f534498f52e8da407886dc47ab18e9fbac66700401967e909d8cf045ead11383dbba9826ee1bda8e42c70312e72a891e9cb9b85d9b4b1a3a5653ab396b1100550fb32f566a119e1a3da416bd3a0c18f747d14e405c83f6ca948770d7f2a5f2007cb0704e1bca872eeaf1363f3d9b3efedda54912eac3cab337acc16200143333721210c15a7501590cc171681b3af9910442474f746cfbb1b0e6b379f6cc6428282f9e71b679ce3de5637ed2578bf9fa707026a1c3775f84e9427d10cdf2b54a1cafa49866be23d4e7b0cbe9b91716edc2a59b988872a193fb570671179a85cf55e35a8f4f9187864d8489ac962548d4519a3f67f1e4480d597f068cd62c8784fa2a15250c900b28b7f190642980b595971b54e31175c55e30ced78dedb0ecf92a741394f0c483d06155270841d60e2471e28e1c2d81b68ae15433047142c126a921344974583538acd6338d19a504db94437294aee8ec84f2d378e8c124d478dce51a010879f0b2ba30d1382327ec911071d7414b0f4aedbdf0461b433bd04a1d0e0bdce4b2d15836c573e255d6cf4c8c5e50be9fa739e3c79aadf9c0327f91541fa237e7699e49c5220c6d5e9dd74303c090eb615f29618b937eeda5a1fc570f6790747bbe934ccc75ea0ad3b6d5ae1fff29a6af215552aafc7c6f4f722949fdebec1c66773d985e5289ddc9ed0c4479c109c576e32d4682faa3f9503edafc9f27d8f0476fa9ee9dd1c8103f05b1a316364b6f0307819d3dba683fccb6d41a8fac5f9606387426eb5457eabb29fc935d6be6068de71991a4c3ea15b40ec4f8d9ffef0e375cbb232505840a29090d25193ca89947f51029343883d06e0da3653b071c407051d0af00245dbed06cd570388974652b073cecd33dfbe4224917fa9f4751d3e43f64114162766330a297700d12f646e907e9d6f51f6a98649055bbfb2d986a375db39f4256129dcfdaa77e27d0bee35665c6aa5de6988fb424d9f4bab57d21f1a85093074483c2d4004e0569b9d53b210fbf6f6f3dcd1f7aef7d72cec6479e63995b7116a4a3eeecdafef692790673dd1f0690ae38e1a30746c7851acb294156b1b1b3dcb22823f356e074fe07a77a92732707a05309365cb404343e3c3f1859d1f00671035c0a918cb93d0e74f82c695982405e4771c0f102933324bf5c06e027ebb6b3e09d65bcc48ae5032185ccb52b0e06677860b7ab568e3a6982c9bbb59645ae28b0475c3f4cb297158735d705fe09a64a13abd82612757f178f4fc229ca5587e6427486cdc257d8a4623d7af95219c0a61d17e770bc0fbd7e070e7b19872d9855c53e9341daf21527a27f18f364aff0620de50ec8ae6286813b18f5584fbb1f32a2d004b00c39cd2985220f950d70cdb6afe1acd68c87389ad70118db27ad8f4265292978eaf2848764fc172834c8cbb62cea8ced3e6b3ff53e9d94c86982c15200cc33cbec19a4e576006b3c522169657d7d1f7c983a3c3b2ce73897b2363a1d926920e1239cea7bb059b8fac9142f0643c05edba91b6268ff50efcbc646d30aa466aae7ff19744ce849f88ef012e8ad0ed9080f26f84a87b519595f5f363f1a3390b89d0306f4ce4aed255807c026237e03bfe0b831609d857f27a96114e6ed731fe063ea972911bbbf4be30c52ed0bfd8ee4deb25470e29a5c9115e10c8414d2dfe0d85517b4c67d092355dd7a300784f277d021d6b721975f0a567fdf5b59253845d4548dff347fdfcc7da715dea38b1137dc5958d8448a3927d47c0dee4416affe1ee2b01f5ee225c82ea77654d832fd9b3c900e24b038acae1d3a184f06f5f02737f739c9860b3319b9aa804d0b9b094a213878418cec77cffd0e56860801b241460906e6b966ba42d0ca5c2172e191ea6af1faff597c6b616a6a834187658aa833fbdc24c4dc81251e9b64cdd181b56a0841266a58a820392c3c42212a14634b9d144e6e972d624f0d326422a5ca1d3be8d6cc22b98098ea8956e1372454c68e5397b7caeb5ef25ba4fcd3c704bfaca204920b70350319bd575558da46f71ebe0caf9d1c185858140d3ad87e246aa56ce6d096b6b30587e472fba3755cc0efd40f2ce3b8f8b8da7954a00a1a8f4154e9be1f42321fa5fe7546a3e13bb691ccba590637028c6006f7c610f3bfba8f8d5daabfb0fa1a9dc7fbc847fe7b9a5162e4729beff9895828940541dad192ccf3adfed90ae18f602afa87d5d5d256620c2901711c3b681c94a0861c0baf5dcb9c92d9688969c4606ab0bf935dedcf90bc350e5d61711476adf4e2a408c806998548eaeaed699311e07589cbcddabdc6b11761cadb6908a9848351e6690a40c77f763adb754dfa6cf4273fcd0720f806636b237ff2506766c962e6e59fb13205027af03642b7f90c4748eda80e09d364ebab8161b28070da533dff450c81953d7af09acb886c9761307761aa52dbc94356f5bc3b380305ca5b2c32d8b8389cb0c2d06908604f6825d96d3b5ad0429a44d1e4ebeffffdc821146c74568fd3c6dcff0ab67a441bdee3fd0b801b1b7e04463dab6715c24734f39f6c7d56d7f32196a871cdbea5e59b35def2c3f0fa3f7096446fe1d017925d8064b8afaf76da024731139cde3895e469e475dbecaece9f015d31939a09d9824fee53aae1e37d3383e70e4e3a6b0444446a6bf5b78ce34ab51b4f7b0df55e04c84410cbed04e5891b7a181a72e853498fee29dc0cd0e046016ba6f0f58bd8c68c91a6db1dc78d25351f1194854aec21b9da85c2cefa1110d5cd42831adf5ba1b1ad0588f69cfdb10005f25927702bb3dfdaec382d6fbec356d5882fa5f0d1a2fc58761322e6029db5d31ae62059ffd9886094ee218645ba302cd8d206e01dc303b96efc719229b2e641bc5129d65d9f18567fcbf3196995e6a30ab8b20d65981e7c8642bdadfaee32cb894b864988892576f9e0a627ebbdf2949810858488bac0360365b478d805dbfce9f5e8597802208f605e8183f25090052653fa8896299d63bba136d12ba088f63e53d2383654e16f9ce8768ab5a733400e6c0b9caa8e2b48b1a08536f7950830a6d1b79fe75fd2b220955210aca5b1f4ba1a7a23c296ea9b72fc667ae8ec9e00d6a74a97f233202512be12ed5ff49400f2038b750dff42f2dee45215d5ec7e8adf5352bc376a3ceed81a2634712322ba3c57a792417a3022736376e845e447b77fa514c32c4615a09765d6e2d79dc6fe319f7f75be573a6886f026ca9726a4f75a20f8d20858d24254dec2c59410e6f0b0314c45c854d2fcd08e115ac8808b750ed41778787f001d33f0e71e1e07121bd701adf97988794b4913554c5f038cb72f6b1c0975cd30a05ef01865fe13c1da162e2c9ad8ed4b1ddd3038303ea6114cae49bd453b16d80748b937621d5043579f13dd07aa2f8122a69d73aaaa169a4e07b2dbf3c6222f3446bee2d0b80ea1d047fa7b4171aa379c02b9fa76b1aa70c32d04f2cc1540db6d2cd96bfe86dd473779e69908e5246507ec14211cb6974d04a66d107614ac17dfed4335a6900e50b23fb722b7988047afa4b5eef48c4cd7a2a8045c05742aa83aa406a342a2b094349f6dd35a8502e7f021d373ceacec3254eb9a49d15e5c11e865c178c4d7cda33848c37f30610a1250ac0d21bfd73fcfeb4c3eb38d01d005f195d333c014fcc708b754b34bfb2ab0e767fbcca68d237006a17470000eabd3cfc0d8ba2da1ef2408111483c8bc7dc7fe2f0f8b0654bacaa8862b4eed93a23fc6be57c395406ee34853c15665e64a2e91d712c96c6e483152a0cbc91dc973f5b15c366952184ea17ccd353043291f31b3eaed44b26fcc96504f77ef0b516b6b2d1a88355993fdf0888b586eb8d436c600a2db44cbee030f60f94fdb96f751464b001e6c141f06e12463ce30a6a55c7373001b07de5db9d29d2a15da5a04b6a0271b5a44fe96abd5a8d0ded19b38284648b2dfaffe42c9f65ec61b23aba1970962c93b14ef99ce648de399699cbb8ec218320f07b300ad9479d0161c4efc4281c6fa895be302e1963082ed7260e4e0f1cb6296d91d7ae7a6c18c764317d705d9826ab7c4acecde06f27e8778eccab9cad2fca28c89d2f196df94288bde5260a699eb4c23c773e3e261d44ebdda0b7b372c2e976b60e23a6a0fedd63656ea1088fe431c66903c4296af750935f4897c3fac8c2415d7bd0e2e0d9bfb748e954b30bc072973e4d65860dcc1c2fe810778b69967f54e830a9e3cd2d9381bb0cb2634c956cb6b6424b0d3d95502efca02f6de5a23930fff3312caafdb604ae54d5554054b781320c8e96327b8d45ada43d02aa44601f00bc779c10dc4bb546244ed90d1e8fdfeb242943351063d5fd9dab7ba767361f4961eda31306acfbc814861434ed0ddcec530bf72b764e5a56f13f327968dfab775cccabd2acc479b4005f4b4dc5297ec69b8b7140de51b8177c31aee58d10085888e54f2dd21f5c60f3535abedfe5eacc7c384973305c15536d900ba0e432885e6cbe63c5da08f9c94653029d9ce73d53725926279854fa4cf683aecf8f03eb2936e655748d4c3c469e57f37eeffc7d69294e4b277822a9ed56b04148895c7995417e4e35912e60761d868337cbedc21775445205c754af40e130359231e57f1483eeb72bd9caf29ee90ab67d4b3c2fc53a454b31f61a78447d706a061a266b3686023f34dc72db84633eb3db4a9ed1a3b7e82f38373c60434b382a66459132938966e012e11737f0b2d8f0f421fa426393d6c85ed3011db6b3d95752b732ab337df914be59142f64b753c6bac9266fffa3dab03f51287b69e612889f627309e17955b4eb83d62dd7cd21f5c1cc7670210076f421ab8fbb47142da65112c0e8db8550419c3b052be375bf420424e0fa55297d9807a7196d888daa83c9a9533c62e9a60e02e4072428224dab8a0bff17a255d1951933f683268661026a2bf9d446783978b3f780e304c802ef62366f87f19d7df520f0d1ee0aadca53e28847729f69bdc686522980abebfcda6b80aad139e24ebe0deea205ac0e936d7d565421638536da10c0b4a5f2d0dec618c33939ce2595943a3ee1802014766738743fb720baa0046635e8135f1ea8df323c93ad95b26c451e048a0432fc79dc56dde45d272b84beca99907de45571e247c1088d3ae4cefa378cb4c7e6d4c985bba3712f2e4bb0d3e12559b502953526cf98719161dc1c94698c49e42a0d782a6bb4ee6e81b48306f0d30af01700667267cafbc9ba40c6b810c080e1d1b783a9f03a586a1eb7cf36aac1319ae27a93c6a37a8a927c27260606ba476d56dad71fa1e328172016cb75c09f9b797d657875ef67d3619e7495641a2b2602ec9c4f9226dc16f8a8c626b0b3f7ddbf69bc8df0cfd80abd6b82f9de0825472f29767d5265e7eabdc92d23af2c09ec9aecfb365c9d777eb46256cdb43c733da0060c834f0c26cc3005b9f9ba74ba24adbb7241d9e092bbe91950093936f9ca0dce0727b91286109cf4928dd17886fe8c2659c76ce08efc10c82e187c23866e9451ef1dff55b9964407493342fb809dd55e321cfb3fcfdb562bb8cded28d1adca0d0801c2d8fc030db4e51377d73192631a1d4b58e9cd31427bae74320652342923046bf28ea55e748feb7d942544ffeb631c7bd3d84768a998e4997d6a9a9b433548c4f9c85699c213dfe1c618fce15aabe7e1fcbe8ac1f8f0e9ac226eaba3a2bdb3486fbfb7645fd8639670c0c81147b482231e4547b95856500b691ea12b27e57e09197a14aae3c4c80024d9e242f4bc69b5829839cc64244b928e2c771cc2f8f526fb920d5faf3c89db5ad7f5e598b447110496e2569fdb618fe24b82f79bf424242d3ef0a1a30706e85087b3beaa5863c637ba73318c39fc0e08584d5fcb4734760676782bd038eb4ebc0c906cbd93a632d7347feaa4fd1b959c517bbbae5a9b7d68100e0d68960f5eb933d41196ed21c38ecb79875c685f743a736e9a189561c142b9c40fa3e87c33aacd126123ac5eb96545d08e44b6dbf0cd3981571062a3f765b9693106a68c5c3f6f6797fcf45b10cb21c897560f92089f5254db31ace82b001a680e0013fe9f23a47a2004ca023439481159d7744f2016283c527f445d6c9838061e35c70cba3aed2a348fb9e6140ff2c05c4ab320eaee5dfb6069e0a42244ff19398b36ea0a53adc956cd541efea1bb9dc6fbc7c79fc15b7aadf498733a1d0d0450b5a496d93ce1410290d226b7e79981f4ff65fa10fe51f86838bffd81470e86ec15e2b16520ef4c2cdddb00416bc911c2597dc907781205c45de3812231d74ce38beae8cb5c1afc884214da0a6faeed90fca7b963290d45620d751105f63ab7e4bcf23d9b76d8cd484b2dd6f3b29303215f0267a0f511c071560c1dd2d738de5680190ccdfae08580b763a7b534001f360a79cd97e01b9c350928d1542547956262147dd3b9cf3f79c63454a542ed8ecb4d3e9332507208c32022e710565ffdf94b44cb078ef8d80036cc59ed09f3baa26842cf13f100223ef06365a765ddeffa27ec056e4f6a97be68be0e517ba17bde08c3e9821a21e32f4af2a09958874ff04ec149e15118d4d1475c00a0c4283bd05debb7fae06128c9222dd8ef09dad0c28063cb78a7ffd2ef218a8799962f9b0c4d5a373aae3e3236c00d4b5e77bb5597c210551ecd48d7f01b7f4b862028fe6f3809bf149d250a95e563ca5b23242f9574a0d50f07716a49b1283b8ee604618acceb7c2e9555445271f7d6e2ddb38da4f726f90f3e5a674bb20729c1997b616aec3675ca333b4dfc6fd18a077614ae51976cc3376e3278f11589ad8c83d2fee847b01843ae12ead18f53b7ec7eca638c662dd8a4ca29f99b0ccb60cb13d5f429d9182f5c015bb1ad5649ae974d33c5200ed6101f8e4eeb7cec8bd4442f23688fe0ef584cb624958099c0c02412a4d168c989081501b0253fd2d1336ffdfeb12bba239c259e6f986d31bbd5e42c07b6ce21d2a987d3d4ff928b732afeebcb69d2b2fa57c5285e996aa4d386073ad79b6e8ae649e5c08246abbadaa59c5b7af5aee510cfb9494bd833426cf7e71691e468f9276d3a17ce2f33cdc92aa9427cdbee081bef5c5358ec233cff9ecc8f27ccb142c590165ab799cc67845a1fb2490557710f545c6c17f2be84881e915343997063ea20e3ef1470b23bbbe8f6b4af026503981055ac1f3877cd13692e6972d1612df3306235fe75cafc62286bee04262b6781e22c4c45183f84e9f4958339c8eb7c4e4f01635e8515297fdf33801d46870652ffe17c2abb4be1b0193de95c616137866d93c1a5a2b9a5aae4ab58346ef27a486a12ed61b21470477d900c925f99588b3d2154552da22d507dca320bd8dc0fe37eeebb3bee2c75e243b2188d382a7de8979194795ead792b28ee5d269d892ed55db2b823f1deaa65424d84d75c4a6d89458234ae45bb729137506e0a6a17b4bbb7eb19133b16920818d6434e9a970c991dfcf9fc2cf2b1d2595b64244cc8b034be7dd205bc4781c67891f061d3574061214dd31c8245a7b3886f3595304aa98f15c19535c744158dc5ca047021f55b5578e239e3f2842592f0044f707f6e8861eab2631779af714bd0ae57a419544a0986d7643e7ab3eb577301ebcb8885ecc321e4a22213ea44b0ce71835fc0e124dc8c3c395af6aacb4db1cb8cc18b47d4e02ab5eb0009b33b97719de2244cfffe9d3bcbf12d4e106593e1c2e8efcd11209ffc41002ba653df0564d49bd0830a56619845ec69bf07620d802d125a78be0b1f4e2cbb2cd2badd543906135b87c7a5064f4dc9a9f223f15d469f0976662ca7fcb8ba2f66d98df1501ed921bd0264db2f622be9ff98d56660a80effa5c1264880b629ae42cab006bba125c60c6d36555575391256e9f3f733f15a8a6f046b5e140aa82b360ed661f5eed755bb1d898d011ec645ec9b0ceaf12dcbf962f5fe4f484d4068701cb25bdd1c483c3595002a340a960edc7449cc558b53f986998da5a8e5faaa309d5c2e8b2ac7593b6d268b11832711ed5c4d925a2920f08658e691ecb7fc56243ea4fc826b0ea288bf5078eaea5217cb3519b1978c36ab1b4091128c2b84db50a618521be12a9127d70b20df2480357d60cc6b11c6bd91345c71835a195160545f9dc712912f7933d75a64d779ed2841ae3fb0b5c58e0738ac2f28e7046bf827d416fd3fefe172b4dcecc1a96bcb588783d4ea631d88131f29b1ac48ef40284e8f36d1fb927590aeac54cb3814549bc190c30ed15c43142b52f483f61848b809ebb828bf9b5c8a89c18dc7226d2d93f9d7c34932b265a364e4a70688947ad441a8f0a63366c923ab75ef0b3af25200674da6f2f023c31783ad3f7ec91e651c0d26ac19665975554bf06b4b6ca3e9381a78466b193f968e4e64c8016b218ac8567e8264f54c2eb2a0f651f222406dd1e9b72b8c0ff3e0c8e902cb267abaea4f158114ec7404791097b967777fe7b603ca8779479998ff265c02327496d9392844acea2f558b149b1a0ba3a85f5764774faf5428cc577271037f21899121226340b1980cd5e9a95b6a4fad203c4d067994a65d922511fb276aebfaba4e2258453bcdff95dd59108c39645c19fcd0a45e8c22e33460727b2b477668885f9980e51aafcd711f0400e1da49a9a4858c054fc162154459969d4f74d8160f7d039eef5d8678c141b4c93f5cf7435348c279df77250df860eaa5c830b702b143aebbca0b9385725e24f8b00e4c0d03288d216378beb4b48938af3279229edad6e2014c2648a8aee3290c22a47b78664188e01884b3d92f8e66cebb4226713bc57e03b640abe9fd1982b222d7d4f527d860117b29ddacf18770104088b38cc8affc2d590fe46caedabdb8f32a1c9d97889e629d575e9e60c25eed26c499b4a21e5fe6763a056b6cd25ff62f2d9c6332594a76b377bec5da562bccbcdfa768b38fa519810adb0f1163f8d1efa70c978c0b191f5df64c6a477fa5b3323690aa82796d6b443c1234368bfc4d5181a56ad1b222dd893f3f4e457d13e3096a96de3d3d5c560b329dc40f232e3be654aca6c87c56800c20f496bfe5c155a74d05fd7e9b8c104405b9aefe2c95f05dd61d4b167b39489feabe58671e059ee720828069fd1197ee196543ee8a6dfcf5caa60756bc70e8d7c186dd7248729ca455ae67a18887466f40c590c0f92285c614c92b52b334561e38cf7da31725b34e04e0ee2e04be08d65dc63885cb010a0417c6e4243b68a2136d47e48501ac598ec346f4a6f1a7f3d26c17bff232f6cbd76d4582cfa0edde95785c6e0c25974bf794c38c116809a2d67077d505774bea602a7fb1acd0c34f93c5c993c3b3830fc49e8393af2d97bf195dff9622369f66769610c5b4df112fb284a57e5ce1e45f7a8c0bc2b7e557011e1c3ca4528ea4249e508416751e33ae1a61ed5f121768b075b16ead4b6915798012296986894c6f163578235e48933408100228f34bb0edd651b5a42e42f4b3d44effca6706878a86efef4e0417812d8080785d48d51d1b13c82ad2d9e92391e1720de234ad1a4415fa123c260462733a10c80bb212049c23ef148653c06f52a625769e0d052aca0c546277a691b84f730584a9b8997624ec890e97e0eadb59e33edae45cb3209ee43446e934f1d92ddbea283c55e67faa6bde5d48208b78ddd91fbfb9f143eb6df7cc54998f7540875368b2b84b38c59fe82da3f0477fcb60ce01083126cdaa7d8f9346bdb0ad97fe53f561087c4e3d9124006c456c7337679b21aaca5c82be61073de4b23aaae1664eea4c8faddf047c88f22a72e0318d8999296decf3529a71067079d48a1ea838c8eda1e7093ce50e2e09006c62a2b7f0ad55487d7dd461ef28b7fc674a98fce17fe55d3327c4d9f25c935064a20cd7ce593018ff26b07f9cd6758c1f517bb534b356acc97164e030d5875dd43c5957d9ef5dc0193154d03694fd44cd26911a639e8ff09b141c767ac3e954325002c8753866e655e5111e8e886150e85988dc8165f08119126858bdf5ee3231b165206508308c2964a13b9c005d192c9e0e8d75333aaf147c2ee4ca7ebd757d69a30d750925c3d7263771567ab6a5134810af9f613c5eda82b1bc739cdb68cd0968dcdfa25c55ab3f0c95b3c64fe02b1b15d89b0c1750270712a070ec3d319e233b18f81a2b00418ce7f899d009f3f88827373871d814b9affa08a13b7ab80818cc50f3441cab4ba375d0c2ed022625128bae272ce9f0b3bdad70b11795b6bd55a26a927426631946dd472cafcdc661a33ba3e22c3166b1f5d0baa4dcd12ced89a2a8ea01304b460161518932e8653dad110bd863baf262b9dd579b31aebed8e2edf03849167774754dbcfff8ed39322aa115d5eb9e2d1cffdecc11667b4a85c47cd26e466efa36d24aa843f0b27ee9372ed8a17a58447e87583e34a9e6f6314a85cd262028225c18c776b1b0376f62c350ada130a17000aafa9d5c1d3fd1de115b5e619f7346e9ddd9710cc8fe3cbe0b6de33d927e06141622051ab08992b1c900493e3b25360748c8a32b6825ae58300f1438bdf3db782d62fae2334eb0f0d2e4c61ae95abc577013ba851661b5d73bf15f2a3316be5aae9292219b81cfdf41f6364d1c26473f188792c2ea8fa24dfce807b4c9fd4fada7d8bf59dafd9d15a4b3e6141622079e1490f46cc21ce00f4a5d9b6ddef0cb57f54f1d525aeec5447f579b85b21b1911e2015d12915ad26a701ecf4c975046ec294f08005d75568f364cb3f2b34d70d8e52d4315f6e6e81880c3df1d8890433cb93802ef01c3920bd54a5b440a123941694b3dd089367910f31255525fe909e31604ecea033898a39c9326c19e49c408434dcc62cbbcfce1e33d2d87893992d6b49c943dc3a34e37549b8e777f70adf4ca6a6544d0a9cb007f946e842994715418bfa5e297d01eff32046896b4693e494878fdf9af1a18b03673c29504f7247c448af42fbec2051417aa22c4fb38749bb72881066f9231edbf29f1bf94988fab8c897b461edfe31644654bde8c62737b28abc9ab206b6a130c2ee8ba85fb6aa1a97cc881cdc91248643ba05c2b4d79005afeaef559aed1366c842caee9a66673e5a7702936a4ee58d9ff57a34e4c09d802d1ca8ba03f2a5dfe6780f8453c71367848f6146a66ee77c51532be57502689717944ea90eff01624b294a96e4ce484a7976325fa78700717964e08454d8f45948c1bab3d7f776ff84337d55ac067b399b456d90418cf5ab5d9a938836db372d5888ca654e4d35f036ce700a42a7c69d379b4fa12a36f9df4a281ed0503f3381e1d61a2090d455633cd0dc57ef2cde0e9724091fd8e20bad00cd29961146215439d7d34161cece2388baef2cd7b295e2cb747c521d5564e2f2c4fd47922cd38c99aaa92ffd2f20adc588b0254bd2a8a41563549ce9c11b6ad5dc7e395671706634cd5e35c9dad1af6dfbf76f8a3a351031636c9e52a6cffc4ebf064ca10d40087343947293f21879abac539fd394d36d56a5e37233e2a33f5af086c570fc5a10ec54724f312c84e367c775b52dd85286cebd7107abdd13202e1568c6e48292587162214bff084fd5209a39aaefb4c9bda2c0053a853544e80d02bbd18227dfe57034264615d155b5167dddde701f43313db5a7c45d279f605b102cac9270075529740d410121ab15844bf3c6d5f64b5ffef91e39c155aeea7db2523900e7e89f8618348203055b721a6bbb43a9a0ffe0452b2306e8c5f73f13618f5490f207b0e782c05a0b970763d5b9b2b01b7592fde7654abe15400d49d466996ae17d90470da05c30c7e98d5ab42639a096674ab42b0222470940a8f222775788301cd23c2cff77bee1fdb9bedce65cf7cbfa2418176648a1650ccd7a00934ff2569e7939daccea68155759f41050d7b1b36267f5f7f4b80d591d126d8fe3e048b3d90dfc3821f488850480922aa3117725117c31fc10c94fba2df0bcdffe7a41b24158fa298fd6d0d1ad65a3c3f69a10b116af51c361920bbe66c3ba7e43dd9d1139eda76805bea2531696acfb0f742b1a6cc3ddbb02bdc95a3e2a85d0bf27127633e2e5c009428adf515849102395bac088955cafce31148251abd56cdd7694646325857f62f79f069489c0538fe06b21af975bef01064af8d45ce17ed3e6501279f1e2d8548ee036bb7475b1491e0a2c9b779639b0054f3c3498f5fb9bcc5046f2142058d623a56e8eac124687866fa1c7d5a6850ba6b731e317fabc43f1c885b1fbfe4437609799d92c5b810b77bb93cf01fcc4594e7a5c5713ae91e08ed6f29f31775213cd778fbff120d5197f3f1c31073c9e03d492b61b75b585e9c66355feb378758f4ccae2bec18753bc7437b62a999ed4b400b16f6170372e350ed1269e0079f2cee5854249cfabfdb71ae3fe0be41068124ccf457d1c42af02f7c3a2b4cb199d82d457df5e9d514bf737a62a97c7d9e41d2f934792a2d9e83864b28648a67d824b928b03c83a667cc58a665c15c9ba2ac7ef9267caf2b207065cd09425e15582ce0a3def7e9c1fa7aa223e0b988a3eabbc0e7c983e597d619fa68a433a937e03e6104c7a803c91c3fb7248e5fc14ecf886ffed4d36f6346eaa5df8803971c808019372758ff8668bc5bebbb3e9c691843c38e5e0e7be58e495c70c30a40e13d71d46a26a3a3348d27b978a3a46cd1ace09a9405119e5730800feb8c36994153b1c914a8a86b16d075e5ddc72d90af224cf84f9aa4aac89fd99431a16d9c9c079adc68787da1dec936907837de9826cfb6be841791413364ecd092d03d2816e367b225f3dd1279a9f37ab3a722600df6edc1351755a75c8897b4146850a0a804c96af8db37c52adc0e0415053547f0e252bc89aa08261b0aa045737639e59a7895d6f8150bb70f5f558a120aa61c62692bf42337d03aee7e365fc9491d2f02cc7fb16e5ce744ac8ae4dc120a45f55abff16ba57e6c4f56108648494d3586e08793a055ac782b0a004d1cac9c77f19c2cc9cf0f2faf9f96f5ea8464eb6dd04d24d175329b3ca03671ae601e488a895735cd5a2d4945e4f90f2151e78106dd6bb0207123c44dec00a19e36b5cb8d86e84a2a3bda5372ac21c135faff6a44b9cd32573646e59d41c88c92c1a2b653b6cecaf1dd132c061acbfb45104429416cab4ff0faae565f77ed59a823abe96d474afb9235eccf4f72daee74b1d0bf182d7c5fb80352106ec3f282d45a648a2330263731a47b88e79f8737c500d8b8308c5603df18efcf51a5831552e37e9ae43043bb051202e5e29c76dfb5c1148e6bcfe107ac6130d30b2ba66f2158d67ef8acf53f8f9db2278743b281be42427e0d128b7a76011d139487580fdde733d847216b543c5e6feacdb12a7a4759bffd508545e0ca311c7bf8820ebb0ccd0be606f567f261645d4324cd30b23f65a1894190499ef8346f6e6203de13e2fc2192435f6846a66e1cc8d333d3ee6c190e0e72a916883c7ff2eb2f75292e6f3a5152bb9bea66fb017ae0a3a73e15194cc34a0f3ea7dc60827abbad3081a83f44fa95abb274d42fb4c48c7ed24571b714af661f5398a031d7e6d926a69dcd159ef195d9f87543283b3e09786b8239640eeb671c96bf1e58b0a08196f51c8c006d33e261e7e13535caf3f5be5248f03f0129a16663074b36082644c493e8f98ca6fe9833ca18b26aad84803a49f00d5c93f86969cd8d9b475da674952b8fc1f438e87a389876d74ff31e21d56c94d4fff1bf2659b8b5f74563f2840bddae7bc8025e984242a15c119b7b72393e3beca49cda7a4094be897259c3eaf32d57ae6718a84b10d788709a94970252ddbd7b108ede6a28ca73ad9c16a1d44a2e21cf2419360bce5c3da2c567c0c45589dfb1ce1a663330bbb780181f16b09542ca4fb6401cffb2cbfa41120f1224f3ed6c0197f1764142d85c6418222f39a3d58f74f993d78057a7b4be9874293ca4785f4be67abf9f71026f4aab253e512608b1dcd11b842d3613e1130dec6c2662e43a340526ed0c3afac1100f145bc30819cda9e0b0fb721522cd6ccb5a98146664ae82887b866a418922b78ef4ba2246c5cf21ad0d708c20cc0e32a9872d8ca4a0d651bbbdc1702c31db9b5f73f8c83442897f605fbdaf8ac0946e05fa80296a17f873f65049862aa3e31d4ffc2ecc40854182b9f8b0e55b07fbc27f0c4a84a0f93cad39ab8b6c0c46d2b5ae795ddd1643f8916727f645e1817314ebeaf87f20eb5e63efa4125315005b2aabcf5871b073bde55236e946b599973c5c5720481212d9d8f2ba8e804f54d7971e4ff79ac85d4129aed820d024b58cbdf565628c5e294b554b9fcc9e227460160590c31642d5af48372bda657507364669e76f9d3ffd4c6da5b616b93c1cbc89ce6b18259cefd7915144ddfa8b3a01bb5e6ebb1b21ad72103e32b31160b9287f3d69267ffb95ab65537dec7c1b97db0b4eb1a6d5bbe234a0ad63342009d4c12bb7964e64734d62f71161a622e5111ebcaa9de9bd9519df1d04469ad22053ca32100f2c47b7872658468ccc99e3188cc7a17386965200ca2f876375a15b59567d8f5fb856d8654f9e0480dd365c5d186fb9c7adbfa713502332f479b8608b3928a69264c5aa52139c5ea48607330ee8fd6ee352a6d9151de3603533322ba14348a22fe1ba8cde23eb498f792cb30d2b8cfa886e70bf078cf47c9b1e1439f715b1e764b69d72727f8577a7a6169585e96b23079348cb2091aba3a9519f6996095f7fe12f72b172c20a4deff9efa99e30561e5df26248f7b01b280097e103403bc128accddb8acddb300630923896d67f23743509d638456dbd9d05efca407c8c8c9e6d80dcb1119c03602580dc801d70e308cc5b2c2799e1d35197fed63513e8ed0d133addad544a1fddbe45fbf0632e8d241c3caf508bfb5b845e35394999884499dc05b829b715c51349aa736876a514659ade86881eda775e05a4bf52d238f4b11a11d032bed4774088447718fe20f66dd4dfb88eb96e36e15fe5891cf0f1fe3e5272690035812072418effacd92718f9c3252762502fc2377c3c8a13bd6fd5f4827e8b2b90f28604853fd719e829b7896317c37f0cbbe19ad5f7371afeaebf3605f50713cd2ad165dca4dca85c7540e3ecfd94c56890c68c6820bd70db65d01199fae5b53184e1e1a56c67e546717451808ed15363cda3bdf7b7b35adcb6cc817d06d7d2a3014eb835d829b8ba4de19536b062b7068f0527e56b255a0fe34a5cdaf7667931368ff0f65be4138546d9c67d43cc4f13c8489b77d819674a506948f10c492b3f6ebbf8257ad50d598d859ee35d2d844638dc7fd4a08d35cff1c07921a6b3d64066446bbc1021a53da91c4497f0e85febf3d5ad0f19370a34e951c1e8fe98963bf11b5d5294f346834c5855d76c1221768731c0dbcb2f03c99439e8590910e43108f44ad1cd4f7f6ac1a9b23451038644bce74d065233137fd350f7b7667a88eb271aed05bae999d15d2b76ed0138a275bba25af92e220f0300a610fa8b4f43100f1f4e05daca064fc984a7c065f66336256e954c3dc42e6ba909f2ebe4a8ae63d57dc7ce7b88a44c373d394289717152694a1128ee3b117f6fa3d897e5c090edcdb58139dfb51f7a8ec661e0a4bfbd5e2179974899fe49aac4f5c1d2d06766b7d2b9e18aa946964d9acd60a5854745f18b7f5559dfdf4cafeda718940d0a7d34baced609ecbcb0b20a375e97e2b3e4a486d6abff70d82ae706682fe6b46d8fa0eab9afdee133464076e64e1a405871eed6b4c8033f791654668817a4b251765c2fcbc00d8d79a1f6b01f9433cb2d0de5e207e00d04c95c546d5ef41bd1929fec5a4a17d2c9e3313d7f12b19dfdf393fd0979be69076408f14f78e1c7a7f57207220b3d38d672d06fdf3a9873eb5ba4cde0fa65de19794b9d3eb8847625e57b84f17c3fab32091622e88faef42bc87a5f437d43c5255510d9f413330613688f63c25471beb57ac61927a925acba99730ca6b23e4ce27666084208e07f24128b0f633881aae6c0c8baeb1a52ebc2bc17671a2f636bcf7962b0cb4d6266ddb0245ca26a570553a62971e7684cd03af347809fb792bf3c2f4ccf23590c51762fc0b7e5ee0c99bf099db4a77d24e20e766bce4f656e46da3642038d457dd83cf621cbf8a084872cc955b61fe03c5cdd78fde6b257633ee03d3e614a8f8ef93aa7133f578aefe97b76992a69b61b7e8ef7cd00712a68cef5f254f7c1d6a087d9702c6b88d9fa9f6e75db52b600d3344c67ead205da749b94a14eb364f7b4710adca8d104c5479ee81935f3d4231bd157193051742e617ab1d10e979f9ddf50735d370c2d426596b9b56deb683de4245579a70359dc955f91b5506278dbfe7062de06afcd8f3bc628ea112918d84bca48506c4de615ff9319f447b5e9df5c056d5a573c651d57dec8750217c6f78d9affe5b00b7b0d24f371d242346787460ea993177f713cada79d5922767311757fa6529bfecc3f0789e9d8265d8363e4f19518c34fcbbd1ea0bb1eaaec0a60a933ae61fba45ebb288e8afa62e3bfad09ba9ebb444ea86e81047ffe9647c79f9c50267a43e12ab482319c906c012e23df1fdb61caedc950a2abcba9eba03953a7f2aebb7e083ae2190f3cfc53279f2ea4a272cb71b566e25d2c212362b23fbab0d33a3e6f24fe88f8de093128ca26a7d450ec0b247ec092f0975551da60c7bccd308bfec57d648f7a0e2f6228b8a403b8cbec1e72a17cce271cf58c5616ae58191de6a7f213092f14bf8d590d25cbfb27f12a124ec17c0836b8eb975fd4051062d858ada8a7c7547d2c96f1405b44300be630434bc05d3da1db86e437b9a93eee5eff6c87bf65f68945f3933d828ee2972f8c5719f7040786b51bdf42b8db7b9be3f31da766295ec872c4e83ff5a07e64cb26be48d0c5f986b66630567ea56521265e392478ecdaadcdcbe10fe7b28d81ddfa91109ca6ace2467983c38b402649229e460fb0c253a0284a86118641b683b58ee74091bf44915575df0c78991742b4eb60b8418bc7c843a1b603556136119f33e4e007d91a1404a44c6ab7a4fb20029a770bb59233b87674bb0abba8ca044f99bb706702bf69298eb79a2ad70ab52c1cbb3370669d80613de6372b4a630aa4e34f55808aa8d7417698211cf7936684bc3c9778c531bedeecf715c1e0503b341998a55723bff8f1880a0af7e3262981d249b32aa36035669d2a2c04010fc61ef59468c8711517f31efa1daf36aa86a74018a3b42a3c44d6188e49c1d0b87903e4c491fd304227ee65b7653a2a98c78a5e2bbddd95ccaec426644e70ccaac5d9224a634fc7713aa16556f44fcfcc97dca52edaf778a75812c7b6701e5ec97cacebf0adeb2710c369452cb4c454af79187f4cbc40b6c836fc9eee4120140e6d93eeccfeefbc230bdd9b5db8a0edeab42a944895a2a8467bdd9d9e684c3aeb79fd1a581ccd7ab2a0046b7e51d00f97d433a462b0905e3bbd708e486d0c8242c51b145c52b1610502157e8a39320d818136ad242e75d7de761d0dd63cc45d39e2f8f5ddecbb36d7faa789d8037ce28a452809378483cd8aa1238225046c598a5645ed029cd223215830733839437d87755a61a07176ca14d55d91264b90e22fbe6e6674a16e4f70ee01a4611cf5febf0056413da484876fec1da2893c3c147092432c38270308d2f67386b7551736cfec4f3753396a8605ae8ea38d726b2bdbdb13a5997b0baacef1b8b6bf0a7e1a78574a910810cfa8e09930b976398a8ebabb3d6f746e82418dac4980096898f1d3f0db4755a9486f5e312b17bf5cabd695e521fcda3b8c44a0d824aeaf6504e63675ed68d8d8ba8983f0e74eda199255dce9bf7db5a441fdaa3be103e4131291036fb091901bfbea875a04baf00c71481f27c4c7010679a5150ddd00d867f70036d248aa1e458c6991ecabf14f65ce294c6bd507930448e3162fe3523249afa0ff09f8a5a061509a8b12ca55203c1094d97bb690189e5195c064659ee8ce1c69a8c9b101e5a53305ad7b52ef0136cd568a9ebf05b49bba64a186e06702b4da7583ae63a6566cd39492c92ffa100e1fa38a19071e7e0c942f818703fa99f57999df996d0123a420101c11d641f61588a3c931c6ba13d3d7ccfa00cf9436289cdaded49e54c600a2aeec0224dcb76903f72c88a4e2f5ab798e211acf6fd24962b2fbc2fdc2675c5a02f6fd6d68f70cd081e4194c365aa68a83a0a1893f1b646b225fba7467eeade3f12ce868d51834b1cb2a6a952556cd9041c002b52fd5335ee822c4fb1e6c1cb3254c82003a67721c66a7d86fbae339a20a772788a9d15d0aef8fb22a74af2ba11ed9531cc98e067b956efc942f1738f9569b96bd3c3df75bbbd982f87872df139e7926926bc910b7cc43c1110559562abde35829ca83da15a47737938d9bd96429544924a69d0e4012cfe1bc3336c7fb31a7fea698e80bf7a4964c7523f0075003454223b7760402c66917293297170be9b8b6cf862ca37109cf90c16bc24297515540a83c3b6e6a551bd35195862ef301eeba8a1d5f121763b0dda85f5c42c9b412cf261a1f5954f8665af6337483c98b0ff2d84a6cfcdc9e82e623deaace382e79d4e248a859e85e81898c99c97fbd30f34a4e0c58f6e84e85524bfed359978cd56fe697392e23a7736f3073501ccfe0ad82fcb7ac85fa54a916750c2631143e3db184ef4226ddaf36884ecc9a7918943a33403b283c976ab57d17dc372672c821f17292a04855d25ef8301c34e8206f541587ac6f7ae9ae73f4c13771ddef610ee099e27a12eaf87cfdb99be30d86087ff12dede7b835307b02034d46eabcaa2f4fca012645a06412f02517ec9318b0f3a05f61d70878849a05a549b014483119083f85630b1a03aec6961bfde1e0d207235e9663749cfa16dafd1bab28ecb55bd553871b70ad53f3cb7f6607675ce50fa93418bc4e908135dd367e49c81ac389262e1f36028fe27037db86cd2078347dcfa93dbb2b87c31d610db0d9e1766bcbd64966bc69172398f2dff77663b351cd1e86376e88feb03b275616abdc58f33d0cc394cf31d9e2c140837f7b6c4cc9ee36175fac5d4fcea01de09fd32b599e0288a1b4820f74a54dc7ee09b5798aa014f1a443e629c38a3f43f1f329b9ba32bb5ea2c0106233814d044ac4051fc60fd91108e058307d7feb7ee027a45b85189fa327c767712cd6732d582b5af5203c08874049a99dcd2831e34b9b8a2bea775a0a8c3acd1381ad5c837a2007a0dff3f6e0a59a176a38914766002bfa656289f83bae382730066cf7d74f0a5bb0dad54a29ce3457f46272777d79761487af725b2be1f5de3a541e751a660ac14787df4adc4dd38fbf4d4447e387e47a02271e9510440cac6df27a3bd877d4e06a2fa634d89fb7e01569016d62df3acc602442a7fbfc94673794cc1bb63e3be970501259c80a31e5df548184945108828e24f5fe87501e553718bb458f360b572b9390d3b599391b8b6a3e010420d35e4992bca0116a228a24165bead4f08821ab9874c5a45751d48befd074275250671a6fe66fc72af7e06913fd978e6ba7a202bcd30057392cf39dbb7b83615deb0cfc41651d5a55c00f6fe9caa435edadd482a9be04bf3ef11c9476c30eb4a0bd3a4b8f224dd9180f074857dec6b72a31eccba15fae49ddfdb031ba2f949c75f572e5b5fe61f8d83d533420da3ab34d25d9ce3571e5eff6328ac18a925bb20ecb72bdfe1ed26846e5212e355f361861cb9359c487b7c74be45d417b7f432c5bc9fe7d74817a0833270f1d082828d193506d3f08042a776e6e8763c728ee39ae3ba223f55660ae708c8f1d41acc0139a1df3eed87814e2b7e63aef921408f1a554bf6780c2aae789649b0fc2cfc052bd8c55f95e84a75b31210a354567d221e5c17353c8fb3f577d08475d8aab2397585e886e3a4a03d9d88970a9ba89628b946ace6c371b49e3b174f06f46d9fb41ffc03397f5479a56b339b12cc6476c4957b907dbc6d380286172e760eff6c7dd4277c3d524006e7284bfe0e328ab36e69270c7082a32c155f4a9965861359e1e56cf4e2b960416218b0963e66b55128c39842c89ed2dd004f7527873d205bf8399b8e3d746dda90ee0c83f7214431110d34e902153a708bf81f8615fae1b216b1cb695a01021daaf246e91af7771420edf8c64ce22d4d8a8b07969669b12aaf1ef6f08cfc0400cc8c102242ba39896c5e075f54077ff3de78c88d14cf8ccd9a54694acb36d04da64c31edec7a47f0c0ffcc3df7d5000cc294ff5d56f3eb8425d05904529d7226f69e2ba205b22b7bf9fb4ead2304a13a7f8b4b4e72632ce92d699f5900d64205ce5154d52933c8d5531931869d159cb956ed05b5e55d3728d2e39bd0d799e08d9c372bd40a087b8f0c5c45a0bd0fdf537a662bf042bd4f76e41feaa1788afbe67c995e93de7c29747c422a5399fd2214c8e605139659144c0242be71209a4941995649bc6ed8dca508b84a8b9d6cff02354e3d1224f182f2d821fad681d79c5eec9a8f4d6f341c0b731a9faa5cf36ba7ecdf1129e3fa68920d9ab9e9a71d096210097c88db4dc87d73227ea2997f89d8514421c9c33d7f9c172d58cb7d84cb67e214fbba70a34a6e90ccb4f811c56d4bbda533b73195281e004b9d3380ac839195395b35adec89675019de4f940a57dc20d03fb2a07421679c6c90cf747d30707c00b723630442ef78b457a9746496ab7c8cee63261dbf2183ff64cee83f20ac0520e1c3e78b5034772473bae8f639bd28052af0613323867ea065d188aea43fb7a85e477dcd0119b0772dc4ff8facf9cf71fa87d40ad51a4bd2a41a8bb3118339b1be21dda7be27d4bbf7d870b26e623fca075da66627f8700d45430f20afd3d8c863ac80e8391564215dab8285613b416824b926ef9f833fe8ed87d6c4ecd434f270963f6f7d9cdd72b5cdbd1c06b9277cd8ff71fe7d420c244442becf2369bbac44d52cd718bafbcf1f74e1c61100a80766b7017d7dbe686da24df3be888e797598892435ed57589e2c2f3a7c41e7306e7624537d340276725aa72865c4fcda61daeffade22986a7df1d3466b0218992f0de112c8a7e1044a563747c330a7ebb69f1202be34ae7ff5add210574da09459de61e6fd226b54d73381a08c15aad4fd6642782e5d8ef488e114da8bd047c126307842978787835c690117e906986fd6a6950d24854496525a97b38359ba86013ea225f7714704b4a33c380918c43a1909e470ce76a8883ebeee4ca16dd7fc35992b364255479983305c6cc036c844819f8b3f8f30c0ab4e60caea3d34fd884dc8a343625d732c295831753cb3300099b243fa4fe79929275d019c3f49cac2eb82c8548afa05fef8f8dd70910bd982b5d5a137b87920569b23fc07035769eb22988bd4f8063f85f26506ec135b5e69aee64f49cebe709604b3f884c335dac9f37ee6d3c2e2c8f9d9f3a0bd5863463613a43fdec211ffaa61d5e0189e5eeb63dc929354fd4fafd3c8054db0205adcee28ae3c1c73fbdaa24aa62d026ce481a3c1dd90f3d911461d986a97b20ebed5521b2383dcb1bc917ab8018f66b798621a1520f5166ae694d7c2b54629c254a4be908096a60a0f3f5b1863a99a8b4185e87786d905e27b0f10878212faea64cf9b27e397e922c825173e415533ce9bcd3ed0578e1068160d089981a50b47e8c684f9b61342bebff7227be431a2f068f987c3615306ef1e6fa6703b03484d3b5b1e4d35fcfebc2f5cdd9cd237d2c5b1598c6fbd16e5ca7b4f2e623c1adac280be2418b58e8f1321239e2674ffdd6bd8929fe49cc4662642de3879142e66ac9c092375cf03ba8e1de186ecc6022a119a43dc8ad97e91fcacc6b7b66cb5f0c9778b7e63e8d81fdcf3abd2d0e06a7c6bc9fca476847e410047a477a4f2a99398c60e8ef1b086915807291a0ccffe8bd29caf94de83f042d3d9a3699ef5d35b206cb3e6753f5bb90d594b53d400d1b165c9d54d5ba4bfb68acea6833d3e9176ba9cff1bfef00ccbe6cda00b590040297e6a8e58fa5cb1627e725f3b37fbae932ceff2d672b6f5624e28cc8fac19931d328d93bbcbab8f01844be812f1d6692441cf975d20160250b5c5f6cdd86b318084c7277b2b18c373210c841d17414e8ff6aeca5e33e99e9065190374cb3e4b21ac8956706b6b9bd70f3668cd0f3371b62835a70bab146e77bcede42a02937dd0694af3ce48ca2256e6e011ad38ff398310c9c502c25c94448e4c9fb89604ecd0b481a2d797d93fc2f27f8514c8fb7352ec78fcf9a0c38a5a3d6cf41b696f7bf719b7e077e7d527b539a6da4d79ec45d539b3f193dfb6a691e7f68729167b2cc6dfb8e8eb0bb917a636e46ebd86958461d2cd76be51059e513f173bfd5d61266b3996803f1b3382b2158792561ae7ba1cec321749358e6237455cd1bde84bc74e8a02f1bbe1ee41a5657a55efad2857779d3c584cf2fbb18745482d6a86443e7f3274ee056c607ea0a56d2aebeaf379029d657428d3fd0c0b4cdb03f52c23ac105a1b02458d75def59c2513132df74079dc6a7bb6f151ead089883104acb9630341272979a2421166f71f99a59481b824d4eaf0f3f9165aecb4a562f282105c45bdbd1cc535cc745689308df6ae3bbaaa8ea78cfad62ff9b7d34fbabb99321f5044b5707191c06d62a70558f70c94068a39e7873e85100c01f4e2c689da313ce5196db909cbabf0a05ca40f3256b540260f6eb58b86a09168067168e2a98fe0a4c3cc44d46252b443890e4b2768660a7dc9c4fc2002503806b6287212418f02fde819240542c86d435cc6a335a4e5dc07c12c18c92097f5ccc9ed27f773c19dfa3ad99166570cd9a5c82a84dc1a56e77c695d756d16f038b1bc763df6cd8d2fb456ed58ed2f3da570fe374dbafa813434eaa0a20137ce843a3d5b3c93458585b20dfbaac22d5ff9106dafd9be6d44f0baa0b875268dd30f7c7af80333a3c23bf8346f930e1b33aeb4a58aac7a8c227b5c47038de5fd8603c84b910feae52512843f1bfbfffb154e6442d2f95902e4868028b55121aaddf88a9d4664abced2099e9d02cd1d98ca190653039a246708a6aaf3d804769b4753e2fcc4c1fa595d2d89929160bd88e15e31424cb8b714ca54bf0c9f939b7c79066f2972d0c04f6a1ec484c1293948bc31b3bd760759c2e8b8751c3390cd3099ed9c3678c921390ce5d284412ba5569f21653840e70069dd3d59796fb487354a3be51864bea2f0d277e34e3c32b159c12131b75f71d8c01e1486635af2041f7fe2d62446c7db1275ad1f7f39daf54303c0e6003498fac5c6310d987b8e31f348ffe2f2a8b24bde22ada373a53dd8fb4556070945d6ca7d2cf1ef097cdb00fe9d60e0e7d3c99c235f0e25e7df995ec375a7d54ae97dac7040d7708d590cf2da511a82710ee668ba194266f597445bbada9c03954532dd992b22db493c73ec62de60a0a201cdaa71442e010d189ccabdfbdc22f1065535e9aba6dfb1904d3c9cdce9188faad65a7c5ae9c8b9690c2ec00b2e121b7c9e0092a23759063c25400602ccbf4cd92cf30c80102e7a85892668d6bd54ba06031bab6d333d58a4452037d0c1e2778cabafd3aa26e344d71150ee805c805f8b58fcc960bed736b93f70798cf6da3b65b35e1739870e92cdebaa86fe7d745d798e8d8ae2336d93dd807d3482e5f9e90b803ce0966c264a0a849aaf1b5425a23f73ea6f46425c6ef6ed32a156598bc1aa4fc432aad8968a488ea64f9fc2406aad5a3686ef9213bc315cf32c816f321009b5e6333295d638b45688255d1b506b5a80703b704f6da248665178cacd2720d9647bb306fded3956c6a37489d5902ffa1fd0028a7b052e615f9da4db8c3464ee4f24594dd3e66d6b8e032ea12bd2c874190fc6edc3952201048ea0a921920af57bc786961ad55bbd376dbb1e30c3b79f931d4868e26235065450b3432537ee19ea5a395b84f437f41a22e54a4fc10118d3c8e703a8912474855e262dd95ac9f1cd5761057c5034a7cbd742e1767203579cae9ea5792fc3c4b32b6d97033eab2d3c1feb498bf3ebf9489510163fb2a34d629048cb8a0b7b11b193b03643ddfd06986f18ea502e0d7fc7b40dfb6e10bc805ab72c89e00404ec1acc556011035c77f4d35989b955c18b3c8f7d0417829a7e4f3a95b64b68d41c25a536c798b27455de01e36a8bd0f17db06431390353e75c567b44f9071c1d2eccbdd8a95db997d07051dcbcdcf9b2d2a98b65430e60b71cca9ee3461dc748c0a845b6ad0d02bf2868404456391451d4b9db678a772339905d1f32b2b3f6d3acca63405c1c5994b37906f545f3548d525fb118be83334310e6910a5f24d2e9ed2e0aeb961a8c3db885fab62fb3b6d711af8b9acb6146841a2c3392c10c77d8b474441d4542e3aefb1d3811252b906b45673d230b1f63b094ded8705df8639788c2f8d893e288b4899abb11f15f0669fef77ce3164860d90ec3a851aa21843ce8e4dfb3609e8eb0ff8145faa25b41fd2f0916776abf922e59566a9e2338de7d80579e8d4e0083483ed8a59b2eb14f1c26b93ea304fb65b3d734362e27480be25ee348e2a7f0d61d4fa2ee1bf907a6990edd7e44f46621bc6f08d3bcf60f3fad3f838e18b8e11694ec3219ac458fb5a567473d9ba81755755f7ca131b1a929896fd02abf6456c645b499d0a368d92be2a0bfb497431d5055a4a4c85dd6f936ee5a99bcb1454d11674b2a9eb5006f5cd1dd45d5e3530ab23bcddb0505494bb18ae352576810da70d4093c096a23ff48fb90db15622c5d555d38e6a8a308bb19e1aa623b6896cf6ea0a57b6a0f8d035b9df7312e3ee2e1e30ef52f8274836fd9547d122e3d3426c5ac3b369b72176d22dffcba1a46feedd202ea7662a4ed4632e48a642885780e08f2ad7f3f1e49cac924ccec60e9f9fb01aa5bc797325b81398991add24ee2824d62a31a1b2cfa21731cd207347339ea20d2d7a7169cafd7862506f14ed38ea0a1dcec6e8c948b7e2219386576b4c07fe107d0bed2229ca76e123fcdb21eea6281b98d303728b88426547ea8808bafb061b25599f129bdb4c01abb81167c4038b0080d187f913a4479910f9e18ffc76aa12f83ba6424ebf446403672f7f7756dcf1c459978d4e73c4fa733381572fb4553a907ed2dbb88ce8757812d1bc90485ea42a03a6f3f0f46551290329ec8811dd607df9b3ac7926a8393b3d68b72cc9d5fe052e4be2146dae1051e48ded9cbdd05740bf85c974d1a2469a8dd1980da5aa0fd42f2b6e5d7e9bbe128f65d81519f0310ed74b7f160d0c73e59ebd88b8d7ef1fe59276599427cd32fa64a97e98d2005fdf94591e036d68a3e91e7e1dbe16a5ef49b86389203372f34060d5be9ad6d91fcfeeb29cdcecea07a7129ce35dfab5a6010e5974b25f724b689011aaeeb0cc0af20f4c833abcae35e885836c1e8890a92aecdd59dab980aca65482aa6582da4d823d22dcd02cd41f848d2cfce7ddf058be50e5f4021c5c04eb43ed864def1061fa9b91a4544b8c4e9c9dd85eb90504afecb85a9661febda8a5d972129376360d01eb5f92cc350ae8125d165ebbaa998f8cbb1cf53b901dca69f2f61d15d9406fbd8c35ce496176a3e90686dc06efb907fa5264e16a5aa8396d470839134a63141295ad8268eb39ecdca094ef9a22b48a477697dc341b289d8ebc215090887c26a0e24015b66512aec35c98a81ee94ddc2677bef8802000ab759c26e59c373636a9e054de89e0f4747969f2418e1cc79059817c600baa4993c1d029733008cf548a859df153cbd00b10c6935a9864fd4832bab76ad6318cc50a9e2540bbc7c7615898bf66e0cdf3fc8a66cdfe0363116dde9f1a857a398d08dfd7d7bd2982514289845ff9ca490b619e00fcf69e101f19962c8e164bca0be11436b9feaeb5741084eabf770237b0c97e034c9de512a7eef3ebc6f0c93e53a5452cc072d9034b091f0263106ed73c1723382bc0e7a1366f865b63215d2e6d818c43a1b5149e7142f10a56533de23160fc7807409856d359b1d1c5a1607a8765c201e211c379912eede0b91cf5fd653067a70c486ec444f4e23a6a85e11bd66ee436e3f57341a80e2ca7a926a23b5629c25c9138b5e528232aaff705358be005cad73b1b3d799811ece8d9564929e69170318a038cb012def678501d72d7fe6e546c2277faa7736c8afcc5f1746eacbdb88199ab75fe249b327e5c58b2239c9e01236baed224ee2170925c40f4040794f9562137286179958deea186c04b278361d20ef915c8f247f9ffa8f98039e34485a8bf6109fa097d29a35b50195130652978955595636e4f8950aa664a4e8bc062f12fde6764014420a1131b2551d31fa2815021110cc0022b1df40847ce597c6af4bff91a55712cfe5e394a25d5fd134aebb1414c3cfe15fa5a577791465ef21e7b48c9b52e9d06f4349d2b896d78fe633ea2f3350a5119d124d59321819bef2d47d1ee8929b1c0dd7b3ca03f037b5628dd03ce0b4fcc275105eb17cb598c22e0360f2f1a0964cd8f837706d4e1ad583faba8893c8f2d503891831daa5aaa02c351a8febfcdede5ff56f0ee85eb5bd895cb03e87c297d363a907756754d66280fdff35da82a28791b842ced6c4867464a7017063721283d8f40525924c3d415339d4ea14916a60812bdd5a6ac008a141a2220295550ff11a6f2f8a623d8a54610628ceb854d14cb01b6e497c0f5b790d16d0ce9434f58318d981488d13a5145f939c81d14faa1ff9b175affc32a4881d118b6b1b1888772f6b9dc6e24b3daa53b1097a5ae0071f4571d1e75fbff37a148a056a8c1126a69534f60798300e79a6bd64fcc5f9fbb14cdd7d2d973c272cf0ef852d668a3583381fdd5e58b751aed505bd480030bc1605c269d82c7af60258636fcef7c86e63098d1c37966cefedec3fa8315faf313b6479af67fd19eaf3796cd83bcc77e90260b0b13ac6548cd274c1c49f06aa2483c7dade4d097f2a224de217a4a3568ef2980acdd3be17852ffb5fbf6f8e72c8f27901056c48287e7b610506885ebaf464b16f97ead4be3e9bd02e9bac6d13a0a156093b5b70c9d49f3004c8127a99a47506aaa92d68b50c752aca1f5f3632e74d4633f15e4871f9bba1aa574ad11f8d46dae9b53bd2b3826a555799b7c6ee787de8f81da7f37165398d2b65e7aaade4c6c860dac5c478c2cf1ce02d4cf4b650cfa9ecc6ec68b9f2ce5be97a570b95e163f427c92db3752da59bfa09a028bcd98cd5f7f6ca23b5871c362281560881f595f827c3690011c9dea688a90dfa50281a5f6395b35eb585d3b621bdd6a428f534bb5c9d1f0e982ca7b7a0b5f871fe64b12f7fdfe2dbb98d2cb4edd3625eef233634de519d6a54b59536955ad156b098c8116d3438c41a446c9b439dc361010bb48c649780ef6a652337ba2f94e317aee448a7db4a514e5aefd63c5a86345551b5a0c0543d3edee1e4bba30a70401b9757ead823626312d781ef6ef75ab666f7836a4d5eea1064a7db67a8d4bc7386eccc81f13cdca64519fad7e1644b5141336721fd15633ca2a54bdfb62f24d373c3f99f144fb226f19104b44183e096500eb3b017f54ca08045076a67b3b4a60dd26a31741855d08afe2a1403790131500116039901d55c50e1195dc9e4ceea7d955957e65bd4a11935371691d0a08d50e7c40bcc9a1c6f488edc8490520bec43c51baeb94b4bdf61a8c82ac8e29c416baa44238006b9ec17b4ec6a8e65c6df2e193cd17c52084c2ed52c1ccdab7b4b76eff00e0ecbb09d7804207772e24cd11b85af40c9e792e151365722e93284948b3b924b578f86d65359d57fd7f3151d362f637b4f837d3ede1c0d4645ffa7f3d6b183e8b5f19d8a542dd587252e5c45f5adc943baa3e6b3e9452b1040582da5d58be16951103f69d08bd37f8de30efb6c35a534e5d917dbe3c97402a7ccac97d0e5e1da689d4134ab01de08961aa0b7c777d22bcefa23696d82d3c08a37fbf767db52472de513f51571f4747844687a8ece75a777547d51e4285136dbb07b98ddc821d5d750594e31822c5d89399b024a496f88fb2815126c53869140b1bc1b10ad666289b131a7018b926771419ac1e49f85e0c22ef63a1f343968c67625e99c4e801a6377097880184895784fa27609cac479fdd9adf8abbf16197a4879f94c4cf5c91a4f743fb41c0602420e4f16c14867d17bc681f05babfe3376868bb954016654a0cf932d9a2f5fa62c76ae88028ad31efcddb2e6e784a20e31f4c22aef43f4420c2e0d662c11a1c01a6f02a17a894acc1ace92e8c2ae559363d4628c943993b517c4fb7406b3dd85e25e6fe03809e374511e95d93f98e224465dbf4b3ebaa49e2e23c8f4775c9498e195f511bf5c07d6d5bc29c4f783c8770cf4d6a6dcc46406d6605df68357a35fd45d8f85588d045a9fe1938d42f791792ec04df425c771d2fba1ade81697de1411a4608b812e5493a250b0ba8773b0cc18864165784f10584e1ddd14ca8b15e98277e0a91d1a34ed73657929c465d5e45b1bee2f0aaa654bcf06356c1f82327c0c8991c4e86d623a9a94f223387caa67b935d789b506d548dcfc07950b73c518be52cca8ae684ad49a110be05cbb7adfa2b555fbd813924c00c9be80d4b4d70705cf7e2d4a3c3c8b4ce02e5e41e843dfd9cd3239cb8dd4470ad872016eb17ab8cb7131cab9a1aa82f75ef395aff59f7892e04186c0a04181d1511ce0f45ef6abcb494721f5d37976074912890fa05a9f8f739284d7e1936879394f18521e9ed54ec7babbfe77a9fd6b9fb6b057aab3c906808c98c68bf4ebec7e032421829d5e0fffc99efb9ed814e51ff7ac09db0372ceabc3440e30e2aec674a444fb4a3fca490ae625c71b470fadc163094cd86d9dba407ed61ad243f6435a7cbc291f5cfade425cc0b9637b44f0a985b5d98c36e647a553b445d5c0b98abd37605073cfd887a34524856539c6fd8a1f90eb68ab002d95e97a04b07067526d1927fc7b29c3e64c6872e50f97ffebe431c5c642dc49808492108a30665b5a30c9ce46594804399b385f6377c92fd2091a18552d33444fa4d212a9bb3653a5c1925048648bab1fdb4c2f0a31b460a74a876531fe415be6a7ba1581b5125caf36f5835f2050a84ebef81bbeedeba5adc1d4392122cc9c3d22b10cd73966674119ee35ee55a4952669a0529d9a4e5da5f0120e0ce0262f8c8fa7b2c765071e5cb5f7ffa7bd87454d6e28c0d743162d7ffb966dc60746239deef31e9d5913c145214249b887849b82ec59a30f3a38d4ac0408f1a2d1b2e2eb65f034680945a7e955f55c91741bb5dc011c6dfd21e2a607e07417b5530ad09c1d69cab5ac75214731ed3a0bcd98cceac3ede0ca0ec1e57973ceefd4d414a429c50e45864cc133ae75cbbf59415c5af997771292bd60fe1af5111c3e4bc042d15d3dc3b242a06f945782415b3705012c37152a3115d9cd6008cc918888997686bf74183b28d37ee97e70513a463b56f26123b35d8d2b841caefe82fe4d0f34099091479f60a643f267df325e7ac985c59cebdb07a4e81ed4e11e373b9133acfaae3de62f8924bf15bcbae65a809127f32a59a48545a06e30717b4fa8a5372d64716be1f46a044ba4fdb3082d5accf78df7db6e0b94888dd32dd01b153051e8b68bef17e42e16c2cdc330e93ce39cd4499e90b4abe641c7389039b4c60ca813530fb147340db1e1c09121a254c214e45a9201351cc9d48cabad5b4662d7eaf656bd78717a18c1ea09ef2c67308a632f5b5c735447a5409eab75aeb9c193646dbd0637b4038a7231f093659a52f4dafacaa5292f883ab0560295f8825f44dc135fd0c2da37ddf23a4f414481b8758715f493862a62d888935813f5b34eee8b55cc73b4a4fa3c6132a0d3666310ad847e9ff0efbc57e325bc446ba40b5e8cf5d91725e5900504a22038f3061936c7e4de697dd4109693037f8af0e9f3207f94dde6b3d431774551c1a030cb1b79dc22a395bef178c9bc03349bb09e84b1777c2741a8604f738d4122c52617ba1d0545c3b938dab56c1a9b579d7088bff269a4b8cafe3c733eb4568a8808013761929d93090b1115ba1ba72b520fd9f95caa8330a9ce5646017482b84c27b76b46a34d77491b234d754d9b620f78c123627ffbb5f2c24db97c4145d172b63d3a5de171d10a8d969804b5957ec3765834d103043e71e3b96077d406ce17086cb65b3f0d7c702a7f36aafbf4236f6fdbfbe45fb17b36ba5d6519c2123de7b27511a90bf0d3e99e8e9f671d3239a532f994a328def4ac0b419676af2486d9e74a88439030c7b3b87d75cdeda21055390fcb48200a18931913af965a3536d1cd95fb9d35d34a9b88af4f16abd2cfbc16394e37006f1efe5bca30e061466d6ce3d6fb3aa837fa02ce19cd649184e34017a9464eadc9830bb3ac431d42f053973fd07869571fad00cdbb9f1e7966c2e627b1bb10aa58600f2351e4699ac577347ec4f3770bfdde3780fd22101c64472f15eecda035ae149b5d2e9d02d4956ce728998b662d960f5fb90d65969b39028307e4ef896c7d88cf9abf0a58a5b59921eba94bec0a2aa814f319c6c6f77614c4c4862ceb2ba88834456f633181d3cbb5fdbc6b57ed68a5cf3b88d07b2fb0e96d854a2d5f32f86585665f3f2b7731e940c8721b2ab7f557fb503798d98601c718f5bf426c8bc4ab4fc2619e61f175f1c2f8a56193f0bd297bd50093fe09275609fb8c7e5cedcc7afc1ade9af19f944a4600a03a3fe817be19afafb732ed3ab372a85e194a4f8537bd1c7c876b9a32c6c36231468ba7868c1ed7ac12ad247756c65614fad6a4432ba1056b8b428ae42b785b810e57db43ee7d0bfde07bc158b95fb5c0832d009ad452e913c1b3f4d4b01abf43a98c32f1ab8c6eea841c9beb3a4358906a735ef5a74b435e4ee5dc840e5f56c1ac0ecced546c2abe4b1fd996c8cb36d83aba37a68990b1cb3fb6adb6de7de5aba9a0b2e400565021b858a4438a7ed5872ba1d1e152071307ae3f5200a17ee3e0948425f80666bb3cf714f45ae32d36c03e3f165713f094bc7c39dcf149b1dee9e124d752059a6ff53d555fd560b0b4c65caf9b358596569652547cc16b3c2da1ec5aca4e7d45da3ac1192c6dbe9c732f573c664c412544ae23907256408f993e0f2011cf3cc333faa8ddb84c095ecc7206a4caa76fe8728d1a4d56d33a1787f7164b501af84e9bb788e6e1c5f2a366be00cb576978fe42c5cb0f3de65863e30d5e5b3960e150d7eeda0d11e828f0968d002f0b8566db39e496c0e5a599d3c83df6b4a5474e64c9e84ee588c01cc7ec1bf2c7ad5b176ca4959ba45985666e5194046c47083997c12ca3b0e417dd860af12e6fcf280eb010bd15d06705fc461ff9daf4fcc01ccc60de6276ebd59887d7fac652ae8629c1b9fe6fe9d8956092d412819de2353d10d649e2d3d5f8e506cfadd5f7d9b81045b2d1892e44d585232159b576c9e3f7b866999f29ca31b5d9661bc66c509c8ab211c224fa978240f8e49bcf9a3873f1be6ab78d6144fd46dcc4912413d60e3caabf656ea915e2a4e5916e746b3d31d9d9a60b298640abc76dcb0dd5583bf83d5b76dcc15add969b6a60bd8c91d86dd201b1118d3ff31ea19a5179091472c0e463e5609e57f1331a006f393565c1c45172b4ed7a928005caaa4bd33dfd84e12b7576bb85d46f9476dddb1fb4882ebb50e06a9411281bb3a839d3dc1d6775a1884419793be581c6b42e32c8de7028fd6d56e643f669cbae2b66de9bdafa1e832b0faf852e3c70170ed1d0389c0366713bd15ddb81a4da6bf67eb0b7d3074654541cc967c74f1813f3f0229c8b22d20865661cfdde4f98ea25a2cd51319f7de1de1e7b404c345e14ef5501a73cf48ae55602c058108e18d15f5c7eab3a309359f5816f1307895bc04ea17cd5eaeca56be3d062203b7f613920c39287f4b0e0c2e13ce01b226cd3e59d5b367b616a4debbcba9235ac5ba20bce4253b77543248a7124283c1969578546b2aba6162c59aef71b8307293439537eed6a4756da16cf892f504998f6af21741d33ccfee9edb9611904df3986bc181b0713c217372b451bc83e2ec7bd4082ff246e0f3cc7873b302027f58c0340f047c87d8a69e599489e7a9f11dc730940a796c22e0fc0b07be600014ea85518b1621b082d32b7a013256d35545b4d6e564eba1072b747ca32e3edf778cadfd65c61eee28d6c71b2f5d1a58e191ab6c652b6ec24f95bf42d571ec73d7c6d6dfc054c38d42428f1c98272f5bb18977d3cf6ee1902cd7599f09ba5f5d61028c1dca1ecdc057b28a5d02a94d170490dfa4ec49ca769b45765c2e6c2f1cf861cc3b9a578e4a7b9dc6306ff66f75e834c8d57234812e67ec7f411c463dd6323f9c52fb67f0b6d662ded5dd03704714324850092dae5460f1c76818f32cf119422642e962650f2ac156ca486ed011532068f3e927f5046f895b27026b373e7c665019b978240a532a0d94837c121d3d47c53a792ecdc131f835f4910e20b177ba540001e600d584540c6fb90126b2ec2c7945404cf5f8ff9f3040d52acfa826c91ea6583e8d4076375aa3f216c5e6f71ab9101a62225344fe712c7818178e79ac9a3c589883681d8bcf0c6e456c65f2cab12f621987c9af5c2c53501da563ebaf9518cac635c140c71ff230c77bdf38103165860e0bbc56407f02b7ba9ad8da7002e507efbec91961f647ec475288714f9710e33026f6fb9d16c96c3a1cacb742918ed4d05d6e1f03a0c378391e983f24f7f9f501d36dbb14d52ad1a7f3c36d98f596955637b9d2b7c9de491e74156ca3e2f1950b6f597a202aa4e63afffa9da82453c417542100c466496c316dbeda036540373fef5dbed4ba5ba1a8d9de253597776f259ed6394d82404ad49c4b861e75e0e11ef0352b38c38cb6a5454271f1888caaa6b9849d308ea432b748ab9cf8e1f20b5fd3755c9ba30ae60668b8e06f5c59e30dac411e42ac71fc06f70f2931f526ea22d6b499c9a94e34e8be40ed3a8bfa304c95993e86cdabb9ef26a8abcfc5c2491797daf7d8b781c308d2b1daa61980693498b5c3dda0309e7be8df6f286514e42f64fcd85a5c4fd8bfbd106621b403f2186cc5b6fd8249162890ec0353995bb85ca6981b2c5ff9d5f53671a74a31dbd55e77079a047c4ce34df47cc7f655154607010acdc2d44f53d01ebf89764b8271224f06ebaa4d25bf399188e6f1778523626b34aaf85516367616071f32d9d9a87f6696ff722b79db08bb93c45a95ce90735b32d404e4cbf70b2cfb25f5b9c0f89395c6131f60148a6d9135c771043cd22449b66ec22ab851d508682e7c8d043ff9d737b2c6aa3d5368552cdd176370145fc466c8065e548a364f349ae36a8576eb2027e2e39c83b8c4fbcd00ef3589f202e4ccad366f3b02262bd30f8d512c48d2496456aa283d32bcd22a68b59ca6933f6860883c1a375c55d8489d243f2cbec68bb89ddd5a2a357bfc35ca6cf2daf22ac947a2fb4e1d6b2a18d5bb771c4fe4b89dc5139188d6e11a21e8c3c9472fb11b803a788f53d710addc3883d04b316f9f4182feb9c98aba42a3f94e9fec380e081e842ccec18c49475b44468439ab7bf38e43a0eb3f3bf86b3766f775957eac13d40abfad1f02ea2424ed0aeb78b98a024025a55ce79525dc3c4607706b7ef83b9e981d128d1594911d8111dd6fb74aa76807350c52211cab59b0dc83c677c6593c87a65770fa0f4286e6b30c54a54c13ea1a96f1d11ec37bd7e46679412f35666feb44af8fc8c29cc8923eae9913fe4305bc5a3b874ddaa86adba4e31b6bd62ee70f5d10b1fb094dc965e59c1700ba4a7c6a07245935d1d8550f819faf43ba33cbf121b4a317c86b01934adc398f885354923078c2278624115c558bd2853e71524db4729e66510b130f0a07a07712dd29f82f8e6cb7ea199fe7180329805e1aef7d293382b0747e4e2947df6e693aa1046f939d52f82bc476b3e9d2316a7c2d7904c868496a568463a21d4de82b2aa8c2fa1eb19373da6840c373eb59175e0fc8969aa8ce37b2662b94489f4729bf6e804dead25add1ea8339e22f6ccbcef2e2dd7de5bb47e60f08def5a70b57f73f9ebc3570ab87b87a070db11b6ad3e3f66c547edcdf05388c1be61ddd0ceecd5fb24c7e7618d5d40f1304356ebc984402b70a69269c67ef37f1bfad0ad60e767fbfd52580f2c59772b768bc6854258fd5ece13373eb059bcc9d77f2bfeb4a50b541688296ce3c4ecae07bd9567168bd31c0d4fdbb26717a96ce2354cea14b258d38cb779c6618b6be52b5ff9dfa5dca2253c76ed465124c6f988dd4d9ccbbbd9eb429ce59e05da8f82656a99121c86511ca716e353a87a64b45512316ed8e2b96894beb8dbea8fdce108beaf1fc108b53486908b0a394b38790e62874405586da23f4cabedcc0c019a96029712cc8aa846bb0cf9e60388a049dfd2bd3ee5e5421dcf33fd9790d70d0937f9378c0d12180113ffaa0382b0414cce367605105ace3fee6c931ac31d8bd609d38e60f4badd5ff145e337d4911d186e437cf1dbddec81693eeabea7b5c303556f53ac0a18e45611ce43fad24ac05ca06604e02e2a01557bcdd2574c2adc098cb295cb1195ad285257a845e38d9382712050d6b2b68faef8b78d310a96d395b39140b12ac11f59adb3ee016f18869e8d4ca194395f2c172af3b31f72a55c8c634dd670f07ee51594a133257a718b6236dfdf523634d231fff4b19a25f9bdc6c5d46b7fb257ac063b9997fa01481eb0321e835486137f4e96669afa6d2e08d6a6d1dda241ac444d128d33dbc2e6c8323897c1e92eab202cde5885b390b436f1d8ad21de78a3105eed21027e5b366b0f49c36add29763e6f2a4538ae0e66dfbbc8f4fc4986f8b9039ee30824de33989294926d96e32207e5427c8ca21d9a01dbd45b9ff7169bb0600eaf3a5b6f981a7a6a99ec0566a5809ce12317ebc698aaa2dab1b42fc5d2681c81a956c3cbf67c71bdfaef8cd5e09ea7d6c58e8466a2a65076602901fec8056a27a2d49d8569effeeb9a36140c3884f2d638a5072b8f1e4174079ab7b95aab01189b21cac9e4898b0ad2015640510d4e7b2a645800555cabd665d48ec8019e43d517a63a5d604608356b582e6d4fba4777ad5801da9062ca2149fe2d23e1b7275e9b2aa15140553bf277a8d8666f4555a3fd161cbefb849fd9042509ea9b6750c1565a32b6781177ed66b9d6187c18e42b80a168ccedca22917ff8cc2333eb25da08aa4465079a1d1b5cdeb26927c7ca9839e4476e3df29b2220f1f438a33a16d751e97e4bad9e4aa47dd5ca4e129f7fac8f221311d15d669b5e112219346c53c128c15b1720c085b7267f6bdd26af1e1275e8f8c43ffacb24991505cc04a52bcbaeca58a5f840cd00c9483f82f379282a894082e407ac26a5f673e8026d082a0b127e767605b5ec6ef5189fab599787662b948da141b0a1c67a63ee929f1e30ccfdf9636d5fb88676f6fae479d0db1b7ae5e6c9fd611310ca12973f7eb9360b39537cb61f10f23a885a4df8295d3198fa1db3e579847ae50fd0afd4f969ab5ea7c82b2aa1951ffed2ce4bd6e8ba998001aa4addd2e223580df2b469f896975ac5332b1f4f553bb8db21b24c08a75948a6e0d56c4388a4e590e1264c38f166027ed1fe7f60746b4e4aa014889e1a54541c043994d800c6f0691e4244bddfc6020c1218b9f2632ffae7acd0f725d7f3102c4442664d828e51bc00dcfce840f42c0f10f945041c491e02342966242acb4a64fccd7d4588922e6e32c86822380e3185775260a99657f4c6bbb8a4745f667cbf5979ba32956cadc8df4790b7f8795a5b788004ccae79ffd39aad4d7ea1d4d9b485cd1edc2bd8b39b3d40df91b44648b32e732f3dfdbd9e4ba3127a92e89de477e4424821cdbae9e3a0c14268c40f2f27903078177d32acc6e944e2ee677cf61ebbe2b92004d556f2d97a9545eba93fd8c059628cc83e64d0f706c58e957b7fad741e4cf1e998b32d85185228b5612a9af54e4785bc0d1f9686021303d94fc65db8c9e512d6415ab5523eaa18dce8517a904a9c4c4c74697f88c6a39c457722bd704c7e2286e29e3dab057d596ee42cdfb9554b97417dfb132cecb1277d5cda9c3b1edf6776c4a209a5418c9a956c0250986f08661b945af09e3091b0c87b9f5106e9c25b18641a98bb1a0e32e33e61c38389f723bd76e3d14d301bf450b33dfa16cdfc6ce6bff6c400fea9a2d21802cf17743540d59281224256fd80d4292220d181c471693f83eefe54a813c36b3b173df87079c3d5e25c18923d02a78844801ff3bf62730d31c5148e532c043413a2650201a70c729ab03d9707fe978db45e26e06159e4d2376b083a6e3fb94000a2ab4db4452efb13509fe3f589ce59943eb4cfec41cc8a1eafa1a5589b8fb42a036448590f578be229023cab527969c8c28515fdab4b18bba4ff93948085d14056adc277c24cd383a0657c96ee98d9cd6e45b7432195f5dda63bb1aab996602c656a599428d8f319a7cbe318fa8423fade07c9c3e59477756c379c9f65670c4dbd51bd8976e7ab81428346e6b2aa08b412391ae932201e5f8d87bd246fa80c003aefa0de747c9de7363005a93639ae5c34534c989791466b9189f1f7ea973055734d3fc781464590c3d30a275c16a2b1be122742a1b203f3a629b4ccdb59031f636d1648d9ff2d8729a8b6eb1441969f49889627dbbd8b0038c65e45da19ad4bcbd9101a1f3ab16fe116c316c65459068fd0aec638b3f65d9b461fb3d5dcc704d973cd5ae96ed389d33e0cee9a26a33e28699e486da80b56e74ee3fc1b7a39361d4c60a64928ca8f041e88d206cf93fc97d764d58aa83322ada2c3f3e08a102eaf26d25e714ea2fb34d4804a6c91f58f08d22f55492cec4982a00268c202a95da988b41232512ee780b4162a84548b9bbc389096afb384086e8a578c1e57d44938d66fe6d4f5555ed9b9e9bf05b64ed8f482654cbaba26db686fc47a0473265d6e5b7f309ea368a20236a1fdc6854a0b89777398a299cf1cc638747af64e6f2284487609a8e02f2925244afe1cb50f29571e415b324219d358f4e1b6f27bc638c182a23bcd3ef1d92b26596fef600d40c4f27338193e03c6510f97ba5c67d510c0ae36ec1bd3897b690d8e6b9b26b93a74a707332e0f966fc7d6b04d898e063687c9e2441abfb38957bcc4592b778e3fda4c8f3932bf38edeb6ec32642b34218fa85742729e8d8be0f515c9bee51d55f743dac76819686aee66ab1c72828a4463b11f95fbeb83a1323ca1f952009ef8561a5bbcfeb37c919ce19b44a808eff2ecd14c86772dea3cfb6730be202aa34925657c412fe99c40d9a57c916bf54ef14f5c96e2c297243c8fed47a15b12bf19cb377b060db99b13ce69497d9dfca8157d3e476d405af82590cf0f2fae6b7d027a09b26a9b38434b28a085c747339515641f1cde15ef24aab86b88b67f7e89d8e157c6362c507dc6d8ce1c9d2ef0c7c6e7ed6615c4f92e123514afbc16cac105307b79d82941d476e016e4f31d2e3216d12eecfb09ccfa8a7ae0399d39a495c14c356720f349fddf8887a11b137772a51bccff2dee692099ed652f7688abc9a68c9e8e3cbcf6fe0f5870317bbbe204f531e9bae703bdd8d4667775a61a9b93dcf0df19f2bde61de7e26bce7c2f5da6537d5605d3d14a378b83ce25c5d90dbf0f55455bec8a01551e8568b17ab4ddcbd0a9d4aa20861e089feacbee631c755dc72c1c174a1a6fb50b515cb325fc1010f251ca3ef29a3d511b9a85a71d184deb094d2ffa55b5c6e2927d6af5369f34d8a6351b7c1592fc255972eccedade439bb0daa731065c4a9250fe82048fe9af1513e184ca259ca53599ffa9b67cd2fae5f9f6650bda235dd770deded203ea003255f17e051a47fd6ee7819ccab6a16c0a182ff7bb5ea6087a3338d7af32a79dfc20a46b54bd9774283f629b86e76f4530d2957875e629fe67335fbd8bcaef565510eb23b76fa6c256f768327f1e08dbabd0df1d2e8b861a560db4241a705b95e4d597dcc92c1a6acf1feda017738de96c378b6ca9e7c9b200fa19ce56a879b6fae64d77e6afc4e1ec1d0b5ce6e5c3777507ea8fe945cad5c1c117670fb8c1590f46e217bb6b0edbe948f83614d8d7d284ef6b1988052c446fbf203f9ab70a6285735622a09cdbb34c5fd4fed82ea134ea2715612188328d398a78d46d7561b320a6b0b0197f625df6faca543d191602bc0877fd2f26ce5add4bb5bfdb6cc3e0e435baf1c2741b50641686cc5182235351801ec775c88ecff537dbcc17d6a40cd196ff9ff3901ef2857e2f15e76812cd64ba081b6cff17b8ec3f83c5ae9e7255d8d5085b63af3ae56577f55aa87dc5107b32f56828af63bcc576a2bee9b55294e7c12e3e1392dcbdbf3a6cbe0e5e640d96c6fd6846f563a9751924f6d8b2d09f92414f936a850a6616943c0d53201f27f9927c84fbfe13d4d90b20c75089e8cba3131094b801252d337b54fba220b297368ace019a41d095e8ac95b8f5f3a93a78b6fa2dcddd38362f46648b865c677802e5ff9b77c81f4ecc70427a8ddf805e8611cb8ffe2eff1ed4fdda2eccf6d7d34cac0551b6729f1fdf3ae39bf0018ee75cb58018d72089e5664522ef7bd71adc1f36e8ec1ed093947359a6b1dc1538f64042c814ab17d46501be10c4cf117502182d662dcc43358ad88c7a231e9833e02b319d53e8265a802a1e9554d00c37486861d097905ff893a0e3f5a0b49f40aadf764d04324f041fcba6bb1e833a8b671a7e4a1ac0d94cbc1e0d450f0a4acadbab1334b3c476bac0ce54e098c940be5d6e41d0c09788948dc071acda8535b13f10c451c7f2d903147604186f9cffcc947d1e0064671f1db9607b40ead5e12e30f03359981c084877140b8a86382df1fdfe4c1a17866f224b897ce8f80ae4ec3c288333deb45d4313ea9e29fb4de69882158bc2d8a80a597df6a9c39b66af696373b11e52b29656b274fa3d23fde92505d3216893107cff5ea5be841f6068a702cf26b3926d9529846341f88dd5e297e86aa336487cc67cad9b360df8a8ca394290105ed1749ec9496d1cf44945eca341b9b77ec88fa48bd590b86472bcd3d80e6fa65afa1ac801a3658f6e125ffcc4ce4d9fa0565cf25041cc3a126da72aa12aa8a4ea78cbc9926ec3bf64ccddaf9766330a5199a1316939b53ec09beecc03c2fc54e91c49e3dd4a7ea6ead171ba1520d3e32fcea8081884f9301a02571e21057ea368da9aac28e8151ecb1d51c8dd3512dc5a6b8939e916eb65a6d5c4a88b7f4ee5d0fa352bc38086d0c39e0db549278449fc41953eebfd97270b5e20be9e6b3a55b6e6044f0e51c083d6765805053956731a4d6a602c9737a76c03bec0dcf08350ee04687a4f26e7eb4bef4287b5910904dbad3c9ab313ddf1a724269547eaedb226da524a717f2fbd840e232035c6dad5d0c5ab239fb34be2d708dc309e859490aee074ce68661db771c764acdbbc258256417cfd11b4ea3c6550e368869b56b6704310bf19493e584d3443c7d40ae49f223ff2205a4ddebbc357ff92bab98c4700e9fd258202366fc7bc68e6f10a12084fefa71ca406713c45c2068638f3bb758fdaeea02714771458456d5893cbd7676a4eb0ca63de0fceddad989fc85155166bf175443dccc884ef37b16e3c9c8a97d8a33a2b2272a3ead3a1cb814ae166d2c92aaaddaf107f0ef3a6d7370bc89d94a66f444a4a06e0ef793bf93b9cf2d8d70e3e5679fbf80b8e404c1984b2a3ff9c7ca2766f836549c0d814f587224ecf104aec2f3f1aedbb6e88f257d3c0596a49bc93622c4bbdc6430f5fbb9399e2f084113c440df86aeff81cea9423e392762f34046ddcb4de9980ea3dd215cb42ef6486ae3ce85badda737f26203d387c602ca93c77221ad9de70bdad45d461ef4f80b2652e993f9c117aaafd9528d714d47fb6ddd5054328692174fbbfc3fabfe0f4414ecafb5a3a5369f827259c5a2d5f8276a3ce9d53c538a8b36d9686bc326bc5e5fc202884566f71d5d97df5a6ce644ea7c75ff272d4ee41de918110a1a142107054d1bf72d8343f56dee7d5f147da69871fe5e807b17db659558d5ed5f78d35e3d71043021efb2f6c9471bd57bd2e458a7a38a9076b69eea30d22df66707fa123a71d263dff1a09f53cbc5eacc55b52f1811827c26c82966d5d6172476ba36389983908bc3d0e32c1728600bb3038dcc8b8641e281ba9ec1ba605e9f98c2043dd2b3e4f0d2ac3a4d7ba5a29d40cc0f200ba253898130f1f2d2cf66ff07dcce01a0a61097b9026ca579e3ff55523f03eadfe2de288e6a3ed184825ca755a3b65412a24d7d08deb023b7642181403b72399d03835bd72c97be89d9a44df29eeb62c33fba1365c93e6e1627459a4b8b63a80da411a8dac555974ec6ec79945ab859f5722680bd0bff92c1df25c0d52c23bbbfb75c594e433579e47ce6bc3b740e71af95f75bae58753951fc63935cfa76c1791f90ea16457c39448c1862d602e410dd0d6311d5c090ef046f97b2da867030a310feb68e44f1e7bf182c2c09c0aa37a63d5fc3752498a8fe29edb9a3050b2e38bd8c0a47bb739573bf110131bd626e2845f93b534286802ec2d305891856305b2dae68035e771d424604df23a9e01c8faf71ea018ae31344d1c0dff05bfa29fffab32a86cd5ebff5e2cc0bc5b43a6e4f9161fc09da8290746dc94ac038274be36410dadb773d3e309d82822c269116710f8c7a0bc9326681f17bc4f7080e701445e1850100f44f42736374db9aa31b2bf369500c797466265a5f14de43d03f61a798562491cfc19d03b9a58e61ba4756dafc0c712cd4450cb2ff3aa7dd79337b2c7531e6ce40953f8304a5f962b8680306804aec94588a51241e22323922871c2368cb127e5efbbe7643622d362e1367418f095064cc35dfc13656366856c98c63f801ded3b79436bfaaaa3c7dd633114c5221b1595d8c7790efc4cb91b81e0bd523336539fbe892d3156345a3d65951cea7ceaddebd41cc088896a011924ed55eea7d2fcd5409b7600df0ce5361003b7ac5283aac9d710589ac6b67a52b147c29460eb815fa4e7caecc109066df5f11d4710e3688a6f6c96943fe35603b38e023ba324ecca87af80a318c1cff7b0dcd071af9f4397944e18b66a67da7b85ceba2c1344c092bf3cce4aa3331b1083d96ab8c6ccb17b9174eed0ff06b1d1f99fa720466631cd057d8e7a19b4ffab073594f91f33ec7bd407a535425f3885700f7fb9fc38d26e1f7f3d7d7bfd9cb9d2ecd6f7ae73cc285024c3919f54d40550dd066eaa0bed944c28efee1b5a0db084b4a1c7c8747c464ff7d502629a1beb23ac4daa16c6a76deede8f0d5c406624e07e70884dfc56cae844cf754cb1fa05c45943c30f6bc6f19c850ddcc70d557a22147bcc447e0891e028bb5f15c8a1dc9e9ad446d64d027db24b3ea7b70a2ba294abbbd1b9f9884b73ade3181480d989cc2c325804d7a5fbd08f9a3c42b3dbed6069923dd16e0626eca6a8f19031ae40462c7431e23eead6ce5fe7aa9c111aa4a4c532884116ab80e2e9a6193dad85abdb36373ea0ff60e0200bbd341372d276b681e0d9732345641e8225ab4c8d8203700694c7c203b8530ecc8c945b75a463d2f4eeffa22551cb204e251cd26910157292edde49533659c5d6cc03a2e7cd32f374e0b3bc5569e5d4af551a179f8d50e2ce407bab7f3b07405ca5abd48f816e13b35fce2c128459a9a456249fe32b35a0e0d5d11041a988c9e18b7dc9ccc657667b8e1f438f934798e9fbf9e0323fa8264f0c121000545ef8a01e4ff9de73bb54f87d49e0727da2fe3626b930dc11e8a0df0756bd0c68ba4e390aa883b826df55023de71b0d7218fb9f9c56043def1ea7e3fe816f85a14f263c4ead93bf06a9870a49420e6f098e69c88bfa02d40aded08ddc07632e17c9b25e6df8bb7df89e804f38ee52613366fa3925e7ce3ef65624363e34deada7bc029189124013eba213007754886b11f45c3780ede5f4786efbedf632e19632a4786ebf2c208a05ae340db56eda1defd800ba1317114bd1b8c601374559357e62bde7e833f1faad05572bbbd165ac29126966c0345bb4adc95d62c588d070c4c3d5bcb06ab6922c78e0248cd9b5c04bd214ae52675de9f38b0b24d3559fdbe0621c3b9ed72d37ac17c0056a333063237112bfebf736b1253fcc181fd122530d5213172c4909a0d62222a4859282deb37efe43b074d21b3fbb01b49b3b9115aa249a6b932885124887b3c405ebfb6f3d4ffeebb64dbc1aca6613762f2dbaec98010a97d177b6258ee3d4b1d4787b1aba2990582d5debc216a0fbcc23966bb8c65568d7a6b8aea2c92302c8e25df3c15eb32ee0186b9db02551423ce8c9cdd84e4aaf2c360bb324099c431d598079bc14b84dbd5dffa40f011d89967171e338eac09795852fd8079488a0aebf48e54f01552b5d6cdb5b53ecdc775289e63820565a8dcc46351a28f53a63773d45833e5d69be42f879c88b03b3aa24e3a9308e3fa90fe2c9cb7a03de7c36c6e2e3fcbd4924d6c452428d0ddb48cd4eaa32b34fd6592b4482ef8a918671470960a904f0f21f07792295e0560563edf56848c091066d121b9690bd5d5d8cb6cbeab17220b0051406ea27c9a58762a2fd379b245d05d5e26d83daca08b6e775fd368b592e7110d05a9ada634efa3162f0fc17b8a189846364675d0da7043971e262d8840fff7704166f06df83d31dae32b5ad3d54616e792c69b8b46663f5218a1cd99c40698f168238e31ce2d52799a9ceb7aea4a71ccb44cbc53a52bb4f300b3ed6bd6b860c42882cdc4d02c00197604c0773b394ec811f0e3051df91c0c316b9c6f8bb75b8a1f9eb67015d92e46f0dc75e12ac3ea4e89edfda94774a1c1371d3b12f3d68f5f065b9a75095238c36852a9d4571600948fa4bf04bc2aa358340e3729dc36372fa0171e1c0a2a71a339ca68f09b8f9d20764876bc03b6ccfe175fcdb25a72ff6b8134ca1b9635be5c7cd0b89d47ed83798fd7f97b015356c715b22bb9af5657eb364ed72e82676db999f652bbe928641a3e0c6eca91f330ff1c2ebf71d433369ec16d5235ee99f898caa32b98369204d71846edad0ecebe555f10fdee40e69c2da92da33da3499df41b3b00d01d9927de868b8e9d779083d31e18800d7e4d15a5eeee343aa5612b4eb19ca4fd0e822ddcf04e7044af96afcf4e57c74238a300d50bc3f5429e5cd429ce0e4a122a9a24c22902328d88a4621026fac85a217dc34031e6f2256a436c51babb1201374c33f1a8b3cf5c8d9d48c461b45cf625c9099df0e2477c012250498c0c774fedb107988a748166cf39211601ead0005c6ae21a4a3ee769e80654da47342b062f6da3ad142b1cdc6d3bc79652834a40cb9b449bd8fd5ef6c1aededb910306818f59fa71a97de2178f3446810db5b8a037e926a262c1c7ca30b9f3984c708f38159e0b2b4cf8f2811e9ed225380f31edb0631b5b95c9c5ae64096e5be06c66a477b381259862272b6cc5002c3cc94bcef3f07a725208d52087d9fe852321f1602896fcd0d74f5a147769a46b5e87486bdb9693f3dd972d5c4c5f1355bd79f5017665b44d615d428efc42df341dec94b218662e7504d56d08ebecf147c8d49e0c9f9df98c643fb9bcf8dec4f506ecfdef74017359a047355d7c55c6a145c0ecd7440e815cea7e8a0d4a395ac44c25d0b0950ff2b4163e4f664d5107828042607b0bd15b606fd34595df93910718eda84e5d670bef25ca1c4185b94f9199293add07c6d03bc114ffe0a732471925c00b55b308f9c37bbd1f159eddf86595aa9da0285e150bafa895c1ca9c90c74596611b921b3f51f88f6dc3168818cef05f0f259f161c17a7965241c846956b22cb289faf0641cea7395a80b87895844ea09500e59b9afee32b9afca6b4e3fc6552c35c2feeab1d8100f2d67bf7cec43d31c1e7ec8799bd25079d4549ac148d203a99f9a06f937933a2a9070223345607f04187f9d203c2937dc42dfdefda710dcd5fa8127143cefd9cc9886ef85a41d190aa29fdc0ae8c21c27d0145be387c16212036e6e3e96fb805a787ed3a7f20ae225a598f73e8e48e93bfa3b5fcbd560af0966b83084bce657ba5d698106dd57b23b3b7c746322d4a05eb7bcae30a7e34e1b93ccf3f95b16c1ab9834c76c1fc577fb2ed6a7f415d69e0c30e240ee2e76e47a0161738eff21d4c8eb6183e8bbfa69387c6266478c0558048d91f7c92112c7d7d581eb74b217b4c99d328383c612acb5dc6b4cb7a8c433f256f3cccd71d18acfdaed6c813d1a213a132b7633e0d403414844992d76b8c6f068febd6748e406debdca6f3e799aece74dcbefd599385dacd626fd4b48492971740908bef6f3a8bf9075d40157a6e14d1953432a204f3ce7f56fadf3d0c9d5805ffafee623e52f72ac291ed63abeafc0fde3293ae01105f8f28770951284313a10e425ab7e53d1167fde3c135f22479dbf72d9f9ea8c1c56e8963c094c20ba221206eca2c920cde7f00eed4e4d2472767a269c5b8ef0c212b95b90ad3f07880c5f58f03a20a61ba8d4c11874f0ea94a507eb76cc4d1230968c41a5301a7574a616159b4c20b55d3d961eb6620c055446d418a0f1441117d25ed8243dde9c13248ce440909f44f80a827491114962f4b8e2d3e0000ec79f9bf118e01eaa40a3188452a045291189075104efed35f70f6045bb4b41a632bccf2fee1741b5d8f983dffb5e8a2b30146f06d4419bd182fa379a498db3bbf98fca49cc02df7af81ea8e5789b30718084df52d4625163e074153741d04dc3a454a339306bf10c29b1e9f30e6ae22fe1eb171e6c8364b75a6e8a8eff814915afbc3103bd658b84ae06e362e11c7922b5e212f2e54c64fff445dd35d1541d9a20f9ed5dccbd2db5b3c73934709a2583744d3cdb64528a710cc2d39de447132547263f8545a9a20d6369de401ed3a0d235321d9858a95de9df35bf0d58e0392998d413c9dcc8105a00f7b64d7046d786935ae4e0423c128c6a7daf47e00c76b631a701553e50dace7d8cb885d95c75fa436176f272c32058560ba7b43879a45b602120d66986eb6aee88f70ed477803346fb44da48bd8bfc0a6cd7fcfe923a98b5f179f29578ff0157f1eee658924e4bf3cb52601e5fc9d7fcf7f1f362cca209993401e6c3b4389b1ba0dda56df262f6d59f3a5cbeac32159535b20d4152193e89daee82f63f5ec8605305743acd63cd54e002f83c0140fdd858aa44e8b2053c4f8966ef24e16fb3f6ef1fafdaad12c715709c7d63de51f7ab660f05946c46a19faefa899e33bb7448bd4743013773ea039cb45db1d9109c8a1d6f9cd9319cd87935c83d7d0bb1056253de591664a1b753307b3c4ed3c9d4e781331fba50db7ea4936a171b938c20a2b867bfb9e81ce8531841fb0e53d3a7e7383b8be007d57c4e65daf1bed2acfedc214b679bf88ac49087bc8a76c7c3990d86b333a0d749539634773c690ef1136b968f3ae2de82b31175f88ab8fdcea8626dea808418e203b8efcae66b9ead0a237fb776178a59f4a2f8aaf5825ccc0acc6308047e255b9e50b496713da02864eae7089118fbae6dc6f1addd9dbac4359f63e6dd1c32f60188b61a2c7c2ab632ff8c8d805cc3b851417d2fbbc5cb4e04c45b931090714a5a709f5243826f2577c339a37e5e3ad466962c35b6c90d6061cab294106c2e1e78e53b5e346607387264fbecfb095c303dd523ca1da38838fb5cec2dfd1e61c5c7ae31bbbda8d2ff1c8ee345205518bc54a0dfeeebb96e40ad85b6136da68f538449a86b597eeff23f87e9787ed8649ba4d013f2e2d88af50db73b732263df4c85c74266a5b4d8fc770b7f7ac025d2899466568dac3f9eccee3f1d6c31aef7912e59276efb3d913377a3b17e9aa840309ea560324dadc216b2c25dd1180a1dfff2706e44e6235f199551a8bb8ca1cb1086804a4de9eaae7ac55b8d5c8560a4abc5f9af92de93ea50b9b86b50405558c47d60d146407eb87cce33e19e02f256ffa696396b500c88d18a93be9bafd3c3bbf583baadcf6c5a6dd3dce99ca7b516e43c5b494765849bb6c798156e471764ae6dc33d8b23ead7747c06959ccc276f2dd2a685e40021fdf78a56ca01f0255c200c43d3c71159ff99e51042f755622883f6f571a68c8542da6e68f51fcbe6155cc262e5912f29a63762a69ab6051300d54e7f49eb34166c739cd52590f9953e16797565fe3f4d57a1eb32574f8e59d7b3f541d113b91b828bda65627e8991cf06df7576c4b6393649cad46438b793a24017f541436b0dc2dfd26e320d90ea7389083011b7bbca9dc348277e054e7a3a9eb107103a84a681838f53511f48bf3aeca7c71556fbd127261dff5c0c2e527992028bc40ae11cdd720546e1b9478756e7829700f87f1fcafbdc8289e2aa5d7df6e2434d35193e56de9cec9cf194a556dd2625766946847cda64df1fbafeffc52e6f3ef17d007f0bdfdb99749913733877c8d6f233c55fe8a18c9c144284b4e8e08e7e4e29cdc5fd4b3bb35f5fec7aacd0c524722b72f71439bc26c69832015fa09a3fd6317660c74bdfe902ff7176c1875110663154020798209e0f744c28b14636be2bede31621e2d0be690ebe5bd618f143ed18c8448875609382445eaee05de53bb956c734696c9b063ea123b043587426e4e3d768d657f1f6f3261976717780af14f55b1432e154099a6eca45cf21e5d4dbbb66ef7e186371176d93067eb13cc7bfa34196c9905d2c1d1beb22242d097119b14ed00c6f74af49c6d4da52f35b38f2cdbcdf92ef7b8680b44acf5e01742298d6099d3fa0a25ec1dd0b98390ab07f75a658fea6f2a5fb3b2006e2f37795e2025d748161fe173c98da05bb24f2ab9c10939e2506b6e4009309486a00e5cfa39ba3f0f4a94110e99961f127b7ea2eb485bd83be6d9e00796cb7a07231cea5f11c1987aee0138f930c33899500e7dd8260ac34d4783fd029296be757a1178640402ac1b8eade1f558a0dc62b2ae99e6d28b27102d3717a4d1de38998506c11d495f1259171871e2c5e1039913a58366497d7b5e5d9595d85ccdd0e8944db361123f2e3009b51a4d7c159efe0beb2a765691ea92686a4e287ed96153accb84e62991fb04c25aba634af00bbf70820b57522c4f857f1f00eb7902fb4898fcb9c80c27da0a383ded25821e87beac5aded5d19a779961919101fdf0aeaf27ce255544cdfc779d23eeb1e44803e25b8ebd892aac8193d7dddc859d8248c81b7311d90ef2aaf9d8bb02baed8ee4b876240bce94fb82a31a42a324ec0a99923b922be054a8a4fc9a4c806574ec80d786073a891bd45a0c9721e5c1d508d2a39322d63c1e191b0df8e3ce01c3b806ca66eaeac562ffda965839a24fca5ddea92028748d0b8f802e384ac5ee4c6ee91358867f0ad1042e1a05b9e0fc8cfa43b07b0491ea6ee329cccbf09da7ba0d52c96bb46ff2af8180bed1b8df14db0a324d8d43e5a324b4157b1e1509f1014b2d3f479f1b673dcbbd5600e4bf3582bae8420b2402d861a418d702e9b22146fc68a8d9bbee23b48df733ecb41c83abba814c2961de51532485ca766584affe479a55a9256cca1bf6a0aa25dfec940558140a10bf143c6f628ebd654377055c96d262032ad54a4e59c4123def75bd39034e7992a1ed0e036e6bc95c4a896a186dabfe43033bdd6f378cb2f861a0ab431726fb8cdc511f1a4edec7bcf37da21285b6949a3ca60be492bde9c84d5ad3642d18df6a1ccd356a0c025af16c8db9920aed27ff07d4a14811e776858a9dcb4ee2ec98a9592b0a127de232a478ac65ed8c7faef58a4ea8fd33c242442e820dec46766bb3397ce51f3660252aa7311e7a7359e783a9d60635ab44497d0985cddc327ee8e38aa6c61e33fda6017895230e2d85b9beec85bd0f6e55a870eb3bafed0ccd4e71a79f44141ab6ed13bbe98bf5d00740ad8876a465f0a37358f4d39df9712c49c5a8729e2607858b05238e41e3dfa8e9ea9f23d2921138121af441d23bb990dae55dcfa0670fc6d074af7bfe4ef3c61913a0e729a9921d4e361b85e2d204643f0e3b1e236d3780f6085fb3e3d7cd909d351891dd3506ea2845dc2d730eb7602e3bab1f262179b406a8cb683f2c83fed26cd5b23c724e9a2849334250e63395211b306a9f5e0b0412a08d8b5e7e24cd92e0d98918c9b0c04ab7372a048f7225a216b0b0540eed10eb20d7487fd15e96c2b41f116b4b07e60652674ebdae320b8eb33d440d3ccbd86ff541ff634f07272b4af98731d34c82c40b64bb3e89b574942cbb11054105032ef36ba3506c9a7387d654c19efd2cd5300eacf41e710050a0cb267d7f5cd10305de63f7937a13c2b5f78441d297f3714921381e4b69da9792d394562006b4c1db6b611443eecdbe94173a6694987c53cbb322ff3ca2cba3793ce7bd11214c8dfd22959c290ab151630a19a754b8867611573c4e23f4665eb97c78baf44bc4cde861894665668bf8a9d55ae5b40e76414f3659de4032fabdd9cd92af1f117487e04f3cf60c512f4afd4e343d806cf52214fe6b548b51a1b16208baf9004bcd7b020c25d14ab291816f621a89dd0f61d6d37fff6d1ca09e0f508f069b6b28b1c999a54162f6793371682470c62ab37e856d17c5073fee0c4d41a1eb2b043f2be38c2c72457cb9f355ae3fce4e6ab803f2e578f95bb810af5cc2abf3af7c19c55915b9bbb072e4c1ee6b52ef3c6ad8cd812dfaffe1479467d6d5a1ec9bec4d4e33686ce64f835a9b01baa6407b9d0ca166883466e6febd29d98a1dd87ff35e2f3a8967356b4d1711b4ccc076282676a5f0246415f6d462a7a777072f4b40697adcdff73f83170309211dc9012f102ffe1703bbafe6c981ef97227dcaa413240677fc2bc8cc6f24cd6b0297117e0fe6ec8432835fdb2f88d9340381b4319d31474ca48ada2f627bbf38c7aeca854eb5ff3b9b2ed24f6f36414965be5bb86d623ef05d4c991377c34b99ca5e097a4d7e4177a717685ebafdd4456fa04ac32e112fb3e998e7902deca16494090e805a2db7e1de63bf26989a64f60a16644c78195d787005e09b44fd29f00f876c650269c92f88ce4468f555e83e708d4c86ae2a08a3df45f98e201f74d81d6787dfa02a3cd862aed744f9a83d072d29b2c0a94b7051f24e9b2bc66ba3eeca4645eca5a702ec175c2589851d3f39158447cc2d496cefdc21dcd30e73223592f90e7e22794744572f4078f971547c0e0a02e2016fa5345343288df4fced6afd3e1da0ee439fef56dcac1cb0703f1ba1c09b1b6e68156737882b4ffd61740ac940964e9a896d9424ec3201605cc1c256d71b9b555e566f027a4dc50843da6c99bb12c5040401de64f06669f722c7a174f98e650401d952b6fde6e4e16880e80ef07bab953d723defa7034f97db60cf75478554331c31abaa3bcc057ad85e7ae45c9e86433d1a0640ef195b3e40aabcb154e0b36714256b8fdf2e89786b7f8e675045f445edceda0af2aca904d71ad99505ac6a5345f90094ca61ec9a979b03a792ba2945cdb59d7a48ad7a907308691ecb435753104a549742c5d523b068c73ef43e408b644fd51a4986a76ab8896af4371b7106333b778d03a5e0112728ee19ca998bc461cc6b7106ac1d961a8454df3fa8f5e65cea82219c5a26becf022dfc1d809b85ba1d2b2fb2299e27114369b81768f5e5430a37549fa27d83a0f689726d46411894b9637938e794b89ecbe672cd714f5d4660a5678c15589901fb0e3ac34e2c1880503ec4b25f3875e3b1dbff43cd1a4a3b78ff31258520744f8e304e1e992d88c7a5f1c7ce91342fa434a77bb6f4e07c0e7f82454ccb9158e7daef72356e9b27050874fd486e5e1fbc550a21deac8f57488e483742bd3248cea7c74add203c9983a75282646450f6eb5fad27fc89a76a1fc0e59904e33a4df14da163bc57eccd55f60202563091a00c92b49acac9a3f54c724d2524f8e9845ca3e9ce28b3376efd601c5f5d9bc3ffae5b8ab48f9982611b3e7263b6e743107781dd5c2c167165013e33f9310e7597ed1b7136fd95c57b72ee418d8d8efd05fb07a9f79ec07cc6606d992c4b6631e49f08ba5d09fc7d0d54feebc47ab553175357f94a3853055f768c437b5d9b559ee982172a3e4d9a1e36756e5ff8ac06c7d730f95c8e2d440682912dc7c0c19d0db92008accd5a482619089412343b17d9862eb4a4c02929091a0def2120e43fe9f84e22e25fa731e126d129f7c27a54f6d4bac06edcf4ff7a676f9a12c95cfc8b9123bc7da1e7aeb1443b50abf752ef983f2ec8d1da78d4cf3fa076329488809635de267f810d3b285cfc222e12d822d590a46f24132e0fa082cb0802f2803b6412a34bb7b70d52983f45ed1608a514853a8a4249375c955543da6deb722c870b4ee9c483630256bd44be5025063712cc9588bdf3f674c24a457b84a4b21a9d1a9d8ff4bafb9e09981ab133aa8db2805b59e09976455a54639632ecb85724cf7d0dff68b5b040e2a26690a130607ddf2828697af4af677e12ec131fa955dbe2c9c1e74e8c9da057d51dd5d7e7a61dd4b1066e909f1c219ecb0d80fca4696e91d011ffc688c9aea13452ec34488e44ecd6ab5413581fe678b080c27fe1ce3767b0cdbbbbe95d319be204e8c47a0db85e5062e0358de43af7c3d27b581828c932a4227f3dfb6eccea0b63a94ae02b582a025a0378f1efdbf6b8c49021f8ca95ece709f966e9e50237fa10ee8dce1ac6e529a9aade1b022cb53b815d63dda2a8562e9d4aeaabff07da2b4f034ce004780dd86e407a62ce30df1668e725b84c5f2133f888351329b9ec0b588b55759c4d824290a801e9e8a6844f52dd67a47fe64b935aa398b34848cd1a6c50a847e64956dae9eaeb5c702589e8141f4f2e1981e9c11769125f5e09253c1596c402edbd4da148ad85d1d760345aea3fa433e1c86fa0a84110252fa9453e0137c963937ac182d86d91d66f1b2af28669fd99436d0c8ab067f3da59ba0d5839650885b9d92226726bfffe825c9050d969f125a3124c3c5ec441faaa8e5d8015951a802355144e2db13904f29689fa55d569b57b91a5f07346af6dab1a15ad6243a14d3265a8690f7dd75e325f12c64cc61ade147b79e107f84402b4980afa3fa17e254c051063346ffff8d36d366db885013fab0f12a21e02c3d6eb9107bf62acc7f56cf210a0637a8611f13034ad79c8750a3eb2363b1968096554674a1b351d8ae3de281cfac627d65ffc29bc18b318423b00a2ed0680dbed47d96d7ef0185dad5acec42a7e74b13a3e4e6d8d17aefcf59ebba72453b216c0174ef947852cac865e7e45d6bbde78764573b3b611fa6d29efc91dcdb232a68017cb71ea741d673bdf5a80907d960e446207c4d64f432990f564595fa791f06c193b0cf4f54e3bb685cd6428c385d1d3e13f7bca4ed273e4a9eb981773c6fecd20c061ac751471cafc216c6ab323d75fafc6791a364c2119df2c513d86e653bd2e5e47a44f5253627002c7da9f8109866cd9234e322ad7324b1cabf18f11108e1b8d461a35146292a290598d0de876f4e5acb19163db2ec41a2770abc08f2f9db2c46de2a86618285cb00664f69cafd19c831aec10569fe90e66ba1ca344852c15dc0b651a537a83072d8c1c5522ff2423dc1305f3508ef60f07b734322ebbc001bd58ab4d4df5dc43342b5ce4309a8949edc33b831960aa4a55414fdb56d2b06b3dde28825e317e74e95c499e1f362205b30909edfe3f24b22f57a6af98296255a13c01ee248d7c34aecd18f6ebc8f8bb9d0cc10dccd445523c698492c751addc9e8915fa0782a24022289a4e9006265920947f402a9c780ca7c756ac7701623a8040d22d5d2e63a07b80d0046eff8a1e6010a894012fa61c9211477cc5253df7c840c9ff6ea437b6510cecdbc0565586b997ed22a83b628944b55f5d78b370ee53c007b7174ae6ad3178b23dde2bf7a711452d6614121f7ee64ce7105221c2d0e4b1a70761ade8039a78980446e4deefbc27383ebffe228776d574728d36f9ff41a2c25b682b970a31724e2543f24c70c3b208e788068088dcb71c42bcf3cf9da4a75b4257c162817293792761ac584ed4e803230f8c2a05a596c50a6fc55ce2b02944141de8a309264619caeb2429f5ba2ca079ebc2b124475e510e6f0844da8a8953eb22d970bf62176a0484d52b1da803a37af69f92bd61888432e5849ebc25fd4ac70264bf7965ef6e5d5e5b408cde24fbded060c26a3e7bb3a5d80ce1c6df3d74b7400fd6700047cf65153ba38b3a7f11233e5a77e329499630648a6d69960b78fb5bea50a9b4456d307ac1e12839680ff9d41b0034041857baead9f5a7f51920723d5fd9d4ef479a7553a4278f684644e06183599e2d37633317b3fc39dd39a26f3cb214e69e83cd15e76070daa57f7b67cf57b8b0094bd316ab947ec09228ee593fade019c7d723617a528c3aaf5dbe22a9956e6a7d7b1459286656da16e67ace3e2d43983f2521be80271f3a82f97d67129f9d672af4b7f09ddc839689c4429609eacfe810de77b5b130872db1839bf4fa793b1f06e16b313a43e0da5014a0536fb6677fabe4a55319a27db3a908cf6cd081049a7adc55a68f04231e19c2e92657c389dd82a1a687dd5c999624ad9adb265ea69cc144f41585328f42274f44c263d00da1b261d14e5aac63fac80cf970764dd5e942f910263027ea49ab49fc9e229c17663c88c3d3504e1014ab1c1dcdb9aff7ba8576abf7278f734137c53ff912441db7404857d7fc136e1c9007142148e4b9c3e93e63e4cb3938fb6c4bf2b85be3f9e333d3aef0df3999d2a32da718efccc7d4f2f63d78317d5056d6914f6a4aee5ef3aeae2d8094bb1c5ebbfad55cd16003728fbc007e2d15219f935829aa0e92f0e77ec92eb12df9c791f511650a0f1cc01554ceb663665c0e4e6263108d30e9bf57553a292cbe91c44f61df47a089e9c56b5eaa7e41d7f32ea6a4bafaf80883999e056ab72426a9789773be531631402d995a7766865c48235110e3d3ca49389a06fa5fe64103b0e4844febefc1e9e0f3a5a36613ab3493484aacaa3b55453ac83c7f09f9f5c432d6d8b8e0b61f4dded3cc6f165814d3cf724e4b8556aa6e9620c9c65f24acabf5073df677c6b2c8865a2bf6b715c0b4d5d2a50e76ad090ba05dc6d75f5aefffe7bfee7755ee30093b6c9dcf0b395d6447ee99dbea24b649a80bf6e5cd062fe459e5c34185d37d9d5cd820ce97fc78eac352c16854b4872c51973f0ba10840db63c74a8c2fc7f5ee3490a6013db0185796e21304ca15dc034efc2a3a981c428834e4858180d95c7d9931a14404d2eebabd637d24f94b6659691dacd4002c95e609e28e899acc5df6e57d8a657950006144f03ca0c342033390c783ee9ada5782bc74e3dd117322cf0867bf38396287d484dfa6fbaae9d65bb743e623f2351bb687ea4453ed5460fcd188a7d5cdc4372973f104023023bd12dc47436044843770218e4b23a244637d066a4c8f139c2d60ae833a5cd604a750312939390dc04fdec3b86e5f70c7cb0b5b36af49e6aa94b345a554928188526aca2bc65cdf173e3e9d96fd7f67421cc5cb863450ad1159a51aaec670a8c7cb4c1cf4542a97884fd28ab909f5601d1540520933c6d27b1e325720a52c9114be4c1ce435c53441f22401596aa6e4eebca9adbbd525135b7935d9baf48a93d5e166dd8436634f431553b3666391dc43bcf007476cf5fa91d9c1ea8e2e76d29108696f8cc99d016a10cfc9c17034043b919a1c1f6b912f019c0a37931bda7a6ceb270f750324b08495ce3aea26c059ad14816f9f1f70ed8cca46e5ecfede532daf260c1d3e3bd3ee5ba73f034f24864dfb48eaa2d7ec3bc1ba9b96eeafe86953821b52438b29c4a2751b9e950bbc1da34cda1240cc06f9c55125cf91c26b0b37324ac2e9e90438b9d17a175565debda71b331fe773839d998bf735047204b9aafd363a5933f8d855cc434addfe744f8aefb956602ec268f4283a0d449088f90ebb42289cf5281785af8f6b7262c8cbf89ca63fe7d6c99409bce3a3f816fb401b1a259328354103c7e4065019c5df93d7a190a1b604ad00707b22ca39e1b6fa45c369d6e6f5e12e3adf55874a2fc4559c9757f6ebde5e462c3e177b5ab006f996632050e590073328c711beb7621a9abb418848970c2620df68dd699708e253b79f0b384e3d65cc46b7d6cd0bbb851e2fd63c09e9e66b025f5c00e6afefe3e678bb27a9ae3773d5718e497e49c0ce5bf95dfc184ccf2ec953c18a3bfe8b4d225699306da73f55a297b6e8bc32c30100c71f067f2610e8731739a5cd91c99be3b40234bcc79600629791bf3d981e230c7ec598fe03bb3f71e87d9c06073b153b3e5e48d85ebc15ba3a90018939cdb513607bf7d7b2eac398e8dcacc4dac99134e2e46cad5719c926682c6ace889078d82c5b74193397f6f003db82e3ee6bfbdcb86372dfd24a231ceca4bb6482456cfa6af02896e96b75cc51cba837450ffd187c762dc895b0dac43df5b680900cd3dac740f2dcf4071ab752ceb41072ddf7bcce422484e0622148e3e4276119300986cad326ee0c887a187f43fcff1c9f03d985b662727a75f4137d6a3d4e3a8664ed5c80b20009ebf5c726314e89473a88757a3d0974eb678cc3efad51db5938605ace920164ba07a6cf760259f00b7479f4010f73cd7858de6fa1a47a218fd6bc20827147b731f67cc3445eb9cf1fbbaa6a6b953146c4c742541eea74f673189bc4fb97ffec97ab9f32cb306ebc51a5f964738e63fa50cac5ff1fcb5abc1b9f8b82390ae72e308bf550a9a2c43e6c406c243b621258bc2b562a341928298b9bc0de2292e25b9cdfa482b5d4b5877ce1b056e4a76fe18b46368d0b2ea047880dc3606326e7e23c53df8c824603d58249f11f0984177effd21904432a490027fedb745c20656471fe6ddf1c2a99a23b345a67a1462e580efd83b16d3777d03c10ff7745ec2fccdae3818fc8d8c6357049fcdbe25c71e8718d0259d19104344270d2c97b44c8817427df1cc10362f9f81c4e6383e60438a5215ca837f9dee1cb492fb662ff527d9e7abe3cb49e624963fa5ef169d75610f44030d1e532639433bbfde87766e27072b480f682fea347fec969554ed73b5c389d0cec760c83cc7011d8a3089a0436b4dac90d5d33a36b5acdbf5c86f45785de969e01bec69afd3ed40d5bd006f65abee655f698511acddb8dedc08e42006893b75824120893ff41f8754e0d265f6b84ae3920a4b3e654598f12acff8223740f48d2acfa701e6bc81313a4543b75f8801552dfd81f02e364b5fc345da463ea19d10307fe0baf3b483d72afc0252a3fd4a7f6cd83d20c462ca6703fb44e22482e9de5885a6c2eb0e6e47d8ac4a370c07fa2f34570744e477c3189b495bc3f9fcb5c43c47c781668070427630109da90326ab57aff6855188a980b7f1b1033872a03f7a61bac30f981acc6a6e777ffba04e5c595419c6227047102de3fc83cbf2940f4d7177ac8f1bdbd8524c2caa68ff60f8527cb484c8ccb344aabd38e289badd09e44dd9c1c6e8f97584921e68c24d1d6bc6424df521fcd156c9c7b945beb875ab720ffb5344b414e8a42e361f3ba172bf0c258215cd1f98fd37c099514f945a0dab5d30a81012f738c88947add4263f590f0a55a922a31da16d82c3b4917d1fe19e90daac8fdc13c9245474ebab73f5fe7e2ece25e0287b36979ba0b2157cfa353413078afd3f5c8dd1366507e0df8cda8aff826e059641807e6ecd24f982a8aef04128e8c2591bc94d4033faf24d5aafa817adf82639d0111ac824458413c40566e72d76419328573eee47e85dc55f58dd01729b677c39244eb150e55233f575c8d03777acf5ed72103db3efcc55b548c667ffb1f3d64d3d794c90606e42841ecf739b5f843ed015fb4c7b4bb6b836641ddd7b4d85a59d08d88ce0622ad568f9d6172f53e50a9089c02e6afdf3d7d21f311ebd0040251d642d538735dba15a603fc178e0ad2c1b64d5a9de2bb9eb6958482bfdc6f78a230eaa0940f0ac235b9ea367a65fcffc7e4927a107a02c43cb87961e0ef79c0a4cec44dda1c03495dc055210a7cef0a7c6f35155473a7626c734921791837147e60f3c1ba7f0c538b278e17f422c95fa908dff74e67579eef85b279bb34e296d1de28323d076bef3559e0bf63ae2ebbcc0a03ff25286e73945e4990e4ab1d7e62b051245b393ac9908d64ee1165a015aec8bf555426c36699cbf3e55cc15b48a3a64a08011c3305154f4f2f5ca8fe17bf146131adf4106ae535d065b559f7dbf67a94a4e6141e265a9ca42f7e7f71669a5c7444d02110286282b1432fe3b3e97801bf0f52dc43aa99046cbaaac87c6fae1435982a001d40e1a759b9733f3c4d383c84e6f7623752cc5b0398274ab0ca9c26caf5d3337f6194f90fe3d76d623ffff609358eca66e1128ad9719975ba9c1b6cddd87f8798b94b69bf8de4d7b21385abc422622220e622f97e5f9f54fd38a4e0b949de69a02bfd2d438cea52730fcf875e62f951578e1fc7de0526924532002bc5516342245e3c4c388abd7fe6513af450ab130235d23eaf2b7e6e118ecd5a11a73d0f57cff327ffb488973b77f266e5d39a06c962c327d980358575cbac5b2cce2a37c678acee12e8f62b7376a3e32e2ab08e713be894608675002bbc47d80dbc79980707c236f366e179c91695b2e23fcfab0400c30f79e3fba0708823fe982145c4915f12956bb8ec93d9e1ff24577483376122d19f6982580bc7d9ca96d308da79dd665787a319ee1bc70a1cda29bf7390785c1eca69e3e679c9e0b3d377fd777df19e9762a745f1de91b4eeab8298bba1f531092648188571d7612b14d4b10b079925f09509a5941c5bdad2bac2d6e60ede6800b2747f2f6605a7c5d419d2868c9e16d70985abbee9d4705fea1340fa9b191136b581928c522e6804b6742812dbf150b002a7198e80084494c888db320b965e9c90aca524bf6c67a56667096897edabe959d1d0641b3c1183003e214abe901169c697cf88211f7e1660e94e41ce0209487c4a40bddf9c96783f1b14c2098111ab4e12d0e9bb01b1f3c29d67000571fc52713ff7860c51f794ed42973ac7596c25d83568bb408a27dc27e51857c7990e44ac98af037bfcdc73972734d0d6371a14bbf84026654baebeae98737a71aa5160f5b399ff24b38426a2b2004b77996346abe7fd280049ea8c5df964abec17ca23d919f88aad7163b91b41a8365be80fd47d43579ebc74aa06d213d0d9b4788d230fe89874b014ba874bc2b9cf87da0e1de5e0e32fa471f81121b172a8bb8df6d3717191db9b721358b25cb99d945e4829649406214692c5502ee705098cf1e641cfe012ffd280d6faa5c56abf41756aaafb61a0624738d0ff8813df70730b0e3f1098dff35b9492bf59e12ad754c721e910fda6d9558f26261f6bc184019dd11cf83fd6289415319a15e684d3d1803e6ad90824a899ed4edd44db341cbba002091a36d31601352bfd565637ae08d7256bf877a2a211c4ac6e0ffcdde724e7c68d8d7b1f41f3db5a0df86052342e6f3bf1c5509d4303c503b1e6a94ffa2c43fd9720f2887b6ba12fa76d41d4fe62ea603417361fc22685c5a6376f3b94a321c918f2ba8a92711fa15032b0a97b15cf568c4a5bee0f4a973ec4b8136772d67642c0d0cd7a3f8937b5fb60a236bd29a400251d6cb805e6f0dd2a0bf6d2a5b96499dcf01358b4b769a54c42bc48fe3eee2f6c6f4217662a60ce9e43a7eb61fe6adcb3b691a78150d558e92bda493445231c065621d0003afe777e1625ee7f11bd3ba40840eb98e10ed04a34c36b7bcbe74e4a353feb834a56f5149d753bba53701c82d811747545062dfe9f2c3955d5764a94fb56f82e464ce03139b38277ff37f01f4a87c170d62ca4d99b0cffc15f6317e1a15a0931bb63a10225b9bb44166f4e65f01de518f8db4806a474c898749f131b7377c251183c14b7d3b4cab9e6971ae99472111690fa0486d8043016ee842d8e5aff256bf18249049e4ccb891c143e4132b5a6b9921029f35e4a7fbec13d6dd117a546d3a4380e778237eb6ec7620b82d0d88ee701997615702fbc0aec501447345b5c09965b2cf425a8b9c2d4d4144eeb4abda5f981d2a4705bfa16eab1138dbda5b5fa9f10bb2cc35fb77f208e5e21900a7b0e8098dde2171f70ea7e6f3c6a62d416d4f794a20cbdc0d7c2b17aa73ed3f0db3c64a955ffa5dd343e1d7324ecfffb86c26bb98228c85b7e12e4b412382255ad16ec58995ec2a97e9ca4cb379097985538496cd787a10317cbac8994d2e339bca958633001901cc2ea69ad1c012ae69fc2665720f029ce90b959890058d2a12e08b033c8deb694e83241d81f9c33eca6ec27374aa12865f9816bacbc16a753de13dd1c6cafd24a58073e536ca2948d27376142d2baa8ea946899ff8a999262ce2fbf960a3715e9f49b1c0f41aa9b4e4bc298745fd9a8e54492e237a28225d01ffacbe34e1737abb94bc1544dd916d762e90cc7961b384dc296b2e4e3887d1969cae1fa57ae95689b15df095968a764812b44f201792cd7296659cf47740f96c7160a05d7426cf42044387a05870f70b979723ac835e3ea4e1c8ac1b9b0021ca0384ad08d305b0ea03523b80b5cf8d82075dee14cff10f58233c377776bbe4cd5b6ee79c5472a8d4ebe679630afc72385749b9ea08b4cbdec418a2c744ac39bb01ac957cd1279e8cad4408a5400cacc81df385ff71bd05dbcabfa024ca920c0f3ea91ea394869c457d7d9d418a0bf9512c0276af04cb0f9f8ffe86f247fdaaea7a8bb87bc903d231f0283af689f2b5ab8c40beab09d528de72f9f6260940d1ad762808d961d77ebe7213ca10307c46619a039e9f6033475b5ecbfde02cd35bff8c53e6e179566bc5524d96e42dcc3251e8237e124a9dbd630dd5c03e3e6d5506340d3beadafb31401b0526a57295235f8b7d4637b18d338436ae24f00ac0cd7104d20a01676717c2ddac24461bf2d1163de300ce3c43a072351371929d7cf719fcf41a74097e77a95116be64e4ddbc8284a975afc3a4f4efcea66fba4a102083cf4ae43e6a313b2de227c02063516d9984686b99288fdb5f5d4d8a618b7247f5ad7b3ddaf33411111adb5054da4b1694d4f792a33c3ff1b50e6627cb23db57cd7bf87e5b5cf474b82d5eb6d4421650f6e74419330e5ee160ca819042644808c0c59d80bac30e9f2020a5efb1d29b27eb5acb81389be78ac0b012523e3dbcd2543a301a0f85aef6d4c3f98f11687ceb12740439cee0124a5866cd5335d7fc6e18b045ae5b23761efca47d2121b99c49afbd541c4e4fec3dc848e087cfc804930e1e6c7f7d7078abf33f8582d65c779d96ed53cf282384e74ebcc6cef425de185bcd79ee77f5cb195e663be484832034c0e89d1586d307620e86d590c57ad442d3d2cace38f5d74ebb7cd1c050481def1bfa6435f2d355eb901519b093e22fcb43e5c17cd26fc4e381dc5656558be98180fff5a0ca7dff326ca3d4efdc3d50762457714302b00d72f15704294545d53f0cc8fc62b69bebc4400d76b60273d70d47ddf77d6f83a07a6b192acb4146c46b8e7faaadadc670b6e2a859c789ddc3f969dc9241a1812516864c216865a24837c2f08b646da156289a0d5772a487fc980bdeac7be93e9f77b251dc17d5477c46de67703adfe92ded27ca74ea7475b07c9d0ab564c51eb6ee2abe687861fe97a2224675f72d0ed53017d897b4291795941be228f241d79d2a68861e2243fa18369bc4eccf5f6bf018e71d5549986a86a943916d3b22a1d9285b156ed4a3ecfe75d8ab972d8a1da47662c6cce0a8cc6d846b3bf8792a725d619a74ac51b641ff55938054ca9b0b1c0745805fc9c74a5dd21a6fcab4dbc1b052dfbb72eee17f76268af2389660cf62412ccd35db4ccb2f9eff45920c6342ff9bf611a548b1888bd8661e56f4f7cbcd7b420459568ea5c80f501365d36a65ec3585c446ef56ce0baf3738544e712de6e76e47a05961a9dfe10f54769c242c2add7c9aa4f604766b9140db570c0562bcc5527639029580348ded04f0d2cab12936d6d53d50b231db6909ed76db55232c9293bcb26f4bc8b9a5dd7987e7b5afc0628133d45a9082e23ca6b42d9dc9ebba5a185b3ad3cad458c06d1534b1816c0d9d83a8428694b3aed4db2ff99200cc274079ced2b989f18a6e23c00c18eefd652440dfbb4e72980fbdec7dea8516e3898dcc5c9f92f59fd35999c5eea589b08bef2c004dd5d1313bffd2d11730995383a4c918f67f8e088d8b66807727e54165fd066f6b7766a359c00315edd70c70206cd463d46372d09fe8e051e4121b199a78667fa87fd2eff86079d76572520f473e2f2f7cb51f850c971f88f55cf3bcdc25889fee6e03f31c6bdb317d16bd83a5ca318720187556aa53ce2d64a57e06975d9f1b8e1094f2dd041a052e86efc3282002fef905e3312c8dd5d78c95f3df968144541a38b57f1c813b4203f6913c0b7bb31a33240cf1fbe2995d0103aceb661b19fb545c35ebc5f60ca929565f5d8b6a31ec686804ab2ad5782588d043df2f9aeb46ad80007aa7844e7fee755d448ab114887cf7958bce92dcf9115cb48979d2b63d5c2b0729fea8d14c44f299d5287f460758d6e4bb50789ea4142842b0f0d2abda16eea2326869c12a6c75cb46ee2e21d670146c90acf004c212052687961b48a5ffe1c60ce1f8f380c961571fb20b314c002bd9d453b52b1cb7b3eccdf08a9f309a14b4d68580f649777749e839317d7622e111f561c096f4e8c15c3bb5adf9f2384912c4cb38adac29ed64d2ce364ca4710218c9f948a8bc5d50b82770ff667be15cd31c413ceef07ff3c8b28fe28177cfc399d877b8cfdf72722b0cf77d86df79d61127cee7290c585987744cf8aa26fdf7fc61c6fc31a3bc8f8ab2ddc0aef9b9baa075c066809c5dabee98bf447fdce5e269664747161d8c7cefefff2d1df261d6e700fc5cf21ab5c2def2dd6b018887548faae3babc35ab0739c5f687063f61ae2671557c9e9433f8a6a6bd7eb35a589c24b3334d32c6d2175fda3f93db95df1dc142aea26e66f7609222aae9136479b28fcab4f34adfcac1c5f5e05deb5f5e4b866bb017de2e307c11109ad54bc300481369b10607ac3e6a3dbb67c3f3f60765f07923aaff8465828215f005255483d1fc2dc853c14b682ec244c173263f9539267fd0864e8167e690e75fc0769f8bc96581d724e3f433eab147bc3c349d3668535946084127b855cb354c1737f1c4a36d864097a9094fd704df93cdc8907a1146765af5180e5436ce01c7a443733eec38c86aaa4b8a47c405a093bb3c346616a147f1c38f3ba58d28188665d58ac5bc3b6cc834b7507ce435a99acc9fced3cfb07d844b2b0f1c356059ffcb990d35a9e409b1c7a6b8168ed43d67bb9a9b50f8f71344a11ab5a6b853556ffa3e8979cd64cf28ff1e5f44c0109bc26e5283f83306a71eaa5441bda53de6e57fea39380c1f65e0bac47bc7d2bb6a525b29de98feb439f7c0c91beba48dea2e9adf9ab9d8d894955dd004f71cb2ffd002db0f4db916db3b0ac38ed744b0035a46706321c4b166906055960fa144a1143de2075f037173139e898f8bc360aada24c13dcd8ef211d76949ad7ca6357c8123d1b733a0e624fcdcafd148d39f084bf5800cc72d2a1b4ca38a7231f50fd2516176aaf7898110735d53aa759802894b8f19d04a40055c75ea619583bdf3dcd575176f45b074fecfe98d90dcdb1e0f11eb146221e0595d88e79e536ba83694a69e66a25dfac6e455aaede8057f8b20b4a7e47c67a5941aab8a0f8cb9bf2fd47c01c87030040031043792c989ef44370650ab3c884e72c0c04bc87d2e49580a177c53a465a276de72ea6ccbeb5934cf0cbc38f93d2fc7e9271cb3ec7eddda87ac192d17dd5292eb2745fa109eaeccbafe0693c0116e434372f179d1ece24b41d439143bda88b610e86582abe74e504eaee52c8fb6abf19b8e896a0bb2ab2e2d99dc844ef86cf726825f049189961695b5dedca1b7509f4b5f10dcb36403a62e6e1fdae6ffd6d108fd4bc2b296a81c07dc9d1997fe6fb3c8e1a651ef9a864d0f08f1e73f3dc301ebe3b4eeaa5cde1a14277aadc5eff2eaab147821114b82700b97aebef79870f3e4d22549588cc536798551d8f7dc0160d716514458ba824501e5e599b7fe95466a6e7a33ba4f27b9e513013dba14b41b592df1a62a928e3e36bccd4802376fe0c205bdc866cb1fdf38f7cfca17963559d60e4ebb43cc8319e7983f33bb3c7be1a2d6a0c9f8f95e15ed8f3172699885ab857657aac2dbf1ce15535360f5b936c48adb3f84ae966ba0ac4a86685ee324537159df2c5ddadd50ed8107c80c93aca220f29991d008f63f5032a1407c6fe416980492ba3c2c25438962f390f11cf8558d8c32b7587a0e8e535982f94e63d5735905499d28a6bd27b00da0c5b77302d43fe24c10d4250753cf61438b8adaa563d368d8dea9452d865c07c25fb800c086628d3fc859071119d9674e25471a5200ff16c0a54740a8d876fe223a6b329ad457cab5ac643ed53d46698027d4e6e674a4a179dd61f6f9cf890c5560a313d75141f5786ade10070ec43a0f54e4b6eee6a7363afec8e767f4c0a0c278ea1c7d31ac640161ef8317800fd4d9f2c790c0febaa8cced82dbc48f7f149f9e2c7a7782a67c324862d1a6f835fd088384f3d9680dea43b1de7cc1632d151eda6678be66d86aa7dc7aab55e0058d3ce0f1f2c1a452d907000db371f911e67de61c973ff57bfa538b6749d9f0b59a607955017e69e7c56fd62b20a3a36483bbdc80a3d5531f33518adb5a477cda84546a461514469618ec11b69af31dbecac2174abd24d6b23b6883ffd234f9d88c5a0f255b28b9215dffc34c9138674e7fe167b955f8a71da746f76d6a93add15255d5e7047fd6dc8c1634a51633eda8d18ad9fd4ea1d173af943caa9fee4b98cce3481a0e5d87479e423443eba618b7b9421e5a2797b654e1cb9ca1c5d114c9c70d81d3abbd5c4fac536866b70fb24b2110562b53d5b2d2476417cabbd95e1e2c5263a1e121b456576808f27f2e24f78706b9b962ec10930e35ac76565b147b4415fc2d278d01faec4e7cee48e108435cb831d48e35c122c29fffe14c06f460d9345238c0703a863df47984de27a4dc5003f89d1c78a03aafa8d6668f7fc6684366e2d2f29a64476204541e3067bf47c9210ef10400132e08f49feeb7142d6e4dce8bc43c87e0342faee8ddacb34974a152f33dc697a328dba6302f821f6f27f5e6d20a84fe5c29540218165e7abd3b31ef40c0f7d6925e8247af5fdff22b3cd938a35cf16355f0c4290f0ce5fe9e224b8f8fab1434637ea8c5ef5dcb746a5c19206dee66f5ab8edba85c7236dd0e4df42c7698db057226d4afe7bedb81977ca16b8a564d0d43b2dcb2f42f6878c3152b030a2ee3eb7413e054484463b8d1375ff52458220c28f14378fc02154f6b8688fb6b616304b117e9a5fadac3651720dc7db5f74d1708f323c8d48485cb9e92961b83bd07b9919f56ff6352fe0761bde679ed15ab8353a5d0be0d42ac2ab04cf793df0b3943b30efbc7da6ae77aa7545745ad855052ae4b15dab47143fbd865f92f57d12afd41a9581ad96bc5264c9dd12d3fa8f3c43b28d12f800b891bd8c60356d952bfacb3b311fae167e6fd2db760f32942e293f2ad734a1fda9994ed3911ab05d3180011f55a60516870ae418bbd07ed6e6b6fee4b4f623f7d6e4adf7a577fae808bc1b307780e25242582f97ee4df1c6fdd27eddd7d6f0400f529efa1b6d5b80bf8c3d21ecc74df3a5ab3fe005ee3fb3fb8246b7d684af7584bb9eb10ee26c5a9bf4c217be55cc86a53c254579c3c692ec18d983e71f4e5ecad506c62319f3492fb86405eeb38f91c6bf84a40283f05c81e1780f78a053c49d47fd9e618f166d890e6472f179aa3b762c8202aa64ab91d42c271e2b7fdfd38c639abde33b6f0a4c7442638884a3fbc8915fff957f719ef09fa046b43cfde0491e99f2fcf9e171a670504fc7199c382073860bbe703eb38331b54443ad446947729014394a381496005b02cb50e42c6e25b8ecb0838e673fca11529bf6e3e2e2fd756f6422a6d48a49022987659239cda541e295faafee3863c6e71cde6c1248902900ed1ed712a7270301522cd118d699c1b92f6db23228eed442635f8745f90b3adfd491bd98a31c8e34a2cd9213696bfc7239a7d806f32347bc0f52d5105b58ce12a2f5dfccb9582766d28ec03045196b13dc888d8e0aa791dcd19fe30403ad7ccf5e1d8a44598e4948ec15e94a4992ac07957d2fbec67b8df58ef7b67429c949a940886ad4ccf7d736b2a016bed507a66e5e9ca9c9385d3ebeb6e0fe866a6a7c2ace5de64e16a17b2cae9d567085fed669a86a378181ed44bd1875a3c8cab222c3cd18061e3e091205c6031d1adbba085285c32ea6d8ca5a90a00cc6f8516ccaa4b48adc44985c08638b26041ffb1d1888ee4f10a54a45f28ee0ae1661c919e354b300c55c90a73b7143a54da97757ac15d28edf0ad6e4c4333f3d5fcc9a02ccbff06dce975bca3735841e3cf88c92bd4d8092bc341f787ee627af1cb289c673a2651b76110e779d5853ff4143561b60b19320858e90b3366d0478393a1794209113f56b1995811b30fd7c90517db110ca0b97343d6db6cbf0122a0ab664f49d366c147b65f70a5c3fd3683e3a3442ea7cf4a0a96eb93dbebb7f6e3d09e4e83e7fdb7eb0202219942f40bbcfa549f627bd0bcbef85d78b73fa0402e118f7cf463fc53aa71d90ae0d24d9bbfdd7b911ccefbf34ef60bce0433e02565f6e6ba5a6bd87062614c522d06a875a214c6420a49011ee624511db479eda8c40b1dc8ed201333305cf64a856317f4701f62c92c22ca7763dcb6c856078842baef8e84b9fef3795397244da423ee812eebaa26b84ef6581b4f322bd9b8e187d45aa2e37da1c4b8b18d3779aa84e797e2b670ab74eda9e856b56f302897ecdc45055abb9232f9e3930fdbbaac13f27a03600f1eac7ff91af2e9f72e675e7865e051e305ffe69a23812a77aa7311b9b976b4d19bbfc051d930bebf1fa05ab5941485dc4eca81222976cd48a538d10667b9d8a25c130649c01e99b01c1a1880c7f4509d3c3e4b7fc455c75df6a24671b3f5f0cdf99bbc12a3ffa27ef3a4928074af06cd938c2f522c56d206d1fea4229fa3c0adab526f116429be2e287869078c1f2819a9d70eff9d9ceffc48d312a1875793c30b45cf448ed374016c8f7c8af0aba48a1fce77a11db45d0c3c7357306eb3dbb0b1b4d6bc1d6a77bb1ff4ec4d29daec00a14088840f195ffdd18ad1987a04c295836fa690544e6a78b45d809a921c7c8aca444859da52937308af43c9e76b9c32c81b5dde978f41609f978883aedd3751a88762e5e6f3324c369623823b5ce51ab55f062aec94d0b375526f1600b6d1e64a3a00495975d906663f670ddb2e9cebd6d9936fb02e4d5fe520acc7bd365da9527871aad0be1cb5ce61c5ab9047a1228f38d1930c45dcab97e14464a62996a8da098a702cf574925680624c1f8e5490d28134c201edf9ce48158ceb08bb5acf15d61c14ff5cbff9996921d9d30c1e00e63dc8b238130d120a848966a0630ec5da2593afae9fcf2697d566d52eb7d8c0a8c9e9c8494684b32da7dd7bb77e0c58709bba9228b67cf108a6a5a119fd71118ffcc20bfa69b45f4bf004efee075720b3799839a2391bc9123043769aa48a563943795791ae9d5b11e726d1246ce57987d5e613307351e8544e244b24dfc32892baba0c6020a0621960ef744d6565d598d84278282a46bec8b9b1cfeb0ec99e617fa7647292d366ca75145ac312695cf90e580295467f8359ab66892c0e9623d394b2d8e9766ef4c644fc7befc3da0bab9f0ba4fbcf61bcfad655c2a5eda337cbde22f2fbf1b7c3e8fccb1d70823e4ecc8c623ef116f0b40fd6007ded7f547caae4c819a6984d4f7d2c70a475ec7d8c0768ddf2c3be7fa535e03164127afb5c774121396a81996102924af35ea5f350e22036af28705b9c6c20704d98e942fde83b6703505e149ef393cdce49c12e95a11d38752959f7d82810632d0265210066be67dc65246f1cf0189dc1e676ce4671546c64b55f03adbd5f7240ec7ec6cd52907ed21ba6199db381a4baffd763b6674d28b947b67edce612b21e7628c3fe9d748f616dc9e65141a88af35bddb4427d686e5420d0195a87ea710e9d642411d33c2642918fe7a4e82ae5678d7d1759f9f00b44747df3bcf657b0b716d7f50f2a1cea422b2009bddef879a226f63f438d0c6b5f29b830dabc35d4506ddde5d3cea74457dd00ad6796f8466d7457546d0b0c7845d07d4a50c310e1776d6cd48661a92f77276092c0ec6a67fd4e0f48b06b258a9e64191c96b3d6a5574040dcd740c7ad9598827f89a0b25f4cecbf508408dee7b3a70e08e5546b31c63921f5c5f4c1bb29a93a38a8ad3510dc90c1e938e4f374c369ebfb781f56b5769f32a1908aa3b0955e2d84f660dd60db12086a5b82d725f856e64b41c0c502ac90f71384dd1212a13957b887ba51ba275904aca7de6df21afc4b9948cc2f047abdae6bb93a817300629765b4d55bf7af9cac10d3b40b36f8a6d8b1264f8be5620c66881b3cd86676132efabd556dd2a97fcd66ce89e6f1b17af7ef56e01e41af2c1cd28bab6167d6f744e0c9660d83fc0719f6276435322434715bc3e7bd824704edeaf0d52b2254c6d268899bcc9b65a74239ac985d6f432f7a1151fd7c535a29a352bc6c910f07aab70e722e5e4d523b3f04a1890bdfa71c456b442e7f52048d4e5a035e3fab8710d0f4500614b6f9a5bcbe48a05c57b7dd1cc6719549a5164dcc82327ed05c907ca5b26d343c326048cbfc1a6ca02bb9e90b16a6f5b5e600c7447f346acba60c3aa5ce32d8717e98034ddcebb6200c9d9bbaf694c5586662b8eb43434c32d2ec3fe028f8a672aa092f73a1cac41608eeef3c4309776da6fc73e1c559535c8ea3b2787fd4fa4353f1484bb466c7cdcab39f0f90411b2d0358ed9f54d84cdfdc0f59706aed5bd9e098f8d88fed643ff5a9b064a80c53ab4167b9b2f4171d2be96e08c499b8c0970c8d5a5d46979766d8f22d95f8e827ee96475d00336e86db07506f9092f04bc7bb773411de1f489bbdf43e533cdece3726119eeaae7f48d1ed39b14df3078fc342cb59bf1504669f285316f7e59621a7c4221d5f8adfcf80f1581a7eec0a8a9f9bee1840c463f446c948f14d68cd35d8642718230353f82f285e9bee6239a2d9810edeae978148bcecc70dd04197632dd0ad6774675e3f5914e7eaa0203c9c4d21c204a48b402d0b5519356961c24e96673b8d5093e266b76633d128f4bbcc71b5abbb3e77fafbb85de267fa4f2340ef712036c81dd7a3a2a395ae46005d7962cc75e07819fdde6fef55a04b87e71b90325d9d55c449172eedbf892c8a7f18eb9900835ae4553fafbeb2bcd347cf31aaa73c1ed52c0fbffe944b2d8c4371347f8be4d01915d91ca254c009abbd1a84d151007be29d8cd186fc80774d83b6fe0eb5676f5fa800bc2d89797fe3a56a7f8bb1008c61c93aff87317c7946000fde5fc243b22efb6d60bf92f78ba5f86adbc1f1deaab76c45478f73d0b72fb851cfb4c539878ff0da91179991d021b6ea28b1e1053942666fbbeaba73a8acc6afc9dbee32ba06c4cbdb192549bdbc55989a1be03214a68415e3b147cec53202a805130b5d9a65214ca59fa648ec3165af114b66b0d36b2780fa283aa3b2ce975e848cc7ebfc4e4c3a87cdcb993aab4808ab003210c57756d8967f44f52591337e17e3750e8566e540bea7398ade38f1e8d10ff13e7719dbb929a1897e7599378ddc6cadb23a18814d7d523a9b50672b1aedd0738c9dfed046ba3f2da4cd8e7d53033eb78bcac4dbc6fe2e52a3565f6efd9b2ac4f478ef58753a483448a47d5f5d1cf87128610a0d1a3988b4f9ca5be5d57b41326bc370e57c6cf1dd19abb923fa3b0738760c9ee7db333dbf32b2d4591eb0a8c16dbff18b1eed7d544a467734ab0ba916d112a400b6b7685c896040b18b056e1482c1a4249e83746d1a768ed1359b74a51dffeb29aeadae28449726e08a79fca072eb9407523ada1ee9493113a64fe382746b19c74fe2d01063244237b51f4f517126b5d8f60aa600d35a311d60250c3e5b7ac979ab62a82b0eed244fdc058f522d233b00f7ca9ca47e9ef98bfd7bedafdf5b8df328366ac1fb215d678c345fa2b2b942db3f54c708d3f457c62188799bba6143ad4e8a884ab2c63ec11a5e3100787f4901808c05e7d6b8cf27356b08a16eebb6e8be4e232f6d93a99b75213ef367b9da5b82c20c36ee66c4538f7ba97ee483bb8c37aff115abe92603bffb40a6bd18fa7134e7cc7e0b58af77038a138acba043227664ed4bec343239edf81f4679799a0bce504bf01373e31bd2316ab2f9529be979204bf8d51a99ab67c2fce17970673ddf41f3f104730fefc0cec0cd1be3a656b5a1811eec131dfee45a3b32139ac2eb14c7a3dede1e1b68bff2c097569875bb0e46c6b08198d7da7ace76709d919b18d39c3b4844eac3ebfd01f3d1c60d25fe8a3fbc89b61c19cad7db7a0514d41a40a165cd0bbf328716dd61fb1aef1136e73542279427bad5a9145f55d48539cb77c4a3a77cf35f82710fc7c5d5ea8a6d396c9f1f2c427640132bad81105c7e5ee8398086329bb980d26fe3f86b6dba6eebdb3d774c7ad7b7b62635c6714da33273c38d034b3d9adc62cf2fde4a878e05dc92637cd34e5a0db1eb481f143a3e8259cf9a35950ed8d4d7abef816353a1174beb2112fb15ed3584fa22a2b13dc7b92afc5aaf823ff25d4bb9b11d4dbe8f2040b01345eac64f5f18a40a33a0474ace38f28ed8fa79f91fe78b3e1a8cdaef8af6ee424a5d53c8fe6e6655ff109f91c7ba31d81522c87afcda7641f1b769bec652b4d99a09b696e6f2fdebe774160a4d6c3b66cef1ad2ee901f8661e1de22f2b21f2338efd73bfb8f31d3e3821b9d3d6d7a917b5395e8dea048b47c3f5d04636f95012bb6d79ec709c597d58f282a3c037263394d0259b7949db95732a0a47a383517abbc9db954a2675772de4295fd1e17e8302fba6afcf22042a11685adafa33fa5dc86a2c830ad70026bf702d5ba558079a811ad35996bb3fad0bd459c2404b07c9d3bfc7849f03a58f2f5088a545b8ca384e16ac5ff42ce9d4d37ab8becd6fdd64f195e2022340fea04bb5c2f9178347e7ad7d7856adba45ac9e1d7a84c9aaa436599012e7d2fee02d0dc6cc26e23fb9647a859d8bd8c67fe541eb80b7f88efd0792c31358a7e21607ebe13cdb49c6a0427d290bc52c7a93f02d6e428060d091b521efbca25d7cade513b597602922f997910d1b3c963287fe02a87cfa77ad4f37c39f332baf0fa61ecbc2220e4cfdd79ea3813d53b9ba82c1e593e609d3b653628738baeaa617d681677193e63f6a4d1aa50c35d60d3bf41c91f6acf8d72512ad112a33c96cb773e59970c3293e748e4b0cf8f96e9ebff5cb7b72ba9755a21dcd635181f98f72791e5be04871b3b11d3366ec22e052453e60176deea038403f099b3d8431bff71e2534719107178018812d458f025d513dd310cb02d93f24c60253124738e1a504f410b5e18c9bf453e67dfb62acff0bdac867b89fc7cb063f51a14592db7609c82b3265b24167829f0e14f6ddafc4f1eda1018f965e82a19d1281f50cf84f024a50f4208611fba29a3b8ebb11afabafa65408192d333cf18778b52c149178e0588cf974aaa60768de4554d7e06e0f7a6011c93c174e041445c7ac55ba64e80067b5a6a49ad08577fa5201afc92dd3f11addc4c49f2c609c57d2405fefe0ef13d49d9191414965f4dedd6522d2560ac4398d48f89616b3fe3e38e28a2ac4016f1f8a4436119b86104aa614efd47fd556ede2139d99ed31bef4faafa5cfb8697fa68e58247069bc2d9ae101173f287dc9defa3b1eb1f21aa9cfea3b1d638a1fd87c23691073aa9b9c32aed85ae8daab96eaeacba40864dad3d55a76250e94638d035c4cb5a013e4049707d64894cbcc06981babc3fcf1ac74b1a91bb8c219eba6669274002096440ac9b1fe52d8bcb8e00b52337310ae7d3374f54162aba6dc57a53104171d39587e722274d2b29cf21bc1f376514d091e60ef7920c0df52c902f87a9480c568b175278c01af391d688f56887a6f5f524c65aa61d07938e790a66aaf99660df7269aa8a77dbdafc3b47bc6fe2bffe681a782ab2a8df3cfc8b8027e256ac1a1977cad392693dd67a968f9e3611ab3f93ac5092a668228c76a3f372047ffa597fc193fd23bf34092fbb37dc8bcd3b56a93445aad8184b289a24ed158a651753c2df5f465440b23f60eaa102ef5c4ac28fd5d869902677d01dbd92d5cac42f183623003de2ab61cb581eb60d38bf421cb2e5100f41a46ecb24eb6b42f323c2516ebc15fecc86aad5605896ba2edc39774d29e50f32be331a8e72bdb6f97d0671140deec417017d54662c385f575facd71270660eb17998e2e173e40b8fec1123adc760a56f2938add73c1fc86c8c9ef7ba80163dac8224c19b3dcbba697da1298dbb0d7a0a3130af25010f52978f9d77b4b8cc89a5c52f1db535c459fdbebd41533baa064dddc347ad33b181d021e6c20a403f45338839bc10e8ddeb4074462f6249009497324dbced0c1bd68ce6a6e1582192c5dd33c693e2bb20dfd7b5e635c13c31da76e98c800515c0b03836a68b94a62864825b43cb73ce4250d86b9e4dfdc75b17f4453f33d673a79430560fd3e2ca9bb033be9a680bd7016e3c67d13ffd2292162c6eb87b69c71352f25c4880cc4ffc4887b84f6ef2df1a50c99dcf1390e3941212d34fd80abd1c5131e11287c3608299b178b0f8c174eb13db6b9e5620b2c810717b2d357fcdf280ceed8f7155534474a7440d09d55b814f0b96d42151facddc5851ebaaef8f37eb53dc66b3bc74801cf71f6f142dbbc8ed87f9002c3ece807c2399339134f9b1d7b7a4933753b7fae5f967d9da65308faae299b35c1fb7eefb01d1f1c2b8351d1db9765010867fcbccf41443b01f9b19c696139b330a0d5ae8edce5a5ee8071c7e8fd4ceed21d952fbe841765bf7964347a6bb540dc9ea2a3e7d55245f60a7ba13aceb74f1b3900851ace13e7673d5adb438298e62b5c40321ae1178308067c0db7e24aad166d07ecfc2eb8438d2e2624d9610ee5570c48e57b6b5699cf072403a8edfa4fc475888dced4cc021aae161ff78cdfd00d7cea8e452f73e690bee479201dedb7f66ff814e0b8f4023478de4125c8ef333c3f73e33cd6e62fe4353eaceca3fc5411217c347e27b3aedd5452348353d2f55aebdec4a6dd24e56f085328add23ea6e3b8fea992eeccc62134a13275d495a15f220c9318b8578365cdcc1f7f0af797fd580094607260e8175d2e64a61d5932973ac31d851856158b590a1732732f6a8a092278945e4d014da32bc21d962f6151c2f5ae89007cdbd082b42c52544ef919cc5ff88bb025cb8ad117f250e051804f086cce196bce8b782d93bc614e410415cfec0ffac93433851f92edeaf4ab56bfd8755232b81488035b9cc9b9ba611557511498a20899b9d60e31b81b86d192ad043a7fa073fe4418e56bfe2bdea55e8b8f01ed712697bba55953204b36d4b49bd7047648cfdb13cd1dd28a36de6eaaf8943716fb53f5300c99b62bda96fd9334de6161d39e1b168bb9f29ea12eb452d3ed3b7d4bfe5f27d6b5eba1b7bbe5612a1496d872326e4609cd44850cc960ec2639909257ae74742a8ccb26121d9372709454e0dca66dd382c7e9ef97080aebd89dec37a966ca1bb14fb1060de6c1716636579b68ec35eefc1f03113a97e4fcdfee7261ae1eff9b106f818e191876a3d102c3ee100d9febaea77cf16478688ea84e54bc8a81109748e1f8c11a9ec624de49c3fb7ec4547d97a0502992b70d596290e88c9b4774234e89562dd68a401648928b842abdfcb89e72e3941a86a59597e41df00790fed6a43f84e2d23965508a6db97c75409abe15ba17497ddd44e0f4500cd567e4333ec962344780ea9384a5bba4c2549b8e9ac9d4a99f08fb500ab34f38da35a7e81e9ff08b9ccab526e727c2a28862a3bc6944adefa93aa28c4fd3f75aea75635ff6aaf27020f98e8292d79bc5b654e5dcd2818a71cf7d5998259c2fdd19d58c112fef77757db2f9cb153828e7e744c5742900aa3aa3b5ea0f480884699d6d48f5b3ca072f2c69c984b271d2d7fec28e98b8e9818294f3df9516c9dc2afca11406bcca0207bc6e237963dbb257c7bb2d6f6d08a1adc0860c6d1ab1e96d3b05cc6920f0888e7fd52e6e44e2dfadb636307cd6d28fba0ab14a4ef416a46422e87a7bba934411e0d676b881ba4b2c5427b2e3973bee7c2dc66f380dd24d5cba67c6d2af699764975533d125c3e1a4c7e1a2b20a6b9fcdafde2cbc79c8f78cb6717dabc204fc31bcb40fed52f5788f1205570b5149100ad9cdac08f1cecb0bd7bd864511537feae1dc01c04516fce5da2d3bd93ac22505ba7cc668e66fc89f2e02672f651494ddcc1863ad43175c1fca2d5054589dff8833c73723b6a3e3d67c44d9f5f732954d5074345fc06ac9dba7774e3874c93f1eb1b54c29325f3af6ed6bf93cc0100e87aea21cf642ef01c954d32b0659bd2fb67f91636df4d7361e3183ce744af6750addf1821a817476814bb186342277c3e30fd64b45a7d02c8921603de2fa1b93f78dad58ed86aaa61e76f742d91e68ba8bf2b59433d23cf52bdbdbf5142000a528bcb1b73c63b6104ee9d5acd0e155b445583f62ab83ec7a03fa1743b5aa26a8a5de9c078613e043a8324f1b9d979c8cc2c14330aa77d02d65a08e15f025cdf1c3a54ce5e935473615f09243ff8f7e4ef090ceb22be60a0322ae3d46112ce7caeaceffa4d2712a3fe80875fcd0c447305c4b028773a54a14a97f7a3edaefd0ccff704d8862c59195de2d438793265523d2c035219b83d66acd36a36ed2fa31186e051cd35be6064f801f59bc33988be51ec2429921ea857dddf7a021fd5a866559311c1029c5f90e614f46a3c5ef1e0d3e3ad4b23b8060f688b4c7a300bce94cc432f8c23b50dcad2138464316c1e3f6d64edde2d55e1b7105749716203726b9a7dc65ea88d0276dff7058b76dba68a0f26507427e08ea976fe447bdc1471a54b3fe85e78fd66ca2cd268aa2a391023163636837db0fe90d5bb4f219f80d9e771e833dfc4a700b83b0562a3b7e70bf8c70dbc9d3335fdb810c610edabe7d908f844db644a65697dd4987417cacbdfb4ab81030034cdd9aa5cab0366e7a10cee1a8158bb55cd60deaa4ee71199eb88f276b75b24d349f4816b6e47467d9a85ac6bd3b908f204148478d172492056db1af7e56e9221eee4bbeac3a43106391bc83652c6a144d91b7d78029023651148a4e132b99bc9d0e985c6b7dd85a4e2f92eefe04495356031c80f05363b7b5e17e2eabad12ee50b6a362fd6811a3067111aa867fea9b714453a2de8c8e73bc836fe1111d04aeaf4b9ce57e8f7abf1d1d5c0ea3adda4ae630938f07354ea19294c0a26bb6648cafad62ddd74574fb327ef67bfac4b8ce74b2981a53e5ff4f37ea7fe33748b2494cb32310dc4f0c0bd4290c69a1f7f936b9502aef83e01a67f6f597cd8a5ba1c5671b7bd8225aef42fbb6fde6ef1d6558f5c426e1ec7b29de105423de9a8150e4c4509dac62452bff079a64805e7103525004de1b56529436d37a2a07f4d2d8156093fad57b7b8c6d39e7d46cc4579cffedc48a907d96407c448f437bba9eea55ac83665beb6cf1cb39baaa8290355e751470a9c9095afa1fb0999a7f31a0b4a92a188352026c848364067b21f33966cdb0b24955f28e5ed6d6d32c80a038450a6907ad5fdbe85409f1cb5393985e483f51771e8f006961f3240c6bdd133c7173d337fce8c8447c71317e6b00d77aca6d5c32cbbac85b58c5d8a329409e4873544904bebce549d871cd57762e24e4bcae22c0e41558a8671a49e59bbd709eea486e55ee32f060d602be35f171ab97fcd20dc013ffde683ce48fede4d65cbfec95b7201fd00de145de9865f2007af9bb5a7e17049597f81a142d40b5fe9d3a48c3575563ced5c53afb85c012809c0f6b7b2b8364f6c639d59f2f2973fcab2a1f6f663ee54fec0327038804b285a5e19c7ef101998173f083cf57e24e00bee81ab5c8e31f313b2d5f670b409c55e73bc6fce540635dff3e3432ce287151dfaf52f8d76c6a7fb30a5d9f12b3ab86285c32214e60317866a808350aa12a72f3cc93d1b91e4c3bd4ac3783e0263a4524b22c246a10682dfdfab42f21602af68b78f3f71abb1b447d4860d5897ded58099942f280626594a342a9fd018112fe68890b67aebe665c44f60a630638bdb716ba7f5daac53387ec230a864d7da4d57a0211ca6a7f706dce6ea46310f8753fefb0d630cd2212fd6f16074177753d6521673689d1027e9b7be308d8d04736c4b373bb5e75f3802b2be63d9ed2d01f4eacd3926a8dbba2fa53b080b1cf41ce11f99e3897f1d3f079c058d1e155f69ab7a8f90635446c770208e974fdd1f26dfde7b8f6828b126a3277a6d24045a7ef5877b9a98032b56b816339e146ff069d7c4705ab6de9d19385af7c11dae13d0098d24b8208796a89ecbb6fd56643c49b98d4fa815c15f26322a2d7e5b8bf487119a5b6d21c3bf475427d6d31d9972b53d3804aacc1d2f6d291d8c03715e21ad50268e144f6b1ab4111f4cdcf0bca971d96034e6ecd2dd66f904c3cb36517fcf506aab522f66443f6a89ab664b48f3531e386586e8c4d8651daa5d0a20425c5160b85c196229239557b3f0a800c5bd0740a7027c0366c240ae1caa43e2df0485e428cbd4326a02d9b16f8030965f51cda1b74febf0e8fb6481ec355674e02d2683bc8b2d3b932c06946026b7025997710f1c517bed029f6532b2cb2990f40b44ae800c5991f5fc6673059129f5f9a7ed368d1a00f1a9a6078f3b790cbfe900a01e35ff40f0979add36d937a397ca5e80d17b34a4331bd231512ecf064525e64984c8fdb6353713c3d06d13103411f0e74b567c69497ec85ec0b1828bc47ca60468e7b4f230047c12685b466d1de31ef04dfb148de4d7c31f47cf23a4bba02f0b3d277ddf8385520a8b044811731c221bab4d964ded9bf62be598c6aa78352991353baa5bdb2c3bfe9ea94c43684d7f186cfd2e55b62079025fbfd59403dc356791731760038e4e78691b6d5d328f20b129376a6cfa5eae3eff27d24e9ec505bb217ccfe6580427895da2f2d5ffb5cd88c22cc678fed16b3dc720c1aeaeac188c727a68f24e4dd316141ee93bc5eb426e16c271811d4057400ba881e3d8e65a6966d69b386bd6659f3a90fe6e553eb7b51aeef507349c3823e91264c9334f8f0e08842af562096228210bdbe1487ff70f7a82e7370a2024533ad936fb6c4bd36a60eb9b41279416ee9ab9ed09b162ce4c0f870fcfe4b2606ac23562f0794b3410ca8f19c9c0e38186f85e7cb60fa83b581b795e90eca3875cac1ed8b73ab89542a320f36ae46dd1ae4658287f08160fbd02ee06f7144e4b03dc00431d0ce0fda5838fd9f6a185780c36948b96415cf582dd7e66afbf56546ca0deae971f17812f8f76ced34ad6e77eeef0bb1bd0882077c83f1a016298ed432ec874eefd51a68188533f543b7336fd90144f7fff5880febd22a2e1b8e83304017127f401811f4cf7f6a10d427edcc86619f9990be470a008a586f995d63e729e8ae4c806dccf968a971c7650f600ffc270fee039de3b8ef86d5e0dee2f273cbc0ae02f269bc2691a7daae5f4cc8dda27d90d06d972965cb7e279cf34360207dfc146d3d0ffb015597c84ce4ed91350e53245c01538151a7f3c9ae239495a14bd821237941572f190412b29648aa464e2bba641e82c9a58c84990055cc4be037a84312f0e8e21a4a1d82398af46503467a2628aa8f3d2d1e258917c04f6c560152c529f72a3f38b2d0ab71b924d4819ebcd1aca2459844c7701de8bb643e04aeafa09a6467636574c0e2d116e8141ae539e9a1743575ff4443bc0a120f3016e0d1b15c613991878734ac3552f01345818d8be586b2c0781830cf94d15da1f71cd94fbd9973b5094fbee90b30c5d27f877597e78e4c5f0b0a11f4abcd3680908872250a1ac5f0532f8c3aa07dfcc15ad117ff0efd8c2db65e1eb1219964d3f174bad52648d55c36bf38a966fa2187b757e5a64c698583eb84248c161f96fb766177566965de869a7d10abe6e25ce2b1046971d4cad020788d81470be92e6136576f75f46641caf2c68d6133fd39c249174f9eb98b85af0a6fdb5bde004c33f5b4a996f5c9f168749f2a4b988daaf996688aa2c338f7f328d1e827d9e55d36814c9d11a6aa8825ac4dea4e7b978fbb221022f1eecb567f4962d1054fad8f1971e390b36bcb2eab18eefa4b56c5f649e84b4e3978c53b4f7611fefb97b15ce0553a9f2bcb5992b87b276b4d04a79c09abb8f5f1c5a99630bed44ac8ca9c0bad52176cde170af5a4dc821fa105c4076387b6bd78c8e18a70f460718e37ddd23c017730075d737f98662c56e512b08291b1d6ba7948b50252ada2a792d6c31ade36919c12b7d2ff250f51c18757daa532a6e031605fd6e5de9829c523bf12bd4f72efc8411dbf44f4f1c7c65606ccf44d006c26edb6221cd386b7d3c8200d14bc95ee4d492a70910e3cb9b6da27289293f574c01fa9a9f82f655d52b631be4c36229afcdb0219e32d774ca54b946891c24003392dcfc396f43545ddbb9a3263dc414f0eea1694f7b56bfc58ca4cc74ba0f3ba1b85a36e62d7f97f2112269ce679c517990d591df814739b944f49eaafaeb3655f7987fe33c6811375a66a6133d815ac14d22731223b598182265aadae396f57d485de769a4f18ee6de962bf8f92a0665bb971f33345c7add830d3a37901cc9d08dd32c0bddcb66b69bb223c9195607ddb3ba34c7c3b90f411267fb900e382c70cc49aea4ad48485ac699401a66925f78ccd58289c2213800ce0e81e66f6198131330148205002e19b96f8e48040625991bcd70ea5b5157e8813e65317fa85fe92ac861bec90d85f424f65a6bcb912a1c800d599120670ebfbff5d4a57d1556e5d6d325dc7d0bd51f70622359da4f1764603046142d426a93161f055fd7c29056f678cb0310f4c3c21e3a1b6edaa257be0f86e7720659d9f55065cbfe50f43952cc98c64f48b857a28529a2624b23647ad1805524e54985e23b832cfcd9a07d20df9bc17b2f80167ce7a7032e50dd3ec2bb16c9c8cabdebc892d4256e80b9d7ca6b058dedbb65501ea2f07432c24a0638eb434d68d12abdcb8ab35f175080b4e228a3de0b78f7426cb1478aa36c44240023b67cd6eb627a18d4a4666e28217d1dba855ed737980f0932580cd0c85e395f74a9ffd0cf0771e55ce123754206bd31925fcea72ce2b579add44c9b89060ab31d4a468b9b32cbe5487134c6a3ede56b9e5a837b72a2b8590617d6dc1b6b54243abc02450b716b94f802e141aeb9cebd655d48d1772c7b959500e0b8cac41ec48fbfeb07e9d10fab2ecdc1843ebf60f50151d030021d2afae4c11eaa814f279825c059ad94b9f341fe0fb08125f0b3e6bba8e2c96c2305c9f32666173399482f79c998027497ae649e237728cee6ec70922230269bcd853894229f2368be5e7ab7b45c321e6c4c50722c188fc65e73edd9a3ed64a71e67ec3caa51b7a8b32124f59d2ae12ccb059ca2ce7bb83eb327f1110cc4ffb3c96749589cbf96507e3a9c6cefc911f07dcf2476784a5eda06dd2d38b8f7c80289c6365f46e9667a466b6f3068920f28ecc37b9d28817f2bd40303174f72cc285c40f95d5deffa3b682946450ec8d8591d69ca780cea80f2ea3cc08b7a5cab34e21ef3c66ea2b025f349a20261650d18fa98c6a9c3e42a2b4c63df8be18b7c7937ab5459f402ec95e615e8dfab3732ac73a5f5519d98b4e71b5613f77c26a81edd30e64f89f3f9fc0c083c32cbfd74a7b6821a19b95a356facf0d2417f8df3bc52b33138737ed2d9033356f59eaa3a013e6e059022e3f34c2119b63c7b288253eba857f1c8b7ab41091a11b48eda49a33aab88f3a4ff3a70ca7553c9f08601a46e4a78a018aa7dc598540e91cd4dd4ac5a643cfd790e6990512708e8d61daec9fde23b9b276a237a4f52dcdeb3a8a35f4b3f759ab087e7c0d7170ecb0e57abff6fb052520b107a674b1fc38af063acfeb9dfbe7f8beaefa3ea75205ce7b2f69eee6775846f3eb2a18329b33a47b0c9cfc3f22fe895013a2b88afa6de6bfb980be92a23fe25d636dcd82a9ec64442ab82be5c3bffcbb7efa1c85b1823de0a0d620e5b9a5763e46a29de15197230ea43ea044137ede8d4b93d1146c2937c0d4a82570847040407824b8059457946dc4def501422d1c4270ddd96c8e03879adef1e0b2567db3b3c1e486135e42685b4dcc58c6e1869cc39d3758ce591c6067439ff33808d964673d37c024159a913bae42f835d97178a41e5c9c78cb48e6336c6797aa19a443389ce276701eaeba19e2ca8067aa534d5d9ba2d2c778efd7965a171286fa7b65ffdd95bfe5c7d737118d2ea1b161ec6f00ab57e72034f0dc1fe200b4d411d57d6e896c78814751127adb453ec0f59c0a4d92f7882e1984d2e1da17be3bb834afa145f377e68e8a03f94f4c979b1e1a2f0a4f3771767c2b1c0e5f5c03b9e979ba1bac920b22eb844090c040118da9a581eef3ac3212ed3440b65af57796fe9e2153de2003523e595cd67ffb2ac10384af7cb963f8046a88b1bc45fe6563f84eb5dbaa092cc6cd39fb52eedc03513b861d36d019866eb16c209e37f6769b944a872aad5f3bc591c559a1a5a96d5c128c305d7aeadb56428bba11738c2ebe28952955c907118628e5105f92ae208a393593901a28b536b7ed3cf66a0d28446f65e648033da6d5a0419538ddb847e6d9d6e742a41ab459f0f6a88d29575cf2d3e5df017a6881866983cf3c750e0a3d062dbb5da925ea0e44f69fc9cbe94015b34c70a4ddf3c0c02ababf78cbd0b01747108feaaaac3a0557c0f7215f0da97bd846d40af5dfa2453c24c5fc77d73f7fee9997501b4c7087c4a24c0a91212475d0c0fd18fdf000c28c3b8b0175c3ee12bead90c7ce41112f6b366b99f5126a081bc37e7e06c7e2145cd5345b2b83a62332f21d8559081301d98e95663a75bb6d3ed796ffb47dd980c35ea3d2a5be1232876c0c0bd2b4d12bd4d3a6a5beb477c4255c57a9d14427e2b4aa298955da65e4fa757119933c0a1f79d8fb2fcbb57509bb77c98d2c2af5c2273b486c051c9a623df325238f96b9bee5bb0b103faab72f51690f3b7efe7d53f1b5f4851066cccc9f6e8b43e8b0339149748b1875362182a0407e65b1563be720692f84a9430214fc5e49454e92d9c67e664b81842147032e893b016333d673ee293ed2a59a1b51b9beb76e6074241873e577ae7f26400b8d94597be495c4f251d7ddff18d9225d19c048c7e65c0453574c3b817fa8e173f729bd2480e873b2a91f4f9d298655be8da2c3edf5e2844541ae744f1e56fd6c1973c21150f0ad93de83feb1e5f59955bb8e90cbc4ab7de5fdf55a2673bba9bf00f17ce26029629437760730709fcbf73aa4292916c187c4995969e56d1edb9760332688ab0db2c1bd21b9eef48f1a16cfbf205b4ccb27452baf1b841c912fc8de6833dde2e1da14a6839570ede5966655bb17123156bd8f95ed0e146f6361ecefa022c650f061b174b637b2d3f328398f761e128a6e121e0221decebe2b25432491b4afba458c55afbd15817506d8f3055b60fe9ca0fa3b7cee48a6467f0cda20e9c2777d2eb76330e9ed8d9dab5596bfeca3e2d49f3dd8c36f542da029bbf4a13b114c2d485a65a8f53da6ebca50ede4f8af1587422d78bc63de7f10b040989644ad814f8357e41958d027847837e615266c34cc89db1164ff742e068a9072a5c08d3602607b760fbfe34d74e87c69f43bfd222472a707da8f33ca459a4c08d9a1cb1870bb14605b40381d3444ef1dee9437aabe57a3464b6dffb58dbe1b5abd6e35fe70976363ccb5122e632de5721ed1709c5c8ae98ff488ec234b9d4c9015c1ab758be4a78596cf58a3d631a2afbf67381dffa363682038ccd3c3008f2eb9c36a955442a2347ebee980811c14529db840dfd8b2d0948b7044b6181b7305592845134e950664f1226d96edc5aa58211fd9fb1cb364fce27c1748965f40dbe9243dec8d7f3f95419e2d81270804996edc5c226b52989ac98011d9998c5815bf1775b87f6419853798b1f1e71c7f25e75d315fa682bcc832ac42adb4e91f04689f393ea30265b6de9e5f0432745983f40a418a42aed0867dae3a61a6ef394da8080f17371ce486dc64b0858427b241a922344a8c9ef9e9da2a6ad868bc8a911dc5b1c0981f4bb151d80d2f051c20468601cb523c75c72aaac40c25ba11635b679c609c6a0068963bcaa5bf2173a4b04c7ec4fe011d231cbd9336aa8d407644db39c04ef179e4222a0ec202a7350a2343d019ed1ce1a27c04bf98d1f223fffcbffef712ca888ce606b56417c760f990a2dc7652e9107cb1328b59bd2344213a08a3b3b001d7d21316cbbe7b1e834a87d75943f35e33e4865aaba80a35c218c1d62100d9d3ccee85441e550e32d3c543ab21c78ca382cb8ee776cefa632184765fe2bfbd87079c96c2dd97a4524d1527758e2794001b028357c5eaeb921d91de00217e2573e47751e28ed85c33540ca20328d010f5fcef2e12f606120bcee2f995f839b6ee61ace319318fad78addb5f6c3846a71bdd590df03c682397512757c03a48e6d276014437fbab93a37e416894dc58ddc0dc2b37a241b5c798fef52419f893a1929616255dc75578e554cbf9ad4cfa94e045fd323a0bfdc12f7ebcd72d8beb7623fe6812211a8c6a504efee8dbc75292a262bd752a738dc7e5f82d73780247782b5b9d5382af43f881a2f3f66a4daf25ef4eefb5c3c210062af0f385224a353f3bf31e13ff337c714837e7849a8459a819093d5fe93b2bcb533cdb921fc91fa9dd625344967b0fd320db4a4428b4679e4c7f3925150f093108282bde68b945045fd47d60bc64dbcf4ccc64461a330aa3cea7b37d480c9e384a9c3d862e47fa04e6098901842922384dfa22de236db3b20e5f29c2192970520923eebcb88b3122f613b803a08177daa1e09b6032c5eb72464f6cc699e7334cf3db706f1be43fc6e4f731f43031b830a630118cca8d7f53dbfc3e1fd5a12c3cf822bedd3d1f4f7e019e9774ce7be46daf80994bf7a055da298420491d1bec2aac584fba6b7627345548d5a34e73b54d7321e72f2b7d8603f760c365d5ee2a52910d57d1780e36625d69a57442421607462c48ce5cf81cb0e950dae9a7e6a4e4b643535d65b19eda267d74c281845a8b8d657a807fad9e7426d58709abc266ff665d073d2beb4e06aae5ca45fddd3e74d5c6c6f1d3d14353475ac9f0d7cfd695851893ffacd129a4369a24021e672c0df44a03daa2e776964b257a6a7412d0e6fa9a89c66a0becffa9031a5022b48ebca217088a09909b4263e604decfd0dd5296a7275983a1ca15611edb06ad11a79615bb003d47fdf729e0dc7efde3225dab8276c4a11a53afd84f5eb613eae20710e9dcf2d4e6fb6365087821d11171dd88059010b2c392f9b44a60a79133c2f7efba59cae3dd64871545f7a48bb8b36f093c549f5c5a52d09f037c367543ebb999f9f93e2ceff3929802a5eb0053bcc4c1b219c4cbcb1b161ba5bb7af5d6b4d9352f21ed06aa7733aa26e287813163c2b813e55bd4ba50746ff143b696e396fd82d72d229c0236bccdf78b6f1d7d9afed18b011a840c8a284462bdd2a22ac502c6f3621b497bae76bec6c12fdc393d2c18edaf2173e64434cb95bc56501411d0475a8e8754a56ebf7f55c0166a71a964df3f6d504c78b266c106686a01d03f0c97561f201105a3f1afc7c7b1472c58ecc2a5aa3c5349b3376b34c2d485589961166f02df16d9022581e865f21f3fad9c722b1d586318e5372bb9028c86b209d1d2a90f18fed0ea112409c799362a8b8bb33bfc44a0ccc1192b409011f6373e0cbefe75da5da3aec4668c2237d7d151f85049a08770375af4abfbb6bba017ec25bff1dd342cc68801c41eaeb9e19807c6e1fd8ca4c904770450b2d19d74b6813969cded9071a00833f44da12616d647aac9c8f97d60fe9692c12eca0821af10ea8058fa41ad91d0f0c276d88671eeda61d3c788d460e5b76c2b7c248d05418c5f39f6a8158a698260083316a9b25bfce271ffd16443f3c547a69ed497824cd976747cee1106ad0fad6a20467ce14d881bb2a146390fc59fc84ffdc5cc750ebe590994dd362760d060f5a050d0f43b90774810c9ecca40e6be3e19412cc1b44c3b97198bf5e46e095c2f913b2bec70f1c8cfcf5bf74a9594b052118c4e60c9002b250ea2f9e458f6502088d987ed21d47d27b5880b175cfefe924af8dc146d86dc668ddd104beb5e4291de152f8d97707b7bc2cbbbd295cd12700fdc54632cee7adb1adb7bb980cf1adf85b46201da7a7d4c66de593ab0df1555722b8575199e81e0cc450bbc0549422c1d84ad6bab98d5c1224f3fd75ab31911a2c7eb45f916fa231a687b13ac855b3872cb8b3ed8837916a124381c499c960dabef65a16f51059ddea9cb65bd509d9f9048b7af09d5b04d449eff287f02579ccee92a9704ae7ce78432139ca7b1ec98b42a5addcab61dc02e527be2d43fa736e0959203150a17b95ffd03d851f99ba915b18b6a85e32b3a2fd500b81615bc149ad301a03fd70eb8b3cb33bb799e01a1493e36facd0cc60fffbf23d487e6f5d2012437964ff94720f94e23a7807a361489c90e855e29adf1db971c8abd4e2781121a00206dd4996c38f130845e7a4b57db0095329fdcd3972d581ddcf62e7c12c0ef55a20cd0bcbc4df8270892eb5b1cbfc84c8170bd2a86bda896a06f3466a7394268f4f694d0ad31eb200fb10d6725600e74a8126cf692819118838bb1fa2b0fb8f8a53b89b41497e669921568f667d1ebf8a2c46bae348e2db95b4d2c2c8b0ed86c65ce46323f32fb126f72d1c571777dcbb935db4d59d993c50fe8c408453a465f058e6810a353029b6ea085c0ffd0a4b831c5aa52cc0ef071367b7f7799afc7c402d36ffad84d99f037df200d596316d152b16ef986dd0700ccc23d11e8bc3835c0b3447c3f8471e97edeb42c5dec0722f2c65d9974a01233654ee2cee40a8511c440439fd70e7838d57702cd543bc40f5f808213e29c7da7d0a9cc031db8bde3601114167d8c23fcc631b5bc18eda877acd4ff9bfb5031994f2c30b3c6aa13a122d17122798e93ba11d1563aff6d7d831f28363e96940cdfdb720617cf6e023ad027573ec7f3a537b9ce03b4f15a22af452b20cd63876486c40e94b01d67799483fb5e74280657570c4c821da0f5ae7db68416d7df88259db8e5d037e1b749b0c6c90174edf00030a5086844bf25257b522accf5cdd1bd45f82ba10001e716f734ceb72b2ec2b557cc71e30814498e796b4ecb3e7599f13f832b4a5266c477b203877946ec6dc192a4a8ed2da1fb2985c056f083cba063a5b95de2269a97ff9ef6b97bba42b95e8c34b34ada39ef2904e9a5defe9728932d489e66c56e89c629b159f6405d620d2cce1c5c865c3b97331d34a952777c22ae7b7cc023bc52ac108433ba099a703381a3e252264436960f35350244336e0f7af919d59c688f321ef656311d30822f2994a48de0adfbd7a2cd3af8dce7339c2fd41c464bfce575817612db5c656ba85c34c02cac162ae4be43a3daba8ea1920b99632800c1279154b108d9f1f93f2192555d3902cd3901f0891f7fb5911010507a6034bf073325bc969dc5accd96b046c63b04ace017ab9fe79ea384f15233d7947e0ab4e4c707a162da07fef614a3b70fc0349b96ff3d056d089dbed713dc85137682cff98333c221458b74f3a4f9365445fc110f1bf917c69379eaf9ed4aecd1d7a1a85bbf10fc411380aff31f68a446b287fa068334d0b98afd7c05c5c278edb9990e486e413f819879480fbc6f4191054083863fc2ea003b4d277c55b8a86a124e0fd7981dcd913a8047d06e81ac9df19bb6feaf5fbcb80ae8c5b1d98858e2643f07665d9ccb61dda46d2afcb907d8e359c409cff0d6bd710a2c59bf0ee07fd81e0dc8cef64b3500fc1759fc9cb05eb9033a39821149b9a0e7c61fc1f7e9035d09749ca456a781a3bded4f07a8990279ae9d1ada72efcef4e75cd7301d7bfdb17e106f8c6c9d1160a3b075de0c6dd95de8aa61da085c23e4f3889b7a9ce33d66a7c3dc498b31d5ef9c4160c6edbb9e8bf35021a3ad5c694b31f2f4cf452909e78de87082225350d77d0860f1289213a4d4244a78fe778b769e75c92263cc0b3fa2cf90cc47bcb082842ec9afe745dab1a3d9e16fa57472590c5daaa9835c1a51b8f0beb3c78b807391fbeaeb21fefe3c31e194df5b0d4781d0ffd49dc163ba531ea01f8dbb6203ad6211539ae45b355d215ada8c77c6e83fec10895717400817f3a8d2163c90e4a13711941116eddb20db71d23ee7363f389aa1b85162705bccdc8d0f60c31741f189341dfa66a2362b20c21ecfd23eb2f204e378ed26bcb733824342f636f7f096845934c07fe1e414b98dafb9dec2625ca2b652a2480f7ac22e4992d77cfc55b0ab7c8ce08c4d2ba986bd9a57da5003f9e11ba038aa974a92aad81a142620b10f768ca50b56f8774dfb43c313d02ef6bef1e11d0ab895bebaa88cf38a7864b4312538c7885f0f07736cea72c9be760d8b3e6a8f56b4115cf393dcaeb305cbf118d556c94e26d0e66cb23d1c8b4b51cc7b914f294ff4dc2b9118fac20c0453815586795f164332295fbdf969b15706fe1e34a03ffecb529335f3bfb922f635817684312d076e9e6e4eec5893277c9e72d0e289533999538cdcb6256b3986cec4349d90b6461a0943a82685ea4ed43171340a149ceaeeedc26f57372a0d3a5171793a03f15def36c510e7dc7f91ebe1f2bb3cbf12e79320d52311936dfae6d6216d341d9abefd92dd78b9e8271a0e93ed246b129a3da4a96dde82602f84024f34b3a8b65e52deef32387612c3b157df9e1df484fa1b6b8f8c7491592578262645f5f1dd0ab31f099688260cd654da290de13833d15b79db82a47c5798197caec1f0bc4dfed1774185e400489a7692c619adc08e00f5b08e45f90637f15026880494c5d9dfc7879e2236b6e53ffea0685065ce7585f9f174e3feb68f65ca99c443807f02e2c2d380d44e6eaa63dbb22ca3cfc51adb24ceb61e3b6ee548118804c4f7dd01d2c83b1d9d1b1ec45aff88397233a14a374c0a52d8d130f8c8652421661d1b1e6fc5c04025c1ead36eeec5af9a873a3b421a4eab094390cf8fc10ea04595985702a3f56615c9ac245e6f49cdd6a64de69564218ee582050c494b0361e099ea4b35bd4e3d5c088f385a27c80d0e7bb483dbbc9d7f1ecab60c79d3882b13f5311e5767c0bef856ac07cb0e931ee1f523000111a9f0b976daa6486ca302f2022a964f6cd32ce7e4a9e9034f31d22fc3298aa1e7b27972e8c97d3349174e6337c8397d613874147dcbba0c350fdf8271624a7b0b791cfba22509c13eb7e183059f2108c7d066222144c9d6f3f31d641e96f8d6198a223f3f5558f562feb8c6aea94f1883fd7b523147b40e3b759b92e21867777ff4fd9dc58177893e6a43c55b6e508ec4592a1dd27b7e9d9dcbc10e8d1d1318d8ded64362d454f698a41e822bf570885f428100f0a9497783890932bb2d6ed389824ea8dc226e003e982fd08f5800cfb08cb92cf937a3140730cf2bc4a15f8481a75f7134805553dd878a54817e282e7f6e7d4d74d8bc01cf65611bbe6c4eb9835e7803b5abf56df8bd6b33cbaf7913c2c95ef6f525997e882c758beb5bb7136c6384d7c1bc9c7cd29c39149b15224c979c32cd1c000a753400a0867c0a372979d9b36675359c10a2937190c832043357db409113f65d4a7909b35aec5c28aaef7ade5c4b2d15462a924756f1440c1d4f62e8c4ed1d9ab859864bdc321ea2b0aaaa5efd3dc5862c4cd05cd3d3b4df5b765fd13339578f35a1876009aa6ce7a1591869739ea26582ffee55c53506e2928141894da3a56e88ea1b42257ff9009075ed15719ead1dc818d09fa5e9bd36874ab1bfd57899796a21e32bed00cd72dbb408c9cb597ecc8553434492c448808d28a77147d22227ac30485cf2b48f9b74d92508157ab7a8fc430f1de06136b8a1f968607e911a5ff32e9dff1dc49d5aa4ce2eac5c4c859e22d5bce7171aa2d43e3bc78b82999888aed22592f6283eca93e89ce03933a935d132405ae4be35fe003c0364ec7752374bae31821bd5959fb7e7f47e8f1a5acd73b2360f73bb29c390e6aecbd8d0f5e339b7deb6166e0b3f75b3c05ef5538b023eb273fdd3ceb52612848e61acf89ecc535c7ed3a5b0c7cd950de152265ae80571250953e55b1f61edebc0121f4fa14662eddfa66d8ff9138441cdccb598c9d7adee0137e1a98941d772e99dfa02f620770e16a9bb9859d992b576e6304c61ce521abf0a31dff4301ec643154b78cea9f4255d8e437d5036953d739bc19f72b34804b0b15502b56104bccea9d4f1858b3df1bd8342dbbe4030c7cb7f481780ee31e81646b51c19108a8b4fb06737d98a5fda2663ae0d4302f85062fa3e762d493ca35b55e3e4708e6eea15a3f4e1b83c4a1005fedece4fe3b774de89ac13ccb4e1151fc30444ca134d0a27824a10d6a2c6685d2556af427d994b918a68566595b997687166f5d3eaf66f8e1b9b2830eb22680fdcf7980c2e7d50ef16e13ef55a932fbd62d200d6920016fef9822e70710cd9675d539c7744ecbec8faddc11e6657e7d12781ef7810be731e5bd3d8ecfb162c0098718587500f5f6c52cd43a3aacc2d924a466a2133968a93627761906ee39659804a1892de9711bcb9580e8fe8364b211f6309d535e036ed2333f5a544ff05b9a5eb57e1a7a96b7eccf616832d81bd9a9c6602260f6a989b35a8516676875534a3e64f2f640cc6a5bf694871f5b2e4869271b2c29bf8dab02890a16f65619aa517a4a67af595f7d20565770443e235e15376ee653ca0992fd9d739fbad6b996592b1215ad01356d3157aa5812cb5563a8da13b6ab83e4ee8159bf986ddb5649ac6fc1d5cf28976afbd9e286b96c5b994d7a54a6b36fbb480090875f6f98a7a2c378d0fd7de51c3a86005de79cc72107947718410349cefca81a44c7508fe9be4c1551ff13938fafd94726d24a36ea2eab1029461f7ef1d59de7296af133ef43ef80ed449907523946a541bfa8d69e7584af53de0d87df48d46ab98a442316ce61d9915246d07d15e2f5d1912a615704d11e12705deb4789fa738c0010630eaac23ab2fa6b1f07edc8cead815ad4c90fc93103267fbd4e5596a0a5b33a7784d2a562d8841c7335778825153e2d070c6b686f27128dff1cab1fdbf2bd6c7cf6480de2123d0a7410d6e791fa040f2845e5c66438015313c09cc50db7e8777d480d65f3e209d5c75d8c4add3920e2d680a6d2270aedc6eca9dab71ea3612920851fa009397c744f6a051965ca3883b7e29307c95d33e0448908237e82d61af266158064f26f622b6973487ee9a115c0949b8b5606ee86f58766ea71d069677ee17b1d4a19d5c49560b47c99fce234894ef678991adfc130b3b0729b35bacd2d80e395c0b7eed056e2fd90551c835710d118d03c3cb09f6946d462fe88adf10bfbd9b11198e3469df724a23889cce0c057d7329a047645af856b63448cb0fbf2884c014985924a770fdc4bf5537ddffdb59e46f553591ade6a3478d875627b6cc997eb22c5073c9a01707d6536875b199c15d6460ca125a808c927d47fd5fad7836c63ade46bf55061117fab636e6fb8bccbeb8f34a2b152651da912204596f5dbb10086a54f7b63e56766b32cdd21dbc653f20608d28713824acf3178366baf3ee07dd99f0f4079e15fa296fc875366b96298d21919858f960cd77f1299ecbf565ec4569eb677da7f4e81b0e49ac81c843202d2142bd9c8433e8d327168f5b1b2aa66dcc3d630ce61c3a74b496dad7f1f982810563b1ac765c30999bda31d7d99633ecc9072c5ddbc42a01f123584dc9344f91f042563c165c3974e2f00d09bfa79c9037a9855e81a08ee1aca57000e52e5d5f84f88ca494ce527bedeb21c443e3c3bd4319d7bcc072a2f4b624035d3ffcc658c3fd67d77ab82a7f77897fcc05294213b951868d90e0a3253ff948ee3a23dcad5515f0fac76512f3649b4472ac3a52ab84eb5044077e2661e1cfe326c3579b0af684c1ada90e31d1062b9db2c9fa036d9502d3c7f7be6a49e39b8145ed787e2c34075336e6c3414d6595fc42c5c31eec3a7571aca215f1f4069f09d94c350300c57c5d48bdac8a9a664f2cd87f7681023f52da84f8b283c0410caf94be6a1768149925ba4388e13edda384550fd4aa3c6b32888110a42a022774948f2be75f36801a0d4abbcdabfec0e3aff19321d4cd1b9940a2331989c5e111a61f2eb20d1e46e5b861605b10a88d150119f9e99062bd7f5afbd4e617ac7730da68bb006e27c46e1a6c57749ca14beb1f4872f31dbb19ae568e12d427bff204455398146c181288f686a102cefa45072c7096e6ff0d298841e2c834c370245132543c89e8505482a39982c65edeeb11721b16c1d3914a17b233128fcca75be2f7e47447da20725344d6647b3eff2087688d4bdd4f127f8e4c57177ca1472d25494512d55180339b2567454e5b7a5b67066694d4bf298a21edf1d05b5a120353a66c00f701a9e43fe8a05b77e0888515e9fa5b25e81e21395ae7117cb5e9c8524dfe387b24203727f7eec6220afa296b53787f1a9fb310806da4a757327c089a62abd603188154c192995ec866514d6eb76fd5db96cc6083df8f7d36f72dc3940addc96e2cbe858e099eb00b7e2a6d429799fcf3f6e656a0dfc033d42fd43ff7c66b5a67b219a651524f24a85b4515e056f3a343ce6a8547ed24573d3b9abcd354ff30d725bb74fc365feb490d9c0b2390dd3f2a96fd3824d7e06e0d000aa20e00f77898f861b1eccba285dfe33d65d7d8c2f29a56d666cb943dfc60547dbf0140eb941673fff0a2936fb2112f19361314b56047087112fe244ad8e8a120cbaf6fd3397b663f217547ce9c6102f36c99b7d2c3107536897ca0e199836e9560e2ca1856d8b791e301576e45948817786c15b9156f639166e992ef3109eda28f2c29abe4e937b4f10a85d7c6770ed2af85dceacd097e73cbe902e368f36dfed210f93394ad3201b04d22580464baa075d68557ee66e50bb154b2ad25ceff5feaae902d507b8834c0785d14af01ade4505244a02a842215c81c23ccbfeca76a8c4d8eced2133302b60bd6702e9f8e19b2adaa2a4e54007e4e0608f9ceff15a1125db0f44491b29a362eb1c5cf0e52e28e885310b56f0b461a3d15f61870d740269c719a098ec9e3748a1f9c1c91b07150847692ce006382df0d5afecba6d80f496c997cb8785246758d2606a697086f607da42e6116d6660b62abc3a927a803a3ec96c0514ba7caf6a3f9ff6c7a0697c7f742d4d59f0e793a01dea4958f6b0ba6563939c67bd639d355ce2d71ed1b4619bc81e5351fdbafa3d0a5b8cdb39c4cbd5e9069e2e8255504d9f6eb288fb868d033c02357632f1a6a809e097912f1ef8fcda85b44364f12252c19379f6abe52285be9c77a07678702930e9bdbf975269765f87b6f8dc425319d632cce2e4b7279a5a88d62eccfadd09bc0ee634aeb56336a59bfab4f800772c3fad7d0aa8f9e3a7a7e3cbebc61be0416696ff72fc69fb97be47ba129362f6265a199a057c5b68a4aa58b95e9b8fe9ecd59bfed013e98074cf0d673a7afcac0054801be3ebfe23862dca74397503773e7103718b34aff2772d5fc4a3458fe114ced375470ae6de01961e99e589c2da39c2a9f03cf9eaf403ec9b4d57f80cdf08ad0844949246d4f9b9f76c5fd877c7b07146615837dd6c7ba1d29c5b492bda45b4f56442cfda27590c7f4e9d431086abc2e49834a403edaf88449fb31975f82e143afed46a9bd0f4e6f0b0c088a2bf800b207addf40bec27315f21de0f4e9b008a4ad019006f617830f7a84b3857abc2346341230dcb815711d18e7d1deaf34956bad665beb404b0b3b371e388a741e8609892d3ca3c12c048981543bc78bb3f73a4dee79ab7b686a994c6807d5d3c192004815313b584093870c04a3b48c55a3c5e4d1c4e4cfe9a195f873586ee8bd6690241174d9693e0dcb307af8fec1f5ab13fe161369787973227c643fe5321611edd0fb08ee4899964694ffae60d716bc9c5ec3156399ef4bf3df5fd6c73d66b2f986dcbb37439f47166db10829685625b4f4144f63479523b4a2cb0339f9f93e50d19e6c13e235bb5e2ca05ab0150029e8c232a747e1ee24773f5abdd0c6890b2e6e574874c7237659f166c6bb3b816eaaafc5f235c0eaad1c773994a7a4e1e1b83c3dc4e14852398395eb25c6e0c5e3be5cf535ace36ac236eac518021806b7a9b9ed07ff18f70727fcba217a2d70349c58fa990e5aab6d18b0ba52ffc7a4785777cb6204475811ed16d7d7cfd92619c8ea91ca285070e95be12849b59272ac413701f620c1e66983d1e1bdea3bb655507babc391ce95cfa35cd247a7e32c5d7a954c44a794c691b5d37a75fe678710a4960512d12e5683140929209b5e2a9a9571268531a4eb8afb761d1f4c9131c5c3092af9fedbf57e8d5ca3f94d1bb712d66ba989c4485a7d9fb29d28244da1472b0181889e81de10bb8c567d8ca22bd1a8f39a4a29ca463019716cf97c9c81a8e596cb3deaaa6855d37ed74e8463cae2272f0536050847d448dbc4de261b7311303f89d36883927cafbff36f794ca9a6fa8fa0a208e6000109496a1a2d31f221d18c0b6fdbffe7800bd9448bcc9831a4a4347d0411b16f70da15195913f5f72c162cbf987a47c8fc3c83e1e3b016d50c49527b61a5306fac3d1178283ad6f63d480e72cd696b267b84aa21ead68395deb1352e9ec2e831dc7e75b66c0b00d0d7d9c3a4abcafaeedb0b27fa03fa62abd673eb042091c92968c4ce2259057f12e2bef54ed0c986a16c51495ba6a578a2474ebfa24b7907ed1d08d395ea4467d0097c585171aa013a8d2d24477dbca3b893d41fe65a8858bdd893c01a53336a847bc819633f3ba0ee51ed5f346dda7bd9e7f3aa57424f9ff93260dd057520fd73a24c1acf5be21d87f783edd1f3f639851c0bfb3e2bdd6c91928e07c13c3ca331d0d87a94de1fc247d97b33cab9b979e114ee31fc86b1270a45bc91479f2c9eb0f3af1ccf2e39365e1c434ead07c7b74e069d12adbfcc2536485f5fe3b12a9b661da56dd66fb3f702584cecd82dfb9332b8fb7b4955baed493095a50612fda973b2cee2275d89beb3946d578932ca367f08b5e05910a2766b36cc3e43658cf1a1b5dc8abb484ed8709765b854e25345930f974e28cbfd8151c5df6159d23ee940da170b4e377f23105da5c4642627f26e588d815c12a3370ea9719ff1c67a3681e5a877fd6c06f8b70d139bb064431ff58afb07d7809071906f5b8b877f01fe91098b995f6e58685afae9e40f190c4f3127e7d8caa111db49d362f4e19e8fdee5f9d0619b42f2c9d278e692b8bdba6950c52bfde636a3526ffa4b3a30f243dc817c846a5b58a83cab372d9e646c7c8436a2e52bdeed5d162df92ee0fb09008be239b4cdbdf1d1009ecaca4935e32b9e1913df1d546f88ce3e09b076c837adb4e1367f3eace90baaf88a70b21e3b369af602de9cf5e36ce056aea8118a70307ac396bd88ece6650420628ae70902b54b2244907bc2705ba2deb80141eff9417006b5cad86210ad79e7b29ef68753f34365bfa5a2b0dc57e984900dadb819f68f61bfa19d715cd1b29ebfe43192ff52dd85520a3a76b5f996addc37c55dcfbf9975123d6240a167d05e218d0e6e57d04ca51bfda27b479cc9c7aea3f03562aa1f1078d3543e75eaad10acd99efd7ee72a75a0cc2444cb0ba0a9039b254e54aff9a27a06fa9c5c182b942f8cdd70e7a12f34e4da779c9aae93e8cc6c3fdcf69d67b02a0158ded2a8e6623559dd1f5f8b7bc22624ad661f8d3d730e692b90f84822201991fc9766f6af52a09cdb34c54bd990eaf20b392c25d2ae5e9e4d8f6c326ff213b2a14440c473020cbebc119c128e5030ed76da1c3eb95fd0dc27f875774d05ed2751e7b645b0803e5506164f17f2b1ee8d7749f0c0abbd2811ef32397f06e0e5f6386aec3042db63847ec45891e0fd65b19fcdade8fa7d50c89ab97f864813efef433c4b210ead5825dbe966338be571d27f493c121cb2dd0f46c65e657143455963b57042e89365687ef87f837a00384a8d1afed7d5099c6781834f0909d5073fce66725238c9b215496a1578f2ff369c9f57709618b82d022aa78fe39465c4153a6e265edd2598c9991ea91f5670dec79a5569c96a25049b08bbe42ef8e6688a3ac09fc4ee472845aa515a8395590fedbe9fc2ced9d3856b286b3a8857312bd074a2a714133c6478bd3968a2925fad7ef92e9dafd149177e40224ebb90d63ea86034a385fe137150c730ff394526c06842127bc3e71fe7a8afc8cb771f324372b54ece8b6bbc12a36ec04b14f1e090052e1ea9057868705d17f39d32c0b5c819b9bce0892cb352dfb594129a4a07e57406280cb3722879c3bcbf9acd6d86c37836b7aeee5cfb3e6974d12e7d4eff243cc2e42324f28063d5426c84091c753c3c2afe9653bc60cf1388c8da1c29d6a838e9f794b1199e8faa8229ce2be963a8fa60080023ee1e9e5d9042c99d393c884bfee7da88cafa174a35964b6a793241cbafc6293fb0a466e9fd9a115306184295ec6f28831c89a5524240c2320e74f878609db641e4b386c2e60920fee5e2fdb5166fd2445360754b8ad5098e9f3530ac17b433d50f8e93fdf506e2f50622ab9d5cebe9b55d3ffafbed2abe795b428de7d1eacc48a14edf1ccac46ca03d757d1719cce812340ac4071f98e6770f73cc8406d7752f07fb0fcd9331df17cb437724922f39a19255afcd76f6898d00235fbc5d5c0ef8e86ad1cc0b43a5efe4765fae1a72d985ca2162b32738f3e13d4562b624a33484f6e7b58aadee0f473f753b31c3d5b249c1b98049af19a1cf1356c5f45fa514646a6f54efda864fa6633801097d58a782447990b4dc23a0e187a66c45c733f1e5bfbf6403abf518751ca7b13d5872374778869edf1dce00b778f12e861e3935e123c4191640ecfbfa8e3107dcbab2fe9dd606e9942108284f8155792131ffe23bb90a5576df790650300fe925e8d347cbd46de3874e0744ec4f83337c462e6b33ac73323a488778e7e1c95f60f5ee5803d486837e05a7306d99c216a2120c54f656f29f2636814c858a8ab237319958640eecc93aeea0e2fe3ba51f205b25419ccada06c16abf1b2bd8624895ece1b6bcf9c5e0bff15051990aa1926f6d4e7b65ac0523aa87e93d8475e335344bf4855cbc848cf9b3ffe03c33d068355afae91a5632aea4db3fed9a25971472245efdaa5e7e89dc9d9d7aaf82b06fcf4d270df981646c84d3a52aaf07fd1fa35dc60c141bee5b8a5d6b837994c0ef9a93c89d40d48db1a92991b37855bef0ebddad40d9edf4c0fcb9e393aa7b628ecafa72b7237b6c0f91d63fed083282129638f84d5ffea376e3a6b60a7a2432c3a82fcf5c118473f1bef98bbedf2d972ec7b92b9495149751937c60544d66f2ed1d486cfd4c40719049f7bd8c69f6d49e56d06cfc4583b673473e1bde5615822f8251746e01fd6b0845ac4249de20c87e272bc19a34bd74517d640b537af6a6cb33b3b6e6fbba46b4a01cc0a03f2a494254c94d8a8b4ea17a871beda3343de5d2005cafcee41c57b5a802c57a3f30ef9f06ce1ba39645e4a177fc347f1b3402f888bb0541ba33bb4886346e43835bba5fc8ea2c76c7948678b7d9c5e6d50941b81ca5052c6fc1185a8cb809bd4be207a8ff426b5b37d7dcec51f32bb977e361bdd7353774c2da70eb9e259e1b3d64480cf655f38c41a6e8799dc8eb16dd27f40deda0ba7a93e777b57856e4c623787d092df4e207ac00b621508f4e247a8255f425e54c2bf94606b71936313578de106d0aa5dc6cdc049b326a2f03b8f600345ec2d0be53d109ecbd346675b51643fe66755ba2603020b2c9fc961bb963def2a9fe2749a867605be5ef36b20592164fd2be2b2df12b549e07e39a6e40fee330b99b0b42faef35a8c602da01a1e7c62915a0bc2f58128e6a0656680e5ed0c38235741aa8fcdcbf40bbf8f4447b9f05d0a212262c5a97dd0ccd3f995457e0dec03749c50e9ac4f59c952db9b7de40f1c5fdbd578b43c77fc21d163e86a94d20d48c4c8bfe309d4c5cbc5482c411f3e58a7f9a6cb5f10b184dffc9ee790bc1c163bb3114b81dd5201defa43ec0948b091e93f5bc68c83c30548a8a5aaac461e4c3573485b6d2a3142481e13ecc1be00f8b612037304028e04e674f0d9476167a16de8387e51b780bea737f6dfbe0f00a294114da2d546417ed939487ed585813823c3528cbff04795e8687bab3bc229ba22aa35369caa76993b8a7d14bd5bbdad1cee62c99773ad3535e09e84280ff0ee0894941d3c3b0103570235040b6b560820dcb579e41df2b3ecf59e7a1ae3919a36169370cdc46d2406be8d57262409e463a6ed4b28b79c899bd3cb486842921fb24f739e4563445fbf9231830c55e7f850357d7ab18a078047e8fbe210c3dc2932369d2c512d6ee528e0c4e23734063e1895027f9ef1fa838adf2e42f5cd9653ee57fabb5bad126f4bfcd78ae030dfbc4693ca4c2d2818b53e572a5eee7bf34466a844a6ff7ffbd7b25624ba68a44eda3d995a86e53c9bbeec0ccc061791fa3dd2c0dd36bcd8fe9ea7ef0ee75e8cc2a10059c7764deee3168a9ae8fd13d6fdef66889ac1aa03aab9d16ff4c3d3eefb0a0d845bd0d2cff0756e76a9c346fc5865a08e386de3badd7f7ead553b264c2c027066f15ac51b7830fdbe598cb8f6ea1738174d27ceec3363492d63658c669b8d6601c72df3d37819c020ed58a0e621c4f3366f6eb01b09055474a0f9e71b16051e994a26384e077b081d47c008b31e7764937a8a55655b7d1a9d7e0a8eefdd49463c7a7532fec5e735c0adcc52fe8c1c21664336ea26c7ccce77f04d57ef51422592415777c33578cbb7770c0df65e5b78a2239fa3abdd2e7591efecdc822a110eeff1baf33b1d272622673be713cb6d73c14577387c482596dc9e46e743b9d517f56e595f90a6c3456a01253f5f657fad07684b27d8d790814267c9e426ce232582062134c4a68ead543ab16a26cb592f89af86865ec407817037dc13b3584e24f112f985a2138a7772cd0f4fec1fee585b6df496eb846838056b73125aea9958a8385de829eecb134c1e504a34dd0dfa4ec1fa32b62434329aeaf8488350652e6c81a8b70db6afab511c1266c3773aa4de64dffb8d1f32085f30882857498e20bb8f7f043f82943848ea5a344930110a802b3a229a7ead58de24ea5c8764e020008d93b12198a8b377ac2348f4ba78d76abcf637b15e38fb11d9fc255a31312d1224597980beac081f066772b6363c122032b00b68a6e2bd21c0989fc21b6e2902d0f793ab2e00eb4ec901d7664872c924d2d61d39c3419927110a1f8b11eb5cfd1ed0c33d88128f91f3172cbbd69d326fa000abd40d2843e2fa2882b8377a3f8f55b4d6454f0d68b2896757c7d8cdf91d66b1b43d0254a7232da088186e472f3f11fea67ff0c70a5a410736b496ac4139a653ef4242a8ab4311daa4320d3d0e0ad1468680253fc5444f38e2427f3842308dbf78dd26d90923c4408851ac2c6495958e1aabe0183484f1bb2ed5a99e3fc7375dc4dbca4b0e7065a07849158f582a8de5a4af367e544195d4202a192d71c55dfa63b5dd41a8ea0e135ceeee4a0b11d77d4fda7b1a487af23b62cbf13c1a0ddaf6f1868a224286cc5f811a2cf30c6670609efafb64d1eebd1ea99f1cad20000c00c17432b3e49b81674cd3bd663a2d02d1a0ffb3bd2b65cc7001812017809d488186e2476b7c09b7f734d3ce64308af4542b044257b837caac5fb5e2df38e36dbd4a1d47e006ccb2c877d090f209617118afe43dfbd42d12ec3f7f47629726f03a5cef31d124f33bb988cb40f07022decdd9e7174f4e5496d1be74087f9f73946df40dd4464056879728712d4e4f959df60f6eeab99c04b9c0e282df1ac314f19968a330956f71b86bf27c2551680d27a874edea3948eba7ed6dade6b354e045cdcaf1bde0781d239f8bb2187831a6495e039c1c4200bcabc0410e888e0553a6f6549fe5203b544b5bf65a64b94ce758975d344740477fff2cf82dd29cda8de4c7f00057f20f2f1db37168d2990a99d8dfd18abc598fbb0f6da869a3e36f188bad0c5e66a2dbd8d39e59a4f0b562a9333309021e8b03074065cce92ee31bf52dfa57cf73c749d7fae17dabd68030149f642d04f1ac0ce171b6a914724cef9bb72725a03c04e4fba2068172ca65294d7581444392c0992534c8ee4d824f3ff610d4f8aa93f5bd92d37a5261698f01d3482aa7bf1c19a34559a2bddee423b2f1b481edc0fd1995acad7399f0ec6c5eed7b53bdc29a77609816d943eb591beb298ba5085b58ab8bc13ccac5e2b9a8060c5aeb4b606f3ba490936baacd12f5b773a20f6064ffdf70e59f68450a35232adf7a00f88f51fe7ee15f546ddd6145c096d0e588e8308c71d0e0357ef63ac46e7e9c88dfb5557af13eb56586f9f4f8c0efeda861827b30ab15a799f013289648dbe9ebca0eedde60539449b26157b68a9e35aceb2a4636954fcdc51ee5309a42a77313fd854f245ecb9ac3c716a8e9cfd74eeb2d71e24720d0fc62946c319034c4e27ea39185edd44f25dceb69891526ca2c395f44f101a075b69ae1b9e76c0a0fb7f72b62f700387eeb6246719c54940e66ee44de3a7dfcabf1d8742524d04faabec0aa6446b8f6ddbf6135f54fbc3dc26600bef2a3145dd15d386aa6a3651b26353a86200a9e51d55eafdf8cc48248b6b09a3ea7925ae2e4f901cafae6f641e7248a2186aad25f684fa8e8d5abe5c94a971462d85e65d6c5f2b2d664163326da27ae719c75053df5631de5ee3aa9c7044976b00b4693798fe1976b3b98e019b9b1242a416f2663c4ad2573a6e292fe4a60cd77ba34588d66e7af353dfb0940d5c590024a46b78fc4aa01752bccfc30aa45a43b6f15ee1414be8efd4d9b4c2c33d7a617543e17afcfd3f87fd454864410455e73471bcab827a8440daf4fc6362a4a65eef0cc174c0950a220ffd0f496f5478871ae6d945bccdc851ef7e61c187b9b7aee5272b5e77b81eb84ca4df1531e5680481d31676da9b498fa24ecf32d1471f3bc662fe696650d2fb1604b24605630304784a26a1b302eca01d9f5596e9fb3ad15e70d7734c05ca7515c26f419c74bb0611ff1d9395a981f724ce3a75775e05622892e67eb420057c91a0d4e8b5659130a70464ca80be1e8dc154e436b78ffff03df7492fdc5161823e109f515a28c791e63de87a009d8f6843c862f2b07364fcdad41a54481289477904c8b96de603feedb1cc2986b9e941c282701020e0c8641a175041a8e16e3edfc402b1718350de103618697a96389e29076b02c98df522f6ee8da66c50da48a11c3873644041aa18dbe32ace1fd59f60050760e5bebcad69e2092d07428eac38a4841356bf0b228a0fa8a3943403794d344685c72449bb70827a36834cbacd868e6cfdb81acacbc4bf18c8ceb08a7f1980f3c404d2433d9d40c071ac69565806a1063b0cd863c31135f6d79898b74d02e2cba713a715abaf02e3ef40422e438a2dae88a50e212452ad7e9c5907e9442fa08104d97f9f2d3a4f3c2793d28c0a27be035cca1dde1031e4f2b67b4c49fcd9ae56539e7151034109a8b28acde2c71074d3036ea0f39fafdc1e27c2bb1f16dd056613fdf17fb4d3306f610cfd45fcbcd2190249eb9eadaca55615db6749189a5ccc501ba1c0ad6446aae9f47a024b82d7f627253895834f6e27449167dcdf51fec2061ceabf9e02de80b71382709eea4c678c5f4d662cbc02899e3dd06c67d8234bc3cd9808037403b3949a550215e03cadd3507db3d381d49c89450ffffcbd8b003276551d9fe76c147200827bdb7ed5b74d1c04374aad295a7129ed842bb6f659768b04d774c8e1b76c200f2e2761239d2104a442c9433aa50f8c0e5999ca06b784eaa500b7351cdbd47e5abae3648f4e4c263200244367b34075817f728c05ee17338b6710e4a39014af9659f33fd9197923eac78398f333f80b9878d26fae2c52c8d68e75e7a7f1925f6216d7d18ad023cae7a9a2a47f0a637ab146d345acbed6557942470188e9a1f74a0dc1187405f457bf5b10c803274eeecceef8e8dbcd6403ab6f6c312814dc74b5627fbb2aca5d5f79b473c1c0415f0201004074bea2c4a01693ca1c286266e6d166f71d934b270abad9938d234f59e6312deeddda27f67b63e764de8f6ef65bc3f52221a2456c2adc45ebf29a5647b2e439b630bf381593221c71ad2066e38f1601d892189dd869c4daba1275ca8177bc11242b8ec4814a9b9e5f2ed1dd1cd28747397ffcef485945e67f33d414cfdd213c89052274956553ad6fa8857675c0e2d5441445022d3d4c1302affa70897c5a1c6175becf730bd96b70cdbbef67fe9c90ce79e6b66d92416f7898ac1dea885a7c05e0662f72ecd106e9b57cac95cdfdd2d1de1207f5324bba492bcfe03dbf9ab18a79f96ca3d64cc36ff972f24cc29c77c1e57e7fd4f18591ad4289565255d1b431a84d9495e6d09ab52dbbe397e0ab9f2b0d5f894a4f7e9b51943b7977802e94ff255cc0e6b2e8aa147eb2dc2370b6e5bf83624033338bd91094f96057e0aed3c6ee7a9d31705167c8c5542b79f4cb2cdd59e065147426b60fd353c21b151906f701af9be11c7726b99d4f077d4fee401d5e068de6a721814b19a99de10b54ba6e7c21820119677bac41aa6f1452a83806fdc985603d88887fcf311c2837ced50949475d01b827600ad1c2d8f0a4912c68bdf9258237ad01f4576495617102a4b7fc6c91235c9bc133140656737c84045c7c62f5296d8f790f32d2a177cb3129ed30c64d00e5f730428c2f225b74ed7a34aa5ea181f572277c8f079c3e66f513b5941838c6e8f93a5f09a39b305a6344874c078d4a1d5b04405a4bc963faa1e7bfe5079fb05ae904f0d9f1c029d702ab2529b02d4c099f14bab2f3c8e036eaaa3890d02c2441bfb0ee34aba33c83ec8e6dcf1cb2fd63c49772b3583d89676dafacd8d9a3b1bdc6619454f18c50f50fe070dddd356bfb895317ed9a74e948a62cd0b9477a43a2b1ab28e405aa1a6bfc7cd9fcda562683e7fcaab99ffe6b4e8e65cdf9937b273e99d06a306dd069df258136828ba2bcbacbaf5b98d7d7754cbc5a88004db6665d4acf8a4efaf021903ac72bb27da104aaf3eb9d7ab2792fa48496f8485feb070574bbee6a7186ca14876d61fac50af28cf6380454510f932ada13af756b97d3089ebe7f2bd57dc71addc50bdc0355d92fdfdceb6e1cee5079293843a8b48223f599fec816a2b6777f287d62dbb415126cb743bfe7e94a6405f2d0e895d8269384aac60fa43a66fc96d08e5b1129dc6498766058ccea771adc2d8937dbbd9a32f13d106e2a58648afd85e3b470918e2e36ce4cf4c5928fb27949fa19f500b873ac9f4b0ca4b17316f2a801a468a4ad8ab5bbd5e9a499c7d4827f71bd65287b8 \ No newline at end of file diff --git a/crates/da-clients/aptos/trusted_setup.txt b/crates/da-clients/aptos/trusted_setup.txt new file mode 100644 index 00000000..d2519656 --- /dev/null +++ b/crates/da-clients/aptos/trusted_setup.txt @@ -0,0 +1,4163 @@ +4096 +65 +a0413c0dcafec6dbc9f47d66785cf1e8c981044f7d13cfe3e4fcbb71b5408dfde6312493cb3c1d30516cb3ca88c03654 +8b997fb25730d661918371bb41f2a6e899cac23f04fc5365800b75433c0a953250e15e7a98fb5ca5cc56a8cd34c20c57 +83302852db89424d5699f3f157e79e91dc1380f8d5895c5a772bb4ea3a5928e7c26c07db6775203ce33e62a114adaa99 +a759c48b7e4a685e735c01e5aa6ef9c248705001f470f9ad856cd87806983e917a8742a3bd5ee27db8d76080269b7c83 +967f8dc45ebc3be14c8705f43249a30ff48e96205fb02ae28daeab47b72eb3f45df0625928582aa1eb4368381c33e127 +a418eb1e9fb84cb32b370610f56f3cb470706a40ac5a47c411c464299c45c91f25b63ae3fcd623172aa0f273c0526c13 +8f44e3f0387293bc7931e978165abbaed08f53acd72a0a23ac85f6da0091196b886233bcee5b4a194db02f3d5a9b3f78 +97173434b336be73c89412a6d70d416e170ea355bf1956c32d464090b107c090ef2d4e1a467a5632fbc332eeb679bf2d +a24052ad8d55ad04bc5d951f78e14213435681594110fd18173482609d5019105b8045182d53ffce4fc29fc8810516c1 +b950768136b260277590b5bec3f56bbc2f7a8bc383d44ce8600e85bf8cf19f479898bcc999d96dfbd2001ede01d94949 +92ab8077871037bd3b57b95cbb9fb10eb11efde9191690dcac655356986fd02841d8fdb25396faa0feadfe3f50baf56d +a79b096dff98038ac30f91112dd14b78f8ad428268af36d20c292e2b3b6d9ed4fb28480bb04e465071cc67d05786b6d1 +b9ff71461328f370ce68bf591aa7fb13027044f42a575517f3319e2be4aa4843fa281e756d0aa5645428d6dfa857cef2 +8d765808c00b3543ff182e2d159c38ae174b12d1314da88ea08e13bd9d1c37184cb515e6bf6420531b5d41767987d7ce +b8c9a837d20c3b53e6f578e4a257bb7ef8fc43178614ec2a154915b267ad2be135981d01ed2ee1b5fbd9d9bb27f0800a +a9773d92cf23f65f98ef68f6cf95c72b53d0683af2f9bf886bb9036e4a38184b1131b26fd24397910b494fbef856f3aa +b41ebe38962d112da4a01bf101cb248d808fbd50aaf749fc7c151cf332032eb3e3bdbd716db899724b734d392f26c412 +90fbb030167fb47dcc13d604a726c0339418567c1d287d1d87423fa0cb92eec3455fbb46bcbe2e697144a2d3972142e4 +b11d298bd167464b35fb923520d14832bd9ed50ed841bf6d7618424fd6f3699190af21759e351b89142d355952149da1 +8bc36066f69dc89f7c4d1e58d67497675050c6aa002244cebd9fc957ec5e364c46bab4735ea3db02b73b3ca43c96e019 +ab7ab92c5d4d773068e485aa5831941ebd63db7118674ca38089635f3b4186833af2455a6fb9ed2b745df53b3ce96727 +af191ca3089892cb943cd97cf11a51f38e38bd9be50844a4e8da99f27e305e876f9ed4ab0628e8ae3939066b7d34a15f +a3204c1747feabc2c11339a542195e7cb6628fd3964f846e71e2e3f2d6bb379a5e51700682ea1844eba12756adb13216 +903a29883846b7c50c15968b20e30c471aeac07b872c40a4d19eb1a42da18b649d5bbfde4b4cf6225d215a461b0deb6d +8e6e9c15ffbf1e16e5865a5fef7ed751dc81957a9757b535cb38b649e1098cda25d42381dc4f776778573cdf90c3e6e0 +a8f6dd26100b512a8c96c52e00715c4b2cb9ac457f17aed8ffe1cf1ea524068fe5a1ddf218149845fc1417b789ecfc98 +a5b0ffc819451ea639cfd1c18cbc9365cc79368d3b2e736c0ae54eba2f0801e6eb0ee14a5f373f4a70ca463bdb696c09 +879f91ccd56a1b9736fbfd20d8747354da743fb121f0e308a0d298ff0d9344431890e41da66b5009af3f442c636b4f43 +81bf3a2d9755e206b515a508ac4d1109bf933c282a46a4ae4a1b4cb4a94e1d23642fad6bd452428845afa155742ade7e +8de778d4742f945df40004964e165592f9c6b1946263adcdd5a88b00244bda46c7bb49098c8eb6b3d97a0dd46148a8ca +b7a57b21d13121907ee28c5c1f80ee2e3e83a3135a8101e933cf57171209a96173ff5037f5af606e9fd6d066de6ed693 +b0877d1963fd9200414a38753dffd9f23a10eb3198912790d7eddbc9f6b477019d52ddd4ebdcb9f60818db076938a5a9 +88da2d7a6611bc16adc55fc1c377480c828aba4496c645e3efe0e1a67f333c05a0307f7f1d2df8ac013602c655c6e209 +95719eb02e8a9dede1a888c656a778b1c69b7716fbe3d1538fe8afd4a1bc972183c7d32aa7d6073376f7701df80116d8 +8e8a1ca971f2444b35af3376e85dccda3abb8e8e11d095d0a4c37628dfe5d3e043a377c3de68289ef142e4308e9941a0 +b720caaff02f6d798ac84c4f527203e823ff685869e3943c979e388e1c34c3f77f5c242c6daa7e3b30e511aab917b866 +86040d55809afeec10e315d1ad950d269d37cfee8c144cd8dd4126459e3b15a53b3e68df5981df3c2346d23c7b4baaf4 +82d8cabf13ab853db0377504f0aec00dba3a5cd3119787e8ad378ddf2c40b022ecfc67c642b7acc8c1e3dd03ab50993e +b8d873927936719d2484cd03a6687d65697e17dcf4f0d5aed6f5e4750f52ef2133d4645894e7ebfc4ef6ce6788d404c8 +b1235594dbb15b674a419ff2b2deb644ad2a93791ca05af402823f87114483d6aa1689b7a9bea0f547ad12fe270e4344 +a53fda86571b0651f5affb74312551a082fffc0385cfd24c1d779985b72a5b1cf7c78b42b4f7e51e77055f8e5e915b00 +b579adcfd9c6ef916a5a999e77a0cb21d378c4ea67e13b7c58709d5da23a56c2e54218691fc4ac39a4a3d74f88cc31f7 +ab79e584011713e8a2f583e483a91a0c2a40771b77d91475825b5acbea82db4262132901cb3e4a108c46d7c9ee217a4e +a0fe58ea9eb982d7654c8aaf9366230578fc1362f6faae0594f8b9e659bcb405dff4aac0c7888bbe07f614ecf0d800a6 +867e50e74281f28ecd4925560e2e7a6f8911b135557b688254623acce0dbc41e23ac3e706a184a45d54c586edc416eb0 +89f81b61adda20ea9d0b387a36d0ab073dc7c7cbff518501962038be19867042f11fcc7ff78096e5d3b68c6d8dc04d9b +a58ee91bb556d43cf01f1398c5811f76dc0f11efdd569eed9ef178b3b0715e122060ec8f945b4dbf6eebfa2b90af6fa6 +ac460be540f4c840def2eef19fc754a9af34608d107cbadb53334cf194cc91138d53b9538fcd0ec970b5d4aa455b224a +b09b91f929de52c09d48ca0893be6eb44e2f5210a6c394689dc1f7729d4be4e11d0474b178e80cea8c2ac0d081f0e811 +8d37a442a76b06a02a4e64c2504aea72c8b9b020ab7bcc94580fe2b9603c7c50d7b1e9d70d2a7daea19c68667e8f8c31 +a9838d4c4e3f3a0075a952cf7dd623307ec633fcc81a7cf9e52e66c31780de33dbb3d74c320dc7f0a4b72f7a49949515 +a44766b6251af458fe4f5f9ed1e02950f35703520b8656f09fc42d9a2d38a700c11a7c8a0436ac2e5e9f053d0bb8ff91 +ad78d9481c840f5202546bea0d13c776826feb8b1b7c72e83d99a947622f0bf38a4208551c4c41beb1270d7792075457 +b619ffa8733b470039451e224b777845021e8dc1125f247a4ff2476cc774657d0ff9c5279da841fc1236047de9d81c60 +af760b0a30a1d6af3bc5cd6686f396bd41779aeeb6e0d70a09349bd5da17ca2e7965afc5c8ec22744198fbe3f02fb331 +a0cc209abdb768b589fcb7b376b6e1cac07743288c95a1cf1a0354b47f0cf91fca78a75c1fcafa6f5926d6c379116608 +864add673c89c41c754eeb3cd8dcff5cdde1d739fce65c30e474a082bb5d813cba6412e61154ce88fdb6c12c5d9be35b +b091443b0ce279327dc37cb484e9a5b69b257a714ce21895d67539172f95ffa326903747b64a3649e99aea7bb10d03f7 +a8c452b8c4ca8e0a61942a8e08e28f17fb0ef4c5b018b4e6d1a64038280afa2bf1169202f05f14af24a06ca72f448ccd +a23c24721d18bc48d5dcf70effcbef89a7ae24e67158d70ae1d8169ee75d9a051d34b14e9cf06488bac324fe58549f26 +92a730e30eb5f3231feb85f6720489dbb1afd42c43f05a1610c6b3c67bb949ec8fde507e924498f4ffc646f7b07d9123 +8dbe5abf4031ec9ba6bb06d1a47dd1121fb9e03b652804069250967fd5e9577d0039e233441b7f837a7c9d67ba18c28e +aa456bcfef6a21bb88181482b279df260297b3778e84594ebddbdf337e85d9e3d46ca1d0b516622fb0b103df8ec519b7 +a3b31ae621bd210a2b767e0e6f22eb28fe3c4943498a7e91753225426168b9a26da0e02f1dc5264da53a5ad240d9f51b +aa8d66857127e6e71874ce2202923385a7d2818b84cb73a6c42d71afe70972a70c6bdd2aad1a6e8c5e4ca728382a8ea8 +ac7e8e7a82f439127a5e40558d90d17990f8229852d21c13d753c2e97facf077cf59582b603984c3dd3faebd80aff4f5 +93a8bcf4159f455d1baa73d2ef2450dcd4100420de84169bbe28b8b7a5d1746273f870091a87a057e834f754f34204b1 +89d0ebb287c3613cdcae7f5acc43f17f09c0213fc40c074660120b755d664109ffb9902ed981ede79e018ddb0c845698 +a87ccbfad431406aadbee878d9cf7d91b13649d5f7e19938b7dfd32645a43b114eef64ff3a13201398bd9b0337832e5a +833c51d0d0048f70c3eefb4e70e4ff66d0809c41838e8d2c21c288dd3ae9d9dfaf26d1742bf4976dab83a2b381677011 +8bcd6b1c3b02fffead432e8b1680bad0a1ac5a712d4225e220690ee18df3e7406e2769e1f309e2e803b850bc96f0e768 +b61e3dbd88aaf4ff1401521781e2eea9ef8b66d1fac5387c83b1da9e65c2aa2a56c262dea9eceeb4ad86c90211672db0 +866d3090db944ecf190dd0651abf67659caafd31ae861bab9992c1e3915cb0952da7c561cc7e203560a610f48fae633b +a5e8971543c14274a8dc892b0be188c1b4fbc75c692ed29f166e0ea80874bc5520c2791342b7c1d2fb5dd454b03b8a5b +8f2f9fc50471bae9ea87487ebd1bc8576ef844cc42d606af5c4c0969670fdf2189afd643e4de3145864e7773d215f37f +b1bb0f2527db6d51f42b9224383c0f96048bbc03d469bf01fe1383173ef8b1cc9455d9dd8ba04d46057f46949bfc92b5 +aa7c99d906b4d7922296cfe2520473fc50137c03d68b7865c5bfb8adbc316b1034310ec4b5670c47295f4a80fb8d61e9 +a5d1da4d6aba555919df44cbaa8ff79378a1c9e2cfdfbf9d39c63a4a00f284c5a5724e28ecbc2d9dba27fe4ee5018bd5 +a8db53224f70af4d991b9aae4ffe92d2aa5b618ad9137784b55843e9f16cefbfd25ada355d308e9bbf55f6d2f7976fb3 +b6536c4232bb20e22af1a8bb12de76d5fec2ad9a3b48af1f38fa67e0f8504ef60f305a73d19385095bb6a9603fe29889 +87f7e371a1817a63d6838a8cf4ab3a8473d19ce0d4f40fd013c03d5ddd5f4985df2956531cc9f187928ef54c68f4f9a9 +ae13530b1dbc5e4dced9d909ea61286ec09e25c12f37a1ed2f309b0eb99863d236c3b25ed3484acc8c076ad2fa8cd430 +98928d850247c6f7606190e687d5c94a627550198dbdbea0161ef9515eacdb1a0f195cae3bb293112179082daccf8b35 +918528bb8e6a055ad4db6230d3a405e9e55866da15c4721f5ddd1f1f37962d4904aad7a419218fe6d906fe191a991806 +b71e31a06afe065773dd3f4a6e9ef81c3292e27a3b7fdfdd452d03e05af3b6dd654c355f7516b2a93553360c6681a73a +8870b83ab78a98820866f91ac643af9f3ff792a2b7fda34185a9456a63abdce42bfe8ad4dc67f08a6392f250d4062df4 +91eea1b668e52f7a7a5087fabf1cab803b0316f78d9fff469fbfde2162f660c250e4336a9eea4cb0450bd30ac067bc8b +8b74990946de7b72a92147ceac1bd9d55999a8b576e8df68639e40ed5dc2062cfcd727903133de482b6dca19d0aaed82 +8ebad537fece090ebbab662bdf2618e21ca30cf6329c50935e8346d1217dcbe3c1fe1ea28efca369c6003ce0a94703c1 +a8640479556fb59ebd1c40c5f368fbd960932fdbb782665e4a0e24e2bdb598fc0164ce8c0726d7759cfc59e60a62e182 +a9a52a6bf98ee4d749f6d38be2c60a6d54b64d5cbe4e67266633dc096cf28c97fe998596707d31968cbe2064b72256bf +847953c48a4ce6032780e9b39d0ed4384e0be202c2bbe2dfda3910f5d87aa5cd3c2ffbfcfae4dddce16d6ab657599b95 +b6f6e1485d3ec2a06abaecd23028b200b2e4a0096c16144d07403e1720ff8f9ba9d919016b5eb8dc5103880a7a77a1d3 +98dfc2065b1622f596dbe27131ea60bef7a193b12922cecb27f8c571404f483014f8014572e86ae2e341ab738e4887ef +acb0d205566bacc87bbe2e25d10793f63f7a1f27fd9e58f4f653ceae3ffeba511eaf658e068fad289eeb28f9edbeb35b +ae4411ed5b263673cee894c11fe4abc72a4bf642d94022a5c0f3369380fcdfc1c21e277f2902972252503f91ada3029a +ac4a7a27ba390a75d0a247d93d4a8ef1f0485f8d373a4af4e1139369ec274b91b3464d9738eeaceb19cd6f509e2f8262 +87379c3bf231fdafcf6472a79e9e55a938d851d4dd662ab6e0d95fd47a478ed99e2ad1e6e39be3c0fc4f6d996a7dd833 +81316904b035a8bcc2041199a789a2e6879486ba9fddcba0a82c745cc8dd8374a39e523b91792170cd30be7aa3005b85 +b8206809c6cd027ed019f472581b45f7e12288f89047928ba32b4856b6560ad30395830d71e5e30c556f6f182b1fe690 +88d76c028f534a62e019b4a52967bb8642ede6becfa3807be68fdd36d366fc84a4ac8dc176e80a68bc59eb62caf5dff9 +8c3b8be685b0f8aad131ee7544d0e12f223f08a6f8edaf464b385ac644e0ddc9eff7cc7cb5c1b50ab5d71ea0f41d2213 +8d91410e004f76c50fdc05784157b4d839cb5090022c629c7c97a5e0c3536eeafee17a527b54b1165c3cd81774bb54ce +b25c2863bc28ec5281ce800ddf91a7e1a53f4c6d5da1e6c86ef4616e93bcf55ed49e297216d01379f5c6e7b3c1e46728 +865f7b09ac3ca03f20be90c48f6975dd2588838c2536c7a3532a6aa5187ed0b709cd03d91ff4048061c10d0aa72b69ce +b3f7477c90c11596eb4f8bbf34adbcb832638c4ff3cdd090d4d477ee50472ac9ddaf5be9ad7eca3f148960d362bbd098 +8db35fd53fca04faecd1c76a8227160b3ab46ac1af070f2492445a19d8ff7c25bbaef6c9fa0c8c088444561e9f7e4eb2 +a478b6e9d058a2e01d2fc053b739092e113c23a6a2770a16afbef044a3709a9e32f425ace9ba7981325f02667c3f9609 +98caa6bd38916c08cf221722a675a4f7577f33452623de801d2b3429595f988090907a7e99960fff7c076d6d8e877b31 +b79aaaacefc49c3038a14d2ac468cfec8c2161e88bdae91798d63552cdbe39e0e02f9225717436b9b8a40a022c633c6e +845a31006c680ee6a0cc41d3dc6c0c95d833fcf426f2e7c573fa15b2c4c641fbd6fe5ebb0e23720cc3467d6ee1d80dc4 +a1bc287e272cf8b74dbf6405b3a5190883195806aa351f1dc8e525aa342283f0a35ff687e3b434324dedee74946dd185 +a4fd2dc8db75d3783a020856e2b3aa266dc6926e84f5c491ef739a3bddd46dc8e9e0fc1177937839ef1b18d062ffbb9e +acbf0d3c697f57c202bb8c5dc4f3fc341b8fc509a455d44bd86acc67cad2a04495d5537bcd3e98680185e8aa286f2587 +a5caf423a917352e1b8e844f5968a6da4fdeae467d10c6f4bbd82b5eea46a660b82d2f5440d3641c717b2c3c9ed0be52 +8a39d763c08b926599ab1233219c49c825368fad14d9afc7c0c039224d37c00d8743293fd21645bf0b91eaf579a99867 +b2b53a496def0ba06e80b28f36530fbe0fb5d70a601a2f10722e59abee529369c1ae8fd0f2db9184dd4a2519bb832d94 +a73980fcef053f1b60ebbb5d78ba6332a475e0b96a0c724741a3abf3b59dd344772527f07203cf4c9cb5155ebed81fa0 +a070d20acce42518ece322c9db096f16aed620303a39d8d5735a0df6e70fbeceb940e8d9f5cc38f3314b2240394ec47b +a50cf591f522f19ca337b73089557f75929d9f645f3e57d4f241e14cdd1ea3fb48d84bcf05e4f0377afbb789fbdb5d20 +82a5ffce451096aca8eeb0cd2ae9d83db3ed76da3f531a80d9a70a346359bf05d74863ce6a7c848522b526156a5e20cd +88e0e84d358cbb93755a906f329db1537c3894845f32b9b0b691c29cbb455373d9452fadd1e77e20a623f6eaf624de6f +aa07ac7b84a6d6838826e0b9e350d8ec75e398a52e9824e6b0da6ae4010e5943fec4f00239e96433f291fef9d1d1e609 +ac8887bf39366034bc63f6cc5db0c26fd27307cbc3d6cce47894a8a019c22dd51322fb5096edc018227edfafc053a8f6 +b7d26c26c5b33f77422191dca94977588ab1d4b9ce7d0e19c4a3b4cd1c25211b78c328dbf81e755e78cd7d1d622ad23e +99a676d5af49f0ba44047009298d8474cabf2d5bca1a76ba21eff7ee3c4691a102fdefea27bc948ccad8894a658abd02 +b0d09a91909ab3620c183bdf1d53d43d39eb750dc7a722c661c3de3a1a5d383ad221f71bae374f8a71867505958a3f76 +84681a883de8e4b93d68ac10e91899c2bbb815ce2de74bb48a11a6113b2a3f4df8aceabda1f5f67bc5aacac8c9da7221 +9470259957780fa9b43521fab3644f555f5343281c72582b56d2efd11991d897b3b481cafa48681c5aeb80c9663b68f7 +ab1b29f7ece686e6fa968a4815da1d64f3579fed3bc92e1f3e51cd13a3c076b6cf695ed269d373300a62463dc98a4234 +8ab415bfcd5f1061f7687597024c96dd9c7cb4942b5989379a7a3b5742f7d394337886317659cbeacaf030234a24f972 +b9b524aad924f9acc63d002d617488f31b0016e0f0548f050cada285ce7491b74a125621638f19e9c96eabb091d945be +8c4c373e79415061837dd0def4f28a2d5d74d21cb13a76c9049ad678ca40228405ab0c3941df49249847ecdefc1a5b78 +a8edf4710b5ab2929d3db6c1c0e3e242261bbaa8bcec56908ddadd7d2dad2dca9d6eb9de630b960b122ebeea41040421 +8d66bb3b50b9df8f373163629f9221b3d4b6980a05ea81dc3741bfe9519cf3ebba7ab98e98390bae475e8ede5821bd5c +8d3c21bae7f0cfb97c56952bb22084b58e7bb718890935b73103f33adf5e4d99cd262f929c6eeab96209814f0dbae50a +a5c66cfab3d9ebf733c4af24bebc97070e7989fe3c73e79ac85fb0e4d40ae44fb571e0fad4ad72560e13ed453900d14f +9362e6b50b43dbefbc3254471372297b5dcce809cd3b60bf74a1268ab68bdb50e46e462cbd78f0d6c056330e982846af +854630d08e3f0243d570cc2e856234cb4c1a158d9c1883bf028a76525aaa34be897fe918d5f6da9764a3735fa9ebd24a +8c7d246985469ff252c3f4df6c7c9196fc79f05c1c66a609d84725c78001d0837c7a7049394ba5cf7e863e2d58af8417 +ae050271e01b528925302e71903f785b782f7bf4e4e7a7f537140219bc352dc7540c657ed03d3a297ad36798ecdb98cd +8d2ae9179fcf2b0c69850554580b52c1f4a5bd865af5f3028f222f4acad9c1ad69a8ef6c7dc7b03715ee5c506b74325e +b8ef8de6ce6369a8851cd36db0ccf00a85077e816c14c4e601f533330af9e3acf0743a95d28962ed8bfcfc2520ef3cfe +a6ecad6fdfb851b40356a8b1060f38235407a0f2706e7b8bb4a13465ca3f81d4f5b99466ac2565c60af15f022d26732e +819ff14cdea3ab89d98e133cd2d0379361e2e2c67ad94eeddcdb9232efd509f51d12f4f03ebd4dd953bd262a886281f7 +8561cd0f7a6dbcddd83fcd7f472d7dbcba95b2d4fb98276f48fccf69f76d284e626d7e41314b633352df8e6333fd52a1 +b42557ccce32d9a894d538c48712cb3e212d06ac05cd5e0527ccd2db1078ee6ae399bf6a601ffdab1f5913d35fc0b20c +89b4008d767aad3c6f93c349d3b956e28307311a5b1cec237e8d74bb0dee7e972c24f347fd56afd915a2342bd7bc32f0 +877487384b207e53f5492f4e36c832c2227f92d1bb60542cfeb35e025a4a7afc2b885fae2528b33b40ab09510398f83e +8c411050b63c9053dd0cd81dacb48753c3d7f162028098e024d17cd6348482703a69df31ad6256e3d25a8bbf7783de39 +a8506b54a88d17ac10fb1b0d1fe4aa40eae7553a064863d7f6b52ccc4236dd4b82d01dca6ba87da9a239e3069ba879fb +b1a24caef9df64750c1350789bb8d8a0db0f39474a1c74ea9ba064b1516db6923f00af8d57c632d58844fb8786c3d47a +959d6e255f212b0708c58a2f75cb1fe932248c9d93424612c1b8d1e640149656059737e4db2139afd5556bcdacf3eda2 +84525af21a8d78748680b6535bbc9dc2f0cf9a1d1740d12f382f6ecb2e73811d6c1da2ad9956070b1a617c61fcff9fe5 +b74417d84597a485d0a8e1be07bf78f17ebb2e7b3521b748f73935b9afbbd82f34b710fb7749e7d4ab55b0c7f9de127d +a4a9aecb19a6bab167af96d8b9d9aa5308eab19e6bfb78f5a580f9bf89bdf250a7b52a09b75f715d651cb73febd08e84 +9777b30be2c5ffe7d29cc2803a562a32fb43b59d8c3f05a707ab60ec05b28293716230a7d264d7cd9dd358fc031cc13e +95dce7a3d4f23ac0050c510999f5fbf8042f771e8f8f94192e17bcbfa213470802ebdbe33a876cb621cf42e275cbfc8b +b0b963ebcbbee847ab8ae740478544350b3ac7e86887e4dfb2299ee5096247cd2b03c1de74c774d9bde94ae2ee2dcd59 +a4ab20bafa316030264e13f7ef5891a2c3b29ab62e1668fcb5881f50a9acac6adbe3d706c07e62f2539715db768f6c43 +901478a297669d608e406fe4989be75264b6c8be12169aa9e0ad5234f459ca377f78484ffd2099a2fe2db5e457826427 +88c76e5c250810c057004a03408b85cd918e0c8903dc55a0dd8bb9b4fc2b25c87f9b8cf5943eb19fbbe99d36490050c5 +91607322bbad4a4f03fc0012d0821eff5f8c516fda45d1ec1133bface6f858bf04b25547be24159cab931a7aa08344d4 +843203e07fce3c6c81f84bc6dc5fb5e9d1c50c8811ace522dc66e8658433a0ef9784c947e6a62c11bf705307ef05212e +91dd8813a5d6dddcda7b0f87f672b83198cd0959d8311b2b26fb1fae745185c01f796fbd03aad9db9b58482483fdadd8 +8d15911aacf76c8bcd7136e958febd6963104addcd751ce5c06b6c37213f9c4fb0ffd4e0d12c8e40c36d658999724bfd +8a36c5732d3f1b497ebe9250610605ee62a78eaa9e1a45f329d09aaa1061131cf1d9df00f3a7d0fe8ad614a1ff9caaae +a407d06affae03660881ce20dab5e2d2d6cddc23cd09b95502a9181c465e57597841144cb34d22889902aff23a76d049 +b5fd856d0578620a7e25674d9503be7d97a2222900e1b4738c1d81ff6483b144e19e46802e91161e246271f90270e6cf +91b7708869cdb5a7317f88c0312d103f8ce90be14fb4f219c2e074045a2a83636fdc3e69e862049fc7c1ef000e832541 +b64719cc5480709d1dae958f1d3082b32a43376da446c8f9f64cb02a301effc9c34d9102051733315a8179aed94d53cc +94347a9542ff9d18f7d9eaa2f4d9b832d0e535fe49d52aa2de08aa8192400eddabdb6444a2a78883e27c779eed7fdf5a +840ef44a733ff1376466698cd26f82cf56bb44811e196340467f932efa3ae1ef9958a0701b3b032f50fd9c1d2aed9ab5 +90ab3f6f67688888a31ffc2a882bb37adab32d1a4b278951a21646f90d03385fc976715fc639a785d015751171016f10 +b56f35d164c24b557dbcbc8a4bfa681ec916f8741ffcb27fb389c164f4e3ed2be325210ef5bdaeae7a172ca9599ab442 +a7921a5a80d7cf6ae81ba9ee05e0579b18c20cd2852762c89d6496aa4c8ca9d1ca2434a67b2c16d333ea8e382cdab1e3 +a506bcfbd7e7e5a92f68a1bd87d07ad5fe3b97aeee40af2bf2cae4efcd77fff03f872732c5b7883aa6584bee65d6f8cb +a8c46cff58931a1ce9cbe1501e1da90b174cddd6d50f3dfdfb759d1d4ad4673c0a8feed6c1f24c7af32865a7d6c984e5 +b45686265a83bff69e312c5149db7bb70ac3ec790dc92e392b54d9c85a656e2bf58596ce269f014a906eafc97461aa5f +8d4009a75ccb2f29f54a5f16684b93202c570d7a56ec1a8b20173269c5f7115894f210c26b41e8d54d4072de2d1c75d0 +aef8810af4fc676bf84a0d57b189760ddc3375c64e982539107422e3de2580b89bd27aa6da44e827b56db1b5555e4ee8 +888f0e1e4a34f48eb9a18ef4de334c27564d72f2cf8073e3d46d881853ac1424d79e88d8ddb251914890588937c8f711 +b64b0aa7b3a8f6e0d4b3499fe54e751b8c3e946377c0d5a6dbb677be23736b86a7e8a6be022411601dd75012012c3555 +8d57776f519f0dd912ea14f79fbab53a30624e102f9575c0bad08d2dc754e6be54f39b11278c290977d9b9c7c0e1e0ad +a018fc00d532ceb2e4de908a15606db9b6e0665dd77190e2338da7c87a1713e6b9b61554e7c1462f0f6d4934b960b15c +8c932be83ace46f65c78e145b384f58e41546dc0395270c1397874d88626fdeda395c8a289d602b4c312fe98c1311856 +89174838e21639d6bdd91a0621f04dc056907b88e305dd66e46a08f6d65f731dea72ae87ca5e3042d609e8de8de9aa26 +b7b7f508bb74f7a827ac8189daa855598ff1d96fa3a02394891fd105d8f0816224cd50ac4bf2ed1cf469ace516c48184 +b31877ad682583283baadd68dc1bebd83f5748b165aadd7fe9ef61a343773b88bcd3a022f36d6c92f339b7bfd72820a9 +b79d77260b25daf9126dab7a193df2d7d30542786fa1733ffaf6261734770275d3ca8bae1d9915d1181a78510b3439db +91894fb94cd4c1dd2ceaf9c53a7020c5799ba1217cf2d251ea5bc91ed26e1159dd758e98282ebe35a0395ef9f1ed15a0 +ab59895cdafd33934ceedfc3f0d5d89880482cba6c99a6db93245f9e41987efd76e0640e80aef31782c9a8c7a83fccec +aa22ea63654315e033e09d4d4432331904a6fc5fb1732557987846e3c564668ca67c60a324b4af01663a23af11a9ce4b +b53ba3ef342601467e1f71aa280e100fbabbd38518fa0193e0099505036ee517c1ac78e96e9baeb549bb6879bb698fb0 +943fd69fd656f37487cca3605dc7e5a215fddd811caf228595ec428751fc1de484a0cb84c667fe4d7c35599bfa0e5e34 +9353128b5ebe0dddc555093cf3e5942754f938173541033e8788d7331fafc56f68d9f97b4131e37963ab7f1c8946f5f1 +a76cd3c566691f65cfb86453b5b31dbaf3cab8f84fe1f795dd1e570784b9b01bdd5f0b3c1e233942b1b5838290e00598 +983d84b2e53ffa4ae7f3ba29ef2345247ea2377686b74a10479a0ef105ecf90427bf53b74c96dfa346d0f842b6ffb25b +92e0fe9063306894a2c6970c001781cff416c87e87cb5fbac927a3192655c3da4063e6fa93539f6ff58efac6adcc5514 +b00a81f03c2b8703acd4e2e4c21e06973aba696415d0ea1a648ace2b0ea19b242fede10e4f9d7dcd61c546ab878bc8f9 +b0d08d880f3b456a10bf65cff983f754f545c840c413aea90ce7101a66eb0a0b9b1549d6c4d57725315828607963f15a +90cb64d03534f913b411375cce88a9e8b1329ce67a9f89ca5df8a22b8c1c97707fec727dbcbb9737f20c4cf751359277 +8327c2d42590dfcdb78477fc18dcf71608686ad66c49bce64d7ee874668be7e1c17cc1042a754bbc77c9daf50b2dae07 +8532171ea13aa7e37178e51a6c775da469d2e26ec854eb16e60f3307db4acec110d2155832c202e9ba525fc99174e3b0 +83ca44b15393d021de2a511fa5511c5bd4e0ac7d67259dce5a5328f38a3cce9c3a269405959a2486016bc27bb140f9ff +b1d36e8ca812be545505c8214943b36cabee48112cf0de369957afa796d37f86bf7249d9f36e8e990f26f1076f292b13 +9803abf45be5271e2f3164c328d449efc4b8fc92dfc1225d38e09630909fe92e90a5c77618daa5f592d23fc3ad667094 +b268ad68c7bf432a01039cd889afae815c3e120f57930d463aece10af4fd330b5bd7d8869ef1bcf6b2e78e4229922edc +a4c91a0d6f16b1553264592b4cbbbf3ca5da32ab053ffbdd3dbb1aed1afb650fb6e0dc5274f71a51d7160856477228db +ad89d043c2f0f17806277ffdf3ecf007448e93968663f8a0b674254f36170447b7527d5906035e5e56f4146b89b5af56 +8b6964f757a72a22a642e4d69102951897e20c21449184e44717bd0681d75f7c5bfa5ee5397f6e53febf85a1810d6ed1 +b08f5cdaabec910856920cd6e836c830b863eb578423edf0b32529488f71fe8257d90aed4a127448204df498b6815d79 +af26bb3358be9d280d39b21d831bb53145c4527a642446073fee5a86215c4c89ff49a3877a7a549486262f6f57a0f476 +b4010b37ec4d7c2af20800e272539200a6b623ae4636ecbd0e619484f4ab9240d02bc5541ace3a3fb955dc0a3d774212 +82752ab52bdcc3cc2fc405cb05a2e694d3df4a3a68f2179ec0652536d067b43660b96f85f573f26fbd664a9ef899f650 +96d392dde067473a81faf2d1fea55b6429126b88b160e39b4210d31d0a82833ffd3a80e07d24d495aea2d96be7251547 +a76d8236d6671204d440c33ac5b8deb71fa389f6563d80e73be8b043ec77d4c9b06f9a586117c7f957f4af0331cbc871 +b6c90961f68b5e385d85c9830ec765d22a425f506904c4d506b87d8944c2b2c09615e740ed351df0f9321a7b93979cae +a6ec5ea80c7558403485b3b1869cdc63bde239bafdf936d9b62a37031628402a36a2cfa5cfbb8e26ac922cb0a209b3ba +8c3195bbdbf9bc0fc95fa7e3d7f739353c947f7767d1e3cb24d8c8602d8ea0a1790ac30b815be2a2ba26caa5227891e2 +a7f8a63d809f1155722c57f375ea00412b00147776ae4444f342550279ef4415450d6f400000a326bf11fea6c77bf941 +97fa404df48433a00c85793440e89bb1af44c7267588ae937a1f5d53e01e1c4d4fc8e4a6d517f3978bfdd6c2dfde012f +a984a0a3836de3d8d909c4629a2636aacb85393f6f214a2ef68860081e9db05ad608024762db0dc35e895dc00e2d4cdd +9526cf088ab90335add1db4d3a4ac631b58cbfbe88fa0845a877d33247d1cfeb85994522e1eb8f8874651bfb1df03e2a +ac83443fd0afe99ad49de9bf8230158c118e2814c9c89db5ac951c240d6c2ce45e7677221279d9e97848ec466b99aafe +aeeefdbaba612e971697798ceaf63b247949dc823a0ad771ae5b988a5e882b338a98d3d0796230f49d533ec5ba411b39 +ae3f248b5a7b0f92b7820a6c5ae21e5bd8f4265d4f6e21a22512079b8ee9be06393fd3133ce8ebac0faf23f4f8517e36 +a64a831b908eee784b8388b45447d2885ec0551b26b0c2b15e5f417d0a12c79e867fb7bd3d008d0af98b44336f8ec1ad +b242238cd8362b6e440ba21806905714dd55172db25ec7195f3fc4937b2aba146d5cbf3cf691a1384b4752dc3b54d627 +819f97f337eea1ffb2a678cc25f556f1aab751c6b048993a1d430fe1a3ddd8bb411c152e12ca60ec6e057c190cd1db9a +b9d7d187407380df54ee9fef224c54eec1bfabf17dc8abf60765b7951f538f59aa26fffd5846cfe05546c35f59b573f4 +aa6e3c14efa6a5962812e3f94f8ce673a433f4a82d07a67577285ea0eaa07f8be7115853122d12d6d4e1fdf64c504be1 +82268bee9c1662d3ddb5fb785abfae6fb8b774190f30267f1d47091d2cd4b3874db4372625aa36c32f27b0eee986269b +b236459565b7b966166c4a35b2fa71030b40321821b8e96879d95f0e83a0baf33fa25721f30af4a631df209e25b96061 +8708d752632d2435d2d5b1db4ad1fa2558d776a013655f88e9a3556d86b71976e7dfe5b8834fdec97682cd94560d0d0d +ae1424a68ae2dbfb0f01211f11773732a50510b5585c1fb005cb892b2c6a58f4a55490b5c5b4483c6fce40e9d3236a52 +b3f5f722af9dddb07293c871ce97abbccba0093ca98c8d74b1318fa21396fc1b45b69c15084f63d728f9908442024506 +9606f3ce5e63886853ca476dc0949e7f1051889d529365c0cb0296fdc02abd088f0f0318ecd2cf36740a3634132d36f6 +b11a833a49fa138db46b25ff8cdda665295226595bc212c0931b4931d0a55c99da972c12b4ef753f7e37c6332356e350 +afede34e7dab0a9e074bc19a7daddb27df65735581ca24ad70c891c98b1349fcebbcf3ba6b32c2617fe06a5818dabc2d +97993d456e459e66322d01f8eb13918979761c3e8590910453944bdff90b24091bb018ac6499792515c9923be289f99f +977e3e967eff19290a192cd11df3667d511b398fb3ac9a5114a0f3707e25a0edcb56105648b1b85a8b7519fc529fc6f6 +b873a7c88bf58731fe1bf61ff6828bf114cf5228f254083304a4570e854e83748fc98683ddba62d978fff7909f2c5c47 +ad4b2691f6f19da1d123aaa23cca3e876247ed9a4ab23c599afdbc0d3aa49776442a7ceaa996ac550d0313d9b9a36cee +b9210713c78e19685608c6475bfa974b57ac276808a443f8b280945c5d5f9c39da43effa294bfb1a6c6f7b6b9f85bf6c +a65152f376113e61a0e468759de38d742caa260291b4753391ee408dea55927af08a4d4a9918600a3bdf1df462dffe76 +8bf8c27ad5140dde7f3d2280fd4cc6b29ab76537e8d7aa7011a9d2796ee3e56e9a60c27b5c2da6c5e14fc866301dc195 +92fde8effc9f61393a2771155812b863cff2a0c5423d7d40aa04d621d396b44af94ddd376c28e7d2f53c930aea947484 +97a01d1dd9ee30553ce676011aea97fa93d55038ada95f0057d2362ae9437f3ed13de8290e2ff21e3167dd7ba10b9c3f +89affffaa63cb2df3490f76f0d1e1d6ca35c221dd34057176ba739fa18d492355e6d2a5a5ad93a136d3b1fed0bb8aa19 +928b8e255a77e1f0495c86d3c63b83677b4561a5fcbbe5d3210f1e0fc947496e426d6bf3b49394a5df796c9f25673fc4 +842a0af91799c9b533e79ee081efe2a634cac6c584c2f054fb7d1db67dde90ae36de36cbf712ec9cd1a0c7ee79e151ea +a65b946cf637e090baf2107c9a42f354b390e7316beb8913638130dbc67c918926eb87bec3b1fe92ef72bc77a170fa3b +aafc0f19bfd71ab5ae4a8510c7861458b70ad062a44107b1b1dbacbfa44ba3217028c2824bd7058e2fa32455f624040b +95269dc787653814e0be899c95dba8cfa384f575a25e671c0806fd80816ad6797dc819d30ae06e1d0ed9cb01c3950d47 +a1e760f7fa5775a1b2964b719ff961a92083c5c617f637fc46e0c9c20ab233f8686f7f38c3cb27d825c54dd95e93a59b +ac3b8a7c2317ea967f229eddc3e23e279427f665c4705c7532ed33443f1243d33453c1088f57088d2ab1e3df690a9cc9 +b787beeddfbfe36dd51ec4efd9cf83e59e84d354c3353cc9c447be53ae53d366ed1c59b686e52a92f002142c8652bfe0 +b7a64198300cb6716aa7ac6b25621f8bdec46ad5c07a27e165b3f774cdf65bcfdbf31e9bae0c16b44de4b00ada7a4244 +b8ae9f1452909e0c412c7a7fe075027691ea8df1347f65a5507bc8848f1d2c833d69748076db1129e5b4fb912f65c86c +9682e41872456b9fa67def89e71f06d362d6c8ca85c9c48536615bc401442711e1c9803f10ab7f8ab5feaec0f9df20a6 +88889ff4e271dc1c7e21989cc39f73cde2f0475acd98078281591ff6c944fadeb9954e72334319050205d745d4df73df +8f79b5b8159e7fd0d93b0645f3c416464f39aec353b57d99ecf24f96272df8a068ad67a6c90c78d82c63b40bb73989bb +838c01a009a3d8558a3f0bdd5e22de21af71ca1aefc8423c91dc577d50920e9516880e87dce3e6d086e11cd45c9052d9 +b97f1c6eee8a78f137c840667cc288256e39294268a3009419298a04a1d0087c9c9077b33c917c65caf76637702dda8a +972284ce72f96a61c899260203dfa06fc3268981732bef74060641c1a5068ead723e3399431c247ca034b0dae861e8df +945a8d52d6d3db6663dbd3110c6587f9e9c44132045eeffba15621576d178315cb52870fa5861669f84f0bee646183fe +a0a547b5f0967b1c3e5ec6c6a9a99f0578521489180dfdfbb5561f4d166baac43a2f06f950f645ce991664e167537eed +a0592cda5cdddf1340033a745fd13a6eff2021f2e26587116c61c60edead067e0f217bc2bef4172a3c9839b0b978ab35 +b9c223b65a3281587fa44ec829e609154b32f801fd1de6950e01eafb07a8324243b960d5735288d0f89f0078b2c42b5b +99ebfc3b8f9f98249f4d37a0023149ed85edd7a5abe062c8fb30c8c84555258b998bdcdd1d400bc0fa2a4aaa8b224466 +955b68526e6cb3937b26843270f4e60f9c6c8ece2fa9308fe3e23afa433309c068c66a4bc16ee2cf04220f095e9afce4 +b766caeafcc00378135ae53397f8a67ed586f5e30795462c4a35853de6681b1f17401a1c40958de32b197c083b7279c1 +921bf87cad947c2c33fa596d819423c10337a76fe5a63813c0a9dc78a728207ae7b339407a402fc4d0f7cba3af6da6fc +a74ba1f3bc3e6c025db411308f49b347ec91da1c916bda9da61e510ec8d71d25e0ac0f124811b7860e5204f93099af27 +a29b4d144e0bf17a7e8353f2824cef0ce85621396babe8a0b873ca1e8a5f8d508b87866cf86da348470649fceefd735c +a8040e12ffc3480dd83a349d06741d1572ef91932c46f5cf03aee8454254156ee95786fd013d5654725e674c920cec32 +8c4cf34ca60afd33923f219ffed054f90cd3f253ffeb2204a3b61b0183417e366c16c07fae860e362b0f2bfe3e1a1d35 +8195eede4ddb1c950459df6c396b2e99d83059f282b420acc34220cadeed16ab65c856f2c52568d86d3c682818ed7b37 +91fff19e54c15932260aa990c7fcb3c3c3da94845cc5aa8740ef56cf9f58d19b4c3c55596f8d6c877f9f4d22921d93aa +a3e0bf7e5d02a80b75cf75f2db7e66cb625250c45436e3c136d86297d652590ec97c2311bafe407ad357c79ab29d107b +81917ff87e5ed2ae4656b481a63ced9e6e5ff653b8aa6b7986911b8bc1ee5b8ef4f4d7882c3f250f2238e141b227e510 +915fdbe5e7de09c66c0416ae14a8750db9412e11dc576cf6158755fdcaf67abdbf0fa79b554cac4fe91c4ec245be073f +8df27eafb5c3996ba4dc5773c1a45ca77e626b52e454dc1c4058aa94c2067c18332280630cc3d364821ee53bf2b8c130 +934f8a17c5cbb827d7868f5c8ca00cb027728a841000a16a3428ab16aa28733f16b52f58c9c4fbf75ccc45df72d9c4df +b83f4da811f9183c25de8958bc73b504cf790e0f357cbe74ef696efa7aca97ad3b7ead1faf76e9f982c65b6a4d888fc2 +87188213c8b5c268dc2b6da413f0501c95749e953791b727450af3e43714149c115b596b33b63a2f006a1a271b87efd0 +83e9e888ab9c3e30761de635d9aabd31248cdd92f7675fc43e4b21fd96a03ec1dc4ad2ec94fec857ffb52683ac98e360 +b4b9a1823fe2d983dc4ec4e3aaea297e581c3fc5ab4b4af5fa1370caa37af2d1cc7fc6bfc5e7da60ad8fdce27dfe4b24 +856388bc78aef465dbcdd1f559252e028c9e9a2225c37d645c138e78f008f764124522705822a61326a6d1c79781e189 +a6431b36db93c3b47353ba22e7c9592c9cdfb9cbdd052ecf2cc3793f5b60c1e89bc96e6bae117bfd047f2308da00dd2f +b619972d48e7e4291542dcde08f7a9cdc883c892986ded2f23ccb216e245cd8d9ad1d285347b0f9d7611d63bf4cee2bc +8845cca6ff8595955f37440232f8e61d5351500bd016dfadd182b9d39544db77a62f4e0102ff74dd4173ae2c181d24ef +b2f5f7fa26dcd3b6550879520172db2d64ee6aaa213cbef1a12befbce03f0973a22eb4e5d7b977f466ac2bf8323dcedd +858b7f7e2d44bdf5235841164aa8b4f3d33934e8cb122794d90e0c1cac726417b220529e4f896d7b77902ab0ccd35b3a +80b0408a092dae2b287a5e32ea1ad52b78b10e9c12f49282976cd738f5d834e03d1ad59b09c5ccaccc39818b87d06092 +b996b0a9c6a2d14d984edcd6ab56bc941674102980d65b3ad9733455f49473d3f587c8cbf661228a7e125ddbe07e3198 +90224fcebb36865293bd63af786e0c5ade6b67c4938d77eb0cbae730d514fdd0fe2d6632788e858afd29d46310cf86df +b71351fdfff7168b0a5ec48397ecc27ac36657a8033d9981e97002dcca0303e3715ce6dd3f39423bc8ef286fa2e9e669 +ae2a3f078b89fb753ce4ed87e0c1a58bb19b4f0cfb6586dedb9fcab99d097d659a489fb40e14651741e1375cfc4b6c5f +8ef476b118e0b868caed297c161f4231bbeb863cdfa5e2eaa0fc6b6669425ce7af50dc374abceac154c287de50c22307 +92e46ab472c56cfc6458955270d3c72b7bde563bb32f7d4ab4d959db6f885764a3d864e1aa19802fefaa5e16b0cb0b54 +96a3f68323d1c94e73d5938a18a377af31b782f56212de3f489d22bc289cf24793a95b37f1d6776edf88114b5c1fa695 +962cc068cfce6faaa27213c4e43e44eeff0dfbb6d25b814e82c7da981fb81d7d91868fa2344f05fb552362f98cfd4a72 +895d4e4c4ad670abf66d43d59675b1add7afad7438ada8f42a0360c704cee2060f9ac15b4d27e9b9d0996bb801276fe3 +b3ad18d7ece71f89f2ef749b853c45dc56bf1c796250024b39a1e91ed11ca32713864049c9aaaea60cde309b47486bbf +8f05404e0c0258fdbae50e97ccb9b72ee17e0bd2400d9102c0dad981dac8c4c71585f03e9b5d50086d0a2d3334cb55d1 +8bd877e9d4591d02c63c6f9fc9976c109de2d0d2df2bfa5f6a3232bab5b0b8b46e255679520480c2d7a318545efa1245 +8d4c16b5d98957c9da13d3f36c46f176e64e5be879f22be3179a2c0e624fe4758a82bf8c8027410002f973a3b84cd55a +86e2a8dea86427b424fa8eada881bdff896907084a495546e66556cbdf070b78ba312bf441eb1be6a80006d25d5097a3 +8608b0c117fd8652fdab0495b08fadbeba95d9c37068e570de6fddfef1ba4a1773b42ac2be212836141d1bdcdef11a17 +a13d6febf5fb993ae76cae08423ca28da8b818d6ef0fde32976a4db57839cd45b085026b28ee5795f10a9a8e3098c683 +8e261967fa6de96f00bc94a199d7f72896a6ad8a7bbb1d6187cca8fad824e522880e20f766620f4f7e191c53321d70f9 +8b8e8972ac0218d7e3d922c734302803878ad508ca19f5f012bc047babd8a5c5a53deb5fe7c15a4c00fd6d1cb9b1dbd0 +b5616b233fb3574a2717d125a434a2682ff68546dccf116dd8a3b750a096982f185614b9fb6c7678107ff40a451f56fa +aa6adf9b0c3334b0d0663f583a4914523b2ac2e7adffdb026ab9109295ff6af003ef8357026dbcf789896d2afded8d73 +acb72df56a0b65496cd534448ed4f62950bb1e11e50873b6ed349c088ee364441821294ce0f7c61bd7d38105bea3b442 +abae12df83e01ec947249fedd0115dc501d2b03ff7232092979eda531dbbca29ace1d46923427c7dde4c17bdf3fd7708 +820b4fc2b63a9fda7964acf5caf19a2fc4965007cb6d6b511fcafcb1f71c3f673a1c0791d3f86e3a9a1eb6955b191cc0 +af277259d78c6b0f4f030a10c53577555df5e83319ddbad91afbd7c30bc58e7671c56d00d66ec3ab5ef56470cd910cee +ad4a861c59f1f5ca1beedd488fb3d131dea924fffd8e038741a1a7371fad7370ca5cf80dc01f177fbb9576713bb9a5b3 +b67a5162982ce6a55ccfb2f177b1ec26b110043cf18abd6a6c451cf140b5af2d634591eb4f28ad92177d8c7e5cd0a5e8 +96176d0a83816330187798072d449cbfccff682561e668faf6b1220c9a6535b32a6e4f852e8abb00f79abb87493df16b +b0afe6e7cb672e18f0206e4423f51f8bd0017bf464c4b186d46332c5a5847647f89ff7fa4801a41c1b0b42f6135bcc92 +8fc5e7a95ef20c1278c645892811f6fe3f15c431ebc998a32ec0da44e7213ea934ed2be65239f3f49b8ec471e9914160 +b7793e41adda6c82ba1f2a31f656f6205f65bf8a3d50d836ee631bc7ce77c153345a2d0fc5c60edf8b37457c3729c4ec +a504dd7e4d6b2f4379f22cc867c65535079c75ccc575955f961677fa63ecb9f74026fa2f60c9fb6323c1699259e5e9c8 +ab899d00ae693649cc1afdf30fb80d728973d2177c006e428bf61c7be01e183866614e05410041bc82cb14a33330e69c +8a3bd8b0b1be570b65c4432a0f6dc42f48a2000e30ab089cf781d38f4090467b54f79c0d472fcbf18ef6a00df69cc6f3 +b4d7028f7f76a96a3d7803fca7f507ae11a77c5346e9cdfccb120a833a59bda1f4264e425aa588e7a16f8e7638061d84 +b9c7511a76ea5fb105de905d44b02edb17008335766ee357ed386b7b3cf19640a98b38785cb14603c1192bee5886c9b6 +8563afb12e53aed71ac7103ab8602bfa8371ae095207cb0d59e8fd389b6ad1aff0641147e53cb6a7ca16c7f37c9c5e6b +8e108be614604e09974a9ed90960c28c4ea330a3d9a0cb4af6dd6f193f84ab282b243ecdf549b3131036bebc8905690c +b794d127fbedb9c5b58e31822361706ffac55ce023fbfe55716c3c48c2fd2f2c7660a67346864dfe588812d369cb50b6 +b797a3442fc3b44f41baefd30346f9ac7f96e770d010d53c146ce74ce424c10fb62758b7e108b8abfdc5fafd89d745cb +993bb71e031e8096442e6205625e1bfddfe6dd6a83a81f3e2f84fafa9e5082ab4cad80a099f21eff2e81c83457c725c3 +8711ab833fc03e37acf2e1e74cfd9133b101ff4144fe30260654398ae48912ab46549d552eb9d15d2ea57760d35ac62e +b21321fd2a12083863a1576c5930e1aecb330391ef83326d9d92e1f6f0d066d1394519284ddab55b2cb77417d4b0292f +877d98f731ffe3ee94b0b5b72d127630fa8a96f6ca4f913d2aa581f67732df6709493693053b3e22b0181632ac6c1e3b +ae391c12e0eb8c145103c62ea64f41345973311c3bf7281fa6bf9b7faafac87bcf0998e5649b9ef81e288c369c827e07 +b83a2842f36998890492ab1cd5a088d9423d192681b9a3a90ec518d4c541bce63e6c5f4df0f734f31fbfdd87785a2463 +a21b6a790011396e1569ec5b2a423857b9bec16f543e63af28024e116c1ea24a3b96e8e4c75c6537c3e4611fd265e896 +b4251a9c4aab3a495da7a42e684ba4860dbcf940ad1da4b6d5ec46050cbe8dab0ab9ae6b63b5879de97b905723a41576 +8222f70aebfe6ac037f8543a08498f4cadb3edaac00336fc00437eb09f2cba758f6c38e887cc634b4d5b7112b6334836 +86f05038e060594c46b5d94621a1d9620aa8ba59a6995baf448734e21f58e23c1ea2993d3002ad5250d6edd5ba59b34f +a7c0c749baef811ab31b973c39ceb1d94750e2bc559c90dc5eeb20d8bb6b78586a2b363c599ba2107d6be65cd435f24e +861d46a5d70b38d6c1cd72817a2813803d9f34c00320c8b62f8b9deb67f5b5687bc0b37c16d28fd017367b92e05da9ca +b3365d3dab639bffbe38e35383686a435c8c88b397b717cd4aeced2772ea1053ceb670f811f883f4e02975e5f1c4ac58 +a5750285f61ab8f64cd771f6466e2c0395e01b692fd878f2ef2d5c78bdd8212a73a3b1dfa5e4c8d9e1afda7c84857d3b +835a10809ccf939bc46cf950a33b36d71be418774f51861f1cd98a016ade30f289114a88225a2c11e771b8b346cbe6ef +a4f59473a037077181a0a62f1856ec271028546ca9452b45cedfcb229d0f4d1aabfc13062b07e536cc8a0d4b113156a2 +95cd14802180b224d44a73cc1ed599d6c4ca62ddcaa503513ccdc80aaa8be050cc98bd4b4f3b639549beb4587ac6caf9 +973b731992a3e69996253d7f36dd7a0af1982b5ed21624b77a7965d69e9a377b010d6dabf88a8a97eec2a476259859cc +af8a1655d6f9c78c8eb9a95051aa3baaf9c811adf0ae8c944a8d3fcba87b15f61021f3baf6996fa0aa51c81b3cb69de1 +835aad5c56872d2a2d6c252507b85dd742bf9b8c211ccb6b25b52d15c07245b6d89b2a40f722aeb5083a47cca159c947 +abf4e970b02bef8a102df983e22e97e2541dd3650b46e26be9ee394a3ea8b577019331857241d3d12b41d4eacd29a3ac +a13c32449dbedf158721c13db9539ae076a6ce5aeaf68491e90e6ad4e20e20d1cdcc4a89ed9fd49cb8c0dd50c17633c1 +8c8f78f88b7e22dd7e9150ab1c000f10c28e696e21d85d6469a6fe315254740f32e73d81ab1f3c1cf8f544c86df506e8 +b4b77f2acfe945abf81f2605f906c10b88fb4d28628487fb4feb3a09f17f28e9780445dfcee4878349d4c6387a9d17d4 +8d255c235f3812c6ecc646f855fa3832be5cb4dbb9c9e544989fafdf3f69f05bfd370732eaf954012f0044aa013fc9c6 +b982efd3f34b47df37c910148ac56a84e8116647bea24145a49e34e0a6c0176e3284d838dae6230cb40d0be91c078b85 +983f365aa09bd85df2a6a2ad8e4318996b1e27d02090755391d4486144e40d80b1fbfe1c798d626db92f52e33aa634da +95fd1981271f3ea3a41d654cf497e6696730d9ff7369f26bc4d7d15c7adb4823dd0c42e4a005a810af12d234065e5390 +a9f5219bd4b913c186ef30c02f995a08f0f6f1462614ea5f236964e02bdaa33db9d9b816c4aee5829947840a9a07ba60 +9210e6ceb05c09b46fd09d036287ca33c45124ab86315e5d6911ff89054f1101faaa3e83d123b7805056d388bcec6664 +8ed9cbf69c6ff3a5c62dd9fe0d7264578c0f826a29e614bc2fb4d621d90c8c9992438accdd7a614b1dca5d1bb73dc315 +85cf2a8cca93e00da459e3cecd22c342d697eee13c74d5851634844fc215f60053cf84b0e03c327cb395f48d1c71a8a4 +8818a18e9a2ec90a271b784400c1903089ffb0e0b40bc5abbbe12fbebe0f731f91959d98c5519ef1694543e31e2016d4 +8dabc130f296fa7a82870bf9a8405aaf542b222ed9276bba9bd3c3555a0f473acb97d655ee7280baff766a827a8993f0 +ac7952b84b0dc60c4d858f034093b4d322c35959605a3dad2b806af9813a4680cb038c6d7f4485b4d6b2ff502aaeca25 +ad65cb6d57b48a2602568d2ec8010baed0eb440eec7638c5ec8f02687d764e9de5b5d42ad5582934e592b48471c22d26 +a02ab8bd4c3d114ea23aebdd880952f9495912817da8c0c08eabc4e6755439899d635034413d51134c72a6320f807f1c +8319567764b8295402ec1ebef4c2930a138480b37e6d7d01c8b4c9cd1f2fc3f6e9a44ae6e380a0c469b25b06db23305f +afec53b2301dc0caa8034cd9daef78c48905e6068d692ca23d589b84a6fa9ddc2ed24a39480597e19cb3e83eec213b3f +ac0b4ffdb5ae08e586a9cdb98f9fe56f4712af3a97065e89e274feacfb52b53c839565aee93c4cfaaccfe51432c4fab0 +8972cbf07a738549205b1094c5987818124144bf187bc0a85287c94fdb22ce038c0f11df1aa16ec5992e91b44d1af793 +b7267aa6f9e3de864179b7da30319f1d4cb2a3560f2ea980254775963f1523b44c680f917095879bebfa3dc2b603efcf +80f68f4bfc337952e29504ee5149f15093824ea7ab02507efd1317a670f6cbc3611201848560312e3e52e9d9af72eccf +8897fee93ce8fc1e1122e46b6d640bba309384dbd92e46e185e6364aa8210ebf5f9ee7e5e604b6ffba99aa80a10dd7d0 +b58ea6c02f2360be60595223d692e82ee64874fda41a9f75930f7d28586f89be34b1083e03bbc1575bbfdda2d30db1ea +85a523a33d903280d70ac5938770453a58293480170c84926457ac2df45c10d5ff34322ab130ef4a38c916e70d81af53 +a2cbf045e1bed38937492c1f2f93a5ba41875f1f262291914bc1fc40c60bd0740fb3fea428faf6da38b7c180fe8ac109 +8c09328770ed8eb17afc6ac7ddd87bb476de18ed63cab80027234a605806895959990c47bd10d259d7f3e2ecb50074c9 +b4b9e19edb4a33bde8b7289956568a5b6b6557404e0a34584b5721fe6f564821091013fbb158e2858c6d398293bb4b59 +8a47377df61733a2aa5a0e945fce00267f8e950f37e109d4487d92d878fb8b573317bb382d902de515b544e9e233458d +b5804c9d97efeff5ca94f3689b8088c62422d92a1506fd1d8d3b1b30e8a866ad0d6dad4abfa051dfc4471250cac4c5d9 +9084a6ee8ec22d4881e9dcc8a9eb3c2513523d8bc141942370fd191ad2601bf9537a0b1e84316f3209b3d8a54368051e +85447eea2fa26656a649f8519fa67279183044791d61cf8563d0783d46d747d96af31d0a93507bbb2242666aa87d3720 +97566a84481027b60116c751aec552adfff2d9038e68d48c4db9811fb0cbfdb3f1d91fc176a0b0d988a765f8a020bce1 +ae87e5c1b9e86c49a23dceda4ecfd1dcf08567f1db8e5b6ec752ebd45433c11e7da4988573cdaebbb6f4135814fc059e +abee05cf9abdbc52897ac1ce9ed157f5466ed6c383d6497de28616238d60409e5e92619e528af8b62cc552bf09970dc2 +ae6d31cd7bf9599e5ee0828bab00ceb4856d829bba967278a73706b5f388465367aa8a6c7da24b5e5f1fdd3256ef8e63 +ac33e7b1ee47e1ee4af472e37ab9e9175260e506a4e5ce449788075da1b53c44cb035f3792d1eea2aa24b1f688cc6ed3 +80f65b205666b0e089bb62152251c48c380a831e5f277f11f3ef4f0d52533f0851c1b612267042802f019ec900dc0e8f +858520ad7aa1c9fed738e3b583c84168f2927837ad0e1d326afe9935c26e9b473d7f8c382e82ef1fe37d2b39bb40a1ee +b842dd4af8befe00a97c2d0f0c33c93974761e2cb9e5ab8331b25170318ddd5e4bdbc02d8f90cbfdd5f348f4f371c1f7 +8bf2cb79bc783cb57088aae7363320cbeaabd078ffdec9d41bc74ff49e0043d0dad0086a30e5112b689fd2f5a606365d +982eb03bbe563e8850847cd37e6a3306d298ab08c4d63ab6334e6b8c1fa13fce80cf2693b09714c7621d74261a0ff306 +b143edb113dec9f1e5105d4a93fbe502b859e587640d3db2f628c09a17060e6aec9e900e2c8c411cda99bc301ff96625 +af472d9befa750dcebc5428fe1a024f18ec1c07bca0f95643ce6b5f4189892a910285afb03fd7ed7068fbe614e80d33c +a97e3bc57ede73ecd1bbf02de8f51b4e7c1a067da68a3cd719f4ba26a0156cbf1cef2169fd35a18c5a4cced50d475998 +a862253c937cf3d75d7183e5f5be6a4385d526aeda5171c1c60a8381fea79f88f5f52a4fab244ecc70765d5765e6dfd5 +90cb776f8e5a108f1719df4a355bebb04bf023349356382cae55991b31720f0fd03206b895fa10c56c98f52453be8778 +a7614e8d0769dccd520ea4b46f7646e12489951efaef5176bc889e9eb65f6e31758df136b5bf1e9107e68472fa9b46ec +ac3a9b80a3254c42e5ed3a090a0dd7aee2352f480de96ad187027a3bb6c791eddfc3074b6ffd74eea825188f107cda4d +82a01d0168238ef04180d4b6e0a0e39024c02c2d75b065017c2928039e154d093e1af4503f4d1f3d8a948917abb5d09f +8fab000a2b0eef851a483aec8d2dd85fe60504794411a2f73ed82e116960547ac58766cb73df71aea71079302630258d +872451a35c6db61c63e9b8bb9f16b217f985c20be4451c14282c814adb29d7fb13f201367c664435c7f1d4d9375d7a58 +887d9ff54cc96b35d562df4a537ff972d7c4b3fd91ab06354969a4cfede0b9fc68bbffb61d0dbf1a58948dc701e54f5a +8cb5c2a6bd956875d88f41ae24574434f1308514d44057b55c9c70f13a3366ed054150eed0955a38fda3f757be73d55f +89ad0163cad93e24129d63f8e38422b7674632a8d0a9016ee8636184cab177659a676c4ee7efba3abe1a68807c656d60 +b9ec01c7cab6d00359b5a0b4a1573467d09476e05ca51a9227cd16b589a9943d161eef62dcc73f0de2ec504d81f4d252 +8031d17635d39dfe9705c485d2c94830b6fc9bc67b91300d9d2591b51e36a782e77ab5904662effa9382d9cca201f525 +8be5a5f6bc8d680e5092d6f9a6585acbaaaa2ddc671da560dcf5cfa4472f4f184b9597b5b539438accd40dda885687cc +b1fc0f052fae038a2e3de3b3a96b0a1024b009de8457b8b3adb2d315ae68a89af905720108a30038e5ab8d0d97087785 +8b8bdc77bd3a6bc7ca5492b6f8c614852c39a70d6c8a74916eaca0aeb4533b11898b8820a4c2620a97bf35e275480029 +af35f4dc538d4ad5cdf710caa38fd1eb496c3fa890a047b6a659619c5ad3054158371d1e88e0894428282eed9f47f76b +8166454a7089cc07758ad78724654f4e7a1a13e305bbf88ddb86f1a4b2904c4fc8ab872d7da364cdd6a6c0365239e2ad +ab287c7d3addce74ce40491871c768abe01daaa0833481276ff2e56926b38a7c6d2681ffe837d2cc323045ad1a4414f9 +b90317f4505793094d89365beb35537f55a6b5618904236258dd04ca61f21476837624a2f45fef8168acf732cab65579 +98ae5ea27448e236b6657ab5ef7b1cccb5372f92ab25f5fa651fbac97d08353a1dae1b280b1cd42b17d2c6a70a63ab9d +adcf54e752d32cbaa6cb98fbca48d8cd087b1db1d131d465705a0d8042c8393c8f4d26b59006eb50129b21e6240f0c06 +b591a3e4db18a7345fa935a8dd7994bbac5cc270b8ebd84c8304c44484c7a74afb45471fdbe4ab22156a30fae1149b40 +806b53ac049a42f1dcc1d6335505371da0bf27c614f441b03bbf2e356be7b2fb4eed7117eabcce9e427a542eaa2bf7d8 +800482e7a772d49210b81c4a907f5ce97f270b959e745621ee293cf8c71e8989363d61f66a98f2d16914439544ca84c7 +99de9eafdad3617445312341644f2bb888680ff01ce95ca9276b1d2e5ef83fa02dab5e948ebf66c17df0752f1bd37b70 +961ee30810aa4c93ae157fbe9009b8e443c082192bd36a73a6764ff9b2ad8b0948fe9a73344556e01399dd77badb4257 +ae0a361067c52efbe56c8adf982c00432cd478929459fc7f74052c8ee9531cd031fe1335418fde53f7c2ef34254eb7ac +a3503d16b6b27eb20c1b177bcf90d13706169220523a6271b85b2ce35a9a2b9c5bed088540031c0a4ebfdae3a4c6ab04 +909420122c3e723289ca4e7b81c2df5aff312972a2203f4c45821b176e7c862bf9cac7f7df3adf1d59278f02694d06e7 +989f42380ae904b982f85d0c6186c1aef5d6bcba29bcfbb658e811b587eb2749c65c6e4a8cc6409c229a107499a4f5d7 +8037a6337195c8e26a27ea4ef218c6e7d79a9720aaab43932d343192abc2320fe72955f5e431c109093bda074103330a +b312e168663842099b88445e940249cc508f080ab0c94331f672e7760258dbd86be5267e4cf25ea25facb80bff82a7e9 +aaa3ff8639496864fcdbfdda1ac97edc4f08e3c9288b768f6c8073038c9fbbf7e1c4bea169b4d45c31935cdf0680d45e +97dbd3df37f0b481a311dfc5f40e59227720f367912200d71908ef6650f32cc985cb05b981e3eea38958f7e48d10a15d +a89d49d1e267bb452d6cb621b9a90826fe55e9b489c0427b94442d02a16f390eed758e209991687f73f6b5a032321f42 +9530dea4e0e19d6496f536f2e75cf7d814d65fde567055eb20db48fd8d20d501cd2a22fb506db566b94c9ee10f413d43 +81a7009b9e67f1965fa7da6a57591c307de91bf0cd35ab4348dc4a98a4961e096d004d7e7ad318000011dc4342c1b809 +83440a9402b766045d7aca61a58bba2aa29cac1cf718199e472ba086f5d48093d9dda4d135292ba51d049a23964eceae +a06c9ce5e802df14f6b064a3d1a0735d429b452f0e2e276042800b0a4f16df988fd94cf3945921d5dd3802ab2636f867 +b1359e358b89936dee9e678a187aad3e9ab14ac40e96a0a68f70ee2583cdcf467ae03bef4215e92893f4e12f902adec8 +835304f8619188b4d14674d803103d5a3fa594d48e96d9699e653115dd05fdc2dda6ba3641cf7ad53994d448da155f02 +8327cba5a9ff0d3f5cd0ae55e77167448926d5fcf76550c0ad978092a14122723090c51c415e88e42a2b62eb07cc3981 +b373dcdaea85f85ce9978b1426a7ef4945f65f2d3467a9f1cc551a99766aac95df4a09e2251d3f89ca8c9d1a7cfd7b0e +ab1422dc41af2a227b973a6fd124dfcb2367e2a11a21faa1d381d404f51b7257e5bc82e9cf20cd7fe37d7ae761a2ab37 +a93774a03519d2f20fdf2ef46547b0a5b77c137d6a3434b48d56a2cbef9e77120d1b85d0092cf8842909213826699477 +8eb967a495a38130ea28711580b7e61bcd1d051cd9e4f2dbf62f1380bd86e0d60e978d72f6f31e909eb97b3b9a2b867c +ae8213378da1287ba1fe4242e1acaec19b877b6fe872400013c6eac1084b8d03156792fa3020201725b08228a1e80f49 +b143daf6893d674d607772b3b02d8ac48f294237e2f2c87963c0d4e26d9227d94a2a13512457c3d5883544bbc259f0ef +b343bd2aca8973888e42542218924e2dda2e938fd1150d06878af76f777546213912b7c7a34a0f94186817d80ffa185c +b188ebc6a8c3007001aa347ae72cc0b15d09bc6c19a80e386ee4b334734ec0cc2fe8b493c2422f38d1e6d133cc3db6fe +b795f6a8b9b826aaeee18ccd6baf6c5adeeec85f95eb5b6d19450085ec7217e95a2d9e221d77f583b297d0872073ba0e +b1c7dbd998ad32ae57bfa95deafa147024afd57389e98992c36b6e52df915d3d5a39db585141ec2423173e85d212fed8 +812bcdeb9fe5f12d0e1df9964798056e1f1c3de3b17b6bd2919b6356c4b86d8e763c01933efbe0224c86a96d5198a4be +b19ebeda61c23d255cbf472ef0b8a441f4c55b70f0d8ed47078c248b1d3c7c62e076b43b95c00a958ec8b16d5a7cb0d7 +b02adc9aaa20e0368a989c2af14ff48b67233d28ebee44ff3418bb0473592e6b681af1cc45450bd4b175df9051df63d9 +8d87f0714acee522eb58cec00360e762adc411901dba46adc9227124fa70ee679f9a47e91a6306d6030dd4eb8de2f3c1 +8be54cec21e74bcc71de29dc621444263737db15f16d0bb13670f64e42f818154e04b484593d19ef95f2ee17e4b3fe21 +ab8e20546c1db38d31493b5d5f535758afb17e459645c1b70813b1cf7d242fd5d1f4354a7c929e8f7259f6a25302e351 +89f035a1ed8a1e302ac893349ba8ddf967580fcb6e73d44af09e3929cde445e97ff60c87dafe489e2c0ab9c9986cfa00 +8b2b0851a795c19191a692af55f7e72ad2474efdc5401bc3733cfdd910e34c918aaebe69d5ea951bdddf3c01cabbfc67 +a4edb52c2b51495ccd1ee6450fc14b7b3ede8b3d106808929d02fb31475bacb403e112ba9c818d2857651e508b3a7dd1 +9569341fded45d19f00bcf3cbf3f20eb2b4d82ef92aba3c8abd95866398438a2387437e580d8b646f17cf6fde8c5af23 +aa4b671c6d20f72f2f18a939a6ff21cc37e0084b44b4a717f1be859a80b39fb1be026b3205adec2a66a608ec2bcd578f +94902e980de23c4de394ad8aec91b46f888d18f045753541492bfbb92c59d3daa8de37ae755a6853744af8472ba7b72b +af651ef1b2a0d30a7884557edfad95b6b5d445a7561caebdc46a485aedd25932c62c0798465c340a76f6feaa196dd712 +b7b669b8e5a763452128846dd46b530dca4893ace5cc5881c7ddcd3d45969d7e73fbebdb0e78aa81686e5f7b22ec5759 +82507fd4ebe9fa656a7f2e084d64a1fa6777a2b0bc106d686e2d9d2edafc58997e58cb6bfd0453b2bf415704aa82ae62 +b40bce2b42b88678400ecd52955bbdadd15f8b9e1b3751a1a3375dc0efb5ca3ee258cf201e1140b3c09ad41217d1d49e +b0210d0cbb3fbf3b8cdb39e862f036b0ff941cd838e7aaf3a8354e24246e64778d22f3de34572e6b2a580614fb6425be +876693cba4301b251523c7d034108831df3ce133d8be5a514e7a2ca494c268ca0556fa2ad8310a1d92a16b55bcd99ea9 +8660281406d22a4950f5ef050bf71dd3090edb16eff27fa29ef600cdea628315e2054211ed2cc6eaf8f2a1771ef689fd +a610e7e41e41ab66955b809ba4ade0330b8e9057d8efc9144753caed81995edeb1a42a53f93ce93540feca1fae708dac +a49e2c176a350251daef1218efaccc07a1e06203386ede59c136699d25ca5cb2ac1b800c25b28dd05678f14e78e51891 +83e0915aa2b09359604566080d411874af8c993beba97d4547782fdbe1a68e59324b800ff1f07b8db30c71adcbd102a8 +a19e84e3541fb6498e9bb8a099c495cbfcad113330e0262a7e4c6544495bb8a754b2208d0c2d895c93463558013a5a32 +87f2bd49859a364912023aca7b19a592c60214b8d6239e2be887ae80b69ebdeb59742bdebcfa73a586ab23b2c945586c +b8e8fdddae934a14b57bc274b8dcd0d45ebb95ddbaabef4454e0f6ce7d3a5a61c86181929546b3d60c447a15134d08e1 +87e0c31dcb736ea4604727e92dc1d9a3cf00adcff79df3546e02108355260f3dd171531c3c0f57be78d8b28058fcc8c0 +9617d74e8f808a4165a8ac2e30878c349e1c3d40972006f0787b31ea62d248c2d9f3fc3da83181c6e57e95feedfd0e8c +8949e2cee582a2f8db86e89785a6e46bc1565c2d8627d5b6bf43ba71ffadfab7e3c5710f88dcb5fb2fc6edf6f4fae216 +ad3fa7b0edceb83118972a2935a09f409d09a8db3869f30be3a76f67aa9fb379cabb3a3aff805ba023a331cad7d7eb64 +8c95718a4112512c4efbd496be38bf3ca6cdcaad8a0d128f32a3f9aae57f3a57bdf295a3b372a8c549fda8f4707cffed +88f3261d1e28a58b2dee3fcc799777ad1c0eb68b3560f9b4410d134672d9533532a91ea7be28a041784872632d3c9d80 +b47472a41d72dd2e8b72f5c4f8ad626737dde3717f63d6bc776639ab299e564cbad0a2ad5452a07f02ff49a359c437e5 +9896d21dc2e8aad87b76d6df1654f10cd7bceed4884159d50a818bea391f8e473e01e14684814c7780235f28e69dca6e +82d47c332bbd31bbe83b5eb44a23da76d4a7a06c45d7f80f395035822bc27f62f59281d5174e6f8e77cc9b5c3193d6f0 +95c74cd46206e7f70c9766117c34c0ec45c2b0f927a15ea167901a160e1530d8522943c29b61e03568aa0f9c55926c53 +a89d7757825ae73a6e81829ff788ea7b3d7409857b378ebccd7df73fdbe62c8d9073741cf038314971b39af6c29c9030 +8c1cd212d0b010905d560688cfc036ae6535bc334fa8b812519d810b7e7dcf1bb7c5f43deaa40f097158358987324a7f +b86993c383c015ed8d847c6b795164114dd3e9efd25143f509da318bfba89389ea72a420699e339423afd68b6512fafb +8d06bd379c6d87c6ed841d8c6e9d2d0de21653a073725ff74be1934301cc3a79b81ef6dd0aad4e7a9dc6eac9b73019bc +81af4d2d87219985b9b1202d724fe39ef988f14fef07dfe3c3b11714e90ffba2a97250838e8535eb63f107abfe645e96 +8c5e0af6330a8becb787e4b502f34f528ef5756e298a77dc0c7467433454347f3a2e0bd2641fbc2a45b95e231c6e1c02 +8e2a8f0f04562820dc8e7da681d5cad9fe2e85dd11c785fb6fba6786c57a857e0b3bd838fb849b0376c34ce1665e4837 +a39be8269449bfdfc61b1f62077033649f18dae9bef7c6163b9314ca8923691fb832f42776f0160b9e8abd4d143aa4e1 +8c154e665706355e1cc98e0a4cabf294ab019545ba9c4c399d666e6ec5c869ca9e1faf8fb06cd9c0a5c2f51a7d51b70a +a046a7d4de879d3ebd4284f08f24398e9e3bf006cd4e25b5c67273ade248689c69affff92ae810c07941e4904296a563 +afd94c1cb48758e5917804df03fb38a6da0e48cd9b6262413ea13b26973f9e266690a1b7d9d24bbaf7e82718e0e594b0 +859e21080310c8d6a38e12e2ac9f90a156578cdeb4bb2e324700e97d9a5511cd6045dc39d1d0de3f94aeed043a24119d +a219fb0303c379d0ab50893264919f598e753aac9065e1f23ef2949abc992577ab43c636a1d2c089203ec9ddb941e27d +b0fdb639d449588a2ca730afcba59334e7c387342d56defdfb7ef79c493f7fd0e5277eff18e7203e756c7bdda5803047 +87f9c3b7ed01f54368aca6dbcf2f6e06bff96e183c4b2c65f8baa23b377988863a0a125d5cdd41a072da8462ced4c070 +99ef7a5d5ac2f1c567160e1f8c95f2f38d41881850f30c461a205f7b1b9fb181277311333839b13fb3ae203447e17727 +aeaca9b1c2afd24e443326cc68de67b4d9cedb22ad7b501a799d30d39c85bb2ea910d4672673e39e154d699e12d9b3dc +a11675a1721a4ba24dd3d0e4c3c33a6edf4cd1b9f6b471070b4386c61f77452266eae6e3f566a40cfc885eada9a29f23 +b228334445e37b9b49cb4f2cc56b454575e92173ddb01370a553bba665adadd52df353ad74470d512561c2c3473c7bb9 +a18177087c996572d76f81178d18ed1ceebc8362a396348ce289f1d8bd708b9e99539be6fccd4acb1112381cfc5749b4 +8e7b8bf460f0d3c99abb19803b9e43422e91507a1c0c22b29ee8b2c52d1a384da4b87c292e28eff040db5be7b1f8641f +b03d038d813e29688b6e6f444eb56fec3abba64c3d6f890a6bcf2e916507091cdb2b9d2c7484617be6b26552ed1c56cb +a1c88ccd30e934adfc5494b72655f8afe1865a84196abfb376968f22ddc07761210b6a9fb7638f1413d1b4073d430290 +961b714faebf172ad2dbc11902461e286e4f24a99a939152a53406117767682a571057044decbeb3d3feef81f4488497 +a03dc4059b46effdd786a0a03cc17cfee8585683faa35bb07936ded3fa3f3a097f518c0b8e2db92fd700149db1937789 +adf60180c99ca574191cbcc23e8d025b2f931f98ca7dfcebfc380226239b6329347100fcb8b0fcb12db108c6ad101c07 +805d4f5ef24d46911cbf942f62cb84b0346e5e712284f82b0db223db26d51aabf43204755eb19519b00e665c7719fcaa +8dea7243e9c139662a7fe3526c6c601eee72fd8847c54c8e1f2ad93ef7f9e1826b170afe58817dac212427164a88e87f +a2ba42356606d651b077983de1ad643650997bb2babb188c9a3b27245bb65d2036e46667c37d4ce02cb1be5ae8547abe +af2ae50b392bdc013db2d12ce2544883472d72424fc767d3f5cb0ca2d973fc7d1f425880101e61970e1a988d0670c81b +98e6bec0568d3939b31d00eb1040e9b8b2a35db46ddf4369bdaee41bbb63cc84423d29ee510a170fb5b0e2df434ba589 +822ff3cd12fbef4f508f3ca813c04a2e0b9b799c99848e5ad3563265979e753ee61a48f6adc2984a850f1b46c1a43d35 +891e8b8b92a394f36653d55725ef514bd2e2a46840a0a2975c76c2a935577f85289026aaa74384da0afe26775cbddfb9 +b2a3131a5d2fe7c8967047aa66e4524babae941d90552171cc109527f345f42aa0df06dcbb2fa01b33d0043917bbed69 +80c869469900431f3eeefafdbe07b8afd8cee7739e659e6d0109b397cacff85a88247698f87dc4e2fe39a592f250ac64 +9091594f488b38f9d2bb5df49fd8b4f8829d9c2f11a197dd1431ed5abbc5c954bbde3387088f9ee3a5a834beb7619bce +b472e241e6956146cca57b97a8a204668d050423b4e76f857bad5b47f43b203a04c8391ba9d9c3e95093c071f9d376a1 +b7dd2de0284844392f7dfb56fe7ca3ede41e27519753ffc579a0a8d2d65ceb8108d06b6b0d4c3c1a2588951297bd1a1e +902116ce70d0a079ac190321c1f48701318c05f8e69ee09694754885d33a835a849cafe56f499a2f49f6cda413ddf9a7 +b18105cc736787fafaf7c3c11c448bce9466e683159dff52723b7951dff429565e466e4841d982e3aaa9ee2066838666 +97ab9911f3f659691762d568ae0b7faa1047b0aed1009c319fa79d15d0db8db9f808fc385dc9a68fa388c10224985379 +b2a2cba65f5b927e64d2904ba412e2bac1cf18c9c3eda9c72fb70262497ecf505b640827e2afebecf10eebbcf48ccd3e +b36a3fd677baa0d3ef0dac4f1548ff50a1730286b8c99d276a0a45d576e17b39b3cbadd2fe55e003796d370d4be43ce3 +a5dfec96ca3c272566e89dc453a458909247e3895d3e44831528130bc47cc9d0a0dac78dd3cad680a4351d399d241967 +8029382113909af6340959c3e61db27392531d62d90f92370a432aec3eb1e4c36ae1d4ef2ba8ec6edb4d7320c7a453f6 +971d85121ea108e6769d54f9c51299b0381ece8b51d46d49c89f65bedc123bab4d5a8bc14d6f67f4f680077529cbae4c +98ff6afc01d0bec80a278f25912e1b1ebff80117adae72e31d5b9fa4d9624db4ba2065b444df49b489b0607c45e26c4c +8fa29be10fb3ab30ce25920fec0187e6e91e458947009dabb869aade7136c8ba23602682b71e390c251f3743164cbdaa +b3345c89eb1653418fe3940cf3e56a9a9c66526389b98f45ca02dd62bfb37baa69a4baaa7132d7320695f8ea6ad1fd94 +b72c7f5541c9ac6b60a7ec9f5415e7fb14da03f7164ea529952a29399f3a071576608dbbcc0d45994f21f92ddbeb1e19 +aa3450bb155a5f9043d0ef95f546a2e6ade167280bfb75c9f09c6f9cdb1fffb7ce8181436161a538433afa3681c7a141 +92a18fecaded7854b349f441e7102b638ababa75b1b0281dd0bded6541abe7aa37d96693595be0b01fe0a2e2133d50f9 +980756ddf9d2253cfe6c94960b516c94889d09e612810935150892627d2ecee9a2517e04968eea295d0106850c04ca44 +ae68c6ccc454318cdd92f32b11d89116a3b8350207a36d22a0f626718cad671d960090e054c0c77ac3162ae180ecfd4b +99f31f66eaaa551749ad91d48a0d4e3ff4d82ef0e8b28f3184c54e852422ba1bdafd53b1e753f3a070f3b55f3c23b6a2 +a44eaeaa6589206069e9c0a45ff9fc51c68da38d4edff1d15529b7932e6f403d12b9387019c44a1488a5d5f27782a51f +b80b5d54d4b344840e45b79e621bd77a3f83fb4ce6d8796b7d6915107b3f3c34d2e7d95bdafd120f285669e5acf2437a +b36c069ec085a612b5908314d6b84c00a83031780261d1c77a0384c406867c9847d5b0845deddfa512cc04a8df2046fb +b09dbe501583220f640d201acea7ee3e39bf9eda8b91aa07b5c50b7641d86d71acb619b38d27835ce97c3759787f08e9 +87403d46a2bf63170fff0b857acacf42ee801afe9ccba8e5b4aea967b68eac73a499a65ca46906c2eb4c8f27bc739faa +82b93669f42a0a2aa5e250ffe6097269da06a9c02fcd1801abbad415a7729a64f830754bafc702e64600ba47671c2208 +8e3a3029be7edb8dd3ab1f8216664c8dc50d395f603736061d802cef77627db7b859ef287ed850382c13b4d22d6a2d80 +968e9ec7194ff424409d182ce0259acd950c384c163c04463bc8700a40b79beba6146d22b7fa7016875a249b7b31c602 +8b42c984bbe4996e0c20862059167c6bdc5164b1ffcd928f29512664459212d263e89f0f0e30eed4e672ffa5ed0b01b5 +96bac54062110dada905363211133f1f15dc7e4fd80a4c6e4a83bc9a0bcbbaba11cd2c7a13debcf0985e1a954c1da66b +a16dc8a653d67a7cd7ae90b2fffac0bf1ca587005430fe5ba9403edd70ca33e38ba5661d2ed6e9d2864400d997626a62 +a68ab11a570a27853c8d67e491591dcba746bfbee08a2e75ae0790399130d027ed387f41ef1d7de8df38b472df309161 +92532b74886874447c0300d07eda9bbe4b41ed25349a3da2e072a93fe32c89d280f740d8ff70d5816793d7f2b97373cc +88e35711b471e89218fd5f4d0eadea8a29405af1cd81974427bc4a5fb26ed60798daaf94f726c96e779b403a2cd82820 +b5c72aa4147c19f8c4f3a0a62d32315b0f4606e0a7025edc5445571eaf4daff64f4b7a585464821574dd50dbe1b49d08 +9305d9b4095258e79744338683fd93f9e657367b3ab32d78080e51d54eec331edbc224fad5093ebf8ee4bd4286757eb8 +b2a17abb3f6a05bcb14dc7b98321fa8b46d299626c73d7c6eb12140bf4c3f8e1795250870947af817834f033c88a59d6 +b3477004837dbd8ba594e4296f960fc91ab3f13551458445e6c232eb04b326da803c4d93e2e8dcd268b4413305ff84da +924b4b2ebaafdcfdfedb2829a8bf46cd32e1407d8d725a5bd28bdc821f1bafb3614f030ea4352c671076a63494275a3f +8b81b9ef6125c82a9bece6fdcb9888a767ac16e70527753428cc87c56a1236e437da8be4f7ecfe57b9296dc3ae7ba807 +906e19ec8b8edd58bdf9ae05610a86e4ea2282b1bbc1e8b00b7021d093194e0837d74cf27ac9916bdb8ec308b00da3da +b41c5185869071760ac786078a57a2ab4e2af60a890037ac0c0c28d6826f15c2cf028fddd42a9b6de632c3d550bfbc14 +a646e5dec1b713ae9dfdf7bdc6cd474d5731a320403c7dfcfd666ffc9ae0cff4b5a79530e8df3f4aa9cb80568cb138e9 +b0efad22827e562bd3c3e925acbd0d9425d19057868608d78c2209a531cccd0f2c43dc5673acf9822247428ffa2bb821 +a94c19468d14b6f99002fc52ac06bbe59e5c472e4a0cdb225144a62f8870b3f10593749df7a2de0bd3c9476ce682e148 +803864a91162f0273d49271dafaab632d93d494d1af935aefa522768af058fce52165018512e8d6774976d52bd797e22 +a08711c2f7d45c68fb340ac23597332e1bcaec9198f72967b9921204b9d48a7843561ff318f87908c05a44fc35e3cc9d +91c3cad94a11a3197ae4f9461faab91a669e0dddb0371d3cab3ed9aeb1267badc797d8375181130e461eadd05099b2a2 +81bdaaf48aae4f7b480fc13f1e7f4dd3023a41439ba231760409ce9292c11128ab2b0bdbbf28b98af4f97b3551f363af +8d60f9df9fd303f625af90e8272c4ecb95bb94e6efc5da17b8ab663ee3b3f673e9f6420d890ccc94acf4d2cae7a860d8 +a7b75901520c06e9495ab983f70b61483504c7ff2a0980c51115d11e0744683ce022d76e3e09f4e99e698cbd21432a0d +82956072df0586562fda7e7738226f694e1c73518dd86e0799d2e820d7f79233667192c9236dcb27637e4c65ef19d493 +a586beb9b6ffd06ad200957490803a7cd8c9bf76e782734e0f55e04a3dc38949de75dc607822ec405736c576cf83bca3 +a179a30d00def9b34a7e85607a447eea0401e32ab5abeee1a281f2acd1cf6ec81a178020666f641d9492b1bdf66f05a3 +83e129705c538787ed8e0fdc1275e6466a3f4ee21a1e6abedd239393b1df72244723b92f9d9d9339a0cab6ebf28f5a16 +811bd8d1e3722b64cd2f5b431167e7f91456e8bba2cc669d3fbbce7d553e29c3c19f629fcedd2498bc26d33a24891d17 +a243c030c858f1f60cccd26b45b024698cc6d9d9e6198c1ed4964a235d9f8d0baf9cde10c8e63dfaa47f8e74e51a6e85 +ab839eb82e23ca52663281f863b55b0a3d6d4425c33ffb4eeb1d7979488ab068bf99e2a60e82cea4dc42c56c26cbfebe +8b896f9bb21d49343e67aec6ad175b58c0c81a3ca73d44d113ae4354a0065d98eb1a5cafedaf232a2bb9cdc62152f309 +af6230340cc0b66f5bf845540ed4fc3e7d6077f361d60762e488d57834c3e7eb7eacc1b0ed73a7d134f174a01410e50c +88975e1b1af678d1b5179f72300a30900736af580dd748fd9461ef7afccc91ccd9bed33f9da55c8711a7635b800e831f +a97486bb9047391661718a54b8dd5a5e363964e495eae6c692730264478c927cf3e66dd3602413189a3699fbeae26e15 +a5973c161ab38732885d1d2785fd74bf156ba34881980cba27fe239caef06b24a533ffe6dbbbeca5e6566682cc00300a +a24776e9a840afda0003fa73b415d5bd6ecd9b5c2cc842b643ee51b8c6087f4eead4d0bfbd987eb174c489a7b952ff2a +a8a6ee06e3af053b705a12b59777267c546f33ba8a0f49493af8e6df4e15cf8dd2d4fb4daf7e84c6b5d3a7363118ff03 +a28e59ce6ad02c2ce725067c0123117e12ac5a52c8f5af13eec75f4a9efc4f696777db18a374fa33bcae82e0734ebd16 +86dfc3b78e841c708aff677baa8ee654c808e5d257158715097c1025d46ece94993efe12c9d188252ad98a1e0e331fec +a88d0275510f242eab11fdb0410ff6e1b9d7a3cbd3658333539815f1b450a84816e6613d15aa8a8eb15d87cdad4b27a2 +8440acea2931118a5b481268ff9f180ee4ede85d14a52c026adc882410825b8275caa44aff0b50c2b88d39f21b1a0696 +a7c3182eab25bd6785bacf12079d0afb0a9b165d6ed327814e2177148539f249eb9b5b2554538f54f3c882d37c0a8abe +85291fbe10538d7da38efdd55a7acebf03b1848428a2f664c3ce55367aece60039f4f320b1771c9c89a35941797f717c +a2c6414eeb1234728ab0de94aa98fc06433a58efa646ca3fcbd97dbfb8d98ae59f7ce6d528f669c8149e1e13266f69c9 +840c8462785591ee93aee2538d9f1ec44ba2ca61a569ab51d335ac873f5d48099ae8d7a7efa0725d9ff8f9475bfa4f56 +a7065a9d02fb3673acf7702a488fbc01aa69580964932f6f40b6c2d1c386b19e50b0e104fcac24ea26c4e723611d0238 +b72db6d141267438279e032c95e6106c2ccb3164b842ba857a2018f3a35f4b040da92680881eb17cd61d0920d5b8f006 +a8005d6c5960e090374747307ef0be2871a7a43fa4e76a16c35d2baab808e9777b496e9f57a4218b23390887c33a0b55 +8e152cea1e00a451ca47c20a1e8875873419700af15a5f38ee2268d3fbc974d4bd5f4be38008fa6f404dbdedd6e6e710 +a3391aed1fcd68761f06a7d1008ec62a09b1cb3d0203cd04e300a0c91adfed1812d8bc1e4a3fd7976dc0aae0e99f52f1 +967eb57bf2aa503ee0c6e67438098149eac305089c155f1762cf5e84e31f0fbf27c34a9af05621e34645c1ec96afaec8 +88af97ddc4937a95ec0dcd25e4173127260f91c8db2f6eac84afb789b363705fb3196235af631c70cafd09411d233589 +a32df75b3f2c921b8767638fd289bcfc61e08597170186637a7128ffedd52c798c434485ac2c7de07014f9e895c2c3d8 +b0a783832153650aa0d766a3a73ec208b6ce5caeb40b87177ffc035ab03c7705ecdd1090b6456a29f5fb7e90e2fa8930 +b59c8e803b4c3486777d15fc2311b97f9ded1602fa570c7b0200bada36a49ee9ef4d4c1474265af8e1c38a93eb66b18b +982f2c85f83e852022998ff91bafbb6ff093ef22cf9d5063e083a48b29175ccbd51b9c6557151409e439096300981a6c +939e3b5989fefebb9d272a954659a4eb125b98c9da6953f5e628d26266bd0525ec38304b8d56f08d65abc4d6da4a8dbb +8898212fe05bc8de7d18503cb84a1c1337cc2c09d1eeef2b475aa79185b7322bf1f8e065f1bf871c0c927dd19faf1f6d +94b0393a41cd00f724aee2d4bc72103d626a5aecb4b5486dd1ef8ac27528398edf56df9db5c3d238d8579af368afeb09 +96ac564450d998e7445dd2ea8e3fc7974d575508fa19e1c60c308d83b645864c029f2f6b7396d4ff4c1b24e92e3bac37 +8adf6638e18aff3eb3b47617da696eb6c4bdfbecbbc3c45d3d0ab0b12cbad00e462fdfbe0c35780d21aa973fc150285e +b53f94612f818571b5565bbb295e74bada9b5f9794b3b91125915e44d6ddcc4da25510eab718e251a09c99534d6042d9 +8b96462508d77ee083c376cd90807aebad8de96bca43983c84a4a6f196d5faf6619a2351f43bfeec101864c3bf255519 +aeadf34657083fc71df33bd44af73bf5281c9ca6d906b9c745536e1819ea90b56107c55e2178ebad08f3ba75b3f81c86 +9784ba29b2f0057b5af1d3ab2796d439b8753f1f749c73e791037461bdfc3f7097394283105b8ab01788ea5255a96710 +8756241bda159d4a33bf74faba0d4594d963c370fb6a18431f279b4a865b070b0547a6d1613cf45b8cfb5f9236bbf831 +b03ebfd6b71421dfd49a30460f9f57063eebfe31b9ceaa2a05c37c61522b35bdc09d7db3ad75c76c253c00ba282d3cd2 +b34e7e6341fa9d854b2d3153bdda0c4ae2b2f442ab7af6f99a0975d45725aa48e36ae5f7011edd249862e91f499687d4 +b462ee09dc3963a14354244313e3444de5cc37ea5ccfbf14cd9aca8027b59c4cb2a949bc30474497cab8123e768460e6 +aea753290e51e2f6a21a9a0ee67d3a2713f95c2a5c17fe41116c87d3aa77b1683761264d704df1ac34f8b873bc88ef7b +98430592afd414394f98ddfff9f280fcb1c322dbe3510f45e1e9c4bb8ee306b3e0cf0282c0ee73ebb8ba087d4d9e0858 +b95d3b5aaf54ffca11f4be8d57f76e14afdb20afc859dc7c7471e0b42031e8f3d461b726ecb979bdb2f353498dfe95ea +984d17f9b11a683132e0b5a9ee5945e3ff7054c2d5c716be73b29078db1d36f54c6e652fd2f52a19da313112e97ade07 +ab232f756b3fff3262be418a1af61a7e0c95ceebbc775389622a8e10610508cd6784ab7960441917a83cc191c58829ea +a28f41678d6e60de76b0e36ab10e4516e53e02e9c77d2b5af3cfeee3ce94cfa30c5797bd1daab20c98e1cad83ad0f633 +b55395fca84dd3ccc05dd480cb9b430bf8631ff06e24cb51d54519703d667268c2f8afcde4ba4ed16bece8cc7bc8c6e0 +8a8a5392a0e2ea3c7a8c51328fab11156004e84a9c63483b64e8f8ebf18a58b6ffa8fe8b9d95af0a2f655f601d096396 +ab480000fe194d23f08a7a9ec1c392334e9c687e06851f083845121ce502c06b54dda8c43092bcc1035df45cc752fe9b +b265644c29f628d1c7e8e25a5e845cabb21799371814730a41a363e1bda8a7be50fee7c3996a365b7fcba4642add10db +b8a915a3c685c2d4728f6931c4d29487cad764c5ce23c25e64b1a3259ac27235e41b23bfe7ae982921b4cb84463097df +8efa7338442a4b6318145a5440fc213b97869647eeae41b9aa3c0a27ee51285b73e3ae3b4a9423df255e6add58864aa9 +9106d65444f74d217f4187dfc8fcf3810b916d1e4275f94f6a86d1c4f3565b131fd6cde1fa708bc05fe183c49f14941a +948252dac8026bbbdb0a06b3c9d66ec4cf9532163bab68076fda1bd2357b69e4b514729c15aaa83b5618b1977bbc60c4 +ae6596ccfdf5cbbc5782efe3bb0b101bb132dbe1d568854ca24cacc0b2e0e9fabcb2ca7ab42aecec412efd15cf8cb7a2 +84a0b6c198ff64fd7958dfd1b40eac9638e8e0b2c4cd8cf5d8cdf80419baee76a05184bce6c5b635f6bf2d30055476a7 +8893118be4a055c2b3da593dbca51b1ae2ea2469911acfb27ee42faf3e6c3ad0693d3914c508c0b05b36a88c8b312b76 +b097479e967504deb6734785db7e60d1d8034d6ca5ba9552887e937f5e17bb413fccac2c1d1082154ed76609127860ad +a0294e6b9958f244d29943debf24b00b538b3da1116269b6e452bb12dc742226712fd1a15b9c88195afeb5d2415f505c +b3cc15f635080bc038f61b615f62b5b5c6f2870586191f59476e8368a73641d6ac2f7d0c1f54621982defdb318020230 +99856f49b9fe1604d917c94d09cc0ed753d13d015d30587a94e6631ffd964b214e607deb8a69a8b5e349a7edf4309206 +a8571e113ea22b4b4fce41a094da8c70de37830ae32e62c65c2fa5ad06a9bc29e884b945e73d448c72b176d6ecebfb58 +a9e9c6e52beb0013273c29844956b3ce291023678107cdc785f7b44eff5003462841ad8780761b86aefc6b734adde7cf +80a784b0b27edb51ef2bad3aee80e51778dcaa0f3f5d3dcb5dc5d4f4b2cf7ae35b08de6680ea9dac53f8438b92eb09ef +827b543e609ea328e97e373f70ad72d4915a2d1daae0c60d44ac637231070e164c43a2a58db80a64df1c624a042b38f9 +b449c65e8195202efdcb9bdb4e869a437313b118fef8b510cbbf8b79a4e99376adb749b37e9c20b51b31ed3310169e27 +8ea3028f4548a79a94c717e1ed28ad4d8725b8d6ab18b021063ce46f665c79da3c49440c6577319dab2d036b7e08f387 +897798431cfb17fe39f08f5f854005dc37b1c1ec1edba6c24bc8acb3b88838d0534a75475325a5ea98b326ad47dbad75 +89cf232e6303b0751561960fd4dea5754a28c594daf930326b4541274ffb03c7dd75938e411eb9a375006a70ce38097f +9727c6ae7f0840f0b6c8bfb3a1a5582ceee705e0b5c59b97def7a7a2283edd4d3f47b7971e902a3a2079e40b53ff69b8 +b76ed72b122c48679d221072efc0eeea063cb205cbf5f9ef0101fd10cb1075b8628166c83577cced654e1c001c7882f7 +ae908c42d208759da5ee9b405df85a6532ea35c6f0f6a1288d22870f59d98edc896841b8ac890a538e6c8d1e8b02d359 +809d12fe4039a0ec80dc9be6a89acaab7797e5f7f9b163378f52f9a75a1d73b2e9ae6e3dd49e32ced439783c1cabbef5 +a4149530b7f85d1098ba534d69548c6c612c416e8d35992fc1f64f4deeb41e09e49c6cf7aadbed7e846b91299358fe2d +a49342eacd1ec1148b8df1e253b1c015f603c39de11fa0a364ccb86ea32d69c34fd7aa6980a1fadcd8e785a57fa46f60 +87d43eff5a006dc4dddcf76cc96c656a1f3a68f19f124181feab86c6cc9a52cb9189cdbb423414defdd9bb0ca8ff1ddc +861367e87a9aa2f0f68296ba50aa5dbc5713008d260cc2c7e62d407c2063064749324c4e8156dc21b749656cfebce26b +b5303c2f72e84e170e66ae1b0fbd51b8c7a6f27476eaf5694b64e8737d5c84b51fe90100b256465a4c4156dd873cddb0 +b62849a4f891415d74f434cdc1d23c4a69074487659ca96e1762466b2b7a5d8525b056b891d0feea6fe6845cba8bc7fb +923dd9e0d6590a9307e8c4c23f13bae3306b580e297a937711a8b13e8de85e41a61462f25b7d352b682e8437bf2b4ab3 +9147379860cd713cd46c94b8cdf75125d36c37517fbecf81ace9680b98ce6291cd1c3e472f84249cc3b2b445e314b1b6 +a808a4f17ac21e3fb5cfef404e61fae3693ca3e688d375f99b6116779696059a146c27b06de3ac36da349b0649befd56 +87787e9322e1b75e66c1f0d9ea0915722a232770930c2d2a95e9478c4b950d15ab767e30cea128f9ed65893bfc2d0743 +9036a6ee2577223be105defe1081c48ea7319e112fff9110eb9f61110c319da25a6cea0464ce65e858635b079691ef1f +af5548c7c24e1088c23b57ee14d26c12a83484c9fd9296edf1012d8dcf88243f20039b43c8c548c265ef9a1ffe9c1c88 +a0fff520045e14065965fb8accd17e878d3fcaf9e0af2962c8954e50be6683d31fa0bf4816ab68f08630dbac6bfce52a +b4c1b249e079f6ae1781af1d97a60b15855f49864c50496c09c91fe1946266915b799f0406084d7783f5b1039116dd8b +8b0ffa5e7c498cb3879dddca34743b41eee8e2dea3d4317a6e961b58adb699ef0c92400c068d5228881a2b08121226bf +852ae8b19a1d80aa8ae5382e7ee5c8e7670ceb16640871c56b20b96b66b3b60e00015a3dde039446972e57b49a999ddd +a49942f04234a7d8492169da232cfff8051df86e8e1ba3db46aede02422c689c87dc1d99699c25f96cb763f5ca0983e5 +b04b597b7760cf5dcf411ef896d1661e6d5b0db3257ac2cf64b20b60c6cc18fa10523bb958a48d010b55bac7b02ab3b1 +a494591b51ea8285daecc194b5e5bd45ae35767d0246ac94fae204d674ee180c8e97ff15f71f28b7aeb175b8aea59710 +97d2624919e78406e7460730680dea8e71c8571cf988e11441aeea54512b95bd820e78562c99372d535d96f7e200d20d +ac693ddb00e48f76e667243b9b6a7008424043fb779e4f2252330285232c3fccac4da25cbd6d95fe9ad959ff305a91f6 +8d20ca0a71a64a3f702a0825bb46bd810d03bebfb227683680d474a52f965716ff99e19a165ebaf6567987f4f9ee3c94 +a5c516a438f916d1d68ca76996404792e0a66e97b7f18fc54c917bf10cf3211b62387932756e39e67e47b0bd6e88385a +b089614d830abc0afa435034cec7f851f2f095d479cacf1a3fb57272da826c499a52e7dcbc0eb85f4166fb94778e18e9 +a8dacc943765d930848288192f4c69e2461c4b9bc6e79e30eeef9a543318cf9ae9569d6986c65c5668a89d49993f8e07 +ab5a9361fa339eec8c621bdad0a58078983abd8942d4282b22835d7a3a47e132d42414b7c359694986f7db39386c2e19 +94230517fb57bd8eb26c6f64129b8b2abd0282323bf7b94b8bac7fab27b4ecc2c4290c294275e1a759de19f2216134f3 +b8f158ea5006bc3b90b285246625faaa6ac9b5f5030dc69701b12f3b79a53ec7e92eeb5a63bbd1f9509a0a3469ff3ffc +8b6944fd8cb8540957a91a142fdcda827762aa777a31e8810ca6d026e50370ee1636fc351724767e817ca38804ebe005 +82d1ee40fe1569c29644f79fa6c4033b7ed45cd2c3b343881f6eb0de2e79548fded4787fae19bed6ee76ed76ff9f2f11 +a8924c7035e99eaed244ca165607e7e568b6c8085510dcdbaf6ebdbed405af2e6c14ee27d94ffef10d30aa52a60bf66d +956f82a6c2ae044635e85812581e4866c5fa2f427b01942047d81f6d79a14192f66fbbe77c9ffeaef4e6147097fdd2b5 +b1100255a1bcf5e05b6aff1dfeb6e1d55b5d68d43a7457ba10cc76b61885f67f4d0d5179abda786e037ae95deb8eea45 +99510799025e3e5e8fbf06dedb14c060c6548ba2bda824f687d3999dc395e794b1fb6514b9013f3892b6cf65cb0d65aa +8f9091cebf5e9c809aab415942172258f894e66e625d7388a05289183f01b8d994d52e05a8e69f784fba41db9ea357f0 +a13d2eeb0776bdee9820ecb6693536720232848c51936bb4ef4fe65588d3f920d08a21907e1fdb881c1ad70b3725e726 +a68b8f18922d550284c5e5dc2dda771f24c21965a6a4d5e7a71678178f46df4d8a421497aad8fcb4c7e241aba26378a0 +8b7601f0a3c6ad27f03f2d23e785c81c1460d60100f91ea9d1cab978aa03b523150206c6d52ce7c7769c71d2c8228e9e +a8e02926430813caa851bb2b46de7f0420f0a64eb5f6b805401c11c9091d3b6d67d841b5674fa2b1dce0867714124cd8 +b7968ecba568b8193b3058400af02c183f0a6df995a744450b3f7e0af7a772454677c3857f99c140bbdb2a09e832e8e0 +8f20b1e9ba87d0a3f35309b985f3c18d2e8800f1ca7f0c52cadef773f1496b6070c936eea48c4a1cae83fd2524e9d233 +88aef260042db0d641a51f40639dbeeefa9e9811df30bee695f3791f88a2f84d318f04e8926b7f47bf25956cb9e3754f +9725345893b647e9ba4e6a29e12f96751f1ae25fcaec2173e9a259921a1a7edb7a47159b3c8767e44d9e2689f5aa0f72 +8c281e6f72752cb11e239e4df9341c45106eb7993c160e54423c2bffe10bc39d42624b45a1f673936ef2e1a02fc92f1a +90aba2f68bddb2fcce6c51430dacdfeec43ea8dc379660c99095df11017691ccf5faa27665cf4b9f0eea7728ae53c327 +b7022695c16521c5704f49b7ddbdbec9b5f57ce0ceebe537bc0ebb0906d8196cc855a9afeb8950a1710f6a654464d93f +8fe1b9dd3c6a258116415d36e08374e094b22f0afb104385a5da48be17123e86fb8327baacc4f0d9ebae923d55d99bb5 +817e85d8e3d19a4cbc1dec31597142c2daa4871bda89c2177fa719c00eda3344eb08b82eb92d4aa91a9eaacb3fc09783 +b59053e1081d2603f1ca0ba553804d6fa696e1fd996631db8f62087b26a40dfef02098b0326bb75f99ec83b9267ca738 +990a173d857d3ba81ff3789b931bfc9f5609cde0169b7f055fa3cb56451748d593d62d46ba33f80f9cafffe02b68dd14 +b0c538dbba4954b809ab26f9f94a3cf1dcb77ce289eaec1d19f556c0ae4be1fa03af4a9b7057837541c3cc0a80538736 +ac3ba42f5f44f9e1fc453ce49c4ab79d0e1d5c42d3b30b1e098f3ab3f414c4c262fa12fb2be249f52d4aaf3c5224beb9 +af47467eb152e59870e21f0d4da2f43e093daf40180ab01438030684b114d025326928eaab12c41b81a066d94fce8436 +98d1b58ba22e7289b1c45c79a24624f19b1d89e00f778eef327ec4856a9a897278e6f1a9a7e673844b31dde949153000 +97ccb15dfadc7c59dca08cfe0d22df2e52c684cf97de1d94bc00d7ba24e020025130b0a39c0f4d46e4fc872771ee7875 +b699e4ed9a000ff96ca296b2f09dce278832bc8ac96851ff3cff99ed3f6f752cfc0fea8571be28cd9b5a7ec36f1a08ee +b9f49f0edb7941cc296435ff0a912e3ad16848ee8765ab5f60a050b280d6ea585e5b34051b15f6b8934ef01ceb85f648 +ac3893df7b4ceab23c6b9054e48e8ba40d6e5beda8fbe90b814f992f52494186969b35d8c4cdc3c99890a222c9c09008 +a41293ad22fae81dea94467bc1488c3707f3d4765059173980be93995fa4fcc3c9340796e3eed0beeb0ba0d9bb4fa3aa +a0543e77acd2aeecde13d18d258aeb2c7397b77f17c35a1992e8666ea7abcd8a38ec6c2741bd929abba2f766138618cc +92e79b22bc40e69f6527c969500ca543899105837b6b1075fa1796755c723462059b3d1b028e0b3df2559fa440e09175 +a1fa1eac8f41a5197a6fb4aa1eae1a031c89f9c13ff9448338b222780cf9022e0b0925d930c37501a0ef7b2b00fdaf83 +b3cb29ff73229f0637335f28a08ad8c5f166066f27c6c175164d0f26766a927f843b987ee9b309ed71cbf0a65d483831 +84d4ab787f0ac00f104f4a734dc693d62d48c2aeb03913153da62c2ae2c27d11b1110dcef8980368dd84682ea2c1a308 +ab6a8e4bbc78d4a7b291ad3e9a8fe2d65f640524ba3181123b09d2d18a9e300e2509ccf7000fe47e75b65f3e992a2e7e +b7805ebe4f1a4df414003dc10bca805f2ab86ca75820012653e8f9b79c405196b0e2cab099f2ab953d67f0d60d31a0f9 +b12c582454148338ea605d22bd00a754109063e22617f1f8ac8ddf5502c22a181c50c216c3617b9852aa5f26af56b323 +86333ad9f898947e31ce747728dc8c887479e18d36ff3013f69ebef807d82c6981543b5c3788af93c4d912ba084d3cba +b514efa310dc4ad1258add138891e540d8c87142a881b5f46563cc58ecd1488e6d3a2fca54c0b72a929f3364ca8c333e +aa0a30f92843cf2f484066a783a1d75a7aa6f41f00b421d4baf20a6ac7886c468d0eea7ca8b17dd22f4f74631b62b640 +b3b7dc63baec9a752e8433c0cdee4d0f9bc41f66f2b8d132faf925eef9cf89aae756fc132c45910f057122462605dc10 +b9b8190dac5bfdeb59fd44f4da41a57e7f1e7d2c21faba9da91fa45cbeca06dcf299c9ae22f0c89ece11ac46352d619f +89f8cf36501ad8bdfeab863752a9090e3bfda57cf8fdeca2944864dc05925f501e252c048221bcc57136ab09a64b64b2 +b0cbfaf317f05f97be47fc9d69eda2dd82500e00d42612f271a1fe24626408c28881f171e855bd5bd67409f9847502b4 +a7c21a8fcede581bfd9847b6835eda62ba250bea81f1bb17372c800a19c732abe03064e64a2f865d974fb636cab4b859 +95f9df524ba7a4667351696c4176b505d8ea3659f5ff2701173064acc624af69a0fad4970963736383b979830cb32260 +856a74fe8b37a2e3afeac858c8632200485d438422a16ae3b29f359e470e8244995c63ad79c7e007ed063f178d0306fd +b37faa4d78fdc0bb9d403674dbea0176c2014a171c7be8527b54f7d1a32a76883d3422a3e7a5f5fcc5e9b31b57822eeb +8d37234d8594ec3fe75670b5c9cc1ec3537564d4739b2682a75b18b08401869a4264c0f264354219d8d896cded715db4 +b5289ee5737f0e0bde485d32096d23387d68dab8f01f47821ab4f06cc79a967afe7355e72dc0c751d96b2747b26f6255 +9085e1fdf9f813e9c3b8232d3c8863cd84ab30d45e8e0d3d6a0abd9ebc6fd70cdf749ff4d04390000e14c7d8c6655fc7 +93a388c83630331eca4da37ea4a97b3b453238af474817cc0a0727fd3138dcb4a22de38c04783ec829c22cb459cb4e8e +a5377116027c5d061dbe24c240b891c08cdd8cd3f0899e848d682c873aff5b8132c1e7cfe76d2e5ed97ee0eb1d42cb68 +a274c84b04338ed28d74683e2a7519c2591a3ce37c294d6f6e678f7d628be2db8eff253ede21823e2df7183e6552f622 +8bc201147a842453a50bec3ac97671397bc086d6dfc9377fa38c2124cdc286abda69b7324f47d64da094ae011d98d9d9 +9842d0c066c524592b76fbec5132bc628e5e1d21c424bec4555efca8619cc1fd8ea3161febcb8b9e8ab54702f4e815e2 +a19191b713a07efe85c266f839d14e25660ee74452e6c691cd9997d85ae4f732052d802d3deb018bdd847caa298a894b +a24f71fc0db504da4e287dd118a4a74301cbcd16033937ba2abc8417956fcb4ae19b8e63b931795544a978137eff51cb +a90eec4a6a3a4b8f9a5b93d978b5026fcf812fe65585b008d7e08c4aaf21195a1d0699f12fc16f79b6a18a369af45771 +8b551cf89737d7d06d9b3b9c4c1c73b41f2ea0af4540999c70b82dabff8580797cf0a3caf34c86c59a7069eb2e38f087 +b8d312e6c635e7a216a1cda075ae77ba3e1d2fd501dc31e83496e6e81ed5d9c7799f8e578869c2e0e256fb29f5de10a7 +8d144bdb8cae0b2cdb5b33d44bbc96984a5925202506a8cc65eb67ac904b466f5a7fe3e1cbf04aa785bbb7348c4bb73c +a101b3d58b7a98659244b88de0b478b3fb87dc5fc6031f6e689b99edf498abd43e151fd32bd4bbd240e0b3e59c440359 +907453abca7d8e7151a05cc3d506c988007692fe7401395dc93177d0d07d114ab6cca0cc658eb94c0223fe8658295cad +825329ffbe2147ddb68f63a0a67f32d7f309657b8e5d9ab5bb34b3730bfa2c77a23eaaadb05def7d9f94a9e08fdc1e96 +88ee923c95c1dac99ae7ed6067906d734d793c5dc5d26339c1bb3314abe201c5dccb33b9007351885eb2754e9a8ea06c +98bc9798543f5f1adc9f2cfcfa72331989420e9c3f6598c45269f0dc9b7c8607bbeaf03faa0aea2ddde2b8f17fdceff5 +8ee87877702a79aef923ab970db6fa81561b3c07d5bf1a072af0a7bad765b4cbaec910afe1a91703feacc7822fa38a94 +8060b9584aa294fe8adc2b22f67e988bc6da768eae91e429dcc43ddc53cfcc5d6753fdc1b420b268c7eb2fb50736a970 +b344a5524d80a2f051870c7001f74fcf348a70fcf78dbd20c6ff9ca85d81567d2318c8b8089f2c4f195d6aec9fc15fa6 +8f5a5d893e1936ed062149d20eb73d98b62b7f50ab5d93a6429c03656b36688d1c80cb5010e4977491e51fa0d7dd35d5 +86fa32ebbf97328c5f5f15564e1238297e289ec3219b9a741724e9f3ae8d5c15277008f555863a478b247ba5dc601d44 +9557e55377e279f4b6b5e0ffe01eca037cc13aac242d67dfcd0374a1e775c5ed5cb30c25fe21143fee54e3302d34a3ea +8cb6bcbc39372d23464a416ea7039f57ba8413cf3f00d9a7a5b356ab20dcb8ed11b3561f7bce372b8534d2870c7ee270 +b5d59075cb5abde5391f64b6c3b8b50adc6e1f654e2a580b6d6d6eff3f4fbdd8fffc92e06809c393f5c8eab37f774c4b +afcfb6903ef13e493a1f7308675582f15af0403b6553e8c37afb8b2808ad21b88b347dc139464367dc260df075fea1ad +810fbbe808375735dd22d5bc7fc3828dc49fdd22cc2d7661604e7ac9c4535c1df578780affb3b895a0831640a945bcad +8056b0c678803b416f924e09a6299a33cf9ad7da6fe1ad7accefe95c179e0077da36815fde3716711c394e2c5ea7127f +8b67403702d06979be19f1d6dc3ec73cc2e81254d6b7d0cc49cd4fdda8cd51ab0835c1d2d26fc0ecab5df90585c2f351 +87f97f9e6d4be07e8db250e5dd2bffdf1390665bc5709f2b631a6fa69a7fca958f19bd7cc617183da1f50ee63e9352b5 +ae151310985940471e6803fcf37600d7fa98830613e381e00dab943aec32c14162d51c4598e8847148148000d6e5af5c +81eb537b35b7602c45441cfc61b27fa9a30d3998fad35a064e05bc9479e9f10b62eba2b234b348219eea3cadcaac64bb +8a441434934180ab6f5bc541f86ebd06eadbee01f438836d797e930fa803a51510e005c9248cecc231a775b74d12b5e9 +81f3c250a27ba14d8496a5092b145629eb2c2e6a5298438670375363f57e2798207832c8027c3e9238ad94ecdadfc4df +a6217c311f2f3db02ceaa5b6096849fe92b6f4b6f1491535ef8525f6ccee6130bed2809e625073ecbaddd4a3eb3df186 +82d1c396f0388b942cf22b119d7ef1ad03d3dad49a74d9d01649ee284f377c8daddd095d596871669e16160299a210db +a40ddf7043c5d72a7246bd727b07f7fff1549f0e443d611de6f9976c37448b21664c5089c57f20105102d935ab82f27b +b6c03c1c97adf0c4bf4447ec71366c6c1bff401ba46236cd4a33d39291e7a1f0bb34bd078ba3a18d15c98993b153a279 +8a94f5f632068399c359c4b3a3653cb6df2b207379b3d0cdace51afdf70d6d5cce6b89a2b0fee66744eba86c98fb21c2 +b2f19e78ee85073f680c3bba1f07fd31b057c00b97040357d97855b54a0b5accb0d3b05b2a294568fcd6a4be6f266950 +a74632d13bbe2d64b51d7a9c3ae0a5a971c19f51cf7596a807cea053e6a0f3719700976d4e394b356c0329a2dced9aa2 +afef616d341a9bc94393b8dfba68ff0581436aa3a3adb7c26a1bbf2cf19fa877066191681f71f17f3cd6f9cf6bf70b5a +8ce96d93ae217408acf7eb0f9cbb9563363e5c7002e19bbe1e80760bc9d449daee2118f3878b955163ed664516b97294 +8414f79b496176bc8b8e25f8e4cfee28f4f1c2ddab099d63d2aca1b6403d26a571152fc3edb97794767a7c4686ad557c +b6c61d01fd8ce087ef9f079bf25bf10090db483dd4f88c4a786d31c1bdf52065651c1f5523f20c21e75cea17df69ab73 +a5790fd629be70545093631efadddc136661f63b65ec682609c38ef7d3d7fa4e56bdf94f06e263bc055b90cb1c6bcefe +b515a767e95704fb7597bca9e46f1753abacdc0e56e867ee3c6f4cd382643c2a28e65312c05ad040eaa3a8cbe7217a65 +8135806a02ead6aa92e9adb6fefb91349837ab73105aaa7be488ef966aa8dfaafdfa64bbae30fcbfa55dd135a036a863 +8f22435702716d76b1369750694540742d909d5e72b54d0878245fab7c269953b1c6f2b29c66f08d5e0263ca3a731771 +8e0f8a8e8753e077dac95848212aeffd51c23d9b6d611df8b102f654089401954413ecbedc6367561ca599512ae5dda7 +815a9084e3e2345f24c5fa559deec21ee1352fb60f4025c0779be65057f2d528a3d91593bd30d3a185f5ec53a9950676 +967e6555ccba395b2cc1605f8484c5112c7b263f41ce8439a99fd1c71c5ed14ad02684d6f636364199ca48afbbde13be +8cd0ccf17682950b34c796a41e2ea7dd5367aba5e80a907e01f4cdc611e4a411918215e5aebf4292f8b24765d73314a6 +a58bf1bbb377e4b3915df6f058a0f53b8fb8130fdec8c391f6bc82065694d0be59bb67ffb540e6c42cc8b380c6e36359 +92af3151d9e6bfb3383d85433e953c0160859f759b0988431ec5893542ba40288f65db43c78a904325ef8d324988f09d +8011bbb05705167afb47d4425065630f54cb86cd462095e83b81dfebf348f846e4d8fbcf1c13208f5de1931f81da40b9 +81c743c104fc3cb047885c9fa0fb9705c3a83ee24f690f539f4985509c3dafd507af3f6a2128276f45d5939ef70c167f +a2c9679b151c041aaf5efeac5a737a8f70d1631d931609fca16be1905682f35e291292874cb3b03f14994f98573c6f44 +a4949b86c4e5b1d5c82a337e5ce6b2718b1f7c215148c8bfb7e7c44ec86c5c9476048fc5c01f57cb0920876478c41ad6 +86c2495088bd1772152e527a1da0ef473f924ea9ab0e5b8077df859c28078f73c4e22e3a906b507fdf217c3c80808b5c +892e0a910dcf162bcea379763c3e2349349e4cda9402949255ac4a78dd5a47e0bf42f5bd0913951576b1d206dc1e536a +a7009b2c6b396138afe4754b7cc10dee557c51c7f1a357a11486b3253818531f781ea8107360c8d4c3b1cd96282353c0 +911763ef439c086065cc7b4e57484ed6d693ea44acee4b18c9fd998116da55fbe7dcb8d2a0f0f9b32132fca82d73dff6 +a722000b95a4a2d40bed81870793f15ba2af633f9892df507f2842e52452e02b5ea8dea6a043c2b2611d82376e33742a +9387ac49477bd719c2f92240d0bdfcf9767aad247ca93dc51e56106463206bc343a8ec855eb803471629a66fffb565d6 +92819a1fa48ab4902939bb72a0a4e6143c058ea42b42f9bc6cea5df45f49724e2530daf3fc4f097cceefa2a8b9db0076 +98eac7b04537653bc0f4941aae732e4b1f84bd276c992c64a219b8715eb1fb829b5cbd997d57feb15c7694c468f95f70 +b275e7ba848ce21bf7996e12dbeb8dadb5d0e4f1cb5a0248a4f8f9c9fe6c74e3c93f4b61edbcb0a51af5a141e1c14bc7 +97243189285aba4d49c53770c242f2faf5fd3914451da4931472e3290164f7663c726cf86020f8f181e568c72fd172d1 +839b0b3c25dd412bee3dc24653b873cc65454f8f16186bb707bcd58259c0b6765fa4c195403209179192a4455c95f3b8 +8689d1a870514568a074a38232e2ceb4d7df30fabeb76cff0aed5b42bf7f02baea12c5fadf69f4713464dbd52aafa55f +8958ae7b290f0b00d17c3e9fdb4dbf168432b457c7676829299dd428984aba892de1966fc106cfc58a772862ecce3976 +a422bc6bd68b8870cfa5bc4ce71781fd7f4368b564d7f1e0917f6013c8bbb5b240a257f89ecfdbecb40fe0f3aa31d310 +aa61f78130cebe09bc9a2c0a37f0dd57ed2d702962e37d38b1df7f17dc554b1d4b7a39a44182a452ce4c5eb31fa4cfcc +b7918bd114f37869bf1a459023386825821bfadce545201929d13ac3256d92a431e34f690a55d944f77d0b652cefeffc +819bba35fb6ace1510920d4dcff30aa682a3c9af9022e287751a6a6649b00c5402f14b6309f0aeef8fce312a0402915e +8b7c9ad446c6f63c11e1c24e24014bd570862b65d53684e107ba9ad381e81a2eaa96731b4b33536efd55e0f055071274 +8fe79b53f06d33386c0ec7d6d521183c13199498594a46d44a8a716932c3ec480c60be398650bbfa044fa791c4e99b65 +9558e10fb81250b9844c99648cf38fa05ec1e65d0ccbb18aa17f2d1f503144baf59d802c25be8cc0879fff82ed5034ad +b538a7b97fbd702ba84645ca0a63725be1e2891c784b1d599e54e3480e4670d0025526674ef5cf2f87dddf2290ba09f0 +92eafe2e869a3dd8519bbbceb630585c6eb21712b2f31e1b63067c0acb5f9bdbbcbdb612db4ea7f9cc4e7be83d31973f +b40d21390bb813ab7b70a010dff64c57178418c62685761784e37d327ba3cb9ef62df87ecb84277c325a637fe3709732 +b349e6fbf778c4af35fbed33130bd8a7216ed3ba0a79163ebb556e8eb8e1a7dad3456ddd700dad9d08d202491c51b939 +a8fdaedecb251f892b66c669e34137f2650509ade5d38fbe8a05d9b9184bb3b2d416186a3640429bd1f3e4b903c159dd +ac6167ebfee1dbab338eff7642f5e785fc21ef0b4ddd6660333fe398068cbd6c42585f62e81e4edbb72161ce852a1a4f +874b1fbf2ebe140c683bd7e4e0ab017afa5d4ad38055aaa83ee6bbef77dbc88a6ce8eb0dcc48f0155244af6f86f34c2d +903c58e57ddd9c446afab8256a6bb6c911121e6ccfb4f9b4ed3e2ed922a0e500a5cb7fa379d5285bc16e11dac90d1fda +8dae7a0cffa2fd166859cd1bf10ff82dd1932e488af377366b7efc0d5dec85f85fe5e8150ff86a79a39cefc29631733a +aa047857a47cc4dfc08585f28640420fcf105b881fd59a6cf7890a36516af0644d143b73f3515ab48faaa621168f8c31 +864508f7077c266cc0cb3f7f001cb6e27125ebfe79ab57a123a8195f2e27d3799ff98413e8483c533b46a816a3557f1f +8bcd45ab1f9cbab36937a27e724af819838f66dfeb15923f8113654ff877bd8667c54f6307aaf0c35027ca11b6229bfd +b21aa34da9ab0a48fcfdd291df224697ce0c1ebc0e9b022fdee8750a1a4b5ba421c419541ed5c98b461eecf363047471 +a9a18a2ab2fae14542dc336269fe612e9c1af6cf0c9ac933679a2f2cb77d3c304114f4d219ca66fe288adde30716775b +b5205989b92c58bdda71817f9a897e84100b5c4e708de1fced5c286f7a6f01ae96b1c8d845f3a320d77c8e2703c0e8b1 +a364059412bbcc17b8907d43ac8e5df90bc87fd1724b5f99832d0d24559fae6fa76a74cff1d1eac8cbac6ec80b44af20 +ae709f2c339886b31450834cf29a38b26eb3b0779bd77c9ac269a8a925d1d78ea3837876c654b61a8fe834b3b6940808 +8802581bba66e1952ac4dab36af371f66778958f4612901d95e5cac17f59165e6064371d02de8fb6fccf89c6dc8bd118 +a313252df653e29c672cbcfd2d4f775089cb77be1077381cf4dc9533790e88af6cedc8a119158e7da5bf6806ad9b91a1 +992a065b4152c7ef11515cd54ba9d191fda44032a01aed954acff3443377ee16680c7248d530b746b8c6dee2d634e68c +b627b683ee2b32c1ab4ccd27b9f6cce2fe097d96386fa0e5c182ad997c4c422ab8dfc03870cd830b8c774feb66537282 +b823cf8a9aee03dadd013eb9efe40a201b4b57ef67efaae9f99683005f5d1bf55e950bf4af0774f50859d743642d3fea +b8a7449ffac0a3f206677097baf7ce00ca07a4d2bd9b5356fbcb83f3649b0fda07cfebad220c1066afba89e5a52abf4b +b2dd1a2f986395bb4e3e960fbbe823dbb154f823284ebc9068502c19a7609790ec0073d08bfa63f71e30c7161b6ef966 +98e5236de4281245234f5d40a25b503505af140b503a035fc25a26159a9074ec81512b28f324c56ea2c9a5aa7ce90805 +89070847dc8bbf5bc4ed073aa2e2a1f699cf0c2ca226f185a0671cecc54e7d3e14cd475c7752314a7a8e7476829da4bc +a9402dc9117fdb39c4734c0688254f23aed3dce94f5f53f5b7ef2b4bf1b71a67f85ab1a38ec224a59691f3bee050aeb3 +957288f9866a4bf56a4204218ccc583f717d7ce45c01ea27142a7e245ad04a07f289cc044f8cf1f21d35e67e39299e9c +b2fb31ccb4e69113763d7247d0fc8edaae69b550c5c56aecacfd780c7217dc672f9fb7496edf4aba65dacf3361268e5b +b44a4526b2f1d6eb2aa8dba23bfa385ff7634572ab2afddd0546c3beb630fbfe85a32f42dd287a7fec069041411537f7 +8db5a6660c3ac7fd7a093573940f068ee79a82bc17312af900b51c8c439336bc86ca646c6b7ab13aaaa008a24ca508ab +8f9899a6d7e8eb4367beb5c060a1f8e94d8a21099033ae582118477265155ba9e72176a67f7f25d7bad75a152b56e21a +a67de0e91ade8d69a0e00c9ff33ee2909b8a609357095fa12319e6158570c232e5b6f4647522efb7345ce0052aa9d489 +82eb2414898e9c3023d57907a2b17de8e7eea5269029d05a94bfd7bf5685ac4a799110fbb375eb5e0e2bd16acf6458ae +94451fc7fea3c5a89ba701004a9693bab555cb622caf0896b678faba040409fdfd14a978979038b2a81e8f0abc4994d2 +ac879a5bb433998e289809a4a966bd02b4bf6a9c1cc276454e39c886efcf4fc68baebed575826bde577ab5aa71d735a9 +880c0f8f49c875dfd62b4ddedde0f5c8b19f5687e693717f7e5c031bc580e58e13ab497d48b4874130a18743c59fdce3 +b582af8d8ff0bf76f0a3934775e0b54c0e8fed893245d7d89cae65b03c8125b7237edc29dc45b4fe1a3fe6db45d280ee +89f337882ed3ae060aaee98efa20d79b6822bde9708c1c5fcee365d0ec9297f694cae37d38fd8e3d49717c1e86f078e7 +826d2c1faea54061848b484e288a5f4de0d221258178cf87f72e14baaa4acc21322f8c9eab5dde612ef497f2d2e1d60b +a5333d4f227543e9cd741ccf3b81db79f2f03ca9e649e40d6a6e8ff9073e06da83683566d3b3c8d7b258c62970fb24d1 +a28f08c473db06aaf4c043a2fae82b3c8cfaa160bce793a4c208e4e168fb1c65115ff8139dea06453c5963d95e922b94 +8162546135cc5e124e9683bdfaa45833c18553ff06a0861c887dc84a5b12ae8cd4697f6794c7ef6230492c32faba7014 +b23f0d05b74c08d6a7df1760792be83a761b36e3f8ae360f3c363fb196e2a9dd2de2e492e49d36561366e14daa77155c +b6f70d6c546722d3907c708d630dbe289771d2c8bf059c2e32b77f224696d750b4dda9b3a014debda38e7d02c9a77585 +83bf4c4a9f3ca022c631017e7a30ea205ba97f7f5927cba8fc8489a4646eac6712cb821c5668c9ffe94d69d524374a27 +b0371475425a8076d0dd5f733f55aabbe42d20a7c8ea7da352e736d4d35a327b2beb370dfcb05284e22cfd69c5f6c4cc +a0031ba7522c79211416c2cca3aa5450f96f8fee711552a30889910970ba13608646538781a2c08b834b140aadd7166f +99d273c80c7f2dc6045d4ed355d9fc6f74e93549d961f4a3b73cd38683f905934d359058cd1fc4da8083c7d75070487f +b0e4b0efa3237793e9dcce86d75aafe9879c5fa23f0d628649aef2130454dcf72578f9bf227b9d2b9e05617468e82588 +a5ab076fa2e1c5c51f3ae101afdd596ad9d106bba7882b359c43d8548b64f528af19afa76cd6f40da1e6c5fca4def3fa +8ce2299e570331d60f6a6eff1b271097cd5f1c0e1113fc69b89c6a0f685dabea3e5bc2ac6bd789aa492ab189f89be494 +91b829068874d911a310a5f9dee001021f97471307b5a3de9ec336870ec597413e1d92010ce320b619f38bed7c4f7910 +b14fe91f4b07bf33b046e9285b66cb07927f3a8da0af548ac2569b4c4fb1309d3ced76d733051a20814e90dd5b75ffd1 +abaab92ea6152d40f82940277c725aa768a631ee0b37f5961667f82fb990fc11e6d3a6a2752b0c6f94563ed9bb28265c +b7fe28543eca2a716859a76ab9092f135337e28109544f6bd2727728d0a7650428af5713171ea60bfc273d1c821d992c +8a4917b2ab749fc7343fc64bdf51b6c0698ff15d740cc7baf248c030475c097097d5a473bcc00d8c25817563fe0447b4 +aa96156d1379553256350a0a3250166add75948fb9cde62aa555a0a9dc0a9cb7f2f7b8428aff66097bf6bfedaf14bbe2 +ae4ffeb9bdc76830d3eca2b705f30c1bdede6412fa064260a21562c8850c7fb611ec62bc68479fe48f692833e6f66d8d +b96543caaba9d051600a14997765d49e4ab10b07c7a92cccf0c90b309e6da334fdd6d18c96806cbb67a7801024fbd3c7 +97b2b9ad76f19f500fcc94ca8e434176249f542ac66e5881a3dccd07354bdab6a2157018b19f8459437a68d8b86ba8e0 +a8d206f6c5a14c80005849474fde44b1e7bcf0b2d52068f5f97504c3c035b09e65e56d1cf4b5322791ae2c2fdbd61859 +936bad397ad577a70cf99bf9056584a61bd7f02d2d5a6cf219c05d770ae30a5cd902ba38366ce636067fc1dd10108d31 +a77e30195ee402b84f3882e2286bf5380c0ed374a112dbd11e16cef6b6b61ab209d4635e6f35cdaaa72c1a1981d5dabe +a46ba4d3947188590a43c180757886a453a0503f79cc435322d92490446f37419c7b999fdf868a023601078070e03346 +80d8d4c5542f223d48240b445d4d8cf6a75d120b060bc08c45e99a13028b809d910b534d2ac47fb7068930c54efd8da9 +803be9c68c91b42b68e1f55e58917a477a9a6265e679ca44ee30d3eb92453f8c89c64eafc04c970d6831edd33d066902 +b14b2b3d0dfe2bb57cee4cd72765b60ac33c1056580950be005790176543826c1d4fbd737f6cfeada6c735543244ab57 +a9e480188bba1b8fb7105ff12215706665fd35bf1117bacfb6ab6985f4dbc181229873b82e5e18323c2b8f5de03258e0 +a66a0f0779436a9a3999996d1e6d3000f22c2cac8e0b29cddef9636393c7f1457fb188a293b6c875b05d68d138a7cc4a +848397366300ab40c52d0dbbdafbafef6cd3dadf1503bb14b430f52bb9724188928ac26f6292a2412bc7d7aa620763c8 +95466cc1a78c9f33a9aaa3829a4c8a690af074916b56f43ae46a67a12bb537a5ac6dbe61590344a25b44e8512355a4a7 +8b5f7a959f818e3baf0887f140f4575cac093d0aece27e23b823cf421f34d6e4ff4bb8384426e33e8ec7b5eed51f6b5c +8d5e1368ec7e3c65640d216bcc5d076f3d9845924c734a34f3558ac0f16e40597c1a775a25bf38b187213fbdba17c93b +b4647c1b823516880f60d20c5cc38c7f80b363c19d191e8992226799718ee26b522a12ecb66556ed3d483aa4824f3326 +ac3abaea9cd283eb347efda4ed9086ea3acf495043e08d0d19945876329e8675224b685612a6badf8fd72fb6274902b1 +8eae1ce292d317aaa71bcf6e77e654914edd5090e2e1ebab78b18bb41b9b1bc2e697439f54a44c0c8aa0d436ebe6e1a9 +94dc7d1aec2c28eb43d93b111fa59aaa0d77d5a09501220bd411768c3e52208806abf973c6a452fd8292ff6490e0c9e2 +8fd8967f8e506fef27d17b435d6b86b232ec71c1036351f12e6fb8a2e12daf01d0ee04451fb944d0f1bf7fd20e714d02 +824e6865be55d43032f0fec65b3480ea89b0a2bf860872237a19a54bc186a85d2f8f9989cc837fbb325b7c72d9babe2c +8bd361f5adb27fd6f4e3f5de866e2befda6a8454efeb704aacc606f528c03f0faae888f60310e49440496abd84083ce2 +b098a3c49f2aaa28b6b3e85bc40ce6a9cdd02134ee522ae73771e667ad7629c8d82c393fba9f27f5416986af4c261438 +b385f5ca285ff2cfe64dcaa32dcde869c28996ed091542600a0b46f65f3f5a38428cca46029ede72b6cf43e12279e3d3 +8196b03d011e5be5288196ef7d47137d6f9237a635ab913acdf9c595fa521d9e2df722090ec7eb0203544ee88178fc5f +8ed1270211ef928db18e502271b7edf24d0bbd11d97f2786aee772d70c2029e28095cf8f650b0328cc8a4c38d045316d +a52ab60e28d69b333d597a445884d44fd2a7e1923dd60f763951e1e45f83e27a4dac745f3b9eff75977b3280e132c15d +91e9fe78cdac578f4a4687f71b800b35da54b824b1886dafec073a3c977ce7a25038a2f3a5b1e35c2c8c9d1a7312417c +a42832173f9d9491c7bd93b21497fbfa4121687cd4d2ab572e80753d7edcbb42cfa49f460026fbde52f420786751a138 +97b947126d84dcc70c97be3c04b3de3f239b1c4914342fa643b1a4bb8c4fe45c0fcb585700d13a7ed50784790c54bef9 +860e407d353eac070e2418ef6cb80b96fc5f6661d6333e634f6f306779651588037be4c2419562c89c61f9aa2c4947f5 +b2c9d93c3ba4e511b0560b55d3501bf28a510745fd666b3cb532db051e6a8617841ea2f071dda6c9f15619c7bfd2737f +8596f4d239aeeac78311207904d1bd863ef68e769629cc379db60e019aaf05a9d5cd31dc8e630b31e106a3a93e47cbc5 +8b26e14e2e136b65c5e9e5c2022cee8c255834ea427552f780a6ca130a6446102f2a6f334c3f9a0308c53df09e3dba7e +b54724354eb515a3c8bed0d0677ff1db94ac0a07043459b4358cb90e3e1aa38ac23f2caa3072cf9647275d7cd61d0e80 +b7ce9fe0e515e7a6b2d7ddcb92bc0196416ff04199326aea57996eef8c5b1548bd8569012210da317f7c0074691d01b7 +a1a13549c82c877253ddefa36a29ea6a23695ee401fdd48e65f6f61e5ebd956d5e0edeff99484e9075cb35071fec41e2 +838ba0c1e5bd1a6da05611ff1822b8622457ebd019cb065ece36a2d176bd2d889511328120b8a357e44569e7f640c1e6 +b916eccff2a95519400bbf76b5f576cbe53cf200410370a19d77734dc04c05b585cfe382e8864e67142d548cd3c4c2f4 +a610447cb7ca6eea53a6ff1f5fe562377dcb7f4aaa7300f755a4f5e8eba61e863c51dc2aa9a29b35525b550fbc32a0fe +9620e8f0f0ee9a4719aa9685eeb1049c5c77659ba6149ec4c158f999cfd09514794b23388879931fe26fea03fa471fd3 +a9dcf8b679e276583cf5b9360702a185470d09aea463dc474ee9c8aee91ef089dacb073e334e47fbc78ec5417c90465c +8c9adee8410bdd99e5b285744cee61e2593b6300ff31a8a83b0ec28da59475a5c6fb9346fe43aadea2e6c3dad2a8e30a +97d5afe9b3897d7b8bb628b7220cf02d8ee4e9d0b78f5000d500aaf4c1df9251aaaabfd1601626519f9d66f00a821d4e +8a382418157b601ce4c3501d3b8409ca98136a4ef6abcbf62885e16e215b76b035c94d149cc41ff92e42ccd7c43b9b3d +b64b8d11fb3b01abb2646ac99fdb9c02b804ce15d98f9fe0fbf1c9df8440c71417487feb6cdf51e3e81d37104b19e012 +849d7d044f9d8f0aab346a9374f0b3a5d14a9d1faa83dbacccbdc629ad1ef903a990940255564770537f8567521d17f0 +829dbb0c76b996c2a91b4cbbe93ba455ca0d5729755e5f0c92aaee37dff7f36fcdc06f33aca41f1b609c784127b67d88 +85a7c0069047b978422d264d831ab816435f63938015d2e977222b6b5746066c0071b7f89267027f8a975206ed25c1b0 +84b9fbc1cfb302df1acdcf3dc5d66fd1edfe7839f7a3b2fb3a0d5548656249dd556104d7c32b73967bccf0f5bdcf9e3b +972220ac5b807f53eac37dccfc2ad355d8b21ea6a9c9b011c09fe440ddcdf7513e0b43d7692c09ded80d7040e26aa28f +855885ed0b21350baeca890811f344c553cf9c21024649c722453138ba29193c6b02c4b4994cd414035486f923472e28 +841874783ae6d9d0e59daea03e96a01cbbe4ecaced91ae4f2c8386e0d87b3128e6d893c98d17c59e4de1098e1ad519dd +827e50fc9ce56f97a4c3f2f4cbaf0b22f1c3ce6f844ff0ef93a9c57a09b8bf91ebfbd2ba9c7f83c442920bffdaf288cc +a441f9136c7aa4c08d5b3534921b730e41ee91ab506313e1ba5f7c6f19fd2d2e1594e88c219834e92e6fb95356385aa7 +97d75b144471bf580099dd6842b823ec0e6c1fb86dd0da0db195e65524129ea8b6fd4a7a9bbf37146269e938a6956596 +a4b6fa87f09d5a29252efb2b3aaab6b3b6ea9fab343132a651630206254a25378e3e9d6c96c3d14c150d01817d375a8e +a31a671876d5d1e95fe2b8858dc69967231190880529d57d3cab7f9f4a2b9b458ac9ee5bdaa3289158141bf18f559efb +90bee6fff4338ba825974021b3b2a84e36d617e53857321f13d2b3d4a28954e6de3b3c0e629d61823d18a9763313b3bf +96b622a63153f393bb419bfcf88272ea8b3560dbd46b0aa07ada3a6223990d0abdd6c2adb356ef4be5641688c8d83941 +84c202adeaff9293698022bc0381adba2cd959f9a35a4e8472288fd68f96f6de8be9da314c526d88e291c96b1f3d6db9 +8ca01a143b8d13809e5a8024d03e6bc9492e22226073ef6e327edf1328ef4aff82d0bcccee92cb8e212831fa35fe1204 +b2f970dbad15bfbefb38903c9bcc043d1367055c55dc1100a850f5eb816a4252c8c194b3132c929105511e14ea10a67d +a5e36556472a95ad57eb90c3b6623671b03eafd842238f01a081997ffc6e2401f76e781d049bb4aa94d899313577a9cf +8d1057071051772f7c8bedce53a862af6fd530dd56ae6321eaf2b9fc6a68beff5ed745e1c429ad09d5a118650bfd420a +8aadc4f70ace4fcb8d93a78610779748dcffc36182d45b932c226dc90e48238ea5daa91f137c65ed532352c4c4d57416 +a2ea05ae37e673b4343232ae685ee14e6b88b867aef6dfac35db3589cbcd76f99540fed5c2641d5bb5a4a9f808e9bf0d +947f1abad982d65648ae4978e094332b4ecb90f482c9be5741d5d1cf5a28acf4680f1977bf6e49dd2174c37f11e01296 +a27b144f1565e4047ba0e3f4840ef19b5095d1e281eaa463c5358f932114cbd018aa6dcf97546465cf2946d014d8e6d6 +8574e1fc3acade47cd4539df578ce9205e745e161b91e59e4d088711a7ab5aa3b410d517d7304b92109924d9e2af8895 +a48ee6b86b88015d6f0d282c1ae01d2a5b9e8c7aa3d0c18b35943dceb1af580d08a65f54dc6903cde82fd0d73ce94722 +8875650cec543a7bf02ea4f2848a61d167a66c91ffaefe31a9e38dc8511c6a25bde431007eefe27a62af3655aca208dc +999b0a6e040372e61937bf0d68374e230346b654b5a0f591a59d33a4f95bdb2f3581db7c7ccb420cd7699ed709c50713 +878c9e56c7100c5e47bbe77dc8da5c5fe706cec94d37fa729633bca63cace7c40102eee780fcdabb655f5fa47a99600e +865006fb5b475ada5e935f27b96f9425fc2d5449a3c106aa366e55ebed3b4ee42adc3c3f0ac19fd129b40bc7d6bc4f63 +b7a7da847f1202e7bc1672553e68904715e84fd897d529243e3ecda59faa4e17ba99c649a802d53f6b8dfdd51f01fb74 +8b2fb4432c05653303d8c8436473682933a5cb604da10c118ecfcd2c8a0e3132e125afef562bdbcc3df936164e5ce4f2 +808d95762d33ddfa5d0ee3d7d9f327de21a994d681a5f372e2e3632963ea974da7f1f9e5bac8ccce24293509d1f54d27 +932946532e3c397990a1df0e94c90e1e45133e347a39b6714c695be21aeb2d309504cb6b1dde7228ff6f6353f73e1ca2 +9705e7c93f0cdfaa3fa96821f830fe53402ad0806036cd1b48adc2f022d8e781c1fbdab60215ce85c653203d98426da3 +aa180819531c3ec1feb829d789cb2092964c069974ae4faad60e04a6afcce5c3a59aec9f11291e6d110a788d22532bc6 +88f755097f7e25cb7dd3c449520c89b83ae9e119778efabb54fbd5c5714b6f37c5f9e0346c58c6ab09c1aef2483f895d +99fc03ab7810e94104c494f7e40b900f475fde65bdec853e60807ffd3f531d74de43335c3b2646b5b8c26804a7448898 +af2dea9683086bed1a179110efb227c9c00e76cd00a2015b089ccbcee46d1134aa18bda5d6cab6f82ae4c5cd2461ac21 +a500f87ba9744787fdbb8e750702a3fd229de6b8817594348dec9a723b3c4240ddfa066262d002844b9e38240ce55658 +924d0e45c780f5bc1c1f35d15dfc3da28036bdb59e4c5440606750ecc991b85be18bc9a240b6c983bc5430baa4c68287 +865b11e0157b8bf4c5f336024b016a0162fc093069d44ac494723f56648bc4ded13dfb3896e924959ea11c96321afefc +93672d8607d4143a8f7894f1dcca83fb84906dc8d6dd7dd063bb0049cfc20c1efd933e06ca7bd03ea4cb5a5037990bfe +826891efbdff0360446825a61cd1fa04326dd90dae8c33dfb1ed97b045e165766dd070bd7105560994d0b2044bdea418 +93c4a4a8bcbc8b190485cc3bc04175b7c0ed002c28c98a540919effd6ed908e540e6594f6db95cd65823017258fb3b1c +aeb2a0af2d2239fda9aa6b8234b019708e8f792834ff0dd9c487fa09d29800ddceddd6d7929faa9a3edcb9e1b3aa0d6b +87f11de7236d387863ec660d2b04db9ac08143a9a2c4dfff87727c95b4b1477e3bc473a91e5797313c58754905079643 +80dc1db20067a844fe8baceca77f80db171a5ca967acb24e2d480eae9ceb91a3343c31ad1c95b721f390829084f0eae6 +9825c31f1c18da0de3fa84399c8b40f8002c3cae211fb6a0623c76b097b4d39f5c50058f57a16362f7a575909d0a44a2 +a99fc8de0c38dbf7b9e946de83943a6b46a762167bafe2a603fb9b86f094da30d6de7ed55d639aafc91936923ee414b3 +ad594678b407db5d6ea2e90528121f84f2b96a4113a252a30d359a721429857c204c1c1c4ff71d8bb5768c833f82e80e +b33d985e847b54510b9b007e31053732c8a495e43be158bd2ffcea25c6765bcbc7ca815f7c60b36ad088b955dd6e9350 +815f8dfc6f90b3342ca3fbd968c67f324dae8f74245cbf8bc3bef10e9440c65d3a2151f951e8d18959ba01c1b50b0ec1 +94c608a362dd732a1abc56e338637c900d59013db8668e49398b3c7a0cae3f7e2f1d1bf94c0299eeafe6af7f76c88618 +8ebd8446b23e5adfcc393adc5c52fe172f030a73e63cd2d515245ca0dd02782ceed5bcdd9ccd9c1b4c5953dfac9c340c +820437f3f6f9ad0f5d7502815b221b83755eb8dc56cd92c29e9535eb0b48fb8d08c9e4fcc26945f9c8cca60d89c44710 +8910e4e8a56bf4be9cc3bbf0bf6b1182a2f48837a2ed3c2aaec7099bfd7f0c83e14e608876b17893a98021ff4ab2f20d +9633918fde348573eec15ce0ad53ac7e1823aac86429710a376ad661002ae6d049ded879383faaa139435122f64047c6 +a1f5e3fa558a9e89318ca87978492f0fb4f6e54a9735c1b8d2ecfb1d1c57194ded6e0dd82d077b2d54251f3bee1279e1 +b208e22d04896abfd515a95c429ff318e87ff81a5d534c8ac2c33c052d6ffb73ef1dccd39c0bbe0734b596c384014766 +986d5d7d2b5bde6d16336f378bd13d0e671ad23a8ec8a10b3fc09036faeeb069f60662138d7a6df3dfb8e0d36180f770 +a2d4e6c5f5569e9cef1cddb569515d4b6ace38c8aed594f06da7434ba6b24477392cc67ba867c2b079545ca0c625c457 +b5ac32b1d231957d91c8b7fc43115ce3c5c0d8c13ca633374402fa8000b6d9fb19499f9181844f0c10b47357f3f757ce +96b8bf2504b4d28fa34a4ec378e0e0b684890c5f44b7a6bb6e19d7b3db2ab27b1e2686389d1de9fbd981962833a313ea +953bfd7f6c3a0469ad432072b9679a25486f5f4828092401eff494cfb46656c958641a4e6d0d97d400bc59d92dba0030 +876ab3cea7484bbfd0db621ec085b9ac885d94ab55c4bb671168d82b92e609754b86aaf472c55df3d81421d768fd108a +885ff4e67d9ece646d02dd425aa5a087e485c3f280c3471b77532b0db6145b69b0fbefb18aa2e3fa5b64928b43a94e57 +b91931d93f806d0b0e6cc62a53c718c099526140f50f45d94b8bbb57d71e78647e06ee7b42aa5714aed9a5c05ac8533f +a0313eeadd39c720c9c27b3d671215331ab8d0a794e71e7e690f06bcd87722b531d6525060c358f35f5705dbb7109ccb +874c0944b7fedc6701e53344100612ddcb495351e29305c00ec40a7276ea5455465ffb7bded898886c1853139dfb1fc7 +8dc31701a01ee8137059ca1874a015130d3024823c0576aa9243e6942ec99d377e7715ed1444cd9b750a64b85dcaa3e5 +836d2a757405e922ec9a2dfdcf489a58bd48b5f9683dd46bf6047688f778c8dee9bc456de806f70464df0b25f3f3d238 +b30b0a1e454a503ea3e2efdec7483eaf20b0a5c3cefc42069e891952b35d4b2c955cf615f3066285ed8fafd9fcfbb8f6 +8e6d4044b55ab747e83ec8762ea86845f1785cc7be0279c075dadf08aca3ccc5a096c015bb3c3f738f647a4eadea3ba5 +ad7735d16ab03cbe09c029610aa625133a6daecfc990b297205b6da98eda8c136a7c50db90f426d35069708510d5ae9c +8d62d858bbb59ec3c8cc9acda002e08addab4d3ad143b3812098f3d9087a1b4a1bb255dcb1635da2402487d8d0249161 +805beec33238b832e8530645a3254aeef957e8f7ea24bcfc1054f8b9c69421145ebb8f9d893237e8a001c857fedfc77e +b1005644be4b085e3f5775aa9bd3e09a283e87ddada3082c04e7a62d303dcef3b8cf8f92944c200c7ae6bb6bdf63f832 +b4ba0e0790dc29063e577474ffe3b61f5ea2508169f5adc1e394934ebb473e356239413a17962bc3e5d3762d72cce8c2 +a157ba9169c9e3e6748d9f1dd67fbe08b9114ade4c5d8fc475f87a764fb7e6f1d21f66d7905cd730f28a1c2d8378682a +913e52b5c93989b5d15e0d91aa0f19f78d592bc28bcfdfddc885a9980c732b1f4debb8166a7c4083c42aeda93a702898 +90fbfc1567e7cd4e096a38433704d3f96a2de2f6ed3371515ccc30bc4dd0721a704487d25a97f3c3d7e4344472702d8d +89646043028ffee4b69d346907586fd12c2c0730f024acb1481abea478e61031966e72072ff1d5e65cb8c64a69ad4eb1 +b125a45e86117ee11d2fb42f680ab4a7894edd67ff927ae2c808920c66c3e55f6a9d4588eee906f33a05d592e5ec3c04 +aad47f5b41eae9be55fb4f67674ff1e4ae2482897676f964a4d2dcb6982252ee4ff56aac49578b23f72d1fced707525e +b9ddff8986145e33851b4de54d3e81faa3352e8385895f357734085a1616ef61c692d925fe62a5ed3be8ca49f5d66306 +b3cb0963387ed28c0c0adf7fe645f02606e6e1780a24d6cecef5b7c642499109974c81a7c2a198b19862eedcea2c2d8c +ac9c53c885457aaf5cb36c717a6f4077af701e0098eebd7aa600f5e4b14e6c1067255b3a0bc40e4a552025231be7de60 +8e1a8d823c4603f6648ec21d064101094f2a762a4ed37dd2f0a2d9aa97b2d850ce1e76f4a4b8cae58819b058180f7031 +b268b73bf7a179b6d22bd37e5e8cb514e9f5f8968c78e14e4f6d5700ca0d0ca5081d0344bb73b028970eebde3cb4124e +a7f57d71940f0edbd29ed8473d0149cae71d921dd15d1ff589774003e816b54b24de2620871108cec1ab9fa956ad6ce6 +8053e6416c8b120e2b999cc2fc420a6a55094c61ac7f2a6c6f0a2c108a320890e389af96cbe378936132363c0d551277 +b3823f4511125e5aa0f4269e991b435a0d6ceb523ebd91c04d7add5534e3df5fc951c504b4fd412a309fd3726b7f940b +ae6eb04674d04e982ca9a6add30370ab90e303c71486f43ed3efbe431af1b0e43e9d06c11c3412651f304c473e7dbf39 +96ab55e641ed2e677591f7379a3cd126449614181fce403e93e89b1645d82c4af524381ff986cae7f9cebe676878646d +b52423b4a8c37d3c3e2eca8f0ddbf7abe0938855f33a0af50f117fab26415fb0a3da5405908ec5fdc22a2c1f2ca64892 +82a69ce1ee92a09cc709d0e3cd22116c9f69d28ea507fe5901f5676000b5179b9abe4c1875d052b0dd42d39925e186bb +a84c8cb84b9d5cfb69a5414f0a5283a5f2e90739e9362a1e8c784b96381b59ac6c18723a4aa45988ee8ef5c1f45cc97d +afd7efce6b36813082eb98257aae22a4c1ae97d51cac7ea9c852d4a66d05ef2732116137d8432e3f117119725a817d24 +a0f5fe25af3ce021b706fcff05f3d825384a272284d04735574ce5fb256bf27100fad0b1f1ba0e54ae9dcbb9570ecad3 +8751786cb80e2e1ff819fc7fa31c2833d25086534eb12b373d31f826382430acfd87023d2a688c65b5e983927e146336 +8cf5c4b17fa4f3d35c78ce41e1dc86988fd1135cd5e6b2bb0c108ee13538d0d09ae7102609c6070f39f937b439b31e33 +a9108967a2fedd7c322711eca8159c533dd561bedcb181b646de98bf5c3079449478eab579731bee8d215ae8852c7e21 +b54c5171704f42a6f0f4e70767cdb3d96ffc4888c842eece343a01557da405961d53ffdc34d2f902ea25d3e1ed867cad +ae8d4b764a7a25330ba205bf77e9f46182cd60f94a336bbd96773cf8064e3d39caf04c310680943dc89ed1fbad2c6e0d +aa5150e911a8e1346868e1b71c5a01e2a4bb8632c195861fb6c3038a0e9b85f0e09b3822e9283654a4d7bb17db2fc5f4 +9685d3756ce9069bf8bb716cf7d5063ebfafe37e15b137fc8c3159633c4e006ff4887ddd0ae90360767a25c3f90cba7f +82155fd70f107ab3c8e414eadf226c797e07b65911508c76c554445422325e71af8c9a8e77fd52d94412a6fc29417cd3 +abfae52f53a4b6e00760468d973a267f29321997c3dbb5aee36dc1f20619551229c0c45b9d9749f410e7f531b73378e8 +81a76d921f8ef88e774fd985e786a4a330d779b93fad7def718c014685ca0247379e2e2a007ad63ee7f729cd9ed6ce1b +81947c84bc5e28e26e2e533af5ae8fe10407a7b77436dbf8f1d5b0bbe86fc659eae10f974659dc7c826c6dabd03e3a4b +92b8c07050d635b8dd4fd09df9054efe4edae6b86a63c292e73cc819a12a21dd7d104ce51fa56af6539dedf6dbe6f7b6 +b44c579e3881f32b32d20c82c207307eca08e44995dd2aac3b2692d2c8eb2a325626c80ac81c26eeb38c4137ff95add5 +97efab8941c90c30860926dea69a841f2dcd02980bf5413b9fd78d85904588bf0c1021798dbc16c8bbb32cce66c82621 +913363012528b50698e904de0588bf55c8ec5cf6f0367cfd42095c4468fcc64954fbf784508073e542fee242d0743867 +8ed203cf215148296454012bd10fddaf119203db1919a7b3d2cdc9f80e66729464fdfae42f1f2fc5af1ed53a42b40024 +ab84312db7b87d711e9a60824f4fe50e7a6190bf92e1628688dfcb38930fe87b2d53f9e14dd4de509b2216856d8d9188 +880726def069c160278b12d2258eac8fa63f729cd351a710d28b7e601c6712903c3ac1e7bbd0d21e4a15f13ca49db5aa +980699cd51bac6283959765f5174e543ed1e5f5584b5127980cbc2ef18d984ecabba45042c6773b447b8e694db066028 +aeb019cb80dc4cb4207430d0f2cd24c9888998b6f21d9bf286cc638449668d2eec0018a4cf3fe6448673cd6729335e2b +b29852f6aa6c60effdffe96ae88590c88abae732561d35cc19e82d3a51e26cb35ea00986193e07f90060756240f5346e +a0fa855adc5ba469f35800c48414b8921455950a5c0a49945d1ef6e8f2a1881f2e2dfae47de6417270a6bf49deeb091d +b6c7332e3b14813641e7272d4f69ecc7e09081df0037d6dab97ce13a9e58510f5c930d300633f208181d9205c5534001 +85a6c050f42fce560b5a8d54a11c3bbb8407abbadd859647a7b0c21c4b579ec65671098b74f10a16245dc779dff7838e +8f3eb34bb68759d53c6677de4de78a6c24dd32c8962a7fb355ed362572ef8253733e6b52bc21c9f92ecd875020a9b8de +a17dd44181e5dab4dbc128e1af93ec22624b57a448ca65d2d9e246797e4af7d079e09c6e0dfb62db3a9957ce92f098d5 +a56a1b854c3183082543a8685bb34cae1289f86cfa8123a579049dbd059e77982886bfeb61bf6e05b4b1fe4e620932e7 +aedae3033cb2fb7628cb4803435bdd7757370a86f808ae4cecb9a268ad0e875f308c048c80cbcac523de16b609683887 +9344905376aa3982b1179497fac5a1d74b14b7038fd15e3b002db4c11c8bfc7c39430db492cdaf58b9c47996c9901f28 +a3bfafdae011a19f030c749c3b071f83580dee97dd6f949e790366f95618ca9f828f1daaeabad6dcd664fcef81b6556d +81c03d8429129e7e04434dee2c529194ddb01b414feda3adee2271eb680f6c85ec872a55c9fa9d2096f517e13ed5abcc +98205ef3a72dff54c5a9c82d293c3e45d908946fa74bb749c3aabe1ab994ea93c269bcce1a266d2fe67a8f02133c5985 +85a70aeed09fda24412fadbafbbbf5ba1e00ac92885df329e147bfafa97b57629a3582115b780d8549d07d19b7867715 +b0fbe81c719f89a57d9ea3397705f898175808c5f75f8eb81c2193a0b555869ba7bd2e6bc54ee8a60cea11735e21c68c +b03a0bd160495ee626ff3a5c7d95bc79d7da7e5a96f6d10116600c8fa20bedd1132f5170f25a22371a34a2d763f2d6d0 +a90ab04091fbca9f433b885e6c1d60ab45f6f1daf4b35ec22b09909d493a6aab65ce41a6f30c98239cbca27022f61a8b +b66f92aa3bf2549f9b60b86f99a0bd19cbdd97036d4ae71ca4b83d669607f275260a497208f6476cde1931d9712c2402 +b08e1fdf20e6a9b0b4942f14fa339551c3175c1ffc5d0ab5b226b6e6a322e9eb0ba96adc5c8d59ca4259e2bdd04a7eb0 +a2812231e92c1ce74d4f5ac3ab6698520288db6a38398bb38a914ac9326519580af17ae3e27cde26607e698294022c81 +abfcbbcf1d3b9e84c02499003e490a1d5d9a2841a9e50c7babbef0b2dd20d7483371d4dc629ba07faf46db659459d296 +b0fe9f98c3da70927c23f2975a9dc4789194d81932d2ad0f3b00843dd9cbd7fb60747a1da8fe5a79f136a601becf279d +b130a6dba7645165348cb90f023713bed0eefbd90a976b313521c60a36d34f02032e69a2bdcf5361e343ed46911297ec +862f0cffe3020cea7a5fd4703353aa1eb1be335e3b712b29d079ff9f7090d1d8b12013011e1bdcbaa80c44641fd37c9f +8c6f11123b26633e1abb9ed857e0bce845b2b3df91cc7b013b2fc77b477eee445da0285fc6fc793e29d5912977f40916 +91381846126ea819d40f84d3005e9fb233dc80071d1f9bb07f102bf015f813f61e5884ffffb4f5cd333c1b1e38a05a58 +8add7d908de6e1775adbd39c29a391f06692b936518db1f8fde74eb4f533fc510673a59afb86e3a9b52ade96e3004c57 +8780e086a244a092206edcde625cafb87c9ab1f89cc3e0d378bc9ee776313836160960a82ec397bc3800c0a0ec3da283 +a6cb4cd9481e22870fdd757fae0785edf4635e7aacb18072fe8dc5876d0bab53fb99ce40964a7d3e8bcfff6f0ab1332f +af30ff47ecc5b543efba1ba4706921066ca8bb625f40e530fb668aea0551c7647a9d126e8aba282fbcce168c3e7e0130 +91b0bcf408ce3c11555dcb80c4410b5bc2386d3c05caec0b653352377efdcb6bab4827f2018671fc8e4a0e90d772acc1 +a9430b975ef138b6b2944c7baded8fe102d31da4cfe3bd3d8778bda79189c99d38176a19c848a19e2d1ee0bddd9a13c1 +aa5a4eef849d7c9d2f4b018bd01271c1dd83f771de860c4261f385d3bdcc130218495860a1de298f14b703ec32fa235f +b0ce79e7f9ae57abe4ff366146c3b9bfb38b0dee09c28c28f5981a5d234c6810ad4d582751948affb480d6ae1c8c31c4 +b75122748560f73d15c01a8907d36d06dc068e82ce22b84b322ac1f727034493572f7907dec34ebc3ddcc976f2f89ed7 +b0fc7836369a3e4411d34792d6bd5617c14f61d9bba023dda64e89dc5fb0f423244e9b48ee64869258931daa9753a56f +8956d7455ae9009d70c6e4a0bcd7610e55f37494cf9897a8f9e1b904cc8febc3fd2d642ebd09025cfff4609ad7e3bc52 +ad741efe9e472026aa49ae3d9914cb9c1a6f37a54f1a6fe6419bebd8c7d68dca105a751c7859f4389505ede40a0de786 +b52f418797d719f0d0d0ffb0846788b5cba5d0454a69a2925de4b0b80fa4dd7e8c445e5eac40afd92897ed28ca650566 +a0ab65fb9d42dd966cd93b1de01d7c822694669dd2b7a0c04d99cd0f3c3de795f387b9c92da11353412f33af5c950e9a +a0052f44a31e5741a331f7cac515a08b3325666d388880162d9a7b97598fde8b61f9ff35ff220df224eb5c4e40ef0567 +a0101cfdc94e42b2b976c0d89612a720e55d145a5ef6ef6f1f78cf6de084a49973d9b5d45915349c34ce712512191e3c +a0dd99fcf3f5cead5aaf08e82212df3a8bb543c407a4d6fab88dc5130c1769df3f147e934a46f291d6c1a55d92b86917 +a5939153f0d1931bbda5cf6bdf20562519ea55fbfa978d6dbc6828d298260c0da7a50c37c34f386e59431301a96c2232 +9568269f3f5257200f9ca44afe1174a5d3cf92950a7f553e50e279c239e156a9faaa2a67f288e3d5100b4142efe64856 +b746b0832866c23288e07f24991bbf687cad794e7b794d3d3b79367566ca617d38af586cdc8d6f4a85a34835be41d54f +a871ce28e39ab467706e32fec1669fda5a4abba2f8c209c6745df9f7a0fa36bbf1919cf14cb89ea26fa214c4c907ae03 +a08dacdd758e523cb8484f6bd070642c0c20e184abdf8e2a601f61507e93952d5b8b0c723c34fcbdd70a8485eec29db2 +85bdb78d501382bb95f1166b8d032941005661aefd17a5ac32df9a3a18e9df2fc5dc2c1f07075f9641af10353cecc0c9 +98d730c28f6fa692a389e97e368b58f4d95382fad8f0baa58e71a3d7baaea1988ead47b13742ce587456f083636fa98e +a557198c6f3d5382be9fb363feb02e2e243b0c3c61337b3f1801c4a0943f18e38ce1a1c36b5c289c8fa2aa9d58742bab +89174f79201742220ac689c403fc7b243eed4f8e3f2f8aba0bf183e6f5d4907cb55ade3e238e3623d9885f03155c4d2b +b891d600132a86709e06f3381158db300975f73ea4c1f7c100358e14e98c5fbe792a9af666b85c4e402707c3f2db321e +b9e5b2529ef1043278c939373fc0dbafe446def52ddd0a8edecd3e4b736de87e63e187df853c54c28d865de18a358bb6 +8589b2e9770340c64679062c5badb7bbef68f55476289b19511a158a9a721f197da03ece3309e059fc4468b15ac33aa3 +aad8c6cd01d785a881b446f06f1e9cd71bca74ba98674c2dcddc8af01c40aa7a6d469037498b5602e76e9c91a58d3dbd +abaccb1bd918a8465f1bf8dbe2c9ad4775c620b055550b949a399f30cf0d9eb909f3851f5b55e38f9e461e762f88f499 +ae62339d26db46e85f157c0151bd29916d5cc619bd4b832814b3fd2f00af8f38e7f0f09932ffe5bba692005dab2d9a74 +93a6ff30a5c0edf8058c89aba8c3259e0f1b1be1b80e67682de651e5346f7e1b4b4ac3d87cbaebf198cf779524aff6bf +8980a2b1d8f574af45b459193c952400b10a86122b71fca2acb75ee0dbd492e7e1ef5b959baf609a5172115e371f3177 +8c2f49f3666faee6940c75e8c7f6f8edc3f704cca7a858bbb7ee5e96bba3b0cf0993996f781ba6be3b0821ef4cb75039 +b14b9e348215b278696018330f63c38db100b0542cfc5be11dc33046e3bca6a13034c4ae40d9cef9ea8b34fef0910c4e +b59bc3d0a30d66c16e6a411cb641f348cb1135186d5f69fda8b0a0934a5a2e7f6199095ba319ec87d3fe8f1ec4a06368 +8874aca2a3767aa198e4c3fec2d9c62d496bc41ff71ce242e9e082b7f38cdf356089295f80a301a3cf1182bde5308c97 +b1820ebd61376d91232423fc20bf008b2ba37e761199f4ef0648ea2bd70282766799b4de814846d2f4d516d525c8daa7 +a6b202e5dedc16a4073e04a11af3a8509b23dfe5a1952f899adeb240e75c3f5bde0c424f811a81ea48d343591faffe46 +a69becee9c93734805523b92150a59a62eed4934f66056b645728740d42223f2925a1ad38359ba644da24d9414f4cdda +ad72f0f1305e37c7e6b48c272323ee883320994cb2e0d850905d6655fafc9f361389bcb9c66b3ff8d2051dbb58c8aa96 +b563600bd56fad7c8853af21c6a02a16ed9d8a8bbeea2c31731d63b976d83cb05b9779372d898233e8fd597a75424797 +b0abb78ce465bf7051f563c62e8be9c57a2cc997f47c82819300f36e301fefd908894bb2053a9d27ce2d0f8c46d88b5b +a071a85fb8274bac2202e0cb8e0e2028a5e138a82d6e0374d39ca1884a549c7c401312f00071b91f455c3a2afcfe0cda +b931c271513a0f267b9f41444a5650b1918100b8f1a64959c552aff4e2193cc1b9927906c6fa7b8a8c68ef13d79aaa52 +a6a1bb9c7d32cb0ca44d8b75af7e40479fbce67d216b48a2bb680d3f3a772003a49d3cd675fc64e9e0f8fabeb86d6d61 +b98d609858671543e1c3b8564162ad828808bb50ded261a9f8690ded5b665ed8368c58f947365ed6e84e5a12e27b423d +b3dca58cd69ec855e2701a1d66cad86717ff103ef862c490399c771ad28f675680f9500cb97be48de34bcdc1e4503ffd +b34867c6735d3c49865e246ddf6c3b33baf8e6f164db3406a64ebce4768cb46b0309635e11be985fee09ab7a31d81402 +acb966c554188c5b266624208f31fab250b3aa197adbdd14aee5ab27d7fb886eb4350985c553b20fdf66d5d332bfd3fe +943c36a18223d6c870d54c3b051ef08d802b85e9dd6de37a51c932f90191890656c06adfa883c87b906557ae32d09da0 +81bca7954d0b9b6c3d4528aadf83e4bc2ef9ea143d6209bc45ae9e7ae9787dbcd8333c41f12c0b6deee8dcb6805e826a +aba176b92256efb68f574e543479e5cf0376889fb48e3db4ebfb7cba91e4d9bcf19dcfec444c6622d9398f06de29e2b9 +b9f743691448053216f6ece7cd699871fff4217a1409ceb8ab7bdf3312d11696d62c74b0664ba0a631b1e0237a8a0361 +a383c2b6276fa9af346b21609326b53fb14fdf6f61676683076e80f375b603645f2051985706d0401e6fbed7eb0666b6 +a9ef2f63ec6d9beb8f3d04e36807d84bda87bdd6b351a3e4a9bf7edcb5618c46c1f58cfbf89e64b40f550915c6988447 +a141b2d7a82f5005eaea7ae7d112c6788b9b95121e5b70b7168d971812f3381de8b0082ac1f0a82c7d365922ebd2d26a +b1b76ef8120e66e1535c17038b75255a07849935d3128e3e99e56567b842fb1e8d56ef932d508d2fb18b82f7868fe1a9 +8e2e234684c81f21099f5c54f6bbe2dd01e3b172623836c77668a0c49ce1fe218786c3827e4d9ae2ea25c50a8924fb3c +a5caf5ff948bfd3c4ca3ffbdfcd91eec83214a6c6017235f309a0bbf7061d3b0b466307c00b44a1009cf575163898b43 +986415a82ca16ebb107b4c50b0c023c28714281db0bcdab589f6cb13d80e473a3034b7081b3c358e725833f6d845cb14 +b94836bf406ac2cbacb10e6df5bcdfcc9d9124ae1062767ca4e322d287fd5e353fdcebd0e52407cb3cd68571258a8900 +83c6d70a640b33087454a4788dfd9ef3ed00272da084a8d36be817296f71c086b23b576f98178ab8ca6a74f04524b46b +ad4115182ad784cfe11bcfc5ce21fd56229cc2ce77ac82746e91a2f0aa53ca6593a22efd2dc4ed8d00f84542643d9c58 +ab1434c5e5065da826d10c2a2dba0facccab0e52b506ce0ce42fbe47ced5a741797151d9ecc99dc7d6373cfa1779bbf6 +8a8b591d82358d55e6938f67ea87a89097ab5f5496f7260adb9f649abb289da12b498c5b2539c2f9614fb4e21b1f66b0 +964f355d603264bc1f44c64d6d64debca66f37dff39c971d9fc924f2bc68e6c187b48564a6dc82660a98b035f8addb5d +b66235eaaf47456bc1dc4bde454a028e2ce494ece6b713a94cd6bf27cf18c717fd0c57a5681caaa2ad73a473593cdd7a +9103e3bb74304186fa4e3e355a02da77da4aca9b7e702982fc2082af67127ebb23a455098313c88465bc9b7d26820dd5 +b6a42ff407c9dd132670cdb83cbad4b20871716e44133b59a932cd1c3f97c7ac8ff7f61acfaf8628372508d8dc8cad7c +883a9c21c16a167a4171b0f084565c13b6f28ba7c4977a0de69f0a25911f64099e7bbb4da8858f2e93068f4155d04e18 +8dbb3220abc6a43220adf0331e3903d3bfd1d5213aadfbd8dfcdf4b2864ce2e96a71f35ecfb7a07c3bbabf0372b50271 +b4ad08aee48e176bda390b7d9acf2f8d5eb008f30d20994707b757dc6a3974b2902d29cd9b4d85e032810ad25ac49e97 +865bb0f33f7636ec501bb634e5b65751c8a230ae1fa807a961a8289bbf9c7fe8c59e01fbc4c04f8d59b7f539cf79ddd5 +86a54d4c12ad1e3605b9f93d4a37082fd26e888d2329847d89afa7802e815f33f38185c5b7292293d788ad7d7da1df97 +b26c8615c5e47691c9ff3deca3021714662d236c4d8401c5d27b50152ce7e566266b9d512d14eb63e65bc1d38a16f914 +827639d5ce7db43ba40152c8a0eaad443af21dc92636cc8cc2b35f10647da7d475a1e408901cd220552fddad79db74df +a2b79a582191a85dbe22dc384c9ca3de345e69f6aa370aa6d3ff1e1c3de513e30b72df9555b15a46586bd27ea2854d9d +ae0d74644aba9a49521d3e9553813bcb9e18f0b43515e4c74366e503c52f47236be92dfbd99c7285b3248c267b1de5a0 +80fb0c116e0fd6822a04b9c25f456bdca704e2be7bdc5d141dbf5d1c5eeb0a2c4f5d80db583b03ef3e47517e4f9a1b10 +ac3a1fa3b4a2f30ea7e0a114cdc479eb51773573804c2a158d603ad9902ae8e39ffe95df09c0d871725a5d7f9ba71a57 +b56b2b0d601cba7f817fa76102c68c2e518c6f20ff693aad3ff2e07d6c4c76203753f7f91686b1801e8c4659e4d45c48 +89d50c1fc56e656fb9d3915964ebce703cb723fe411ab3c9eaa88ccc5d2b155a9b2e515363d9c600d3c0cee782c43f41 +b24207e61462f6230f3cd8ccf6828357d03e725769f7d1de35099ef9ee4dca57dbce699bb49ed994462bee17059d25ce +b886f17fcbcbfcd08ac07f04bb9543ef58510189decaccea4b4158c9174a067cb67d14b6be3c934e6e2a18c77efa9c9c +b9c050ad9cafd41c6e2e192b70d080076eed59ed38ea19a12bd92fa17b5d8947d58d5546aaf5e8e27e1d3b5481a6ce51 +aaf7a34d3267e3b1ddbc54c641e3922e89303f7c86ebebc7347ebca4cffad5b76117dac0cbae1a133053492799cd936f +a9ee604ada50adef82e29e893070649d2d4b7136cc24fa20e281ce1a07bd736bf0de7c420369676bcbcecff26fb6e900 +9855315a12a4b4cf80ab90b8bd13003223ba25206e52fd4fe6a409232fbed938f30120a3db23eab9c53f308bd8b9db81 +8cd488dd7a24f548a3cf03c54dec7ff61d0685cb0f6e5c46c2d728e3500d8c7bd6bba0156f4bf600466fda53e5b20444 +890ad4942ebac8f5b16c777701ab80c68f56fa542002b0786f8fea0fb073154369920ac3dbfc07ea598b82f4985b8ced +8de0cf9ddc84c9b92c59b9b044387597799246b30b9f4d7626fc12c51f6e423e08ee4cbfe9289984983c1f9521c3e19d +b474dfb5b5f4231d7775b3c3a8744956b3f0c7a871d835d7e4fd9cc895222c7b868d6c6ce250de568a65851151fac860 +86433b6135d9ed9b5ee8cb7a6c40e5c9d30a68774cec04988117302b8a02a11a71a1e03fd8e0264ef6611d219f103007 +80b9ed4adbe9538fb1ef69dd44ec0ec5b57cbfea820054d8d445b4261962624b4c70ac330480594bc5168184378379c3 +8b2e83562ccd23b7ad2d17f55b1ab7ef5fbef64b3a284e6725b800f3222b8bdf49937f4a873917ada9c4ddfb090938c2 +abe78cebc0f5a45d754140d1f685e387489acbfa46d297a8592aaa0d676a470654f417a4f7d666fc0b2508fab37d908e +a9c5f8ff1f8568e252b06d10e1558326db9901840e6b3c26bbd0cd5e850cb5fb3af3f117dbb0f282740276f6fd84126f +975f8dc4fb55032a5df3b42b96c8c0ffecb75456f01d4aef66f973cb7270d4eff32c71520ceefc1adcf38d77b6b80c67 +b043306ed2c3d8a5b9a056565afd8b5e354c8c4569fda66b0d797a50a3ce2c08cffbae9bbe292da69f39e89d5dc7911e +8d2afc36b1e44386ba350c14a6c1bb31ff6ea77128a0c5287584ac3584282d18516901ce402b4644a53db1ed8e7fa581 +8c294058bed53d7290325c363fe243f6ec4f4ea2343692f4bac8f0cb86f115c069ccb8334b53d2e42c067691ad110dba +b92157b926751aaf7ef82c1aa8c654907dccab6376187ee8b3e8c0c82811eae01242832de953faa13ebaff7da8698b3e +a780c4bdd9e4ba57254b09d745075cecab87feda78c88ffee489625c5a3cf96aa6b3c9503a374a37927d9b78de9bd22b +811f548ef3a2e6a654f7dcb28ac9378de9515ed61e5a428515d9594a83e80b35c60f96a5cf743e6fab0d3cb526149f49 +85a4dccf6d90ee8e094731eec53bd00b3887aec6bd81a0740efddf812fd35e3e4fe4f983afb49a8588691c202dabf942 +b152c2da6f2e01c8913079ae2b40a09b1f361a80f5408a0237a8131b429677c3157295e11b365b1b1841924b9efb922e +849b9efee8742502ffd981c4517c88ed33e4dd518a330802caff168abae3cd09956a5ee5eda15900243bc2e829016b74 +955a933f3c18ec0f1c0e38fa931e4427a5372c46a3906ebe95082bcf878c35246523c23f0266644ace1fa590ffa6d119 +911989e9f43e580c886656377c6f856cdd4ff1bd001b6db3bbd86e590a821d34a5c6688a29b8d90f28680e9fdf03ba69 +b73b8b4f1fd6049fb68d47cd96a18fcba3f716e0a1061aa5a2596302795354e0c39dea04d91d232aec86b0bf2ba10522 +90f87456d9156e6a1f029a833bf3c7dbed98ca2f2f147a8564922c25ae197a55f7ea9b2ee1f81bf7383197c4bad2e20c +903cba8b1e088574cb04a05ca1899ab00d8960580c884bd3c8a4c98d680c2ad11410f2b75739d6050f91d7208cac33a5 +9329987d42529c261bd15ecedd360be0ea8966e7838f32896522c965adfc4febf187db392bd441fb43bbd10c38fdf68b +8178ee93acf5353baa349285067b20e9bb41aa32d77b5aeb7384fe5220c1fe64a2461bd7a83142694fe673e8bbf61b7c +a06a8e53abcff271b1394bcc647440f81fb1c1a5f29c27a226e08f961c3353f4891620f2d59b9d1902bf2f5cc07a4553 +aaf5fe493b337810889e777980e6bbea6cac39ac66bc0875c680c4208807ac866e9fda9b5952aa1d04539b9f4a4bec57 +aa058abb1953eceac14ccfa7c0cc482a146e1232905dcecc86dd27f75575285f06bbae16a8c9fe8e35d8713717f5f19f +8f15dd732799c879ca46d2763453b359ff483ca33adb1d0e0a57262352e0476c235987dc3a8a243c74bc768f93d3014c +a61cc8263e9bc03cce985f1663b8a72928a607121005a301b28a278e9654727fd1b22bc8a949af73929c56d9d3d4a273 +98d6dc78502d19eb9f921225475a6ebcc7b44f01a2df6f55ccf6908d65b27af1891be2a37735f0315b6e0f1576c1f8d8 +8bd258b883f3b3793ec5be9472ad1ff3dc4b51bc5a58e9f944acfb927349ead8231a523cc2175c1f98e7e1e2b9f363b8 +aeacc2ecb6e807ad09bedd99654b097a6f39840e932873ace02eabd64ccfbb475abdcb62939a698abf17572d2034c51e +b8ccf78c08ccd8df59fd6eda2e01de328bc6d8a65824d6f1fc0537654e9bc6bf6f89c422dd3a295cce628749da85c864 +8f91fd8cb253ba2e71cc6f13da5e05f62c2c3b485c24f5d68397d04665673167fce1fc1aec6085c69e87e66ec555d3fd +a254baa10cb26d04136886073bb4c159af8a8532e3fd36b1e9c3a2e41b5b2b6a86c4ebc14dbe624ee07b7ccdaf59f9ab +94e3286fe5cd68c4c7b9a7d33ae3d714a7f265cf77cd0e9bc19fc51015b1d1c34ad7e3a5221c459e89f5a043ee84e3a9 +a279da8878af8d449a9539bec4b17cea94f0242911f66fab275b5143ab040825f78c89cb32a793930609415cfa3a1078 +ac846ceb89c9e5d43a2991c8443079dc32298cd63e370e64149cec98cf48a6351c09c856f2632fd2f2b3d685a18bbf8b +a847b27995c8a2e2454aaeb983879fb5d3a23105c33175839f7300b7e1e8ec3efd6450e9fa3f10323609dee7b98c6fd5 +a2f432d147d904d185ff4b2de8c6b82fbea278a2956bc406855b44c18041854c4f0ecccd472d1d0dff1d8aa8e281cb1d +94a48ad40326f95bd63dff4755f863a1b79e1df771a1173b17937f9baba57b39e651e7695be9f66a472f098b339364fc +a12a0ccd8f96e96e1bc6494341f7ebce959899341b3a084aa1aa87d1c0d489ac908552b7770b887bb47e7b8cbc3d8e66 +81a1f1681bda923bd274bfe0fbb9181d6d164fe738e54e25e8d4849193d311e2c4253614ed673c98af2c798f19a93468 +abf71106a05d501e84cc54610d349d7d5eae21a70bd0250f1bebbf412a130414d1c8dbe673ffdb80208fd72f1defa4d4 +96266dc2e0df18d8136d79f5b59e489978eee0e6b04926687fe389d4293c14f36f055c550657a8e27be4118b64254901 +8df5dcbefbfb4810ae3a413ca6b4bf08619ca53cd50eb1dde2a1c035efffc7b7ac7dff18d403253fd80104bd83dc029e +9610b87ff02e391a43324a7122736876d5b3af2a137d749c52f75d07b17f19900b151b7f439d564f4529e77aa057ad12 +a90a5572198b40fe2fcf47c422274ff36c9624df7db7a89c0eb47eb48a73a03c985f4ac5016161c76ca317f64339bce1 +98e5e61a6ab6462ba692124dba7794b6c6bde4249ab4fcc98c9edd631592d5bc2fb5e38466691a0970a38e48d87c2e43 +918cefb8f292f78d4db81462c633daf73b395e772f47b3a7d2cea598025b1d8c3ec0cbff46cdb23597e74929981cde40 +a98918a5dc7cf610fe55f725e4fd24ce581d594cb957bb9b4e888672e9c0137003e1041f83e3f1d7b9caab06462c87d4 +b92b74ac015262ca66c33f2d950221e19d940ba3bf4cf17845f961dc1729ae227aa9e1f2017829f2135b489064565c29 +a053ee339f359665feb178b4e7ee30a85df37debd17cacc5a27d6b3369d170b0114e67ad1712ed26d828f1df641bcd99 +8c3c8bad510b35da5ce5bd84b35c958797fbea024ad1c97091d2ff71d9b962e9222f65a9b776e5b3cc29c36e1063d2ee +af99dc7330fe7c37e850283eb47cc3257888e7c197cb0d102edf94439e1e02267b6a56306d246c326c4c79f9dc8c6986 +afecb2dc34d57a725efbd7eb93d61eb29dbe8409b668ab9ea040791f5b796d9be6d4fc10d7f627bf693452f330cf0435 +93334fedf19a3727a81a6b6f2459db859186227b96fe7a391263f69f1a0884e4235de64d29edebc7b99c44d19e7c7d7a +89579c51ac405ad7e9df13c904061670ce4b38372492764170e4d3d667ed52e5d15c7cd5c5991bbfa3a5e4e3fa16363e +9778f3e8639030f7ef1c344014f124e375acb8045bd13d8e97a92c5265c52de9d1ffebaa5bc3e1ad2719da0083222991 +88f77f34ee92b3d36791bdf3326532524a67d544297dcf1a47ff00b47c1b8219ff11e34034eab7d23b507caa2fd3c6b9 +a699c1e654e7c484431d81d90657892efeb4adcf72c43618e71ca7bd7c7a7ebbb1db7e06e75b75dc4c74efd306b5df3f +81d13153baebb2ef672b5bdb069d3cd669ce0be96b742c94e04038f689ff92a61376341366b286eee6bf3ae85156f694 +81efb17de94400fdacc1deec2550cbe3eecb27c7af99d8207e2f9be397e26be24a40446d2a09536bb5172c28959318d9 +989b21ebe9ceab02488992673dc071d4d5edec24bff0e17a4306c8cb4b3c83df53a2063d1827edd8ed16d6e837f0d222 +8d6005d6536825661b13c5fdce177cb37c04e8b109b7eb2b6d82ea1cb70efecf6a0022b64f84d753d165edc2bba784a3 +a32607360a71d5e34af2271211652d73d7756d393161f4cf0da000c2d66a84c6826e09e759bd787d4fd0305e2439d342 +aaad8d6f6e260db45d51b2da723be6fa832e76f5fbcb77a9a31e7f090dd38446d3b631b96230d78208cae408c288ac4e +abcfe425255fd3c5cffd3a818af7650190c957b6b07b632443f9e33e970a8a4c3bf79ac9b71f4d45f238a04d1c049857 +aeabf026d4c783adc4414b5923dbd0be4b039cc7201219f7260d321f55e9a5b166d7b5875af6129c034d0108fdc5d666 +af49e740c752d7b6f17048014851f437ffd17413c59797e5078eaaa36f73f0017c3e7da020310cfe7d3c85f94a99f203 +8854ca600d842566e3090040cd66bb0b3c46dae6962a13946f0024c4a8aca447e2ccf6f240045f1ceee799a88cb9210c +b6c03b93b1ab1b88ded8edfa1b487a1ed8bdce8535244dddb558ffb78f89b1c74058f80f4db2320ad060d0c2a9c351cc +b5bd7d17372faff4898a7517009b61a7c8f6f0e7ed4192c555db264618e3f6e57fb30a472d169fea01bf2bf0362a19a8 +96eb1d38319dc74afe7e7eb076fcd230d19983f645abd14a71e6103545c01301b31c47ae931e025f3ecc01fb3d2f31fa +b55a8d30d4403067def9b65e16f867299f8f64c9b391d0846d4780bc196569622e7e5b64ce799b5aefac8f965b2a7a7b +8356d199a991e5cbbff608752b6291731b6b6771aed292f8948b1f41c6543e4ab1bedc82dd26d10206c907c03508df06 +97f4137445c2d98b0d1d478049de952610ad698c91c9d0f0e7227d2aae690e9935e914ec4a2ea1fbf3fc1dddfeeacebb +af5621707e0938320b15ddfc87584ab325fbdfd85c30efea36f8f9bd0707d7ec12c344eff3ec21761189518d192df035 +8ac7817e71ea0825b292687928e349da7140285d035e1e1abff0c3704fa8453faaae343a441b7143a74ec56539687cc4 +8a5e0a9e4758449489df10f3386029ada828d1762e4fb0a8ffe6b79e5b6d5d713cb64ed95960e126398b0cdb89002bc9 +81324be4a71208bbb9bca74b77177f8f1abb9d3d5d9db195d1854651f2cf333cd618d35400da0f060f3e1b025124e4b2 +849971d9d095ae067525b3cbc4a7dfae81f739537ade6d6cec1b42fb692d923176197a8770907c58069754b8882822d6 +89f830825416802477cc81fdf11084885865ee6607aa15aa4eb28e351c569c49b8a1b9b5e95ddc04fa0ebafe20071313 +9240aeeaff37a91af55f860b9badd466e8243af9e8c96a7aa8cf348cd270685ab6301bc135b246dca9eda696f8b0e350 +acf74db78cc33138273127599eba35b0fb4e7b9a69fe02dae18fc6692d748ca332bd00b22afa8e654ed587aab11833f3 +b091e6d37b157b50d76bd297ad752220cd5c9390fac16dc838f8557aed6d9833fc920b61519df21265406216315e883f +a6446c429ebf1c7793c622250e23594c836b2fbcaf6c5b3d0995e1595a37f50ea643f3e549b0be8bbdadd69044d72ab9 +93e675353bd60e996bf1c914d5267eeaa8a52fc3077987ccc796710ef9becc6b7a00e3d82671a6bdfb8145ee3c80245a +a2f731e43251d04ed3364aa2f072d05355f299626f2d71a8a38b6f76cf08c544133f7d72dd0ab4162814b674b9fc7fa6 +97a8b791a5a8f6e1d0de192d78615d73d0c38f1e557e4e15d15adc663d649e655bc8da3bcc499ef70112eafe7fb45c7a +98cd624cbbd6c53a94469be4643c13130916b91143425bcb7d7028adbbfede38eff7a21092af43b12d4fab703c116359 +995783ce38fd5f6f9433027f122d4cf1e1ff3caf2d196ce591877f4a544ce9113ead60de2de1827eaff4dd31a20d79a8 +8cf251d6f5229183b7f3fe2f607a90b4e4b6f020fb4ba2459d28eb8872426e7be8761a93d5413640a661d73e34a5b81f +b9232d99620652a3aa7880cad0876f153ff881c4ed4c0c2e7b4ea81d5d42b70daf1a56b869d752c3743c6d4c947e6641 +849716f938f9d37250cccb1bf77f5f9fde53096cdfc6f2a25536a6187029a8f1331cdbed08909184b201f8d9f04b792f +80c7c4de098cbf9c6d17b14eba1805e433b5bc905f6096f8f63d34b94734f2e4ebf4bce8a177efd1186842a61204a062 +b790f410cf06b9b8daadceeb4fd5ff40a2deda820c8df2537e0a7554613ae3948e149504e3e79aa84889df50c8678eeb +813aab8bd000299cd37485b73cd7cba06e205f8efb87f1efc0bae8b70f6db2bc7702eb39510ad734854fb65515fe9d0f +94f0ab7388ac71cdb67f6b85dfd5945748afb2e5abb622f0b5ad104be1d4d0062b651f134ba22385c9e32c2dfdcccce1 +ab6223dca8bd6a4f969e21ccd9f8106fc5251d321f9e90cc42cea2424b3a9c4e5060a47eeef6b23c7976109b548498e8 +859c56b71343fce4d5c5b87814c47bf55d581c50fd1871a17e77b5e1742f5af639d0e94d19d909ec7dfe27919e954e0c +aae0d632b6191b8ad71b027791735f1578e1b89890b6c22e37de0e4a6074886126988fe8319ae228ac9ef3b3bcccb730 +8ca9f32a27a024c3d595ecfaf96b0461de57befa3b331ab71dc110ec3be5824fed783d9516597537683e77a11d334338 +a061df379fb3f4b24816c9f6cd8a94ecb89b4c6dc6cd81e4b8096fa9784b7f97ab3540259d1de9c02eb91d9945af4823 +998603102ac63001d63eb7347a4bb2bf4cf33b28079bb48a169076a65c20d511ccd3ef696d159e54cc8e772fb5d65d50 +94444d96d39450872ac69e44088c252c71f46be8333a608a475147752dbb99db0e36acfc5198f158509401959c12b709 +ac1b51b6c09fe055c1d7c9176eea9adc33f710818c83a1fbfa073c8dc3a7eb3513cbdd3f5960b7845e31e3e83181e6ba +803d530523fc9e1e0f11040d2412d02baef3f07eeb9b177fa9bfa396af42eea898a4276d56e1db998dc96ae47b644cb2 +85a3c9fc7638f5bf2c3e15ba8c2fa1ae87eb1ceb44c6598c67a2948667a9dfa41e61f66d535b4e7fda62f013a5a8b885 +a961cf5654c46a1a22c29baf7a4e77837a26b7f138f410e9d1883480ed5fa42411d522aba32040b577046c11f007388e +ad1154142344f494e3061ef45a34fab1aaacf5fdf7d1b26adbb5fbc3d795655fa743444e39d9a4119b4a4f82a6f30441 +b1d6c30771130c77806e7ab893b73d4deb590b2ff8f2f8b5e54c2040c1f3e060e2bd99afc668cf706a2df666a508bbf6 +a00361fd440f9decabd98d96c575cd251dc94c60611025095d1201ef2dedde51cb4de7c2ece47732e5ed9b3526c2012c +a85c5ab4d17d328bda5e6d839a9a6adcc92ff844ec25f84981e4f44a0e8419247c081530f8d9aa629c7eb4ca21affba6 +a4ddd3eab4527a2672cf9463db38bc29f61460e2a162f426b7852b7a7645fbd62084fd39a8e4d60e1958cce436dd8f57 +811648140080fe55b8618f4cf17f3c5a250adb0cd53d885f2ddba835d2b4433188e41fc0661faac88e4ff910b16278c0 +b85c7f1cfb0ed29addccf7546023a79249e8f15ac2d14a20accbfef4dd9dc11355d599815fa09d2b6b4e966e6ea8cff1 +a10b5d8c260b159043b020d5dd62b3467df2671afea6d480ca9087b7e60ed170c82b121819d088315902842d66c8fb45 +917e191df1bcf3f5715419c1e2191da6b8680543b1ba41fe84ed07ef570376e072c081beb67b375fca3565a2565bcabb +881fd967407390bfd7badc9ab494e8a287559a01eb07861f527207c127eadea626e9bcc5aa9cca2c5112fbac3b3f0e9c +959fd71149af82cc733619e0e5bf71760ca2650448c82984b3db74030d0e10f8ab1ce1609a6de6f470fe8b5bd90df5b3 +a3370898a1c5f33d15adb4238df9a6c945f18b9ada4ce2624fc32a844f9ece4c916a64e9442225b6592afa06d2e015f2 +817efb8a791435e4236f7d7b278181a5fa34587578c629dbc14fbf9a5c26772290611395eecd20222a4c58649fc256d8 +a04c9876acf2cfdc8ef96de4879742709270fa1d03fe4c8511fbef2d59eb0aaf0336fa2c7dfe41a651157377fa217813 +81e15875d7ea7f123e418edf14099f2e109d4f3a6ce0eb65f67fe9fb10d2f809a864a29f60ad3fc949f89e2596b21783 +b49f529975c09e436e6bc202fdc16e3fdcbe056db45178016ad6fdece9faad4446343e83aed096209690b21a6910724f +879e8eda589e1a279f7f49f6dd0580788c040d973748ec4942dbe51ea8fbd05983cc919b78f0c6b92ef3292ae29db875 +81a2b74b2118923f34139a102f3d95e7eee11c4c2929c2576dee200a5abfd364606158535a6c9e4178a6a83dbb65f3c4 +8913f281d8927f2b45fc815d0f7104631cb7f5f7278a316f1327d670d15868daadd2a64e3eb98e1f53fe7e300338cc80 +a6f815fba7ef9af7fbf45f93bc952e8b351f5de6568a27c7c47a00cb39a254c6b31753794f67940fc7d2e9cc581529f4 +b3722a15c66a0014ce4d082de118def8d39190c15678a472b846225585f3a83756ae1b255b2e3f86a26168878e4773b2 +817ae61ab3d0dd5b6e24846b5a5364b1a7dc2e77432d9fed587727520ae2f307264ea0948c91ad29f0aea3a11ff38624 +b3db467464415fcad36dc1de2d6ba7686772a577cc2619242ac040d6734881a45d3b40ed4588db124e4289cfeec4bbf6 +ad66a14f5a54ac69603b16e5f1529851183da77d3cc60867f10aea41339dd5e06a5257982e9e90a352cdd32750f42ee4 +adafa3681ef45d685555601a25a55cf23358319a17f61e2179e704f63df83a73bdd298d12cf6cef86db89bd17119e11d +a379dc44cb6dd3b9d378c07b2ec654fec7ca2f272de6ba895e3d00d20c9e4c5550498a843c8ac67e4221db2115bedc1c +b7bf81c267a78efc6b9e5a904574445a6487678d7ef70054e3e93ea6a23f966c2b68787f9164918e3b16d2175459ed92 +b41d66a13a4afafd5760062b77f79de7e6ab8ccacde9c6c5116a6d886912fb491dc027af435b1b44aacc6af7b3c887f2 +9904d23a7c1c1d2e4bab85d69f283eb0a8e26d46e8b7b30224438015c936729b2f0af7c7c54c03509bb0500acb42d8a4 +ae30d65e9e20c3bfd603994ae2b175ff691d51f3e24b2d058b3b8556d12ca4c75087809062dddd4aaac81c94d15d8a17 +9245162fab42ac01527424f6013310c3eb462982518debef6c127f46ba8a06c705d7dc9f0a41e796ba8d35d60ae6cc64 +87fab853638d7a29a20f3ba2b1a7919d023e9415bfa78ebb27973d8cbc7626f584dc5665d2e7ad71f1d760eba9700d88 +85aac46ecd330608e5272430970e6081ff02a571e8ea444f1e11785ea798769634a22a142d0237f67b75369d3c484a8a +938c85ab14894cc5dfce3d80456f189a2e98eddbc8828f4ff6b1df1dcb7b42b17ca2ff40226a8a1390a95d63dca698dd +a18ce1f846e3e3c4d846822f60271eecf0f5d7d9f986385ac53c5ace9589dc7c0188910448c19b91341a1ef556652fa9 +8611608a9d844f0e9d7584ad6ccf62a5087a64f764caf108db648a776b5390feb51e5120f0ef0e9e11301af3987dd7dc +8106333ba4b4de8d1ae43bc9735d3fea047392e88efd6a2fa6f7b924a18a7a265ca6123c3edc0f36307dd7fb7fe89257 +a91426fa500951ff1b051a248c050b7139ca30dde8768690432d597d2b3c4357b11a577be6b455a1c5d145264dcf81fc +b7f9f90e0e450f37b081297f7f651bad0496a8b9afd2a4cf4120a2671aaaa8536dce1af301258bfbfdb122afa44c5048 +84126da6435699b0c09fa4032dec73d1fca21d2d19f5214e8b0bea43267e9a8dd1fc44f8132d8315e734c8e2e04d7291 +aff064708103884cb4f1a3c1718b3fc40a238d35cf0a7dc24bdf9823693b407c70da50df585bf5bc4e9c07d1c2d203e8 +a8b40fc6533752983a5329c31d376c7a5c13ce6879cc7faee648200075d9cd273537001fb4c86e8576350eaac6ba60c2 +a02db682bdc117a84dcb9312eb28fcbde12d49f4ce915cc92c610bb6965ec3cc38290f8c5b5ec70afe153956692cda95 +86decd22b25d300508472c9ce75d3e465b737e7ce13bc0fcce32835e54646fe12322ba5bc457be18bfd926a1a6ca4a38 +a18666ef65b8c2904fd598791f5627207165315a85ee01d5fb0e6b2e10bdd9b00babc447da5bd63445e3337de33b9b89 +89bb0c06effadefdaf34ffe4b123e1678a90d4451ee856c863df1e752eef41fd984689ded8f0f878bf8916d5dd8e8024 +97cfcba08ebec05d0073992a66b1d7d6fb9d95871f2cdc36db301f78bf8069294d1c259efef5c93d20dc937eedae3a1a +ac2643b14ece79dcb2e289c96776a47e2bebd40dd6dc74fd035df5bb727b5596f40e3dd2d2202141e69b0993717ede09 +a5e6fd88a2f9174d9bd4c6a55d9c30974be414992f22aa852f552c7648f722ed8077acf5aba030abd47939bb451b2c60 +8ad40a612824a7994487731a40b311b7349038c841145865539c6ada75c56de6ac547a1c23df190e0caaafecddd80ccc +953a7cea1d857e09202c438c6108060961f195f88c32f0e012236d7a4b39d840c61b162ec86436e8c38567328bea0246 +80d8b47a46dae1868a7b8ccfe7029445bbe1009dad4a6c31f9ef081be32e8e1ac1178c3c8fb68d3e536c84990cc035b1 +81ecd99f22b3766ce0aca08a0a9191793f68c754fdec78b82a4c3bdc2db122bbb9ebfd02fc2dcc6e1567a7d42d0cc16a +b1dd0446bccc25846fb95d08c1c9cc52fb51c72c4c5d169ffde56ecfe800f108dc1106d65d5c5bd1087c656de3940b63 +b87547f0931e164e96de5c550ca5aa81273648fe34f6e193cd9d69cf729cb432e17aa02e25b1c27a8a0d20a3b795e94e +820a94e69a927e077082aae66f6b292cfbe4589d932edf9e68e268c9bd3d71ef76cf7d169dd445b93967c25db11f58f1 +b0d07ddf2595270c39adfa0c8cf2ab1322979b0546aa4d918f641be53cd97f36c879bb75d205e457c011aca3bbd9f731 +8700b876b35b4b10a8a9372c5230acecd39539c1bb87515640293ad4464a9e02929d7d6a6a11112e8a29564815ac0de4 +a61a601c5bb27dcb97e37c8e2b9ce479c6b192a5e04d9ed5e065833c5a1017ee5f237b77d1a17be5d48f8e7cc0bcacf6 +92fb88fe774c1ba1d4a08cae3c0e05467ad610e7a3f1d2423fd47751759235fe0a3036db4095bd6404716aa03820f484 +b274f140d77a3ce0796f5e09094b516537ccaf27ae1907099bff172e6368ba85e7c3ef8ea2a07457cac48ae334da95b3 +b2292d9181f16581a9a9142490b2bdcdfb218ca6315d1effc8592100d792eb89d5356996c890441f04f2b4a95763503e +8897e73f576d86bc354baa3bd96e553107c48cf5889dcc23c5ba68ab8bcd4e81f27767be2233fdfa13d39f885087e668 +a29eac6f0829791c728d71abc49569df95a4446ecbfc534b39f24f56c88fe70301838dfc1c19751e7f3c5c1b8c6af6a0 +9346dc3720adc5df500a8df27fd9c75ef38dc5c8f4e8ed66983304750e66d502c3c59b8e955be781b670a0afc70a2167 +9566d534e0e30a5c5f1428665590617e95fd05d45f573715f58157854ad596ece3a3cfec61356aee342308d623e029d5 +a464fb8bffe6bd65f71938c1715c6e296cc6d0311a83858e4e7eb5873b7f2cf0c584d2101e3407b85b64ca78b2ac93ce +b54088f7217987c87e9498a747569ac5b2f8afd5348f9c45bf3fd9fbf713a20f495f49c8572d087efe778ac7313ad6d3 +91fa9f5f8000fe050f5b224d90b59fcce13c77e903cbf98ded752e5b3db16adb2bc1f8c94be48b69f65f1f1ad81d6264 +92d04a5b0ac5d8c8e313709b432c9434ecd3e73231f01e9b4e7952b87df60cbfa97b5dedd2200bd033b4b9ea8ba45cc1 +a94b90ad3c3d6c4bbe169f8661a790c40645b40f0a9d1c7220f01cf7fc176e04d80bab0ced9323fcafb93643f12b2760 +94d86149b9c8443b46196f7e5a3738206dd6f3be7762df488bcbb9f9ee285a64c997ed875b7b16b26604fa59020a8199 +82efe4ae2c50a2d7645240c173a047f238536598c04a2c0b69c96e96bd18e075a99110f1206bc213f39edca42ba00cc1 +ab8667685f831bc14d4610f84a5da27b4ea5b133b4d991741a9e64dceb22cb64a3ce8f1b6e101d52af6296df7127c9ad +83ba433661c05dcc5d562f4a9a261c8110dac44b8d833ae1514b1fc60d8b4ee395b18804baea04cb10adb428faf713c3 +b5748f6f660cc5277f1211d2b8649493ed8a11085b871cd33a5aea630abd960a740f08c08be5f9c21574600ac9bf5737 +a5c8dd12af48fb710642ad65ebb97ca489e8206741807f7acfc334f8035d3c80593b1ff2090c9bb7bd138f0c48714ca8 +a2b382fd5744e3babf454b1d806cc8783efeb4761bc42b6914ea48a46a2eae835efbe0a18262b6bc034379e03cf1262b +b3145ffaf603f69f15a64936d32e3219eea5ed49fdfd2f5bf40ea0dfd974b36fb6ff12164d4c2282d892db4cf3ff3ce1 +87a316fb213f4c5e30c5e3face049db66be4f28821bd96034714ec23d3e97849d7b301930f90a4323c7ccf53de23050c +b9de09a919455070fed6220fc179c8b7a4c753062bcd27acf28f5b9947a659c0b364298daf7c85c4ca6fca7f945add1f +806fbd98d411b76979464c40ad88bc07a151628a27fcc1012ba1dfbaf5b5cc9d962fb9b3386008978a12515edce934bc +a15268877fae0d21610ae6a31061ed7c20814723385955fac09fdc9693a94c33dea11db98bb89fdfe68f933490f5c381 +8d633fb0c4da86b2e0b37d8fad5972d62bff2ac663c5ec815d095cd4b7e1fe66ebef2a2590995b57eaf941983c7ad7a4 +8139e5dd9cf405e8ef65f11164f0440827d98389ce1b418b0c9628be983a9ddd6cf4863036ccb1483b40b8a527acd9ed +88b15fa94a08eac291d2b94a2b30eb851ff24addf2cc30b678e72e32cfcb3424cf4b33aa395d741803f3e578ddf524de +b5eaf0c8506e101f1646bcf049ee38d99ea1c60169730da893fd6020fd00a289eb2f415947e44677af49e43454a7b1be +8489822ad0647a7e06aa2aa5595960811858ddd4542acca419dd2308a8c5477648f4dd969a6740bb78aa26db9bfcc555 +b1e9a7b9f3423c220330d45f69e45fa03d7671897cf077f913c252e3e99c7b1b1cf6d30caad65e4228d5d7b80eb86e5e +b28fe9629592b9e6a55a1406903be76250b1c50c65296c10c5e48c64b539fb08fe11f68cf462a6edcbba71b0cee3feb2 +a41acf96a02c96cd8744ff6577c244fc923810d17ade133587e4c223beb7b4d99fa56eae311a500d7151979267d0895c +880798938fe4ba70721be90e666dfb62fcab4f3556fdb7b0dc8ec5bc34f6b4513df965eae78527136eb391889fe2caf9 +98d4d89d358e0fb7e212498c73447d94a83c1b66e98fc81427ab13acddb17a20f52308983f3a5a8e0aaacec432359604 +81430b6d2998fc78ba937a1639c6020199c52da499f68109da227882dc26d005b73d54c5bdcac1a04e8356a8ca0f7017 +a8d906a4786455eb74613aba4ce1c963c60095ffb8658d368df9266fdd01e30269ce10bf984e7465f34b4fd83beba26a +af54167ac1f954d10131d44a8e0045df00d581dd9e93596a28d157543fbe5fb25d213806ed7fb3cba6b8f5b5423562db +8511e373a978a12d81266b9afbd55035d7bc736835cfa921903a92969eeba3624437d1346b55382e61415726ab84a448 +8cf43eea93508ae586fa9a0f1354a1e16af659782479c2040874a46317f9e8d572a23238efa318fdfb87cc63932602b7 +b0bdd3bacff077173d302e3a9678d1d37936188c7ecc34950185af6b462b7c679815176f3cce5db19aac8b282f2d60ad +a355e9b87f2f2672052f5d4d65b8c1c827d24d89b0d8594641fccfb69aef1b94009105f3242058bb31c8bf51caae5a41 +b8baa9e4b950b72ff6b88a6509e8ed1304bc6fd955748b2e59a523a1e0c5e99f52aec3da7fa9ff407a7adf259652466c +840bc3dbb300ea6f27d1d6dd861f15680bd098be5174f45d6b75b094d0635aced539fa03ddbccb453879de77fb5d1fe9 +b4bc7e7e30686303856472bae07e581a0c0bfc815657c479f9f5931cff208d5c12930d2fd1ff413ebd8424bcd7a9b571 +89b5d514155d7999408334a50822508b9d689add55d44a240ff2bdde2eee419d117031f85e924e2a2c1ca77db9b91eea +a8604b6196f87a04e1350302e8aa745bba8dc162115d22657b37a1d1a98cb14876ddf7f65840b5dbd77e80cd22b4256c +83cb7acdb9e03247515bb2ce0227486ccf803426717a14510f0d59d45e998b245797d356f10abca94f7a14e1a2f0d552 +aeb3266a9f16649210ab2df0e1908ac259f34ce1f01162c22b56cf1019096ee4ea5854c36e30bb2feb06c21a71e8a45c +89e72e86edf2aa032a0fc9acf4d876a40865fbb2c8f87cb7e4d88856295c4ac14583e874142fd0c314a49aba68c0aa3c +8c3576eba0583c2a7884976b4ed11fe1fda4f6c32f6385d96c47b0e776afa287503b397fa516a455b4b8c3afeedc76db +a31e5b633bda9ffa174654fee98b5d5930a691c3c42fcf55673d927dbc8d91c58c4e42e615353145431baa646e8bbb30 +89f2f3f7a8da1544f24682f41c68114a8f78c86bd36b066e27da13acb70f18d9f548773a16bd8e24789420e17183f137 +ada27fa4e90a086240c9164544d2528621a415a5497badb79f8019dc3dce4d12eb6b599597e47ec6ac39c81efda43520 +90dc1eb21bf21c0187f359566fc4bf5386abea52799306a0e5a1151c0817c5f5bc60c86e76b1929c092c0f3ff48cedd2 +b702a53ebcc17ae35d2e735a347d2c700e9cbef8eadbece33cac83df483b2054c126593e1f462cfc00a3ce9d737e2af5 +9891b06455ec925a6f8eafffba05af6a38cc5e193acaaf74ffbf199df912c5197106c5e06d72942bbb032ce277b6417f +8c0ee71eb01197b019275bcf96cae94e81d2cdc3115dbf2d8e3080074260318bc9303597e8f72b18f965ad601d31ec43 +8aaf580aaf75c1b7a5f99ccf60503506e62058ef43b28b02f79b8536a96be3f019c9f71caf327b4e6730134730d1bef5 +ae6f9fc21dd7dfa672b25a87eb0a41644f7609fab5026d5cedb6e43a06dbbfd6d6e30322a2598c8dedde88c52eaed626 +8159b953ffece5693edadb2e906ebf76ff080ee1ad22698950d2d3bfc36ac5ea78f58284b2ca180664452d55bd54716c +ab7647c32ca5e9856ac283a2f86768d68de75ceeba9e58b74c5324f8298319e52183739aba4340be901699d66ac9eb3f +a4d85a5701d89bcfaf1572db83258d86a1a0717603d6f24ac2963ffcf80f1265e5ab376a4529ca504f4396498791253c +816080c0cdbfe61b4d726c305747a9eb58ac26d9a35f501dd32ba43c098082d20faf3ccd41aad24600aa73bfa453dfac +84f3afac024f576b0fd9acc6f2349c2fcefc3f77dbe5a2d4964d14b861b88e9b1810334b908cf3427d9b67a8aee74b18 +94b390655557b1a09110018e9b5a14490681ade275bdc83510b6465a1218465260d9a7e2a6e4ec700f58c31dc3659962 +a8c66826b1c04a2dd4c682543242e7a57acae37278bd09888a3d17747c5b5fec43548101e6f46d703638337e2fd3277b +86e6f4608a00007fa533c36a5b054c5768ccafe41ad52521d772dcae4c8a4bcaff8f7609be30d8fab62c5988cbbb6830 +837da4cf09ae8aa0bceb16f8b3bfcc3b3367aecac9eed6b4b56d7b65f55981ef066490764fb4c108792623ecf8cad383 +941ff3011462f9b5bf97d8cbdb0b6f5d37a1b1295b622f5485b7d69f2cb2bcabc83630dae427f0259d0d9539a77d8424 +b99e5d6d82aa9cf7d5970e7f710f4039ac32c2077530e4c2779250c6b9b373bc380adb0a03b892b652f649720672fc8c +a791c78464b2d65a15440b699e1e30ebd08501d6f2720adbc8255d989a82fcded2f79819b5f8f201bed84a255211b141 +84af7ad4a0e31fcbb3276ab1ad6171429cf39adcf78dc03750dc5deaa46536d15591e26d53e953dfb31e1622bc0743ab +a833e62fe97e1086fae1d4917fbaf09c345feb6bf1975b5cb863d8b66e8d621c7989ab3dbecda36bc9eaffc5eaa6fa66 +b4ef79a46a2126f53e2ebe62770feb57fd94600be29459d70a77c5e9cc260fa892be06cd60f886bf48459e48eb50d063 +b43b8f61919ea380bf151c294e54d3a3ff98e20d1ee5efbfe38aa2b66fafbc6a49739793bd5cb1c809f8b30466277c3a +ab37735af2412d2550e62df9d8b3b5e6f467f20de3890bf56faf1abf2bf3bd1d98dc3fa0ad5e7ab3fce0fa20409eb392 +82416b74b1551d484250d85bb151fabb67e29cce93d516125533df585bc80779ab057ea6992801a3d7d5c6dcff87a018 +8145d0787f0e3b5325190ae10c1d6bee713e6765fb6a0e9214132c6f78f4582bb2771aaeae40d3dad4bafb56bf7e36d8 +b6935886349ecbdd5774e12196f4275c97ec8279fdf28ccf940f6a022ebb6de8e97d6d2173c3fe402cbe9643bed3883b +87ef9b4d3dc71ac86369f8ed17e0dd3b91d16d14ae694bc21a35b5ae37211b043d0e36d8ff07dcc513fb9e6481a1f37f +ae1d0ded32f7e6f1dc8fef495879c1d9e01826f449f903c1e5034aeeabc5479a9e323b162b688317d46d35a42d570d86 +a40d16497004db4104c6794e2f4428d75bdf70352685944f3fbe17526df333e46a4ca6de55a4a48c02ecf0bde8ba03c0 +8d45121efba8cc308a498e8ee39ea6fa5cae9fb2e4aab1c2ff9d448aa8494ccbec9a078f978a86fcd97b5d5e7be7522a +a8173865c64634ba4ac2fa432740f5c05056a9deaf6427cb9b4b8da94ca5ddbc8c0c5d3185a89b8b28878194de9cdfcd +b6ec06a74d690f6545f0f0efba236e63d1fdfba54639ca2617408e185177ece28901c457d02b849fd00f1a53ae319d0a +b69a12df293c014a40070e3e760169b6f3c627caf9e50b35a93f11ecf8df98b2bc481b410eecb7ab210bf213bbe944de +97e7dc121795a533d4224803e591eef3e9008bab16f12472210b73aaf77890cf6e3877e0139403a0d3003c12c8f45636 +acdfa6fdd4a5acb7738cc8768f7cba84dbb95c639399b291ae8e4e63df37d2d4096900a84d2f0606bf534a9ccaa4993f +86ee253f3a9446a33e4d1169719b7d513c6b50730988415382faaf751988c10a421020609f7bcdef91be136704b906e2 +aac9438382a856caf84c5a8a234282f71b5fc5f65219103b147e7e6cf565522285fbfd7417b513bdad8277a00f652ca1 +83f3799d8e5772527930f5dc071a2e0a65471618993ec8990a96ccdeee65270e490bda9d26bb877612475268711ffd80 +93f28a81ac8c0ec9450b9d762fae9c7f8feaace87a6ee6bd141ef1d2d0697ef1bbd159fe6e1de640dbdab2b0361fca8a +a0825c95ba69999b90eac3a31a3fd830ea4f4b2b7409bde5f202b61d741d6326852ce790f41de5cb0eccec7af4db30c1 +83924b0e66233edd603c3b813d698daa05751fc34367120e3cf384ea7432e256ccee4d4daf13858950549d75a377107d +956fd9fa58345277e06ba2ec72f49ed230b8d3d4ff658555c52d6cddeb84dd4e36f1a614f5242d5ca0192e8daf0543c2 +944869912476baae0b114cced4ff65c0e4c90136f73ece5656460626599051b78802df67d7201c55d52725a97f5f29fe +865cb25b64b4531fb6fe4814d7c8cd26b017a6c6b72232ff53defc18a80fe3b39511b23f9e4c6c7249d06e03b2282ed2 +81e09ff55214960775e1e7f2758b9a6c4e4cd39edf7ec1adfaad51c52141182b79fe2176b23ddc7df9fd153e5f82d668 +b31006896f02bc90641121083f43c3172b1039334501fbaf1672f7bf5d174ddd185f945adf1a9c6cf77be34c5501483d +88b92f6f42ae45e9f05b16e52852826e933efd0c68b0f2418ac90957fd018df661bc47c8d43c2a7d7bfcf669dab98c3c +92fc68f595853ee8683930751789b799f397135d002eda244fe63ecef2754e15849edde3ba2f0cc8b865c9777230b712 +99ca06a49c5cd0bb097c447793fcdd809869b216a34c66c78c7e41e8c22f05d09168d46b8b1f3390db9452d91bc96dea +b48b9490a5d65296802431852d548d81047bbefc74fa7dc1d4e2a2878faacdfcb365ae59209cb0ade01901a283cbd15d +aff0fdbef7c188b120a02bc9085d7b808e88f73973773fef54707bf2cd772cd066740b1b6f4127b5c349f657bd97e738 +966fd4463b4f43dd8ccba7ad50baa42292f9f8b2e70da23bb6780e14155d9346e275ef03ddaf79e47020dcf43f3738bd +9330c3e1fadd9e08ac85f4839121ae20bbeb0a5103d84fa5aadbd1213805bdcda67bf2fb75fc301349cbc851b5559d20 +993bb99867bd9041a71a55ad5d397755cfa7ab6a4618fc526179bfc10b7dc8b26e4372fe9a9b4a15d64f2b63c1052dda +a29b59bcfab51f9b3c490a3b96f0bf1934265c315349b236012adbd64a56d7f6941b2c8cc272b412044bc7731f71e1dc +a65c9cefe1fc35d089fe8580c2e7671ebefdb43014ac291528ff4deefd4883fd4df274af83711dad610dad0d615f9d65 +944c78c56fb227ae632805d448ca3884cd3d2a89181cead3d2b7835e63297e6d740aa79a112edb1d4727824991636df5 +a73d782da1db7e4e65d7b26717a76e16dd9fab4df65063310b8e917dc0bc24e0d6755df5546c58504d04d9e68c3b474a +af80f0b87811ae3124f68108b4ca1937009403f87928bbc53480e7c5408d072053ace5eeaf5a5aba814dab8a45502085 +88aaf1acfc6e2e19b8387c97da707cb171c69812fefdd4650468e9b2c627bd5ccfb459f4d8e56bdfd84b09ddf87e128f +92c97276ff6f72bab6e9423d02ad6dc127962dbce15a0dd1e4a393b4510c555df6aa27be0f697c0d847033a9ca8b8dfd +a0e07d43d96e2d85b6276b3c60aadb48f0aedf2de8c415756dc597249ea64d2093731d8735231dadc961e5682ac59479 +adc9e6718a8f9298957d1da3842a7751c5399bbdf56f8de6c1c4bc39428f4aee6f1ba6613d37bf46b9403345e9d6fc81 +951da434da4b20d949b509ceeba02e24da7ed2da964c2fcdf426ec787779c696b385822c7dbea4df3e4a35921f1e912c +a04cbce0d2b2e87bbf038c798a12ec828423ca6aca08dc8d481cf6466e3c9c73d4d4a7fa47df9a7e2e15aae9e9f67208 +8f855cca2e440d248121c0469de1f94c2a71b8ee2682bbad3a78243a9e03da31d1925e6760dbc48a1957e040fae9abe8 +b642e5b17c1df4a4e101772d73851180b3a92e9e8b26c918050f51e6dd3592f102d20b0a1e96f0e25752c292f4c903ff +a92454c300781f8ae1766dbbb50a96192da7d48ef4cbdd72dd8cbb44c6eb5913c112cc38e9144615fdc03684deb99420 +8b74f7e6c2304f8e780df4649ef8221795dfe85fdbdaa477a1542d135b75c8be45bf89adbbb6f3ddf54ca40f02e733e9 +85cf66292cbb30cec5fd835ab10c9fcb3aea95e093aebf123e9a83c26f322d76ebc89c4e914524f6c5f6ee7d74fc917d +ae0bfe0cdc97c09542a7431820015f2d16067b30dca56288013876025e81daa8c519e5e347268e19aa1a85fa1dc28793 +921322fc6a47dc091afa0ad6df18ed14cde38e48c6e71550aa513918b056044983aee402de21051235eecf4ce8040fbe +96c030381e97050a45a318d307dcb3c8377b79b4dd5daf6337cded114de26eb725c14171b9b8e1b3c08fe1f5ea6b49e0 +90c23b86b6111818c8baaf53a13eaee1c89203b50e7f9a994bf0edf851919b48edbac7ceef14ac9414cf70c486174a77 +8bf6c301240d2d1c8d84c71d33a6dfc6d9e8f1cfae66d4d0f7a256d98ae12b0bcebfa94a667735ee89f810bcd7170cff +a41a4ffbbea0e36874d65c009ee4c3feffff322f6fc0e30d26ee4dbc1f46040d05e25d9d0ecb378cef0d24a7c2c4b850 +a8d4cdd423986bb392a0a92c12a8bd4da3437eec6ef6af34cf5310944899287452a2eb92eb5386086d5063381189d10e +a81dd26ec057c4032a4ed7ad54d926165273ed51d09a1267b2e477535cf6966835a257c209e4e92d165d74fa75695fa3 +8d7f708c3ee8449515d94fc26b547303b53d8dd55f177bc3b25d3da2768accd9bc8e9f09546090ebb7f15c66e6c9c723 +839ba65cffcd24cfffa7ab3b21faabe3c66d4c06324f07b2729c92f15cad34e474b0f0ddb16cd652870b26a756b731d3 +87f1a3968afec354d92d77e2726b702847c6afcabb8438634f9c6f7766de4c1504317dc4fa9a4a735acdbf985e119564 +91a8a7fd6542f3e0673f07f510d850864b34ac087eb7eef8845a1d14b2b1b651cbdc27fa4049bdbf3fea54221c5c8549 +aef3cf5f5e3a2385ead115728d7059e622146c3457d266c612e778324b6e06fbfb8f98e076624d2f3ce1035d65389a07 +819915d6232e95ccd7693fdd78d00492299b1983bc8f96a08dcb50f9c0a813ed93ae53c0238345d5bea0beda2855a913 +8e9ba68ded0e94935131b392b28218315a185f63bf5e3c1a9a9dd470944509ca0ba8f6122265f8da851b5cc2abce68f1 +b28468e9b04ee9d69003399a3cf4457c9bf9d59f36ab6ceeb8e964672433d06b58beeea198fedc7edbaa1948577e9fa2 +a633005e2c9f2fd94c8bce2dd5bb708fe946b25f1ec561ae65e54e15cdd88dc339f1a083e01f0d39610c8fe24151aaf0 +841d0031e22723f9328dd993805abd13e0c99b0f59435d2426246996b08d00ce73ab906f66c4eab423473b409e972ce0 +85758d1b084263992070ec8943f33073a2d9b86a8606672550c17545507a5b3c88d87382b41916a87ee96ff55a7aa535 +8581b06b0fc41466ef94a76a1d9fb8ae0edca6d018063acf6a8ca5f4b02d76021902feba58972415691b4bdbc33ae3b4 +83539597ff5e327357ee62bc6bf8c0bcaec2f227c55c7c385a4806f0d37fb461f1690bad5066b8a5370950af32fafbef +aee3557290d2dc10827e4791d00e0259006911f3f3fce4179ed3c514b779160613eca70f720bff7804752715a1266ffa +b48d2f0c4e90fc307d5995464e3f611a9b0ef5fe426a289071f4168ed5cc4f8770c9332960c2ca5c8c427f40e6bb389f +847af8973b4e300bb06be69b71b96183fd1a0b9d51b91701bef6fcfde465068f1eb2b1503b07afda380f18d69de5c9e1 +a70a6a80ce407f07804c0051ac21dc24d794b387be94eb24e1db94b58a78e1bcfb48cd0006db8fc1f9bedaece7a44fbe +b40e942b8fa5336910ff0098347df716bff9d1fa236a1950c16eeb966b3bc1a50b8f7b0980469d42e75ae13ced53cead +b208fabaa742d7db3148515330eb7a3577487845abdb7bd9ed169d0e081db0a5816595c33d375e56aeac5b51e60e49d3 +b7c8194b30d3d6ef5ab66ec88ad7ebbc732a3b8a41731b153e6f63759a93f3f4a537eab9ad369705bd730184bdbbdc34 +9280096445fe7394d04aa1bc4620c8f9296e991cc4d6c131bd703cb1cc317510e6e5855ac763f4d958c5edfe7eebeed7 +abc2aa4616a521400af1a12440dc544e3c821313d0ab936c86af28468ef8bbe534837e364598396a81cf8d06274ed5a6 +b18ca8a3325adb0c8c18a666d4859535397a1c3fe08f95eebfac916a7a99bbd40b3c37b919e8a8ae91da38bc00fa56c0 +8a40c33109ecea2a8b3558565877082f79121a432c45ec2c5a5e0ec4d1c203a6788e6b69cb37f1fd5b8c9a661bc5476d +88c47301dd30998e903c84e0b0f2c9af2e1ce6b9f187dab03528d44f834dc991e4c86d0c474a2c63468cf4020a1e24a0 +920c832853e6ab4c851eecfa9c11d3acc7da37c823be7aa1ab15e14dfd8beb5d0b91d62a30cec94763bd8e4594b66600 +98e1addbe2a6b8edc7f12ecb9be81c3250aeeca54a1c6a7225772ca66549827c15f3950d01b8eb44aecb56fe0fff901a +8cfb0fa1068be0ec088402f5950c4679a2eb9218c729da67050b0d1b2d7079f3ddf4bf0f57d95fe2a8db04bc6bcdb20c +b70f381aafe336b024120453813aeab70baac85b9c4c0f86918797b6aee206e6ed93244a49950f3d8ec9f81f4ac15808 +a4c8edf4aa33b709a91e1062939512419711c1757084e46f8f4b7ed64f8e682f4e78b7135920c12f0eb0422fe9f87a6a +b4817e85fd0752d7ebb662d3a51a03367a84bac74ebddfba0e5af5e636a979500f72b148052d333b3dedf9edd2b4031b +a87430169c6195f5d3e314ff2d1c2f050e766fd5d2de88f5207d72dba4a7745bb86d0baca6e9ae156582d0d89e5838c7 +991b00f8b104566b63a12af4826b61ce7aa40f4e5b8fff3085e7a99815bdb4471b6214da1e480214fac83f86a0b93cc5 +b39966e3076482079de0678477df98578377a094054960ee518ef99504d6851f8bcd3203e8da5e1d4f6f96776e1fe6eb +a448846d9dc2ab7a0995fa44b8527e27f6b3b74c6e03e95edb64e6baa4f1b866103f0addb97c84bef1d72487b2e21796 +894bec21a453ae84b592286e696c35bc30e820e9c2fd3e63dd4fbe629e07df16439c891056070faa490155f255bf7187 +a9ec652a491b11f6a692064e955f3f3287e7d2764527e58938571469a1e29b5225b9415bd602a45074dfbfe9c131d6ca +b39d37822e6cbe28244b5f42ce467c65a23765bd16eb6447c5b3e942278069793763483dafd8c4dd864f8917aad357fe +88dba51133f2019cb266641c56101e3e5987d3b77647a2e608b5ff9113dfc5f85e2b7c365118723131fbc0c9ca833c9c +b566579d904b54ecf798018efcb824dccbebfc6753a0fd2128ac3b4bd3b038c2284a7c782b5ca6f310eb7ea4d26a3f0a +a97a55c0a492e53c047e7d6f9d5f3e86fb96f3dddc68389c0561515343b66b4bc02a9c0d5722dff1e3445308240b27f7 +a044028ab4bcb9e1a2b9b4ca4efbf04c5da9e4bf2fff0e8bd57aa1fc12a71e897999c25d9117413faf2f45395dee0f13 +a78dc461decbeaeed8ebd0909369b491a5e764d6a5645a7dac61d3140d7dc0062526f777b0eb866bff27608429ebbdde +b2c2a8991f94c39ca35fea59f01a92cb3393e0eccb2476dfbf57261d406a68bd34a6cff33ed80209991688c183609ef4 +84189eefb521aff730a4fd3fd5b10ddfd29f0d365664caef63bb015d07e689989e54c33c2141dd64427805d37a7e546e +85ac80bd734a52235da288ff042dea9a62e085928954e8eacd2c751013f61904ed110e5b3afe1ab770a7e6485efb7b5e +9183a560393dcb22d0d5063e71182020d0fbabb39e32493eeffeb808df084aa243eb397027f150b55a247d1ed0c8513e +81c940944df7ecc58d3c43c34996852c3c7915ed185d7654627f7af62abae7e0048dd444a6c09961756455000bd96d09 +aa8c34e164019743fd8284b84f06c3b449aae7996e892f419ee55d82ad548cb300fd651de329da0384243954c0ef6a60 +89a7b7bdfc7e300d06a14d463e573d6296d8e66197491900cc9ae49504c4809ff6e61b758579e9091c61085ba1237b83 +878d21809ba540f50bd11f4c4d9590fb6f3ab9de5692606e6e2ef4ed9d18520119e385be5e1f4b3f2e2b09c319f0e8fc +8eb248390193189cf0355365e630b782cd15751e672dc478b39d75dc681234dcd9309df0d11f4610dbb249c1e6be7ef9 +a1d7fb3aecb896df3a52d6bd0943838b13f1bd039c936d76d03de2044c371d48865694b6f532393b27fd10a4cf642061 +a34bca58a24979be442238cbb5ece5bee51ae8c0794dd3efb3983d4db713bc6f28a96e976ac3bd9a551d3ed9ba6b3e22 +817c608fc8cacdd178665320b5a7587ca21df8bdd761833c3018b967575d25e3951cf3d498a63619a3cd2ad4406f5f28 +86c95707db0495689afd0c2e39e97f445f7ca0edffad5c8b4cacd1421f2f3cc55049dfd504f728f91534e20383955582 +99c3b0bb15942c301137765d4e19502f65806f3b126dc01a5b7820c87e8979bce6a37289a8f6a4c1e4637227ad5bf3bf +8aa1518a80ea8b074505a9b3f96829f5d4afa55a30efe7b4de4e5dbf666897fdd2cf31728ca45921e21a78a80f0e0f10 +8d74f46361c79e15128ac399e958a91067ef4cec8983408775a87eca1eed5b7dcbf0ddf30e66f51780457413496c7f07 +a41cde4a786b55387458a1db95171aca4fd146507b81c4da1e6d6e495527c3ec83fc42fad1dfe3d92744084a664fd431 +8c352852c906fae99413a84ad11701f93f292fbf7bd14738814f4c4ceab32db02feb5eb70bc73898b0bc724a39d5d017 +a5993046e8f23b71ba87b7caa7ace2d9023fb48ce4c51838813174880d918e9b4d2b0dc21a2b9c6f612338c31a289df8 +83576d3324bf2d8afbfb6eaecdc5d767c8e22e7d25160414924f0645491df60541948a05e1f4202e612368e78675de8a +b43749b8df4b15bc9a3697e0f1c518e6b04114171739ef1a0c9c65185d8ec18e40e6954d125cbc14ebc652cf41ad3109 +b4eebd5d80a7327a040cafb9ccdb12b2dfe1aa86e6bc6d3ac8a57fadfb95a5b1a7332c66318ff72ba459f525668af056 +9198be7f1d413c5029b0e1c617bcbc082d21abe2c60ec8ce9b54ca1a85d3dba637b72fda39dae0c0ae40d047eab9f55a +8d96a0232832e24d45092653e781e7a9c9520766c3989e67bbe86b3a820c4bf621ea911e7cd5270a4bfea78b618411f6 +8d7160d0ea98161a2d14d46ef01dff72d566c330cd4fabd27654d300e1bc7644c68dc8eabf2a20a59bfe7ba276545f9b +abb60fce29dec7ba37e3056e412e0ec3e05538a1fc0e2c68877378c867605966108bc5742585ab6a405ce0c962b285b6 +8fabffa3ed792f05e414f5839386f6449fd9f7b41a47595c5d71074bd1bb3784cc7a1a7e1ad6b041b455035957e5b2dc +90ff017b4804c2d0533b72461436b10603ab13a55f86fd4ec11b06a70ef8166f958c110519ca1b4cc7beba440729fe2d +b340cfd120f6a4623e3a74cf8c32bfd7cd61a280b59dfd17b15ca8fae4d82f64a6f15fbde4c02f424debc72b7db5fe67 +871311c9c7220c932e738d59f0ecc67a34356d1429fe570ca503d340c9996cb5ee2cd188fad0e3bd16e4c468ec1dbebd +a772470262186e7b94239ba921b29f2412c148d6f97c4412e96d21e55f3be73f992f1ad53c71008f0558ec3f84e2b5a7 +b2a897dcb7ffd6257f3f2947ec966f2077d57d5191a88840b1d4f67effebe8c436641be85524d0a21be734c63ab5965d +a044f6eacc48a4a061fa149500d96b48cbf14853469aa4d045faf3dca973be1bd4b4ce01646d83e2f24f7c486d03205d +981af5dc2daa73f7fa9eae35a93d81eb6edba4a7f673b55d41f6ecd87a37685d31bb40ef4f1c469b3d72f2f18b925a17 +912d2597a07864de9020ac77083eff2f15ceb07600f15755aba61251e8ce3c905a758453b417f04d9c38db040954eb65 +9642b7f6f09394ba5e0805734ef6702c3eddf9eea187ba98c676d5bbaec0e360e3e51dc58433aaa1e2da6060c8659cb7 +8ab3836e0a8ac492d5e707d056310c4c8e0489ca85eb771bff35ba1d658360084e836a6f51bb990f9e3d2d9aeb18fbb5 +879e058e72b73bb1f4642c21ffdb90544b846868139c6511f299aafe59c2d0f0b944dffc7990491b7c4edcd6a9889250 +b9e60b737023f61479a4a8fd253ed0d2a944ea6ba0439bbc0a0d3abf09b0ad1f18d75555e4a50405470ae4990626f390 +b9c2535d362796dcd673640a9fa2ebdaec274e6f8b850b023153b0a7a30fffc87f96e0b72696f647ebe7ab63099a6963 +94aeff145386a087b0e91e68a84a5ede01f978f9dd9fe7bebca78941938469495dc30a96bba9508c0d017873aeea9610 +98b179f8a3d9f0d0a983c30682dd425a2ddc7803be59bd626c623c8951a5179117d1d2a68254c95c9952989877d0ee55 +889ecf5f0ee56938273f74eb3e9ecfb5617f04fb58e83fe4c0e4aef51615cf345bc56f3f61b17f6eed3249d4afd54451 +a0f2b2c39bcea4b50883e2587d16559e246248a66ecb4a4b7d9ab3b51fb39fe98d83765e087eee37a0f86b0ba4144c02 +b2a61e247ed595e8a3830f7973b07079cbda510f28ad8c78c220b26cb6acde4fbb5ee90c14a665f329168ee951b08cf0 +95bd0fcfb42f0d6d8a8e73d7458498a85bcddd2fb132fd7989265648d82ac2707d6d203fac045504977af4f0a2aca4b7 +843e5a537c298666e6cf50fcc044f13506499ef83c802e719ff2c90e85003c132024e04711be7234c04d4b0125512d5d +a46d1797c5959dcd3a5cfc857488f4d96f74277c3d13b98b133620192f79944abcb3a361d939a100187f1b0856eae875 +a1c7786736d6707a48515c38660615fcec67eb8a2598f46657855215f804fd72ab122d17f94fcffad8893f3be658dca7 +b23dc9e610abc7d8bd21d147e22509a0fa49db5be6ea7057b51aae38e31654b3aa044df05b94b718153361371ba2f622 +b00cc8f257d659c22d30e6d641f79166b1e752ea8606f558e4cad6fc01532e8319ea4ee12265ba4140ac45aa4613c004 +ac7019af65221b0cc736287b32d7f1a3561405715ba9a6a122342e04e51637ba911c41573de53e4781f2230fdcb2475f +81a630bc41b3da8b3eb4bf56cba10cd9f93153c3667f009dc332287baeb707d505fb537e6233c8e53d299ec0f013290c +a6b7aea5c545bb76df0f230548539db92bc26642572cb7dd3d5a30edca2b4c386f44fc8466f056b42de2a452b81aff5b +8271624ff736b7b238e43943c81de80a1612207d32036d820c11fc830c737972ccc9c60d3c2359922b06652311e3c994 +8a684106458cb6f4db478170b9ad595d4b54c18bf63b9058f095a2fa1b928c15101472c70c648873d5887880059ed402 +a5cc3c35228122f410184e4326cf61a37637206e589fcd245cb5d0cec91031f8f7586b80503070840fdfd8ce75d3c88b +9443fc631aed8866a7ed220890911057a1f56b0afe0ba15f0a0e295ab97f604b134b1ed9a4245e46ee5f9a93aa74f731 +984b6f7d79835dffde9558c6bb912d992ca1180a2361757bdba4a7b69dc74b056e303adc69fe67414495dd9c2dd91e64 +b15a5c8cba5de080224c274d31c68ed72d2a7126d347796569aef0c4e97ed084afe3da4d4b590b9dda1a07f0c2ff3dfb +991708fe9650a1f9a4e43938b91d45dc68c230e05ee999c95dbff3bf79b1c1b2bb0e7977de454237c355a73b8438b1d9 +b4f7edc7468b176a4a7c0273700c444fa95c726af6697028bed4f77eee887e3400f9c42ee15b782c0ca861c4c3b8c98a +8c60dcc16c51087eb477c13e837031d6c6a3dc2b8bf8cb43c23f48006bc7173151807e866ead2234b460c2de93b31956 +83ad63e9c910d1fc44bc114accfb0d4d333b7ebe032f73f62d25d3e172c029d5e34a1c9d547273bf6c0fead5c8801007 +85de73213cc236f00777560756bdbf2b16841ba4b55902cf2cad9742ecaf5d28209b012ceb41f337456dfeca93010cd7 +a7561f8827ccd75b6686ba5398bb8fc3083351c55a589b18984e186820af7e275af04bcd4c28e1dc11be1e8617a0610b +88c0a4febd4068850557f497ea888035c7fc9f404f6cc7794e7cc8722f048ad2f249e7dc62743e7a339eb7473ad3b0cd +932b22b1d3e6d5a6409c34980d176feb85ada1bf94332ef5c9fc4d42b907dabea608ceef9b5595ef3feee195151f18d8 +a2867bb3f5ab88fbdae3a16c9143ab8a8f4f476a2643c505bb9f37e5b1fd34d216cab2204c9a017a5a67b7ad2dda10e8 +b573d5f38e4e9e8a3a6fd82f0880dc049efa492a946d00283019bf1d5e5516464cf87039e80aef667cb86fdea5075904 +b948f1b5ab755f3f5f36af27d94f503b070696d793b1240c1bdfd2e8e56890d69e6904688b5f8ff5a4bdf5a6abfe195f +917eae95ebc4109a2e99ddd8fec7881d2f7aaa0e25fda44dec7ce37458c2ee832f1829db7d2dcfa4ca0f06381c7fe91d +95751d17ed00a3030bce909333799bb7f4ab641acf585807f355b51d6976dceee410798026a1a004ef4dcdff7ec0f5b8 +b9b7bd266f449a79bbfe075e429613e76c5a42ac61f01c8f0bbbd34669650682efe01ff9dbbc400a1e995616af6aa278 +ac1722d097ce9cd7617161f8ec8c23d68f1fb1c9ca533e2a8b4f78516c2fd8fb38f23f834e2b9a03bb06a9d655693ca9 +a7ad9e96ffd98db2ecdb6340c5d592614f3c159abfd832fe27ee9293519d213a578e6246aae51672ee353e3296858873 +989b8814d5de7937c4acafd000eec2b4cd58ba395d7b25f98cafd021e8efa37029b29ad8303a1f6867923f5852a220eb +a5bfe6282c771bc9e453e964042d44eff4098decacb89aecd3be662ea5b74506e1357ab26f3527110ba377711f3c9f41 +8900a7470b656639721d2abbb7b06af0ac4222ab85a1976386e2a62eb4b88bfb5b72cf7921ddb3cf3a395d7eeb192a2e +95a71b55cd1f35a438cf5e75f8ff11c5ec6a2ebf2e4dba172f50bfad7d6d5dca5de1b1afc541662c81c858f7604c1163 +82b5d62fea8db8d85c5bc3a76d68dedd25794cf14d4a7bc368938ffca9e09f7e598fdad2a5aac614e0e52f8112ae62b9 +997173f07c729202afcde3028fa7f52cefc90fda2d0c8ac2b58154a5073140683e54c49ed1f254481070d119ce0ce02a +aeffb91ccc7a72bbd6ffe0f9b99c9e66e67d59cec2e02440465e9636a613ab3017278cfa72ea8bc4aba9a8dc728cb367 +952743b06e8645894aeb6440fc7a5f62dd3acf96dab70a51e20176762c9751ea5f2ba0b9497ccf0114dc4892dc606031 +874c63baeddc56fbbca2ff6031f8634b745f6e34ea6791d7c439201aee8f08ef5ee75f7778700a647f3b21068513fce6 +85128fec9c750c1071edfb15586435cc2f317e3e9a175bb8a9697bcda1eb9375478cf25d01e7fed113483b28f625122d +85522c9576fd9763e32af8495ae3928ed7116fb70d4378448926bc9790e8a8d08f98cf47648d7da1b6e40d6a210c7924 +97d0f37a13cfb723b848099ca1c14d83e9aaf2f7aeb71829180e664b7968632a08f6a85f557d74b55afe6242f2a36e7c +abaa472d6ad61a5fccd1a57c01aa1bc081253f95abbcba7f73923f1f11c4e79b904263890eeb66926de3e2652f5d1c70 +b3c04945ba727a141e5e8aec2bf9aa3772b64d8fd0e2a2b07f3a91106a95cbcb249adcd074cbe498caf76fffac20d4ef +82c46781a3d730d9931bcabd7434a9171372dde57171b6180e5516d4e68db8b23495c8ac3ab96994c17ddb1cf249b9fb +a202d8b65613c42d01738ccd68ed8c2dbc021631f602d53f751966e04182743ebc8e0747d600b8a8676b1da9ae7f11ab +ae73e7256e9459db04667a899e0d3ea5255211fb486d084e6550b6dd64ca44af6c6b2d59d7aa152de9f96ce9b58d940d +b67d87b176a9722945ec7593777ee461809861c6cfd1b945dde9ee4ff009ca4f19cf88f4bbb5c80c9cbab2fe25b23ac8 +8f0b7a317a076758b0dac79959ee4a06c08b07d0f10538a4b53d3da2eda16e2af26922feb32c090330dc4d969cf69bd3 +90b36bf56adbd8c4b6cb32febc3a8d5f714370c2ac3305c10fa6d168dffb2a026804517215f9a2d4ec8310cdb6bb459b +aa80c19b0682ead69934bf18cf476291a0beddd8ef4ed75975d0a472e2ab5c70f119722a8574ae4973aceb733d312e57 +a3fc9abb12574e5c28dcb51750b4339b794b8e558675eef7d26126edf1de920c35e992333bcbffcbf6a5f5c0d383ce62 +a1573ff23ab972acdcd08818853b111fc757fdd35aa070186d3e11e56b172fb49d840bf297ac0dd222e072fc09f26a81 +98306f2be4caa92c2b4392212d0cbf430b409b19ff7d5b899986613bd0e762c909fc01999aa94be3bd529d67f0113d7f +8c1fc42482a0819074241746d17dc89c0304a2acdae8ed91b5009e9e3e70ff725ba063b4a3e68fdce05b74f5180c545e +a6c6113ebf72d8cf3163b2b8d7f3fa24303b13f55752522c660a98cd834d85d8c79214d900fa649499365e2e7641f77a +ab95eea424f8a2cfd9fb1c78bb724e5b1d71a0d0d1e4217c5d0f98b0d8bbd3f8400a2002abc0a0e4576d1f93f46fefad +823c5a4fd8cf4a75fdc71d5f2dd511b6c0f189b82affeacd2b7cfcad8ad1a5551227dcc9bfdb2e34b2097eaa00efbb51 +b97314dfff36d80c46b53d87a61b0e124dc94018a0bb680c32765b9a2d457f833a7c42bbc90b3b1520c33a182580398d +b17566ee3dcc6bb3b004afe4c0136dfe7dd27df9045ae896dca49fb36987501ae069eb745af81ba3fc19ff037e7b1406 +b0bdc0f55cfd98d331e3a0c4fbb776a131936c3c47c6bffdc3aaf7d8c9fa6803fbc122c2fefbb532e634228687d52174 +aa5d9e60cc9f0598559c28bb9bdd52aa46605ab4ffe3d192ba982398e72cec9a2a44c0d0d938ce69935693cabc0887ea +802b6459d2354fa1d56c592ac1346c428dadea6b6c0a87bf7d309bab55c94e1cf31dd98a7a86bd92a840dd51f218b91b +a526914efdc190381bf1a73dd33f392ecf01350b9d3f4ae96b1b1c3d1d064721c7d6eec5788162c933245a3943f5ee51 +b3b8fcf637d8d6628620a1a99dbe619eabb3e5c7ce930d6efd2197e261bf394b74d4e5c26b96c4b8009c7e523ccfd082 +8f7510c732502a93e095aba744535f3928f893f188adc5b16008385fb9e80f695d0435bfc5b91cdad4537e87e9d2551c +97b90beaa56aa936c3ca45698f79273a68dd3ccd0076eab48d2a4db01782665e63f33c25751c1f2e070f4d1a8525bf96 +b9fb798324b1d1283fdc3e48288e3861a5449b2ab5e884b34ebb8f740225324af86e4711da6b5cc8361c1db15466602f +b6d52b53cea98f1d1d4c9a759c25bf9d8a50b604b144e4912acbdbdc32aab8b9dbb10d64a29aa33a4f502121a6fb481c +9174ffff0f2930fc228f0e539f5cfd82c9368d26b074467f39c07a774367ff6cccb5039ac63f107677d77706cd431680 +a33b6250d4ac9e66ec51c063d1a6a31f253eb29bbaed12a0d67e2eccfffb0f3a52750fbf52a1c2aaba8c7692346426e7 +a97025fd5cbcebe8ef865afc39cd3ea707b89d4e765ec817fd021d6438e02fa51e3544b1fd45470c58007a08efac6edd +b32a78480edd9ff6ba2f1eec4088db5d6ceb2d62d7e59e904ecaef7bb4a2e983a4588e51692b3be76e6ffbc0b5f911a5 +b5ab590ef0bb77191f00495b33d11c53c65a819f7d0c1f9dc4a2caa147a69c77a4fff7366a602d743ee1f395ce934c1e +b3fb0842f9441fb1d0ee0293b6efbc70a8f58d12d6f769b12872db726b19e16f0f65efbc891cf27a28a248b0ef9c7e75 +9372ad12856fefb928ccb0d34e198df99e2f8973b07e9d417a3134d5f69e12e79ff572c4e03ccd65415d70639bc7c73e +aa8d6e83d09ce216bfe2009a6b07d0110d98cf305364d5529c170a23e693aabb768b2016befb5ada8dabdd92b4d012bb +a954a75791eeb0ce41c85200c3763a508ed8214b5945a42c79bfdcfb1ec4f86ad1dd7b2862474a368d4ac31911a2b718 +8e2081cfd1d062fe3ab4dab01f68062bac802795545fede9a188f6c9f802cb5f884e60dbe866710baadbf55dc77c11a4 +a2f06003b9713e7dd5929501ed485436b49d43de80ea5b15170763fd6346badf8da6de8261828913ee0dacd8ff23c0e1 +98eecc34b838e6ffd1931ca65eec27bcdb2fdcb61f33e7e5673a93028c5865e0d1bf6d3bec040c5e96f9bd08089a53a4 +88cc16019741b341060b95498747db4377100d2a5bf0a5f516f7dec71b62bcb6e779de2c269c946d39040e03b3ae12b7 +ad1135ccbc3019d5b2faf59a688eef2500697642be8cfbdf211a1ab59abcc1f24483e50d653b55ff1834675ac7b4978f +a946f05ed9972f71dfde0020bbb086020fa35b482cce8a4cc36dd94355b2d10497d7f2580541bb3e81b71ac8bba3c49f +a83aeed488f9a19d8cfd743aa9aa1982ab3723560b1cd337fc2f91ad82f07afa412b3993afb845f68d47e91ba4869840 +95eebe006bfc316810cb71da919e5d62c2cebb4ac99d8e8ef67be420302320465f8b69873470982de13a7c2e23516be9 +a55f8961295a11e91d1e5deadc0c06c15dacbfc67f04ccba1d069cba89d72aa3b3d64045579c3ea8991b150ac29366ae +b321991d12f6ac07a5de3c492841d1a27b0d3446082fbce93e7e1f9e8d8fe3b45d41253556261c21b70f5e189e1a7a6f +a0b0822f15f652ce7962a4f130104b97bf9529797c13d6bd8e24701c213cc37f18157bd07f3d0f3eae6b7cd1cb40401f +96e2fa4da378aa782cc2d5e6e465fc9e49b5c805ed01d560e9b98abb5c0de8b74a2e7bec3aa5e2887d25cccb12c66f0c +97e4ab610d414f9210ed6f35300285eb3ccff5b0b6a95ed33425100d7725e159708ea78704497624ca0a2dcabce3a2f9 +960a375b17bdb325761e01e88a3ea57026b2393e1d887b34b8fa5d2532928079ce88dc9fd06a728b26d2bb41b12b9032 +8328a1647398e832aadc05bd717487a2b6fcdaa0d4850d2c4da230c6a2ed44c3e78ec4837b6094f3813f1ee99414713f +aa283834ebd18e6c99229ce4b401eda83f01d904f250fedd4e24f1006f8fa0712a6a89a7296a9bf2ce8de30e28d1408e +b29e097f2caadae3e0f0ae3473c072b0cd0206cf6d2e9b22c1a5ad3e07d433e32bd09ed1f4e4276a2da4268633357b7f +9539c5cbba14538b2fe077ecf67694ef240da5249950baaabea0340718b882a966f66d97f08556b08a4320ceb2cc2629 +b4529f25e9b42ae8cf8338d2eface6ba5cd4b4d8da73af502d081388135c654c0b3afb3aa779ffc80b8c4c8f4425dd2b +95be0739c4330619fbe7ee2249c133c91d6c07eab846c18c5d6c85fc21ac5528c5d56dcb0145af68ed0c6a79f68f2ccd +ac0c83ea802227bfc23814a24655c9ff13f729619bcffdb487ccbbf029b8eaee709f8bddb98232ef33cd70e30e45ca47 +b503becb90acc93b1901e939059f93e671900ca52c6f64ae701d11ac891d3a050b505d89324ce267bc43ab8275da6ffe +98e3811b55b1bacb70aa409100abb1b870f67e6d059475d9f278c751b6e1e2e2d6f2e586c81a9fb6597fda06e7923274 +b0b0f61a44053fa6c715dbb0731e35d48dba257d134f851ee1b81fd49a5c51a90ebf5459ec6e489fce25da4f184fbdb1 +b1d2117fe811720bb997c7c93fe9e4260dc50fca8881b245b5e34f724aaf37ed970cdad4e8fcb68e05ac8cf55a274a53 +a10f502051968f14b02895393271776dee7a06db9de14effa0b3471825ba94c3f805302bdddac4d397d08456f620999d +a3dbad2ef060ae0bb7b02eaa4a13594f3f900450faa1854fc09620b01ac94ab896321dfb1157cf2374c27e5718e8026a +b550fdec503195ecb9e079dcdf0cad559d64d3c30818ef369b4907e813e689da316a74ad2422e391b4a8c2a2bef25fc0 +a25ba865e2ac8f28186cea497294c8649a201732ecb4620c4e77b8e887403119910423df061117e5f03fc5ba39042db1 +b3f88174e03fdb443dd6addd01303cf88a4369352520187c739fc5ae6b22fa99629c63c985b4383219dab6acc5f6f532 +97a7503248e31e81b10eb621ba8f5210c537ad11b539c96dfb7cf72b846c7fe81bd7532c5136095652a9618000b7f8d3 +a8bcdc1ce5aa8bfa683a2fc65c1e79de8ff5446695dcb8620f7350c26d2972a23da22889f9e2b1cacb3f688c6a2953dc +8458c111df2a37f5dd91a9bee6c6f4b79f4f161c93fe78075b24a35f9817da8dde71763218d627917a9f1f0c4709c1ed +ac5f061a0541152b876cbc10640f26f1cc923c9d4ae1b6621e4bb3bf2cec59bbf87363a4eb72fb0e5b6d4e1c269b52d5 +a9a25ca87006e8a9203cbb78a93f50a36694aa4aad468b8d80d3feff9194455ca559fcc63838128a0ab75ad78c07c13a +a450b85f5dfffa8b34dfd8bc985f921318efacf8857cf7948f93884ba09fb831482ee90a44224b1a41e859e19b74962f +8ed91e7f92f5c6d7a71708b6132f157ac226ecaf8662af7d7468a4fa25627302efe31e4620ad28719318923e3a59bf82 +ab524165fd4c71b1fd395467a14272bd2b568592deafa039d8492e9ef36c6d3f96927c95c72d410a768dc0b6d1fbbc9b +b662144505aa8432c75ffb8d10318526b6d5777ac7af9ebfad87d9b0866c364f7905a6352743bd8fd79ffd9d5dd4f3e6 +a48f1677550a5cd40663bb3ba8f84caaf8454f332d0ceb1d94dbea52d0412fe69c94997f7749929712fd3995298572f7 +8391cd6e2f6b0c242de1117a612be99776c3dc95cb800b187685ea5bf7e2722275eddb79fd7dfc8be8e389c4524cdf70 +875d3acb9af47833b72900bc0a2448999d638f153c5e97e8a14ec02d0c76f6264353a7e275e1f1a5855daced523d243b +91f1823657d30b59b2f627880a9a9cb530f5aca28a9fd217fe6f2f5133690dfe7ad5a897872e400512db2e788b3f7628 +ad3564332aa56cea84123fc7ca79ea70bb4fef2009fa131cb44e4b15e8613bd11ca1d83b9d9bf456e4b7fee9f2e8b017 +8c530b84001936d5ab366c84c0b105241a26d1fb163669f17c8f2e94776895c2870edf3e1bc8ccd04d5e65531471f695 +932d01fa174fdb0c366f1230cffde2571cc47485f37f23ba5a1825532190cc3b722aeb1f15aed62cf83ccae9403ba713 +88b28c20585aca50d10752e84b901b5c2d58efef5131479fbbe53de7bce2029e1423a494c0298e1497669bd55be97a5d +b914148ca717721144ebb3d3bf3fcea2cd44c30c5f7051b89d8001502f3856fef30ec167174d5b76265b55d70f8716b5 +81d0173821c6ddd2a068d70766d9103d1ee961c475156e0cbd67d54e668a796310474ef698c7ab55abe6f2cf76c14679 +8f28e8d78e2fe7fa66340c53718e0db4b84823c8cfb159c76eac032a62fb53da0a5d7e24ca656cf9d2a890cb2a216542 +8a26360335c73d1ab51cec3166c3cf23b9ea51e44a0ad631b0b0329ef55aaae555420348a544e18d5760969281759b61 +94f326a32ed287545b0515be9e08149eb0a565025074796d72387cc3a237e87979776410d78339e23ef3172ca43b2544 +a785d2961a2fa5e70bffa137858a92c48fe749fee91b02599a252b0cd50d311991a08efd7fa5e96b78d07e6e66ffe746 +94af9030b5ac792dd1ce517eaadcec1482206848bea4e09e55cc7f40fd64d4c2b3e9197027c5636b70d6122c51d2235d +9722869f7d1a3992850fe7be405ec93aa17dc4d35e9e257d2e469f46d2c5a59dbd504056c85ab83d541ad8c13e8bcd54 +b13c4088b61a06e2c03ac9813a75ff1f68ffdfee9df6a8f65095179a475e29cc49119cad2ce05862c3b1ac217f3aace9 +8c64d51774753623666b10ca1b0fe63ae42f82ed6aa26b81dc1d48c86937c5772eb1402624c52a154b86031854e1fb9f +b47e4df18002b7dac3fee945bf9c0503159e1b8aafcce2138818e140753011b6d09ef1b20894e08ba3006b093559061b +93cb5970076522c5a0483693f6a35ffd4ea2aa7aaf3730c4eccd6af6d1bebfc1122fc4c67d53898ae13eb6db647be7e2 +a68873ef80986795ea5ed1a597d1cd99ed978ec25e0abb57fdcc96e89ef0f50aeb779ff46e3dce21dc83ada3157a8498 +8cab67f50949cc8eee6710e27358aea373aae3c92849f8f0b5531c080a6300cdf2c2094fe6fecfef6148de0d28446919 +993e932bcb616dbaa7ad18a4439e0565211d31071ef1b85a0627db74a05d978c60d507695eaeea5c7bd9868a21d06923 +acdadff26e3132d9478a818ef770e9fa0d2b56c6f5f48bd3bd674436ccce9bdfc34db884a73a30c04c5f5e9764cb2218 +a0d3e64c9c71f84c0eef9d7a9cb4fa184224b969db5514d678e93e00f98b41595588ca802643ea225512a4a272f5f534 +91c9140c9e1ba6e330cb08f6b2ce4809cd0d5a0f0516f70032bf30e912b0ed684d07b413b326ab531ee7e5b4668c799b +87bc2ee7a0c21ba8334cd098e35cb703f9af57f35e091b8151b9b63c3a5b0f89bd7701dbd44f644ea475901fa6d9ef08 +9325ccbf64bf5d71b303e31ee85d486298f9802c5e55b2c3d75427097bf8f60fa2ab4fcaffa9b60bf922c3e24fbd4b19 +95d0506e898318f3dc8d28d16dfd9f0038b54798838b3c9be2a2ae3c2bf204eb496166353fc042220b0bd4f6673b9285 +811de529416331fe9c416726d45df9434c29dcd7e949045eb15740f47e97dde8f31489242200e19922cac2a8b7c6fd1f +ade632d04a4c8bbab6ca7df370b2213cb9225023e7973f0e29f4f5e52e8aeaabc65171306bbdd12a67b195dfbb96d48f +88b7f029e079b6ae956042c0ea75d53088c5d0efd750dd018adaeacf46be21bf990897c58578c491f41afd3978d08073 +91f477802de507ffd2be3f4319903119225b277ad24f74eb50f28b66c14d32fae53c7edb8c7590704741af7f7f3e3654 +809838b32bb4f4d0237e98108320d4b079ee16ed80c567e7548bd37e4d7915b1192880f4812ac0e00476d246aec1dbc8 +84183b5fc4a7997a8ae5afedb4d21dce69c480d5966b5cbdafd6dd10d29a9a6377f3b90ce44da0eb8b176ac3af0253bb +8508abbf6d3739a16b9165caf0f95afb3b3ac1b8c38d6d374cf0c91296e2c1809a99772492b539cda184510bce8a0271 +8722054e59bab2062e6419a6e45fc803af77fde912ef2cd23055ad0484963de65a816a2debe1693d93c18218d2b8e81a +8e895f80e485a7c4f56827bf53d34b956281cdc74856c21eb3b51f6288c01cc3d08565a11cc6f3e2604775885490e8c5 +afc92714771b7aa6e60f3aee12efd9c2595e9659797452f0c1e99519f67c8bc3ac567119c1ddfe82a3e961ee9defea9a +818ff0fd9cefd32db87b259e5fa32967201016fc02ef44116cdca3c63ce5e637756f60477a408709928444a8ad69c471 +8251e29af4c61ae806fc5d032347fb332a94d472038149225298389495139ce5678fae739d02dfe53a231598a992e728 +a0ea39574b26643f6f1f48f99f276a8a64b5481989cfb2936f9432a3f8ef5075abfe5c067dc5512143ce8bf933984097 +af67a73911b372bf04e57e21f289fc6c3dfac366c6a01409b6e76fea4769bdb07a6940e52e8d7d3078f235c6d2f632c6 +b5291484ef336024dd2b9b4cf4d3a6b751133a40656d0a0825bcc6d41c21b1c79cb50b0e8f4693f90c29c8f4358641f9 +8bc0d9754d70f2cb9c63f991902165a87c6535a763d5eece43143b5064ae0bcdce7c7a8f398f2c1c29167b2d5a3e6867 +8d7faff53579ec8f6c92f661c399614cc35276971752ce0623270f88be937c414eddcb0997e14724a783905a026c8883 +9310b5f6e675fdf60796f814dbaa5a6e7e9029a61c395761e330d9348a7efab992e4e115c8be3a43d08e90d21290c892 +b5eb4f3eb646038ad2a020f0a42202532d4932e766da82b2c1002bf9c9c2e5336b54c8c0ffcc0e02d19dde2e6a35b6cc +91dabfd30a66710f1f37a891136c9be1e23af4abf8cb751f512a40c022a35f8e0a4fb05b17ec36d4208de02d56f0d53a +b3ded14e82d62ac7a5a036122a62f00ff8308498f3feae57d861babaff5a6628d43f0a0c5fc903f10936bcf4e2758ceb +a88e8348fed2b26acca6784d19ef27c75963450d99651d11a950ea81d4b93acd2c43e0ecce100eaf7e78508263d5baf3 +b1f5bbf7c4756877b87bb42163ac570e08c6667c4528bf68b5976680e19beeff7c5effd17009b0718797077e2955457a +ad2e7b516243f915d4d1415326e98b1a7390ae88897d0b03b66c2d9bd8c3fba283d7e8fe44ed3333296a736454cef6d8 +8f82eae096d5b11f995de6724a9af895f5e1c58d593845ad16ce8fcae8507e0d8e2b2348a0f50a1f66a17fd6fac51a5c +890e4404d0657c6c1ee14e1aac132ecf7a568bb3e04137b85ac0f84f1d333bd94993e8750f88eee033a33fb00f85dcc7 +82ac7d3385e035115f1d39a99fc73e5919de44f5e6424579776d118d711c8120b8e5916372c6f27bed4cc64cac170b6c +85ee16d8901c272cfbbe966e724b7a891c1bd5e68efd5d863043ad8520fc409080af61fd726adc680b3f1186fe0ac8b8 +86dc564c9b545567483b43a38f24c41c6551a49cabeebb58ce86404662a12dbfafd0778d30d26e1c93ce222e547e3898 +a29f5b4522db26d88f5f95f18d459f8feefab02e380c2edb65aa0617a82a3c1a89474727a951cef5f15050bcf7b380fb +a1ce039c8f6cac53352899edb0e3a72c76da143564ad1a44858bd7ee88552e2fe6858d1593bbd74aeee5a6f8034b9b9d +97f10d77983f088286bd7ef3e7fdd8fa275a56bec19919adf33cf939a90c8f2967d2b1b6fc51195cb45ad561202a3ed7 +a25e2772e8c911aaf8712bdac1dd40ee061c84d3d224c466cfaae8e5c99604053f940cde259bd1c3b8b69595781dbfec +b31bb95a0388595149409c48781174c340960d59032ab2b47689911d03c68f77a2273576fbe0c2bf4553e330656058c7 +b8b2e9287ad803fb185a13f0d7456b397d4e3c8ad5078f57f49e8beb2e85f661356a3392dbd7bcf6a900baa5582b86a1 +a3d0893923455eb6e96cc414341cac33d2dbc88fba821ac672708cce131761d85a0e08286663a32828244febfcae6451 +82310cb42f647d99a136014a9f881eb0b9791efd2e01fc1841907ad3fc8a9654d3d1dab6689c3607214b4dc2aca01cee +874022d99c16f60c22de1b094532a0bc6d4de700ad01a31798fac1d5088b9a42ad02bef8a7339af7ed9c0d4f16b186ee +94981369e120265aed40910eebc37eded481e90f4596b8d57c3bec790ab7f929784bd33ddd05b7870aad6c02e869603b +a4f1f50e1e2a73f07095e0dd31cb45154f24968dae967e38962341c1241bcd473102fff1ff668b20c6547e9732d11701 +ae2328f3b0ad79fcda807e69a1b5278145225083f150f67511dafc97e079f860c3392675f1752ae7e864c056e592205b +875d8c971e593ca79552c43d55c8c73b17cd20c81ff2c2fed1eb19b1b91e4a3a83d32df150dbfd5db1092d0aebde1e1f +add2e80aa46aae95da73a11f130f4bda339db028e24c9b11e5316e75ba5e63bc991d2a1da172c7c8e8fee038baae3433 +b46dbe1cb3424002aa7de51e82f600852248e251465c440695d52538d3f36828ff46c90ed77fc1d11534fe3c487df8ef +a5e5045d28b4e83d0055863c30c056628c58d4657e6176fd0536f5933f723d60e851bb726d5bf3c546b8ce4ac4a57ef8 +91fec01e86dd1537e498fff7536ea3ca012058b145f29d9ada49370cd7b7193ac380e116989515df1b94b74a55c45df3 +a7428176d6918cd916a310bdc75483c72de660df48cac4e6e7478eef03205f1827ea55afc0df5d5fa7567d14bbea7fc9 +851d89bef45d9761fe5fdb62972209335193610015e16a675149519f9911373bac0919add226ef118d9f3669cfdf4734 +b74acf5c149d0042021cb2422ea022be4c4f72a77855f42393e71ffd12ebb3eec16bdf16f812159b67b79a9706e7156d +99f35dce64ec99aa595e7894b55ce7b5a435851b396e79036ffb249c28206087db4c85379df666c4d95857db02e21ff9 +b6b9a384f70db9e298415b8ab394ee625dafff04be2886476e59df8d052ca832d11ac68a9b93fba7ab055b7bc36948a4 +898ee4aefa923ffec9e79f2219c7389663eb11eb5b49014e04ed4a336399f6ea1691051d86991f4c46ca65bcd4fdf359 +b0f948217b0d65df7599a0ba4654a5e43c84db477936276e6f11c8981efc6eaf14c90d3650107ed4c09af4cc8ec11137 +aa6286e27ac54f73e63dbf6f41865dd94d24bc0cf732262fcaff67319d162bb43af909f6f8ee27b1971939cfbba08141 +8bca7cdf730cf56c7b2c8a2c4879d61361a6e1dba5a3681a1a16c17a56e168ace0e99cf0d15826a1f5e67e6b8a8a049a +a746d876e8b1ce225fcafca603b099b36504846961526589af977a88c60d31ba2cc56e66a3dec8a77b3f3531bf7524c9 +a11e2e1927e6704cdb8874c75e4f1842cef84d7d43d7a38e339e61dc8ba90e61bbb20dd3c12e0b11d2471d58eed245be +a36395e22bc1d1ba8b0459a235203177737397da5643ce54ded3459d0869ff6d8d89f50c73cb62394bf66a959cde9b90 +8b49f12ba2fdf9aca7e5f81d45c07d47f9302a2655610e7634d1e4bd16048381a45ef2c95a8dd5b0715e4b7cf42273af +91cffa2a17e64eb7f76bccbe4e87280ee1dd244e04a3c9eac12e15d2d04845d876eb24fe2ec6d6d266cce9efb281077f +a6b8afabf65f2dee01788114e33a2f3ce25376fb47a50b74da7c3c25ff1fdc8aa9f41307534abbf48acb6f7466068f69 +8d13db896ccfea403bd6441191995c1a65365cab7d0b97fbe9526da3f45a877bd1f4ef2edef160e8a56838cd1586330e +98c717de9e01bef8842c162a5e757fe8552d53269c84862f4d451e7c656ae6f2ae473767b04290b134773f63be6fdb9d +8c2036ace1920bd13cf018e82848c49eb511fad65fd0ff51f4e4b50cf3bfc294afb63cba682c16f52fb595a98fa84970 +a3520fdff05dbad9e12551b0896922e375f9e5589368bcb2cc303bde252743b74460cb5caf99629325d3620f13adc796 +8d4f83a5bfec05caf5910e0ce538ee9816ee18d0bd44c1d0da2a87715a23cd2733ad4d47552c6dc0eb397687d611dd19 +a7b39a0a6a02823452d376533f39d35029867b3c9a6ad6bca181f18c54132d675613a700f9db2440fb1b4fa13c8bf18a +80bcb114b2544b80f404a200fc36860ed5e1ad31fe551acd4661d09730c452831751baa9b19d7d311600d267086a70bc +90dcce03c6f88fc2b08f2b42771eedde90cc5330fe0336e46c1a7d1b5a6c1641e5fcc4e7b3d5db00bd8afca9ec66ed81 +aec15f40805065c98e2965b1ae12a6c9020cfdb094c2d0549acfc7ea2401a5fb48d3ea7d41133cf37c4e096e7ff53eb9 +80e129b735dba49fa627a615d6c273119acec8e219b2f2c4373a332b5f98d66cbbdd688dfbe72a8f8bfefaccc02c50c1 +a9b596da3bdfe23e6799ece5f7975bf7a1979a75f4f546deeaf8b34dfe3e0d623217cb4cf4ccd504cfa3625b88cd53f1 +abcbbb70b16f6e517c0ab4363ab76b46e4ff58576b5f8340e5c0e8cc0e02621b6e23d742d73b015822a238b17cfd7665 +a046937cc6ea6a2e1adae543353a9fe929c1ae4ad655be1cc051378482cf88b041e28b1e9a577e6ccff2d3570f55e200 +831279437282f315e65a60184ef158f0a3dddc15a648dc552bdc88b3e6fe8288d3cfe9f0031846d81350f5e7874b4b33 +993d7916fa213c6d66e7c4cafafc1eaec9a2a86981f91c31eb8a69c5df076c789cbf498a24c84e0ee77af95b42145026 +823907a3b6719f8d49b3a4b7c181bd9bb29fcf842d7c70660c4f351852a1e197ca46cf5e879b47fa55f616fa2b87ce5e +8d228244e26132b234930ee14c75d88df0943cdb9c276a8faf167d259b7efc1beec2a87c112a6c608ad1600a239e9aae +ab6e55766e5bfb0cf0764ed909a8473ab5047d3388b4f46faeba2d1425c4754c55c6daf6ad4751e634c618b53e549529 +ab0cab6860e55a84c5ad2948a7e0989e2b4b1fd637605634b118361497332df32d9549cb854b2327ca54f2bcb85eed8f +b086b349ae03ef34f4b25a57bcaa5d1b29bd94f9ebf87e22be475adfe475c51a1230c1ebe13506cb72c4186192451658 +8a0b49d8a254ca6d91500f449cbbfbb69bb516c6948ac06808c65595e46773e346f97a5ce0ef7e5a5e0de278af22709c +ac49de11edaaf04302c73c578cc0824bdd165c0d6321be1c421c1950e68e4f3589aa3995448c9699e93c6ebae8803e27 +884f02d841cb5d8f4c60d1402469216b114ab4e93550b5bc1431756e365c4f870a9853449285384a6fa49e12ce6dc654 +b75f3a28fa2cc8d36b49130cb7448a23d73a7311d0185ba803ad55c8219741d451c110f48b786e96c728bc525903a54f +80ae04dbd41f4a35e33f9de413b6ad518af0919e5a30cb0fa1b061b260420780bb674f828d37fd3b52b5a31673cbd803 +b9a8011eb5fcea766907029bf743b45262db3e49d24f84503687e838651ed11cb64c66281e20a0ae9f6aa51acc552263 +90bfdd75e2dc9cf013e22a5d55d2d2b8a754c96103a17524488e01206e67f8b6d52b1be8c4e3d5307d4fe06d0e51f54c +b4af353a19b06203a815ec43e79a88578cc678c46f5a954b85bc5c53b84059dddba731f3d463c23bfd5273885c7c56a4 +aa125e96d4553b64f7140e5453ff5d2330318b69d74d37d283e84c26ad672fa00e3f71e530eb7e28be1e94afb9c4612e +a18e060aee3d49cde2389b10888696436bb7949a79ca7d728be6456a356ea5541b55492b2138da90108bd1ce0e6f5524 +93e55f92bdbccc2de655d14b1526836ea2e52dba65eb3f87823dd458a4cb5079bf22ce6ef625cb6d6bfdd0995ab9a874 +89f5a683526b90c1c3ceebbb8dc824b21cff851ce3531b164f6626e326d98b27d3e1d50982e507d84a99b1e04e86a915 +83d1c38800361633a3f742b1cb2bfc528129496e80232611682ddbe403e92c2ac5373aea0bca93ecb5128b0b2b7a719e +8ecba560ac94905e19ce8d9c7af217bf0a145d8c8bd38e2db82f5e94cc3f2f26f55819176376b51f154b4aab22056059 +a7e2a4a002b60291924850642e703232994acb4cfb90f07c94d1e0ecd2257bb583443283c20fc6017c37e6bfe85b7366 +93ed7316fa50b528f1636fc6507683a672f4f4403e55e94663f91221cc198199595bd02eef43d609f451acc9d9b36a24 +a1220a8ebc5c50ceed76a74bc3b7e0aa77f6884c71b64b67c4310ac29ce5526cb8992d6abc13ef6c8413ce62486a6795 +b2f6eac5c869ad7f4a25161d3347093e2f70e66cd925032747e901189355022fab3038bca4d610d2f68feb7e719c110b +b703fa11a4d511ca01c7462979a94acb40b5d933759199af42670eb48f83df202fa0c943f6ab3b4e1cc54673ea3aab1e +b5422912afbfcb901f84791b04f1ddb3c3fbdc76d961ee2a00c5c320e06d3cc5b5909c3bb805df66c5f10c47a292b13d +ad0934368da823302e1ac08e3ede74b05dfdbfffca203e97ffb0282c226814b65c142e6e15ec1e754518f221f01b30f7 +a1dd302a02e37df15bf2f1147efe0e3c06933a5a767d2d030e1132f5c3ce6b98e216b6145eb39e1e2f74e76a83165b8d +a346aab07564432f802ae44738049a36f7ca4056df2d8f110dbe7fef4a3e047684dea609b2d03dc6bf917c9c2a47608f +b96c5f682a5f5d02123568e50f5d0d186e4b2c4c9b956ec7aabac1b3e4a766d78d19bd111adb5176b898e916e49be2aa +8a96676d56876fc85538db2e806e1cba20fd01aeb9fa3cb43ca6ca94a2c102639f65660db330e5d74a029bb72d6a0b39 +ab0048336bd5c3def1a4064eadd49e66480c1f2abb4df46e03afbd8a3342c2c9d74ee35d79f08f4768c1646681440984 +888427bdf76caec90814c57ee1c3210a97d107dd88f7256f14f883ad0f392334b82be11e36dd8bfec2b37935177c7831 +b622b282becf0094a1916fa658429a5292ba30fb48a4c8066ce1ddcefb71037948262a01c95bab6929ed3a76ba5db9fe +b5b9e005c1f456b6a368a3097634fb455723abe95433a186e8278dceb79d4ca2fbe21f8002e80027b3c531e5bf494629 +a3c6707117a1e48697ed41062897f55d8119403eea6c2ee88f60180f6526f45172664bfee96bf61d6ec0b7fbae6aa058 +b02a9567386a4fbbdb772d8a27057b0be210447348efe6feb935ceec81f361ed2c0c211e54787dc617cdffed6b4a6652 +a9b8364e40ef15c3b5902e5534998997b8493064fa2bea99600def58279bb0f64574c09ba11e9f6f669a8354dd79dc85 +9998a2e553a9aa9a206518fae2bc8b90329ee59ab23005b10972712389f2ec0ee746033c733092ffe43d73d33abbb8ef +843a4b34d9039bf79df96d79f2d15e8d755affb4d83d61872daf540b68c0a3888cf8fc00d5b8b247b38524bcb3b5a856 +84f7128920c1b0bb40eee95701d30e6fc3a83b7bb3709f16d97e72acbb6057004ee7ac8e8f575936ca9dcb7866ab45f7 +918d3e2222e10e05edb34728162a899ad5ada0aaa491aeb7c81572a9c0d506e31d5390e1803a91ff3bd8e2bb15d47f31 +9442d18e2489613a7d47bb1cb803c8d6f3259d088cd079460976d87f7905ee07dea8f371b2537f6e1d792d36d7e42723 +b491976970fe091995b2ed86d629126523ccf3e9daf8145302faca71b5a71a5da92e0e05b62d7139d3efac5c4e367584 +aa628006235dc77c14cef4c04a308d66b07ac92d377df3de1a2e6ecfe3144f2219ad6d7795e671e1cb37a3641910b940 +99d386adaea5d4981d7306feecac9a555b74ffdc218c907c5aa7ac04abaead0ec2a8237300d42a3fbc464673e417ceed +8f78e8b1556f9d739648ea3cab9606f8328b52877fe72f9305545a73b74d49884044ba9c1f1c6db7d9b7c7b7c661caba +8fb357ae49932d0babdf74fc7aa7464a65d3b6a2b3acf4f550b99601d3c0215900cfd67f2b6651ef94cfc323bac79fae +9906f2fa25c0290775aa001fb6198113d53804262454ae8b83ef371b5271bde189c0460a645829cb6c59f9ee3a55ce4d +8f4379b3ebb50e052325b27655ca6a82e6f00b87bf0d2b680d205dd2c7afdc9ff32a9047ae71a1cdf0d0ce6b9474d878 +a85534e88c2bd43c043792eaa75e50914b21741a566635e0e107ae857aed0412035f7576cf04488ade16fd3f35fdbb87 +b4ce93199966d3c23251ca7f28ec5af7efea1763d376b0385352ffb2e0a462ef95c69940950278cf0e3dafd638b7bd36 +b10cb3d0317dd570aa73129f4acf63c256816f007607c19b423fb42f65133ce21f2f517e0afb41a5378cccf893ae14d0 +a9b231c9f739f7f914e5d943ed9bff7eba9e2c333fbd7c34eb1648a362ee01a01af6e2f7c35c9fe962b11152cddf35de +99ff6a899e156732937fb81c0cced80ae13d2d44c40ba99ac183aa246103b31ec084594b1b7feb96da58f4be2dd5c0ed +8748d15d18b75ff2596f50d6a9c4ce82f61ecbcee123a6ceae0e43cab3012a29b6f83cf67b48c22f6f9d757c6caf76b2 +b88ab05e4248b7fb634cf640a4e6a945d13e331237410f7217d3d17e3e384ddd48897e7a91e4516f1b9cbd30f35f238b +8d826deaeeb84a3b2d2c04c2300ca592501f992810582d6ae993e0d52f6283a839dba66c6c72278cff5871802b71173b +b36fed027c2f05a5ef625ca00b0364b930901e9e4420975b111858d0941f60e205546474bb25d6bfa6928d37305ae95f +af2fcfc6b87967567e8b8a13a4ed914478185705724e56ce68fb2df6d1576a0cf34a61e880997a0d35dc2c3276ff7501 +ac351b919cd1fbf106feb8af2c67692bfcddc84762d18cea681cfa7470a5644839caace27efee5f38c87d3df306f4211 +8d6665fb1d4d8d1fa23bd9b8a86e043b8555663519caac214d1e3e3effbc6bee7f2bcf21e645f77de0ced279d69a8a8b +a9fc1c2061756b2a1a169c1b149f212ff7f0d2488acd1c5a0197eba793cffa593fc6d1d1b40718aa75ca3ec77eff10e1 +aff64f0fa009c7a6cf0b8d7a22ddb2c8170c3cb3eec082e60d5aadb00b0040443be8936d728d99581e33c22178c41c87 +82e0b181adc5e3b1c87ff8598447260e839d53debfae941ebea38265575546c3a74a14b4325a030833a62ff6c52d9365 +b7ad43cbb22f6f892c2a1548a41dc120ab1f4e1b8dea0cb6272dd9cb02054c542ecabc582f7e16de709d48f5166cae86 +985e0c61094281532c4afb788ecb2dfcba998e974b5d4257a22040a161883908cdd068fe80f8eb49b8953cfd11acf43a +ae46895c6d67ea6d469b6c9c07b9e5d295d9ae73b22e30da4ba2c973ba83a130d7eef39717ec9d0f36e81d56bf742671 +8600177ea1f7e7ef90514b38b219a37dedfc39cb83297e4c7a5b479817ef56479d48cf6314820960c751183f6edf8b0e +b9208ec1c1d7a1e99b59c62d3e4e61dfb706b0e940d09d3abfc3454c19749083260614d89cfd7e822596c3cdbcc6bb95 +a1e94042c796c2b48bc724352d2e9f3a22291d9a34705993357ddb6adabd76da6fc25dac200a8cb0b5bbd99ecddb7af6 +b29c3adedd0bcad8a930625bc4dfdc3552a9afd5ca6dd9c0d758f978068c7982b50b711aa0eb5b97f2b84ee784637835 +af0632a238bb1f413c7ea8e9b4c3d68f2827bd2e38cd56024391fba6446ac5d19a780d0cfd4a78fe497d537b766a591a +aaf6e7f7d54f8ef5e2e45dd59774ecbeecf8683aa70483b2a75be6a6071b5981bbaf1627512a65d212817acdfab2e428 +8c751496065da2e927cf492aa5ca9013b24f861d5e6c24b30bbf52ec5aaf1905f40f9a28175faef283dd4ed4f2182a09 +8952377d8e80a85cf67d6b45499f3bad5fd452ea7bcd99efc1b066c4720d8e5bff1214cea90fd1f972a7f0baac3d29be +a1946ee543d1a6e21f380453be4d446e4130950c5fc3d075794eb8260f6f52d0a795c1ff91d028a648dc1ce7d9ab6b47 +89f3fefe37af31e0c17533d2ca1ce0884cc1dc97c15cbfab9c331b8debd94781c9396abef4bb2f163d09277a08d6adf0 +a2753f1e6e1a154fb117100a5bd9052137add85961f8158830ac20541ab12227d83887d10acf7fd36dcaf7c2596d8d23 +814955b4198933ee11c3883863b06ff98c7eceb21fc3e09df5f916107827ccf3323141983e74b025f46ae00284c9513b +8cc5c6bb429073bfef47cae7b3bfccb0ffa076514d91a1862c6bda4d581e0df87db53cc6c130bf8a7826304960f5a34e +909f22c1f1cdc87f7be7439c831a73484a49acbf8f23d47087d7cf867c64ef61da3bde85dc57d705682b4c3fc710d36e +8048fee7f276fcd504aed91284f28e73693615e0eb3858fa44bcf79d7285a9001c373b3ef71d9a3054817ba293ebe28c +94400e5cf5d2700ca608c5fe35ce14623f71cc24959f2bc27ca3684092850f76b67fb1f07ca9e5b2ca3062cf8ad17bd4 +81c2ae7d4d1b17f8b6de6a0430acc0d58260993980fe48dc2129c4948269cdc74f9dbfbf9c26b19360823fd913083d48 +8c41fe765128e63f6889d6a979f6a4342300327c8b245a8cfe3ecfbcac1e09c3da30e2a1045b24b78efc6d6d50c8c6ac +a5dd4ae51ae48c8be4b218c312ade226cffce671cf121cb77810f6c0990768d6dd767badecb5c69921d5574d5e8433d3 +b7642e325f4ba97ae2a39c1c9d97b35aafd49d53dba36aed3f3cb0ca816480b3394079f46a48252d46596559c90f4d58 +ae87375b40f35519e7bd4b1b2f73cd0b329b0c2cb9d616629342a71c6c304338445eda069b78ea0fbe44087f3de91e09 +b08918cb6f736855e11d3daca1ddfbdd61c9589b203b5493143227bf48e2c77c2e8c94b0d1aa2fab2226e0eae83f2681 +ac36b84a4ac2ebd4d6591923a449c564e3be8a664c46092c09e875c2998eba16b5d32bfd0882fd3851762868e669f0b1 +a44800a3bb192066fa17a3f29029a23697240467053b5aa49b9839fb9b9b8b12bcdcbfc557f024b61f4f51a9aacdefcb +9064c688fec23441a274cdf2075e5a449caf5c7363cc5e8a5dc9747183d2e00a0c69f2e6b3f6a7057079c46014c93b3b +aa367b021469af9f5b764a79bb3afbe2d87fe1e51862221672d1a66f954b165778b7c27a705e0f93841fab4c8468344d +a1a8bfc593d4ab71f91640bc824de5c1380ab2591cfdafcbc78a14b32de3c0e15f9d1b461d85c504baa3d4232c16bb53 +97df48da1799430f528184d30b6baa90c2a2f88f34cdfb342d715339c5ebd6d019aa693cea7c4993daafc9849063a3aa +abd923831fbb427e06e0dd335253178a9e5791395c84d0ab1433c07c53c1209161097e9582fb8736f8a60bde62d8693e +84cd1a43f1a438b43dc60ffc775f646937c4f6871438163905a3cebf1115f814ccd38a6ccb134130bff226306e412f32 +91426065996b0743c5f689eb3ca68a9f7b9e4d01f6c5a2652b57fa9a03d8dc7cd4bdbdab0ca5a891fee1e97a7f00cf02 +a4bee50249db3df7fd75162b28f04e57c678ba142ce4d3def2bc17bcb29e4670284a45f218dad3969af466c62a903757 +83141ebcc94d4681404e8b67a12a46374fded6df92b506aff3490d875919631408b369823a08b271d006d5b93136f317 +a0ea1c8883d58d5a784da3d8c8a880061adea796d7505c1f903d07c287c5467f71e4563fc0faafbc15b5a5538b0a7559 +89d9d480574f201a87269d26fb114278ed2c446328df431dc3556e3500e80e4cd01fcac196a2459d8646361ebda840df +8bf302978973632dd464bec819bdb91304712a3ec859be071e662040620422c6e75eba6f864f764cffa2799272efec39 +922f666bc0fd58b6d7d815c0ae4f66d193d32fc8382c631037f59eeaeae9a8ca6c72d08e72944cf9e800b8d639094e77 +81ad8714f491cdff7fe4399f2eb20e32650cff2999dd45b9b3d996d54a4aba24cc6c451212e78c9e5550368a1a38fb3f +b58fcf4659d73edb73175bd9139d18254e94c3e32031b5d4b026f2ed37aa19dca17ec2eb54c14340231615277a9d347e +b365ac9c2bfe409b710928c646ea2fb15b28557e0f089d39878e365589b9d1c34baf5566d20bb28b33bb60fa133f6eff +8fcae1d75b53ab470be805f39630d204853ca1629a14158bac2f52632277d77458dec204ff84b7b2d77e641c2045be65 +a03efa6bebe84f4f958a56e2d76b5ba4f95dd9ed7eb479edc7cc5e646c8d4792e5b0dfc66cc86aa4b4afe2f7a4850760 +af1c823930a3638975fb0cc5c59651771b2719119c3cd08404fbd4ce77a74d708cefbe3c56ea08c48f5f10e6907f338f +8260c8299b17898032c761c325ac9cabb4c5b7e735de81eacf244f647a45fb385012f4f8df743128888c29aefcaaad16 +ab2f37a573c82e96a8d46198691cd694dfa860615625f477e41f91b879bc58a745784fccd8ffa13065834ffd150d881d +986c746c9b4249352d8e5c629e8d7d05e716b3c7aab5e529ca969dd1e984a14b5be41528baef4c85d2369a42d7209216 +b25e32da1a8adddf2a6080725818b75bc67240728ad1853d90738485d8924ea1e202df0a3034a60ffae6f965ec55cf63 +a266e627afcebcefea6b6b44cbc50f5c508f7187e87d047b0450871c2a030042c9e376f3ede0afcf9d1952f089582f71 +86c3bbca4c0300606071c0a80dbdec21ce1dd4d8d4309648151c420854032dff1241a1677d1cd5de4e4de4385efda986 +b9a21a1fe2d1f3273a8e4a9185abf2ff86448cc98bfa435e3d68306a2b8b4a6a3ea33a155be3cb62a2170a86f77679a5 +b117b1ea381adce87d8b342cba3a15d492ff2d644afa28f22424cb9cbc820d4f7693dfc1a4d1b3697046c300e1c9b4c8 +9004c425a2e68870d6c69b658c344e3aa3a86a8914ee08d72b2f95c2e2d8a4c7bb0c6e7e271460c0e637cec11117bf8e +86a18aa4783b9ebd9131580c8b17994825f27f4ac427b0929a1e0236907732a1c8139e98112c605488ee95f48bbefbfc +84042243b955286482ab6f0b5df4c2d73571ada00716d2f737ca05a0d2e88c6349e8ee9e67934cfee4a1775dbf7f4800 +92c2153a4733a62e4e1d5b60369f3c26777c7d01cd3c8679212660d572bd3bac9b8a8a64e1f10f7dbf5eaa7579c4e423 +918454b6bb8e44a2afa144695ba8d48ae08d0cdfef4ad078f67709eddf3bb31191e8b006f04e82ea45a54715ef4d5817 +acf0b54f6bf34cf6ed6c2b39cf43194a40d68de6bcf1e4b82c34c15a1343e9ac3737885e1a30b78d01fa3a5125463db8 +a7d60dbe4b6a7b054f7afe9ee5cbbfeca0d05dc619e6041fa2296b549322529faddb8a11e949562309aecefb842ac380 +91ffb53e6d7e5f11159eaf13e783d6dbdfdb1698ed1e6dbf3413c6ea23492bbb9e0932230a9e2caac8fe899a17682795 +b6e8d7be5076ee3565d5765a710c5ecf17921dd3cf555c375d01e958a365ae087d4a88da492a5fb81838b7b92bf01143 +a8c6b763de2d4b2ed42102ef64eccfef31e2fb2a8a2776241c82912fa50fc9f77f175b6d109a97ede331307c016a4b1a +99839f86cb700c297c58bc33e28d46b92931961548deac29ba8df91d3e11721b10ea956c8e16984f9e4acf1298a79b37 +8c2e2c338f25ea5c25756b7131cde0d9a2b35abf5d90781180a00fe4b8e64e62590dc63fe10a57fba3a31c76d784eb01 +9687d7df2f41319ca5469d91978fed0565a5f11f829ebadaa83db92b221755f76c6eacd7700735e75c91e257087512e3 +8795fdfb7ff8439c58b9bf58ed53873d2780d3939b902b9ddaaa4c99447224ced9206c3039a23c2c44bcc461e2bb637f +a803697b744d2d087f4e2307218d48fa88620cf25529db9ce71e2e3bbcc65bac5e8bb9be04777ef7bfb5ed1a5b8e6170 +80f3d3efbbb9346ddd413f0a8e36b269eb5d7ff6809d5525ff9a47c4bcab2c01b70018b117f6fe05253775612ff70c6b +9050e0e45bcc83930d4c505af35e5e4d7ca01cd8681cba92eb55821aececcebe32bb692ebe1a4daac4e7472975671067 +8d206812aac42742dbaf233e0c080b3d1b30943b54b60283515da005de05ea5caa90f91fedcfcba72e922f64d7040189 +a2d44faaeb2eff7915c83f32b13ca6f31a6847b1c1ce114ea240bac3595eded89f09b2313b7915ad882292e2b586d5b4 +961776c8576030c39f214ea6e0a3e8b3d32f023d2600958c098c95c8a4e374deeb2b9dc522adfbd6bda5949bdc09e2a2 +993fa7d8447407af0fbcd9e6d77f815fa5233ab00674efbcf74a1f51c37481445ae291cc7b76db7c178f9cb0e570e0fc +abd5b1c78e05f9d7c8cc99bdaef8b0b6a57f2daf0f02bf492bec48ea4a27a8f1e38b5854da96efff11973326ff980f92 +8f15af4764bc275e6ccb892b3a4362cacb4e175b1526a9a99944e692fe6ccb1b4fc19abf312bb2a089cb1f344d91a779 +a09b27ccd71855512aba1d0c30a79ffbe7f6707a55978f3ced50e674b511a79a446dbc6d7946add421ce111135a460af +94b2f98ce86a9271fbd4153e1fc37de48421fe3490fb3840c00f2d5a4d0ba8810c6a32880b002f6374b59e0a7952518b +8650ac644f93bbcb88a6a0f49fee2663297fd4bc6fd47b6a89b9d8038d32370438ab3a4775ec9b58cb10aea8a95ef7b6 +95e5c2f2e84eed88c6980bbba5a1c0bb375d5a628bff006f7516d45bb7d723da676add4fdd45956f312e7bab0f052644 +b3278a3fa377ac93af7cfc9453f8cb594aae04269bbc99d2e0e45472ff4b6a2f97a26c4c57bf675b9d86f5e77a5d55d1 +b4bcbe6eb666a206e2ea2f877912c1d3b5bdbd08a989fc4490eb06013e1a69ad1ba08bcdac048bf29192312be399077b +a76d70b78c99fffcbf9bb9886eab40f1ea4f99a309710b660b64cbf86057cbcb644d243f6e341711bb7ef0fedf0435a7 +b2093c1ee945dca7ac76ad5aed08eae23af31dd5a77c903fd7b6f051f4ab84425d33a03c3d45bf2907bc93c02d1f3ad8 +904b1f7534e053a265b22d20be859912b9c9ccb303af9a8d6f1d8f6ccdc5c53eb4a45a1762b880d8444d9be0cd55e7f9 +8f664a965d65bc730c9ef1ec7467be984d4b8eb46bd9b0d64e38e48f94e6e55dda19aeac82cbcf4e1473440e64c4ca18 +8bcee65c4cc7a7799353d07b114c718a2aae0cd10a3f22b7eead5185d159dafd64852cb63924bf87627d176228878bce +8c78f2e3675096fef7ebaa898d2615cd50d39ca3d8f02b9bdfb07e67da648ae4be3da64838dffc5935fd72962c4b96c7 +8c40afd3701629421fec1df1aac4e849384ef2e80472c0e28d36cb1327acdf2826f99b357f3d7afdbc58a6347fc40b3c +a197813b1c65a8ea5754ef782522a57d63433ef752215ecda1e7da76b0412ee619f58d904abd2e07e0c097048b6ae1dd +a670542629e4333884ad7410f9ea3bd6f988df4a8f8a424ca74b9add2312586900cf9ae8bd50411f9146e82626b4af56 +a19875cc07ab84e569d98b8b67fb1dbbdfb59093c7b748fae008c8904a6fd931a63ca8d03ab5fea9bc8d263568125a9b +b57e7f68e4eb1bd04aafa917b1db1bdab759a02aa8a9cdb1cba34ba8852b5890f655645c9b4e15d5f19bf37e9f2ffe9f +8abe4e2a4f6462b6c64b3f10e45db2a53c2b0d3c5d5443d3f00a453e193df771eda635b098b6c8604ace3557514027af +8459e4fb378189b22b870a6ef20183deb816cefbf66eca1dc7e86d36a2e011537db893729f500dc154f14ce24633ba47 +930851df4bc7913c0d8c0f7bd3b071a83668987ed7c397d3d042fdc0d9765945a39a3bae83da9c88cb6b686ed8aeeb26 +8078c9e5cd05e1a8c932f8a1d835f61a248b6e7133fcbb3de406bf4ffc0e584f6f9f95062740ba6008d98348886cf76b +addff62bb29430983fe578e3709b0949cdc0d47a13a29bc3f50371a2cb5c822ce53e2448cfaa01bcb6e0aa850d5a380e +9433add687b5a1e12066721789b1db2edf9b6558c3bdc0f452ba33b1da67426abe326e9a34d207bfb1c491c18811bde1 +822beda3389963428cccc4a2918fa9a8a51cf0919640350293af70821967108cded5997adae86b33cb917780b097f1ca +a7a9f52bda45e4148ed56dd176df7bd672e9b5ed18888ccdb405f47920fdb0844355f8565cefb17010b38324edd8315f +b35c3a872e18e607b2555c51f9696a17fa18da1f924d503b163b4ec9fe22ed0c110925275cb6c93ce2d013e88f173d6a +adf34b002b2b26ab84fc1bf94e05bd8616a1d06664799ab149363c56a6e0c807fdc473327d25632416e952ea327fcd95 +ae4a6b9d22a4a3183fac29e2551e1124a8ce4a561a9a2afa9b23032b58d444e6155bb2b48f85c7b6d70393274e230db7 +a2ea3be4fc17e9b7ce3110284038d46a09e88a247b6971167a7878d9dcf36925d613c382b400cfa4f37a3ebea3699897 +8e5863786b641ce3140fbfe37124d7ad3925472e924f814ebfc45959aaf3f61dc554a597610b5defaecc85b59a99b50f +aefde3193d0f700d0f515ab2aaa43e2ef1d7831c4f7859f48e52693d57f97fa9e520090f3ed700e1c966f4b76048e57f +841a50f772956622798e5cd208dc7534d4e39eddee30d8ce133383d66e5f267e389254a0cdae01b770ecd0a9ca421929 +8fbc2bfd28238c7d47d4c03b1b910946c0d94274a199575e5b23242619b1de3497784e646a92aa03e3e24123ae4fcaba +926999579c8eec1cc47d7330112586bdca20b4149c8b2d066f527c8b9f609e61ce27feb69db67eea382649c6905efcf9 +b09f31f305efcc65589adf5d3690a76cf339efd67cd43a4e3ced7b839507466e4be72dd91f04e89e4bbef629d46e68c0 +b917361f6b95f759642638e0b1d2b3a29c3bdef0b94faa30de562e6078c7e2d25976159df3edbacbf43614635c2640b4 +8e7e8a1253bbda0e134d62bfe003a2669d471b47bd2b5cde0ff60d385d8e62279d54022f5ac12053b1e2d3aaa6910b4c +b69671a3c64e0a99d90b0ed108ce1912ff8ed983e4bddd75a370e9babde25ee1f5efb59ec707edddd46793207a8b1fe7 +910b2f4ebd37b7ae94108922b233d0920b4aba0bd94202c70f1314418b548d11d8e9caa91f2cd95aff51b9432d122b7f +82f645c90dfb52d195c1020346287c43a80233d3538954548604d09fbab7421241cde8593dbc4acc4986e0ea39a27dd9 +8fee895f0a140d88104ce442fed3966f58ff9d275e7373483f6b4249d64a25fb5374bbdc6bce6b5ab0270c2847066f83 +84f5bd7aab27b2509397aeb86510dd5ac0a53f2c8f73799bf720f2f87a52277f8d6b0f77f17bc80739c6a7119b7eb062 +9903ceced81099d7e146e661bcf01cbaccab5ba54366b85e2177f07e2d8621e19d9c9c3eee14b9266de6b3f9b6ea75ae +b9c16ea2a07afa32dd6c7c06df0dec39bca2067a9339e45475c98917f47e2320f6f235da353fd5e15b477de97ddc68dd +9820a9bbf8b826bec61ebf886de2c4f404c1ebdc8bab82ee1fea816d9de29127ce1852448ff717a3fe8bbfe9e92012e5 +817224d9359f5da6f2158c2c7bf9165501424f063e67ba9859a07ab72ee2ee62eb00ca6da821cfa19065c3282ca72c74 +94b95c465e6cb00da400558a3c60cfec4b79b27e602ca67cbc91aead08de4b6872d8ea096b0dc06dca4525c8992b8547 +a2b539a5bccd43fa347ba9c15f249b417997c6a38c63517ca38394976baa08e20be384a360969ff54e7e721db536b3e5 +96caf707e34f62811ee8d32ccf28d8d6ec579bc33e424d0473529af5315c456fd026aa910c1fed70c91982d51df7d3ca +8a77b73e890b644c6a142bdbac59b22d6a676f3b63ddafb52d914bb9d395b8bf5aedcbcc90429337df431ebd758a07a6 +8857830a7351025617a08bc44caec28d2fae07ebf5ffc9f01d979ce2a53839a670e61ae2783e138313929129790a51a1 +aa3e420321ed6f0aa326d28d1a10f13facec6f605b6218a6eb9cbc074801f3467bf013a456d1415a5536f12599efa3d3 +824aed0951957b00ea2f3d423e30328a3527bf6714cf9abbae84cf27e58e5c35452ba89ccc011de7c68c75d6e021d8f1 +a2e87cc06bf202e953fb1081933d8b4445527dde20e38ed1a4f440144fd8fa464a2b73e068b140562e9045e0f4bd3144 +ae3b8f06ad97d7ae3a5e5ca839efff3e4824dc238c0c03fc1a8d2fc8aa546cdfd165b784a31bb4dec7c77e9305b99a4b +b30c3e12395b1fb8b776f3ec9f87c70e35763a7b2ddc68f0f60a4982a84017f27c891a98561c830038deb033698ed7fc +874e507757cd1177d0dff0b0c62ce90130324442a33da3b2c8ee09dbca5d543e3ecfe707e9f1361e7c7db641c72794bb +b53012dd10b5e7460b57c092eaa06d6502720df9edbbe3e3f61a9998a272bf5baaac4a5a732ad4efe35d6fac6feca744 +85e6509d711515534d394e6cacbed6c81da710074d16ef3f4950bf2f578d662a494d835674f79c4d6315bced4defc5f0 +b6132b2a34b0905dcadc6119fd215419a7971fe545e52f48b768006944b4a9d7db1a74b149e2951ea48c083b752d0804 +989867da6415036d19b4bacc926ce6f4df7a556f50a1ba5f3c48eea9cefbb1c09da81481c8009331ee83f0859185e164 +960a6c36542876174d3fbc1505413e29f053ed87b8d38fef3af180491c7eff25200b45dd5fe5d4d8e63c7e8c9c00f4c8 +9040b59bd739d9cc2e8f6e894683429e4e876a8106238689ff4c22770ae5fdae1f32d962b30301fa0634ee163b524f35 +af3fcd0a45fe9e8fe256dc7eab242ef7f582dd832d147444483c62787ac820fafc6ca55d639a73f76bfa5e7f5462ab8f +b934c799d0736953a73d91e761767fdb78454355c4b15c680ce08accb57ccf941b13a1236980001f9e6195801cffd692 +8871e8e741157c2c326b22cf09551e78da3c1ec0fc0543136f581f1550f8bab03b0a7b80525c1e99812cdbf3a9698f96 +a8a977f51473a91d178ee8cfa45ffef8d6fd93ab1d6e428f96a3c79816d9c6a93cd70f94d4deda0125fd6816e30f3bea +a7688b3b0a4fc1dd16e8ba6dc758d3cfe1b7cf401c31739484c7fa253cce0967df1b290769bcefc9d23d3e0cb19e6218 +8ae84322662a57c6d729e6ff9d2737698cc2da2daeb1f39e506618750ed23442a6740955f299e4a15dda6db3e534d2c6 +a04a961cdccfa4b7ef83ced17ab221d6a043b2c718a0d6cc8e6f798507a31f10bf70361f70a049bc8058303fa7f96864 +b463e39732a7d9daec8a456fb58e54b30a6e160aa522a18b9a9e836488cce3342bcbb2e1deab0f5e6ec0a8796d77197d +b1434a11c6750f14018a2d3bcf94390e2948f4f187e93bb22070ca3e5393d339dc328cbfc3e48815f51929465ffe7d81 +84ff81d73f3828340623d7e3345553610aa22a5432217ef0ebd193cbf4a24234b190c65ca0873c22d10ea7b63bd1fbed +b6fe2723f0c47757932c2ddde7a4f8434f665612f7b87b4009c2635d56b6e16b200859a8ade49276de0ef27a2b6c970a +9742884ed7cd52b4a4a068a43d3faa02551a424136c85a9313f7cb58ea54c04aa83b0728fd741d1fe39621e931e88f8f +b7d2d65ea4d1ad07a5dee39e40d6c03a61264a56b1585b4d76fc5b2a68d80a93a42a0181d432528582bf08d144c2d6a9 +88c0f66bada89f8a43e5a6ead2915088173d106c76f724f4a97b0f6758aed6ae5c37c373c6b92cdd4aea8f6261f3a374 +81f9c43582cb42db3900747eb49ec94edb2284999a499d1527f03315fd330e5a509afa3bff659853570e9886aab5b28b +821f9d27d6beb416abf9aa5c79afb65a50ed276dbda6060103bc808bcd34426b82da5f23e38e88a55e172f5c294b4d40 +8ba307b9e7cb63a6c4f3851b321aebfdb6af34a5a4c3bd949ff7d96603e59b27ff4dc4970715d35f7758260ff942c9e9 +b142eb6c5f846de33227d0bda61d445a7c33c98f0a8365fe6ab4c1fabdc130849be597ef734305894a424ea715372d08 +a732730ae4512e86a741c8e4c87fee8a05ee840fec0e23b2e037d58dba8dde8d10a9bc5191d34d00598941becbbe467f +adce6f7c30fd221f6b10a0413cc76435c4bb36c2d60bca821e5c67409fe9dbb2f4c36ef85eb3d734695e4be4827e9fd3 +a74f00e0f9b23aff7b2527ce69852f8906dab9d6abe62ecd497498ab21e57542e12af9918d4fd610bb09e10b0929c510 +a593b6b0ef26448ce4eb3ab07e84238fc020b3cb10d542ff4b16d4e2be1bcde3797e45c9cf753b8dc3b0ffdb63984232 +aed3913afccf1aa1ac0eb4980eb8426d0baccebd836d44651fd72af00d09fac488a870223c42aca3ceb39752070405ae +b2c44c66a5ea7fde626548ba4cef8c8710191343d3dadfd3bb653ce715c0e03056a5303a581d47dde66e70ea5a2d2779 +8e5029b2ccf5128a12327b5103f7532db599846e422531869560ceaff392236434d87159f597937dbf4054f810c114f4 +82beed1a2c4477e5eb39fc5b0e773b30cfec77ef2b1bf17eadaf60eb35b6d0dd9d8cf06315c48d3546badb3f21cd0cca +90077bd6cc0e4be5fff08e5d07a5a158d36cebd1d1363125bc4fae0866ffe825b26f933d4ee5427ba5cd0c33c19a7b06 +a7ec0d8f079970e8e34f0ef3a53d3e0e45428ddcef9cc776ead5e542ef06f3c86981644f61c5a637e4faf001fb8c6b3e +ae6d4add6d1a6f90b22792bc9d40723ee6850c27d0b97eefafd5b7fd98e424aa97868b5287cc41b4fbd7023bca6a322c +831aa917533d077da07c01417feaa1408846363ba2b8d22c6116bb858a95801547dd88b7d7fa1d2e3f0a02bdeb2e103d +96511b860b07c8a5ed773f36d4aa9d02fb5e7882753bf56303595bcb57e37ccc60288887eb83bef08c657ec261a021a2 +921d2a3e7e9790f74068623de327443666b634c8443aba80120a45bba450df920b2374d96df1ce3fb1b06dd06f8cf6e3 +aa74451d51fe82b4581ead8e506ec6cd881010f7e7dd51fc388eb9a557db5d3c6721f81c151d08ebd9c2591689fbc13e +a972bfbcf4033d5742d08716c927c442119bdae336bf5dff914523b285ccf31953da2733759aacaa246a9af9f698342c +ad1fcd0cae0e76840194ce4150cb8a56ebed728ec9272035f52a799d480dfc85840a4d52d994a18b6edb31e79be6e8ad +a2c69fe1d36f235215432dad48d75887a44c99dfa0d78149acc74087da215a44bdb5f04e6eef88ff7eff80a5a7decc77 +a94ab2af2b6ee1bc6e0d4e689ca45380d9fbd3c5a65b9bd249d266a4d4c07bf5d5f7ef2ae6000623aee64027892bf8fe +881ec1fc514e926cdc66480ac59e139148ff8a2a7895a49f0dff45910c90cdda97b66441a25f357d6dd2471cddd99bb3 +884e6d3b894a914c8cef946a76d5a0c8351843b2bffa2d1e56c6b5b99c84104381dd1320c451d551c0b966f4086e60f9 +817c6c10ce2677b9fc5223500322e2b880583254d0bb0d247d728f8716f5e05c9ff39f135854342a1afecd9fbdcf7c46 +aaf4a9cb686a14619aa1fc1ac285dd3843ac3dd99f2b2331c711ec87b03491c02f49101046f3c5c538dc9f8dba2a0ac2 +97ecea5ce53ca720b5d845227ae61d70269a2f53540089305c86af35f0898bfd57356e74a8a5e083fa6e1ea70080bd31 +a22d811e1a20a75feac0157c418a4bfe745ccb5d29466ffa854dca03e395b6c3504a734341746b2846d76583a780b32e +940cbaa0d2b2db94ae96b6b9cf2deefbfd059e3e5745de9aec4a25f0991b9721e5cd37ef71c631575d1a0c280b01cd5b +ae33cb4951191258a11044682de861bf8d92d90ce751b354932dd9f3913f542b6a0f8a4dc228b3cd9244ac32c4582832 +a580df5e58c4274fe0f52ac2da1837e32f5c9db92be16c170187db4c358f43e5cfdda7c5911dcc79d77a5764e32325f5 +81798178cb9d8affa424f8d3be67576ba94d108a28ccc01d330c51d5a63ca45bb8ca63a2f569b5c5fe1303cecd2d777f +89975b91b94c25c9c3660e4af4047a8bacf964783010820dbc91ff8281509379cb3b24c25080d5a01174dd9a049118d5 +a7327fcb3710ed3273b048650bde40a32732ef40a7e58cf7f2f400979c177944c8bc54117ba6c80d5d4260801dddab79 +92b475dc8cb5be4b90c482f122a51bcb3b6c70593817e7e2459c28ea54a7845c50272af38119406eaadb9bcb993368d0 +9645173e9ecefc4f2eae8363504f7c0b81d85f8949a9f8a6c01f2d49e0a0764f4eacecf3e94016dd407fc14494fce9f9 +9215fd8983d7de6ae94d35e6698226fc1454977ae58d42d294be9aad13ac821562ad37d5e7ee5cdfe6e87031d45cd197 +810360a1c9b88a9e36f520ab5a1eb8bed93f52deefbe1312a69225c0a08edb10f87cc43b794aced9c74220cefcc57e7d +ad7e810efd61ed4684aeda9ed8bb02fb9ae4b4b63fda8217d37012b94ff1b91c0087043bfa4e376f961fff030c729f3b +8b07c95c6a06db8738d10bb03ec11b89375c08e77f0cab7e672ce70b2685667ca19c7e1c8b092821d31108ea18dfd4c7 +968825d025ded899ff7c57245250535c732836f7565eab1ae23ee7e513201d413c16e1ba3f5166e7ac6cf74de8ceef4f +908243370c5788200703ade8164943ad5f8c458219186432e74dbc9904a701ea307fd9b94976c866e6c58595fd891c4b +959969d16680bc535cdc6339e6186355d0d6c0d53d7bbfb411641b9bf4b770fd5f575beef5deec5c4fa4d192d455c350 +ad177f4f826a961adeac76da40e2d930748effff731756c797eddc4e5aa23c91f070fb69b19221748130b0961e68a6bb +82f8462bcc25448ef7e0739425378e9bb8a05e283ce54aae9dbebaf7a3469f57833c9171672ad43a79778366c72a5e37 +a28fb275b1845706c2814d9638573e9bc32ff552ebaed761fe96fdbce70395891ca41c400ae438369264e31a2713b15f +8a9c613996b5e51dadb587a787253d6081ea446bf5c71096980bf6bd3c4b69905062a8e8a3792de2d2ece3b177a71089 +8d5aefef9f60cb27c1db2c649221204dda48bb9bf8bf48f965741da051340e8e4cab88b9d15c69f3f84f4c854709f48a +93ebf2ca6ad85ab6deace6de1a458706285b31877b1b4d7dcb9d126b63047efaf8c06d580115ec9acee30c8a7212fa55 +b3ee46ce189956ca298057fa8223b7fd1128cf52f39159a58bca03c71dd25161ac13f1472301f72aef3e1993fe1ab269 +a24d7a8d066504fc3f5027ccb13120e2f22896860e02c45b5eba1dbd512d6a17c28f39155ea581619f9d33db43a96f92 +ae9ceacbfe12137db2c1a271e1b34b8f92e4816bad1b3b9b6feecc34df0f8b3b0f7ed0133acdf59c537d43d33fc8d429 +83967e69bf2b361f86361bd705dce0e1ad26df06da6c52b48176fe8dfcbeb03c462c1a4c9e649eff8c654b18c876fdef +9148e6b814a7d779c19c31e33a068e97b597de1f8100513db3c581190513edc4d544801ce3dd2cf6b19e0cd6daedd28a +94ccdafc84920d320ed22de1e754adea072935d3c5f8c2d1378ebe53d140ea29853f056fb3fb1e375846061a038cc9bc +afb43348498c38b0fa5f971b8cdd3a62c844f0eb52bc33daf2f67850af0880fce84ecfb96201b308d9e6168a0d443ae3 +86d5736520a83538d4cd058cc4b4e84213ed00ebd6e7af79ae787adc17a92ba5359e28ba6c91936d967b4b28d24c3070 +b5210c1ff212c5b1e9ef9126e08fe120a41e386bb12c22266f7538c6d69c7fd8774f11c02b81fd4e88f9137b020801fe +b78cfd19f94d24e529d0f52e18ce6185cb238edc6bd43086270fd51dd99f664f43dd4c7d2fe506762fbd859028e13fcf +a6e7220598c554abdcc3fdc587b988617b32c7bb0f82c06205467dbedb58276cc07cae317a190f19d19078773f4c2bbb +b88862809487ee430368dccd85a5d72fa4d163ca4aad15c78800e19c1a95be2192719801e315d86cff7795e0544a77e4 +87ecb13a03921296f8c42ceb252d04716f10e09c93962239fcaa0a7fef93f19ab3f2680bc406170108bc583e9ff2e721 +a810cd473832b6581c36ec4cb403f2849357ba2d0b54df98ef3004b8a530c078032922a81d40158f5fb0043d56477f6e +a247b45dd85ca7fbb718b328f30a03f03c84aef2c583fbdc9fcc9eb8b52b34529e8c8f535505c10598b1b4dac3d7c647 +96ee0b91313c68bac4aa9e065ce9e1d77e51ca4cff31d6a438718c58264dee87674bd97fc5c6b8008be709521e4fd008 +837567ad073e42266951a9a54750919280a2ac835a73c158407c3a2b1904cf0d17b7195a393c71a18ad029cbd9cf79ee +a6a469c44b67ebf02196213e7a63ad0423aab9a6e54acc6fcbdbb915bc043586993454dc3cd9e4be8f27d67c1050879b +8712d380a843b08b7b294f1f06e2f11f4ad6bcc655fdde86a4d8bc739c23916f6fad2b902fe47d6212f03607907e9f0e +920adfb644b534789943cdae1bdd6e42828dda1696a440af2f54e6b97f4f97470a1c6ea9fa6a2705d8f04911d055acd1 +a161c73adf584a0061e963b062f59d90faac65c9b3a936b837a10d817f02fcabfa748824607be45a183dd40f991fe83f +874f4ecd408c76e625ea50bc59c53c2d930ee25baf4b4eca2440bfbffb3b8bc294db579caa7c68629f4d9ec24187c1ba +8bff18087f112be7f4aa654e85c71fef70eee8ae480f61d0383ff6f5ab1a0508f966183bb3fc4d6f29cb7ca234aa50d3 +b03b46a3ca3bc743a173cbc008f92ab1aedd7466b35a6d1ca11e894b9482ea9dc75f8d6db2ddd1add99bfbe7657518b7 +8b4f3691403c3a8ad9e097f02d130769628feddfa8c2b3dfe8cff64e2bed7d6e5d192c1e2ba0ac348b8585e94acd5fa1 +a0d9ca4a212301f97591bf65d5ef2b2664766b427c9dd342e23cb468426e6a56be66b1cb41fea1889ac5d11a8e3c50a5 +8c93ed74188ca23b3df29e5396974b9cc135c91fdefdea6c0df694c8116410e93509559af55533a3776ac11b228d69b1 +82dd331fb3f9e344ebdeeb557769b86a2cc8cc38f6c298d7572a33aea87c261afa9dbd898989139b9fc16bc1e880a099 +a65faedf326bcfd8ef98a51410c78b021d39206704e8291cd1f09e096a66b9b0486be65ff185ca224c45918ac337ddeb +a188b37d363ac072a766fd5d6fa27df07363feff1342217b19e3c37385e42ffde55e4be8355aceaa2f267b6d66b4ac41 +810fa3ba3e96d843e3bafd3f2995727f223d3567c8ba77d684c993ba1773c66551eb5009897c51b3fe9b37196984f5ec +87631537541852da323b4353af45a164f68b304d24c01183bf271782e11687f3fcf528394e1566c2a26cb527b3148e64 +b721cb2b37b3c477a48e3cc0044167d51ff568a5fd2fb606e5aec7a267000f1ddc07d3db919926ae12761a8e017c767c +904dfad4ba2cc1f6e60d1b708438a70b1743b400164cd981f13c064b8328d5973987d4fb9cf894068f29d3deaf624dfb +a70491538893552c20939fae6be2f07bfa84d97e2534a6bbcc0f1729246b831103505e9f60e97a8fa7d2e6c1c2384579 +8726cf1b26b41f443ff7485adcfddc39ace2e62f4d65dd0bb927d933e262b66f1a9b367ded5fbdd6f3b0932553ac1735 +ae8a11cfdf7aa54c08f80cb645e3339187ab3886babe9fae5239ba507bb3dd1c0d161ca474a2df081dcd3d63e8fe445e +92328719e97ce60e56110f30a00ac5d9c7a2baaf5f8d22355d53c1c77941e3a1fec7d1405e6fbf8959665fe2ba7a8cad +8d9d6255b65798d0018a8cccb0b6343efd41dc14ff2058d3eed9451ceaad681e4a0fa6af67b0a04318aa628024e5553d +b70209090055459296006742d946a513f0cba6d83a05249ee8e7a51052b29c0ca9722dc4af5f9816a1b7938a5dac7f79 +aab7b766b9bf91786dfa801fcef6d575dc6f12b77ecc662eb4498f0312e54d0de9ea820e61508fc8aeee5ab5db529349 +a8104b462337748b7f086a135d0c3f87f8e51b7165ca6611264b8fb639d9a2f519926cb311fa2055b5fadf03da70c678 +b0d2460747d5d8b30fc6c6bd0a87cb343ddb05d90a51b465e8f67d499cfc5e3a9e365da05ae233bbee792cdf90ec67d5 +aa55f5bf3815266b4a149f85ed18e451c93de9163575e3ec75dd610381cc0805bb0a4d7c4af5b1f94d10231255436d2c +8d4c6a1944ff94426151909eb5b99cfd92167b967dabe2bf3aa66bb3c26c449c13097de881b2cfc1bf052862c1ef7b03 +8862296162451b9b6b77f03bf32e6df71325e8d7485cf3335d66fd48b74c2a8334c241db8263033724f26269ad95b395 +901aa96deb26cda5d9321190ae6624d357a41729d72ef1abfd71bebf6139af6d690798daba53b7bc5923462115ff748a +96c195ec4992728a1eb38cdde42d89a7bce150db43adbc9e61e279ea839e538deec71326b618dd39c50d589f78fc0614 +b6ff8b8aa0837b99a1a8b46fb37f20ad4aecc6a98381b1308697829a59b8442ffc748637a88cb30c9b1f0f28a926c4f6 +8d807e3dca9e7bef277db1d2cfb372408dd587364e8048b304eff00eacde2c723bfc84be9b98553f83cba5c7b3cba248 +8800c96adb0195c4fc5b24511450dee503c32bf47044f5e2e25bd6651f514d79a2dd9b01cd8c09f3c9d3859338490f57 +89fe366096097e38ec28dd1148887112efa5306cc0c3da09562aafa56f4eb000bf46ff79bf0bdd270cbde6bf0e1c8957 +af409a90c2776e1e7e3760b2042507b8709e943424606e31e791d42f17873a2710797f5baaab4cc4a19998ef648556b0 +8d761863c9b6edbd232d35ab853d944f5c950c2b643f84a1a1327ebb947290800710ff01dcfa26dc8e9828481240e8b1 +90b95e9be1e55c463ed857c4e0617d6dc3674e99b6aa62ed33c8e79d6dfcf7d122f4f4cc2ee3e7c5a49170cb617d2e2e +b3ff381efefabc4db38cc4727432e0301949ae4f16f8d1dea9b4f4de611cf5a36d84290a0bef160dac4e1955e516b3b0 +a8a84564b56a9003adcadb3565dc512239fc79572762cda7b5901a255bc82656bb9c01212ad33d6bef4fbbce18dacc87 +90a081890364b222eef54bf0075417f85e340d2fec8b7375995f598aeb33f26b44143ebf56fca7d8b4ebb36b5747b0eb +ade6ee49e1293224ddf2d8ab7f14bb5be6bc6284f60fd5b3a1e0cf147b73cff57cf19763b8a36c5083badc79c606b103 +b2fa99806dd2fa3de09320b615a2570c416c9bcdb052e592b0aead748bbe407ec9475a3d932ae48b71c2627eb81986a6 +91f3b7b73c8ccc9392542711c45fe6f236057e6efad587d661ad5cb4d6e88265f86b807bb1151736b1009ab74fd7acb4 +8800e2a46af96696dfbdcbf2ca2918b3dcf28ad970170d2d1783b52b8d945a9167d052beeb55f56c126da7ffa7059baa +9862267a1311c385956b977c9aa08548c28d758d7ba82d43dbc3d0a0fd1b7a221d39e8399997fea9014ac509ff510ac4 +b7d24f78886fd3e2d283e18d9ad5a25c1a904e7d9b9104bf47da469d74f34162e27e531380dbbe0a9d051e6ffd51d6e7 +b0f445f9d143e28b9df36b0f2c052da87ee2ca374d9d0fbe2eff66ca6fe5fe0d2c1951b428d58f7314b7e74e45d445ea +b63fc4083eabb8437dafeb6a904120691dcb53ce2938b820bb553da0e1eecd476f72495aacb72600cf9cad18698fd3db +b9ffd8108eaebd582d665f8690fe8bb207fd85185e6dd9f0b355a09bac1bbff26e0fdb172bc0498df025414e88fe2eda +967ed453e1f1a4c5b7b6834cc9f75c13f6889edc0cc91dc445727e9f408487bbf05c337103f61397a10011dfbe25d61d +98ceb673aff36e1987d5521a3984a07079c3c6155974bb8b413e8ae1ce84095fe4f7862fba7aefa14753eb26f2a5805f +85f01d28603a8fdf6ce6a50cb5c44f8a36b95b91302e3f4cd95c108ce8f4d212e73aec1b8d936520d9226802a2bd9136 +88118e9703200ca07910345fbb789e7a8f92bd80bbc79f0a9e040e8767d33df39f6eded403a9b636eabf9101e588482a +90833a51eef1b10ed74e8f9bbd6197e29c5292e469c854eed10b0da663e2bceb92539710b1858bbb21887bd538d28d89 +b513b905ec19191167c6193067b5cfdf5a3d3828375360df1c7e2ced5815437dfd37f0c4c8f009d7fb29ff3c8793f560 +b1b6d405d2d18f9554b8a358cc7e2d78a3b34269737d561992c8de83392ac9a2857be4bf15de5a6c74e0c9d0f31f393c +b828bd3e452b797323b798186607849f85d1fb20c616833c0619360dfd6b3e3aa000fd09dafe4b62d74abc41072ff1a9 +8efde67d0cca56bb2c464731879c9ac46a52e75bac702a63200a5e192b4f81c641f855ca6747752b84fe469cb7113b6c +b2762ba1c89ac3c9a983c242e4d1c2610ff0528585ed5c0dfc8a2c0253551142af9b59f43158e8915a1da7cc26b9df67 +8a3f1157fb820d1497ef6b25cd70b7e16bb8b961b0063ad340d82a79ee76eb2359ca9e15e6d42987ed7f154f5eeaa2da +a75e29f29d38f09c879f971c11beb5368affa084313474a5ecafa2896180b9e47ea1995c2733ec46f421e395a1d9cffe +8e8c3dd3e7196ef0b4996b531ec79e4a1f211db5d5635e48ceb80ff7568b2ff587e845f97ee703bb23a60945ad64314a +8e7f32f4a3e3c584af5e3d406924a0aa34024c42eca74ef6cc2a358fd3c9efaf25f1c03aa1e66bb94b023a2ee2a1cace +ab7dce05d59c10a84feb524fcb62478906b3fa045135b23afbede3bb32e0c678d8ebe59feabccb5c8f3550ea76cae44b +b38bb4b44d827f6fd3bd34e31f9186c59e312dbfadd4a7a88e588da10146a78b1f8716c91ad8b806beb8da65cab80c4c +9490ce9442bbbd05438c7f5c4dea789f74a7e92b1886a730544b55ba377840740a3ae4f2f146ee73f47c9278b0e233bc +83c003fab22a7178eed1a668e0f65d4fe38ef3900044e9ec63070c23f2827d36a1e73e5c2b883ec6a2afe2450171b3b3 +9982f02405978ddc4fca9063ebbdb152f524c84e79398955e66fe51bc7c1660ec1afc3a86ec49f58d7b7dde03505731c +ab337bd83ccdd2322088ffa8d005f450ced6b35790f37ab4534313315ee84312adc25e99cce052863a8bedee991729ed +8312ce4bec94366d88f16127a17419ef64285cd5bf9e5eda010319b48085966ed1252ed2f5a9fd3e0259b91bb65f1827 +a60d5a6327c4041b0c00a1aa2f0af056520f83c9ce9d9ccd03a0bd4d9e6a1511f26a422ea86bd858a1f77438adf07e6c +b84a0a0b030bdad83cf5202aa9afe58c9820e52483ab41f835f8c582c129ee3f34aa096d11c1cd922eda02ea1196a882 +8077d105317f4a8a8f1aadeb05e0722bb55f11abcb490c36c0904401107eb3372875b0ac233144829e734f0c538d8c1d +9202503bd29a6ec198823a1e4e098f9cfe359ed51eb5174d1ca41368821bfeebcbd49debfd02952c41359d1c7c06d2b1 +abc28c155e09365cb77ffead8dc8f602335ef93b2f44e4ef767ce8fc8ef9dd707400f3a722e92776c2e0b40192c06354 +b0f6d1442533ca45c9399e0a63a11f85ff288d242cea6cb3b68c02e77bd7d158047cae2d25b3bcd9606f8f66d9b32855 +b01c3d56a0db84dc94575f4b6ee2de4beca3230e86bed63e2066beb22768b0a8efb08ebaf8ac3dedb5fe46708b084807 +8c8634b0432159f66feaabb165842d1c8ac378f79565b1b90c381aa8450eb4231c3dad11ec9317b9fc2b155c3a771e32 +8e67f623d69ecd430c9ee0888520b6038f13a2b6140525b056dc0951f0cfed2822e62cf11d952a483107c5c5acac4826 +9590bb1cba816dd6acd5ac5fba5142c0a19d53573e422c74005e0bcf34993a8138c83124cad35a3df65879dba6134edd +801cd96cde0749021a253027118d3ea135f3fcdbe895db08a6c145641f95ebd368dd6a1568d995e1d0084146aebe224a +848b5d196427f6fc1f762ee3d36e832b64a76ec1033cfedc8b985dea93932a7892b8ef1035c653fb9dcd9ab2d9a44ac8 +a1017eb83d5c4e2477e7bd2241b2b98c4951a3b391081cae7d75965cadc1acaec755cf350f1f3d29741b0828e36fedea +8d6d2785e30f3c29aad17bd677914a752f831e96d46caf54446d967cb2432be2c849e26f0d193a60bee161ea5c6fe90a +935c0ba4290d4595428e034b5c8001cbd400040d89ab00861108e8f8f4af4258e41f34a7e6b93b04bc253d3b9ffc13bf +aac02257146246998477921cef2e9892228590d323b839f3e64ea893b991b463bc2f47e1e5092ddb47e70b2f5bce7622 +b921fde9412970a5d4c9a908ae8ce65861d06c7679af577cf0ad0d5344c421166986bee471fd6a6cecb7d591f06ec985 +8ef4c37487b139d6756003060600bb6ebac7ea810b9c4364fc978e842f13ac196d1264fbe5af60d76ff6d9203d8e7d3f +94b65e14022b5cf6a9b95f94be5ace2711957c96f4211c3f7bb36206bd39cfbd0ea82186cab5ad0577a23214a5c86e9e +a31c166d2a2ca1d5a75a5920fef7532681f62191a50d8555fdaa63ba4581c3391cc94a536fc09aac89f64eafceec3f90 +919a8cc128de01e9e10f5d83b08b52293fdd41bde2b5ae070f3d95842d4a16e5331cf2f3d61c765570c8022403610fa4 +b23d6f8331eef100152d60483cfa14232a85ee712c8538c9b6417a5a7c5b353c2ac401390c6c215cb101f5cee6b5f43e +ab357160c08a18319510a571eafff154298ce1020de8e1dc6138a09fcb0fcbcdd8359f7e9386bda00b7b9cdea745ffdc +ab55079aea34afa5c0bd1124b9cdfe01f325b402fdfa017301bf87812eaa811ea5798c3aaf818074d420d1c782b10ada +ade616010dc5009e7fc4f8d8b00dc716686a5fa0a7816ad9e503e15839d3b909b69d9dd929b7575376434ffec0d2bea8 +863997b97ed46898a8a014599508fa3079f414b1f4a0c4fdc6d74ae8b444afa350f327f8bfc2a85d27f9e2d049c50135 +8d602ff596334efd4925549ed95f2aa762b0629189f0df6dbb162581657cf3ea6863cd2287b4d9c8ad52813d87fcd235 +b70f68c596dcdeed92ad5c6c348578b26862a51eb5364237b1221e840c47a8702f0fbc56eb520a22c0eed99795d3903e +9628088f8e0853cefadee305a8bf47fa990c50fa96a82511bbe6e5dc81ef4b794e7918a109070f92fc8384d77ace226f +97e26a46e068b605ce96007197ecd943c9a23881862f4797a12a3e96ba2b8d07806ad9e2a0646796b1889c6b7d75188c +b1edf467c068cc163e2d6413cc22b16751e78b3312fe47b7ea82b08a1206d64415b2c8f2a677fa89171e82cc49797150 +a44d15ef18745b251429703e3cab188420e2d974de07251501799b016617f9630643fcd06f895634d8ecdd579e1bf000 +abd126df3917ba48c618ee4dbdf87df506193462f792874439043fa1b844466f6f4e0ff2e42516e63b5b23c0892b2695 +a2a67f57c4aa3c2aa1eeddbfd5009a89c26c2ce8fa3c96a64626aba19514beb125f27df8559506f737de3eae0f1fc18f +a633e0132197e6038197304b296ab171f1d8e0d0f34dcf66fe9146ac385b0239232a8470b9205a4802ab432389f4836d +a914b3a28509a906c3821463b936455d58ff45dcbe158922f9efb2037f2eb0ce8e92532d29b5d5a3fcd0d23fa773f272 +a0e1412ce4505daf1a2e59ce4f0fc0e0023e335b50d2b204422f57cd65744cc7a8ed35d5ef131a42c70b27111d3115b7 +a2339e2f2b6072e88816224fdd612c04d64e7967a492b9f8829db15367f565745325d361fd0607b0def1be384d010d9e +a7309fc41203cb99382e8193a1dcf03ac190a7ce04835304eb7e341d78634e83ea47cb15b885601956736d04cdfcaa01 +81f3ccd6c7f5b39e4e873365f8c37b214e8ab122d04a606fbb7339dc3298c427e922ec7418002561d4106505b5c399ee +92c121cf914ca549130e352eb297872a63200e99b148d88fbc9506ad882bec9d0203d65f280fb5b0ba92e336b7f932e8 +a4b330cf3f064f5b131578626ad7043ce2a433b6f175feb0b52d36134a454ca219373fd30d5e5796410e005b69082e47 +86fe5774112403ad83f9c55d58317eeb17ad8e1176d9f2f69c2afb7ed83bc718ed4e0245ceab4b377f5f062dcd4c00e7 +809d152a7e2654c7fd175b57f7928365a521be92e1ed06c05188a95864ddb25f7cab4c71db7d61bbf4cae46f3a1d96ce +b82d663e55c2a5ada7e169e9b1a87bc1c0177baf1ec1c96559b4cb1c5214ce1ddf2ab8d345014cab6402f3774235cf5a +86580af86df1bd2c385adb8f9a079e925981b7184db66fc5fe5b14cddb82e7d836b06eaeef14924ac529487b23dae111 +b5f5f4c5c94944ecc804df6ab8687d64e27d988cbfeae1ba7394e0f6adbf778c5881ead7cd8082dd7d68542b9bb4ecd5 +a6016916146c2685c46e8fdd24186394e2d5496e77e08c0c6a709d4cd7dfa97f1efcef94922b89196819076a91ad37b5 +b778e7367ded3b6eab53d5fc257f7a87e8faf74a593900f2f517220add2125be3f6142022660d8181df8d164ad9441ce +8581b2d36abe6f553add4d24be761bec1b8efaa2929519114346615380b3c55b59e6ad86990e312f7e234d0203bdf59b +9917e74fd45c3f71a829ff5498a7f6b5599b48c098dda2339bf04352bfc7f368ccf1a407f5835901240e76452ae807d7 +afd196ce6f9335069138fd2e3d133134da253978b4ce373152c0f26affe77a336505787594022e610f8feb722f7cc1fb +a477491a1562e329764645e8f24d8e228e5ef28c9f74c6b5b3abc4b6a562c15ffb0f680d372aed04d9e1bf944dece7be +9767440d58c57d3077319d3a330e5322b9ba16981ec74a5a14d53462eab59ae7fd2b14025bfc63b268862094acb444e6 +80986d921be3513ef69264423f351a61cb48390c1be8673aee0f089076086aaebea7ebe268fd0aa7182695606116f679 +a9554c5c921c07b450ee04e34ec58e054ac1541b26ce2ce5a393367a97348ba0089f53db6660ad76b60278b66fd12e3e +95097e7d2999b3e84bf052c775581cf361325325f4a50192521d8f4693c830bed667d88f482dc1e3f833aa2bd22d2cbf +9014c91d0f85aefd28436b5228c12f6353c055a9326c7efbf5e071e089e2ee7c070fcbc84c5fafc336cbb8fa6fec1ca1 +90f57ba36ee1066b55d37384942d8b57ae00f3cf9a3c1d6a3dfee1d1af42d4b5fa9baeb0cd7e46687d1d6d090ddb931d +8e4b1db12fd760a17214c9e47f1fce6e43c0dbb4589a827a13ac61aaae93759345697bb438a00edab92e0b7b62414683 +8022a959a513cdc0e9c705e0fc04eafd05ff37c867ae0f31f6d01cddd5df86138a426cab2ff0ac8ff03a62e20f7e8f51 +914e9a38829834c7360443b8ed86137e6f936389488eccf05b4b4db7c9425611705076ecb3f27105d24b85c852be7511 +957fb10783e2bd0db1ba66b18e794df710bc3b2b05776be146fa5863c15b1ebdd39747b1a95d9564e1772cdfc4f37b8a +b6307028444daed8ed785ac9d0de76bc3fe23ff2cc7e48102553613bbfb5afe0ebe45e4212a27021c8eb870721e62a1f +8f76143597777d940b15a01b39c5e1b045464d146d9a30a6abe8b5d3907250e6c7f858ff2308f8591e8b0a7b3f3c568a +96163138ac0ce5fd00ae9a289648fd9300a0ca0f63a88481d703ecd281c06a52a3b5178e849e331f9c85ca4ba398f4cc +a63ef47c3e18245b0482596a09f488a716df3cbd0f9e5cfabed0d742843e65db8961c556f45f49762f3a6ac8b627b3ef +8cb595466552e7c4d42909f232d4063e0a663a8ef6f6c9b7ce3a0542b2459cde04e0e54c7623d404acb5b82775ac04f6 +b47fe69960eb45f399368807cff16d941a5a4ebad1f5ec46e3dc8a2e4d598a7e6114d8f0ca791e9720fd786070524e2b +89eb5ff83eea9df490e5beca1a1fbbbbcf7184a37e2c8c91ede7a1e654c81e8cd41eceece4042ea7918a4f4646b67fd6 +a84f5d155ed08b9054eecb15f689ba81e44589e6e7207a99790c598962837ca99ec12344105b16641ca91165672f7153 +a6cc8f25c2d5b2d2f220ec359e6a37a52b95fa6af6e173c65e7cd55299eff4aa9e6d9e6f2769e6459313f1f2aecb0fab +afcde944411f017a9f7979755294981e941cc41f03df5e10522ef7c7505e5f1babdd67b3bf5258e8623150062eb41d9b +8fab39f39c0f40182fcd996ade2012643fe7731808afbc53f9b26900b4d4d1f0f5312d9d40b3df8baa4739970a49c732 +ae193af9726da0ebe7df1f9ee1c4846a5b2a7621403baf8e66c66b60f523e719c30c6b4f897bb14b27d3ff3da8392eeb +8ac5adb82d852eba255764029f42e6da92dcdd0e224d387d1ef94174038db9709ac558d90d7e7c57ad4ce7f89bbfc38c +a2066b3458fdf678ee487a55dd5bfb74fde03b54620cb0e25412a89ee28ad0d685e309a51e3e4694be2fa6f1593a344c +88d031745dd0ae07d61a15b594be5d4b2e2a29e715d081649ad63605e3404b0c3a5353f0fd9fad9c05c18e93ce674fa1 +8283cfb0ef743a043f2b77ecaeba3005e2ca50435585b5dd24777ee6bce12332f85e21b446b536da38508807f0f07563 +b376de22d5f6b0af0b59f7d9764561f4244cf8ffe22890ecd3dcf2ff1832130c9b821e068c9d8773136f4796721e5963 +ae3afc50c764f406353965363840bf28ee85e7064eb9d5f0bb3c31c64ab10f48c853e942ee2c9b51bae59651eaa08c2f +948b204d103917461a01a6c57a88f2d66b476eae5b00be20ec8c747650e864bc8a83aee0aff59cb7584b7a3387e0ee48 +81ab098a082b07f896c5ffd1e4446cb7fb44804cbbf38d125208b233fc82f8ec9a6a8d8dd1c9a1162dc28ffeec0dde50 +a149c6f1312821ced2969268789a3151bdda213451760b397139a028da609c4134ac083169feb0ee423a0acafd10eceb +b0ac9e27a5dadaf523010f730b28f0ebac01f460d3bbbe277dc9d44218abb5686f4fac89ae462682fef9edbba663520a +8d0e0073cca273daaaa61b6fc54bfe5a009bc3e20ae820f6c93ba77b19eca517d457e948a2de5e77678e4241807157cb +ad61d3a2edf7c7533a04964b97499503fd8374ca64286dba80465e68fe932e96749b476f458c6fc57cb1a7ca85764d11 +90eb5e121ae46bc01a30881eaa556f46bd8457a4e80787cf634aab355082de34ac57d7f497446468225f7721e68e2a47 +8cdac557de7c42d1f3780e33dec1b81889f6352279be81c65566cdd4952d4c15d79e656cbd46035ab090b385e90245ef +82b67e61b88b84f4f4d4f65df37b3e3dcf8ec91ea1b5c008fdccd52da643adbe6468a1cfdb999e87d195afe2883a3b46 +8503b467e8f5d6048a4a9b78496c58493a462852cab54a70594ae3fd064cfd0deb4b8f336a262155d9fedcaa67d2f6fd +8db56c5ac763a57b6ce6832930c57117058e3e5a81532b7d19346346205e2ec614eb1a2ee836ef621de50a7bc9b7f040 +ad344699198f3c6e8c0a3470f92aaffc805b76266734414c298e10b5b3797ca53578de7ccb2f458f5e0448203f55282b +80602032c43c9e2a09154cc88b83238343b7a139f566d64cb482d87436b288a98f1ea244fd3bff8da3c398686a900c14 +a6385bd50ecd548cfb37174cdbb89e10025b5cadaf3cff164c95d7aef5a33e3d6a9bf0c681b9e11db9ef54ebeee2a0c1 +abf2d95f4aa34b0581eb9257a0cc8462b2213941a5deb8ba014283293e8b36613951b61261cc67bbd09526a54cbbff76 +a3d5de52f48df72c289ff713e445991f142390798cd42bd9d9dbefaee4af4f5faf09042d126b975cf6b98711c3072553 +8e627302ff3d686cff8872a1b7c2a57b35f45bf2fc9aa42b049d8b4d6996a662b8e7cbac6597f0cb79b0cc4e29fbf133 +8510702e101b39a1efbf4e504e6123540c34b5689645e70d0bac1ecc1baf47d86c05cef6c4317a4e99b4edaeb53f2d00 +aa173f0ecbcc6088f878f8726d317748c81ebf501bba461f163b55d66099b191ec7c55f7702f351a9c8eb42cfa3280e2 +b560a697eafab695bcef1416648a0a664a71e311ecbe5823ae903bd0ed2057b9d7574b9a86d3fe22aa3e6ddce38ea513 +8df6304a3d9cf40100f3f687575419c998cd77e5cc27d579cf4f8e98642de3609af384a0337d145dd7c5635172d26a71 +8105c7f3e4d30a29151849673853b457c1885c186c132d0a98e63096c3774bc9deb956cf957367e633d0913680bda307 +95373fc22c0917c3c2044ac688c4f29a63ed858a45c0d6d2d0fe97afd6f532dcb648670594290c1c89010ecc69259bef +8c2fae9bcadab341f49b55230310df93cac46be42d4caa0d42e45104148a91e527af1b4209c0d972448162aed28fab64 +b05a77baab70683f76209626eaefdda2d36a0b66c780a20142d23c55bd479ddd4ad95b24579384b6cf62c8eb4c92d021 +8e6bc6a7ea2755b4aaa19c1c1dee93811fcde514f03485fdc3252f0ab7f032c315614f6336e57cea25dcfb8fb6084eeb +b656a27d06aade55eadae2ad2a1059198918ea6cc3fd22c0ed881294d34d5ac7b5e4700cc24350e27d76646263b223aa +a296469f24f6f56da92d713afcd4dd606e7da1f79dc4e434593c53695847eefc81c7c446486c4b3b8c8d00c90c166f14 +87a326f57713ac2c9dffeb3af44b9f3c613a8f952676fc46343299122b47ee0f8d792abaa4b5db6451ced5dd153aabd0 +b689e554ba9293b9c1f6344a3c8fcb6951d9f9eac4a2e2df13de021aade7c186be27500e81388e5b8bcab4c80f220a31 +87ae0aa0aa48eac53d1ca5a7b93917de12db9e40ceabf8fdb40884ae771cfdf095411deef7c9f821af0b7070454a2608 +a71ffa7eae8ace94e6c3581d4cb2ad25d48cbd27edc9ec45baa2c8eb932a4773c3272b2ffaf077b40f76942a1f3af7f2 +94c218c91a9b73da6b7a495b3728f3028df8ad9133312fc0c03e8c5253b7ccb83ed14688fd4602e2fd41f29a0bc698bd +ae1e77b90ca33728af07a4c03fb2ef71cd92e2618e7bf8ed4d785ce90097fc4866c29999eb84a6cf1819d75285a03af2 +b7a5945b277dab9993cf761e838b0ac6eaa903d7111fca79f9fde3d4285af7a89bf6634a71909d095d7619d913972c9c +8c43b37be02f39b22029b20aca31bff661abce4471dca88aa3bddefd9c92304a088b2dfc8c4795acc301ca3160656af2 +b32e5d0fba024554bd5fe8a793ebe8003335ddd7f585876df2048dcf759a01285fecb53daae4950ba57f3a282a4d8495 +85ea7fd5e10c7b659df5289b2978b2c89e244f269e061b9a15fcab7983fc1962b63546e82d5731c97ec74b6804be63ef +96b89f39181141a7e32986ac02d7586088c5a9662cec39843f397f3178714d02f929af70630c12cbaba0268f8ba2d4fa +929ab1a2a009b1eb37a2817c89696a06426529ebe3f306c586ab717bd34c35a53eca2d7ddcdef36117872db660024af9 +a696dccf439e9ca41511e16bf3042d7ec0e2f86c099e4fc8879d778a5ea79e33aa7ce96b23dc4332b7ba26859d8e674d +a8fe69a678f9a194b8670a41e941f0460f6e2dbc60470ab4d6ae2679cc9c6ce2c3a39df2303bee486dbfde6844e6b31a +95f58f5c82de2f2a927ca99bf63c9fc02e9030c7e46d0bf6b67fe83a448d0ae1c99541b59caf0e1ccab8326231af09a5 +a57badb2c56ca2c45953bd569caf22968f76ed46b9bac389163d6fe22a715c83d5e94ae8759b0e6e8c2f27bff7748f3f +868726fd49963b24acb5333364dffea147e98f33aa19c7919dc9aca0fd26661cfaded74ede7418a5fadbe7f5ae67b67b +a8d8550dcc64d9f1dd7bcdab236c4122f2b65ea404bb483256d712c7518f08bb028ff8801f1da6aed6cbfc5c7062e33b +97e25a87dae23155809476232178538d4bc05d4ff0882916eb29ae515f2a62bfce73083466cc0010ca956aca200aeacc +b4ea26be3f4bd04aa82d7c4b0913b97bcdf5e88b76c57eb1a336cbd0a3eb29de751e1bc47c0e8258adec3f17426d0c71 +99ee555a4d9b3cf2eb420b2af8e3bc99046880536116d0ce7193464ac40685ef14e0e3c442f604e32f8338cb0ef92558 +8c64efa1da63cd08f319103c5c7a761221080e74227bbc58b8fb35d08aa42078810d7af3e60446cbaff160c319535648 +8d9fd88040076c28420e3395cbdfea402e4077a3808a97b7939d49ecbcf1418fe50a0460e1c1b22ac3f6e7771d65169a +ae3c19882d7a9875d439265a0c7003c8d410367627d21575a864b9cb4918de7dbdb58a364af40c5e045f3df40f95d337 +b4f7bfacab7b2cafe393f1322d6dcc6f21ffe69cd31edc8db18c06f1a2b512c27bd0618091fd207ba8df1808e9d45914 +94f134acd0007c623fb7934bcb65ef853313eb283a889a3ffa79a37a5c8f3665f3d5b4876bc66223610c21dc9b919d37 +aa15f74051171daacdc1f1093d3f8e2d13da2833624b80a934afec86fc02208b8f55d24b7d66076444e7633f46375c6a +a32d6bb47ef9c836d9d2371807bafbbbbb1ae719530c19d6013f1d1f813c49a60e4fa51d83693586cba3a840b23c0404 +b61b3599145ea8680011aa2366dc511a358b7d67672d5b0c5be6db03b0efb8ca5a8294cf220ea7409621f1664e00e631 +859cafc3ee90b7ececa1ed8ef2b2fc17567126ff10ca712d5ffdd16aa411a5a7d8d32c9cab1fbf63e87dce1c6e2f5f53 +a2fef1b0b2874387010e9ae425f3a9676d01a095d017493648bcdf3b31304b087ccddb5cf76abc4e1548b88919663b6b +939e18c73befc1ba2932a65ede34c70e4b91e74cc2129d57ace43ed2b3af2a9cc22a40fbf50d79a63681b6d98852866d +b3b4259d37b1b14aee5b676c9a0dd2d7f679ab95c120cb5f09f9fbf10b0a920cb613655ddb7b9e2ba5af4a221f31303c +997255fe51aaca6e5a9cb3359bcbf25b2bb9e30649bbd53a8a7c556df07e441c4e27328b38934f09c09d9500b5fabf66 +abb91be2a2d860fd662ed4f1c6edeefd4da8dc10e79251cf87f06029906e7f0be9b486462718f0525d5e049472692cb7 +b2398e593bf340a15f7801e1d1fbda69d93f2a32a889ec7c6ae5e8a37567ac3e5227213c1392ee86cfb3b56ec2787839 +8ddf10ccdd72922bed36829a36073a460c2118fc7a56ff9c1ac72581c799b15c762cb56cb78e3d118bb9f6a7e56cb25e +93e6bc0a4708d16387cacd44cf59363b994dc67d7ada7b6d6dbd831c606d975247541b42b2a309f814c1bfe205681fc6 +b93fc35c05998cffda2978e12e75812122831523041f10d52f810d34ff71944979054b04de0117e81ddf5b0b4b3e13c0 +92221631c44d60d68c6bc7b287509f37ee44cbe5fdb6935cee36b58b17c7325098f98f7910d2c3ca5dc885ad1d6dabc7 +a230124424a57fad3b1671f404a94d7c05f4c67b7a8fbacfccea28887b78d7c1ed40b92a58348e4d61328891cd2f6cee +a6a230edb8518a0f49d7231bc3e0bceb5c2ac427f045819f8584ba6f3ae3d63ed107a9a62aad543d7e1fcf1f20605706 +845be1fe94223c7f1f97d74c49d682472585d8f772762baad8a9d341d9c3015534cc83d102113c51a9dea2ab10d8d27b +b44262515e34f2db597c8128c7614d33858740310a49cdbdf9c8677c5343884b42c1292759f55b8b4abc4c86e4728033 +805592e4a3cd07c1844bc23783408310accfdb769cca882ad4d07d608e590a288b7370c2cb327f5336e72b7083a0e30f +95153e8b1140df34ee864f4ca601cb873cdd3efa634af0c4093fbaede36f51b55571ab271e6a133020cd34db8411241f +82878c1285cfa5ea1d32175c9401f3cc99f6bb224d622d3fd98cc7b0a27372f13f7ab463ce3a33ec96f9be38dbe2dfe3 +b7588748f55783077c27fc47d33e20c5c0f5a53fc0ac10194c003aa09b9f055d08ec971effa4b7f760553997a56967b3 +b36b4de6d1883b6951f59cfae381581f9c6352fcfcf1524fccdab1571a20f80441d9152dc6b48bcbbf00371337ca0bd5 +89c5523f2574e1c340a955cbed9c2f7b5fbceb260cb1133160dabb7d41c2f613ec3f6e74bbfab3c4a0a6f0626dbe068f +a52f58cc39f968a9813b1a8ddc4e83f4219e4dd82c7aa1dd083bea7edf967151d635aa9597457f879771759b876774e4 +8300a67c2e2e123f89704abfde095463045dbd97e20d4c1157bab35e9e1d3d18f1f4aaba9cbe6aa2d544e92578eaa1b6 +ac6a7f2918768eb6a43df9d3a8a04f8f72ee52f2e91c064c1c7d75cad1a3e83e5aba9fe55bb94f818099ac91ccf2e961 +8d64a2b0991cf164e29835c8ddef6069993a71ec2a7de8157bbfa2e00f6367be646ed74cbaf524f0e9fe13fb09fa15fd +8b2ffe5a545f9f680b49d0a9797a4a11700a2e2e348c34a7a985fc278f0f12def6e06710f40f9d48e4b7fbb71e072229 +8ab8f71cd337fa19178924e961958653abf7a598e3f022138b55c228440a2bac4176cea3aea393549c03cd38a13eb3fc +8419d28318c19ea4a179b7abb43669fe96347426ef3ac06b158d79c0acf777a09e8e770c2fb10e14b3a0421705990b23 +8bacdac310e1e49660359d0a7a17fe3d334eb820e61ae25e84cb52f863a2f74cbe89c2e9fc3283745d93a99b79132354 +b57ace3fa2b9f6b2db60c0d861ace7d7e657c5d35d992588aeed588c6ce3a80b6f0d49f8a26607f0b17167ab21b675e4 +83e265cde477f2ecc164f49ddc7fb255bb05ff6adc347408353b7336dc3a14fdedc86d5a7fb23f36b8423248a7a67ed1 +a60ada971f9f2d79d436de5d3d045f5ab05308cae3098acaf5521115134b2a40d664828bb89895840db7f7fb499edbc5 +a63eea12efd89b62d3952bf0542a73890b104dd1d7ff360d4755ebfa148fd62de668edac9eeb20507967ea37fb220202 +a0275767a270289adc991cc4571eff205b58ad6d3e93778ddbf95b75146d82517e8921bd0d0564e5b75fa0ccdab8e624 +b9b03fd3bf07201ba3a039176a965d736b4ef7912dd9e9bf69fe1b57c330a6aa170e5521fe8be62505f3af81b41d7806 +a95f640e26fb1106ced1729d6053e41a16e4896acac54992279ff873e5a969aad1dcfa10311e28b8f409ac1dab7f03bb +b144778921742418053cb3c70516c63162c187f00db2062193bb2c14031075dbe055d020cde761b26e8c58d0ea6df2c1 +8432fbb799e0435ef428d4fefc309a05dd589bce74d7a87faf659823e8c9ed51d3e42603d878e80f439a38be4321c2fa +b08ddef14e42d4fd5d8bf39feb7485848f0060d43b51ed5bdda39c05fe154fb111d29719ee61a23c392141358c0cfcff +8ae3c5329a5e025b86b5370e06f5e61177df4bda075856fade20a17bfef79c92f54ed495f310130021ba94fb7c33632b +92b6d3c9444100b4d7391febfc1dddaa224651677c3695c47a289a40d7a96d200b83b64e6d9df51f534564f272a2c6c6 +b432bc2a3f93d28b5e506d68527f1efeb2e2570f6be0794576e2a6ef9138926fdad8dd2eabfa979b79ab7266370e86bc +8bc315eacedbcfc462ece66a29662ca3dcd451f83de5c7626ef8712c196208fb3d8a0faf80b2e80384f0dd9772f61a23 +a72375b797283f0f4266dec188678e2b2c060dfed5880fc6bb0c996b06e91a5343ea2b695adaab0a6fd183b040b46b56 +a43445036fbaa414621918d6a897d3692fdae7b2961d87e2a03741360e45ebb19fcb1703d23f1e15bb1e2babcafc56ac +b9636b2ffe305e63a1a84bd44fb402442b1799bd5272638287aa87ca548649b23ce8ce7f67be077caed6aa2dbc454b78 +99a30bf0921d854c282b83d438a79f615424f28c2f99d26a05201c93d10378ab2cd94a792b571ddae5d4e0c0013f4006 +8648e3c2f93d70b392443be116b48a863e4b75991bab5db656a4ef3c1e7f645e8d536771dfe4e8d1ceda3be8d32978b0 +ab50dc9e6924c1d2e9d2e335b2d679fc7d1a7632e84964d3bac0c9fe57e85aa5906ec2e7b0399d98ddd022e9b19b5904 +ab729328d98d295f8f3272afaf5d8345ff54d58ff9884da14f17ecbdb7371857fdf2f3ef58080054e9874cc919b46224 +83fa5da7592bd451cad3ad7702b4006332b3aae23beab4c4cb887fa6348317d234bf62a359e665b28818e5410c278a09 +8bdbff566ae9d368f114858ef1f009439b3e9f4649f73efa946e678d6c781d52c69af195df0a68170f5f191b2eac286b +91245e59b4425fd4edb2a61d0d47c1ccc83d3ced8180de34887b9655b5dcda033d48cde0bdc3b7de846d246c053a02e8 +a2cb00721e68f1cad8933947456f07144dc69653f96ceed845bd577d599521ba99cdc02421118971d56d7603ed118cbf +af8cd66d303e808b22ec57860dd909ca64c27ec2c60e26ffecfdc1179d8762ffd2739d87b43959496e9fee4108df71df +9954136812dffcd5d3f167a500e7ab339c15cfc9b3398d83f64b0daa3dd5b9a851204f424a3493b4e326d3de81e50a62 +93252254d12511955f1aa464883ad0da793f84d900fea83e1df8bca0f2f4cf5b5f9acbaec06a24160d33f908ab5fea38 +997cb55c26996586ba436a95566bd535e9c22452ca5d2a0ded2bd175376557fa895f9f4def4519241ff386a063f2e526 +a12c78ad451e0ac911260ade2927a768b50cb4125343025d43474e7f465cdc446e9f52a84609c5e7e87ae6c9b3f56cda +a789d4ca55cbba327086563831b34487d63d0980ba8cf55197c016702ed6da9b102b1f0709ce3da3c53ff925793a3d73 +a5d76acbb76741ce85be0e655b99baa04f7f587347947c0a30d27f8a49ae78cce06e1cde770a8b618d3db402be1c0c4b +873c0366668c8faddb0eb7c86f485718d65f8c4734020f1a18efd5fa123d3ea8a990977fe13592cd01d17e60809cb5ff +b659b71fe70f37573ff7c5970cc095a1dc0da3973979778f80a71a347ef25ad5746b2b9608bad4ab9a4a53a4d7df42d7 +a34cbe05888e5e5f024a2db14cb6dcdc401a9cbd13d73d3c37b348f68688f87c24ca790030b8f84fef9e74b4eab5e412 +94ce8010f85875c045b0f014db93ef5ab9f1f6842e9a5743dce9e4cb872c94affd9e77c1f1d1ab8b8660b52345d9acb9 +adefa9b27a62edc0c5b019ddd3ebf45e4de846165256cf6329331def2e088c5232456d3de470fdce3fa758bfdd387512 +a6b83821ba7c1f83cc9e4529cf4903adb93b26108e3d1f20a753070db072ad5a3689643144bdd9c5ea06bb9a7a515cd0 +a3a9ddedc2a1b183eb1d52de26718151744db6050f86f3580790c51d09226bf05f15111691926151ecdbef683baa992c +a64bac89e7686932cdc5670d07f0b50830e69bfb8c93791c87c7ffa4913f8da881a9d8a8ce8c1a9ce5b6079358c54136 +a77b5a63452cb1320b61ab6c7c2ef9cfbcade5fd4727583751fb2bf3ea330b5ca67757ec1f517bf4d503ec924fe32fbd +8746fd8d8eb99639d8cd0ca34c0d9c3230ed5a312aab1d3d925953a17973ee5aeb66e68667e93caf9cb817c868ea8f3d +88a2462a26558fc1fbd6e31aa8abdc706190a17c27fdc4217ffd2297d1b1f3321016e5c4b2384c5454d5717dc732ed03 +b78893a97e93d730c8201af2e0d3b31cb923d38dc594ffa98a714e627c473d42ea82e0c4d2eeb06862ee22a9b2c54588 +920cc8b5f1297cf215a43f6fc843e379146b4229411c44c0231f6749793d40f07b9af7699fd5d21fd69400b97febe027 +a0f0eafce1e098a6b58c7ad8945e297cd93aaf10bc55e32e2e32503f02e59fc1d5776936577d77c0b1162cb93b88518b +98480ba0064e97a2e7a6c4769b4d8c2a322cfc9a3b2ca2e67e9317e2ce04c6e1108169a20bd97692e1cb1f1423b14908 +83dbbb2fda7e287288011764a00b8357753a6a44794cc8245a2275237f11affdc38977214e463ad67aec032f3dfa37e9 +86442fff37598ce2b12015ff19b01bb8a780b40ad353d143a0f30a06f6d23afd5c2b0a1253716c855dbf445cc5dd6865 +b8a4c60c5171189414887847b9ed9501bff4e4c107240f063e2d254820d2906b69ef70406c585918c4d24f1dd052142b +919f33a98e84015b2034b57b5ffe9340220926b2c6e45f86fd79ec879dbe06a148ae68b77b73bf7d01bd638a81165617 +95c13e78d89474a47fbc0664f6f806744b75dede95a479bbf844db4a7f4c3ae410ec721cb6ffcd9fa9c323da5740d5ae +ab7151acc41fffd8ec6e90387700bcd7e1cde291ea669567295bea1b9dd3f1df2e0f31f3588cd1a1c08af8120aca4921 +80e74c5c47414bd6eeef24b6793fb1fa2d8fb397467045fcff887c52476741d5bc4ff8b6d3387cb53ad285485630537f +a296ad23995268276aa351a7764d36df3a5a3cffd7dbeddbcea6b1f77adc112629fdeffa0918b3242b3ccd5e7587e946 +813d2506a28a2b01cb60f49d6bd5e63c9b056aa56946faf2f33bd4f28a8d947569cfead3ae53166fc65285740b210f86 +924b265385e1646287d8c09f6c855b094daaee74b9e64a0dddcf9ad88c6979f8280ba30c8597b911ef58ddb6c67e9fe3 +8d531513c70c2d3566039f7ca47cd2352fd2d55b25675a65250bdb8b06c3843db7b2d29c626eed6391c238fc651cf350 +82b338181b62fdc81ceb558a6843df767b6a6e3ceedc5485664b4ea2f555904b1a45fbb35f6cf5d96f27da10df82a325 +92e62faaedea83a37f314e1d3cb4faaa200178371d917938e59ac35090be1db4b4f4e0edb78b9c991de202efe4f313d8 +99d645e1b642c2dc065bac9aaa0621bc648c9a8351efb6891559c3a41ba737bd155fb32d7731950514e3ecf4d75980e4 +b34a13968b9e414172fb5d5ece9a39cf2eb656128c3f2f6cc7a9f0c69c6bae34f555ecc8f8837dc34b5e470e29055c78 +a2a0bb7f3a0b23a2cbc6585d59f87cd7e56b2bbcb0ae48f828685edd9f7af0f5edb4c8e9718a0aaf6ef04553ba71f3b7 +8e1a94bec053ed378e524b6685152d2b52d428266f2b6eadd4bcb7c4e162ed21ab3e1364879673442ee2162635b7a4d8 +9944adaff14a85eab81c73f38f386701713b52513c4d4b838d58d4ffa1d17260a6d056b02334850ea9a31677c4b078bd +a450067c7eceb0854b3eca3db6cf38669d72cb7143c3a68787833cbca44f02c0be9bfbe082896f8a57debb13deb2afb1 +8be4ad3ac9ef02f7df09254d569939757101ee2eda8586fefcd8c847adc1efe5bdcb963a0cafa17651befaafb376a531 +90f6de91ea50255f148ac435e08cf2ac00c772a466e38155bd7e8acf9197af55662c7b5227f88589b71abe9dcf7ba343 +86e5a24f0748b106dee2d4d54e14a3b0af45a96cbee69cac811a4196403ebbee17fd24946d7e7e1b962ac7f66dbaf610 +afdd96fbcda7aa73bf9eeb2292e036c25753d249caee3b9c013009cc22e10d3ec29e2aa6ddbb21c4e949b0c0bccaa7f4 +b5a4e7436d5473647c002120a2cb436b9b28e27ad4ebdd7c5f122b91597c507d256d0cbd889d65b3a908531936e53053 +b632414c3da704d80ac2f3e5e0e9f18a3637cdc2ebeb613c29300745582427138819c4e7b0bec3099c1b8739dac1807b +a28df1464d3372ce9f37ef1db33cc010f752156afae6f76949d98cd799c0cf225c20228ae86a4da592d65f0cffe3951b +898b93d0a31f7d3f11f253cb7a102db54b669fd150da302d8354d8e02b1739a47cb9bd88015f3baf12b00b879442464e +96fb88d89a12049091070cb0048a381902965e67a8493e3991eaabe5d3b7ff7eecd5c94493a93b174df3d9b2c9511755 +b899cb2176f59a5cfba3e3d346813da7a82b03417cad6342f19cc8f12f28985b03bf031e856a4743fd7ebe16324805b0 +a60e2d31bc48e0c0579db15516718a03b73f5138f15037491f4dae336c904e312eda82d50862f4debd1622bb0e56d866 +979fc8b987b5cef7d4f4b58b53a2c278bd25a5c0ea6f41c715142ea5ff224c707de38451b0ad3aa5e749aa219256650a +b2a75bff18e1a6b9cf2a4079572e41205741979f57e7631654a3c0fcec57c876c6df44733c9da3d863db8dff392b44a3 +b7a0f0e811222c91e3df98ff7f286b750bc3b20d2083966d713a84a2281744199e664879401e77470d44e5a90f3e5181 +82b74ba21c9d147fbc338730e8f1f8a6e7fc847c3110944eb17a48bea5e06eecded84595d485506d15a3e675fd0e5e62 +a7f44eef817d5556f0d1abcf420301217d23c69dd2988f44d91ea1f1a16c322263cbacd0f190b9ba22b0f141b9267b4f +aadb68164ede84fc1cb3334b3194d84ba868d5a88e4c9a27519eef4923bc4abf81aab8114449496c073c2a6a0eb24114 +b5378605fabe9a8c12a5dc55ef2b1de7f51aedb61960735c08767a565793cea1922a603a6983dc25f7cea738d0f7c40d +a97a4a5cd8d51302e5e670aee78fe6b5723f6cc892902bbb4f131e82ca1dfd5de820731e7e3367fb0c4c1922a02196e3 +8bdfeb15c29244d4a28896f2b2cb211243cd6a1984a3f5e3b0ebe5341c419beeab3304b390a009ffb47588018034b0ea +a9af3022727f2aa2fca3b096968e97edad3f08edcbd0dbca107b892ae8f746a9c0485e0d6eb5f267999b23a845923ed0 +8e7594034feef412f055590fbb15b6322dc4c6ab7a4baef4685bd13d71a83f7d682b5781bdfa0d1c659489ce9c2b8000 +84977ca6c865ebee021c58106c1a4ad0c745949ecc5332948002fd09bd9b890524878d0c29da96fd11207621136421fe +8687551a79158e56b2375a271136756313122132a6670fa51f99a1b5c229ed8eea1655a734abae13228b3ebfd2a825dd +a0227d6708979d99edfc10f7d9d3719fd3fc68b0d815a7185b60307e4c9146ad2f9be2b8b4f242e320d4288ceeb9504c +89f75583a16735f9dd8b7782a130437805b34280ccea8dac6ecaee4b83fe96947e7b53598b06fecfffdf57ffc12cc445 +a0056c3353227f6dd9cfc8e3399aa5a8f1d71edf25d3d64c982910f50786b1e395c508d3e3727ac360e3e040c64b5298 +b070e61a6d813626144b312ded1788a6d0c7cec650a762b2f8df6e4743941dd82a2511cd956a3f141fc81e15f4e092da +b4e6db232e028a1f989bb5fc13416711f42d389f63564d60851f009dcffac01acfd54efa307aa6d4c0f932892d4e62b0 +89b5991a67db90024ddd844e5e1a03ef9b943ad54194ae0a97df775dde1addf31561874f4e40fbc37a896630f3bbda58 +ad0e8442cb8c77d891df49cdb9efcf2b0d15ac93ec9be1ad5c3b3cca1f4647b675e79c075335c1f681d56f14dc250d76 +b5d55a6ae65bb34dd8306806cb49b5ccb1c83a282ee47085cf26c4e648e19a52d9c422f65c1cd7e03ca63e926c5e92ea +b749501347e5ec07e13a79f0cb112f1b6534393458b3678a77f02ca89dca973fa7b30e55f0b25d8b92b97f6cb0120056 +94144b4a3ffc5eec6ba35ce9c245c148b39372d19a928e236a60e27d7bc227d18a8cac9983851071935d8ffb64b3a34f +92bb4f9f85bc8c028a3391306603151c6896673135f8a7aefedd27acb322c04ef5dac982fc47b455d6740023e0dd3ea3 +b9633a4a101461a782fc2aa092e9dbe4e2ad00987578f18cd7cf0021a909951d60fe79654eb7897806795f93c8ff4d1c +809f0196753024821b48a016eca5dbb449a7c55750f25981bb7a4b4c0e0846c09b8f6128137905055fc43a3f0deb4a74 +a27dc9cdd1e78737a443570194a03d89285576d3d7f3a3cf15cc55b3013e42635d4723e2e8fe1d0b274428604b630db9 +861f60f0462e04cd84924c36a28163def63e777318d00884ab8cb64c8df1df0bce5900342163edb60449296484a6c5bf +b7bc23fb4e14af4c4704a944253e760adefeca8caee0882b6bbd572c84434042236f39ae07a8f21a560f486b15d82819 +b9a6eb492d6dd448654214bd01d6dc5ff12067a11537ab82023fc16167507ee25eed2c91693912f4155d1c07ed9650b3 +97678af29c68f9a5e213bf0fb85c265303714482cfc4c2c00b4a1e8a76ed08834ee6af52357b143a1ca590fb0265ea5a +8a15b499e9eca5b6cac3070b5409e8296778222018ad8b53a5d1f6b70ad9bb10c68a015d105c941ed657bf3499299e33 +b487fefede2e8091f2c7bfe85770db2edff1db83d4effe7f7d87bff5ab1ace35e9b823a71adfec6737fede8d67b3c467 +8b51b916402aa2c437fce3bcad6dad3be8301a1a7eab9d163085b322ffb6c62abf28637636fe6114573950117fc92898 +b06a2106d031a45a494adec0881cb2f82275dff9dcdd2bc16807e76f3bec28a6734edd3d54f0be8199799a78cd6228ad +af0a185391bbe2315eb97feac98ad6dd2e5d931d012c621abd6e404a31cc188b286fef14871762190acf086482b2b5e2 +8e78ee8206506dd06eb7729e32fceda3bebd8924a64e4d8621c72e36758fda3d0001af42443851d6c0aea58562870b43 +a1ba52a569f0461aaf90b49b92be976c0e73ec4a2c884752ee52ffb62dd137770c985123d405dfb5de70692db454b54a +8d51b692fa1543c51f6b62b9acb8625ed94b746ef96c944ca02859a4133a5629da2e2ce84e111a7af8d9a5b836401c64 +a7a20d45044cf6492e0531d0b8b26ffbae6232fa05a96ed7f06bdb64c2b0f5ca7ec59d5477038096a02579e633c7a3ff +84df867b98c53c1fcd4620fef133ee18849c78d3809d6aca0fb6f50ff993a053a455993f216c42ab6090fa5356b8d564 +a7227c439f14c48e2577d5713c97a5205feb69acb0b449152842e278fa71e8046adfab468089c8b2288af1fc51fa945b +855189b3a105670779997690876dfaa512b4a25a24931a912c2f0f1936971d2882fb4d9f0b3d9daba77eaf660e9d05d5 +b5696bd6706de51c502f40385f87f43040a5abf99df705d6aac74d88c913b8ecf7a99a63d7a37d9bdf3a941b9e432ff5 +ab997beb0d6df9c98d5b49864ef0b41a2a2f407e1687dfd6089959757ba30ed02228940b0e841afe6911990c74d536c4 +b36b65f85546ebfdbe98823d5555144f96b4ab39279facd19c0de3b8919f105ba0315a0784dce4344b1bc62d8bb4a5a3 +b8371f0e4450788720ac5e0f6cd3ecc5413d33895083b2c168d961ec2b5c3de411a4cc0712481cbe8df8c2fa1a7af006 +98325d8026b810a8b7a114171ae59a57e8bbc9848e7c3df992efc523621729fd8c9f52114ce01d7730541a1ada6f1df1 +8d0e76dbd37806259486cd9a31bc8b2306c2b95452dc395546a1042d1d17863ef7a74c636b782e214d3aa0e8d717f94a +a4e15ead76da0214d702c859fb4a8accdcdad75ed08b865842bd203391ec4cba2dcc916455e685f662923b96ee0c023f +8618190972086ebb0c4c1b4a6c94421a13f378bc961cc8267a301de7390c5e73c3333864b3b7696d81148f9d4843fd02 +85369d6cc7342e1aa15b59141517d8db8baaaeb7ab9670f3ba3905353948d575923d283b7e5a05b13a30e7baf1208a86 +87c51ef42233c24a6da901f28c9a075d9ba3c625687c387ad6757b72ca6b5a8885e6902a3082da7281611728b1e45f26 +aa6348a4f71927a3106ad0ea8b02fc8d8c65531e4ab0bd0a17243e66f35afe252e40ab8eef9f13ae55a72566ffdaff5c +96a3bc976e9d03765cc3fee275fa05b4a84c94fed6b767e23ca689394501e96f56f7a97cffddc579a6abff632bf153be +97dbf96c6176379fdb2b888be4e757b2bca54e74124bd068d3fa1dbd82a011bbeb75079da38e0cd22a761fe208ecad9b +b70cf0a1d14089a4129ec4e295313863a59da8c7e26bf74cc0e704ed7f0ee4d7760090d0ddf7728180f1bf2c5ac64955 +882d664714cc0ffe53cbc9bef21f23f3649824f423c4dbad1f893d22c4687ab29583688699efc4d5101aa08b0c3e267a +80ecb7cc963e677ccaddbe3320831dd6ee41209acf4ed41b16dc4817121a3d86a1aac9c4db3d8c08a55d28257088af32 +a25ba667d832b145f9ce18c3f9b1bd00737aa36db020e1b99752c8ef7d27c6c448982bd8d352e1b6df266b8d8358a8d5 +83734841c13dee12759d40bdd209b277e743b0d08cc0dd1e0b7afd2d65bfa640400eefcf6be4a52e463e5b3d885eeac6 +848d16505b04804afc773aebabb51b36fd8aacfbb0e09b36c0d5d57df3c0a3b92f33e7d5ad0a7006ec46ebb91df42b8c +909a8d793f599e33bb9f1dc4792a507a97169c87cd5c087310bc05f30afcd247470b4b56dec59894c0fb1d48d39bb54e +8e558a8559df84a1ba8b244ece667f858095c50bb33a5381e60fcc6ba586b69693566d8819b4246a27287f16846c1dfa +84d6b69729f5aaa000cd710c2352087592cfbdf20d5e1166977e195818e593fa1a50d1e04566be23163a2523dc1612f1 +9536d262b7a42125d89f4f32b407d737ba8d9242acfc99d965913ab3e043dcac9f7072a43708553562cac4cba841df30 +9598548923ca119d6a15fd10861596601dd1dedbcccca97bb208cdc1153cf82991ea8cc17686fbaa867921065265970c +b87f2d4af6d026e4d2836bc3d390a4a18e98a6e386282ce96744603bab74974272e97ac2da281afa21885e2cbb3a8001 +991ece62bf07d1a348dd22191868372904b9f8cf065ae7aa4e44fd24a53faf6d851842e35fb472895963aa1992894918 +a8c53dea4c665b30e51d22ca6bc1bc78aaf172b0a48e64a1d4b93439b053877ec26cb5221c55efd64fa841bbf7d5aff4 +93487ec939ed8e740f15335b58617c3f917f72d07b7a369befd479ae2554d04deb240d4a14394b26192efae4d2f4f35d +a44793ab4035443f8f2968a40e043b4555960193ffa3358d22112093aadfe2c136587e4139ffd46d91ed4107f61ea5e0 +b13fe033da5f0d227c75927d3dacb06dbaf3e1322f9d5c7c009de75cdcba5e308232838785ab69a70f0bedea755e003f +970a29b075faccd0700fe60d1f726bdebf82d2cc8252f4a84543ebd3b16f91be42a75c9719a39c4096139f0f31393d58 +a4c3eb1f7160f8216fc176fb244df53008ff32f2892363d85254002e66e2de21ccfe1f3b1047589abee50f29b9d507e3 +8c552885eab04ba40922a8f0c3c38c96089c95ff1405258d3f1efe8d179e39e1295cbf67677894c607ae986e4e6b1fb0 +b3671746fa7f848c4e2ae6946894defadd815230b906b419143523cc0597bc1d6c0a4c1e09d49b66b4a2c11cde3a4de3 +937a249a95813a5e2ef428e355efd202e15a37d73e56cfb7e57ea9f943f2ce5ca8026f2f1fd25bf164ba89d07077d858 +83646bdf6053a04aa9e2f112499769e5bd5d0d10f2e13db3ca89bd45c0b3b7a2d752b7d137fb3909f9c62b78166c9339 +b4eac4b91e763666696811b7ed45e97fd78310377ebea1674b58a2250973f80492ac35110ed1240cd9bb2d17493d708c +82db43a99bc6573e9d92a3fd6635dbbb249ac66ba53099c3c0c8c8080b121dd8243cd5c6e36ba0a4d2525bae57f5c89c +a64d6a264a681b49d134c655d5fc7756127f1ee7c93d328820f32bca68869f53115c0d27fef35fe71f7bc4fdaed97348 +8739b7a9e2b4bc1831e7f04517771bc7cde683a5e74e052542517f8375a2f64e53e0d5ac925ef722327e7bb195b4d1d9 +8f337cdd29918a2493515ebb5cf702bbe8ecb23b53c6d18920cc22f519e276ca9b991d3313e2d38ae17ae8bdfa4f8b7e +b0edeab9850e193a61f138ef2739fc42ceec98f25e7e8403bfd5fa34a7bc956b9d0898250d18a69fa4625a9b3d6129da +a9920f26fe0a6d51044e623665d998745c9eca5bce12051198b88a77d728c8238f97d4196f26e43b24f8841500b998d0 +86e655d61502b979eeeeb6f9a7e1d0074f936451d0a1b0d2fa4fb3225b439a3770767b649256fe481361f481a8dbc276 +84d3b32fa62096831cc3bf013488a9f3f481dfe293ae209ed19585a03f7db8d961a7a9dd0db82bd7f62d612707575d9c +81c827826ec9346995ffccf62a241e3b2d32f7357acd1b1f8f7a7dbc97022d3eb51b8a1230e23ce0b401d2e535e8cd78 +94a1e40c151191c5b055b21e86f32e69cbc751dcbdf759a48580951834b96a1eed75914c0d19a38aefd21fb6c8d43d0c +ab890222b44bc21b71f7c75e15b6c6e16bb03371acce4f8d4353ff3b8fcd42a14026589c5ed19555a3e15e4d18bfc3a3 +accb0be851e93c6c8cc64724cdb86887eea284194b10e7a43c90528ed97e9ec71ca69c6fac13899530593756dd49eab2 +b630220aa9e1829c233331413ee28c5efe94ea8ea08d0c6bfd781955078b43a4f92915257187d8526873e6c919c6a1de +add389a4d358c585f1274b73f6c3c45b58ef8df11f9d11221f620e241bf3579fba07427b288c0c682885a700cc1fa28d +a9fe6ca8bf2961a3386e8b8dcecc29c0567b5c0b3bcf3b0f9169f88e372b80151af883871fc5229815f94f43a6f5b2b0 +ad839ae003b92b37ea431fa35998b46a0afc3f9c0dd54c3b3bf7a262467b13ff3c323ada1c1ae02ac7716528bdf39e3e +9356d3fd0edcbbb65713c0f2a214394f831b26f792124b08c5f26e7f734b8711a87b7c4623408da6a091c9aef1f6af3c +896b25b083c35ac67f0af3784a6a82435b0e27433d4d74cd6d1eafe11e6827827799490fb1c77c11de25f0d75f14e047 +8bfa019391c9627e8e5f05c213db625f0f1e51ec68816455f876c7e55b8f17a4f13e5aae9e3fb9e1cf920b1402ee2b40 +8ba3a6faa6a860a8f3ce1e884aa8769ceded86380a86520ab177ab83043d380a4f535fe13884346c5e51bee68da6ab41 +a8292d0844084e4e3bb7af92b1989f841a46640288c5b220fecfad063ee94e86e13d3d08038ec2ac82f41c96a3bfe14d +8229bb030b2fc566e11fd33c7eab7a1bb7b49fed872ea1f815004f7398cb03b85ea14e310ec19e1f23e0bdaf60f8f76c +8cfbf869ade3ec551562ff7f63c2745cc3a1f4d4dc853a0cd42dd5f6fe54228f86195ea8fe217643b32e9f513f34a545 +ac52a3c8d3270ddfe1b5630159da9290a5ccf9ccbdef43b58fc0a191a6c03b8a5974cf6e2bbc7bd98d4a40a3581482d7 +ab13decb9e2669e33a7049b8eca3ca327c40dea15ad6e0e7fa63ed506db1d258bc36ac88b35f65cae0984e937eb6575d +b5e748eb1a7a1e274ff0cc56311c198f2c076fe4b7e73e5f80396fe85358549df906584e6bb2c8195b3e2be7736850a5 +b5cb911325d8f963c41f691a60c37831c7d3bbd92736efa33d1f77a22b3fde7f283127256c2f47e197571e6fe0b46149 +8a01dc6ed1b55f26427a014faa347130738b191a06b800e32042a46c13f60b49534520214359d68eb2e170c31e2b8672 +a72fa874866e19b2efb8e069328362bf7921ec375e3bcd6b1619384c3f7ee980f6cf686f3544e9374ff54b4d17a1629c +8db21092f7c5f110fba63650b119e82f4b42a997095d65f08f8237b02dd66fdf959f788df2c35124db1dbd330a235671 +8c65d50433d9954fe28a09fa7ba91a70a590fe7ba6b3060f5e4be0f6cef860b9897fa935fb4ebc42133524eb071dd169 +b4614058e8fa21138fc5e4592623e78b8982ed72aa35ee4391b164f00c68d277fa9f9eba2eeefc890b4e86eba5124591 +ab2ad3a1bce2fbd55ca6b7c23786171fe1440a97d99d6df4d80d07dd56ac2d7203c294b32fc9e10a6c259381a73f24a1 +812ae3315fdc18774a8da3713a4679e8ed10b9405edc548c00cacbe25a587d32040566676f135e4723c5dc25df5a22e9 +a464b75f95d01e5655b54730334f443c8ff27c3cb79ec7af4b2f9da3c2039c609908cd128572e1fd0552eb597e8cef8d +a0db3172e93ca5138fe419e1c49a1925140999f6eff7c593e5681951ee0ec1c7e454c851782cbd2b8c9bc90d466e90e0 +806db23ba7d00b87d544eed926b3443f5f9c60da6b41b1c489fba8f73593b6e3b46ebfcab671ee009396cd77d5e68aa1 +8bfdf2c0044cc80260994e1c0374588b6653947b178e8b312be5c2a05e05767e98ea15077278506aee7df4fee1aaf89e +827f6558c16841b5592ff089c9c31e31eb03097623524394813a2e4093ad2d3f8f845504e2af92195aaa8a1679d8d692 +925c4f8eab2531135cd71a4ec88e7035b5eea34ba9d799c5898856080256b4a15ed1a746e002552e2a86c9c157e22e83 +a9f9a368f0e0b24d00a35b325964c85b69533013f9c2cfad9708be5fb87ff455210f8cb8d2ce3ba58ca3f27495552899 +8ac0d3bebc1cae534024187e7c71f8927ba8fcc6a1926cb61c2b6c8f26bb7831019e635a376146c29872a506784a4aaa +97c577be2cbbfdb37ad754fae9df2ada5fc5889869efc7e18a13f8e502fbf3f4067a509efbd46fd990ab47ce9a70f5a8 +935e7d82bca19f16614aa43b4a3474e4d20d064e4bfdf1cea2909e5c9ab72cfe3e54dc50030e41ee84f3588cebc524e9 +941aafc08f7c0d94cebfbb1f0aad5202c02e6e37f2c12614f57e727efa275f3926348f567107ee6d8914dd71e6060271 +af0fbc1ba05b4b5b63399686df3619968be5d40073de0313cbf5f913d3d4b518d4c249cdd2176468ccaa36040a484f58 +a0c414f23f46ca6d69ce74c6f8a00c036cb0edd098af0c1a7d39c802b52cfb2d5dbdf93fb0295453d4646e2af7954d45 +909cf39e11b3875bb63b39687ae1b5d1f5a15445e39bf164a0b14691b4ddb39a8e4363f584ef42213616abc4785b5d66 +a92bac085d1194fbd1c88299f07a061d0bdd3f980b663e81e6254dbb288bf11478c0ee880e28e01560f12c5ccb3c0103 +841705cd5cd76b943e2b7c5e845b9dd3c8defe8ef67e93078d6d5e67ade33ad4b0fd413bc196f93b0a4073c855cd97d4 +8e7eb8364f384a9161e81d3f1d52ceca9b65536ae49cc35b48c3e2236322ba4ae9973e0840802d9fa4f4d82ea833544f +aed3ab927548bc8bec31467ba80689c71a168e34f50dcb6892f19a33a099f5aa6b3f9cb79f5c0699e837b9a8c7f27efe +b8fbf7696210a36e20edabd77839f4dfdf50d6d015cdf81d587f90284a9bcef7d2a1ff520728d7cc69a4843d6c20dedd +a9d533769ce6830211c884ae50a82a7bf259b44ac71f9fb11f0296fdb3981e6b4c1753fe744647b247ebc433a5a61436 +8b4bdf90d33360b7f428c71cde0a49fb733badba8c726876945f58c620ce7768ae0e98fc8c31fa59d8955a4823336bb1 +808d42238e440e6571c59e52a35ae32547d502dc24fd1759d8ea70a7231a95859baf30b490a4ba55fa2f3aaa11204597 +85594701f1d2fee6dc1956bc44c7b31db93bdeec2f3a7d622c1a08b26994760773e3d57521a44cfd7e407ac3fd430429 +a66de045ce7173043a6825e9dc440ac957e2efb6df0a337f4f8003eb0c719d873a52e6eba3cb0d69d977ca37d9187674 +87a1c6a1fdff993fa51efa5c3ba034c079c0928a7d599b906336af7c2dcab9721ceaf3108c646490af9dff9a754f54b3 +926424223e462ceb75aed7c22ade8a7911a903b7e5dd4bc49746ddce8657f4616325cd12667d4393ac52cdd866396d0e +b5dc96106593b42b30f06f0b0a1e0c1aafc70432e31807252d3674f0b1ea5e58eac8424879d655c9488d85a879a3e572 +997ca0987735cc716507cb0124b1d266d218b40c9d8e0ecbf26a1d65719c82a637ce7e8be4b4815d307df717bde7c72a +92994d3f57a569b7760324bb5ae4e8e14e1633d175dab06aa57b8e391540e05f662fdc08b8830f489a063f59b689a688 +a8087fcc6aa4642cb998bea11facfe87eb33b90a9aa428ab86a4124ad032fc7d2e57795311a54ec9f55cc120ebe42df1 +a9bd7d1de6c0706052ca0b362e2e70e8c8f70f1f026ea189b4f87a08ce810297ebfe781cc8004430776c54c1a05ae90c +856d33282e8a8e33a3d237fb0a0cbabaf77ba9edf2fa35a831fdafcadf620561846aa6cbb6bdc5e681118e1245834165 +9524a7aa8e97a31a6958439c5f3339b19370f03e86b89b1d02d87e4887309dbbe9a3a8d2befd3b7ed5143c8da7e0a8ad +824fdf433e090f8acbd258ac7429b21f36f9f3b337c6d0b71d1416a5c88a767883e255b2888b7c906dd2e9560c4af24c +88c7fee662ca7844f42ed5527996b35723abffd0d22d4ca203b9452c639a5066031207a5ae763dbc0865b3299d19b1ec +919dca5c5595082c221d5ab3a5bc230f45da7f6dec4eb389371e142c1b9c6a2c919074842479c2844b72c0d806170c0c +b939be8175715e55a684578d8be3ceff3087f60fa875fff48e52a6e6e9979c955efef8ff67cfa2b79499ea23778e33b0 +873b6db725e7397d11bc9bed9ac4468e36619135be686790a79bc6ed4249058f1387c9a802ea86499f692cf635851066 +aeae06db3ec47e9e5647323fa02fac44e06e59b885ad8506bf71b184ab3895510c82f78b6b22a5d978e8218e7f761e9f +b99c0a8359c72ab88448bae45d4bf98797a26bca48b0d4460cd6cf65a4e8c3dd823970ac3eb774ae5d0cea4e7fadf33e +8f10c8ec41cdfb986a1647463076a533e6b0eec08520c1562401b36bb063ac972aa6b28a0b6ce717254e35940b900e3c +a106d9be199636d7add43b942290269351578500d8245d4aae4c083954e4f27f64740a3138a66230391f2d0e6043a8de +a469997908244578e8909ff57cffc070f1dbd86f0098df3cfeb46b7a085cfecc93dc69ee7cad90ff1dc5a34d50fe580c +a4ef087bea9c20eb0afc0ee4caba7a9d29dfa872137828c721391273e402fb6714afc80c40e98bbd8276d3836bffa080 +b07a013f73cd5b98dae0d0f9c1c0f35bff8a9f019975c4e1499e9bee736ca6fcd504f9bc32df1655ff333062382cff04 +b0a77188673e87cc83348c4cc5db1eecf6b5184e236220c8eeed7585e4b928db849944a76ec60ef7708ef6dac02d5592 +b1284b37e59b529f0084c0dacf0af6c0b91fc0f387bf649a8c74819debf606f7b07fc3e572500016fb145ec2b24e9f17 +97b20b5b4d6b9129da185adfbf0d3d0b0faeba5b9715f10299e48ea0521709a8296a9264ce77c275a59c012b50b6519a +b9d37e946fae5e4d65c1fbfacc8a62e445a1c9d0f882e60cca649125af303b3b23af53c81d7bac544fb7fcfc7a314665 +8e5acaac379f4bb0127efbef26180f91ff60e4c525bc9b798fc50dfaf4fe8a5aa84f18f3d3cfb8baead7d1e0499af753 +b0c0b8ab1235bf1cda43d4152e71efc1a06c548edb964eb4afceb201c8af24240bf8ab5cae30a08604e77432b0a5faf0 +8cc28d75d5c8d062d649cbc218e31c4d327e067e6dbd737ec0a35c91db44fbbd0d40ec424f5ed79814add16947417572 +95ae6219e9fd47efaa9cb088753df06bc101405ba50a179d7c9f7c85679e182d3033f35b00dbba71fdcd186cd775c52e +b5d28fa09f186ebc5aa37453c9b4d9474a7997b8ae92748ecb940c14868792292ac7d10ade01e2f8069242b308cf97e5 +8c922a0faa14cc6b7221f302df3342f38fc8521ec6c653f2587890192732c6da289777a6cd310747ea7b7d104af95995 +b9ad5f660b65230de54de535d4c0fcae5bc6b59db21dea5500fdc12eea4470fb8ea003690fdd16d052523418d5e01e8c +a39a9dd41a0ff78c82979483731f1cd68d3921c3e9965869662c22e02dde3877802e180ba93f06e7346f96d9fa9261d2 +8b32875977ec372c583b24234c27ed73aef00cdff61eb3c3776e073afbdeade548de9497c32ec6d703ff8ad0a5cb7fe4 +9644cbe755a5642fe9d26cfecf170d3164f1848c2c2e271d5b6574a01755f3980b3fc870b98cf8528fef6ecef4210c16 +81ea9d1fdd9dd66d60f40ce0712764b99da9448ae0b300f8324e1c52f154e472a086dda840cb2e0b9813dc8ce8afd4b5 +906aaa4a7a7cdf01909c5cfbc7ded2abc4b869213cbf7c922d4171a4f2e637e56f17020b852ad339d83b8ac92f111666 +939b5f11acbdeff998f2a080393033c9b9d8d5c70912ea651c53815c572d36ee822a98d6dfffb2e339f29201264f2cf4 +aba4898bf1ccea9b9e2df1ff19001e05891581659c1cbbde7ee76c349c7fc7857261d9785823c9463a8aea3f40e86b38 +83ca1a56b8a0be4820bdb5a9346357c68f9772e43f0b887729a50d2eb2a326bbcede676c8bf2e51d7c89bbd8fdb778a6 +94e86e9fe6addfe2c3ee3a547267ed921f4230d877a85bb4442c2d9350c2fa9a9c54e6fe662de82d1a2407e4ab1691c2 +a0cc3bdef671a59d77c6984338b023fa2b431b32e9ed2abe80484d73edc6540979d6f10812ecc06d4d0c5d4eaca7183c +b5343413c1b5776b55ea3c7cdd1f3af1f6bd802ea95effe3f2b91a523817719d2ecc3f8d5f3cc2623ace7e35f99ca967 +92085d1ed0ed28d8cabe3e7ff1905ed52c7ceb1eac5503760c52fb5ee3a726aba7c90b483c032acc3f166b083d7ec370 +8ec679520455275cd957fca8122724d287db5df7d29f1702a322879b127bff215e5b71d9c191901465d19c86c8d8d404 +b65eb2c63d8a30332eb24ee8a0c70156fc89325ebbb38bacac7cf3f8636ad8a472d81ccca80423772abc00192d886d8a +a9fe1c060b974bee4d590f2873b28635b61bfcf614e61ff88b1be3eee4320f4874e21e8d666d8ac8c9aba672efc6ecae +b3fe2a9a389c006a831dea7e777062df84b5c2803f9574d7fbe10b7e1c125817986af8b6454d6be9d931a5ac94cfe963 +95418ad13b734b6f0d33822d9912c4c49b558f68d08c1b34a0127fcfa666bcae8e6fda8832d2c75bb9170794a20e4d7c +a9a7df761e7f18b79494bf429572140c8c6e9d456c4d4e336184f3f51525a65eb9582bea1e601bdb6ef8150b7ca736a5 +a0de03b1e75edf7998c8c1ac69b4a1544a6fa675a1941950297917366682e5644a4bda9cdeedfaf9473d7fccd9080b0c +a61838af8d95c95edf32663a68f007d95167bf6e41b0c784a30b22d8300cfdd5703bd6d16e86396638f6db6ae7e42a85 +8866d62084d905c145ff2d41025299d8b702ac1814a7dec4e277412c161bc9a62fed735536789cb43c88693c6b423882 +91da22c378c81497fe363e7f695c0268443abee50f8a6625b8a41e865638a643f07b157ee566de09ba09846934b4e2d7 +941d21dd57c9496aa68f0c0c05507405fdd413acb59bc668ce7e92e1936c68ec4b065c3c30123319884149e88228f0b2 +a77af9b094bc26966ddf2bf9e1520c898194a5ccb694915950dadc204facbe3066d3d89f50972642d76b14884cfbaa21 +8e76162932346869f4618bde744647f7ab52ab498ad654bdf2a4feeb986ac6e51370841e5acbb589e38b6e7142bb3049 +b60979ace17d6937ece72e4f015da4657a443dd01cebc7143ef11c09e42d4aa8855999a65a79e2ea0067f31c9fc2ab0f +b3e2ffdd5ee6fd110b982fd4fad4b93d0fca65478f986d086eeccb0804960bfaa1919afa743c2239973ea65091fe57d2 +8ce0ce05e7d7160d44574011da687454dbd3c8b8290aa671731b066e2c82f8cf2d63cb8e932d78c6122ec610e44660e6 +ab005dd8d297045c39e2f72fb1c48edb501ccf3575d3d04b9817b3afee3f0bb0f3f53f64bda37d1d9cde545aae999bae +95bd7edb4c4cd60e3cb8a72558845a3cce6bb7032ccdf33d5a49ebb6ddf203bc3c79e7b7e550735d2d75b04c8b2441e8 +889953ee256206284094e4735dbbb17975bafc7c3cb94c9fbfee4c3e653857bfd49e818f64a47567f721b98411a3b454 +b188423e707640ab0e75a061e0b62830cde8afab8e1ad3dae30db69ffae4e2fc005bababbdcbd7213b918ed4f70e0c14 +a97e0fafe011abd70d4f99a0b36638b3d6e7354284588f17a88970ed48f348f88392779e9a038c6cbc9208d998485072 +87db11014a91cb9b63e8dfaa82cdebca98272d89eb445ee1e3ff9dbaf2b3fad1a03b888cffc128e4fe208ed0dddece0f +aad2e40364edd905d66ea4ac9d51f9640d6fda9a54957d26ba233809851529b32c85660fa401dbee3679ec54fa6dd966 +863e99336ca6edf03a5a259e59a2d0f308206e8a2fb320cfc0be06057366df8e0f94b33a28f574092736b3c5ada84270 +b34bcc56a057589f34939a1adc51de4ff6a9f4fee9c7fa9aa131e28d0cf0759a0c871b640162acdfbf91f3f1b59a3703 +935dd28f2896092995c5eff1618e5b6efe7a40178888d7826da9b0503c2d6e68a28e7fac1a334e166d0205f0695ef614 +b842cd5f8f5de5ca6c68cb4a5c1d7b451984930eb4cc18fd0934d52fdc9c3d2d451b1c395594d73bc3451432bfba653f +9014537885ce2debad736bc1926b25fdab9f69b216bf024f589c49dc7e6478c71d595c3647c9f65ff980b14f4bb2283b +8e827ccca1dd4cd21707140d10703177d722be0bbe5cac578db26f1ef8ad2909103af3c601a53795435b27bf95d0c9ed +8a0b8ad4d466c09d4f1e9167410dbe2edc6e0e6229d4b3036d30f85eb6a333a18b1c968f6ca6d6889bb08fecde017ef4 +9241ee66c0191b06266332dc9161dede384c4bb4e116dbd0890f3c3790ec5566da4568243665c4725b718ac0f6b5c179 +aeb4d5fad81d2b505d47958a08262b6f1b1de9373c2c9ba6362594194dea3e002ab03b8cbb43f867be83065d3d370f19 +8781bc83bb73f7760628629fe19e4714b494dbed444c4e4e4729b7f6a8d12ee347841a199888794c2234f51fa26fc2b9 +b58864f0acd1c2afa29367e637cbde1968d18589245d9936c9a489c6c495f54f0113ecdcbe4680ac085dd3c397c4d0c3 +94a24284afaeead61e70f3e30f87248d76e9726759445ca18cdb9360586c60cc9f0ec1c397f9675083e0b56459784e2e +aed358853f2b54dcbddf865e1816c2e89be12e940e1abfa661e2ee63ffc24a8c8096be2072fa83556482c0d89e975124 +b95374e6b4fc0765708e370bc881e271abf2e35c08b056a03b847e089831ef4fe3124b9c5849d9c276eb2e35b3daf264 +b834cdbcfb24c8f84bfa4c552e7fadc0028a140952fd69ed13a516e1314a4cd35d4b954a77d51a1b93e1f5d657d0315d +8fb6d09d23bfa90e7443753d45a918d91d75d8e12ec7d016c0dfe94e5c592ba6aaf483d2f16108d190822d955ad9cdc3 +aa315cd3c60247a6ad4b04f26c5404c2713b95972843e4b87b5a36a89f201667d70f0adf20757ebe1de1b29ae27dda50 +a116862dca409db8beff5b1ccd6301cdd0c92ca29a3d6d20eb8b87f25965f42699ca66974dd1a355200157476b998f3b +b4c2f5fe173c4dc8311b60d04a65ce1be87f070ac42e13cd19c6559a2931c6ee104859cc2520edebbc66a13dc7d30693 +8d4a02bf99b2260c334e7d81775c5cf582b00b0c982ce7745e5a90624919028278f5e9b098573bad5515ce7fa92a80c8 +8543493bf564ce6d97bd23be9bff1aba08bd5821ca834f311a26c9139c92a48f0c2d9dfe645afa95fec07d675d1fd53b +9344239d13fde08f98cb48f1f87d34cf6abe8faecd0b682955382a975e6eed64e863fa19043290c0736261622e00045c +aa49d0518f343005ca72b9e6c7dcaa97225ce6bb8b908ebbe7b1a22884ff8bfb090890364e325a0d414ad180b8f161d1 +907d7fd3e009355ab326847c4a2431f688627faa698c13c03ffdd476ecf988678407f029b8543a475dcb3dafdf2e7a9c +845f1f10c6c5dad2adc7935f5cd2e2b32f169a99091d4f1b05babe7317b9b1cdce29b5e62f947dc621b9acbfe517a258 +8f3be8e3b380ea6cdf9e9c237f5e88fd5a357e5ded80ea1fc2019810814de82501273b4da38916881125b6fa0cfd4459 +b9c7f487c089bf1d20c822e579628db91ed9c82d6ca652983aa16d98b4270c4da19757f216a71b9c13ddee3e6e43705f +8ba2d8c88ad2b872db104ea8ddbb006ec2f3749fd0e19298a804bb3a5d94de19285cc7fb19fee58a66f7851d1a66c39f +9375ecd3ed16786fe161af5d5c908f56eeb467a144d3bbddfc767e90065b7c94fc53431adebecba2b6c9b5821184d36e +a49e069bfadb1e2e8bff6a4286872e2a9765d62f0eaa4fcb0e5af4bbbed8be3510fb19849125a40a8a81d1e33e81c3eb +9522cc66757b386aa6b88619525c8ce47a5c346d590bb3647d12f991e6c65c3ab3c0cfc28f0726b6756c892eae1672be +a9a0f1f51ff877406fa83a807aeb17b92a283879f447b8a2159653db577848cc451cbadd01f70441e351e9ed433c18bc +8ff7533dcff6be8714df573e33f82cf8e9f2bcaaa43e939c4759d52b754e502717950de4b4252fb904560fc31dce94a4 +959724671e265a28d67c29d95210e97b894b360da55e4cf16e6682e7912491ed8ca14bfaa4dce9c25a25b16af580494f +92566730c3002f4046c737032487d0833c971e775de59fe02d9835c9858e2e3bc37f157424a69764596c625c482a2219 +a84b47ceff13ed9c3e5e9cdf6739a66d3e7c2bd8a6ba318fefb1a9aecf653bb2981da6733ddb33c4b0a4523acc429d23 +b4ddf571317e44f859386d6140828a42cf94994e2f1dcbcc9777f4eebbfc64fc1e160b49379acc27c4672b8e41835c5d +8ab95c94072b853d1603fdd0a43b30db617d13c1d1255b99075198e1947bfa5f59aed2b1147548a1b5e986cd9173d15c +89511f2eab33894fd4b3753d24249f410ff7263052c1fef6166fc63a79816656b0d24c529e45ccce6be28de6e375d916 +a0866160ca63d4f2be1b4ea050dac6b59db554e2ebb4e5b592859d8df339b46fd7cb89aaed0951c3ee540aee982c238a +8fcc5cbba1b94970f5ff2eb1922322f5b0aa7d918d4b380c9e7abfd57afd8b247c346bff7b87af82efbce3052511cd1b +99aeb2a5e846b0a2874cca02c66ed40d5569eb65ab2495bc3f964a092e91e1517941f2688e79f8cca49cd3674c4e06dc +b7a096dc3bad5ca49bee94efd884aa3ff5615cf3825cf95fbe0ce132e35f46581d6482fa82666c7ef5f1643eaee8f1ca +94393b1da6eaac2ffd186b7725eca582f1ddc8cdd916004657f8a564a7c588175cb443fc6943b39029f5bbe0add3fad8 +884b85fe012ccbcd849cb68c3ad832d83b3ef1c40c3954ffdc97f103b1ed582c801e1a41d9950f6bddc1d11f19d5ec76 +b00061c00131eded8305a7ce76362163deb33596569afb46fe499a7c9d7a0734c084d336b38d168024c2bb42b58e7660 +a439153ac8e6ca037381e3240e7ba08d056c83d7090f16ed538df25901835e09e27de2073646e7d7f3c65056af6e4ce7 +830fc9ca099097d1f38b90e6843dc86f702be9d20bdacc3e52cae659dc41df5b8d2c970effa6f83a5229b0244a86fe22 +b81ea2ffaaff2bb00dd59a9ab825ba5eed4db0d8ac9c8ed1a632ce8f086328a1cddd045fbe1ace289083c1325881b7e7 +b51ea03c58daf2db32c99b9c4789b183365168cb5019c72c4cc91ac30b5fb7311d3db76e6fa41b7cd4a8c81e2f6cdc94 +a4170b2c6d09ca5beb08318730419b6f19215ce6c631c854116f904be3bc30dd85a80c946a8ab054d3e307afaa3f8fbc +897cc42ff28971ff54d2a55dd6b35cfb8610ac902f3c06e3a5cea0e0a257e870c471236a8e84709211c742a09c5601a6 +a18f2e98d389dace36641621488664ecbb422088ab03b74e67009b8b8acacaaa24fdcf42093935f355207d934adc52a8 +92adcfb678cc2ba19c866f3f2b988fdcb4610567f3ab436cc0cb9acaf5a88414848d71133ebdbec1983e38e6190f1b5f +a86d43c2ce01b366330d3b36b3ca85f000c3548b8297e48478da1ee7d70d8576d4650cba7852ed125c0d7cb6109aa7f3 +8ed31ceed9445437d7732dce78a762d72ff32a7636bfb3fd7974b7ae15db414d8184a1766915244355deb354fbc5803b +9268f70032584f416e92225d65af9ea18c466ebc7ae30952d56a4e36fd9ea811dde0a126da9220ba3c596ec54d8a335e +9433b99ee94f2d3fbdd63b163a2bdf440379334c52308bd24537f7defd807145a062ff255a50d119a7f29f4b85d250e3 +90ce664f5e4628a02278f5cf5060d1a34f123854634b1870906e5723ac9afd044d48289be283b267d45fcbf3f4656aaf +aaf21c4d59378bb835d42ae5c5e5ab7a3c8c36a59e75997989313197752b79a472d866a23683b329ea69b048b87fa13e +b83c0589b304cec9ede549fde54f8a7c2a468c6657da8c02169a6351605261202610b2055c639b9ed2d5b8c401fb8f56 +9370f326ea0f170c2c05fe2c5a49189f20aec93b6b18a5572a818cd4c2a6adb359e68975557b349fb54f065d572f4c92 +ac3232fa5ce6f03fca238bef1ce902432a90b8afce1c85457a6bee5571c033d4bceefafc863af04d4e85ac72a4d94d51 +80d9ea168ff821b22c30e93e4c7960ce3ad3c1e6deeebedd342a36d01bd942419b187e2f382dbfd8caa34cca08d06a48 +a387a3c61676fb3381eefa2a45d82625635a666e999aba30e3b037ec9e040f414f9e1ad9652abd3bcad63f95d85038db +a1b229fe32121e0b391b0f6e0180670b9dc89d79f7337de4c77ea7ad0073e9593846f06797c20e923092a08263204416 +92164a9d841a2b828cedf2511213268b698520f8d1285852186644e9a0c97512cafa4bfbe29af892c929ebccd102e998 +82ee2fa56308a67c7db4fd7ef539b5a9f26a1c2cc36da8c3206ba4b08258fbb3cec6fe5cdbd111433fb1ba2a1e275927 +8c77bfe9e191f190a49d46f05600603fa42345592539b82923388d72392404e0b29a493a15e75e8b068dddcd444c2928 +80b927f93ccf79dcf5c5b20bcf5a7d91d7a17bc0401bb7cc9b53a6797feac31026eb114257621f5a64a52876e4474cc1 +b6b68b6501c37804d4833d5a063dd108a46310b1400549074e3cac84acc6d88f73948b7ad48d686de89c1ec043ae8c1a +ab3da00f9bdc13e3f77624f58a3a18fc3728956f84b5b549d62f1033ae4b300538e53896e2d943f160618e05af265117 +b6830e87233b8eace65327fdc764159645b75d2fd4024bf8f313b2dd5f45617d7ecfb4a0b53ccafb5429815a9a1adde6 +b9251cfe32a6dc0440615aadcd98b6b1b46e3f4e44324e8f5142912b597ee3526bea2431e2b0282bb58f71be5b63f65e +af8d70711e81cdddfb39e67a1b76643292652584c1ce7ce4feb1641431ad596e75c9120e85f1a341e7a4da920a9cdd94 +98cd4e996594e89495c078bfd52a4586b932c50a449a7c8dfdd16043ca4cda94dafbaa8ad1b44249c99bbcc52152506e +b9fc6d1c24f48404a4a64fbe3e43342738797905db46e4132aee5f086aaa4c704918ad508aaefa455cfe1b36572e6242 +a365e871d30ba9291cedaba1be7b04e968905d003e9e1af7e3b55c5eb048818ae5b913514fb08b24fb4fbdccbb35d0b8 +93bf99510971ea9af9f1e364f1234c898380677c8e8de9b0dd24432760164e46c787bc9ec42a7ad450500706cf247b2d +b872f825a5b6e7b9c7a9ddfeded3516f0b1449acc9b4fd29fc6eba162051c17416a31e5be6d3563f424d28e65bab8b8f +b06b780e5a5e8eb4f4c9dc040f749cf9709c8a4c9ef15e925f442b696e41e5095db0778a6c73bcd329b265f2c6955c8b +848f1a981f5fc6cd9180cdddb8d032ad32cdfa614fc750d690dbae36cc0cd355cbf1574af9b3ffc8b878f1b2fafb9544 +a03f48cbff3e9e8a3a655578051a5ae37567433093ac500ed0021c6250a51b767afac9bdb194ee1e3eac38a08c0eaf45 +b5be78ce638ff8c4aa84352b536628231d3f7558c5be3bf010b28feac3022e64691fa672f358c8b663904aebe24a54ed +a9d4da70ff676fa55d1728ba6ab03b471fa38b08854d99e985d88c2d050102d8ccffbe1c90249a5607fa7520b15fe791 +8fe9f7092ffb0b69862c8e972fb1ecf54308c96d41354ed0569638bb0364f1749838d6d32051fff1599112978c6e229c +ae6083e95f37770ecae0df1e010456f165d96cfe9a7278c85c15cffd61034081ce5723e25e2bede719dc9341ec8ed481 +a260891891103089a7afbd9081ea116cfd596fd1015f5b65e10b0961eb37fab7d09c69b7ce4be8bf35e4131848fb3fe4 +8d729fa32f6eb9fd2f6a140bef34e8299a2f3111bffd0fe463aa8622c9d98bfd31a1df3f3e87cd5abc52a595f96b970e +a30ec6047ae4bc7da4daa7f4c28c93aedb1112cfe240e681d07e1a183782c9ff6783ac077c155af23c69643b712a533f +ac830726544bfe7b5467339e5114c1a75f2a2a8d89453ce86115e6a789387e23551cd64620ead6283dfa4538eb313d86 +8445c135b7a48068d8ed3e011c6d818cfe462b445095e2fbf940301e50ded23f272d799eea47683fc027430ce14613ef +95785411715c9ae9d8293ce16a693a2aa83e3cb1b4aa9f76333d0da2bf00c55f65e21e42e50e6c5772ce213dd7b4f7a0 +b273b024fa18b7568c0d1c4d2f0c4e79ec509dafac8c5951f14192d63ddbcf2d8a7512c1c1b615cc38fa3e336618e0c5 +a78b9d3ea4b6a90572eb27956f411f1d105fdb577ee2ffeec9f221da9b45db84bfe866af1f29597220c75e0c37a628d8 +a4be2bf058c36699c41513c4d667681ce161a437c09d81383244fc55e1c44e8b1363439d0cce90a3e44581fb31d49493 +b6eef13040f17dd4eba22aaf284d2f988a4a0c4605db44b8d2f4bf9567ac794550b543cc513c5f3e2820242dd704152e +87eb00489071fa95d008c5244b88e317a3454652dcb1c441213aa16b28cd3ecaa9b22fec0bdd483c1df71c37119100b1 +92d388acdcb49793afca329cd06e645544d2269234e8b0b27d2818c809c21726bc9cf725651b951e358a63c83dedee24 +ae27e219277a73030da27ab5603c72c8bd81b6224b7e488d7193806a41343dff2456132274991a4722fdb0ef265d04cd +97583e08ecb82bbc27c0c8476d710389fa9ffbead5c43001bd36c1b018f29faa98de778644883e51870b69c5ffb558b5 +90a799a8ce73387599babf6b7da12767c0591cadd36c20a7990e7c05ea1aa2b9645654ec65308ee008816623a2757a6a +a1b47841a0a2b06efd9ab8c111309cc5fc9e1d5896b3e42ed531f6057e5ade8977c29831ce08dbda40348386b1dcc06d +b92b8ef59bbddb50c9457691bc023d63dfcc54e0fd88bd5d27a09e0d98ac290fc90e6a8f6b88492043bf7c87fac8f3e4 +a9d6240b07d62e22ec8ab9b1f6007c975a77b7320f02504fc7c468b4ee9cfcfd945456ff0128bc0ef2174d9e09333f8d +8e96534c94693226dc32bca79a595ca6de503af635f802e86442c67e77564829756961d9b701187fe91318da515bf0e6 +b6ba290623cd8dd5c2f50931c0045d1cfb0c30877bc8fe58cbc3ff61ee8da100045a39153916efa1936f4aee0892b473 +b43baa7717fac02d4294f5b3bb5e58a65b3557747e3188b482410388daac7a9c177f762d943fd5dcf871273921213da8 +b9cf00f8fb5e2ef2b836659fece15e735060b2ea39b8e901d3dcbdcf612be8bf82d013833718c04cd46ffaa70b85f42e +8017d0c57419e414cbba504368723e751ef990cc6f05dad7b3c2de6360adc774ad95512875ab8337d110bf39a42026fa +ae7401048b838c0dcd4b26bb6c56d79d51964a0daba780970b6c97daee4ea45854ea0ac0e4139b3fe60dac189f84df65 +887b237b0cd0f816b749b21db0b40072f9145f7896c36916296973f9e6990ede110f14e5976c906d08987c9836cca57f +a88c3d5770148aee59930561ca1223aceb2c832fb5417e188dca935905301fc4c6c2c9270bc1dff7add490a125eb81c6 +b6cf9b02c0cd91895ad209e38c54039523f137b5848b9d3ad33ae43af6c20c98434952db375fe378de7866f2d0e8b18a +84ef3d322ff580c8ad584b1fe4fe346c60866eb6a56e982ba2cf3b021ecb1fdb75ecc6c29747adda86d9264430b3f816 +a0561c27224baf0927ad144cb71e31e54a064c598373fcf0d66aebf98ab7af1d8e2f343f77baefff69a6da750a219e11 +aa5cc43f5b8162b016f5e1b61214c0c9d15b1078911c650b75e6cdfb49b85ee04c6739f5b1687d15908444f691f732de +ad4ac099b935589c7b8fdfdf3db332b7b82bb948e13a5beb121ebd7db81a87d278024a1434bcf0115c54ca5109585c3d +8a00466abf3f109a1dcd19e643b603d3af23d42794ef8ca2514dd507ecea44a031ac6dbc18bd02f99701168b25c1791e +b00b5900dfad79645f8bee4e5adc7b84eb22e5b1e67df77ccb505b7fc044a6c08a8ea5faca662414eb945f874f884cea +950e204e5f17112250b22ea6bb8423baf522fc0af494366f18fe0f949f51d6e6812074a80875cf1ed9c8e7420058d541 +91e5cbf8bb1a1d50c81608c9727b414d0dd2fb467ebc92f100882a3772e54f94979cfdf8e373fdef7c7fcdd60fec9e00 +a093f6a857b8caaff80599c2e89c962b415ecbaa70d8fd973155fa976a284c6b29a855f5f7a3521134d00d2972755188 +b4d55a3551b00da54cc010f80d99ddd2544bde9219a3173dfaadf3848edc7e4056ab532fb75ac26f5f7141e724267663 +a03ea050fc9b011d1b04041b5765d6f6453a93a1819cd9bd6328637d0b428f08526466912895dcc2e3008ee58822e9a7 +99b12b3665e473d01bc6985844f8994fb65cb15745024fb7af518398c4a37ff215da8f054e8fdf3286984ae36a73ca5e +9972c7e7a7fb12e15f78d55abcaf322c11249cd44a08f62c95288f34f66b51f146302bce750ff4d591707075d9123bd2 +a64b4a6d72354e596d87cda213c4fc2814009461570ccb27d455bbe131f8d948421a71925425b546d8cf63d5458cd64b +91c215c73b195795ede2228b7ed1f6e37892e0c6b0f4a0b5a16c57aa1100c84df9239054a173b6110d6c2b7f4bf1ce52 +88807198910ec1303480f76a3683870246a995e36adaeadc29c22f0bdba8152fe705bd070b75de657b04934f7d0ccf80 +b37c0026c7b32eb02cacac5b55cb5fe784b8e48b2945c64d3037af83ece556a117f0ff053a5968c2f5fa230e291c1238 +94c768384ce212bc2387e91ce8b45e4ff120987e42472888a317abc9dcdf3563b62e7a61c8e98d7cdcbe272167d91fc6 +a10c2564936e967a390cb14ef6e8f8b04ea9ece5214a38837eda09e79e0c7970b1f83adf017c10efd6faa8b7ffa2c567 +a5085eed3a95f9d4b1269182ea1e0d719b7809bf5009096557a0674bde4201b0ddc1f0f16a908fc468846b3721748ce3 +87468eb620b79a0a455a259a6b4dfbc297d0d53336537b771254dd956b145dc816b195b7002647ea218552e345818a3f +ace2b77ffb87366af0a9cb5d27d6fc4a14323dbbf1643f5f3c4559306330d86461bb008894054394cbfaefeaa0bc2745 +b27f56e840a54fbd793f0b7a7631aa4cee64b5947e4382b2dfb5eb1790270288884c2a19afebe5dc0c6ef335d4531c1c +876e438633931f7f895062ee16c4b9d10428875f7bc79a8e156a64d379a77a2c45bf5430c5ab94330f03da352f1e9006 +a2512a252587d200d2092b44c914df54e04ff8bcef36bf631f84bde0cf5a732e3dc7f00f662842cfd74b0b0f7f24180e +827f1bc8f54a35b7a4bd8154f79bcc055e45faed2e74adf7cf21cca95df44d96899e847bd70ead6bb27b9c0ed97bbd8b +a0c92cf5a9ed843714f3aea9fe7b880f622d0b4a3bf66de291d1b745279accf6ba35097849691370f41732ba64b5966b +a63f5c1e222775658421c487b1256b52626c6f79cb55a9b7deb2352622cedffb08502042d622eb3b02c97f9c09f9c957 +8cc093d52651e65fb390e186db6cc4de559176af4624d1c44cb9b0e836832419dacac7b8db0627b96288977b738d785d +aa7b6a17dfcec146134562d32a12f7bd7fe9522e300859202a02939e69dbd345ed7ff164a184296268f9984f9312e8fc +8ac76721f0d2b679f023d06cbd28c85ae5f4b43c614867ccee88651d4101d4fd352dbdb65bf36bfc3ebc0109e4b0c6f9 +8d350f7c05fc0dcd9a1170748846fb1f5d39453e4cb31e6d1457bed287d96fc393b2ecc53793ca729906a33e59c6834a +b9913510dfc5056d7ec5309f0b631d1ec53e3a776412ada9aefdaf033c90da9a49fdde6719e7c76340e86599b1f0eec2 +94955626bf4ce87612c5cfffcf73bf1c46a4c11a736602b9ba066328dc52ad6d51e6d4f53453d4ed55a51e0aad810271 +b0fcab384fd4016b2f1e53f1aafd160ae3b1a8865cd6c155d7073ecc1664e05b1d8bca1def39c158c7086c4e1103345e +827de3f03edfbde08570b72de6662c8bfa499b066a0a27ebad9b481c273097d17a5a0a67f01553da5392ec3f149b2a78 +ab7940384c25e9027c55c40df20bd2a0d479a165ced9b1046958353cd69015eeb1e44ed2fd64e407805ba42df10fc7bf +8ad456f6ff8cd58bd57567d931f923d0c99141978511b17e03cab7390a72b9f62498b2893e1b05c7c22dd274e9a31919 +ac75399e999effe564672db426faa17a839e57c5ef735985c70cd559a377adec23928382767b55ed5a52f7b11b54b756 +b17f975a00b817299ac7af5f2024ea820351805df58b43724393bfb3920a8cd747a3bbd4b8286e795521489db3657168 +a2bed800a6d95501674d9ee866e7314063407231491d794f8cf57d5be020452729c1c7cefd8c50dc1540181f5caab248 +9743f5473171271ffdd3cc59a3ae50545901a7b45cd4bc3570db487865f3b73c0595bebabbfe79268809ee1862e86e4a +b7eab77c2d4687b60d9d7b04e842b3880c7940140012583898d39fcc22d9b9b0a9be2c2e3788b3e6f30319b39c338f09 +8e2b8f797a436a1b661140e9569dcf3e1eea0a77c7ff2bc4ff0f3e49af04ed2de95e255df8765f1d0927fb456a9926b1 +8aefea201d4a1f4ff98ffce94e540bb313f2d4dfe7e9db484a41f13fc316ed02b282e1acc9bc6f56cad2dc2e393a44c9 +b950c17c0e5ca6607d182144aa7556bb0efe24c68f06d79d6413a973b493bfdf04fd147a4f1ab03033a32004cc3ea66f +b7b8dcbb179a07165f2dc6aa829fad09f582a71b05c3e3ea0396bf9e6fe73076f47035c031c2101e8e38e0d597eadd30 +a9d77ed89c77ec1bf8335d08d41c3c94dcca9fd1c54f22837b4e54506b212aa38d7440126c80648ab7723ff18e65ed72 +a819d6dfd4aef70e52b8402fe5d135f8082d40eb7d3bb5c4d7997395b621e2bb10682a1bad2c9caa33dd818550fc3ec6 +8f6ee34128fac8bbf13ce2d68b2bb363eb4fd65b297075f88e1446ddeac242500eeb4ef0735e105882ff5ba8c44c139b +b4440e48255c1644bcecf3a1e9958f1ec4901cb5b1122ee5b56ffd02cad1c29c4266999dbb85aa2605c1b125490074d4 +a43304a067bede5f347775d5811cf65a6380a8d552a652a0063580b5c5ef12a0867a39c7912fa219e184f4538eba1251 +a891ad67a790089ffc9f6d53e6a3d63d3556f5f693e0cd8a7d0131db06fd4520e719cfcc3934f0a8f62a95f90840f1d4 +aea6df8e9bb871081aa0fc5a9bafb00be7d54012c5baf653791907d5042a326aeee966fd9012a582cc16695f5baf7042 +8ffa2660dc52ed1cd4eff67d6a84a8404f358a5f713d04328922269bee1e75e9d49afeec0c8ad751620f22352a438e25 +87ec6108e2d63b06abed350f8b363b7489d642486f879a6c3aa90e5b0f335efc2ff2834eef9353951a42136f8e6a1b32 +865619436076c2760d9e87ddc905023c6de0a8d56eef12c98a98c87837f2ca3f27fd26a2ad752252dbcbe2b9f1d5a032 +980437dce55964293cb315c650c5586ffd97e7a944a83f6618af31c9d92c37b53ca7a21bb5bc557c151b9a9e217e7098 +95d128fc369df4ad8316b72aea0ca363cbc7b0620d6d7bb18f7076a8717a6a46956ff140948b0cc4f6d2ce33b5c10054 +8c7212d4a67b9ec70ebbca04358ad2d36494618d2859609163526d7b3acc2fc935ca98519380f55e6550f70a9bc76862 +893a2968819401bf355e85eee0f0ed0406a6d4a7d7f172d0017420f71e00bb0ba984f6020999a3cdf874d3cd8ebcd371 +9103c1af82dece25d87274e89ea0acd7e68c2921c4af3d8d7c82ab0ed9990a5811231b5b06113e7fa43a6bd492b4564f +99cfd87a94eab7d35466caa4ed7d7bb45e5c932b2ec094258fb14bf205659f83c209b83b2f2c9ccb175974b2a33e7746 +874b6b93e4ee61be3f00c32dd84c897ccd6855c4b6251eb0953b4023634490ed17753cd3223472873cbc6095b2945075 +84a32c0dc4ea60d33aac3e03e70d6d639cc9c4cc435c539eff915017be3b7bdaba33349562a87746291ebe9bc5671f24 +a7057b24208928ad67914e653f5ac1792c417f413d9176ba635502c3f9c688f7e2ee81800d7e3dc0a340c464da2fd9c5 +a03fb9ed8286aacfa69fbd5d953bec591c2ae4153400983d5dbb6cd9ea37fff46ca9e5cceb9d117f73e9992a6c055ad2 +863b2de04e89936c9a4a2b40380f42f20aefbae18d03750fd816c658aee9c4a03df7b12121f795c85d01f415baaeaa59 +8526eb9bd31790fe8292360d7a4c3eed23be23dd6b8b8f01d2309dbfdc0cfd33ad1568ddd7f8a610f3f85a9dfafc6a92 +b46ab8c5091a493d6d4d60490c40aa27950574a338ea5bbc045be3a114af87bdcb160a8c80435a9b7ad815f3cb56a3f3 +aeadc47b41a8d8b4176629557646202f868b1d728b2dda58a347d937e7ffc8303f20d26d6c00b34c851b8aeec547885d +aebb19fc424d72c1f1822aa7adc744cd0ef7e55727186f8df8771c784925058c248406ebeeaf3c1a9ee005a26e9a10c6 +8ff96e81c1a4a2ab1b4476c21018fae0a67e92129ee36120cae8699f2d7e57e891f5c624902cb1b845b944926a605cc3 +8251b8d2c43fadcaa049a9e7aff838dae4fb32884018d58d46403ac5f3beb5c518bfd45f03b8abb710369186075eb71c +a8b2a64f865f51a5e5e86a66455c093407933d9d255d6b61e1fd81ffafc9538d73caaf342338a66ba8ee166372a3d105 +aad915f31c6ba7fdc04e2aaac62e84ef434b7ee76a325f07dc430d12c84081999720181067b87d792efd0117d7ee1eab +a13db3bb60389883fd41d565c54fb5180d9c47ce2fe7a169ae96e01d17495f7f4fa928d7e556e7c74319c4c25d653eb2 +a4491b0198459b3f552855d680a59214eb74e6a4d6c5fa3b309887dc50ebea2ecf6d26c040550f7dc478b452481466fb +8f017f13d4b1e3f0c087843582b52d5f8d13240912254d826dd11f8703a99a2f3166dfbdfdffd9a3492979d77524276b +96c3d5dcd032660d50d7cd9db2914f117240a63439966162b10c8f1f3cf74bc83b0f15451a43b31dbd85e4a7ce0e4bb1 +b479ec4bb79573d32e0ec93b92bdd7ec8c26ddb5a2d3865e7d4209d119fd3499eaac527615ffac78c440e60ef3867ae0 +b2c49c4a33aa94b52b6410b599e81ff15490aafa7e43c8031c865a84e4676354a9c81eb4e7b8be6825fdcefd1e317d44 +906dc51d6a90c089b6704b47592805578a6eed106608eeb276832f127e1b8e858b72e448edcbefb497d152447e0e68ff +b0e81c63b764d7dfbe3f3fddc9905aef50f3633e5d6a4af6b340495124abedcff5700dfd1577bbbed7b6bf97d02719cb +9304c64701e3b4ed6d146e48a881f7d83a17f58357cca0c073b2bb593afd2d94f6e2a7a1ec511d0a67ad6ff4c3be5937 +b6fdbd12ba05aa598d80b83f70a15ef90e5cba7e6e75fa038540ee741b644cd1f408a6cecfd2a891ef8d902de586c6b5 +b80557871a6521b1b3c74a1ba083ae055b575df607f1f7b04c867ba8c8c181ea68f8d90be6031f4d25002cca27c44da2 +aa7285b8e9712e06b091f64163f1266926a36607f9d624af9996856ed2aaf03a580cb22ce407d1ade436c28b44ca173f +8148d72b975238b51e6ea389e5486940d22641b48637d7dfadfa603a605bfc6d74a016480023945d0b85935e396aea5d +8a014933a6aea2684b5762af43dcf4bdbb633cd0428d42d71167a2b6fc563ece5e618bff22f1db2ddb69b845b9a2db19 +990d91740041db770d0e0eb9d9d97d826f09fd354b91c41e0716c29f8420e0e8aac0d575231efba12fe831091ec38d5a +9454d0d32e7e308ddec57cf2522fb1b67a2706e33fb3895e9e1f18284129ab4f4c0b7e51af25681d248d7832c05eb698 +a5bd434e75bac105cb3e329665a35bce6a12f71dd90c15165777d64d4c13a82bceedb9b48e762bd24034e0fc9fbe45f4 +b09e3b95e41800d4dc29c6ffdaab2cd611a0050347f6414f154a47ee20ee59bf8cf7181454169d479ebce1eb5c777c46 +b193e341d6a047d15eea33766d656d807b89393665a783a316e9ba10518e5515c8e0ade3d6e15641d917a8a172a5a635 +ade435ec0671b3621dde69e07ead596014f6e1daa1152707a8c18877a8b067bde2895dd47444ffa69db2bbef1f1d8816 +a7fd3d6d87522dfc56fb47aef9ce781a1597c56a8bbfd796baba907afdc872f753d732bfda1d3402aee6c4e0c189f52d +a298cb4f4218d0464b2fab393e512bbc477c3225aa449743299b2c3572f065bc3a42d07e29546167ed9e1b6b3b3a3af3 +a9ee57540e1fd9c27f4f0430d194b91401d0c642456c18527127d1f95e2dba41c2c86d1990432eb38a692fda058fafde +81d6c1a5f93c04e6d8e5a7e0678c1fc89a1c47a5c920bcd36180125c49fcf7c114866b90e90a165823560b19898a7c16 +a4b7a1ec9e93c899b9fd9aaf264c50e42c36c0788d68296a471f7a3447af4dbc81e4fa96070139941564083ec5b5b5a1 +b3364e327d381f46940c0e11e29f9d994efc6978bf37a32586636c0070b03e4e23d00650c1440f448809e1018ef9f6d8 +8056e0913a60155348300e3a62e28b5e30629a90f7dd4fe11289097076708110a1d70f7855601782a3cdc5bdb1ca9626 +b4980fd3ea17bac0ba9ee1c470b17e575bb52e83ebdd7d40c93f4f87bebeaff1c8a679f9d3d09d635f068d37d5bd28bd +905a9299e7e1853648e398901dfcd437aa575c826551f83520df62984f5679cb5f0ea86aa45ed3e18b67ddc0dfafe809 +ab99553bf31a84f2e0264eb34a08e13d8d15e2484aa9352354becf9a15999c76cc568d68274b70a65e49703fc23540d0 +a43681597bc574d2dae8964c9a8dc1a07613d7a1272bdcb818d98c85d44e16d744250c33f3b5e4d552d97396b55e601f +a54e5a31716fccb50245898c99865644405b8dc920ded7a11f3d19bdc255996054b268e16f2e40273f11480e7145f41e +8134f3ad5ef2ad4ba12a8a4e4d8508d91394d2bcdc38b7c8c8c0b0a820357ac9f79d286c65220f471eb1adca1d98fc68 +94e2f755e60471578ab2c1adb9e9cea28d4eec9b0e92e0140770bca7002c365fcabfe1e5fb4fe6cfe79a0413712aa3ef +ad48f8d0ce7eb3cc6e2a3086ad96f562e5bed98a360721492ae2e74dc158586e77ec8c35d5fd5927376301b7741bad2b +8614f0630bdd7fbad3a31f55afd9789f1c605dc85e7dc67e2edfd77f5105f878bb79beded6e9f0b109e38ea7da67e8d5 +9804c284c4c5e77dabb73f655b12181534ca877c3e1e134aa3f47c23b7ec92277db34d2b0a5d38d2b69e5d1c3008a3e3 +a51b99c3088e473afdaa9e0a9f7e75a373530d3b04e44e1148da0726b95e9f5f0c7e571b2da000310817c36f84b19f7f +ac4ff909933b3b76c726b0a382157cdc74ab851a1ac6cef76953c6444441804cc43abb883363f416592e8f6cfbc4550b +ae7d915eb9fc928b65a29d6edbc75682d08584d0014f7bcf17d59118421ae07d26a02137d1e4de6938bcd1ab8ef48fad +852f7e453b1af89b754df6d11a40d5d41ea057376e8ecacd705aacd2f917457f4a093d6b9a8801837fa0f62986ad7149 +92c6bf5ada5d0c3d4dd8058483de36c215fa98edab9d75242f3eff9db07c734ad67337da6f0eefe23a487bf75a600dee +a2b42c09d0db615853763552a48d2e704542bbd786aae016eb58acbf6c0226c844f5fb31e428cb6450b9db855f8f2a6f +880cc07968266dbfdcfbc21815cd69e0eddfee239167ac693fb0413912d816f2578a74f7716eecd6deefa68c6eccd394 +b885b3ace736cd373e8098bf75ba66fa1c6943ca1bc4408cd98ac7074775c4478594f91154b8a743d9c697e1b29f5840 +a51ce78de512bd87bfa0835de819941dffbf18bec23221b61d8096fc9436af64e0693c335b54e7bfc763f287bdca2db6 +a3c76166a3bdb9b06ef696e57603b58871bc72883ee9d45171a30fe6e1d50e30bc9c51b4a0f5a7270e19a77b89733850 +acefc5c6f8a1e7c24d7b41e0fc7f6f3dc0ede6cf3115ffb9a6e54b1d954cbca9bda8ad7a084be9be245a1b8e9770d141 +b420ed079941842510e31cfad117fa11fb6b4f97dfbc6298cb840f27ebaceba23eeaf3f513bcffbf5e4aae946310182d +95c3bb5ef26c5ed2f035aa5d389c6b3c15a6705b9818a3fefaed28922158b35642b2e8e5a1a620fdad07e75ad4b43af4 +825149f9081ecf07a2a4e3e8b5d21bade86c1a882475d51c55ee909330b70c5a2ac63771c8600c6f38df716af61a3ea1 +873b935aae16d9f08adbc25353cee18af2f1b8d5f26dec6538d6bbddc515f2217ed7d235dcfea59ae61b428798b28637 +9294150843a2bedcedb3bb74c43eb28e759cf9499582c5430bccefb574a8ddd4f11f9929257ff4c153990f9970a2558f +b619563a811cc531da07f4f04e5c4c6423010ff9f8ed7e6ec9449162e3d501b269fb1c564c09c0429431879b0f45df02 +91b509b87eb09f007d839627514658c7341bc76d468920fe8a740a8cb96a7e7e631e0ea584a7e3dc1172266f641d0f5c +8b8aceace9a7b9b4317f1f01308c3904d7663856946afbcea141a1c615e21ccad06b71217413e832166e9dd915fbe098 +87b3b36e725833ea0b0f54753c3728c0dbc87c52d44d705ffc709f2d2394414c652d3283bab28dcce09799504996cee0 +b2670aad5691cbf308e4a6a77a075c4422e6cbe86fdba24e9f84a313e90b0696afb6a067eebb42ba2d10340d6a2f6e51 +876784a9aff3d54faa89b2bacd3ff5862f70195d0b2edc58e8d1068b3c9074c0da1cfa23671fe12f35e33b8a329c0ccd +8b48b9e758e8a8eae182f5cbec96f67d20cca6d3eee80a2d09208eb1d5d872e09ef23d0df8ebbb9b01c7449d0e3e3650 +b79303453100654c04a487bdcadc9e3578bc80930c489a7069a52e8ca1dba36c492c8c899ce025f8364599899baa287d +961b35a6111da54ece6494f24dacd5ea46181f55775b5f03df0e370c34a5046ac2b4082925855325bb42bc2a2c98381d +a31feb1be3f5a0247a1f7d487987eb622e34fca817832904c6ee3ee60277e5847945a6f6ea1ac24542c72e47bdf647df +a12a2aa3e7327e457e1aae30e9612715dd2cfed32892c1cd6dcda4e9a18203af8a44afb46d03b2eed89f6b9c5a2c0c23 +a08265a838e69a2ca2f80fead6ccf16f6366415b920c0b22ee359bcd8d4464ecf156f400a16a7918d52e6d733dd64211 +b723d6344e938d801cca1a00032af200e541d4471fd6cbd38fb9130daa83f6a1dffbbe7e67fc20f9577f884acd7594b2 +a6733d83ec78ba98e72ddd1e7ff79b7adb0e559e256760d0c590a986e742445e8cdf560d44b29439c26d87edd0b07c8c +a61c2c27d3f7b9ff4695a17afedf63818d4bfba390507e1f4d0d806ce8778d9418784430ce3d4199fd3bdbc2504d2af3 +8332f3b63a6dc985376e8b1b25eeae68be6160fbe40053ba7bcf6f073204f682da72321786e422d3482fd60c9e5aa034 +a280f44877583fbb6b860d500b1a3f572e3ee833ec8f06476b3d8002058e25964062feaa1e5bec1536d734a5cfa09145 +a4026a52d277fcea512440d2204f53047718ebfcae7b48ac57ea7f6bfbc5de9d7304db9a9a6cbb273612281049ddaec5 +95cdf69c831ab2fad6c2535ede9c07e663d2ddccc936b64e0843d2df2a7b1c31f1759c3c20f1e7a57b1c8f0dbb21b540 +95c96cec88806469c277ab567863c5209027cecc06c7012358e5f555689c0d9a5ffb219a464f086b45817e8536b86d2f +afe38d4684132a0f03d806a4c8df556bf589b25271fbc6fe2e1ed16de7962b341c5003755da758d0959d2e6499b06c68 +a9b77784fda64987f97c3a23c5e8f61b918be0f7c59ba285084116d60465c4a2aaafc8857eb16823282cc83143eb9126 +a830f05881ad3ce532a55685877f529d32a5dbe56cea57ffad52c4128ee0fad0eeaf0da4362b55075e77eda7babe70e5 +992b3ad190d6578033c13ed5abfee4ef49cbc492babb90061e3c51ee4b5790cdd4c8fc1abff1fa2c00183b6b64f0bbbe +b1015424d9364aeff75de191652dc66484fdbec3e98199a9eb9671ec57bec6a13ff4b38446e28e4d8aedb58dd619cd90 +a745304604075d60c9db36cada4063ac7558e7ec2835d7da8485e58d8422e817457b8da069f56511b02601289fbb8981 +a5ba4330bc5cb3dbe0486ddf995632a7260a46180a08f42ae51a2e47778142132463cc9f10021a9ad36986108fefa1a9 +b419e9fd4babcaf8180d5479db188bb3da232ae77a1c4ed65687c306e6262f8083070a9ac32220cddb3af2ec73114092 +a49e23dc5f3468f3bf3a0bb7e4a114a788b951ff6f23a3396ae9e12cbff0abd1240878a3d1892105413dbc38818e807c +b7ecc7b4831f650202987e85b86bc0053f40d983f252e9832ef503aea81c51221ce93279da4aa7466c026b2d2070e55d +96a8c35cb87f84fa84dcd6399cc2a0fd79cc9158ef4bdde4bae31a129616c8a9f2576cd19baa3f497ca34060979aed7d +8681b2c00aa62c2b519f664a95dcb8faef601a3b961bb4ce5d85a75030f40965e2983871d41ea394aee934e859581548 +85c229a07efa54a713d0790963a392400f55fbb1a43995a535dc6c929f20d6a65cf4efb434e0ad1cb61f689b8011a3bc +90856f7f3444e5ad44651c28e24cc085a5db4d2ffe79aa53228c26718cf53a6e44615f3c5cda5aa752d5f762c4623c66 +978999b7d8aa3f28a04076f74d11c41ef9c89fdfe514936c4238e0f13c38ec97e51a5c078ebc6409e517bfe7ccb42630 +a099914dd7ed934d8e0d363a648e9038eb7c1ec03fa04dbcaa40f7721c618c3ef947afef7a16b4d7ac8c12aa46637f03 +ab2a104fed3c83d16f2cda06878fa5f30c8c9411de71bfb67fd2fc9aa454dcbcf3d299d72f8cc12e919466a50fcf7426 +a4471d111db4418f56915689482f6144efc4664cfb0311727f36c864648d35734351becc48875df96f4abd3cfcf820f9 +83be11727cd30ea94ccc8fa31b09b81c9d6a9a5d3a4686af9da99587332fe78c1f94282f9755854bafd6033549afec91 +88020ff971dc1a01a9e993cd50a5d2131ffdcbb990c1a6aaa54b20d8f23f9546a70918ea57a21530dcc440c1509c24ad +ae24547623465e87905eaffa1fa5d52bb7c453a8dbd89614fa8819a2abcedaf455c2345099b7324ae36eb0ad7c8ef977 +b59b0c60997de1ee00b7c388bc7101d136c9803bf5437b1d589ba57c213f4f835a3e4125b54738e78abbc21b000f2016 +a584c434dfe194546526691b68fa968c831c31da42303a1d735d960901c74011d522246f37f299555416b8cf25c5a548 +80408ce3724f4837d4d52376d255e10f69eb8558399ae5ca6c11b78b98fe67d4b93157d2b9b639f1b5b64198bfe87713 +abb941e8d406c2606e0ddc35c113604fdd9d249eacc51cb64e2991e551b8639ce44d288cc92afa7a1e7fc599cfc84b22 +b223173f560cacb1c21dba0f1713839e348ad02cbfdef0626748604c86f89e0f4c919ed40b583343795bdd519ba952c8 +af1c70512ec3a19d98b8a1fc3ff7f7f5048a27d17d438d43f561974bbdd116fcd5d5c21040f3447af3f0266848d47a15 +8a44809568ebe50405bede19b4d2607199159b26a1b33e03d180e6840c5cf59d991a4fb150d111443235d75ecad085b7 +b06207cdca46b125a27b3221b5b50cf27af4c527dd7c80e2dbcebbb09778a96df3af67e50f07725239ce3583dad60660 +993352d9278814ec89b26a11c4a7c4941bf8f0e6781ae79559d14749ee5def672259792db4587f85f0100c7bb812f933 +9180b8a718b971fd27bc82c8582d19c4b4f012453e8c0ffeeeffe745581fc6c07875ab28be3af3fa3896d19f0c89ac5b +8b8e1263eb48d0fe304032dd5ea1f30e73f0121265f7458ba9054d3626894e8a5fef665340abd2ede9653045c2665938 +99a2beee4a10b7941c24b2092192faf52b819afd033e4a2de050fd6c7f56d364d0cf5f99764c3357cf32399e60fc5d74 +946a4aad7f8647ea60bee2c5fcdeb6f9a58fb2cfca70c4d10e458027a04846e13798c66506151be3df9454b1e417893f +a672a88847652d260b5472d6908d1d57e200f1e492d30dd1cecc441cdfc9b76e016d9bab560efd4d7f3c30801de884a9 +9414e1959c156cde1eb24e628395744db75fc24b9df4595350aaad0bc38e0246c9b4148f6443ef68b8e253a4a6bcf11c +9316e9e4ec5fab4f80d6540df0e3a4774db52f1d759d2e5b5bcd3d7b53597bb007eb1887cb7dc61f62497d51ffc8d996 +902d6d77bb49492c7a00bc4b70277bc28c8bf9888f4307bb017ac75a962decdedf3a4e2cf6c1ea9f9ba551f4610cbbd7 +b07025a18b0e32dd5e12ec6a85781aa3554329ea12c4cd0d3b2c22e43d777ef6f89876dd90a9c8fb097ddf61cf18adc5 +b355a849ad3227caa4476759137e813505ec523cbc2d4105bc7148a4630f9e81918d110479a2d5f5e4cd9ccec9d9d3e3 +b49532cfdf02ee760109881ad030b89c48ee3bb7f219ccafc13c93aead754d29bdafe345be54c482e9d5672bd4505080 +9477802410e263e4f938d57fa8f2a6cac7754c5d38505b73ee35ea3f057aad958cb9722ba6b7b3cfc4524e9ca93f9cdc +9148ea83b4436339580f3dbc9ba51509e9ab13c03063587a57e125432dd0915f5d2a8f456a68f8fff57d5f08c8f34d6e +b00b6b5392b1930b54352c02b1b3b4f6186d20bf21698689bbfc7d13e86538a4397b90e9d5c93fd2054640c4dbe52a4f +926a9702500441243cd446e7cbf15dde16400259726794694b1d9a40263a9fc9e12f7bcbf12a27cb9aaba9e2d5848ddc +a0c6155f42686cbe7684a1dc327100962e13bafcf3db97971fc116d9f5c0c8355377e3d70979cdbd58fd3ea52440901c +a277f899f99edb8791889d0817ea6a96c24a61acfda3ad8c3379e7c62b9d4facc4b965020b588651672fd261a77f1bfc +8f528cebb866b501f91afa50e995234bef5bf20bff13005de99cb51eaac7b4f0bf38580cfd0470de40f577ead5d9ba0f +963fc03a44e9d502cc1d23250efef44d299befd03b898d07ce63ca607bb474b5cf7c965a7b9b0f32198b04a8393821f7 +ab087438d0a51078c378bf4a93bd48ef933ff0f1fa68d02d4460820df564e6642a663b5e50a5fe509527d55cb510ae04 +b0592e1f2c54746bb076be0fa480e1c4bebc4225e1236bcda3b299aa3853e3afb401233bdbcfc4a007b0523a720fbf62 +851613517966de76c1c55a94dc4595f299398a9808f2d2f0a84330ba657ab1f357701d0895f658c18a44cb00547f6f57 +a2fe9a1dd251e72b0fe4db27be508bb55208f8f1616b13d8be288363ec722826b1a1fd729fc561c3369bf13950bf1fd6 +b896cb2bc2d0c77739853bc59b0f89b2e008ba1f701c9cbe3bef035f499e1baee8f0ff1e794854a48c320586a2dfc81a +a1b60f98e5e5106785a9b81a85423452ee9ef980fa7fa8464f4366e73f89c50435a0c37b2906052b8e58e212ebd366cf +a853b0ebd9609656636df2e6acd5d8839c0fda56f7bf9288a943b06f0b67901a32b95e016ca8bc99bd7b5eab31347e72 +b290fa4c1346963bd5225235e6bdf7c542174dab4c908ab483d1745b9b3a6015525e398e1761c90e4b49968d05e30eea +b0f65a33ad18f154f1351f07879a183ad62e5144ad9f3241c2d06533dad09cbb2253949daff1bb02d24d16a3569f7ef0 +a00db59b8d4218faf5aeafcd39231027324408f208ec1f54d55a1c41228b463b88304d909d16b718cfc784213917b71e +b8d695dd33dc2c3bc73d98248c535b2770ad7fa31aa726f0aa4b3299efb0295ba9b4a51c71d314a4a1bd5872307534d1 +b848057cca2ca837ee49c42b88422303e58ea7d2fc76535260eb5bd609255e430514e927cc188324faa8e657396d63ec +92677836061364685c2aaf0313fa32322746074ed5666fd5f142a7e8f87135f45cd10e78a17557a4067a51dfde890371 +a854b22c9056a3a24ab164a53e5c5cf388616c33e67d8ebb4590cb16b2e7d88b54b1393c93760d154208b5ca822dc68f +86fff174920388bfab841118fb076b2b0cdec3fdb6c3d9a476262f82689fb0ed3f1897f7be9dbf0932bb14d346815c63 +99661cf4c94a74e182752bcc4b98a8c2218a8f2765642025048e12e88ba776f14f7be73a2d79bd21a61def757f47f904 +8a8893144d771dca28760cba0f950a5d634195fd401ec8cf1145146286caffb0b1a6ba0c4c1828d0a5480ce49073c64c +938a59ae761359ee2688571e7b7d54692848eb5dde57ffc572b473001ea199786886f8c6346a226209484afb61d2e526 +923f68a6aa6616714cf077cf548aeb845bfdd78f2f6851d8148cba9e33a374017f2f3da186c39b82d14785a093313222 +ac923a93d7da7013e73ce8b4a2b14b8fd0cc93dc29d5de941a70285bdd19be4740fedfe0c56b046689252a3696e9c5bc +b49b32c76d4ec1a2c68d4989285a920a805993bc6fcce6dacd3d2ddae73373050a5c44ba8422a3781050682fa0ef6ba2 +8a367941c07c3bdca5712524a1411bad7945c7c48ffc7103b1d4dff2c25751b0624219d1ccde8c3f70c465f954be5445 +b838f029df455efb6c530d0e370bbbf7d87d61a9aea3d2fe5474c5fe0a39cf235ceecf9693c5c6c5820b1ba8f820bd31 +a8983b7c715eaac7f13a001d2abc462dfc1559dab4a6b554119c271aa8fe00ffcf6b6949a1121f324d6d26cb877bcbae +a2afb24ad95a6f14a6796315fbe0d8d7700d08f0cfaf7a2abe841f5f18d4fecf094406cbd54da7232a159f9c5b6e805e +87e8e95ad2d62f947b2766ff405a23f7a8afba14e7f718a691d95369c79955cdebe24c54662553c60a3f55e6322c0f6f +87c2cbcecb754e0cc96128e707e5c5005c9de07ffd899efa3437cadc23362f5a1d3fcdd30a1f5bdc72af3fb594398c2a +91afd6ee04f0496dc633db88b9370d41c428b04fd991002502da2e9a0ef051bcd7b760e860829a44fbe5539fa65f8525 +8c50e5d1a24515a9dd624fe08b12223a75ca55196f769f24748686315329b337efadca1c63f88bee0ac292dd0a587440 +8a07e8f912a38d94309f317c32068e87f68f51bdfa082d96026f5f5f8a2211621f8a3856dda8069386bf15fb2d28c18f +94ad1dbe341c44eeaf4dc133eed47d8dbfe752575e836c075745770a6679ff1f0e7883b6aa917462993a7f469d74cab5 +8745f8bd86c2bb30efa7efb7725489f2654f3e1ac4ea95bd7ad0f3cfa223055d06c187a16192d9d7bdaea7b050c6a324 +900d149c8d79418cda5955974c450a70845e02e5a4ecbcc584a3ca64d237df73987c303e3eeb79da1af83bf62d9e579f +8f652ab565f677fb1a7ba03b08004e3cda06b86c6f1b0b9ab932e0834acf1370abb2914c15b0d08327b5504e5990681c +9103097d088be1f75ab9d3da879106c2f597e2cc91ec31e73430647bdd5c33bcfd771530d5521e7e14df6acda44f38a6 +b0fec7791cfb0f96e60601e1aeced9a92446b61fedab832539d1d1037558612d78419efa87ff5f6b7aab8fd697d4d9de +b9d2945bdb188b98958854ba287eb0480ef614199c4235ce5f15fc670b8c5ffe8eeb120c09c53ea8a543a022e6a321ac +a9461bb7d5490973ebaa51afc0bb4a5e42acdccb80e2f939e88b77ac28a98870e103e1042899750f8667a8cc9123bae9 +a37fdf11d4bcb2aed74b9f460a30aa34afea93386fa4cdb690f0a71bc58f0b8df60bec56e7a24f225978b862626fa00e +a214420e183e03d531cf91661466ea2187d84b6e814b8b20b3730a9400a7d25cf23181bb85589ebc982cec414f5c2923 +ad09a45a698a6beb3e0915f540ef16e9af7087f53328972532d6b5dfe98ce4020555ece65c6cbad8bd6be8a4dfefe6fd +ab6742800b02728c92d806976764cb027413d6f86edd08ad8bb5922a2969ee9836878cd39db70db0bd9a2646862acc4f +974ca9305bd5ea1dc1755dff3b63e8bfe9f744321046c1395659bcea2a987b528e64d5aa96ac7b015650b2253b37888d +84eee9d6bce039c52c2ebc4fccc0ad70e20c82f47c558098da4be2f386a493cbc76adc795b5488c8d11b6518c2c4fab8 +875d7bda46efcb63944e1ccf760a20144df3b00d53282b781e95f12bfc8f8316dfe6492c2efbf796f1150e36e436e9df +b68a2208e0c587b5c31b5f6cb32d3e6058a9642e2d9855da4f85566e1412db528475892060bb932c55b3a80877ad7b4a +ba006368ecab5febb6ab348644d9b63de202293085ed468df8bc24d992ae8ce468470aa37f36a73630c789fb9c819b30 +90a196035150846cd2b482c7b17027471372a8ce7d914c4d82b6ea7fa705d8ed5817bd42d63886242585baf7d1397a1c +a223b4c85e0daa8434b015fd9170b5561fe676664b67064974a1e9325066ecf88fc81f97ab5011c59fad28cedd04b240 +82e8ec43139cf15c6bbeed484b62e06cded8a39b5ce0389e4cbe9c9e9c02f2f0275d8d8d4e8dfec8f69a191bef220408 +81a3fc07a7b68d92c6ee4b6d28f5653ee9ec85f7e2ee1c51c075c1b130a8c5097dc661cf10c5aff1c7114b1a6a19f11a +8ed2ef8331546d98819a5dd0e6c9f8cb2630d0847671314a28f277faf68da080b53891dd75c82cbcf7788b255490785d +acecabf84a6f9bbed6b2fc2e7e4b48f02ef2f15e597538a73aea8f98addc6badda15e4695a67ecdb505c1554e8f345ec +b8f51019b2aa575f8476e03dcadf86cc8391f007e5f922c2a36b2daa63f5a503646a468990cd5c65148d323942193051 +aaa595a84b403ec65729bc1c8055a94f874bf9adddc6c507b3e1f24f79d3ad359595a672b93aab3394db4e2d4a7d8970 +895144c55fcbd0f64d7dd69e6855cfb956e02b5658eadf0f026a70703f3643037268fdd673b0d21b288578a83c6338dd +a2e92ae6d0d237d1274259a8f99d4ea4912a299816350b876fba5ebc60b714490e198a916e1c38c6e020a792496fa23c +a45795fda3b5bb0ad1d3c628f6add5b2a4473a1414c1a232e80e70d1cfffd7f8a8d9861f8df2946999d7dbb56bf60113 +b6659bf7f6f2fef61c39923e8c23b8c70e9c903028d8f62516d16755cd3fba2fe41c285aa9432dc75ab08f8a1d8a81fc +a735609a6bc5bfd85e58234fc439ff1f58f1ff1dd966c5921d8b649e21f006bf2b8642ad8a75063c159aaf6935789293 +a3c622eb387c9d15e7bda2e3e84d007cb13a6d50d655c3f2f289758e49d3b37b9a35e4535d3cc53d8efd51f407281f19 +8afe147b53ad99220f5ef9d763bfc91f9c20caecbcf823564236fb0e6ede49414c57d71eec4772c8715cc65a81af0047 +b5f0203233cf71913951e9c9c4e10d9243e3e4a1f2cb235bf3f42009120ba96e04aa414c9938ea8873b63148478927e8 +93c52493361b458d196172d7ba982a90a4f79f03aa8008edc322950de3ce6acf4c3977807a2ffa9e924047e02072b229 +b9e72b805c8ac56503f4a86c82720afbd5c73654408a22a2ac0b2e5caccdfb0e20b59807433a6233bc97ae58cf14c70a +af0475779b5cee278cca14c82da2a9f9c8ef222eb885e8c50cca2315fea420de6e04146590ed0dd5a29c0e0812964df5 +b430ccab85690db02c2d0eb610f3197884ca12bc5f23c51e282bf3a6aa7e4a79222c3d8761454caf55d6c01a327595f9 +830032937418b26ee6da9b5206f3e24dc76acd98589e37937e963a8333e5430abd6ce3dd93ef4b8997bd41440eed75d6 +8820a6d73180f3fe255199f3f175c5eb770461ad5cfdde2fb11508041ed19b8c4ce66ad6ecebf7d7e836cc2318df47ca +aef1393e7d97278e77bbf52ef6e1c1d5db721ccf75fe753cf47a881fa034ca61eaa5098ee5a344c156d2b14ff9e284ad +8a4a26c07218948c1196c45d927ef4d2c42ade5e29fe7a91eaebe34a29900072ce5194cf28d51f746f4c4c649daf4396 +84011dc150b7177abdcb715efbd8c201f9cb39c36e6069af5c50a096021768ba40cef45b659c70915af209f904ede3b6 +b1bd90675411389bb66910b21a4bbb50edce5330850c5ab0b682393950124252766fc81f5ecfc72fb7184387238c402e +8dfdcd30583b696d2c7744655f79809f451a60c9ad5bf1226dc078b19f4585d7b3ef7fa9d54e1ac09520d95cbfd20928 +b351b4dc6d98f75b8e5a48eb7c6f6e4b78451991c9ba630e5a1b9874c15ac450cd409c1a024713bf2cf82dc400e025ef +a462b8bc97ac668b97b28b3ae24b9f5de60e098d7b23ecb600d2194cd35827fb79f77c3e50d358f5bd72ee83fef18fa0 +a183753265c5f7890270821880cce5f9b2965b115ba783c6dba9769536f57a04465d7da5049c7cf8b3fcf48146173c18 +a8a771b81ed0d09e0da4d79f990e58eabcd2be3a2680419502dd592783fe52f657fe55125b385c41d0ba3b9b9cf54a83 +a71ec577db46011689d073245e3b1c3222a9b1fe6aa5b83629adec5733dd48617ebea91346f0dd0e6cdaa86e4931b168 +a334b8b244f0d598a02da6ae0f918a7857a54dce928376c4c85df15f3b0f2ba3ac321296b8b7c9dd47d770daf16c8f8c +a29037f8ef925c417c90c4df4f9fb27fb977d04e2b3dd5e8547d33e92ab72e7a00f5461de21e28835319eae5db145eb7 +b91054108ae78b00e3298d667b913ebc44d8f26e531eae78a8fe26fdfb60271c97efb2dee5f47ef5a3c15c8228138927 +926c13efbe90604f6244be9315a34f72a1f8d1aab7572df431998949c378cddbf2fe393502c930fff614ff06ae98a0ce +995c758fd5600e6537089b1baa4fbe0376ab274ff3e82a17768b40df6f91c2e443411de9cafa1e65ea88fb8b87d504f4 +9245ba307a7a90847da75fca8d77ec03fdfc812c871e7a2529c56a0a79a6de16084258e7a9ac4ae8a3756f394336e21c +99e0cfa2bb57a7e624231317044c15e52196ecce020db567c8e8cb960354a0be9862ee0c128c60b44777e65ac315e59f +ad4f6b3d27bbbb744126601053c3dc98c07ff0eb0b38a898bd80dce778372846d67e5ab8fb34fb3ad0ef3f235d77ba7f +a0f12cae3722bbbca2e539eb9cc7614632a2aefe51410430070a12b5bc5314ecec5857b7ff8f41e9980cac23064f7c56 +b487f1bc59485848c98222fd3bc36c8c9bb3d2912e2911f4ceca32c840a7921477f9b1fe00877e05c96c75d3eecae061 +a6033db53925654e18ecb3ce715715c36165d7035db9397087ac3a0585e587998a53973d011ac6d48af439493029cee6 +a6b4d09cd01c70a3311fd131d3710ccf97bde3e7b80efd5a8c0eaeffeb48cca0f951ced905290267b115b06d46f2693b +a9dff1df0a8f4f218a98b6f818a693fb0d611fed0fc3143537cbd6578d479af13a653a8155e535548a2a0628ae24fa58 +a58e469f65d366b519f9a394cacb7edaddac214463b7b6d62c2dbc1316e11c6c5184ce45c16de2d77f990dcdd8b55430 +989e71734f8119103586dc9a3c5f5033ddc815a21018b34c1f876cdfc112efa868d5751bf6419323e4e59fa6a03ece1c +a2da00e05036c884369e04cf55f3de7d659cd5fa3f849092b2519dd263694efe0f051953d9d94b7e121f0aee8b6174d7 +968f3c029f57ee31c4e1adea89a7f92e28483af9a74f30fbdb995dc2d40e8e657dff8f8d340d4a92bf65f54440f2859f +932778df6f60ac1639c1453ef0cbd2bf67592759dcccb3e96dcc743ff01679e4c7dd0ef2b0833dda548d32cb4eba49e2 +a805a31139f8e0d6dae1ac87d454b23a3dc9fc653d4ca18d4f8ebab30fc189c16e73981c2cb7dd6f8c30454a5208109d +a9ba0991296caa2aaa4a1ceacfb205544c2a2ec97088eace1d84ee5e2767656a172f75d2f0c4e16a3640a0e0dec316e0 +b1e49055c968dced47ec95ae934cf45023836d180702e20e2df57e0f62fb85d7ac60d657ba3ae13b8560b67210449459 +a94e1da570a38809c71e37571066acabff7bf5632737c9ab6e4a32856924bf6211139ab3cedbf083850ff2d0e0c0fcfc +88ef1bb322000c5a5515b310c838c9af4c1cdbb32eab1c83ac3b2283191cd40e9573747d663763a28dad0d64adc13840 +a987ce205f923100df0fbd5a85f22c9b99b9b9cbe6ddfa8dfda1b8fe95b4f71ff01d6c5b64ca02eb24edb2b255a14ef0 +84fe8221a9e95d9178359918a108de4763ebfa7a6487facb9c963406882a08a9a93f492f8e77cf9e7ea41ae079c45993 +aa1cf3dc7c5dcfa15bbbc811a4bb6dbac4fba4f97fb1ed344ab60264d7051f6eef19ea9773441d89929ee942ed089319 +8f6a7d610d59d9f54689bbe6a41f92d9f6096cde919c1ab94c3c7fcecf0851423bc191e5612349e10f855121c0570f56 +b5af1fa7894428a53ea520f260f3dc3726da245026b6d5d240625380bfb9c7c186df0204bb604efac5e613a70af5106e +a5bce6055ff812e72ce105f147147c7d48d7a2313884dd1f488b1240ee320f13e8a33f5441953a8e7a3209f65b673ce1 +b9b55b4a1422677d95821e1d042ab81bbf0bf087496504021ec2e17e238c2ca6b44fb3b635a5c9eac0871a724b8d47c3 +941c38e533ce4a673a3830845b56786585e5fe49c427f2e5c279fc6db08530c8f91db3e6c7822ec6bb4f956940052d18 +a38e191d66c625f975313c7007bbe7431b5a06ed2da1290a7d5d0f2ec73770d476efd07b8e632de64597d47df175cbb0 +94ba76b667abf055621db4c4145d18743a368d951565632ed4e743dd50dd3333507c0c34f286a5c5fdbf38191a2255cd +a5ca38c60be5602f2bfa6e00c687ac96ac36d517145018ddbee6f12eb0faa63dd57909b9eeed26085fe5ac44e55d10ab +b00fea3b825e60c1ed1c5deb4b551aa65a340e5af36b17d5262c9cd2c508711e4dc50dc2521a2c16c7c901902266e64a +971b86fc4033485e235ccb0997a236206ba25c6859075edbcdf3c943116a5030b7f75ebca9753d863a522ba21a215a90 +b3b31f52370de246ee215400975b674f6da39b2f32514fe6bd54e747752eedca22bb840493b44a67df42a3639c5f901f +affbbfac9c1ba7cbfa1839d2ae271dd6149869b75790bf103230637da41857fc326ef3552ff31c15bda0694080198143 +a95d42aa7ef1962520845aa3688f2752d291926f7b0d73ea2ee24f0612c03b43f2b0fe3c9a9a99620ffc8d487b981bc2 +914a266065caf64985e8c5b1cb2e3f4e3fe94d7d085a1881b1fefa435afef4e1b39a98551d096a62e4f5cc1a7f0fdc2e +81a0b4a96e2b75bc1bf2dbd165d58d55cfd259000a35504d1ffb18bc346a3e6f07602c683723864ffb980f840836fd8d +91c1556631cddd4c00b65b67962b39e4a33429029d311c8acf73a18600e362304fb68bccb56fde40f49e95b7829e0b87 +8befbacc19e57f7c885d1b7a6028359eb3d80792fe13b92a8400df21ce48deb0bb60f2ddb50e3d74f39f85d7eab23adc +92f9458d674df6e990789690ec9ca73dacb67fc9255b58c417c555a8cc1208ace56e8e538f86ba0f3615573a0fbac00d +b4b1b3062512d6ae7417850c08c13f707d5838e43d48eb98dd4621baf62eee9e82348f80fe9b888a12874bfa538771f8 +a13c4a3ac642ede37d9c883f5319e748d2b938f708c9d779714108a449b343f7b71a6e3ef4080fee125b416762920273 +af44983d5fc8cceee0551ef934e6e653f2d3efa385e5c8a27a272463a6f333e290378cc307c2b664eb923c78994e706e +a389fd6c59fe2b4031cc244e22d3991e541bd203dd5b5e73a6159e72df1ab41d49994961500dcde7989e945213184778 +8d2141e4a17836c548de9598d7b298b03f0e6c73b7364979a411c464e0628e21cff6ac3d6decdba5d1c4909eff479761 +980b22ef53b7bdf188a3f14bc51b0dbfdf9c758826daa3cbc1e3986022406a8aa9a6a79e400567120b88c67faa35ce5f +a28882f0a055f96df3711de5d0aa69473e71245f4f3e9aa944e9d1fb166e02caa50832e46da6d3a03b4801735fd01b29 +8db106a37d7b88f5d995c126abb563934dd8de516af48e85695d02b1aea07f79217e3cdd03c6f5ca57421830186c772b +b5a7e50da0559a675c472f7dfaee456caab6695ab7870541b2be8c2b118c63752427184aad81f0e1afc61aef1f28c46f +9962118780e20fe291d10b64f28d09442a8e1b5cffd0f3dd68d980d0614050a626c616b44e9807fbee7accecae00686a +b38ddf33745e8d2ad6a991aefaf656a33c5f8cbe5d5b6b6fd03bd962153d8fd0e01b5f8f96d80ae53ab28d593ab1d4e7 +857dc12c0544ff2c0c703761d901aba636415dee45618aba2e3454ff9cbc634a85c8b05565e88520ff9be2d097c8b2b1 +a80d465c3f8cc63af6d74a6a5086b626c1cb4a8c0fee425964c3bd203d9d7094e299f81ce96d58afc20c8c9a029d9dae +89e1c8fbde8563763be483123a3ed702efac189c6d8ab4d16c85e74bbaf856048cc42d5d6e138633a38572ba5ec3f594 +893a594cf495535f6d216508f8d03c317dcf03446668cba688da90f52d0111ac83d76ad09bf5ea47056846585ee5c791 +aadbd8be0ae452f7f9450c7d2957598a20cbf10139a4023a78b4438172d62b18b0de39754dd2f8862dbd50a3a0815e53 +ae7d39670ecca3eb6db2095da2517a581b0e8853bdfef619b1fad9aacd443e7e6a40f18209fadd44038a55085c5fe8b2 +866ef241520eacb6331593cfcb206f7409d2f33d04542e6e52cba5447934e02d44c471f6c9a45963f9307e9809ab91d9 +b1a09911ad3864678f7be79a9c3c3eb5c84a0a45f8dcb52c67148f43439aeaaa9fd3ed3471276b7e588b49d6ebe3033a +add07b7f0dbb34049cd8feeb3c18da5944bf706871cfd9f14ff72f6c59ad217ebb1f0258b13b167851929387e4e34cfe +ae048892d5c328eefbdd4fba67d95901e3c14d974bfc0a1fc68155ca9f0d59e61d7ba17c6c9948b120cf35fd26e6fee9 +9185b4f3b7da0ddb4e0d0f09b8a9e0d6943a4611e43f13c3e2a767ed8592d31e0ba3ebe1914026a3627680274291f6e5 +a9c022d4e37b0802284ce3b7ee9258628ab4044f0db4de53d1c3efba9de19d15d65cc5e608dbe149c21c2af47d0b07b5 +b24dbd5852f8f24921a4e27013b6c3fa8885b973266cb839b9c388efad95821d5d746348179dcc07542bd0d0aefad1ce +b5fb4f279300876a539a27a441348764908bc0051ebd66dc51739807305e73db3d2f6f0f294ffb91b508ab150eaf8527 +ace50841e718265b290c3483ed4b0fdd1175338c5f1f7530ae9a0e75d5f80216f4de37536adcbc8d8c95982e88808cd0 +b19cadcde0f63bd1a9c24bd9c2806f53c14c0b9735bf351601498408ba503ddbd2037c891041cbba47f58b8c483f3b21 +b6061e63558d312eb891b97b39aa552fa218568d79ee26fe6dd5b864aea9e3216d8f2e2f3b093503be274766dac41426 +89730fdb2876ab6f0fe780d695f6e12090259027e789b819956d786e977518057e5d1d7f5ab24a3ae3d5d4c97773bd2b +b6fa841e81f9f2cad0163a02a63ae96dc341f7ae803b616efc6e1da2fbea551c1b96b11ad02c4afbdf6d0cc9f23da172 +8fb66187182629c861ddb6896d7ed3caf2ad050c3dba8ab8eb0d7a2c924c3d44c48d1a148f9e33fb1f061b86972f8d21 +86022ac339c1f84a7fa9e05358c1a5b316b4fc0b83dbe9c8c7225dc514f709d66490b539359b084ce776e301024345fa +b50b9c321468da950f01480bb62b6edafd42f83c0001d6e97f2bd523a1c49a0e8574fb66380ea28d23a7c4d54784f9f0 +a31c05f7032f30d1dac06678be64d0250a071fd655e557400e4a7f4c152be4d5c7aa32529baf3e5be7c4bd49820054f6 +b95ac0848cd322684772119f5b682d90a66bbf9dac411d9d86d2c34844bbd944dbaf8e47aa41380455abd51687931a78 +ae4a6a5ce9553b65a05f7935e61e496a4a0f6fd8203367a2c627394c9ce1e280750297b74cdc48fd1d9a31e93f97bef4 +a22daf35f6e9b05e52e0b07f7bd1dbbebd2c263033fb0e1b2c804e2d964e2f11bc0ece6aca6af079dd3a9939c9c80674 +902150e0cb1f16b9b59690db35281e28998ce275acb313900da8b2d8dfd29fa1795f8ca3ff820c31d0697de29df347c1 +b17b5104a5dc665cdd7d47e476153d715eb78c6e5199303e4b5445c21a7fa7cf85fe7cfd08d7570f4e84e579b005428c +a03f49b81c15433f121680aa02d734bb9e363af2156654a62bcb5b2ba2218398ccb0ff61104ea5d7df5b16ea18623b1e +802101abd5d3c88876e75a27ffc2f9ddcce75e6b24f23dba03e5201281a7bd5cc7530b6a003be92d225093ca17d3c3bb +a4d183f63c1b4521a6b52226fc19106158fc8ea402461a5cccdaa35fee93669df6a8661f45c1750cd01308149b7bf08e +8d17c22e0c8403b69736364d460b3014775c591032604413d20a5096a94d4030d7c50b9fe3240e31d0311efcf9816a47 +947225acfcce5992eab96276f668c3cbe5f298b90a59f2bb213be9997d8850919e8f496f182689b5cbd54084a7332482 +8df6f4ed216fc8d1905e06163ba1c90d336ab991a18564b0169623eb39b84e627fa267397da15d3ed754d1f3423bff07 +83480007a88f1a36dea464c32b849a3a999316044f12281e2e1c25f07d495f9b1710b4ba0d88e9560e72433addd50bc2 +b3019d6e591cf5b33eb972e49e06c6d0a82a73a75d78d383dd6f6a4269838289e6e07c245f54fed67f5c9bb0fd5e1c5f +92e8ce05e94927a9fb02debadb99cf30a26172b2705003a2c0c47b3d8002bf1060edb0f6a5750aad827c98a656b19199 +ac2aff801448dbbfc13cca7d603fd9c69e82100d997faf11f465323b97255504f10c0c77401e4d1890339d8b224f5803 +b0453d9903d08f508ee27e577445dc098baed6cde0ac984b42e0f0efed62760bd58d5816cf1e109d204607b7b175e30c +ae68dc4ba5067e825d46d2c7c67f1009ceb49d68e8d3e4c57f4bcd299eb2de3575d42ea45e8722f8f28497a6e14a1cfe +b22486c2f5b51d72335ce819bbafb7fa25eb1c28a378a658f13f9fc79cd20083a7e573248d911231b45a5cf23b561ca7 +89d1201d1dbd6921867341471488b4d2fd0fc773ae1d4d074c78ae2eb779a59b64c00452c2a0255826fca6b3d03be2b1 +a2998977c91c7a53dc6104f5bc0a5b675e5350f835e2f0af69825db8af4aeb68435bdbcc795f3dd1f55e1dd50bc0507f +b0be4937a925b3c05056ed621910d535ccabf5ab99fd3b9335080b0e51d9607d0fd36cb5781ff340018f6acfca4a9736 +aea145a0f6e0ba9df8e52e84bb9c9de2c2dc822f70d2724029b153eb68ee9c17de7d35063dcd6a39c37c59fdd12138f7 +91cb4545d7165ee8ffbc74c874baceca11fdebbc7387908d1a25877ca3c57f2c5def424dab24148826832f1e880bede0 +b3b579cb77573f19c571ad5eeeb21f65548d7dff9d298b8d7418c11f3e8cd3727c5b467f013cb87d6861cfaceee0d2e3 +b98a1eeec2b19fecc8378c876d73645aa52fb99e4819903735b2c7a885b242787a30d1269a04bfb8573d72d9bbc5f0f0 +940c1f01ed362bd588b950c27f8cc1d52276c71bb153d47f07ec85b038c11d9a8424b7904f424423e714454d5e80d1cd +aa343a8ecf09ce11599b8cf22f7279cf80f06dbf9f6d62cb05308dbbb39c46fd0a4a1240b032665fbb488a767379b91b +87c3ac72084aca5974599d3232e11d416348719e08443acaba2b328923af945031f86432e170dcdd103774ec92e988c9 +91d6486eb5e61d2b9a9e742c20ec974a47627c6096b3da56209c2b4e4757f007e793ebb63b2b246857c9839b64dc0233 +aebcd3257d295747dd6fc4ff910d839dd80c51c173ae59b8b2ec937747c2072fa85e3017f9060aa509af88dfc7529481 +b3075ba6668ca04eff19efbfa3356b92f0ab12632dcda99cf8c655f35b7928c304218e0f9799d68ef9f809a1492ff7db +93ba7468bb325639ec2abd4d55179c69fd04eaaf39fc5340709227bbaa4ad0a54ea8b480a1a3c8d44684e3be0f8d1980 +a6aef86c8c0d92839f38544d91b767c582568b391071228ff5a5a6b859c87bf4f81a7d926094a4ada1993ddbd677a920 +91dcd6d14207aa569194aa224d1e5037b999b69ade52843315ca61ba26abe9a76412c9e88259bc5cf5d7b95b97d9c3bc +b3b483d31c88f78d49bd065893bc1e3d2aa637e27dedb46d9a7d60be7660ce7a10aaaa7deead362284a52e6d14021178 +8e5730070acf8371461ef301cc4523e8e672aa0e3d945d438a0e0aa6bdf8cb9c685dcf38df429037b0c8aff3955c6f5b +b8c6d769890a8ee18dc4f9e917993315877c97549549b34785a92543cbeec96a08ae3a28d6e809c4aacd69de356c0012 +95ca86cd384eaceaa7c077c5615736ca31f36824bd6451a16142a1edc129fa42b50724aeed7c738f08d7b157f78b569e +94df609c6d71e8eee7ab74226e371ccc77e01738fe0ef1a6424435b4570fe1e5d15797b66ed0f64eb88d4a3a37631f0e +89057b9783212add6a0690d6bb99097b182738deff2bd9e147d7fd7d6c8eacb4c219923633e6309ad993c24572289901 +83a0f9f5f265c5a0e54defa87128240235e24498f20965009fef664f505a360b6fb4020f2742565dfc7746eb185bcec0 +91170da5306128931349bc3ed50d7df0e48a68b8cc8420975170723ac79d8773e4fa13c5f14dc6e3fafcad78379050b1 +b7178484d1b55f7e56a4cc250b6b2ec6040437d96bdfddfa7b35ed27435860f3855c2eb86c636f2911b012eb83b00db8 +ac0b00c4322d1e4208e09cd977b4e54d221133ff09551f75b32b0b55d0e2be80941dda26257b0e288c162e63c7e9cf68 +9690ed9e7e53ed37ff362930e4096b878b12234c332fd19d5d064824084245952eda9f979e0098110d6963e468cf513e +b6fa547bb0bb83e5c5be0ed462a8783fba119041c136a250045c09d0d2af330c604331e7de960df976ff76d67f8000cd +814603907c21463bcf4e59cfb43066dfe1a50344ae04ef03c87c0f61b30836c3f4dea0851d6fa358c620045b7f9214c8 +9495639e3939fad2a3df00a88603a5a180f3c3a0fe4d424c35060e2043e0921788003689887b1ed5be424d9a89bb18bb +aba4c02d8d57f2c92d5bc765885849e9ff8393d6554f5e5f3e907e5bfac041193a0d8716d7861104a4295d5a03c36b03 +8ead0b56c1ca49723f94a998ba113b9058059321da72d9e395a667e6a63d5a9dac0f5717cec343f021695e8ced1f72af +b43037f7e3852c34ed918c5854cd74e9d5799eeddfe457d4f93bb494801a064735e326a76e1f5e50a339844a2f4a8ec9 +99db8422bb7302199eb0ff3c3d08821f8c32f53a600c5b6fb43e41205d96adae72be5b460773d1280ad1acb806af9be8 +8a9be08eae0086c0f020838925984df345c5512ff32e37120b644512b1d9d4fecf0fd30639ca90fc6cf334a86770d536 +81b43614f1c28aa3713a309a88a782fb2bdfc4261dd52ddc204687791a40cf5fd6a263a8179388596582cccf0162efc2 +a9f3a8b76912deb61d966c75daf5ddb868702ebec91bd4033471c8e533183df548742a81a2671de5be63a502d827437d +902e2415077f063e638207dc7e14109652e42ab47caccd6204e2870115791c9defac5425fd360b37ac0f7bd8fe7011f8 +aa18e4fdc1381b59c18503ae6f6f2d6943445bd00dd7d4a2ad7e5adad7027f2263832690be30d456e6d772ad76f22350 +a348b40ba3ba7d81c5d4631f038186ebd5e5f314f1ea737259151b07c3cc8cf0c6ed4201e71bcc1c22fefda81a20cde6 +aa1306f7ac1acbfc47dc6f7a0cb6d03786cec8c8dc8060388ccda777bca24bdc634d03e53512c23dba79709ff64f8620 +818ccfe46e700567b7f3eb400e5a35f6a5e39b3db3aa8bc07f58ace35d9ae5a242faf8dbccd08d9a9175bbce15612155 +b7e3da2282b65dc8333592bb345a473f03bd6df69170055fec60222de9897184536bf22b9388b08160321144d0940279 +a4d976be0f0568f4e57de1460a1729129252b44c552a69fceec44e5b97c96c711763360d11f9e5bf6d86b4976bf40d69 +85d185f0397c24c2b875b09b6328a23b87982b84ee880f2677a22ff4c9a1ba9f0fea000bb3f7f66375a00d98ebafce17 +b4ccbb8c3a2606bd9b87ce022704663af71d418351575f3b350d294f4efc68c26f9a2ce49ff81e6ff29c3b63d746294e +93ffd3265fddb63724dfde261d1f9e22f15ecf39df28e4d89e9fea03221e8e88b5dd9b77628bacaa783c6f91802d47cc +b1fd0f8d7a01378e693da98d03a2d2fda6b099d03454b6f2b1fa6472ff6bb092751ce6290059826b74ac0361eab00e1e +a89f440c71c561641589796994dd2769616b9088766e983c873fae0716b95c386c8483ab8a4f367b6a68b72b7456dd32 +af4fe92b01d42d03dd5d1e7fa55e96d4bbcb7bf7d4c8c197acd16b3e0f3455807199f683dcd263d74547ef9c244b35cc +a8227f6e0a344dfe76bfbe7a1861be32c4f4bed587ccce09f9ce2cf481b2dda8ae4f566154bc663d15f962f2d41761bd +a7b361663f7495939ed7f518ba45ea9ff576c4e628995b7aea026480c17a71d63fc2c922319f0502eb7ef8f14a406882 +8ddcf382a9f39f75777160967c07012cfa89e67b19714a7191f0c68eaf263935e5504e1104aaabd0899348c972a8d3c6 +98c95b9f6f5c91f805fb185eedd06c6fc4457d37dd248d0be45a6a168a70031715165ea20606245cbdf8815dc0ac697f +805b44f96e001e5909834f70c09be3efcd3b43632bcac5b6b66b6d227a03a758e4b1768ce2a723045681a1d34562aaeb +b0e81b07cdc45b3dca60882676d9badb99f25c461b7efe56e3043b80100bb62d29e1873ae25eb83087273160ece72a55 +b0c53f0abe78ee86c7b78c82ae1f7c070bb0b9c45c563a8b3baa2c515d482d7507bb80771e60b38ac13f78b8af92b4a9 +a7838ef6696a9e4d2e5dfd581f6c8d6a700467e8fd4e85adabb5f7a56f514785dd4ab64f6f1b48366f7d94728359441b +88c76f7700a1d23c30366a1d8612a796da57b2500f97f88fdf2d76b045a9d24e7426a8ffa2f4e86d3046937a841dad58 +ad8964baf98c1f02e088d1d9fcb3af6b1dfa44cdfe0ed2eae684e7187c33d3a3c28c38e8f4e015f9c04d451ed6f85ff6 +90e9d00a098317ececaa9574da91fc149eda5b772dedb3e5a39636da6603aa007804fa86358550cfeff9be5a2cb7845e +a56ff4ddd73d9a6f5ab23bb77efa25977917df63571b269f6a999e1ad6681a88387fcc4ca3b26d57badf91b236503a29 +97ad839a6302c410a47e245df84c01fb9c4dfef86751af3f9340e86ff8fc3cd52fa5ff0b9a0bd1d9f453e02ca80658a6 +a4c8c44cbffa804129e123474854645107d1f0f463c45c30fd168848ebea94880f7c0c5a45183e9eb837f346270bdb35 +a72e53d0a1586d736e86427a93569f52edd2f42b01e78aee7e1961c2b63522423877ae3ac1227a2cf1e69f8e1ff15bc3 +8559f88a7ef13b4f09ac82ae458bbae6ab25671cfbf52dae7eac7280d6565dd3f0c3286aec1a56a8a16dc3b61d78ce47 +8221503f4cdbed550876c5dc118a3f2f17800c04e8be000266633c83777b039a432d576f3a36c8a01e8fd18289ebc10b +99bfbe5f3e46d4d898a578ba86ed26de7ed23914bd3bcdf3c791c0bcd49398a52419077354a5ab75cea63b6c871c6e96 +aa134416d8ff46f2acd866c1074af67566cfcf4e8be8d97329dfa0f603e1ff208488831ce5948ac8d75bfcba058ddcaa +b02609d65ebfe1fe8e52f21224a022ea4b5ea8c1bd6e7b9792eed8975fc387cdf9e3b419b8dd5bcce80703ab3a12a45f +a4f14798508698fa3852e5cac42a9db9797ecee7672a54988aa74037d334819aa7b2ac7b14efea6b81c509134a6b7ad2 +884f01afecbcb987cb3e7c489c43155c416ed41340f61ecb651d8cba884fb9274f6d9e7e4a46dd220253ae561614e44c +a05523c9e71dce1fe5307cc71bd721feb3e1a0f57a7d17c7d1c9fb080d44527b7dbaa1f817b1af1c0b4322e37bc4bb1e +8560aec176a4242b39f39433dd5a02d554248c9e49d3179530815f5031fee78ba9c71a35ceeb2b9d1f04c3617c13d8f0 +996aefd402748d8472477cae76d5a2b92e3f092fc834d5222ae50194dd884c9fb8b6ed8e5ccf8f6ed483ddbb4e80c747 +8fd09900320000cbabc40e16893e2fcf08815d288ec19345ad7b6bb22f7d78a52b6575a3ca1ca2f8bc252d2eafc928ec +939e51f73022bc5dc6862a0adf8fb8a3246b7bfb9943cbb4b27c73743926cc20f615a036c7e5b90c80840e7f1bfee0e7 +a0a6258700cadbb9e241f50766573bf9bdb7ad380b1079dc3afb4054363d838e177b869cad000314186936e40359b1f2 +972699a4131c8ed27a2d0e2104d54a65a7ff1c450ad9da3a325c662ab26869c21b0a84d0700b98c8b5f6ce3b746873d7 +a454c7fe870cb8aa6491eafbfb5f7872d6e696033f92e4991d057b59d70671f2acdabef533e229878b60c7fff8f748b1 +a167969477214201f09c79027b10221e4707662e0c0fde81a0f628249f2f8a859ce3d30a7dcc03b8ecca8f7828ad85c7 +8ff6b7265175beb8a63e1dbf18c9153fb2578c207c781282374f51b40d57a84fd2ef2ea2b9c6df4a54646788a62fd17f +a3d7ebeccde69d73d8b3e76af0da1a30884bb59729503ff0fb0c3bccf9221651b974a6e72ea33b7956fc3ae758226495 +b71ef144c9a98ce5935620cb86c1590bd4f48e5a2815d25c0cdb008fde628cf628c31450d3d4f67abbfeb16178a74cfd +b5e0a16d115134f4e2503990e3f2035ed66b9ccf767063fe6747870d97d73b10bc76ed668550cb82eedc9a2ca6f75524 +b30ffaaf94ee8cbc42aa2c413175b68afdb207dbf351fb20be3852cb7961b635c22838da97eaf43b103aff37e9e725cc +98aa7d52284f6c1f22e272fbddd8c8698cf8f5fbb702d5de96452141fafb559622815981e50b87a72c2b1190f59a7deb +81fbacda3905cfaf7780bb4850730c44166ed26a7c8d07197a5d4dcd969c09e94a0461638431476c16397dd7bdc449f9 +95e47021c1726eac2e5853f570d6225332c6e48e04c9738690d53e07c6b979283ebae31e2af1fc9c9b3e59f87e5195b1 +ac024a661ba568426bb8fce21780406537f518075c066276197300841e811860696f7588188bc01d90bace7bc73d56e3 +a4ebcaf668a888dd404988ab978594dee193dad2d0aec5cdc0ccaf4ec9a7a8228aa663db1da8ddc52ec8472178e40c32 +a20421b8eaf2199d93b083f2aff37fb662670bd18689d046ae976d1db1fedd2c2ff897985ecc6277b396db7da68bcb27 +8bc33d4b40197fd4d49d1de47489d10b90d9b346828f53a82256f3e9212b0cbc6930b895e879da9cec9fedf026aadb3e +aaafdd1bec8b757f55a0433eddc0a39f818591954fd4e982003437fcceb317423ad7ee74dbf17a2960380e7067a6b4e2 +aad34277ebaed81a6ec154d16736866f95832803af28aa5625bf0461a71d02b1faba02d9d9e002be51c8356425a56867 +976e9c8b150d08706079945bd0e84ab09a648ecc6f64ded9eb5329e57213149ae409ae93e8fbd8eda5b5c69f5212b883 +8097fae1653247d2aed4111533bc378171d6b2c6d09cbc7baa9b52f188d150d645941f46d19f7f5e27b7f073c1ebd079 +83905f93b250d3184eaba8ea7d727c4464b6bdb027e5cbe4f597d8b9dc741dcbea709630bd4fd59ce24023bec32fc0f3 +8095030b7045cff28f34271386e4752f9a9a0312f8df75de4f424366d78534be2b8e1720a19cb1f9a2d21105d790a225 +a7b7b73a6ae2ed1009c49960374b0790f93c74ee03b917642f33420498c188a169724945a975e5adec0a1e83e07fb1b2 +856a41c54df393b6660b7f6354572a4e71c8bfca9cabaffb3d4ef2632c015e7ee2bc10056f3eccb3dbed1ad17d939178 +a8f7a55cf04b38cd4e330394ee6589da3a07dc9673f74804fdf67b364e0b233f14aec42e783200a2e4666f7c5ff62490 +82c529f4e543c6bca60016dc93232c115b359eaee2798a9cf669a654b800aafe6ab4ba58ea8b9cdda2b371c8d62fa845 +8caab020c1baddce77a6794113ef1dfeafc5f5000f48e97f4351b588bf02f1f208101745463c480d37f588d5887e6d8c +8fa91b3cc400f48b77b6fd77f3b3fbfb3f10cdff408e1fd22d38f77e087b7683adad258804409ba099f1235b4b4d6fea +8aa02787663d6be9a35677d9d8188b725d5fcd770e61b11b64e3def8808ea5c71c0a9afd7f6630c48634546088fcd8e2 +b5635b7b972e195cab878b97dea62237c7f77eb57298538582a330b1082f6207a359f2923864630136d8b1f27c41b9aa +8257bb14583551a65975946980c714ecd6e5b629672bb950b9caacd886fbd22704bc9e3ba7d30778adab65dc74f0203a +ab5fe1cd12634bfa4e5c60d946e2005cbd38f1063ec9a5668994a2463c02449a0a185ef331bd86b68b6e23a8780cb3ba +a7d3487da56cda93570cc70215d438204f6a2709bfb5fda6c5df1e77e2efc80f4235c787e57fbf2c74aaff8cbb510a14 +b61cff7b4c49d010e133319fb828eb900f8a7e55114fc86b39c261a339c74f630e1a7d7e1350244ada566a0ff3d46c4b +8d4d1d55d321d278db7a85522ccceca09510374ca81d4d73e3bb5249ace7674b73900c35a531ec4fa6448fabf7ad00dc +966492248aee24f0f56c8cfca3c8ec6ba3b19abb69ae642041d4c3be8523d22c65c4dafcab4c58989ccc4e0bd2f77919 +b20c320a90cb220b86e1af651cdc1e21315cd215da69f6787e28157172f93fc8285dcd59b039c626ed8ca4633cba1a47 +aae9e6b22f018ceb5c0950210bb8182cb8cb61014b7e14581a09d36ebd1bbfebdb2b82afb7fdb0cf75e58a293d9c456d +875547fb67951ad37b02466b79f0c9b985ccbc500cfb431b17823457dc79fb9597ec42cd9f198e15523fcd88652e63a4 +92afce49773cb2e20fb21e4f86f18e0959ebb9c33361547ddb30454ee8e36b1e234019cbdca0e964cb292f7f77df6b90 +8af85343dfe1821464c76ba11c216cbef697b5afc69c4d821342e55afdac047081ec2e3f7b09fc14b518d9a23b78c003 +b7de4a1648fd63f3a918096ea669502af5357438e69dac77cb8102b6e6c15c76e033cfaa80dafc806e535ede5c1a20aa +ac80e9b545e8bd762951d96c9ce87f629d01ffcde07efc2ef7879ca011f1d0d8a745abf26c9d452541008871304fac00 +a4cf0f7ed724e481368016c38ea5816698a5f68eb21af4d3c422d2ba55f96a33e427c2aa40de1b56a7cfac7f7cf43ab0 +899b0a678bb2db2cae1b44e75a661284844ebcdd87abf308fedeb2e4dbe5c5920c07db4db7284a7af806a2382e8b111a +af0588a2a4afce2b1b13c1230816f59e8264177e774e4a341b289a101dcf6af813638fed14fb4d09cb45f35d5d032609 +a4b8df79e2be76e9f5fc5845f06fe745a724cf37c82fcdb72719b77bdebea3c0e763f37909373e3a94480cc5e875cba0 +83e42c46d88930c8f386b19fd999288f142d325e2ebc86a74907d6d77112cb0d449bc511c95422cc810574031a8cbba9 +b5e39534070de1e5f6e27efbdd3dc917d966c2a9b8cf2d893f964256e95e954330f2442027dc148c776d63a95bcde955 +958607569dc28c075e658cd4ae3927055c6bc456eef6212a6fea8205e48ed8777a8064f584cda38fe5639c371e2e7fba +812adf409fa63575113662966f5078a903212ffb65c9b0bbe62da0f13a133443a7062cb8fd70f5e5dd5559a32c26d2c8 +a679f673e5ce6a3cce7fa31f22ee3785e96bcb55e5a776e2dd3467bef7440e3555d1a9b87cb215e86ee9ed13a090344b +afedbb34508b159eb25eb2248d7fe328f86ef8c7d84c62d5b5607d74aae27cc2cc45ee148eb22153b09898a835c58df4 +b75505d4f6b67d31e665cfaf5e4acdb5838ae069166b7fbcd48937c0608a59e40a25302fcc1873d2e81c1782808c70f0 +b62515d539ec21a155d94fc00ea3c6b7e5f6636937bce18ed5b618c12257fb82571886287fd5d1da495296c663ebc512 +ab8e1a9446bbdd588d1690243b1549d230e6149c28f59662b66a8391a138d37ab594df38e7720fae53217e5c3573b5be +b31e8abf4212e03c3287bb2c0a153065a7290a16764a0bac8f112a72e632185a654bb4e88fdd6053e6c7515d9719fadb +b55165477fe15b6abd2d0f4fddaa9c411710dcc4dd712daba3d30e303c9a3ee5415c256f9dc917ecf18c725b4dbab059 +a0939d4f57cacaae549b78e87cc234de4ff6a35dc0d9cd5d7410abc30ebcd34c135e008651c756e5a9d2ca79c40ef42b +8cf10e50769f3443340844aad4d56ec790850fed5a41fcbd739abac4c3015f0a085a038fbe7fae9f5ad899cce5069f6b +924055e804d82a99ea4bb160041ea4dc14b568abf379010bc1922fde5d664718c31d103b8b807e3a1ae809390e708c73 +8ec0f9d26f71b0f2e60a179e4fd1778452e2ffb129d50815e5d7c7cb9415fa69ae5890578086e8ef6bfde35ad2a74661 +98c7f12b15ec4426b59f737f73bf5faea4572340f4550b7590dfb7f7ffedb2372e3e555977c63946d579544c53210ad0 +8a935f7a955c78f69d66f18eee0092e5e833fa621781c9581058e219af4d7ceee48b84e472e159dda6199715fb2f9acf +b78d4219f95a2dbfaa7d0c8a610c57c358754f4f43c2af312ab0fe8f10a5f0177e475332fb8fd23604e474fc2abeb051 +8d086a14803392b7318c28f1039a17e3cfdcece8abcaca3657ec3d0ac330842098a85c0212f889fabb296dfb133ce9aa +a53249f417aac82f2c2a50c244ce21d3e08a5e5a8bd33bec2a5ab0d6cd17793e34a17edfa3690899244ce201e2fb9986 +8619b0264f9182867a1425be514dc4f1ababc1093138a728a28bd7e4ecc99b9faaff68c23792264bc6e4dce5f52a5c52 +8c171edbbbde551ec19e31b2091eb6956107dd9b1f853e1df23bff3c10a3469ac77a58335eee2b79112502e8e163f3de +a9d19ec40f0ca07c238e9337c6d6a319190bdba2db76fb63902f3fb459aeeb50a1ac30db5b25ee1b4201f3ca7164a7f4 +b9c6ec14b1581a03520b8d2c1fbbc31fb8ceaef2c0f1a0d0080b6b96e18442f1734bea7ef7b635d787c691de4765d469 +8cb437beb4cfa013096f40ccc169a713dc17afee6daa229a398e45fd5c0645a9ad2795c3f0cd439531a7151945d7064d +a6e8740cc509126e146775157c2eb278003e5bb6c48465c160ed27888ca803fa12eee1f6a8dd7f444f571664ed87fdc1 +b75c1fecc85b2732e96b3f23aefb491dbd0206a21d682aee0225838dc057d7ed3b576176353e8e90ae55663f79e986e4 +ad8d249b0aea9597b08358bce6c77c1fd552ef3fbc197d6a1cfe44e5e6f89b628b12a6fb04d5dcfcbacc51f46e4ae7bb +b998b2269932cbd58d04b8e898d373ac4bb1a62e8567484f4f83e224061bc0f212459f1daae95abdbc63816ae6486a55 +827988ef6c1101cddc96b98f4a30365ff08eea2471dd949d2c0a9b35c3bbfa8c07054ad1f4c88c8fbf829b20bb5a9a4f +8692e638dd60babf7d9f2f2d2ce58e0ac689e1326d88311416357298c6a2bffbfebf55d5253563e7b3fbbf5072264146 +a685d75b91aea04dbc14ab3c1b1588e6de96dae414c8e37b8388766029631b28dd860688079b12d09cd27f2c5af11adf +b57eced93eec3371c56679c259b34ac0992286be4f4ff9489d81cf9712403509932e47404ddd86f89d7c1c3b6391b28c +a1c8b4e42ebcbd8927669a97f1b72e236fb19249325659e72be7ddaaa1d9e81ca2abb643295d41a8c04a2c01f9c0efd7 +877c33de20d4ed31674a671ba3e8f01a316581e32503136a70c9c15bf0b7cb7b1cba6cd4eb641fad165fb3c3c6c235fd +a2a469d84ec478da40838f775d11ad38f6596eb41caa139cc190d6a10b5108c09febae34ffdafac92271d2e73c143693 +972f817caedb254055d52e963ed28c206848b6c4cfdb69dbc961c891f8458eaf582a6d4403ce1177d87bc2ea410ef60a +accbd739e138007422f28536381decc54bb6bd71d93edf3890e54f9ef339f83d2821697d1a4ac1f5a98175f9a9ecb9b5 +8940f8772e05389f823b62b3adc3ed541f91647f0318d7a0d3f293aeeb421013de0d0a3664ea53dd24e5fbe02d7efef6 +8ecce20f3ef6212edef07ec4d6183fda8e0e8cad2c6ccd0b325e75c425ee1faba00b5c26b4d95204238931598d78f49d +97cc72c36335bd008afbed34a3b0c7225933faba87f7916d0a6d2161e6f82e0cdcda7959573a366f638ca75d30e9dab1 +9105f5de8699b5bdb6bd3bb6cc1992d1eac23929c29837985f83b22efdda92af64d9c574aa9640475087201bbbe5fd73 +8ffb33c4f6d05c413b9647eb6933526a350ed2e4278ca2ecc06b0e8026d8dbe829c476a40e45a6df63a633090a3f82ef +8bfc6421fdc9c2d2aaa68d2a69b1a2728c25b84944cc3e6a57ff0c94bfd210d1cbf4ff3f06702d2a8257024d8be7de63 +a80e1dc1dddfb41a70220939b96dc6935e00b32fb8be5dff4eed1f1c650002ff95e4af481c43292e3827363b7ec4768a +96f714ebd54617198bd636ba7f7a7f8995a61db20962f2165078d9ed8ee764d5946ef3cbdc7ebf8435bb8d5dd4c1deac +8cdb0890e33144d66391d2ae73f5c71f5a861f72bc93bff6cc399fc25dd1f9e17d8772592b44593429718784802ac377 +8ccf9a7f80800ee770b92add734ed45a73ecc31e2af0e04364eefc6056a8223834c7c0dc9dfc52495bdec6e74ce69994 +aa0875f423bd68b5f10ba978ddb79d3b96ec093bfbac9ff366323193e339ed7c4578760fb60f60e93598bdf1e5cc4995 +a9214f523957b59c7a4cb61a40251ad72aba0b57573163b0dc0f33e41d2df483fb9a1b85a5e7c080e9376c866790f8cb +b6224b605028c6673a536cc8ff9aeb94e7a22e686fda82cf16068d326469172f511219b68b2b3affb7933af0c1f80d07 +b6d58968d8a017c6a34e24c2c09852f736515a2c50f37232ac6b43a38f8faa7572cc31dade543b594b61b5761c4781d0 +8a97cefe5120020c38deeb861d394404e6c993c6cbd5989b6c9ebffe24f46ad11b4ba6348e2991cbf3949c28cfc3c99d +95bf046f8c3a9c0ce2634be4de3713024daec3fc4083e808903b25ce3ac971145af90686b451efcc72f6b22df0216667 +a6a4e2f71b8fa28801f553231eff2794c0f10d12e7e414276995e21195abc9c2983a8997e41af41e78d19ff6fbb2680b +8e5e62a7ca9c2f58ebaab63db2ff1fb1ff0877ae94b7f5e2897f273f684ae639dff44cc65718f78a9c894787602ab26a +8542784383eec4f565fcb8b9fc2ad8d7a644267d8d7612a0f476fc8df3aff458897a38003d506d24142ad18f93554f2b +b7db68ba4616ea072b37925ec4fb39096358c2832cc6d35169e032326b2d6614479f765ae98913c267105b84afcb9bf2 +8b31dbb9457d23d416c47542c786e07a489af35c4a87dadb8ee91bea5ac4a5315e65625d78dad2cf8f9561af31b45390 +a8545a1d91ac17257732033d89e6b7111db8242e9c6ebb0213a88906d5ef407a2c6fdb444e29504b06368b6efb4f4839 +b1bd85d29ebb28ccfb05779aad8674906b267c2bf8cdb1f9a0591dd621b53a4ee9f2942687ee3476740c0b4a7621a3ae +a2b54534e152e46c50d91fff03ae9cd019ff7cd9f4168b2fe7ac08ef8c3bbc134cadd3f9d6bd33d20ae476c2a8596c8a +b19b571ff4ae3e9f5d95acda133c455e72c9ea9973cae360732859836c0341c4c29ab039224dc5bc3deb824e031675d8 +940b5f80478648bac025a30f3efeb47023ce20ee98be833948a248bca6979f206bb28fc0f17b90acf3bb4abd3d14d731 +8f106b40588586ac11629b96d57808ad2808915d89539409c97414aded90b4ff23286a692608230a52bff696055ba5d6 +ae6bda03aa10da3d2abbc66d764ca6c8d0993e7304a1bdd413eb9622f3ca1913baa6da1e9f4f9e6cf847f14f44d6924d +a18e7796054a340ef826c4d6b5a117b80927afaf2ebd547794c400204ae2caf277692e2eabb55bc2f620763c9e9da66d +8d2d25180dc2c65a4844d3e66819ccfcf48858f0cc89e1c77553b463ec0f7feb9a4002ce26bc618d1142549b9850f232 +863f413a394de42cc8166c1c75d513b91d545fff1de6b359037a742c70b008d34bf8e587afa2d62c844d0c6f0ea753e7 +83cd0cf62d63475e7fcad18a2e74108499cdbf28af2113cfe005e3b5887794422da450b1944d0a986eb7e1f4c3b18f25 +b4f8b350a6d88fea5ab2e44715a292efb12eb52df738c9b2393da3f1ddee68d0a75b476733ccf93642154bceb208f2b8 +b3f52aaa4cd4221cb9fc45936cc67fd3864bf6d26bf3dd86aa85aa55ecfc05f5e392ecce5e7cf9406b4b1c4fce0398c8 +b33137084422fb643123f40a6df2b498065e65230fc65dc31791c330e898c51c3a65ff738930f32c63d78f3c9315f85b +91452bfa75019363976bb7337fe3a73f1c10f01637428c135536b0cdc7da5ce558dae3dfc792aa55022292600814a8ef +ad6ba94c787cd4361ca642c20793ea44f1f127d4de0bb4a77c7fbfebae0fcadbf28e2cb6f0c12c12a07324ec8c19761d +890aa6248b17f1501b0f869c556be7bf2b1d31a176f9978bb97ab7a6bd4138eed32467951c5ef1871944b7f620542f43 +82111db2052194ee7dd22ff1eafffac0443cf969d3762cceae046c9a11561c0fdce9c0711f88ac01d1bed165f8a7cee3 +b1527b71df2b42b55832f72e772a466e0fa05743aacc7814f4414e4bcc8d42a4010c9e0fd940e6f254cafedff3cd6543 +922370fa49903679fc565f09c16a5917f8125e72acfeb060fcdbadbd1644eb9f4016229756019c93c6d609cda5d5d174 +aa4c7d98a96cab138d2a53d4aee8ebff6ef903e3b629a92519608d88b3bbd94de5522291a1097e6acf830270e64c8ee1 +b3dc21608a389a72d3a752883a382baaafc61ecc44083b832610a237f6a2363f24195acce529eb4aed4ef0e27a12b66e +94619f5de05e07b32291e1d7ab1d8b7337a2235e49d4fb5f3055f090a65e932e829efa95db886b32b153bdd05a53ec8c +ade1e92722c2ffa85865d2426fb3d1654a16477d3abf580cfc45ea4b92d5668afc9d09275d3b79283e13e6b39e47424d +b7201589de7bed094911dd62fcd25c459a8e327ac447b69f541cdba30233063e5ddffad0b67e9c3e34adcffedfd0e13d +809d325310f862d6549e7cb40f7e5fc9b7544bd751dd28c4f363c724a0378c0e2adcb5e42ec8f912f5f49f18f3365c07 +a79c20aa533de7a5d671c99eb9eb454803ba54dd4f2efa3c8fec1a38f8308e9905c71e9282955225f686146388506ff6 +a85eeacb5e8fc9f3ed06a3fe2dc3108ab9f8c5877b148c73cf26e4e979bf5795edbe2e63a8d452565fd1176ed40402b2 +97ef55662f8a1ec0842b22ee21391227540adf7708f491436044f3a2eb18c471525e78e1e14fa292507c99d74d7437c6 +93110d64ed5886f3d16ce83b11425576a3a7a9bb831cd0de3f9a0b0f2270a730d68136b4ef7ff035ede004358f419b5c +ac9ed0a071517f0ae4f61ce95916a90ba9a77a3f84b0ec50ef7298acdcd44d1b94525d191c39d6bd1bb68f4471428760 +98abd6a02c7690f5a339adf292b8c9368dfc12e0f8069cf26a5e0ce54b4441638f5c66ea735142f3c28e00a0024267e6 +b51efb73ba6d44146f047d69b19c0722227a7748b0e8f644d0fc9551324cf034c041a2378c56ce8b58d06038fb8a78de +8f115af274ef75c1662b588b0896b97d71f8d67986ae846792702c4742ab855952865ce236b27e2321967ce36ff93357 +b3c4548f14d58b3ab03c222da09e4381a0afe47a72d18d50a94e0008797f78e39e99990e5b4757be62310d400746e35a +a9b1883bd5f31f909b8b1b6dcb48c1c60ed20aa7374b3ffa7f5b2ed036599b5bef33289d23c80a5e6420d191723b92f7 +85d38dffd99487ae5bb41ab4a44d80a46157bbbe8ef9497e68f061721f74e4da513ccc3422936b059575975f6787c936 +adf870fcb96e972c033ab7a35d28ae79ee795f82bc49c3bd69138f0e338103118d5529c53f2d72a9c0d947bf7d312af2 +ab4c7a44e2d9446c6ff303eb49aef0e367a58b22cc3bb27b4e69b55d1d9ee639c9234148d2ee95f9ca8079b1457d5a75 +a386420b738aba2d7145eb4cba6d643d96bda3f2ca55bb11980b318d43b289d55a108f4bc23a9606fb0bccdeb3b3bb30 +847020e0a440d9c4109773ecca5d8268b44d523389993b1f5e60e541187f7c597d79ebd6e318871815e26c96b4a4dbb1 +a530aa7e5ca86fcd1bec4b072b55cc793781f38a666c2033b510a69e110eeabb54c7d8cbcb9c61fee531a6f635ffa972 +87364a5ea1d270632a44269d686b2402da737948dac27f51b7a97af80b66728b0256547a5103d2227005541ca4b7ed04 +8816fc6e16ea277de93a6d793d0eb5c15e9e93eb958c5ef30adaf8241805adeb4da8ce19c3c2167f971f61e0b361077d +8836a72d301c42510367181bb091e4be377777aed57b73c29ef2ce1d475feedd7e0f31676284d9a94f6db01cc4de81a2 +b0d9d8b7116156d9dde138d28aa05a33e61f8a85839c1e9071ccd517b46a5b4b53acb32c2edd7150c15bc1b4bd8db9e3 +ae931b6eaeda790ba7f1cd674e53dc87f6306ff44951fa0df88d506316a5da240df9794ccbd7215a6470e6b31c5ea193 +8c6d5bdf87bd7f645419d7c6444e244fe054d437ed1ba0c122fde7800603a5fadc061e5b836cb22a6cfb2b466f20f013 +90d530c6d0cb654999fa771b8d11d723f54b8a8233d1052dc1e839ea6e314fbed3697084601f3e9bbb71d2b4eaa596df +b0d341a1422588c983f767b1ed36c18b141774f67ef6a43cff8e18b73a009da10fc12120938b8bba27f225bdfd3138f9 +a131b56f9537f460d304e9a1dd75702ace8abd68cb45419695cb8dee76998139058336c87b7afd6239dc20d7f8f940cc +aa6c51fa28975f709329adee1bbd35d49c6b878041841a94465e8218338e4371f5cb6c17f44a63ac93644bf28f15d20f +88440fb584a99ebd7f9ea04aaf622f6e44e2b43bbb49fb5de548d24a238dc8f26c8da2ccf03dd43102bda9f16623f609 +9777b8695b790e702159a4a750d5e7ff865425b95fa0a3c15495af385b91c90c00a6bd01d1b77bffe8c47d01baae846f +8b9d764ece7799079e63c7f01690c8eff00896a26a0d095773dea7a35967a8c40db7a6a74692f0118bf0460c26739af4 +85808c65c485520609c9e61fa1bb67b28f4611d3608a9f7a5030ee61c3aa3c7e7dc17fff48af76b4aecee2cb0dbd22ac +ad2783a76f5b3db008ef5f7e67391fda4e7e36abde6b3b089fc4835b5c339370287935af6bd53998bed4e399eda1136d +96f18ec03ae47c205cc4242ca58e2eff185c9dca86d5158817e2e5dc2207ab84aadda78725f8dc080a231efdc093b940 +97de1ab6c6cc646ae60cf7b86df73b9cf56cc0cd1f31b966951ebf79fc153531af55ca643b20b773daa7cab784b832f7 +870ba266a9bfa86ef644b1ef025a0f1b7609a60de170fe9508de8fd53170c0b48adb37f19397ee8019b041ce29a16576 +ad990e888d279ac4e8db90619d663d5ae027f994a3992c2fbc7d262b5990ae8a243e19157f3565671d1cb0de17fe6e55 +8d9d5adcdd94c5ba3be4d9a7428133b42e485f040a28d16ee2384758e87d35528f7f9868de9bd23d1a42a594ce50a567 +85a33ed75d514ece6ad78440e42f7fcdb59b6f4cff821188236d20edae9050b3a042ce9bc7d2054296e133d033e45022 +92afd2f49a124aaba90de59be85ff269457f982b54c91b06650c1b8055f9b4b0640fd378df02a00e4fc91f7d226ab980 +8c0ee09ec64bd831e544785e3d65418fe83ed9c920d9bb4d0bf6dd162c1264eb9d6652d2def0722e223915615931581c +8369bedfa17b24e9ad48ebd9c5afea4b66b3296d5770e09b00446c5b0a8a373d39d300780c01dcc1c6752792bccf5fd0 +8b9e960782576a59b2eb2250d346030daa50bbbec114e95cdb9e4b1ba18c3d34525ae388f859708131984976ca439d94 +b682bface862008fea2b5a07812ca6a28a58fd151a1d54c708fc2f8572916e0d678a9cb8dc1c10c0470025c8a605249e +a38d5e189bea540a824b36815fc41e3750760a52be0862c4cac68214febdc1a754fb194a7415a8fb7f96f6836196d82a +b9e7fbda650f18c7eb8b40e42cc42273a7298e65e8be524292369581861075c55299ce69309710e5b843cb884de171bd +b6657e5e31b3193874a1bace08f42faccbd3c502fb73ad87d15d18a1b6c2a146f1baa929e6f517db390a5a47b66c0acf +ae15487312f84ed6265e4c28327d24a8a0f4d2d17d4a5b7c29b974139cf93223435aaebe3af918f5b4bb20911799715f +8bb4608beb06bc394e1a70739b872ce5a2a3ffc98c7547bf2698c893ca399d6c13686f6663f483894bccaabc3b9c56ad +b58ac36bc6847077584308d952c5f3663e3001af5ecf2e19cb162e1c58bd6c49510205d453cffc876ca1dc6b8e04a578 +924f65ced61266a79a671ffb49b300f0ea44c50a0b4e3b02064faa99fcc3e4f6061ea8f38168ab118c5d47bd7804590e +8d67d43b8a06b0ff4fafd7f0483fa9ed1a9e3e658a03fb49d9d9b74e2e24858dc1bed065c12392037b467f255d4e5643 +b4d4f87813125a6b355e4519a81657fa97c43a6115817b819a6caf4823f1d6a1169683fd68f8d025cdfa40ebf3069acb +a7fd4d2c8e7b59b8eed3d4332ae94b77a89a2616347402f880bc81bde072220131e6dbec8a605be3a1c760b775375879 +8d4a7d8fa6f55a30df37bcf74952e2fa4fd6676a2e4606185cf154bdd84643fd01619f8fb8813a564f72e3f574f8ce30 +8086fb88e6260e9a9c42e9560fde76315ff5e5680ec7140f2a18438f15bc2cc7d7d43bfb5880b180b738c20a834e6134 +916c4c54721de03934fee6f43de50bb04c81f6f8dd4f6781e159e71c40c60408aa54251d457369d133d4ba3ed7c12cb4 +902e5bf468f11ed9954e2a4a595c27e34abe512f1d6dc08bbca1c2441063f9af3dc5a8075ab910a10ff6c05c1c644a35 +a1302953015e164bf4c15f7d4d35e3633425a78294406b861675667eec77765ff88472306531e5d3a4ec0a2ff0dd6a9e +87874461df3c9aa6c0fa91325576c0590f367075f2f0ecfeb34afe162c04c14f8ce9d608c37ac1adc8b9985bc036e366 +84b50a8a61d3cc609bfb0417348133e698fe09a6d37357ce3358de189efcf35773d78c57635c2d26c3542b13cc371752 +acaed2cff8633d12c1d12bb7270c54d65b0b0733ab084fd47f81d0a6e1e9b6f300e615e79538239e6160c566d8bb8d29 +889e6a0e136372ca4bac90d1ab220d4e1cad425a710e8cdd48b400b73bb8137291ceb36a39440fa84305783b1d42c72f +90952e5becec45b2b73719c228429a2c364991cf1d5a9d6845ae5b38018c2626f4308daa322cab1c72e0f6c621bb2b35 +8f5a97a801b6e9dcd66ccb80d337562c96f7914e7169e8ff0fda71534054c64bf2a9493bb830623d612cfe998789be65 +84f3df8b9847dcf1d63ca470dc623154898f83c25a6983e9b78c6d2d90a97bf5e622445be835f32c1e55e6a0a562ea78 +91d12095cd7a88e7f57f254f02fdb1a1ab18984871dead2f107404bcf8069fe68258c4e6f6ebd2477bddf738135400bb +b771a28bc04baef68604d4723791d3712f82b5e4fe316d7adc2fc01b935d8e644c06d59b83bcb542afc40ebafbee0683 +872f6341476e387604a7e93ae6d6117e72d164e38ebc2b825bc6df4fcce815004d7516423c190c1575946b5de438c08d +90d6b4aa7d40a020cdcd04e8b016d041795961a8e532a0e1f4041252131089114a251791bf57794cadb7d636342f5d1c +899023ba6096a181448d927fed7a0fe858be4eac4082a42e30b3050ee065278d72fa9b9d5ce3bc1372d4cbd30a2f2976 +a28f176571e1a9124f95973f414d5bdbf5794d41c3839d8b917100902ac4e2171eb940431236cec93928a60a77ede793 +838dbe5bcd29c4e465d02350270fa0036cd46f8730b13d91e77afb7f5ed16525d0021d3b2ae173a76c378516a903e0cb +8e105d012dd3f5d20f0f1c4a7e7f09f0fdd74ce554c3032e48da8cce0a77260d7d47a454851387770f5c256fa29bcb88 +8f4df0f9feeb7a487e1d138d13ea961459a6402fd8f8cabb226a92249a0d04ded5971f3242b9f90d08da5ff66da28af6 +ad1cfda4f2122a20935aa32fb17c536a3653a18617a65c6836700b5537122af5a8206befe9eaea781c1244c43778e7f1 +832c6f01d6571964ea383292efc8c8fa11e61c0634a25fa180737cc7ab57bc77f25e614aac9a2a03d98f27b3c1c29de2 +903f89cc13ec6685ac7728521898781fecb300e9094ef913d530bf875c18bcc3ceed7ed51e7b482d45619ab4b025c2e9 +a03c474bb915aad94f171e8d96f46abb2a19c9470601f4c915512ec8b9e743c3938450a2a5b077b4618b9df8809e1dc1 +83536c8456f306045a5f38ae4be2e350878fa7e164ea408d467f8c3bc4c2ee396bd5868008c089183868e4dfad7aa50b +88f26b4ea1b236cb326cd7ad7e2517ec8c4919598691474fe15d09cabcfc37a8d8b1b818f4d112432ee3a716b0f37871 +a44324e3fe96e9c12b40ded4f0f3397c8c7ee8ff5e96441118d8a6bfad712d3ac990b2a6a23231a8f691491ac1fd480f +b0de4693b4b9f932191a21ee88629964878680152a82996c0019ffc39f8d9369bbe2fe5844b68d6d9589ace54af947e4 +8e5d8ba948aea5fd26035351a960e87f0d23efddd8e13236cc8e4545a3dda2e9a85e6521efb8577e03772d3637d213d9 +93efc82d2017e9c57834a1246463e64774e56183bb247c8fc9dd98c56817e878d97b05f5c8d900acf1fbbbca6f146556 +8731176363ad7658a2862426ee47a5dce9434216cef60e6045fa57c40bb3ce1e78dac4510ae40f1f31db5967022ced32 +b10c9a96745722c85bdb1a693100104d560433d45b9ac4add54c7646a7310d8e9b3ca9abd1039d473ae768a18e489845 +a2ac374dfbb464bf850b4a2caf15b112634a6428e8395f9c9243baefd2452b4b4c61b0cb2836d8eae2d57d4900bf407e +b69fe3ded0c4f5d44a09a0e0f398221b6d1bf5dbb8bc4e338b93c64f1a3cac1e4b5f73c2b8117158030ec03787f4b452 +8852cdbaf7d0447a8c6f211b4830711b3b5c105c0f316e3a6a18dcfbb9be08bd6f4e5c8ae0c3692da08a2dfa532f9d5c +93bbf6d7432a7d98ade3f94b57bf9f4da9bc221a180a370b113066dd42601bb9e09edd79e2e6e04e00423399339eebda +a80941c391f1eeafc1451c59e4775d6a383946ff22997aeaadf806542ba451d3b0f0c6864eeba954174a296efe2c1550 +a045fe2bb011c2a2f71a0181a8f457a3078470fb74c628eab8b59aef69ffd0d649723bf74d6885af3f028bc5a104fb39 +b9d8c35911009c4c8cad64692139bf3fc16b78f5a19980790cb6a7aea650a25df4231a4437ae0c351676a7e42c16134f +94c79501ded0cfcbab99e1841abe4a00a0252b3870e20774c3da16c982d74c501916ec28304e71194845be6e3113c7ab +900a66418b082a24c6348d8644ddb1817df5b25cb33044a519ef47cc8e1f7f1e38d2465b7b96d32ed472d2d17f8414c6 +b26f45d393b8b2fcb29bdbb16323dc7f4b81c09618519ab3a39f8ee5bd148d0d9f3c0b5dfab55b5ce14a1cb9206d777b +aa1a87735fc493a80a96a9a57ca40a6d9c32702bfcaa9869ce1a116ae65d69cefe2f3e79a12454b4590353e96f8912b4 +a922b188d3d0b69b4e4ea2a2aa076566962844637da12c0832105d7b31dea4a309eee15d12b7a336be3ea36fcbd3e3b7 +8f3841fcf4105131d8c4d9885e6e11a46c448226401cf99356c291fadb864da9fa9d30f3a73c327f23f9fd99a11d633e +9791d1183fae270e226379af6c497e7da803ea854bb20afa74b253239b744c15f670ee808f708ede873e78d79a626c9a +a4cad52e3369491ada61bf28ada9e85de4516d21c882e5f1cd845bea9c06e0b2887b0c5527fcff6fc28acd3c04f0a796 +b9ac86a900899603452bd11a7892a9bfed8054970bfcbeaa8c9d1930db891169e38d6977f5258c25734f96c8462eee3b +a3a154c28e5580656a859f4efc2f5ebfa7eaa84ca40e3f134fa7865e8581586db74992dbfa4036aa252fba103773ddde +95cc2a0c1885a029e094f5d737e3ecf4d26b99036453a8773c77e360101f9f98676ee246f6f732a377a996702d55691f +842651bbe99720438d8d4b0218feb60481280c05beb17750e9ca0d8c0599a60f873b7fbdcc7d8835ba9a6d57b16eec03 +81ee54699da98f5620307893dcea8f64670609fa20e5622265d66283adeac122d458b3308c5898e6c57c298db2c8b24f +b97868b0b2bc98032d68352a535a1b341b9ff3c7af4e3a7f3ebc82d3419daa1b5859d6aedc39994939623c7cd878bd9b +b60325cd5d36461d07ef253d826f37f9ee6474a760f2fff80f9873d01fd2b57711543cdc8d7afa1c350aa753c2e33dea +8c205326c11d25a46717b780c639d89714c7736c974ae71287e3f4b02e6605ac2d9b4928967b1684f12be040b7bf2dd3 +95a392d82db51e26ade6c2ccd3396d7e40aff68fa570b5951466580d6e56dda51775dce5cf3a74a7f28c3cb2eb551c4d +8f2cc8071eb56dffb70bda6dd433b556221dc8bba21c53353c865f00e7d4d86c9e39f119ea9a8a12ef583e9a55d9a6b6 +9449a71af9672aaf8856896d7e3d788b22991a7103f75b08c0abbcc2bfe60fda4ed8ce502cea4511ff0ea52a93e81222 +857090ab9fdb7d59632d068f3cc8cf27e61f0d8322d30e6b38e780a1f05227199b4cd746aac1311c36c659ef20931f28 +98a891f4973e7d9aaf9ac70854608d4f7493dffc7e0987d7be9dd6029f6ea5636d24ef3a83205615ca1ff403750058e1 +a486e1365bbc278dd66a2a25d258dc82f46b911103cb16aab3945b9c95ae87b386313a12b566df5b22322ede0afe25ad +a9a1eb399ed95d396dccd8d1ac718043446f8b979ec62bdce51c617c97a312f01376ab7fb87d27034e5f5570797b3c33 +b7abc3858d7a74bb446218d2f5a037e0fae11871ed9caf44b29b69c500c1fa1dcfad64c9cdccc9d80d5e584f06213deb +8cfb09fe2e202faa4cebad932b1d35f5ca204e1c2a0c740a57812ac9a6792130d1312aabd9e9d4c58ca168bfebd4c177 +a90a305c2cd0f184787c6be596fa67f436afd1f9b93f30e875f817ac2aae8bdd2e6e656f6be809467e6b3ad84adb86b1 +80a9ef993c2b009ae172cc8f7ec036f5734cf4f4dfa06a7db4d54725e7fbfae5e3bc6f22687bdbb6961939d6f0c87537 +848ade1901931e72b955d7db1893f07003e1708ff5d93174bac5930b9a732640f0578839203e9b77eb27965c700032d3 +93fdf4697609c5ae9c33b9ca2f5f1af44abeb2b98dc4fdf732cf7388de086f410730dc384d9b7a7f447bb009653c8381 +89ce3fb805aea618b5715c0d22a9f46da696b6fa86794f56fdf1d44155a33d42daf1920bcbe36cbacf3cf4c92df9cbc7 +829ce2c342cf82aa469c65f724f308f7a750bd1494adc264609cd790c8718b8b25b5cab5858cf4ee2f8f651d569eea67 +af2f0cee7bf413204be8b9df59b9e4991bc9009e0d6dbe6815181df0ec2ca93ab8f4f3135b1c14d8f53d74bff0bd6f27 +b87998cecf7b88cde93d1779f10a521edd5574a2fbd240102978639ec57433ba08cdb53849038a329cebbe74657268d2 +a64542a1261a6ed3d720c2c3a802303aad8c4c110c95d0f12e05c1065e66f42da494792b6bfc5b9272363f3b1d457f58 +86a6fd042e4f282fadf07a4bfee03fc96a3aea49f7a00f52bf249a20f1ec892326855410e61f37fbb27d9305eb2fc713 +967ea5bc403b6db269682f7fd0df90659350d7e1aa66bc4fab4c9dfcd75ed0bba4b52f1cebc5f34dc8ba810793727629 +a52990f9f3b8616ce3cdc2c74cd195029e6a969753dcf2d1630438700e7d6ebde36538532b3525ac516f5f2ce9dd27a3 +a64f7ff870bab4a8bf0d4ef6f5c744e9bf1021ed08b4c80903c7ad318e80ba1817c3180cc45cb5a1cae1170f0241655f +b00f706fa4de1f663f021e8ad3d155e84ce6084a409374b6e6cd0f924a0a0b51bebaaaf1d228c77233a73b0a5a0df0e9 +8b882cc3bff3e42babdb96df95fb780faded84887a0a9bab896bef371cdcf169d909f5658649e93006aa3c6e1146d62e +9332663ef1d1dcf805c3d0e4ce7a07d9863fb1731172e766b3cde030bf81682cc011e26b773fb9c68e0477b4ae2cfb79 +a8aa8151348dbd4ef40aaeb699b71b4c4bfd3218560c120d85036d14f678f6736f0ec68e80ce1459d3d35feccc575164 +a16cd8b729768f51881c213434aa28301fa78fcb554ddd5f9012ee1e4eae7b5cb3dd88d269d53146dea92d10790faf0b +86844f0ef9d37142faf3b1e196e44fbe280a3ba4189aa05c356778cb9e3b388a2bff95eed305ada8769935c9974e4c57 +ae2eec6b328fccf3b47bcdac32901ac2744a51beb410b04c81dea34dee4912b619466a4f5e2780d87ecefaebbe77b46d +915df4c38d301c8a4eb2dc5b1ba0ffaad67cbb177e0a80095614e9c711f4ef24a4cef133f9d982a63d2a943ba6c8669d +ae6a2a4dedfc2d1811711a8946991fede972fdf2a389b282471280737536ffc0ac3a6d885b1f8bda0366eb0b229b9979 +a9b628c63d08b8aba6b1317f6e91c34b2382a6c85376e8ef2410a463c6796740ae936fc4e9e0737cb9455d1daa287bd8 +848e30bf7edf2546670b390d5cf9ab71f98fcb6add3c0b582cb34996c26a446dee5d1bde4fdcde4fc80c10936e117b29 +907d6096c7c8c087d1808dd995d5d2b9169b3768c3f433475b50c2e2bd4b082f4d543afd8b0b0ddffa9c66222a72d51d +a59970a2493b07339124d763ac9d793c60a03354539ecbcf6035bc43d1ea6e35718202ae6d7060b7d388f483d971573c +b9cfef2af9681b2318f119d8611ff6d9485a68d8044581b1959ab1840cbca576dbb53eec17863d2149966e9feb21122f +ad47271806161f61d3afa45cdfe2babceef5e90031a21779f83dc8562e6076680525b4970b2f11fe9b2b23c382768323 +8e425a99b71677b04fe044625d338811fbb8ee32368a424f6ab2381c52e86ee7a6cecedf777dc97181519d41c351bc22 +86b55b54d7adefc12954a9252ee23ae83efe8b5b4b9a7dc307904413e5d69868c7087a818b2833f9b004213d629be8ad +a14fda6b93923dd11e564ae4457a66f397741527166e0b16a8eb91c6701c244fd1c4b63f9dd3515193ec88fa6c266b35 +a9b17c36ae6cd85a0ed7f6cabc5b47dc8f80ced605db327c47826476dc1fb8f8669aa7a7dc679fbd4ee3d8e8b4bd6a6f +82a0829469c1458d959c821148f15dacae9ea94bf56c59a6ab2d4dd8b3d16d73e313b5a3912a6c1f131d73a8f06730c4 +b22d56d549a53eaef549595924bdb621ff807aa4513feedf3fdcbf7ba8b6b9cfa4481c2f67fc642db397a6b794a8b63a +974c59c24392e2cb9294006cbe3c52163e255f3bd0c2b457bdc68a6338e6d5b6f87f716854492f8d880a6b896ccf757c +b70d247ba7cad97c50b57f526c2ba915786e926a94e8f8c3eebc2e1be6f4255411b9670e382060049c8f4184302c40b2 +ad80201fe75ef21c3ddbd98cf23591e0d7a3ba1036dfe77785c32f44755a212c31f0ceb0a0b6f5ee9b6dc81f358d30c3 +8c656e841f9bb90b9a42d425251f3fdbc022a604d75f5845f479ed4be23e02aaf9e6e56cde351dd7449c50574818a199 +8b88dd3fa209d3063b7c5b058f7249ee9900fbc2287d16da61a0704a0a1d71e45d9c96e1cda7fdf9654534ec44558b22 +961da00cc8750bd84d253c08f011970ae1b1158ad6778e8ed943d547bceaf52d6d5a212a7de3bf2706688c4389b827d2 +a5dd379922549a956033e3d51a986a4b1508e575042b8eaa1df007aa77cf0b8c2ab23212f9c075702788fa9c53696133 +ac8fcfde3a349d1e93fc8cf450814e842005c545c4844c0401bc80e6b96cdb77f29285a14455e167c191d4f312e866cd +ac63d79c799783a8466617030c59dd5a8f92ee6c5204676fd8d881ce5f7f8663bdbeb0379e480ea9b6340ab0dc88e574 +805874fde19ce359041ae2bd52a39e2841acabfd31f965792f2737d7137f36d4e4722ede8340d8c95afa6af278af8acb +8d2f323a228aa8ba7b7dc1399138f9e6b41df1a16a7069003ab8104b8b68506a45141bc5fe66acf430e23e13a545190b +a1610c721a2d9af882bb6b39bea97cff1527a3aea041d25934de080214ae77c959e79957164440686d15ab301e897d4d +aba16d29a47fc36f12b654fde513896723e2c700c4190f11b26aa4011da57737ad717daa02794aa3246e4ae5f0b0cc3a +a406db2f15fdd135f346cc4846623c47edd195e80ba8c7cb447332095314d565e4040694ca924696bb5ee7f8996ea0ba +8b30e2cd9b47d75ba57b83630e40f832249af6c058d4f490416562af451993eec46f3e1f90bc4d389e4c06abd1b32a46 +aacf9eb7036e248e209adbfc3dd7ce386569ea9b312caa4b240726549db3c68c4f1c8cbf8ed5ea9ea60c7e57c9df3b8e +b20fcac63bf6f5ee638a42d7f89be847f348c085ddcbec3fa318f4323592d136c230495f188ef2022aa355cc2b0da6f9 +811eff750456a79ec1b1249d76d7c1547065b839d8d4aaad860f6d4528eb5b669473dcceeeea676cddbc3980b68461b7 +b52d14ae33f4ab422f953392ae76a19c618cc31afc96290bd3fe2fb44c954b5c92c4789f3f16e8793f2c0c1691ade444 +a7826dafeeba0db5b66c4dfcf2b17fd7b40507a5a53ac2e42942633a2cb30b95ba1739a6e9f3b7a0e0f1ec729bf274e2 +8acfd83ddf7c60dd7c8b20c706a3b972c65d336b8f9b3d907bdd8926ced271430479448100050b1ef17578a49c8fa616 +af0c69f65184bb06868029ad46f8465d75c36814c621ac20a5c0b06a900d59305584f5a6709683d9c0e4b6cd08d650a6 +b6cc8588191e00680ee6c3339bd0f0a17ad8fd7f4be57d5d7075bede0ea593a19e67f3d7c1a20114894ee5bfcab71063 +a82fd4f58635129dbb6cc3eb9391cf2d28400018b105fc41500fbbd12bd890b918f97d3d359c29dd3b4c4e34391dfab0 +92fc544ed65b4a3625cf03c41ddff7c039bc22d22c0d59dcc00efd5438401f2606adb125a1d5de294cca216ec8ac35a3 +906f67e4a32582b71f15940523c0c7ce370336935e2646bdaea16a06995256d25e99df57297e39d6c39535e180456407 +97510337ea5bbd5977287339197db55c60533b2ec35c94d0a460a416ae9f60e85cee39be82abeeacd5813cf54df05862 +87e6894643815c0ea48cb96c607266c5ee4f1f82ba5fe352fb77f9b6ed14bfc2b8e09e80a99ac9047dfcf62b2ae26795 +b6fd55dd156622ad7d5d51b7dde75e47bd052d4e542dd6449e72411f68275775c846dde301e84613312be8c7bce58b07 +b98461ac71f554b2f03a94e429b255af89eec917e208a8e60edf5fc43b65f1d17a20de3f31d2ce9f0cb573c25f2f4d98 +96f0dea40ca61cefbee41c4e1fe9a7d81fbe1f49bb153d083ab70f5d0488a1f717fd28cedcf6aa18d07cce2c62801898 +8d7c3ab310184f7dc34b6ce4684e4d29a31e77b09940448ea4daac730b7eb308063125d4dd229046cf11bfd521b771e0 +96f0564898fe96687918bbf0a6adead99cf72e3a35ea3347e124af9d006221f8e82e5a9d2fe80094d5e8d48e610f415e +ad50fcb92c2675a398cf07d4c40a579e44bf8d35f27cc330b57e54d5ea59f7d898af0f75dccfe3726e5471133d70f92b +828beed62020361689ae7481dd8f116902b522fb0c6c122678e7f949fdef70ead011e0e6bffd25678e388744e17cdb69 +8349decac1ca16599eee2efc95bcaabf67631107da1d34a2f917884bd70dfec9b4b08ab7bc4379d6c73b19c0b6e54fb8 +b2a6a2e50230c05613ace9e58bb2e98d94127f196f02d9dddc53c43fc68c184549ca12d713cb1b025d8260a41e947155 +94ff52181aadae832aed52fc3b7794536e2a31a21fc8be3ea312ca5c695750d37f08002f286b33f4023dba1e3253ecfa +a21d56153c7e5972ee9a319501be4faff199fdf09bb821ea9ce64aa815289676c00f105e6f00311b3a5b627091b0d0fc +a27a60d219f1f0c971db73a7f563b371b5c9fc3ed1f72883b2eac8a0df6698400c9954f4ca17d7e94e44bd4f95532afb +a2fc56fae99b1f18ba5e4fe838402164ce82f8a7f3193d0bbd360c2bac07c46f9330c4c7681ffb47074c6f81ee6e7ac6 +b748e530cd3afb96d879b83e89c9f1a444f54e55372ab1dcd46a0872f95ce8f49cf2363fc61be82259e04f555937ed16 +8bf8993e81080c7cbba1e14a798504af1e4950b2f186ab3335b771d6acaee4ffe92131ae9c53d74379d957cb6344d9cd +96774d0ef730d22d7ab6d9fb7f90b9ead44285219d076584a901960542756700a2a1603cdf72be4708b267200f6c36a9 +b47703c2ab17be1e823cc7bf3460db1d6760c0e33862c90ca058845b2ff234b0f9834ddba2efb2ee1770eb261e7d8ffd +84319e67c37a9581f8b09b5e4d4ae88d0a7fb4cbb6908971ab5be28070c3830f040b1de83ee663c573e0f2f6198640e4 +96811875fa83133e0b3c0e0290f9e0e28bca6178b77fdf5350eb19344d453dbd0d71e55a0ef749025a5a2ca0ad251e81 +81a423423e9438343879f2bfd7ee9f1c74ebebe7ce3cfffc8a11da6f040cc4145c3b527bd3cf63f9137e714dbcb474ef +b8c3535701ddbeec2db08e17a4fa99ba6752d32ece5331a0b8743676f421fcb14798afc7c783815484f14693d2f70db8 +81aee980c876949bf40782835eec8817d535f6f3f7e00bf402ddd61101fdcd60173961ae90a1cf7c5d060339a18c959d +87e67b928d97b62c49dac321ce6cb680233f3a394d4c9a899ac2e8db8ccd8e00418e66cdfd68691aa3cb8559723b580c +8eac204208d99a2b738648df96353bbb1b1065e33ee4f6bba174b540bbbd37d205855e1f1e69a6b7ff043ca377651126 +848e6e7a54ad64d18009300b93ea6f459ce855971dddb419b101f5ac4c159215626fadc20cc3b9ab1701d8f6dfaddd8b +88aa123d9e0cf309d46dddb6acf634b1ade3b090a2826d6e5e78669fa1220d6df9a6697d7778cd9b627db17eea846126 +9200c2a629b9144d88a61151b661b6c4256cc5dadfd1e59a8ce17a013c2d8f7e754aabe61663c3b30f1bc47784c1f8cf +b6e1a2827c3bdda91715b0e1b1f10dd363cef337e7c80cac1f34165fc0dea7c8b69747e310563db5818390146ce3e231 +92c333e694f89f0d306d54105b2a5dcc912dbe7654d9e733edab12e8537350815be472b063e56cfde5286df8922fdecb +a6fac04b6d86091158ebb286586ccfec2a95c9786e14d91a9c743f5f05546073e5e3cc717635a0c602cad8334e922346 +a581b4af77feebc1fb897d49b5b507c6ad513d8f09b273328efbb24ef0d91eb740d01b4d398f2738125dacfe550330cd +81c4860cccf76a34f8a2bc3f464b7bfd3e909e975cce0d28979f457738a56e60a4af8e68a3992cf273b5946e8d7f76e2 +8d1eaa09a3180d8af1cbaee673db5223363cc7229a69565f592fa38ba0f9d582cedf91e15dabd06ebbf2862fc0feba54 +9832f49b0147f4552402e54593cfa51f99540bffada12759b71fcb86734be8e500eea2d8b3d036710bdf04c901432de9 +8bdb0e8ec93b11e5718e8c13cb4f5de545d24829fd76161216340108098dfe5148ed25e3b57a89a516f09fa79043734d +ab96f06c4b9b0b2c0571740b24fca758e6976315053a7ecb20119150a9fa416db2d3a2e0f8168b390bb063f0c1caf785 +ab777f5c52acd62ecf4d1f168b9cc8e1a9b45d4ec6a8ff52c583e867c2239aba98d7d3af977289b367edce03d9c2dfb1 +a09d3ce5e748da84802436951acc3d3ea5d8ec1d6933505ed724d6b4b0d69973ab0930daec9c6606960f6e541e4a3ce2 +8ef94f7be4d85d5ad3d779a5cf4d7b2fc3e65c52fb8e1c3c112509a4af77a0b5be994f251e5e40fabeeb1f7d5615c22b +a7406a5bf5708d9e10922d3c5c45c03ef891b8d0d74ec9f28328a72be4cdc05b4f2703fa99366426659dfca25d007535 +b7f52709669bf92a2e070bfe740f422f0b7127392c5589c7f0af71bb5a8428697c762d3c0d74532899da24ea7d8695c2 +b9dfb0c8df84104dbf9239ccefa4672ef95ddabb8801b74997935d1b81a78a6a5669a3c553767ec19a1281f6e570f4ff +ae4d5c872156061ce9195ac640190d8d71dd406055ee43ffa6f9893eb24b870075b74c94d65bc1d5a07a6573282b5520 +afe6bd3eb72266d333f1807164900dcfa02a7eb5b1744bb3c86b34b3ee91e3f05e38fa52a50dc64eeb4bdb1dd62874b8 +948043cf1bc2ef3c01105f6a78dc06487f57548a3e6ef30e6ebc51c94b71e4bf3ff6d0058c72b6f3ecc37efd7c7fa8c0 +a22fd17c2f7ffe552bb0f23fa135584e8d2d8d75e3f742d94d04aded2a79e22a00dfe7acbb57d44e1cdb962fb22ae170 +8cd0f4e9e4fb4a37c02c1bde0f69359c43ab012eb662d346487be0c3758293f1ca560122b059b091fddce626383c3a8f +90499e45f5b9c81426f3d735a52a564cafbed72711d9279fdd88de8038e953bc48c57b58cba85c3b2e4ce56f1ddb0e11 +8c30e4c034c02958384564cac4f85022ef36ab5697a3d2feaf6bf105049675bbf23d01b4b6814711d3d9271abff04cac +81f7999e7eeea30f3e1075e6780bbf054f2fb6f27628a2afa4d41872a385b4216dd5f549da7ce6cf39049b2251f27fb7 +b36a7191f82fc39c283ffe53fc1f5a9a00b4c64eee7792a8443475da9a4d226cf257f226ea9d66e329af15d8f04984ec +aad4da528fdbb4db504f3041c747455baff5fcd459a2efd78f15bdf3aea0bdb808343e49df88fe7a7c8620009b7964a3 +99ebd8c6dd5dd299517fb6381cfc2a7f443e6e04a351440260dd7c2aee3f1d8ef06eb6c18820b394366ecdfd2a3ce264 +8873725b81871db72e4ec3643084b1cdce3cbf80b40b834b092767728605825c19b6847ad3dcf328438607e8f88b4410 +b008ee2f895daa6abd35bd39b6f7901ae4611a11a3271194e19da1cdcc7f1e1ea008fe5c5440e50d2c273784541ad9c5 +9036feafb4218d1f576ef89d0e99124e45dacaa6d816988e34d80f454d10e96809791d5b78f7fd65f569e90d4d7238c5 +92073c1d11b168e4fa50988b0288638b4868e48bbc668c5a6dddf5499875d53be23a285acb5e4bad60114f6cf6c556e9 +88c87dfcb8ba6cbfe7e1be081ccfadbd589301db2cb7c99f9ee5d7db90aa297ed1538d5a867678a763f2deede5fd219a +b42a562805c661a50f5dea63108002c0f27c0da113da6a9864c9feb5552225417c0356c4209e8e012d9bcc9d182c7611 +8e6317d00a504e3b79cd47feb4c60f9df186467fe9ca0f35b55c0364db30528f5ff071109dabb2fc80bb9cd4949f0c24 +b7b1ea6a88694f8d2f539e52a47466695e39e43a5eb9c6f23bca15305fe52939d8755cc3ac9d6725e60f82f994a3772f +a3cd55161befe795af93a38d33290fb642b8d80da8b786c6e6fb02d393ea308fbe87f486994039cbd7c7b390414594b6 +b416d2d45b44ead3b1424e92c73c2cf510801897b05d1724ff31cbd741920cd858282fb5d6040fe1f0aa97a65bc49424 +950ee01291754feace97c2e933e4681e7ddfbc4fcd079eb6ff830b0e481d929c93d0c7fb479c9939c28ca1945c40da09 +869bd916aee8d86efe362a49010382674825d49195b413b4b4018e88ce43fe091b475d0b863ff0ba2259400f280c2b23 +9782f38cd9c9d3385ec286ebbc7cba5b718d2e65a5890b0a5906b10a89dc8ed80d417d71d7c213bf52f2af1a1f513ea7 +91cd33bc2628d096269b23faf47ee15e14cb7fdc6a8e3a98b55e1031ea0b68d10ba30d97e660f7e967d24436d40fad73 +8becc978129cc96737034c577ae7225372dd855da8811ae4e46328e020c803833b5bdbc4a20a93270e2b8bd1a2feae52 +a36b1d8076783a9522476ce17f799d78008967728ce920531fdaf88303321bcaf97ecaa08e0c01f77bc32e53c5f09525 +b4720e744943f70467983aa34499e76de6d59aa6fadf86f6b787fdce32a2f5b535b55db38fe2da95825c51002cfe142d +91ad21fc502eda3945f6de874d1b6bf9a9a7711f4d61354f9e5634fc73f9c06ada848de15ab0a75811d3250be862827d +84f78e2ebf5fc077d78635f981712daf17e2475e14c2a96d187913006ad69e234746184a51a06ef510c9455b38acb0d7 +960aa7906e9a2f11db64a26b5892ac45f20d2ccb5480f4888d89973beb6fa0dfdc06d68d241ff5ffc7f1b82b1aac242d +a99365dcd1a00c66c9db6924b97c920f5c723380e823b250db85c07631b320ec4e92e586f7319e67a522a0578f7b6d6c +a25d92d7f70cf6a88ff317cfec071e13774516da664f5fac0d4ecaa65b8bf4eb87a64a4d5ef2bd97dfae98d388dbf5cc +a7af47cd0041295798f9779020a44653007444e8b4ef0712982b06d0dcdd434ec4e1f7c5f7a049326602cb605c9105b7 +aefe172eac5568369a05980931cc476bebd9dea573ba276d59b9d8c4420784299df5a910033b7e324a6c2dfc62e3ef05 +b69bc9d22ffa645baa55e3e02522e9892bb2daa7fff7c15846f13517d0799766883ee09ae0869df4139150c5b843ca8a +95a10856140e493354fdd12722c7fdded21b6a2ffbc78aa2697104af8ad0c8e2206f44b0bfee077ef3949d46bbf7c16b +891f2fcd2c47cbea36b7fa715968540c233313f05333f09d29aba23c193f462ed490dd4d00969656e89c53155fdfe710 +a6c33e18115e64e385c843dde34e8a228222795c7ca90bc2cc085705d609025f3351d9be61822c69035a49fb3e48f2d5 +b87fb12f12c0533b005adad0487f03393ff682e13575e3cb57280c3873b2c38ba96a63c49eef7a442753d26b7005230b +b905c02ba451bfd411c135036d92c27af3b0b1c9c2f1309d6948544a264b125f39dd41afeff4666b12146c545adc168a +8b29c513f43a78951cf742231cf5457a6d9d55edf45df5481a0f299a418d94effef561b15d2c1a01d1b8067e7153fda9 +b9941cccd51dc645920d2781c81a317e5a33cb7cf76427b60396735912cb6d2ca9292bb4d36b6392467d390d2c58d9f3 +a8546b627c76b6ef5c93c6a98538d8593dbe21cb7673fd383d5401b0c935eea0bdeeefeb1af6ad41bad8464fb87bbc48 +aa286b27de2812de63108a1aec29d171775b69538dc6198640ac1e96767c2b83a50391f49259195957d457b493b667c9 +a932fb229f641e9abbd8eb2bd874015d97b6658ab6d29769fc23b7db9e41dd4f850382d4c1f08af8f156c5937d524473 +a1412840fcc86e2aeec175526f2fb36e8b3b8d21a78412b7266daf81e51b3f68584ed8bd42a66a43afdd8c297b320520 +89c78be9efb624c97ebca4fe04c7704fa52311d183ffd87737f76b7dadc187c12c982bd8e9ed7cd8beb48cdaafd2fd01 +a3f5ddec412a5bec0ce15e3bcb41c6214c2b05d4e9135a0d33c8e50a78eaba71e0a5a6ea8b45854dec5c2ed300971fc2 +9721f9cec7a68b7758e3887548790de49fa6a442d0396739efa20c2f50352a7f91d300867556d11a703866def2d5f7b5 +a23764e140a87e5991573521af039630dd28128bf56eed2edbed130fd4278e090b60cf5a1dca9de2910603d44b9f6d45 +a1a6494a994215e48ab55c70efa8ffdddce6e92403c38ae7e8dd2f8288cad460c6c7db526bbdf578e96ca04d9fe12797 +b1705ea4cb7e074efe0405fc7b8ee2ec789af0426142f3ec81241cacd4f7edcd88e39435e4e4d8e7b1df64f3880d6613 +85595d061d677116089a6064418b93eb44ff79e68d12bd9625078d3bbc440a60d0b02944eff6054433ee34710ae6fbb4 +9978d5e30bedb7526734f9a1febd973a70bfa20890490e7cc6f2f9328feab1e24f991285dbc3711d892514e2d7d005ad +af30243c66ea43b9f87a061f947f7bce745f09194f6e95f379c7582b9fead920e5d6957eaf05c12ae1282ada4670652f +a1930efb473f88001e47aa0b2b2a7566848cccf295792e4544096ecd14ee5d7927c173a8576b405bfa2eec551cd67eb5 +b0446d1c590ee5a45f7e22d269c044f3848c97aec1d226b44bfd0e94d9729c28a38bccddc3a1006cc5fe4e3c24f001f2 +b8a8380172df3d84b06176df916cf557966d4f2f716d3e9437e415d75b646810f79f2b2b71d857181b7fc944018883a3 +a563afec25b7817bfa26e19dc9908bc00aa8fc3d19be7d6de23648701659009d10e3e4486c28e9c6b13d48231ae29ac5 +a5a8e80579de886fb7d6408f542791876885947b27ad6fa99a8a26e381f052598d7b4e647b0115d4b5c64297e00ce28e +8f87afcc7ad33c51ac719bade3cd92da671a37a82c14446b0a2073f4a0a23085e2c8d31913ed2d0be928f053297de8f6 +a43c455ce377e0bc434386c53c752880687e017b2f5ae7f8a15c044895b242dffde4c92fb8f8bb50b18470b17351b156 +8368f8b12a5bceb1dba25adb3a2e9c7dc9b1a77a1f328e5a693f5aec195cd1e06b0fe9476b554c1c25dac6c4a5b640a3 +919878b27f3671fc78396f11531c032f3e2bd132d04cc234fa4858676b15fb1db3051c0b1db9b4fc49038216f11321ce +b48cd67fb7f1242696c1f877da4bdf188eac676cd0e561fbac1a537f7b8229aff5a043922441d603a26aae56a15faee4 +a3e0fdfd4d29ea996517a16f0370b54787fefe543c2fe73bfc6f9e560c1fd30dad8409859e2d7fa2d44316f24746c712 +8bb156ade8faf149df7bea02c140c7e392a4742ae6d0394d880a849127943e6f26312033336d3b9fdc0092d71b5efe87 +8845e5d5cc555ca3e0523244300f2c8d7e4d02aaebcb5bd749d791208856c209a6f84dd99fd55968c9f0ab5f82916707 +a3e90bb5c97b07789c2f32dff1aec61d0a2220928202f5ad5355ae71f8249237799d6c8a22602e32e572cb12eabe0c17 +b150bcc391884c996149dc3779ce71f15dda63a759ee9cc05871f5a8379dcb62b047098922c0f26c7bd04deb394c33f9 +95cd4ad88d51f0f2efcfd0c2df802fe252bb9704d1afbf9c26a248df22d55da87bdfaf41d7bc6e5df38bd848f0b13f42 +a05a49a31e91dff6a52ac8b9c2cfdd646a43f0d488253f9e3cfbce52f26667166bbb9b608fc358763a65cbf066cd6d05 +a59c3c1227fdd7c2e81f5e11ef5c406da44662987bac33caed72314081e2eed66055d38137e01b2268e58ec85dd986c0 +b7020ec3bd73a99861f0f1d88cf5a19abab1cbe14b7de77c9868398c84bb8e18dbbe9831838a96b6d6ca06e82451c67b +98d1ff2525e9718ee59a21d8900621636fcd873d9a564b8dceb4be80a194a0148daf1232742730b3341514b2e5a5436c +886d97b635975fc638c1b6afc493e5998ca139edba131b75b65cfe5a8e814f11bb678e0eeee5e6e5cd913ad3f2fefdfc +8fb9fd928d38d5d813b671c924edd56601dd7163b686c13f158645c2f869d9250f3859aa5463a39258c90fef0f41190a +aac35e1cd655c94dec3580bb3800bd9c2946c4a9856f7d725af15fbea6a2d8ca51c8ad2772abed60ee0e3fb9cb24046b +b8d71fa0fa05ac9e443c9b4929df9e7f09a919be679692682e614d24227e04894bfc14a5c73a62fb927fedff4a0e4aa7 +a45a19f11fbbb531a704badbb813ed8088ab827c884ee4e4ebf363fa1132ff7cfa9d28be9c85b143e4f7cdbc94e7cf1a +82b54703a4f295f5471b255ab59dce00f0fe90c9fb6e06b9ee48b15c91d43f4e2ef4a96c3118aeb03b08767be58181bb +8283264c8e6d2a36558f0d145c18576b6600ff45ff99cc93eca54b6c6422993cf392668633e5df396b9331e873d457e5 +8c549c03131ead601bc30eb6b9537b5d3beb7472f5bb1bcbbfd1e9f3704477f7840ab3ab7f7dc13bbbbcdff886a462d4 +afbb0c520ac1b5486513587700ad53e314cb74bfbc12e0b5fbdcfdaac36d342e8b59856196a0d84a25cff6e6e1d17e76 +89e4c22ffb51f2829061b3c7c1983c5c750cad158e3a825d46f7cf875677da5d63f653d8a297022b5db5845c9271b32b +afb27a86c4c2373088c96b9adf4433f2ebfc78ac5c526e9f0510670b6e4e5e0057c0a4f75b185e1a30331b9e805c1c15 +a18e16b57445f88730fc5d3567bf5a176861dc14c7a08ed2996fe80eed27a0e7628501bcb78a1727c5e9ac55f29c12c4 +93d61bf88b192d6825cf4e1120af1c17aa0f994d158b405e25437eaeefae049f7b721a206e7cc8a04fdc29d3c42580a1 +a99f2995a2e3ed2fd1228d64166112038de2f516410aa439f4c507044e2017ea388604e2d0f7121256fadf7fbe7023d1 +914fd91cffc23c32f1c6d0e98bf660925090d873367d543034654389916f65f552e445b0300b71b61b721a72e9a5983c +b42a578a7787b71f924e7def425d849c1c777156b1d4170a8ee7709a4a914e816935131afd9a0412c4cb952957b20828 +82fb30590e84b9e45db1ec475a39971cf554dc01bcc7050bc89265740725c02e2be5a972168c5170c86ae83e5b0ad2c0 +b14f8d8e1e93a84976289e0cf0dfa6f3a1809e98da16ee5c4932d0e1ed6bf8a07697fdd4dd86a3df84fb0003353cdcc0 +85d7a2f4bda31aa2cb208b771fe03291a4ebdaf6f1dc944c27775af5caec412584c1f45bc741fca2a6a85acb3f26ad7d +af02e56ce886ff2253bc0a68faad76f25ead84b2144e5364f3fb9b648f03a50ee9dc0b2c33ebacf7c61e9e43201ef9ef +87e025558c8a0b0abd06dfc350016847ea5ced7af2d135a5c9eec9324a4858c4b21510fb0992ec52a73447f24945058e +80fff0bafcd058118f5e7a4d4f1ae0912efeb281d2cbe4d34ba8945cc3dbe5d8baf47fb077343b90b8d895c90b297aca +b6edcf3a40e7b1c3c0148f47a263cd819e585a51ef31c2e35a29ce6f04c53e413f743034c0d998d9c00a08ba00166f31 +abb87ed86098c0c70a76e557262a494ff51a30fb193f1c1a32f8e35eafa34a43fcc07aa93a3b7a077d9e35afa07b1a3d +a280214cd3bb0fb7ecd2d8bcf518cbd9078417f2b91d2533ec2717563f090fb84f2a5fcfdbbeb2a2a1f8a71cc5aa5941 +a63083ca7238ea2b57d15a475963cf1d4f550d8cd76db290014a0461b90351f1f26a67d674c837b0b773b330c7c3d534 +a8fa39064cb585ece5263e2f42f430206476bf261bd50f18d2b694889bd79d04d56410664cecad62690e5c5a20b3f6ff +85ba52ce9d700a5dcf6c5b00559acbe599d671ce5512467ff4b6179d7fad550567ce2a9c126a50964e3096458ea87920 +b913501e1008f076e5eac6d883105174f88b248e1c9801e568fefaffa1558e4909364fc6d9512aa4d125cbd7cc895f05 +8eb33b5266c8f2ed4725a6ad147a322e44c9264cf261c933cbbe230a43d47fca0f29ec39756b20561dabafadd5796494 +850ebc8b661a04318c9db5a0515066e6454fa73865aa4908767a837857ecd717387f614acb614a88e075d4edc53a2f5a +a08d6b92d866270f29f4ce23a3f5d99b36b1e241a01271ede02817c8ec3f552a5c562db400766c07b104a331835c0c64 +8131804c89bb3e74e9718bfc4afa547c1005ff676bd4db9604335032b203390cfa54478d45c6c78d1fe31a436ed4be9f +9106d94f23cc1eacec8316f16d6f0a1cc160967c886f51981fdb9f3f12ee1182407d2bb24e5b873de58cb1a3ee915a6b +a13806bfc3eae7a7000c9d9f1bd25e10218d4e67f59ae798b145b098bca3edad2b1040e3fc1e6310e612fb8818f459ac +8c69fbca502046cb5f6db99900a47b34117aef3f4b241690cdb3b84ca2a2fc7833e149361995dc41fa78892525bce746 +852c473150c91912d58ecb05769222fa18312800c3f56605ad29eec9e2d8667b0b81c379048d3d29100ed2773bb1f3c5 +b1767f6074426a00e01095dbb1795beb4e4050c6411792cbad6537bc444c3165d1058bafd1487451f9c5ddd209e0ae7e +80c600a5fe99354ce59ff0f84c760923dc8ff66a30bf47dc0a086181785ceb01f9b951c4e66df800ea6d705e8bc47055 +b5cf19002fbc88a0764865b82afcb4d64a50196ea361e5c71dff7de084f4dcbbc34ec94a45cc9e0247bd51da565981aa +93e67a254ea8ce25e112d93cc927fadaa814152a2c4ec7d9a56eaa1ed47aec99b7e9916b02e64452cc724a6641729bbb +ace70b32491bda18eee4a4d041c3bc9effae9340fe7e6c2f5ad975ee0874c17f1a7da7c96bd85fccff9312c518fac6e9 +ab4cfa02065017dd7f1aadc66f2c92f78f0f11b8597c03a5d69d82cb2eaf95a4476a836ac102908f137662472c8d914b +a40b8cd8deb8ae503d20364d64cab7c2801b7728a9646ed19c65edea6a842756a2f636283494299584ad57f4bb12cd0b +8594e11d5fc2396bcd9dbf5509ce4816dbb2b7305168021c426171fb444d111da5a152d6835ad8034542277011c26c0e +8024de98c26b4c994a66628dc304bb737f4b6859c86ded552c5abb81fd4c6c2e19d5a30beed398a694b9b2fdea1dd06a +8843f5872f33f54df8d0e06166c1857d733995f67bc54abb8dfa94ad92407cf0179bc91b0a50bbb56cdc2b350d950329 +b8bab44c7dd53ef9edf497dcb228e2a41282c90f00ba052fc52d57e87b5c8ab132d227af1fcdff9a12713d1f980bcaae +982b4d7b29aff22d527fd82d2a52601d95549bfb000429bb20789ed45e5abf1f4b7416c7b7c4b79431eb3574b29be658 +8eb1f571b6a1878e11e8c1c757e0bc084bab5e82e897ca9be9b7f4b47b91679a8190bf0fc8f799d9b487da5442415857 +a6e74b588e5af935c8b243e888582ef7718f8714569dd4992920740227518305eb35fab674d21a5551cca44b3e511ef2 +a30fc2f3a4cb4f50566e82307de73cd7bd8fe2c1184e9293c136a9b9e926a018d57c6e4f308c95b9eb8299e94d90a2a1 +a50c5869ca5d2b40722c056a32f918d47e0b65ca9d7863ca7d2fb4a7b64fe523fe9365cf0573733ceaadebf20b48fff8 +83bbdd32c04d17581418cf360749c7a169b55d54f2427390defd9f751f100897b2d800ce6636c5bbc046c47508d60c8c +a82904bdf614de5d8deaff688c8a5e7ac5b3431687acbcda8fa53960b7c417a39c8b2e462d7af91ce6d79260f412db8e +a4362e31ff4b05d278b033cf5eebea20de01714ae16d4115d04c1da4754269873afc8171a6f56c5104bfd7b0db93c3e7 +b5b8daa63a3735581e74a021b684a1038cea77168fdb7fdf83c670c2cfabcfc3ab2fc7359069b5f9048188351aef26b5 +b48d723894b7782d96ac8433c48faca1bdfa5238019c451a7f47d958097cce3ae599b876cf274269236b9d6ff8b6d7ca +98ffff6a61a3a6205c7820a91ca2e7176fab5dba02bc194c4d14942ac421cb254183c705506ab279e4f8db066f941c6c +ae7db24731da2eaa6efc4f7fcba2ecc26940ddd68038dce43acf2cee15b72dc4ef42a7bfdd32946d1ed78786dd7696b3 +a656db14f1de9a7eb84f6301b4acb2fbf78bfe867f48a270e416c974ab92821eb4df1cb881b2d600cfed0034ac784641 +aa315f8ecba85a5535e9a49e558b15f39520fce5d4bf43131bfbf2e2c9dfccc829074f9083e8d49f405fb221d0bc4c3c +90bffba5d9ff40a62f6c8e9fc402d5b95f6077ed58d030c93e321b8081b77d6b8dac3f63a92a7ddc01585cf2c127d66c +abdd733a36e0e0f05a570d0504e73801bf9b5a25ff2c78786f8b805704997acb2e6069af342538c581144d53149fa6d3 +b4a723bb19e8c18a01bd449b1bb3440ddb2017f10bb153da27deb7a6a60e9bb37619d6d5435fbb1ba617687838e01dd0 +870016b4678bab3375516db0187a2108b2e840bae4d264b9f4f27dbbc7cc9cac1d7dc582d7a04d6fd1ed588238e5e513 +80d33d2e20e8fc170aa3cb4f69fffb72aeafb3b5bb4ea0bc79ab55da14142ca19b2d8b617a6b24d537366e3b49cb67c3 +a7ee76aec273aaae03b3b87015789289551969fb175c11557da3ab77e39ab49d24634726f92affae9f4d24003050d974 +8415ea4ab69d779ebd42d0fe0c6aef531d6a465a5739e429b1fcf433ec45aa8296c527e965a20f0ec9f340c9273ea3cf +8c7662520794e8b4405d0b33b5cac839784bc86a5868766c06cbc1fa306dbe334978177417b31baf90ce7b0052a29c56 +902b2abecc053a3dbdea9897ee21e74821f3a1b98b2d560a514a35799f4680322550fd3a728d4f6d64e1de98033c32b8 +a05e84ed9ecab8d508d670c39f2db61ad6e08d2795ec32a3c9d0d3737ef3801618f4fc2a95f90ec2f068606131e076c5 +8b9208ff4d5af0c2e3f53c9375da666773ac57197dfabb0d25b1c8d0588ba7f3c15ee9661bb001297f322ea2fbf6928b +a3c827741b34a03254d4451b5ab74a96f2b9f7fb069e2f5adaf54fd97cc7a4d516d378db5ca07da87d8566d6eef13726 +8509d8a3f4a0ed378e0a1e28ea02f6bf1d7f6c819c6c2f5297c7df54c895b848f841653e32ba2a2c22c2ff739571acb8 +a0ce988b7d3c40b4e496aa83a09e4b5472a2d98679622f32bea23e6d607bc7de1a5374fb162bce0549a67dad948519be +aa8a3dd12bd60e3d2e05f9c683cdcb8eab17fc59134815f8d197681b1bcf65108cba63ac5c58ee632b1e5ed6bba5d474 +8b955f1d894b3aefd883fb4b65f14cd37fc2b9db77db79273f1700bef9973bf3fd123897ea2b7989f50003733f8f7f21 +ac79c00ddac47f5daf8d9418d798d8af89fc6f1682e7e451f71ea3a405b0d36af35388dd2a332af790bc83ca7b819328 +a0d44dd2a4438b809522b130d0938c3fe7c5c46379365dbd1810a170a9aa5818e1c783470dd5d0b6d4ac7edbb7330910 +a30b69e39ad43dd540a43c521f05b51b5f1b9c4eed54b8162374ae11eac25da4f5756e7b70ce9f3c92c2eeceee7431ed +ac43220b762c299c7951222ea19761ab938bf38e4972deef58ed84f4f9c68c230647cf7506d7cbfc08562fcca55f0485 +b28233b46a8fb424cfa386a845a3b5399d8489ceb83c8f3e05c22c934798d639c93718b7b68ab3ce24c5358339e41cbb +ac30d50ee8ce59a10d4b37a3a35e62cdb2273e5e52232e202ca7d7b8d09d28958ee667fae41a7bb6cdc6fe8f6e6c9c85 +b199842d9141ad169f35cc7ff782b274cbaa645fdb727761e0a89edbf0d781a15f8218b4bf4eead326f2903dd88a9cc1 +85e018c7ddcad34bb8285a737c578bf741ccd547e68c734bdb3808380e12c5d4ef60fc896b497a87d443ff9abd063b38 +8c856e6ba4a815bdb891e1276f93545b7072f6cb1a9aa6aa5cf240976f29f4dee01878638500a6bf1daf677b96b54343 +b8a47555fa8710534150e1a3f13eab33666017be6b41005397afa647ea49708565f2b86b77ad4964d140d9ced6b4d585 +8cd1f1db1b2f4c85a3f46211599caf512d5439e2d8e184663d7d50166fd3008f0e9253272f898d81007988435f715881 +b1f34b14612c973a3eceb716dc102b82ab18afef9de7630172c2780776679a7706a4874e1df3eaadf541fb009731807f +b25464af9cff883b55be2ff8daf610052c02df9a5e147a2cf4df6ce63edcdee6dc535c533590084cc177da85c5dc0baa +91c3c4b658b42d8d3448ae1415d4541d02379a40dc51e36a59bd6e7b9ba3ea51533f480c7c6e8405250ee9b96a466c29 +86dc027b95deb74c36a58a1333a03e63cb5ae22d3b29d114cfd2271badb05268c9d0c819a977f5e0c6014b00c1512e3a +ae0e6ff58eb5fa35da5107ebeacf222ab8f52a22bb1e13504247c1dfa65320f40d97b0e6b201cb6613476687cb2f0681 +8f13415d960b9d7a1d93ef28afc2223e926639b63bdefce0f85e945dfc81670a55df288893a0d8b3abe13c5708f82f91 +956f67ca49ad27c1e3a68c1faad5e7baf0160c459094bf6b7baf36b112de935fdfd79fa4a9ea87ea8de0ac07272969f4 +835e45e4a67df9fb51b645d37840b3a15c171d571a10b03a406dd69d3c2f22df3aa9c5cbe1e73f8d767ce01c4914ea9a +919b938e56d4b32e2667469d0bdccb95d9dda3341aa907683ee70a14bbbe623035014511c261f4f59b318b610ac90aa3 +96b48182121ccd9d689bf1dfdc228175564cd68dc904a99c808a7f0053a6f636c9d953e12198bdf2ea49ea92772f2e18 +ac5e5a941d567fa38fdbcfa8cf7f85bb304e3401c52d88752bcd516d1fa9bac4572534ea2205e38423c1df065990790f +ac0bd594fb85a8d4fc26d6df0fa81f11919401f1ecf9168b891ec7f061a2d9368af99f7fd8d9b43b2ce361e7b8482159 +83d92c69ca540d298fe80d8162a1c7af3fa9b49dfb69e85c1d136a3ec39fe419c9fa78e0bb6d96878771fbd37fe92e40 +b35443ae8aa66c763c2db9273f908552fe458e96696b90e41dd509c17a5c04ee178e3490d9c6ba2dc0b8f793c433c134 +923b2d25aa45b2e580ffd94cbb37dc8110f340f0f011217ee1bd81afb0714c0b1d5fb4db86006cdd2457563276f59c59 +96c9125d38fca1a61ac21257b696f8ac3dae78def50285e44d90ea293d591d1c58f703540a7e4e99e070afe4646bbe15 +b57946b2332077fbcdcb406b811779aefd54473b5559a163cd65cb8310679b7e2028aa55c12a1401fdcfcac0e6fae29a +845daedc5cf972883835d7e13c937b63753c2200324a3b8082a6c4abb4be06c5f7c629d4abe4bfaf1d80a1f073eb6ce6 +91a55dfd0efefcd03dc6dacc64ec93b8d296cb83c0ee72400a36f27246e7f2a60e73b7b70ba65819e9cfb73edb7bd297 +8874606b93266455fe8fdd25df9f8d2994e927460af06f2e97dd4d2d90db1e6b06d441b72c2e76504d753badca87fb37 +8ee99e6d231274ff9252c0f4e84549da173041299ad1230929c3e3d32399731c4f20a502b4a307642cac9306ccd49d3c +8836497714a525118e20849d6933bb8535fb6f72b96337d49e3133d936999c90a398a740f42e772353b5f1c63581df6d +a6916945e10628f7497a6cdc5e2de113d25f7ade3e41e74d3de48ccd4fce9f2fa9ab69645275002e6f49399b798c40af +9597706983107eb23883e0812e1a2c58af7f3499d50c6e29b455946cb9812fde1aa323d9ed30d1c0ffd455abe32303cd +a24ee89f7f515cc33bdbdb822e7d5c1877d337f3b2162303cfc2dae028011c3a267c5cb4194afa63a4856a6e1c213448 +8cd25315e4318801c2776824ae6e7d543cb85ed3bc2498ba5752df2e8142b37653cf9e60104d674be3aeb0a66912e97a +b5085ecbe793180b40dbeb879f4c976eaaccaca3a5246807dced5890e0ed24d35f3f86955e2460e14fb44ff5081c07ba +960188cc0b4f908633a6840963a6fa2205fc42c511c6c309685234911c5304ef4c304e3ae9c9c69daa2fb6a73560c256 +a32d0a70bf15d569b4cda5aebe3e41e03c28bf99cdd34ffa6c5d58a097f322772acca904b3a47addb6c7492a7126ebac +977f72d06ad72d4aa4765e0f1f9f4a3231d9f030501f320fe7714cc5d329d08112789fa918c60dd7fdb5837d56bb7fc6 +99fa038bb0470d45852bb871620d8d88520adb701712fcb1f278fed2882722b9e729e6cdce44c82caafad95e37d0e6f7 +b855e8f4fc7634ada07e83b6c719a1e37acb06394bc8c7dcab7747a8c54e5df3943915f021364bd019fdea103864e55f +88bc2cd7458532e98c596ef59ea2cf640d7cc31b4c33cef9ed065c078d1d4eb49677a67de8e6229cc17ea48bace8ee5a +aaa78a3feaa836d944d987d813f9b9741afb076e6aca1ffa42682ab06d46d66e0c07b8f40b9dbd63e75e81efa1ef7b08 +b7b080420cc4d808723b98b2a5b7b59c81e624ab568ecdfdeb8bf3aa151a581b6f56e983ef1b6f909661e25db40b0c69 +abee85c462ac9a2c58e54f06c91b3e5cd8c5f9ab5b5deb602b53763c54826ed6deb0d6db315a8d7ad88733407e8d35e2 +994d075c1527407547590df53e9d72dd31f037c763848d1662eebd4cefec93a24328c986802efa80e038cb760a5300f5 +ab8777640116dfb6678e8c7d5b36d01265dfb16321abbfc277da71556a34bb3be04bc4ae90124ed9c55386d2bfb3bda0 +967e3a828bc59409144463bcf883a3a276b5f24bf3cbfdd7a42343348cba91e00b46ac285835a9b91eef171202974204 +875a9f0c4ffe5bb1d8da5e3c8e41d0397aa6248422a628bd60bfae536a651417d4e8a7d2fb98e13f2dad3680f7bd86d3 +acaa330c3e8f95d46b1880126572b238dbb6d04484d2cd4f257ab9642d8c9fc7b212188b9c7ac9e0fd135c520d46b1bf +aceb762edbb0f0c43dfcdb01ea7a1ac5918ca3882b1e7ebc4373521742f1ed5250d8966b498c00b2b0f4d13212e6dd0b +81d072b4ad258b3646f52f399bced97c613b22e7ad76373453d80b1650c0ca87edb291a041f8253b649b6e5429bb4cff +980a47d27416ac39c7c3a0ebe50c492f8c776ea1de44d5159ac7d889b6d554357f0a77f0e5d9d0ff41aae4369eba1fc2 +8b4dfd5ef5573db1476d5e43aacfb5941e45d6297794508f29c454fe50ea622e6f068b28b3debe8635cf6036007de2e3 +a60831559d6305839515b68f8c3bc7abbd8212cc4083502e19dd682d56ca37c9780fc3ce4ec2eae81ab23b221452dc57 +951f6b2c1848ced9e8a2339c65918e00d3d22d3e59a0a660b1eca667d18f8430d737884e9805865ef3ed0fe1638a22d9 +b02e38fe790b492aa5e89257c4986c9033a8b67010fa2add9787de857d53759170fdd67715ca658220b4e14b0ca48124 +a51007e4346060746e6b0e4797fc08ef17f04a34fe24f307f6b6817edbb8ce2b176f40771d4ae8a60d6152cbebe62653 +a510005b05c0b305075b27b243c9d64bcdce85146b6ed0e75a3178b5ff9608213f08c8c9246f2ca6035a0c3e31619860 +aaff4ef27a7a23be3419d22197e13676d6e3810ceb06a9e920d38125745dc68a930f1741c9c2d9d5c875968e30f34ab5 +864522a9af9857de9814e61383bebad1ba9a881696925a0ea6bfc6eff520d42c506bbe5685a9946ed710e889765be4a0 +b63258c080d13f3b7d5b9f3ca9929f8982a6960bdb1b0f8676f4dca823971601672f15e653917bf5d3746bb220504913 +b51ce0cb10869121ae310c7159ee1f3e3a9f8ad498827f72c3d56864808c1f21fa2881788f19ece884d3f705cd7bd0c5 +95d9cecfc018c6ed510e441cf84c712d9909c778c16734706c93222257f64dcd2a9f1bd0b400ca271e22c9c487014274 +8beff4d7d0140b86380ff4842a9bda94c2d2be638e20ac68a4912cb47dbe01a261857536375208040c0554929ced1ddc +891ff49258749e2b57c1e9b8e04b12c77d79c3308b1fb615a081f2aacdfb4b39e32d53e069ed136fdbd43c53b87418fa +9625cad224e163d387738825982d1e40eeff35fe816d10d7541d15fdc4d3eee48009090f3faef4024b249205b0b28f72 +8f3947433d9bd01aa335895484b540a9025a19481a1c40b4f72dd676bfcf332713714fd4010bde936eaf9470fd239ed0 +a00ec2d67789a7054b53f0e858a8a232706ccc29a9f3e389df7455f1a51a2e75801fd78469a13dbc25d28399ae4c6182 +a3f65884506d4a62b8775a0ea0e3d78f5f46bc07910a93cd604022154eabdf1d73591e304d61edc869e91462951975e1 +a14eef4fd5dfac311713f0faa9a60415e3d30b95a4590cbf95f2033dffb4d16c02e7ceff3dcd42148a4e3bc49cce2dd4 +8afa11c0eef3c540e1e3460bc759bb2b6ea90743623f88e62950c94e370fe4fd01c22b6729beba4dcd4d581198d9358f +afb05548a69f0845ffcc5f5dc63e3cdb93cd270f5655173b9a950394b0583663f2b7164ba6df8d60c2e775c1d9f120af +97f179e01a947a906e1cbeafa083960bc9f1bade45742a3afee488dfb6011c1c6e2db09a355d77f5228a42ccaa7bdf8e +8447fca4d35f74b3efcbd96774f41874ca376bf85b79b6e66c92fa3f14bdd6e743a051f12a7fbfd87f319d1c6a5ce217 +a57ca39c23617cd2cf32ff93b02161bd7baf52c4effb4679d9d5166406e103bc8f3c6b5209e17c37dbb02deb8bc72ddd +9667c7300ff80f0140be002b0e36caab07aaee7cce72679197c64d355e20d96196acaf54e06e1382167d081fe6f739c1 +828126bb0559ce748809b622677267ca896fa2ee76360fd2c02990e6477e06a667241379ca7e65d61a5b64b96d7867de +8b8835dea6ba8cf61c91f01a4b3d2f8150b687a4ee09b45f2e5fc8f80f208ae5d142d8e3a18153f0722b90214e60c5a7 +a98e8ff02049b4da386e3ee93db23bbb13dfeb72f1cfde72587c7e6d962780b7671c63e8ac3fbaeb1a6605e8d79e2f29 +87a4892a0026d7e39ef3af632172b88337cb03669dea564bcdb70653b52d744730ebb5d642e20cb627acc9dbb547a26b +877352a22fc8052878a57effc159dac4d75fe08c84d3d5324c0bab6d564cdf868f33ceee515eee747e5856b62cfa0cc7 +8b801ba8e2ff019ee62f64b8cb8a5f601fc35423eb0f9494b401050103e1307dc584e4e4b21249cd2c686e32475e96c3 +a9e7338d6d4d9bfec91b2af28a8ed13b09415f57a3a00e5e777c93d768fdb3f8e4456ae48a2c6626b264226e911a0e28 +99c05fedf40ac4726ed585d7c1544c6e79619a0d3fb6bda75a08c7f3c0008e8d5e19ed4da48de3216135f34a15eba17c +a61cce8a1a8b13a4a650fdbec0eeea8297c352a8238fb7cac95a0df18ed16ee02a3daa2de108fa122aca733bd8ad7855 +b97f37da9005b440b4cb05870dd881bf8491fe735844f2d5c8281818583b38e02286e653d9f2e7fa5e74c3c3eb616540 +a72164a8554da8e103f692ac5ebb4aece55d5194302b9f74b6f2a05335b6e39beede0bf7bf8c5bfd4d324a784c5fb08c +b87e8221c5341cd9cc8bb99c10fe730bc105550f25ed4b96c0d45e6142193a1b2e72f1b3857373a659b8c09be17b3d91 +a41fb1f327ef91dcb7ac0787918376584890dd9a9675c297c45796e32d6e5985b12f9b80be47fc3a8596c245f419d395 +90dafa3592bdbb3465c92e2a54c2531822ba0459d45d3e7a7092fa6b823f55af28357cb51896d4ec2d66029c82f08e26 +a0a9adc872ebc396557f484f1dd21954d4f4a21c4aa5eec543f5fa386fe590839735c01f236574f7ff95407cd12de103 +b8c5c940d58be7538acf8672852b5da3af34f82405ef2ce8e4c923f1362f97fc50921568d0fd2fe846edfb0823e62979 +85aaf06a8b2d0dac89dafd00c28533f35dbd074978c2aaa5bef75db44a7b12aeb222e724f395513b9a535809a275e30b +81f3cbe82fbc7028c26a6c1808c604c63ba023a30c9f78a4c581340008dbda5ec07497ee849a2183fcd9124f7936af32 +a11ac738de75fd60f15a34209d3825d5e23385796a4c7fc5931822f3f380af977dd0f7b59fbd58eed7777a071e21b680 +85a279c493de03db6fa6c3e3c1b1b29adc9a8c4effc12400ae1128da8421954fa8b75ad19e5388fe4543b76fb0812813 +83a217b395d59ab20db6c4adb1e9713fc9267f5f31a6c936042fe051ce8b541f579442f3dcf0fa16b9e6de9fd3518191 +83a0b86e7d4ed8f9ccdc6dfc8ff1484509a6378fa6f09ed908e6ab9d1073f03011dc497e14304e4e3d181b57de06a5ab +a63ad69c9d25704ce1cc8e74f67818e5ed985f8f851afa8412248b2df5f833f83b95b27180e9e7273833ed0d07113d3b +99b1bc2021e63b561fe44ddd0af81fcc8627a91bfeecbbc989b642bc859abc0c8d636399701aad7bbaf6a385d5f27d61 +b53434adb66f4a807a6ad917c6e856321753e559b1add70824e5c1e88191bf6993fccb9b8b911fc0f473fb11743acacd +97ed3b9e6fb99bf5f945d4a41f198161294866aa23f2327818cdd55cb5dc4c1a8eff29dd8b8d04902d6cd43a71835c82 +b1e808260e368a18d9d10bdea5d60223ba1713b948c782285a27a99ae50cc5fc2c53d407de07155ecc16fb8a36d744a0 +a3eb4665f18f71833fec43802730e56b3ee5a357ea30a888ad482725b169d6f1f6ade6e208ee081b2e2633079b82ba7d +ab8beb2c8353fc9f571c18fdd02bdb977fc883313469e1277b0372fbbb33b80dcff354ca41de436d98d2ed710faa467e +aa9071cfa971e4a335a91ad634c98f2be51544cb21f040f2471d01bb97e1df2277ae1646e1ea8f55b7ba9f5c8c599b39 +80b7dbfdcaf40f0678012acc634eba44ea51181475180d9deb2050dc4f2de395289edd0223018c81057ec79b04b04c49 +89623d7f6cb17aa877af14de842c2d4ab7fd576d61ddd7518b5878620a01ded40b6010de0da3cdf31d837eecf30e9847 +a773bb024ae74dd24761f266d4fb27d6fd366a8634febe8235376b1ae9065c2fe12c769f1d0407867dfbe9f5272c352f +8455a561c3aaa6ba64c881a5e13921c592b3a02e968f4fb24a2243c36202795d0366d9cc1a24e916f84d6e158b7aeac7 +81d8bfc4b283cf702a40b87a2b96b275bdbf0def17e67d04842598610b67ea08c804d400c3e69fa09ea001eaf345b276 +b8f8f82cb11fea1c99467013d7e167ff03deb0c65a677fab76ded58826d1ba29aa7cf9fcd7763615735ea3ad38e28719 +89a6a04baf9cccc1db55179e1650b1a195dd91fb0aebc197a25143f0f393524d2589975e3fbfc2547126f0bced7fd6f2 +b81b2162df045390f04df07cbd0962e6b6ca94275a63edded58001a2f28b2ae2af2c7a6cba4ecd753869684e77e7e799 +a3757f722776e50de45c62d9c4a2ee0f5655a512344c4cbec542d8045332806568dd626a719ef21a4eb06792ca70f204 +8c5590df96ec22179a4e8786de41beb44f987a1dcc508eb341eecbc0b39236fdfad47f108f852e87179ccf4e10091e59 +87502f026ed4e10167419130b88c3737635c5b9074c364e1dd247cef5ef0fc064b4ae99b187e33301e438bbd2fe7d032 +af925a2165e980ced620ff12289129fe17670a90ae0f4db9d4b39bd887ccb1f5d2514ac9ecf910f6390a8fc66bd5be17 +857fca899828cf5c65d26e3e8a6e658542782fc72762b3b9c73514919f83259e0f849a9d4838b40dc905fe43024d0d23 +87ffebdbfb69a9e1007ebac4ffcb4090ff13705967b73937063719aa97908986effcb7262fdadc1ae0f95c3690e3245d +a9ff6c347ac6f4c6ab993b748802e96982eaf489dc69032269568412fc9a79e7c2850dfc991b28211b3522ee4454344b +a65b3159df4ec48bebb67cb3663cd744027ad98d970d620e05bf6c48f230fa45bf17527fe726fdf705419bb7a1bb913e +84b97b1e6408b6791831997b03cd91f027e7660fd492a93d95daafe61f02427371c0e237c75706412f442991dfdff989 +ab761c26527439b209af0ae6afccd9340bbed5fbe098734c3145b76c5d2cd7115d9227b2eb523882b7317fbb09180498 +a0479a8da06d7a69c0b0fee60df4e691c19c551f5e7da286dab430bfbcabf31726508e20d26ea48c53365a7f00a3ad34 +a732dfc9baa0f4f40b5756d2e8d8937742999623477458e0bc81431a7b633eefc6f53b3b7939fe0a020018549c954054 +901502436a1169ba51dc479a5abe7c8d84e0943b16bc3c6a627b49b92cd46263c0005bc324c67509edd693f28e612af1 +b627aee83474e7f84d1bab9b7f6b605e33b26297ac6bbf52d110d38ba10749032bd551641e73a383a303882367af429b +95108866745760baef4a46ef56f82da6de7e81c58b10126ebd2ba2cd13d339f91303bf2fb4dd104a6956aa3b13739503 +899ed2ade37236cec90056f3569bc50f984f2247792defafcceb49ad0ca5f6f8a2f06573705300e07f0de0c759289ff5 +a9f5eee196d608efe4bcef9bf71c646d27feb615e21252cf839a44a49fd89da8d26a758419e0085a05b1d59600e2dc42 +b36c6f68fed6e6c85f1f4a162485f24817f2843ec5cbee45a1ebfa367d44892e464949c6669f7972dc7167af08d55d25 +aaaede243a9a1b6162afbc8f571a52671a5a4519b4062e3f26777664e245ba873ed13b0492c5dbf0258c788c397a0e9e +972b4fb39c31cbe127bf9a32a5cc10d621ebdd9411df5e5da3d457f03b2ab2cd1f6372d8284a4a9400f0b06ecdbfd38e +8f6ca1e110e959a4b1d9a5ce5f212893cec21db40d64d5ac4d524f352d72198f923416a850bf845bc5a22a79c0ea2619 +a0f3c93b22134f66f04b2553a53b738644d1665ceb196b8494b315a4c28236fb492017e4a0de4224827c78e42f9908b7 +807fb5ee74f6c8735b0b5ca07e28506214fe4047dbeb00045d7c24f7849e98706aea79771241224939cb749cf1366c7d +915eb1ff034224c0b645442cdb7d669303fdc00ca464f91aaf0b6fde0b220a3a74ff0cb043c26c9f3a5667b3fdaa9420 +8fda6cef56ed33fefffa9e6ac8e6f76b1af379f89761945c63dd448801f7bb8ca970504a7105fac2f74f652ccff32327 +87380cffdcffb1d0820fa36b63cc081e72187f86d487315177d4d04da4533eb19a0e2ff6115ceab528887819c44a5164 +8cd89e03411a18e7f16f968b89fb500c36d47d229f6487b99e62403a980058db5925ce249206743333538adfad168330 +974451b1df33522ce7056de9f03e10c70bf302c44b0741a59df3d6877d53d61a7394dcee1dd46e013d7cb9d73419c092 +98c35ddf645940260c490f384a49496a7352bb8e3f686feed815b1d38f59ded17b1ad6e84a209e773ed08f7b8ff1e4c2 +963f386cf944bb9b2ddebb97171b64253ea0a2894ac40049bdd86cda392292315f3a3d490ca5d9628c890cfb669f0acb +8d507712152babd6d142ee682638da8495a6f3838136088df9424ef50d5ec28d815a198c9a4963610b22e49b4cdf95e9 +83d4bc6b0be87c8a4f1e9c53f257719de0c73d85b490a41f7420e777311640937320557ff2f1d9bafd1daaa54f932356 +82f5381c965b7a0718441131c4d13999f4cdce637698989a17ed97c8ea2e5bdb5d07719c5f7be8688edb081b23ede0f4 +a6ebecab0b72a49dfd01d69fa37a7f74d34fb1d4fef0aa10e3d6fceb9eccd671225c230af89f6eb514250e41a5f91f52 +846d185bdad6e11e604df7f753b7a08a28b643674221f0e750ebdb6b86ec584a29c869e131bca868972a507e61403f6a +85a98332292acb744bd1c0fd6fdcf1f889a78a2c9624d79413ffa194cc8dfa7821a4b60cde8081d4b5f71f51168dd67f +8f7d97c3b4597880d73200d074eb813d95432306e82dafc70b580b8e08cb8098b70f2d07b4b3ac6a4d77e92d57035031 +8185439c8751e595825d7053518cbe121f191846a38d4dbcb558c3f9d7a3104f3153401adaaaf27843bbe2edb504bfe3 +b3c00d8ece1518fca6b1215a139b0a0e26d9cba1b3a424f7ee59f30ce800a5db967279ed60958dd1f3ee69cf4dd1b204 +a2e6cb6978e883f9719c3c0d44cfe8de0cc6f644b98f98858433bea8bbe7b612c8aca5952fccce4f195f9d54f9722dc2 +99663087e3d5000abbec0fbda4e7342ec38846cc6a1505191fb3f1a337cb369455b7f8531a6eb8b0f7b2c4baf83cbe2b +ab0836c6377a4dbc7ca6a4d6cf021d4cd60013877314dd05f351706b128d4af6337711ed3443cb6ca976f40d74070a9a +87abfd5126152fd3bac3c56230579b489436755ea89e0566aa349490b36a5d7b85028e9fb0710907042bcde6a6f5d7e3 +974ba1033f75f60e0cf7c718a57ae1da3721cf9d0fb925714c46f027632bdd84cd9e6de4cf4d00bc55465b1c5ebb7384 +a607b49d73689ac64f25cec71221d30d53e781e1100d19a2114a21da6507a60166166369d860bd314acb226596525670 +a7c2b0b915d7beba94954f2aa7dd08ec075813661e2a3ecca5d28a0733e59583247fed9528eb28aba55b972cdbaf06eb +b8b3123e44128cc8efbe3270f2f94e50ca214a4294c71c3b851f8cbb70cb67fe9536cf07d04bf7fe380e5e3a29dd3c15 +a59a07e343b62ad6445a0859a32b58c21a593f9ddbfe52049650f59628c93715aa1f4e1f45b109321756d0eeec8a5429 +94f51f8a4ed18a6030d0aaa8899056744bd0e9dc9ac68f62b00355cddab11da5da16798db75f0bfbce0e5bdfe750c0b6 +97460a97ca1e1fa5ce243b81425edc0ec19b7448e93f0b55bc9785eedeeafe194a3c8b33a61a5c72990edf375f122777 +8fa859a089bc17d698a7ee381f37ce9beadf4e5b44fce5f6f29762bc04f96faff5d58c48c73631290325f05e9a1ecf49 +abdf38f3b20fc95eff31de5aa9ef1031abfa48f1305ee57e4d507594570401503476d3bcc493838fc24d6967a3082c7f +b8914bfb82815abb86da35c64d39ab838581bc0bf08967192697d9663877825f2b9d6fbdcf9b410463482b3731361aef +a8187f9d22b193a5f578999954d6ec9aa9b32338ccadb8a3e1ce5bad5ea361d69016e1cdfac44e9d6c54e49dd88561b9 +aac262cb7cba7fd62c14daa7b39677cabc1ef0947dd06dd89cac8570006a200f90d5f0353e84f5ff03179e3bebe14231 +a630ef5ece9733b8c46c0a2df14a0f37647a85e69c63148e79ffdcc145707053f9f9d305c3f1cf3c7915cb46d33abd07 +b102c237cb2e254588b6d53350dfda6901bd99493a3fbddb4121d45e0b475cf2663a40d7b9a75325eda83e4ba1e68cb3 +86a930dd1ddcc16d1dfa00aa292cb6c2607d42c367e470aa920964b7c17ab6232a7108d1c2c11fc40fb7496547d0bbf8 +a832fdc4500683e72a96cce61e62ac9ee812c37fe03527ad4cf893915ca1962cee80e72d4f82b20c8fc0b764376635a1 +88ad985f448dabb04f8808efd90f273f11f5e6d0468b5489a1a6a3d77de342992a73eb842d419034968d733f101ff683 +98a8538145f0d86f7fbf9a81c9140f6095c5bdd8960b1c6f3a1716428cd9cca1bf8322e6d0af24e6169abcf7df2b0ff6 +9048c6eba5e062519011e177e955a200b2c00b3a0b8615bdecdebc217559d41058d3315f6d05617be531ef0f6aef0e51 +833bf225ab6fc68cdcacf1ec1b50f9d05f5410e6cdcd8d56a3081dc2be8a8d07b81534d1ec93a25c2e270313dfb99e3b +a84bcd24c3da5e537e64a811b93c91bfc84d7729b9ead7f79078989a6eb76717d620c1fad17466a0519208651e92f5ff +b7cdd0a3fbd79aed93e1b5a44ca44a94e7af5ed911e4492f332e3a5ed146c7286bde01b52276a2fcc02780d2109874dd +8a19a09854e627cb95750d83c20c67442b66b35896a476358f993ba9ac114d32c59c1b3d0b8787ee3224cf3888b56c64 +a9abd5afb8659ee52ada8fa5d57e7dd355f0a7350276f6160bec5fbf70d5f99234dd179eb221c913e22a49ec6d267846 +8c13c4274c0d30d184e73eaf812200094bbbd57293780bdadbceb262e34dee5b453991e7f37c7333a654fc71c69d6445 +a4320d73296ff8176ce0127ca1921c450e2a9c06eff936681ebaffb5a0b05b17fded24e548454de89aca2dcf6d7a9de4 +b2b8b3e15c1f645f07783e5628aba614e60157889db41d8161d977606788842b67f83f361eae91815dc0abd84e09abd5 +ad26c3aa35ddfddc15719b8bb6c264aaec7065e88ac29ba820eb61f220fef451609a7bb037f3722d022e6c86e4f1dc88 +b8615bf43e13ae5d7b8dd903ce37190800cd490f441c09b22aa29d7a29ed2c0417b7a08ead417868f1de2589deaadd80 +8d3425e1482cd1e76750a76239d33c06b3554c3c3c87c15cb7ab58b1cee86a4c5c4178b44e23f36928365a1b484bde02 +806893a62e38c941a7dd6f249c83af16596f69877cc737d8f73f6b8cd93cbc01177a7a276b2b8c6b0e5f2ad864db5994 +86618f17fa4b0d65496b661bbb5ba3bc3a87129d30a4b7d4f515b904f4206ca5253a41f49fd52095861e5e065ec54f21 +9551915da1304051e55717f4c31db761dcdcf3a1366c89a4af800a9e99aca93a357bf928307f098e62b44a02cb689a46 +8f79c4ec0ec1146cb2a523b52fe33def90d7b5652a0cb9c2d1c8808a32293e00aec6969f5b1538e3a94cd1efa3937f86 +a0c03e329a707300081780f1e310671315b4c6a4cedcb29697aedfabb07a9d5df83f27b20e9c44cf6b16e39d9ded5b98 +86a7cfa7c8e7ce2c01dd0baec2139e97e8e090ad4e7b5f51518f83d564765003c65968f85481bbb97cb18f005ccc7d9f +a33811770c6dfda3f7f74e6ad0107a187fe622d61b444bbd84fd7ef6e03302e693b093df76f6ab39bb4e02afd84a575a +85480f5c10d4162a8e6702b5e04f801874d572a62a130be94b0c02b58c3c59bdcd48cd05f0a1c2839f88f06b6e3cd337 +8e181011564b17f7d787fe0e7f3c87f6b62da9083c54c74fd6c357a1f464c123c1d3d8ade3cf72475000b464b14e2be3 +8ee178937294b8c991337e0621ab37e9ffa4ca2bdb3284065c5e9c08aad6785d50cf156270ff9daf9a9127289710f55b +8bd1e8e2d37379d4b172f1aec96f2e41a6e1393158d7a3dbd9a95c8dd4f8e0b05336a42efc11a732e5f22b47fc5c271d +8f3da353cd487c13136a85677de8cedf306faae0edec733cf4f0046f82fa4639db4745b0095ff33a9766aba50de0cbcf +8d187c1e97638df0e4792b78e8c23967dac43d98ea268ca4aabea4e0fa06cb93183fd92d4c9df74118d7cc27bf54415e +a4c992f08c2f8bac0b74b3702fb0c75c9838d2ce90b28812019553d47613c14d8ce514d15443159d700b218c5a312c49 +a6fd1874034a34c3ea962a316c018d9493d2b3719bb0ec4edbc7c56b240802b2228ab49bee6f04c8a3e9f6f24a48c1c2 +b2efed8e799f8a15999020900dc2c58ece5a3641c90811b86a5198e593d7318b9d53b167818ccdfbe7df2414c9c34011 +995ff7de6181ddf95e3ead746089c6148da3508e4e7a2323c81785718b754d356789b902e7e78e2edc6b0cbd4ff22c78 +944073d24750a9068cbd020b834afc72d2dde87efac04482b3287b40678ad07588519a4176b10f2172a2c463d063a5cd +99db4b1bb76475a6fd75289986ef40367960279524378cc917525fb6ba02a145a218c1e9caeb99332332ab486a125ac0 +89fce4ecd420f8e477af4353b16faabb39e063f3f3c98fde2858b1f2d1ef6eed46f0975a7c08f233b97899bf60ccd60a +8c09a4f07a02b80654798bc63aada39fd638d3e3c4236ccd8a5ca280350c31e4a89e5f4c9aafb34116e71da18c1226b8 +85325cfa7ded346cc51a2894257eab56e7488dbff504f10f99f4cd2b630d913003761a50f175ed167e8073f1b6b63fb0 +b678b4fbec09a8cc794dcbca185f133578f29e354e99c05f6d07ac323be20aecb11f781d12898168e86f2e0f09aca15e +a249cfcbca4d9ba0a13b5f6aac72bf9b899adf582f9746bb2ad043742b28915607467eb794fca3704278f9136f7642be +9438e036c836a990c5e17af3d78367a75b23c37f807228362b4d13e3ddcb9e431348a7b552d09d11a2e9680704a4514f +925ab70450af28c21a488bfb5d38ac994f784cf249d7fd9ad251bb7fd897a23e23d2528308c03415074d43330dc37ef4 +a290563904d5a8c0058fc8330120365bdd2ba1fdbaef7a14bc65d4961bb4217acfaed11ab82669e359531f8bf589b8db +a7e07a7801b871fc9b981a71e195a3b4ba6b6313bc132b04796a125157e78fe5c11a3a46cf731a255ac2d78a4ae78cd0 +b26cd2501ee72718b0eebab6fb24d955a71f363f36e0f6dff0ab1d2d7836dab88474c0cef43a2cc32701fca7e82f7df3 +a1dc3b6c968f3de00f11275092290afab65b2200afbcfa8ddc70e751fa19dbbc300445d6d479a81bda3880729007e496 +a9bc213e28b630889476a095947d323b9ac6461dea726f2dc9084473ae8e196d66fb792a21905ad4ec52a6d757863e7d +b25d178df8c2df8051e7c888e9fa677fde5922e602a95e966db9e4a3d6b23ce043d7dc48a5b375c6b7c78e966893e8c3 +a1c8d88d72303692eaa7adf68ea41de4febec40cc14ae551bb4012afd786d7b6444a3196b5d9d5040655a3366d96b7cd +b22bd44f9235a47118a9bbe2ba5a2ba9ec62476061be2e8e57806c1a17a02f9a51403e849e2e589520b759abd0117683 +b8add766050c0d69fe81d8d9ea73e1ed05f0135d093ff01debd7247e42dbb86ad950aceb3b50b9af6cdc14ab443b238f +af2cf95f30ef478f018cf81d70d47d742120b09193d8bb77f0d41a5d2e1a80bfb467793d9e2471b4e0ad0cb2c3b42271 +8af5ef2107ad284e246bb56e20fef2a255954f72de791cbdfd3be09f825298d8466064f3c98a50496c7277af32b5c0bc +85dc19558572844c2849e729395a0c125096476388bd1b14fa7f54a7c38008fc93e578da3aac6a52ff1504d6ca82db05 +ae8c9b43c49572e2e166d704caf5b4b621a3b47827bb2a3bcd71cdc599bba90396fd9a405261b13e831bb5d44c0827d7 +a7ba7efede25f02e88f6f4cbf70643e76784a03d97e0fbd5d9437c2485283ad7ca3abb638a5f826cd9f6193e5dec0b6c +94a9d122f2f06ef709fd8016fd4b712d88052245a65a301f5f177ce22992f74ad05552b1f1af4e70d1eac62cef309752 +82d999b3e7cf563833b8bc028ff63a6b26eb357dfdb3fd5f10e33a1f80a9b2cfa7814d871b32a7ebfbaa09e753e37c02 +aec6edcde234df502a3268dd2c26f4a36a2e0db730afa83173f9c78fcb2b2f75510a02b80194327b792811caefda2725 +94c0bfa66c9f91d462e9194144fdd12d96f9bbe745737e73bab8130607ee6ea9d740e2cfcbbd00a195746edb6369ee61 +ab7573dab8c9d46d339e3f491cb2826cabe8b49f85f1ede78d845fc3995537d1b4ab85140b7d0238d9c24daf0e5e2a7e +87e8b16832843251fe952dadfd01d41890ed4bb4b8fa0254550d92c8cced44368225eca83a6c3ad47a7f81ff8a80c984 +9189d2d9a7c64791b19c0773ad4f0564ce6bea94aa275a917f78ad987f150fdb3e5e26e7fef9982ac184897ecc04683f +b3661bf19e2da41415396ae4dd051a9272e8a2580b06f1a1118f57b901fa237616a9f8075af1129af4eabfefedbe2f1c +af43c86661fb15daf5d910a4e06837225e100fb5680bd3e4b10f79a2144c6ec48b1f8d6e6b98e067d36609a5d038889a +82ac0c7acaa83ddc86c5b4249aae12f28155989c7c6b91e5137a4ce05113c6cbc16f6c44948b0efd8665362d3162f16a +8f268d1195ab465beeeb112cd7ffd5d5548559a8bc01261106d3555533fc1971081b25558d884d552df0db1cddda89d8 +8ef7caa5521f3e037586ce8ac872a4182ee20c7921c0065ed9986c047e3dda08294da1165f385d008b40d500f07d895f +8c2f98f6880550573fad46075d3eba26634b5b025ce25a0b4d6e0193352c8a1f0661064027a70fe8190b522405f9f4e3 +b7653f353564feb164f0f89ec7949da475b8dad4a4d396d252fc2a884f6932d027b7eb2dc4d280702c74569319ed701a +a026904f4066333befd9b87a8fad791d014096af60cdd668ef919c24dbe295ff31f7a790e1e721ba40cf5105abca67f4 +988f982004ada07a22dd345f2412a228d7a96b9cae2c487de42e392afe1e35c2655f829ce07a14629148ce7079a1f142 +9616add009067ed135295fb74d5b223b006b312bf14663e547a0d306694ff3a8a7bb9cfc466986707192a26c0bce599f +ad4c425de9855f6968a17ee9ae5b15e0a5b596411388cf976df62ecc6c847a6e2ddb2cea792a5f6e9113c2445dba3e5c +b698ac9d86afa3dc69ff8375061f88e3b0cff92ff6dfe747cebaf142e813c011851e7a2830c10993b715e7fd594604a9 +a386fa189847bb3b798efca917461e38ead61a08b101948def0f82cd258b945ed4d45b53774b400af500670149e601b7 +905c95abda2c68a6559d8a39b6db081c68cef1e1b4be63498004e1b2f408409be9350b5b5d86a30fd443e2b3e445640a +9116dade969e7ce8954afcdd43e5cab64dc15f6c1b8da9d2d69de3f02ba79e6c4f6c7f54d6bf586d30256ae405cd1e41 +a3084d173eacd08c9b5084a196719b57e47a0179826fda73466758235d7ecdb87cbcf097bd6b510517d163a85a7c7edd +85bb00415ad3c9be99ff9ba83672cc59fdd24356b661ab93713a3c8eab34e125d8867f628a3c3891b8dc056e69cd0e83 +8d58541f9f39ed2ee4478acce5d58d124031338ec11b0d55551f00a5a9a6351faa903a5d7c132dc5e4bb026e9cbd18e4 +a622adf72dc250e54f672e14e128c700166168dbe0474cecb340da175346e89917c400677b1bc1c11fcc4cc26591d9db +b3f865014754b688ca8372e8448114fff87bf3ca99856ab9168894d0c4679782c1ced703f5b74e851b370630f5e6ee86 +a7e490b2c40c2446fcd91861c020da9742c326a81180e38110558bb5d9f2341f1c1885e79b364e6419023d1cbdc47380 +b3748d472b1062e54572badbb8e87ac36534407f74932e7fc5b8392d008e8e89758f1671d1e4d30ab0fa40551b13bb5e +89898a5c5ec4313aabc607b0049fd1ebad0e0c074920cf503c9275b564d91916c2c446d3096491c950b7af3ac5e4b0ed +8eb8c83fef2c9dd30ea44e286e9599ec5c20aba983f702e5438afe2e5b921884327ad8d1566c72395587efac79ca7d56 +b92479599e806516ce21fb0bd422a1d1d925335ebe2b4a0a7e044dd275f30985a72b97292477053ac5f00e081430da80 +a34ae450a324fe8a3c25a4d653a654f9580ed56bbea213b8096987bbad0f5701d809a17076435e18017fea4d69f414bc +81381afe6433d62faf62ea488f39675e0091835892ecc238e02acf1662669c6d3962a71a3db652f6fe3bc5f42a0e5dc5 +a430d475bf8580c59111103316fe1aa79c523ea12f1d47a976bbfae76894717c20220e31cf259f08e84a693da6688d70 +b842814c359754ece614deb7d184d679d05d16f18a14b288a401cef5dad2cf0d5ee90bad487b80923fc5573779d4e4e8 +971d9a2627ff2a6d0dcf2af3d895dfbafca28b1c09610c466e4e2bff2746f8369de7f40d65b70aed135fe1d72564aa88 +8f4ce1c59e22b1ce7a0664caaa7e53735b154cfba8d2c5cc4159f2385843de82ab58ed901be876c6f7fce69cb4130950 +86cc9dc321b6264297987000d344fa297ef45bcc2a4df04e458fe2d907ad304c0ea2318e32c3179af639a9a56f3263cf +8229e0876dfe8f665c3fb19b250bd89d40f039bbf1b331468b403655be7be2e104c2fd07b9983580c742d5462ca39a43 +99299d73066e8eb128f698e56a9f8506dfe4bd014931e86b6b487d6195d2198c6c5bf15cccb40ccf1f8ddb57e9da44a2 +a3a3be37ac554c574b393b2f33d0a32a116c1a7cfeaf88c54299a4da2267149a5ecca71f94e6c0ef6e2f472b802f5189 +a91700d1a00387502cdba98c90f75fbc4066fefe7cc221c8f0e660994c936badd7d2695893fde2260c8c11d5bdcdd951 +8e03cae725b7f9562c5c5ab6361644b976a68bada3d7ca508abca8dfc80a469975689af1fba1abcf21bc2a190dab397d +b01461ad23b2a8fa8a6d241e1675855d23bc977dbf4714add8c4b4b7469ccf2375cec20e80cedfe49361d1a30414ac5b +a2673bf9bc621e3892c3d7dd4f1a9497f369add8cbaa3472409f4f86bd21ac67cfac357604828adfee6ada1835365029 +a042dff4bf0dfc33c178ba1b335e798e6308915128de91b12e5dbbab7c4ac8d60a01f6aea028c3a6d87b9b01e4e74c01 +86339e8a75293e4b3ae66b5630d375736b6e6b6b05c5cda5e73fbf7b2f2bd34c18a1d6cefede08625ce3046e77905cb8 +af2ebe1b7d073d03e3d98bc61af83bf26f7a8c130fd607aa92b75db22d14d016481b8aa231e2c9757695f55b7224a27f +a00ee882c9685e978041fd74a2c465f06e2a42ffd3db659053519925be5b454d6f401e3c12c746e49d910e4c5c9c5e8c +978a781c0e4e264e0dad57e438f1097d447d891a1e2aa0d5928f79a9d5c3faae6f258bc94fdc530b7b2fa6a9932bb193 +aa4b7ce2e0c2c9e9655bf21e3e5651c8503bce27483017b0bf476be743ba06db10228b3a4c721219c0779747f11ca282 +b003d1c459dacbcf1a715551311e45d7dbca83a185a65748ac74d1800bbeaba37765d9f5a1a221805c571910b34ebca8 +95b6e531b38648049f0d19de09b881baa1f7ea3b2130816b006ad5703901a05da57467d1a3d9d2e7c73fb3f2e409363c +a6cf9c06593432d8eba23a4f131bb7f72b9bd51ab6b4b772a749fe03ed72b5ced835a349c6d9920dba2a39669cb7c684 +aa3d59f6e2e96fbb66195bc58c8704e139fa76cd15e4d61035470bd6e305db9f98bcbf61ac1b95e95b69ba330454c1b3 +b57f97959c208361de6d7e86dff2b873068adb0f158066e646f42ae90e650079798f165b5cd713141cd3a2a90a961d9a +a76ee8ed9052f6a7a8c69774bb2597be182942f08115baba03bf8faaeaee526feba86120039fe8ca7b9354c3b6e0a8e6 +95689d78c867724823f564627d22d25010f278674c6d2d0cdb10329169a47580818995d1d727ce46c38a1e47943ebb89 +ab676d2256c6288a88e044b3d9ffd43eb9d5aaee00e8fc60ac921395fb835044c71a26ca948e557fed770f52d711e057 +96351c72785c32e5d004b6f4a1259fb8153d631f0c93fed172f18e8ba438fbc5585c1618deeabd0d6d0b82173c2e6170 +93dd8d3db576418e22536eba45ab7f56967c6c97c64260d6cddf38fb19c88f2ec5cd0e0156f50e70855eee8a2b879ffd +ad6ff16f40f6de3d7a737f8e6cebd8416920c4ff89dbdcd75eabab414af9a6087f83ceb9aff7680aa86bff98bd09c8cc +84de53b11671abc9c38710e19540c5c403817562aeb22a88404cdaff792c1180f717dbdfe8f54940c062c4d032897429 +872231b9efa1cdd447b312099a5c164c560440a9441d904e70f5abfc3b2a0d16be9a01aca5e0a2599a61e19407587e3d +88f44ac27094a2aa14e9dc40b099ee6d68f97385950f303969d889ee93d4635e34dff9239103bdf66a4b7cbba3e7eb7a +a59afebadf0260e832f6f44468443562f53fbaf7bcb5e46e1462d3f328ac437ce56edbca617659ac9883f9e13261fad7 +b1990e42743a88de4deeacfd55fafeab3bc380cb95de43ed623d021a4f2353530bcab9594389c1844b1c5ea6634c4555 +85051e841149a10e83f56764e042182208591396d0ce78c762c4a413e6836906df67f38c69793e158d64fef111407ba3 +9778172bbd9b1f2ec6bbdd61829d7b39a7df494a818e31c654bf7f6a30139899c4822c1bf418dd4f923243067759ce63 +9355005b4878c87804fc966e7d24f3e4b02bed35b4a77369d01f25a3dcbff7621b08306b1ac85b76fe7b4a3eb5f839b1 +8f9dc6a54fac052e236f8f0e1f571ac4b5308a43acbe4cc8183bce26262ddaf7994e41cf3034a4cbeca2c505a151e3b1 +8cc59c17307111723fe313046a09e0e32ea0cce62c13814ab7c6408c142d6a0311d801be4af53fc9240523f12045f9ef +8e6057975ed40a1932e47dd3ac778f72ee2a868d8540271301b1aa6858de1a5450f596466494a3e0488be4fbeb41c840 +812145efbd6559ae13325d56a15940ca4253b17e72a9728986b563bb5acc13ec86453796506ac1a8f12bd6f9e4a288c3 +911da0a6d6489eb3dab2ec4a16e36127e8a291ae68a6c2c9de33e97f3a9b1f00da57a94e270a0de79ecc5ecb45d19e83 +b72ea85973f4b2a7e6e71962b0502024e979a73c18a9111130e158541fa47bbaaf53940c8f846913a517dc69982ba9e1 +a7a56ad1dbdc55f177a7ad1d0af78447dc2673291e34e8ab74b26e2e2e7d8c5fe5dc89e7ef60f04a9508847b5b3a8188 +b52503f6e5411db5d1e70f5fb72ccd6463fa0f197b3e51ca79c7b5a8ab2e894f0030476ada72534fa4eb4e06c3880f90 +b51c7957a3d18c4e38f6358f2237b3904618d58b1de5dec53387d25a63772e675a5b714ad35a38185409931157d4b529 +b86b4266e719d29c043d7ec091547aa6f65bbf2d8d831d1515957c5c06513b72aa82113e9645ad38a7bc3f5383504fa6 +b95b547357e6601667b0f5f61f261800a44c2879cf94e879def6a105b1ad2bbf1795c3b98a90d588388e81789bd02681 +a58fd4c5ae4673fa350da6777e13313d5d37ed1dafeeb8f4f171549765b84c895875d9d3ae6a9741f3d51006ef81d962 +9398dc348d078a604aadc154e6eef2c0be1a93bb93ba7fe8976edc2840a3a318941338cc4d5f743310e539d9b46613d2 +902c9f0095014c4a2f0dccaaab543debba6f4cc82c345a10aaf4e72511725dbed7a34cd393a5f4e48a3e5142b7be84ed +a7c0447849bb44d04a0393a680f6cd390093484a79a147dd238f5d878030d1c26646d88211108e59fe08b58ad20c6fbd +80db045535d6e67a422519f5c89699e37098449d249698a7cc173a26ccd06f60238ae6cc7242eb780a340705c906790c +8e52b451a299f30124505de2e74d5341e1b5597bdd13301cc39b05536c96e4380e7f1b5c7ef076f5b3005a868657f17c +824499e89701036037571761e977654d2760b8ce21f184f2879fda55d3cda1e7a95306b8abacf1caa79d3cc075b9d27f +9049b956b77f8453d2070607610b79db795588c0cec12943a0f5fe76f358dea81e4f57a4692112afda0e2c05c142b26f +81911647d818a4b5f4990bfd4bc13bf7be7b0059afcf1b6839333e8569cdb0172fd2945410d88879349f677abaed5eb3 +ad4048f19b8194ed45b6317d9492b71a89a66928353072659f5ce6c816d8f21e69b9d1817d793effe49ca1874daa1096 +8d22f7b2ddb31458661abd34b65819a374a1f68c01fc6c9887edeba8b80c65bceadb8f57a3eb686374004b836261ef67 +92637280c259bc6842884db3d6e32602a62252811ae9b019b3c1df664e8809ffe86db88cfdeb8af9f46435c9ee790267 +a2f416379e52e3f5edc21641ea73dc76c99f7e29ea75b487e18bd233856f4c0183429f378d2bfc6cd736d29d6cadfa49 +882cb6b76dbdc188615dcf1a8439eba05ffca637dd25197508156e03c930b17b9fed2938506fdd7b77567cb488f96222 +b68b621bb198a763fb0634eddb93ed4b5156e59b96c88ca2246fd1aea3e6b77ed651e112ac41b30cd361fadc011d385e +a3cb22f6b675a29b2d1f827cacd30df14d463c93c3502ef965166f20d046af7f9ab7b2586a9c64f4eae4fad2d808a164 +8302d9ce4403f48ca217079762ce42cee8bc30168686bb8d3a945fbd5acd53b39f028dce757b825eb63af2d5ae41169d +b2eef1fbd1a176f1f4cd10f2988c7329abe4eb16c7405099fb92baa724ab397bc98734ef7d4b24c0f53dd90f57520d04 +a1bbef0bd684a3f0364a66bde9b29326bac7aa3dde4caed67f14fb84fed3de45c55e406702f1495a3e2864d4ee975030 +976acdb0efb73e3a3b65633197692dedc2adaed674291ae3df76b827fc866d214e9cac9ca46baefc4405ff13f953d936 +b9fbf71cc7b6690f601f0b1c74a19b7d14254183a2daaafec7dc3830cba5ae173d854bbfebeca985d1d908abe5ef0cda +90591d7b483598c94e38969c4dbb92710a1a894bcf147807f1bcbd8aa3ac210b9f2be65519aa829f8e1ccdc83ad9b8cf +a30568577c91866b9c40f0719d46b7b3b2e0b4a95e56196ac80898a2d89cc67880e1229933f2cd28ee3286f8d03414d7 +97589a88c3850556b359ec5e891f0937f922a751ac7c95949d3bbc7058c172c387611c0f4cb06351ef02e5178b3dd9e4 +98e7bbe27a1711f4545df742f17e3233fbcc63659d7419e1ca633f104cb02a32c84f2fac23ca2b84145c2672f68077ab +a7ddb91636e4506d8b7e92aa9f4720491bb71a72dadc47c7f4410e15f93e43d07d2b371951a0e6a18d1bd087aa96a5c4 +a7c006692227a06db40bceac3d5b1daae60b5692dd9b54772bedb5fea0bcc91cbcdb530cac31900ffc70c5b3ffadc969 +8d3ec6032778420dfa8be52066ba0e623467df33e4e1901dbadd586c5d750f4ccde499b5197e26b9ea43931214060f69 +8d9a8410518ea64f89df319bfd1fc97a0971cdb9ad9b11d1f8fe834042ea7f8dce4db56eeaf179ff8dda93b6db93e5ce +a3c533e9b3aa04df20b9ff635cb1154ce303e045278fcf3f10f609064a5445552a1f93989c52ce852fd0bbd6e2b6c22e +81934f3a7f8c1ae60ec6e4f212986bcc316118c760a74155d06ce0a8c00a9b9669ec4e143ca214e1b995e41271774fd9 +ab8e2d01a71192093ef8fafa7485e795567cc9db95a93fb7cc4cf63a391ef89af5e2bfad4b827fffe02b89271300407f +83064a1eaa937a84e392226f1a60b7cfad4efaa802f66de5df7498962f7b2649924f63cd9962d47906380b97b9fe80e1 +b4f5e64a15c6672e4b55417ee5dc292dcf93d7ea99965a888b1cc4f5474a11e5b6520eacbcf066840b343f4ceeb6bf33 +a63d278b842456ef15c278b37a6ea0f27c7b3ffffefca77c7a66d2ea06c33c4631eb242bbb064d730e70a8262a7b848a +83a41a83dbcdf0d22dc049de082296204e848c453c5ab1ba75aa4067984e053acf6f8b6909a2e1f0009ed051a828a73b +819485b036b7958508f15f3c19436da069cbe635b0318ebe8c014cf1ef9ab2df038c81161b7027475bcfa6fff8dd9faf +aa40e38172806e1e045e167f3d1677ef12d5dcdc89b43639a170f68054bd196c4fae34c675c1644d198907a03f76ba57 +969bae484883a9ed1fbed53b26b3d4ee4b0e39a6c93ece5b3a49daa01444a1c25727dabe62518546f36b047b311b177c +80a9e73a65da99664988b238096a090d313a0ee8e4235bc102fa79bb337b51bb08c4507814eb5baec22103ec512eaab0 +86604379aec5bddda6cbe3ef99c0ac3a3c285b0b1a15b50451c7242cd42ae6b6c8acb717dcca7917838432df93a28502 +a23407ee02a495bed06aa7e15f94cfb05c83e6d6fba64456a9bbabfa76b2b68c5c47de00ba169e710681f6a29bb41a22 +98cff5ecc73b366c6a01b34ac9066cb34f7eeaf4f38a5429bad2d07e84a237047e2a065c7e8a0a6581017dadb4695deb +8de9f68a938f441f3b7ab84bb1f473c5f9e5c9e139e42b7ccee1d254bd57d0e99c2ccda0f3198f1fc5737f6023dd204e +b0ce48d815c2768fb472a315cad86aa033d0e9ca506f146656e2941829e0acb735590b4fbc713c2d18d3676db0a954ac +82f485cdefd5642a6af58ac6817991c49fac9c10ace60f90b27f1788cc026c2fe8afc83cf499b3444118f9f0103598a8 +82c24550ed512a0d53fc56f64cc36b553823ae8766d75d772dacf038c460f16f108f87a39ceef7c66389790f799dbab3 +859ffcf1fe9166388316149b9acc35694c0ea534d43f09dae9b86f4aa00a23b27144dda6a352e74b9516e8c8d6fc809c +b8f7f353eec45da77fb27742405e5ad08d95ec0f5b6842025be9def3d9892f85eb5dd0921b41e6eff373618dba215bca +8ccca4436f9017e426229290f5cd05eac3f16571a4713141a7461acfe8ae99cd5a95bf5b6df129148693c533966145da +a2c67ecc19c0178b2994846fea4c34c327a5d786ac4b09d1d13549d5be5996d8a89021d63d65cb814923388f47cc3a03 +aa0ff87d676b418ec08f5cbf577ac7e744d1d0e9ebd14615b550eb86931eafd2a36d4732cc5d6fab1713fd7ab2f6f7c0 +8aef4730bb65e44efd6bb9441c0ae897363a2f3054867590a2c2ecf4f0224e578c7a67f10b40f8453d9f492ac15a9b2d +86a187e13d8fba5addcfdd5b0410cedd352016c930f913addd769ee09faa6be5ca3e4b1bdb417a965c643a99bd92be42 +a0a4e9632a7a094b14b29b78cd9c894218cdf6783e61671e0203865dc2a835350f465fbaf86168f28af7c478ca17bc89 +a8c7b02d8deff2cd657d8447689a9c5e2cd74ef57c1314ac4d69084ac24a7471954d9ff43fe0907d875dcb65fd0d3ce5 +97ded38760aa7be6b6960b5b50e83b618fe413cbf2bcc1da64c05140bcc32f5e0e709cd05bf8007949953fac5716bad9 +b0d293835a24d64c2ae48ce26e550b71a8c94a0883103757fb6b07e30747f1a871707d23389ba2b2065fa6bafe220095 +8f9e291bf849feaa575592e28e3c8d4b7283f733d41827262367ea1c40f298c7bcc16505255a906b62bf15d9f1ba85fb +998f4e2d12708b4fd85a61597ca2eddd750f73c9e0c9b3cf0825d8f8e01f1628fd19797dcaed3b16dc50331fc6b8b821 +b30d1f8c115d0e63bf48f595dd10908416774c78b3bbb3194192995154d80ea042d2e94d858de5f8aa0261b093c401fd +b5d9c75bb41f964cbff3f00e96d9f1480c91df8913f139f0d385d27a19f57a820f838eb728e46823cbff00e21c660996 +a6edec90b5d25350e2f5f0518777634f9e661ec9d30674cf5b156c4801746d62517751d90074830ac0f4b09911c262f1 +82f98da1264b6b75b8fbeb6a4d96d6a05b25c24db0d57ba3a38efe3a82d0d4e331b9fc4237d6494ccfe4727206457519 +b89511843453cf4ecd24669572d6371b1e529c8e284300c43e0d5bb6b3aaf35aeb634b3cb5c0a2868f0d5e959c1d0772 +a82bf065676583e5c1d3b81987aaae5542f522ba39538263a944bb33ea5b514c649344a96c0205a3b197a3f930fcda6c +a37b47ea527b7e06c460776aa662d9a49ff4149d3993f1a974b0dd165f7171770d189b0e2ea54fd5fccb6a14b116e68a +a1017677f97dda818274d47556d09d0e4ccacb23a252f82a6cfe78c630ad46fb9806307445a59fb61262182de3a2b29c +b01e9fcac239ba270e6877b79273ddd768bf8a51d2ed8a051b1c11e18eff3de5920e2fcbfbd26f06d381eddd3b1f1e1b +82fcd53d803b1c8e4ed76adc339b7f3a5962d37042b9683aabac7513ac68775d4a566a9460183926a6a95dbe7d551a1f +a763e78995d55cd21cdb7ef75d9642d6e1c72453945e346ab6690c20a4e1eeec61bb848ef830ae4b56182535e3c71d8f +b769f4db602251d4b0a1186782799bdcef66de33c110999a5775c50b349666ffd83d4c89714c4e376f2efe021a5cfdb2 +a59cbd1b785efcfa6e83fc3b1d8cf638820bc0c119726b5368f3fba9dce8e3414204fb1f1a88f6c1ff52e87961252f97 +95c8c458fd01aa23ecf120481a9c6332ebec2e8bb70a308d0576926a858457021c277958cf79017ddd86a56cacc2d7db +82eb41390800287ae56e77f2e87709de5b871c8bdb67c10a80fc65f3acb9f7c29e8fa43047436e8933f27449ea61d94d +b3ec25e3545eb83aed2a1f3558d1a31c7edde4be145ecc13b33802654b77dc049b4f0065069dd9047b051e52ab11dcdd +b78a0c715738f56f0dc459ab99e252e3b579b208142836b3c416b704ca1de640ca082f29ebbcee648c8c127df06f6b1e +a4083149432eaaf9520188ebf4607d09cf664acd1f471d4fb654476e77a9eaae2251424ffda78d09b6cb880df35c1219 +8c52857d68d6e9672df3db2df2dbf46b516a21a0e8a18eec09a6ae13c1ef8f369d03233320dd1c2c0bbe00abfc1ea18b +8c856089488803066bff3f8d8e09afb9baf20cecc33c8823c1c0836c3d45498c3de37e87c016b705207f60d2b00f8609 +831a3df39be959047b2aead06b4dcd3012d7b29417f642b83c9e8ce8de24a3dbbd29c6fdf55e2db3f7ea04636c94e403 +aed84d009f66544addabe404bf6d65af7779ce140dc561ff0c86a4078557b96b2053b7b8a43432ffb18cd814f143b9da +93282e4d72b0aa85212a77b336007d8ba071eea17492da19860f1ad16c1ea8867ccc27ef5c37c74b052465cc11ea4f52 +a7b78b8c8d057194e8d68767f1488363f77c77bddd56c3da2bc70b6354c7aa76247c86d51f7371aa38a4aa7f7e3c0bb7 +b1c77283d01dcd1bde649b5b044eac26befc98ff57cbee379fb5b8e420134a88f2fc7f0bf04d15e1fbd45d29e7590fe6 +a4aa8de70330a73b2c6458f20a1067eed4b3474829b36970a8df125d53bbdda4f4a2c60063b7cccb0c80fc155527652f +948a6c79ba1b8ad7e0bed2fae2f0481c4e41b4d9bbdd9b58164e28e9065700e83f210c8d5351d0212e0b0b68b345b3a5 +86a48c31dcbbf7b082c92d28e1f613a2378a910677d7db3a349dc089e4a1e24b12eee8e8206777a3a8c64748840b7387 +976adb1af21e0fc34148917cf43d933d7bfd3fd12ed6c37039dcd5a4520e3c6cf5868539ba5bf082326430deb8a4458d +b93e1a4476f2c51864bb4037e7145f0635eb2827ab91732b98d49b6c07f6ac443111aa1f1da76d1888665cb897c3834e +8afd46fb23bf869999fa19784b18a432a1f252d09506b8dbb756af900518d3f5f244989b3d7c823d9029218c655d3dc6 +83f1e59e3abeed18cdc632921672673f1cb6e330326e11c4e600e13e0d5bc11bdc970ae12952e15103a706fe720bf4d6 +90ce4cc660714b0b673d48010641c09c00fc92a2c596208f65c46073d7f349dd8e6e077ba7dcef9403084971c3295b76 +8b09b0f431a7c796561ecf1549b85048564de428dac0474522e9558b6065fede231886bc108539c104ce88ebd9b5d1b0 +85d6e742e2fb16a7b0ba0df64bc2c0dbff9549be691f46a6669bca05e89c884af16822b85faefefb604ec48c8705a309 +a87989ee231e468a712c66513746fcf03c14f103aadca0eac28e9732487deb56d7532e407953ab87a4bf8961588ef7b0 +b00da10efe1c29ee03c9d37d5918e391ae30e48304e294696b81b434f65cf8c8b95b9d1758c64c25e534d045ba28696f +91c0e1fb49afe46c7056400baa06dbb5f6e479db78ee37e2d76c1f4e88994357e257b83b78624c4ef6091a6c0eb8254d +883fb797c498297ccbf9411a3e727c3614af4eccde41619b773dc7f3259950835ee79453debf178e11dec4d3ada687a0 +a14703347e44eb5059070b2759297fcfcfc60e6893c0373eea069388eba3950aa06f1c57cd2c30984a2d6f9e9c92c79e +afebc7585b304ceba9a769634adff35940e89cd32682c78002822aab25eec3edc29342b7f5a42a56a1fec67821172ad5 +aea3ff3822d09dba1425084ca95fd359718d856f6c133c5fabe2b2eed8303b6e0ba0d8698b48b93136a673baac174fd9 +af2456a09aa777d9e67aa6c7c49a1845ea5cdda2e39f4c935c34a5f8280d69d4eec570446998cbbe31ede69a91e90b06 +82cada19fed16b891ef3442bafd49e1f07c00c2f57b2492dd4ee36af2bd6fd877d6cb41188a4d6ce9ec8d48e8133d697 +82a21034c832287f616619a37c122cee265cc34ae75e881fcaea4ea7f689f3c2bc8150bbf7dbcfd123522bfb7f7b1d68 +86877217105f5d0ec3eeff0289fc2a70d505c9fdf7862e8159553ef60908fb1a27bdaf899381356a4ef4649072a9796c +82b196e49c6e861089a427c0b4671d464e9d15555ffb90954cd0d630d7ae02eb3d98ceb529d00719c2526cd96481355a +a29b41d0d43d26ce76d4358e0db2b77df11f56e389f3b084d8af70a636218bd3ac86b36a9fe46ec9058c26a490f887f7 +a4311c4c20c4d7dd943765099c50f2fd423e203ccfe98ff00087d205467a7873762510cac5fdce7a308913ed07991ed7 +b1f040fc5cc51550cb2c25cf1fd418ecdd961635a11f365515f0cb4ffb31da71f48128c233e9cc7c0cf3978d757ec84e +a9ebae46f86d3bd543c5f207ed0d1aed94b8375dc991161d7a271f01592912072e083e2daf30c146430894e37325a1b9 +826418c8e17ad902b5fe88736323a47e0ca7a44bce4cbe27846ec8fe81de1e8942455dda6d30e192cdcc73e11df31256 +85199db563427c5edcbac21f3d39fec2357be91fb571982ddcdc4646b446ad5ced84410de008cb47b3477ee0d532daf8 +b7eed9cd400b2ca12bf1d9ae008214b8561fb09c8ad9ff959e626ffde00fee5ff2f5b6612e231f2a1a9b1646fcc575e3 +8b40bf12501dcbac78f5a314941326bfcddf7907c83d8d887d0bb149207f85d80cd4dfbd7935439ea7b14ea39a3fded7 +83e3041af302485399ba6cd5120e17af61043977083887e8d26b15feec4a6b11171ac5c06e6ad0971d4b58a81ff12af3 +8f5b9a0eecc589dbf8c35a65d5e996a659277ef6ea509739c0cb7b3e2da9895e8c8012de662e5b23c5fa85d4a8f48904 +835d71ed5e919d89d8e6455f234f3ff215462c4e3720c371ac8c75e83b19dfe3ae15a81547e4dc1138e5f5997f413cc9 +8b7d2e4614716b1db18e9370176ea483e6abe8acdcc3dcdf5fb1f4d22ca55d652feebdccc171c6de38398d9f7bfdec7a +93eace72036fe57d019676a02acf3d224cf376f166658c1bf705db4f24295881d477d6fdd7916efcfceff8c7a063deda +b1ac460b3d516879a84bc886c54f020a9d799e7c49af3e4d7de5bf0d2793c852254c5d8fe5616147e6659512e5ccb012 +acd0947a35cb167a48bcd9667620464b54ac0e78f9316b4aa92dcaab5422d7a732087e52e1c827faa847c6b2fe6e7766 +94ac33d21c3d12ff762d32557860e911cd94d666609ddcc42161b9c16f28d24a526e8b10bb03137257a92cec25ae637d +832e02058b6b994eadd8702921486241f9a19e68ed1406dad545e000a491ae510f525ccf9d10a4bba91c68f2c53a0f58 +9471035d14f78ff8f463b9901dd476b587bb07225c351161915c2e9c6114c3c78a501379ab6fb4eb03194c457cbd22bf +ab64593e034c6241d357fcbc32d8ea5593445a5e7c24cac81ad12bd2ef01843d477a36dc1ba21dbe63b440750d72096a +9850f3b30045e927ad3ec4123a32ed2eb4c911f572b6abb79121873f91016f0d80268de8b12e2093a4904f6e6cab7642 +987212c36b4722fe2e54fa30c52b1e54474439f9f35ca6ad33c5130cd305b8b54b532dd80ffd2c274105f20ce6d79f6e +8b4d0c6abcb239b5ed47bef63bc17efe558a27462c8208fa652b056e9eae9665787cd1aee34fbb55beb045c8bfdb882b +a9f3483c6fee2fe41312d89dd4355d5b2193ac413258993805c5cbbf0a59221f879386d3e7a28e73014f10e65dd503d9 +a2225da3119b9b7c83d514b9f3aeb9a6d9e32d9cbf9309cbb971fd53c4b2c001d10d880a8ad8a7c281b21d85ceca0b7c +a050be52e54e676c151f7a54453bbb707232f849beab4f3bf504b4d620f59ed214409d7c2bd3000f3ff13184ccda1c35 +adbccf681e15b3edb6455a68d292b0a1d0f5a4cb135613f5e6db9943f02181341d5755875db6ee474e19ace1c0634a28 +8b6eff675632a6fad0111ec72aacc61c7387380eb87933fd1d098856387d418bd38e77d897e65d6fe35951d0627c550b +aabe2328ddf90989b15e409b91ef055cb02757d34987849ae6d60bef2c902bf8251ed21ab30acf39e500d1d511e90845 +92ba4eb1f796bc3d8b03515f65c045b66e2734c2da3fc507fdd9d6b5d1e19ab3893726816a32141db7a31099ca817d96 +8a98b3cf353138a1810beb60e946183803ef1d39ac4ea92f5a1e03060d35a4774a6e52b14ead54f6794d5f4022b8685c +909f8a5c13ec4a59b649ed3bee9f5d13b21d7f3e2636fd2bb3413c0646573fdf9243d63083356f12f5147545339fcd55 +9359d914d1267633141328ed0790d81c695fea3ddd2d406c0df3d81d0c64931cf316fe4d92f4353c99ff63e2aefc4e34 +b88302031681b54415fe8fbfa161c032ea345c6af63d2fb8ad97615103fd4d4281c5a9cae5b0794c4657b97571a81d3b +992c80192a519038082446b1fb947323005b275e25f2c14c33cc7269e0ec038581cc43705894f94bad62ae33a8b7f965 +a78253e3e3eece124bef84a0a8807ce76573509f6861d0b6f70d0aa35a30a123a9da5e01e84969708c40b0669eb70aa6 +8d5724de45270ca91c94792e8584e676547d7ac1ac816a6bb9982ee854eb5df071d20545cdfd3771cd40f90e5ba04c8e +825a6f586726c68d45f00ad0f5a4436523317939a47713f78fd4fe81cd74236fdac1b04ecd97c2d0267d6f4981d7beb1 +93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8 +b5bfd7dd8cdeb128843bc287230af38926187075cbfbefa81009a2ce615ac53d2914e5870cb452d2afaaab24f3499f72185cbfee53492714734429b7b38608e23926c911cceceac9a36851477ba4c60b087041de621000edc98edada20c1def2 +b5337ba0ce5d37224290916e268e2060e5c14f3f9fc9e1ec3af5a958e7a0303122500ce18f1a4640bf66525bd10e763501fe986d86649d8d45143c08c3209db3411802c226e9fe9a55716ac4a0c14f9dcef9e70b2bb309553880dc5025eab3cc +b3c1dcdc1f62046c786f0b82242ef283e7ed8f5626f72542aa2c7a40f14d9094dd1ebdbd7457ffdcdac45fd7da7e16c51200b06d791e5e43e257e45efdf0bd5b06cd2333beca2a3a84354eb48662d83aef5ecf4e67658c851c10b13d8d87c874 +954d91c7688983382609fca9e211e461f488a5971fd4e40d7e2892037268eacdfd495cfa0a7ed6eb0eb11ac3ae6f651716757e7526abe1e06c64649d80996fd3105c20c4c94bc2b22d97045356fe9d791f21ea6428ac48db6f9e68e30d875280 +88a6b6bb26c51cf9812260795523973bb90ce80f6820b6c9048ab366f0fb96e48437a7f7cb62aedf64b11eb4dfefebb0147608793133d32003cb1f2dc47b13b5ff45f1bb1b2408ea45770a08dbfaec60961acb8119c47b139a13b8641e2c9487 +85cd7be9728bd925d12f47fb04b32d9fad7cab88788b559f053e69ca18e463113ecc8bbb6dbfb024835f901b3a957d3108d6770fb26d4c8be0a9a619f6e3a4bf15cbfd48e61593490885f6cee30e4300c5f9cf5e1c08e60a2d5b023ee94fcad0 +80477dba360f04399821a48ca388c0fa81102dd15687fea792ee8c1114e00d1bc4839ad37ac58900a118d863723acfbe08126ea883be87f50e4eabe3b5e72f5d9e041db8d9b186409fd4df4a7dde38c0e0a3b1ae29b098e5697e7f110b6b27e4 +b7a6aec08715a9f8672a2b8c367e407be37e59514ac19dd4f0942a68007bba3923df22da48702c63c0d6b3efd3c2d04e0fe042d8b5a54d562f9f33afc4865dcbcc16e99029e25925580e87920c399e710d438ac1ce3a6dc9b0d76c064a01f6f7 +ac1b001edcea02c8258aeffbf9203114c1c874ad88dae1184fadd7d94cd09053649efd0ca413400e6e9b5fa4eac33261000af88b6bd0d2abf877a4f0355d2fb4d6007adb181695201c5432e50b850b51b3969f893bddf82126c5a71b042b7686 +90043fda4de53fb364fab2c04be5296c215599105ecff0c12e4917c549257125775c29f2507124d15f56e30447f367db0596c33237242c02d83dfd058735f1e3c1ff99069af55773b6d51d32a68bf75763f59ec4ee7267932ae426522b8aaab6 +a8660ce853e9dc08271bf882e29cd53397d63b739584dda5263da4c7cc1878d0cf6f3e403557885f557e184700575fee016ee8542dec22c97befe1d10f414d22e84560741cdb3e74c30dda9b42eeaaf53e27822de2ee06e24e912bf764a9a533 +8fe3921a96d0d065e8aa8fce9aa42c8e1461ca0470688c137be89396dd05103606dab6cdd2a4591efd6addf72026c12e065da7be276dee27a7e30afa2bd81c18f1516e7f068f324d0bad9570b95f6bd02c727cd2343e26db0887c3e4e26dceda +8ae1ad97dcb9c192c9a3933541b40447d1dc4eebf380151440bbaae1e120cc5cdf1bcea55180b128d8e180e3af623815191d063cc0d7a47d55fb7687b9d87040bf7bc1a7546b07c61db5ccf1841372d7c2fe4a5431ffff829f3c2eb590b0b710 +8c2fa96870a88150f7876c931e2d3cc2adeaaaf5c73ef5fa1cf9dfa0991ae4819f9321af7e916e5057d87338e630a2f21242c29d76963cf26035b548d2a63d8ad7bd6efefa01c1df502cbdfdfe0334fb21ceb9f686887440f713bf17a89b8081 +b9aa98e2f02bb616e22ee5dd74c7d1049321ac9214d093a738159850a1dbcc7138cb8d26ce09d8296368fd5b291d74fa17ac7cc1b80840fdd4ee35e111501e3fa8485b508baecda7c1ab7bd703872b7d64a2a40b3210b6a70e8a6ffe0e5127e3 +9292db67f8771cdc86854a3f614a73805bf3012b48f1541e704ea4015d2b6b9c9aaed36419769c87c49f9e3165f03edb159c23b3a49c4390951f78e1d9b0ad997129b17cdb57ea1a6638794c0cca7d239f229e589c5ae4f9fe6979f7f8cba1d7 +91cd9e86550f230d128664f7312591fee6a84c34f5fc7aed557bcf986a409a6de722c4330453a305f06911d2728626e611acfdf81284f77f60a3a1595053a9479964fd713117e27c0222cc679674b03bc8001501aaf9b506196c56de29429b46 +a9516b73f605cc31b89c68b7675dc451e6364595243d235339437f556cf22d745d4250c1376182273be2d99e02c10eee047410a43eff634d051aeb784e76cb3605d8e079b9eb6ad1957dfdf77e1cd32ce4a573c9dfcc207ca65af6eb187f6c3d +a9667271f7d191935cc8ad59ef3ec50229945faea85bfdfb0d582090f524436b348aaa0183b16a6231c00332fdac2826125b8c857a2ed9ec66821cfe02b3a2279be2412441bc2e369b255eb98614e4be8490799c4df22f18d47d24ec70bba5f7 +a4371144d2aa44d70d3cb9789096d3aa411149a6f800cb46f506461ee8363c8724667974252f28aea61b6030c05930ac039c1ee64bb4bd56532a685cae182bf2ab935eee34718cffcb46cae214c77aaca11dbb1320faf23c47247db1da04d8dc +89a7eb441892260b7e81168c386899cd84ffc4a2c5cad2eae0d1ab9e8b5524662e6f660fe3f8bfe4c92f60b060811bc605b14c5631d16709266886d7885a5eb5930097127ec6fb2ebbaf2df65909cf48f253b3d5e22ae48d3e9a2fd2b01f447e +9648c42ca97665b5eccb49580d8532df05eb5a68db07f391a2340769b55119eaf4c52fe4f650c09250fa78a76c3a1e271799b8333cc2628e3d4b4a6a3e03da1f771ecf6516dd63236574a7864ff07e319a6f11f153406280d63af9e2b5713283 +9663bf6dd446ea7a90658ee458578d4196dc0b175ef7fcfa75f44d41670850774c2e46c5a6be132a2c072a3c0180a24f0305d1acac49d2d79878e5cda80c57feda3d01a6af12e78b5874e2a4b3717f11c97503b41a4474e2e95b179113726199 +b212aeb4814e0915b432711b317923ed2b09e076aaf558c3ae8ef83f9e15a83f9ea3f47805b2750ab9e8106cb4dc6ad003522c84b03dc02829978a097899c773f6fb31f7fe6b8f2d836d96580f216fec20158f1590c3e0d7850622e15194db05 +925f005059bf07e9ceccbe66c711b048e236ade775720d0fe479aebe6e23e8af281225ad18e62458dc1b03b42ad4ca290d4aa176260604a7aad0d9791337006fbdebe23746f8060d42876f45e4c83c3643931392fde1cd13ff8bddf8111ef974 +9553edb22b4330c568e156a59ef03b26f5c326424f830fe3e8c0b602f08c124730ffc40bc745bec1a22417adb22a1a960243a10565c2be3066bfdb841d1cd14c624cd06e0008f4beb83f972ce6182a303bee3fcbcabc6cfe48ec5ae4b7941bfc +935f5a404f0a78bdcce709899eda0631169b366a669e9b58eacbbd86d7b5016d044b8dfc59ce7ed8de743ae16c2343b50e2f925e88ba6319e33c3fc76b314043abad7813677b4615c8a97eb83cc79de4fedf6ccbcfa4d4cbf759a5a84e4d9742 +a5b014ab936eb4be113204490e8b61cd38d71da0dec7215125bcd131bf3ab22d0a32ce645bca93e7b3637cf0c2db3d6601a0ddd330dc46f9fae82abe864ffc12d656c88eb50c20782e5bb6f75d18760666f43943abb644b881639083e122f557 +935b7298ae52862fa22bf03bfc1795b34c70b181679ae27de08a9f5b4b884f824ef1b276b7600efa0d2f1d79e4a470d51692fd565c5cf8343dd80e5d3336968fc21c09ba9348590f6206d4424eb229e767547daefa98bc3aa9f421158dee3f2a +9830f92446e708a8f6b091cc3c38b653505414f8b6507504010a96ffda3bcf763d5331eb749301e2a1437f00e2415efb01b799ad4c03f4b02de077569626255ac1165f96ea408915d4cf7955047620da573e5c439671d1fa5c833fb11de7afe6 +840dcc44f673fff3e387af2bb41e89640f2a70bcd2b92544876daa92143f67c7512faf5f90a04b7191de01f3e2b1bde00622a20dc62ca23bbbfaa6ad220613deff43908382642d4d6a86999f662efd64b1df448b68c847cfa87630a3ffd2ec76 +92950c895ed54f7f876b2fda17ecc9c41b7accfbdd42c210cc5b475e0737a7279f558148531b5c916e310604a1de25a80940c94fe5389ae5d6a5e9c371be67bceea1877f5401725a6595bcf77ece60905151b6dfcb68b75ed2e708c73632f4fd +8010246bf8e94c25fd029b346b5fbadb404ef6f44a58fd9dd75acf62433d8cc6db66974f139a76e0c26dddc1f329a88214dbb63276516cf325c7869e855d07e0852d622c332ac55609ba1ec9258c45746a2aeb1af0800141ee011da80af175d4 +b0f1bad257ebd187bdc3f37b23f33c6a5d6a8e1f2de586080d6ada19087b0e2bf23b79c1b6da1ee82271323f5bdf3e1b018586b54a5b92ab6a1a16bb3315190a3584a05e6c37d5ca1e05d702b9869e27f513472bcdd00f4d0502a107773097da +9636d24f1ede773ce919f309448dd7ce023f424afd6b4b69cb98c2a988d849a283646dc3e469879daa1b1edae91ae41f009887518e7eb5578f88469321117303cd3ac2d7aee4d9cb5f82ab9ae3458e796dfe7c24284b05815acfcaa270ff22e2 +b373feb5d7012fd60578d7d00834c5c81df2a23d42794fed91aa9535a4771fde0341c4da882261785e0caca40bf83405143085e7f17e55b64f6c5c809680c20b050409bf3702c574769127c854d27388b144b05624a0e24a1cbcc4d08467005b +b15680648949ce69f82526e9b67d9b55ce5c537dc6ab7f3089091a9a19a6b90df7656794f6edc87fb387d21573ffc847062623685931c2790a508cbc8c6b231dd2c34f4d37d4706237b1407673605a604bcf6a50cc0b1a2db20485e22b02c17e +8817e46672d40c8f748081567b038a3165f87994788ec77ee8daea8587f5540df3422f9e120e94339be67f186f50952504cb44f61e30a5241f1827e501b2de53c4c64473bcc79ab887dd277f282fbfe47997a930dd140ac08b03efac88d81075 +a6e4ef6c1d1098f95aae119905f87eb49b909d17f9c41bcfe51127aa25fee20782ea884a7fdf7d5e9c245b5a5b32230b07e0dbf7c6743bf52ee20e2acc0b269422bd6cf3c07115df4aa85b11b2c16630a07c974492d9cdd0ec325a3fabd95044 +8634aa7c3d00e7f17150009698ce440d8e1b0f13042b624a722ace68ead870c3d2212fbee549a2c190e384d7d6ac37ce14ab962c299ea1218ef1b1489c98906c91323b94c587f1d205a6edd5e9d05b42d591c26494a6f6a029a2aadb5f8b6f67 +821a58092900bdb73decf48e13e7a5012a3f88b06288a97b855ef51306406e7d867d613d9ec738ebacfa6db344b677d21509d93f3b55c2ebf3a2f2a6356f875150554c6fff52e62e3e46f7859be971bf7dd9d5b3e1d799749c8a97c2e04325df +8dba356577a3a388f782e90edb1a7f3619759f4de314ad5d95c7cc6e197211446819c4955f99c5fc67f79450d2934e3c09adefc91b724887e005c5190362245eec48ce117d0a94d6fa6db12eda4ba8dde608fbbd0051f54dcf3bb057adfb2493 +a32a690dc95c23ed9fb46443d9b7d4c2e27053a7fcc216d2b0020a8cf279729c46114d2cda5772fd60a97016a07d6c5a0a7eb085a18307d34194596f5b541cdf01b2ceb31d62d6b55515acfd2b9eec92b27d082fbc4dc59fc63b551eccdb8468 +a040f7f4be67eaf0a1d658a3175d65df21a7dbde99bfa893469b9b43b9d150fc2e333148b1cb88cfd0447d88fa1a501d126987e9fdccb2852ecf1ba907c2ca3d6f97b055e354a9789854a64ecc8c2e928382cf09dda9abde42bbdf92280cdd96 +864baff97fa60164f91f334e0c9be00a152a416556b462f96d7c43b59fe1ebaff42f0471d0bf264976f8aa6431176eb905bd875024cf4f76c13a70bede51dc3e47e10b9d5652d30d2663b3af3f08d5d11b9709a0321aba371d2ef13174dcfcaf +95a46f32c994133ecc22db49bad2c36a281d6b574c83cfee6680b8c8100466ca034b815cfaedfbf54f4e75188e661df901abd089524e1e0eb0bf48d48caa9dd97482d2e8c1253e7e8ac250a32fd066d5b5cb08a8641bdd64ecfa48289dca83a3 +a2cce2be4d12144138cb91066e0cd0542c80b478bf467867ebef9ddaf3bd64e918294043500bf5a9f45ee089a8d6ace917108d9ce9e4f41e7e860cbce19ac52e791db3b6dde1c4b0367377b581f999f340e1d6814d724edc94cb07f9c4730774 +b145f203eee1ac0a1a1731113ffa7a8b0b694ef2312dabc4d431660f5e0645ef5838e3e624cfe1228cfa248d48b5760501f93e6ab13d3159fc241427116c4b90359599a4cb0a86d0bb9190aa7fabff482c812db966fd2ce0a1b48cb8ac8b3bca +adabe5d215c608696e03861cbd5f7401869c756b3a5aadc55f41745ad9478145d44393fec8bb6dfc4ad9236dc62b9ada0f7ca57fe2bae1b71565dbf9536d33a68b8e2090b233422313cc96afc7f1f7e0907dc7787806671541d6de8ce47c4cd0 +ae7845fa6b06db53201c1080e01e629781817f421f28956589c6df3091ec33754f8a4bd4647a6bb1c141ac22731e3c1014865d13f3ed538dcb0f7b7576435133d9d03be655f8fbb4c9f7d83e06d1210aedd45128c2b0c9bab45a9ddde1c862a5 +9159eaa826a24adfa7adf6e8d2832120ebb6eccbeb3d0459ffdc338548813a2d239d22b26451fda98cc0c204d8e1ac69150b5498e0be3045300e789bcb4e210d5cd431da4bdd915a21f407ea296c20c96608ded0b70d07188e96e6c1a7b9b86b +a9fc6281e2d54b46458ef564ffaed6944bff71e389d0acc11fa35d3fcd8e10c1066e0dde5b9b6516f691bb478e81c6b20865281104dcb640e29dc116daae2e884f1fe6730d639dbe0e19a532be4fb337bf52ae8408446deb393d224eee7cfa50 +84291a42f991bfb36358eedead3699d9176a38f6f63757742fdbb7f631f2c70178b1aedef4912fed7b6cf27e88ddc7eb0e2a6aa4b999f3eb4b662b93f386c8d78e9ac9929e21f4c5e63b12991fcde93aa64a735b75b535e730ff8dd2abb16e04 +a1b7fcacae181495d91765dfddf26581e8e39421579c9cbd0dd27a40ea4c54af3444a36bf85a11dda2114246eaddbdd619397424bb1eb41b5a15004b902a590ede5742cd850cf312555be24d2df8becf48f5afba5a8cd087cb7be0a521728386 +92feaaf540dbd84719a4889a87cdd125b7e995a6782911931fef26da9afcfbe6f86aaf5328fe1f77631491ce6239c5470f44c7791506c6ef1626803a5794e76d2be0af92f7052c29ac6264b7b9b51f267ad820afc6f881460521428496c6a5f1 +a525c925bfae1b89320a5054acc1fa11820f73d0cf28d273092b305467b2831fab53b6daf75fb926f332782d50e2522a19edcd85be5eb72f1497193c952d8cd0bcc5d43b39363b206eae4cb1e61668bde28a3fb2fc1e0d3d113f6dfadb799717 +98752bb6f5a44213f40eda6aa4ff124057c1b13b6529ab42fe575b9afa66e59b9c0ed563fb20dff62130c436c3e905ee17dd8433ba02c445b1d67182ab6504a90bbe12c26a754bbf734665c622f76c62fe2e11dd43ce04fd2b91a8463679058b +a9aa9a84729f7c44219ff9e00e651e50ddea3735ef2a73fdf8ed8cd271961d8ed7af5cd724b713a89a097a3fe65a3c0202f69458a8b4c157c62a85668b12fc0d3957774bc9b35f86c184dd03bfefd5c325da717d74192cc9751c2073fe9d170e +b221c1fd335a4362eff504cd95145f122bf93ea02ae162a3fb39c75583fc13a932d26050e164da97cff3e91f9a7f6ff80302c19dd1916f24acf6b93b62f36e9665a8785413b0c7d930c7f1668549910f849bca319b00e59dd01e5dec8d2edacc +a71e2b1e0b16d754b848f05eda90f67bedab37709550171551050c94efba0bfc282f72aeaaa1f0330041461f5e6aa4d11537237e955e1609a469d38ed17f5c2a35a1752f546db89bfeff9eab78ec944266f1cb94c1db3334ab48df716ce408ef +b990ae72768779ba0b2e66df4dd29b3dbd00f901c23b2b4a53419226ef9232acedeb498b0d0687c463e3f1eead58b20b09efcefa566fbfdfe1c6e48d32367936142d0a734143e5e63cdf86be7457723535b787a9cfcfa32fe1d61ad5a2617220 +8d27e7fbff77d5b9b9bbc864d5231fecf817238a6433db668d5a62a2c1ee1e5694fdd90c3293c06cc0cb15f7cbeab44d0d42be632cb9ff41fc3f6628b4b62897797d7b56126d65b694dcf3e298e3561ac8813fbd7296593ced33850426df42db +a92039a08b5502d5b211a7744099c9f93fa8c90cedcb1d05e92f01886219dd464eb5fb0337496ad96ed09c987da4e5f019035c5b01cc09b2a18b8a8dd419bc5895388a07e26958f6bd26751929c25f89b8eb4a299d822e2d26fec9ef350e0d3c +92dcc5a1c8c3e1b28b1524e3dd6dbecd63017c9201da9dbe077f1b82adc08c50169f56fc7b5a3b28ec6b89254de3e2fd12838a761053437883c3e01ba616670cea843754548ef84bcc397de2369adcca2ab54cd73c55dc68d87aec3fc2fe4f10 diff --git a/crates/orchestrator/Cargo.toml b/crates/orchestrator/Cargo.toml index 8ef6ac0e..b5b54cf3 100644 --- a/crates/orchestrator/Cargo.toml +++ b/crates/orchestrator/Cargo.toml @@ -13,6 +13,7 @@ path = "src/main.rs" [dependencies] alloy = { workspace = true } +aptos-da-client = { workspace = true, optional = true } arc-swap = { workspace = true } assert_matches = "1.5.0" async-std = "1.12.0" @@ -64,8 +65,9 @@ utils = { workspace = true } uuid = { workspace = true, features = ["v4", "serde"] } [features] -default = ["ethereum", "with_mongodb", "with_sqs"] +default = ["aptos", "ethereum", "with_mongodb", "with_sqs"] ethereum = ["ethereum-da-client"] +aptos = ["aptos-da-client"] with_mongodb = ["mongodb"] with_sqs = ["omniqueue"] diff --git a/crates/orchestrator/src/config.rs b/crates/orchestrator/src/config.rs index 66b4d285..5ae43681 100644 --- a/crates/orchestrator/src/config.rs +++ b/crates/orchestrator/src/config.rs @@ -1,5 +1,9 @@ use std::sync::Arc; +use crate::data_storage::aws_s3::config::AWSS3Config; +use crate::data_storage::aws_s3::AWSS3; +use crate::data_storage::{DataStorage, DataStorageConfig}; +use aptos_da_client::config::AptosDaConfig; use arc_swap::{ArcSwap, Guard}; use da_client_interface::{DaClient, DaConfig}; use dotenvy::dotenv; @@ -16,9 +20,6 @@ use utils::env_utils::get_env_var_or_panic; use utils::settings::default::DefaultSettingsProvider; use utils::settings::SettingsProvider; -use crate::data_storage::aws_s3::config::{AWSS3Config, AWSS3ConfigType}; -use crate::data_storage::aws_s3::AWSS3; -use crate::data_storage::{DataStorage, DataStorageConfig}; use crate::database::mongodb::config::MongoDbConfig; use crate::database::mongodb::MongoDb; use crate::database::{Database, DatabaseConfig}; @@ -154,6 +155,10 @@ pub async fn build_da_client() -> Box { let config = EthereumDaConfig::new_from_env(); Box::new(config.build_client().await) } + "aptos" => { + let config = AptosDaConfig::new_from_env(); + Box::new(config.build_client().await) + } _ => panic!("Unsupported DA layer"), } } diff --git a/crates/orchestrator/src/jobs/state_update_job/mod.rs b/crates/orchestrator/src/jobs/state_update_job/mod.rs index f9515a40..1820049c 100644 --- a/crates/orchestrator/src/jobs/state_update_job/mod.rs +++ b/crates/orchestrator/src/jobs/state_update_job/mod.rs @@ -104,7 +104,7 @@ impl Job for StateUpdateJob { // If we had a block state update failing last run, we recover from this block if let Some(last_failed_block) = job.metadata.get(JOB_METADATA_STATE_UPDATE_LAST_FAILED_BLOCK_NO) { let last_failed_block = - last_failed_block.parse().map_err(|_| StateUpdateError::LastFailedBlockNonPositive)?; + last_failed_block.parse::().map_err(|_| StateUpdateError::LastFailedBlockNonPositive)?; block_numbers = block_numbers.into_iter().filter(|&block| block >= last_failed_block).collect::>(); } diff --git a/crates/settlement-clients/aptos/src/lib.rs b/crates/settlement-clients/aptos/src/lib.rs index eab09f11..026954e2 100644 --- a/crates/settlement-clients/aptos/src/lib.rs +++ b/crates/settlement-clients/aptos/src/lib.rs @@ -204,9 +204,9 @@ mod test { use super::*; - const REGISTER_FACT: &'static str = "register_fact"; - const FACT_REGISTRY: &'static str = "fact_registry"; - const INIT_CONTRACT_STATE: &'static str = "initialize_contract_state"; + const REGISTER_FACT: &str = "register_fact"; + const FACT_REGISTRY: &str = "fact_registry"; + const INIT_CONTRACT_STATE: &str = "initialize_contract_state"; async fn aptos_init_state(settlement_client: &AptosSettlementClient) { let payload = TransactionPayload::EntryFunction(EntryFunction::new( @@ -259,7 +259,7 @@ mod test { let aptos_container = lazy_aptos_container().await.unwrap(); let node_url = aptos_container.get_node_url().await.unwrap(); - let module_account_private_key = accounts.get(0).unwrap(); + let module_account_private_key = accounts.first().unwrap(); let module_account = LocalAccount::from_private_key(module_account_private_key, 0).unwrap(); let config = AptosSettlementConfig { diff --git a/crates/settlement-clients/ethereum/src/lib.rs b/crates/settlement-clients/ethereum/src/lib.rs index 68603087..cfad0aea 100644 --- a/crates/settlement-clients/ethereum/src/lib.rs +++ b/crates/settlement-clients/ethereum/src/lib.rs @@ -99,7 +99,11 @@ impl EthereumSettlementClient { &KZG_SETTINGS, )?; - if !eval { Err(eyre!("ERROR : Assertion failed, not able to verify the proof.")) } else { Ok(kzg_proof) } + if !eval { + Err(eyre!("ERROR : Assertion failed, not able to verify the proof.")) + } else { + Ok(kzg_proof) + } } } diff --git a/crates/settlement-clients/starknet/src/lib.rs b/crates/settlement-clients/starknet/src/lib.rs index ab3eb795..3b2ed43a 100644 --- a/crates/settlement-clients/starknet/src/lib.rs +++ b/crates/settlement-clients/starknet/src/lib.rs @@ -97,6 +97,7 @@ impl SettlementClient for StarknetSettlementClient { } /// Should be used to update state on core contract when DA is done in calldata + #[allow(deprecated)] async fn update_state_calldata( &self, program_output: Vec<[u8; 32]>, diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..50eda2d4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +services: + localstack: + image: localstack/localstack:latest + environment: + - LOCALSTACK_AUTH_TOKEN=${LOCALSTACK_AUTH_TOKEN} + ports: + - "4566:4566" # LocalStack Gateway + - "4510-4559:4510-4559" # external services port range + mongodb: + image: mongo:6-jammy + ports: + - "27017:27017" + mongo-express: + image: mongo-express + environment: + - ME_CONFIG_MONGODB_SERVER=mongodb + - ME_CONFIG_MONGODB_PORT=27017 + - ME_CONFIG_MONGODB_ENABLE_ADMIN=true + - ME_CONFIG_MONGODB_AUTH_DATABASE=admin + - ME_CONFIG_MONGODB_AUTH_USERNAME=${MONGO_ROOT_USER} + - ME_CONFIG_MONGODB_AUTH_PASSWORD=${MONGO_ROOT_PASSWORD} + - ME_CONFIG_BASICAUTH_USERNAME=${MONGOEXPRESS_LOGIN} + - ME_CONFIG_BASICAUTH_PASSWORD=${MONGOEXPRESS_PASSWORD} + depends_on: + - mongodb + ports: + - "9090:8081" From 62fc57859e3d6dd2e3762c6b6de686a9d8d8afbf Mon Sep 17 00:00:00 2001 From: Heemank Verma Date: Sat, 3 Aug 2024 16:11:40 +0530 Subject: [PATCH 5/7] feat: Data Submission Worker Integration. (#51) * update: DA job draft #1 * docs: changelog updated * update: is_worker_enabled impl & usage in da_submission, removal of String from VerificationFailed * update: renamed to * update: run worker only if it's enabled using is_worker_enabled check * build: linter fixes * Update CHANGELOG.md Co-authored-by: Apoorv Sadana <95699312+apoorvsadana@users.noreply.github.com> * update: limit_to_one on get_jobs_by_status * update: removed get_last_successful_job_by_type, added get_latest_job_by_type_and_status * update: added error to job metadata * update: pr resolution, simplifying get_jobs_by_status, rejected status in verify_jobs * update: linting fixes * Update crates/orchestrator/src/jobs/mod.rs Co-authored-by: Apoorv Sadana <95699312+apoorvsadana@users.noreply.github.com> * update: removing .expect from mongodb mod file * update: fixed testcase for snos worker * chore: correct variable name * update: added support to check againt multiple status - is_worker_enabled, get_jobs_by_statuses * docs: rewrote 1 job per block assumption * docs: DataSubmissionWorker -> DataAvailabilitySynchronizer * chore: liniting fix * update: changed name : DataAvailabilitySynchronizer -> DataSubmissionWorker --------- Co-authored-by: Apoorv Sadana <95699312+apoorvsadana@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e7c7723..df987ae1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,5 +37,5 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). - `fetch_from_test` argument ## Fixed - +- - Fixed state update worker logic as per the new implementation. From 8c6ded18f3004b22e14065c662bb2551041b06ca Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Wed, 7 Aug 2024 20:17:50 +0530 Subject: [PATCH 6/7] Feat : add testing fixtures and a basic test (#52) * feat : added tests for increasing coverage * feat : added mongo db tests and fixtures and updated the ci for tests * update : removed unwanted fixtures * update : removed unwanted fixtures * update : added mongo db runner in ci * update : added mongo db runner in ci * update : added mongo db runner in ci * update : updated with new changes and ci * update : updated test cases for s3 client * update : added .env.test file in the commit * feat : added database necessary tests * feat : added database necessary tests * Revert "feat : added database necessary tests" This reverts commit 65d66e6a621f05d2151a131f19bb0fc9725aaa0b. * Revert "feat : added database necessary tests" This reverts commit 906a1eb2efa7706d593d0d065ed42132cf406465. * update: Replaced Build_Config Fixture with TestConfigBuilder * update : config update * update : test_put_and_get_data_s3 test * update: moved testconfigbuilder to tests/config.rs & added docs , drop all collections not just jobs * feat : updated test config and added config type to aws s3 config * chore: resolved pr comments * Update crates/orchestrator/src/tests/database/mod.rs Co-authored-by: 0xevolve * feat : lint fix * fix : coverage tests fix * fix : test fix --------- Co-authored-by: Heemank Verma Co-authored-by: 0xevolve --- crates/orchestrator/src/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/orchestrator/src/config.rs b/crates/orchestrator/src/config.rs index 5ae43681..1dca6759 100644 --- a/crates/orchestrator/src/config.rs +++ b/crates/orchestrator/src/config.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use crate::data_storage::aws_s3::config::AWSS3Config; +use crate::data_storage::aws_s3::config::{AWSS3Config, AWSS3ConfigType}; use crate::data_storage::aws_s3::AWSS3; use crate::data_storage::{DataStorage, DataStorageConfig}; use aptos_da_client::config::AptosDaConfig; From 2a75aef90a429feeabe6b94d938a721e017927f5 Mon Sep 17 00:00:00 2001 From: Arun Jangra Date: Wed, 7 Aug 2024 20:47:47 +0530 Subject: [PATCH 7/7] Feat : job handler tests (#67) * feat : added tests for increasing coverage * feat : added mongo db tests and fixtures and updated the ci for tests * update : removed unwanted fixtures * update : removed unwanted fixtures * update : added mongo db runner in ci * update : added mongo db runner in ci * update : added mongo db runner in ci * update : updated with new changes and ci * update : updated test cases for s3 client * update : added .env.test file in the commit * feat : added database necessary tests * feat : added database necessary tests * Revert "feat : added database necessary tests" This reverts commit 65d66e6a621f05d2151a131f19bb0fc9725aaa0b. * Revert "feat : added database necessary tests" This reverts commit 906a1eb2efa7706d593d0d065ed42132cf406465. * update: Replaced Build_Config Fixture with TestConfigBuilder * update : config update * update : test_put_and_get_data_s3 test * update: moved testconfigbuilder to tests/config.rs & added docs , drop all collections not just jobs * feat : create job test case error returning * mock job handler * feat : added jobs test and modified worker tests * feat : added queue checks to tests and revamped some tests * feat : updated tests and resolved comments * feat : updated test config and added config type to aws s3 config * feat : updated tests and test names * feat : lint fixes * feat : lint fixes * feat : lint fixes * chore: resolved pr comments * Update crates/orchestrator/src/tests/database/mod.rs Co-authored-by: 0xevolve * chore : lint fixes * feat : lint fix * fix : coverage tests fix * fix : test fix * fix : updated region in localstack .env.test * feat : updated region * debug : added debug log to github ci * feat : updated queue code for test fixes * fix : sqs region fix * debug : added debug logs for ci debugging * feat : added override endpoint to queue url in producer and consumer * feat : added override endpoint to queue url in producer and consumer * fix : removed logs and refactored the code * chore : refactor code --------- Co-authored-by: Heemank Verma Co-authored-by: apoorvsadana <95699312+apoorvsadana@users.noreply.github.com> Co-authored-by: 0xevolve